LEVEL_VERSION(1)
SET_GENERATE_SPEED(400)
START_MONEY(PLAYER0,15000)
START_MONEY(PLAYER1,1000000)
START_MONEY(PLAYER2,15000)
MAX_CREATURES(PLAYER0,25)
MAX_CREATURES(PLAYER1,11)
MAX_CREATURES(PLAYER2,28)

SET_GAME_RULE(ImpWorkExperience, 300)
SET_PLAYER_COLOR(PLAYER0, WHITE)
SET_PLAYER_COLOR(PLAYER_GOOD, RED)

COMPUTER_PLAYER(PLAYER1,0)
COMPUTER_PLAYER(PLAYER2,0)
ALLY_PLAYERS(PLAYER0, PLAYER1, 3)
ALLY_PLAYERS(PLAYER2, PLAYER_GOOD, 3)

IF(PLAYER0, CAMPAIGN_FLAG1 == 1)
	REM Level up the existing imps to level 2
	LEVEL_UP_PLAYERS_CREATURES(PLAYER0, IMP, 1)

	REM Number of imps higher than level 1
	SET_FLAG(PLAYER_GOOD, FLAG6, 4)

	REM Number of total imps change
	SET_FLAG(PLAYER_GOOD, FLAG7, 0)

	IF(PLAYER_GOOD, FLAG7 == 0)
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG7, SET, PLAYER0, IMP, 0)

		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG7, DECREASE, PLAYER_GOOD, FLAG6, 0)
	ENDIF
	IF(PLAYER_GOOD, FLAG7 > 0)
		NEXT_COMMAND_REUSABLE
		ADD_TO_FLAG(PLAYER_GOOD, FLAG6, 1)
		
		NEXT_COMMAND_REUSABLE
		LEVEL_UP_CREATURE(PLAYER0, IMP, LEAST_EXPERIENCED, 1)
		
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG7, SET, PLAYER0, IMP, 0)

		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG7, DECREASE, PLAYER_GOOD, FLAG6, 0)
	ENDIF
	IF(PLAYER_GOOD, FLAG7 < 0)
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG6, SET, PLAYER0, IMP, 0)
		
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG7, SET, PLAYER0, IMP, 0)
		
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG7, DECREASE, PLAYER_GOOD, FLAG6, 0)
	ENDIF
ENDIF

ADD_CREATURE_TO_POOL(DWARFA,8)
ADD_CREATURE_TO_POOL(ARCHER,8)
ADD_CREATURE_TO_POOL(BARBARIAN,8)
ADD_CREATURE_TO_POOL(MONK,8)
ADD_CREATURE_TO_POOL(GIANT,8)
ADD_CREATURE_TO_POOL(FAIRY,8)
ADD_CREATURE_TO_POOL(WIZARD,8)
ADD_CREATURE_TO_POOL(WITCH,8)
ADD_CREATURE_TO_POOL(SAMURAI,8)

ADD_CREATURE_TO_POOL(TROLL,10)
ADD_CREATURE_TO_POOL(DRAGON,16)
ADD_CREATURE_TO_POOL(SORCEROR,5)
ADD_CREATURE_TO_POOL(BILE_DEMON,10)
ADD_CREATURE_TO_POOL(TENTACLE,3)
ADD_CREATURE_TO_POOL(ORC,16)
ADD_CREATURE_TO_POOL(HELL_HOUND,10)

CREATURE_AVAILABLE(PLAYER0,DWARFA,1,0)
CREATURE_AVAILABLE(PLAYER0,ARCHER,1,0)
CREATURE_AVAILABLE(PLAYER0,GIANT,1,0)
CREATURE_AVAILABLE(PLAYER0,MONK,1,0)
CREATURE_AVAILABLE(PLAYER0,BARBARIAN,1,0)
CREATURE_AVAILABLE(PLAYER0,FAIRY,1,0)
CREATURE_AVAILABLE(PLAYER0,WIZARD,1,0)
CREATURE_AVAILABLE(PLAYER0,WITCH,1,0)
CREATURE_AVAILABLE(PLAYER0,SAMURAI,1,0)

CREATURE_AVAILABLE(PLAYER1,DWARFA,1,0)
CREATURE_AVAILABLE(PLAYER1,ARCHER,1,0)
CREATURE_AVAILABLE(PLAYER1,GIANT,1,0)
CREATURE_AVAILABLE(PLAYER1,MONK,1,0)
CREATURE_AVAILABLE(PLAYER1,BARBARIAN,1,0)
CREATURE_AVAILABLE(PLAYER1,FAIRY,1,0)
CREATURE_AVAILABLE(PLAYER1,WIZARD,1,0)
CREATURE_AVAILABLE(PLAYER1,WITCH,1,0)
CREATURE_AVAILABLE(PLAYER1,SAMURAI,1,0)

CREATURE_AVAILABLE(PLAYER2,TROLL,1,0)
CREATURE_AVAILABLE(PLAYER2,DRAGON,1,0)
CREATURE_AVAILABLE(PLAYER2,DARK_MISTRESS,1,0)
CREATURE_AVAILABLE(PLAYER2,BILE_DEMON,1,0)
CREATURE_AVAILABLE(PLAYER2,TENTACLE,1,0)
CREATURE_AVAILABLE(PLAYER2,ORC,1,0)
CREATURE_AVAILABLE(PLAYER2,HELL_HOUND,1,0)

MAGIC_AVAILABLE(PLAYER0,POWER_IMP,1,1)
MAGIC_AVAILABLE(PLAYER1,POWER_IMP,0,0)
MAGIC_AVAILABLE(PLAYER2,POWER_IMP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HAND,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_POSSESS,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HAND,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SLAP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CONCEAL,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SIGHT,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_PROTECT,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_OBEY,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(PLAYER2,POWER_CALL_TO_ARMS,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)

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

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

REM Gold spawn
SET_TIMER(PLAYER0, TIMER0)
REM Attack waves
SET_TIMER(PLAYER0, TIMER1)
REM Attack waves intensity
SET_TIMER(PLAYER0, TIMER2)

REM Enemy attack intensity
SET_FLAG(PLAYER0, FLAG0, 1)
REM gold shrine 1
SET_FLAG(PLAYER0, FLAG1, 0) 
REM gold shrine 2
SET_FLAG(PLAYER0, FLAG2, 0)
REM Adding flag
SET_FLAG(PLAYER0, FLAG3, 1)

CREATE_PARTY(TIER1)
ADD_TO_PARTY(TIER1, BARBARIAN, 3, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER1, BARBARIAN, 3, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER1, MONK, 3, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER1, MONK, 3, 0, ATTACK_ENEMIES, 0)

CREATE_PARTY(TIER2)
ADD_TO_PARTY(TIER2, GIANT, 5, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER2, GIANT, 5, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER2, GIANT, 5, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER2, BARBARIAN, 5, 0, ATTACK_ENEMIES, 0)

CREATE_PARTY(TIER3)
ADD_TO_PARTY(TIER3, WIZARD, 6, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER3, WIZARD, 6, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER3, BARBARIAN, 6, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER3, BARBARIAN, 6, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER3, GIANT, 6, 0, ATTACK_ENEMIES, 0)

CREATE_PARTY(TIER4)
ADD_TO_PARTY(TIER4, ARCHER, 7, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER4, ARCHER, 7, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER4, GIANT, 7, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER4, GIANT, 7, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER4, BARBARIAN, 7, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER4, WIZARD, 7, 0, ATTACK_ENEMIES, 0)

CREATE_PARTY(TIER5)
ADD_TO_PARTY(TIER5, ARCHER, 8, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER5, ARCHER, 8, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER5, GIANT, 8, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER5, GIANT, 8, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER5, BARBARIAN, 8, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER5, WIZARD, 8, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER5, THIEF, 8, 0, ATTACK_ENEMIES, 0)

CREATE_PARTY(TIER6)
ADD_TO_PARTY(TIER6, WIZARD, 9, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER6, WIZARD, 9, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER6, BARBARIAN, 9, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER6, BARBARIAN, 9, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER6, BARBARIAN, 9, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER6, GIANT, 9, 0, ATTACK_ENEMIES, 0)
ADD_TO_PARTY(TIER6, GIANT, 9, 0, ATTACK_ENEMIES, 0)

REM QUICK_OBJECTIVE(1, "We've cornered the traitor along side a baron he was trying to defect to. Make an example out of them both.", 1)
DISPLAY_OBJECTIVE(60, PLAYER0)

REM If player saved blue earlier, they're back to help.
REM Otherwise, kill them.
IF(PLAYER0, TIMER0 > 20)
	IF(PLAYER0, CAMPAIGN_FLAG0 == 1)
		REM QUICK_INFORMATION(2, "Forces loyal to the king have arrived to aid us and hold off the waves of enemies that may approach. It seems to be the same group we saved previously.")
		DISPLAY_INFORMATION(61)
		SET_GAME_RULE(AlliesShareDrop, 1)
		SET_GAME_RULE(AlliesShareVision, 1)
		REVEAL_MAP_RECT(PLAYER0, 35, 208, 25, 25)
		REVEAL_MAP_RECT(PLAYER0, 10, 208, 25, 25)
		REVEAL_MAP_RECT(PLAYER0, 61, 189, 17, 17)
	ENDIF
	IF(PLAYER0, CAMPAIGN_FLAG0 == 0)
		REM QUICK_INFORMATION(3, "Judging by the ruins adjacent to us, the last keeper sent to exterminate this baron failed. See that you do not follow his mistake, and guard well against the attacks.")
		DISPLAY_INFORMATION(62)
		SET_HEART_HEALTH(PLAYER1, 0)
	ENDIF
ENDIF

REM Gold Shrine Owner section
IF_SLAB_OWNER(78, 69, PLAYER0)
	SET_FLAG(PLAYER0, FLAG1, 1)
ENDIF
IF_SLAB_OWNER(78, 75, PLAYER0)
	SET_FLAG(PLAYER0, FLAG2, 1)
ENDIF

REM Spawn gold every 1 minute
IF(PLAYER0, TIMER0 >= 1200)
	IF(PLAYER0, FLAG1 == 1)
		NEXT_COMMAND_REUSABLE
		ADD_OBJECT_TO_LEVEL(GOLD_CHEST, 1, 1000, PLAYER0)
		NEXT_COMMAND_REUSABLE
	ENDIF
	IF(PLAYER0, FLAG2 == 1)
		NEXT_COMMAND_REUSABLE
		ADD_OBJECT_TO_LEVEL(GOLD_CHEST, 1, 1000, PLAYER0)
		NEXT_COMMAND_REUSABLE
	ENDIF
	
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER0, TIMER0)
ENDIF

REM Every 6 minutes, escalate wave
IF(PLAYER0, TIMER2 >= 7200)
	IF(PLAYER0, FLAG0 < 6)
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER0, FLAG0, INCREASE, PLAYER0, FLAG3, 0)
		
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER0, TIMER2)
	ENDIF
ENDIF

REM Every 3 minutes, spawn hero wave.
IF(PLAYER0, TIMER1 >= 3600)
	IF(PLAYER0, FLAG0 == 6)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, TIER6, -1, 1)
	ENDIF
	IF(PLAYER0, FLAG0 == 5)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, TIER5, -1, 1)
	ENDIF
	IF(PLAYER0, FLAG0 == 4)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, TIER4, -1, 1)
	ENDIF
	IF(PLAYER0, FLAG0 == 3)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, TIER3, -1, 1)
	ENDIF
	IF(PLAYER0, FLAG0 == 2)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, TIER2, -1, 1)
	ENDIF
	IF(PLAYER0, FLAG0 == 1)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, TIER1, -1, 1)
	ENDIF
	
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER0, TIMER1)
ENDIF

IF(PLAYER0, TIMER0 >= 6000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE1, -1, 1)
ENDIF

IF(PLAYER0, TIMER0 >= 12000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE2, -1, 1)
ENDIF

IF(PLAYER0, TIMER0 >= 18000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE3, -1, 1)
ENDIF

IF(PLAYER0, TIMER0 >= 24000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE4, -1, 1)
ENDIF

IF(PLAYER0, KNIGHT > 1)
	REM Unlikely, but I guess possible
	REM QUICK_INFORMATION(5, "This was an unexpected outcome, but one would hope the king will be pleased with your initiative.")
	DISPLAY_INFORMATION(63)
ENDIF

IF(PLAYER2, DUNGEON_DESTROYED == 1)
	IF(PLAYER2, AVATAR == 0)
		REM QUICK_INFORMATION(4, "Well done, the king will surely be pleased with your performance.")
		DISPLAY_INFORMATION(64)
		WIN_GAME
	ENDIF
ENDIF
