From f5cbfe66929a0de82debbbad8d686b232865cd1f Mon Sep 17 00:00:00 2001 From: joshuarwood Date: Fri, 7 Nov 2025 18:38:27 -0600 Subject: [PATCH] disable xlu surface hits with a global to avoid initialization errors with struct flag --- src/game/bg.c | 12 +++++++++++- src/game/prop.c | 3 --- src/include/types.h | 3 --- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/game/bg.c b/src/game/bg.c index 8a2a53615..ea4d08784 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -135,6 +135,9 @@ s32 g_BgMostAttemptedDrawSlots = 0; s32 g_BgNumRoomLoadCandidates = 0; u16 g_BgFrameCount = 0xfffe; s32 g_BgNumPortalCameraCacheItems = 0; +#ifndef PLATFORM_N64 +bool g_BgHitXluDisabled = false; +#endif void bgUnpausePropsInRoom(u32 roomnum, bool tintedglassonly) { @@ -4591,7 +4594,7 @@ bool bgTestHitInRoom(struct coord *frompos, struct coord *topos, s32 roomnum, st for (i = 0; i < numbatches; batch++, i++) { #ifndef PLATFORM_N64 - if (hitthing->ignore_xlu && batch->type == VTXBATCHTYPE_XLU) + if (g_BgHitXluDisabled && batch->type == VTXBATCHTYPE_XLU) continue; #endif j = bg0f1612e4(&batch->bbmin, &batch->bbmax, &from, &dist, &sp94, &hitthing->pos); @@ -6421,6 +6424,10 @@ void bgCalculateGlaresForVisibleRooms(void) g_NumRoomsWithGlares = 0; + // disable line-of-sight hits for transparent background + // surfaces before testing for light obstructions + g_BgHitXluDisabled = true; + if (!g_Vars.mplayerisrunning) { for (i = 1; i < g_Vars.roomcount; i++) { if (g_Rooms[i].flags & ROOMFLAG_ONSCREEN) { @@ -6431,6 +6438,9 @@ void bgCalculateGlaresForVisibleRooms(void) } } } + + // re-enable background hits for transparent surfaces + g_BgHitXluDisabled = false; } #endif diff --git a/src/game/prop.c b/src/game/prop.c index 05118904e..5cb22009b 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -993,9 +993,6 @@ bool shotTestLos(struct coord *gunpos2d, struct coord *gundir2d, struct coord *g RoomNum *roomsptr; struct prop *prop; - // ignore transparent surfaces - hitthing.ignore_xlu = 1; - shotdata.gunpos3d.x = gunpos3d->x; shotdata.gunpos3d.y = gunpos3d->y; shotdata.gunpos3d.z = gunpos3d->z; diff --git a/src/include/types.h b/src/include/types.h index 5c5c19338..2bd8fdd2c 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5750,9 +5750,6 @@ struct hitthing { s16 unk28; s16 texturenum; s16 unk2c; -#ifndef PLATFORM_N64 - s16 ignore_xlu; -#endif }; struct hit {