Apparently with checking uLightLevel the shader cannot discard the slow software lighting path entirely adding a significant amount of processing time.
Changed to check the actual lightmode value, which re-enables the fast path again.
Status bar was already freed while `FCajunMaster::RemoveAllBots()` function may still access it
Status bar is destroyed a bit later in `P_Shutdown()` function
https://forum.zdoom.org/viewtopic.php?t=72843
Prompted by 'Hurt' which has > 4000 lights and runs into both performance issues and unpredictable light selection for the limited amount of shadowmap slots.
* added handlers for the missing upper flags in the first flag word.
* refactored some code related to MF_BOUNCES to adapt to other flags' changes to avoid constant property updates for too many flags.
* treat anything with RF_ZDOOMTRANS as non-translucent for the purpose of the flag checks.
* let CASTSPRITESHADOW act as an override for render style checks. If this is set we can assume that a shadow is desired regardless of style.
* reordered code to do the more costly checks only when needed.
* exclude sprites which are not either opaque or use regular blended translucency from casting shadows.
* exclude wall and flat sprites from casting shadows.
In both of these cases the shadow math is unable to produce anything useful that doesn't look off.
src/common/engine/serializer_internal.h:241: warning: format specifies type 'long long' but the argument has type 'int64_t' (aka 'long') [-Wformat]
src/common/engine/serializer_internal.h:250: warning: format specifies type 'long long' but the argument has type 'int64_t' (aka 'long') [-Wformat]
src/common/rendering/vulkan/system/vk_device.cpp:364:29: warning: format specifies type 'unsigned long long' but the argument has type 'uint64_t' (aka 'unsigned long') [-Wformat]
src/common/rendering/vulkan/system/vk_framebuffer.cpp:701:57: warning: format specifies type 'unsigned long long' but the argument has type 'VkDeviceSize' (aka 'unsigned long') [-Wformat]
Due to how the MBF21 flag checkers work the first flag word may not repurpose any unused flags in it. We still need MF_SLIDE to be usable by them, despite being totally unused.
src/playsim/p_maputl.cpp:1691:42: error: too many arguments provided to function-like macro invocation
src/gamedata/d_dehacked.cpp:2385:62: error: cannot pass non-trivial object of type 'FString' to variadic function;
A dangling pointer in corpse queue may appear if actor is added to the queue when GC is in propagation state.
Enqueued corpse actor remains white, and if it’s destroyed and garbage collected before dequeue, a dangling pointer will be accessed during its removal from the queue.
In console, do `summon CorpseSpawner` and `gc now` with the following script loaded. Without a write barrier, it will crash in two seconds.
```
class TestCorpse : Actor
{
States
{
Spawn:
POSS U 1 A_Die;
Death:
POSS U 1 A_QueueCorpse;
Stop;
}
}
class CorpseSpawner : Actor
{
override void Tick()
{
A_SpawnItem("TestCorpse");
}
}
```
https://forum.zdoom.org/viewtopic.php?t=69842