The STARTUP0 check is not only redundant but also was wrong. It already gets checked and validated in the asset loading loop, and this up-front check did not handle placement as a graphic.
If all of the worst stars align when compiling Polyobject BSP and splitting a seg into two sets:
- The very first seg in the current set fails all of the metrics for determining which side of a split it is on, and doesn't know which side it should go to. Since there are 0 are in front, it goes to front by default.
- Every other seg in the same set don't fail their metrics, and they all decide they are meant to go to the front side.
- Oops! Now there's nothing in the back side!
I've fixed this by collecting all of the undecided segs in a split, and setting the new side after the other segs. Doing it in the normal loop means there's a non-zero chance the crash prevention will fail depending on how the segs are in memory.
This can technically happen with even the most simplistic Polyobjects, but it becomes more common the more complex it is (add tons of lines, move and rotate it at the same time, so on). Quite an annoying crash since it doesn't always replicate consistently.
This discrepancy is ancient, so the approach used for the shotgunner does not work here and some hacks are needed to remap the function only for Dehacked.
Doing it in the constructor does not work because InitMultipleFiles will clear everything again before building up the directory so it would always be null.
This triggered another bug in file_directory.cpp which used the constructor's unvalidated parameter.
versions before 9 fails to compile with the following error
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/stl_tree.h:701:4: error: exception specification of explicitly defaulted move constructor does not match the calculated one
clang 9 fails to link with the following errors
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/cmath:223: undefined reference to `__expf_finite'
src/rendering/swrenderer/drawers/r_draw_rgba.cpp:1120: undefined reference to `__log2_finite'
src/rendering/swrenderer/drawers/r_draw_rgba.cpp:1120: undefined reference to `__log2_finite'
src/rendering/swrenderer/drawers/r_draw_rgba.cpp:1120: undefined reference to `__log2_finite'
src/rendering/swrenderer/plane/r_flatplane.cpp:183: undefined reference to `__log2_finite'
src/rendering/swrenderer/viewport/r_spritedrawer.cpp:174: undefined reference to `__log2_finite'
- new FloatingSkull light.
- use armour primary colours instead of red for both, with the red gem having its separate light.
- give subtractive pulselight to blursphere.