X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgamescr.c;fp=src%2Fgamescr.c;h=452709ccc14db1ab9b818613ba396b5eb4702466;hb=b88c03f1cf5b5f66bec905e5b43e797abf8c18e0;hp=ec4f3531c2fd10f4dc66272c4755112eddc3e888;hpb=64cde8e9b466d11e1257160483e765c0c1c96819;p=gbajam21 diff --git a/src/gamescr.c b/src/gamescr.c index ec4f353..452709c 100644 --- a/src/gamescr.c +++ b/src/gamescr.c @@ -24,6 +24,10 @@ static uint16_t oam[4 * MAX_SPR]; static short x = 120, y = 80; static unsigned char rot; +static int32_t bgmat[4]; +static int32_t bgx, bgy; +static int32_t tunrot; + void gamescr(void) { int i; @@ -74,73 +78,67 @@ void gamescr(void) vblperf_end(); wait_vblank(); present(backbuf); + + tunrot = nframes; + bgmat[0] = (COS(tunrot) * 280) >> 8; + bgmat[1] = (-SIN(tunrot) * 280) >> 8; + bgmat[2] = (SIN(tunrot) * 280) >> 8; + bgmat[3] = (COS(tunrot) * 280) >> 8; + bgx = (120 << 8) - bgmat[0] * 120 + bgmat[1] * -80; + bgy = (80 << 8) - bgmat[2] * 120 + bgmat[3] * -80; + vblperf_begin(); } } -static int32_t bgmat[4]; -static int32_t bgx, bgy; - __attribute__((noinline, target("arm"), section(".iwram"))) static void draw_tunnel(void) { - static short uoffs; - int i, j, tx, ty, angle, depth, zoffs; + int i, j, tx, ty, angle, depth, zoffs, uoffs; uint16_t pptop, ppbot; uint16_t *top, *bot; uint32_t tun, *tunptr; zoffs = nframes; - if(bnstate & BN_LT) uoffs++; - if(bnstate & BN_RT) uoffs--; - - bgmat[0] = COS(uoffs) << 1; - bgmat[1] = -SIN(uoffs) << 1; - bgmat[2] = SIN(uoffs) << 1; - bgmat[3] = COS(uoffs) << 1; - bgx = (120 << 8) - bgmat[0] * 120 + bgmat[1] * -80; - bgy = (80 << 8) - bgmat[2] * 120 + bgmat[3] * -80; + uoffs = tunrot; - top = vram[backbuf]; - bot = vram[backbuf] + 159 * 240 / 2; + top = vram[backbuf] + 20; + bot = vram[backbuf] + 159 * 240 / 2 + 20; tunptr = tunmap; for(i=0; i<80; i++) { + for(j=0; j<160/2; j++) { #ifdef VBLBAR - top++; - bot++; - tunptr++; - - for(j=1; j<240/2; j++) { -#else - for(j=0; j<240/2; j++) { + if(j == 160/4) { + tunptr++; + top++; + bot++; + continue; + } #endif tun = *tunptr++; angle = tun & 0xff; depth = (tun >> 8) & 0xff; -// tx = ((angle >> 1) - uoffs) & 0x1f; - tx = (angle >> 1) & 0x1f; + tx = ((angle >> 1) - uoffs) & 0x1f; ty = ((depth >> 1) + zoffs) & 0x1f; pptop = tex[(ty << 5) + tx]; -// tx = ~((angle >> 1) + uoffs) & 0x1f; - tx = ~(angle >> 1) & 0x1f; + tx = ~((angle >> 1) + uoffs) & 0x1f; ppbot = tex[(ty << 5) + tx]; angle = (tun >> 16) & 0xff; depth = (tun >> 24) & 0xff; -// tx = ((angle >> 1) - uoffs) & 0x1f; - tx = (angle >> 1) & 0x1f; + 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) & 0x1f; + tx = ~((angle >> 1) + uoffs) & 0x1f; ppbot |= (uint16_t)tex[(ty << 5) + tx] << 8; *top++ = pptop; *bot++ = ppbot; } - bot -= 240; + top += 40; + bot -= 240 - 40; } } @@ -180,6 +178,7 @@ static void vblank(void) if(bnstate & BN_A) rot -= 2; if(bnstate & BN_B) rot += 2; + spr_oam(oam, 0, 512 + 256, x - 64, y - 64, SPR_256COL | SPR_SZ64 | SPR_DBLSZ | SPR_ROTSCL | SPR_ROTSCL_SEL(0));