- Fixed: If a part of a multipatch texture is replaced by a HIRESTEX
version, the original patch must not be deleted, since the multipatch
texture still needs it for compositing.
- This function just assumed that every xy angle passed to it was within
the range [0,360). This is obviously bad, since anything outside that
range can result in accessing data outside the range of the finecosine
and finesine tables.
- For maps like xtheateriii that expect non-blocking push lines to
activate when you are standing on them and run into a completely different
line, there is now this compatiblity.txt-only flag.
- Fixed: Loading players from savegames set the skin before their current
class was retrieved, so they could not validate their skins with the
correct class.
- There exist files where the first word of the version number for DRO v1
files is not 0 but something else completely. (Maybe it's not actually a
version number?) Assume they are valid v1 files as long as the second
word is a 1.
- Fixed: Commit 75dd5503, which was to enable the use of LANGUAGE
substitutions for conversation items with a cost attached, neglected to
remove the original code that attached the cost to the end of the item,
so the cost got added twice.
- Fixed: Heretic and Hexen completely skip all normal Z processing on
mobjs with FLOATBOB set. To emulate that, we need to add NOGRAVITY to
everything with that flag set.
- Command-line console commands are executed before a level is entered, so
trying to use +warp to position yourself at a specific location will not
work. We now specially handle this command so that it does work.
- To make camera textures pan in world units instead of texture units, you
can now add "WorldPanning" at the end of the cameratexture definition in
ANIMDEFS, after the "fit" specification. e.g.
cameratexture CAMTEX 128 128 fit 64 64 worldpanning
- Fixed: DThinker::Destroy(Most)ThinkersInList() were unreliable when
destroyed thinkers destroyed more thinkers in the same list.
Specifically, if the thinker it destroyed caused the very next thinker
in the list to also be destroyed, it would get lost in the thinker list
and end up with a NULL node. So just keep iterating through the first
thinker in the list until there are none left. Since destroying a
thinker causes it to remove itself from its list, the first thinker will
always be changing as long as there's something to destroy.
- Fixed: You could not set any CVARINFO-defined cvars from the command line
because command line console commands were executed before wads were
even loaded. Off the top of my head, I can't think of anything that would\
break by having them get executed after wads are loaded.
If an actor is already targeting a goal, and Thing_SetGoal is used on
it, it would still be left targeting the old goal instead of the new
one. This messed up checks in A_Chase for walking towards a goal vs a
real target.
- This fixes crashes when quitting multiplayer games because the default
byte-for-byte copy caused PredictionPlayerBackup and the console player
to point to the exact same userinfo data and to both try and free it
when they are deleted.
- Make wi_noautostartmap a userinfo cvar. This allows it to be
communicated across the network and saved in demos. If any player has it
set, then the intermission screen will not automatically advance to the
next level.
Hexen did this with a call to A_BridgeRemove in Thing_Destroy which merely set a flag in the bridge object, which cannot be done safely in ZDoom because it's not guaranteed that the ball object calls A_BridgeOrbit and the garbage collector may delete the bridge actor before it can be checked so now the Bridge's Destroy method deletes all balls attached to the bridge object itself.