REM *************************************
REM Script for map "Lair of the Maiden"
REM *************************************

REM Brief: There's insects living up north that will keep harrassing the player.
REM Some of it as the limited keeper, others as parties

REM *************************************
REM Setup Commands
REM *************************************

LEVEL_VERSION(1)
SET_GENERATE_SPEED(350)
START_MONEY(RED,11000)
START_MONEY(GREEN,22000)

MAX_CREATURES(RED,20)
MAX_CREATURES(GREEN,28)

COMPUTER_PLAYER(PLAYER2,4)
COMPUTER_PLAYER(PLAYER3,ROAMING)
SET_PLAYER_COLOR(PLAYER3,GREEN)
SET_TEXTURE(PLAYER2,SWAMP_SERPENT)
SET_TEXTURE(PLAYER0,SNAKE_KEY)

ALLY_PLAYERS(GREEN,PLAYER3,1)

REM *************************************
REM Availability
REM *************************************

ADD_CREATURE_TO_POOL(FLY,3)
ADD_CREATURE_TO_POOL(BUG,5)
ADD_CREATURE_TO_POOL(SPIDER,5)
ADD_CREATURE_TO_POOL(MAIDEN,5)
ADD_CREATURE_TO_POOL(MAGGOT,5)

ADD_CREATURE_TO_POOL(DEMONSPAWN,6)
ADD_CREATURE_TO_POOL(TROLL,4)
ADD_CREATURE_TO_POOL(DRUID,4)
ADD_CREATURE_TO_POOL(SORCEROR,4)

CREATURE_AVAILABLE(GREEN,FLY,1,0)
CREATURE_AVAILABLE(GREEN,BUG,1,0)
CREATURE_AVAILABLE(GREEN,SPIDER,1,0)
CREATURE_AVAILABLE(GREEN,MAIDEN,1,0)
CREATURE_AVAILABLE(GREEN,MAGGOT,1,0)
CREATURE_AVAILABLE(RED,DEMONSPAWN,1,0)
CREATURE_AVAILABLE(RED,TROLL,1,0)
CREATURE_AVAILABLE(RED,SORCEROR,1,0)
CREATURE_AVAILABLE(RED,DRUID,1,0)
CREATURE_AVAILABLE(RED,ORC,1,0)

ROOM_AVAILABLE(ALL_PLAYERS,TREASURE,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,LAIR,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,GARDEN,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,RESEARCH,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,PRISON,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,1,0)
ROOM_AVAILABLE(RED,TRAINING,1,1)
ROOM_AVAILABLE(RED,BRIDGE,1,0)
ROOM_AVAILABLE(GREEN,BRIDGE,1,1)
ROOM_AVAILABLE(RED,GUARD_POST,1,0)
ROOM_AVAILABLE(RED,WORKSHOP,1,0)
ROOM_AVAILABLE(RED,TORTURE,4,0)
ROOM_AVAILABLE(RED,GRAVEYARD,1,0)

IF(GREEN,TRAINING < 27)
	ROOM_AVAILABLE(GREEN,TRAINING,1,1)
ENDIF

MAGIC_AVAILABLE(RED,POWER_HAND,1,1)
MAGIC_AVAILABLE(GREEN,POWER_HAND,0,0)
MAGIC_AVAILABLE(RED,POWER_IMP,1,1)
MAGIC_AVAILABLE(GREEN,POWER_TUNNELLER,1,1)
MAGIC_AVAILABLE(RED,POWER_POSSESS,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SLAP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SIGHT,1,0)
MAGIC_AVAILABLE(RED,POWER_SPEED,1,0)
MAGIC_AVAILABLE(RED,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HOLD_AUDIENCE,1,0)
MAGIC_AVAILABLE(GREEN,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_LIGHTNING,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_PROTECT,1,0)
MAGIC_AVAILABLE(RED,POWER_TIME_BOMB,1,0)

TRAP_AVAILABLE(ALL_PLAYERS,ALARM,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,POISON_GAS,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,LIGHTNING,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,WORD_OF_POWER,1,0)

DOOR_AVAILABLE(ALL_PLAYERS,BRACED,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,STEEL,1,0)

REM *************************************
REM Custom Rules
REM *************************************

SET_DIGGER(PLAYER0,IMP)
SET_DIGGER(PLAYER1,PHALANX)

SET_CREATURE_CONFIGURATION(BUG,PrimaryJobs,TRAIN,1)
SET_CREATURE_CONFIGURATION(BUG,PrimaryJobs,GUARD,1)
SET_CREATURE_CONFIGURATION(BUG,PrimaryJobs,SEEK_THE_ENEMY,1)
SET_CREATURE_CONFIGURATION(BUG,PrimaryJobs,BARRACK,1)
SET_CREATURE_CONFIGURATION(SPIDER,PrimaryJobs,TRAIN,1)
SET_CREATURE_CONFIGURATION(SPIDER,PrimaryJobs,GUARD,1)
SET_CREATURE_CONFIGURATION(SPIDER,PrimaryJobs,SEEK_THE_ENEMY,1)
SET_CREATURE_CONFIGURATION(MAIDEN,PrimaryJobs,BARRACK,1)
SET_CREATURE_CONFIGURATION(MAIDEN,PrimaryJobs,TRAIN,1)
SET_CREATURE_CONFIGURATION(MAIDEN,PrimaryJobs,GUARD,1)

IF(PLAYER0,VAMPIRE > 4)
	SET_GAME_RULE(BodiesForVampire,15)
ENDIF
IF(PLAYER0,VAMPIRE > 6)
	SET_GAME_RULE(BodiesForVampire,25)
ENDIF

REM *************************************
REM Code blocks
REM *************************************

REM Green gets ever stronger creatures
IF(PLAYER0,BATTLES_WON > 10)
	CREATURE_ENTRANCE_LEVEL(GREEN,2)
ENDIF
IF(PLAYER0,BATTLES_WON > 20)
	CREATURE_ENTRANCE_LEVEL(GREEN,3)
ENDIF
IF(PLAYER0,BATTLES_WON > 30)
	CREATURE_ENTRANCE_LEVEL(GREEN,4)
ENDIF
IF(PLAYER0,BATTLES_WON > 40)
	CREATURE_ENTRANCE_LEVEL(GREEN,5)
ENDIF
IF(PLAYER0,BATTLES_WON > 50)
	CREATURE_ENTRANCE_LEVEL(GREEN,6)
ENDIF
IF(PLAYER0,BATTLES_WON > 60)
	CREATURE_ENTRANCE_LEVEL(GREEN,7)
ENDIF
IF(PLAYER0,BATTLES_WON > 70)
	CREATURE_ENTRANCE_LEVEL(GREEN,8)
ENDIF
IF(PLAYER0,BATTLES_WON > 85)
	CREATURE_ENTRANCE_LEVEL(GREEN,9)
ENDIF
IF(PLAYER0,BATTLES_WON > 100)
	CREATURE_ENTRANCE_LEVEL(GREEN,10)
ENDIF

REM Green gets Phalanx creatures based on the amount of creatures they have, instead of workers.
SET_TIMER(GREEN,TIMER1)
IF(GREEN,TOTAL_CREATURES > GREEN,TOTAL_DIGGERS)
	IF(GREEN,TIMER1 > 200)
		NEXT_COMMAND_REUSABLE
		USE_POWER_AT_LOCATION(GREEN,PLAYER2,POWER_TUNNELLER,1,FREE)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(GREEN,TIMER1)
	ENDIF
ENDIF

REM *************************************
REM Script start
REM *************************************

REM FLAGS:
REM PLAYER0,FLAG1 - Player ready for tunnel east
REM PLAYER0,FLAG2 - Player ready for tunnel west
REM PLAYER_GOOD,FLAG1 - Player went to gems, hero spawns will follow

REM ACTION POINTS:
REM 1 - East end of green base
REM 2 - Northeast gold.
REM 3 - West gold.

IF(PLAYER0,MAIDEN > 0)
	REM "Help me kill her and I will aid you in your conquest."
	DISPLAY_MESSAGE(2,NONE)
	REM "A pretender stole my throne as hive queen."
	DISPLAY_MESSAGE(1,MAIDEN)
	SET_TIMER(PLAYER0,TIMER1)
	SET_TIMER(GREEN,TIMER2)
ENDIF
IF(PLAYER0,TIMER1 > 300)
	REM "Destroy the green hive and kill the Maiden pretender queen."
	DISPLAY_OBJECTIVE(3,PLAYER2)
ENDIF

REM Green digs eastern route
IF(PLAYER0,GAME_TURN > 5000)
	SET_FLAG(PLAYER0,FLAG1,1)
ENDIF
IF(RED,TOTAL_CREATURES > 3)
	SET_FLAG(PLAYER0,FLAG1,1)
ENDIF
IF(PLAYER0,FLAG1 > 0)
	COMPUTER_DIG_TO_LOCATION(GREEN,1,2)
	COMPUTER_DIG_TO_LOCATION(GREEN,2,PLAYER0)
ENDIF

REM Green digs western route
IF(PLAYER0,GAME_TURN > 25000)
	SET_FLAG(PLAYER0,FLAG2,1)
ENDIF
IF(GREEN,BATTLES_LOST > 0)
	SET_FLAG(PLAYER0,FLAG2,1)
ENDIF
IF(PLAYER0,FLAG2 > 0)
	COMPUTER_DIG_TO_LOCATION(GREEN,1,3)
	COMPUTER_DIG_TO_LOCATION(GREEN,3,6)
	COMPUTER_DIG_TO_LOCATION(GREEN,6,PLAYER0)
ENDIF

IF(PLAYER0,BATTLES_LOST > 4)
	REM "The swarm is strong, the swarm is endless."
	DISPLAY_MESSAGE(4,MAIDEN)
ENDIF

REM Main waves of extra insects to attack player
REM ************************************************

CREATE_PARTY(FirstMaiden)
	ADD_TO_PARTY(FirstMaiden,MAIDEN,4,80,ATTACK_ENEMIES,100)
	ADD_TO_PARTY(FirstMaiden,FLY,7,80,DEFEND_PARTY,0)
	ADD_TO_PARTY(FirstMaiden,BUG,5,80,DEFEND_PARTY,0)

CREATE_PARTY(SecondMaiden)
	ADD_TO_PARTY(SecondMaiden,MAIDEN,6,180,ATTACK_ROOMS,200)
	ADD_TO_PARTY(SecondMaiden,FLY,8,80,DEFEND_PARTY,0)
	ADD_TO_PARTY(SecondMaiden,SPIDER,8,80,DEFEND_PARTY,0)

CREATE_PARTY(ThirdMaiden)
	ADD_TO_PARTY(ThirdMaiden,MAIDEN,8,400,ATTACK_ROOMS,400)
	ADD_TO_PARTY(ThirdMaiden,BUG,8,400,ATTACK_ROOMS,0)
	ADD_TO_PARTY(ThirdMaiden,PHALANX,10,400,ATTACK_ROOMS,0)

IF(PLAYER0,TIMER1 > 4800)
	ADD_TO_FLAG(GREEN,FLAG1,1)
ENDIF
IF(PLAYER0,TIMER1 > 20800)
	ADD_TO_FLAG(GREEN,FLAG1,1)
	ADD_CREATURE_TO_LEVEL(YELLOW,MAGGOT,4,3,4,5,INIT)
ENDIF
IF(PLAYER0,TIMER1 > 23800)
	ADD_TO_FLAG(GREEN,FLAG1,1)
ENDIF
IF(PLAYER0,TIMER1 > 40000)
	ADD_TO_FLAG(GREEN,FLAG1,1)
ENDIF
IF(PLAYER0,TIMER1 > 45000)
	ADD_TO_FLAG(GREEN,FLAG1,1)
	ADD_TO_PARTY(FirstMaiden,SPIDER,8,100,ATTACK_ROOMS,0)
ENDIF
IF(PLAYER0,TIMER1 > 57000)
	ADD_TO_FLAG(GREEN,FLAG1,1)
ENDIF
IF(PLAYER0,TIMER1 > 63000)
	ADD_TO_FLAG(GREEN,FLAG1,1)
	ADD_CREATURE_TO_LEVEL(YELLOW,MAGGOT,4,3,10,15,INIT)
ENDIF
IF(PLAYER0,TIMER1 > 88800)
	ADD_TO_FLAG(GREEN,FLAG1,1)
ENDIF
IF(PLAYER0,TIMER1 > 100000)
	ADD_TO_FLAG(GREEN,FLAG1,1)
ENDIF

IF(GREEN,TIMER2 > 5100)
	IF(GREEN,FLAG1 >= 1)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,SPIDER,4,1,4,50,INIT)
	ENDIF
	IF(GREEN,FLAG1 >= 2)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,BUG,4,1,4,50,INIT)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,SPIDER,4,1,6,50,INIT)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,MAGGOT,4,3,4,5,INIT)
	ENDIF
	IF(GREEN,FLAG1 >= 3)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(YELLOW,FirstMaiden,4,1)
	ENDIF
	IF(GREEN,FLAG1 >= 4)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,PHALANX,4,4,6,150,INIT)
	ENDIF
	IF(GREEN,FLAG1 >= 5)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,FLY,4,1,8,150,INIT)
	ENDIF
	IF(GREEN,FLAG1 >= 6)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(YELLOW,SecondMaiden,4,1)
	ENDIF
	IF(GREEN,FLAG1 >= 7)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,SPIDER,4,1,10,250,INIT)
	ENDIF
	IF(GREEN,FLAG1 >= 8)
		NEXT_COMMAND_REUSABLE
		ADD_CREATURE_TO_LEVEL(YELLOW,FLY,4,5,10,40,INIT)
	ENDIF
	IF(GREEN,FLAG1 >= 9)
		NEXT_COMMAND_REUSABLE
		ADD_PARTY_TO_LEVEL(YELLOW,ThirdMaiden,4,1)
	ENDIF
	IF(GREEN,TIMER2 >= 4901)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(GREEN,TIMER2)
	ENDIF
ENDIF

REM There's a gem block east, guarded by a hero gate
REM ************************************************
CREATE_PARTY(Robber)
	ADD_TO_PARTY(Robber,THIEF,7,0,STEAL_GOLD,-300)
CREATE_PARTY(Murderer)
	ADD_TO_PARTY(Murderer,ARCHER,7,0,ATTACK_ENEMIES,-300)
CREATE_PARTY(Rapist)
	ADD_TO_PARTY(Rapist,TIME_MAGE,10,0,ATTACK_ENEMIES,500)
CREATE_PARTY(Grafitero)
	ADD_TO_PARTY(Grafitero,BARBARIAN,6,0,ATTACK_ROOMS,0)
	ADD_TO_PARTY(Grafitero,BARBARIAN,5,0,ATTACK_ROOMS,0)
	ADD_TO_PARTY(Grafitero,BARBARIAN,5,0,ATTACK_ROOMS,0)
	ADD_TO_PARTY(Grafitero,DWARFA,3,0,ATTACK_ROOMS,0)

IF_ACTION_POINT(5,ALL_PLAYERS)
	SET_FLAG(PLAYER_GOOD,FLAG1,1)
ENDIF
IF(PLAYER_GOOD,FLAG1 == 1)
	ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-1,1,3,200,DEFAULT)
	SET_TIMER(PLAYER_GOOD,TIMER2)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 2500)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Robber,-1,1)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 12500)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Murderer,-1,1)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 25000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Rapist,-1,1)
ENDIF
IF(PLAYER_GOOD,TIMER2 > 30000)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,Grafitero,-1,1)
	IF_CONTROLS(PLAYER_GOOD,BARBARIAN <= 0)
		HIDE_HERO_GATE(-1,True)
	ENDIF
ENDIF
REM End of gem waves
REM ************************************************

CREATE_PARTY(FinalBoss)
	ADD_TO_PARTY(FinalBoss,MAIDEN,10,1000,ATTACK_ENEMIES,-400)
	ADD_TO_PARTY(FinalBoss,SPIDER,10,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(FinalBoss,SPIDER,10,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(FinalBoss,SPIDER,10,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(FinalBoss,SPIDERLING,10,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(FinalBoss,PHALANX,10,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(FinalBoss,BUG,10,0,DEFEND_PARTY,0)
	ADD_TO_PARTY(FinalBoss,FLY,10,0,STEAL_SPELLS,0)

REM Spawn final party when the heart is taking damage
IF(PLAYER0,GAME_TURN > 100)
	IF(GREEN,HEART_HEALTH < 29500)
		ADD_PARTY_TO_LEVEL(PLAYER3,FinalBoss,-2,1)
		REM "We live for the queen, you die for our queen."
		DISPLAY_MESSAGE(5,PHALANX)
	ENDIF
ENDIF

REM Stop timers when green is dead
IF(GREEN,DUNGEON_DESTROYED == 1)
	NEXT_COMMAND_REUSABLE
	ADD_TO_TIMER(PLAYER0,TIMER1,-1)
	NEXT_COMMAND_REUSABLE
	ADD_TO_TIMER(GREEN,TIMER2,-1)
ENDIF

IF(PLAYER0,ALL_DUNGEONS_DESTROYED == 1)
	IF_CONTROLS(PLAYER3,MAIDEN <= 0)
		IF(PLAYER0,ACTIVE_BATTLES <= 0)
			IF(PLAYER0,MAIDEN > 0)
				REM "My offspring, all dead,... thank you."
				DISPLAY_MESSAGE(6,MAIDEN)
			ENDIF
			REM "Tonight we suckle hemolymph from the tit of vengeance. Well done."
			DISPLAY_OBJECTIVE(7)
			WIN_GAME
		ENDIF
	ENDIF
ENDIF
