Login

Subversion Repositories NedoOS

Rev

Rev 957 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#ifndef LEVEL1_C
#define LEVEL1_C
#include "gameloop.c"
#include "level_fragments.h"
#include "engine.c"
#include "resources.h"
#include "dialogs.c"
#include "gameloop.c"
#include "level2.c"
#include "interpreter.c"

//static void init_level(u8 image);
static void init_level(u8 pal, char *fn);
static void start_level(u8 pal, char *fn, u8 *name);

static void dialog_level1();

static void prepare_boss1()
{
    flush_sprites();
music_stop();
init_level(PAL256_BG2, "bg2-16.bmp");
    music_play(MUS_NWZ);
    dialog_level1();
    bullet_sprite = MARISA_BULLET;
    //init_level(IMG256_BG2);
unpack_pal256(PAL256_BG2, 0);
    scroll_pos = 192;
    push_npc(144, 20, 0, 0, MARISA, 255, 1500, 1);
}

static void l1f_dialog()
{
    init_dialog(); //TODO ╨┐╨╛╤З╨╡╨╝╤Г ╨│╨┤╨╡-╤В╨╛ ╨╖╨┤╨╡╤Б╤М ╨┐╤А╨╕╨╛╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В╤Б╤П ╨╝╤Г╨╖╤Л╨║╨░?
    swap_screen();
    put_dialog_string(MARISA_FACE, "Cool down, Reimu!", 0);
    put_dialog_string(REIMU_FACE, "???", 1);
    put_dialog_string(MARISA_FACE, "I've heard buzzing\nfairies near Shrine.", 0);
    put_dialog_string(REIMU_FACE, "Welll...\nThese insects will subside\nnow.", 1);
//swap_screen();
    wait_for_space();
    init_level2();
}

static void process_boss1()
{
    Npc *boss;
    i8 b;
    u8 c;
    if (scroll_pos < 2)
        scroll_speed = 0;

    boss = find_npc_by_type(BOSS_TYPE);
    if (boss == 0)
    {
        l1f_dialog();
        return;
    }

    switch (level_loop)
    {
    case 1:
        boss->sprite.dx = -1;
        break;
        just_star(2, boss->sprite.x + 16, boss->sprite.y + 16);
        just_star(6, boss->sprite.x + 16, boss->sprite.y + 16);
        just_star(11, boss->sprite.x + 16, boss->sprite.y + 16);
    case 13:
        boss->sprite.dx = 1;
        break;
        boss_shoot1(16, boss->sprite.x + 16, boss->sprite.y + 16);
        just_star(26, boss->sprite.x + 16, boss->sprite.y + 16);
        just_star(31, boss->sprite.x + 16, boss->sprite.y + 16);
        just_star(36, boss->sprite.x + 16, boss->sprite.y + 16);
        boss_shoot1(41, boss->sprite.x + 16, boss->sprite.y + 16);
    case 57:
        boss->sprite.dx = -1;
        break;
        boss_shoot1(58, boss->sprite.x + 16, boss->sprite.y + 16);
    case 90:
        boss->sprite.dx = 0;
        break;
        boss_shoot1(91, boss->sprite.x + 16, boss->sprite.y + 16);
    case 120:
        level_loop = 0;
        for (c = 0; c < 5; c++)
            push_bonus(BONUS_CARD, boss->sprite.x + 16, boss->sprite.y + 16, 3 - (c * 2), 2);
    default:
        break;
    }
}

static void dialog_level1()
{
    init_dialog();
    swap_screen();
    put_dialog_string(REIMU_FACE, "Have you seen my donation\nbox?", POSITION_LEFT);
    put_dialog_string(MARISA_FACE, "Where was no money?!\nWho will need it?", POSITION_RIGHT);
    put_dialog_string(REIMU_FACE, "I'll beat you for these\nwords!", POSITION_LEFT);
//swap_screen();
    wait_for_space();
}

const u8 level1_bytecode[] = {
    Nop(5),
    MakeEnemiesPair(FAIRY, 1, 10),
    Nop(5),
    MakeCaravan(16, FIARY2, 2, 10, BONUS_CARD),
    Nop(5),
    MakeLeftFlyers(160, GHOST, 10, BONUS_CARD),
    MakeRightFlyers(100, GHOST, 10, BONUS_CARD),
    Nop(20),
    MakeBoomFairy(32, 30, HEALTH_CARD),
    Nop(15),
    MakeBoomFairy(200, 30, HEALTH_CARD),
    Nop(20),
    MakeEnemyWave(FIARY3, 1, 15),
    MidBoss1(GHOST, 255),
    DoubleCaravan(FAIRY, 5, 25, BONUS_CARD),
    Nop(20),
    MakeBoomFairy(160, 30, HEALTH_CARD),
    MakeLeftFlyers(160, FAIRY, 10, 0),
    MakeRightFlyers(100, FIARY3, 10, 0),
    MakeLeftFlyers(32, FIARY2, 10, 0),
    JustStar(160, 120, 3),
    Nop(10),
    JustStar(32, 32, 1),
    JustStar(210, 132, 1),
    Nop(10),
    MakeShootingStar(160, 100, INJAN, 10, 20),
    Nop(15),
    MakeShootingStar(64, 64, INJAN, 10, 20),
    Nop(15),
    MakeShootingStar(256, 64, INJAN, 10, 20),
    Nop(20),
    PushNpc(160, -10, 0, 1, MARISA, 255, 1024, 0),
    Nop(10),
    End };

static void process_level1()
{
    if (executing) {
        vm_step();
    } else {
        prepare_boss1();
        process_level = process_boss1;
    }
}

#endif