From: John Tsiombikas Date: Mon, 19 Apr 2021 17:15:41 +0000 (+0300) Subject: tunnel rotation with lower-res scaled-up tunnel X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=gbajam21;a=commitdiff_plain;h=b88c03f1cf5b5f66bec905e5b43e797abf8c18e0 tunnel rotation with lower-res scaled-up tunnel --- diff --git a/Makefile b/Makefile index f89cedd..26ffc65 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ data/lut.s: tools/lutgen tools/lutgen >$@ data/tun.map: tools/tungen - tools/tungen -s 240x160 >$@ + tools/tungen -s 160x160 >$@ data/snd.bin: $(audata) tools/mmutil/mmutil tools/mmutil/mmutil -o$@ -hdata/snd.h $(audata) 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)); diff --git a/tools/tungen.c b/tools/tungen.c index 62e0d63..ec21217 100644 --- a/tools/tungen.c +++ b/tools/tungen.c @@ -52,8 +52,8 @@ invalopt: fprintf(stderr, "invalid argument: %s\n", argv[i]); prev_r = 0.0f; for(i=0; i