From 25de15672e3589d0036135ea7090a4cda4c1c3fc Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Tue, 13 May 2025 16:00:37 -0400 Subject: [PATCH] Fix item flicker --- src/objects/random-item.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/objects/random-item.c b/src/objects/random-item.c index fa5419084..f1409ceb2 100644 --- a/src/objects/random-item.c +++ b/src/objects/random-item.c @@ -112,18 +112,22 @@ void Obj_RandomItemVisuals(mobj_t *mobj) ItemBoxScaling(mobj); item_vfxtimer(mobj)++; - for (UINT8 i = 0; i <= r_splitscreen; i++) - { - UINT32 flag = K_GetPlayerDontDrawFlag(&players[displayplayers[i]]); - if (!players[displayplayers[i]].cangrabitems) - mobj->renderflags |= flag; - else - mobj->renderflags &= ~(flag); - } - if (mobj->type != MT_RANDOMITEM) return; + if (!((mobj->flags & MF_NOCLIPTHING) || mobj->fuse)) + { + for (UINT8 i = 0; i <= r_splitscreen; i++) + { + UINT32 flag = K_GetPlayerDontDrawFlag(&players[displayplayers[i]]); + if (!players[displayplayers[i]].cangrabitems) + mobj->renderflags |= flag; + else + mobj->renderflags &= ~(flag); + } + } + + // Respawn flow, documented by a dumb asshole: // P_TouchSpecialThing -> P_ItemPop sets fuse, NOCLIPTHING and DONTDRAW. // P_FuseThink does visual flicker, and when fuse is 0, unsets NOCLIPTHING/DONTDRAW/etc...