With how this is being handled now, the CVAR needs to have the CVAR_GLOBALCONFIG flag and CVAR_NOINITCALL unset or it simply won't work right.
Since its meaning has completely changed now (i.e. it's mainly a performance switch to a less demanding implementation instead of being able to select vastly different lighting methods) making it global is more sensible.
Save games now store kills/items/secrets and player health/armor
in the comment string, which is displayed in the save/load game menu.
This change is not retroactive: old savegames will not display
this information until they are overwritten.
This adds ViewBobSpeed to PlayerPawn that is passed in CalcHeight() instead of the value of 20 and can be adjusted with the Player.ViewBobSpeed variable. This will let modders dynamically adjust how to only how far the camera bobs up and down, but also how *quickly* it does that, which allows to easily convey a feeling of a heavy, slow-moving character whose view might bob a lot but would do it slowly.
When no doublebinds get passed to C_DoKey it may not set the doubleclick flag.
For the automap C_DoKey gets called twice, once with the automap bindings and once with the regular bindings and doubleclicks.
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'