Login

Subversion Repositories NedoOS

Rev

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

#define CHEAT

#include <evo.h>
#include "functions.h"
#include "resources.h"

#define PAL256_FONT PAL_FONT_16
#define PAL256_BG1 PAL_BG1_16
#define PAL256_BG2 PAL_BG2_16
#define PAL256_BG3 PAL_BG3_16
#define PAL256_BG4 PAL_BG4_16
#define PAL256_BG5 PAL_BG5_16
#define PAL256_BG6 PAL_BG6_16
#define PAL256_BG7 PAL_BG7_16
#define PAL256_BG8 PAL_BG8_16
#define PAL16_SPRITES PAL_SPRITES_16
#define PAL256_FINAL PAL_FINAL_16
#define PAL256_TITLE PAL_TITLE_16

#define IMG256_FONT IMG_FONT_16
#define IMG256_BG1 IMG_BG1_16
#define IMG256_BG2 IMG_BG2_16
#define IMG256_BG3 IMG_BG3_16
#define IMG256_BG4 IMG_BG4_16
#define IMG256_BG5 IMG_BG5_16
#define IMG256_BG6 IMG_BG6_16
#define IMG256_BG7 IMG_BG7_16
#define IMG256_BG8 IMG_BG8_16
#define IMG256_FINAL IMG_FINAL_16
#define IMG256_TITLE IMG_TITLE_16

#define MIN_X_RES 8/*0*/
#define MAX_X_RES 296/*300*/
#define MIN_Y_RES 16/*0*/
#define MAX_Y_RES 216/*240*/
#define STARTY 321

#define draw_tile_g256 draw_tile
#define unpack_pal256(a,b) pal_select(a)
#define unpack_pal16(a,n,b) pal_select(a)
#define draw_image_g256(x,y,n) draw_image(x,y,n)
#define set_screen_sync(a) ;
#define set_res(a) ;

struct game_sprite
{
    u8 id;
    u8 pal;
    i16 x;
    i16 y;
    u16 tile;
};

u8 id = 0;

struct game_sprite sprlist[85];

void preparescroll(char *fn) __naked
{
__asm
        ld hl,#2
        add hl,sp
        ld e,(hl)
        inc hl
        ld d,(hl)
       push ix
        call _PREPSCROLLXY
       pop ix
        ret
__endasm;
}
/*
void incscroll(i16 scroll) __naked
{
__asm
        ld hl,#2
        add hl,sp
        ld c,(hl)
        inc hl
        ld b,(hl)
       push ix
        call _INCSCROLL
       pop ix
        ret
__endasm;
}
*/

void drawscroll(void) __naked
{
__asm
        ld hl,#2
        add hl,sp
       push ix
        call _DRAWSCROLLXY
       pop ix
        ret
__endasm;
}

void swap_screen_scroll(void) __naked
{
__asm
        jp _SWAP_SCREEN_SCROLL
__endasm;
}

u8 create_sprite(u8 a, u8 wid8, u8 hgt8)
{// TODO
        //u8 id = 0;
        return id++;
}
/*
void begin_set_sprites()
{
        //id = 0;
}
*/

void end_set_sprites()
{
    u8 i;
    u8 id = 0;
    for (i = 0; i < 85; i++) {
        if (sprlist[i].x<0) continue;
        if (sprlist[i].x>320-16) continue;
        if (sprlist[i].y<0) continue;
        if (sprlist[i].y>200-16) continue;
        if (id<64) set_sprite(id++,sprlist[i].x>>1,sprlist[i].y,sprlist[i].tile);
        if ((sprlist[i].tile & 0xffc0) != 0x140) {
           if ((id<64)&&((sprlist[i].x>>1)<=160-16)) set_sprite(id++,(sprlist[i].x>>1)+8,sprlist[i].y   ,sprlist[i].tile+1);
           if (sprlist[i].y>200-32) continue;
           if (id<64) set_sprite(id++,(sprlist[i].x>>1)  ,sprlist[i].y+16,sprlist[i].tile+32);
           if ((id<64)&&((sprlist[i].x>>1)<=160-16)) set_sprite(id++,(sprlist[i].x>>1)+8,sprlist[i].y+16,sprlist[i].tile+33);
        }
    }
    if (id<64) set_sprite(id,0,0,-1);
    //drawscroll();
}

void set_sprite256(u8 id, u16 tile, u8 pal, i16 x, i16 y)
{
        //x = x-16;
        //if (x<0) return; //x = 0;
        //x = x>>1;
        //if (x>160-8) return; //x = 160-8;
        //if (y<0) return;
        //if (y>200-16) return;
        //if (id>=64) return;
        //set_sprite(id,x,y,1/*(tile>>4)&0xff*/);
        sprlist[id].x = x-8;
        sprlist[id].y = y-16;
        sprlist[id].tile = ((tile&0xff)>>1) + ((tile&0x0f00)>>2);
}
/*
void setscroll(u16 scroll) __naked
{
__asm
        ld hl,#2
        add hl,sp
        ld a,(hl)
        inc hl
        ld h,(hl)
        ld l,a
       push ix
        call _SETSCROLL
       pop ix
        ret
__endasm;
}
*/

void scroll(i16 x, i16 y)
{
__asm
        ld hl,#2
        add hl,sp
       ld e,(hl)
       inc hl
       ld d,(hl)
       inc hl
        ld a,(hl)
        inc hl
        ld h,(hl)
        ld l,a
;hl=y
;de=x
       push ix
        call _SETSCROLLXY
       pop ix
        ret
__endasm;
}


static u16 score;
static u8 lifes;
static u8 cheat_on;

#include "sprite_pool.c"

#include "engine.c"
#include "font.c"

#include "gameloop.c"
#include "gameover.c"
#include "menu.c"
#include "dialogs.c"
#include "win_stage.c"

void intro()
{
u16 curscroll = 1;
i16 curdscroll = 1;
preparescroll("title-16.bmp");
        unpack_pal256(PAL256_TITLE, 0);
        //draw_image_g256(0, 0, IMG256_TITLE);
        /*text_x = 11;
        text_y = 22;//25;
        //put_slow_str("This is party version!");
        text_y += 2;
        text_x = 12;
        put_slow_str("Press SPACE to start");*/

        swap_screen();
        while (!keys[FIRE])
        {
                keyboard(keys);
scroll(0, 512-240+curscroll);
drawscroll();
if ((curscroll==0)||(curscroll==40)) curdscroll = -curdscroll;
curscroll+=curdscroll;
                swap_screen_scroll();
        }
        for (cnt = BRIGHT_MID; cnt > BRIGHT_MIN; cnt--)
        {
                pal_bright(cnt);
                swap_screen();
        }
}

void state_manager()
{
        while (TRUE)
        {
                music_stop();
                //sprites_stop();
                switch (state)
                {
                case STATE_PLAY:
                        start_game_loop();
                        break;
                case STATE_MENU:
                        init_menu_loop();
                        break;
                case STATE_GAMEOVER:
                        gameover();
                        break;
                case STATE_WIN:
                        win_stage();
                        break;
                default:
                        break;
                }
        }
}

void main(void)
{
        // ╨Я╨╛╤А╤В 0x20AF - ╨┐╨╛╤А╤В ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╤Б╨║╨╛╤А╨╛╤Б╤В╤М╤О CPU. ╨Ч╨╜╨░╤З╨╡╨╜╨╕╨╡ 6 - ╤Н╤В╨╛ 14╨Ь╨У╤Ж ╨╕ ╨▓╨║╨╗╤О╤З╨╡╨╜╨╜╤Л╨╣ ╨║╤Н╤И(0110)
        //__asm
        //ld bc, #0x20af
        //ld a, #6
        //out(c), a
        //__endasm;
        set_screen_sync(1);
        set_res(MODE320X240);
        pal_bright(BRIGHT_MID);
sprites_start();
/*
preparescroll("bg1-16.bmp");
curscroll=0;
while(1) {
scroll(0, curscroll);
drawscroll();
swap_screen_scroll();
}
*/

        intro();
//win_stage();
        scroll(0, 0);
        init_pool();
        state = STATE_MENU;
        state_manager();
}