diff --git a/autogen/common.py b/autogen/common.py index 859d042e9..77c503f98 100644 --- a/autogen/common.py +++ b/autogen/common.py @@ -21,7 +21,6 @@ type_mappings = { exclude_structs = [ 'SPTask', 'VblankHandler', - 'GraphNodeRoot', 'MarioAnimDmaRelatedThing', 'UnusedArea28', ] diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py index 49bba3a65..bcf772be4 100644 --- a/autogen/convert_structs.py +++ b/autogen/convert_structs.py @@ -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" ], diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index befdcbbec..888d43eab 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -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` diff --git a/autogen/lua_definitions/structs.lua b/autogen/lua_definitions/structs.lua index 4707df8ef..3fe65dc84 100644 --- a/autogen/lua_definitions/structs.lua +++ b/autogen/lua_definitions/structs.lua @@ -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 diff --git a/docs/lua/functions-6.md b/docs/lua/functions-6.md index ad3622094..82a49b42c 100644 --- a/docs/lua/functions-6.md +++ b/docs/lua/functions-6.md @@ -4451,6 +4451,111 @@ Gets the name of the operating system the game is running on
+## [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:](#) + +
+ +## [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:](#) + +
+ +## [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:](#) + +
+ +## [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:](#) + +
+ +## [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:](#) + +
+ --- # functions from smlua_model_utils.h diff --git a/docs/lua/functions.md b/docs/lua/functions.md index bfe73e561..0aa109162 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -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)
diff --git a/docs/lua/structs.md b/docs/lua/structs.md index a5578314a..740fab0e9 100644 --- a/docs/lua/structs.md +++ b/docs/lua/structs.md @@ -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 @@
+## [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:](#) + +
+ ## [GraphNodeRotation](#GraphNodeRotation) | Field | Type | Access | diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index 704603c9e..77b60409e 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -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", diff --git a/src/pc/lua/smlua_cobject_autogen.h b/src/pc/lua/smlua_cobject_autogen.h index 84e3223ad..53a9ef6e8 100644 --- a/src/pc/lua/smlua_cobject_autogen.h +++ b/src/pc/lua/smlua_cobject_autogen.h @@ -69,6 +69,7 @@ enum LuaObjectAutogenType { LOT_GRAPHNODEOBJECTPARENT, LOT_GRAPHNODEORTHOPROJECTION, LOT_GRAPHNODEPERSPECTIVE, + LOT_GRAPHNODEROOT, LOT_GRAPHNODEROTATION, LOT_GRAPHNODESCALE, LOT_GRAPHNODESHADOW, diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 233771d59..62caec119 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -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); diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c index 83f14bc71..1f2d9e56f 100644 --- a/src/pc/lua/utils/smlua_misc_utils.c +++ b/src/pc/lua/utils/smlua_misc_utils.c @@ -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; +} \ No newline at end of file diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h index 22e3765fe..ad6433f89 100644 --- a/src/pc/lua/utils/smlua_misc_utils.h +++ b/src/pc/lua/utils/smlua_misc_utils.h @@ -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