
#include <sys/bios.h>
#include <sys/key.h>

#define SPR_SIZE (8*8)

#define MY_SPR_SIZE (SPR_SIZE*4)
#define MY_SPR_ANM  2

char my_char[MY_SPR_ANM][MY_SPR_SIZE] = {
    {
        0x00,0x0F,0x0F,0x10,0x0F,0x10,0x0F,0x10,0x1B,0x3F,0x1B,0x3F,0x0D,0x1F,0x0F,0x1F
        ,0x00,0xE0,0xC0,0x20,0xC0,0x30,0xF0,0x08,0x40,0xF8,0xF8,0xFC,0xF8,0xFC,0x00,0xF8
        ,0x07,0x0F,0x07,0x19,0x1F,0x38,0x37,0x78,0x37,0x78,0x04,0x3F,0x0F,0x1F,0x00,0x1F
        ,0xC0,0xE0,0xC0,0x30,0xF0,0x38,0xD8,0x3C,0xD8,0x3C,0x40,0xF8,0x70,0xF8,0x00,0xF8
    }, {
        0x00,0x0F,0x0F,0x10,0x0F,0x10,0x0F,0x10,0x1B,0x3F,0x1B,0x3F,0x0D,0x1F,0x0F,0x1F
        ,0x00,0xE0,0xC0,0x20,0xC0,0x30,0xF0,0x08,0x40,0xF8,0xF8,0xFC,0xF8,0xFC,0x00,0xF8
        ,0x07,0x0F,0x07,0x79,0x7F,0xF8,0x67,0xF8,0x07,0xF8,0x18,0x3F,0x10,0x38,0x00,0x38
        ,0xC0,0xE0,0xC0,0x3C,0xFC,0x3E,0xCC,0x3E,0xC0,0x2E,0x2C,0xFE,0x18,0x3C,0x00,0x18
    }
};

char block_char[] = {
    0x00,0xFF,0x7E,0x83,0x7F,0x81,0x7F,0x81,0x00,0xFF,0x7B,0x8C,0x7D,0x86,0x7D,0x86
    ,0x00,0xFF,0xFC,0x07,0x7E,0x83,0x7E,0x83,0x00,0xFF,0xEC,0x37,0xF6,0x1B,0xF6,0x1B
    ,0x00,0xFF,0x7F,0x81,0x7F,0x80,0x7F,0x80,0x00,0xFF,0x77,0x98,0x7B,0x8C,0x7B,0x8C
    ,0x00,0xFF,0x7C,0x87,0xBE,0xC3,0xBE,0xC3,0x00,0xFF,0xEC,0x37,0xF6,0x1B,0xF6,0x1B
}

void fnc_sprite_set(int vSPN, int vX, int vY, int vWID, int vHEI, int vCHN, int rH, int rW)
{
    
    int fx, fy;
    
    for (fy=0; fy<vHEI; fy++) {
        for (fx=0; fx<vWID; fx++) {
            if (rH == 0) {
                sprite_set_char(vSPN, (4)<<9 | vCHN);   
                sprite_set_location(vSPN, vX+fx*8, vY+fy*8);
            } else {
                sprite_set_char(vSPN, (4)<<9 | vCHN | CFM_FLIP_H);  
                sprite_set_location(vSPN, vX+(vWID-1)*8-fx*8, vY+fy*8);
            }
            vSPN++;
            vCHN++;
        }
    }
    
}

void main(int argc, char *args[])
{

    int wkey;

    int my_x=10, my_y=100, my_anm=0;
    int my_jmp=0, my_jmp_move=0;
    int my_dir=0;
    
    int wmap[];
    int wmap_wid, wmap_hei;
    
    palette_set_color(12, 0x0740);
    
    lcd_set_color(0x6420, 0xfca8);
    display_control(DCM_SPR | DCM_SCR2);
    
    sprite_set_range(0, 8);

    /* ·¬×¸À‚Ì“o˜^ */
    font_set_colordata(0, 4, my_char[0]);
    font_set_colordata(4, 8, my_char[1]);
    font_set_colordata(8, 12, block_char);

    screen_set_char(SCREEN2, 0, 0, 1, 

    for(;;)
    {
        
        sys_wait(1);
        
        wkey = key_press_check();
        
        /* ¶‰EˆÚ“® */
        if (wkey & KEY_RIGHT1) {
            my_x++;
            my_dir=0;
            my_anm++;
            if (my_anm >= 20) { my_anm=0; }
        } else if (wkey & KEY_LEFT1) {
            my_x--;
            my_dir=1;
            my_anm++;
            if (my_anm >= 20) { my_anm=0; }
        } else {
            my_anm=0;
        }
        
        /* ¼Þ¬ÝÌß */
        if (wkey & KEY_A && my_jmp == 0) my_jmp=1;
        
        if (my_jmp == 1) {
            my_jmp_move++;
            if (my_jmp_move >= 32) {
                my_jmp=0;
                my_jmp_move=0;
                my_anm=0;
            } else {
                my_y=my_y-(16-my_jmp_move)/2;
                my_anm=10;
            }
        }
        
        if (wkey & KEY_START) {
            break;
        }
        
        fnc_sprite_set(0, my_x, my_y, 2, 2, (my_anm/10)*4, my_dir, 0);
        
    }

}




