REM ********************************************
REM
REM             Script for Level 5
REM		  Deadly Desires
REM
REM      The last "trainer" level of Desolate 
REM  Realms, not too difficult IF done correctly!
REM  Here we finally hear a hint about the
REM  Great Keeper Andra, who is believed to be
REM  one of the first generation keepers to have
REM  spawned after the fall of the Ancient
REM  Keepers.  You are seeking her out for many
REM  reasons, a nice date in a suitably foul
REM  hatchery being only one of them :)
REM
REM  v1.5 - Added 2 hornies to attack party,
REM    created new kill party, and fixed
REM    PLAYER2 AI to general *again* (was
REM    aggressive)
REM
REM  v1.6 - Added further refinements to
REM    to attempt to stop crashing from
REM    overload and to speed up game play -
REM    long levels are nice but this is
REM    RIDICULOUS! Changed PLAYER2 back to
REM    aggressive to test. Added yellow heart.
REM
REM v1.7 - Basically rethought the whole map
REM    yet again.
REM
REM ********************************************

SET_GENERATE_SPEED(700)

COMPUTER_PLAYER(PLAYER1,0)
COMPUTER_PLAYER(PLAYER2,1)
COMPUTER_PLAYER(PLAYER3,0)

SET_COMPUTER_CHECKS(PLAYER1,"CHECK FOR NEUTRAL PLACES",15000,0,0,0,195000)
SET_COMPUTER_CHECKS(PLAYER2,"CHECK FOR NEUTRAL PLACES",15000,0,0,0,195000)

START_MONEY(PLAYER0, 7000)
START_MONEY(PLAYER1, 20000)
START_MONEY(PLAYER2, 50000)
START_MONEY(PLAYER3, 0)

MAX_CREATURES(PLAYER0, 15)
MAX_CREATURES(PLAYER1, 30)
MAX_CREATURES(PLAYER2, 30)
MAX_CREATURES(PLAYER3, 0)

ADD_CREATURE_TO_POOL(TROLL, 40)
ADD_CREATURE_TO_POOL(DRAGON, 20)
ADD_CREATURE_TO_POOL(DARK_MISTRESS, 15)
ADD_CREATURE_TO_POOL(BILE_DEMON, 20)
ADD_CREATURE_TO_POOL(SORCEROR, 10)
ADD_CREATURE_TO_POOL(BARBARIAN, 10)
ADD_CREATURE_TO_POOL(VAMPIRE, 10)

CREATURE_AVAILABLE(ALL_PLAYERS,TROLL,1,1)
CREATURE_AVAILABLE(ALL_PLAYERS,DRAGON,1,1)
CREATURE_AVAILABLE(ALL_PLAYERS,DARK_MISTRESS,1,1)
CREATURE_AVAILABLE(ALL_PLAYERS,BILE_DEMON,1,1)
CREATURE_AVAILABLE(PLAYER0,SORCEROR,1,1)
CREATURE_AVAILABLE(PLAYER1,SORCEROR,1,1)
CREATURE_AVAILABLE(ALL_PLAYERS,BARBARIAN,1,1)

ROOM_AVAILABLE(PLAYER0,TREASURE,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,RESEARCH,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,GARDEN,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,LAIR,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,TRAINING,1,1)

ROOM_AVAILABLE(ALL_PLAYERS,TORTURE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,PRISON,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,1,0)
ROOM_AVAILABLE(PLAYER2,GRAVEYARD,1,0)

ROOM_AVAILABLE(PLAYER0,BRIDGE,1,0)
ROOM_AVAILABLE(PLAYER0,WORKSHOP,1,0)

DOOR_AVAILABLE(ALL_PLAYERS,STEEL,1,0)
DOOR_AVAILABLE(ALL_PLAYERS,MAGIC,1,0)
TRAP_AVAILABLE(PLAYER0,BOULDER,1,0)
TRAP_AVAILABLE(PLAYER0,WORD_OF_POWER,1,0)

MAGIC_AVAILABLE(ALL_PLAYERS,POWER_IMP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SIGHT,1,0)
MAGIC_AVAILABLE(PLAYER1,POWER_LIGHTNING,1,0)

CREATE_PARTY(GUARDS)
  ADD_TO_PARTY(GUARDS,ARCHER,10,500,ATTACK_ENEMIES,0)
  ADD_TO_PARTY(GUARDS,ARCHER,10,500,ATTACK_ENEMIES,0)
  ADD_TO_PARTY(GUARDS,ARCHER,10,500,ATTACK_ENEMIES,0)

CREATE_PARTY(DOORKILLERS)
  ADD_TO_PARTY(DOORKILLERS,GIANT,10,128,ATTACK_DUNGEON_HEART,0)
  ADD_TO_PARTY(DOORKILLERS,GIANT,10,128,ATTACK_DUNGEON_HEART,0)
  ADD_TO_PARTY(DOORKILLERS,GIANT,10,128,ATTACK_DUNGEON_HEART,0)

CREATE_PARTY(KILLYELLOW)
  ADD_TO_PARTY(KILLYELLOW,HORNY,10,5000,ATTACK_DUNGEON_HEART,0)
  ADD_TO_PARTY(KILLYELLOW,HORNY,10,5000,ATTACK_DUNGEON_HEART,0)
  ADD_TO_PARTY(KILLYELLOW,HORNY,10,5000,ATTACK_DUNGEON_HEART,0)
  ADD_TO_PARTY(KILLYELLOW,HORNY,10,5000,ATTACK_DUNGEON_HEART,0)

REM Initialize fields for archer spawning
SET_FLAG(PLAYER0,FLAG0,0)
SET_TIMER(PLAYER0,TIMER0)

REM Standard start messages

DISPLAY_OBJECTIVE(20,PLAYER0)
IF(PLAYER0, GAME_TURN >= 1000)
  DISPLAY_OBJECTIVE(21,PLAYER0)
ENDIF

REM Spawn archers until player reaches AP4

REM Limited to 20 archers to avoid taking forever to play (9 already on map)

IF(PLAYER0,FLAG0 < 1)
  IF(PLAYER0, TIMER0 >= 2000)     
     IF(PLAYER_GOOD,ARCHER < 29)
        NEXT_COMMAND_REUSABLE
        ADD_PARTY_TO_LEVEL(PLAYER_GOOD,GUARDS,1,1)
        NEXT_COMMAND_REUSABLE
        SET_TIMER(PLAYER0,TIMER0)
     ENDIF
  ENDIF
ENDIF

REM Stop archers, tell player about Andra's Dungeon

IF_ACTION_POINT(4,PLAYER0)
  DISPLAY_OBJECTIVE(27, PLAYER0)
  SET_FLAG(PLAYER0,FLAG0,1)
ENDIF

REM Andra's dungeon claimed too soon, pump up PLAYER2

IF_ACTION_POINT(2,PLAYER0)
  IF(PLAYER_GOOD,KNIGHT!=0)
    IF(PLAYER2,DUNGEON_DESTROYED!=1)
      DISPLAY_OBJECTIVE(22,PLAYER0)
      ADD_PARTY_TO_LEVEL(PLAYER_GOOD,KILLYELLOW,6,1)
      SET_TIMER(PLAYER2,TIMER0)
      ROOM_AVAILABLE(PLAYER2,SCAVENGER,1,1)
      MAGIC_AVAILABLE(PLAYER2,POWER_LIGHTNING,1,1)
      MAGIC_AVAILABLE(PLAYER2,POWER_DISEASE,1,1)
      MAGIC_AVAILABLE(PLAYER2,POWER_CHICKEN,1,1)
      CREATURE_AVAILABLE(PLAYER2,VAMPIRE,1,1)
    ENDIF
  ENDIF
ENDIF

REM Connect scavenger room to green player's dungeon
IF(PLAYER2, TIMER0 >= 300)
  ADD_TUNNELLER_TO_LEVEL(PLAYER_GOOD,-1,DUNGEON_HEART,PLAYER2,3,0)
ENDIF

REM Destroy yellow heart if other dungeons destroyed, knights gone

IF(PLAYER1,DUNGEON_DESTROYED==1)
  IF(PLAYER2,DUNGEON_DESTROYED==1)
    IF(PLAYER_GOOD, KNIGHT==0)
      IF(PLAYER3,DUNGEON_DESTROYED!=1)
        DISPLAY_OBJECTIVE(51,PLAYER0)
        ADD_PARTY_TO_LEVEL(PLAYER_GOOD,KILLYELLOW,6,1)
      ENDIF
    ENDIF
  ENDIF
ENDIF

IF(PLAYER0,ALL_DUNGEONS_DESTROYED == 1)
  IF(PLAYER_GOOD, KNIGHT==0)
    DISPLAY_OBJECTIVE(25,PLAYER0)
    WIN_GAME
  ENDIF
ENDIF

REM Congratulate the player on his superbly evil scavenging

IF(PLAYER0,CREATURES_SCAVENGED_GAINED >= 1)
  DISPLAY_OBJECTIVE(26,PLAYER0)
ENDIF

REM Tell player about the lord who banished Andra

IF_ACTION_POINT(5,PLAYER0)
  DISPLAY_OBJECTIVE(28,PLAYER0)
ENDIF

REM spawn parties to open up AI dungeons and give AIs the bridge

IF_ACTION_POINT(8,PLAYER0)
  DISPLAY_OBJECTIVE(24,PLAYER0)
  ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,DOORKILLERS,-2,ACTION_POINT,3,9,100)
  ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,DOORKILLERS,-3,ACTION_POINT,7,9,100)
  ROOM_AVAILABLE(PLAYER1,BRIDGE,1,1)
  ROOM_AVAILABLE(PLAYER2,BRIDGE,1,1)
ENDIF