Autogenerated Lua documentation

This commit is contained in:
MysterD 2022-01-29 22:47:22 -08:00
parent 3d5d0b5306
commit c170984471
13 changed files with 10394 additions and 2778 deletions

5
autogen/autogen.sh Normal file
View File

@ -0,0 +1,5 @@
#!/usr/bin/bash
python3 ./autogen/convert_structs.py
python3 ./autogen/convert_functions.py
python3 ./autogen/convert_constants.py

View File

@ -63,3 +63,24 @@ def gen_comment_header(f):
s += "" + comment_l + "\n"
s += "\n"
return s
def translate_type_to_lua(ptype):
if ptype.startswith('struct '):
return ptype.split(' ')[1].replace('*', ''), True
if 'Vec3' in ptype:
return ptype, True
if ptype.startswith('enum '):
return 'integer', False
if ptype in usf_types:
if ptype.startswith('f'):
return 'number', False
else:
return 'integer', False
if 'void' == ptype:
return None, False
return ptype, False

View File

@ -1,18 +1,118 @@
import os
from common import *
in_filename = os.path.dirname(os.path.realpath(__file__)) + "/lua_constants/constants.lua"
out_filename = os.path.dirname(os.path.realpath(__file__)) + '/../src/pc/lua/smlua_constants_autogen.c'
docs_lua_constants = 'docs/lua/constants.md'
############################################################################
def build_constants():
built = "char gSmluaConstants[] = "
with open(in_filename) as fp:
lines = fp.readlines()
for line in lines:
if line.startswith('--'):
continue
if line.strip() == '':
continue
built += '"' + line.replace('\n', '').replace('\r', '') + '\\n"' + "\n"
built += ';'
with open(out_filename, 'w') as out:
out.write(built)
############################################################################
def doc_process(lines):
processed = []
cur = None
built = "char gSmluaConstants[] = "
with open(in_filename) as fp:
lines = fp.readlines()
for line in lines:
if line.startswith('--'):
continue
if line.strip() == '':
continue
built += '"' + line.replace('\n', '').replace('\r', '') + '\\n"' + "\n"
built += ';'
with open(out_filename, 'w') as out:
out.write(built)
if line.startswith('--'):
spl = line.split()
if len(spl) == 3 and spl[0] == spl[2]:
if cur != None:
processed.append(cur)
cur = {}
cur['category'] = spl[1].strip()
cur['constants'] = []
continue
if len(line.strip()) == 0:
if len(cur['constants']) == 0:
continue
if len(cur['constants'][-1]) == 0:
continue
cur['constants'].append('')
continue
if '=' not in line:
continue
if line[0] < 'A' or line[0] > 'Z':
continue
cur['constants'].append(line.strip().split(' ')[0])
if cur != None:
processed.append(cur)
processed = sorted(processed, key=lambda d: d['category'])
return processed
def doc_build_category(p):
category = p['category']
constants = p['constants']
if len(constants[-1]) == 0:
constants = constants[:-1]
if len(constants) == 0:
return
s = '\n## [%s](%s)\n' % (category, category)
for c in constants:
if len(c) == 0:
s += '\n<br />\n\n'
continue
s += '- %s\n' % c
s += '\n[:arrow_up_small:](#)\n\n<br />\n'
return s
def doc_build_index(processed):
s = '# Supported Constants\n'
for p in processed:
s += '- [%s](#%s)\n' % (p['category'], p['category'])
s += '\n<br />\n'
return s
def doc_build(processed):
s = '## [:rewind: Lua Reference](lua.md)\n\n'
s += doc_build_index(processed)
for p in processed:
s += doc_build_category(p)
with open(get_path(docs_lua_constants), 'w') as out:
out.write(s)
def doc_constants():
with open(in_filename) as fp:
lines = fp.readlines()
processed = doc_process(lines)
doc_build(processed)
############################################################################
build_constants()
doc_constants()

View File

@ -7,6 +7,7 @@ integer_types = ["u8", "u16", "u32", "u64", "s8", "s16", "s32", "s64", "int"]
number_types = ["f32", "float"]
param_override_build = {}
out_filename = 'src/pc/lua/smlua_functions_autogen.c'
docs_lua_functions = 'docs/lua/functions.md'
###########################################################
@ -75,18 +76,10 @@ param_override_build['Vec3s'] = {
'after': param_vec3s_after_call
}
###########################################################
############################################################################
built_functions = ""
built_binds = ""
#######
do_extern = False
header_h = ""
functions = []
def reject_line(line):
if len(line) == 0:
return True
@ -104,46 +97,7 @@ def normalize_type(t):
t = parts[0] + ' ' + parts[1].replace(' ', '')
return t
def process_line(line):
function = {}
line = line.strip()
function['line'] = line
line = line.replace('UNUSED', '')
match = re.search('[a-zA-Z0-9_]+\(', line)
function['type'] = normalize_type(line[0:match.span()[0]])
function['identifier'] = match.group()[0:-1]
function['params'] = []
params_str = line.split('(', 1)[1].rsplit(')', 1)[0].strip()
if len(params_str) == 0 or params_str == 'void':
pass
else:
param_index = 0
for param_str in params_str.split(','):
param = {}
param_str = param_str.strip()
if param_str.endswith('*') or ' ' not in param_str:
param['type'] = normalize_type(param_str)
param['identifier'] = 'arg%d' % param_index
else:
match = re.search('[a-zA-Z0-9_]+$', param_str)
param['type'] = normalize_type(param_str[0:match.span()[0]])
param['identifier'] = match.group()
function['params'].append(param)
param_index += 1
functions.append(function)
def process_lines(file_str):
for line in file_str.splitlines():
if reject_line(line):
global rejects
rejects += line + '\n'
continue
process_line(line)
############################################################################
def build_param(param, i):
ptype = param['type']
@ -192,7 +146,9 @@ def build_call(function):
return ' %s(L, %s);\n' % (lfunc, ccall)
def build_function(function):
def build_function(function, do_extern):
s = ''
if len(function['params']) <= 0:
s = 'int smlua_func_%s(UNUSED lua_State* L) {\n' % function['identifier']
else:
@ -207,7 +163,6 @@ def build_function(function):
i += 1
s += '\n'
global do_extern
if do_extern:
s += ' extern %s\n' % function['line']
@ -225,12 +180,16 @@ def build_function(function):
if 'UNIMPLEMENTED' in s:
s = "/*\n" + s + "*/\n"
global built_functions
built_functions += s + "\n"
return s + "\n"
def build_functions():
for function in functions:
build_function(function)
def build_functions(processed_files):
s = ''
for processed_file in processed_files:
s += gen_comment_header(processed_file['filename'])
for function in processed_file['functions']:
s += build_function(function, processed_file['extern'])
return s
def build_bind(function):
s = 'smlua_bind_function(L, "%s", smlua_func_%s);' % (function['identifier'], function['identifier'])
@ -238,45 +197,172 @@ def build_bind(function):
s = ' ' + s
else:
s = ' //' + s + ' <--- UNIMPLEMENTED'
global built_binds
built_binds += s + "\n"
return s + "\n"
def build_binds(fname):
global built_binds
built_binds += "\n // " + fname.split('/')[-1] + "\n"
for function in functions:
build_bind(function)
def build_binds(processed_files):
s = ''
for processed_file in processed_files:
s += "\n // " + processed_file['filename'] + "\n"
for function in processed_file['functions']:
s += build_bind(function)
return s
############################################################################
def process_function(line):
function = {}
line = line.strip()
function['line'] = line
line = line.replace('UNUSED', '')
match = re.search('[a-zA-Z0-9_]+\(', line)
function['type'] = normalize_type(line[0:match.span()[0]])
function['identifier'] = match.group()[0:-1]
function['params'] = []
params_str = line.split('(', 1)[1].rsplit(')', 1)[0].strip()
if len(params_str) == 0 or params_str == 'void':
pass
else:
param_index = 0
for param_str in params_str.split(','):
param = {}
param_str = param_str.strip()
if param_str.endswith('*') or ' ' not in param_str:
param['type'] = normalize_type(param_str)
param['identifier'] = 'arg%d' % param_index
else:
match = re.search('[a-zA-Z0-9_]+$', param_str)
param['type'] = normalize_type(param_str[0:match.span()[0]])
param['identifier'] = match.group()
function['params'].append(param)
param_index += 1
return function
def process_functions(file_str):
functions = []
for line in file_str.splitlines():
if reject_line(line):
global rejects
rejects += line + '\n'
continue
functions.append(process_function(line))
functions = sorted(functions, key=lambda d: d['identifier'])
return functions
def process_file(fname):
functions.clear()
global do_extern
do_extern = fname.endswith(".c")
processed_file = {}
processed_file['filename'] = fname.replace('\\', '/').split('/')[-1]
processed_file['extern'] = fname.endswith('.c')
with open(fname) as file:
process_lines(file.read())
build_functions()
build_binds(fname)
processed_file['functions'] = process_functions(file.read())
return processed_file
def process_files():
processed_files = []
dir_path = os.path.dirname(os.path.realpath(__file__)) + '/lua_functions/'
files = os.listdir(dir_path)
files = sorted(os.listdir(dir_path))
for f in files:
comment_header = "// " + f + " //"
comment_line = "/" * len(comment_header)
processed_files.append(process_file(dir_path + f))
return processed_files
global built_functions
built_functions += gen_comment_header(f)
############################################################################
process_file(dir_path + f)
def doc_function_index(processed_files):
s = '# Supported Functions\n'
for processed_file in processed_files:
s += '- %s\n' % processed_file['filename']
for function in processed_file['functions']:
s += ' - [%s](#%s)\n' % (function['identifier'], function['identifier'])
s += '\n<br />\n\n'
return s
def doc_function(function):
fid = function['identifier']
s = '\n## [%s](#%s)\n' % (fid, fid)
rtype, rlink = translate_type_to_lua(function['type'])
param_str = ', '.join([x['identifier'] for x in function['params']])
s += "\n### Lua Example\n"
if rtype != None:
s += "`local %sValue = %s(%s)`\n" % (rtype, fid, param_str)
else:
s += "`%s(%s)`\n" % (fid, param_str)
s += '\n### Parameters\n'
if len(function['params']) > 0:
s += '| Field | Type |\n'
s += '| ----- | ---- |\n'
for param in function['params']:
pid = param['identifier']
ptype = param['type']
ptype, plink = translate_type_to_lua(ptype)
if plink:
s += '| %s | [%s](structs.md#%s) |\n' % (pid, ptype, ptype)
continue
s += '| %s | %s |\n' % (pid, ptype)
else:
s += '- None\n'
s += '\n### Returns\n'
if rtype != None:
if rlink:
s += '[%s](structs.md#%s)\n' % (rtype, rtype)
else:
s += '- %s\n' % rtype
else:
s += '- None\n'
s += '\n### C Prototype\n'
s += '`%s`\n' % function['line'].strip()
s += '\n[:arrow_up_small:](#)\n\n<br />\n'
return s
def doc_functions(functions):
s = ''
for function in functions:
s += doc_function(function)
return s
def doc_files(processed_files):
s = '## [:rewind: Lua Reference](lua.md)\n\n'
s += doc_function_index(processed_files)
for processed_file in processed_files:
s += '\n---'
s += '\n# functions from %s\n\n<br />\n\n' % processed_file['filename']
s += doc_functions(processed_file['functions'])
with open(get_path(docs_lua_functions), 'w') as out:
out.write(s)
############################################################################
def main():
process_files()
processed_files = process_files()
built_functions = build_functions(processed_files)
built_binds = build_binds(processed_files)
filename = get_path(out_filename)
with open(filename, 'w') as out:
out.write(template.replace("$[FUNCTIONS]", built_functions).replace("$[BINDS]", built_binds))
print('REJECTS:')
print(rejects)
doc_files(processed_files)
if __name__ == '__main__':
main()

View File

@ -13,6 +13,7 @@ in_files = [
]
smlua_cobject_autogen = 'src/pc/lua/smlua_cobject_autogen'
docs_lua_structs = 'docs/lua/structs.md'
c_template = """/* THIS FILE IS AUTOGENERATED */
/* SHOULD NOT BE MANUALLY CHANGED */
@ -56,6 +57,11 @@ override_field_immutable = {
"Character": [ "*" ],
}
sLuaManuallyDefinedStructs = [
'struct Vec3f { float x; float y; float z; }',
'struct Vec3s { s16 x; s16 y; s16 z; }'
]
############################################################################
def strip_internal_blocks(body):
@ -149,6 +155,8 @@ def parse_struct(struct_str):
struct['fields'].append(field)
struct['fields'] = sorted(struct['fields'], key=lambda d: d['identifier'])
return struct
def parse_structs(struct_strs):
@ -162,28 +170,34 @@ def parse_structs(struct_strs):
sLuaObjectTable = []
sLotAutoGenList = []
def get_struct_field_info(struct, field):
sid = struct['identifier']
fid = field['identifier']
ftype = field['type']
if sid in override_field_names and fid in override_field_names[sid]:
fid = override_field_names[sid][fid]
if sid in override_field_types and fid in override_field_types[sid]:
ftype = override_field_types[sid][fid]
lvt = translate_type_to_lvt(ftype)
lot = translate_type_to_lot(ftype)
fimmutable = str(lvt == 'LVT_COBJECT' or lvt == 'LVT_COBJECT_P').lower()
if sid in override_field_immutable:
if fid in override_field_immutable[sid] or '*' in override_field_immutable[sid]:
fimmutable = 'true'
return fid, ftype, fimmutable, lvt, lot
def build_struct(struct):
sid = struct['identifier']
# build up table and track column width
field_table = []
for field in struct['fields']:
fid = field['identifier']
ftype = field['type']
if sid in override_field_names and fid in override_field_names[sid]:
fid = override_field_names[sid][fid]
if sid in override_field_types and fid in override_field_types[sid]:
ftype = override_field_types[sid][fid]
lvt = translate_type_to_lvt(ftype)
lot = translate_type_to_lot(ftype)
fimmutable = str(lvt == 'LVT_COBJECT' or lvt == 'LVT_COBJECT_P').lower()
if sid in override_field_immutable:
if fid in override_field_immutable[sid] or '*' in override_field_immutable[sid]:
fimmutable = 'true'
fid, ftype, fimmutable, lvt, lot = get_struct_field_info(struct, field)
row = []
row.append(' { ' )
@ -262,6 +276,57 @@ def build_includes():
s += '#include "%s"\n' % in_file
return s
############################################################################
def doc_struct_index(structs):
s = '# Supported Structs\n'
for struct in structs:
sid = struct['identifier']
s += '- [%s](#%s)\n' % (sid, sid)
s += '\n<br />\n\n'
return s
def doc_struct(struct):
sid = struct['identifier']
s = '## [%s](#%s)\n\n' % (sid, sid)
s += "| Field | Type |\n"
s += "| ----- | ---- |\n"
# build doc table
field_table = []
for field in struct['fields']:
fid, ftype, fimmutable, lvt, lot = get_struct_field_info(struct, field)
if '???' in lvt or '???' in lot:
continue
ftype, do_link = translate_type_to_lua(ftype)
if do_link:
s += '| %s | [%s](#%s) |\n' % (fid, ftype, ftype)
continue
s += '| %s | %s |\n' % (fid, ftype)
s += '\n[:arrow_up_small:](#)\n\n<br />\n'
return s
def doc_structs(structs):
structs.extend(parse_structs(sLuaManuallyDefinedStructs))
structs = sorted(structs, key=lambda d: d['identifier'])
s = '## [:rewind: Lua Reference](lua.md)\n\n'
s += doc_struct_index(structs)
for struct in structs:
if struct['identifier'] in exclude_structs:
continue
s += doc_struct(struct) + '\n'
with open(get_path(docs_lua_structs), 'w') as out:
out.write(s)
############################################################################
def build_files():
@ -271,6 +336,8 @@ def build_files():
extracted.extend(extract_structs(path))
parsed = parse_structs(extracted)
parsed = sorted(parsed, key=lambda d: d['identifier'])
built_body = build_body(parsed)
built_enum = build_lot_enum()
built_include = build_includes()
@ -283,6 +350,8 @@ def build_files():
with open(out_h_filename, 'w') as out:
out.write(h_template.replace("$[BODY]", built_enum))
doc_structs(parsed)
############################################################################
if __name__ == '__main__':

View File

@ -1253,6 +1253,10 @@ MARIO_ANIM_RETURN_FROM_STAR_DANCE = 206
MARIO_ANIM_FORWARD_SPINNING_FLIP = 207
MARIO_ANIM_TRIPLE_JUMP_FLY = 208
-----------
-- shake --
-----------
SHAKE_ATTACK = 1
SHAKE_GROUND_POUND = 2
SHAKE_SMALL_DAMAGE = 3

1256
docs/lua/constants.md Normal file

File diff suppressed because it is too large Load Diff

5184
docs/lua/functions.md Normal file

File diff suppressed because it is too large Load Diff

33
docs/lua/lua.md Normal file
View File

@ -0,0 +1,33 @@
# Lua Reference
The Lua scripting API is in early development.
Expect many more things to be supported in the future.
<br />
## How to install Lua mods
Lua scripts you make can be placed either the `mods` folder in the base directory, or in `<SAVE FILE LOCATION>/mods`
<br />
## Globals
| Identifier | Type | Description |
| :-------- | :--: | :---------: |
| gMarioStates[MAX_PLAYERS] | [MarioState](structs.md#MarioState) | An array of length MAX_PLAYERS containing mario states |
| gCharacter[CT_MAX] | [Character](structs.md#Character) | An array of length CT_MAX containing character information |
<br />
## Exposed from SM64
- [Constants](constants.md)
- [Functions](functions.md)
- [Structs](structs.md)
<br />
## Example Lua mods
- [Extended Moveset](../../mods/extended-moveset.lua)
- [Character Movesets](../../mods/character-movesets.lua)
- [Low Gravity](../../mods/low-gravity.lua)
- [Faster Swimming](../../mods/faster-swimming.lua)

858
docs/lua/structs.md Normal file
View File

@ -0,0 +1,858 @@
## [:rewind: Lua Reference](lua.md)
# Supported Structs
- [Animation](#Animation)
- [Area](#Area)
- [Camera](#Camera)
- [CameraFOVStatus](#CameraFOVStatus)
- [CameraStoredInfo](#CameraStoredInfo)
- [CameraTrigger](#CameraTrigger)
- [Character](#Character)
- [Controller](#Controller)
- [Cutscene](#Cutscene)
- [CutsceneSplinePoint](#CutsceneSplinePoint)
- [CutsceneVariable](#CutsceneVariable)
- [FloorGeometry](#FloorGeometry)
- [GraphNode](#GraphNode)
- [GraphNodeObject](#GraphNodeObject)
- [GraphNodeObject_sub](#GraphNodeObject_sub)
- [HandheldShakePoint](#HandheldShakePoint)
- [InstantWarp](#InstantWarp)
- [LakituState](#LakituState)
- [LinearTransitionPoint](#LinearTransitionPoint)
- [MarioAnimDmaRelatedThing](#MarioAnimDmaRelatedThing)
- [MarioAnimation](#MarioAnimation)
- [MarioBodyState](#MarioBodyState)
- [MarioState](#MarioState)
- [ModeTransitionInfo](#ModeTransitionInfo)
- [Object](#Object)
- [ObjectHitbox](#ObjectHitbox)
- [ObjectNode](#ObjectNode)
- [ObjectWarpNode](#ObjectWarpNode)
- [OffsetSizePair](#OffsetSizePair)
- [ParallelTrackingPoint](#ParallelTrackingPoint)
- [PlayerCameraState](#PlayerCameraState)
- [PlayerGeometry](#PlayerGeometry)
- [SPTask](#SPTask)
- [SpawnInfo](#SpawnInfo)
- [Surface](#Surface)
- [TransitionInfo](#TransitionInfo)
- [UnusedArea28](#UnusedArea28)
- [VblankHandler](#VblankHandler)
- [Vec3f](#Vec3f)
- [Vec3s](#Vec3s)
- [WallCollisionData](#WallCollisionData)
- [WarpNode](#WarpNode)
- [WarpTransition](#WarpTransition)
- [WarpTransitionData](#WarpTransitionData)
- [Waypoint](#Waypoint)
- [Whirlpool](#Whirlpool)
<br />
## [Animation](#Animation)
| Field | Type |
| ----- | ---- |
| flags | integer |
| length | integer |
| animYTransDivisor | integer |
| startFrame | integer |
| loopStart | integer |
| loopEnd | integer |
| unusedBoneCount | integer |
[:arrow_up_small:](#)
<br />
## [Area](#Area)
| Field | Type |
| ----- | ---- |
| camera | [Camera](#Camera) |
| flags | integer |
| index | integer |
| instantWarps | [InstantWarp](#InstantWarp) |
| musicParam | integer |
| musicParam2 | integer |
| objectSpawnInfos | [SpawnInfo](#SpawnInfo) |
| paintingWarpNodes | [WarpNode](#WarpNode) |
| terrainType | integer |
| warpNodes | [ObjectWarpNode](#ObjectWarpNode) |
[:arrow_up_small:](#)
<br />
## [Camera](#Camera)
| Field | Type |
| ----- | ---- |
| areaCenX | number |
| areaCenY | number |
| areaCenZ | number |
| cutscene | integer |
| defMode | integer |
| doorStatus | integer |
| focus | [Vec3f](#Vec3f) |
| mode | integer |
| nextYaw | integer |
| pos | [Vec3f](#Vec3f) |
| unusedVec1 | [Vec3f](#Vec3f) |
| yaw | integer |
[:arrow_up_small:](#)
<br />
## [CameraFOVStatus](#CameraFOVStatus)
| Field | Type |
| ----- | ---- |
| decay | integer |
| fov | number |
| fovFunc | integer |
| fovOffset | number |
| shakeAmplitude | number |
| shakePhase | integer |
| shakeSpeed | integer |
| unusedIsSleeping | integer |
[:arrow_up_small:](#)
<br />
## [CameraStoredInfo](#CameraStoredInfo)
| Field | Type |
| ----- | ---- |
| cannonYOffset | number |
| focus | [Vec3f](#Vec3f) |
| panDist | number |
| pos | [Vec3f](#Vec3f) |
[:arrow_up_small:](#)
<br />
## [CameraTrigger](#CameraTrigger)
| Field | Type |
| ----- | ---- |
| area | integer |
| boundsX | integer |
| boundsY | integer |
| boundsYaw | integer |
| boundsZ | integer |
| centerX | integer |
| centerY | integer |
| centerZ | integer |
[:arrow_up_small:](#)
<br />
## [Character](#Character)
| Field | Type |
| ----- | ---- |
| animOffsetEnabled | integer |
| animOffsetFeet | number |
| animOffsetHand | number |
| animOffsetLowYPoint | number |
| cameraHudHead | integer |
| capEnemyLayer | integer |
| capMetalModelId | integer |
| capMetalWingModelId | integer |
| capModelId | integer |
| capWingModelId | integer |
| modelId | integer |
| soundAttacked | integer |
| soundCoughing1 | integer |
| soundCoughing2 | integer |
| soundCoughing3 | integer |
| soundDoh | integer |
| soundDrowning | integer |
| soundDying | integer |
| soundEeuh | integer |
| soundFreqScale | number |
| soundGameOver | integer |
| soundGroundPoundWah | integer |
| soundHaha | integer |
| soundHaha_2 | integer |
| soundHello | integer |
| soundHereWeGo | integer |
| soundHoohoo | integer |
| soundHrmm | integer |
| soundImaTired | integer |
| soundMamaMia | integer |
| soundOnFire | integer |
| soundOoof | integer |
| soundOoof2 | integer |
| soundPanting | integer |
| soundPantingCold | integer |
| soundPressStartToPlay | integer |
| soundPunchHoo | integer |
| soundPunchWah | integer |
| soundPunchYah | integer |
| soundSnoring1 | integer |
| soundSnoring2 | integer |
| soundSnoring3 | integer |
| soundSoLongaBowser | integer |
| soundTwirlBounce | integer |
| soundUh | integer |
| soundUh2 | integer |
| soundUh2_2 | integer |
| soundWaaaooow | integer |
| soundWah2 | integer |
| soundWhoa | integer |
| soundYahWahHoo | integer |
| soundYahoo | integer |
| soundYahooWahaYippee | integer |
| soundYawning | integer |
| type | integer |
[:arrow_up_small:](#)
<br />
## [Controller](#Controller)
| Field | Type |
| ----- | ---- |
| buttonDown | integer |
| buttonPressed | integer |
| extStickX | integer |
| extStickY | integer |
| port | integer |
| rawStickX | integer |
| rawStickY | integer |
| stickMag | number |
| stickX | number |
| stickY | number |
[:arrow_up_small:](#)
<br />
## [Cutscene](#Cutscene)
| Field | Type |
| ----- | ---- |
| duration | integer |
[:arrow_up_small:](#)
<br />
## [CutsceneSplinePoint](#CutsceneSplinePoint)
| Field | Type |
| ----- | ---- |
| index | integer |
| point | [Vec3s](#Vec3s) |
| speed | integer |
[:arrow_up_small:](#)
<br />
## [CutsceneVariable](#CutsceneVariable)
| Field | Type |
| ----- | ---- |
| angle | [Vec3s](#Vec3s) |
| point | [Vec3f](#Vec3f) |
| unused1 | integer |
| unused2 | integer |
| unusedPoint | [Vec3f](#Vec3f) |
[:arrow_up_small:](#)
<br />
## [FloorGeometry](#FloorGeometry)
| Field | Type |
| ----- | ---- |
| normalX | number |
| normalY | number |
| normalZ | number |
| originOffset | number |
[:arrow_up_small:](#)
<br />
## [GraphNode](#GraphNode)
| Field | Type |
| ----- | ---- |
| children | [GraphNode](#GraphNode) |
| flags | integer |
| next | [GraphNode](#GraphNode) |
| parent | [GraphNode](#GraphNode) |
| prev | [GraphNode](#GraphNode) |
| type | integer |
[:arrow_up_small:](#)
<br />
## [GraphNodeObject](#GraphNodeObject)
| Field | Type |
| ----- | ---- |
| angle | [Vec3s](#Vec3s) |
| cameraToObject | [Vec3f](#Vec3f) |
| node | [GraphNode](#GraphNode) |
| pos | [Vec3f](#Vec3f) |
| prevAngle | [Vec3s](#Vec3s) |
| prevPos | [Vec3f](#Vec3f) |
| prevScale | [Vec3f](#Vec3f) |
| prevScaleTimestamp | integer |
| prevShadowPos | [Vec3f](#Vec3f) |
| prevShadowPosTimestamp | integer |
| prevThrowMatrixTimestamp | integer |
| prevTimestamp | integer |
| scale | [Vec3f](#Vec3f) |
| sharedChild | [GraphNode](#GraphNode) |
| skipInterpolationTimestamp | integer |
| unk18 | integer |
| unk19 | integer |
| animInfo | [GraphNodeObject_sub](#GraphNodeObject_sub) |
| unk4C | [SpawnInfo](#SpawnInfo) |
[:arrow_up_small:](#)
<br />
## [GraphNodeObject_sub](#GraphNodeObject_sub)
| Field | Type |
| ----- | ---- |
| animAccel | integer |
| animFrame | integer |
| animFrameAccelAssist | integer |
| animID | integer |
| animTimer | integer |
| animYTrans | integer |
| curAnim | [Animation](#Animation) |
| prevAnimFrame | integer |
| prevAnimFrameTimestamp | integer |
| prevAnimID | integer |
| prevAnimPtr | [Animation](#Animation) |
[:arrow_up_small:](#)
<br />
## [HandheldShakePoint](#HandheldShakePoint)
| Field | Type |
| ----- | ---- |
| index | integer |
| pad | integer |
| point | [Vec3s](#Vec3s) |
[:arrow_up_small:](#)
<br />
## [InstantWarp](#InstantWarp)
| Field | Type |
| ----- | ---- |
| area | integer |
| displacement | [Vec3s](#Vec3s) |
| id | integer |
[:arrow_up_small:](#)
<br />
## [LakituState](#LakituState)
| Field | Type |
| ----- | ---- |
| curFocus | [Vec3f](#Vec3f) |
| curPos | [Vec3f](#Vec3f) |
| defMode | integer |
| focHSpeed | number |
| focVSpeed | number |
| focus | [Vec3f](#Vec3f) |
| focusDistance | number |
| goalFocus | [Vec3f](#Vec3f) |
| goalPos | [Vec3f](#Vec3f) |
| keyDanceRoll | integer |
| lastFrameAction | integer |
| mode | integer |
| nextYaw | integer |
| oldPitch | integer |
| oldRoll | integer |
| oldYaw | integer |
| pos | [Vec3f](#Vec3f) |
| posHSpeed | number |
| posVSpeed | number |
| roll | integer |
| shakeMagnitude | [Vec3s](#Vec3s) |
| shakePitchDecay | integer |
| shakePitchPhase | integer |
| shakePitchVel | integer |
| shakeRollDecay | integer |
| shakeRollPhase | integer |
| shakeRollVel | integer |
| shakeYawDecay | integer |
| shakeYawPhase | integer |
| shakeYawVel | integer |
| skipCameraInterpolationTimestamp | integer |
| unused | integer |
| unusedVec1 | [Vec3f](#Vec3f) |
| unusedVec2 | [Vec3s](#Vec3s) |
| yaw | integer |
[:arrow_up_small:](#)
<br />
## [LinearTransitionPoint](#LinearTransitionPoint)
| Field | Type |
| ----- | ---- |
| dist | number |
| focus | [Vec3f](#Vec3f) |
| pitch | integer |
| pos | [Vec3f](#Vec3f) |
| yaw | integer |
[:arrow_up_small:](#)
<br />
## [MarioAnimation](#MarioAnimation)
| Field | Type |
| ----- | ---- |
| targetAnim | [Animation](#Animation) |
[:arrow_up_small:](#)
<br />
## [MarioBodyState](#MarioBodyState)
| Field | Type |
| ----- | ---- |
| action | integer |
| capState | integer |
| eyeState | integer |
| grabPos | integer |
| handState | integer |
| headAngle | [Vec3s](#Vec3s) |
| heldObjLastPosition | [Vec3f](#Vec3f) |
| modelState | integer |
| punchState | integer |
| torsoAngle | [Vec3s](#Vec3s) |
| torsoPos | [Vec3f](#Vec3f) |
| wingFlutter | integer |
[:arrow_up_small:](#)
<br />
## [MarioState](#MarioState)
| Field | Type |
| ----- | ---- |
| action | integer |
| actionArg | integer |
| actionState | integer |
| actionTimer | integer |
| angleVel | [Vec3s](#Vec3s) |
| animation | [MarioAnimation](#MarioAnimation) |
| area | [Area](#Area) |
| bubbleObj | [Object](#Object) |
| capTimer | integer |
| ceil | [Surface](#Surface) |
| ceilHeight | number |
| character | [Character](#Character) |
| collidedObjInteractTypes | integer |
| controller | [Controller](#Controller) |
| curAnimOffset | number |
| currentRoom | integer |
| doubleJumpTimer | integer |
| faceAngle | [Vec3s](#Vec3s) |
| fadeWarpOpacity | integer |
| flags | integer |
| floor | [Surface](#Surface) |
| floorAngle | integer |
| floorHeight | number |
| forwardVel | number |
| framesSinceA | integer |
| framesSinceB | integer |
| freeze | integer |
| healCounter | integer |
| health | integer |
| heldByObj | [Object](#Object) |
| heldObj | [Object](#Object) |
| hurtCounter | integer |
| input | integer |
| intendedMag | number |
| intendedYaw | integer |
| interactObj | [Object](#Object) |
| invincTimer | integer |
| isSnoring | integer |
| marioBodyState | [MarioBodyState](#MarioBodyState) |
| marioObj | [Object](#Object) |
| minimumBoneY | number |
| nonInstantWarpPos | [Vec3f](#Vec3f) |
| numCoins | integer |
| numKeys | integer |
| numLives | integer |
| numStars | integer |
| particleFlags | integer |
| peakHeight | number |
| playerIndex | integer |
| pos | [Vec3f](#Vec3f) |
| prevAction | integer |
| prevNumStarsForDialog | integer |
| quicksandDepth | number |
| riddenObj | [Object](#Object) |
| slideVelX | number |
| slideVelZ | number |
| slideYaw | integer |
| spawnInfo | [SpawnInfo](#SpawnInfo) |
| splineKeyframeFraction | number |
| splineState | integer |
| squishTimer | integer |
| statusForCamera | [PlayerCameraState](#PlayerCameraState) |
| terrainSoundAddend | integer |
| twirlYaw | integer |
| unkB0 | integer |
| unkC4 | number |
| usedObj | [Object](#Object) |
| vel | [Vec3f](#Vec3f) |
| wall | [Surface](#Surface) |
| wallKickTimer | integer |
| wasNetworkVisible | integer |
| waterLevel | integer |
[:arrow_up_small:](#)
<br />
## [ModeTransitionInfo](#ModeTransitionInfo)
| Field | Type |
| ----- | ---- |
| frame | integer |
| lastMode | integer |
| max | integer |
| newMode | integer |
| transitionEnd | [LinearTransitionPoint](#LinearTransitionPoint) |
| transitionStart | [LinearTransitionPoint](#LinearTransitionPoint) |
[:arrow_up_small:](#)
<br />
## [Object](#Object)
| Field | Type |
| ----- | ---- |
| activeFlags | integer |
| areaTimer | integer |
| areaTimerDuration | integer |
| areaTimerType | integer |
| bhvDelayTimer | integer |
| bhvStackIndex | integer |
| collidedObjInteractTypes | integer |
| createdThroughNetwork | integer |
| globalPlayerIndex | integer |
| header | [ObjectNode](#ObjectNode) |
| heldByPlayerIndex | integer |
| hitboxDownOffset | number |
| hitboxHeight | number |
| hitboxRadius | number |
| hurtboxHeight | number |
| hurtboxRadius | number |
| numCollidedObjs | integer |
| parentObj | [Object](#Object) |
| platform | [Object](#Object) |
| prevObj | [Object](#Object) |
| respawnInfoType | integer |
| unused1 | integer |
[:arrow_up_small:](#)
<br />
## [ObjectHitbox](#ObjectHitbox)
| Field | Type |
| ----- | ---- |
| damageOrCoinValue | integer |
| downOffset | integer |
| health | integer |
| height | integer |
| hurtboxHeight | integer |
| hurtboxRadius | integer |
| interactType | integer |
| numLootCoins | integer |
| radius | integer |
[:arrow_up_small:](#)
<br />
## [ObjectNode](#ObjectNode)
| Field | Type |
| ----- | ---- |
| gfx | [GraphNodeObject](#GraphNodeObject) |
| next | [ObjectNode](#ObjectNode) |
| prev | [ObjectNode](#ObjectNode) |
[:arrow_up_small:](#)
<br />
## [ObjectWarpNode](#ObjectWarpNode)
| Field | Type |
| ----- | ---- |
| next | [ObjectWarpNode](#ObjectWarpNode) |
| node | [WarpNode](#WarpNode) |
| object | [Object](#Object) |
[:arrow_up_small:](#)
<br />
## [OffsetSizePair](#OffsetSizePair)
| Field | Type |
| ----- | ---- |
| offset | integer |
| size | integer |
[:arrow_up_small:](#)
<br />
## [ParallelTrackingPoint](#ParallelTrackingPoint)
| Field | Type |
| ----- | ---- |
| distThresh | number |
| pos | [Vec3f](#Vec3f) |
| startOfPath | integer |
| zoom | number |
[:arrow_up_small:](#)
<br />
## [PlayerCameraState](#PlayerCameraState)
| Field | Type |
| ----- | ---- |
| action | integer |
| cameraEvent | integer |
| faceAngle | [Vec3s](#Vec3s) |
| headRotation | [Vec3s](#Vec3s) |
| pos | [Vec3f](#Vec3f) |
| unused | integer |
| usedObj | [Object](#Object) |
[:arrow_up_small:](#)
<br />
## [PlayerGeometry](#PlayerGeometry)
| Field | Type |
| ----- | ---- |
| currCeil | [Surface](#Surface) |
| currCeilHeight | number |
| currCeilType | integer |
| currFloor | [Surface](#Surface) |
| currFloorHeight | number |
| currFloorType | integer |
| prevCeil | [Surface](#Surface) |
| prevCeilHeight | number |
| prevCeilType | integer |
| prevFloor | [Surface](#Surface) |
| prevFloorHeight | number |
| prevFloorType | integer |
| waterHeight | number |
[:arrow_up_small:](#)
<br />
## [SpawnInfo](#SpawnInfo)
| Field | Type |
| ----- | ---- |
| activeAreaIndex | integer |
| areaIndex | integer |
| behaviorArg | integer |
| next | [SpawnInfo](#SpawnInfo) |
| startAngle | [Vec3s](#Vec3s) |
| startPos | [Vec3s](#Vec3s) |
| unk18 | [GraphNode](#GraphNode) |
[:arrow_up_small:](#)
<br />
## [Surface](#Surface)
| Field | Type |
| ----- | ---- |
| flags | integer |
| force | integer |
| lowerY | integer |
| modifiedTimestamp | integer |
| normal | [Vec3f](#Vec3f) |
| object | [Object](#Object) |
| originOffset | number |
| prevVertex1 | [Vec3s](#Vec3s) |
| prevVertex2 | [Vec3s](#Vec3s) |
| prevVertex3 | [Vec3s](#Vec3s) |
| room | integer |
| type | integer |
| upperY | integer |
| vertex1 | [Vec3s](#Vec3s) |
| vertex2 | [Vec3s](#Vec3s) |
| vertex3 | [Vec3s](#Vec3s) |
[:arrow_up_small:](#)
<br />
## [TransitionInfo](#TransitionInfo)
| Field | Type |
| ----- | ---- |
| focDist | number |
| focPitch | integer |
| focYaw | integer |
| framesLeft | integer |
| marioPos | [Vec3f](#Vec3f) |
| pad | integer |
| posDist | number |
| posPitch | integer |
| posYaw | integer |
[:arrow_up_small:](#)
<br />
## [Vec3f](#Vec3f)
| Field | Type |
| ----- | ---- |
| x | float |
| y | float |
| z | float |
[:arrow_up_small:](#)
<br />
## [Vec3s](#Vec3s)
| Field | Type |
| ----- | ---- |
| x | integer |
| y | integer |
| z | integer |
[:arrow_up_small:](#)
<br />
## [WallCollisionData](#WallCollisionData)
| Field | Type |
| ----- | ---- |
| numWalls | integer |
| offsetY | number |
| radius | number |
| unk14 | integer |
[:arrow_up_small:](#)
<br />
## [WarpNode](#WarpNode)
| Field | Type |
| ----- | ---- |
| destArea | integer |
| destLevel | integer |
| destNode | integer |
| id | integer |
[:arrow_up_small:](#)
<br />
## [WarpTransition](#WarpTransition)
| Field | Type |
| ----- | ---- |
| data | [WarpTransitionData](#WarpTransitionData) |
| isActive | integer |
| pauseRendering | integer |
| time | integer |
| type | integer |
[:arrow_up_small:](#)
<br />
## [WarpTransitionData](#WarpTransitionData)
| Field | Type |
| ----- | ---- |
| blue | integer |
| endTexRadius | integer |
| endTexX | integer |
| endTexY | integer |
| green | integer |
| red | integer |
| startTexRadius | integer |
| startTexX | integer |
| startTexY | integer |
| texTimer | integer |
[:arrow_up_small:](#)
<br />
## [Waypoint](#Waypoint)
| Field | Type |
| ----- | ---- |
| flags | integer |
| pos | [Vec3s](#Vec3s) |
[:arrow_up_small:](#)
<br />
## [Whirlpool](#Whirlpool)
| Field | Type |
| ----- | ---- |
| pos | [Vec3s](#Vec3s) |
| strength | integer |
[:arrow_up_small:](#)
<br />

File diff suppressed because it is too large Load Diff

View File

@ -5,46 +5,46 @@
enum LuaObjectAutogenType {
LOT_AUTOGEN_MIN = 1000,
LOT_CONTROLLER,
LOT_ANIMATION,
LOT_AREA,
LOT_CAMERA,
LOT_CAMERAFOVSTATUS,
LOT_CAMERASTOREDINFO,
LOT_CAMERATRIGGER,
LOT_CHARACTER,
LOT_CONTROLLER,
LOT_CUTSCENE,
LOT_CUTSCENESPLINEPOINT,
LOT_CUTSCENEVARIABLE,
LOT_FLOORGEOMETRY,
LOT_GRAPHNODE,
LOT_GRAPHNODEOBJECT_SUB,
LOT_GRAPHNODEOBJECT,
LOT_OBJECTNODE,
LOT_GRAPHNODEOBJECT_SUB,
LOT_HANDHELDSHAKEPOINT,
LOT_INSTANTWARP,
LOT_LAKITUSTATE,
LOT_LINEARTRANSITIONPOINT,
LOT_MARIOANIMATION,
LOT_MARIOBODYSTATE,
LOT_MARIOSTATE,
LOT_MODETRANSITIONINFO,
LOT_OBJECT,
LOT_OBJECTHITBOX,
LOT_WAYPOINT,
LOT_SURFACE,
LOT_MARIOBODYSTATE,
LOT_OFFSETSIZEPAIR,
LOT_MARIOANIMATION,
LOT_MARIOSTATE,
LOT_WARPNODE,
LOT_OBJECTNODE,
LOT_OBJECTWARPNODE,
LOT_INSTANTWARP,
LOT_SPAWNINFO,
LOT_WHIRLPOOL,
LOT_AREA,
LOT_WARPTRANSITIONDATA,
LOT_WARPTRANSITION,
LOT_PLAYERCAMERASTATE,
LOT_TRANSITIONINFO,
LOT_HANDHELDSHAKEPOINT,
LOT_CAMERATRIGGER,
LOT_CUTSCENE,
LOT_CAMERAFOVSTATUS,
LOT_CUTSCENESPLINEPOINT,
LOT_PLAYERGEOMETRY,
LOT_LINEARTRANSITIONPOINT,
LOT_MODETRANSITIONINFO,
LOT_OFFSETSIZEPAIR,
LOT_PARALLELTRACKINGPOINT,
LOT_CAMERASTOREDINFO,
LOT_CUTSCENEVARIABLE,
LOT_CAMERA,
LOT_LAKITUSTATE,
LOT_CHARACTER,
LOT_PLAYERCAMERASTATE,
LOT_PLAYERGEOMETRY,
LOT_SPAWNINFO,
LOT_SURFACE,
LOT_TRANSITIONINFO,
LOT_WALLCOLLISIONDATA,
LOT_FLOORGEOMETRY,
LOT_WARPNODE,
LOT_WARPTRANSITION,
LOT_WARPTRANSITIONDATA,
LOT_WAYPOINT,
LOT_WHIRLPOOL,
LOT_AUTOGEN_MAX,
};

File diff suppressed because it is too large Load Diff