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)
        DISPLAY_MESSAGE(909, WIZARD)
        DISPLAY_MESSAGE(910, WIZARD)
        DISPLAY_MESSAGE(911, WIZARD)
    ENDIF

    IF_ACTION_POINT(18, PLAYER0)
        DISPLAY_MESSAGE(912, 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)
            DISPLAY_MESSAGE(914, HORNY)
            DISPLAY_MESSAGE(915, HORNY)
            DISPLAY_MESSAGE(916, 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)
            DISPLAY_MESSAGE(917, HORNY)
            DISPLAY_MESSAGE(918, HORNY)
            DISPLAY_MESSAGE(919, HORNY)
        ENDIF

    ENDIF

    IF_ACTION_POINT(23, PLAYER0)
        DISPLAY_MESSAGE(920, DWARFA)
        DISPLAY_MESSAGE(921, DWARFA)
    ENDIF

    IF_ACTION_POINT(24, PLAYER0)
        DISPLAY_MESSAGE(922, FAIRY)
        DISPLAY_MESSAGE(923, FAIRY)
    ENDIF

    IF_ACTION_POINT(12, PLAYER0)
        DISPLAY_MESSAGE(924, DRAGON)  
        DISPLAY_MESSAGE(925, DRAGON)
        DISPLAY_MESSAGE(926, DRAGON)
    ENDIF

    IF_ACTION_POINT(25, PLAYER0)
        DISPLAY_MESSAGE(927, MONK)  
        DISPLAY_MESSAGE(928, MONK)
        DISPLAY_MESSAGE(929, MONK)
    ENDIF

    IF_ACTION_POINT(26, PLAYER0)
        DISPLAY_MESSAGE(930, SAMURAI)  
        DISPLAY_MESSAGE(931, SAMURAI)
        DISPLAY_MESSAGE(932, SAMURAI)
    ENDIF

    IF_ACTION_POINT(27, PLAYER0)
        DISPLAY_MESSAGE(933, SPIDER)
        DISPLAY_MESSAGE(934, SPIDER)
    ENDIF

    IF_ACTION_POINT(28, PLAYER0)
        DISPLAY_MESSAGE(935, TENTACLE)
        DISPLAY_MESSAGE(936, 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)
            DISPLAY_MESSAGE(937, 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)
            DISPLAY_MESSAGE(938, DARK_MISTRESS)
            DISPLAY_MESSAGE(939, 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)
        DISPLAY_MESSAGE(940, HORNY)
        REM Horny happy sound?
    ENDIF

REM Giant logic - different message depending on 

    IF (PLAYER0, CAMPAIGN_FLAG6 >= 7)
        IF_ACTION_POINT(29, PLAYER0)
            DISPLAY_MESSAGE(941, GIANT)
        ENDIF
    ENDIF

    IF (PLAYER0, CAMPAIGN_FLAG6 < 7)

        IF_ACTION_POINT(29, PLAYER0)
            DISPLAY_MESSAGE(942, GIANT)
            DISPLAY_MESSAGE(943, GIANT)
            DISPLAY_MESSAGE(944, 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)

        DISPLAY_MESSAGE(946, SPELL_FLIGHT)
        DISPLAY_MESSAGE(947, SPELL_FLIGHT)
        DISPLAY_MESSAGE(948, 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
            DISPLAY_MESSAGE(949, 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
            DISPLAY_MESSAGE(950, 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)
