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

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

REM No teleport for you
SET_CREATURE_INSTANCE(VAMPIRE, 4, NULL, 4)

ADD_CREATURE_TO_POOL(DWARFA,7)
ADD_CREATURE_TO_POOL(ARCHER,7)
ADD_CREATURE_TO_POOL(BARBARIAN,7)
ADD_CREATURE_TO_POOL(GIANT,7)
ADD_CREATURE_TO_POOL(FAIRY,7)
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,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)
ROOM_AVAILABLE(PLAYER0,WORKSHOP,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_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)

TRAP_AVAILABLE(PLAYER0,ALARM,1,0)
TRAP_AVAILABLE(PLAYER0,POISON_GAS,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 Gold Shrine
SET_FLAG(PLAYER0, FLAG0, 0) 

CREATE_PARTY(GREEN1)
ADD_TO_PARTY(GREEN1, ORC, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN1, BILE_DEMON, 3, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(GREEN2)
ADD_TO_PARTY(GREEN2, ORC, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN2, BILE_DEMON, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN2, BILE_DEMON, 4, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(GREEN3)
ADD_TO_PARTY(GREEN3, ORC, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN3, BILE_DEMON, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN3, BILE_DEMON, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(GREEN4)
ADD_TO_PARTY(GREEN4, ORC, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN4, BILE_DEMON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN4, BILE_DEMON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(GREEN4, BILE_DEMON, 7, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(BLUE1)
ADD_TO_PARTY(BLUE1, TROLL, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE1, WARLOCK, 3, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(BLUE2)
ADD_TO_PARTY(BLUE2, TROLL, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE2, WARLOCK, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE2, WARLOCK, 4, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(BLUE3)
ADD_TO_PARTY(BLUE3, TROLL, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE3, WARLOCK, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE3, WARLOCK, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(BLUE4)
ADD_TO_PARTY(BLUE4, TROLL, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE4, BILE_DEMON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE4, WARLOCK, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(BLUE4, WARLOCK, 7, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(YELLOW1)
ADD_TO_PARTY(YELLOW1, HELL_HOUND, 3, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW1, DEMONSPAWN, 3, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(YELLOW2)
ADD_TO_PARTY(YELLOW2, HELL_HOUND, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW2, DEMONSPAWN, 4, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW2, DRAGON, 4, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(YELLOW3)
ADD_TO_PARTY(YELLOW3, HELL_HOUND, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW3, DEMONSPAWN, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW3, DRAGON, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(YELLOW4)
ADD_TO_PARTY(YELLOW4, HELL_HOUND, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW4, HELL_HOUND, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW4, DRAGON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(YELLOW4, DRAGON, 7, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WHITETOP1)
ADD_TO_PARTY(WHITETOP1, SKELETON, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITETOP1, VAMPIRE, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITETOP1, GHOST, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WHITETOP2)
ADD_TO_PARTY(WHITETOP2, SKELETON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITETOP2, SKELETON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITETOP2, VAMPIRE, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITETOP2, VAMPIRE, 7, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WHITERIGHT1)
ADD_TO_PARTY(WHITERIGHT1, SPIDER, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITERIGHT1, SPIDER, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITERIGHT1, SPIDER, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WHITERIGHT2)
ADD_TO_PARTY(WHITERIGHT2, SPIDER, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITERIGHT2, SPIDER, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITERIGHT2, SPIDER, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITERIGHT2, VAMPIRE, 7, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WHITELEFT1)
ADD_TO_PARTY(WHITELEFT1, SKELETON, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITELEFT1, SKELETON, 5, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITELEFT1, SKELETON, 5, 0, ATTACK_ENEMIES, 200)

CREATE_PARTY(WHITELEFT2)
ADD_TO_PARTY(WHITELEFT2, SKELETON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITELEFT2, SKELETON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITELEFT2, SKELETON, 7, 0, ATTACK_ENEMIES, 200)
ADD_TO_PARTY(WHITELEFT2, VAMPIRE, 7, 0, ATTACK_ENEMIES, 200)

REM QUICK_OBJECTIVE(1, "Enemies stand in your valiant path, best slay them quickly before they can organize against you.", PLAYER0)
DISPLAY_OBJECTIVE(30, PLAYER0)

REM Gold Shrine Owner section
IF_SLAB_OWNER(46, 8, PLAYER0)
	SET_FLAG(PLAYER0, FLAG0, 1)
	REM QUICK_INFORMATION(8, "Excellent find keeper, this shrine will help mitigate your expenses")
	DISPLAY_INFORMATION(31)
ENDIF

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

REM Inital flag setup
IF(PLAYER0,TIMER0 >= 200)
    SET_TIMER(PLAYER1,TIMER1)
    SET_TIMER(PLAYER2,TIMER1)
    SET_TIMER(PLAYER3,TIMER1)
ENDIF

REM Start weak attacks from green/blue/yellow, with imp added to green/yellow to breach player
IF(PLAYER0,TIMER0 >= 6000)
	REM QUICK_INFORMATION(3,"It seems the first monsters are already headed towards your dungeon, but your presence will surely be noticed by the sounds of combat.", PLAYER0)
	DISPLAY_INFORMATION(32)
	
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW1,3,1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,IMP,8,1,2,500)
ENDIF

REM Start medium attacks on third payday.
IF(PLAYER0,TIMER0 >= 31000)
	REM QUICK_INFORMATION(4,"Your presence seems to have caught the attention of their leaders, their attacks will surely grow more vicious. Moreover, the fallen rise as undead, launching a relentless onslaught towards you as well.", PLAYER0)
	DISPLAY_INFORMATION(33)
	SET_FLAG(PLAYER_GOOD,FLAG1,1)
	SET_TIMER(PLAYER1,TIMER2)
	SET_TIMER(PLAYER2,TIMER2)
	SET_TIMER(PLAYER3,TIMER2)
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF

REM Start strong attacks on sixth payday.
IF(PLAYER0,TIMER0 >= 61000)
	REM QUICK_INFORMATION(5,"The powers of death have fully suffused the land, while the remaining forces have marshaled against you.", PLAYER0)
	DISPLAY_INFORMATION(34)
	SET_TIMER(PLAYER1,TIMER3)
	SET_TIMER(PLAYER2,TIMER3)
	SET_TIMER(PLAYER3,TIMER3)
	SET_TIMER(PLAYER_GOOD,TIMER2)
ENDIF

IF(PLAYER1, BARRACKS >= 10)
	IF(PLAYER1,TIMER1 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER1,TIMER1)
		IF(PLAYER1,LAIR >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BLUE1,2,1)
		ENDIF
	ENDIF
	IF(PLAYER1,TIMER2 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER1,TIMER2)
		IF(PLAYER1,LAIR >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BLUE2,2,1)
		ENDIF
		IF(PLAYER1,WORKSHOP >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BLUE2,2,1)
		ENDIF
	ENDIF
	IF(PLAYER1,TIMER3 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER1,TIMER3)
		IF(PLAYER1,LAIR >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BLUE3,2,1)
		ENDIF
		IF(PLAYER1,WORKSHOP >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BLUE3,2,1)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,BLUE4,2,1)
		ENDIF
	ENDIF
ENDIF

IF(PLAYER2, BARRACKS >= 10)
	IF(PLAYER2,TIMER1 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER2,TIMER1)
		IF(PLAYER2,LAIR >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GREEN1,1,1)
		ENDIF
	ENDIF
	IF(PLAYER2,TIMER2 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER2,TIMER2)
		IF(PLAYER2,LAIR >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GREEN2,1,1)
		ENDIF
		IF(PLAYER2,TRAINING >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GREEN2,1,1)
		ENDIF
	ENDIF
	IF(PLAYER2,TIMER3 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER2,TIMER3)
		IF(PLAYER2,LAIR >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GREEN3,1,1)
		ENDIF
		IF(PLAYER2,TRAINING >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GREEN3,1,1)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GREEN4,1,1)
		ENDIF
	ENDIF
ENDIF

IF(PLAYER3, BARRACKS >= 10)
	IF(PLAYER3,TIMER1 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER1)
		IF(PLAYER3,LAIR >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW1,3,1)
		ENDIF
	ENDIF
	IF(PLAYER3,TIMER2 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER2)
		IF(PLAYER3,LAIR >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW2,3,1)
		ENDIF
		IF(PLAYER3,SCAVENGER >= 18)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW3,3,1)
		ENDIF
	ENDIF
	IF(PLAYER3,TIMER3 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER3)
		IF(PLAYER3,LAIR >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW3,3,1)
		ENDIF
		IF(PLAYER3,SCAVENGER >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW4,3,1)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,YELLOW3,3,1)
		ENDIF
	ENDIF
ENDIF

IF(PLAYER_GOOD, BARRACKS >= 9)
	IF(PLAYER_GOOD,TIMER1 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER1)
		IF(PLAYER_GOOD,TEMPLE >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WHITETOP1,4,1)
		ENDIF
		IF(PLAYER_GOOD,GARDEN >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WHITERIGHT1,5,1)
		ENDIF
		IF(PLAYER_GOOD,TORTURE >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WHITELEFT1,6,1)
		ENDIF
	ENDIF
	IF(PLAYER_GOOD,TIMER2 >= 10000)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER_GOOD,TIMER2)
		IF(PLAYER_GOOD,TEMPLE >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WHITETOP2,4,1)
		ENDIF
		IF(PLAYER_GOOD,GARDEN >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WHITERIGHT2,5,1)
		ENDIF
		IF(PLAYER_GOOD,TORTURE >= 9)
			NEXT_COMMAND_REUSABLE
			ADD_PARTY_TO_LEVEL(PLAYER_GOOD,WHITELEFT2,6,1)
		ENDIF
	ENDIF
ENDIF

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

IF(PLAYER0,BRIDGE >= 1)
	REM QUICK_INFORMATION(6,"Uses of bridges are limited here keeper, you must be sparing in their use.", PLAYER0)
	DISPLAY_INFORMATION(35)
    NEXT_COMMAND_REUSABLE
    ROOM_AVAILABLE(PLAYER0,BRIDGE,0,0)
ENDIF

IF(PLAYER0,BRIDGE < 1)
	NEXT_COMMAND_REUSABLE
	ROOM_AVAILABLE(PLAYER0,BRIDGE,1,1)
ENDIF

IF(PLAYER_GOOD,TOTAL_CREATURES <= 0)
	REM QUICK_OBJECTIVE(7,"Congratulations, your enemies now litter the ground and soak it with their blood.", PLAYER0)
	DISPLAY_INFORMATION(36)
	WIN_GAME
ENDIF

IF(PLAYER0, THIEF == 0)
	LOSE_GAME
ENDIF