X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgame.c;h=8afa769917fde9acf224589baffc5c8a001aa407;hb=3f381738bd1f53bace45c8bf9ffc6d772ff90aab;hp=37c39b2e252255fc5987f11acbedc36e8fc6091d;hpb=196421f047414a192f285c8e98346a4595da2d46;p=retrocrawl diff --git a/src/game.c b/src/game.c index 37c39b2..8afa769 100644 --- a/src/game.c +++ b/src/game.c @@ -1,8 +1,10 @@ +#include #include #include "game.h" #include "gfx.h" #include "copper.h" #include "data.h" +#include "sprite.h" #include "hwregs.h" /* XXX */ @@ -12,20 +14,17 @@ void draw_tile(int tid, int x, int y, int light); static uint16_t *sprdata[NUM_HWSPRITES]; -static uint16_t nullspr[] = { - 0x2000, 0x2100, - 0x0000, 0x0000, - 0x0000, 0x0000 -}; - -#define SPR_POS(x, y) \ - (((uint16_t)((x) + 0x40) & 0xff) | ((uint16_t)((y) + 0x2c) << 8)) +static uint16_t *sprdata2[NUM_HWSPRITES]; +/* hardcoded test sprite */ +static struct sprite test_sprite; +static struct sprite test_sprite2; int game_init(void) { - int i, sprpos[] = {136, 76}; - uint32_t nullspr_addr = (intptr_t)nullspr; + int i; + + printf("hello world\n"); REG_COLOR0 = 0x221; REG_COLOR1 = 0x222; @@ -40,37 +39,26 @@ int game_init(void) REG_COLOR_PTR[i + 16] = sprpal[i]; } - sprdata[0] = spr0a; - sprdata[1] = spr0b; - sprdata[2] = spr1a; - sprdata[3] = spr1b; - sprdata[4] = spr2a; - sprdata[5] = spr2b; - + sprdata[0] = sprdata2[0] = spr0a; + sprdata[1] = sprdata2[1] = spr0b; + sprdata[2] = sprdata2[2] = spr1a; + sprdata[3] = sprdata2[3] = spr1b; + sprdata[4] = sprdata2[4] = spr2a; + sprdata[5] = sprdata2[5] = spr2b; + + test_sprite.width = test_sprite.height = 48; + test_sprite.origx = 24; + test_sprite.origy = 24; + test_sprite.img = test_sprite.mask = 0; + test_sprite.hwslices = 3; for(i=0; i<8; i++) { - int reg = REGN_SPR0PTH + i * 4; - if(i < NUM_HWSPRITES) { - uint16_t sx, sy, vstop; - /* initialize active sprites, and set the sprite pointers */ - uint32_t addr = (intptr_t)sprdata[i]; - add_copper(COPPER_MOVE(reg, addr >> 16)); - add_copper(COPPER_MOVE(reg + 2, addr)); - - sx = 0x80 + sprpos[0] + (i >> 1) * 16; - sy = 0x2c + sprpos[1]; - vstop = sy + SPRITE_HEIGHT; - - sprdata[i][0] = (sx >> 1) | (sy << 8); - sprdata[i][1] = (vstop << 8) | ((vstop >> 7) & 2) | - (sx & 1) | ((i & 1) ? 0x80 : 0); - } else { - /* point the sprite pointers to the null sprite for the rest */ - add_copper(COPPER_MOVE(reg, nullspr_addr >> 16)); - add_copper(COPPER_MOVE(reg + 2, nullspr_addr)); - } + test_sprite.hwspr[i] = i < 6 ? sprdata[i] : 0; } - *copperlist_end = COPPER_END; + test_sprite2 = test_sprite; + for(i=0; i<8; i++) { + test_sprite2.hwspr[i] = i < 6 ? sprdata2[i] : 0; + } return 0; } @@ -82,8 +70,6 @@ void game_draw(void) { int i, j, xoffs, yoffs, ntiles; - /* reset sprite data */ - yoffs = 0; for(i=0; i