X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgamescr.c;h=f927ceee9a093b89704f9f28493be6eacee0a553;hb=6a650e3e08da161fcebeb9181da60e110893fa8b;hp=30ae38018af87097834445341c051c7ed3e546dc;hpb=bbe2ec049a812155c75da5ecc303bf3793c9cca8;p=gbajam21 diff --git a/src/gamescr.c b/src/gamescr.c index 30ae380..f927cee 100644 --- a/src/gamescr.c +++ b/src/gamescr.c @@ -5,6 +5,7 @@ #include "data.h" #include "util.h" #include "intr.h" +#include "input.h" #include "debug.h" static void draw_tunnel(void); @@ -12,6 +13,7 @@ static void draw_tunnel(void); static int nframes, backbuf; static uint16_t *vram[] = { (uint16_t*)VRAM_LFB_FB0_ADDR, (uint16_t*)VRAM_LFB_FB1_ADDR }; static unsigned char *tex; +static uint16_t bnstate; void gamescr(void) { @@ -36,10 +38,14 @@ void gamescr(void) tex = iwram_sbrk(32 * 32); memcpy(tex, tuncross_pixels, 32 * 32); + select_input(BN_DPAD); + nframes = 0; for(;;) { backbuf = ++nframes & 1; + bnstate = get_input(); + draw_tunnel(); vblperf_end(); @@ -52,22 +58,30 @@ void gamescr(void) __attribute__((noinline, target("arm"), section(".iwram"))) static void draw_tunnel(void) { - int i, j, tx, ty, angle, depth, zoffs, uoffs; + static int uoffs; + int i, j, tx, ty, angle, depth, zoffs; uint16_t pptop, ppbot; uint16_t *top, *bot; uint32_t tun, *tunptr; zoffs = nframes; - uoffs = 0; + + if(bnstate & BN_LEFT) uoffs++; + if(bnstate & BN_RIGHT) uoffs--; top = vram[backbuf]; bot = vram[backbuf] + 159 * 240 / 2; tunptr = tunmap; for(i=0; i<80; i++) { +#ifdef VBLBAR top++; bot++; tunptr++; + for(j=1; j<240/2; j++) { +#else + for(j=0; j<240/2; j++) { +#endif tun = *tunptr++; angle = tun & 0xff; @@ -75,7 +89,7 @@ static void draw_tunnel(void) tx = ((angle >> 1) + uoffs) & 0x1f; ty = ((depth >> 1) + zoffs) & 0x1f; pptop = tex[(ty << 5) + tx]; - tx = ((angle >> 1) - uoffs) & 0x1f; + tx = ~((angle >> 1) - uoffs) & 0x1f; ppbot = tex[(ty << 5) + tx]; angle = (tun >> 16) & 0xff; @@ -83,7 +97,7 @@ static void draw_tunnel(void) tx = ((angle >> 1) + uoffs) & 0x1f; ty = ((depth >> 1) + zoffs) & 0x1f; pptop |= (uint16_t)tex[(ty << 5) + tx] << 8; - tx = ((angle >> 1) - uoffs) & 0x1f; + tx = ~((angle >> 1) - uoffs) & 0x1f; ppbot |= (uint16_t)tex[(ty << 5) + tx] << 8; *top++ = pptop;