Cube Land

namespace projectImages {
    export const Gate_H = img`
        . . f f f . . . . . . f f f . .
        . f f f f f f f f f f f f f f .
        f f f . . f f . . f f . . f f f
        f f . . . . f f f f . . . . f f
        f . . f f . . f f . . f f . . f
        f f f f f f . . . . f f f f f f
        f . f f . . f f f f . . f f . f
        f . . . . . . . . . . . . . . f
        f . . . . . . . . . . . . . . f
        f . f f . . f f f f . . f f . f
        f f f f f f . . . . f f f f f f
        f . . f f . . f f . . f f . . f
        f f . . . . f f f f . . . . f f
        f f f . . f f . . f f . . f f f
        . f f f f f f f f f f f f f f .
        . . f f f . . . . . . f f f . .
    `;
    export const House = img`
        0 0 0 0 0 f f f f f f f f f f f f f f f f f f 0 0 0 0 0 0 0 0 0
        0 0 0 0 f f 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 f f 0 0 0 0 0 0 0 0
        0 0 0 f f 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 f f 0 0 0 0 0 0 0
        0 0 f f 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 f f 0 0 0 0 0 0
        0 f f 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 f f 0 0 0 0 0
        f f 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 f f 0 0 0 0
        f 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 f 0 0 0 0
        f f e e e e e e e e e e e e e e e e e e e e e e e e f f 0 0 0 0
        0 f e e f f f f e e e f f f f f f e e e f f f f e e f 0 0 0 0 0
        0 f e e f 1 1 f e e e f 2 2 2 2 f e e e f 1 1 f e e f 0 0 0 0 0
        0 f e e f 1 1 f e e e f 2 2 2 2 f e e e f 1 1 f e e f 0 0 0 0 0
        0 f e e f 1 1 f e e e f 2 2 2 2 f e e e f 1 1 f e e f 0 0 0 0 0
        0 f e e f f f f e e e f 2 2 2 7 f e e e f f f f e e f 0 0 0 0 0
        0 f e e e e e e e e e f 2 2 2 2 f e e e e e e e e e f 0 0 0 0 0
        0 f e e e e e e e e e f 2 2 2 2 f e e e e e e e e e f 0 0 0 0 0
        0 f f f f f f f f f f f f f f f f f f f f f f f f f f 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    `;
    export const Boss_2 = img`
        . . . . . . . . . . . . . . . .
        . . . . . f f f f f f . . . . .
        . . . f f f 2 2 2 2 f f f . . .
        . . f f 2 2 2 2 2 2 2 2 f f . .
        . . f 2 2 2 1 1 1 1 2 2 2 f . .
        . . f 2 2 2 1 1 f f 2 2 2 f . .
        . . f 2 2 2 1 f f f 2 2 2 f . .
        . . f 2 2 2 1 1 1 1 2 2 2 f . .
        . . f 2 2 2 2 2 2 2 2 2 2 f . .
        . f f f 2 2 2 2 2 2 2 2 f f f .
        . f 7 7 7 7 7 7 7 7 7 7 7 7 f .
        . f 7 7 7 7 7 7 7 7 7 7 7 7 f .
        . f f f f 7 7 7 7 7 7 f f f f .
        . . . f 2 2 2 2 2 2 2 2 f . . .
        . . . f f 2 2 2 2 2 2 f f . . .
        . . . . f f 2 2 2 2 f f . . . .
    `;
    export const Boss_Final = img`
        f 5 f . . . . . . . . . . f 5 f
        5 5 f f . . . . . . . . f f 5 5
        f f 5 5 f . . f f . . f 5 5 f f
        . f 5 5 f f f 5 5 f f f 5 5 f .
        . . f f 5 5 f 5 5 f 5 5 f f . .
        . . f 5 5 5 5 5 5 5 5 5 5 f . .
        . . f 5 5 f f 5 5 f f 5 5 f . .
        . . f 5 5 f f 5 5 f f 5 5 f . .
        . . f 5 5 1 1 5 5 1 1 5 5 f . .
        . . f 5 5 5 5 5 5 5 5 5 5 f . .
        . . f f f f 5 5 5 5 f f f f . .
        . . . . . f f f f f f . . . . .
        . . . f f f f f f f f f f . . .
        . . . f f f f . . f f f f . . .
        . . . f f f . . . . f f f . . .
        . . . f f . . . . . . f f . . .
    `;
    export const Boy = img`
        . . . f f f f f f f f f f . . .
        . . . f c c c c c c c c f . . .
        . . . f c f f c c f f c f . . .
        . . . f c 1 f c c f 1 c f . . .
        . . . f c c c c c c c c f . . .
        . . . f c c c c c c c c f . . .
        . . . f f c c c c c c f f . . .
        . f f f f f c c c c f f f f f .
        f 6 6 6 6 6 6 6 6 6 6 6 6 6 6 f
        f 6 6 6 6 6 6 6 6 6 6 6 6 6 6 f
        f f 6 6 6 6 6 6 6 6 6 6 6 6 f f
        . f f f f 6 6 6 6 6 6 f f f f .
        . . . . f 6 6 6 6 6 6 f . . . .
        . . . . f 6 6 6 6 6 6 f . . . .
        . . . . f f 6 6 6 6 f f . . . .
        . . . . . f f f f f f . . . . .
    `
    export const Chest_1 = img`
        f f f f f f f f f f f f f f f f
        f e e e e e e e e e e e e e e f
        f e e c e e e c e e e c e e e f
        f e e c e e e c e e e c e e e f
        f e e c e f f f f f f e c e e f
        f e e c f 5 5 5 5 5 5 f c e e f
        f f f f f 5 5 5 5 5 5 f f f f f
        f e e e f 5 f f f f 5 f c e e f
        f e e e f 5 5 f f 5 5 f e e e f
        f e c e e f 5 5 5 5 f e e e e f
        f e c c e e f 5 5 f e e e c e f
        f e e c c e e f f c e e e c e f
        f e e e c e e e c e e e e c e f
        f e e e e e e e c e e e e c e f
        f e e e e e e e c e e e c e e f
        f f f f f f f f f f f f f f f f
    `;
    export const Chest = img`
        f f f f f f f f f f f f f f f f
        f e e e e e e e e e e e e e e f
        f e e e e e e e e e e e e e e f
        f e e e e e e e e e e e e e e f
        f e e e e f f f f f f e e e e f
        f e e e f 7 7 7 7 7 7 f e e e f
        f f f f f 7 7 7 7 7 7 f f f f f
        f e e e f 7 f f f f 7 f e e e f
        f e e e f 7 7 f f 7 7 f e e e f
        f e e e e f 7 7 7 7 f e e e e f
        f e e e e e f 7 7 f e e e e e f
        f e e e e e e f f e e e e e e f
        f e e e e e e e e e e e e e e f
        f e e e e e e e e e e e e e e f
        f e e e e e e e e e e e e e e f
        f f f f f f f f f f f f f f f f
    `;
    export const Flag = img`
        0 0 0 f f f f 0 0 0 0 0 0 0 0 0
        0 0 0 f 7 7 f f f 0 0 0 0 0 0 0
        0 0 0 f 7 7 7 7 f f f f 0 0 0 0
        0 0 0 f 7 7 7 7 7 7 7 f f f 0 0
        0 0 0 f 7 7 7 7 7 7 7 7 7 f f 0
        0 0 0 f 7 7 7 7 7 7 7 7 7 7 f 0
        0 0 0 f 7 7 7 7 7 7 2 2 f f f 0
        0 0 0 f 7 7 7 7 2 2 f f 0 0 0 0
        0 0 0 f 7 7 2 f f f f 0 0 0 0 0
        0 0 0 f 7 7 f f 0 0 0 0 0 0 0 0
        0 0 0 f 7 7 f 0 0 0 0 0 0 0 0 0
        0 0 0 f 7 7 f 0 0 0 0 0 0 0 0 0
        f f f f 7 7 f f f f f f f f 0 0
        f 7 7 7 7 7 7 7 7 7 7 7 2 f 0 0
        f 7 7 7 7 7 7 7 7 7 7 2 2 f 0 0
        f f f f f f f f f f f f f f 0 0
    `;
    export const Flower = img`
        . . . . f f f 5 5 f f f . . . .
        . . . . f 5 3 3 3 5 5 f f . . .
        f f f f f 5 3 7 7 3 3 5 f . . .
        5 5 5 f f f 5 3 3 7 3 5 f . . .
        5 3 3 5 f f f 5 3 5 f f f f f f
        5 3 7 5 f f 5 3 5 3 f f f 5 5 f
        f 5 5 4 f f 4 5 4 f f 5 3 3 7 f
        f f 4 4 4 f 4 4 f f 5 3 5 3 3 5
        . f f f 4 4 f 4 4 f 4 5 3 5 3 f
        . . f f 4 4 f 4 4 f 4 4 f 5 5 f
        . . . f f 4 4 4 f 4 4 f f f f f
        . . . . f f 4 4 f 4 f f . . . .
        . . . . . f 4 f 4 4 f . . . . .
        . . . . . f 4 4 4 f f . . . . .
        . . . . . f f 4 f f . . . . . .
        . . . . . . f f f . . . . . . .
    `;
    export const Gate = img`
        0 0 f f f f f f f f f f f f 0 0
        0 f f f 0 f 0 0 0 0 f 0 f f f 0
        f f f 0 0 f f 0 0 f f 0 0 f f f
        f f 0 0 f f f 0 0 f f f 0 0 f f
        f f 0 0 f f 0 0 0 0 f f 0 0 f f
        0 f f 0 0 f 0 0 0 0 f 0 0 f f 0
        0 f f f 0 0 f 0 0 f 0 0 f f f 0
        0 f 0 f f 0 f 0 0 f 0 f f 0 f 0
        0 f 0 f f 0 f 0 0 f 0 f f 0 f 0
        0 f f f 0 0 f 0 0 f 0 0 f f f 0
        0 f f 0 0 f 0 0 0 0 f 0 0 f f 0
        f f 0 0 f f 0 0 0 0 f f 0 0 f f
        f f 0 0 f f f 0 0 f f f 0 0 f f
        f f f 0 0 f f 0 0 f f 0 0 f f f
        0 f f f 0 f 0 0 0 0 f 0 f f f 0
        0 0 f f f f f f f f f f f f 0 0
    `
    export const Girl = img`
        0 0 0 f f f f f f f f f f 0 0 0
        0 0 0 f c c c c c c c c f 0 0 0
        0 0 0 f c f f c c f f c f 0 0 0
        0 0 0 f c 1 f c c f 1 c f 0 0 0
        0 0 0 f c c c c c c c c f 0 0 0
        0 0 0 f c c c c c c c c f 0 0 0
        0 0 0 f f c c c c c c f f 0 0 0
        0 f f f f f c c c c f f f f f 0
        f 3 3 3 3 3 3 3 3 3 3 3 3 3 3 f
        f 3 3 3 3 3 3 3 3 3 3 3 3 3 3 f
        f f 3 3 3 3 3 3 3 3 3 3 3 3 f f
        0 f f f f 3 3 3 3 3 3 f f f f 0
        0 0 0 0 f 3 3 3 3 3 3 f 0 0 0 0
        0 0 0 0 f 3 3 3 3 3 3 f 0 0 0 0
        0 0 0 0 f f 3 3 3 3 f f 0 0 0 0
        0 0 0 0 0 f f f f f f 0 0 0 0 0
    `;
    export const Grass = img`
        0 0 0 0 0 f f f f f 0 0 0 0 0 0
        0 0 0 0 0 f f 6 6 f 0 0 0 0 0 0
        0 0 0 0 0 f 6 6 d f 0 0 0 0 0 0
        0 0 0 0 f f 6 d f f 0 0 0 0 0 0
        0 0 0 0 f 6 6 d f 0 0 f f f f 0
        f f f f f 6 6 f f 0 f f 6 6 f 0
        f 6 6 6 f 6 f f f f f 6 6 d f 0
        f f f 6 6 6 f f f 6 6 6 f f f 0
        0 0 f 6 6 6 f f 6 6 6 f f 0 0 0
        0 0 f f d 6 6 f 6 6 f f 0 0 0 0
        0 0 0 f f d 6 f 6 f f 0 0 0 0 0
        0 0 0 0 f f 6 6 6 f 0 0 0 0 0 0
        0 0 0 0 0 f 6 f f f 0 0 0 0 0 0
        0 0 0 0 0 f 6 f 0 0 0 0 0 0 0 0
        0 0 0 0 0 f f f 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    `;
    export const Stone_1 = img`
        0 0 0 f f f f f f f f f f 0 0 0
        0 0 f f b b b b b b b b f f 0 0
        0 f f b b f b b b b f b b f f 0
        f f b b b f f b b b f b b b f f
        f b b b b f b b b b b f f b b f
        f b b f f f b b f b b b f f b f
        f b b b b b b b b f b b b f b f
        f b f b b b b b b f b b b f b f
        f f f b b f b b b f f b b b b f
        f b b b b f b b b b b b b b b f
        f b b f f f f f b b b f b b b f
        f b b b b b b f b b b b f b b f
        f f b b b b b b b f f f b b f f
        0 f f b f f b b b f b b b f f 0
        0 0 f f b f f b b b b b f f 0 0
        0 0 0 f f f f f f f f f f 0 0 0
    `;
    export const Stone = img`
        0 0 f f f f f f f f f f f f 0 0
        0 f f d d 8 d d d 8 d d d f f 0
        f f d d d d f d d d f 8 d d f f
        f d d 8 d 8 d d d d 8 d f d d f
        f d 8 f 8 d f 8 d d 8 d 8 d d f
        f d d d 8 d d d d d d d d f d f
        f d 8 d f d d d d d d d d d d f
        f d d d 8 d d 8 d d 8 f d 8 d f
        f d 8 d d d d f f d f 8 d 8 d f
        f d d f d d d d d d d 8 d d d f
        f d d d 8 d d 8 d d d d f d d f
        f d 8 d d d d d d 8 d d f 8 d f
        f d d 8 d d f d f d 8 d d d d f
        f f d d f d 8 d 8 f d d d d f f
        0 f f d d d d d d d d d d f f 0
        0 0 f f f f f f f f f f f f 0 0
    `;
    export const Boss_1 = img`
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 f f f f 0 0 0 0 0 0
        0 0 0 0 f f b b b b f f 0 0 0 0
        0 0 0 f b b b b b b b b f 0 0 0
        0 0 f b f f f b b f f f b f 0 0
        0 0 f b 1 f f b b f f 1 b f 0 0
        0 0 f b b b b b b b b b b f 0 0
        0 0 f b b b b b b b b b b f 0 0
        0 0 f b b b b b b b b b b f 0 0
        0 0 0 f b f 1 1 1 1 f b f 0 0 0
        0 0 0 0 f b f 1 1 f b f 0 0 0 0
        0 0 0 0 f b f f f f b f 0 0 0 0
        0 0 0 0 f b f 0 0 f b f 0 0 0 0
        0 0 0 0 f f f 0 0 f f f 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    `;
    export const Flower_2 = img`
        0 0 0 0 0 0 f 7 f f f 0 0 0 0 0
        0 0 0 0 0 f f 7 7 7 f 0 0 0 0 0
        0 0 0 0 0 f 7 6 6 7 f f 0 0 0 0
        0 f f f 0 f 7 7 6 7 7 f f f f 0
        f f 7 f f f f 7 7 7 f f f 7 f f
        f 7 7 7 f f 4 4 4 f f f 7 6 7 f
        7 7 6 6 f f 4 4 f f 0 f 7 6 6 f
        f 7 6 7 4 f 4 f f f f f 4 7 7 f
        f f 7 f 4 4 4 f f f 4 4 4 f f f
        0 f f f 4 4 4 f f 4 4 4 f f 0 0
        0 0 0 f f 4 4 4 f 4 4 f f 0 0 0
        0 0 0 0 f f 4 4 f 4 f f 0 0 0 0
        0 0 0 0 0 f f 4 4 4 f 0 0 0 0 0
        0 0 0 0 0 0 f 4 f f f 0 0 0 0 0
        0 0 0 0 0 0 f 4 f 0 0 0 0 0 0
        0 0 0 0 0 0 f f f 0 0 0 0 0 0 0
    `;
}
namespace palettes {
    export const palettehex = hex`
        000000
        ffffff
        d67a23
        d278bc
        33a554
        b84949
        648dc5
        f7be12
        7b7676
        aed68d
        000000
        b695c9
        eacdb7
        d8d4d4
        917155
        000000`;
}

namespace SpriteKind {
    export const Girl = SpriteKind.create();
    export const Boss = SpriteKind.create();
    export const Chest = SpriteKind.create();
    export const Boy = SpriteKind.create();
}

function introSequence() {
    game.showLongText("In a cube land far far away...", DialogLayout.Center);
    game.showLongText("There was a cubed lad and a cubed lady,    living         happily        ever           after.", DialogLayout.Center);
    let girl = sprites.create(projectImages.Girl.doubled());
    let boy = sprites.create(projectImages.Boy.doubled());
    let house = sprites.create(projectImages.House.doubled());
    scene.setBackgroundColor(9);
    music.baDing.play();
    girl.setPosition(50, 80);
    boy.setPosition(110, 80);
    house.setPosition(45, 40);
    game.waitAnyButton();
    game.showLongText("But            everything changed  when the cube lord attacked.", DialogLayout.Center);
    let boss = sprites.create(projectImages.Boss_Final.doubled());
    boss.setPosition(120, 47);
    let melody = new music.Melody("F#4:1 D#4:1 D#4:1 F#4:1 D4:1 D4:1");
    melody.loop();
    game.waitAnyButton();
    boss.vx = 25;
    boy.vx = 25;
    boss.vy = -25;
    boy.vy = -25;
    girl.say("No! Leave him alone!");
    game.waitAnyButton();
    melody.stop();
    music.baDing.play();
    game.splash("I have to find him!");
    girl.destroy();
    house.destroy();
    boy.destroy();
    boss.destroy();
}

function level1Setup() {
    scene.setBackgroundColor(9);
    scene.setTileMap(img`
        . . . . . . . . . . . . . . . . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
        . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 . . . . . . 9
        . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . 2 . . . . . . . . . . . 1 . . . . . 9 . . . . . . 9
        . . . . . . . . . . . . . . . . 9 . . 9 9 9 9 9 9 9 9 9 . . . . . 9 9 9 9 9 9 9 . . . . . 2 . . 9 . . . 2 . . 9
        . 2 . . . . . 1 . . . . . . . . 9 . 2 . . . . . . . . 9 . . . . . 9 . . . . . . . . . . . . . . . . . . . . . 9
        . . . . . . . . . . . . . . . . 9 . . . . . . . . . . 9 . 1 . . . 9 . . . . . . . . . . . . . . . . . 9 9 9 9 9
        9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . 9 . . . . . 9 . . . 9 9 9 9 9 9 9 9 . . . . . . 9 . . . 9
        9 . . . 9 . . . . . . . 9 . . . . . . . . . . 9 . . . . . . . . . 9 . . . 9 . . . . . . . . . . . . . 9 . . . 9
        9 . . . 9 . . . 2 . . . 9 . . 2 . . . . . . . 9 . . . . . . . 2 . 9 . . . 9 . . . 1 . . . . . . . . . 9 . . . 9
        9 . . . 9 . . . . . . . 9 . . . 9 9 9 9 . . 9 9 . . . 9 . . . . . 9 . . . 9 . . . . . . . . . . . . . 9 . . . 9
        9 . 2 . 9 9 9 9 9 9 . . . . . . . . . . . . . 6 . 1 . 9 . . . . . 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . 2 . 9 . . . 9
        9 . . . . . . . . . . . . . . . . . . . . . . 6 . . . 9 . . . . . 9 . . . . . . . . . . . 9 9 . . . . 9 . . . 9
        9 . . . . . 2 . . . . 1 . . 9 . . 9 . . . . 9 9 . . . 9 . . 1 . . 9 . 1 . . . . . . . . . 6 . . . . . . . . . 9
        9 . 1 . . . . . . . . . . . 9 . . 9 . . . . . 9 . . . 9 . . . . . 9 . . 9 9 9 9 9 9 9 . . 6 . . . . . . . . . 9
        9 . . . 9 . . 9 . . . . . . 9 . . 9 . . . 2 . 9 9 9 9 9 9 9 9 9 9 9 . . . . . . . . . . . 9 9 9 9 9 9 9 9 9 9 9
        9 . . . 9 . . 9 9 9 9 9 . . 9 . . 9 9 9 . . . 9 . . 9 4 . . . . . 9 . . . . 2 . . . . . . . . . . . . . . . . 9
        9 . 2 . 9 . . . . . . . . . 9 . . . . . . . . 9 . . 6 . . . . . . 9 . . . . . . . . . . . . . . 1 . . . . . . 9
        9 . . . 9 . . . . . 2 . . . 9 . . 1 . . . . . 9 . . 6 . . . . . . 9 . . . . 9 9 9 9 9 9 9 9 9 . . . . 9 . . . 9
        9 . . . 9 . . . . . . . . . 9 . . . . . . . . 9 9 9 9 4 . . . . . 9 . 1 . . . . . . . . . . 9 . . . . 9 . . . 9
        9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . . . . 2 . . 9 . . . . . . . . . . . . 9 . . 2 . 9 . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . 1 . . . . . . . 9 . . 9 9 9 9 9 9 9 9 9 9 9 . . . . 9 . . . 9
        . . 1 . . . . . . 1 . . . . . . 2 . . . . . . 9 . . . . . . . . . 9 . . . . . . . . . . . . . . . . . 9 . . 2 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . 9 . . . 9
        . . . . . . . . . . . . . . . . . . . . 1 . . 9 . . . 9 . . . . . . . . 2 . . . 9 9 9 9 9 9 9 9 . . . 9 . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . . . . . . . . . 9 . . . . . . . . 1 . 9 . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . 2 . 9 . . 1 . . . 9 9 9 9 9 9 9 . . . . . . . . . . 9 . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . . . . . . . . . 9 . . . 9 9 9 9 9 9 9 9 . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . . . . 2 . . . . 9 . . . . . . . . . . . . . . 9
        . . . . . . . . . . . . . . . . . . . . 1 . . 9 . . . 9 9 9 9 9 9 . . . . . . . 9 . . . . . . . . . . . . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . 9 . . . . . . . 9 . . . 9 9 9 9 9 9 9 . . 2 . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . 9 . . . . . . . 9 . . . . . . . . . 9 . . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . 1 . . 9 . . . . . . . 9 . . . . . . . . . 9 . . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . 9 . . . . . 2 . 9 . . . . . 9 . . . 9 . . . . 9
        . . . . . . . . . . . . . . . . . . . . 2 . . 9 . . . 9 . . . . 9 . . . . . . . 9 . . . . . 9 . . . 9 . . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . 9 . . . . 9 . . . . . . . 9 . . . . . 9 9 9 9 9 . . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . 1 . . . . 2 . . . 1 . . . . . 9 . . 1 . . . . . . . . . 2 . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . 9
        . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
    `);
    scene.setTile(9, projectImages.Stone, true);
    scene.setTile(6, projectImages.Gate, false);
    scene.setTile(3, projectImages.Boy, false);
    scene.setTile(2, projectImages.Flower, false);
    scene.setTile(1, projectImages.Flower_2, false);
    scene.setTile(4, projectImages.Flag, false);
    boySprite.setPosition(398, 268);
    girlSprite.setPosition(30, 200);
    boss1Sprite.setPosition(360, 178);
    bossFinalSprite.setPosition(445, 272);
    boss2Sprite.setPosition(748, 206);
    chest1Sprite.setPosition(30, 130);
    chest2Sprite.setPosition(355, 126);
    chest3Sprite.setPosition(355, 284);
    chest4Sprite.setPosition(870, 30);
    chest5Sprite.setPosition(870, 110);
    chest6Sprite.setPosition(300, 30);
    chest7Sprite.setPosition(624, 150);
    chest8Sprite.setPosition(778, 520);
    chest9Sprite.setPosition(720, 308);
    chest10Sprite.setPosition(460, 482);
    chest11Sprite.setPosition(864, 264);
    chest12Sprite.setPosition(512, 256);
}

function level2Setup() {
    scene.setBackgroundColor(9);
    scene.setTileMap(img`
        9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . . . 9 . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . . . 9 . . . . . . . 1 . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . 2 . . . 9 9 9 9 9 9 . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . . . . . 9 . . . . 2 . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . . . 1 . 9 . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 9 9 9 9 . . . 9 . . . 9 9 9 9 9 9 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . 9 . . . . . . . 9 . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . 9 . . . 2 . . . 9 . . 2 . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . 9 . . . . . . . 9 . . . 9 9 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . 2 . 9 9 9 9 9 . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . . . . . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . . . . 2 . . . . 1 . . 9 . . 9 . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . 1 . . . . . . . . . . . 9 . . 9 . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        9 . . 9 . . . 9 . . . . . . 9 . . 9 . . . 2 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
        9 . . 9 . . . 9 9 9 9 9 . . 9 . . 9 9 9 . . . 9 . . 9 4 . . . . . 9 . . . . 2 . . . . . . . . . . . . . . . . 9
        9 . . 9 . . . . . . . . . . 9 . . . . . . . . 9 . . 6 . . . . . . 9 . . . . . . . . . . . . . . 1 . . . . . . 9
        9 . . 9 . . . . . . 2 . . . 9 . . 1 . . . . . 9 . . 6 . . . . . . 9 . . . . 9 9 9 9 9 9 9 9 9 . . . . 9 . . . 9
        9 . . 9 . . 9 . . 9 . . . . 9 . . . . . . . . 9 9 9 9 4 . . . . . 9 . 1 . . . . . . . . . . 9 . . . . 9 . . . 9
        9 9 9 9 9 9 9 7 7 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . . . . 2 . . 9 . . . . . . . . . . . . 9 . . 2 . 9 . . . 9
        9 . . . 9 . . . . . . . . . . . . . . . . . . 9 . 1 . . . . . . . 9 . . 9 9 9 9 9 9 9 9 9 9 9 . . . . 9 . . . 9
        9 . . . 9 . . . . . . . . . . . . . . . . . . 9 . . . . . . . . . 9 . . . . . . . . . . . . . . . . . 9 . . 2 9
        9 . . . 9 . 1 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . 9 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . 9 . . . 9
        9 . 2 . 9 . . . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . 2 . . . 9 9 9 9 9 9 9 9 . . . 9 . . . 9
        9 . . . 9 . . . . . . . . . . . . . . . . 2 . 9 . . . . . . . . . . . . . . . . 9 . . . . . . . . 1 . 9 . . . 9
        9 . . . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . 9 . 2 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . . . . . . . . . . 9 . . . 9
        9 . . . 9 . . 9 . . . . . . . . . . . . . . . 9 . . . 9 . . . . . . . . . . . . 9 . . . 9 9 9 9 9 9 9 9 . . . 9
        9 . . . 9 . . 9 . 1 . . . . . . . . . . 1 . . 9 9 9 9 9 . . . . . . . 2 . . . . . . . . . . . . . . . . . . . 9
        9 . . . 9 . . 9 . . . . 9 . . . 9 . . . . . . . . . . 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . . . . . . 9
        9 . . . . . . 9 . . . . 9 . . . 9 9 9 9 9 . . . . . . 9 . . . . 9 . . . . . . . 9 . . . 9 9 9 9 9 9 9 . . 2 . 9
        9 . . 1 . . . 9 . . . . 9 . . . . . . . . . 2 . . . 9 9 . . . . 9 9 9 9 9 9 9 9 9 . . . . . . . . . 9 . . . . 9
        9 . . . . . . 9 . . . . 9 . . . 2 . . . . . . . . . . 6 . 1 . . 9 . . . . . . . 9 . . . . . . . . . 9 . . . . 9
        9 . . . . . . . . 2 . . 9 . . . . . . . . . . . . . . 6 . . . . 9 . . . . . 2 . 9 . . . . . 9 . . . 9 . . . . 9
        9 . . . . . . . . . . . 9 9 9 9 9 9 9 9 9 9 9 . . . 9 9 . . . . 9 . . . 9 9 9 9 9 9 9 9 9 9 9 . . . 9 . . . . 9
        9 9 9 9 9 9 9 9 . . . . . . . . . . . . . . . . . . . 9 . . . . 9 . . . . . . . . . . . . . 9 9 9 9 9 . . . . 9
        9 . . . . . . . . . . . . . 2 . . . . . . . . . . 1 . 9 . . 2 . . . 1 . . . . . . . . 1 . . . . . . . . . 2 . 9
        9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
        9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
    `);
    scene.setTile(9, projectImages.Stone, true);
    scene.setTile(6, projectImages.Gate, false);
    scene.setTile(7, projectImages.Gate_H, false)
    scene.setTile(3, projectImages.Boy, false);
    scene.setTile(2, projectImages.Flower, false);
    scene.setTile(1, projectImages.Flower_2, false);
    scene.setTile(4, projectImages.Flag, false);
    boySprite.setPosition(398, 268);
    girlSprite.setPosition(30, 200);
    boss1Sprite.setPosition(130, 292);
    bossFinalSprite.setPosition(445, 272);
    boss2Sprite.setPosition(420, 510);
    chest1Sprite.setPosition(30, 30);
    chest2Sprite.setPosition(355, 126);
    chest3Sprite.setPosition(355, 284);
    chest4Sprite.setPosition(30, 570);
    chest5Sprite.setPosition(30, 340);
    chest6Sprite.setPosition(350, 340);
    chest7Sprite.setPosition(100, 440);
    chest8Sprite.setPosition(778, 520);
    chest9Sprite.setPosition(720, 308);
    chest10Sprite.setPosition(460, 482);
    chest11Sprite.setPosition(864, 264);
    chest12Sprite.setPosition(512, 256);
}

sprites.onOverlap(SpriteKind.Girl, SpriteKind.Boss, function (mainSprite, hitSprite) {
    if (hitSprite == boss1Sprite) {
        if (chestsCollected == 3) {
            music.baDing.play();
            boss1Sprite.destroy();
            game.splash("You may pass!");
        }
        else {
            game.showLongText("Collect all the chests to pay the toll.", DialogLayout.Center);
            boss1Sprite.say("You have collected " + chestsCollected.toString() + " out of 3.", 5000);
            switch (level) {
                case 1:
                    girlSprite.setPosition(girlSprite.x - 10, girlSprite.y);
                    break;
                default:
                    girlSprite.setPosition(girlSprite.x, girlSprite.y - 10);
                    break;
            }
        }
    }
    else if (hitSprite == boss2Sprite) {
        if (chestsCollected == 7) {
            music.baDing.play();
            boss2Sprite.destroy();
            game.splash("You may pass!");
        }
        else {
            game.showLongText("Collect all the chests to pay the toll.", DialogLayout.Center);
            boss2Sprite.say("You have collected " + (chestsCollected - 3).toString() + " out of 4.", 5000);
            switch (level) {
                case 1:
                    girlSprite.setPosition(girlSprite.x + 10, girlSprite.y);
                    break;
                default:
                    girlSprite.setPosition(girlSprite.x - 10, girlSprite.y);
                    break;
            }
        }
    }
    else {
        if (chestsCollected == 12) {
            music.baDing.play();
            bossFinalSprite.destroy();
            game.splash("You may pass!");
        }
        else {
            game.showLongText("Collect all the chests to pay the toll.", DialogLayout.Center);
            bossFinalSprite.say("You have collected " + (chestsCollected - 7).toString() + " out of 5.", 5000);
            switch (level) {
                case 1:
                    girlSprite.setPosition(girlSprite.x + 10, girlSprite.y);
                    break;
                default:
                    girlSprite.setPosition(girlSprite.x + 10, girlSprite.y);
                    break;
            }
        }
    }
})

sprites.onOverlap(SpriteKind.Girl, SpriteKind.Chest, function (mainSprite, hitSprite) {
    chestsCollected++;
    music.baDing.play();
    hitSprite.destroy();
})

sprites.onOverlap(SpriteKind.Girl, SpriteKind.Boy, function (mainSprite, hitSprite) {
    music.baDing.play();
    game.splash("You are reunited!");
    music.stopAllSounds();
    game.showLongText("Your time to complete was: " + game.runtime() + "ms. Thanks for playing!", DialogLayout.Center);
    info.changeScoreBy(1800000 /* 30 minutes */ - game.runtime());
    game.over(true);
})

image.setPalette(palettes.palettehex);
introSequence();

let boySprite = sprites.create(projectImages.Boy, SpriteKind.Boy);
let girlSprite = sprites.create(projectImages.Girl, SpriteKind.Girl);
let boss1Sprite = sprites.create(projectImages.Boss_1, SpriteKind.Boss);
let boss2Sprite = sprites.create(projectImages.Boss_2, SpriteKind.Boss);
let bossFinalSprite = sprites.create(projectImages.Boss_Final, SpriteKind.Boss);
let chest1Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest2Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest3Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest4Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest5Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest6Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest7Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest8Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest9Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest10Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest11Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);
let chest12Sprite = sprites.create(projectImages.Chest, SpriteKind.Chest);

let level = randint(1, 2);
switch (level) {
    case 1:
        level1Setup();
        break;
    default:
        level2Setup();
        break;
}

let chestsCollected = 0;
let backgroundMusic = new music.Melody("F5:2 A5:4 F5:2 C5:2 B4:1 C5:1 D5:2 C5:2 F5:2 A5:4 F5:2 C5:2 B4:1 C5:1 D5:2 C5:2 A4:2 F5:4 A4:2 A4:2 G#4:1 A4:1 B4:2 A4:2 A4:2 F5:4 A4:2 A4:2 G#4:1 A4:1 B4:2 A4:2 A4:2 F4:2 A4:2 C5:2 A#4:8 C5:2 A#4:2 C5:2 E5:2 F5:8 C6:2 D6:2 C6:2 A#5:2 A5:2 A#5:2 A5:2 G5:2 F5:8 C5:2 E5:2 F5:2 C5:2 F5:2 A5:4 F5:2 C5:2 B4:1 C5:1 D5:2 C5:2 F5:2 A5:4 F5:2 C5:2 B4:1 C5:1 D5:2 C5:2 C5:2 E5:4 C5:2 G4:2 F4:1 G4:1 C5:2 G4:2 C5:2 E5:4 C5:2 D4:2 E4:1 F4:1 C5:2 E5:2 F5:4 :4 E5:2 A5:4 F5:2 E5:4 A4:4 B4:2 A4:4 B4:2 C5:4 E5:4 D5:2 F5:4 E5:2 C5:4 F4:4 G4:2 F4:4 G4:2 A4:4 C5:4 G4:4 :2 G4:4 B4:2 A4:4 D5:2 F5:4 E5:2 C5:4 G4:4 G4:4 :2 G4:4 B4:2 A4:4 A4:8 :2 A4:2 B4:2 A4:2 E5:2 A5:4 F5:2 E5:4 A4:4 B4:2 A4:4 B4:2 C5:4 E5:4 D5:2 F5:4 E5:2 C5:4 F4:4 G4:2 F4:4 G4:2 A4:4 C5:4 G4:4 :2 G4:4 B4:2 A4:4 D5:2 F5:4 E5:2 C5:4 G4:4 G4:4 :2 G4:4 B4:2 A4:4 A4:8 :2 A4:2 B4:2 A4:2");
backgroundMusic.loop(8);

girlSprite.setStayInScreen(true);
controller.moveSprite(girlSprite);
scene.cameraFollowSprite(girlSprite);
color-coded-tilemap