Skip to content

Limitations and troubleshooting ​

Limitations ​

  • Paladins 8.1 Win64 only. The five engine signatures and the engine-core layouts are pinned to that build. On another version the log says which signature failed, and nothing hooks.
  • Maps cannot grow. map:set replaces the value of an existing key; inserting keys would need the engine's set re-hash.
  • Spawning follows engine rules by default: bStatic and bNoDelete classes (lights, static meshes) return nil. tempest.spawn(..., { force = true }) lifts the two flags around the call.
  • dllimport parameters are what UDK allows: int, float, byte, bool, string and structs of those. For object references give the function a stub body instead of dllimport; tempest.native handles both.
  • Address hooks need the signature. memory.hook sees integers unless a position is declared f32/f64; floats past the fourth argument come from stack slots. Handlers run on the calling thread, not necessarily the game thread.
  • Input covers keyboard, mouse buttons and wheel. No gamepad.
  • Numbers are doubles (LuaJIT). Addresses and object pointers are exact, but memory.read_u64 of arbitrary data loses precision above 2^53 (use ffi for 64-bit arithmetic), and tostring prints a large address in exponent form: format addresses with %x.
  • UI widgets are only valid inside a draw handler (immediate mode); the D3D9 path exists but the client ships D3D11.
  • No DLL unload. The runtime stays until the game exits; scripts reload, the DLL does not.
  • One runtime per process. If several mods ship the DLL, the first one loaded runs everything and the others log that they are idle.

Troubleshooting ​

The log is %TEMP%\tempest-scripting.log. The console window shows the same lines. Both are settings in <game>/ChaosGame/Config/tempest.toml ([runtime] log and console); the environment variables TEMPEST_SCRIPT_LOG=<path> and TEMPEST_SCRIPT_CONSOLE=0 override them.

symptomwhat it means
no log file at allthe DLL was not loaded; check the launcher's [inject] line and that the mod is enabled
xor signature not found or any ... signature not foundwrong game version, or the executable changed
GNames never became readablethe anti-cheat key table did not decode; game version mismatch
GEngine still null; running scripts anywaythe game took more than two minutes to load the Engine package
ProcessInternal unresolvedscript-function hooks are off; only engine events hook
cannot hook native X: has out params and GPropAddr is not resolved yetretried automatically once the game thread runs; a later line says (deferred) when it succeeds
GPropAddr probe found nothingout-param natives stay unhookable on this build
[mod] handler for X failed: ...a Lua error in that mod's hook; the call itself still ran
memory.hook: cannot detour 0x...the address is not a relocatable function entry (mid-function, jump target, too short)
X has no Lua implementation (tempest.native); returning zeroa dllimport function ran before (or without) a tempest.native handler for it
[mod] hook #N on 0x... failed: ...a Lua error in an address hook; the original function ran instead
address hook on 0x... panicked; running the originala runtime bug in the hook path; the game call still went through, please report the log
X has no property \Y``typo, or the property only exists on a subclass; check obj:class():path() and obj:prop("Y")
no game window yet; will keep lookingkey bindings wait for the game window; normal during startup
waiting for d3d9.dll or d3d11.dll to loadthe UI hooks poll for the renderer; IDXGISwapChain::Present detour live follows
[mod] draw handler #N failed: ...a Lua error in a ui.on_draw handler; logged once per distinct message, the UI keeps running
imgui assertion failed: ...an internal ImGui assertion, logged instead of aborting; please report the log
another Tempest.Scripting instance already runsa second mod ships the DLL; harmless
game folder unknown ...; using defaultsthe DLL was not injected from <game>/Binaries/Win64; set TEMPEST_GAME_DIR
[hot] <file> changed (<mod>)hot reload noticed a save; the mod reloads after the quiet period
[config] [mod] wrote defaults to ...first run of a mod that calls tempest.config; edit that file
[VEH][crash] ACCESS_VIOLATION ...the game faulted; the address and the last script line before it narrow it down

Useful checks from the DLL console or lua in the game console:

lua
=tempest.status().notes            -- anything that failed to resolve
=tempest.status().subscriptions    -- every hook, with its owning mod
=tempest.status().native_hooks     -- natives currently hooked
=memory.hooks()                    -- address hooks, with their owning mod
=ui.stats()                        -- UI frames built vs rendered (ui_status in the game console)
=tempest.local_player()            -- nil outside a match
=tempest.local_player():prop("Pawn")

Reporting a problem ​

Attach the log from the start of the session, the mod's scripts, and the game version. The resolve lines at the top identify the build; the last lines before a crash identify the script.