Various Lua object API improvements

Lifted immutablity of most Lua struct fields
Added object constants to Lua API
Added ability to set struct pointers in Lua API
Prevented respawners for Lua-spawned objects
This commit is contained in:
MysterD 2022-02-25 18:27:58 -08:00
parent 82d60fed4f
commit 33ced38baa
12 changed files with 328 additions and 169 deletions

View file

@ -1,4 +1,5 @@
import os
from xml.etree.ElementInclude import include
from common import *
from extract_constants import *
@ -21,16 +22,16 @@ in_files = [
"src/pc/djui/djui_hud_utils.h",
"include/behavior_table.h",
"src/pc/lua/smlua_model_utils.h",
"include/object_constants.h",
]
exclude_constants = [
'^MAXCONTROLLERS$',
'^LEVEL_.*',
'^AREA_.*',
'^CONT_ERR.*',
'^READ_MASK$',
'^SIGN_RANGE$',
]
exclude_constants = {
'*': [ '^MAXCONTROLLERS$', '^LEVEL_.*', '^AREA_.*', '^CONT_ERR.*', '^READ_MASK$', '^SIGN_RANGE$', ]
}
include_constants = {
"include/object_constants.h" : [ "^ACTIVE_FLAG_", "^ACTIVE_PARTICLE_", "^HELD_", "^OBJ_FLAG_", "^RESPAWN_INFO_", ],
}
pretend_find = [
'SOUND_ARG_LOAD'
@ -64,7 +65,25 @@ def saw_constant(identifier):
seen_constants.append(identifier)
return False
def process_enum(line):
def allowed_identifier(filename, ident):
exclude_list = exclude_constants['*']
if filename in exclude_constants:
exclude_list.extend(exclude_constants[filename])
for exclude in exclude_list:
if re.search(exclude, ident) != None:
return False
if filename in include_constants:
for include in include_constants[filename]:
if re.search(include, ident) != None:
return True
return False
return True
def process_enum(filename, line):
_, ident, val = line.split(' ', 2)
if '{' not in val or '}' not in val:
@ -98,12 +117,7 @@ def process_enum(line):
index += 1
continue
excluded = False
for exclude in exclude_constants:
if re.search(exclude, field) != None:
excluded = True
if not excluded:
if allowed_identifier(filename, field):
constants.append([field, str(index)])
if saw_constant(field):
@ -115,7 +129,7 @@ def process_enum(line):
return ret
def process_define(line):
def process_define(filename, line):
_, ident, val = line.split(' ', 2)
val = val.replace('(u8)', '')
@ -129,8 +143,7 @@ def process_define(line):
print('UNRECOGNIZED DEFINE: ' + line)
return None
for exclude in exclude_constants:
if re.search(exclude, ident) != None:
if not allowed_identifier(filename, ident):
return None
if saw_constant(ident):
@ -139,11 +152,11 @@ def process_define(line):
return [ident, val]
def process_line(line):
def process_line(filename, line):
if line.startswith('enum '):
return process_enum(line)
return process_enum(filename, line)
elif line.startswith('#define '):
return process_define(line)
return process_define(filename, line)
else:
print("UNRECOGNIZED LINE: " + line)
return None
@ -155,7 +168,7 @@ def process_file(filename):
constants = []
lines = extract_constants(get_path(filename)).splitlines()
for line in lines:
c = process_line(line)
c = process_line(filename, line)
if c != None:
constants.append(c)

View file

@ -61,7 +61,7 @@ override_field_immutable = {
"Character": [ "*" ],
"NetworkPlayer": [ "*" ],
"TextureInfo": [ "*" ],
"Object": ["oSyncID"],
"Object": ["oSyncID", "createdThroughNetwork"],
}
sLuaManuallyDefinedStructs = [
@ -196,7 +196,9 @@ def get_struct_field_info(struct, field):
lvt = translate_type_to_lvt(ftype)
lot = translate_type_to_lot(ftype)
fimmutable = str(lvt == 'LVT_COBJECT' or lvt.endswith('_P') or 'const ' in ftype).lower()
fimmutable = str(lvt == 'LVT_COBJECT' or 'const ' in ftype).lower()
if lvt.startswith('LVT_') and lvt.endswith('_P') and 'OBJECT' not in lvt:
fimmutable = 'true'
if sid in override_field_immutable:
if fid in override_field_immutable[sid] or '*' in override_field_immutable[sid]:

View file

@ -19,6 +19,7 @@
- [MarioAnimID](#MarioAnimID)
- [network_player.h](#network_player.h)
- [NetworkPlayerType](#NetworkPlayerType)
- [object_constants.h](#object_constants.h)
- [os_cont.h](#os_cont.h)
- [sm64.h](#sm64.h)
- [smlua_hooks.h](#smlua_hooks.h)
@ -1625,6 +1626,67 @@
<br />
## [object_constants.h](#object_constants.h)
- ACTIVE_FLAG_ACTIVE
- ACTIVE_FLAG_DEACTIVATED
- ACTIVE_FLAG_DITHERED_ALPHA
- ACTIVE_FLAG_FAR_AWAY
- ACTIVE_FLAG_INITIATED_TIME_STOP
- ACTIVE_FLAG_IN_DIFFERENT_ROOM
- ACTIVE_FLAG_MOVE_THROUGH_GRATE
- ACTIVE_FLAG_UNIMPORTANT
- ACTIVE_FLAG_UNK10
- ACTIVE_FLAG_UNK2
- ACTIVE_FLAG_UNK8
- ACTIVE_FLAG_UNK9
- ACTIVE_PARTICLE_BREATH
- ACTIVE_PARTICLE_BUBBLE
- ACTIVE_PARTICLE_DIRT
- ACTIVE_PARTICLE_DUST
- ACTIVE_PARTICLE_FIRE
- ACTIVE_PARTICLE_H_STAR
- ACTIVE_PARTICLE_IDLE_WATER_WAVE
- ACTIVE_PARTICLE_LEAF
- ACTIVE_PARTICLE_MIST_CIRCLE
- ACTIVE_PARTICLE_PLUNGE_BUBBLE
- ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH
- ACTIVE_PARTICLE_SHALLOW_WATER_WAVE
- ACTIVE_PARTICLE_SNOW
- ACTIVE_PARTICLE_SPARKLES
- ACTIVE_PARTICLE_TRIANGLE
- ACTIVE_PARTICLE_UNUSED_1
- ACTIVE_PARTICLE_UNUSED_2
- ACTIVE_PARTICLE_V_STAR
- ACTIVE_PARTICLE_WATER_SPLASH
- ACTIVE_PARTICLE_WAVE_TRAIL
- HELD_DROPPED
- HELD_FREE
- HELD_HELD
- HELD_THROWN
- OBJ_FLAG_0020
- OBJ_FLAG_0100
- OBJ_FLAG_1000
- OBJ_FLAG_30
- OBJ_FLAG_8000
- OBJ_FLAG_ACTIVE_FROM_AFAR
- OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO
- OBJ_FLAG_COMPUTE_DIST_TO_MARIO
- OBJ_FLAG_HOLDABLE
- OBJ_FLAG_MOVE_XZ_USING_FVEL
- OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL
- OBJ_FLAG_PERSISTENT_RESPAWN
- OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE
- OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW
- OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM
- OBJ_FLAG_TRANSFORM_RELATIVE_TO_PARENT
- OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE
- RESPAWN_INFO_DONT_RESPAWN
- RESPAWN_INFO_TYPE_16
- RESPAWN_INFO_TYPE_32
- RESPAWN_INFO_TYPE_NULL
<br />
## [os_cont.h](#os_cont.h)
- A_BUTTON
- B_BUTTON

View file

@ -69,11 +69,11 @@
| animID | integer | |
| animTimer | integer | |
| animYTrans | integer | |
| curAnim | [Animation](#Animation) | read-only |
| curAnim | [Animation](#Animation) | |
| prevAnimFrame | integer | |
| prevAnimFrameTimestamp | integer | |
| prevAnimID | integer | |
| prevAnimPtr | [Animation](#Animation) | read-only |
| prevAnimPtr | [Animation](#Animation) | |
[:arrow_up_small:](#)
@ -101,19 +101,19 @@
| Field | Type | Access |
| ----- | ---- | ------ |
| camera | [Camera](#Camera) | read-only |
| camera | [Camera](#Camera) | |
| flags | integer | |
| index | integer | |
| instantWarps | [InstantWarp](#InstantWarp) | read-only |
| instantWarps | [InstantWarp](#InstantWarp) | |
| macroObjects | Pointer <integer> | read-only |
| musicParam | integer | |
| musicParam2 | integer | |
| objectSpawnInfos | [SpawnInfo](#SpawnInfo) | read-only |
| paintingWarpNodes | [WarpNode](#WarpNode) | read-only |
| objectSpawnInfos | [SpawnInfo](#SpawnInfo) | |
| paintingWarpNodes | [WarpNode](#WarpNode) | |
| surfaceRooms | Pointer <integer> | read-only |
| terrainData | Pointer <integer> | read-only |
| terrainType | integer | |
| warpNodes | [ObjectWarpNode](#ObjectWarpNode) | read-only |
| warpNodes | [ObjectWarpNode](#ObjectWarpNode) | |
[:arrow_up_small:](#)
@ -358,11 +358,11 @@
| Field | Type | Access |
| ----- | ---- | ------ |
| children | [GraphNode](#GraphNode) | read-only |
| children | [GraphNode](#GraphNode) | |
| flags | integer | |
| next | [GraphNode](#GraphNode) | read-only |
| parent | [GraphNode](#GraphNode) | read-only |
| prev | [GraphNode](#GraphNode) | read-only |
| next | [GraphNode](#GraphNode) | |
| parent | [GraphNode](#GraphNode) | |
| prev | [GraphNode](#GraphNode) | |
| type | integer | |
[:arrow_up_small:](#)
@ -389,9 +389,9 @@
| prevThrowMatrixTimestamp | integer | |
| prevTimestamp | integer | |
| scale | [Vec3f](#Vec3f) | read-only |
| sharedChild | [GraphNode](#GraphNode) | read-only |
| sharedChild | [GraphNode](#GraphNode) | |
| skipInterpolationTimestamp | integer | |
| unk4C | [SpawnInfo](#SpawnInfo) | read-only |
| unk4C | [SpawnInfo](#SpawnInfo) | |
[:arrow_up_small:](#)
@ -499,7 +499,7 @@
| Field | Type | Access |
| ----- | ---- | ------ |
| currentAnimAddr | Pointer <integer> | read-only |
| targetAnim | [Animation](#Animation) | read-only |
| targetAnim | [Animation](#Animation) | |
[:arrow_up_small:](#)
@ -535,22 +535,22 @@
| actionState | integer | |
| actionTimer | integer | |
| angleVel | [Vec3s](#Vec3s) | read-only |
| animation | [MarioAnimation](#MarioAnimation) | read-only |
| area | [Area](#Area) | read-only |
| bubbleObj | [Object](#Object) | read-only |
| animation | [MarioAnimation](#MarioAnimation) | |
| area | [Area](#Area) | |
| bubbleObj | [Object](#Object) | |
| capTimer | integer | |
| ceil | [Surface](#Surface) | read-only |
| ceil | [Surface](#Surface) | |
| ceilHeight | number | |
| character | [Character](#Character) | read-only |
| character | [Character](#Character) | |
| collidedObjInteractTypes | integer | |
| controller | [Controller](#Controller) | read-only |
| controller | [Controller](#Controller) | |
| curAnimOffset | number | |
| currentRoom | integer | |
| doubleJumpTimer | integer | |
| faceAngle | [Vec3s](#Vec3s) | read-only |
| fadeWarpOpacity | integer | |
| flags | integer | |
| floor | [Surface](#Surface) | read-only |
| floor | [Surface](#Surface) | |
| floorAngle | integer | |
| floorHeight | number | |
| forwardVel | number | |
@ -559,17 +559,17 @@
| freeze | integer | |
| healCounter | integer | |
| health | integer | |
| heldByObj | [Object](#Object) | read-only |
| heldObj | [Object](#Object) | read-only |
| heldByObj | [Object](#Object) | |
| heldObj | [Object](#Object) | |
| hurtCounter | integer | |
| input | integer | |
| intendedMag | number | |
| intendedYaw | integer | |
| interactObj | [Object](#Object) | read-only |
| interactObj | [Object](#Object) | |
| invincTimer | integer | |
| isSnoring | integer | |
| marioBodyState | [MarioBodyState](#MarioBodyState) | read-only |
| marioObj | [Object](#Object) | read-only |
| marioBodyState | [MarioBodyState](#MarioBodyState) | |
| marioObj | [Object](#Object) | |
| minimumBoneY | number | |
| nonInstantWarpPos | [Vec3f](#Vec3f) | read-only |
| numCoins | integer | |
@ -583,22 +583,22 @@
| prevAction | integer | |
| prevNumStarsForDialog | integer | |
| quicksandDepth | number | |
| riddenObj | [Object](#Object) | read-only |
| riddenObj | [Object](#Object) | |
| slideVelX | number | |
| slideVelZ | number | |
| slideYaw | integer | |
| spawnInfo | [SpawnInfo](#SpawnInfo) | read-only |
| spawnInfo | [SpawnInfo](#SpawnInfo) | |
| splineKeyframeFraction | number | |
| splineState | integer | |
| squishTimer | integer | |
| statusForCamera | [PlayerCameraState](#PlayerCameraState) | read-only |
| statusForCamera | [PlayerCameraState](#PlayerCameraState) | |
| terrainSoundAddend | integer | |
| twirlYaw | integer | |
| unkB0 | integer | |
| unkC4 | number | |
| usedObj | [Object](#Object) | read-only |
| usedObj | [Object](#Object) | |
| vel | [Vec3f](#Vec3f) | read-only |
| wall | [Surface](#Surface) | read-only |
| wall | [Surface](#Surface) | |
| wallKickTimer | integer | |
| wasNetworkVisible | integer | |
| waterLevel | integer | |
@ -666,7 +666,7 @@
| bhvDelayTimer | integer | |
| bhvStackIndex | integer | |
| collidedObjInteractTypes | integer | |
| createdThroughNetwork | integer | |
| createdThroughNetwork | integer | read-only |
| curBhvCommand | Pointer <BehaviorScript> | read-only |
| globalPlayerIndex | integer | |
| header | [ObjectNode](#ObjectNode) | read-only |
@ -677,9 +677,9 @@
| hurtboxHeight | number | |
| hurtboxRadius | number | |
| numCollidedObjs | integer | |
| parentObj | [Object](#Object) | read-only |
| platform | [Object](#Object) | read-only |
| prevObj | [Object](#Object) | read-only |
| parentObj | [Object](#Object) | |
| platform | [Object](#Object) | |
| prevObj | [Object](#Object) | |
| respawnInfoType | integer | |
| unused1 | integer | |
@ -754,14 +754,14 @@
| oFloorType | integer | |
| oFloorRoom | integer | |
| oAngleToHome | integer | |
| oFloor | [Surface](#Surface) | read-only |
| oFloor | [Surface](#Surface) | |
| oDeathSound | integer | |
### Object-Dependent Data Fields
| Field | Type | Access |
| ----- | ---- | ------ |
| oPathedStartWaypoint | [Waypoint](#Waypoint) | read-only |
| oPathedPrevWaypoint | [Waypoint](#Waypoint) | read-only |
| oPathedStartWaypoint | [Waypoint](#Waypoint) | |
| oPathedPrevWaypoint | [Waypoint](#Waypoint) | |
| oPathedPrevWaypointFlags | integer | |
| oPathedTargetPitch | integer | |
| oPathedTargetYaw | integer | |
@ -808,7 +808,7 @@
| oBirdTargetYaw | integer | |
| oBirdChirpChirpUnkF4 | integer | |
| oEndBirdUnk104 | number | |
| oHiddenBlueCoinSwitch | [Object](#Object) | read-only |
| oHiddenBlueCoinSwitch | [Object](#Object) | |
| oBobombBlinkTimer | integer | |
| oBobombFuseLit | integer | |
| oBobombFuseTimer | integer | |
@ -830,7 +830,7 @@
| oBooOscillationTimer | integer | |
| oBooMoveYawDuringHit | integer | |
| oBooMoveYawBeforeHit | number | |
| oBooParentBigBoo | [Object](#Object) | read-only |
| oBooParentBigBoo | [Object](#Object) | |
| oBooNegatedAggressiveness | number | |
| oBooInitialMoveYaw | integer | |
| oBooTurningSpeed | integer | |
@ -903,7 +903,7 @@
| oCannonPlayerIndex | integer | |
| oCapUnkF4 | integer | |
| oCapUnkF8 | integer | |
| oChainChompSegments | [ChainSegment](#ChainSegment) | read-only |
| oChainChompSegments | [ChainSegment](#ChainSegment) | |
| oChainChompMaxDistFromPivotPerChainPart | number | |
| oChainChompMaxDistBetweenChainParts | number | |
| oChainChompDistToPivot | number | |
@ -998,7 +998,7 @@
| oFlameUnkF4 | number | |
| oFlameUnkF8 | integer | |
| oFlameUnkFC | number | |
| oFlameUnk100 | [Object](#Object) | read-only |
| oFlameUnk100 | [Object](#Object) | |
| oBlueFlameUnkF8 | number | |
| oSmallPiranhaFlameStartSpeed | number | |
| oSmallPiranhaFlameEndSpeed | number | |
@ -1042,7 +1042,7 @@
| oHauntedChairUnk104 | integer | |
| oHeaveHoUnk88 | integer | |
| oHeaveHoUnkF4 | number | |
| oHiddenObjectUnkF4 | [Object](#Object) | read-only |
| oHiddenObjectUnkF4 | [Object](#Object) | |
| oHootAvailability | integer | |
| oHootMarioReleaseTime | integer | |
| oHorizontalMovementUnkF4 | integer | |
@ -1106,7 +1106,7 @@
| oIntroLakituUnk108 | number | |
| oIntroLakituUnk10C | number | |
| oIntroLakituUnk110 | number | |
| oIntroLakituCloud | [Object](#Object) | read-only |
| oIntroLakituCloud | [Object](#Object) | |
| oMenuButtonState | integer | |
| oMenuButtonTimer | integer | |
| oMenuButtonOrigPosX | number | |
@ -1127,14 +1127,14 @@
| oMipsStartWaypointIndex | integer | |
| oMipsForwardVelocity | number | |
| oMoneybagJumpState | integer | |
| oMontyMoleCurrentHole | [Object](#Object) | read-only |
| oMontyMoleCurrentHole | [Object](#Object) | |
| oMontyMoleHeightRelativeToFloor | number | |
| oMontyMoleHoleX | number | |
| oMontyMoleHoleY | number | |
| oMontyMoleHoleZ | number | |
| oMontyMoleHoleCooldown | integer | |
| oMrBlizzardScale | number | |
| oMrBlizzardHeldObj | [Object](#Object) | read-only |
| oMrBlizzardHeldObj | [Object](#Object) | |
| oMrBlizzardGraphYVel | number | |
| oMrBlizzardTimer | integer | |
| oMrBlizzardDizziness | number | |
@ -1152,7 +1152,7 @@
| oRespawnerModelToRespawn | integer | |
| oRespawnerMinSpawnDist | number | |
| oOpenableGrillUnk88 | integer | |
| oOpenableGrillUnkF4 | [Object](#Object) | read-only |
| oOpenableGrillUnkF4 | [Object](#Object) | |
| oIntroPeachYawFromFocus | number | |
| oIntroPeachPitchFromFocus | number | |
| oIntroPeachDistToCamera | number | |
@ -1182,15 +1182,15 @@
| oPitouneUnkF8 | number | |
| oPitouneUnkFC | number | |
| oPlatformTimer | integer | |
| oPlatformUnkF8 | [Object](#Object) | read-only |
| oPlatformUnkF8 | [Object](#Object) | |
| oPlatformUnkFC | integer | |
| oPlatformUnk10C | number | |
| oPlatformUnk110 | number | |
| oPlatformOnTrackBaseBallIndex | integer | |
| oPlatformOnTrackDistMovedSinceLastBall | number | |
| oPlatformOnTrackSkiLiftRollVel | number | |
| oPlatformOnTrackStartWaypoint | [Waypoint](#Waypoint) | read-only |
| oPlatformOnTrackPrevWaypoint | [Waypoint](#Waypoint) | read-only |
| oPlatformOnTrackStartWaypoint | [Waypoint](#Waypoint) | |
| oPlatformOnTrackPrevWaypoint | [Waypoint](#Waypoint) | |
| oPlatformOnTrackPrevWaypointFlags | integer | |
| oPlatformOnTrackPitch | integer | |
| oPlatformOnTrackYaw | integer | |
@ -1239,7 +1239,7 @@
| oSkeeterWaitTime | integer | |
| oSkeeterLastWaterY | number | |
| oSkeeterUnk1AC | integer | |
| oJrbSlidingBoxUnkF4 | [Object](#Object) | read-only |
| oJrbSlidingBoxUnkF4 | [Object](#Object) | |
| oJrbSlidingBoxUnkF8 | integer | |
| oJrbSlidingBoxUnkFC | number | |
| oWFSlidBrickPtfmMovVel | number | |
@ -1393,10 +1393,10 @@
| oWhitePuffUnkF4 | number | |
| oWhitePuffUnkF8 | integer | |
| oWhitePuffUnkFC | integer | |
| oStrongWindParticlePenguinObj | [Object](#Object) | read-only |
| oStrongWindParticlePenguinObj | [Object](#Object) | |
| oWhompShakeVal | integer | |
| oWigglerFallThroughFloorsHeight | number | |
| oWigglerSegments | [ChainSegment](#ChainSegment) | read-only |
| oWigglerSegments | [ChainSegment](#ChainSegment) | |
| oWigglerWalkAnimSpeed | number | |
| oWigglerSquishSpeed | number | |
| oWigglerTimeUntilRandomTurn | integer | |
@ -1442,8 +1442,8 @@
| Field | Type | Access |
| ----- | ---- | ------ |
| gfx | [GraphNodeObject](#GraphNodeObject) | read-only |
| next | [ObjectNode](#ObjectNode) | read-only |
| prev | [ObjectNode](#ObjectNode) | read-only |
| next | [ObjectNode](#ObjectNode) | |
| prev | [ObjectNode](#ObjectNode) | |
[:arrow_up_small:](#)
@ -1453,9 +1453,9 @@
| Field | Type | Access |
| ----- | ---- | ------ |
| next | [ObjectWarpNode](#ObjectWarpNode) | read-only |
| next | [ObjectWarpNode](#ObjectWarpNode) | |
| node | [WarpNode](#WarpNode) | read-only |
| object | [Object](#Object) | read-only |
| object | [Object](#Object) | |
[:arrow_up_small:](#)
@ -1495,7 +1495,7 @@
| headRotation | [Vec3s](#Vec3s) | read-only |
| pos | [Vec3f](#Vec3f) | read-only |
| unused | integer | |
| usedObj | [Object](#Object) | read-only |
| usedObj | [Object](#Object) | |
[:arrow_up_small:](#)
@ -1505,16 +1505,16 @@
| Field | Type | Access |
| ----- | ---- | ------ |
| currCeil | [Surface](#Surface) | read-only |
| currCeil | [Surface](#Surface) | |
| currCeilHeight | number | |
| currCeilType | integer | |
| currFloor | [Surface](#Surface) | read-only |
| currFloor | [Surface](#Surface) | |
| currFloorHeight | number | |
| currFloorType | integer | |
| prevCeil | [Surface](#Surface) | read-only |
| prevCeil | [Surface](#Surface) | |
| prevCeilHeight | number | |
| prevCeilType | integer | |
| prevFloor | [Surface](#Surface) | read-only |
| prevFloor | [Surface](#Surface) | |
| prevFloorHeight | number | |
| prevFloorType | integer | |
| waterHeight | number | |
@ -1530,10 +1530,10 @@
| activeAreaIndex | integer | |
| areaIndex | integer | |
| behaviorArg | integer | |
| next | [SpawnInfo](#SpawnInfo) | read-only |
| next | [SpawnInfo](#SpawnInfo) | |
| startAngle | [Vec3s](#Vec3s) | read-only |
| startPos | [Vec3s](#Vec3s) | read-only |
| unk18 | [GraphNode](#GraphNode) | read-only |
| unk18 | [GraphNode](#GraphNode) | |
[:arrow_up_small:](#)
@ -1580,7 +1580,7 @@
| lowerY | integer | |
| modifiedTimestamp | integer | |
| normal | [Vec3f](#Vec3f) | read-only |
| object | [Object](#Object) | read-only |
| object | [Object](#Object) | |
| originOffset | number | |
| prevVertex1 | [Vec3s](#Vec3s) | read-only |
| prevVertex2 | [Vec3s](#Vec3s) | read-only |

View file

@ -41,7 +41,9 @@ void bobomb_act_explode(void) {
}
bobomb_spawn_coin();
if (!o->createdThroughNetwork) {
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
}
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
}
}
@ -131,13 +133,15 @@ void generic_bobomb_free_loop(void) {
break;
case BOBOMB_ACT_LAVA_DEATH:
if (obj_lava_death() == 1)
if (obj_lava_death() == 1 && !o->createdThroughNetwork)
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
break;
case BOBOMB_ACT_DEATH_PLANE_DEATH:
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
if (!o->createdThroughNetwork) {
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
}
break;
}
@ -158,13 +162,15 @@ void stationary_bobomb_free_loop(void) {
break;
case BOBOMB_ACT_LAVA_DEATH:
if (obj_lava_death() == 1)
if (obj_lava_death() == 1 && !o->createdThroughNetwork)
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
break;
case BOBOMB_ACT_DEATH_PLANE_DEATH:
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
if (!o->createdThroughNetwork) {
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
}
break;
}

View file

@ -71,7 +71,9 @@ void breakable_box_small_released_loop(void) {
// Despawn, and create a corkbox respawner
if (o->oBreakableBoxSmallFramesSinceReleased > 900) {
if (!o->createdThroughNetwork) {
create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);
}
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
}
}
@ -88,7 +90,9 @@ void breakable_box_small_idle_loop(void) {
case 101:
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
if (!o->createdThroughNetwork) {
create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);
}
break;
}

View file

@ -104,7 +104,9 @@ void snowmans_bottom_act_2(void) {
}
if (o->oTimer == 200) {
if (!o->createdThroughNetwork) {
create_respawner(MODEL_CCM_SNOWMAN_BASE, bhvSnowmansBottom, 3000);
}
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
}
}

View file

@ -50,7 +50,9 @@ void yoshi_walk_loop(void) {
}
if (o->oPosY < 2100.0f) {
if (!o->createdThroughNetwork) {
create_respawner(MODEL_YOSHI, bhvYoshi, 3000);
}
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
}
}

View file

@ -181,6 +181,7 @@ static int smlua__set_field(lua_State* L) {
return 0;
}
void* valuePointer = NULL;
u8* p = ((u8*)(intptr_t)pointer) + data->valueOffset;
switch (data->valueType) {
case LVT_BOOL:*(u8*) p = smlua_to_boolean(L, -1); break;
@ -191,6 +192,14 @@ static int smlua__set_field(lua_State* L) {
case LVT_S16: *(s16*)p = smlua_to_integer(L, -1); break;
case LVT_S32: *(s32*)p = smlua_to_integer(L, -1); break;
case LVT_F32: *(f32*)p = smlua_to_number(L, -1); break;
case LVT_COBJECT_P:
valuePointer = smlua_to_cobject(L, -1, data->lot);
if (gSmLuaConvertSuccess) {
*(u8**)p = valuePointer;
}
break;
default:
LOG_LUA("_set_field on unimplemented type '%d', key '%s'", data->valueType, key);
smlua_logline();

View file

@ -20,11 +20,11 @@ static struct LuaObjectField sAnimInfoFields[LUA_ANIM_INFO_FIELD_COUNT] = {
{ "animID", LVT_S16, offsetof(struct AnimInfo, animID), false, LOT_NONE },
{ "animTimer", LVT_U16, offsetof(struct AnimInfo, animTimer), false, LOT_NONE },
{ "animYTrans", LVT_S16, offsetof(struct AnimInfo, animYTrans), false, LOT_NONE },
{ "curAnim", LVT_COBJECT_P, offsetof(struct AnimInfo, curAnim), true, LOT_ANIMATION },
{ "curAnim", LVT_COBJECT_P, offsetof(struct AnimInfo, curAnim), false, LOT_ANIMATION },
{ "prevAnimFrame", LVT_S16, offsetof(struct AnimInfo, prevAnimFrame), false, LOT_NONE },
{ "prevAnimFrameTimestamp", LVT_U32, offsetof(struct AnimInfo, prevAnimFrameTimestamp), false, LOT_NONE },
{ "prevAnimID", LVT_S16, offsetof(struct AnimInfo, prevAnimID), false, LOT_NONE },
{ "prevAnimPtr", LVT_COBJECT_P, offsetof(struct AnimInfo, prevAnimPtr), true, LOT_ANIMATION },
{ "prevAnimPtr", LVT_COBJECT_P, offsetof(struct AnimInfo, prevAnimPtr), false, LOT_ANIMATION },
};
#define LUA_ANIMATION_FIELD_COUNT 9
@ -44,22 +44,22 @@ static struct LuaObjectField sAnimationFields[LUA_ANIMATION_FIELD_COUNT] = {
static struct LuaObjectField sAreaFields[LUA_AREA_FIELD_COUNT] = {
// { "cachedBehaviors", LOT_???, offsetof(struct Area, cachedBehaviors), false, LOT_??? }, <--- UNIMPLEMENTED
// { "cachedPositions", LOT_???, offsetof(struct Area, cachedPositions), false, LOT_??? }, <--- UNIMPLEMENTED
{ "camera", LVT_COBJECT_P, offsetof(struct Area, camera), true, LOT_CAMERA },
{ "camera", LVT_COBJECT_P, offsetof(struct Area, camera), false, LOT_CAMERA },
// { "dialog", LOT_???, offsetof(struct Area, dialog), false, LOT_??? }, <--- UNIMPLEMENTED
{ "flags", LVT_S8, offsetof(struct Area, flags), false, LOT_NONE },
{ "index", LVT_S8, offsetof(struct Area, index), false, LOT_NONE },
{ "instantWarps", LVT_COBJECT_P, offsetof(struct Area, instantWarps), true, LOT_INSTANTWARP },
{ "instantWarps", LVT_COBJECT_P, offsetof(struct Area, instantWarps), false, LOT_INSTANTWARP },
{ "macroObjects", LVT_S16_P, offsetof(struct Area, macroObjects), true, LOT_POINTER },
{ "musicParam", LVT_U16, offsetof(struct Area, musicParam), false, LOT_NONE },
{ "musicParam2", LVT_U16, offsetof(struct Area, musicParam2), false, LOT_NONE },
{ "objectSpawnInfos", LVT_COBJECT_P, offsetof(struct Area, objectSpawnInfos), true, LOT_SPAWNINFO },
{ "paintingWarpNodes", LVT_COBJECT_P, offsetof(struct Area, paintingWarpNodes), true, LOT_WARPNODE },
{ "objectSpawnInfos", LVT_COBJECT_P, offsetof(struct Area, objectSpawnInfos), false, LOT_SPAWNINFO },
{ "paintingWarpNodes", LVT_COBJECT_P, offsetof(struct Area, paintingWarpNodes), false, LOT_WARPNODE },
{ "surfaceRooms", LVT_S8_P, offsetof(struct Area, surfaceRooms), true, LOT_POINTER },
{ "terrainData", LVT_S16_P, offsetof(struct Area, terrainData), true, LOT_POINTER },
{ "terrainType", LVT_U16, offsetof(struct Area, terrainType), false, LOT_NONE },
// { "unk04", LVT_COBJECT_P, offsetof(struct Area, unk04), true, LOT_??? }, <--- UNIMPLEMENTED
// { "unused28", LVT_COBJECT_P, offsetof(struct Area, unused28), true, LOT_??? }, <--- UNIMPLEMENTED
{ "warpNodes", LVT_COBJECT_P, offsetof(struct Area, warpNodes), true, LOT_OBJECTWARPNODE },
// { "unk04", LVT_COBJECT_P, offsetof(struct Area, unk04), false, LOT_??? }, <--- UNIMPLEMENTED
// { "unused28", LVT_COBJECT_P, offsetof(struct Area, unused28), false, LOT_??? }, <--- UNIMPLEMENTED
{ "warpNodes", LVT_COBJECT_P, offsetof(struct Area, warpNodes), false, LOT_OBJECTWARPNODE },
// { "whirlpools", LOT_???, offsetof(struct Area, whirlpools), false, LOT_??? }, <--- UNIMPLEMENTED
};
@ -249,11 +249,11 @@ static struct LuaObjectField sGlobalTexturesFields[LUA_GLOBAL_TEXTURES_FIELD_COU
#define LUA_GRAPH_NODE_FIELD_COUNT 6
static struct LuaObjectField sGraphNodeFields[LUA_GRAPH_NODE_FIELD_COUNT] = {
{ "children", LVT_COBJECT_P, offsetof(struct GraphNode, children), true, LOT_GRAPHNODE },
{ "children", LVT_COBJECT_P, offsetof(struct GraphNode, children), false, LOT_GRAPHNODE },
{ "flags", LVT_S16, offsetof(struct GraphNode, flags), false, LOT_NONE },
{ "next", LVT_COBJECT_P, offsetof(struct GraphNode, next), true, LOT_GRAPHNODE },
{ "parent", LVT_COBJECT_P, offsetof(struct GraphNode, parent), true, LOT_GRAPHNODE },
{ "prev", LVT_COBJECT_P, offsetof(struct GraphNode, prev), true, LOT_GRAPHNODE },
{ "next", LVT_COBJECT_P, offsetof(struct GraphNode, next), false, LOT_GRAPHNODE },
{ "parent", LVT_COBJECT_P, offsetof(struct GraphNode, parent), false, LOT_GRAPHNODE },
{ "prev", LVT_COBJECT_P, offsetof(struct GraphNode, prev), false, LOT_GRAPHNODE },
{ "type", LVT_S16, offsetof(struct GraphNode, type), false, LOT_NONE },
};
@ -276,11 +276,11 @@ static struct LuaObjectField sGraphNodeObjectFields[LUA_GRAPH_NODE_OBJECT_FIELD_
{ "prevThrowMatrixTimestamp", LVT_U32, offsetof(struct GraphNodeObject, prevThrowMatrixTimestamp), false, LOT_NONE },
{ "prevTimestamp", LVT_U32, offsetof(struct GraphNodeObject, prevTimestamp), false, LOT_NONE },
{ "scale", LVT_COBJECT, offsetof(struct GraphNodeObject, scale), true, LOT_VEC3F },
{ "sharedChild", LVT_COBJECT_P, offsetof(struct GraphNodeObject, sharedChild), true, LOT_GRAPHNODE },
{ "sharedChild", LVT_COBJECT_P, offsetof(struct GraphNodeObject, sharedChild), false, LOT_GRAPHNODE },
{ "skipInterpolationTimestamp", LVT_U32, offsetof(struct GraphNodeObject, skipInterpolationTimestamp), false, LOT_NONE },
// { "throwMatrix", LVT_???, offsetof(struct GraphNodeObject, throwMatrix), false, LOT_??? }, <--- UNIMPLEMENTED
// { "throwMatrixInterpolated", LVT_???, offsetof(struct GraphNodeObject, throwMatrixInterpolated), false, LOT_??? }, <--- UNIMPLEMENTED
{ "unk4C", LVT_COBJECT_P, offsetof(struct GraphNodeObject, unk4C), true, LOT_SPAWNINFO },
{ "unk4C", LVT_COBJECT_P, offsetof(struct GraphNodeObject, unk4C), false, LOT_SPAWNINFO },
};
#define LUA_GRAPH_NODE_802_A45_E4_FIELD_COUNT 6
@ -361,10 +361,10 @@ static struct LuaObjectField sLinearTransitionPointFields[LUA_LINEAR_TRANSITION_
#define LUA_MARIO_ANIMATION_FIELD_COUNT 2
static struct LuaObjectField sMarioAnimationFields[LUA_MARIO_ANIMATION_FIELD_COUNT] = {
// { "animDmaTable", LVT_COBJECT_P, offsetof(struct MarioAnimation, animDmaTable), true, LOT_??? }, <--- UNIMPLEMENTED
// { "animDmaTable", LVT_COBJECT_P, offsetof(struct MarioAnimation, animDmaTable), false, LOT_??? }, <--- UNIMPLEMENTED
{ "currentAnimAddr", LVT_U8_P, offsetof(struct MarioAnimation, currentAnimAddr), true, LOT_POINTER },
// { "padding", LOT_???, offsetof(struct MarioAnimation, padding), false, LOT_??? }, <--- UNIMPLEMENTED
{ "targetAnim", LVT_COBJECT_P, offsetof(struct MarioAnimation, targetAnim), true, LOT_ANIMATION },
{ "targetAnim", LVT_COBJECT_P, offsetof(struct MarioAnimation, targetAnim), false, LOT_ANIMATION },
};
#define LUA_MARIO_BODY_STATE_FIELD_COUNT 12
@ -391,22 +391,22 @@ static struct LuaObjectField sMarioStateFields[LUA_MARIO_STATE_FIELD_COUNT] = {
{ "actionState", LVT_U16, offsetof(struct MarioState, actionState), false, LOT_NONE },
{ "actionTimer", LVT_U16, offsetof(struct MarioState, actionTimer), false, LOT_NONE },
{ "angleVel", LVT_COBJECT, offsetof(struct MarioState, angleVel), true, LOT_VEC3S },
{ "animation", LVT_COBJECT_P, offsetof(struct MarioState, animation), true, LOT_MARIOANIMATION },
{ "area", LVT_COBJECT_P, offsetof(struct MarioState, area), true, LOT_AREA },
{ "bubbleObj", LVT_COBJECT_P, offsetof(struct MarioState, bubbleObj), true, LOT_OBJECT },
{ "animation", LVT_COBJECT_P, offsetof(struct MarioState, animation), false, LOT_MARIOANIMATION },
{ "area", LVT_COBJECT_P, offsetof(struct MarioState, area), false, LOT_AREA },
{ "bubbleObj", LVT_COBJECT_P, offsetof(struct MarioState, bubbleObj), false, LOT_OBJECT },
{ "capTimer", LVT_U16, offsetof(struct MarioState, capTimer), false, LOT_NONE },
{ "ceil", LVT_COBJECT_P, offsetof(struct MarioState, ceil), true, LOT_SURFACE },
{ "ceil", LVT_COBJECT_P, offsetof(struct MarioState, ceil), false, LOT_SURFACE },
{ "ceilHeight", LVT_F32, offsetof(struct MarioState, ceilHeight), false, LOT_NONE },
{ "character", LVT_COBJECT_P, offsetof(struct MarioState, character), true, LOT_CHARACTER },
{ "character", LVT_COBJECT_P, offsetof(struct MarioState, character), false, LOT_CHARACTER },
{ "collidedObjInteractTypes", LVT_U32, offsetof(struct MarioState, collidedObjInteractTypes), false, LOT_NONE },
{ "controller", LVT_COBJECT_P, offsetof(struct MarioState, controller), true, LOT_CONTROLLER },
{ "controller", LVT_COBJECT_P, offsetof(struct MarioState, controller), false, LOT_CONTROLLER },
{ "curAnimOffset", LVT_F32, offsetof(struct MarioState, curAnimOffset), false, LOT_NONE },
{ "currentRoom", LVT_S16, offsetof(struct MarioState, currentRoom), false, LOT_NONE },
{ "doubleJumpTimer", LVT_U8, offsetof(struct MarioState, doubleJumpTimer), false, LOT_NONE },
{ "faceAngle", LVT_COBJECT, offsetof(struct MarioState, faceAngle), true, LOT_VEC3S },
{ "fadeWarpOpacity", LVT_U8, offsetof(struct MarioState, fadeWarpOpacity), false, LOT_NONE },
{ "flags", LVT_U32, offsetof(struct MarioState, flags), false, LOT_NONE },
{ "floor", LVT_COBJECT_P, offsetof(struct MarioState, floor), true, LOT_SURFACE },
{ "floor", LVT_COBJECT_P, offsetof(struct MarioState, floor), false, LOT_SURFACE },
{ "floorAngle", LVT_S16, offsetof(struct MarioState, floorAngle), false, LOT_NONE },
{ "floorHeight", LVT_F32, offsetof(struct MarioState, floorHeight), false, LOT_NONE },
{ "forwardVel", LVT_F32, offsetof(struct MarioState, forwardVel), false, LOT_NONE },
@ -415,17 +415,17 @@ static struct LuaObjectField sMarioStateFields[LUA_MARIO_STATE_FIELD_COUNT] = {
{ "freeze", LVT_U8, offsetof(struct MarioState, freeze), false, LOT_NONE },
{ "healCounter", LVT_U8, offsetof(struct MarioState, healCounter), false, LOT_NONE },
{ "health", LVT_S16, offsetof(struct MarioState, health), false, LOT_NONE },
{ "heldByObj", LVT_COBJECT_P, offsetof(struct MarioState, heldByObj), true, LOT_OBJECT },
{ "heldObj", LVT_COBJECT_P, offsetof(struct MarioState, heldObj), true, LOT_OBJECT },
{ "heldByObj", LVT_COBJECT_P, offsetof(struct MarioState, heldByObj), false, LOT_OBJECT },
{ "heldObj", LVT_COBJECT_P, offsetof(struct MarioState, heldObj), false, LOT_OBJECT },
{ "hurtCounter", LVT_U8, offsetof(struct MarioState, hurtCounter), false, LOT_NONE },
{ "input", LVT_U16, offsetof(struct MarioState, input), false, LOT_NONE },
{ "intendedMag", LVT_F32, offsetof(struct MarioState, intendedMag), false, LOT_NONE },
{ "intendedYaw", LVT_S16, offsetof(struct MarioState, intendedYaw), false, LOT_NONE },
{ "interactObj", LVT_COBJECT_P, offsetof(struct MarioState, interactObj), true, LOT_OBJECT },
{ "interactObj", LVT_COBJECT_P, offsetof(struct MarioState, interactObj), false, LOT_OBJECT },
{ "invincTimer", LVT_S16, offsetof(struct MarioState, invincTimer), false, LOT_NONE },
{ "isSnoring", LVT_U8, offsetof(struct MarioState, isSnoring), false, LOT_NONE },
{ "marioBodyState", LVT_COBJECT_P, offsetof(struct MarioState, marioBodyState), true, LOT_MARIOBODYSTATE },
{ "marioObj", LVT_COBJECT_P, offsetof(struct MarioState, marioObj), true, LOT_OBJECT },
{ "marioBodyState", LVT_COBJECT_P, offsetof(struct MarioState, marioBodyState), false, LOT_MARIOBODYSTATE },
{ "marioObj", LVT_COBJECT_P, offsetof(struct MarioState, marioObj), false, LOT_OBJECT },
{ "minimumBoneY", LVT_F32, offsetof(struct MarioState, minimumBoneY), false, LOT_NONE },
{ "nonInstantWarpPos", LVT_COBJECT, offsetof(struct MarioState, nonInstantWarpPos), true, LOT_VEC3F },
{ "numCoins", LVT_S16, offsetof(struct MarioState, numCoins), false, LOT_NONE },
@ -439,23 +439,23 @@ static struct LuaObjectField sMarioStateFields[LUA_MARIO_STATE_FIELD_COUNT] = {
{ "prevAction", LVT_U32, offsetof(struct MarioState, prevAction), false, LOT_NONE },
{ "prevNumStarsForDialog", LVT_S16, offsetof(struct MarioState, prevNumStarsForDialog), false, LOT_NONE },
{ "quicksandDepth", LVT_F32, offsetof(struct MarioState, quicksandDepth), false, LOT_NONE },
{ "riddenObj", LVT_COBJECT_P, offsetof(struct MarioState, riddenObj), true, LOT_OBJECT },
{ "riddenObj", LVT_COBJECT_P, offsetof(struct MarioState, riddenObj), false, LOT_OBJECT },
{ "slideVelX", LVT_F32, offsetof(struct MarioState, slideVelX), false, LOT_NONE },
{ "slideVelZ", LVT_F32, offsetof(struct MarioState, slideVelZ), false, LOT_NONE },
{ "slideYaw", LVT_S16, offsetof(struct MarioState, slideYaw), false, LOT_NONE },
{ "spawnInfo", LVT_COBJECT_P, offsetof(struct MarioState, spawnInfo), true, LOT_SPAWNINFO },
{ "spawnInfo", LVT_COBJECT_P, offsetof(struct MarioState, spawnInfo), false, LOT_SPAWNINFO },
// { "splineKeyframe", LVT_???, offsetof(struct MarioState, splineKeyframe), false, LOT_??? }, <--- UNIMPLEMENTED
{ "splineKeyframeFraction", LVT_F32, offsetof(struct MarioState, splineKeyframeFraction), false, LOT_NONE },
{ "splineState", LVT_S32, offsetof(struct MarioState, splineState), false, LOT_NONE },
{ "squishTimer", LVT_U8, offsetof(struct MarioState, squishTimer), false, LOT_NONE },
{ "statusForCamera", LVT_COBJECT_P, offsetof(struct MarioState, statusForCamera), true, LOT_PLAYERCAMERASTATE },
{ "statusForCamera", LVT_COBJECT_P, offsetof(struct MarioState, statusForCamera), false, LOT_PLAYERCAMERASTATE },
{ "terrainSoundAddend", LVT_U32, offsetof(struct MarioState, terrainSoundAddend), false, LOT_NONE },
{ "twirlYaw", LVT_S16, offsetof(struct MarioState, twirlYaw), false, LOT_NONE },
{ "unkB0", LVT_S16, offsetof(struct MarioState, unkB0), false, LOT_NONE },
{ "unkC4", LVT_F32, offsetof(struct MarioState, unkC4), false, LOT_NONE },
{ "usedObj", LVT_COBJECT_P, offsetof(struct MarioState, usedObj), true, LOT_OBJECT },
{ "usedObj", LVT_COBJECT_P, offsetof(struct MarioState, usedObj), false, LOT_OBJECT },
{ "vel", LVT_COBJECT, offsetof(struct MarioState, vel), true, LOT_VEC3F },
{ "wall", LVT_COBJECT_P, offsetof(struct MarioState, wall), true, LOT_SURFACE },
{ "wall", LVT_COBJECT_P, offsetof(struct MarioState, wall), false, LOT_SURFACE },
{ "wallKickTimer", LVT_U8, offsetof(struct MarioState, wallKickTimer), false, LOT_NONE },
{ "wasNetworkVisible", LVT_U8, offsetof(struct MarioState, wasNetworkVisible), false, LOT_NONE },
{ "waterLevel", LVT_S16, offsetof(struct MarioState, waterLevel), false, LOT_NONE },
@ -514,7 +514,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "collidedObjInteractTypes", LVT_U32, offsetof(struct Object, collidedObjInteractTypes), false, LOT_NONE },
// { "collidedObjs", LOT_???, offsetof(struct Object, collidedObjs), false, LOT_??? }, <--- UNIMPLEMENTED
// { "collisionData", LVT_???, offsetof(struct Object, collisionData), false, LOT_??? }, <--- UNIMPLEMENTED
{ "createdThroughNetwork", LVT_U8, offsetof(struct Object, createdThroughNetwork), false, LOT_NONE },
{ "createdThroughNetwork", LVT_U8, offsetof(struct Object, createdThroughNetwork), true, LOT_NONE },
{ "curBhvCommand", LVT_BEHAVIORSCRIPT_P, offsetof(struct Object, curBhvCommand), true, LOT_POINTER },
{ "globalPlayerIndex", LVT_U8, offsetof(struct Object, globalPlayerIndex), false, LOT_NONE },
{ "header", LVT_COBJECT, offsetof(struct Object, header), true, LOT_OBJECTNODE },
@ -588,7 +588,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oBooMoveYawDuringHit", LVT_S32, offsetof(struct Object, oBooMoveYawDuringHit), false, LOT_NONE },
{ "oBooNegatedAggressiveness", LVT_F32, offsetof(struct Object, oBooNegatedAggressiveness), false, LOT_NONE },
{ "oBooOscillationTimer", LVT_S32, offsetof(struct Object, oBooOscillationTimer), false, LOT_NONE },
{ "oBooParentBigBoo", LVT_COBJECT_P, offsetof(struct Object, oBooParentBigBoo), true, LOT_OBJECT },
{ "oBooParentBigBoo", LVT_COBJECT_P, offsetof(struct Object, oBooParentBigBoo), false, LOT_OBJECT },
{ "oBooTargetOpacity", LVT_S32, offsetof(struct Object, oBooTargetOpacity), false, LOT_NONE },
{ "oBooTurningSpeed", LVT_S16, offsetof(struct Object, oBooTurningSpeed), false, LOT_NONE },
{ "oBookSwitchManagerUnkF4", LVT_S32, offsetof(struct Object, oBookSwitchManagerUnkF4), false, LOT_NONE },
@ -669,7 +669,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oChainChompNumLunges", LVT_S32, offsetof(struct Object, oChainChompNumLunges), false, LOT_NONE },
{ "oChainChompReleaseStatus", LVT_S32, offsetof(struct Object, oChainChompReleaseStatus), false, LOT_NONE },
{ "oChainChompRestrictedByChain", LVT_S32, offsetof(struct Object, oChainChompRestrictedByChain), false, LOT_NONE },
{ "oChainChompSegments", LVT_COBJECT_P, offsetof(struct Object, oChainChompSegments), true, LOT_CHAINSEGMENT },
{ "oChainChompSegments", LVT_COBJECT_P, offsetof(struct Object, oChainChompSegments), false, LOT_CHAINSEGMENT },
{ "oChainChompTargetPitch", LVT_S32, offsetof(struct Object, oChainChompTargetPitch), false, LOT_NONE },
{ "oChainChompUnk104", LVT_F32, offsetof(struct Object, oChainChompUnk104), false, LOT_NONE },
{ "oCheckerBoardPlatformUnk1AC", LVT_F32, offsetof(struct Object, oCheckerBoardPlatformUnk1AC), false, LOT_NONE },
@ -772,7 +772,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oFlags", LVT_U32, offsetof(struct Object, oFlags), false, LOT_NONE },
{ "oFlameThowerFlameUnk110", LVT_S32, offsetof(struct Object, oFlameThowerFlameUnk110), false, LOT_NONE },
{ "oFlameThowerUnk110", LVT_S32, offsetof(struct Object, oFlameThowerUnk110), false, LOT_NONE },
{ "oFlameUnk100", LVT_COBJECT_P, offsetof(struct Object, oFlameUnk100), true, LOT_OBJECT },
{ "oFlameUnk100", LVT_COBJECT_P, offsetof(struct Object, oFlameUnk100), false, LOT_OBJECT },
{ "oFlameUnkF4", LVT_F32, offsetof(struct Object, oFlameUnkF4), false, LOT_NONE },
{ "oFlameUnkF8", LVT_S32, offsetof(struct Object, oFlameUnkF8), false, LOT_NONE },
{ "oFlameUnkFC", LVT_F32, offsetof(struct Object, oFlameUnkFC), false, LOT_NONE },
@ -780,7 +780,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oFloatingPlatformUnkF4", LVT_S32, offsetof(struct Object, oFloatingPlatformUnkF4), false, LOT_NONE },
{ "oFloatingPlatformUnkF8", LVT_F32, offsetof(struct Object, oFloatingPlatformUnkF8), false, LOT_NONE },
{ "oFloatingPlatformUnkFC", LVT_F32, offsetof(struct Object, oFloatingPlatformUnkFC), false, LOT_NONE },
{ "oFloor", LVT_COBJECT_P, offsetof(struct Object, oFloor), true, LOT_SURFACE },
{ "oFloor", LVT_COBJECT_P, offsetof(struct Object, oFloor), false, LOT_SURFACE },
{ "oFloorHeight", LVT_F32, offsetof(struct Object, oFloorHeight), false, LOT_NONE },
{ "oFloorRoom", LVT_S16, offsetof(struct Object, oFloorRoom), false, LOT_NONE },
{ "oFloorSwitchPressAnimationUnk100", LVT_S32, offsetof(struct Object, oFloorSwitchPressAnimationUnk100), false, LOT_NONE },
@ -819,8 +819,8 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oHeaveHoUnk88", LVT_S32, offsetof(struct Object, oHeaveHoUnk88), false, LOT_NONE },
{ "oHeaveHoUnkF4", LVT_F32, offsetof(struct Object, oHeaveHoUnkF4), false, LOT_NONE },
{ "oHeldState", LVT_U32, offsetof(struct Object, oHeldState), false, LOT_NONE },
{ "oHiddenBlueCoinSwitch", LVT_COBJECT_P, offsetof(struct Object, oHiddenBlueCoinSwitch), true, LOT_OBJECT },
{ "oHiddenObjectUnkF4", LVT_COBJECT_P, offsetof(struct Object, oHiddenObjectUnkF4), true, LOT_OBJECT },
{ "oHiddenBlueCoinSwitch", LVT_COBJECT_P, offsetof(struct Object, oHiddenBlueCoinSwitch), false, LOT_OBJECT },
{ "oHiddenObjectUnkF4", LVT_COBJECT_P, offsetof(struct Object, oHiddenObjectUnkF4), false, LOT_OBJECT },
{ "oHiddenStarTriggerCounter", LVT_S32, offsetof(struct Object, oHiddenStarTriggerCounter), false, LOT_NONE },
{ "oHomeX", LVT_F32, offsetof(struct Object, oHomeX), false, LOT_NONE },
{ "oHomeY", LVT_F32, offsetof(struct Object, oHomeY), false, LOT_NONE },
@ -841,7 +841,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oInteractStatus", LVT_S32, offsetof(struct Object, oInteractStatus), false, LOT_NONE },
{ "oInteractType", LVT_U32, offsetof(struct Object, oInteractType), false, LOT_NONE },
{ "oInteractionSubtype", LVT_U32, offsetof(struct Object, oInteractionSubtype), false, LOT_NONE },
{ "oIntroLakituCloud", LVT_COBJECT_P, offsetof(struct Object, oIntroLakituCloud), true, LOT_OBJECT },
{ "oIntroLakituCloud", LVT_COBJECT_P, offsetof(struct Object, oIntroLakituCloud), false, LOT_OBJECT },
{ "oIntroLakituSplineSegment", LVT_F32, offsetof(struct Object, oIntroLakituSplineSegment), false, LOT_NONE },
{ "oIntroLakituSplineSegmentProgress", LVT_F32, offsetof(struct Object, oIntroLakituSplineSegmentProgress), false, LOT_NONE },
{ "oIntroLakituUnk100", LVT_F32, offsetof(struct Object, oIntroLakituUnk100), false, LOT_NONE },
@ -852,7 +852,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oIntroPeachDistToCamera", LVT_F32, offsetof(struct Object, oIntroPeachDistToCamera), false, LOT_NONE },
{ "oIntroPeachPitchFromFocus", LVT_F32, offsetof(struct Object, oIntroPeachPitchFromFocus), false, LOT_NONE },
{ "oIntroPeachYawFromFocus", LVT_F32, offsetof(struct Object, oIntroPeachYawFromFocus), false, LOT_NONE },
{ "oJrbSlidingBoxUnkF4", LVT_COBJECT_P, offsetof(struct Object, oJrbSlidingBoxUnkF4), true, LOT_OBJECT },
{ "oJrbSlidingBoxUnkF4", LVT_COBJECT_P, offsetof(struct Object, oJrbSlidingBoxUnkF4), false, LOT_OBJECT },
{ "oJrbSlidingBoxUnkF8", LVT_S32, offsetof(struct Object, oJrbSlidingBoxUnkF8), false, LOT_NONE },
{ "oJrbSlidingBoxUnkFC", LVT_F32, offsetof(struct Object, oJrbSlidingBoxUnkFC), false, LOT_NONE },
{ "oJumpingBoxUnkF4", LVT_S32, offsetof(struct Object, oJumpingBoxUnkF4), false, LOT_NONE },
@ -938,7 +938,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oMipsStarStatus", LVT_S32, offsetof(struct Object, oMipsStarStatus), false, LOT_NONE },
{ "oMipsStartWaypointIndex", LVT_S32, offsetof(struct Object, oMipsStartWaypointIndex), false, LOT_NONE },
{ "oMoneybagJumpState", LVT_S32, offsetof(struct Object, oMoneybagJumpState), false, LOT_NONE },
{ "oMontyMoleCurrentHole", LVT_COBJECT_P, offsetof(struct Object, oMontyMoleCurrentHole), true, LOT_OBJECT },
{ "oMontyMoleCurrentHole", LVT_COBJECT_P, offsetof(struct Object, oMontyMoleCurrentHole), false, LOT_OBJECT },
{ "oMontyMoleHeightRelativeToFloor", LVT_F32, offsetof(struct Object, oMontyMoleHeightRelativeToFloor), false, LOT_NONE },
{ "oMontyMoleHoleCooldown", LVT_S32, offsetof(struct Object, oMontyMoleHoleCooldown), false, LOT_NONE },
{ "oMontyMoleHoleX", LVT_F32, offsetof(struct Object, oMontyMoleHoleX), false, LOT_NONE },
@ -954,7 +954,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oMrBlizzardDizziness", LVT_F32, offsetof(struct Object, oMrBlizzardDizziness), false, LOT_NONE },
{ "oMrBlizzardGraphYOffset", LVT_F32, offsetof(struct Object, oMrBlizzardGraphYOffset), false, LOT_NONE },
{ "oMrBlizzardGraphYVel", LVT_F32, offsetof(struct Object, oMrBlizzardGraphYVel), false, LOT_NONE },
{ "oMrBlizzardHeldObj", LVT_COBJECT_P, offsetof(struct Object, oMrBlizzardHeldObj), true, LOT_OBJECT },
{ "oMrBlizzardHeldObj", LVT_COBJECT_P, offsetof(struct Object, oMrBlizzardHeldObj), false, LOT_OBJECT },
{ "oMrBlizzardScale", LVT_F32, offsetof(struct Object, oMrBlizzardScale), false, LOT_NONE },
{ "oMrBlizzardTargetMoveYaw", LVT_S32, offsetof(struct Object, oMrBlizzardTargetMoveYaw), false, LOT_NONE },
{ "oMrBlizzardTimer", LVT_S32, offsetof(struct Object, oMrBlizzardTimer), false, LOT_NONE },
@ -968,13 +968,13 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oNumLootCoins", LVT_S32, offsetof(struct Object, oNumLootCoins), false, LOT_NONE },
{ "oOpacity", LVT_S32, offsetof(struct Object, oOpacity), false, LOT_NONE },
{ "oOpenableGrillUnk88", LVT_S32, offsetof(struct Object, oOpenableGrillUnk88), false, LOT_NONE },
{ "oOpenableGrillUnkF4", LVT_COBJECT_P, offsetof(struct Object, oOpenableGrillUnkF4), true, LOT_OBJECT },
{ "oOpenableGrillUnkF4", LVT_COBJECT_P, offsetof(struct Object, oOpenableGrillUnkF4), false, LOT_OBJECT },
{ "oParentRelativePosX", LVT_F32, offsetof(struct Object, oParentRelativePosX), false, LOT_NONE },
{ "oParentRelativePosY", LVT_F32, offsetof(struct Object, oParentRelativePosY), false, LOT_NONE },
{ "oParentRelativePosZ", LVT_F32, offsetof(struct Object, oParentRelativePosZ), false, LOT_NONE },
{ "oPathedPrevWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPathedPrevWaypoint), true, LOT_WAYPOINT },
{ "oPathedPrevWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPathedPrevWaypoint), false, LOT_WAYPOINT },
{ "oPathedPrevWaypointFlags", LVT_S32, offsetof(struct Object, oPathedPrevWaypointFlags), false, LOT_NONE },
{ "oPathedStartWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPathedStartWaypoint), true, LOT_WAYPOINT },
{ "oPathedStartWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPathedStartWaypoint), false, LOT_WAYPOINT },
{ "oPathedTargetPitch", LVT_S32, offsetof(struct Object, oPathedTargetPitch), false, LOT_NONE },
{ "oPathedTargetYaw", LVT_S32, offsetof(struct Object, oPathedTargetYaw), false, LOT_NONE },
{ "oPiranhaPlantScale", LVT_F32, offsetof(struct Object, oPiranhaPlantScale), false, LOT_NONE },
@ -988,10 +988,10 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oPlatformOnTrackIsNotSkiLift", LVT_S16, offsetof(struct Object, oPlatformOnTrackIsNotSkiLift), false, LOT_NONE },
{ "oPlatformOnTrackOffsetY", LVT_F32, offsetof(struct Object, oPlatformOnTrackOffsetY), false, LOT_NONE },
{ "oPlatformOnTrackPitch", LVT_S32, offsetof(struct Object, oPlatformOnTrackPitch), false, LOT_NONE },
{ "oPlatformOnTrackPrevWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPlatformOnTrackPrevWaypoint), true, LOT_WAYPOINT },
{ "oPlatformOnTrackPrevWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPlatformOnTrackPrevWaypoint), false, LOT_WAYPOINT },
{ "oPlatformOnTrackPrevWaypointFlags", LVT_S32, offsetof(struct Object, oPlatformOnTrackPrevWaypointFlags), false, LOT_NONE },
{ "oPlatformOnTrackSkiLiftRollVel", LVT_F32, offsetof(struct Object, oPlatformOnTrackSkiLiftRollVel), false, LOT_NONE },
{ "oPlatformOnTrackStartWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPlatformOnTrackStartWaypoint), true, LOT_WAYPOINT },
{ "oPlatformOnTrackStartWaypoint", LVT_COBJECT_P, offsetof(struct Object, oPlatformOnTrackStartWaypoint), false, LOT_WAYPOINT },
{ "oPlatformOnTrackType", LVT_S16, offsetof(struct Object, oPlatformOnTrackType), false, LOT_NONE },
{ "oPlatformOnTrackWasStoodOn", LVT_S16, offsetof(struct Object, oPlatformOnTrackWasStoodOn), false, LOT_NONE },
{ "oPlatformOnTrackYaw", LVT_S32, offsetof(struct Object, oPlatformOnTrackYaw), false, LOT_NONE },
@ -1004,7 +1004,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oPlatformTimer", LVT_S32, offsetof(struct Object, oPlatformTimer), false, LOT_NONE },
{ "oPlatformUnk10C", LVT_F32, offsetof(struct Object, oPlatformUnk10C), false, LOT_NONE },
{ "oPlatformUnk110", LVT_F32, offsetof(struct Object, oPlatformUnk110), false, LOT_NONE },
{ "oPlatformUnkF8", LVT_COBJECT_P, offsetof(struct Object, oPlatformUnkF8), true, LOT_OBJECT },
{ "oPlatformUnkF8", LVT_COBJECT_P, offsetof(struct Object, oPlatformUnkF8), false, LOT_OBJECT },
{ "oPlatformUnkFC", LVT_S32, offsetof(struct Object, oPlatformUnkFC), false, LOT_NONE },
{ "oPokeyAliveBodyPartFlags", LVT_U32, offsetof(struct Object, oPokeyAliveBodyPartFlags), false, LOT_NONE },
{ "oPokeyBodyPartBlinkTimer", LVT_S32, offsetof(struct Object, oPokeyBodyPartBlinkTimer), false, LOT_NONE },
@ -1096,7 +1096,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oStarSelectorType", LVT_S32, offsetof(struct Object, oStarSelectorType), false, LOT_NONE },
{ "oStarSpawnDisFromHome", LVT_F32, offsetof(struct Object, oStarSpawnDisFromHome), false, LOT_NONE },
{ "oStarSpawnUnkFC", LVT_F32, offsetof(struct Object, oStarSpawnUnkFC), false, LOT_NONE },
{ "oStrongWindParticlePenguinObj", LVT_COBJECT_P, offsetof(struct Object, oStrongWindParticlePenguinObj), true, LOT_OBJECT },
{ "oStrongWindParticlePenguinObj", LVT_COBJECT_P, offsetof(struct Object, oStrongWindParticlePenguinObj), false, LOT_OBJECT },
{ "oSubAction", LVT_S32, offsetof(struct Object, oSubAction), false, LOT_NONE },
{ "oSushiSharkUnkF4", LVT_S32, offsetof(struct Object, oSushiSharkUnkF4), false, LOT_NONE },
{ "oSwingPlatformAngle", LVT_F32, offsetof(struct Object, oSwingPlatformAngle), false, LOT_NONE },
@ -1238,7 +1238,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oWhitePuffUnkFC", LVT_S32, offsetof(struct Object, oWhitePuffUnkFC), false, LOT_NONE },
{ "oWhompShakeVal", LVT_S32, offsetof(struct Object, oWhompShakeVal), false, LOT_NONE },
{ "oWigglerFallThroughFloorsHeight", LVT_F32, offsetof(struct Object, oWigglerFallThroughFloorsHeight), false, LOT_NONE },
{ "oWigglerSegments", LVT_COBJECT_P, offsetof(struct Object, oWigglerSegments), true, LOT_CHAINSEGMENT },
{ "oWigglerSegments", LVT_COBJECT_P, offsetof(struct Object, oWigglerSegments), false, LOT_CHAINSEGMENT },
{ "oWigglerSquishSpeed", LVT_F32, offsetof(struct Object, oWigglerSquishSpeed), false, LOT_NONE },
{ "oWigglerTargetYaw", LVT_S32, offsetof(struct Object, oWigglerTargetYaw), false, LOT_NONE },
{ "oWigglerTextStatus", LVT_S16, offsetof(struct Object, oWigglerTextStatus), false, LOT_NONE },
@ -1254,9 +1254,9 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oYoshiBlinkTimer", LVT_S32, offsetof(struct Object, oYoshiBlinkTimer), false, LOT_NONE },
{ "oYoshiChosenHome", LVT_S32, offsetof(struct Object, oYoshiChosenHome), false, LOT_NONE },
{ "oYoshiTargetYaw", LVT_S32, offsetof(struct Object, oYoshiTargetYaw), false, LOT_NONE },
{ "parentObj", LVT_COBJECT_P, offsetof(struct Object, parentObj), true, LOT_OBJECT },
{ "platform", LVT_COBJECT_P, offsetof(struct Object, platform), true, LOT_OBJECT },
{ "prevObj", LVT_COBJECT_P, offsetof(struct Object, prevObj), true, LOT_OBJECT },
{ "parentObj", LVT_COBJECT_P, offsetof(struct Object, parentObj), false, LOT_OBJECT },
{ "platform", LVT_COBJECT_P, offsetof(struct Object, platform), false, LOT_OBJECT },
{ "prevObj", LVT_COBJECT_P, offsetof(struct Object, prevObj), false, LOT_OBJECT },
// { "ptrData", LOT_???, offsetof(struct Object, ptrData), false, LOT_??? }, <--- UNIMPLEMENTED
// { "rawData", LOT_???, offsetof(struct Object, rawData), false, LOT_??? }, <--- UNIMPLEMENTED
// { "respawnInfo", LVT_???, offsetof(struct Object, respawnInfo), false, LOT_??? }, <--- UNIMPLEMENTED
@ -1281,15 +1281,15 @@ static struct LuaObjectField sObjectHitboxFields[LUA_OBJECT_HITBOX_FIELD_COUNT]
#define LUA_OBJECT_NODE_FIELD_COUNT 3
static struct LuaObjectField sObjectNodeFields[LUA_OBJECT_NODE_FIELD_COUNT] = {
{ "gfx", LVT_COBJECT, offsetof(struct ObjectNode, gfx), true, LOT_GRAPHNODEOBJECT },
{ "next", LVT_COBJECT_P, offsetof(struct ObjectNode, next), true, LOT_OBJECTNODE },
{ "prev", LVT_COBJECT_P, offsetof(struct ObjectNode, prev), true, LOT_OBJECTNODE },
{ "next", LVT_COBJECT_P, offsetof(struct ObjectNode, next), false, LOT_OBJECTNODE },
{ "prev", LVT_COBJECT_P, offsetof(struct ObjectNode, prev), false, LOT_OBJECTNODE },
};
#define LUA_OBJECT_WARP_NODE_FIELD_COUNT 3
static struct LuaObjectField sObjectWarpNodeFields[LUA_OBJECT_WARP_NODE_FIELD_COUNT] = {
{ "next", LVT_COBJECT_P, offsetof(struct ObjectWarpNode, next), true, LOT_OBJECTWARPNODE },
{ "next", LVT_COBJECT_P, offsetof(struct ObjectWarpNode, next), false, LOT_OBJECTWARPNODE },
{ "node", LVT_COBJECT, offsetof(struct ObjectWarpNode, node), true, LOT_WARPNODE },
{ "object", LVT_COBJECT_P, offsetof(struct ObjectWarpNode, object), true, LOT_OBJECT },
{ "object", LVT_COBJECT_P, offsetof(struct ObjectWarpNode, object), false, LOT_OBJECT },
};
#define LUA_OFFSET_SIZE_PAIR_FIELD_COUNT 2
@ -1314,21 +1314,21 @@ static struct LuaObjectField sPlayerCameraStateFields[LUA_PLAYER_CAMERA_STATE_FI
{ "headRotation", LVT_COBJECT, offsetof(struct PlayerCameraState, headRotation), true, LOT_VEC3S },
{ "pos", LVT_COBJECT, offsetof(struct PlayerCameraState, pos), true, LOT_VEC3F },
{ "unused", LVT_S16, offsetof(struct PlayerCameraState, unused), false, LOT_NONE },
{ "usedObj", LVT_COBJECT_P, offsetof(struct PlayerCameraState, usedObj), true, LOT_OBJECT },
{ "usedObj", LVT_COBJECT_P, offsetof(struct PlayerCameraState, usedObj), false, LOT_OBJECT },
};
#define LUA_PLAYER_GEOMETRY_FIELD_COUNT 13
static struct LuaObjectField sPlayerGeometryFields[LUA_PLAYER_GEOMETRY_FIELD_COUNT] = {
{ "currCeil", LVT_COBJECT_P, offsetof(struct PlayerGeometry, currCeil), true, LOT_SURFACE },
{ "currCeil", LVT_COBJECT_P, offsetof(struct PlayerGeometry, currCeil), false, LOT_SURFACE },
{ "currCeilHeight", LVT_F32, offsetof(struct PlayerGeometry, currCeilHeight), false, LOT_NONE },
{ "currCeilType", LVT_S16, offsetof(struct PlayerGeometry, currCeilType), false, LOT_NONE },
{ "currFloor", LVT_COBJECT_P, offsetof(struct PlayerGeometry, currFloor), true, LOT_SURFACE },
{ "currFloor", LVT_COBJECT_P, offsetof(struct PlayerGeometry, currFloor), false, LOT_SURFACE },
{ "currFloorHeight", LVT_F32, offsetof(struct PlayerGeometry, currFloorHeight), false, LOT_NONE },
{ "currFloorType", LVT_S16, offsetof(struct PlayerGeometry, currFloorType), false, LOT_NONE },
{ "prevCeil", LVT_COBJECT_P, offsetof(struct PlayerGeometry, prevCeil), true, LOT_SURFACE },
{ "prevCeil", LVT_COBJECT_P, offsetof(struct PlayerGeometry, prevCeil), false, LOT_SURFACE },
{ "prevCeilHeight", LVT_F32, offsetof(struct PlayerGeometry, prevCeilHeight), false, LOT_NONE },
{ "prevCeilType", LVT_S16, offsetof(struct PlayerGeometry, prevCeilType), false, LOT_NONE },
{ "prevFloor", LVT_COBJECT_P, offsetof(struct PlayerGeometry, prevFloor), true, LOT_SURFACE },
{ "prevFloor", LVT_COBJECT_P, offsetof(struct PlayerGeometry, prevFloor), false, LOT_SURFACE },
{ "prevFloorHeight", LVT_F32, offsetof(struct PlayerGeometry, prevFloorHeight), false, LOT_NONE },
{ "prevFloorType", LVT_S16, offsetof(struct PlayerGeometry, prevFloorType), false, LOT_NONE },
{ "waterHeight", LVT_F32, offsetof(struct PlayerGeometry, waterHeight), false, LOT_NONE },
@ -1340,10 +1340,10 @@ static struct LuaObjectField sSpawnInfoFields[LUA_SPAWN_INFO_FIELD_COUNT] = {
{ "areaIndex", LVT_S8, offsetof(struct SpawnInfo, areaIndex), false, LOT_NONE },
{ "behaviorArg", LVT_U32, offsetof(struct SpawnInfo, behaviorArg), false, LOT_NONE },
// { "behaviorScript", LVT_???, offsetof(struct SpawnInfo, behaviorScript), false, LOT_??? }, <--- UNIMPLEMENTED
{ "next", LVT_COBJECT_P, offsetof(struct SpawnInfo, next), true, LOT_SPAWNINFO },
{ "next", LVT_COBJECT_P, offsetof(struct SpawnInfo, next), false, LOT_SPAWNINFO },
{ "startAngle", LVT_COBJECT, offsetof(struct SpawnInfo, startAngle), true, LOT_VEC3S },
{ "startPos", LVT_COBJECT, offsetof(struct SpawnInfo, startPos), true, LOT_VEC3S },
{ "unk18", LVT_COBJECT_P, offsetof(struct SpawnInfo, unk18), true, LOT_GRAPHNODE },
{ "unk18", LVT_COBJECT_P, offsetof(struct SpawnInfo, unk18), false, LOT_GRAPHNODE },
};
#define LUA_SPAWN_PARTICLES_INFO_FIELD_COUNT 12
@ -1375,7 +1375,7 @@ static struct LuaObjectField sSurfaceFields[LUA_SURFACE_FIELD_COUNT] = {
{ "lowerY", LVT_S16, offsetof(struct Surface, lowerY), false, LOT_NONE },
{ "modifiedTimestamp", LVT_U32, offsetof(struct Surface, modifiedTimestamp), false, LOT_NONE },
{ "normal", LVT_COBJECT, offsetof(struct Surface, normal), true, LOT_VEC3F },
{ "object", LVT_COBJECT_P, offsetof(struct Surface, object), true, LOT_OBJECT },
{ "object", LVT_COBJECT_P, offsetof(struct Surface, object), false, LOT_OBJECT },
{ "originOffset", LVT_F32, offsetof(struct Surface, originOffset), false, LOT_NONE },
{ "prevVertex1", LVT_COBJECT, offsetof(struct Surface, prevVertex1), true, LOT_VEC3S },
{ "prevVertex2", LVT_COBJECT, offsetof(struct Surface, prevVertex2), true, LOT_VEC3S },

View file

@ -1667,6 +1667,63 @@ char gSmluaConstants[] = ""
"NPT_LOCAL = 1\n"
"NPT_SERVER = 2\n"
"NPT_CLIENT = 3\n"
"ACTIVE_FLAG_DEACTIVATED = 0\n"
"ACTIVE_FLAG_ACTIVE = (1 << 0)\n"
"ACTIVE_FLAG_FAR_AWAY = (1 << 1)\n"
"ACTIVE_FLAG_UNK2 = (1 << 2)\n"
"ACTIVE_FLAG_IN_DIFFERENT_ROOM = (1 << 3)\n"
"ACTIVE_FLAG_UNIMPORTANT = (1 << 4)\n"
"ACTIVE_FLAG_INITIATED_TIME_STOP = (1 << 5)\n"
"ACTIVE_FLAG_MOVE_THROUGH_GRATE = (1 << 6)\n"
"ACTIVE_FLAG_DITHERED_ALPHA = (1 << 7)\n"
"ACTIVE_FLAG_UNK8 = (1 << 8)\n"
"ACTIVE_FLAG_UNK9 = (1 << 9)\n"
"ACTIVE_FLAG_UNK10 = (1 << 10)\n"
"RESPAWN_INFO_TYPE_NULL = 0\n"
"RESPAWN_INFO_TYPE_32 = 1\n"
"RESPAWN_INFO_TYPE_16 = 2\n"
"RESPAWN_INFO_DONT_RESPAWN = 0xFF\n"
"OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE = (1 << 0)\n"
"OBJ_FLAG_MOVE_XZ_USING_FVEL = (1 << 1)\n"
"OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL = (1 << 2)\n"
"OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW = (1 << 3)\n"
"OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE = (1 << 4)\n"
"OBJ_FLAG_0020 = (1 << 5)\n"
"OBJ_FLAG_COMPUTE_DIST_TO_MARIO = (1 << 6)\n"
"OBJ_FLAG_ACTIVE_FROM_AFAR = (1 << 7)\n"
"OBJ_FLAG_0100 = (1 << 8)\n"
"OBJ_FLAG_TRANSFORM_RELATIVE_TO_PARENT = (1 << 9)\n"
"OBJ_FLAG_HOLDABLE = (1 << 10)\n"
"OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM = (1 << 11)\n"
"OBJ_FLAG_1000 = (1 << 12)\n"
"OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO = (1 << 13)\n"
"OBJ_FLAG_PERSISTENT_RESPAWN = (1 << 14)\n"
"OBJ_FLAG_8000 = (1 << 15)\n"
"OBJ_FLAG_30 = (1 << 30)\n"
"HELD_FREE = 0\n"
"HELD_HELD = 1\n"
"HELD_THROWN = 2\n"
"HELD_DROPPED = 3\n"
"ACTIVE_PARTICLE_DUST = (1 << 0)\n"
"ACTIVE_PARTICLE_UNUSED_1 = (1 << 1)\n"
"ACTIVE_PARTICLE_UNUSED_2 = (1 << 2)\n"
"ACTIVE_PARTICLE_SPARKLES = (1 << 3)\n"
"ACTIVE_PARTICLE_H_STAR = (1 << 4)\n"
"ACTIVE_PARTICLE_BUBBLE = (1 << 5)\n"
"ACTIVE_PARTICLE_WATER_SPLASH = (1 << 6)\n"
"ACTIVE_PARTICLE_IDLE_WATER_WAVE = (1 << 7)\n"
"ACTIVE_PARTICLE_SHALLOW_WATER_WAVE = (1 << 8)\n"
"ACTIVE_PARTICLE_PLUNGE_BUBBLE = (1 << 9)\n"
"ACTIVE_PARTICLE_WAVE_TRAIL = (1 << 10)\n"
"ACTIVE_PARTICLE_FIRE = (1 << 11)\n"
"ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH = (1 << 12)\n"
"ACTIVE_PARTICLE_LEAF = (1 << 13)\n"
"ACTIVE_PARTICLE_DIRT = (1 << 14)\n"
"ACTIVE_PARTICLE_MIST_CIRCLE = (1 << 15)\n"
"ACTIVE_PARTICLE_SNOW = (1 << 16)\n"
"ACTIVE_PARTICLE_BREATH = (1 << 17)\n"
"ACTIVE_PARTICLE_V_STAR = (1 << 18)\n"
"ACTIVE_PARTICLE_TRIANGLE = (1 << 19)\n"
"CONT_NO_RESPONSE_ERROR = 0x8\n"
"CONT_OVERRUN_ERROR = 0x4\n"
"CONT_FRAME_ERROR = 0x2\n"

View file

@ -43,6 +43,8 @@ static struct Object* spawn_object_internal(enum BehaviorId behaviorId, enum Mod
obj->oHomeY = y;
obj->oHomeZ = z;
obj->createdThroughNetwork = true;
if (objSetupFunction != 0) {
lua_State* L = gLuaState;
lua_rawgeti(L, LUA_REGISTRYINDEX, objSetupFunction);