REM Player has to navigate a scary maze to find and destroy ghostly objects with a barbarian. All the while ghosts keep spawning to destroy his heart, which can be turned away with the help of timebombed imps.
REM FLAGS:
REM PLAYER_GOOD,FLAG0 - Determines which Action Point the ghosts will spawn, is randomised.
REM PLAYER_GOOD,FLAG1 - Tracks progress of amount of destroyed halloween ghosts

LEVEL_VERSION(1)
RUN_AFTER_VICTORY(1)
SET_GENERATE_SPEED(400)
START_MONEY(ALL_PLAYERS,3110)
MAX_CREATURES(ALL_PLAYERS,25)

ALLY_PLAYERS(PLAYER0,PLAYER5,1)
ALLY_PLAYERS(PLAYER_GOOD,PLAYER5,1)
COMPUTER_PLAYER(PLAYER5,ROAMING)

SET_MUSIC(4)

ROOM_AVAILABLE(ALL_PLAYERS,TREASURE,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,LAIR,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,GARDEN,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,TRAINING,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_POSSESS,1,1)

REM Heart should be open, but to hide the vision not on level start
CHANGE_SLAB_TYPE(41,36,PATH,MATCH)

REM Summoned imps are time bombed as the attack for the player.
IF(PLAYER0,IMP > 0)
	NEXT_COMMAND_REUSABLE
	USE_POWER_ON_CREATURE(PLAYER0,IMP,ANYWHERE,PLAYER0,POWER_TIME_BOMB,4,1)
ENDIF

CREATE_PARTY(Spooky0)
	ADD_TO_PARTY(Spooky0,GHOST,1,100,SNIPE_DUNGEON_HEART,600)

CREATE_PARTY(Spooky1)
	ADD_TO_PARTY(Spooky1,GHOST,1,200,SNIPE_DUNGEON_HEART,600)
	ADD_TO_PARTY(Spooky1,SPIDER,4,50,DEFEND_PARTY,600)

CREATE_PARTY(Spooky2)
	ADD_TO_PARTY(Spooky2,SPIDER,2,100,ATTACK_ROOMS,300)


REM "Ghosts have hidden Spooky things in this realm. Destroy them all."
DISPLAY_OBJECTIVE(1)
IF(PLAYER_GOOD,BATTLES_WON > 0)
	REM "You have the powers of halloween jesus and can resurrect on death. But on this hallowed eve there are limits to how often you can do so. Carefull."
	DISPLAY_INFORMATION(2)
ENDIF

REM Two ghosts spawn at the start, random locations and will attack in 30 seconds
ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,DRAWFROM(1,2,3,4,5,6,7),1)
ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,DRAWFROM(1,1,2,3,4,5,6,7),1)


REM Spawn a random ghost every 60 seconds, skip the first one
IF(PLAYER0,GAME_TURN > 1200)
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF
IF(PLAYER_GOOD,FLAG1 < 9)
	NEXT_COMMAND_REUSABLE
	RANDOMISE_FLAG(PLAYER_GOOD,FLAG0,7)
ENDIF
IF(PLAYER_GOOD,TIMER1 > 1200)
	IF(PLAYER_GOOD,FLAG0 == 1)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,1,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
	IF(PLAYER_GOOD,FLAG0 == 2)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,2,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
	IF(PLAYER_GOOD,FLAG0 == 3)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,3,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
	IF(PLAYER_GOOD,FLAG0 == 4)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,4,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
	IF(PLAYER_GOOD,FLAG0 == 5)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,5,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
	IF(PLAYER_GOOD,FLAG0 == 6)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,6,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
	IF(PLAYER_GOOD,FLAG0 == 7)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky0,7,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
	ENDIF
ENDIF

IF_SLAB_TYPE(34,48,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(31,63,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(72,64,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(62,15,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(59,13,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(32,15,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(5,34,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(51,25,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF
IF_SLAB_TYPE(25,25,LAVA)
	ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
	LEVEL_UP_CREATURE(PLAYER0,BARBARIAN,MOST_EXPERIENCED,1)
ENDIF

IF(PLAYER_GOOD,FLAG1 == 1)
	REM "You have destroyed the first of the Spooky Objects. This is like Ancient Keeper, do the same thing several more times to win. But you are stronger now so this should be easy."
	DISPLAY_OBJECTIVE(3)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky1,DRAWFROM(1,2,3,4,5,6,7),1)
ENDIF
IF(PLAYER_GOOD,FLAG1 == 2)
	CHANGE_CREATURE_OWNER(PLAYER6,SKELETON,LEAST_EXPERIENCED,PLAYER_GOOD)
	ROOM_AVAILABLE(PLAYER0,GRAVEYARD,1,1)
ENDIF
IF(PLAYER_GOOD,FLAG1 == 3)
	ADD_TO_PARTY(Spooky0,GHOST,3,100,DEFEND_PARTY,0)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SPIDER,DRAWFROM(1,2,3,4,5,6,7),2,2,100)
	PLAY_MESSAGE(PLAYER0,SPEECH,"trickortreat.mp3")
ENDIF
IF(PLAYER_GOOD,FLAG1 == 4)
	REM "You have destroyed a few Spooky Objects. More remain. Destroy them."
	DISPLAY_OBJECTIVE(4)
	REM "I will hunt you down and kill you."
	DISPLAY_MESSAGE(5,HORNY)
	SET_MUSIC(6)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,HORNY,DRAWFROM(1,2,3,4,5,6,7),1,10,0)
ENDIF
IF(PLAYER_GOOD,FLAG1 > 4)
	IF(PLAYER_GOOD,FLAG1 < 9)
		IF(PLAYER_GOOD,HORNY <= 0)
			REM "Not even death can save you from me"
			DISPLAY_MESSAGE(6,HORNY)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,HORNY,DRAWFROM(1,2,3,4,5,6,7),1,10,0)
		ENDIF
	ENDIF
ENDIF
IF(PLAYER_GOOD,FLAG1 == 5)
	MAGIC_AVAILABLE(PLAYER0,POWER_HAND,0,0)
	MAGIC_AVAILABLE(PLAYER0,POWER_HOLD_AUDIENCE,1,1)
	SET_TIMER(PLAYER_GOOD,TIMER1)
	IF(PLAYER_GOOD,TIMER1 > 300)
		REM "This is nothing less than your birthright!"
		DISPLAY_MESSAGE(7,FAIRY)
		REM "You...all humans...are the spawn of our coupling!"
		DISPLAY_MESSAGE(8,HORNY)
	ENDIF
ENDIF
IF(PLAYER_GOOD,FLAG1 >= 6)
	REM "Only a few Spooky Objects remain. You're doomed if you stay here! This place is cursed."
	DISPLAY_OBJECTIVE(9)
	MAGIC_AVAILABLE(PLAYER0,POWER_FREEZE,1,1)
	MAGIC_AVAILABLE(PLAYER0,POWER_LIGHTNING,1,1)
	MAGIC_AVAILABLE(PLAYER0,POWER_SIGHT,1,1)
	ROOM_AVAILABLE(PLAYER0,GUARD_POST,1,1)
ENDIF
IF(PLAYER_GOOD,FLAG1 >= 7)
	ROOM_AVAILABLE(PLAYER0,WORKSHOP,1,1)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_LIGHTNG,127,100,0,PLAYER0)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_WRDOFPW,130,100,0,PLAYER0)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_LIGHTNG,133,100,0,PLAYER0)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_MAGIC,136,100,0,PLAYER0)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_LIGHTNG,139,100,0,PLAYER0)
ENDIF
IF(PLAYER_GOOD,FLAG1 >= 8)
	MAGIC_AVAILABLE(PLAYER0,POWER_CALL_TO_ARMS,1,1)
	REM "Only one remains. Nothing can stand in your way."
	DISPLAY_OBJECTIVE(10)
	REM Thanks NiKneT_Art for the music
	SET_MUSIC("endgame.mp3")
	ALLY_PLAYERS(PLAYER0,PLAYER5,0)
ENDIF
IF(PLAYER_GOOD,FLAG1 >= 9)
	SET_TIMER(PLAYER0,TIMER1)
	SET_FLAG(PLAYER_GOOD,FLAG0,10)
	IF(PLAYER0,VIEW_TYPE == 1)
		WIN_GAME
	ENDIF
	IF(PLAYER0,TIMER1 >= 600)
		WIN_GAME
	ENDIF
	REM "Happy Halloween."
	DISPLAY_OBJECTIVE(11)
ENDIF

REM Some room destroying spiders
IF(PLAYER0,GAME_TURN > 3600)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,DRAWFROM(1,2,3,4,5,6,7),1)
ENDIF
IF(PLAYER0,GAME_TURN > 5000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,DRAWFROM(1,2,3,4,5,6,7),1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,DRAWFROM(1,2,3,4,5,6,7),1)
ENDIF
IF(PLAYER0,GAME_TURN > 25000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,1,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,2,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,3,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,4,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,5,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,6,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Spooky2,7,1)
ENDIF

IF(PLAYER0,BARBARIAN <= 0)
	REM "The worst part of being dead is knowing that you were never alive."
	DISPLAY_OBJECTIVE(12)
	LOSE_GAME
ENDIF

HEART_LOST_QUICK_OBJECTIVE(13,"It's all your fault.",ALL_PLAYERS)
