From 828776e272e114ea4065b16efc10de5bf58780c7 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Sun, 5 Nov 2023 23:08:34 +0100 Subject: [PATCH] port: account for non-segmented addresses in bgTestHitOnObj --- src/game/bg.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/game/bg.c b/src/game/bg.c index aead192ca..f7710afa9 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -3659,9 +3659,23 @@ bool bgTestHitOnObj(struct coord *arg0, struct coord *arg1, struct coord *arg2, } else if (gdl->dma.cmd == G_VTX) { ptr = var800a6470; count = gdl->bytes[GFX_W0_BYTE(1)] & 0xf; - offset = (UNSEGADDR(gdl->words.w1) & 0xffffff); numvertices = (((u32) gdl->bytes[GFX_W0_BYTE(1)] >> 4) & 0xf) + 1; + +#ifdef PLATFORM_N64 + offset = (UNSEGADDR(gdl->words.w1) & 0xffffff); vtx = (Vtx *)((uintptr_t)vertices + offset); +#else + if (gdl->words.w1 & 1) { + // segmented address + offset = (UNSEGADDR(gdl->words.w1) & 0xffffff); + vtx = (Vtx *)((uintptr_t)vertices + offset); + } else { + // linear address + offset = 0; + vtx = (Vtx *)gdl->words.w1; + } +#endif + vtx -= count; ptr[0] = vtx->x;