SET_GENERATE_SPEED(400)

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

START_MONEY(PLAYER0, 10000)
START_MONEY(PLAYER1, 7500)
START_MONEY(PLAYER2, 7500)
START_MONEY(PLAYER3, 7500)

MAX_CREATURES(PLAYER0, 20)
MAX_CREATURES(PLAYER1, 7)
MAX_CREATURES(PLAYER2, 7)
MAX_CREATURES(PLAYER3, 7)

ADD_CREATURE_TO_POOL(ARCHER, 3)
ADD_CREATURE_TO_POOL(KNIGHT, 3)
ADD_CREATURE_TO_POOL(GIANT, 3)
ADD_CREATURE_TO_POOL(SAMURAI, 3)
ADD_CREATURE_TO_POOL(TROLL, 3)
ADD_CREATURE_TO_POOL(DRAGON, 15)
ADD_CREATURE_TO_POOL(DEMONSPAWN, 5)
ADD_CREATURE_TO_POOL(FLY, 3)
ADD_CREATURE_TO_POOL(DARK_MISTRESS, 15)
ADD_CREATURE_TO_POOL(SORCEROR, 15)
ADD_CREATURE_TO_POOL(BILE_DEMON, 15)
ADD_CREATURE_TO_POOL(BUG, 3)
ADD_CREATURE_TO_POOL(SPIDER, 3)
ADD_CREATURE_TO_POOL(HELL_HOUND, 5)
ADD_CREATURE_TO_POOL(ORC, 15)

CREATURE_AVAILABLE(PLAYER0, ARCHER, 1, 1)
CREATURE_AVAILABLE(PLAYER0, KNIGHT, 1, 1)
CREATURE_AVAILABLE(PLAYER0, GIANT, 1, 1)
CREATURE_AVAILABLE(PLAYER0, SAMURAI, 1, 1)
CREATURE_AVAILABLE(PLAYER0, TROLL, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, DRAGON, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, DEMONSPAWN, 1, 1)
CREATURE_AVAILABLE(PLAYER0, FLY, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, DARK_MISTRESS, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, SORCEROR, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, BILE_DEMON, 1, 1)
CREATURE_AVAILABLE(PLAYER0, BUG, 1, 1)
CREATURE_AVAILABLE(PLAYER0, SPIDER, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, HELL_HOUND, 1, 1)
CREATURE_AVAILABLE(ALL_PLAYERS, ORC, 1, 1)

ROOM_AVAILABLE(ALL_PLAYERS, TREASURE, 1, 1)
ROOM_AVAILABLE(ALL_PLAYERS, GARDEN, 1, 1)
ROOM_AVAILABLE(ALL_PLAYERS, LAIR, 1, 1)
ROOM_AVAILABLE(ALL_PLAYERS, RESEARCH, 1, 1)
ROOM_AVAILABLE(ALL_PLAYERS, TRAINING, 1, 1)
ROOM_AVAILABLE(ALL_PLAYERS, TEMPLE, 1, 0)
ROOM_AVAILABLE(ALL_PLAYERS, GRAVEYARD, 1, 0)
ROOM_AVAILABLE(ALL_PLAYERS, BARRACKS, 1, 0)
ROOM_AVAILABLE(ALL_PLAYERS, GUARD_POST, 1, 0)
ROOM_AVAILABLE(PLAYER0, TORTURE, 1, 0)
ROOM_AVAILABLE(PLAYER3, TORTURE, 1, 0)
ROOM_AVAILABLE(PLAYER0, WORKSHOP, 1, 0)
ROOM_AVAILABLE(PLAYER2, WORKSHOP, 1, 0)
ROOM_AVAILABLE(PLAYER0, PRISON, 1, 0)
ROOM_AVAILABLE(PLAYER0, SCAVENGER, 1, 0)
ROOM_AVAILABLE(PLAYER1, BRIDGE, 1, 1)
ROOM_AVAILABLE(PLAYER2, BRIDGE, 1, 1)
ROOM_AVAILABLE(PLAYER3, BRIDGE, 1, 1)

DOOR_AVAILABLE(PLAYER0, WOOD, 1, 0)
DOOR_AVAILABLE(PLAYER0, STEEL, 1, 0)
DOOR_AVAILABLE(PLAYER0, MAGIC, 1, 0)
DOOR_AVAILABLE(PLAYER1, STEEL, 1, 20)
DOOR_AVAILABLE(PLAYER2, WOOD, 1, 0)
DOOR_AVAILABLE(PLAYER2, STEEL, 1, 0)
DOOR_AVAILABLE(PLAYER2, MAGIC, 1, 0)
DOOR_AVAILABLE(PLAYER3, STEEL, 1, 20)

TRAP_AVAILABLE(PLAYER0, ALARM, 1, 0)
TRAP_AVAILABLE(PLAYER0, BOULDER, 1, 0)
TRAP_AVAILABLE(PLAYER0, POISON_GAS, 1, 0)
TRAP_AVAILABLE(PLAYER0, LIGHTNING, 1, 0)
TRAP_AVAILABLE(PLAYER0, LAVA, 1, 0)
TRAP_AVAILABLE(PLAYER2, BOULDER, 1, 0)
TRAP_AVAILABLE(PLAYER2, POISON_GAS, 1, 0)
TRAP_AVAILABLE(PLAYER2, LIGHTNING, 1, 0)
TRAP_AVAILABLE(PLAYER2, LAVA, 1, 0)
REM TRAP_AVAILABLE(PLAYER1, LIGHTNING, 1, 15)
REM TRAP_AVAILABLE(PLAYER3, LIGHTNING, 1, 15)

MAGIC_AVAILABLE(ALL_PLAYERS, POWER_IMP, 1, 1)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_OBEY, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_CALL_TO_ARMS, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_CAVE_IN, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_HEAL_CREATURE, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_LIGHTNING, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_SPEED, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_PROTECT, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_CONCEAL, 1, 0)
MAGIC_AVAILABLE(ALL_PLAYERS, POWER_CHICKEN, 1, 0)
MAGIC_AVAILABLE(PLAYER0, POWER_HOLD_AUDIENCE, 1, 0)
MAGIC_AVAILABLE(PLAYER0, POWER_DISEASE, 1, 0)

SET_TIMER(PLAYER0, TIMER0)
SET_TIMER(PLAYER1, TIMER0)
SET_TIMER(PLAYER2, TIMER0)
SET_TIMER(PLAYER3, TIMER0)

SET_FLAG(PLAYER0, FLAG0)

IF(PLAYER_GOOD, DUNGEON_DESTROYED == 1)
	IF_AVAILABLE(PLAYER0, POWER_ARMAGEDDON == 0)
		LOSE_GAME
	ENDIF
	IF(PLAYER0, ALL_DUNGEONS_DESTROYED == 1)
		WIN_GAME
	ENDIF
ENDIF

IF(PLAYER_GOOD, GUARD_POST == 0)
	ROOM_AVAILABLE(PLAYER0, BRIDGE, 1, 1)
ENDIF

IF_AVAILABLE(PLAYER0, POWER_DESTROY_WALLS == 1)
	SET_FLAG(PLAYER0, FLAG0, 1)
ENDIF

IF(PLAYER0, FLAG0 == 1)
    IF_AVAILABLE(PLAYER0, POWER_DESTROY_WALLS == 0)
        LOSE_GAME
    ENDIF
ENDIF

CREATE_PARTY(HEROES)
ADD_TO_PARTY(HEROES, KNIGHT, 5, 800, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(HEROES, ARCHER, 8, 600, ATTACK_DUNGEON_HEART, 0)
ADD_TO_PARTY(HEROES, THIEF, 5, 400, STEAL_GOLD, 0)

IF(PLAYER0, TIMER0 >= 17280)
    ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD, HEROES, -1, DUNGEON_HEART, PLAYER0, 5, 0)
    ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD, HEROES, -2, DUNGEON_HEART, PLAYER0, 5, 0)
    ADD_PARTY_TO_LEVEL(PLAYER_GOOD, HEROES, -3, 1)
    ADD_PARTY_TO_LEVEL(PLAYER_GOOD, HEROES, -4, 1)
ENDIF

REM BLUE
IF(PLAYER1, TIMER0 >= 7680)
	IF(PLAYER1, DUNGEON_DESTROYED != 1)
		IF(PLAYER1, TOTAL_CREATURES < 20)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER1, GIANT, -6, 1, 10, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER1, SKELETON, -6, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER1, SAMURAI, -6, 1, 6, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER1, ORC, -6, 1, 6, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER1, WIZARD, -6, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER1, TIMER0)
		ENDIF
	ENDIF
ENDIF

REM GREEN
IF(PLAYER2, TIMER0 >= 7680)
	IF(PLAYER2, DUNGEON_DESTROYED != 1)
		IF(PLAYER2, TOTAL_CREATURES < 20)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER2, BILE_DEMON, -8, 1, 9, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER2, DEMONSPAWN, -8, 1, 9, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER2, DRAGON, -8, 1, 8, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER2, TENTACLE, -8, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER2, SORCEROR, -8, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER2, TIMER0)
		ENDIF
	ENDIF
ENDIF

REM YELLOW
IF(PLAYER3, TIMER0 >= 7680)
	IF(PLAYER3, DUNGEON_DESTROYED != 1)
		IF(PLAYER3, TOTAL_CREATURES < 20)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER3, ORC, -7, 1, 6, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER3, DARK_MISTRESS, -7, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER3, ARCHER, -7, 1, 8, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER3, FAIRY, -7, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			ADD_CREATURE_TO_LEVEL(PLAYER3, MONK, -7, 1, 7, 0)
			NEXT_COMMAND_REUSABLE
			SET_TIMER(PLAYER3, TIMER0)
		ENDIF
	ENDIF
ENDIF
