REM Game conditions and global settings, make sure script keeps going after game is won
    LEVEL_VERSION(1)
    RUN_AFTER_VICTORY(1)

    SET_GENERATE_SPEED(700)
    MAX_CREATURES(PLAYER3,25)
    MAX_CREATURES(PLAYER0,15)

    START_MONEY(PLAYER0,0)
    START_MONEY(PLAYER3,30000)
    SET_MUSIC("campaign_music/gravecave_crystal_teardrops.mp3")

REM Set players

    SET_PLAYER_COLOR(PLAYER0, BLUE)
    COMPUTER_PLAYER(PLAYER3,16)

REM Set player's texture

    REM Removed again: this didn't quite work as intended
    REM SET_TEXTURE(PLAYER0, SNAKE_KEY)

REM Creatures

    ADD_CREATURE_TO_POOL(DEMONSPAWN,2)
    ADD_CREATURE_TO_POOL(TROLL,2)
    ADD_CREATURE_TO_POOL(SPIDER,3)
    ADD_CREATURE_TO_POOL(HELL_HOUND,2)
    ADD_CREATURE_TO_POOL(TENTACLE,2)
    ADD_CREATURE_TO_POOL(SORCEROR,4)
    ADD_CREATURE_TO_POOL(ORC,2)
    ADD_CREATURE_TO_POOL(BILE_DEMON,3)
    ADD_CREATURE_TO_POOL(DRAGON,4)
    ADD_CREATURE_TO_POOL(DARK_MISTRESS,2)

    CREATURE_AVAILABLE(ALL_PLAYERS,DEMONSPAWN,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,TROLL,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,SPIDER,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,HELL_HOUND,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,TENTACLE,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,SORCEROR,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,ORC,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,BILE_DEMON,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,DRAGON,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,DARK_MISTRESS,1,0)

REM Rooms

    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,TRAINING,1,1)
    ROOM_AVAILABLE(ALL_PLAYERS,RESEARCH,1,1)
    ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,WORKSHOP,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,1,0)

    REM Special rules for specific rooms - Player0 doesn't get a GY to prevent vampire spam / no scavenger
    ROOM_AVAILABLE(PLAYER0, PRISON, 3, 0)
    ROOM_AVAILABLE(PLAYER0, TORTURE, 3, 0)
    
    REM Consider: Yellow doesn't get a prison to prevent capturing too many creatures, but does keep the torture chamber to potentially attract mistresses
    ROOM_AVAILABLE(PLAYER3, PRISON, 1, 0)
    ROOM_AVAILABLE(PLAYER3, TORTURE, 1, 0)
    ROOM_AVAILABLE(PLAYER3,GRAVEYARD,1,0)
    ROOM_AVAILABLE(PLAYER3,SCAVENGER,1,0)

REM Magic

    REM Only yellow gets create imp at the start
    MAGIC_AVAILABLE(PLAYER3,POWER_IMP,1,1)

    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(ALL_PLAYERS,POWER_SIGHT,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_OBEY,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CALL_TO_ARMS,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CONCEAL,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HOLD_AUDIENCE,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HEAL_CREATURE,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_PROTECT,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CHICKEN,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_ARMAGEDDON,1,0)

REM Workshop

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

    DOOR_AVAILABLE(ALL_PLAYERS,WOOD,1,0)
    DOOR_AVAILABLE(ALL_PLAYERS,STEEL,1,0)
    DOOR_AVAILABLE(ALL_PLAYERS,MAGIC,1,0)

REM Texts and tutorials for player
QUICK_OBJECTIVE(1, "Your keeper rival Topaz contests your claim to this land. Teach him a lesson. However, all you have is a single spider and no portal to work with. Explore around to find a means to build your army.")

REM Hero altar found
IF_ACTION_POINT (2, PLAYER0)
    REM Dialogue for if the player found the hero portal first
    IF (PLAYER0, FLAG4 == 0)
        QUICK_INFORMATION(7, "You have found an altar which can summon heroes. However, it is said that there is a corresponding altar, which attracts evil creatures as well...", -4)
        SET_FLAG(PLAYER0, FLAG4, 1)
        QUICK_OBJECTIVE(3, "You can use the special box to attract creatures through this gate, and convince them to do your bidding with a bit of torture...", -3)
    ENDIF

    REM Make player the owner of the raised slab and play effects
    CHANGE_SLAB_OWNER(72,77,PLAYER0, NONE)
    PLAY_MESSAGE(PLAYER0, SOUND, "116")
    CREATE_EFFECT_AT_POS(57, 217, 232)
ENDIF

REM Evil altar found
IF_ACTION_POINT (4, PLAYER0)
    REM Dialogue for if the player found the evil portal first
    IF (PLAYER0, FLAG4 == 0)
        QUICK_INFORMATION(8, "You have found an altar which can summon evil creatures. However, it is said that there is a corresponding altar, which attracts heroes as well...", -3)
        SET_FLAG(PLAYER0, FLAG4, 2)
        QUICK_OBJECTIVE(97, "You can use the special box to attract creatures through this gate, and convince them to do your bidding with a bit of torture...", -4)
    ENDIF

    REM Make player the owner of the raised slab and play effects
    CHANGE_SLAB_OWNER(8,35,PLAYER0, NONE)
    PLAY_MESSAGE(PLAYER0, SOUND, "116")
    CREATE_EFFECT_AT_POS(57, 25, 106)
ENDIF

REM if X hero unit is taken out of the pool, respawn it?
rem if player > creature limit don't spawn more

SET_BOX_TOOLTIP(1,"Spawn Hero Creature")
SET_BOX_TOOLTIP(2,"Spawn Evil Creature")
SET_BOX_TOOLTIP(3,"Summon Legend (Level 10)")

REM Hero spawner flags

    REM FLAG0 is the amount of times the HERO box was clicked
    SET_FLAG(PLAYER0, FLAG0, 0)
    REM FLAG2 determines the state the HERO box was clicked in
    SET_FLAG(PLAYER0, FLAG2, 0)
    REM FLag 3 determines which HERO creature to spawn
    SET_FLAG(PLAYER0, FLAG3, 9999)

REM Evil creature spawner flags

    REM FLAG5 is the amount of times the keeper box was clicked
    SET_FLAG(PLAYER0, FLAG5, 0)
    REM FLAG6 determines the state the keeper box was clicked in
    SET_FLAG(PLAYER0, FLAG6, 0)
    REM FLag7 determines which keeper creature to spawn
    SET_FLAG(PLAYER0, FLAG7, 0)

REM Flag which determines if the tutorial message for summoning should be shown

    SET_FLAG(PLAYER0, FLAG4, 0)

REM Flag which determines if you get horny or avatar / also determines starting creature / and adds one more random creature to the south side

    SET_FLAG(PLAYER0, FLAG1, 0)

REM HEROES - Code that handles the logic for summoning a creature when clicking the special box

    IF(PLAYER0,BOX1_ACTIVATED > PLAYER0,FLAG0)

        REM Player may summon
        IF(PLAYER0, TOTAL_CREATURES < 15)
            
            REM Determine random creature to be spawned and set flags

            REM For later: randomise the value
            NEXT_COMMAND_REUSABLE
            RANDOMISE_FLAG(PLAYER0,FLAG3,10)

            REM Timer and flag which determines the respawn timer of the box
            NEXT_COMMAND_REUSABLE
            SET_TIMER(PLAYER0,TIMER2)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG2, 1)

            REM Play gold sound effect and speech
            NEXT_COMMAND_REUSABLE
            PLAY_MESSAGE(PLAYER0, SOUND, "37")
            NEXT_COMMAND_REUSABLE
            PLAY_MESSAGE(PLAYER0,SPEECH,80)

            REM Flag ticks up progressively to prevent continuous triggering
            NEXT_COMMAND_REUSABLE
            ADD_TO_FLAG(PLAYER0, FLAG0, 1)

        ENDIF

        IF(PLAYER0, TOTAL_CREATURES >= 15)

            NEXT_COMMAND_REUSABLE
            QUICK_INFORMATION(4, "You already have enough creatures. You can not summon more.")

            NEXT_COMMAND_REUSABLE
            ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 1, 1, PLAYER_NEUTRAL)

            NEXT_COMMAND_REUSABLE
            ADD_TO_FLAG(PLAYER0, FLAG0, 1)

        ENDIF

    ENDIF

REM Code which handles respawning the special box for heroes

    IF (PLAYER0, FLAG2 > 0)
        REM Player successfully summoned - long timer
        IF (PLAYER0, FLAG2 == 1)
            REM This check determines when the box respawns
            IF (PLAYER0, TIMER2 == 10)
                REM Adds the box back to the level after using it
                NEXT_COMMAND_REUSABLE
                ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 1, 1, PLAYER_NEUTRAL)            
                NEXT_COMMAND_REUSABLE
                SET_FLAG(PLAYER0, FLAG2, 0)
            ENDIF
        ENDIF

        REM Player didn't summon successfully - short timer
        IF (PLAYER0, FLAG2 == 2)
            IF (PLAYER0, TIMER2 == 50)
                REM Adds the box back to the level after using it
                NEXT_COMMAND_REUSABLE
                ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 1, 1, PLAYER_NEUTRAL) 
                NEXT_COMMAND_REUSABLE           
                SET_FLAG(PLAYER0, FLAG2, 0)
            ENDIF
        ENDIF
    ENDIF


REM Hero spawning logic - pick which creature to spawn
IF (PLAYER0, FLAG3 > 0)

    IF(PLAYER0,FLAG3 == 1)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WIZARD,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)

    ENDIF
    IF(PLAYER0,FLAG3 == 2)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BARBARIAN,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 3)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ARCHER,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 4)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,MONK,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 5)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DWARFA,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 6)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,WITCH,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 7)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,GIANT,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 8)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,FAIRY,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 9)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,THIEF,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF
    IF(PLAYER0,FLAG3 == 10)
        NEXT_COMMAND_REUSABLE
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SAMURAI,-3,1,1,0)
        NEXT_COMMAND_REUSABLE
        SET_FLAG(PLAYER0, FLAG3, 0)
    ENDIF

ENDIF

REM Spawn heroes in the middle part of the level

    REM Party 1
    CREATE_PARTY(party1)
        ADD_TO_PARTY(party1,FAIRY,1,0,ATTACK_DUNGEON_HEART,0)
        
    REM Party 2 - when player hits 15 creatures
    CREATE_PARTY(PARTY2)
        ADD_TO_PARTY(PARTY2,GIANT,4,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY2,WIZARD,4,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY2,MONK,4,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY2,DWARFA,4,0,ATTACK_DUNGEON_HEART,0)

    REM Party 3 - when player hasn't claimed the bridge
    CREATE_PARTY(PARTY3)
        ADD_TO_PARTY(PARTY3,MONK,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY3,TENTACLE,6,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY3,TENTACLE,6,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY3,ARCHER,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY3,ARCHER,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY3,ARCHER,7,0,ATTACK_DUNGEON_HEART,0)

    IF_ACTION_POINT (3, PLAYER0)
        ADD_PARTY_TO_LEVEL(PLAYER_GOOD, party1, -2, 3)
    ENDIF

REM Show player that the bridge is available

    IF(PLAYER0, BRIDGE > 0)
        rem QUICK_OBJECTIVE(5,"Well done, looks like you got your hands on the bridge.")
        ROOM_AVAILABLE(ALL_PLAYERS,BRIDGE,1,1)
        TUTORIAL_FLASH_BUTTON(18, -1)
    ENDIF

REM Message and logic for creature limit

    IF (PLAYER0, TORTURE > 0)
        QUICK_OBJECTIVE(6,"You now have a torture chamber. Unfortunately, the heroes have shackled your ability to imprison and convert their ranks. You may run into trouble making new prisoners and converting your foes beyond owning 15 creatures...", 9)
    ENDIF

    IF (PLAYER0, PRISON > 0)
        TUTORIAL_FLASH_BUTTON(69, -1)
    ENDIF

    REM When the player has hit the "creature cap", disable certain game rules to prevent making more creatures
    IF (PLAYER0, TOTAL_CREATURES >= 15)

        QUICK_INFORMATION(23, "You have hit 15 creatures, keeper. Your abilities to torture and imprison will be hindered, but the restriction is lifted once more when you go below 15 again, should you want to rearrange your army to your desires.")

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(PrisonSkeletonChance, 0)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(GhostConvertChance, 0)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(TortureDeathChance, 100)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(StunEvilEnemyChance, 0)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(StunGoodEnemyChance, 0)

        REM Reduce conversion again to regular rate
        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(TortureConvertChance, 33)

    ENDIF

    REM If creatures drop below 15, enable those rules again
    IF (PLAYER0, TOTAL_CREATURES < 15)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(PrisonSkeletonChance, 100)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(GhostConvertChance, 100)        

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(TortureDeathChance, 0)        

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(StunEvilEnemyChance, 100)

        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(StunGoodEnemyChance, 100)

        REM This is increased from the case of 33 to make conversion faster
        NEXT_COMMAND_REUSABLE
        SET_GAME_RULE(TortureConvertChance, 80)

    ENDIF

REM Imp logic

    IF(PLAYER0, IMP > 0)
        MAGIC_AVAILABLE(PLAYER0,POWER_IMP,1,1)
    ENDIF

REM Logic for avatar/horny

IF(PLAYER0,BOX3_ACTIVATED == 1)

    RANDOMISE_FLAG(PLAYER0,FLAG1,2)

    IF(PLAYER0,FLAG1 == 1)
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,HORNY,-1,1,10,0)
    ENDIF

    IF(PLAYER0,FLAG1 == 2)
        ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,AVATAR,-1,1,10,0)
    ENDIF

    PLAY_MESSAGE(PLAYER0,SPEECH,80)
    PLAY_MESSAGE(PLAYER0, SOUND, "55")

ENDIF

IF_ACTION_POINT(8, PLAYER0)
    QUICK_INFORMATION(78, "You have found something dangerous. This box can spawn a truly terrifying being... just be careful and come prepared for a fight. The same rules as before apply, if you already have 15 creatures, making this legend join you won't work...", -1)
ENDIF


REM Middle portal party

    IF (PLAYER0, TOTAL_CREATURES >= 15)
        REM Spawn a wave when the player has 15 creature to signal that the player should move towards the hero fortress
        SET_TIMER(PLAYER0, TIMER4)
    ENDIF

    IF (PLAYER0, TIMER4 > 1000)

        IF_AVAILABLE(PLAYER0, BRIDGE == 0)
            ADD_PARTY_TO_LEVEL(PLAYER_GOOD, PARTY2, -2, 2)
        ENDIF

    ENDIF

    IF (PLAYER0, TIMER4 > 10000)

        IF_AVAILABLE(PLAYER0, BRIDGE == 0)
            ADD_PARTY_TO_LEVEL(PLAYER_GOOD, PARTY3, -2, 1)
            QUICK_INFORMATION(77, "Stop dawdling, keeper. The heroes won't wait forever for you to finish off your rival.")
        ENDIF

    ENDIF

REM Logic for evil creature portal


REM HEROES - Code that handles the logic for summoning evil creature when clicking the special box

    IF(PLAYER0,BOX2_ACTIVATED > PLAYER0,FLAG5)

        REM Player may summon
        IF(PLAYER0, TOTAL_CREATURES < 15)
            
            REM Determine random creature to be spawned and set flags

            REM For later: randomise the value
            NEXT_COMMAND_REUSABLE
            RANDOMISE_FLAG(PLAYER0,FLAG7,11)

            REM Timer and flag which determines the respawn timer of the box
            NEXT_COMMAND_REUSABLE
            SET_TIMER(PLAYER0,TIMER3)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG6, 1)

            REM Play gold sound effect and speech
            NEXT_COMMAND_REUSABLE
            PLAY_MESSAGE(PLAYER0, SOUND, "37")
            NEXT_COMMAND_REUSABLE
            PLAY_MESSAGE(PLAYER0,SPEECH,80)

            REM Flag ticks up progressively to prevent continuous triggering
            NEXT_COMMAND_REUSABLE
            ADD_TO_FLAG(PLAYER0, FLAG5, 1)

        ENDIF

        IF(PLAYER0, TOTAL_CREATURES >= 15)

            NEXT_COMMAND_REUSABLE
            QUICK_INFORMATION(96, "You already have enough creatures. You can not summon more.")

            NEXT_COMMAND_REUSABLE
            ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 5, 2, PLAYER_NEUTRAL)

            NEXT_COMMAND_REUSABLE
            ADD_TO_FLAG(PLAYER0, FLAG5, 1)

        ENDIF

    ENDIF

REM Code which handles respawning the special box for evil creatures

    IF (PLAYER0, FLAG6 > 0)
        REM Player successfully summoned - long timer
        IF (PLAYER0, FLAG6 == 1)
            REM Timer determines when box respawns
            IF (PLAYER0, TIMER3 == 10)
                REM Adds the box back to the level after using it
                NEXT_COMMAND_REUSABLE
                ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 5, 2, PLAYER_NEUTRAL)            
                NEXT_COMMAND_REUSABLE
                SET_FLAG(PLAYER0, FLAG6, 0)
            ENDIF
        ENDIF

        REM Player didn't summon successfully - short timer
        IF (PLAYER0, FLAG6 == 2)
            IF (PLAYER0, TIMER3 == 50)
                REM Adds the box back to the level after using it
                NEXT_COMMAND_REUSABLE
                ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 5, 2, PLAYER_NEUTRAL) 
                NEXT_COMMAND_REUSABLE           
                SET_FLAG(PLAYER0, FLAG6, 0)
            ENDIF
        ENDIF
    ENDIF


REM Evil creature spawning logic

    IF (PLAYER0, FLAG7 > 0)

        IF(PLAYER0,FLAG7 == 1)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,TROLL,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 2)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DRAGON,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 3)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DEMONSPAWN,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 4)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,DARK_MISTRESS,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 5)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SORCEROR,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 6)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BILE_DEMON,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 7)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,BUG,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 8)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,SPIDER,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 9)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,HELL_HOUND,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 10)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,TENTACLE,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF
        IF(PLAYER0,FLAG7 == 11)
            NEXT_COMMAND_REUSABLE
            ADD_CREATURE_TO_LEVEL(PLAYER_GOOD,ORC,-4,1,1,0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG7, 0)
        ENDIF

    ENDIF

REM Spawn 2 random starting creatures. Various configurations, always 1 researcher / always 1 hero and 1 keeper creature

    IF (PLAYER0,GAME_TURN == 100)
        RANDOMISE_FLAG(PLAYER0,FLAG1,6)
    ENDIF

    IF (PLAYER0, FLAG1 > 0)
        IF (PLAYER0, GAME_TURN < 200)
            IF (PLAYER0, GAME_TURN > 150)

                IF(PLAYER0,FLAG1 == 0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,WIZARD,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DEMONSPAWN,6,1,1,0)
                ENDIF

                IF(PLAYER0,FLAG1 == 1)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,TROLL,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,TIME_MAGE,6,1,1,0)
                ENDIF
                IF(PLAYER0,FLAG1 == 2)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,FAIRY,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,ORC,6,1,1,0)
                ENDIF
                IF(PLAYER0,FLAG1 == 3)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MONK,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,TENTACLE,6,1,1,0)
                ENDIF
                IF(PLAYER0,FLAG1 == 4)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DWARFA,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,SORCEROR,6,1,1,0)
                ENDIF
                IF(PLAYER0,FLAG1 == 5)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,WITCH,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,HELL_HOUND,6,1,1,0)
                ENDIF
                IF(PLAYER0,FLAG1 == 6)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,THIEF,6,1,1,0)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DRAGON,6,1,1,0)
                ENDIF

            ENDIF
        ENDIF
    ENDIF

    REM If the player beat the horror bonus level, spawn another set of creature

    IF (PLAYER0, CAMPAIGN_FLAG2 == 1)

        IF (PLAYER0, FLAG1 > 0)
            IF (PLAYER0, GAME_TURN < 200)
                IF (PLAYER0, GAME_TURN > 150)

                    IF(PLAYER0,FLAG1 == 0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,THIEF,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MAIDEN,6,1,1,0)
                    ENDIF

                    IF(PLAYER0,FLAG1 == 1)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DRUID,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DEMONSPAWN,6,1,1,0)
                    ENDIF

                    IF(PLAYER0,FLAG1 == 2)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MAIDEN,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DEMONSPAWN,6,1,1,0)
                    ENDIF
                    IF(PLAYER0,FLAG1 == 3)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MAIDEN,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,ORC,6,1,1,0)
                    ENDIF
                    IF(PLAYER0,FLAG1 == 4)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,TIME_MAGE,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,TENTACLE,6,1,1,0)
                    ENDIF
                    IF(PLAYER0,FLAG1 == 5)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DWARFA,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MAIDEN,6,1,1,0)
                    ENDIF
                    IF(PLAYER0,FLAG1 == 6)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MAIDEN,6,1,1,0)
                        ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,HELL_HOUND,6,1,1,0)
                    ENDIF

                ENDIF
            ENDIF
        ENDIF

    ENDIF


REM Logic to add the random creature to the pocket of earth

    IF (PLAYER0,GAME_TURN == 300)
        REM This previously was:
        REM RANDOMISE_FLAG(PLAYER0,FLAG1,3)
        RANDOMISE_FLAG(PLAYER0,FLAG1,6)
    ENDIF

    IF (PLAYER0, FLAG1 > 0)
        IF (PLAYER0, GAME_TURN < 400)
            IF (PLAYER0, GAME_TURN > 350)

                IF(PLAYER0,FLAG1 == 1)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,TIME_MAGE,7,1,1,0)
                ENDIF
                IF(PLAYER0,FLAG1 == 2)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,DRUID,7,1,1,0)
                ENDIF
                REM This previously was:
                REM IF(PLAYER0,FLAG1 == 3)
                IF(PLAYER0,FLAG1 > 2)
                    ADD_CREATURE_TO_LEVEL(PLAYER_NEUTRAL,MAIDEN,7,1,1,0)
                ENDIF

            ENDIF
        ENDIF
    ENDIF

REM Endgame logic

    CREATE_PARTY(PARTY_KNIGHT)
        ADD_TO_PARTY(PARTY_KNIGHT,KNIGHT,10,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY_KNIGHT,MONK,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY_KNIGHT,MONK,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY_KNIGHT,MONK,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY_KNIGHT,DWARFA,7,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(PARTY_KNIGHT,SAMURAI,7,0,ATTACK_DUNGEON_HEART,0)

    CREATE_PARTY(MAP_MIDDLE_END)
        ADD_TO_PARTY(MAP_MIDDLE_END,WIZARD,8,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,GIANT,8,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,ARCHER,6,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,ARCHER,6,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,ARCHER,6,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,ARCHER,6,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,THIEF,8,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,THIEF,8,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,THIEF,8,0,ATTACK_DUNGEON_HEART,0)
        ADD_TO_PARTY(MAP_MIDDLE_END,THIEF,8,0,ATTACK_DUNGEON_HEART,0)

    IF (PLAYER3, DUNGEON_DESTROYED == 1)
        QUICK_INFORMATION(56, "The last remaining Diamond heroes are approaching. Prepare for the final battle and destroy any and all heroes left in this realm.", -5)

        DISPLAY_COUNTDOWN(PLAYER0, TIMER1, 3000, 1)

        SET_TIMER(PLAYER0, TIMER1)
        IF (PLAYER0, TIMER1 == 3000)
            ADD_PARTY_TO_LEVEL(PLAYER_GOOD, PARTY_KNIGHT, -5, 1)
            ADD_PARTY_TO_LEVEL(PLAYER_GOOD, MAP_MIDDLE_END, -2, 1)
        ENDIF
    ENDIF

    IF (PLAYER3, DUNGEON_DESTROYED == 1)

        REM Changed from IF (PLAYER_GOOD, TOTAL_CREATURES == 0) to controls to not count imprisoned creatures
        IF_CONTROLS(PLAYER_GOOD, TOTAL_CREATURES == 0)
            REM - make win condition only active when the party has spawned
            IF (PLAYER0, TIMER1 > 3100)

                WIN_GAME

                REM Count campaign flag up by one
                IF(PLAYER0, CAMPAIGN_FLAG6 == 2)
                    SET_FLAG(PLAYER0, CAMPAIGN_FLAG6, 3)
                ENDIF
                
                REM If player is in NG+, advance the state of that too
                IF (PLAYER0, CAMPAIGN_FLAG5 == 1)
                    IF(PLAYER0, CAMPAIGN_FLAG7 == 2)
                        SET_FLAG(PLAYER0, CAMPAIGN_FLAG7, 3)
                    ENDIF
                ENDIF

            ENDIF
        ENDIF
    ENDIF

REM WIP / TODO - Do new game+ conditions

IF (PLAYER0, CAMPAIGN_FLAG5 == 1)
    QUICK_INFORMATION(5, "NG+ is on - currently not implemented yet")
ENDIF