LEVEL_VERSION(1)
SET_GENERATE_SPEED(400)
START_MONEY(PLAYER0,10000)
START_MONEY(PLAYER1,500000)
MAX_CREATURES(ALL_PLAYERS,25)

SET_GAME_RULE(ImpWorkExperience, 300)
SET_CREATURE_CONFIGURATION(THIEF, PrimaryJobs, GUARD)
SET_CREATURE_MAX_LEVEL(PLAYER1, THIEF, 10)

COMPUTER_PLAYER(PLAYER1,0)
ALLY_PLAYERS(PLAYER0, PLAYER1, 3)
SET_GAME_RULE(AlliesShareDrop, 1)
SET_GAME_RULE(AlliesShareVision, 1)

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)

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)

ROOM_AVAILABLE(PLAYER0,TREASURE,1,1)
ROOM_AVAILABLE(PLAYER0,LAIR,1,1)
ROOM_AVAILABLE(PLAYER0,GARDEN,1,1)
ROOM_AVAILABLE(PLAYER0,TRAINING,1,1)
ROOM_AVAILABLE(PLAYER0,RESEARCH,1,1)
ROOM_AVAILABLE(PLAYER0,TEMPLE,1,1)
ROOM_AVAILABLE(PLAYER0,WORKSHOP,1,1)
ROOM_AVAILABLE(PLAYER0,TORTURE,1,1)
ROOM_AVAILABLE(PLAYER0,GUARD_POST,1,1)
ROOM_AVAILABLE(PLAYER0,BARRACKS,1,1)

MAGIC_AVAILABLE(PLAYER0,POWER_HAND,1,1)
MAGIC_AVAILABLE(PLAYER0,POWER_SLAP,1,1)
MAGIC_AVAILABLE(PLAYER0,POWER_POSSESS,1,1)

TRAP_AVAILABLE(PLAYER0,ALARM,1,0)
TRAP_AVAILABLE(PLAYER0,POISON_GAS,1,0)
TRAP_AVAILABLE(PLAYER0,LIGHTNING,1,0)

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

SET_TIMER(PLAYER0, TIMER0) REM Constant timer

SET_FLAG(PLAYER0, FLAG0, 0) REM Leader defeated

CREATE_PARTY(WAVE1A)
ADD_TO_PARTY(WAVE1A, ORC, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1A, ORC, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1A, ORC, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1A, SPIDER, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1A, SPIDER, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1A, DEMONSPAWN, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1A, DEMONSPAWN, 3, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE1B)
ADD_TO_PARTY(WAVE1B, TENTACLE, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1B, TENTACLE, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1B, TENTACLE, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1B, TROLL, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1B, TROLL, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1B, TROLL, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1B, TROLL, 3, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE2A)
ADD_TO_PARTY(WAVE2A, DRAGON, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2A, DRAGON, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2A, DRAGON, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2A, BILE_DEMON, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2A, BILE_DEMON, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2A, TROLL, 4, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE2B)
ADD_TO_PARTY(WAVE2B, WARLOCK, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2B, WARLOCK, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2B, WARLOCK, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2B, WARLOCK, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2B, ORC, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2B, ORC, 4, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE3A)
ADD_TO_PARTY(WAVE3A, DRAGON, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3A, DRAGON, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3A, DRAGON, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3A, BILE_DEMON, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3A, BILE_DEMON, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3A, TROLL, 6, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE3B)
ADD_TO_PARTY(WAVE3B, WARLOCK, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3B, WARLOCK, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3B, WARLOCK, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3B, WARLOCK, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3B, ORC, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3B, ORC, 6, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE4A)
ADD_TO_PARTY(WAVE4A, DARK_MISTRESS, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4A, ORC, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4A, ORC, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4A, HELL_HOUND, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4A, HELL_HOUND, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4A, HELL_HOUND, 8, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE4B)
ADD_TO_PARTY(WAVE4B, SPIDER, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4B, SPIDER, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4B, SPIDER, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4B, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4B, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4B, DRAGON, 8, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE5A)
ADD_TO_PARTY(WAVE5A, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5A, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5A, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5A, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5A, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5A, SKELETON, 10, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE5B)
ADD_TO_PARTY(WAVE5B, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5B, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5B, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5B, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5B, SKELETON, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE5B, SKELETON, 10, 0, ATTACK_ENEMIES, 200)

REM QUICK_OBJECTIVE(1, "It was a trap, our forces are all but destroyed but we've managed to fall back to the fortress we just left. We caused sufficient casualties to cause our enemy to need to regroup before he can launch assaults on us. We best make use of this time as best we can, weather the storm and then crush that fool.", PLAYER0)
DISPLAY_OBJECTIVE(41, PLAYER0)

IF(PLAYER0, TIMER0 > 20)
	REM QUICK_INFORMATION(6, "It looks like the King's friend has chosen an unpleasant time to grow independent and unwilling to follow orders, hopefully he won't prove too much of a problem.")
	DISPLAY_INFORMATION(42)
ENDIF

REM Player has 5 minutes before the waves begin, escalating every 5 minutes.
REM Each wave has A, and B. B spawns 1 minute after A. 
REM Wave B can be cancelled if the player launches an attack and kills the enemy knight, but is not expected

IF(PLAYER0, TIMER0 >= 1200)
	SET_TIMER(PLAYER0, TIMER1)
ENDIF

IF(PLAYER0, TIMER0 >= 6000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE1A, -1, 1)
	REM QUICK_INFORMATION(2, "Their first wave of forces have arrived, they will only grow from here.")
	DISPLAY_INFORMATION(43)
ENDIF

IF(PLAYER0, TIMER1 >= 6000)
	IF(PLAYER0, FLAG0 == 0)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE1B, -2, 1)
	ENDIF
ENDIF

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

IF(PLAYER0, TIMER1 >= 12000)
	IF(PLAYER0, FLAG0 == 0)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE2B, -2, 1)
	ENDIF
ENDIF

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

IF(PLAYER0, TIMER1 >= 18000)
	IF(PLAYER0, FLAG0 == 0)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE3B, -2, 1)
	ENDIF
ENDIF

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

IF(PLAYER0, TIMER1 >= 24000)
	IF(PLAYER0, FLAG0 == 0)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE4B, -2, 1)
	ENDIF
ENDIF

IF(PLAYER0, TIMER0 >= 30000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE5A, -1, 1)
	IF(PLAYER0, FLAG0 == 1)
		REM QUICK_INFORMATION(3, "This is the last of their forces in reserve, after these are crushed nothing will stop us from pushing forward and showing the lord the error of his ways.")
		DISPLAY_INFORMATION(44)
	ENDIF
ENDIF

IF(PLAYER0, TIMER1 >= 30000)
	IF(PLAYER0, FLAG0 == 0)
		REM QUICK_INFORMATION(3, "This is the last of their forces in reserve, after these are crushed nothing will stop us from pushing forward and showing the lord the error of his ways.")
		DISPLAY_INFORMATION(44)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, WAVE5B, -2, 1)
	ENDIF
ENDIF

IF(PLAYER_GOOD, KNIGHT == 0)
	IF(PLAYER0, TIMER1 < 30000)
		REM QUICK_INFORMATION(4, "Nicely done, with their lord dead the rest of their forces have become much more disorganized. We should have less to worry about now.")
		DISPLAY_INFORMATION(45)
		SET_FLAG(PLAYER0, FLAG0, 1)
	ENDIF
ENDIF

IF(PLAYER0, TIMER1 > 30000)
	IF(PLAYER_GOOD, TOTAL_CREATURES == 0)
		REM QUICK_INFORMATION(5, "With the decapitation of their leader, and the destruction of their elite forces. The rest of their troops are in full retreat, we can finally move on from this accursed place.")
		DISPLAY_INFORMATION(46)
		WIN_GAME
	ENDIF
ENDIF

IF(PLAYER1, THIEF == 0)
	LOSE_GAME
ENDIF