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)

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)

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

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

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)

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(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)
	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