Commit graph

1140 commits

Author SHA1 Message Date
Christoph Oelckers
736bac7a93 - exported LevelLocals's compatibility flags to scripting and fixed all places where access to combined compatibility flags is needed.
# Conflicts:
#	src/scripting/vmthunks.cpp
#	src/scripting/vmthunks_actors.cpp
#	wadsrc/static/zscript/doom/fatso.txt
#	wadsrc/static/zscript/doom/painelemental.txt
2019-04-28 11:46:26 +02:00
Major Cooke
47dbc95e2b Added inflictor, source and flag parameters to GetModifiedDamage on actors and ModifyDamage on inventory.
- The flags are used by DamageMobj so modders can determine radius damage, for example, by checking for DMG_EXPLOSION.
2019-04-27 23:45:49 +02:00
alexey.lysiuk
05b12e8d74 - changed type of Nop expression to void
Control flow statements with constant condition no longer cause misleading fatal errors in ZScript

https://forum.zdoom.org/viewtopic.php?t=63566
2019-04-27 23:45:43 +02:00
alexey.lysiuk
7fecc973f5 - disabled VM JIT completely on unsuported platforms 2019-04-27 13:47:47 +02:00
alexey.lysiuk
832c462d9a - fixed potentially incomplete list of argument flags for virtual function
https://forum.zdoom.org/viewtopic.php?t=63450
2019-04-27 13:34:28 +02:00
Christoph Oelckers
fd772b6dab - fixed code emission for constant ZScript function arguments 2019-04-27 12:43:22 +02:00
Christoph Oelckers
242f1458c8 - fixed Identifier resolving for static functions
This entered the code path which warned about ambiguous use of variables in action functions and as a result ran afoul of subsequent error checks.

Since ZScript has no global scope resolution operator, this needs to ignore all non-static class symbols and try to look up any of these as global identifiers.
2019-04-27 12:43:16 +02:00
alexey.lysiuk
35867a1c29 - fixed 'overriding core lump' error
Wrong container was reported for overriding lump
2019-04-27 12:27:29 +02:00
alexey.lysiuk
db0928be4d - fixed wrong self type in Array.Resize()
https://forum.zdoom.org/viewtopic.php?t=63275
2019-04-26 18:14:56 +02:00
alexey.lysiuk
a082a09ebe - unary minus operator propagates boolean operand to integer
https://forum.zdoom.org/viewtopic.php?t=63214
2019-04-26 18:14:49 +02:00
alexey.lysiuk
67c4317d54 - fixed compilation errors
src/scripting/decorate/thingdef_parse.cpp:80:11: error: no viable conversion from 'const FName' to 'FString'
src/scripting/zscript/zcc_compile.cpp:1359:26: error: use of undeclared identifier 'Name_globalfreeze'; did you mean 'NAME_globalfreeze'?

# Conflicts:
#	src/scripting/zscript/zcc_compile.cpp
2019-04-26 18:12:31 +02:00
Christoph Oelckers
d0c609eeee - ensure proper emission of deprecations.
For global variables this wasn't implemented.

# Conflicts:
#	src/namedef.h
#	src/scripting/backend/codegen.cpp
#	wadsrc/static/zscript/base.txt
2019-04-26 18:12:29 +02:00
Christoph Oelckers
120069890d - added the fix for BuiltinNew which I missed when cherry-picking. 2019-04-26 18:10:28 +02:00
Christoph Oelckers
21e4f0b817 - made OP_NEW a builtin function instead of an opcode.
The code was present 3 times due to the JIt, and this is not something that benefits from being a real opcode, even in the interpreted case.
2019-04-26 17:23:33 +02:00
Marrub
73e174af4d Fix return value of native BuiltinCallLineSpecial 2019-04-26 17:20:42 +02:00
Chronos Ouroboros
e9ca5d6eff Fixed multidimensional array definitions. 2019-04-26 17:20:40 +02:00
Chronos Ouroboros
56be11bbe3 Added support for implicitly-sized initialized arrays.
Also fixed dynamic arrays not being cleared before initializing.
2019-04-26 17:13:59 +02:00
drfrag
e751476957 - Fixed compilation with MinGW-w64 but now the 64 bit executable crashes. 2019-04-26 17:03:29 +02:00
Chronos Ouroboros
df3f074b0a Fixed some issues in the ZScript array compilation code. 2019-04-26 01:33:09 +02:00
Chronos Ouroboros
541fd0097b Implemented compound initializers for arrays. 2019-04-26 01:31:23 +02:00
Christoph Oelckers
ff9fe5f4d0 - changed AFuncDesc initialization to avoid generating initializer functions.
Visual C++ will never statically initialize a class instance where a member field has a default value set, so the DEFINE_ACTION_FUNCTION variants without a direct native call need to be handled differently. The easiest way to do this is to leave out the nullptr default and omit the value in the initializer list. For trailing fields this will always get them nulled.
2019-04-26 01:31:21 +02:00
Christoph Oelckers
251b096b48 - removed all remaining native parts of APlayerPawn.
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.
2019-04-26 01:20:02 +02:00
Christoph Oelckers
f261ec7d53 - rewrote dynamic lights to not use actors for the internal representation and made DynamicLight a purely scripted class.
This should be less of a drag on the playsim than having each light a separate actor. A quick check with ZDCMP2 showed that the light processing time was reduced to 1/3rd from 0.5 ms to 0.17 ms per tic.
It's also one native actor class less.

# Conflicts:
#	src/g_shared/a_dynlight.cpp
#	src/g_shared/a_dynlight.h
#	src/hwrenderer/dynlights/hw_dynlightdata.cpp
#	src/hwrenderer/dynlights/hw_dynlightdata.h
#	src/hwrenderer/scene/hw_renderhacks.cpp
#	src/namedef.h
#	src/scripting/thingdef_data.cpp
#	src/swrenderer/line/r_walldraw.cpp

# Conflicts:
#	src/d_main.cpp
#	src/g_levellocals.h
#	src/g_shared/a_dynlight.cpp
#	src/g_shared/a_dynlight.h
#	src/gl/dynlights/gl_dynlight.h
#	src/gl/dynlights/gl_dynlight1.cpp
#	src/gl/scene/gl_spritelight.cpp
#	src/gl/scene/gl_walls.cpp
#	src/hwrenderer/dynlights/hw_shadowmap.cpp
#	src/hwrenderer/dynlights/hw_shadowmap.h
#	src/hwrenderer/scene/hw_flats.cpp
#	src/p_setup.cpp
2019-04-26 00:19:03 +02:00
Christoph Oelckers
99dd234d10 - exported all native components of APlayerPawn.
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
2019-04-25 17:42:11 +02:00
Christoph Oelckers
94eb0ecdda - scriptified the remaining PlayerPawn methods. 2019-04-25 17:35:44 +02:00
Christoph Oelckers
b28faa6793 - took several methods out of the native PlayerPawn implementation, either by scriptification or moving them to other places. 2019-04-25 17:34:56 +02:00
Christoph Oelckers
1c577e4c97 - scriptified APlayerPawn's DamageFade handling. 2019-04-25 17:34:51 +02:00
Christoph Oelckers
cf890a24c3 - scriptified P_CalcHeight.
This was the only code using the ViewBob member variable.
This also moves the range check for this variable to its application, because a badly behaved mod can just as easily change it at run time instead of just setting an absurdly large value in the class definition.
2019-04-25 17:34:49 +02:00
Christoph Oelckers
8e376754fc - did some more lightening on the PlayerPawn class. 4 more properties and one native member function have been handled. 2019-04-25 17:34:47 +02:00
Christoph Oelckers
c762757aca - initialize the PlayerPawn members only used by scripts through the script variable interface.
The goal here is to eliminate the native PlayerPawn class, after all, so this will be needed anyway.
2019-04-25 17:34:45 +02:00
Christoph Oelckers
08e2a86f64 - made ColorRangeStart and ColorRangeEnd meta properties of APlayerPawn.
These are only used during initialization and they should have been readonly from the start.
2019-04-25 17:34:41 +02:00
Christoph Oelckers
4be9217215 - scriptified the declaration of AmbientSound
Most of the code is still native, but this means that PlayerPawn is the last remaining child of AActor.

# Conflicts:
#	src/g_shared/a_dynlight.cpp
2019-04-25 17:34:37 +02:00
Christoph Oelckers
0c1fc45df8 - fixed A_Chase default detection. 2019-04-25 16:31:58 +02:00
Ijon
49dd94f65a Add NOFRICTION and NOFRICTIONBOUNCE flags
NOFRICTION disables all friction effects on the thing it's set on
(including the speed cap from water/crouching), and NOFRICTIONBOUNCE
disables the "bounce off walls on an icy floor" effect on the thing
it's set on.
2019-04-18 19:56:33 +02:00
Christoph Oelckers
e6af596af0 - removed the redundant GetOffsetPosition export and added direct native support to its existing variants 2019-04-18 17:01:17 +02:00
Magnus Norddahl
4d160c8cd1 - fix missing line number for the function throwing the exception and remove the duplicate call stack line 2019-04-18 14:59:32 +02:00
Christoph Oelckers
d80d4bb228 - moved P_OpenMapData and related content out of p_setup.cpp.
# Conflicts:
#	src/g_levellocals.h

# Conflicts:
#	src/g_levellocals.h
2019-04-18 14:52:24 +02:00
Magnus Norddahl
f216b42790 - avoid creating labels when they are not used
- remove variable from class as it is only used locally
- set default values in the class
- remove unused field
2019-04-18 14:22:21 +02:00
Magnus Norddahl
640464ad65 - removed marked code for how to create GDB/LLDB debug info as it will probably never be implemented 2019-04-18 14:22:19 +02:00
Magnus Norddahl
837b3d8bd2 - add missing parameter on unix 2019-04-18 14:22:17 +02:00
Chronos Ouroboros
e0d3a5acae Add line numbers to JIT stack traces. (#667) 2019-04-18 14:22:15 +02:00
Magnus Norddahl
bfccfb5e1b - don't include the native frames per default 2019-04-18 14:22:13 +02:00
Magnus Norddahl
175b67c088 - fix linking and some linux things 2019-04-18 14:22:11 +02:00
Chronos Ouroboros
218b7e95ca Added a function for triggering use/push specials for usage in custom monster AI. 2019-04-18 14:22:07 +02:00
Chronos Ouroboros
803cb16d99 Exported P_CheckFor3DFloorHit and P_CheckFor3DCeilingHit to ZScript. 2019-04-18 14:22:05 +02:00
alexey.lysiuk
9aeeb0dc0f - fixed compilation of POSIX targets
Making callstack resolving operational will require a little bit more effort

src/scripting/vm/jit_runtime.cpp:900:31: error: use of undeclared identifier 'frames'
src/scripting/vm/jit_runtime.cpp:903:23: error: use of undeclared identifier 'cnt'
2019-04-18 14:00:35 +02:00
Magnus Norddahl
a01a468ef8 - add support for writing the native call stack 2019-04-18 14:00:34 +02:00
Magnus Norddahl
e1ed87a64f - improve the stack trace when the jit is active 2019-04-18 14:00:31 +02:00
drfrag
846f53ba1e - Fixed compilation with MinGW-w64 64 bit. 2019-04-18 13:51:17 +02:00
Christoph Oelckers
cee9f52f2f - improved error reporting for badly defined translations.
This needs to be handled by the caller for all use cases because the translation parser lacks the context to do a proper error report.

# Conflicts:
#	src/textures/multipatchtexture.cpp
2019-04-18 13:07:39 +02:00
Christoph Oelckers
d4611683a6 - let FxNop have a value type, even if it's just TypeError. 2019-04-18 13:02:21 +02:00
Christoph Oelckers
3a3ae0bcd5 - fixed deprecation warnings for member functions not checking the version. 2019-04-17 19:44:10 +02:00
Christoph Oelckers
8ad73d32b8 - fixed: The JIT compiler crashed on missing ArgFlags.
For ad-hoc Dehacked state functions no ArgFlags are created, in this case they can just be assumed to not be relevant here, because none of these function produces reference arguments.
2019-04-17 19:44:07 +02:00
alexey.lysiuk
e6590f6ad9 - fixed return value of native call to dynamic array's Reserve()
https://forum.zdoom.org/viewtopic.php?t=62841
2019-04-17 19:44:05 +02:00
Magnus Norddahl
e4502de60b - workaround pointer truncation bug in asmjit 2019-04-17 19:44:02 +02:00
alexey.lysiuk
9b49c6777d - fixed Actor.A_StopSound() native call
Wrong function overload was selected by compiler

https://forum.zdoom.org/viewtopic.php?t=62820
2019-04-17 18:44:14 +02:00
Magnus Norddahl
60a35e0bb3 - moved argsCache out of JitCompiler::CreateFuncSignature 2019-04-17 18:44:12 +02:00
alexey.lysiuk
84c7a810b1 - fixed broken Z coordinate in Actor.Vec3Angle() native call 2019-04-17 18:39:56 +02:00
alexey.lysiuk
7ba1e5945f - fixed native calls to LevelLocals.GetUDMF*() functions
https://forum.zdoom.org/viewtopic.php?t=62774
2019-04-17 18:39:53 +02:00
Christoph Oelckers
013040eacd - missed one definition for adding a direct native call. 2019-04-17 17:27:42 +02:00
Christoph Oelckers
cf4f573a25 - more direct native entry points.
- disallow bool as a return value for direct native calls because it only sets the lowest 8 bits of the return register.
- changed return type for several functions from bool to int where the return type was the only thing blocking use as direct native call.
2019-04-17 17:27:39 +02:00
Christoph Oelckers
c054389345 - fixed: Direct native functions for the JIT compiler may not return bool.
A bool will only set the al register on x64, but the entire eax needs to be set for the JIT code to deal with it.
2019-04-17 16:24:07 +02:00
Christoph Oelckers
15ab1fb09b - deprecated a few functions that depend on AAPTR_* to be useful.
- fixed wrong name for the LineAttack action function.
2019-04-17 16:24:05 +02:00
Christoph Oelckers
61b91f4897 - fix it 2019-04-17 15:11:24 +02:00
Christoph Oelckers
792aaa5b88 Added direct native entry points to a larger number of functions.
# Conflicts:
#	src/scripting/vmthunks_actors.cpp
2019-04-17 15:11:22 +02:00
alexey.lysiuk
ab111aa034 - fixed linking of optimized POSIX targets
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_Distance2DSquared(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x6ab): undefined reference to `AActor::PosRelative(AActor const*) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_Distance3DSquared(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x75f): undefined reference to `AActor::PosRelative(AActor const*) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_Vec3To(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x850): undefined reference to `AActor::PosRelative(AActor const*) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_Vec2To(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x930): undefined reference to `AActor::PosRelative(AActor const*) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_DistanceBySpeed(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0xa00): undefined reference to `AActor::PosRelative(AActor const*) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o:vmthunks_actors.cpp:(.text+0xad3): more undefined references to `AActor::PosRelative(AActor const*) const' follow
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_PosRelative(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x1200): undefined reference to `AActor::PosRelative(sector_t*) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_ClearInterpolation(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x127d): undefined reference to `AActor::ClearInterpolation()'
vmthunks_actors.cpp:(.text+0x1298): undefined reference to `AActor::ClearInterpolation()'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_GetBobOffset(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x135a): undefined reference to `AActor::GetBobOffset(double) const'
CMakeFiles/zdoom.dir/scripting/vmthunks_actors.cpp.o: In function `AF_AActor_Distance2D(VMValue*, int, VMReturn*, int)':
vmthunks_actors.cpp:(.text+0x222b): undefined reference to `AActor::PosRelative(AActor const*) const'
2019-04-17 15:11:18 +02:00
Christoph Oelckers
22b8bdc02d fixed missing include. 2019-04-17 15:11:15 +02:00
Christoph Oelckers
1fce3298ba - fixed definition of GetUDMFString export. 2019-04-17 15:11:14 +02:00
Christoph Oelckers
a5e16e3261 - moved a large part of the VM thunks out of p_mobj.cpp. 2019-04-17 14:55:58 +02:00
Christoph Oelckers
1e4c22f8d4 - more direct native entry points. 2019-04-17 14:55:56 +02:00
Christoph Oelckers
3fb3831843 - fixed: SBar_SetClipRect had a superfluous argument resulting in incorrect behavior 2019-04-17 14:32:19 +02:00
Christoph Oelckers
54d1ee2244 - fix bad return type. 2019-04-17 14:32:14 +02:00
Christoph Oelckers
d52889e71e - handle JIT errors in a more user-friendly fashion than aborting.
* use I_Error instead of I_FatalError to abort. I_FatalError is only for things that are not recoverable and should not be handled outside of error cleanup and rethrowing.
* only catch CRecoverableError in JitCompile. Everything else should fall through to the outermost catch block.
* Do not I_FatalError out after handling the exception locally. Just print an error and return null, indicating failure.
2019-04-17 14:32:12 +02:00
Christoph Oelckers
f22aaca74d - scriptified ASpecialSpot.
This only had two simple native methods so the class is not fully scripted.
2019-04-17 14:32:10 +02:00
Christoph Oelckers
92b245d220 - treat REGT_STRING | REGT_ADDROF just like REGT_STRING for direct native functions.
Both pass a reference so there's no need to treat them differently.
2019-04-17 14:32:08 +02:00
Christoph Oelckers
044b635a26 - more direct native function calls. 2019-04-17 14:32:06 +02:00
Christoph Oelckers
c87724ef0a Removed all native components from AInventory. 2019-04-16 23:57:22 +02:00
Christoph Oelckers
b8e1218645 Removed all remaining references to AInventory
What remains is the class definition and one single reference that will be scriptified.
2019-04-16 23:57:12 +02:00
Christoph Oelckers
b762c0f49c Removed more literal references to AInventory.
# Conflicts:
#	src/hwrenderer/scene/hw_drawinfo.cpp
#	src/v_draw.cpp
2019-04-16 23:57:07 +02:00
Christoph Oelckers
fa2e2e78b4 - removed all direct access to AInventory's members.
We are getting closer to make class Inventory fully scripted.
2019-04-16 22:01:04 +02:00
Magnus Norddahl
c8b5276981 - gcc/clang didn't like having this in a class 2019-04-16 22:01:01 +02:00
Magnus Norddahl
82a0acbc19 - add bool and unsigned int to the allowed types
- fix one case where floats were used (the JIT always calls with doubles)
2019-04-16 22:00:57 +02:00
Magnus Norddahl
89fd819926 - perform compile time validation of direct native function signatures 2019-04-16 22:00:55 +02:00
Magnus Norddahl
9e432c0c9f - fix VM native calls containing strings and enable them again 2019-04-16 22:00:53 +02:00
Magnus Norddahl
6090e5ec24 - fix compile error 2019-04-16 22:00:50 +02:00
Christoph Oelckers
a42ece4fb4 - added missing min/max unsigned instructions for the VM. 2019-04-16 22:00:46 +02:00
Christoph Oelckers
fc341c901f - fixed issues with Dehacked's ad-hoc script code generation
* The functions had no prototype and caused crashes.
* even after creating a prototype it didn't work because CreateAnonymousFunction was set up incorrectly for the case where a known return type was given.
2019-04-16 21:52:47 +02:00
Christoph Oelckers
0a36ad0182 - removed assert that got triggered in an edge case that must pass here. 2019-04-16 21:34:51 +02:00
Magnus Norddahl
abc4406d18 - ptest is a SSE 4.1 instruction 2019-04-16 21:28:35 +02:00
drfrag
8ef732704c - Missing include. 2019-04-16 19:55:28 +02:00
Christoph Oelckers
f509fdfdaa - scriptified and cleaned up the AltHUD's DrawCoordinates, DrawTime and DrawLatency functions.
Some backing functionality was moved elsewhere because scripting should not have access to low level system information.
2019-04-16 19:01:53 +02:00
Christoph Oelckers
cbb92af1db - allow %*d etc. format specifiers in ZScript, but only for numeric types. 2019-04-16 19:01:45 +02:00
Magnus Norddahl
08f415bad9 - don't use SSE for integer min/max 2019-04-16 18:46:09 +02:00
Magnus Norddahl
1e533d726c - Use SSE2 for min/max instead 2019-04-16 18:46:07 +02:00
Christoph Oelckers
de6916756b - disabled direct native functions for now until the problems with string arguments are fixed. 2019-04-16 18:44:50 +02:00
Christoph Oelckers
057604a7b1 - added direct native variants to nearly all status bar function.
I skipped ValidateInvFirst because that one will have to be scriptified soon.
2019-04-16 18:44:49 +02:00
Magnus Norddahl
b6737c0cd3 - minor code cleanup now that it is working 2019-04-16 18:18:30 +02:00
Christoph Oelckers
712b85fc61 - removed the no longer needed exception prevention hack.
# Conflicts:
#	src/scripting/vm/vmframe.cpp

# Conflicts:
#	src/scripting/vm/vmframe.cpp
2019-04-16 18:18:16 +02:00
Christoph Oelckers
fc4b757b17 - fixed: V_FindFontColor is not suitable for direct calls from JIT code, thanks to its FName parameter. 2019-04-16 18:17:32 +02:00
Christoph Oelckers
4049b56d50 - a bit of code reordering for adding direct native entry points.
- offloaded key list generation for alternative HUD to non-UI parts.

This change also revealed a problem with handling empty sprites in the key list so this got fixed, too.

# Conflicts:
#	src/g_shared/shared_hud.cpp
2019-04-16 18:17:05 +02:00