Due to autoexpansion to remove filtering artifacts their dimensions are not the same as for patches. But if the sprite hadn't been used yet this information won't have been set yet.
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.
- Instead of tying NoDelay behavior to OF_JustSpawned, use a new actor
flag, MF7_HANDLENODELAY. This only gets cleared once it has actually
been checked by Tick(). This is necessary because freeze mode delays the
initial run of Tick() past the initial spawn, so OF_JustSpawned will no
longer be set when it does the initial tick.
- Delay NoDelay processing if an actor is spawned dormant. Actors spawned
dormant have Deactivate() called before they tick, so MF7_HANDLENODELAY
will remain set as long as an actor is dormant. This allows the NoDelay
handling to occur as expected once it is activated.
- If the current user does not have write permissions for the directory
zdoom.exe is located in, use standard folder paths located in their home
directory instead. This is a common scenario when people put ZDoom into
Program Files. (Ironically, zdoom.ini used to be in AppData, buth then
people complained when it wasn't in the same directory as zdoom.exe, so
it got turned into zdoom-<user>.ini so at least it could retain some
multi-user support. I'm not sure when the AppData support was removed,
though, since it should have still been kept around for migrating
configs to the new name.)
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.
- A texture defined in TEXTUREx without any patches isn't necessarily an
error, so accept. This also means they shouldn't be used for determining
if a TEXTURE directory belongs to Strife instead of Doom.
- When P_OpenMapData() is called by P_CheckMapData(), we don't actually
care if any required lumps are missing. This just means it isn't a valid
map, so don't abort with I_Error().