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

SET_GAME_RULE(ImpWorkExperience, 300)
SET_CREATURE_CONFIGURATION(KNIGHT, PrimaryJobs, TRAIN)
SET_CREATURE_MAX_LEVEL(PLAYER0, KNIGHT, 3)
SET_PLAYER_COLOR(PLAYER0, WHITE)
SET_PLAYER_COLOR(PLAYER_GOOD, RED)

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,0)
ROOM_AVAILABLE(PLAYER0,WORKSHOP,1,0)
ROOM_AVAILABLE(PLAYER0,TORTURE,1,0)
ROOM_AVAILABLE(PLAYER0,GUARD_POST,1,0)
ROOM_AVAILABLE(PLAYER0,BARRACKS,1,0)

MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HAND,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SLAP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,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_SPEED,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_PROTECT,1,0)
MAGIC_AVAILABLE(PLAYER0,POWER_CONCEAL,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)
DOOR_AVAILABLE(PLAYER0,MAGIC,1,0)

REM Constant timer
SET_TIMER(PLAYER0, TIMER0)
REM Gold timer
SET_TIMER(PLAYER0, TIMER1)

REM Gold timer
SET_FLAG(PLAYER0, FLAG0, 0)
REM Left Samurai Defeated
SET_FLAG(PLAYER0, FLAG1, 0)
REM Right Samurai Defeated
SET_FLAG(PLAYER0, FLAG2, 0)
REM Blue keeper saved
SET_FLAG(PLAYER0, FLAG3, 0)

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

CREATE_PARTY(WAVE1)
ADD_TO_PARTY(WAVE1, BARBARIAN, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1, BARBARIAN, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1, BARBARIAN, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1, MONK, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1, MONK, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1, MONK, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE1, FAIRY, 4, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE2)
ADD_TO_PARTY(WAVE2, GIANT, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2, GIANT, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2, GIANT, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2, FAIRY, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2, FAIRY, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE2, MONK, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE3)
ADD_TO_PARTY(WAVE3, WITCH, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3, WITCH, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3, GIANT, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3, GIANT, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3, FAIRY, 6, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE3, FAIRY, 6, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WAVE4)
ADD_TO_PARTY(WAVE4, WIZARD, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4, WIZARD, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4, GIANT, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4, GIANT, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4, GIANT, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4, BARBARIAN, 8, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WAVE4, FAIRY, 8, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(LORD)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)
ADD_TO_PARTY(LORD, SAMURAI, 10, 0, ATTACK_ENEMIES, 10000)

CREATE_PARTY(DWARFS9)
ADD_TO_PARTY(DWARFS9, DWARFA, 9, 200, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(DWARFGIANT)
ADD_TO_PARTY(DWARFGIANT, DWARFA, 9, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(DWARFGIANT, DWARFA, 9, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(DWARFGIANT, DWARFA, 9, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(DWARFGIANT, GIANT, 9, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(DWARFGIANT, GIANT, 9, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(DWARFGIANT, GIANT, 9, 200, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(THIEFS9)
ADD_TO_PARTY(THIEFS9, THIEF, 9, 200, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(THIEFS6)
ADD_TO_PARTY(THIEFS6, THIEF, 6, 200, ATTACK_DUNGEON_HEART, 0)

CREATE_PARTY(MONKBARBARIAN)
ADD_TO_PARTY(MONKBARBARIAN, BARBARIAN, 6, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(MONKBARBARIAN, BARBARIAN, 6, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(MONKBARBARIAN, MONK, 6, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(MONKBARBARIAN, MONK, 6, 200, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(MONKBARBARIAN, MONK, 6, 200, ATTACK_DUNGEON_HEART, 0)

REM QUICK_OBJECTIVE(1, "It would seem our path is blocked by a group of 12 samurai? This is most unusual, regardless slaughter those that would stand in your way.", PLAYER0)
DISPLAY_OBJECTIVE(47, PLAYER0)

IF(PLAYER0, TIMER0 > 200)
	REM QUICK_INFORMATION(2, "A small outpost of the king's forces are attempting to withdraw, with our aid we could hold off the attacks and give them the time they need... or allow them to meet their bloody demise.")
	DISPLAY_INFORMATION(48)
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, TIMER0 >= 28000)
	IF(PLAYER1, DUNGEON_DESTROYED == 0)
		REM QUICK_INFORMATION(3, "They have managed to withdraw successfully, well done. The King will surely be pleased with your initiative.")
		DISPLAY_INFORMATION(49)
		SET_FLAG(PLAYER0, FLAG3, 1)
		EXPORT_VARIABLE(PLAYER0, FLAG3, CAMPAIGN_FLAG0)
		REM Make blue keeper "leave"
		SET_HEART_HEALTH(PLAYER1, 0)
	ENDIF
ENDIF

REM Gold Shrine Owner section
IF_SLAB_OWNER(7, 38, 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, 2, 1000, PLAYER0)
	ENDIF
	
	NEXT_COMMAND_REUSABLE
	SET_TIMER(PLAYER0, TIMER1)
ENDIF

IF_ACTION_POINT(3, PLAYER0)
	REM QUICK_INFORMATION(4, "Most of the samurai have sealed themselves into the central fortress, only powerful magics will be able to break into them. Our spies indicate two lieutenants, hold fragments of this knowledge that could be combined.")
	DISPLAY_INFORMATION(50)
ENDIF

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

IF_ACTION_POINT(7, PLAYER0)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, THIEFS6, 9, 8)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD, MONKBARBARIAN, 8, 1)
ENDIF

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

IF(PLAYER_GOOD, SAMURAI < 3)
	SET_FLAG(PLAYER0, FLAG1, 1)
ENDIF

IF(PLAYER_GOOD, SAMURAI < 2)
	SET_FLAG(PLAYER0, FLAG2, 1)
ENDIF

REM Fallback in case of imprisioned samurai instead
IF(PLAYER_GOOD, BARRACKS < 30)
	SET_FLAG(PLAYER0, FLAG1, 1)
ENDIF

IF(PLAYER_GOOD, BARRACKS < 15)
	SET_FLAG(PLAYER0, FLAG2, 1)
ENDIF

IF(PLAYER0, FLAG1 == 1)
	IF(PLAYER0, FLAG2 == 1)
		MAGIC_AVAILABLE(PLAYER0,POWER_DESTROY_WALLS,1,1)
		REM QUICK_INFORMATION(5, "With the magic acquired, we can storm the last fortress and kill the rest of these pesky samurai.")
		DISPLAY_INFORMATION(51)

		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, DWARFS9, 4, 6)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, DWARFGIANT, 5, 1)
		ADD_PARTY_TO_LEVEL(PLAYER_GOOD, THIEFS9, 6, 4)
	ENDIF
ENDIF

IF(PLAYER_GOOD, DUNGEON_DESTROYED == 1)
	IF(PLAYER_GOOD, SAMURAI == 0)
		REM QUICK_INFORMATION(6, "Excellent, with these samurai defeated we can continue on.")	
		DISPLAY_INFORMATION(52)
		WIN_GAME
	ENDIF
ENDIF

IF(PLAYER0, KNIGHT == 0)
	LOSE_GAME
ENDIF