


REM ### HERO GATE 1 -- N LAKE
REM ### HERO GATE 2 -- S LAKE
REM ### HERO GATE 3 -- S/E HERO FORTRESS
REM ### HERO GATE 4 -- M LAVA

REM ### ACTION POINT 1 -- N/W HERO ROOM, CUSTOM SPECIAL BOX SPAWN

REM ### P0 FLAG0 -- HERO PARTY SPAWN LOOP
REM ### P0 FLAG1 -- CUSTOM SPECIAL SPAWN

REM ### PG FLAG0 -- CHECKS IF DIFFICULTY HAS BEEN SELECTED, THEN ACTIVATES VARIOUS TIMERS
REM ### PG FLAG1 -- DETERMINES SELECTED DIFFICULTY

REM ### P0 TIMER0 -- 
REM ### P0 TIMER1 -- IMP RESPAWNER
REM ### P0 TIMER2 -- GAME VICTORY CHECK
REM ### P0 TIMER3 -- CUSTOM SPECIAL - LOBOTOMIZED

REM ### PG TIMER0 -- STARTS AFTER PLAYER SELECTS DIFFICULTY, CONTROLLING INITIAL HERO SPAWNS AND WHEN AI RECEIVES BRIDGE. BASICALLY A STAND-IN FOR GAME_TURN.
REM ### PG TIMER1 -- LOOPING HERO PARTY SPAWNS

REM ### INFO 1 -- "[Choose your difficulty.]"
REM ### INFO 2 -- "Eliminate the three enemy Keepers..."



REM ######################################################
REM ######################################################

LEVEL_VERSION(1)

SET_GENERATE_SPEED(600)

COMPUTER_PLAYER(PLAYER1,0)
COMPUTER_PLAYER(PLAYER2,0)
COMPUTER_PLAYER(PLAYER3,0)

START_MONEY(PLAYER0,5000)
START_MONEY(PLAYER1,5000)
START_MONEY(PLAYER2,5000)
START_MONEY(PLAYER3,5000)

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

MAX_CREATURES(PLAYER0,20)
MAX_CREATURES(PLAYER1,25)
MAX_CREATURES(PLAYER2,25)
MAX_CREATURES(PLAYER3,25)

SET_TEXTURE(PLAYER0,STANDARD)
SET_TEXTURE(PLAYER1,STANDARD)
SET_TEXTURE(PLAYER2,STANDARD)
SET_TEXTURE(PLAYER3,STANDARD)



REM ######################################################
REM ######################################################

ADD_CREATURE_TO_POOL(FLY,15)
ADD_CREATURE_TO_POOL(BUG,15)
ADD_CREATURE_TO_POOL(SPIDER,15)
ADD_CREATURE_TO_POOL(SORCEROR,15)
ADD_CREATURE_TO_POOL(TROLL,15)
ADD_CREATURE_TO_POOL(DEMONSPAWN,15)
ADD_CREATURE_TO_POOL(DRAGON,8)
ADD_CREATURE_TO_POOL(BILE_DEMON,10)
ADD_CREATURE_TO_POOL(ORC,15)
ADD_CREATURE_TO_POOL(TENTACLE,15)
ADD_CREATURE_TO_POOL(DARK_MISTRESS,8)
ADD_CREATURE_TO_POOL(HELL_HOUND,15)
ADD_CREATURE_TO_POOL(HORNY,15)
ADD_CREATURE_TO_POOL(VAMPIRE,5)
ADD_CREATURE_TO_POOL(DRUID,10)



REM ######################################################
REM ######################################################

CREATURE_AVAILABLE(ALL_PLAYERS,FLY,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,BUG,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,SPIDER,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,TROLL,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,SORCEROR,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,BILE_DEMON,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,DARK_MISTRESS,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,ORC,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,TENTACLE,1,2)
CREATURE_AVAILABLE(ALL_PLAYERS,DRAGON,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,DEMONSPAWN,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,HELL_HOUND,1,2)
CREATURE_AVAILABLE(ALL_PLAYERS,DRUID,1,2)
CREATURE_AVAILABLE(ALL_PLAYERS,HORNY,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,VAMPIRE,1,0)



REM ######################################################
REM ######################################################

IF(PLAYER_GOOD,FLAG0 == 1)
	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,0)
	ROOM_AVAILABLE(ALL_PLAYERS,RESEARCH,1,1)
	ROOM_AVAILABLE(ALL_PLAYERS,WORKSHOP,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,PRISON,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,TORTURE,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,GRAVEYARD,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,SCAVENGER,1,0)
	ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,1,0)

	ROOM_AVAILABLE(PLAYER0,BRIDGE,1,0)
ENDIF


REM ######################################################
REM ######################################################
REM ### NO WOODEN DOORS

DOOR_AVAILABLE(ALL_PLAYERS,BRACED,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,STEEL,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,MAGIC,1,0)



REM ######################################################
REM ######################################################
REM ### NO LAVA TRAPS, EXCEPT ON EASY

TRAP_AVAILABLE(ALL_PLAYERS,ALARM,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,POISON_GAS,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,LIGHTNING,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,WORD_OF_POWER,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,BOULDER,1,0)

IF(PLAYER_GOOD,FLAG1 == 1)
	TRAP_AVAILABLE(PLAYER0,LAVA,1,0)
ENDIF


REM ######################################################
REM ######################################################
REM ###	INVISIBLE TRAPS ARE CRINGE

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


REM ######################################################
REM ######################################################
REM ### NO ARMAGEDDON

IF(PLAYER_GOOD,FLAG0 == 1)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_IMP,1,1)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SIGHT,1,1)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_OBEY,1,1)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CALL_TO_ARMS,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HOLD_AUDIENCE,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CONCEAL,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_PROTECT,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HEAL_CREATURE,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_LIGHTNING,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CAVE_IN,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CHICKEN,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_DISEASE,1,0)
	MAGIC_AVAILABLE(ALL_PLAYERS,POWER_DESTROY_WALLS,1,0)
ENDIF


REM ######################################################
REM ######################################################
REM ### PARTY SETUP


CREATE_PARTY(ONEA)
ADD_TO_PARTY(ONEA,SAMURAI,DRAWFROM(8,9),600,ATTACK_ENEMIES,150)
ADD_TO_PARTY(ONEA,DRAWFROM(SAMURAI,FAIRY),DRAWFROM(7~9),200,ATTACK_ENEMIES,150)
ADD_TO_PARTY(ONEA,DRAWFROM(SAMURAI,FAIRY),7,200,ATTACK_ENEMIES,150)
ADD_TO_PARTY(ONEA,DRAWFROM(ARCHER,THIEF),DRAWFROM(6,7),0,STEAL_GOLD,150)


CREATE_PARTY(ONEB)
ADD_TO_PARTY(ONEB,HORNY,DRAWFROM(7~9),800,ATTACK_ENEMIES,150)
ADD_TO_PARTY(ONEB,DRAWFROM(HORNY,HELL_HOUND),DRAWFROM(7,8),0,ATTACK_ENEMIES,150)
ADD_TO_PARTY(ONEB,HELL_HOUND,7,0,STEAL_GOLD,150)
ADD_TO_PARTY(ONEB,HELL_HOUND,DRAWFROM(6,7),0,STEAL_GOLD,150)


CREATE_PARTY(TWO)
ADD_TO_PARTY(TWO,DRAWFROM(WIZARD,TIME_MAGE),DRAWFROM(7~9),400,STEAL_SPELLS,150)
ADD_TO_PARTY(TWO,DRAWFROM(FAIRY,WITCH),DRAWFROM(7~9),400,STEAL_SPELLS,150)
ADD_TO_PARTY(TWO,DRAWFROM(SORCEROR,DRUID),DRAWFROM(7~9),400,STEAL_SPELLS,150)
ADD_TO_PARTY(TWO,DRAWFROM(SORCEROR,DRUID,FAIRY,WITCH,TIME_MAGE,WIZARD),DRAWFROM(5,6),0,STEAL_SPELLS,150)
ADD_TO_PARTY(TWO,DRAWFROM(SORCEROR,DRUID,FAIRY,WITCH,TIME_MAGE,WIZARD),DRAWFROM(5,6),0,STEAL_SPELLS,150)


CREATE_PARTY(THREEA)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,BARBARIAN,THIEF),DRAWFROM(6~8),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,BARBARIAN,THIEF),DRAWFROM(6~8),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,BARBARIAN,THIEF),DRAWFROM(6~8),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,BARBARIAN,THIEF),DRAWFROM(6~8),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,THIEF),DRAWFROM(6,7),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,THIEF),DRAWFROM(5,6),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEA,DRAWFROM(DWARFA,THIEF),DRAWFROM(5,6),100,ATTACK_ROOMS,150)


CREATE_PARTY(THREEB)
ADD_TO_PARTY(THREEB,DRAWFROM(TROLL,ORC),DRAWFROM(6~10),150,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEB,DRAWFROM(TROLL,ORC),DRAWFROM(6~9),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEB,DRAWFROM(TROLL,ORC),DRAWFROM(6~9),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEB,DRAWFROM(TROLL,ORC),DRAWFROM(6~8),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEB,TROLL,DRAWFROM(6~8),100,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEB,TROLL,DRAWFROM(6,7),0,ATTACK_ROOMS,150)
ADD_TO_PARTY(THREEB,TROLL,DRAWFROM(6,7),0,ATTACK_ROOMS,150)


CREATE_PARTY(FOUR)
ADD_TO_PARTY(FOUR,DRAWFROM(GIANT,MONK),DRAWFROM(9,10),400,ATTACK_ENEMIES,150)
ADD_TO_PARTY(FOUR,DRAWFROM(BARBARIAN,GIANT,MONK),DRAWFROM(9,10),400,ATTACK_ENEMIES,150)
ADD_TO_PARTY(FOUR,DRAWFROM(BARBARIAN,GIANT,MONK),DRAWFROM(7,8),300,ATTACK_ENEMIES,150)
ADD_TO_PARTY(FOUR,DRAWFROM(BARBARIAN,GIANT,MONK),DRAWFROM(5,6),200,ATTACK_ENEMIES,150)


CREATE_PARTY(END)
ADD_TO_PARTY(END,AVATAR,10,10000,ATTACK_DUNGEON_HEART,500)
ADD_TO_PARTY(END,KNIGHT,10,5000,ATTACK_DUNGEON_HEART,500)
ADD_TO_PARTY(END,KNIGHT,10,5000,ATTACK_DUNGEON_HEART,500)
ADD_TO_PARTY(END,TIME_MAGE,10,2000,ATTACK_DUNGEON_HEART,500)
ADD_TO_PARTY(END,WIZARD,10,2000,ATTACK_DUNGEON_HEART,500)



REM ######################################################
REM ######################################################
REM ### SPAWN 4x TUNNELLERS AT BOTH LAKE HERO GATES, ONE TARGETING EACH PLAYER, AND ENABLE THE HERO PARTY SPAWN LOOP

IF(PLAYER_GOOD,FLAG0 == 1)
	SET_TIMER(PLAYER_GOOD,TIMER0)
ENDIF

IF(PLAYER_GOOD,TIMER0 >= 28000)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-1,DUNGEON_HEART,0,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-1,​DUNGEON_HEART,1,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-1,​DUNGEON_HEART,2,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-1,​DUNGEON_HEART,3,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-2,​DUNGEON_HEART,0,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-2,​DUNGEON_HEART,1,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-2,​DUNGEON_HEART,2,6,250)
	ADD_TUNNELLER_TO_LEVEL(​PLAYER_GOOD,-2,DUNGEON_HEART,3,6,250)
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF



REM ######################################################
REM ######################################################
REM ### RANDOMLY PICK BETWEEN FOUR PARTIES, SPAWN ONE COPY AT BOTH NORTH AND SOUTH, THEN START A TIMER WHICH RESTARTS THE LOOP.

IF(PLAYER_GOOD,TIMER1 >= 10400)
	NEXT_COMMAND_REUSABLE
	RANDOMISE_FLAG(PLAYER0,FLAG0,4)
ENDIF


IF(PLAYER0,FLAG0 == 1)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(ONEA,ONEB),-1,1)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(ONEA,ONEB),-2,1)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER0,FLAG0,0)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF


IF(PLAYER0,FLAG0 == 2)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,TWO,-1,1)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,TWO,-2,1)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER0,FLAG0,0)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF


IF(PLAYER0,FLAG0 == 3)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(THREEA,THREEB),-1,1)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(THREEA,THREEB),-2,1)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER0,FLAG0,0)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF


IF(PLAYER0,FLAG0 == 4)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,FOUR,-1,1)
	NEXT_COMMAND_REUSABLE
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,FOUR,-2,1)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER0,FLAG0,0)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF



REM ######################################################
REM ######################################################
REM ### IMP RESPAWNER.

IF(PLAYER_GOOD,FLAG0 == 1)
	SET_TIMER(PLAYER0,TIMER1)
ENDIF


IF(PLAYER0,TIMER1 >= 500)
	IF_CONTROLS(PLAYER0,IMP <= 3)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER0,PLAYER0,POWER_IMP,1,1)
	ENDIF
ENDIF

IF(PLAYER0,TIMER1 >= 500)
	IF_CONTROLS(PLAYER1,IMP <= 3)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER1,PLAYER1,POWER_IMP,1,1)
	ENDIF
ENDIF


IF(PLAYER0,TIMER1 >= 500)
	IF_CONTROLS(PLAYER2,IMP <= 3)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER2,PLAYER2,POWER_IMP,1,1)
	ENDIF
ENDIF

IF(PLAYER0,TIMER1 >= 500)
	IF_CONTROLS(PLAYER3,IMP <= 3)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER3,PLAYER3,POWER_IMP,1,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER0,TIMER1)
	ENDIF
ENDIF



REM ######################################################
REM ######################################################
REM ### RESTRICT HOW QUICKLY THE AI CAN BEGIN BRIDGING AROUND.

IF(PLAYER_GOOD,TIMER0 > 42000)
	ROOM_AVAILABLE(PLAYER1,BRIDGE,1,1)
	ROOM_AVAILABLE(PLAYER2,BRIDGE,1,1)
	ROOM_AVAILABLE(PLAYER3,BRIDGE,1,1)
ENDIF



REM ######################################################
REM ######################################################
REM ###	CUSTOM SPECIAL SPAWN


RANDOMISE_FLAG(PLAYER0,FLAG1,2)

IF(PLAYER0,FLAG1 == 1)
	ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM,1,1,PLAYER_NEUTRAL)
ENDIF

IF(PLAYER0,FLAG1 == 2)
	ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM,1,2,PLAYER_NEUTRAL)
ENDIF



REM ######################################################
REM ######################################################
REM ###	CUSTOM SPECIAL -- BOX 1 -- LOBOTOMIZED

SET_BOX_TOOLTIP(1,"LOBOTOMIZED: Enemy Keepers lose their wits for 45 seconds. Disables Keeper Hand, Call-to-Arms and Lightning.")

IF(PLAYER0,BOX1_ACTIVATED == 1)
	SET_TIMER(PLAYER0,TIMER3)
	MAGIC_AVAILABLE(PLAYER1,POWER_HAND,0,0)
	MAGIC_AVAILABLE(PLAYER2,POWER_HAND,0,0)
	MAGIC_AVAILABLE(PLAYER3,POWER_HAND,0,0)
	MAGIC_AVAILABLE(PLAYER1,POWER_SLAP,0,0)
	MAGIC_AVAILABLE(PLAYER2,POWER_SLAP,0,0)
	MAGIC_AVAILABLE(PLAYER3,POWER_SLAP,0,0)
	MAGIC_AVAILABLE(PLAYER1,POWER_LIGHTNING,0,0)
	MAGIC_AVAILABLE(PLAYER2,POWER_LIGHTNING,0,0)
	MAGIC_AVAILABLE(PLAYER3,POWER_LIGHTNING,0,0)
	MAGIC_AVAILABLE(PLAYER1,POWER_CALL_TO_ARMS,0,0)
	MAGIC_AVAILABLE(PLAYER2,POWER_CALL_TO_ARMS,0,0)
	MAGIC_AVAILABLE(PLAYER3,POWER_CALL_TO_ARMS,0,0)
	PLAY_MESSAGE(PLAYER0,SOUND,115)
ENDIF
	

IF(PLAYER0,TIMER3 >= 900)
	MAGIC_AVAILABLE(PLAYER1,POWER_HAND,0,1)
	MAGIC_AVAILABLE(PLAYER2,POWER_HAND,0,1)
	MAGIC_AVAILABLE(PLAYER3,POWER_HAND,0,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_SLAP,0,1)
	MAGIC_AVAILABLE(PLAYER2,POWER_SLAP,0,1)
	MAGIC_AVAILABLE(PLAYER3,POWER_SLAP,0,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_LIGHTNING,1,1)
	MAGIC_AVAILABLE(PLAYER2,POWER_LIGHTNING,1,1)
	MAGIC_AVAILABLE(PLAYER3,POWER_LIGHTNING,1,1)
	MAGIC_AVAILABLE(PLAYER1,POWER_CALL_TO_ARMS,1,1)
	MAGIC_AVAILABLE(PLAYER2,POWER_CALL_TO_ARMS,1,1)
	MAGIC_AVAILABLE(PLAYER3,POWER_CALL_TO_ARMS,1,1)
ENDIF



REM ######################################################
REM ######################################################
REM ###	CUSTOM SPECIAL -- BOX 2 -- BANISH

SET_BOX_TOOLTIP(2,"BANISH: Transfer three random creatures from each enemy Keeper to a liminal space between caught realities, in which their bodies rapidly and violently transition between states of corporeal being and pure energy.")

IF(PLAYER0,BOX2_ACTIVATED == 1)
	TRANSFER_CREATURE(PLAYER1,ANY_CREATURE,ANYWHERE,3)
	TRANSFER_CREATURE(PLAYER2,ANY_CREATURE,ANYWHERE,3)
	TRANSFER_CREATURE(PLAYER3,ANY_CREATURE,ANYWHERE,3)
	PLAY_MESSAGE(PLAYER0,SOUND,1030)
ENDIF



REM ######################################################
REM ######################################################
REM ###	AVATAR PARTY + WIN CONDITION

IF(PLAYER0,ALL_DUNGEONS_DESTROYED == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,END,-3,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,THREEA,-1,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,THREEA,-2,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,THREEA,-3,1)
	SET_TIMER(PLAYER0,TIMER2)
	
	IF(PLAYER0,TIMER2 >= 100)
		IF_CONTROLS(PLAYER_GOOD,AVATAR == 0)
			WIN_GAME
		ENDIF
	ENDIF
	
ENDIF



REM ######################################################
REM ######################################################
REM ###	SPAWNS THE INITIAL FOUR PLAYER0 IMPS AFTER DIFFICULTY IS SELECTED

SET_TIMER(PLAYER0,TIMER0)

IF(PLAYER_GOOD,FLAG0 != 0)
	IF(PLAYER0,FLAG2 <= 3)
		IF(PLAYER0,TIMER0 > 15)
			NEXT_COMMAND_REUSABLE
			USE_POWER_AT_LOCATION(PLAYER0,PLAYER0,POWER_IMP,1,1)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(​PLAYER0,FLAG2,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER0,TIMER0)
		ENDIF
	ENDIF
ENDIF



REM ######################################################
REM ######################################################
REM ### DIFFICULTY SELECT

QUICK_OBJECTIVE(1,"[Choose your difficulty.]",PLAYER0)

SET_OBJECT_CONFIGURATION(SPECBOX_CUSTOM,DESTROYONLAVA,1)


REM ### EASY
SET_BOX_TOOLTIP(3,"Breezy")

IF(PLAYER0,BOX3_ACTIVATED == 1)
	SET_FLAG(PLAYER_GOOD,FLAG0,1)
	SET_FLAG(PLAYER_GOOD,FLAG1,1)
	CHANGE_SLAB_TYPE(19,75,LAVA)
	CHANGE_SLAB_TYPE(21,73,LAVA)
	CHANGE_SLAB_TYPE(23,75,LAVA)
ENDIF


REM ### MEDIUM
SET_BOX_TOOLTIP(4,"Balanced")

IF(PLAYER0,BOX4_ACTIVATED == 1)
	SET_FLAG(PLAYER_GOOD,FLAG0,1)
	SET_FLAG(PLAYER_GOOD,FLAG1,2)
	CHANGE_SLAB_TYPE(19,75,LAVA)
	CHANGE_SLAB_TYPE(21,73,LAVA)
	CHANGE_SLAB_TYPE(23,75,LAVA)
ENDIF


REM ### HARD
SET_BOX_TOOLTIP(5,"Brutal")

IF(PLAYER0,BOX5_ACTIVATED == 1)
	SET_FLAG(PLAYER_GOOD,FLAG0,1)
	SET_FLAG(PLAYER_GOOD,FLAG1,3)
	CHANGE_SLAB_TYPE(19,75,LAVA)
	CHANGE_SLAB_TYPE(21,73,LAVA)
	CHANGE_SLAB_TYPE(23,75,LAVA)
ENDIF


REM ### DESTROY LEFTOVER DIFFICULTY BOXES, REVERT CUSTOM BOXES TO LAVA-SAFE AND GIVE PROPER LEVEL INTRODUCTION.

IF(PLAYER_GOOD,FLAG0 != 0)
	CHANGE_SLAB_TYPE(19,75,PRETTY_PATH)
	CHANGE_SLAB_TYPE(21,73,PRETTY_PATH)
	CHANGE_SLAB_TYPE(23,75,PRETTY_PATH)
	CHANGE_SLAB_OWNER(19,75,PLAYER0)
	CHANGE_SLAB_OWNER(21,73,PLAYER0)
	CHANGE_SLAB_OWNER(23,75,PLAYER0)
	SET_OBJECT_CONFIGURATION(SPECBOX_CUSTOM,DESTROYONLAVA,0)
	QUICK_OBJECTIVE(2,"[Eliminate the three enemy Keepers. The enemy Keepers are allied. When all Keepers are dead, the Avatar will arrive. Defeat the Avatar to achieve victory.]")
ENDIF


REM ### SPAWNS ENEMY KEEPER STARTING CREATURES

IF(PLAYER_GOOD,FLAG0 != 0)
	ADD_CREATURE_TO_LEVEL(PLAYER1,BILE_DEMON,PLAYER1,2,2,0)
	ADD_CREATURE_TO_LEVEL(PLAYER1,DARK_MISTRESS,PLAYER1,2,2,0)
	ADD_CREATURE_TO_LEVEL(PLAYER1,DRAGON,PLAYER1,2,3,0)
	
	ADD_CREATURE_TO_LEVEL(PLAYER2,HELL_HOUND,PLAYER2,3,2,0)
	ADD_CREATURE_TO_LEVEL(PLAYER2,HORNY,PLAYER2,1,4,0)
	
	ADD_CREATURE_TO_LEVEL(PLAYER3,ORC,PLAYER3,2,3,0)
	ADD_CREATURE_TO_LEVEL(PLAYER3,VAMPIRE,PLAYER3,2,3,0)
ENDIF



REM ######################################################
REM ######################################################
REM ### DIFFICULTY DIFFERENCES


REM ### EASY ###
REM ### CONVERTS CENTRAL GOLDS INTO IMPENETRABLE ROCK SO THE PLAYER HAS DEFENSIBLE GEMS, AND THE ENEMY KEEPERS ARE MORE SEGREGATED.
REM ### ALSO CONVERTS HERO DUNGEON HATCHERY INTO A WORKSHOP, WITH BONUS TRAP CRATES, AND PERMITS THE PLAYER BUILDING LAVA TRAPS.
REM ### DELETE A GUARD IN THE SCAVENGER, TORTURE AND GRAVEYARD.

IF(PLAYER_GOOD,FLAG1 == 1)
	CHANGE_SLAB_TYPE(51,50,HARD,MATCH)
	CHANGE_SLAB_TYPE(43,45,GEMS,MATCH)
	CHANGE_SLAB_TYPE(50,45,GEMS,MATCH)
	CHANGE_SLAB_TYPE(56,48,GEMS,MATCH)
	CHANGE_SLAB_TYPE(54,54,GEMS,MATCH)
	CHANGE_SLAB_TYPE(45,51,GEMS,MATCH)
	CHANGE_SLAB_TYPE(43,45,GOLD,MATCH)
	CHANGE_SLAB_TYPE(50,45,GOLD,MATCH)
	CHANGE_SLAB_TYPE(56,48,GOLD,MATCH)
	CHANGE_SLAB_TYPE(54,54,GOLD,MATCH)
	CHANGE_SLAB_TYPE(45,51,GOLD,MATCH)
	CHANGE_SLAB_TYPE(43,49,GEMS)
	CHANGE_SLAB_TYPE(53,55,GEMS)
	CHANGE_SLAB_TYPE(48,51,HARD)
	CHANGE_SLAB_TYPE(49,52,HARD)
	HIDE_HERO_GATE(-4,1)
	CHANGE_SLAB_TYPE(40,37,HARD,MATCH)
	CHANGE_SLAB_TYPE(55,65,WORKSHOP_AREA,MATCH)
	ADD_OBJECT_TO_LEVEL(WRKBOX_LAVA,3,0)
	ADD_OBJECT_TO_LEVEL(WRKBOX_BOULDER,3,0)
	KILL_CREATURE(PLAYER_GOOD,DARK_MISTRESS,MOST_EXPERIENCED,1)
	KILL_CREATURE(PLAYER_GOOD,HORNY,LEAST_EXPERIENCED,1)
	KILL_CREATURE(PLAYER_GOOD,VAMPIRE,LEAST_EXPERIENCED,1)
ENDIF



REM ### MEDIUM ###
REM ### DELETE A GUARD IN THE SCAVENGER, TORTURE AND GRAVEYARD.
REM ### ADD HEROES TO GUARD THE PLAYERS GEMS

IF(PLAYER_GOOD,FLAG1 == 2)
	KILL_CREATURE(PLAYER_GOOD,DARK_MISTRESS,MOST_EXPERIENCED,1)
	KILL_CREATURE(PLAYER_GOOD,HORNY,LEAST_EXPERIENCED,1)
	KILL_CREATURE(PLAYER_GOOD,VAMPIRE,LEAST_EXPERIENCED,1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(MONK,WIZARD,SAMURAI),-4,2,6,200)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GIANT,TIME_MAGE,SAMURAI),-4,2,6,200)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(BARBARIAN,DWARFA,ARCHER),-4,3,5,200)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(BARBARIAN,DWARFA,ARCHER),-4,3,5,200)
ENDIF



REM ### HARD ###
REM ### ADD HEROES TO GUARD PLAYERS GEMS. WEAKER THAN MEDIUM BECAUSE AI IS LIKELY TO GET THERE FIRST.
REM ### BAN GUARD POST.
REM ### GIVE AI BRIDGES MUCH QUICKER
REM ### UNLOCK HERO DOORS CONNECTING MIDDLE WATER AND PLAYER PORTAL.


IF(PLAYER_GOOD,FLAG1 == 3)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(MONK,WIZARD,SAMURAI),-4,2,6,200)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(GIANT,TIME_MAGE,SAMURAI),-4,2,5,200)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(BARBARIAN,DWARFA,ARCHER),-4,3,4,200)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAWFROM(BARBARIAN,DWARFA,ARCHER),-4,3,4,200)
	ROOM_AVAILABLE(PLAYER0,GUARD_POST,0,0)

	IF(PLAYER_GOOD,TIMER0 > 16000)
		ROOM_AVAILABLE(PLAYER1,BRIDGE,1,1)
		ROOM_AVAILABLE(PLAYER2,BRIDGE,1,1)
		ROOM_AVAILABLE(PLAYER3,BRIDGE,1,1)
	ENDIF
	
	IF(PLAYER_GOOD,TIMER1 > 5)
		SET_DOOR(UNLOCKED,47,59)
		SET_DOOR(UNLOCKED,59,75)
	ENDIF
	
ENDIF










