From 64cde8e9b466d11e1257160483e765c0c1c96819 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Mon, 19 Apr 2021 18:59:34 +0300 Subject: [PATCH] bg rotation --- src/gamescr.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/gamescr.c b/src/gamescr.c index 39ed733..ec4f353 100644 --- a/src/gamescr.c +++ b/src/gamescr.c @@ -78,10 +78,13 @@ void gamescr(void) } } +static int32_t bgmat[4]; +static int32_t bgx, bgy; + __attribute__((noinline, target("arm"), section(".iwram"))) static void draw_tunnel(void) { - static int uoffs; + static short uoffs; int i, j, tx, ty, angle, depth, zoffs; uint16_t pptop, ppbot; uint16_t *top, *bot; @@ -92,6 +95,13 @@ static void draw_tunnel(void) 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; + top = vram[backbuf]; bot = vram[backbuf] + 159 * 240 / 2; tunptr = tunmap; @@ -109,18 +119,22 @@ static void draw_tunnel(void) angle = tun & 0xff; depth = (tun >> 8) & 0xff; - tx = ((angle >> 1) + uoffs) & 0x1f; +// tx = ((angle >> 1) - uoffs) & 0x1f; + tx = (angle >> 1) & 0x1f; ty = ((depth >> 1) + zoffs) & 0x1f; pptop = tex[(ty << 5) + tx]; - tx = ~((angle >> 1) - uoffs) & 0x1f; +// tx = ~((angle >> 1) + uoffs) & 0x1f; + tx = ~(angle >> 1) & 0x1f; ppbot = tex[(ty << 5) + tx]; angle = (tun >> 16) & 0xff; depth = (tun >> 24) & 0xff; - tx = ((angle >> 1) + uoffs) & 0x1f; +// tx = ((angle >> 1) - uoffs) & 0x1f; + tx = (angle >> 1) & 0x1f; ty = ((depth >> 1) + zoffs) & 0x1f; pptop |= (uint16_t)tex[(ty << 5) + tx] << 8; - tx = ~((angle >> 1) - uoffs) & 0x1f; +// tx = ~((angle >> 1) + uoffs) & 0x1f; + tx = ~(angle >> 1) & 0x1f; ppbot |= (uint16_t)tex[(ty << 5) + tx] << 8; *top++ = pptop; @@ -137,6 +151,13 @@ static void vblank(void) int16_t mat[4]; static short gate_speed; + REG_BG2PA = bgmat[0]; + REG_BG2PB = bgmat[1]; + REG_BG2PC = bgmat[2]; + REG_BG2PD = bgmat[3]; + REG_BG2X = bgx; + REG_BG2Y = bgy; + bnstate = ~REG_KEYINPUT; if(bnstate & BN_DPAD) { if(gate_speed < 5) { -- 1.7.10.4