Skip to content

Engine natives

Installed into the client's Lua state by the injected engine. They exist only once the player is in the world, so guard on Nyx.Engine before calling them.

GUIDs are hex strings, never numbers: they are 64-bit and a Lua number is a double, so a numeric GUID would lose precision silently.

24 entry points, 24 documented.

Circle

lua
Nyx.Engine.Circle(x, y, radius, r, g, b, a)

Screen-space circle.

draw.cpp

Clear

lua
Nyx.Engine.Clear()

Drops every queued shape. Drawings persist until replaced.

draw.cpp

Line

lua
Nyx.Engine.Line(x1, y1, x2, y2, r, g, b, a)

Screen-space line in render pixels from the top-left. Prefer Nyx.Draw.Line.

draw.cpp

Rect

lua
Nyx.Engine.Rect(x, y, w, h, r, g, b, a, filled)

Screen-space rectangle. filled is 1 or 0.

draw.cpp

WorldCircle

lua
Nyx.Engine.WorldCircle(x, y, z, radius, r, g, b, a)

Horizontal ring at a world position. radius is in yards.

draw.cpp

WorldLine

lua
Nyx.Engine.WorldLine(x1, y1, z1, x2, y2, z2, r, g, b, a)

Line between two world positions, projected with the client camera.

draw.cpp

camdump

lua
Nyx.Engine.camdump([count]) -> array of floats straight from the camera struct, for

finding which field actually holds the field of view.

object_manager.cpp

camera

lua
Nyx.Engine.camera() -> table describing the client camera, plus the two runtime

checks that stand in for a static proof of its struct layout: it must sit near the player, and its 3x3 must be orthonormal.

object_manager.cpp

count

lua
Nyx.Engine.count() -> number

How many objects the client currently has in memory. Varies as things enter and leave visibility, which is how you know it is reading live data.

object_manager.cpp

dump

lua
Nyx.Engine.dump(guid, offset, count [, "object"]) -> array of 32-bit words.

Reads the descriptor block by default, or the object itself with "object". This is the tool for finding fields nobody has confirmed yet: snapshot, change something in game, snapshot again, and diff. It is how the fields above stopped being guesses, and it is deliberately generic so the next unknown does not need an engine change to chase.

object_manager.cpp

first

lua
Nyx.Engine.first() -> "guid/type"

The first object in the manager list, for checking the walk is alive.

object_manager.cpp

fovcal

lua
Nyx.Engine.fovcal(x, y, z, screenX, screenY) -> fovFromVertical, fovFromHorizontal

Given a world point and where it ACTUALLY appears on screen, solve for the field of view that would put it there. Two independent solutions fall out, one from each screen axis; they should agree, and agreeing is what says the answer is real rather than a fudge factor.

object_manager.cpp

guid

lua
Nyx.Engine.guid() -> hex string

The local player GUID. Falls back to the object manager, because the static global reads 0 on this client.

object_manager.cpp

log

lua
Nyx.Engine.log(text) — append a line to nyx.log. Chat is not always available

(loading screens, early login), the log always is.

object_manager.cpp

los

lua
Nyx.Engine.los(x1,y1,z1, x2,y2,z2 [, flags]) -> clear, hitX, hitY, hitZ, fraction

clear is true when nothing blocks the ray. The hit point and the fraction along the ray are returned too, which is what makes this usable for more than yes/no - ground height under a point, for instance.

object_manager.cpp

markWorldReady

lua
Nyx.Engine.markWorldReady()

Tells the engine the world is up. The bridge calls this itself; a script has no reason to.

object_manager.cpp

mgrguid

lua
Nyx.Engine.mgrguid() -> hex string

The local player GUID as the object manager reports it. Should equal Nyx.Engine.guid().

object_manager.cpp

reload

lua
Nyx.Engine.reload() — re-read the framework from disk after the current script call

returns. The whole point is editing a rotation without restarting the client.

object_manager.cpp

scan

lua
Nyx.Engine.scan(value) -> array of descriptor offsets whose 32-bit contents equal

value. Called with a number the client's own Lua API produced, it turns a guessed field offset into a checked one.

object_manager.cpp

setfov

lua
Nyx.Engine.setfov(radians) - override the vertical field of view used for

projection. 0 restores the camera's own field.

object_manager.cpp

unit

lua
Nyx.Engine.unit([guid]) -> table, or nil when the object is not in memory. Omitting

the guid returns the local player.

object_manager.cpp

units

lua
Nyx.Engine.units() -> array of unit tables, every unit and player the client has in

memory. Bounded so a capital city cannot produce an unbounded table.

object_manager.cpp

viewvec

lua
Nyx.Engine.viewvec(x, y, z) -> forward, right, up in camera space.

Exposes the dot products that projection is built on, without the field of view. That matters for calibration: the ORDER of units across the screen depends only on right/forward, not on the fov, so units can be matched to the client's own nameplates before the fov is known.

object_manager.cpp

w2s

lua
Nyx.Engine.w2s(x, y, z) -> screenX, screenY, onScreen. The projection the overlay

itself uses, exposed so scripts can anchor the client's own FontStrings and textures at world positions - which is how text and health bars get drawn without a font dependency in the engine.

object_manager.cpp

API reference generated from source.