
LEVEL_VERSION(1)
SET_GENERATE_SPEED(500)

COMPUTER_PLAYER(PLAYER2,0)
COMPUTER_PLAYER(PLAYER3,0)
COMPUTER_PLAYER(PLAYER_GOOD,ROAMING)
COMPUTER_PLAYER(PLAYER4,ROAMING)
COMPUTER_PLAYER(PLAYER5,ROAMING)
COMPUTER_PLAYER(PLAYER6,ROAMING)

SET_TEXTURE(PLAYER0,WINTER)
SET_TEXTURE(PLAYER1,WINTER)
SET_TEXTURE(PLAYER2,LILAC_STONE)
SET_TEXTURE(PLAYER3,LILAC_STONE)
SET_TEXTURE(PLAYER_NEUTRAL,WINTER)
SET_PLAYER_COLOR(PLAYER2,ORANGE)
SET_PLAYER_COLOR(PLAYER5,WHITE)
SET_PLAYER_COLOR(PLAYER4,WHITE)
SET_PLAYER_COLOR(PLAYER6,WHITE)

MAX_CREATURES(PLAYER0,16)
MAX_CREATURES(PLAYER1,16)
MAX_CREATURES(PLAYER2,16)
MAX_CREATURES(PLAYER3,16)

ALLY_PLAYERS(PLAYER0,PLAYER1,1)
ALLY_PLAYERS(PLAYER2,PLAYER3,3)

ALLY_PLAYERS(PLAYER_GOOD,PLAYER4,3)
ALLY_PLAYERS(PLAYER_GOOD,PLAYER5,3)
ALLY_PLAYERS(PLAYER_GOOD,PLAYER6,3)
ALLY_PLAYERS(PLAYER4,PLAYER5,3)
ALLY_PLAYERS(PLAYER4,PLAYER6,3)
ALLY_PLAYERS(PLAYER5,PLAYER6,3)

START_MONEY(ALL_PLAYERS,18000)

REM -- It's Construction Time!
SET_MUSIC(5)

REM -- Assign computer personalities if no player is detected.
IF(PLAYER0,GAME_TURN > 50)
	IF(PLAYER0,VIEW_TYPE == 0)
		COMPUTER_PLAYER(PLAYER0,0)
	ENDIF
	IF(PLAYER1,VIEW_TYPE == 0)
		COMPUTER_PLAYER(PLAYER1,0)
	ENDIF
ENDIF

REM -- Restore hero alliance when white is slain. And when black is slain.
IF(PLAYER_GOOD,DUNGEON_DESTROYED == 1)
	ALLY_PLAYERS(PLAYER_GOOD,PLAYER4,3)
	ALLY_PLAYERS(PLAYER_GOOD,PLAYER5,3)
	ALLY_PLAYERS(PLAYER_GOOD,PLAYER6,3)
ENDIF
IF(PLAYER5,DUNGEON_DESTROYED == 1)
	ALLY_PLAYERS(PLAYER5,PLAYER4,3)
	ALLY_PLAYERS(PLAYER5,PLAYER_GOOD,3)
	ALLY_PLAYERS(PLAYER5,PLAYER6,3)
ENDIF

REM -- Both players lose if either dies.
IF(PLAYER0,DUNGEON_DESTROYED == 1)
	DISPLAY_PLAYER_OBJECTIVE(28,PLAYER0)
	DISPLAY_PLAYER_OBJECTIVE(25,PLAYER1,56)
	LOSE_GAME
ENDIF
IF(PLAYER1,DUNGEON_DESTROYED == 1)
	DISPLAY_PLAYER_OBJECTIVE(27,PLAYER0,57)
	DISPLAY_PLAYER_OBJECTIVE(26,PLAYER1)
	LOSE_GAME
ENDIF

REM -- Expand the creature pool over time, but remove attraction requirements.
SET_TIMER(PLAYER_GOOD,TIMER0)
IF(PLAYER_GOOD,TIMER0 > 800)
	ADD_TO_TIMER(PLAYER_GOOD,TIMER0,800)
	
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(TROLL,4)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(SORCEROR,4)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(DRUID,4)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(HELL_HOUND,4)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(MAIDEN,2)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(ORC,2)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(DRAGON,2)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(BILE_DEMON,2)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(DARK_MISTRESS,1)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(HORNY,1)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_POOL(VAMPIRE,1)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER_GOOD,TIMER0)
ENDIF
	
CREATURE_AVAILABLE(ALL_PLAYERS,TROLL,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,SORCEROR,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,DRUID,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,HELL_HOUND,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,MAIDEN,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,ORC,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,DRAGON,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,BILE_DEMON,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,DARK_MISTRESS,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,HORNY,1,999)
CREATURE_AVAILABLE(ALL_PLAYERS,VAMPIRE,1,999)

REM -- Tell players about the special portal mechanics.
IF(PLAYER0,ENTRANCE > 0)
	IF(PLAYER1,ENTRANCE > 0)
		DISPLAY_INFORMATION(14)
	ENDIF
ENDIF

REM -- Players get extremely limited access to prisons. Must find Graveyard and Scavenger on map to unlock them.
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)
ROOM_AVAILABLE(ALL_PLAYERS,RESEARCH,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,2,0)
ROOM_AVAILABLE(ALL_PLAYERS,WORKSHOP,2,0)
ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,2,0)
ROOM_AVAILABLE(ALL_PLAYERS,TORTURE,2,0)
ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,2,0)
ROOM_AVAILABLE(PLAYER2,PRISON,1,0)
ROOM_AVAILABLE(PLAYER3,PRISON,1,0)
ROOM_AVAILABLE(PLAYER2,GRAVEYARD,1,0)
ROOM_AVAILABLE(PLAYER3,GRAVEYARD,1,0)

IF(PLAYER0,GRAVEYARD > 0)
	IF(PLAYER0,FLAG0 == 0)
		TUTORIAL_FLASH_BUTTON(GRAVEYARD,50)
		SET_FLAG(PLAYER0,FLAG0,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,GRAVEYARD,1,1)
	ROOM_AVAILABLE(PLAYER1,GRAVEYARD,1,1)
ENDIF
IF(PLAYER1,GRAVEYARD > 0)
	IF(PLAYER0,FLAG0 == 0)
		TUTORIAL_FLASH_BUTTON(GRAVEYARD,50)
		SET_FLAG(PLAYER0,FLAG0,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,GRAVEYARD,1,1)
	ROOM_AVAILABLE(PLAYER1,GRAVEYARD,1,1)
ENDIF

IF(PLAYER0,SCAVENGER > 0)
	IF(PLAYER0,FLAG1 == 0)
		TUTORIAL_FLASH_BUTTON(SCAVENGER,50)
		SET_FLAG(PLAYER0,FLAG1,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,SCAVENGER,1,1)
	ROOM_AVAILABLE(PLAYER1,SCAVENGER,1,1)
ENDIF
IF(PLAYER1,SCAVENGER > 0)
	IF(PLAYER0,FLAG1 == 0)
		TUTORIAL_FLASH_BUTTON(SCAVENGER,50)
		SET_FLAG(PLAYER0,FLAG1,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,SCAVENGER,1,1)
	ROOM_AVAILABLE(PLAYER1,SCAVENGER,1,1)
ENDIF

IF(PLAYER0,BRIDGE > 0)
	IF(PLAYER0,FLAG2 == 0)
		TUTORIAL_FLASH_BUTTON(BRIDGE,50)
		SET_FLAG(PLAYER0,FLAG2,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,BRIDGE,1,1)
	ROOM_AVAILABLE(PLAYER1,BRIDGE,1,1)
ENDIF
IF(PLAYER1,BRIDGE > 0)
	IF(PLAYER0,FLAG2 == 0)
		TUTORIAL_FLASH_BUTTON(BRIDGE,50)
		SET_FLAG(PLAYER0,FLAG2,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,BRIDGE,1,1)
	ROOM_AVAILABLE(PLAYER1,BRIDGE,1,1)
ENDIF

IF(PLAYER0,PRISON > 0)
	IF(PLAYER0,FLAG3 == 0)
		TUTORIAL_FLASH_BUTTON(PRISON,50)
		SET_FLAG(PLAYER0,FLAG3,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,PRISON,1,1)
	ROOM_AVAILABLE(PLAYER1,PRISON,1,1)
ENDIF
IF(PLAYER1,PRISON > 0)
	IF(PLAYER0,FLAG3 == 0)
		TUTORIAL_FLASH_BUTTON(PRISON,50)
		SET_FLAG(PLAYER0,FLAG3,1)
	ENDIF
	ROOM_AVAILABLE(PLAYER0,PRISON,1,1)
	ROOM_AVAILABLE(PLAYER1,PRISON,1,1)
ENDIF

REM -- Players limited to a 3x4 Prison at most. When they defeat green and yellow though, they'll steal some amount more.
IF(PLAYER0,FLAG3 > 0)
	IF(PLAYER0,PRISON >= 12)
		NEXT_COMMAND_REUSABLE
		ROOM_AVAILABLE(PLAYER0,PRISON,0,0)
	ENDIF
	IF(PLAYER0,PRISON < 12)
		NEXT_COMMAND_REUSABLE
		ROOM_AVAILABLE(PLAYER0,PRISON,1,1)
	ENDIF

	IF(PLAYER1,PRISON >= 12)
		NEXT_COMMAND_REUSABLE
		ROOM_AVAILABLE(PLAYER1,PRISON,0,0)
	ENDIF
	IF(PLAYER1,PRISON < 12)
		NEXT_COMMAND_REUSABLE
		ROOM_AVAILABLE(PLAYER1,PRISON,1,1)
	ENDIF
ENDIF

REM -- Heavily nerf stun chance as player team scales in creature amount. If you fill up on junk you're gonna regret it.
IF(PLAYER1,FLAG0 <= 40)
	NEXT_COMMAND_REUSABLE
	SET_GAME_RULE(STUNGOODENEMYCHANCE,100)
	NEXT_COMMAND_REUSABLE
	SET_GAME_RULE(STUNEVILENEMYCHANCE,100)
ENDIF
IF(PLAYER1,FLAG0 >= 50)
	IF(PLAYER1,FLAG0 <= 60)
		NEXT_COMMAND_REUSABLE
		SET_GAME_RULE(STUNGOODENEMYCHANCE,50)
		NEXT_COMMAND_REUSABLE
		SET_GAME_RULE(STUNEVILENEMYCHANCE,50)
	ENDIF
	IF(PLAYER1,FLAG0 > 60)
		NEXT_COMMAND_REUSABLE
		SET_GAME_RULE(STUNGOODENEMYCHANCE,10)
		NEXT_COMMAND_REUSABLE
		SET_GAME_RULE(STUNEVILENEMYCHANCE,10)
	ENDIF
ENDIF

REM -- Most spells are found on map --- Audience, Conceal, Heal, Lightning, Protect, Rebound, Freeze, Slow, Flight.
REM -- No access to Sight, Cave-in, Walls, Disease, Armageddon, Timebomb, Tunneller or Vision.
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_OBEY,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CHICKEN,1,0)

MAGIC_AVAILABLE(PLAYER2,POWER_CONCEAL,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_CONCEAL,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_LIGHTNING,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_LIGHTNING,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_PROTECT,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_PROTECT,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_REBOUND,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_REBOUND,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_FREEZE,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_FREEZE,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_SLOW,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_SLOW,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_FLIGHT,1,0)
MAGIC_AVAILABLE(PLAYER3,POWER_FLIGHT,1,0)

REM -- One player finding a spellbook unlocks for other player as well.
IF_AVAILABLE(PLAYER0,POWER_CONCEAL > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_CONCEAL,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_CONCEAL,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_CONCEAL,100)
ENDIF
IF_AVAILABLE(PLAYER1,POWER_CONCEAL > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_CONCEAL,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_CONCEAL,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_CONCEAL,100)
ENDIF

		IF_AVAILABLE(PLAYER0,POWER_HEAL_CREATURE > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_HEAL_CREATURE,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_HEAL_CREATURE,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_HEAL_CREATURE,100)
		ENDIF
		IF_AVAILABLE(PLAYER1,POWER_HEAL_CREATURE > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_HEAL_CREATURE,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_HEAL_CREATURE,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_HEAL_CREATURE,100)
		ENDIF

IF_AVAILABLE(PLAYER0,POWER_LIGHTNING > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_LIGHTNING,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_LIGHTNING,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_LIGHTNING,100)
ENDIF
IF_AVAILABLE(PLAYER1,POWER_LIGHTNING > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_LIGHTNING,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_LIGHTNING,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_LIGHTNING,100)
ENDIF

		IF_AVAILABLE(PLAYER0,POWER_PROTECT > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_PROTECT,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_PROTECT,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_PROTECT,100)
		ENDIF
		IF_AVAILABLE(PLAYER1,POWER_PROTECT > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_PROTECT,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_PROTECT,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_PROTECT,100)
		ENDIF	

IF_AVAILABLE(PLAYER0,POWER_REBOUND > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_REBOUND,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_REBOUND,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_REBOUND,100)
ENDIF
IF_AVAILABLE(PLAYER1,POWER_REBOUND > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_REBOUND,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_REBOUND,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_REBOUND,100)
ENDIF

		IF_AVAILABLE(PLAYER0,POWER_HOLD_AUDIENCE > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_HOLD_AUDIENCE,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_HOLD_AUDIENCE,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_HOLD_AUDIENCE,100)
		ENDIF
		IF_AVAILABLE(PLAYER1,POWER_HOLD_AUDIENCE > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_HOLD_AUDIENCE,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_HOLD_AUDIENCE,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_HOLD_AUDIENCE,100)
		ENDIF

IF_AVAILABLE(PLAYER0,POWER_FREEZE > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_FREEZE,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_FREEZE,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_FREEZE,100)
ENDIF
IF_AVAILABLE(PLAYER1,POWER_FREEZE > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_FREEZE,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_FREEZE,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_FREEZE,100)
ENDIF
	
		IF_AVAILABLE(PLAYER0,POWER_SLOW > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_SLOW,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_SLOW,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_SLOW,100)
		ENDIF
		IF_AVAILABLE(PLAYER1,POWER_SLOW > 0)
			MAGIC_AVAILABLE(PLAYER0,POWER_SLOW,1,1)
			MAGIC_AVAILABLE(PLAYER1,POWER_SLOW,1,1)
			TUTORIAL_FLASH_BUTTON(POWER_SLOW,100)
		ENDIF

IF_AVAILABLE(PLAYER0,POWER_FLIGHT > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_FLIGHT,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_FLIGHT,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_FLIGHT,100)
ENDIF
IF_AVAILABLE(PLAYER1,POWER_FLIGHT > 0)
	MAGIC_AVAILABLE(PLAYER0,POWER_FLIGHT,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_FLIGHT,1,1)
	TUTORIAL_FLASH_BUTTON(POWER_FLIGHT,100)
ENDIF

REM -- Workshop availability.
TRAP_AVAILABLE(ALL_PLAYERS,ALARM,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,LIGHTNING,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,WORD_OF_POWER,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,POISON_GAS,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,SENTRY,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,BRACED,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,STEEL,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,MAGIC,1,0)

REM -- Game rules and misc changes.
SET_GAME_RULE(ALLIESSHAREDROP,1)
SET_GAME_RULE(ALLIESSHAREVISION,1)
SET_GAME_RULE(ALLIESSHARECTA,1)
SET_GAME_RULE(DISPLAYPORTALLIMIT,1)
	
SET_TRAP_CONFIGURATION(SENTRY,MODELSIZE,300)
SET_TRAP_CONFIGURATION(BALLISTA,MODELSIZE,275)

SET_CREATURE_PROPERTY(KNIGHT,LORD,0)
SET_CREATURE_CONFIGURATION(GIANT,HURTBYLAVA,0)

SET_TRAP_CONFIGURATION(POISON_GAS,HIDDEN,0)
SET_TRAP_CONFIGURATION(LIGHTNING,HIDDEN,0)
SET_TRAP_CONFIGURATION(WORD_OF_POWER,HIDDEN,0)

REM -- Hide some hero gates.
HIDE_HERO_GATE(14,1)
HIDE_HERO_GATE(15,1)
HIDE_HERO_GATE(16,1)
HIDE_HERO_GATE(17,1)
HIDE_HERO_GATE(18,1)

REM -- White has infinite money until all his treasuries are claimed.
REM -- We set a high number so physical gold in treasuries isn't depleted, and only 'offshore' money gets taken.
REM -- When all white treasuries are claimed, we rapidly deplete the gold reserves until they hit 20k. Otherwise the player would need to bash the door for ~200k worth of damage.
IF(PLAYER_GOOD,TREASURE > 0)
	IF(PLAYER_GOOD,MONEY < 200000)
		NEXT_COMMAND_REUSABLE
		ADD_GOLD_TO_PLAYER(PLAYER_GOOD,2000)
	ENDIF
ENDIF
IF(PLAYER_GOOD,TREASURE == 0)
	IF(PLAYER_GOOD,MONEY > 20000)
		NEXT_COMMAND_REUSABLE
		ADD_GOLD_TO_PLAYER(PLAYER_GOOD,-5000)
	ENDIF
ENDIF

REM -- Warn player if their AI ally appears to be engaging in a significant battle.
SET_TIMER(PLAYER0,TIMER7)
SET_TIMER(PLAYER1,TIMER7)

IF(PLAYER0,VIEW_TYPE == 0)
	IF(PLAYER0,ACTIVE_BATTLES >= 5)
		IF(PLAYER0,TIMER7 > 2000)
			NEXT_COMMAND_REUSABLE
			RANDOMISE_FLAG(PLAYER0,FLAG7,3)
		ENDIF
	ENDIF
ENDIF
IF(PLAYER1,VIEW_TYPE == 0)
	IF(PLAYER1,ACTIVE_BATTLES >= 5)
		IF(PLAYER0,TIMER7 > 2000)
			NEXT_COMMAND_REUSABLE
			RANDOMISE_FLAG(PLAYER1,FLAG7,3)
		ENDIF
	ENDIF
ENDIF

IF(PLAYER0,FLAG7 == 1)
	NEXT_COMMAND_REUSABLE
	DISPLAY_MESSAGE(29,PLAYER0)
ENDIF
IF(PLAYER0,FLAG7 == 2)
	NEXT_COMMAND_REUSABLE
	DISPLAY_MESSAGE(30,PLAYER0)
ENDIF
IF(PLAYER0,FLAG7 == 3)
	NEXT_COMMAND_REUSABLE
	DISPLAY_MESSAGE(31,PLAYER0)
ENDIF
IF(PLAYER0,FLAG7 != 0)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER0,FLAG7,0)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER0,TIMER7)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER1,TIMER7)
ENDIF

IF(PLAYER1,FLAG7 == 1)
	NEXT_COMMAND_REUSABLE
	DISPLAY_MESSAGE(32,PLAYER1)
ENDIF
IF(PLAYER1,FLAG7 == 2)
	NEXT_COMMAND_REUSABLE
	DISPLAY_MESSAGE(33,PLAYER1)
ENDIF
IF(PLAYER1,FLAG7 == 3)
	NEXT_COMMAND_REUSABLE
	DISPLAY_MESSAGE(34,PLAYER1)
ENDIF
IF(PLAYER1,FLAG7 != 0)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER1,FLAG7,0)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER0,TIMER7)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER1,TIMER7)
ENDIF

REM -- Warn player if their AI ally's heart is under attack.
IF(PLAYER1,TIMER7 > 2000)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(56,PLAYER_GOOD,ANY_CREATURE,PLAYER0,BOX1_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(56,PLAYER2,ANY_CREATURE,PLAYER0,BOX2_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(56,PLAYER3,ANY_CREATURE,PLAYER0,BOX3_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(56,PLAYER4,ANY_CREATURE,PLAYER0,BOX4_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(56,PLAYER5,ANY_CREATURE,PLAYER0,BOX5_ACTIVATED)

	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(57,PLAYER_GOOD,ANY_CREATURE,PLAYER1,BOX1_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(57,PLAYER2,ANY_CREATURE,PLAYER1,BOX2_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(57,PLAYER3,ANY_CREATURE,PLAYER1,BOX3_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(57,PLAYER4,ANY_CREATURE,PLAYER1,BOX4_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COUNT_CREATURES_AT_ACTION_POINT(57,PLAYER5,ANY_CREATURE,PLAYER1,BOX5_ACTIVATED)

	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER0,FLAG4,INCREASE,PLAYER0,BOX1_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER0,FLAG4,INCREASE,PLAYER0,BOX2_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER0,FLAG4,INCREASE,PLAYER0,BOX3_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER0,FLAG4,INCREASE,PLAYER0,BOX4_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER0,FLAG4,INCREASE,PLAYER0,BOX5_ACTIVATED)

	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG4,INCREASE,PLAYER1,BOX1_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG4,INCREASE,PLAYER1,BOX2_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG4,INCREASE,PLAYER1,BOX3_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG4,INCREASE,PLAYER1,BOX4_ACTIVATED)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG4,INCREASE,PLAYER1,BOX5_ACTIVATED)
ENDIF

IF(PLAYER0,VIEW_TYPE == 0)
	IF(PLAYER1,TIMER7 > 2000)
		IF(PLAYER0,FLAG4 > 0)
			NEXT_COMMAND_REUSABLE
			RANDOMISE_FLAG(PLAYER0,FLAG5,3)

			IF(PLAYER0,FLAG5 == 1)
				NEXT_COMMAND_REUSABLE
				DISPLAY_MESSAGE(35,PLAYER0)
			ENDIF
			IF(PLAYER0,FLAG5 == 2)
				NEXT_COMMAND_REUSABLE
				DISPLAY_MESSAGE(36,PLAYER0)
			ENDIF
			IF(PLAYER0,FLAG5 == 3)
				NEXT_COMMAND_REUSABLE
				DISPLAY_MESSAGE(37,PLAYER0)
			ENDIF
			IF(PLAYER0,FLAG5 != 0)
				NEXT_COMMAND_REUSABLE
				SET_FLAG(PLAYER0,FLAG4,0)
				NEXT_COMMAND_REUSABLE
				SET_FLAG(PLAYER0,FLAG5,0)
				NEXT_COMMAND_REUSABLE
				SET_TIMER(PLAYER0,TIMER7)
				NEXT_COMMAND_REUSABLE
				SET_TIMER(PLAYER1,TIMER7)
			ENDIF
		ENDIF
	ENDIF
ENDIF
IF(PLAYER1,VIEW_TYPE == 0)
	IF(PLAYER1,TIMER7 > 2000)
		IF(PLAYER1,FLAG4 > 0)
			NEXT_COMMAND_REUSABLE
			RANDOMISE_FLAG(PLAYER1,FLAG5,3)

			IF(PLAYER1,FLAG5 == 1)
				NEXT_COMMAND_REUSABLE
				DISPLAY_MESSAGE(35,PLAYER1)
			ENDIF
			IF(PLAYER1,FLAG5 == 2)
				NEXT_COMMAND_REUSABLE
				DISPLAY_MESSAGE(36,PLAYER1)
			ENDIF
			IF(PLAYER1,FLAG5 == 3)
				NEXT_COMMAND_REUSABLE
				DISPLAY_MESSAGE(37,PLAYER1)
			ENDIF
			IF(PLAYER1,FLAG5 != 0)
				NEXT_COMMAND_REUSABLE
				SET_FLAG(PLAYER1,FLAG4,0)
				NEXT_COMMAND_REUSABLE
				SET_FLAG(PLAYER1,FLAG5,0)
				NEXT_COMMAND_REUSABLE
				SET_TIMER(PLAYER0,TIMER7)
				NEXT_COMMAND_REUSABLE
				SET_TIMER(PLAYER1,TIMER7)
			ENDIF
		ENDIF
	ENDIF
ENDIF

REM -- Tell player about the Midas doors when they get near, reveal the treasuries, and also spawn any of the associated treasury guards.
IF_ACTION_POINT(49,PLAYER0)
	SET_FLAG(PLAYER5,BOX14_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(49,PLAYER1)
	SET_FLAG(PLAYER5,BOX14_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX14_ACTIVATED == 1)
	DISPLAY_INFORMATION(16,49)

	IF_SLAB_TYPE(13,39,DOOR_STEEL)
		IF_SLAB_TYPE(8,43,DOOR_MAGIC2)
			SET_FLAG(PLAYER5,BOX4_ACTIVATED,1)
			REVEAL_MAP_LOCATION(PLAYER0,16,-1)
			REVEAL_MAP_LOCATION(PLAYER1,16,-1)
		ENDIF
	ENDIF
	IF_SLAB_TYPE(55,63,DOOR_STEEL)
		IF_SLAB_TYPE(52,67,DOOR_STEEL2)
			SET_FLAG(PLAYER5,BOX9_ACTIVATED,1)
			REVEAL_MAP_LOCATION(PLAYER0,34,-1)
			REVEAL_MAP_LOCATION(PLAYER1,34,-1)
		ENDIF
	ENDIF
	IF_SLAB_TYPE(72,69,DOOR_MAGIC2)
		IF_SLAB_TYPE(73,77,DOOR_MAGIC2)
			IF_SLAB_TYPE(67,71,DOOR_MAGIC)
				IF_SLAB_TYPE(75,71,DOOR_MAGIC)
					SET_FLAG(PLAYER5,BOX11_ACTIVATED,1)
					REVEAL_MAP_LOCATION(PLAYER0,38,-1)
					REVEAL_MAP_LOCATION(PLAYER1,38,-1)
				ENDIF
			ENDIF
		ENDIF
	ENDIF
	IF_SLAB_TYPE(9,70,DOOR_MAGIC)
		SET_FLAG(PLAYER5,BOX6_ACTIVATED,1)
		REVEAL_MAP_LOCATION(PLAYER0,30,-1)
		REVEAL_MAP_LOCATION(PLAYER1,30,-1)
	ENDIF
	IF_SLAB_TYPE(9,76,DOOR_MAGIC)
		SET_FLAG(PLAYER5,BOX7_ACTIVATED,1)
		REVEAL_MAP_LOCATION(PLAYER0,31,-1)
		REVEAL_MAP_LOCATION(PLAYER1,31,-1)
	ENDIF
	IF_SLAB_TYPE(22,74,DOOR_MAGIC2)
		IF_SLAB_TYPE(29,79,DOOR_MAGIC2)
			SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
			REVEAL_MAP_LOCATION(PLAYER0,33,-1)
			REVEAL_MAP_LOCATION(PLAYER1,33,-1)
		ENDIF
	ENDIF
ENDIF

REM -- Map intro.
DISPLAY_PLAYER_OBJECTIVE(11,PLAYER0)
DISPLAY_PLAYER_OBJECTIVE(12,PLAYER1)
REVEAL_MAP_LOCATION(PLAYER0,-9,-1)
REVEAL_MAP_LOCATION(PLAYER1,-9,-1)
SET_TIMER(PLAYER0,TIMER0)

IF(PLAYER0,TIMER0 < 250)
	NEXT_COMMAND_REUSABLE
	ZOOM_TO_LOCATION(PLAYER0,-9)
	NEXT_COMMAND_REUSABLE
	ZOOM_TO_LOCATION(PLAYER1,-9)
ENDIF
IF(PLAYER0,TIMER0 > 250)
	IF(PLAYER0,TIMER0 < 400)
	NEXT_COMMAND_REUSABLE
	ZOOM_TO_LOCATION(PLAYER0,PLAYER1)
	NEXT_COMMAND_REUSABLE
	ZOOM_TO_LOCATION(PLAYER1,PLAYER0)
	ENDIF
ENDIF
IF(PLAYER0,TIMER0 > 400)
	ZOOM_TO_LOCATION(PLAYER0,PLAYER0)
	ZOOM_TO_LOCATION(PLAYER1,PLAYER1)
	CONCEAL_MAP_RECT(ALL_PLAYERS,310,343,80,80,0)
ENDIF
IF(PLAYER0,TIMER0 > 420)
	KILL_CREATURE(PLAYER5,AVATAR,AT_ACTION_POINT[44],1)
	KILL_CREATURE(PLAYER5,WITCH,AT_ACTION_POINT[44],2)
	KILL_CREATURE(PLAYER5,FAIRY,AT_ACTION_POINT[44],1)
ENDIF

REM -- Tell players about shared drop/vision/cta, and to help each other with fights.
IF(PLAYER0,TIMER0 > 800)
	IF(PLAYER0,ACTIVE_BATTLES > 0)
		DISPLAY_PLAYER_INFORMATION(13,PLAYER1,COMBAT[PLAYER0])
	ENDIF
	IF(PLAYER1,ACTIVE_BATTLES > 0)
		DISPLAY_PLAYER_INFORMATION(13,PLAYER0,COMBAT[PLAYER1])
	ENDIF
ENDIF

REM -- Starting troops for both players to make the starting fights a bit easier.
REM -- More creatures if player is playing solo. AI gets a level boost across all creatures also.
IF(PLAYER0,VIEW_TYPE == 0)
	SET_FLAG(PLAYER0,FLAG6,1)
ENDIF
IF(PLAYER1,VIEW_TYPE == 0)
	SET_FLAG(PLAYER0,FLAG6,2)
ENDIF

IF(PLAYER0,TIMER0 > 450)
	PLAY_MESSAGE(PLAYER0,SOUND,156)
	PLAY_MESSAGE(PLAYER1,SOUND,156)
ENDIF
IF(PLAYER0,TIMER0 > 500)
	CREATE_EFFECT(EFFECT_BALL_PUFF_RED,5)
	ADD_CREATURE_TO_LEVEL(PLAYER0,DRAWFROM(TROLL,HELL_HOUND),-10,1,2,0,JUMP)
	CREATE_EFFECT(EFFECT_BALL_PUFF_RED,6)
	ADD_CREATURE_TO_LEVEL(PLAYER0,DRAWFROM(DRUID,SORCEROR),-11,1,2,0,JUMP)
	IF(PLAYER0,FLAG6 > 0)
		CREATE_EFFECT(EFFECT_BALL_PUFF_RED,8)
		ADD_CREATURE_TO_LEVEL(PLAYER0,DRAWFROM(DRUID,SORCEROR,TROLL,HELL_HOUND),-11,1,2,0,JUMP)
	ENDIF
	CREATE_EFFECT(EFFECT_BALL_PUFF_BLUE,7)
	ADD_CREATURE_TO_LEVEL(PLAYER1,DRAWFROM(TROLL,HELL_HOUND),-12,1,2,0,JUMP)
	CREATE_EFFECT(EFFECT_BALL_PUFF_BLUE,8)
	ADD_CREATURE_TO_LEVEL(PLAYER1,DRAWFROM(DRUID,SORCEROR),-13,1,2,0,JUMP)
	IF(PLAYER0,FLAG6 > 0)
		CREATE_EFFECT(EFFECT_BALL_PUFF_BLUE,8)
		ADD_CREATURE_TO_LEVEL(PLAYER1,DRAWFROM(DRUID,SORCEROR,TROLL,HELL_HOUND),-13,1,2,0,JUMP)
	ENDIF
	PLAY_MESSAGE(PLAYER0,SOUND,488)
	PLAY_MESSAGE(PLAYER1,SOUND,488)
	ADD_CREATURE_TO_LEVEL(PLAYER0,IMP,PLAYER0,3,3,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER1,IMP,PLAYER1,3,3,0,JUMP)
ENDIF

IF(PLAYER0,TIMER0 > 535)
	CREATE_EFFECT(EFFECT_BALL_PUFF_RED,5)
	ADD_CREATURE_TO_LEVEL(PLAYER0,DRAWFROM(ORC,MAIDEN),-10,1,1,0,JUMP)
	CREATE_EFFECT(EFFECT_BALL_PUFF_RED,6)
	ADD_CREATURE_TO_LEVEL(PLAYER0,DRAWFROM(DRAGON,BILE_DEMON),-11,1,1,0,JUMP)
	IF(PLAYER0,FLAG6 > 0)
		CREATE_EFFECT(EFFECT_BALL_PUFF_RED,6)
		ADD_CREATURE_TO_LEVEL(PLAYER0,DRAWFROM(DRAGON,BILE_DEMON,ORC,MAIDEN),-10,1,1,0,JUMP)
	ENDIF
	CREATE_EFFECT(EFFECT_BALL_PUFF_BLUE,7)
	ADD_CREATURE_TO_LEVEL(PLAYER1,DRAWFROM(ORC,MAIDEN),-12,1,1,0,JUMP)
	CREATE_EFFECT(EFFECT_BALL_PUFF_BLUE,8)
	ADD_CREATURE_TO_LEVEL(PLAYER1,DRAWFROM(DRAGON,BILE_DEMON),-13,1,1,0,JUMP)
	IF(PLAYER0,FLAG6 > 0)
		CREATE_EFFECT(EFFECT_BALL_PUFF_BLUE,8)
		ADD_CREATURE_TO_LEVEL(PLAYER1,DRAWFROM(DRAGON,BILE_DEMON,ORC,MAIDEN),-12,1,1,0,JUMP)
	ENDIF
	PLAY_MESSAGE(PLAYER0,SOUND,488)
	PLAY_MESSAGE(PLAYER1,SOUND,488)
	ADD_CREATURE_TO_LEVEL(PLAYER0,IMP,PLAYER0,3,3,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER1,IMP,PLAYER1,3,3,0,JUMP)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_IMP,1,1)
ENDIF
IF(PLAYER0,TIMER0 > 570)
	HIDE_HERO_GATE(-10,1)
	HIDE_HERO_GATE(-11,1)
	HIDE_HERO_GATE(-12,1)
	HIDE_HERO_GATE(-13,1)

	IF(PLAYER0,FLAG6 == 1)
		LEVEL_UP_PLAYERS_CREATURES(PLAYER0,ANY_CREATURE,1)
	ENDIF
	IF(PLAYER0,FLAG6 == 2)
		LEVEL_UP_PLAYERS_CREATURES(PLAYER1,ANY_CREATURE,1)
	ENDIF
ENDIF

REM -- Clone Reveal Map so it can apply to both players when used.
SET_BOX_TOOLTIP_ID(0,420)
IF(PLAYER0,BOX0_ACTIVATED > 0)
	PLAY_MESSAGE(PLAYER0,SPEECH,77)
	PLAY_MESSAGE(PLAYER1,SPEECH,77)
	REVEAL_MAP_RECT(PLAYER0,172,180,400,400)
	REVEAL_MAP_RECT(PLAYER1,172,180,400,400)
ENDIF
IF(PLAYER1,BOX0_ACTIVATED > 0)
	PLAY_MESSAGE(PLAYER0,SPEECH,77)
	PLAY_MESSAGE(PLAYER1,SPEECH,77)
	REVEAL_MAP_RECT(PLAYER0,172,180,400,400)
	REVEAL_MAP_RECT(PLAYER1,172,180,400,400)
ENDIF

REM -- Custom box.
REM -- Provides both players with a respawning quantity of imps to ease money concerns.
SET_BOX_TOOLTIP_ID(10,17)
IF(PLAYER0,BOX10_ACTIVATED > 0)
	SET_TIMER(PLAYER6,TIMER0)
	SET_TIMER(PLAYER6,TIMER7)
	PLAY_MESSAGE(PLAYER0,SPEECH,80)
ENDIF
IF(PLAYER1,BOX10_ACTIVATED > 0)
	SET_TIMER(PLAYER6,TIMER0)
	SET_TIMER(PLAYER6,TIMER7)
	PLAY_MESSAGE(PLAYER1,SPEECH,80)
ENDIF
REM -- If either player has less than 8 imps at the time of activation, create a fountain of imps up to that limit. Disable shortly afterwards. Otherwise the box feels like it doesn't do anything when activated.
IF(PLAYER6,TIMER0 < 100)
	IF(PLAYER6,TIMER7 > 10)
		IF(PLAYER0,IMP <= 7)
			NEXT_COMMAND_REUSABLE
			USE_POWER_AT_LOCATION(PLAYER0,LAST_EVENT,POWER_IMP,1,1)
		ENDIF
		IF(PLAYER1,IMP <= 7)
			NEXT_COMMAND_REUSABLE
			USE_POWER_AT_LOCATION(PLAYER1,LAST_EVENT,POWER_IMP,1,1)
		ENDIF
		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER7)
		ENDIF
	ENDIF
ENDIF
REM -- The slower, consistent trickle of imps.
IF(PLAYER6,TIMER0 >= 500)
	IF(PLAYER0,IMP <= 7)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER0,PLAYER0,POWER_IMP,1,1)
	ENDIF
	IF(PLAYER1,IMP <= 7)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER1,PLAYER1,POWER_IMP,1,1)
	ENDIF
	IF(PLAYER0,GAME_TURN > 0)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER6,TIMER0)
	ENDIF
ENDIF

REM -- If player converts western temple, reward the first player with a horny creature.
REM -- It's assumed Red will get this horny, and Blue will get the imprisoned horny to the east. I implement no protections against greed though.
IF_SLAB_OWNER(26,38,PLAYER0)
	IF(PLAYER_GOOD,FLAG0 == 0)
		SET_FLAG(PLAYER_GOOD,FLAG0,1)
		CREATE_EFFECT_AT_POS(EFFECT_EXPLOSION_4,79,115,2)
		ADD_CREATURE_TO_LEVEL(PLAYER0,HORNY,1,1,6,400,NONE)
	ENDIF
ENDIF
IF_SLAB_OWNER(26,38,PLAYER1)
	IF(PLAYER_GOOD,FLAG0 == 0)
		SET_FLAG(PLAYER_GOOD,FLAG0,1)
		CREATE_EFFECT_AT_POS(EFFECT_EXPLOSION_4,79,115,2)
		ADD_CREATURE_TO_LEVEL(PLAYER1,HORNY,1,1,6,400,NONE)
	ENDIF
ENDIF

REM -- When white heart destroyed, spawn any remaining hero pockets and show the opening of black castle.
IF(PLAYER_GOOD,DUNGEON_DESTROYED == 1)
	SET_TIMER(PLAYER_GOOD,TIMER1)

	SET_FLAG(PLAYER5,BOX0_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX1_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX2_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX3_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX4_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX5_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX6_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX7_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX9_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX10_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX11_ACTIVATED,1)
	SET_FLAG(PLAYER5,BOX12_ACTIVATED,1)

	NEXT_COMMAND_REUSABLE
	CHANGE_CREATURE_OWNER(PLAYER4,ANY_CREATURE,ANYWHERE,PLAYER_GOOD)
ENDIF
IF(PLAYER_GOOD,TIMER1 > 200)
	ZOOM_TO_LOCATION(PLAYER0,2)
	ZOOM_TO_LOCATION(PLAYER1,2)
	PLAY_MESSAGE(PLAYER0,SOUND,973)
	PLAY_MESSAGE(PLAYER1,SOUND,973)
ENDIF
IF(PLAYER_GOOD,TIMER1 > 263)
	CREATE_EFFECT_AT_POS(EFFECT_FLASH,255,208,4)
ENDIF
IF(PLAYER_GOOD,TIMER1 > 265)
	CHANGE_SLAB_TYPE(85,69,PRETTY_PATH,NONE)
	CHANGE_SLAB_TYPE(87,75,PRETTY_PATH,NONE)
	USE_POWER_AT_POS(PLAYER4,255,208,POWER_LIGHTNING,6,1)
	USE_POWER_AT_POS(PLAYER5,257,208,POWER_LIGHTNING,6,1)
	USE_POWER_AT_POS(PLAYER6,261,226,POWER_LIGHTNING,6,1)
	USE_POWER_AT_POS(PLAYER_GOOD,263,226,POWER_LIGHTNING,6,1)
ENDIF

REM -- After either player steps into black castle, reveal green/yellow.
REM -- PLAYER_GOOD,FLAG1 is read by the LUA file to initiate the lava sequence.
IF_ACTION_POINT(3,PLAYER0)
	SET_FLAG(PLAYER_GOOD,FLAG2,1)
ENDIF
IF_ACTION_POINT(3,PLAYER1)
	SET_FLAG(PLAYER_GOOD,FLAG2,1)
ENDIF
IF(PLAYER_GOOD,FLAG2 == 1)
	SET_TIMER(PLAYER_GOOD,TIMER2)
ENDIF

IF(PLAYER_GOOD,TIMER2 > 320)
	PLAY_MESSAGE(PLAYER0,SOUND,180)
	PLAY_MESSAGE(PLAYER1,SOUND,180)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 385)
	ZOOM_TO_LOCATION(PLAYER0,4)
	ZOOM_TO_LOCATION(PLAYER1,4)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 400)
	DISPLAY_MESSAGE(18,PLAYER3)
	SET_FLAG(PLAYER_GOOD,FLAG1,1)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 500)
	CLEAR_MESSAGE(0)
	DISPLAY_MESSAGE(19,PLAYER2)
	PLAY_MESSAGE(PLAYER0,SPEECH,117)
	PLAY_MESSAGE(PLAYER1,SPEECH,117)
ENDIF

REM -- First set of bridges for Green/Yellow.
IF(PLAYER_GOOD,TIMER2 > 653)
	CHANGE_SLAB_TYPE(40,85,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_TYPE(34,85,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_TYPE(53,81,BRIDGE_FRAME,NONE)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 656)
	CHANGE_SLAB_TYPE(40,84,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_TYPE(34,84,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_TYPE(53,80,BRIDGE_FRAME,NONE)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 659)
	CHANGE_SLAB_TYPE(40,83,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_TYPE(34,83,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_TYPE(53,79,BRIDGE_FRAME,NONE)
	CHANGE_SLAB_OWNER(40,85,PLAYER3,MATCH)
	CHANGE_SLAB_OWNER(34,85,PLAYER3,MATCH)
	CHANGE_SLAB_OWNER(53,81,PLAYER2,MATCH)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 800)
	DISPLAY_INFORMATION(20)
ENDIF

REM -- Second set of bridges for Green/Yellow.
IF(PLAYER_GOOD,TIMER2 > 2400)
	IF_SLAB_TYPE(19,83,LAVA)
		CHANGE_SLAB_TYPE(19,83,BRIDGE_FRAME,NONE)
		CHANGE_SLAB_OWNER(19,83,PLAYER2,NONE)
	ENDIF
	IF_SLAB_TYPE(23,83,LAVA)
		CHANGE_SLAB_TYPE(23,83,BRIDGE_FRAME,NONE)
		CHANGE_SLAB_OWNER(23,83,PLAYER2,NONE)
	ENDIF
	IF_SLAB_TYPE(70,84,LAVA)
		CHANGE_SLAB_TYPE(70,84,BRIDGE_FRAME,NONE)
		CHANGE_SLAB_OWNER(70,84,PLAYER2,NONE)
	ENDIF
ENDIF
IF(PLAYER_GOOD,TIMER2 > 2403)
	IF_SLAB_TYPE(19,82,LAVA)
		CHANGE_SLAB_TYPE(19,82,BRIDGE_FRAME,NONE)
		CHANGE_SLAB_OWNER(19,82,PLAYER2,NONE)
	ENDIF
	IF_SLAB_TYPE(23,82,LAVA)
		CHANGE_SLAB_TYPE(23,82,BRIDGE_FRAME,NONE)
		CHANGE_SLAB_OWNER(23,82,PLAYER2,NONE)
	ENDIF
	IF_SLAB_TYPE(73,82,LAVA)
		CHANGE_SLAB_TYPE(73,82,BRIDGE_FRAME,NONE)
		CHANGE_SLAB_OWNER(73,82,PLAYER2,NONE)
	ENDIF
ENDIF

REM -- Minor support for Green/Yellow after they're already getting dunked on.
IF(PLAYER_GOOD,TIMER2 > 1200)
	CREATURE_ENTRANCE_LEVEL(PLAYER2,6)
	CREATURE_ENTRANCE_LEVEL(PLAYER3,6)
	SET_FLAG(PLAYER2,FLAG3,4)
	SET_FLAG(PLAYER3,FLAG3,4)
ENDIF

IF(PLAYER2,FLAG3 > 0)
	IF_CONTROLS(PLAYER2,TOTAL_CREATURES < 10)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER2,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),54,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER2,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),54,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER2,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),54,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER2,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),54,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_TO_FLAG(PLAYER2,FLAG3,-1)
	ENDIF
ENDIF

IF(PLAYER3,FLAG3 > 0)
	IF_CONTROLS(PLAYER3,TOTAL_CREATURES < 10)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER3,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),55,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER3,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),55,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER3,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),55,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER3,DRAWFROM(DRUID,SORCEROR,TROLL,ORC,HELL_HOUND,MAIDEN,SKELETON,GHOST),55,1,DRAWFROM(6~8),0,JUMP)
		NEXT_COMMAND_REUSABLE
		ADD_TO_FLAG(PLAYER3,FLAG3,-1)
	ENDIF
ENDIF

REM -- Nerf Green/Yellow if co-op is detected, because co-op players cannot save and retry the battle.
IF(PLAYER0,VIEW_TYPE != 0)
	IF(PLAYER1,VIEW_TYPE != 0)
		MAX_CREATURES(PLAYER2,14)
		MAX_CREATURES(PLAYER3,14)
		MAGIC_AVAILABLE(PLAYER2,POWER_LIGHTNING,0,0)
		MAGIC_AVAILABLE(PLAYER3,POWER_LIGHTNING,0,0)

		ADD_TO_FLAG(PLAYER2,FLAG3,2)
		ADD_TO_FLAG(PLAYER3,FLAG3,2)
	ENDIF
ENDIF

REM -- Green and Yellow ride together, die together.
REM -- Hearts cannot exceed their standard 30k max HP. This just allows one Keeper to tank two Keepers worth of heart damage.
REM -- We split this into smaller chunks so the heart size growth on 'heal' isn't as obvious.
SET_FLAG(PLAYER2,FLAG0,24)
IF(PLAYER2,FLAG0 > 0)
	IF(PLAYER2,HEART_HEALTH < 20000)
		NEXT_COMMAND_REUSABLE
		ADD_HEART_HEALTH(PLAYER2,1250)
		NEXT_COMMAND_REUSABLE
		ADD_TO_FLAG(PLAYER2,FLAG0,-1)
	ENDIF
	IF(PLAYER3,HEART_HEALTH < 20000)
		NEXT_COMMAND_REUSABLE
		ADD_HEART_HEALTH(PLAYER3,1250)
		NEXT_COMMAND_REUSABLE
		ADD_TO_FLAG(PLAYER2,FLAG0,-1)
	ENDIF
ENDIF

REM -- If Green or Yellow dies, kill the other also. Acknowledgement message (If Avatar hasn't already spawned).
IF(PLAYER2,HEART_HEALTH < 1000)
	ADD_HEART_HEALTH(PLAYER2,-32000)
	ADD_HEART_HEALTH(PLAYER3,-32000)
ENDIF
IF(PLAYER3,HEART_HEALTH < 1000)
	ADD_HEART_HEALTH(PLAYER2,-32000)
	ADD_HEART_HEALTH(PLAYER3,-32000)
ENDIF
IF(PLAYER2,DUNGEON_DESTROYED == 1)
	IF(PLAYER3,DUNGEON_DESTROYED == 1)
		IF(PLAYER5,DUNGEON_DESTROYED == 0)
			DISPLAY_OBJECTIVE(21,PLAYER5)
		ENDIF

		HIDE_HERO_GATE(-19,1)
		HIDE_HERO_GATE(-20,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER2,TIMER0)
	ENDIF
ENDIF

REM -- Small bursts of support for the beleaguered Green/Yellow alliance.
IF(PLAYER2,FLAG0 <= 16)
	ADD_CREATURE_TO_LEVEL(PLAYER2,HELL_HOUND,-19,2,9,500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER2,HELL_HOUND,-19,2,7,500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER3,HELL_HOUND,-20,2,9,500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER3,HELL_HOUND,-20,2,7,500,JUMP)
ENDIF
IF(PLAYER2,FLAG0 <= 8)
	ADD_CREATURE_TO_LEVEL(PLAYER2,HORNY,-19,2,8,1500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER2,HELL_HOUND,-19,1,9,500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER2,HELL_HOUND,-19,2,7,500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER3,HORNY,-20,2,8,1500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER3,HELL_HOUND,-20,1,9,500,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER3,HELL_HOUND,-20,2,7,500,JUMP)
ENDIF

REM -- Decoration for Green/Yellow hero gates.
SET_TIMER(PLAYER2,TIMER0)
IF(PLAYER2,TIMER0 > 30)
	NEXT_COMMAND_REUSABLE
	CREATE_EFFECTS_LINE(50,51,64,8,4,-32)
	NEXT_COMMAND_REUSABLE
	CREATE_EFFECTS_LINE(51,50,64,8,4,-32)
	NEXT_COMMAND_REUSABLE
	CREATE_EFFECTS_LINE(52,53,64,8,4,-32)
	NEXT_COMMAND_REUSABLE
	CREATE_EFFECTS_LINE(53,52,64,8,4,-32)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER2,TIMER0)
ENDIF

REM -- Limit how many Mistresses Green/Yellow can have at a time.
IF(PLAYER2,DARK_MISTRESS >= 3)
	NEXT_COMMAND_REUSABLE
	CREATURE_AVAILABLE(PLAYER2,DARK_MISTRESS,0,0)
ENDIF
IF(PLAYER2,DARK_MISTRESS < 3)
	NEXT_COMMAND_REUSABLE
	CREATURE_AVAILABLE(PLAYER2,DARK_MISTRESS,1,999)
ENDIF

IF(PLAYER3,DARK_MISTRESS >= 3)
	NEXT_COMMAND_REUSABLE
	CREATURE_AVAILABLE(PLAYER3,DARK_MISTRESS,0,0)
ENDIF
IF(PLAYER3,DARK_MISTRESS < 3)
	NEXT_COMMAND_REUSABLE
	CREATURE_AVAILABLE(PLAYER3,DARK_MISTRESS,1,999)
ENDIF

REM -- Parties and recurring attacks.
CREATE_PARTY(BRUTES1)
	ADD_TO_PARTY(BRUTES1,BARBARIAN,5,200,ATTACK_ENEMIES,-100)
	ADD_TO_PARTY(BRUTES1,GIANT,5,200,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(BRUTES1,DWARFA,4,100,DEFEND_PARTY,0)
	ADD_TO_PARTY(BRUTES1,DWARFA,4,100,DEFEND_PARTY,0)
	ADD_TO_PARTY(BRUTES1,DWARFA,4,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(BRUTES1,DWARFA,3,0,DEFEND_PARTY,0)

CREATE_PARTY(RANGERS)
	ADD_TO_PARTY(RANGERS,ARCHER,5,100,ATTACK_ENEMIES,-100)
	ADD_TO_PARTY(RANGERS,ARCHER,5,100,ATTACK_ENEMIES,-100)

CREATE_PARTY(LAVA1)
	ADD_TO_PARTY(LAVA1,FAIRY,4,150,ATTACK_ENEMIES,-100)
	ADD_TO_PARTY(LAVA1,FAIRY,3,75,DEFEND_PARTY,0)
	ADD_TO_PARTY(LAVA1,FAIRY,3,75,DEFEND_PARTY,0)

CREATE_PARTY(THUGS)
	ADD_TO_PARTY(THUGS,BARBARIAN,5,100,ATTACK_ENEMIES,-100)
	ADD_TO_PARTY(THUGS,THIEF,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(THUGS,THIEF,6,0,DEFEND_PARTY,-100)

CREATE_PARTY(BRUTES2)
	ADD_TO_PARTY(BRUTES2,BARBARIAN,7,400,ATTACK_ENEMIES,-100)
	ADD_TO_PARTY(BRUTES2,GIANT,7,400,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(BRUTES2,DWARFA,6,250,DEFEND_PARTY,0)
	ADD_TO_PARTY(BRUTES2,DWARFA,6,250,DEFEND_PARTY,0)
	ADD_TO_PARTY(BRUTES2,DWARFA,6,100,DEFEND_PARTY,0)
	ADD_TO_PARTY(BRUTES2,DWARFA,5,100,DEFEND_PARTY,0)

CREATE_PARTY(LAVA2)
	ADD_TO_PARTY(LAVA2,DRAWFROM(FAIRY,GIANT),7,450,ATTACK_ENEMIES,-100)
	ADD_TO_PARTY(LAVA2,DRAWFROM(FAIRY,GIANT),7,450,DEFEND_PARTY,0)
	ADD_TO_PARTY(LAVA2,DRAWFROM(FAIRY,GIANT),5,250,DEFEND_PARTY,0)
	ADD_TO_PARTY(LAVA2,DRAWFROM(FAIRY,GIANT),5,250,DEFEND_PARTY,0)

CREATE_PARTY(KNIGHT)
	ADD_TO_PARTY(KNIGHT,KNIGHT,7,600,ATTACK_ENEMIES,-250)
	ADD_TO_PARTY(KNIGHT,ARCHER,6,150,DEFEND_PARTY,0)
	ADD_TO_PARTY(KNIGHT,THIEF,6,150,DEFEND_PARTY,0)

CREATE_PARTY(RONIN)
	ADD_TO_PARTY(RONIN,SAMURAI,7,400,ATTACK_ENEMIES,-250)
	ADD_TO_PARTY(RONIN,SAMURAI,6,250,DEFEND_PARTY,0)
	ADD_TO_PARTY(RONIN,SAMURAI,6,250,DEFEND_PARTY,0)

CREATE_PARTY(HORNYPRISON)
	ADD_TO_PARTY(HORNYPRISON,GIANT,6,150,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(HORNYPRISON,WIZARD,5,150,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(HORNYPRISON,ARCHER,5,150,ATTACK_DUNGEON_HEART,-100)

CREATE_PARTY(PIMP)
	ADD_TO_PARTY(PIMP,WIZARD,8,600,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(PIMP,WITCH,7,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(PIMP,FAIRY,7,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(PIMP,FAIRY,7,0,DEFEND_PARTY,-100)

CREATE_PARTY(KNUCKLES)
	ADD_TO_PARTY(KNUCKLES,GIANT,6,400,ATTACK_ROOMS,-100)
	ADD_TO_PARTY(KNUCKLES,ARCHER,5,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(KNUCKLES,ARCHER,5,0,DEFEND_PARTY,-100)

CREATE_PARTY(WISEOLDMAN)
	ADD_TO_PARTY(WISEOLDMAN,WIZARD,8,1000,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(WISEOLDMAN,ARCHER,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,ARCHER,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,ARCHER,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,ARCHER,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,DWARFA,5,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,DWARFA,5,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,DWARFA,5,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(WISEOLDMAN,DWARFA,5,0,DEFEND_PARTY,-100)

CREATE_PARTY(DUMBOLDMAN)
	ADD_TO_PARTY(DUMBOLDMAN,WIZARD,7,350,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(DUMBOLDMAN,ARCHER,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(DUMBOLDMAN,DWARFA,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(DUMBOLDMAN,SAMURAI,5,0,DEFEND_PARTY,-100)

CREATE_PARTY(MOVEITSLOWPOKES)
	ADD_TO_PARTY(MOVEITSLOWPOKES,DWARFA,10,400,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(MOVEITSLOWPOKES,GIANT,9,400,DEFEND_PARTY,-100)
	ADD_TO_PARTY(MOVEITSLOWPOKES,WIZARD,9,400,DEFEND_PARTY,-100)

CREATE_PARTY(GODLOVERS)
	ADD_TO_PARTY(GODLOVERS,FAIRY,9,250,STEAL_SPELLS,-100)
	ADD_TO_PARTY(GODLOVERS,WIZARD,7,250,STEAL_SPELLS,-100)
	ADD_TO_PARTY(GODLOVERS,WITCH,7,250,STEAL_SPELLS,-100)
	ADD_TO_PARTY(GODLOVERS,MONK,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(GODLOVERS,MONK,6,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(GODLOVERS,MONK,6,0,DEFEND_PARTY,-100)

CREATE_PARTY(LUCKY)
	ADD_TO_PARTY(LUCKY,ARCHER,7,0,DRAWFROM(ATTACK_ROOMS,STEAL_GOLD),-100)
	ADD_TO_PARTY(LUCKY,BARBARIAN,7,150,DEFEND_PARTY,-100)
	ADD_TO_PARTY(LUCKY,THIEF,7,0,DEFEND_PARTY,-100)

CREATE_PARTY(CHAD)
	ADD_TO_PARTY(CHAD,KNIGHT,9,1000,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(CHAD,WITCH,7,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(CHAD,WITCH,7,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(CHAD,BARBARIAN,7,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(CHAD,BARBARIAN,7,0,DEFEND_PARTY,-100)

CREATE_PARTY(PIOUS)
	ADD_TO_PARTY(PIOUS,WITCH,10,600,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(PIOUS,MONK,9,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(PIOUS,MONK,9,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(PIOUS,MONK,9,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(PIOUS,MONK,9,300,DEFEND_PARTY,-100)

CREATE_PARTY(MCQUEEN)
	ADD_TO_PARTY(MCQUEEN,SAMURAI,10,400,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(MCQUEEN,WITCH,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(MCQUEEN,WITCH,10,300,DEFEND_PARTY,-100)

CREATE_PARTY(MINIBOSS)
	ADD_TO_PARTY(MINIBOSS,KNIGHT,10,800,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(MINIBOSS,SAMURAI,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(MINIBOSS,SAMURAI,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(MINIBOSS,WIZARD,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(MINIBOSS,ARCHER,10,300,DEFEND_PARTY,-100)

CREATE_PARTY(AVATAR)
	ADD_TO_PARTY(AVATAR,AVATAR,10,30000,ATTACK_DUNGEON_HEART,-100)
	ADD_TO_PARTY(AVATAR,WITCH,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(AVATAR,WITCH,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(AVATAR,WITCH,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(AVATAR,FAIRY,10,300,DEFEND_PARTY,-100)
	ADD_TO_PARTY(AVATAR,FAIRY,10,0,DEFEND_PARTY,-100)
	ADD_TO_PARTY(AVATAR,FAIRY,10,0,DEFEND_PARTY,-100)

CREATE_PARTY(GOLD)
	ADD_TO_PARTY(GOLD,THIEF,8,0,STEAL_GOLD,-400)
CREATE_PARTY(DISTRACT)
	ADD_TO_PARTY(DISTRACT,THIEF,10,0,SNIPE_DUNGEON_HEART,-400)
CREATE_PARTY(VANDAL1)
	ADD_TO_PARTY(VANDAL1,BARBARIAN,5,0,ATTACK_ROOMS,-400)
CREATE_PARTY(VANDAL2)
	ADD_TO_PARTY(VANDAL2,DWARFA,6,0,ATTACK_ROOMS,-400)
CREATE_PARTY(SPELLS)
	ADD_TO_PARTY(SPELLS,WITCH,6,0,STEAL_SPELLS,-400)

CREATE_PARTY(ARCH5)
	ADD_TO_PARTY(ARCH5,ARCHER,5,0,DEFEND_LOCATION,-100)
CREATE_PARTY(THIEF6)
	ADD_TO_PARTY(THIEF6,THIEF,6,0,DEFEND_LOCATION,-100)
CREATE_PARTY(MONK5)
	ADD_TO_PARTY(MONK5,MONK,5,0,DEFEND_LOCATION,-100)
CREATE_PARTY(BARB6)
	ADD_TO_PARTY(BARB6,BARBARIAN,6,0,DEFEND_LOCATION,-100)
CREATE_PARTY(DWARFA5)
	ADD_TO_PARTY(DWARFA5,DWARFA,5,0,DEFEND_LOCATION,-100)
CREATE_PARTY(WIZ7)
	ADD_TO_PARTY(WIZ7,WIZARD,7,0,DEFEND_LOCATION,-100)
CREATE_PARTY(FAE5)
	ADD_TO_PARTY(FAE5,FAIRY,5,0,DEFEND_LOCATION,-100)
CREATE_PARTY(SAM4)
	ADD_TO_PARTY(SAM4,SAMURAI,4,0,DEFEND_LOCATION,-100)
CREATE_PARTY(GIA5)
	ADD_TO_PARTY(GIA5,GIANT,5,0,DEFEND_LOCATION,-100)



REM -- First 'attacks' are simply by unlocking doors to roaming hero packs the player may have already conquered. By doing this we ensure a connection between the player and the first hero gates, so the parties cannot build up over time.
REM -- If players try to be smart or are excessively picky about their creatures, P1F1 ensures the timer isn't delayed too much.
SET_TIMER(PLAYER1,TIMER0)
IF(PLAYER1,TIMER0 > 100)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG0,SET,PLAYER0,TOTAL_CREATURES)
	NEXT_COMMAND_REUSABLE
	COMPUTE_FLAG(PLAYER1,FLAG0,INCREASE,PLAYER1,TOTAL_CREATURES)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER1,TIMER0)
ENDIF
IF(PLAYER1,FLAG0 >= 14)
	SET_DOOR(UNLOCKED,30,19)
	SET_DOOR(UNLOCKED,92,55)
ENDIF
IF(PLAYER1,FLAG0 >= 22)
	IF(PLAYER0,GAME_TURN > 8000)
		SET_FLAG(PLAYER1,FLAG1,1)
	ENDIF
ENDIF
IF(PLAYER1,GAME_TURN > 12000)
	SET_FLAG(PLAYER1,FLAG1,1)
ENDIF
IF(PLAYER1,FLAG1 > 0)
	SET_DOOR(UNLOCKED,23,22)
	SET_DOOR(UNLOCKED,40,25)
	SET_DOOR(UNLOCKED,86,30)
	SET_DOOR(UNLOCKED,83,50)
	SET_TIMER(PLAYER6,TIMER1)
ENDIF

REM -- All recurring spawns compound on top of the previous others. The game shouldn't go long enough for the later tiers to even spawn, but if it does, you're gonna increasingly regret it.
REM -- Recurring spawns, north-west gate (-1)
IF_SLAB_OWNER(22,43,PLAYER_GOOD)
	ADD_PARTY_TO_LEVEL(PLAYER4,THIEF6,-1,3)
	IF(PLAYER6,TIMER1 > DRAWFROM(8500~9250))
		IF(PLAYER6,FLAG1 <= 4)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BRUTES1,-1,1)
			SET_TIMER(PLAYER6,TIMER2)
		ENDIF
		IF(PLAYER6,FLAG1 >= 2)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-1,3,4,100,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BARB6,-1,1)
		ENDIF
		IF(PLAYER6,FLAG1 >= 4)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DWARFA,-1,3,6,100,JUMP)
		ENDIF
		IF(PLAYER6,FLAG1 >= 5)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[5],2)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[5],2)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[5],1)
		ENDIF
		IF(PLAYER6,FLAG1 >= 6)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BRUTES2,-1,1)
		ENDIF
		IF(PLAYER6,FLAG1 >= 7)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[5],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[5],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[5],1)
		ENDIF
		IF(PLAYER6,FLAG1 >= 10)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BRUTES1,-1,1)
		ENDIF

		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER6,FLAG1,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER1)
		ENDIF
	ENDIF
ENDIF
IF_SLAB_OWNER(22,43,PLAYER0)
	HIDE_HERO_GATE(-1,1)
ENDIF
IF_SLAB_OWNER(22,43,PLAYER1)
	HIDE_HERO_GATE(-1,1)
ENDIF

REM -- Recurring spawns, north-east gate (-2)
IF_SLAB_OWNER(61,47,PLAYER_GOOD)
	ADD_PARTY_TO_LEVEL(PLAYER4,MONK5,-2,2)
	IF(PLAYER6,TIMER2 > DRAWFROM(7000~7500))
		IF(PLAYER6,FLAG2 >= 0)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LAVA1,-2,1)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,ARCH5,-2,1)
			SET_TIMER(PLAYER6,TIMER3)
			SET_TIMER(PLAYER6,TIMER4)
		ENDIF
		IF(PLAYER6,FLAG2 >= 2)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,-2,1,5,200,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,SAM4,-2,1)
		ENDIF
		IF(PLAYER6,FLAG2 >= 5)
			SET_DOOR(UNLOCKED,63,33)
		ENDIF
		IF(PLAYER6,FLAG2 >= 7)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[6],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[6],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[6],1)
		ENDIF
		IF(PLAYER6,FLAG2 >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,-2,2,6,250,JUMP)
		ENDIF
		IF(PLAYER6,FLAG2 >= 11)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[6],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[6],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[6],1)
		ENDIF
		IF(PLAYER6,FLAG2 >= 14)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LAVA2,-2,1)
		ENDIF

		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER6,FLAG2,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER2)
		ENDIF
	ENDIF
ENDIF
IF_SLAB_OWNER(61,47,PLAYER0)
	HIDE_HERO_GATE(-2,1)
ENDIF
IF_SLAB_OWNER(61,47,PLAYER1)
	HIDE_HERO_GATE(-2,1)
ENDIF

REM -- Recurring spawns, mid-west gate (-3)
IF_SLAB_OWNER(5,61,PLAYER_GOOD)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,-3,2)
	IF(PLAYER6,TIMER3 > DRAWFROM(8000~9500))
		IF(PLAYER6,FLAG3 >= 0)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LAVA1,-3,1)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,DWARFA5,-3,1)
		ENDIF
		IF(PLAYER6,FLAG3 >= 2)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,-3,1,5,200,JUMP)
		ENDIF
		IF(PLAYER6,FLAG3 >= 5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-3,1)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-3,1)
		ENDIF
		IF(PLAYER6,FLAG3 >= 7)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[7],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[7],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[7],1)
		ENDIF
		IF(PLAYER6,FLAG3 >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,-3,2,6,250,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-3,1)
		ENDIF
		IF(PLAYER6,FLAG3 >= 11)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[7],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[7],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[7],1)
		ENDIF
		IF(PLAYER6,FLAG3 >= 14)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,KNIGHT,-3,1)
		ENDIF

		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER6,FLAG3,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER3)
		ENDIF
	ENDIF
ENDIF
IF_SLAB_OWNER(5,61,PLAYER0)
	HIDE_HERO_GATE(-3,1)
ENDIF
IF_SLAB_OWNER(5,61,PLAYER1)
	HIDE_HERO_GATE(-3,1)
ENDIF

REM -- Recurring spawns, mid-east gate (-4)
IF_SLAB_OWNER(85,58,PLAYER_GOOD)
	ADD_PARTY_TO_LEVEL(PLAYER4,GIA5,-4,3)
	IF(PLAYER6,TIMER4 > DRAWFROM(5000~6500))
		IF(PLAYER6,FLAG4 >= 0)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(VANDAL1,VANDAL2),-4,3)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,DRAWFROM(ARCH5,GIA5),-4,1)
		ENDIF
		IF(PLAYER6,FLAG4 >= 2)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-4,2,4,200,JUMP)
		ENDIF
		IF(PLAYER6,FLAG4 >= 5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-4,3)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-4,3)
		ENDIF
		IF(PLAYER6,FLAG4 >= 7)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[8],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[8],1)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[8],2)
		ENDIF
		IF(PLAYER6,FLAG4 >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,MONK,-4,3,4,200,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-4,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GOLD,SPELLS,VANDAL1,VANDAL2),-4,2)
		ENDIF
		IF(PLAYER6,FLAG4 >= 11)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[8],2)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[8],2)
			NEXT_COMMAND_REUSABLE
			LEVEL_UP_CREATURE(PLAYER_GOOD,ANY_CREATURE,AT_ACTION_POINT[8],2)
		ENDIF
		IF(PLAYER6,FLAG4 >= 12)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,RONIN,-4,1)
		ENDIF

		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER6,FLAG4,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER4)
		ENDIF
	ENDIF
ENDIF
IF_SLAB_OWNER(85,58,PLAYER0)
	HIDE_HERO_GATE(-4,1)
ENDIF
IF_SLAB_OWNER(85,58,PLAYER1)
	HIDE_HERO_GATE(-4,1)
ENDIF

REM -- Recurring spawns, south-west gate (-5)
IF(PLAYER5,BOX15_ACTIVATED == 1)
	SET_TIMER(PLAYER6,TIMER5)
	SET_TIMER(PLAYER6,TIMER6)
ENDIF

IF_SLAB_OWNER(14,73,PLAYER_GOOD)
	IF(PLAYER6,TIMER5 > DRAWFROM(6000~7500))
		IF(PLAYER6,FLAG5 >= 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WIZARD,-5,2,7,200,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,WIZ7,-5,1)
		ENDIF
		IF(PLAYER6,FLAG5 >= 2)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-5,2,8,0,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,FAE5,-5,1)
		ENDIF
		IF(PLAYER6,FLAG5 >= 5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DUMBOLDMAN,-5,1)
		ENDIF
		IF(PLAYER6,FLAG5 >= 8)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,TIME_MAGE,-5,3,9,300,JUMP)
		ENDIF

		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER6,FLAG5,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER5)
		ENDIF
	ENDIF
ENDIF
IF_SLAB_OWNER(14,73,PLAYER0)
	HIDE_HERO_GATE(-5,1)
ENDIF
IF_SLAB_OWNER(14,73,PLAYER1)
	HIDE_HERO_GATE(-5,1)
ENDIF

REM -- Recurring spawns, south-east gate (-6)
IF_SLAB_OWNER(68,75,PLAYER_GOOD)
	IF(PLAYER6,TIMER6 > DRAWFROM(6000~7500))
		IF(PLAYER6,FLAG6 >= 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,-6,2,7,200,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-6,2,7,200,JUMP)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER4,GIA5,-6,2)
		ENDIF
		IF(PLAYER6,FLAG6 >= 3)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-6,3,9,150,JUMP)
		ENDIF
		IF(PLAYER6,FLAG6 >= 5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,MOVEITSLOWPOKES,-6,1)
		ENDIF
		IF(PLAYER6,FLAG6 >= 7)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,RONIN,-6,1)
		ENDIF

		IF(PLAYER0,GAME_TURN > 0)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER6,FLAG6,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER6,TIMER6)
		ENDIF
	ENDIF
ENDIF
IF_SLAB_OWNER(68,75,PLAYER0)
	HIDE_HERO_GATE(-6,1)
ENDIF
IF_SLAB_OWNER(68,75,PLAYER1)
	HIDE_HERO_GATE(-6,1)
ENDIF

REM -- These would typically be preplaced heroes standing around in rooms, but for performance reasons we add them via APs to reduce the number of creatures on the map at a time.
REM -- We converted some of them to parties to reduce the conga-line look, and make it more interesting with party objectives.
REM -- We're using box_activated instead of flags just for clarity. Otherwise we'd hit flag limitations, have to switch between players, and it'd just get messy to read.
REM -- We could combine some of these IFs into others, but since we don't hit the limit we'll leave them separate for the readability.

REM -- Center fortress, east-side, near Horny prison.
IF_ACTION_POINT(9,PLAYER0)
	SET_FLAG(PLAYER5,BOX0_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(9,PLAYER1)
	SET_FLAG(PLAYER5,BOX0_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(84,40,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX0_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX0_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,HORNYPRISON,-14,2)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,-14,1,6,200,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-14,1,6,200,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WIZARD,-14,1,4,100,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-14,1,4,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-14,2,3,0,JUMP)
ENDIF

REM -- Center fortress, east-side, near workshop.
IF_ACTION_POINT(9,PLAYER0)
	SET_FLAG(PLAYER5,BOX1_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(9,PLAYER1)
	SET_FLAG(PLAYER5,BOX1_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(47,37,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX1_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX1_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,RANGERS,11,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,THUGS,11,1)
ENDIF

REM -- Center fortress, middle, right herogate.
IF_ACTION_POINT(13,PLAYER0)
	SET_FLAG(PLAYER5,BOX2_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(13,PLAYER1)
	SET_FLAG(PLAYER5,BOX2_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(59,34,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX2_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX2_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,PIMP,-15,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,KNUCKLES,-15,1)
ENDIF

REM -- Center fortress, middle room and hallways.
IF_ACTION_POINT(13,PLAYER0)
	SET_FLAG(PLAYER5,BOX3_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(13,PLAYER1)
	SET_FLAG(PLAYER5,BOX3_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX3_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WISEOLDMAN,14,1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,10,1,6,150,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,10,1,7,150,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,10,2,6,150,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,10,1,6,150,JUMP)
ENDIF

REM -- Center fortress, west-side, temple.
IF_ACTION_POINT(12,PLAYER0)
	SET_FLAG(PLAYER5,BOX4_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(12,PLAYER1)
	SET_FLAG(PLAYER5,BOX4_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(13,PLAYER0)
	SET_FLAG(PLAYER5,BOX4_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(13,PLAYER1)
	SET_FLAG(PLAYER5,BOX4_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX4_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,HORNYPRISON,-16,1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-16,2,6,150,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-16,1,7,150,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-16,1,4,0,JUMP)
ENDIF

REM -- Center fortress, west-side, treasury and bottom antechamber.
IF_ACTION_POINT(12,PLAYER0)
	SET_FLAG(PLAYER5,BOX5_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(12,PLAYER1)
	SET_FLAG(PLAYER5,BOX5_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX5_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GOLD,16,4)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,16,1,6,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,16,2,4,0,JUMP)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DUMBOLDMAN,-17,2)
ENDIF

REM -- Bottom fortress, patrollers in hallways.
IF_SLAB_TYPE(14,59,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX15_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(29,60,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX15_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(40,66,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX15_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(58,60,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX15_ACTIVATED,1)
ENDIF
IF_SLAB_TYPE(68,59,PRETTY_PATH)
	SET_FLAG(PLAYER5,BOX15_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX15_ACTIVATED == 1)
	SET_TIMER(PLAYER0,TIMER1)
	IF(PLAYER0,TIMER1 > 150)
		DISPLAY_OBJECTIVE(15,PLAYER_GOOD)
		TUTORIAL_FLASH_BUTTON(78,100)

		REVEAL_MAP_RECT(PLAYER0,256,208,24,9)
		REVEAL_MAP_RECT(PLAYER0,256,208,9,24)
		REVEAL_MAP_RECT(PLAYER0,256,208,18,18)
		REVEAL_MAP_RECT(PLAYER1,256,208,24,9)
		REVEAL_MAP_RECT(PLAYER1,256,208,9,24)
		REVEAL_MAP_RECT(PLAYER1,256,208,18,18)

		REVEAL_MAP_RECT(PLAYER0,262,226,24,9)
		REVEAL_MAP_RECT(PLAYER0,262,226,9,24)
		REVEAL_MAP_RECT(PLAYER0,262,226,18,18)
		REVEAL_MAP_RECT(PLAYER1,262,226,24,9)
		REVEAL_MAP_RECT(PLAYER1,262,226,9,24)
		REVEAL_MAP_RECT(PLAYER1,262,226,18,18)

		REVEAL_MAP_LOCATION(PLAYER0,PLAYER_GOOD,-1)
		REVEAL_MAP_LOCATION(PLAYER0,PLAYER5,-1)

		REVEAL_MAP_LOCATION(PLAYER1,PLAYER_GOOD,-1)
		REVEAL_MAP_LOCATION(PLAYER1,PLAYER5,-1)
	ENDIF

	ADD_PARTY_TO_LEVEL(PLAYER4,ARCH5,15,1)
	ADD_PARTY_TO_LEVEL(PLAYER4,DWARFA5,15,1)
	ADD_PARTY_TO_LEVEL(PLAYER4,SAM4,15,2)

	ADD_PARTY_TO_LEVEL(PLAYER4,WIZ7,17,2)
	ADD_PARTY_TO_LEVEL(PLAYER4,FAE5,17,3)
	ADD_PARTY_TO_LEVEL(PLAYER4,MONK5,17,2)

	ADD_PARTY_TO_LEVEL(PLAYER4,ARCH5,18,2)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,18,2)

	ADD_PARTY_TO_LEVEL(PLAYER4,DWARFA5,19,4)

	ADD_PARTY_TO_LEVEL(PLAYER4,MONK5,20,2)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,20,2)

	ADD_PARTY_TO_LEVEL(PLAYER4,ARCH5,21,1)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,21,2)

	ADD_PARTY_TO_LEVEL(PLAYER4,GIA5,DRAWFROM(22,24),2)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,DRAWFROM(22,24),2)
	ADD_PARTY_TO_LEVEL(PLAYER4,ARCH5,DRAWFROM(22,24),1)

	ADD_PARTY_TO_LEVEL(PLAYER4,GIA5,23,3)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,23,1)
	ADD_PARTY_TO_LEVEL(PLAYER4,THIEF6,23,1)

	ADD_PARTY_TO_LEVEL(PLAYER4,THIEF6,25,4)
	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,25,1)

	ADD_PARTY_TO_LEVEL(PLAYER4,GIA5,26,3)
	ADD_PARTY_TO_LEVEL(PLAYER4,DWARFA5,26,2)

	ADD_PARTY_TO_LEVEL(PLAYER4,ARCH5,27,3)

	ADD_PARTY_TO_LEVEL(PLAYER4,BARB6,28,1)
	ADD_PARTY_TO_LEVEL(PLAYER4,DWARFA5,28,3)
ENDIF

REM -- Bottom fortress, west side, top treasury.
IF_ACTION_POINT(18,PLAYER0)
	SET_FLAG(PLAYER5,BOX6_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(18,PLAYER1)
	SET_FLAG(PLAYER5,BOX6_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX6_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,MOVEITSLOWPOKES,30,2)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,30,1,9,400,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,30,1,8,0,JUMP)
ENDIF

REM -- Bottom fortress, west side, bottom-left treasury.
IF_ACTION_POINT(19,PLAYER0)
	SET_FLAG(PLAYER5,BOX7_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(19,PLAYER1)
	SET_FLAG(PLAYER5,BOX7_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX7_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,MOVEITSLOWPOKES,31,1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DWARFA,31,1,10,300,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,31,2,7,100,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,31,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,31,1,8,0,JUMP)
ENDIF

REM -- Bottom fortress, west side, bottom-right treasury.
IF_ACTION_POINT(17,PLAYER0)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(17,PLAYER1)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(20,PLAYER0)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(20,PLAYER1)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(23,PLAYER0)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(23,PLAYER1)
	SET_FLAG(PLAYER5,BOX8_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX8_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GOLD,DRAWFROM(32,33),2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GOLD,DRAWFROM(32,33),2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GOLD,DRAWFROM(32,33),2)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,DRAWFROM(32,33),2,7,300,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,DRAWFROM(32,33),2,7,300,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,DRAWFROM(32,33),2,7,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,DRAWFROM(32,33),2,7,0,JUMP)
ENDIF

REM -- Bottom fortress, middle, temple.
REM -- Bottom fortress, middle, treasury.
REM -- Bottom fortress, middle, training.
IF_ACTION_POINT(29,PLAYER0)
	SET_FLAG(PLAYER5,BOX9_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(29,PLAYER1)
	SET_FLAG(PLAYER5,BOX9_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX9_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GODLOVERS,-18,2)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,TIME_MAGE,-18,2,8,250,JUMP)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GOLD,34,2)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,34,2,10,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,34,1,9,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,34,1,9,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,34,2,7,0,JUMP)

	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,35,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,35,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,35,1,7,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,35,1,7,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,35,1,6,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,35,1,6,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,35,1,5,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,35,1,5,0,JUMP)
ENDIF

REM -- Bottom fortress, far-right, right chamber.
REM -- Bottom fortress, far-right, left prisons.
IF_ACTION_POINT(28,PLAYER0)
	SET_FLAG(PLAYER5,BOX10_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(28,PLAYER1)
	SET_FLAG(PLAYER5,BOX10_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX10_ACTIVATED == 1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,36,1,8,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WIZARD,36,1,7,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,36,1,8,200,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,36,3,7,100,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,MONK,36,1,6,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,36,1,5,0,JUMP)
	
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,37,2,6,100,JUMP)
ENDIF

REM -- Bottom fortress, far-right, treasury.
IF_ACTION_POINT(28,PLAYER0)
	SET_FLAG(PLAYER5,BOX11_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(28,PLAYER1)
	SET_FLAG(PLAYER5,BOX11_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(29,PLAYER0)
	SET_FLAG(PLAYER5,BOX11_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(29,PLAYER1)
	SET_FLAG(PLAYER5,BOX11_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX11_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LUCKY,38,2)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,38,1,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,38,1,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,38,1,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,38,2,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,38,2,8,0,JUMP)
ENDIF

REM -- Bottom fortress, middle, top room.
REM -- Bottom fortress, middle, gold bags room.
IF_ACTION_POINT(39,PLAYER0)
	SET_FLAG(PLAYER5,BOX12_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(39,PLAYER1)
	SET_FLAG(PLAYER5,BOX12_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX12_ACTIVATED == 1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,40,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,MONK,40,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,40,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,40,1,8,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WIZARD,40,2,8,200,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,40,2,8,200,JUMP)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,CHAD,41,1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,41,4,9,0,JUMP)
ENDIF

REM -- Black fortress, upper temple.
REM -- Black fortress, lairs.
REM -- Black fortress, lower-left barracks.
REM -- Black fortress, torture chamber.
REM -- Black fortress, guard room and hallways.
REM -- Black fortress, dungeon heart.
REM -- Black fortress, scavenger.
IF_ACTION_POINT(3,PLAYER0)
	SET_FLAG(PLAYER5,BOX13_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(3,PLAYER1)
	SET_FLAG(PLAYER5,BOX13_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX13_ACTIVATED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER5,PIOUS,42,1)
	ADD_CREATURE_TO_LEVEL(PLAYER5,FAIRY,42,2,8,0,JUMP)

	ADD_CREATURE_TO_LEVEL(PLAYER5,GIANT,43,2,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,BARBARIAN,43,2,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,ARCHER,43,3,8,100,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,DWARFA,43,3,8,100,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,THIEF,43,4,6,0,JUMP)

	ADD_CREATURE_TO_LEVEL(PLAYER5,SAMURAI,-8,2,9,400,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,BARBARIAN,-8,2,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,ARCHER,-8,2,9,250,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,FAIRY,-8,4,8,100,JUMP)

	ADD_CREATURE_TO_LEVEL(PLAYER5,SAMURAI,45,3,8,350,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,BARBARIAN,45,3,7,200,JUMP)

	ADD_CREATURE_TO_LEVEL(PLAYER5,THIEF,46,6,10,0,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,THIEF,48,6,10,0,JUMP)

	ADD_PARTY_TO_LEVEL(PLAYER5,MINIBOSS,PLAYER5,2)
	ADD_CREATURE_TO_LEVEL(PLAYER5,TIME_MAGE,PLAYER5,2,10,400,JUMP)
	ADD_CREATURE_TO_LEVEL(PLAYER5,KNIGHT,PLAYER5,2,10,600,JUMP)

	ADD_PARTY_TO_LEVEL(PLAYER5,MCQUEEN,47,2)
ENDIF

REM -- Warn player that destroying the last generator initiates Avatar fight.
IF_ACTION_POINT(58,PLAYER0)
	SET_FLAG(PLAYER5,BOX16_ACTIVATED,1)
ENDIF
IF_ACTION_POINT(58,PLAYER1)
	SET_FLAG(PLAYER5,BOX16_ACTIVATED,1)
ENDIF
IF(PLAYER5,BOX16_ACTIVATED == 1)
	DISPLAY_INFORMATION(22,58)
ENDIF

REM -- End of game boss sequence.
REM -- If Black's heart is destroyed, bark, reveal Avatar and initiate finale.
IF(PLAYER5,DUNGEON_DESTROYED == 1)
	PLAY_MESSAGE(PLAYER0,SPEECH,120)
	PLAY_MESSAGE(PLAYER1,SPEECH,120)
	REVEAL_MAP_LOCATION(PLAYER0,-9,-1)
	REVEAL_MAP_LOCATION(PLAYER1,-9,-1)
	ZOOM_TO_LOCATION(PLAYER0,-9)
	ZOOM_TO_LOCATION(PLAYER1,-9)
	CHANGE_SLAB_TYPE(102,110,PATH,NONE)
	CHANGE_SLAB_TYPE(104,110,PATH,NONE)
	USE_POWER_AT_POS(PLAYER4,307,330,POWER_LIGHTNING,6,1)
	USE_POWER_AT_POS(PLAYER5,307,332,POWER_LIGHTNING,6,1)
	USE_POWER_AT_POS(PLAYER6,313,330,POWER_LIGHTNING,6,1)
	USE_POWER_AT_POS(PLAYER_GOOD,313,332,POWER_LIGHTNING,6,1)
	SET_FLAG(PLAYER5,FLAG0,1)
ENDIF

REM -- Spawn some support for the Avatar.
REM -- Forbid imprison so players don't needlessly prolong the active_battles timer.
REM -- Repeatedly spawn some low-strength trash to distract the players while they chew through the Avatar's health.
IF(PLAYER5,FLAG0 == 1)
	ADD_PARTY_TO_LEVEL(PLAYER5,MINIBOSS,-9,2)
	ADD_PARTY_TO_LEVEL(PLAYER5,MINIBOSS,-9,2)
	ADD_PARTY_TO_LEVEL(PLAYER5,AVATAR,-9,1)

	ADD_PARTY_TO_LEVEL(PLAYER5,KNIGHT,-7,1)
	ADD_PARTY_TO_LEVEL(PLAYER5,HORNYPRISON,-7,1)
	ADD_PARTY_TO_LEVEL(PLAYER5,KNIGHT,-8,1)
	ADD_PARTY_TO_LEVEL(PLAYER5,HORNYPRISON,-8,1)

	NEXT_COMMAND_REUSABLE
	SET_CREATURE_TENDENCIES(PLAYER0,IMPRISON,0)
	NEXT_COMMAND_REUSABLE
	SET_CREATURE_TENDENCIES(PLAYER1,IMPRISON,0)

	SET_TIMER(PLAYER5,TIMER0)
	ADD_TO_TIMER(PLAYER5,TIMER0,1000)

	IF_CONTROLS(PLAYER5,AVATAR > 0)
		IF(PLAYER5,TIMER0 > 1200)
			HIDE_HERO_GATE(-1,0)
			HIDE_HERO_GATE(-2,0)
			HIDE_HERO_GATE(-3,0)
			HIDE_HERO_GATE(-4,0)
			HIDE_HERO_GATE(-5,0)
			HIDE_HERO_GATE(-6,0)

			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DRAWFROM(VANDAL1,VANDAL2),-1,5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DISTRACT,-1,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DRAWFROM(VANDAL1,VANDAL2),-2,5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DISTRACT,-2,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DRAWFROM(VANDAL1,VANDAL2),-3,5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DISTRACT,-3,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DRAWFROM(VANDAL1,VANDAL2),-4,5)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,DISTRACT,-4,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,LUCKY,-5,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,LUCKY,-6,2)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER5,RONIN,-9,2)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER5,TIMER0)
		ENDIF
	ENDIF
ENDIF

REM -- If Black, White, Green, Yellow and the Avatar are dead, most of the heroes are dealt with and there are no ongoing battles, win game.
IF(PLAYER2,DUNGEON_DESTROYED == 1)
	IF(PLAYER3,DUNGEON_DESTROYED == 1)
		IF(PLAYER_GOOD,DUNGEON_DESTROYED == 1)
			IF(PLAYER5,DUNGEON_DESTROYED == 1)
				IF(PLAYER5,AVATAR == 0)
					IF_CONTROLS(PLAYER5,TOTAL_CREATURES <= 10)
						IF(PLAYER0,ACTIVE_BATTLES == 0)
							IF(PLAYER1,ACTIVE_BATTLES == 0)
								IF(PLAYER5,TIMER0 > 100)
									DISPLAY_PLAYER_OBJECTIVE(23,PLAYER0,PLAYER1)
									DISPLAY_PLAYER_OBJECTIVE(24,PLAYER1,PLAYER0)
									HIDE_HERO_GATE(-1,1)
									HIDE_HERO_GATE(-2,1)
									HIDE_HERO_GATE(-3,1)
									HIDE_HERO_GATE(-4,1)
									HIDE_HERO_GATE(-5,1)
									HIDE_HERO_GATE(-6,1)
									HIDE_HERO_GATE(-7,1)
									HIDE_HERO_GATE(-8,1)

									WIN_GAME
								ENDIF
							ENDIF
						ENDIF
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	ENDIF
ENDIF




REM -- Known Issues -- 

REM -- There is nothing to stop the player/s from spawning the Avatar before killing Green/Yellow. It'd make the final fight a lot more chaotic as the heroes and green/yellow aren't allied, and some of the messages might make less sense, but I'm cool with leaving it in.
REM -- The special/creature rewards are not evenly split in some places. A lot of the reward locations are based on Daka-Gorn.
REM -- I -should- fake all of the dungeon specials with custom boxes so they affect both players. It would fix the 'sharing' issue, but a lot of specials (like resurrect) can't be faked directly, so I'd need to make entirely new boxes. Not worth the effort.
REM -- Because of the way the black fortress is laid out, you can't really claim it cooperatively unless you do so intentionally. One player is almost always going to block the other.
REM -- Exceptionally slow players might get blocked off by their ally, and while they can temporarily drop alliance to fix that, AI partners will drop their army to attack you. It's not a great system.
REM -- If the AI decides to attack the invincible Midas doors, his creatures will be stuck there forever until they either die of starvation, the player claims the treasuries, or the player uses CTA to pull them away. He'll also spam the 'big fight' message repeatedly.
REM -- You can capture and sell the workshop underneath the 'mana generators' before destroying them, which ruins the aesthetic a little bit.
REM -- Being in map view stops zoom-to, so certain important setpieces like the green/yellow introduction can get skipped.
REM -- The players will probably inherit a fortune from green/yellow, so they can just lightning the fuck out of everything. If they find the reveal map, they can do without even opening the doors. I'm fine with it. The heroes in black castle are mostly to convert and reinforce your creature count if you got completely fucked by green/yellow, and the map has dragged long at this point anyway so rushing the rest out is fine.
REM -- The Avatar's throne room is way too small and congested; It diminishes him greatly. Fixing it isn't particularly hard, but I can't be bothere replacing all the effects and other things that would get deleted by resizing. He's not even that big of a fight compared to green/yellow.
REM -- The lava created by the LUA scripted cascade is all the same type rather than mottled like regular lava. Think it's fine. Makes it the lava look more rocky, which it should since it WAS rock only moments before.
REM -- Because of how I've done the Green/Yellow bridges, some of them will be visibly neutral for a second, and others will have multiple room flames. No one will notice.