Inventory items had dangling floor and ceiling sector pointers after transition to a new level
This could cause random issues with serialization
https://forum.zdoom.org/viewtopic.php?t=67494
Added new compatflag "old random generator", controlled by the new CVAR compat_oldrandom. If this is enabled, the original Doom random table is used to generate random integers in [0,255], which should make for instance the SSG cause a little more damage.
* 0: previous behavior (completely MAPINFO controlled)
* 1: always show level tally at the end of an episode
* 2: always show level tally even when changing levels within a hub
# Conflicts:
# src/g_level.cpp
# src/g_levellocals.h
# Conflicts:
# src/g_level.cpp
This gets called right before the level ends, any sound in here would play during the intermission or at the start of the next level.
# Conflicts:
# src/sound/s_soundinternal.h
This reverts commit 2b51e8d5dd.
# Conflicts:
# src/g_hub.cpp
# src/g_level.cpp
# src/p_setup.cpp
# src/wi_stuff.cpp
# src/wi_stuff.h
# wadsrc/static/zscript/ui/statscreen/types.zs
Revert "- fixed: The wbstartstruct that gets passed to the level summary screen needs to be static"
This reverts commit 4a563f449d.
# Conflicts:
# src/g_level.cpp
Revert "- Fixed compilation."
This reverts commit 149a294a49.
# Conflicts:
# src/g_level.cpp
Revert "- Fixed game finales not being shown after the intermission."
This reverts commit 55af0b11c6.
All this didn't make sense without localization and caused problems with intermissions and endings, it was incompatible with the old code without the level refactor.
For now only with font-printed map names. Allowing this with titlepatches will require more work and an option to disable.
# Conflicts:
# src/g_level.cpp
# src/gamedata/g_mapinfo.h
# src/gi.cpp
# wadsrc/static/zscript/ui/statscreen/statscreen.zs
This variable is needed long after the function which sets it up will be exited. So this either needs to be dynamically allocated or static, and in this case using a static variable is simpler. However, unlike before, it is only being accessed in the one function that needs to initialize it and pass to the summary screen and nowhere else.
# Conflicts:
# src/g_level.cpp
For the Doom IWADs the provided font looks almost identical to the characters used on the title patches. So, for any level name that got replaced in some language, it will now check if the retrieved name comes from the default table, and if not, ignore the title patch and print the name with the specified font.
This also required removing the 'en' label from the default table, because with this present, the text would always be picked from 'en' instead of 'default'. Since 'en' and 'default' had the same contents, in any English locale the 'default' table was never hit, so this won't make any difference for the texts being chosen.
Last but not least, wminfo has been made a local variable in G_DoCompleted. There were two places where this was accessed from outside the summary screen or its setup code, and both were incorrect.
# Conflicts:
# src/g_hub.cpp
# src/g_level.cpp
# src/gamedata/g_mapinfo.h
# src/gi.h
# src/p_setup.cpp
# src/stringtable.cpp
# src/stringtable.h
# wadsrc/static/zscript/ui/statscreen/statscreen.zs
# wadsrc_extra/static/iwadinfo.txt
# Conflicts:
# src/gi.h
# wadsrc_extra/static/iwadinfo.txt
Exit_Normal and Exit_Secret specials imply addition conditions to make a decision about proceeding to the next map
A few scriptified actors require a bypass of these conditions in order to work properly
Now it's no longer possible to manipulate TID hash from arbitrary location
For example, this prevents linking of destroyed object into the hash
TID member is still public but writing to it is limited to a few very specific cases like serialization and player traveling between levels
https://forum.zdoom.org/viewtopic.php?t=64476
# Conflicts:
# src/actor.h
# src/maploader/maploader.cpp
This caused bad calculations with CMF_OFFSETPITCH. Note that to compensate for the fix, the SphericalCoords function had to have its own inversion of the value removed so that it calculates the same result as before.
Unlike the other classes, the places where variables from this class were accessed were quite scattered so there isn't much scriptified code. Instead, most of these places are now using the script variable access methods.
This was the last remaining subclass of AActor, meaning that class Actor can now be opened for user-side extensions.
Since these can be changed on the placed light actor they have to be read from there, so this is now a pointer in FDynamicLight, just like the other properties that can be user-changed.
Also did some cleanup on the interface so that external code doesn't need to dereference the lightflags pointer but can use utility functions for all flags.
# Conflicts:
# src/hwrenderer/dynlights/hw_dynlightdata.cpp
# src/swrenderer/line/r_walldraw.cpp
# Conflicts:
# src/g_level.cpp
# src/gl/compatibility/gl_20.cpp
Only the class definition itself remains and needs to be taken care of.
# Conflicts:
# src/g_statusbar/sbarinfo_commands.cpp
# src/hu_scores.cpp
# src/scripting/thingdef_data.cpp
# Conflicts:
# src/actorinlines.h
# src/hu_scores.cpp
This did no longer sort sprites in the same position reliably since the feature to render sprites which only partially are inside a sector was added.
With this, sprites in the same position are no longer guaranteed to be added to the render list in sequence.
Fixed by adding an 'order' field to AActor which gets incremented with each spawned actor and reset when a new level is started.
The software renderer will also need a variation of this fix but its data no longer has access to the defining actor when being sorted, so a bit more work is needed here.
# Conflicts:
# src/hwrenderer/scene/hw_drawlist.cpp
# src/hwrenderer/scene/hw_sprites.cpp
* it was never saved in savegames, leaving the state of dead bodies undefined
* it shouldn't be subjected to pointer substitution because all it contains is old dead bodies, not live ones.
# Conflicts:
# src/r_data/r_translate.cpp