sc_entities_v1.get_transform
The entity’s position (3 doubles) and rotation (x, y, z, w) in its zone’s local frame, and that zone’s id. Any out pointer may be NULL to skip it, not all of them. Outputs are zeroed on failure. SCO_NOT_FOUND: the entity isn’t streamed in, or isn’t in a zone. SCO_UNAVAILABLE: no “game.entities.transform”. Read-only: last_error(NULL, …). Implementation also FAILED for changed rotation slots or read fault; id 0 BAD_ARG.
Signature
Section titled “Signature”sco_result (*)(uint64_t, double *, double *, uint64_t *)Service and availability
Section titled “Service and availability”| Property | Value |
|---|---|
| Symbol | sc_entities_v1.get_transform |
| Record ID | sc-entities-v1-get-transform |
| Service | game.entities |
| Table | sc_entities_v1 |
| Version macro | SC_ENTITIES_VERSION_1_1 |
| Packed table version | 65537 |
| Since / availability | size >= 32; 1.0 |
| Complete member extent (x64 bytes) | 32 |
| Table size (x64 bytes) | 96 |
Parameters and buffers
Section titled “Parameters and buffers”sco_result (*get_transform)(uint64_t entity_id, double out_pos[3], double out_rot_xyzw[4], uint64_t* out_zone_id);
The entity’s position (3 doubles) and rotation (x, y, z, w) in its zone’s local frame, and that zone’s id. Any out pointer may be NULL to skip it, not all of them. Outputs are zeroed on failure. SCO_NOT_FOUND: the entity isn’t streamed in, or isn’t in a zone. SCO_UNAVAILABLE: no “game.entities.transform”. Read-only: last_error(NULL, …). Implementation also FAILED for changed rotation slots or read fault; id 0 BAD_ARG.
Results and failures
Section titled “Results and failures”Absent table: query_service NOT_FOUND; missing operation capability: UNAVAILABLE (alive: 0); invalid/released self: BAD_ARG. Additional failures/output state unspecified unless described in the buffer contract.
Absent capability
Section titled “Absent capability”Absent table: query_service NOT_FOUND
Ownership
Section titled “Ownership”Caller buffers; no allocation crosses boundary. Host owns entity/watch tracking; IDs are session values. Internal allocation unspecified.
Thread affinity
Section titled “Thread affinity”Game thread only (WRONG_THREAD elsewhere, alive returns 0); last_error any thread. Recursive reentrancy unspecified except unwatch in callback.
Callback context
Section titled “Callback context”unspecified
Reentrancy
Section titled “Reentrancy”unspecified
Cleanup and cancellation
Section titled “Cleanup and cancellation”No in-flight cancellation entrypoint; owned entities removed and watches ended on ordinary unload/non-retained crash cleanup, except kept entities. Retained-provider faults skip owner resource-release hooks and require restart; backing resources remain retained, not safe for cached calls.
Language mappings
Section titled “Language mappings”Status labels are copied verbatim from the catalogue: direct is native access; typed-wrapper is wrapper-backed; restricted is a subset/adaptation; unsupported means no supported route is established. No status implies universal safety.
| Language | Catalogue status | Source evidence / wrapper tokens |
|---|---|---|
| c | direct | include/sc_entities.h(*get_transform) |
| cpp | typed-wrapper | include/scosdk/game/entities.hppreturn t_ && Covers(t_->size, offsetof(sc_entities_v1, get_transform)) && t_->get_transform ? t_->get_transform(id, pos, rot, &zoneId) : SCO_UNAVAILABLE; |
| csharp | typed-wrapper | sdk/csharp/Sco.Sdk/Game/Entities.csr = _t->get_transform(id, p, q, &z); |
| lua | typed-wrapper | plugins/lua/sco_lua_game.cconst sco_result r = GAME_MEMBER(e, sc_entities_v1, get_transform) ? e->get_transform(id, pos, rot, &zone) : SCO_UNAVAILABLE; |
Examples
Section titled “Examples”None identified in the catalogue; this is not proof none can exist.
- tests/abi_game_entities.c
- tests/test_app.cpp
- tests/test_lua.cpp
- tests/test_language_routes.cpp
- sdk/csharp/Sco.Sdk.Tests/GameFakeHost.cs
- tests/test_language_routes.c
- tools/test.sh
- sdk/csharp/Sco.Sdk.Tests/GameLayout.cs
ABI pins prove layout, not semantic behavior or a live game session.