LEVEL_VERSION(1)
SET_GENERATE_SPEED(400)
START_MONEY(PLAYER0,15000)
MAX_CREATURES(ALL_PLAYERS,25)

SET_GAME_RULE(ImpWorkExperience, 300)
SET_CREATURE_CONFIGURATION(THIEF, PrimaryJobs, TRAIN)
SET_CREATURE_MAX_LEVEL(PLAYER0, THIEF, 9)
SET_PLAYER_COLOR(PLAYER0, WHITE)
SET_PLAYER_COLOR(PLAYER_GOOD, RED)

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,5)

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)

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)

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_SIGHT,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_OBEY,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_SPEED,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_CALL_TO_ARMS,1,0)

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)

REM Constant timer
SET_TIMER(PLAYER0, TIMER0)
REM Gold Spawn timer
SET_TIMER(PLAYER0, TIMER1)
REM SET_TIMER(PLAYER0, TIMER2) - Detection timer, 1 minute to kick down the door, kill creatures and capture guardpost
REM SET_TIMER(PLAYER0, TIMER3) - Detection timer
REM SET_TIMER(PLAYER0, TIMER4) - Detection timer

REM Gold Shrine
SET_FLAG(PLAYER0, FLAG0, 0)
REM Outpost 1 status, 0 = active, 2 = destroyed
SET_FLAG(PLAYER0, FLAG1, 0)
REM Outpost 2 status
SET_FLAG(PLAYER0, FLAG2, 0)
REM Outpost 3 status
SET_FLAG(PLAYER0, FLAG3, 0)
REM Spawn reinforcements? 
SET_FLAG(PLAYER0, FLAG4, 0)

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

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

	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

CREATE_PARTY(REINFORCEMENTS1)
ADD_TO_PARTY(REINFORCEMENTS1, ORC, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS1, ORC, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS1, ORC, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS1, DARK_MISTRESS, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS1, DARK_MISTRESS, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS1, SPIDER, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS1, SKELETON, 8, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(REINFORCEMENTS2)
ADD_TO_PARTY(REINFORCEMENTS2, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS2, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS2, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS2, BILE_DEMON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS2, BILE_DEMON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(REINFORCEMENTS2, TROLL, 8, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(LORD)
ADD_TO_PARTY(LORD, KNIGHT, 10, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(LORD, HORNY, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(LORD, HORNY, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(LORD, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(LORD, DRAGON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(LORD, BILE_DEMON, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(LORD, BILE_DEMON, 8, 0, ATTACK_ENEMIES, 200)

REM QUICK_OBJECTIVE(1, "This fortress is your next target keeper. It is well guarded and there is only one way in. If they are given time they will call for reinforcements. However if we are able to disable their outlying outposts before they can call for help, it may sow confusion and buy us a little bit more time.", PLAYER0)
DISPLAY_OBJECTIVE(37, PLAYER0)

DISPLAY_COUNTDOWN(PLAYER0, TIMER0, 15600, 1)

REM Gold Shrine Owner section
IF_SLAB_OWNER(75, 76, PLAYER0)
	SET_FLAG(PLAYER0, FLAG0, 1)
ENDIF

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

REM Player has 13 minutes before reinforcements arrive.
REM Every outpost destroyed adds 6 minutes (Unless they fail to take it out fast enough)
IF(PLAYER0,TIMER0 >= 15600)
	SET_FLAG(PLAYER0, FLAG4, 1)
ENDIF

REM At action point 6 it's time for the reinforcements, should be easy to deal with now though
IF_ACTION_POINT(6, PLAYER0)
	SET_FLAG(PLAYER0, FLAG4, 1)
	ADD_TO_TIMER(PLAYER0, TIMER0, 10000)
ENDIF

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

IF(PLAYER_GOOD, GUARD_POST < 31)
	IF(PLAYER0, FLAG1 == 0)
		SET_FLAG(PLAYER0, FLAG1, 2)
		ADD_TO_TIMER(PLAYER0, TIMER0, -7200)
	ENDIF
ENDIF

IF(PLAYER_GOOD, GUARD_POST < 25)
	IF(PLAYER0, FLAG2 == 0)
		SET_FLAG(PLAYER0, FLAG2, 2)
		ADD_TO_TIMER(PLAYER0, TIMER0, -7200)
	ENDIF
ENDIF

IF(PLAYER_GOOD, GUARD_POST < 15)
	IF(PLAYER0, FLAG3 == 0)
		SET_FLAG(PLAYER0, FLAG3, 2)
		ADD_TO_TIMER(PLAYER0, TIMER0, -7200)
	ENDIF
ENDIF

IF(PLAYER0, FLAG4 == 1)
	REM QUICK_INFORMATION(2, "Their reinforcements have arrived! Slaughter them all.")
	DISPLAY_INFORMATION(38)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, REINFORCEMENTS1, -1, 1) 
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, REINFORCEMENTS2, -1, 1) 
ENDIF

IF_ACTION_POINT(7, PLAYER0)
	IF(PLAYER0, FLAG4 == 0)
		REM QUICK_INFORMATION(3, "Doubtlessly if we advance any further there will be no denying our assault, and they will send their troops. We best prepare before venturing forth.")
		DISPLAY_INFORMATION(39)
	ENDIF
ENDIF

IF(PLAYER0,ENTRANCE >= 10)
    MAX_CREATURES(PLAYER0,30)
ENDIF
IF(PLAYER0,ENTRANCE >= 20)
    MAX_CREATURES(PLAYER0,35)
ENDIF

IF(PLAYER0, WORKSHOP > 0)
	ROOM_AVAILABLE(PLAYER0,WORKSHOP,1,1)
ENDIF
IF(PLAYER0, GUARD_POST > 0)
	ROOM_AVAILABLE(PLAYER0,GUARD_POST,1,1)
ENDIF
IF(PLAYER0, TEMPLE > 1)
	ROOM_AVAILABLE(PLAYER0,TEMPLE,1,1)
ENDIF
IF(PLAYER0, TORTURE > 0)
	ROOM_AVAILABLE(PLAYER0,TORTURE,1,1)
ENDIF

IF(PLAYER_GOOD,DUNGEON_DESTROYED == 1)
	IF(PLAYER_GOOD, KNIGHT == 0)
		REM QUICK_OBJECTIVE(4,"Excellent, with your enemy defeated we can leave this fortress behind.", PLAYER0)
		DISPLAY_INFORMATION(40)
		WIN_GAME
	ENDIF
ENDIF

IF(PLAYER0, THIEF == 0)
	LOSE_GAME
ENDIF