LEVEL_VERSION(1)
SET_GENERATE_SPEED(400)

COMPUTER_PLAYER(PLAYER1,0)
COMPUTER_PLAYER(PLAYER2,ROAMING)
COMPUTER_PLAYER(PLAYER3,7)
COMPUTER_PLAYER(PLAYER5,ROAMING)

MAX_CREATURES(PLAYER0,25)
MAX_CREATURES(PLAYER1,30)
MAX_CREATURES(PLAYER3,25)

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

SET_MUSIC(5)
SET_GAME_RULE(DISPLAYPORTALLIMIT,1)

SET_CREATURE_TENDENCIES(PLAYER3,IMPRISON,0)
SET_CREATURE_PROPERTY(KNIGHT,LORD,0)
SET_GAME_RULE(GLOBALAMBIENTLIGHT,16)
SET_TEXTURE(PLAYER0,WINTER)
SET_TEXTURE(PLAYER1,LILAC_STONE)
SET_TEXTURE(PLAYER3,WINTER)
SET_PLAYER_COLOR(PLAYER3,WHITE)
SET_PLAYER_COLOR(PLAYER2,BLUE)
HIDE_HERO_GATE(-3,1)

ALLY_PLAYERS(PLAYER1,PLAYER2,3)
ALLY_PLAYERS(PLAYER3,PLAYER_GOOD,3)

ADD_CREATURE_TO_POOL(BUG,5)
ADD_CREATURE_TO_POOL(SPIDER,5)
ADD_CREATURE_TO_POOL(SORCEROR,15)
ADD_CREATURE_TO_POOL(DRUID,10)
ADD_CREATURE_TO_POOL(TROLL,20)
ADD_CREATURE_TO_POOL(DEMONSPAWN,30)
ADD_CREATURE_TO_POOL(DRAGON,10)
ADD_CREATURE_TO_POOL(BILE_DEMON,12)
ADD_CREATURE_TO_POOL(ORC,20)
ADD_CREATURE_TO_POOL(DARK_MISTRESS,10)
ADD_CREATURE_TO_POOL(HELL_HOUND,10)
ADD_CREATURE_TO_POOL(VAMPIRE,5)

CREATURE_AVAILABLE(PLAYER0,BUG,1,0)
CREATURE_AVAILABLE(PLAYER0,SPIDER,1,0)
CREATURE_AVAILABLE(PLAYER0,TROLL,1,0)
CREATURE_AVAILABLE(PLAYER0,DEMONSPAWN,1,0)
CREATURE_AVAILABLE(PLAYER0,DRAGON,1,0)
CREATURE_AVAILABLE(PLAYER0,BILE_DEMON,1,0)
CREATURE_AVAILABLE(PLAYER0,ORC,1,0)
CREATURE_AVAILABLE(PLAYER0,DARK_MISTRESS,1,0)
CREATURE_AVAILABLE(PLAYER0,HELL_HOUND,1,0)

CREATURE_AVAILABLE(PLAYER1,SORCEROR,1,0)
CREATURE_AVAILABLE(PLAYER1,DRUID,1,4)
CREATURE_AVAILABLE(PLAYER1,TROLL,1,0)
CREATURE_AVAILABLE(PLAYER1,DRAGON,1,0)
CREATURE_AVAILABLE(PLAYER1,BILE_DEMON,1,0)
CREATURE_AVAILABLE(PLAYER1,ORC,1,3)
CREATURE_AVAILABLE(PLAYER1,DARK_MISTRESS,1,3)
CREATURE_AVAILABLE(PLAYER1,HELL_HOUND,1,2)
CREATURE_AVAILABLE(PLAYER1,VAMPIRE,1,3)

ADD_CREATURE_TO_POOL(WIZARD,4)
ADD_CREATURE_TO_POOL(TIME_MAGE,4)
ADD_CREATURE_TO_POOL(BARBARIAN,8)
ADD_CREATURE_TO_POOL(ARCHER,8)
ADD_CREATURE_TO_POOL(MONK,6)
ADD_CREATURE_TO_POOL(DWARFA,8)
ADD_CREATURE_TO_POOL(WITCH,2)
ADD_CREATURE_TO_POOL(GIANT,4)
ADD_CREATURE_TO_POOL(FAIRY,6)
ADD_CREATURE_TO_POOL(THIEF,8)
ADD_CREATURE_TO_POOL(SAMURAI,4)
ADD_CREATURE_TO_POOL(KNIGHT,2)

IF(PLAYER0,FLAG1 == 1)
	CREATURE_AVAILABLE(PLAYER3,WIZARD,1,0)
	CREATURE_AVAILABLE(PLAYER3,TIME_MAGE,1,0)
	CREATURE_AVAILABLE(PLAYER3,BARBARIAN,1,0)
	CREATURE_AVAILABLE(PLAYER3,ARCHER,1,0)
	CREATURE_AVAILABLE(PLAYER3,MONK,1,0)
	CREATURE_AVAILABLE(PLAYER3,DWARFA,1,0)
	CREATURE_AVAILABLE(PLAYER3,WITCH,1,2)
	CREATURE_AVAILABLE(PLAYER3,GIANT,1,0)
	CREATURE_AVAILABLE(PLAYER3,FAIRY,1,0)
	CREATURE_AVAILABLE(PLAYER3,THIEF,1,0)
	CREATURE_AVAILABLE(PLAYER3,SAMURAI,1,0)
	CREATURE_AVAILABLE(PLAYER3,KNIGHT,1,0)
ENDIF

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,WORKSHOP,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,PRISON,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,TORTURE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,GRAVEYARD,1,0)

ROOM_AVAILABLE(PLAYER0,BRIDGE,3,0)
ROOM_AVAILABLE(PLAYER0,SCAVENGER,3,0)

ROOM_AVAILABLE(PLAYER3,TREASURE,0,0)
ROOM_AVAILABLE(PLAYER3,LAIR,0,0)
ROOM_AVAILABLE(PLAYER3,GARDEN,0,0)
ROOM_AVAILABLE(PLAYER3,TRAINING,0,0)
ROOM_AVAILABLE(PLAYER3,RESEARCH,0,0)
ROOM_AVAILABLE(PLAYER3,WORKSHOP,0,0)
ROOM_AVAILABLE(PLAYER3,GUARD_POST,0,0)
ROOM_AVAILABLE(PLAYER3,PRISON,0,0)
ROOM_AVAILABLE(PLAYER3,BARRACKS,0,0)
ROOM_AVAILABLE(PLAYER3,TORTURE,0,0)
ROOM_AVAILABLE(PLAYER3,TEMPLE,0,0)
ROOM_AVAILABLE(PLAYER3,GRAVEYARD,0,0)

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

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)

MAGIC_AVAILABLE(ALL_PLAYERS,POWER_IMP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_OBEY,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HOLD_AUDIENCE,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_LIGHTNING,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_PROTECT,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CONCEAL,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CHICKEN,1,0)

MAGIC_AVAILABLE(PLAYER3,POWER_IMP,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_OBEY,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_CALL_TO_ARMS,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_HEAL_CREATURE,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_HOLD_AUDIENCE,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_LIGHTNING,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_SPEED,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_PROTECT,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_CONCEAL,0,0)
MAGIC_AVAILABLE(PLAYER3,POWER_CHICKEN,0,0)



	REM ### CONCEAL WHOLE MAP, THEN REVEAL WHAT PLAYER SHOULD SEE.

CONCEAL_MAP_RECT(PLAYER0,127,127,255,255,ALL)
REVEAL_MAP_LOCATION(PLAYER0,PLAYER0,-1)



	REM ### SETUP DEFENSIVE PARTIES FOR YELLOW/WHITE AND BLUE/GREEN.

CREATE_PARTY(LORDS)
ADD_TO_PARTY(LORDS,KNIGHT,10,1000,ATTACK_ENEMIES,90000)
ADD_TO_PARTY(LORDS,WIZARD,10,650,DEFEND_PARTY,90000)
ADD_TO_PARTY(LORDS,SAMURAI,10,650,DEFEND_PARTY,90000)
ADD_TO_PARTY(LORDS,FAIRY,10,650,DEFEND_PARTY,90000)
ADD_TO_PARTY(LORDS,GIANT,10,650,DEFEND_PARTY,90000)

CREATE_PARTY(TIM10)
ADD_TO_PARTY(TIM10,TIME_MAGE,10,650,ATTACK_ENEMIES,90000)

CREATE_PARTY(WIZ7)
ADD_TO_PARTY(WIZ7,WIZARD,7,500,ATTACK_ENEMIES,90000)

CREATE_PARTY(MONK6)
ADD_TO_PARTY(MONK6,MONK,6,400,ATTACK_ENEMIES,90000)

CREATE_PARTY(MONK9)
ADD_TO_PARTY(MONK9,MONK,9,500,ATTACK_ENEMIES,90000)

CREATE_PARTY(ARCH8)
ADD_TO_PARTY(ARCH8,ARCHER,8,350,ATTACK_ENEMIES,90000)

CREATE_PARTY(BARB7)
ADD_TO_PARTY(BARB7,BARBARIAN,7,350,ATTACK_ENEMIES,90000)

CREATE_PARTY(GIA6)
ADD_TO_PARTY(GIA6,GIANT,6,350,ATTACK_ENEMIES,90000)

CREATE_PARTY(SAM7)
ADD_TO_PARTY(SAM7,SAMURAI,7,525,ATTACK_ENEMIES,90000)

CREATE_PARTY(THI6)
ADD_TO_PARTY(THI6,THIEF,6,250,ATTACK_ENEMIES,90000)

CREATE_PARTY(DWA6)
ADD_TO_PARTY(DWA6,DWARFA,6,250,ATTACK_ENEMIES,90000)

CREATE_PARTY(BUG6)
ADD_TO_PARTY(BUG6,BUG,6,0,DEFEND_LOCATION,0)

CREATE_PARTY(SPI6)
ADD_TO_PARTY(SPI6,SPIDER,6,0,DEFEND_LOCATION,0)

CREATE_PARTY(DEM6)
ADD_TO_PARTY(DEM6,DEMONSPAWN,6,0,DEFEND_LOCATION,0)

CREATE_PARTY(TRO6)
ADD_TO_PARTY(TRO6,TROLL,6,0,DEFEND_LOCATION,0)

CREATE_PARTY(MIS8)
ADD_TO_PARTY(MIS8,DARK_MISTRESS,8,0,DEFEND_LOCATION,0)

IF(PLAYER0,FLAG1 == 1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,TIM10,1,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WIZ7,1,2)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BARB7,2,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GIA6,2,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(SAM7,ARCH8),2,1)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ARCH8,3,3)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DWA6,3,1)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DWA6,4,3)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,THI6,4,3)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ARCH8,5,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DWA6,5,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GIA6,5,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BARB7,5,1)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ARCH8,6,4)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(BARB7,GIA6),6,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(BARB7,GIA6),6,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(DWA6,THI6),6,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,DRAWFROM(DWA6,THI6),6,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WIZ7,6,1)

	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LORDS,PLAYER3,2)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,MONK9,PLAYER3,4)
	
	ADD_PARTY_TO_LEVEL(PLAYER2,BUG6,PLAYER1,5)
	ADD_PARTY_TO_LEVEL(PLAYER2,SPI6,PLAYER1,5)
	ADD_PARTY_TO_LEVEL(PLAYER2,DEM6,PLAYER1,5)
	ADD_PARTY_TO_LEVEL(PLAYER2,TRO6,PLAYER1,5)
	
	IF(PLAYER1,FLAG1 <= 20)
		NEXT_COMMAND_REUSABLE
		LEVEL_UP_CREATURE(PLAYER2,ANY_CREATURE,ANYWHERE,1)
		NEXT_COMMAND_REUSABLE
		ADD_TO_FLAG(PLAYER1,FLAG1,1)
	ENDIF
ENDIF



	REM ### IF YELLOW IS DEFEATED, OR IF GAME GOES LONG ENOUGH, OPEN UP VARIOUS PARTS OF THE MAP.

IF(PLAYER4,TIMER0 > 100000)
	IF(PLAYER0,FLAG0 == 0)
		SET_FLAG(PLAYER0,FLAG0,1)
		SET_TIMER(PLAYER0,TIMER0)
	ENDIF
ENDIF
IF(PLAYER3,DUNGEON_DESTROYED == 1)
	IF(PLAYER0,FLAG0 == 0)
		SET_FLAG(PLAYER0,FLAG0,1)
		SET_TIMER(PLAYER0,TIMER0)
	ENDIF
ENDIF

IF(PLAYER0,TIMER0 > 350)
	QUICK_INFORMATION(3,"Lookers say hear echoes in cavern, rumble in walls. Me say 'STOP TALK LOOKERS! NO HEAR, ONLY LOOK!' but then hear me noise too. Sometink not right, boss.")
ENDIF
IF(PLAYER0,TIMER0 > 500)
	PLAY_MESSAGE(PLAYER0,SPEECH,117)
ENDIF
IF(PLAYER0,TIMER0 > 660)
	PLAY_MESSAGE(PLAYER0,SOUND,839)
ENDIF
IF(PLAYER0,TIMER0 > 700)
	PLAY_MESSAGE(PLAYER0,SOUND,927)

	CHANGE_SLAB_TYPE(57,17,GEMS,NONE)
	CHANGE_SLAB_TYPE(60,16,GEMS,NONE)
	CHANGE_SLAB_TYPE(59,18,GEMS,MATCH)
	CHANGE_SLAB_TYPE(59,18,LAVA,MATCH)

	CHANGE_SLAB_TYPE(53,19,LAVA,NONE)
	CHANGE_SLAB_TYPE(53,20,LAVA,NONE)

	CHANGE_SLAB_TYPE(59,26,GEMS,NONE)
	CHANGE_SLAB_TYPE(62,25,GEMS,NONE)
	CHANGE_SLAB_TYPE(61,25,GEMS,MATCH)
	CHANGE_SLAB_TYPE(61,25,LAVA,MATCH)

	CHANGE_SLAB_TYPE(59,33,GEMS,NONE)
	CHANGE_SLAB_TYPE(64,32,GEMS,NONE)
	CHANGE_SLAB_TYPE(62,32,GEMS,MATCH)
	CHANGE_SLAB_TYPE(62,32,LAVA,MATCH)

	CHANGE_SLAB_TYPE(34,42,DIRT,NONE)
	CHANGE_SLAB_TYPE(34,48,DIRT,NONE)
	CHANGE_SLAB_TYPE(34,45,DIRT,MATCH)
	CHANGE_SLAB_TYPE(34,45,LAVA,MATCH)

	CHANGE_SLAB_TYPE(40,55,GEMS,NONE)
	CHANGE_SLAB_TYPE(44,56,GEMS,NONE)
	CHANGE_SLAB_TYPE(41,55,GEMS,MATCH)
	CHANGE_SLAB_TYPE(41,55,LAVA,MATCH)

	CHANGE_SLAB_TYPE(53,60,GEMS,NONE)
	CHANGE_SLAB_TYPE(60,60,GEMS,NONE)
	CHANGE_SLAB_TYPE(54,60,GEMS,MATCH)
	CHANGE_SLAB_TYPE(54,60,LAVA,MATCH)

	CHANGE_SLAB_TYPE(78,65,GEMS,NONE)
	CHANGE_SLAB_TYPE(82,62,GEMS,NONE)
	CHANGE_SLAB_TYPE(79,65,GEMS,MATCH)
	CHANGE_SLAB_TYPE(79,65,LAVA,MATCH)

	CHANGE_SLAB_TYPE(77,68,GEMS,NONE)
	CHANGE_SLAB_TYPE(78,72,GEMS,NONE)
	CHANGE_SLAB_TYPE(78,71,GEMS,MATCH)
	CHANGE_SLAB_TYPE(78,71,LAVA,MATCH)

	CHANGE_SLAB_TYPE(77,77,GEMS,NONE)
	CHANGE_SLAB_TYPE(75,78,GEMS,NONE)
	CHANGE_SLAB_TYPE(76,78,GEMS,MATCH)
	CHANGE_SLAB_TYPE(76,78,LAVA,MATCH)

	CHANGE_SLAB_TYPE(69,82,GEMS,NONE)
	CHANGE_SLAB_TYPE(67,80,GEMS,NONE)
	CHANGE_SLAB_TYPE(69,81,GEMS,MATCH)
	CHANGE_SLAB_TYPE(69,81,LAVA,MATCH)

	CHANGE_SLAB_TYPE(64,80,GEMS,NONE)
	CHANGE_SLAB_TYPE(61,82,GEMS,NONE)
	CHANGE_SLAB_TYPE(61,81,GEMS,NONE)
	CHANGE_SLAB_TYPE(62,81,GEMS,MATCH)
	CHANGE_SLAB_TYPE(62,81,LAVA,MATCH)

	CHANGE_SLAB_TYPE(52,80,GEMS,NONE)
	CHANGE_SLAB_TYPE(55,82,GEMS,NONE)
	CHANGE_SLAB_TYPE(54,82,GEMS,MATCH)
	CHANGE_SLAB_TYPE(54,82,LAVA,MATCH)

	CHANGE_SLAB_TYPE(50,80,GEMS,NONE)
	CHANGE_SLAB_TYPE(47,81,GEMS,NONE)
	CHANGE_SLAB_TYPE(48,81,GEMS,MATCH)
	CHANGE_SLAB_TYPE(48,81,LAVA,MATCH)

	CHANGE_SLAB_TYPE(5,70,GEMS,NONE)
	CHANGE_SLAB_TYPE(5,63,GEMS,NONE)
	CHANGE_SLAB_TYPE(6,63,LAVA,NONE)
	CHANGE_SLAB_TYPE(5,64,GEMS,MATCH)
	CHANGE_SLAB_TYPE(5,64,LAVA,MATCH)

	CHANGE_SLAB_TYPE(5,59,GEMS,NONE)
	CHANGE_SLAB_TYPE(7,59,GEMS,NONE)
	CHANGE_SLAB_TYPE(6,59,GEMS,MATCH)
	CHANGE_SLAB_TYPE(6,59,LAVA,MATCH)

	CHANGE_SLAB_TYPE(7,53,GEMS,NONE)
	CHANGE_SLAB_TYPE(3,46,GEMS,NONE)
	CHANGE_SLAB_TYPE(3,47,GEMS,MATCH)
	CHANGE_SLAB_TYPE(3,47,LAVA,MATCH)
	
	USE_POWER_AT_POS(PLAYER1,187,31,POWER_DESTROY_WALLS,9,1)
	
	REVEAL_MAP_RECT(PLAYER0,235,136,15,8)
	REVEAL_MAP_RECT(PLAYER0,235,136,8,15)
	
	ROOM_AVAILABLE(PLAYER1,SCAVENGER,1,1)
ENDIF
IF(PLAYER0,TIMER0 > 900)
	USE_POWER_AT_LOCATION(PLAYER0,PLAYER1,POWER_SIGHT,9,1)
	QUICK_OBJECTIVE(4,"Who this idiot? He have big magic stink, and his spell break walls, splash lava! That not safe behaviour! Warchief not happy be if we go without make example this guy.",PLAYER1)
ENDIF



	REM ### SPAWNS HERO ATTACK PARTIES THAT ARE STOPPED IF PLAYER TAKES YELLOW BARRACKS.
	REM ### NOTE THAT THE WHITE DEFENDERS OF YELLOWS CASTLE HAVE A WAIT TIME OF 90000, SO THAT IS EFFECTIVELY THE TRUE FINAL 'WAVE' AND HAPPENS REGARDLESS OF THE BARRACKS.

CREATE_PARTY(GOONS)
ADD_TO_PARTY(GOONS,BARBARIAN,4,150,ATTACK_ENEMIES,100)
ADD_TO_PARTY(GOONS,DRAWFROM(BARBARIAN,GIANT),3,100,DEFEND_PARTY,100)
ADD_TO_PARTY(GOONS,DRAWFROM(DWARFA,ARCHER),3,100,DEFEND_PARTY,100)
ADD_TO_PARTY(GOONS,DWARFA,3,100,DEFEND_PARTY,100)
ADD_TO_PARTY(GOONS,THIEF,2,100,DEFEND_PARTY,100)
ADD_TO_PARTY(GOONS,THIEF,2,100,DEFEND_PARTY,100)

CREATE_PARTY(LUCKY)
ADD_TO_PARTY(LUCKY,WIZARD,7,300,ATTACK_ENEMIES,100)
ADD_TO_PARTY(LUCKY,MONK,7,300,ATTACK_ENEMIES,100)
ADD_TO_PARTY(LUCKY,SAMURAI,7,300,ATTACK_ENEMIES,100)
ADD_TO_PARTY(LUCKY,FAIRY,7,300,ATTACK_ENEMIES,100)
ADD_TO_PARTY(LUCKY,GIANT,7,300,ATTACK_ENEMIES,100)

CREATE_PARTY(OCONNELL)
ADD_TO_PARTY(OCONNELL,TIME_MAGE,10,800,ATTACK_ENEMIES,100)
ADD_TO_PARTY(OCONNELL,FAIRY,10,550,DEFEND_PARTY,100)
ADD_TO_PARTY(OCONNELL,MONK,10,550,DEFEND_PARTY,100)
ADD_TO_PARTY(OCONNELL,DWARFA,10,500,DEFEND_PARTY,100)
ADD_TO_PARTY(OCONNELL,THIEF,10,500,DEFEND_PARTY,100)

IF_SLAB_OWNER(23,24,PLAYER0)
	HIDE_HERO_GATE(-2,1)
ENDIF

IF_SLAB_OWNER(23,24,PLAYER3)
	IF(PLAYER3,DUNGEON_DESTROYED == 0)
		IF(PLAYER4,TIMER0 > 12000)
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GOONS,-2,1)
		ENDIF
		IF(PLAYER4,TIMER0 > 22000)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-2,4,5,250)
		ENDIF
		IF(PLAYER4,TIMER0 > 22150)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-2,4,5,250)
		ENDIF
		IF(PLAYER4,TIMER0 > 22300)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-2,3,5,250)
		ENDIF
		IF(PLAYER4,TIMER0 > 30000)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SORCEROR,-2,6,5,150)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRUID,-2,2,6,150)
		ENDIF
		IF(PLAYER4,TIMER0 > 30500)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,-2,6,7,500)
		ENDIF
		IF(PLAYER4,TIMER0 > 38000)
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LUCKY,-2,1)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-2,3,7,400)
		ENDIF
		IF(PLAYER4,TIMER0 > 52000)
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,OCONNELL,-2,1)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-2,3,7,400)
		ENDIF
		IF(PLAYER4,TIMER0 > 63000)
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LUCKY,-2,1)
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,OCONNELL,-2,1)
		ENDIF
		IF(PLAYER4,TIMER0 > 70000)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRUID,-2,4,10,500)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-2,5,10,500)
			ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,MONK,-2,2,10,500)
		ENDIF
		IF(PLAYER4,TIMER0 > 88000)
			SET_DOOR(UNLOCKED,41,8)
		ENDIF
	ENDIF
ENDIF



	REM ### PERIODICALLY SPAWNS FAIRY HARASS PARTIES THAT THREATEN GEM MINERS.

IF(PLAYER4,TIMER0 > 6000)
	SET_TIMER(PLAYER3,TIMER0)
ENDIF

IF(PLAYER3,DUNGEON_DESTROYED == 0)
	IF(PLAYER3,TIMER0 > 6666)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-1,2,4,100)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER0)
		SET_TIMER(PLAYER3,TIMER1)
	ENDIF
	
	IF(PLAYER3,TIMER1 > 13332)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-1,1,7,150)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER1)
		SET_TIMER(PLAYER3,TIMER2)
	ENDIF
	
	IF(PLAYER3,TIMER2 > 26664)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-1,1,10,150)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER2)
	ENDIF
ENDIF



	REM ### PLAYER GETS BRIDGE AFTER CLAIMING IT FROM EITHER YELLOWS BASE, OR THE SOUTH-WEST TROLL WORKSHOP. BLUE GETS IT A SHORT PERIOD AFTERWARDS, EXCLUDING ON EASY.

IF_AVAILABLE(PLAYER0,BRIDGE == 1)
	TUTORIAL_FLASH_BUTTON(18,150)
	SET_TIMER(PLAYER1,TIMER1)
ENDIF
IF(PLAYER1,TIMER1 > 12000)
	IF(PLAYER0,BOX0_ACTIVATED == 0)
		ROOM_AVAILABLE(PLAYER1,BRIDGE,1,1)
	ENDIF
ENDIF



	REM ### WIN GAME IF BOTH BLUE/YELLOW DEFEATED.

IF(PLAYER1,DUNGEON_DESTROYED == 1)
	IF(PLAYER3,DUNGEON_DESTROYED == 1)
		QUICK_OBJECTIVE(5,"Good! Fortress smash, idiot dead! No more pink-skins, no more stolen shinies! Now we leave and Grugnar tell, make Warchief big happy!",LAST_EVENT)
		WIN_GAME
	ENDIF
ENDIF



	REM ### SPAWNS HARASS PARTIES ORIGINATING FROM PLAYER1 AFTER HEROES/YELLOW HAVE BEEN DEFEATED.

IF(PLAYER0,FLAG0 > 0)
	SET_TIMER(PLAYER1,TIMER0)
ENDIF

IF(PLAYER1,DUNGEON_DESTROYED == 0)
	IF(PLAYER1,TIMER0 > 10000)
		NEXT_COMMAND_REUSABLE
		RANDOMISE_FLAG(PLAYER1,FLAG0,4)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER1,TIMER0)
	ENDIF
ENDIF

IF(PLAYER1,FLAG0 == 1)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_LEVEL(PLAYER2,HELL_HOUND,-3,3,8,0)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER1,FLAG0,0)
ENDIF
IF(PLAYER1,FLAG0 == 2)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_LEVEL(PLAYER2,HORNY,-3,2,7,0)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER1,FLAG0,0)
ENDIF
IF(PLAYER1,FLAG0 == 3)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_LEVEL(PLAYER2,DRAGON,-3,3,8,0)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_LEVEL(PLAYER2,DEMONSPAWN,-3,4,10,0)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER1,FLAG0,0)
ENDIF
IF(PLAYER1,FLAG0 == 4)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_LEVEL(PLAYER2,DARK_MISTRESS,-3,1,10,0)
	NEXT_COMMAND_REUSABLE
	ADD_CREATURE_TO_LEVEL(PLAYER2,VAMPIRE,-3,1,10,0)
	NEXT_COMMAND_REUSABLE
	SET_FLAG(PLAYER1,FLAG0,0)
ENDIF



	REM ### PERIODICALLY RESPAWNS PLAYER IMPS, UP TO 6. MITIGATES POOR IMP CONTROL.

IF(PLAYER0,TIMER7 >= 400)
	IF(PLAYER0,IMP <= 5)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(PLAYER0,PLAYER0,POWER_IMP,1,1)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER0,TIMER7)
	ENDIF
ENDIF

IF(PLAYER4,TIMER0 > 9500)
	QUICK_INFORMATION(8,"WORK FASTER PEONS! FASTER OR GET SMACK! Grugnar say not worry about imp. He say they not have union so if die on job, no one care and he just send more! But only six imp free, and new one take time!")
ENDIF



	REM ### BUG PATCH. CURRENTLY CREATURES WILL DAMAGE ALLIES WHILE WORKING IF THE ALLIES ARE STANDING IN FRONT.
	REM ### THIS CAUSES YELLOW TO SLOWLY KILL WHITES HEROES IN THE TRAINING ROOM AND WORKSHOP OVER TIME.
	REM ### THE BUG APPLIES TO BLUE AS WELL BUT SINCE HE SLAPS HIS CREATURES, IT'S LESS OBVIOUS SEEING HALF-HEALTH CREATURES WANDERING AROUND.

SET_TIMER(PLAYER_GOOD,TIMER0)
IF(PLAYER3,DUNGEON_DESTROYED == 0)
	IF(PLAYER_GOOD,TIMER0 > 500)
		IF(PLAYER_GOOD,FLAG1 < 10)
			NEXT_COMMAND_REUSABLE
			USE_SPELL_ON_CREATURE(PLAYER_GOOD,ANY_CREATURE,ON_FRIENDLY_GROUND,SPELL_HEAL,3)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(PLAYER_GOOD,FLAG1,1)
		ENDIF
			
		IF(PLAYER_GOOD,FLAG1 == 10)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER_GOOD,TIMER0)
			NEXT_COMMAND_REUSABLE
			SET_FLAG(PLAYER_GOOD,FLAG1,0)
		ENDIF
	ENDIF
ENDIF



	REM ### ADDING THESE VIA UNEARTH IS CURRENTLY BUGGED. HAVE TO ADD THEM AFTER MAP START.
	
ADD_OBJECT_TO_LEVEL_AT_POS(HEARTFLAME_WHITE,142,28,0,PLAYER3)
ADD_OBJECT_TO_LEVEL_AT_POS(HEARTFLAME_WHITE,148,28,0,PLAYER3)
ADD_OBJECT_TO_LEVEL_AT_POS(HEARTFLAME_WHITE,142,34,0,PLAYER3)
ADD_OBJECT_TO_LEVEL_AT_POS(HEARTFLAME_WHITE,148,34,0,PLAYER3)



	REM ### PATCH UP FLOOR AFTER TNT EXPLODES.
	
IF_SLAB_TYPE(9,74,LAVA)
	CHANGE_SLAB_TYPE(9,74,PATH,NONE)
ENDIF



	REM ### CURRENTLY LANTERNS FLOAT, AND IT LOOKS DUMB IF THE PLAYER DELETES THE SW BRIDGE NEAR THE WORKSHOP.
	REM ### THIS PROBABLY GETS FIXED IN THE FUTURE.
	
SET_OBJECT_CONFIGURATION(LANTERN_PST,FALLACCELERATION,10)
SET_OBJECT_CONFIGURATION(LANTERN_PST,DESTROYONLAVA,1)



	REM ### KILL OFF REMAINING 'BLUE' DEFENDERS WHEN BLUE IS DEFEATED.

IF(PLAYER1,DUNGEON_DESTROYED == 1)
	SET_TIMER(PLAYER2,TIMER0)
ENDIF
IF(PLAYER2,TIMER0 > 15)
	NEXT_COMMAND_REUSABLE
	KILL_CREATURE(PLAYER2,ANY_CREATURE,ANYWHERE,1)
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER2,TIMER0)
ENDIF



	REM ### MESSAGE SEND DIFFERING ON WHICH PLAYER DEFEATS YELLOW.

NEXT_COMMAND_REUSABLE
COUNT_CREATURES_AT_ACTION_POINT(9,PLAYER0,ANY_CREATURE,PLAYER2,FLAG0)
NEXT_COMMAND_REUSABLE
COUNT_CREATURES_AT_ACTION_POINT(9,PLAYER1,ANY_CREATURE,PLAYER2,FLAG1)

IF(PLAYER3,DUNGEON_DESTROYED == 1)
	IF(PLAYER2,FLAG2 == 0)
		IF(PLAYER2,FLAG0 > PLAYER2,FLAG1)
			QUICK_INFORMATION(6,"The pinkies dead they is! Now we gavver up they shinies an' back to da Warchief's!",9)
			SET_FLAG(PLAYER2,FLAG2,1)
		ENDIF
	ENDIF
ENDIF

IF(PLAYER3,DUNGEON_DESTROYED == 1)
	IF(PLAYER2,FLAG2 == 0)
		IF(PLAYER2,FLAG0 < PLAYER2,FLAG1)
			USE_POWER_AT_LOCATION(PLAYER0,9,POWER_SIGHT,9,1)
			QUICK_INFORMATION(7,"Hey! That idiot killed da pinkies! HE'S TAKIN' OUR SHINIES! STOP HIM BOSS!",9)
			SET_FLAG(PLAYER2,FLAG2,1)
		ENDIF
	ENDIF
ENDIF


	
	REM ### DIFFICULTY SELECT

SET_BOX_TOOLTIP(0,"Easy Difficulty")
SET_BOX_TOOLTIP(1,"Normal Difficulty")
SET_BOX_TOOLTIP(2,"Hard Difficulty")

IF(PLAYER0,BOX0_ACTIVATED == 1)
	SET_FLAG(PLAYER0,FLAG1,1)
ENDIF
IF(PLAYER0,BOX1_ACTIVATED == 1)
	SET_FLAG(PLAYER0,FLAG1,1)
ENDIF
IF(PLAYER0,BOX2_ACTIVATED == 1)
	SET_FLAG(PLAYER0,FLAG1,1)
ENDIF



	REM ### MAP INITIATION AFTER DIFFICULTY SELECT

IF(PLAYER0,FLAG1 == 1)
	SET_OBJECT_CONFIGURATION(SPECBOX_CUSTOM,UPDATEFUNCTION,UPDATE_POWER_LIGHTNING)
	PLAY_MESSAGE(PLAYER0,SPEECH,80)
	SET_TIMER(PLAYER0,TIMER7)
	SET_TIMER(PLAYER4,TIMER0)
	SET_TIMER(PLAYER4,TIMER1)
	ADD_GOLD_TO_PLAYER(PLAYER0,10000)
	ADD_GOLD_TO_PLAYER(PLAYER1,10000)
	ADD_GOLD_TO_PLAYER(PLAYER3,900000)
	QUICK_OBJECTIVE(2,"Message from Warchief Grugnar. Task you he, build camp, smash pinkie fortress, an' take they shinies. Our lookers say many pink skins inside, but they still put on pants, not want come out and FIGHT yet. Grugnar say 'Good!' He say build camp first and then SMASH! Grugnar so smart, listen you to Grugnar.",8)
ENDIF

IF(PLAYER0,FLAG1 == 1)
	IF(PLAYER4,FLAG1 <= 5)
		IF(PLAYER4,TIMER1 > 15)
			NEXT_COMMAND_REUSABLE
			USE_POWER_AT_LOCATION(PLAYER0,PLAYER0,POWER_IMP,1,1)
			NEXT_COMMAND_REUSABLE
			USE_POWER_AT_LOCATION(PLAYER1,PLAYER1,POWER_IMP,1,1)
			NEXT_COMMAND_REUSABLE
			ADD_TO_FLAG(​PLAYER4,FLAG1,1)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER4,TIMER1)
		ENDIF
	ENDIF
ENDIF



	REM ### EASY DIFFICULTY CHANGES
	
IF(PLAYER0,BOX0_ACTIVATED == 1)
	CHANGE_SLAB_TYPE(33,64,DIRT,NONE)
	CHANGE_SLAB_TYPE(36,66,DIRT,NONE)
	CHANGE_SLAB_TYPE(34,66,DIRT,MATCH)
	CHANGE_SLAB_TYPE(27,74,PATH,MATCH)
	CHANGE_SLAB_TYPE(24,80,PATH,MATCH)
	
	CHANGE_SLAB_TYPE(37,81,GOLD,MATCH)
	CHANGE_SLAB_TYPE(23,66,GOLD,MATCH)
	CHANGE_SLAB_TYPE(10,69,GOLD,MATCH)
	SET_FLAG(PLAYER0,BOX1_ACTIVATED,1)
	REVEAL_MAP_LOCATION(PLAYER0,8,-1)
	
	ADD_GOLD_TO_PLAYER(PLAYER0,5000)
	SET_GAME_RULE(GEMEFFECTIVENESS,30)
	ADD_OBJECT_TO_LEVEL(SPECBOX_INCLEV,10,0)
	ADD_OBJECT_TO_LEVEL(SPECBOX_GETGOLD,11,0)
	
	IF(PLAYER3,TIMER0 > 4000)
		ADD_TO_TIMER(PLAYER3,TIMER0,-2000)
	ENDIF
	
	IF(PLAYER4,TIMER0 > 15)
		LEVEL_UP_PLAYERS_CREATURES(PLAYER_GOOD,ANY_CREATURE,-1)
		LEVEL_UP_PLAYERS_CREATURES(PLAYER_NEUTRAL,ANY_CREATURE,1)
	ENDIF
ENDIF



	REM ### NORMAL DIFFICULTY CHANGES

IF(PLAYER0,BOX1_ACTIVATED == 1)
	ADD_GOLD_TO_PLAYER(PLAYER0,5000)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_WOOD,61,175,0)
	ADD_OBJECT_TO_LEVEL_AT_POS(WRKBOX_WOOD,46,184,0)
	MAX_CREATURES(PLAYER3,20)
	
	IF(PLAYER4,FLAG1 == 4)
		USE_SPECIAL_INCREASE_LEVEL(PLAYER0,2)
	ENDIF
	
	IF(PLAYER1,TIMER1 > 8000)
		ADD_TO_TIMER(PLAYER1,TIMER1,-8000)
	ENDIF
	
	IF(PLAYER0,BOX0_ACTIVATED == 0)
		SET_FLAG(PLAYER0,BOX2_ACTIVATED,1)
	ENDIF
ENDIF



	REM ### HARD DIFFICULTY CHANGES

IF(PLAYER0,BOX2_ACTIVATED == 1)
	CHANGE_SLAB_TYPE(37,81,DIRT,MATCH)
	CHANGE_SLAB_TYPE(23,66,DIRT,MATCH)
	CHANGE_SLAB_TYPE(10,69,DIRT,MATCH)
	CHANGE_SLAB_TYPE(40,68,LAVA,NONE)
	CHANGE_SLAB_TYPE(42,68,LAVA,NONE)
	CHANGE_SLAB_TYPE(41,67,LAVA,MATCH)
	REVEAL_MAP_LOCATION(PLAYER0,PLAYER0,-1)
	ADD_OBJECT_TO_LEVEL(SPECBOX_GETGOLD,10,0)
	ADD_OBJECT_TO_LEVEL(SPECBOX_RESURCT,11,0)
	
	IF(PLAYER0,BOX1_ACTIVATED == 0)
		CREATURE_ENTRANCE_LEVEL(PLAYER3,3)
		ADD_PARTY_TO_LEVEL(PLAYER2,MIS8,PLAYER1,4)
		LEVEL_UP_PLAYERS_CREATURES(PLAYER2,ANY_CREATURE,1)
		MAX_CREATURES(PLAYER1,40)
	ENDIF
ENDIF




