LEVEL_VERSION(1)
SET_GENERATE_SPEED(400)
START_MONEY(PLAYER0,10000)
START_MONEY(PLAYER1,100000)
MAX_CREATURES(PLAYER0,20)
MAX_CREATURES(PLAYER1,1)

SET_CREATURE_CONFIGURATION(THIEF, PrimaryJobs, TRAIN)
SET_CREATURE_MAX_LEVEL(PLAYER1, THIEF, 3)

SET_GAME_RULE(ImpWorkExperience, 300)
SET_GAME_RULE(AlliesShareDrop, 1)
SET_GAME_RULE(AlliesShareVision, 1)

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

ADD_CREATURE_TO_POOL(DWARFA,7)
ADD_CREATURE_TO_POOL(ARCHER,7)
ADD_CREATURE_TO_POOL(BARBARIAN,7)
ADD_CREATURE_TO_POOL(FAIRY,7)

CREATURE_AVAILABLE(PLAYER0,DWARFA,1,0)
CREATURE_AVAILABLE(PLAYER0,ARCHER,1,0)
CREATURE_AVAILABLE(PLAYER0,BARBARIAN,1,0)
CREATURE_AVAILABLE(PLAYER0,FAIRY,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,GUARD_POST,1,0)

MAGIC_AVAILABLE(PLAYER0,POWER_HAND,1,1)
MAGIC_AVAILABLE(PLAYER0,POWER_SLAP,1,1)
MAGIC_AVAILABLE(PLAYER0,POWER_POSSESS,1,1)
MAGIC_AVAILABLE(PLAYER0,POWER_IMP,1,1)
MAGIC_AVAILABLE(PLAYER0,POWER_SIGHT,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_OBEY,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_CONCEAL,1,0)

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

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

SET_FLAG(PLAYER_GOOD, FLAG0, 1) REM Spawn Waves
SET_FLAG(PLAYER_GOOD, FLAG1, 0) REM Escalation 1
SET_FLAG(PLAYER_GOOD, FLAG2, 0) REM Counting flag for number of PATROL4 spawned
SET_FLAG(PLAYER_GOOD, FLAG3, 1) REM It's my "1" flag
SET_FLAG(PLAYER_GOOD, FLAG4, 0) REM Alarm

SET_TIMER(PLAYER0, TIMER0) REM Constant timer
SET_TIMER(PLAYER0, TIMER1) REM wave timer
SET_TIMER(PLAYER0, TIMER2) REM wave escalation timer

CREATE_PARTY(PATROL1)
ADD_TO_PARTY(PATROL1, DWARFA, 3, 100, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL1, DWARFA, 3, 100, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL1, ARCHER, 3, 100, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL1, WIZARD, 3, 100, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL1, BARBARIAN, 3, 100, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(PATROL2)
ADD_TO_PARTY(PATROL2, DWARFA, 5, 500, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL2, BARBARIAN, 5, 500, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL2, ARCHER, 5, 500, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL2, WIZARD, 5, 500, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL2, BARBARIAN, 5, 500, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(PATROL3)
ADD_TO_PARTY(PATROL3, GIANT, 6, 1000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL3, GIANT, 6, 1000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL3, ARCHER, 6, 1000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL3, ARCHER, 6, 1000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL3, WIZARD, 6, 1000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL3, BARBARIAN, 6, 1000, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(PATROL4)
ADD_TO_PARTY(PATROL4, BARBARIAN, 7, 2000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL4, BARBARIAN, 7, 2000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL4, ARCHER, 7, 2000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL4, WIZARD, 7, 2000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL4, WIZARD, 7, 2000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL4, GIANT, 7, 2000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(PATROL4, GIANT, 7, 2000, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(LORD)
ADD_TO_PARTY(LORD, KNIGHT, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, SAMURAI, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, SAMURAI, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, ARCHER, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, WIZARD, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, WIZARD, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, GIANT, 10, 5000, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(LORD, GIANT, 10, 5000, ATTACK_DUNGEON_HEART, 0)

REM QUICK_OBJECTIVE(1, "The king's friend has carved out a nook for himself; he does not yet trust you enough to follow your orders, at least he is mostly out of the way. Crush the opposition in your path.", PLAYER0)
DISPLAY_OBJECTIVE(24, PLAYER0)

REM Main patrol spawning
IF(PLAYER0, TIMER1 >= 5000)
	IF(PLAYER_GOOD, FLAG0 == 1)
		IF(PLAYER_GOOD, FLAG1 == 0)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD, PATROL1, -1, 1)
		ENDIF
		IF(PLAYER_GOOD, FLAG1 == 1)
			NEXT_COMMAND_REUSABLE
			ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD, PATROL2, -1, DUNGEON, 1, 3, 500)
		ENDIF
		IF(PLAYER_GOOD, FLAG1 == 2)
			NEXT_COMMAND_REUSABLE
			ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD, PATROL3, -1, DUNGEON, 1, 3, 1000)
		ENDIF
		IF(PLAYER_GOOD, FLAG1 == 3)
			NEXT_COMMAND_REUSABLE
			ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD, PATROL4, -1, DUNGEON, 1, 3, 2000)
			IF(PLAYER_GOOD, FLAG2 < 3)
				NEXT_COMMAND_REUSABLE
				COMPUTE_FLAG(PLAYER_GOOD, FLAG2, INCREASE, PLAYER_GOOD, FLAG3, 0)
			ENDIF
		ENDIF
		
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER0, TIMER1)
	ENDIF
ENDIF

IF_ACTION_POINT(1, PLAYER0)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, LORD, 1, 1)
ENDIF

REM Escalation rating increases every 5 minutes, or if certain areas are breached
REM Once PATROL4 is spawned 3 times, stop spawning waves

IF(PLAYER0, TIMER2 > 8000)
	IF(PLAYER_GOOD, FLAG1 < 3)
		NEXT_COMMAND_REUSABLE
		COMPUTE_FLAG(PLAYER_GOOD, FLAG1, INCREASE, PLAYER_GOOD, FLAG3, 0)
	ENDIF
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER0, TIMER2)
ENDIF

IF_ACTION_POINT(4, PLAYER0)
	ROOM_AVAILABLE(PLAYER0,WORKSHOP,1,1)
ENDIF

IF(PLAYER_GOOD, FLAG2 == 3)
	SET_FLAG(PLAYER_GOOD, FLAG0, 0)
	REM QUICK_INFORMATION(3, "Looks like he finally ran out of reinforcements, there is nothing to distract you from eliminating the enemy now.")
	DISPLAY_INFORMATION(25)
ENDIF

IF(PLAYER_GOOD, KNIGHT == 0)
	IF(PLAYER_GOOD, DUNGEON_DESTROYED == 1)
		WIN_GAME
	ENDIF
ENDIF

IF(PLAYER1, THIEF == 0)
	REM QUICK_INFORMATION(4, "The king is most displeased with your failure, I doubt you'll keep your head after this.")
	DISPLAY_INFORMATION(26)
	LOSE_GAME
ENDIF
