CheckReturn() must be called before emitting code, otherwise it will always return false for switch statements
Redundant jump instruction added because of that will point right after the end of function's code when if statement is the last one in the given function
This wasn't a problem for VM because bytecode in question was unreachable
JIT compiler tries to generate native code for a bogus jump destination, and this leads to out-of-bounds read from labels array
https://forum.zdoom.org/viewtopic.php?t=67149
Use '-dumpdisasm something' to output functions with 'something' in their printable names
Open and close output file only once when processing code generated by Dehacked, and calculate its sizes as well
There were two booleans that could be merged into the flag word.
This also fixes a bug with CHAN_NOSTOP not working for local sounds because it checked the wrong sound source for the playing sound.
It can now be used from UDMF and ZScript.
To avoid clutter it doesn't allow setting the values individually but requires definition of a data record in TEXTURES.
colorization
{
DesaturationFactor <float>
Invert
AddColor <color>
ModulateColor <color>
BlendColor <color>, <mode> [, <alpha>]
}
Mode for BlendColor can be Alpha (normal translucent blending), as well as 3 special values taken from Build engine games: Screen, Overlay and HardLight.
It makes little sense exposing every minute detail of this through UDMF.
Setting it up that way is far too complicated. Using virtual textures that map to a real texture plus a colorization record should be far easier to use by mappers.
This also doesn't piggyback on the Doom64 color feature anymore and is completely separate, despite some redundancies.
This is still missing the texture definition part, though.
- added Marisa Kirisame's CHAN_OVERLAP flag.
- exported S_IsActorPlayingSomething to ZScript.
The sound API change required deprecating A_PlaySound and S_Sound. There are now new variants S_StartSound and A_StartSound which have two distinct parameters for channel and flags.
Many of the simple wrappers have been moved to a separate file and the sound source handling has been abstracted.
This is only the first phase, the work is not complete yet.
Also changed the license of the sound code to BSD after verifying that this code bears no similarity to id's original sound code anymore, save for a few function names (which are due to be refactored out anyway.)
State functions could call ZScript code with incompatible self pointer, e.g. weapon's function could be called with self pointed to player pawn
DECORATE scripts that contain such errors are no longer accepted
https://forum.zdoom.org/viewtopic.php?t=66429
Prohibit returning more values than declared in function
The exception is a void function returning one value, but only for compatibility with old scripts
https://forum.zdoom.org/viewtopic.php?t=66341
When exception is thrown from JITed code, VM stask isn't cleared during unwinding
It needs to be clear explicitly to avoid memory leaks and references to destructed objects on shutdown
https://forum.zdoom.org/viewtopic.php?t=66172
This reverts commit 747b3dfcfe.
# Conflicts:
# libraries/asmjit/asmjit/core/compiler.h
This had to be reverted because it breaks exception handling which is a critical problem.
With the updated code any exception thrown inside code that had a JITed call stack would crash.
It's an optional extension of deprecated keyword:
deprecated("2.4", "use ModernFunction instead") int OldFunction();
deprecated("3.5", "use ModernVariable instead") int OldVariable;
Usage of such members will produce the following report:
Script warning, ":zscript.txt" line 123:
Accessing deprecated function OldFunction - deprecated since 2.4.0, use ModernFunction instead
Script warning, ":zscript.txt" line 456:
Accessing deprecated member variable OldVariable - deprecated since 3.5.0, use ModernVariable instead
This was one of that annoying old design mistakes where Doom and Heretic features were poorly merged together. The Heretic Gargoyle uses very similar coding but performs a subtly different action when actually hitting another actor. This different action was made the default, even for the Lost Soul.
It has now been changed that both monsters use their original action, being distinguished by an actor flag. For compatibility with custom definitions Heretic's behavior, which has been the default in ZDoom will be the preferred one. The one of the Lost Soul can be reactivated by a flag.