REM Basics

    LEVEL_VERSION(1)
    RUN_AFTER_VICTORY(1)
    SET_GENERATE_SPEED(400)
    START_MONEY(ALL_PLAYERS,10000)
    MAX_CREATURES(ALL_PLAYERS,25)

    COMPUTER_PLAYER(PLAYER3,ROAMING)
    COMPUTER_PLAYER(PLAYER2,ROAMING)

    SET_MUSIC("campaign_music/fairy_village_temple.mp3")

    SET_PLAYER_COLOR(PLAYER0, BLUE)

REM Availability

    ADD_CREATURE_TO_POOL(DEMONSPAWN,6)
    ADD_CREATURE_TO_POOL(TROLL,6)
    ADD_CREATURE_TO_POOL(SPIDER,6)
    ADD_CREATURE_TO_POOL(TENTACLE,6)
    ADD_CREATURE_TO_POOL(MAIDEN,6)
    ADD_CREATURE_TO_POOL(ORC,6)
    ADD_CREATURE_TO_POOL(ARCHER,6)
    REM Limit the stronger creatures
    ADD_CREATURE_TO_POOL(BILE_DEMON,2)
    ADD_CREATURE_TO_POOL(DRAGON,2)
    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,TENTACLE,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,MAIDEN,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,ORC,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,ARCHER,1,0)
    REM Stronger ones
    CREATURE_AVAILABLE(ALL_PLAYERS,BILE_DEMON,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,DRAGON,1,0)
    CREATURE_AVAILABLE(ALL_PLAYERS,DARK_MISTRESS,1,0)


REM Room availability

    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,BRIDGE,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,WORKSHOP,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,PRISON,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,TORTURE,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,1,0)
    ROOM_AVAILABLE(ALL_PLAYERS,GRAVEYARD,1,0)

REM Magic availability

    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_IMP,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_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_PROTECT,1,0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_DISEASE,1,0)

REM Workshop availability

    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,BRACED,1,0)
    DOOR_AVAILABLE(ALL_PLAYERS,STEEL,1,0)
    DOOR_AVAILABLE(ALL_PLAYERS,MAGIC,1,0)

REM Intro message
    QUICK_OBJECTIVE(1, "Topaz has taken over this cathedral and remodelled it to his needs. We should pay him a visit and swiftly evict him by destroying his heart. But a seal is placed on its chamber, protected by 3 guardians, so you should get rid of his tenants first. A Wizard, Monk and a Witch are looking like they've not paid their rent in a while. But, you might not want to knock at the front entrance first.")

REM Victory sequence and event

    IF (PLAYER3, DUNGEON_DESTROYED == 1)
        SET_TIMER(PLAYER0, TIMER7)
    ENDIF

    IF (PLAYER0, TIMER7 > 20)

        REM PLAY_MESSAGE(PLAYER0, SOUND, "42")
        USE_POWER_AT_LOCATION(PLAYER5, 28, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 35)
        USE_POWER_AT_LOCATION(PLAYER5, 29, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 29, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 60)
        USE_POWER_AT_LOCATION(PLAYER5, 30, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 30, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 75)
        USE_POWER_AT_LOCATION(PLAYER5, 32, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 32, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 80)
        USE_POWER_AT_LOCATION(PLAYER5, 31, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 31, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 95)
        USE_POWER_AT_LOCATION(PLAYER5, 33, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 33, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 110)
        REM CREATE_EFFECT_AT_POS(EFFECT_COLOURFUL_FIRE_CIRCLE, 121, 220)
        USE_POWER_AT_LOCATION(PLAYER5, 34, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 34, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 125)
        REM CREATE_EFFECT_AT_POS(EFFECT_COLOURFUL_FIRE_CIRCLE, 121, 220)
        USE_POWER_AT_LOCATION(PLAYER5, 29, POWER_LIGHTNING, 9, 1)
        USE_POWER_AT_LOCATION(PLAYER6, 29, POWER_CAVE_IN, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 140)
        PLAY_MESSAGE(PLAYER0, SOUND, "152")

        CREATE_EFFECT_AT_POS(EFFECT_WORD_OF_POWER, 121, 220)

        QUICK_MESSAGE(7, "You may have bested me, but I'll have my revenge!", PLAYER3)
        QUICK_INFORMATION(6, "Looks like you destroyed his heart, but your own dungeon heart has been cursed by Topaz. You'll have to see what his curse did in the next realm...", PLAYER0)

        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 24, 1, PLAYER3)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 25, 1, PLAYER3)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 26, 1, PLAYER3)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 27, 1, PLAYER3)

        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 35, 1, PLAYER3)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 36, 1, PLAYER3)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 37, 1, PLAYER3)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_YELLOW, 38, 1, PLAYER3)

        USE_POWER_AT_LOCATION(PLAYER5, 28, POWER_LIGHTNING, 9, 1)
    ENDIF

    IF (PLAYER0, TIMER7 > 200)
        WIN_GAME

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

    ENDIF

REM Logic to add the dwarfs on the left

    IF_ACTION_POINT(1, PLAYER0)
        SET_FLAG(PLAYER0, FLAG0, 1)
    ENDIF

    IF_ACTION_POINT(2, PLAYER0)
        SET_FLAG(PLAYER0, FLAG0, 1)
    ENDIF

    IF(PLAYER0, FLAG0 == 1)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 3, 1, 8, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 4, 1, 8, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 5, 1, 8, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 6, 1, 8, 1000)

        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 3, 1, 8, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 4, 1, 8, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 5, 1, 8, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, DWARFA, 6, 1, 8, 1000)
    ENDIF

REM Thieves in the middle

    IF_ACTION_POINT(15, PLAYER0)
        ADD_CREATURE_TO_LEVEL(PLAYER3, THIEF, 16, 1, 4, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, THIEF, 17, 1, 4, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, THIEF, 18, 1, 4, 1000)
        ADD_CREATURE_TO_LEVEL(PLAYER3, THIEF, 19, 1, 4, 1000)
    ENDIF

REM Logic for killing the 3 guardians

    IF_CONTROLS(PLAYER3, MONK == 0)
        REM Flame hinzufügen
        PLAY_MESSAGE(PLAYER0, SOUND, 148)
        CREATE_EFFECT_AT_POS(EFFECT_SPANGLE_RED, 118, 191)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_RED, 10, NULL, PLAYER3)
    ENDIF

    IF_CONTROLS(PLAYER3, WIZARD == 0)
        REM Flame hinzufügen
        PLAY_MESSAGE(PLAYER0, SOUND, 148)
        CREATE_EFFECT_AT_POS(EFFECT_SPANGLE_RED, 121, 191)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_RED, 11, NULL, PLAYER3)
    ENDIF

    IF_CONTROLS(PLAYER3, WITCH == 0)
        REM Flame hinzufügen
        PLAY_MESSAGE(PLAYER0, SOUND, 148)
        CREATE_EFFECT_AT_POS(EFFECT_SPANGLE_RED, 124, 191)
        ADD_OBJECT_TO_LEVEL(HEARTFLAME_RED, 12, NULL, PLAYER3)
    ENDIF

    IF_CONTROLS(PLAYER3, MONK == 0)
        IF_CONTROLS(PLAYER3, WITCH == 0)
            IF_CONTROLS(PLAYER3, WIZARD == 0)
                CHANGE_SLAB_TYPE(40, 67, PATH, NONE)
                PLAY_MESSAGE(PLAYER0, SOUND, "152")
                CREATE_EFFECT_AT_POS(EFFECT_WORD_OF_POWER, 121, 202)
                QUICK_OBJECTIVE(4, "The barrier is open. Destroy the heart of Topaz and get out of here!", 20)
            ENDIF
        ENDIF
    ENDIF

REM Logic for the dialogue of the 3 guardians and their dialogue/spawns

    REM Logic for the bit with the temple on the lower left
        IF_CONTROLS(PLAYER3, HORNY > 0)
            LEVEL_UP_CREATURE(PLAYER3, HORNY, ANYWHERE, 5)
        ENDIF

        IF_ACTION_POINT(8, PLAYER0)
            QUICK_MESSAGE(2, "Your defilement of this cathedral ends here!", MONK)
            SET_FLAG(PLAYER3, SACRIFICED[AVATAR], 1)
            ADD_CREATURE_TO_LEVEL(PLAYER3, ARCHER, 9, 4, 8, 200)
        ENDIF

    REM Wizard
        IF_ACTION_POINT(14, PLAYER0)
            QUICK_MESSAGE(3, "You shall not leave this place alive!", WIZARD)
            REM Left ghosts
            ADD_CREATURE_TO_LEVEL(PLAYER3, GHOST, 7, 4, 8, 0)
            REM Right ghosts
            ADD_CREATURE_TO_LEVEL(PLAYER3, GHOST, 13, 4, 8, 0)
        ENDIF

    REM Witch
        IF_ACTION_POINT(21, PLAYER0)
            QUICK_MESSAGE(5, "Don't think you will claim this realm for yourself!", WITCH)
            REM Adds
            ADD_CREATURE_TO_LEVEL(PLAYER3, TENTACLE, 23, 4, 8, 0)
            ADD_CREATURE_TO_LEVEL(PLAYER3, TENTACLE, 22, 4, 8, 0)
        ENDIF

REM Spawn the waves that carry extra gold

    SET_TIMER(PLAYER0, TIMER0)
    REM DISPLAY_TIMER(PLAYER0, TIMER0, 0)

    CREATE_PARTY(party1)
        ADD_TO_PARTY(party1, SKELETON, 1, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party1, GHOST, 1, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party2)
        ADD_TO_PARTY(party2, SKELETON, 2, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party2, GHOST, 2, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party3)
        ADD_TO_PARTY(party3, SKELETON, 3, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party3, GHOST, 3, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party4)
        ADD_TO_PARTY(party4, SKELETON, 4, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party4, GHOST, 4, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party5)
        ADD_TO_PARTY(party5, SKELETON, 5, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party5, GHOST, 5, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party6)
        ADD_TO_PARTY(party6, SKELETON, 6, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party6, GHOST, 6, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party7)
        ADD_TO_PARTY(party7, SKELETON, 7, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party7, GHOST, 7, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party8)
        ADD_TO_PARTY(party8, SKELETON, 8, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party8, GHOST, 8, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party9)
        ADD_TO_PARTY(party9, SKELETON, 9, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party9, GHOST, 9, 750, ATTACK_DUNGEON_HEART, 0)

    CREATE_PARTY(party10)
        ADD_TO_PARTY(party10, SKELETON, 10, 750, ATTACK_DUNGEON_HEART, 0)
        ADD_TO_PARTY(party10, GHOST, 10, 750, ATTACK_DUNGEON_HEART, 0)



    IF (PLAYER0, TIMER0 > 12000)
        QUICK_INFORMATION(13, "These corpses of dead heroes seem to sense your evil presence, Keeper. Show them the way back to their grave.", -2)
        ADD_PARTY_TO_LEVEL(PLAYER3, party2, -2, 3)
    ENDIF

    IF (PLAYER0, TIMER0 > 18000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party3, -2, 3)
    ENDIF

    IF (PLAYER0, TIMER0 > 24000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party4, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 30000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party5, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 36000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party6, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 42000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party7, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 48000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party8, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 54000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party9, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 60000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party10, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 70000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party10, -2, 4)
    ENDIF

    IF (PLAYER0, TIMER0 > 80000)
        ADD_PARTY_TO_LEVEL(PLAYER3, party10, -2, 4)
    ENDIF

REM When the enemy heart is hurt

    CREATE_PARTY(final_party)
        REM The main lads
        ADD_TO_PARTY(final_party, WITCH, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, WIZARD, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, MONK, 10, 0, ATTACK_ENEMIES, 0)
        REM Smaller guys
        ADD_TO_PARTY(final_party, GIANT, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, HORNY, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, DWARFA, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, THIEF, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, THIEF, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, ARCHER, 10, 0, ATTACK_ENEMIES, 0)
        ADD_TO_PARTY(final_party, ARCHER, 10, 0, ATTACK_ENEMIES, 0)

    IF (PLAYER3, HEART_HEALTH < 30000)
        QUICK_MESSAGE(10, "fast! Prepare to die!", MONK)
        QUICK_MESSAGE(9, "so...", WIZARD)
        QUICK_MESSAGE(8, "Not...", WITCH)
        ADD_PARTY_TO_LEVEL(PLAYER3, final_party, -1, 1)
    ENDIF

REM Maiden description

    IF_CONTROLS(PLAYER0, MAIDEN > 0)
        TUTORIAL_FLASH_BUTTON(5, 200)
        QUICK_INFORMATION(11, "You have attracted a Maiden. This strange looking combination of spider and human enjoys researching in the library, but can be a fierce fighter too with some training, if you're not arachnophobic.")
    ENDIF
    
REM Description for the lockroom

    IF_ACTION_POINT(39, PLAYER0)
        QUICK_OBJECTIVE(12, "This room holds the magical lock. The statues will light up when you have defeated the individual guardians. Defeat all 3 of them and the way to the heart is open, to smash your opponent.", 39)
    ENDIF