diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py
index 308b79ea7..b126713bc 100644
--- a/autogen/convert_structs.py
+++ b/autogen/convert_structs.py
@@ -260,7 +260,9 @@ def table_to_string(table):
def parse_struct(struct_str, sortFields = True):
struct = {}
- identifier = struct_str.split(' ')[1]
+ match = re.match(r"struct\s*(\w+)?\s*{(.*?)}\s*(\w+)?\s*", struct_str.replace("typedef ", ""), re.DOTALL)
+ struct_name, body, trailing_name = match.groups()
+ identifier = struct_name if struct_name else trailing_name
struct['identifier'] = identifier
body = struct_str.split('{', 1)[1].rsplit('}', 1)[0]
@@ -277,7 +279,9 @@ def parse_struct(struct_str, sortFields = True):
field_type, field_id = field_str.strip().rsplit('*', 1)
field_type = field_type.strip() + '*'
else:
- field_type, field_id = field_str.strip().rsplit(' ', 1)
+ split_parts = re.split(r'\s+', field_str.strip())
+ field_type = ' '.join(split_parts[:-1])
+ field_id = split_parts[-1]
if '[' in field_id:
array_str = '[' + field_id.split('[', 1)[1]
diff --git a/autogen/extract_structs.py b/autogen/extract_structs.py
index f70c2867e..a2d65f1e9 100644
--- a/autogen/extract_structs.py
+++ b/autogen/extract_structs.py
@@ -67,7 +67,7 @@ def extract_structs(filename):
continue
if ';' not in line:
continue
- if not line.startswith('struct '):
+ if not line.startswith('struct ') and not line.startswith('typedef struct '):
continue
txt += line + '\n'
diff --git a/autogen/lua_definitions/structs.lua b/autogen/lua_definitions/structs.lua
index 81e22cca1..ab2652682 100644
--- a/autogen/lua_definitions/structs.lua
+++ b/autogen/lua_definitions/structs.lua
@@ -2302,6 +2302,10 @@
--- @field public posPitch integer
--- @field public posYaw integer
+--- @class Vtx_Interp
+--- @field public n string
+--- @field public ob Array_number
+
--- @class WallCollisionData
--- @field public normalAddition Vec3f
--- @field public normalCount integer
diff --git a/docs/lua/structs.md b/docs/lua/structs.md
index d58bde6c2..3f5e4007c 100644
--- a/docs/lua/structs.md
+++ b/docs/lua/structs.md
@@ -109,6 +109,7 @@
- [Vec3s](#Vec3s)
- [Vec4f](#Vec4f)
- [Vec4s](#Vec4s)
+- [Vtx_Interp](#Vtx_Interp)
- [WallCollisionData](#WallCollisionData)
- [WarpNode](#WarpNode)
- [WarpTransition](#WarpTransition)
@@ -3197,6 +3198,17 @@
+## [Vtx_Interp](#Vtx_Interp)
+
+| Field | Type | Access |
+| ----- | ---- | ------ |
+| n | `string` | |
+| ob | `Array` <`number`> | |
+
+[:arrow_up_small:](#)
+
+
+
## [WallCollisionData](#WallCollisionData)
| Field | Type | Access |
diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c
index dddda15db..98827be89 100644
--- a/src/pc/lua/smlua_cobject_autogen.c
+++ b/src/pc/lua/smlua_cobject_autogen.c
@@ -2679,6 +2679,12 @@ static struct LuaObjectField sTransitionInfoFields[LUA_TRANSITION_INFO_FIELD_COU
{ "posYaw", LVT_S16, offsetof(struct TransitionInfo, posYaw), false, LOT_NONE, 1, sizeof(s16) },
};
+#define LUA_VTX__INTERP_FIELD_COUNT 2
+static struct LuaObjectField sVtx_InterpFields[LUA_VTX__INTERP_FIELD_COUNT] = {
+ { "n", LVT_STRING, offsetof(struct Vtx_Interp, n), false, LOT_NONE, 1, sizeof(signed char) },
+ { "ob", LVT_FLOAT, offsetof(struct Vtx_Interp, ob), false, LOT_NONE, 3, sizeof(float) },
+};
+
#define LUA_WALL_COLLISION_DATA_FIELD_COUNT 10
static struct LuaObjectField sWallCollisionDataFields[LUA_WALL_COLLISION_DATA_FIELD_COUNT] = {
{ "normalAddition", LVT_COBJECT, offsetof(struct WallCollisionData, normalAddition), true, LOT_VEC3F, 1, sizeof(Vec3f) },
@@ -2854,6 +2860,7 @@ struct LuaObjectTable sLuaObjectAutogenTable[LOT_AUTOGEN_MAX - LOT_AUTOGEN_MIN]
{ LOT_SURFACE, sSurfaceFields, LUA_SURFACE_FIELD_COUNT },
{ LOT_TEXTUREINFO, sTextureInfoFields, LUA_TEXTURE_INFO_FIELD_COUNT },
{ LOT_TRANSITIONINFO, sTransitionInfoFields, LUA_TRANSITION_INFO_FIELD_COUNT },
+ { LOT_VTX_INTERP, sVtx_InterpFields, LUA_VTX__INTERP_FIELD_COUNT },
{ LOT_WALLCOLLISIONDATA, sWallCollisionDataFields, LUA_WALL_COLLISION_DATA_FIELD_COUNT },
{ LOT_WARPNODE, sWarpNodeFields, LUA_WARP_NODE_FIELD_COUNT },
{ LOT_WARPTRANSITION, sWarpTransitionFields, LUA_WARP_TRANSITION_FIELD_COUNT },
diff --git a/src/pc/lua/smlua_cobject_autogen.h b/src/pc/lua/smlua_cobject_autogen.h
index bb15d56f3..286699f94 100644
--- a/src/pc/lua/smlua_cobject_autogen.h
+++ b/src/pc/lua/smlua_cobject_autogen.h
@@ -114,6 +114,7 @@ enum LuaObjectAutogenType {
LOT_SURFACE,
LOT_TEXTUREINFO,
LOT_TRANSITIONINFO,
+ LOT_VTX_INTERP,
LOT_WALLCOLLISIONDATA,
LOT_WARPNODE,
LOT_WARPTRANSITION,