Expose useful global graphnodes (#789)

* Add global node getters

* move pointer asterisk thing for consistency

* Run autogen

* Add geo prefix to new functions

* Run regen

* Rename functions

* run autogen

* Make viewport fields mutable

* Address code review comments
This commit is contained in:
Beckowl 2025-05-07 18:09:08 -03:00 committed by GitHub
parent 19880356eb
commit 7472aa9b0a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 303 additions and 3 deletions

View file

@ -21,7 +21,6 @@ type_mappings = {
exclude_structs = [
'SPTask',
'VblankHandler',
'GraphNodeRoot',
'MarioAnimDmaRelatedThing',
'UnusedArea28',
]

View file

@ -71,6 +71,7 @@ struct LuaObjectField* smlua_get_object_field_autogen(u16 lot, const char* key);
"""
override_field_names = {
"Area": {"unk04": "root"}
}
override_field_types = {
@ -95,6 +96,7 @@ override_field_invisible = {
"MarioState": [ "visibleToEnemies" ],
"NetworkPlayer": [ "gag", "moderator", "discordId" ],
"GraphNode": [ "_guard1", "_guard2" ],
"GraphNodeRoot": ["unk15", "views"],
"FnGraphNode": [ "luaTokenIndex" ],
"Object": [ "firstSurface" ],
"ModAudio": [ "sound", "decoder", "buffer", "bufferSize", "sampleCopiesTail" ],
@ -129,6 +131,7 @@ override_field_immutable = {
"GraphNodeObjectParent": [ "sharedChild" ],
"GraphNodePerspective": [ "unused" ],
"GraphNodeSwitchCase": [ "fnNode", "unused" ],
"GraphNodeRoot": ["node", "areaIndex", "numViews"],
"ObjectWarpNode": [ "next "],
"Animation": [ "length" ],
"AnimationTable": [ "count" ],

View file

@ -10584,6 +10584,36 @@ function get_os_name()
-- ...
end
--- @return GraphNodeRoot
--- Gets the current GraphNodeRoot
function geo_get_current_root()
-- ...
end
--- @return GraphNodeMasterList
--- Gets the current GraphNodeMasterList
function geo_get_current_master_list()
-- ...
end
--- @return GraphNodePerspective
--- Gets the current GraphNodePerspective
function geo_get_current_perspective()
-- ...
end
--- @return GraphNodeCamera
--- Gets the current GraphNodeCamera
function geo_get_current_camera()
-- ...
end
--- @return GraphNodeHeldObject
--- Gets the current GraphNodeHeldObject
function geo_get_current_held_object()
-- ...
end
--- @param name string
--- @return ModelExtendedId
--- Gets the extended model ID for the `name` of a `GeoLayout`

View file

@ -48,6 +48,7 @@
--- @field public surfaceRooms Pointer_integer
--- @field public terrainData Pointer_integer
--- @field public terrainType integer
--- @field public root GraphNodeRoot
--- @field public warpNodes ObjectWarpNode
--- @field public whirlpools Whirlpool[]
@ -950,6 +951,15 @@
--- @field public prevTimestamp number
--- @field public unused integer
--- @class GraphNodeRoot
--- @field public areaIndex integer
--- @field public height integer
--- @field public node GraphNode
--- @field public numViews integer
--- @field public width integer
--- @field public x integer
--- @field public y integer
--- @class GraphNodeRotation
--- @field public displayList Pointer_Gfx
--- @field public node GraphNode

View file

@ -4451,6 +4451,111 @@ Gets the name of the operating system the game is running on
<br />
## [geo_get_current_root](#geo_get_current_root)
### Description
Gets the current GraphNodeRoot
### Lua Example
`local GraphNodeRootValue = geo_get_current_root()`
### Parameters
- None
### Returns
[GraphNodeRoot](structs.md#GraphNodeRoot)
### C Prototype
`struct GraphNodeRoot* geo_get_current_root(void);`
[:arrow_up_small:](#)
<br />
## [geo_get_current_master_list](#geo_get_current_master_list)
### Description
Gets the current GraphNodeMasterList
### Lua Example
`local GraphNodeMasterListValue = geo_get_current_master_list()`
### Parameters
- None
### Returns
[GraphNodeMasterList](structs.md#GraphNodeMasterList)
### C Prototype
`struct GraphNodeMasterList* geo_get_current_master_list(void);`
[:arrow_up_small:](#)
<br />
## [geo_get_current_perspective](#geo_get_current_perspective)
### Description
Gets the current GraphNodePerspective
### Lua Example
`local GraphNodePerspectiveValue = geo_get_current_perspective()`
### Parameters
- None
### Returns
[GraphNodePerspective](structs.md#GraphNodePerspective)
### C Prototype
`struct GraphNodePerspective* geo_get_current_perspective(void);`
[:arrow_up_small:](#)
<br />
## [geo_get_current_camera](#geo_get_current_camera)
### Description
Gets the current GraphNodeCamera
### Lua Example
`local GraphNodeCameraValue = geo_get_current_camera()`
### Parameters
- None
### Returns
[GraphNodeCamera](structs.md#GraphNodeCamera)
### C Prototype
`struct GraphNodeCamera* geo_get_current_camera(void);`
[:arrow_up_small:](#)
<br />
## [geo_get_current_held_object](#geo_get_current_held_object)
### Description
Gets the current GraphNodeHeldObject
### Lua Example
`local GraphNodeHeldObjectValue = geo_get_current_held_object()`
### Parameters
- None
### Returns
[GraphNodeHeldObject](structs.md#GraphNodeHeldObject)
### C Prototype
`struct GraphNodeHeldObject* geo_get_current_held_object(void);`
[:arrow_up_small:](#)
<br />
---
# functions from smlua_model_utils.h

View file

@ -1916,6 +1916,11 @@
- [set_window_title](functions-6.md#set_window_title)
- [reset_window_title](functions-6.md#reset_window_title)
- [get_os_name](functions-6.md#get_os_name)
- [geo_get_current_root](functions-6.md#geo_get_current_root)
- [geo_get_current_master_list](functions-6.md#geo_get_current_master_list)
- [geo_get_current_perspective](functions-6.md#geo_get_current_perspective)
- [geo_get_current_camera](functions-6.md#geo_get_current_camera)
- [geo_get_current_held_object](functions-6.md#geo_get_current_held_object)
<br />

View file

@ -194,6 +194,7 @@
| surfaceRooms | `Pointer` <`integer`> | read-only |
| terrainData | `Pointer` <`integer`> | read-only |
| terrainType | `integer` | |
| root | [GraphNodeRoot](structs.md#GraphNodeRoot) | |
| warpNodes | [ObjectWarpNode](structs.md#ObjectWarpNode) | read-only |
| whirlpools | `Array` <`Whirlpool`> | |
@ -1434,6 +1435,22 @@
<br />
## [GraphNodeRoot](#GraphNodeRoot)
| Field | Type | Access |
| ----- | ---- | ------ |
| areaIndex | `integer` | read-only |
| height | `integer` | |
| node | [GraphNode](structs.md#GraphNode) | read-only |
| numViews | `integer` | read-only |
| width | `integer` | |
| x | `integer` | |
| y | `integer` | |
[:arrow_up_small:](#)
<br />
## [GraphNodeRotation](#GraphNodeRotation)
| Field | Type | Access |

View file

@ -166,7 +166,7 @@ static struct LuaObjectField sAnimationTableFields[LUA_ANIMATION_TABLE_FIELD_COU
{ "count", LVT_U32, offsetof(struct AnimationTable, count), true, LOT_NONE, 1, sizeof(u32) },
};
#define LUA_AREA_FIELD_COUNT 20
#define LUA_AREA_FIELD_COUNT 21
static struct LuaObjectField sAreaFields[LUA_AREA_FIELD_COUNT] = {
{ "camera", LVT_COBJECT_P, offsetof(struct Area, camera), false, LOT_CAMERA, 1, sizeof(struct Camera*) },
{ "dialog", LVT_U8, offsetof(struct Area, dialog), false, LOT_NONE, 2, sizeof(u8) },
@ -186,7 +186,7 @@ static struct LuaObjectField sAreaFields[LUA_AREA_FIELD_COUNT] = {
{ "surfaceRooms", LVT_S8_P, offsetof(struct Area, surfaceRooms), true, LOT_POINTER, 1, sizeof(s8*) },
{ "terrainData", LVT_S16_P, offsetof(struct Area, terrainData), true, LOT_POINTER, 1, sizeof(s16*) },
{ "terrainType", LVT_U16, offsetof(struct Area, terrainType), false, LOT_NONE, 1, sizeof(u16) },
// { "unk04", LVT_COBJECT_P, offsetof(struct Area, unk04), true, LOT_???, 1, sizeof(struct GraphNodeRoot*) }, <--- UNIMPLEMENTED
{ "root", LVT_COBJECT_P, offsetof(struct Area, unk04), false, LOT_GRAPHNODEROOT, 1, sizeof(struct GraphNodeRoot*) },
// { "unused28", LVT_COBJECT_P, offsetof(struct Area, unused28), false, LOT_???, 1, sizeof(struct UnusedArea28*) }, <--- UNIMPLEMENTED
{ "warpNodes", LVT_COBJECT_P, offsetof(struct Area, warpNodes), true, LOT_OBJECTWARPNODE, 1, sizeof(struct ObjectWarpNode*) },
{ "whirlpools", LVT_COBJECT_P, offsetof(struct Area, whirlpools), false, LOT_WHIRLPOOL, 2, sizeof(struct Whirlpool*) },
@ -1196,6 +1196,17 @@ static struct LuaObjectField sGraphNodePerspectiveFields[LUA_GRAPH_NODE_PERSPECT
{ "unused", LVT_S32, offsetof(struct GraphNodePerspective, unused), true, LOT_NONE, 1, sizeof(s32) },
};
#define LUA_GRAPH_NODE_ROOT_FIELD_COUNT 7
static struct LuaObjectField sGraphNodeRootFields[LUA_GRAPH_NODE_ROOT_FIELD_COUNT] = {
{ "areaIndex", LVT_U8, offsetof(struct GraphNodeRoot, areaIndex), true, LOT_NONE, 1, sizeof(u8) },
{ "height", LVT_S16, offsetof(struct GraphNodeRoot, height), false, LOT_NONE, 1, sizeof(s16) },
{ "node", LVT_COBJECT, offsetof(struct GraphNodeRoot, node), true, LOT_GRAPHNODE, 1, sizeof(struct GraphNode) },
{ "numViews", LVT_S16, offsetof(struct GraphNodeRoot, numViews), true, LOT_NONE, 1, sizeof(s16) },
{ "width", LVT_S16, offsetof(struct GraphNodeRoot, width), false, LOT_NONE, 1, sizeof(s16) },
{ "x", LVT_S16, offsetof(struct GraphNodeRoot, x), false, LOT_NONE, 1, sizeof(s16) },
{ "y", LVT_S16, offsetof(struct GraphNodeRoot, y), false, LOT_NONE, 1, sizeof(s16) },
};
#define LUA_GRAPH_NODE_ROTATION_FIELD_COUNT 5
static struct LuaObjectField sGraphNodeRotationFields[LUA_GRAPH_NODE_ROTATION_FIELD_COUNT] = {
{ "displayList", LVT_COBJECT_P, offsetof(struct GraphNodeRotation, displayList), false, LOT_GFX, 1, sizeof(Gfx*) },
@ -2844,6 +2855,7 @@ struct LuaObjectTable sLuaObjectAutogenTable[LOT_AUTOGEN_MAX - LOT_AUTOGEN_MIN]
{ LOT_GRAPHNODEOBJECTPARENT, sGraphNodeObjectParentFields, LUA_GRAPH_NODE_OBJECT_PARENT_FIELD_COUNT },
{ LOT_GRAPHNODEORTHOPROJECTION, sGraphNodeOrthoProjectionFields, LUA_GRAPH_NODE_ORTHO_PROJECTION_FIELD_COUNT },
{ LOT_GRAPHNODEPERSPECTIVE, sGraphNodePerspectiveFields, LUA_GRAPH_NODE_PERSPECTIVE_FIELD_COUNT },
{ LOT_GRAPHNODEROOT, sGraphNodeRootFields, LUA_GRAPH_NODE_ROOT_FIELD_COUNT },
{ LOT_GRAPHNODEROTATION, sGraphNodeRotationFields, LUA_GRAPH_NODE_ROTATION_FIELD_COUNT },
{ LOT_GRAPHNODESCALE, sGraphNodeScaleFields, LUA_GRAPH_NODE_SCALE_FIELD_COUNT },
{ LOT_GRAPHNODESHADOW, sGraphNodeShadowFields, LUA_GRAPH_NODE_SHADOW_FIELD_COUNT },
@ -2964,6 +2976,7 @@ const char *sLuaLotNames[] = {
[LOT_GRAPHNODEOBJECTPARENT] = "GraphNodeObjectParent",
[LOT_GRAPHNODEORTHOPROJECTION] = "GraphNodeOrthoProjection",
[LOT_GRAPHNODEPERSPECTIVE] = "GraphNodePerspective",
[LOT_GRAPHNODEROOT] = "GraphNodeRoot",
[LOT_GRAPHNODEROTATION] = "GraphNodeRotation",
[LOT_GRAPHNODESCALE] = "GraphNodeScale",
[LOT_GRAPHNODESHADOW] = "GraphNodeShadow",

View file

@ -69,6 +69,7 @@ enum LuaObjectAutogenType {
LOT_GRAPHNODEOBJECTPARENT,
LOT_GRAPHNODEORTHOPROJECTION,
LOT_GRAPHNODEPERSPECTIVE,
LOT_GRAPHNODEROOT,
LOT_GRAPHNODEROTATION,
LOT_GRAPHNODESCALE,
LOT_GRAPHNODESHADOW,

View file

@ -31716,6 +31716,81 @@ int smlua_func_get_os_name(UNUSED lua_State* L) {
return 1;
}
int smlua_func_geo_get_current_root(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 0) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "geo_get_current_root", 0, top);
return 0;
}
smlua_push_object(L, LOT_GRAPHNODEROOT, geo_get_current_root(), NULL);
return 1;
}
int smlua_func_geo_get_current_master_list(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 0) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "geo_get_current_master_list", 0, top);
return 0;
}
smlua_push_object(L, LOT_GRAPHNODEMASTERLIST, geo_get_current_master_list(), NULL);
return 1;
}
int smlua_func_geo_get_current_perspective(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 0) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "geo_get_current_perspective", 0, top);
return 0;
}
smlua_push_object(L, LOT_GRAPHNODEPERSPECTIVE, geo_get_current_perspective(), NULL);
return 1;
}
int smlua_func_geo_get_current_camera(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 0) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "geo_get_current_camera", 0, top);
return 0;
}
smlua_push_object(L, LOT_GRAPHNODECAMERA, geo_get_current_camera(), NULL);
return 1;
}
int smlua_func_geo_get_current_held_object(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 0) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "geo_get_current_held_object", 0, top);
return 0;
}
smlua_push_object(L, LOT_GRAPHNODEHELDOBJECT, geo_get_current_held_object(), NULL);
return 1;
}
/////////////////////////
// smlua_model_utils.h //
/////////////////////////
@ -35455,6 +35530,11 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "set_window_title", smlua_func_set_window_title);
smlua_bind_function(L, "reset_window_title", smlua_func_reset_window_title);
smlua_bind_function(L, "get_os_name", smlua_func_get_os_name);
smlua_bind_function(L, "geo_get_current_root", smlua_func_geo_get_current_root);
smlua_bind_function(L, "geo_get_current_master_list", smlua_func_geo_get_current_master_list);
smlua_bind_function(L, "geo_get_current_perspective", smlua_func_geo_get_current_perspective);
smlua_bind_function(L, "geo_get_current_camera", smlua_func_geo_get_current_camera);
smlua_bind_function(L, "geo_get_current_held_object", smlua_func_geo_get_current_held_object);
// smlua_model_utils.h
smlua_bind_function(L, "smlua_model_util_get_id", smlua_func_smlua_model_util_get_id);

View file

@ -545,3 +545,25 @@ const char* get_os_name(void) {
return "Unknown";
#endif
}
///
struct GraphNodeRoot* geo_get_current_root(void) {
return gCurGraphNodeRoot;
}
struct GraphNodeMasterList* geo_get_current_master_list(void) {
return gCurGraphNodeMasterList;
}
struct GraphNodePerspective* geo_get_current_perspective(void) {
return gCurGraphNodeCamFrustum;
}
struct GraphNodeCamera* geo_get_current_camera(void) {
return gCurGraphNodeCamera;
}
struct GraphNodeHeldObject* geo_get_current_held_object(void) {
return gCurGraphNodeHeldObject;
}

View file

@ -207,4 +207,19 @@ void reset_window_title(void);
/* |description|Gets the name of the operating system the game is running on|descriptionEnd| */
const char* get_os_name(void);
/* |description|Gets the current GraphNodeRoot|descriptionEnd|*/
struct GraphNodeRoot* geo_get_current_root(void);
/* |description|Gets the current GraphNodeMasterList|descriptionEnd|*/
struct GraphNodeMasterList* geo_get_current_master_list(void);
/* |description|Gets the current GraphNodePerspective|descriptionEnd|*/
struct GraphNodePerspective* geo_get_current_perspective(void);
/* |description|Gets the current GraphNodeCamera|descriptionEnd|*/
struct GraphNodeCamera* geo_get_current_camera(void);
/* |description|Gets the current GraphNodeHeldObject|descriptionEnd|*/
struct GraphNodeHeldObject* geo_get_current_held_object(void);
#endif