REM Basics

    LEVEL_VERSION(1)
    RUN_AFTER_VICTORY(1)
    SET_GENERATE_SPEED(400)
    START_MONEY(ALL_PLAYERS,0)
    MAX_CREATURES(ALL_PLAYERS,0)

    SET_PLAYER_COLOR(PLAYER0, BLUE)

    SET_MUSIC("campaign_music/nier_calm.mp3")

    REM Blue is roaming and friendly to make NPCs work
    ALLY_PLAYERS(PLAYER0, PLAYER1, 3)
    COMPUTER_PLAYER(PLAYER1,ROAMING)

REM Availability, disable hand

    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_POSSESS,1,1)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HAND, 0, 0)
    MAGIC_AVAILABLE(ALL_PLAYERS,POWER_DESTROY_WALLS,1,0)

REM Level logic

    REM "Welcome to the hub area, use your imp to have a look around. Things might change as you go through the game, so you should come back every now and then. You can check your conquest's progress, perhaps acquire some information, or find some secrets later. You may leave this realm again whenever you feel like it."
    DISPLAY_OBJECTIVE(908)

REM Show all currently beaten levels, and the next level

    REM Just a dummy check to be able to collapse this region
    IF (PLAYER0, DRAGON == 0)

        IF (PLAYER0, CAMPAIGN_FLAG6 == 1)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 2)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 3)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 4)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 5)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 6)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 6, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            REVEAL_MAP_LOCATION(PLAYER0,57,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 7)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 6, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 7, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            REVEAL_MAP_LOCATION(PLAYER0,57,-1)
            REVEAL_MAP_LOCATION(PLAYER0,58,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 8)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 6, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 7, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 8, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            REVEAL_MAP_LOCATION(PLAYER0,57,-1)
            REVEAL_MAP_LOCATION(PLAYER0,58,-1)
            REVEAL_MAP_LOCATION(PLAYER0,59,-1)
        ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG6 == 9)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 6, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 7, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 8, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 9, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            REVEAL_MAP_LOCATION(PLAYER0,57,-1)
            REVEAL_MAP_LOCATION(PLAYER0,58,-1)
            REVEAL_MAP_LOCATION(PLAYER0,59,-1)
            REVEAL_MAP_LOCATION(PLAYER0,60,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 10)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 6, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 7, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 8, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 9, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 10, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            REVEAL_MAP_LOCATION(PLAYER0,57,-1)
            REVEAL_MAP_LOCATION(PLAYER0,58,-1)
            REVEAL_MAP_LOCATION(PLAYER0,59,-1)
            REVEAL_MAP_LOCATION(PLAYER0,60,-1)
            REVEAL_MAP_LOCATION(PLAYER0,61,-1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 == 11)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 1, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 2, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 3, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 4, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 5, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 6, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 7, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 8, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 9, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 10, 1, PLAYER0)
            ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 11, 1, PLAYER0)
            REVEAL_MAP_LOCATION(PLAYER0,51,-1)
            REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            REVEAL_MAP_LOCATION(PLAYER0,57,-1)
            REVEAL_MAP_LOCATION(PLAYER0,58,-1)
            REVEAL_MAP_LOCATION(PLAYER0,59,-1)
            REVEAL_MAP_LOCATION(PLAYER0,60,-1)
            REVEAL_MAP_LOCATION(PLAYER0,61,-1)
        ENDIF

    ENDIF


REM Show the second row of flames if player is in NG+

    IF (PLAYER0, CAMPAIGN_FLAG5 == 1)

        CHANGE_SLAB_TYPE(3,70,GEMS,NONE)

        CHANGE_SLAB_TYPE(2,71,GEMS,NONE)
        CHANGE_SLAB_TYPE(3,71,GEMS,NONE)
        CHANGE_SLAB_TYPE(4,71,GEMS,NONE)

        CHANGE_SLAB_TYPE(3,72,GEMS,NONE)

        REM Reveal the gems after changing the tile

        REVEAL_MAP_RECT(PLAYER0, 10, 211, 1, 1)

        REVEAL_MAP_RECT(PLAYER0, 7, 214, 1, 1)
        REVEAL_MAP_RECT(PLAYER0, 10, 214, 1, 1)
        REVEAL_MAP_RECT(PLAYER0, 13, 214, 1, 1)

        REVEAL_MAP_RECT(PLAYER0, 10, 217, 1, 1)

        REVEAL_MAP_LOCATION(PLAYER0,31,-1)
        REVEAL_MAP_LOCATION(PLAYER0,32,-1)
        REVEAL_MAP_LOCATION(PLAYER0,33,-1)
        REVEAL_MAP_LOCATION(PLAYER0,34,-1)
        REVEAL_MAP_LOCATION(PLAYER0,35,-1)
        REVEAL_MAP_LOCATION(PLAYER0,36,-1)
        REVEAL_MAP_LOCATION(PLAYER0,37,-1)
        REVEAL_MAP_LOCATION(PLAYER0,38,-1)
        REVEAL_MAP_LOCATION(PLAYER0,39,-1)
        REVEAL_MAP_LOCATION(PLAYER0,40,-1)
        REVEAL_MAP_LOCATION(PLAYER0,41,-1)

        REM Show progress and level icons

        IF (PLAYER0, CAMPAIGN_FLAG5 == 1)

            IF (PLAYER0, CAMPAIGN_FLAG7 == 1)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 2)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 3)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 4)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 5)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 6)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 36, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
                REVEAL_MAP_LOCATION(PLAYER0,57,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 7)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 36, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 37, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
                REVEAL_MAP_LOCATION(PLAYER0,57,-1)
                REVEAL_MAP_LOCATION(PLAYER0,58,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 8)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 36, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 37, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 38, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
                REVEAL_MAP_LOCATION(PLAYER0,57,-1)
                REVEAL_MAP_LOCATION(PLAYER0,58,-1)
                REVEAL_MAP_LOCATION(PLAYER0,59,-1)
            ENDIF

                IF (PLAYER0, CAMPAIGN_FLAG7 == 9)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 36, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 37, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 38, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 39, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
                REVEAL_MAP_LOCATION(PLAYER0,57,-1)
                REVEAL_MAP_LOCATION(PLAYER0,58,-1)
                REVEAL_MAP_LOCATION(PLAYER0,59,-1)
                REVEAL_MAP_LOCATION(PLAYER0,60,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 10)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 36, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 37, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 38, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 39, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 40, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
                REVEAL_MAP_LOCATION(PLAYER0,57,-1)
                REVEAL_MAP_LOCATION(PLAYER0,58,-1)
                REVEAL_MAP_LOCATION(PLAYER0,59,-1)
                REVEAL_MAP_LOCATION(PLAYER0,60,-1)
                REVEAL_MAP_LOCATION(PLAYER0,61,-1)
            ENDIF

            IF (PLAYER0, CAMPAIGN_FLAG7 == 11)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 31, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 32, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 33, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 34, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 35, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 36, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 37, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 38, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 39, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 40, 1, PLAYER0)
                ADD_OBJECT_TO_LEVEL(HEARTFLAME_BLUE, 41, 1, PLAYER0)
                REVEAL_MAP_LOCATION(PLAYER0,51,-1)
                REVEAL_MAP_LOCATION(PLAYER0,52,-1)
                REVEAL_MAP_LOCATION(PLAYER0,53,-1)
                REVEAL_MAP_LOCATION(PLAYER0,54,-1)
                REVEAL_MAP_LOCATION(PLAYER0,55,-1)
                REVEAL_MAP_LOCATION(PLAYER0,56,-1)
                REVEAL_MAP_LOCATION(PLAYER0,57,-1)
                REVEAL_MAP_LOCATION(PLAYER0,58,-1)
                REVEAL_MAP_LOCATION(PLAYER0,59,-1)
                REVEAL_MAP_LOCATION(PLAYER0,60,-1)
                REVEAL_MAP_LOCATION(PLAYER0,61,-1)
            ENDIF

        ENDIF

    ENDIF

REM Logic for the messages - beware - reverse order

    IF_ACTION_POINT(13, PLAYER0)
        QUICK_MESSAGE(3, "A passage there leads to a frozen island.", WIZARD)
        QUICK_MESSAGE(4, "Look near the rogue heroes dungeon.", WIZARD)
        QUICK_MESSAGE(5, "A secret in the spider caverns?", WIZARD)
    ENDIF

    IF_ACTION_POINT(18, PLAYER0)
        QUICK_MESSAGE(6, "-Incomprehensible buzzing-", FLY)
    ENDIF

    REM This one is different depending on when the player finds him - dialogue and logic for horny
    REM "Ally with Horned Reaper"
    SET_BOX_TOOLTIP_ID(1,913)
    IF_ACTION_POINT(22, PLAYER0)

        IF (PLAYER0, CAMPAIGN_FLAG6 >= 7)
            QUICK_MESSAGE(42, "use this special. I will be there.", HORNY)
            QUICK_MESSAGE(41, "If you want my help when the final battle comes,", HORNY)
            QUICK_MESSAGE(40, "You have proven yourself worthy...", HORNY)

            CHANGE_SLAB_OWNER(72,19, PLAYER0, NONE)
            ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 30, 1, PLAYER_NEUTRAL)

            PLAY_MESSAGE(PLAYER0, SOUND, "116")
            CREATE_EFFECT_AT_POS(57, 217, 58)

        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG6 < 7)
            QUICK_MESSAGE(9, "Unless you know the secret already?", HORNY)
            QUICK_MESSAGE(8, "You will see when you reach the heart of the island.", HORNY)
            QUICK_MESSAGE(7, "The power of chaos?", HORNY)
        ENDIF

    ENDIF

    IF_ACTION_POINT(23, PLAYER0)
        QUICK_MESSAGE(11, "performing some sort of ritual on a full moon.", DWARFA)
        QUICK_MESSAGE(10, "Those lunatics of the church are always", DWARFA)
    ENDIF

    IF_ACTION_POINT(24, PLAYER0)
        QUICK_MESSAGE(13, "otherworldly glow during a new moon...", FAIRY)
        QUICK_MESSAGE(12, "The lake always glistens with an", FAIRY)
    ENDIF

    IF_ACTION_POINT(12, PLAYER0)
        QUICK_MESSAGE(16, "Don't let anyone know I told you.", DRAGON)  
        QUICK_MESSAGE(15, "a secret entrance to an Onyx base.", DRAGON)
        QUICK_MESSAGE(14, "In a big lava pool near serpents rock...", DRAGON)
    ENDIF

    IF_ACTION_POINT(25, PLAYER0)
        QUICK_MESSAGE(19, "like a dream within a dream...", MONK)  
        QUICK_MESSAGE(18, "the cathedral houses a hidden realm...", MONK)
        QUICK_MESSAGE(17, "A mirror reality inside of", MONK)
    ENDIF

    IF_ACTION_POINT(26, PLAYER0)
        QUICK_MESSAGE(22, "something else is hidden inside too.", SAMURAI)  
        QUICK_MESSAGE(21, "than just infinite wealth. Apparently", SAMURAI)
        QUICK_MESSAGE(20, "They say the gem vein hides more", SAMURAI)
    ENDIF

    IF_ACTION_POINT(27, PLAYER0)
        QUICK_MESSAGE(24, "you're not familiar with...", SPIDER)
        QUICK_MESSAGE(23, "These islands house some creatures", SPIDER)
    ENDIF

    IF_ACTION_POINT(28, PLAYER0)
        QUICK_MESSAGE(26, "They may contain unusual challenges and rewards.", TENTACLE)
        QUICK_MESSAGE(25, "Seek the hidden realms...", TENTACLE)
    ENDIF

REM Logic for the fountain puzzle

    REM Blue - 14
    REM White - 17
    REM Black - 16
    REM Yellow - 15

    IF_ACTION_POINT(14, PLAYER0)

        NEXT_COMMAND_REUSABLE
        RESET_ACTION_POINT(14, PLAYER0)
        
        REM If the player is at the correct part of the sequence, advance
        IF (PLAYER0, FLAG1 == 0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 1)
        ENDIF

        REM Reset back to zero if the player is going out of order
        IF (PLAYER0, FLAG1 == 2)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF
        IF (PLAYER0, FLAG1 == 3)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF

    ENDIF

    IF_ACTION_POINT(17, PLAYER0)

        NEXT_COMMAND_REUSABLE
        RESET_ACTION_POINT(17, PLAYER0)

        REM If the player is at the correct part of the sequence, advance
        IF (PLAYER0, FLAG1 == 1)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 2)
        ENDIF

        REM Reset back to zero if the player is going out of order
        IF (PLAYER0, FLAG1 == 0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF
        IF (PLAYER0, FLAG1 == 3)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF

    ENDIF

    IF_ACTION_POINT(16, PLAYER0)

        NEXT_COMMAND_REUSABLE
        RESET_ACTION_POINT(16, PLAYER0)

        IF (PLAYER0, FLAG1 == 2)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 3)
        ENDIF

        REM Reset back to zero if the player is going out of order
        IF (PLAYER0, FLAG1 == 0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF
        IF (PLAYER0, FLAG1 == 1)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF

    ENDIF

    IF_ACTION_POINT(15, PLAYER0)

        NEXT_COMMAND_REUSABLE
        RESET_ACTION_POINT(15, PLAYER0)

        IF (PLAYER0, FLAG1 == 3)
            QUICK_MESSAGE(1, "A hidden passage nearby has opened...", SPELL_FLIGHT)

            USE_POWER_AT_LOCATION(PLAYER0, 19, POWER_DESTROY_WALLS, 1, 1)
            USE_POWER_AT_LOCATION(PLAYER0, 19, POWER_DESTROY_WALLS, 1, 1)

            USE_POWER_AT_LOCATION(PLAYER0, 20, POWER_DESTROY_WALLS, 1, 1)
            USE_POWER_AT_LOCATION(PLAYER0, 20, POWER_DESTROY_WALLS, 1, 1)
        ENDIF

        REM Reset back to zero if the player is going out of order
        IF (PLAYER0, FLAG1 == 0)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF
        IF (PLAYER0, FLAG1 == 1)
            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, FLAG1, 0)
        ENDIF

    ENDIF

REM Room availability depending on campaign progress - checks Flag6

    REM Tentacle sewer room
    IF (PLAYER0, CAMPAIGN_FLAG6 > 2)
        SET_DOOR(UNLOCKED, 57, 18)
        SET_DOOR(UNLOCKED, 57, 30)
    ENDIF

    REM Dragon treasury room - show after River Styx is beaten
    IF (PLAYER0, CAMPAIGN_FLAG6 > 3)
        SET_DOOR(UNLOCKED, 66, 12)
    ENDIF

    REM This is the funny fly room
    IF (PLAYER0, CAMPAIGN_FLAG6 > 5)
        SET_DOOR(UNLOCKED, 7, 15)
    ENDIF

    REM Spider room
    IF (PLAYER0, CAMPAIGN_FLAG6 > 5)
        SET_DOOR(UNLOCKED, 20, 33)
    ENDIF

    REM Monk temple room
    IF (PLAYER0, CAMPAIGN_FLAG6 > 7)
        SET_DOOR(UNLOCKED, 61, 27)
    ENDIF

    REM Samurai hatchery room
    IF (PLAYER0, CAMPAIGN_FLAG6 > 9)
        SET_DOOR(UNLOCKED, 26, 35)
    ENDIF

REM Mistress - gives hint to reaper

    IF (PLAYER0, CAMPAIGN_FLAG6 > 5)
        ADD_CREATURE_TO_LEVEL(PLAYER1, DARK_MISTRESS, 43, 1, 1, 0)
        IF_ACTION_POINT(42, PLAYER0)
            QUICK_MESSAGE(28, "Where he is? I have no idea, look around.", DARK_MISTRESS)
            QUICK_MESSAGE(27, "They say the Reaper in town is looking for allies.", DARK_MISTRESS)
        ENDIF
    ENDIF

REM Special box logic for reaper

    IF(PLAYER0,BOX1_ACTIVATED > 0)
        REM Speech so be it
        SET_FLAG(PLAYER0, CAMPAIGN_FLAG4, 1)
        PLAY_MESSAGE(PLAYER0,SPEECH,80)
        PLAY_MESSAGE(PLAYER0, SOUND, 760)
        QUICK_MESSAGE(32, "We will meet again...", HORNY)
        REM Horny happy sound?
    ENDIF

REM Giant logic - different message depending on 

    IF (PLAYER0, CAMPAIGN_FLAG6 >= 7)
        IF_ACTION_POINT(29, PLAYER0)
            QUICK_MESSAGE(34, "Looks like the situation is getting serious...", GIANT)
        ENDIF
    ENDIF

    IF (PLAYER0, CAMPAIGN_FLAG6 < 7)

        IF_ACTION_POINT(29, PLAYER0)
            QUICK_MESSAGE(31, "Maybe she'll be back later?", GIANT)
            QUICK_MESSAGE(30, "Doesn't seem she's here right now...", GIANT)
            QUICK_MESSAGE(29, "There's often an odd mistress north of here.", GIANT)
        ENDIF

    ENDIF

REM Box 2 logic - enable/disable chaos mode

    REM Flag5 - NG+ - 0 if regular mode, 1 if NG+

    REM "Toggle Chaos Mode"
    SET_BOX_TOOLTIP_ID(2,945)

    IF(PLAYER0,BOX2_ACTIVATED > PLAYER0,FLAG0)

        QUICK_MESSAGE(36, "in a future update.", SPELL_FLIGHT)
        QUICK_MESSAGE(37, "yet and will be fully added", SPELL_FLIGHT)
        QUICK_MESSAGE(38, "Warning: New Game+ is not finished", SPELL_FLIGHT)

        IF (PLAYER0, CAMPAIGN_FLAG5 == 0)

            NEXT_COMMAND_REUSABLE
            PLAY_MESSAGE(PLAYER0,SPEECH,80)

            NEXT_COMMAND_REUSABLE
            ADD_TO_FLAG(PLAYER0, FLAG0, 1)

            NEXT_COMMAND_REUSABLE
            ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 44, 2, PLAYER_NEUTRAL)

            NEXT_COMMAND_REUSABLE
            QUICK_MESSAGE(33, "Chaos mode (NG+) is on...", SPELL_FLIGHT)

            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, CAMPAIGN_FLAG5, 1)
        ENDIF

        IF (PLAYER0, CAMPAIGN_FLAG5 == 1)

            NEXT_COMMAND_REUSABLE
            PLAY_MESSAGE(PLAYER0,SPEECH,80)

            NEXT_COMMAND_REUSABLE
            ADD_TO_FLAG(PLAYER0, FLAG0, 1)

            NEXT_COMMAND_REUSABLE
            ADD_OBJECT_TO_LEVEL(SPECBOX_CUSTOM, 44, 2, PLAYER_NEUTRAL)

            NEXT_COMMAND_REUSABLE
            QUICK_MESSAGE(35, "Chaos mode (NG+) is off...", SPELL_FLIGHT)

            NEXT_COMMAND_REUSABLE
            SET_FLAG(PLAYER0, CAMPAIGN_FLAG5, 0)
        ENDIF

    ENDIF

REM Box that lets you leave again

    REM "Leave Hub"
    SET_BOX_TOOLTIP_ID(3,951)

    IF(PLAYER0,BOX3_ACTIVATED > 0)
        WIN_GAME
    ENDIF

REM Note when finding the special box

    IF_ACTION_POINT(45, PLAYER0)

        REM "You found Chaos Mode (New Game+). Keep in mind, if this is your first playthrough, you should NOT turn this on until you finished the campaign once! It remixes stages and is designed for a second playthrough. You can use this special box to toggle Chaos Mode on and off whenever you want. However, to actually track your level progress, it is recommended to play the campaign without it first, and then play it from start to finish in a linear order. That way, you can track which levels you've beaten in NG+ in this hub level at the bottom."
        DISPLAY_OBJECTIVE(952, 44)

        CHANGE_SLAB_OWNER(78,39, PLAYER0, NONE)

        PLAY_MESSAGE(PLAYER0, SOUND, "116")
        CREATE_EFFECT_AT_POS(57, 235, 118)

    ENDIF

REM Ally the cosmetic creatures

    ALLY_PLAYERS(PLAYER_GOOD, PLAYER5, 3)
    COMPUTER_PLAYER(PLAYER_GOOD,ROAMING)
    COMPUTER_PLAYER(PLAYER5,ROAMING)
