mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-01-05 15:11:16 +00:00
Merge remote-tracking branch 'upstream/coop' into coop
This commit is contained in:
commit
5b5231eca2
41 changed files with 922 additions and 57 deletions
|
@ -279,6 +279,9 @@ static const Vtx bobomb_seg8_vertex_08023190[] = {
|
|||
|
||||
// 0x08023270 - 0x08023378
|
||||
const Gfx bobomb_seg8_dl_08023270[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
gsSPLight(&bobomb_seg8_lights_08022DE8.l, 1),
|
||||
gsSPLight(&bobomb_seg8_lights_08022DE8.a, 2),
|
||||
gsSPVertex(bobomb_seg8_vertex_08022E30, 16, 0),
|
||||
|
@ -302,6 +305,9 @@ const Gfx bobomb_seg8_dl_08023270[] = {
|
|||
|
||||
// 0x08023378 - 0x08023480
|
||||
const Gfx bobomb_seg8_dl_08023378[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
gsSPLight(&bobomb_seg8_lights_08022DE8.l, 1),
|
||||
gsSPLight(&bobomb_seg8_lights_08022DE8.a, 2),
|
||||
gsSPVertex(bobomb_seg8_vertex_08022F70, 16, 0),
|
||||
|
@ -325,6 +331,9 @@ const Gfx bobomb_seg8_dl_08023378[] = {
|
|||
|
||||
// 0x08023480 - 0x08023528
|
||||
const Gfx bobomb_seg8_dl_08023480[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
gsSPLight(&bobomb_seg8_lights_08022E00.l, 1),
|
||||
gsSPLight(&bobomb_seg8_lights_08022E00.a, 2),
|
||||
gsSPVertex(bobomb_seg8_vertex_080230B0, 14, 0),
|
||||
|
|
|
@ -37,7 +37,8 @@ in_files = [
|
|||
"include/dialog_ids.h",
|
||||
"include/seq_ids.h",
|
||||
"include/surface_terrains.h",
|
||||
"src/game/level_update.h"
|
||||
"src/game/level_update.h",
|
||||
"src/pc/network/version.h"
|
||||
]
|
||||
|
||||
exclude_constants = {
|
||||
|
|
|
@ -72,7 +72,8 @@ override_field_mutable = {
|
|||
}
|
||||
|
||||
override_field_invisible = {
|
||||
"Mod": [ "files" ]
|
||||
"Mod": [ "files" ],
|
||||
"MarioState": [ "visibleToEnemies" ],
|
||||
}
|
||||
|
||||
override_field_immutable = {
|
||||
|
|
|
@ -11400,3 +11400,12 @@ SPTASK_STATE_FINISHED = 3
|
|||
|
||||
--- @type SpTaskState
|
||||
SPTASK_STATE_FINISHED_DP = 4
|
||||
|
||||
--- @type integer
|
||||
MAX_VERSION_LENGTH = 10
|
||||
|
||||
--- @type integer
|
||||
MINOR_VERSION_NUMBER = 0
|
||||
|
||||
--- @type integer
|
||||
VERSION_NUMBER = 31
|
||||
|
|
|
@ -6795,6 +6795,11 @@ function cur_obj_set_behavior(behavior)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @return nil
|
||||
function cur_obj_set_billboard_if_vanilla_cam()
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a0 Pointer_integer
|
||||
--- @return integer
|
||||
function cur_obj_set_direction_table(a0)
|
||||
|
@ -8558,6 +8563,17 @@ function obj_set_vel(o, vx, vy, vz)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param x number
|
||||
--- @param y number
|
||||
--- @param z number
|
||||
--- @param strength integer
|
||||
--- @param area integer
|
||||
--- @param index integer
|
||||
--- @return nil
|
||||
function set_whirlpools(x, y, z, strength, area, index)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param behaviorId BehaviorId
|
||||
--- @param modelId ModelExtendedId
|
||||
--- @param x number
|
||||
|
|
|
@ -214,3 +214,10 @@ end
|
|||
function djui_hud_render_texture_tile_interpolated(texInfo, prevX, prevY, prevScaleW, prevScaleH, x, y, scaleW, scaleH, tileX, tileY, tileW, tileH)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param levelNum number
|
||||
--- @param func fun(areaNum:number, bhv:table)
|
||||
--- @return nil
|
||||
function level_script_parse(levelNum, func)
|
||||
-- ...
|
||||
end
|
||||
|
|
|
@ -188,6 +188,7 @@
|
|||
--- @field public RacingPenguinBigRadius number
|
||||
--- @field public RacingPenguinHeight number
|
||||
--- @field public RacingPenguinRadius number
|
||||
--- @field public RespawnShellBoxes integer
|
||||
--- @field public ShowStarMilestones integer
|
||||
--- @field public ToadStar1Requirement integer
|
||||
--- @field public ToadStar2Requirement integer
|
||||
|
@ -629,6 +630,7 @@
|
|||
--- @class LevelValues
|
||||
--- @field public cellHeightLimit integer
|
||||
--- @field public coinsRequiredForCoinStar integer
|
||||
--- @field public disableActs boolean
|
||||
--- @field public entryLevel LevelNum
|
||||
--- @field public exitCastleArea integer
|
||||
--- @field public exitCastleLevel LevelNum
|
||||
|
@ -640,14 +642,18 @@
|
|||
--- @field public floorLowerLimitShadow integer
|
||||
--- @field public metalCapDuration integer
|
||||
--- @field public metalCapDurationCotmc integer
|
||||
--- @field public pauseExitAnywhere boolean
|
||||
--- @field public metalCapSequence integer
|
||||
--- @field public pssSlideStarIndex integer
|
||||
--- @field public pssSlideStarTime integer
|
||||
--- @field public skipCreditsAt LevelNum
|
||||
--- @field public starPositions StarPositions
|
||||
--- @field public vanishCapDuration integer
|
||||
--- @field public vanishCapDurationVcutm integer
|
||||
--- @field public vanishCapSequence integer
|
||||
--- @field public wingCapDuration integer
|
||||
--- @field public wingCapDurationTotwc integer
|
||||
--- @field public wingCapSequence integer
|
||||
|
||||
--- @class LinearTransitionPoint
|
||||
--- @field public dist number
|
||||
|
|
|
@ -3202,16 +3202,12 @@ const BehaviorScript bhvFloorTrapInCastle[] = {
|
|||
const BehaviorScript bhvTree[] = {
|
||||
BEGIN(OBJ_LIST_POLELIKE),
|
||||
ID(id_bhvTree),
|
||||
#ifdef BETTERCAMERA
|
||||
CYLBOARD(),
|
||||
#else
|
||||
BILLBOARD(),
|
||||
#endif
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
SET_INT(oInteractType, INTERACT_POLE),
|
||||
SET_HITBOX(/*Radius*/ 80, /*Height*/ 500),
|
||||
SET_INT(oIntangibleTimer, 0),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(cur_obj_set_billboard_if_vanilla_cam),
|
||||
CALL_NATIVE(bhv_pole_base_loop),
|
||||
END_LOOP(),
|
||||
};
|
||||
|
|
|
@ -57,6 +57,10 @@ void dynos_add_level(s32 modIndex, const char *filePath, const char* levelName);
|
|||
const char* dynos_level_get_token(u32 index);
|
||||
Trajectory* dynos_level_get_trajectory(const char* name);
|
||||
void dynos_level_load_background(void *ptr);
|
||||
u64 dynos_level_cmd_get(void *cmd, u64 offset);
|
||||
void dynos_level_cmd_next(void *cmd, u64 cmdsize);
|
||||
void dynos_level_parse_script(const void *script, s32 (*aPreprocessFunction)(u8, void *));
|
||||
void* dynos_level_get_script(s32 level);
|
||||
|
||||
// -- behaviors -- //
|
||||
void dynos_add_behavior(s32 modIndex, const char *filePath, const char *behaviorName);
|
||||
|
|
|
@ -822,6 +822,9 @@ const u8 *DynOS_Level_GetAreaName(s32 aLevel, s32 aArea, bool aDecaps);
|
|||
s16 *DynOS_Level_GetWarp(s32 aLevel, s32 aArea, u8 aWarpId);
|
||||
s16 *DynOS_Level_GetWarpEntry(s32 aLevel, s32 aArea);
|
||||
s16 *DynOS_Level_GetWarpDeath(s32 aLevel, s32 aArea);
|
||||
u64 DynOS_Level_CmdGet(void *aCmd, u64 aOffset);
|
||||
void *DynOS_Level_CmdNext(void *aCmd, u64 aCmdSize);
|
||||
void DynOS_Level_ParseScript(const void *aScript, s32 (*aPreprocessFunction)(u8, void *));
|
||||
|
||||
//
|
||||
// Warps
|
||||
|
|
|
@ -744,6 +744,11 @@ static void ParseGfxSymbol(GfxData* aGfxData, DataNode<Gfx>* aNode, Gfx*& aHead,
|
|||
gfx_symbol_1(gsDPSetAlphaCompare, false);
|
||||
gfx_symbol_1(gsDPSetTextureFilter, false);
|
||||
gfx_symbol_2(gsSPCullDisplayList, false);
|
||||
gfx_symbol_1(gsDPSetAlphaDither, false);
|
||||
gfx_symbol_1(gsDPSetCombineKey, false);
|
||||
gfx_symbol_1(gsDPSetTextureConvert, false);
|
||||
gfx_symbol_1(gsDPSetCombineKey, false);
|
||||
gfx_symbol_1(gsDPSetTextureConvert, false);
|
||||
|
||||
gfx_symbol_2(gsSPCopyLightEXT, false);
|
||||
gfx_symbol_1(gsSPCopyLightsPlayerPart, false);
|
||||
|
|
|
@ -179,6 +179,22 @@ void dynos_level_load_background(void *ptr) {
|
|||
DynOS_Lvl_LoadBackground(ptr);
|
||||
}
|
||||
|
||||
u64 dynos_level_cmd_get(void *cmd, u64 offset) {
|
||||
return DynOS_Level_CmdGet(cmd, offset);
|
||||
}
|
||||
|
||||
void dynos_level_cmd_next(void *cmd, u64 cmdsize) {
|
||||
DynOS_Level_CmdNext(cmd, cmdsize);
|
||||
}
|
||||
|
||||
void dynos_level_parse_script(const void *script, s32 (*aPreprocessFunction)(u8, void *)) {
|
||||
DynOS_Level_ParseScript(script, aPreprocessFunction);
|
||||
}
|
||||
|
||||
void* dynos_level_get_script(s32 level) {
|
||||
return (void *) DynOS_Level_GetScript(level);
|
||||
}
|
||||
|
||||
// -- Behaviors -- //
|
||||
|
||||
void dynos_add_behavior(s32 modIndex, const char *filePath, const char *behaviorName) {
|
||||
|
|
|
@ -51,17 +51,17 @@ static void *sDynosLevelScriptsOriginal[LEVEL_COUNT] = { NULL };
|
|||
static Array<DynosWarp> sDynosLevelWarps[LEVEL_COUNT] = { Array<DynosWarp>() };
|
||||
static Array<s32> sDynosLevelList = Array<s32>(); // Ordered by Course Id, COURSE_NONE excluded
|
||||
|
||||
static u64 DynOS_Level_CmdGet(void *aCmd, u64 aOffset) {
|
||||
u64 DynOS_Level_CmdGet(void *aCmd, u64 aOffset) {
|
||||
u64 _Offset = (((aOffset) & 3llu) | (((aOffset) & ~3llu) << (sizeof(void *) >> 3llu)));
|
||||
return *((u64 *) (u64(aCmd) + _Offset));
|
||||
}
|
||||
|
||||
static void *DynOS_Level_CmdNext(void *aCmd, u64 aCmdSize) {
|
||||
void *DynOS_Level_CmdNext(void *aCmd, u64 aCmdSize) {
|
||||
u64 _Offset = (((aCmdSize) & 3llu) | (((aCmdSize) & ~3llu) << (sizeof(void *) >> 3llu)));
|
||||
return (void *) (u64(aCmd) + _Offset);
|
||||
}
|
||||
|
||||
static void DynOS_Level_ParseScript(const void *aScript, s32 (*aPreprocessFunction)(u8, void *));
|
||||
void DynOS_Level_ParseScript(const void *aScript, s32 (*aPreprocessFunction)(u8, void *));
|
||||
|
||||
//
|
||||
// Init
|
||||
|
@ -752,7 +752,7 @@ static LvlCmd *DynOS_Level_CmdJumpArea(Stack &aStack, LvlCmd *aCmd, s32 (*aPrepr
|
|||
return (LvlCmd *) DynOS_Level_CmdNext(aCmd, aCmd->mSize);
|
||||
}
|
||||
|
||||
static void DynOS_Level_ParseScript(const void *aScript, s32 (*aPreprocessFunction)(u8, void *)) {
|
||||
void DynOS_Level_ParseScript(const void *aScript, s32 (*aPreprocessFunction)(u8, void *)) {
|
||||
Stack _Stack;
|
||||
_Stack.mBaseIndex = -1;
|
||||
_Stack.mTopIndex = 0;
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
- [types.h](#typesh)
|
||||
- [enum AreaTimerType](#enum-AreaTimerType)
|
||||
- [enum SpTaskState](#enum-SpTaskState)
|
||||
- [version.h](#versionh)
|
||||
|
||||
<br />
|
||||
|
||||
|
@ -4021,3 +4022,12 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [version.h](#version.h)
|
||||
- MAX_VERSION_LENGTH
|
||||
- MINOR_VERSION_NUMBER
|
||||
- VERSION_NUMBER
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
|
|
|
@ -3726,6 +3726,24 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [cur_obj_set_billboard_if_vanilla_cam](#cur_obj_set_billboard_if_vanilla_cam)
|
||||
|
||||
### Lua Example
|
||||
`cur_obj_set_billboard_if_vanilla_cam()`
|
||||
|
||||
### Parameters
|
||||
- None
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void cur_obj_set_billboard_if_vanilla_cam(void);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [cur_obj_set_direction_table](#cur_obj_set_direction_table)
|
||||
|
||||
### Lua Example
|
||||
|
|
|
@ -614,6 +614,31 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [set_whirlpools](#set_whirlpools)
|
||||
|
||||
### Lua Example
|
||||
`set_whirlpools(x, y, z, strength, area, index)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `number` |
|
||||
| y | `number` |
|
||||
| z | `number` |
|
||||
| strength | `integer` |
|
||||
| area | `integer` |
|
||||
| index | `integer` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void set_whirlpools(f32 x, f32 y, f32 z, s16 strength, s16 area, s32 index);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [spawn_non_sync_object](#spawn_non_sync_object)
|
||||
|
||||
### Lua Example
|
||||
|
|
|
@ -1273,6 +1273,7 @@
|
|||
- [cur_obj_scale](functions-4.md#cur_obj_scale)
|
||||
- [cur_obj_scale_over_time](functions-4.md#cur_obj_scale_over_time)
|
||||
- [cur_obj_set_behavior](functions-4.md#cur_obj_set_behavior)
|
||||
- [cur_obj_set_billboard_if_vanilla_cam](functions-4.md#cur_obj_set_billboard_if_vanilla_cam)
|
||||
- [cur_obj_set_direction_table](functions-4.md#cur_obj_set_direction_table)
|
||||
- [cur_obj_set_face_angle_to_move_angle](functions-4.md#cur_obj_set_face_angle_to_move_angle)
|
||||
- [cur_obj_set_hitbox_and_die_if_attacked](functions-4.md#cur_obj_set_hitbox_and_die_if_attacked)
|
||||
|
@ -1579,6 +1580,7 @@
|
|||
- [obj_move_xyz](functions-5.md#obj_move_xyz)
|
||||
- [obj_set_model_extended](functions-5.md#obj_set_model_extended)
|
||||
- [obj_set_vel](functions-5.md#obj_set_vel)
|
||||
- [set_whirlpools](functions-5.md#set_whirlpools)
|
||||
- [spawn_non_sync_object](functions-5.md#spawn_non_sync_object)
|
||||
- [spawn_sync_object](functions-5.md#spawn_sync_object)
|
||||
|
||||
|
|
522
docs/lua/guides/object-lists.md
Normal file
522
docs/lua/guides/object-lists.md
Normal file
|
@ -0,0 +1,522 @@
|
|||
# Every Behavior's Object List
|
||||
|
||||
| Behavior | Object List |
|
||||
| -------- | ----------- |
|
||||
|`bhvStarDoor`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMrI`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMrIBody`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMrIParticle`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvPurpleParticle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvGiantPole`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvPoleGrabbing`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvThiHugeIslandTop`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvThiTinyIslandTop`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCapSwitchBase`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvCapSwitch`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvKingBobomb`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBobombAnchorMario`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBetaChestBottom`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBetaChestLid`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBubbleParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBubbleMaybe`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvBubblePlayer`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSmallWaterWave`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvWaterAirBubble`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvSmallParticle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvPlungeBubble`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSmallParticleSnow`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSmallParticleBubbles`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvFishGroup`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCannon`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvCannonBarrel`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCannonBaseUnused`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvChuckya`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvChuckyaAnchorMario`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUnused05A8`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvRotatingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTower`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBulletBillCannon`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfBreakableWallRight`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfBreakableWallLeft`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvKickableBoard`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTowerDoor`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvRotatingCounterClockwise`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWfRotatingWoodenPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvKoopaShellUnderwater`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvExitPodiumWarp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFadingWarp`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvWarp`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvWarpPipe`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWhitePuffExplosion`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSpawnedStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvSpawnedStarNoLevelExit`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMrIBlueCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvCoinInsideBoo`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvCoinFormationSpawn`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvCoinFormation`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvOneCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvYellowCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvTemporaryYellowCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvThreeCoinsSpawn`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTenCoinsSpawn`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSingleCoinGetsSpawned`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvCoinSparkles`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvGoldenCoinSparkles`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWallTinyStarParticle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvVertStarParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvPoundTinyStarParticle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvHorStarParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvPunchTinyTriangle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvTriangleParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvDoorWarp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvDoor`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvGrindel`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvThwomp2`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvThwomp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTumblingBridgePlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfTumblingBridge`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvBbhTumblingBridge`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvLllTumblingBridge`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvFlame`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvAnotherElavator`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvRrElevatorPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHmcElevatorPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWaterMist`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvBreathParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBreakBoxTriangle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvWaterMist2`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUnused0DFC`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMistCircParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvDirtParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|``|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSnowParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWind`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvEndToad`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvEndPeach`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUnusedParticleSpawn`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUkiki`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUkikiCageChild`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUkikiCageStar`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUkikiCage`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBitfsSinkingPlatforms`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBitfsSinkingCagePlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvDddMovingPole`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvBitfsTiltingInvertedPyramid`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSquishablePlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvCutOutObject`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBetaMovingFlames`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvRrRotatingBridgePlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFlamethrower`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvFlamethrowerFlame`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBouncingFireball`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBouncingFireballFlame`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBowserShockWave`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvFireParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBlackSmokeMario`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvBlackSmokeBowser`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvBlackSmokeUpward`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBetaFishSplashSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSpindrift`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvTowerPlatformGroup`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfSlidingTowerPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfElevatorTowerPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfSolidTowerPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLeafParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTreeSnow`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvTreeLeaf`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvAnotherTiltingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSquarishPathParent`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSquarishPathMoving`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPiranhaPlantBubble`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvPiranhaPlantWakingBubbles`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvFloorSwitchAnimatesObject`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFloorSwitchGrills`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFloorSwitchHardcodedModel`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFloorSwitchHiddenObjects`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHiddenObject`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBreakableBox`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPushableMetalBox`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHeaveHo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvHeaveHoThrowMario`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvCcmTouchedStarSpawn`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvUnusedPoundablePlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBetaTrampolineTop`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBetaTrampolineSpring`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvJumpingBox`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBooCage`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvStub`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvIgloo`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBowserKey`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvGrandStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBetaBooKey`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvAlphaBooKey`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBulletBill`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvWhitePuffSmoke`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUnused1820`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBowserTailAnchor`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBowser`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBowserBodyAnchor`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBowserFlameSpawn`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTiltingBowserLavaPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFallingBowserPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBlueBowserFlame`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvFlameFloatingLanding`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBlueFlamesGroup`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvFlameBouncing`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvFlameMovingForwardGrowing`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvFlameBowser`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvFlameLargeBurningOut`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBlueFish`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTankFishGroup`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCheckerboardElevatorGroup`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvCheckerboardPlatformSub`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBowserKeyUnlockDoor`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBowserKeyCourseExit`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvInvisibleObjectsUnderBridge`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWaterLevelPillar`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvDddWarp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMoatGrills`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvClockMinuteHand`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvClockHourHand`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMacroUkiki`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvStub1D0C`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvLllRotatingHexagonalPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllSinkingRockBlock`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvStub1D70`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvLllMovingOctagonalMeshPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllRotatingBlockWithFireBars`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllRotatingHexFlame`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvLllWoodPiece`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllFloatingWoodBridge`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvVolcanoFlames`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvLllRotatingHexagonalRing`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllSinkingRectangularPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllSinkingSquarePlatforms`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllTiltingInvertedPyramid`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvUnused1F30`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvKoopaShell`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvKoopaShellFlame`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvToxBox`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPiranhaPlant`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvLllHexagonalMesh`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllBowserPuzzlePiece`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllBowserPuzzle`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvTuxiesMother`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvPenguinBaby`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUnused20E0`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSmallPenguin`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvManyBlueFishSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvFewBlueFishSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvFishSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvFish`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWdwExpressElevator`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWdwExpressElevatorPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvChirpChirp`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBub`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvExclamationBox`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvRotatingExclamationMark`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSoundSpawner`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvRockSolid`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBowserSubDoor`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBowsersSub`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSushiShark`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSushiSharkCollisionChild`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvJrbSlidingBox`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvShipPart3`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvInSunkenShip3`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSunkenShipPart`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSunkenShipPart2`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvInSunkenShip`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvInSunkenShip2`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMistParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWhitePuff1`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWhitePuff2`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvWhitePuffSmoke2`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvPurpleSwitchHiddenBoxes`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBlueCoinSwitch`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHiddenBlueCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvOpenableCageDoor`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvOpenableGrill`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWaterLevelDiamond`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvInitializeChangingWaterLevel`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTweesterSandParticle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvTweester`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvMerryGoRoundBooManager`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvAnimatedTexture`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBooInCastle`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBooWithCage`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBalconyBigBoo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMerryGoRoundBigBoo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvGhostHuntBigBoo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvCourtyardBooTriplet`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBoo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMerryGoRoundBoo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvGhostHuntBoo`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvHiddenStaircaseStep`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBooBossSpawnedBridge`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBbhTiltingTrapPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHauntedBookshelf`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMeshElevator`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMerryGoRound`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPlaysMusicTrackWhenTouched`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBetaBowserAnchor`|`OBJ_LIST_DESTRUCTIVE`|
|
||||
|`bhvStaticCheckeredPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvUnused2A10`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUnusedFakeStar`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvStaticObject`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUnused2A54`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCastleFloorTrap`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvFloorTrapInCastle`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTree`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvSparkle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSparkleSpawn`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSparkleParticleSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|``|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvScuttlebug`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvScuttlebugSpawn`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvWhompKingBoss`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSmallWhomp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWaterSplash`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWaterDroplet`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvWaterDropletSplash`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBubbleSplash`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvIdleWaterWave`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvObjectWaterSplash`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvShallowWaterWave`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvShallowWaterSplash`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvObjectWaveTrail`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvWaveTrail`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTinyStrongWindParticle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvStrongWindParticle`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvSLSnowmanWind`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSLWalkingPenguin`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvYellowBall`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMario`|`OBJ_LIST_PLAYER`|
|
||||
|`bhvToadMessage`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUnlockDoorStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvRandomAnimatedTexture`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvYellowBackgroundInMenu`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMenuButton`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMenuButtonManager`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvActSelectorStarType`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvActSelector`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMovingYellowCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMovingBlueCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBlueCoinSliding`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBlueCoinJumping`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSeaweed`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvSeaweedBundle`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBobomb`|`OBJ_LIST_DESTRUCTIVE`|
|
||||
|`bhvBobombFuseSmoke`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBobombBuddy`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBobombBuddyOpensCannon`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvCannonClosed`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWhirlpool`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvJetStream`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMessagePanel`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSignOnWall`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHomingAmp`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvCirclingAmp`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvButterfly`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvHoot`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvBetaHoldableObject`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvCarrySomething1`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCarrySomething2`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCarrySomething3`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCarrySomething4`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCarrySomething5`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCarrySomething6`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvObjectBubble`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvObjectWaterWave`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvExplosion`|`OBJ_LIST_DESTRUCTIVE`|
|
||||
|`bhvBobombBullyDeathSmoke`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSmoke`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvBobombExplosionBubble`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvRespawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSmallBully`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBigBully`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBigBullyWithMinions`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSmallChillBully`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBigChillBully`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvJetStreamRingSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvJetStreamWaterRing`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMantaRayWaterRing`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMantaRayRingManager`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBowserBomb`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBowserBombExplosion`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBowserBombSmoke`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCelebrationStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvCelebrationStarSparkle`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvStarKeyCollectionPuffSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvLllDrawbridgeSpawner`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvLllDrawbridge`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSmallBomp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLargeBomp`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWfSlidingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMoneybag`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMoneybagHidden`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvPitBowlingBall`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFreeBowlingBall`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBowlingBall`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvTtmBowlingBallSpawner`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBobBowlingBallSpawner`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvThiBowlingBallSpawner`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvRrCruiserWing`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSpindel`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSslMovingPyramidWall`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPyramidElevator`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPyramidElevatorTrajectoryMarkerBall`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvPyramidTop`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvPyramidTopFragment`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvPyramidPillarTouchDetector`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvWaterfallSoundLoop`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvVolcanoSoundLoop`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCastleFlagWaving`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBirdsSoundLoop`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvAmbientSounds`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSandSoundLoop`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvHiddenAt120Stars`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSnowmansBottom`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSnowmansHead`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSnowmansBodyCheckpoint`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBigSnowmanWhole`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBigBoulder`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBigBoulderGenerator`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWingCap`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMetalCap`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvNormalCap`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvVanishCap`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvStarSpawnCoordinates`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHiddenRedCoinStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvRedCoin`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvBowserCourseRedCoinStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHiddenStar`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHiddenStarTrigger`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvTtmRollingLog`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllVolcanoFallingTrap`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvLllRollingLog`|`OBJ_LIST_SURFACE`|
|
||||
|`bhv1upWalking`|`OBJ_LIST_LEVEL`|
|
||||
|`bhv1upRunningAway`|`OBJ_LIST_LEVEL`|
|
||||
|`bhv1upSliding`|`OBJ_LIST_LEVEL`|
|
||||
|`bhv1Up`|`OBJ_LIST_LEVEL`|
|
||||
|`bhv1upJumpOnApproach`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHidden1up`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHidden1upTrigger`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHidden1upInPole`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHidden1upInPoleTrigger`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvHidden1upInPoleSpawner`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvControllablePlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvControllablePlatformSub`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvBreakableBoxSmall`|`OBJ_LIST_DESTRUCTIVE`|
|
||||
|`bhvSlidingSnowMound`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSnowMoundSpawn`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvWdwSquareFloatingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWdwRectangularFloatingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvJrbFloatingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvArrowLift`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvOrangeNumber`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvMantaRay`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFallingPillar`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFallingPillarHitbox`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvPillarBase`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvJrbFloatingBox`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvDecorativePendulum`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTreasureChestsShip`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTreasureChestsJrb`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTreasureChests`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTreasureChestBottom`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvTreasureChestTop`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMips`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvYoshi`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvKoopa`|`OBJ_LIST_PUSHABLE`|
|
||||
|`bhvKoopaRaceEndpoint`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvKoopaFlag`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvPokey`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvPokeyBodyPart`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSwoop`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFlyGuy`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvGoomba`|`OBJ_LIST_PUSHABLE`|
|
||||
|`bhvGoombaTripletSpawner`|`OBJ_LIST_PUSHABLE`|
|
||||
|`bhvChainChomp`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvChainChompChainPart`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvWoodenPost`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvChainChompGate`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWigglerHead`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvWigglerBody`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvEnemyLakitu`|`OBJ_LIST_PUSHABLE`|
|
||||
|`bhvCameraLakitu`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCloud`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCloudPart`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvSpiny`|`OBJ_LIST_PUSHABLE`|
|
||||
|`bhvMontyMole`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMontyMoleHole`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvMontyMoleRock`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvPlatformOnTrack`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTrackBall`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvSeesawPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFerrisWheelAxle`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvFerrisWheelPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvWaterBombSpawner`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvWaterBomb`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvWaterBombShadow`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvTTCRotatingSolid`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCPendulum`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCTreadmill`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCMovingBar`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCCog`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCPitBlock`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCElevator`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTC2DRotator`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvTTCSpinner`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvMrBlizzard`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMrBlizzardSnowball`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSlidingPlatform2`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvOctagonalPlatformRotating`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvAnimatesOnFloorSwitchPress`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvActivatedBackAndForthPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvRecoveryHeart`|`OBJ_LIST_LEVEL`|
|
||||
|`bhvWaterBombCannon`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCannonBarrelBubbles`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvUnagi`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvUnagiSubobject`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvDorrie`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvHauntedChair`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvMadPiano`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFlyingBookend`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBookendSpawn`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvHauntedBookshelfManager`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBookSwitch`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFirePiranhaPlant`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSmallPiranhaFlame`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFireSpitter`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvFlyguyFlame`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSnufit`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSnufitBalls`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvHorizontalGrindel`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvEyerokBoss`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvEyerokHand`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvKlepto`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBird`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvRacingPenguin`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvPenguinRaceFinishLine`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvPenguinRaceShortcutCheck`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvCoffinSpawner`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvCoffin`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvClamShell`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSkeeter`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvSkeeterWave`|`OBJ_LIST_UNIMPORTANT`|
|
||||
|`bhvSwingPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvDonutPlatformSpawner`|`OBJ_LIST_SPAWNER`|
|
||||
|`bhvDonutPlatform`|`OBJ_LIST_SURFACE`|
|
||||
|`bhvDDDPole`|`OBJ_LIST_POLELIKE`|
|
||||
|`bhvRedCoinStarMarker`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvTripletButterfly`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBubba`|`OBJ_LIST_GENACTOR`|
|
||||
|`bhvBeginningLakitu`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvBeginningPeach`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvEndBirds1`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvEndBirds2`|`OBJ_LIST_DEFAULT`|
|
||||
|`bhvIntroScene`|`OBJ_LIST_DEFAULT`|
|
||||
|`RM_Scroll_Texture`|`OBJ_LIST_GENACTOR`|
|
||||
|`editor_Scroll_Texture`|`OBJ_LIST_GENACTOR`|
|
|
@ -29,9 +29,10 @@ Save file locations:
|
|||
- [Structs](structs.md)
|
||||
|
||||
### Guides
|
||||
- [Setting up Visual Studio Code](guides/vs-code-setup.md)
|
||||
- [Hooks](guides/hooks.md)
|
||||
- [gMarioStates](guides/mario-state.md)
|
||||
- [Setting up Visual Studio Code](guides/vs-code-setup.md)
|
||||
- [Behavior Object Lists](guides/object-lists.md)
|
||||
|
||||
## Important notes on player indices
|
||||
|
||||
|
|
|
@ -310,6 +310,7 @@
|
|||
| RacingPenguinBigRadius | `number` | |
|
||||
| RacingPenguinHeight | `number` | |
|
||||
| RacingPenguinRadius | `number` | |
|
||||
| RespawnShellBoxes | `integer` | |
|
||||
| ShowStarMilestones | `integer` | |
|
||||
| ToadStar1Requirement | `integer` | |
|
||||
| ToadStar2Requirement | `integer` | |
|
||||
|
@ -924,6 +925,7 @@
|
|||
| ----- | ---- | ------ |
|
||||
| cellHeightLimit | `integer` | |
|
||||
| coinsRequiredForCoinStar | `integer` | |
|
||||
| disableActs | `boolean` | |
|
||||
| entryLevel | [enum LevelNum](constants.md#enum-LevelNum) | |
|
||||
| exitCastleArea | `integer` | |
|
||||
| exitCastleLevel | [enum LevelNum](constants.md#enum-LevelNum) | |
|
||||
|
@ -935,14 +937,18 @@
|
|||
| floorLowerLimitShadow | `integer` | |
|
||||
| metalCapDuration | `integer` | |
|
||||
| metalCapDurationCotmc | `integer` | |
|
||||
| pauseExitAnywhere | `boolean` | |
|
||||
| metalCapSequence | `integer` | |
|
||||
| pssSlideStarIndex | `integer` | |
|
||||
| pssSlideStarTime | `integer` | |
|
||||
| skipCreditsAt | [enum LevelNum](constants.md#enum-LevelNum) | |
|
||||
| starPositions | [StarPositions](structs.md#StarPositions) | read-only |
|
||||
| vanishCapDuration | `integer` | |
|
||||
| vanishCapDurationVcutm | `integer` | |
|
||||
| vanishCapSequence | `integer` | |
|
||||
| wingCapDuration | `integer` | |
|
||||
| wingCapDurationTotwc | `integer` | |
|
||||
| wingCapSequence | `integer` | |
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "src/pc/lua/utils/smlua_model_utils.h"
|
||||
#include "src/pc/lua/smlua.h"
|
||||
#include "src/pc/djui/djui.h"
|
||||
#include "game/hardcoded.h"
|
||||
|
||||
#define CMD_GET(type, offset) (*(type *) (CMD_PROCESS_OFFSET(offset) + (u8 *) sCurrentCmd))
|
||||
|
||||
|
@ -506,7 +507,7 @@ static void level_cmd_place_object(void) {
|
|||
u16 model;
|
||||
struct SpawnInfo *spawnInfo;
|
||||
|
||||
if (sCurrAreaIndex != -1 && ((CMD_GET(u8, 2) & val7) || CMD_GET(u8, 2) == 0x1F)) {
|
||||
if (sCurrAreaIndex != -1 && (gLevelValues.disableActs || (CMD_GET(u8, 2) & val7) || CMD_GET(u8, 2) == 0x1F)) {
|
||||
model = CMD_GET(u8, 3);
|
||||
spawnInfo = alloc_only_pool_alloc(sLevelPool, sizeof(struct SpawnInfo));
|
||||
|
||||
|
|
|
@ -170,7 +170,8 @@ void exclamation_box_act_4(void) {
|
|||
spawn_mist_particles_variable(0, 0, 46.0f);
|
||||
spawn_triangle_break_particles(20, 139, 0.3f, o->oAnimState);
|
||||
create_sound_spawner(SOUND_GENERAL_BREAK_BOX);
|
||||
if (o->oBehParams2ndByte <= 3) {
|
||||
u8 threshold = gBehaviorValues.RespawnShellBoxes ? 3 : 2;
|
||||
if (o->oBehParams2ndByte <= threshold) {
|
||||
o->oAction = 5;
|
||||
cur_obj_hide();
|
||||
} else {
|
||||
|
|
|
@ -58,6 +58,9 @@ struct LevelValues gDefaultLevelValues = {
|
|||
.wingCapDurationTotwc = 1200,
|
||||
.metalCapDurationCotmc = 600,
|
||||
.vanishCapDurationVcutm = 600,
|
||||
.wingCapSequence = SEQ_EVENT_POWERUP,
|
||||
.metalCapSequence = SEQ_EVENT_METAL_CAP,
|
||||
.vanishCapSequence = SEQ_EVENT_POWERUP,
|
||||
.starPositions = {
|
||||
.KoopaBobStarPos = { 3030.0f, 4500.0f, -4600.0f },
|
||||
.KoopaThiStarPos = { 7100.0f, -1300.0f, -6000.0f },
|
||||
|
@ -94,6 +97,8 @@ struct LevelValues gDefaultLevelValues = {
|
|||
.floorLowerLimit = FLOOR_LOWER_LIMIT,
|
||||
.floorLowerLimitMisc = FLOOR_LOWER_LIMIT_MISC,
|
||||
.floorLowerLimitShadow = FLOOR_LOWER_LIMIT_SHADOW,
|
||||
.pauseExitAnywhere = 1,
|
||||
.disableActs = false,
|
||||
};
|
||||
|
||||
struct LevelValues gLevelValues = { 0 };
|
||||
|
@ -126,6 +131,7 @@ struct BehaviorValues gDefaultBehaviorValues = {
|
|||
.BowlingBallThiSmallSpeed = 10.0f,
|
||||
.GrateStarRequirement = 120,
|
||||
.ShowStarMilestones = TRUE,
|
||||
.RespawnShellBoxes = TRUE,
|
||||
.starsNeededForDialog = { 1, 3, 8, 30, 50, 70 },
|
||||
.dialogs = {
|
||||
.BobombBuddyBob1Dialog = DIALOG_004,
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#ifndef HARDCODED_H
|
||||
#include "types.h"
|
||||
#include "level_table.h"
|
||||
#include "dialog_ids.h"
|
||||
#include "dialog_ids.h"
|
||||
#include "seq_ids.h"
|
||||
|
||||
////////////
|
||||
// Levels //
|
||||
|
@ -53,11 +54,16 @@ struct LevelValues {
|
|||
u16 wingCapDurationTotwc;
|
||||
u16 metalCapDurationCotmc;
|
||||
u16 vanishCapDurationVcutm;
|
||||
u8 wingCapSequence;
|
||||
u8 metalCapSequence;
|
||||
u8 vanishCapSequence;
|
||||
struct StarPositions starPositions;
|
||||
s16 cellHeightLimit;
|
||||
s16 floorLowerLimit;
|
||||
s16 floorLowerLimitMisc;
|
||||
s16 floorLowerLimitShadow;
|
||||
bool pauseExitAnywhere;
|
||||
bool disableActs;
|
||||
};
|
||||
|
||||
extern struct LevelValues gLevelValues;
|
||||
|
@ -220,6 +226,7 @@ struct BehaviorValues {
|
|||
f32 BowlingBallThiSmallSpeed;
|
||||
u16 GrateStarRequirement;
|
||||
u8 ShowStarMilestones;
|
||||
u8 RespawnShellBoxes;
|
||||
struct StarsNeededForDialog starsNeededForDialog;
|
||||
struct BehaviorDialogs dialogs;
|
||||
struct BehaviorTrajectories trajectories;
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#ifdef BETTERCAMERA
|
||||
#include "bettercamera.h"
|
||||
#endif
|
||||
#include "hardcoded.h"
|
||||
|
||||
u16 gDialogColorFadeTimer;
|
||||
s8 gLastDialogLineNum;
|
||||
|
@ -2859,7 +2860,7 @@ s16 render_pause_courses_and_castle(void) {
|
|||
render_pause_red_coins();
|
||||
|
||||
/* Always allow exiting from course */
|
||||
if (TRUE || (gMarioStates[0].action & ACT_FLAG_PAUSE_EXIT)) {
|
||||
if (gLevelValues.pauseExitAnywhere || (gMarioStates[0].action & ACT_FLAG_PAUSE_EXIT)) {
|
||||
render_pause_course_options(99, 93, &gDialogLineNum, 15);
|
||||
}
|
||||
|
||||
|
|
|
@ -1986,17 +1986,17 @@ u32 interact_cap(struct MarioState *m, UNUSED u32 interactType, struct Object *o
|
|||
switch (capFlag) {
|
||||
case MARIO_VANISH_CAP:
|
||||
capTime = gLevelValues.vanishCapDuration;
|
||||
capMusic = SEQUENCE_ARGS(4, SEQ_EVENT_POWERUP);
|
||||
capMusic = SEQUENCE_ARGS(4, gLevelValues.vanishCapSequence);
|
||||
break;
|
||||
|
||||
case MARIO_METAL_CAP:
|
||||
capTime = gLevelValues.metalCapDuration;
|
||||
capMusic = SEQUENCE_ARGS(4, SEQ_EVENT_METAL_CAP);
|
||||
capMusic = SEQUENCE_ARGS(4, gLevelValues.metalCapSequence);
|
||||
break;
|
||||
|
||||
case MARIO_WING_CAP:
|
||||
capTime = gLevelValues.wingCapDuration;
|
||||
capMusic = SEQUENCE_ARGS(4, SEQ_EVENT_POWERUP);
|
||||
capMusic = SEQUENCE_ARGS(4, gLevelValues.wingCapSequence);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1077,7 +1077,7 @@ void update_hud_values(void) {
|
|||
gHudDisplay.lives = gMarioState->numLives;
|
||||
gHudDisplay.keys = gMarioState->numKeys;
|
||||
|
||||
if (numHealthWedges > gHudDisplay.wedges) {
|
||||
if (numHealthWedges > gHudDisplay.wedges && !gDjuiInMainMenu) {
|
||||
play_sound(SOUND_MENU_POWER_METER, gGlobalSoundSource);
|
||||
}
|
||||
gHudDisplay.wedges = numHealthWedges;
|
||||
|
@ -1548,13 +1548,10 @@ s32 update_level(void) {
|
|||
changeLevel = play_mode_normal();
|
||||
break;
|
||||
case PLAY_MODE_PAUSED:
|
||||
#ifdef DEVELOPMENT
|
||||
if (configDisableDevPause) {
|
||||
if (!(configSingleplayerPause && network_player_connected_count() == 1)) {
|
||||
changeLevel = play_mode_normal();
|
||||
}
|
||||
#else
|
||||
changeLevel = play_mode_normal();
|
||||
#endif
|
||||
|
||||
if (sCurrPlayMode == PLAY_MODE_PAUSED) {
|
||||
changeLevel = play_mode_paused();
|
||||
}
|
||||
|
|
|
@ -1840,6 +1840,16 @@ void obj_set_cylboard(struct Object *obj) {
|
|||
obj->header.gfx.node.flags |= GRAPH_RENDER_CYLBOARD;
|
||||
}
|
||||
|
||||
void cur_obj_set_billboard_if_vanilla_cam(void) {
|
||||
if (configEnableCamera) {
|
||||
o->header.gfx.node.flags &= ~GRAPH_RENDER_BILLBOARD;
|
||||
o->header.gfx.node.flags |= GRAPH_RENDER_CYLBOARD;
|
||||
} else {
|
||||
o->header.gfx.node.flags &= ~GRAPH_RENDER_CYLBOARD;
|
||||
o->header.gfx.node.flags |= GRAPH_RENDER_BILLBOARD;
|
||||
}
|
||||
}
|
||||
|
||||
void obj_set_hitbox_radius_and_height(struct Object *o, f32 radius, f32 height) {
|
||||
if (o == NULL) { return; }
|
||||
|
||||
|
|
|
@ -204,6 +204,8 @@ void cur_obj_shake_y(f32 amount);
|
|||
void cur_obj_start_cam_event(UNUSED struct Object *obj, s32 cameraEvent);
|
||||
void set_mario_interact_hoot_if_in_range(UNUSED s32 sp0, UNUSED s32 sp4, f32 sp8);
|
||||
void obj_set_billboard(struct Object *obj);
|
||||
void obj_set_cylboard(struct Object *obj);
|
||||
void cur_obj_set_billboard_if_vanilla_cam(void);
|
||||
void obj_set_hitbox_radius_and_height(struct Object *o, f32 radius, f32 height);
|
||||
void obj_set_hurtbox_radius_and_height(struct Object *o, f32 radius, f32 height);
|
||||
void cur_obj_set_hitbox_radius_and_height(f32 radius, f32 height);
|
||||
|
|
|
@ -872,6 +872,7 @@ void painting_update_floors(struct Painting *painting) {
|
|||
enterRight = 0;
|
||||
struct Surface* surface;
|
||||
find_floor(m->marioObj->oPosX, m->marioObj->oPosY, m->marioObj->oPosZ, &surface);
|
||||
if (surface == NULL) { continue; }
|
||||
s16 floorType = surface->type;
|
||||
|
||||
/* The area in front of every painting in the game (except HMC and CotMC, which *\
|
||||
|
|
|
@ -142,9 +142,6 @@ bool configUncappedFramerate = true;
|
|||
unsigned int configFrameLimit = 60;
|
||||
unsigned int configDrawDistance = 5;
|
||||
bool configDisablePopups = 0;
|
||||
#ifdef DEVELOPMENT
|
||||
bool configDisableDevPause = 1;
|
||||
#endif
|
||||
#ifdef LUA_PROFILER
|
||||
bool configLuaProfiler = 1;
|
||||
#endif
|
||||
|
@ -152,6 +149,7 @@ bool configDisableDownloadedModels = 0;
|
|||
unsigned int configInterpolationMode = 1;
|
||||
unsigned int configGamepadNumber = 0;
|
||||
bool configBackgroundGamepad = 1;
|
||||
bool configSingleplayerPause = 0;
|
||||
|
||||
static const struct ConfigOption options[] = {
|
||||
{.name = "fullscreen", .type = CONFIG_TYPE_BOOL, .boolValue = &configWindow.fullscreen},
|
||||
|
@ -245,11 +243,9 @@ static const struct ConfigOption options[] = {
|
|||
{.name = "coop_custom_palette_skin", .type = CONFIG_TYPE_COLOR , .colorValue = &configCustomPalette.parts[SKIN]},
|
||||
{.name = "coop_custom_palette_cap", .type = CONFIG_TYPE_COLOR , .colorValue = &configCustomPalette.parts[CAP]},
|
||||
{.name = "coop_stay_in_level_after_star", .type = CONFIG_TYPE_UINT , .uintValue = &configStayInLevelAfterStar},
|
||||
{.name = "coop_singleplayer_pause", .type = CONFIG_TYPE_BOOL , .boolValue = &configSingleplayerPause},
|
||||
{.name = "share_lives", .type = CONFIG_TYPE_BOOL , .boolValue = &configShareLives},
|
||||
{.name = "disable_popups", .type = CONFIG_TYPE_BOOL , .boolValue = &configDisablePopups},
|
||||
#ifdef DEVELOPMENT
|
||||
{.name = "disable_devpause", .type = CONFIG_TYPE_BOOL , .boolValue = &configDisableDevPause},
|
||||
#endif
|
||||
#ifdef LUA_PROFILER
|
||||
{.name = "lua_profiler", .type = CONFIG_TYPE_BOOL , .boolValue = &configLuaProfiler},
|
||||
#endif
|
||||
|
|
|
@ -99,14 +99,12 @@ extern bool configUncappedFramerate;
|
|||
extern unsigned int configFrameLimit;
|
||||
extern unsigned int configDrawDistance;
|
||||
extern bool configDisablePopups;
|
||||
#ifdef DEVELOPMENT
|
||||
extern bool configDisableDevPause;
|
||||
#endif
|
||||
#ifdef LUA_PROFILER
|
||||
extern bool configLuaProfiler;
|
||||
#endif
|
||||
extern bool configDisableDownloadedModels;
|
||||
extern unsigned int configInterpolationMode;
|
||||
extern bool configSingleplayerPause;
|
||||
|
||||
void configfile_load(const char *filename);
|
||||
void configfile_save(const char *filename);
|
||||
|
|
|
@ -5,35 +5,30 @@
|
|||
|
||||
#ifdef DEVELOPMENT
|
||||
void djui_panel_options_debug_create(struct DjuiBase* caller) {
|
||||
f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 1;
|
||||
f32 bodyHeight = 32 * 3 + 64 * 1 + 16 * 1;
|
||||
|
||||
struct DjuiBase* defaultBase = NULL;
|
||||
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\E\\#00b3ff\\B\\#ffef00\\U\\#ff0800\\G");
|
||||
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
|
||||
|
||||
{
|
||||
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Disable Development Pause", &configDisableDevPause);
|
||||
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs);
|
||||
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&checkbox1->base, 1.0f, 32);
|
||||
defaultBase = &checkbox1->base;
|
||||
|
||||
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs);
|
||||
#ifdef LUA_PROFILER
|
||||
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Lua Profiler", &configLuaProfiler);
|
||||
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&checkbox2->base, 1.0f, 32);
|
||||
defaultBase = &checkbox2->base;
|
||||
|
||||
#ifdef LUA_PROFILER
|
||||
struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Lua Profiler", &configLuaProfiler);
|
||||
djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&checkbox3->base, 1.0f, 32);
|
||||
defaultBase = &checkbox3->base;
|
||||
#endif
|
||||
|
||||
struct DjuiButton* button2 = djui_button_create(&body->base, "Back");
|
||||
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&button2->base, 1.0f, 64);
|
||||
djui_button_set_style(button2, 1);
|
||||
djui_interactable_hook_click(&button2->base, djui_panel_menu_back);
|
||||
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
|
||||
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&button1->base, 1.0f, 64);
|
||||
djui_button_set_style(button1, 1);
|
||||
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
|
||||
}
|
||||
|
||||
djui_panel_add(caller, &panel->base, defaultBase);
|
||||
|
@ -42,9 +37,9 @@ void djui_panel_options_debug_create(struct DjuiBase* caller) {
|
|||
|
||||
void djui_panel_misc_create(struct DjuiBase* caller) {
|
||||
#ifdef DEVELOPMENT
|
||||
f32 bodyHeight = 64 * 3 + 16 * 2;
|
||||
f32 bodyHeight = 64 * 4 + 16 * 3;
|
||||
#else
|
||||
f32 bodyHeight = 64 * 2 + 16 * 1;
|
||||
f32 bodyHeight = 64 * 3 + 16 * 2;
|
||||
#endif
|
||||
|
||||
struct DjuiBase* defaultBase = NULL;
|
||||
|
@ -52,11 +47,15 @@ void djui_panel_misc_create(struct DjuiBase* caller) {
|
|||
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
|
||||
|
||||
{
|
||||
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Pause In Singleplayer", &configSingleplayerPause);
|
||||
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&checkbox1->base, 1.0f, 32);
|
||||
defaultBase = &checkbox1->base;
|
||||
|
||||
struct DjuiButton* button1 = djui_button_create(&body->base, "Menu Options");
|
||||
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&button1->base, 1.0f, 64);
|
||||
djui_interactable_hook_click(&button1->base, djui_panel_main_menu_create);
|
||||
defaultBase = &button1->base;
|
||||
|
||||
#ifdef DEVELOPMENT
|
||||
struct DjuiButton* button2 = djui_button_create(&body->base, "Debug");
|
||||
|
|
|
@ -208,7 +208,7 @@ static struct LuaObjectField sBehaviorTrajectoriesFields[LUA_BEHAVIOR_TRAJECTORI
|
|||
{ "UnagiTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, UnagiTrajectory), false, LOT_POINTER },
|
||||
};
|
||||
|
||||
#define LUA_BEHAVIOR_VALUES_FIELD_COUNT 26
|
||||
#define LUA_BEHAVIOR_VALUES_FIELD_COUNT 27
|
||||
static struct LuaObjectField sBehaviorValuesFields[LUA_BEHAVIOR_VALUES_FIELD_COUNT] = {
|
||||
{ "BowlingBallBob2Speed", LVT_F32, offsetof(struct BehaviorValues, BowlingBallBob2Speed), false, LOT_NONE },
|
||||
{ "BowlingBallBobSpeed", LVT_F32, offsetof(struct BehaviorValues, BowlingBallBobSpeed), false, LOT_NONE },
|
||||
|
@ -229,6 +229,7 @@ static struct LuaObjectField sBehaviorValuesFields[LUA_BEHAVIOR_VALUES_FIELD_COU
|
|||
{ "RacingPenguinBigRadius", LVT_F32, offsetof(struct BehaviorValues, RacingPenguinBigRadius), false, LOT_NONE },
|
||||
{ "RacingPenguinHeight", LVT_F32, offsetof(struct BehaviorValues, RacingPenguinHeight), false, LOT_NONE },
|
||||
{ "RacingPenguinRadius", LVT_F32, offsetof(struct BehaviorValues, RacingPenguinRadius), false, LOT_NONE },
|
||||
{ "RespawnShellBoxes", LVT_U8, offsetof(struct BehaviorValues, RespawnShellBoxes), false, LOT_NONE },
|
||||
{ "ShowStarMilestones", LVT_U8, offsetof(struct BehaviorValues, ShowStarMilestones), false, LOT_NONE },
|
||||
{ "ToadStar1Requirement", LVT_U16, offsetof(struct BehaviorValues, ToadStar1Requirement), false, LOT_NONE },
|
||||
{ "ToadStar2Requirement", LVT_U16, offsetof(struct BehaviorValues, ToadStar2Requirement), false, LOT_NONE },
|
||||
|
@ -726,10 +727,11 @@ static struct LuaObjectField sLakituStateFields[LUA_LAKITU_STATE_FIELD_COUNT] =
|
|||
{ "yaw", LVT_S16, offsetof(struct LakituState, yaw), false, LOT_NONE },
|
||||
};
|
||||
|
||||
#define LUA_LEVEL_VALUES_FIELD_COUNT 21
|
||||
#define LUA_LEVEL_VALUES_FIELD_COUNT 26
|
||||
static struct LuaObjectField sLevelValuesFields[LUA_LEVEL_VALUES_FIELD_COUNT] = {
|
||||
{ "cellHeightLimit", LVT_S16, offsetof(struct LevelValues, cellHeightLimit), false, LOT_NONE },
|
||||
{ "coinsRequiredForCoinStar", LVT_S16, offsetof(struct LevelValues, coinsRequiredForCoinStar), false, LOT_NONE },
|
||||
{ "disableActs", LVT_BOOL, offsetof(struct LevelValues, disableActs), false, LOT_NONE },
|
||||
{ "entryLevel", LVT_S32, offsetof(struct LevelValues, entryLevel), false, LOT_NONE },
|
||||
{ "exitCastleArea", LVT_S16, offsetof(struct LevelValues, exitCastleArea), false, LOT_NONE },
|
||||
{ "exitCastleLevel", LVT_S32, offsetof(struct LevelValues, exitCastleLevel), false, LOT_NONE },
|
||||
|
@ -741,14 +743,18 @@ static struct LuaObjectField sLevelValuesFields[LUA_LEVEL_VALUES_FIELD_COUNT] =
|
|||
{ "floorLowerLimitShadow", LVT_S16, offsetof(struct LevelValues, floorLowerLimitShadow), false, LOT_NONE },
|
||||
{ "metalCapDuration", LVT_U16, offsetof(struct LevelValues, metalCapDuration), false, LOT_NONE },
|
||||
{ "metalCapDurationCotmc", LVT_U16, offsetof(struct LevelValues, metalCapDurationCotmc), false, LOT_NONE },
|
||||
{ "pauseExitAnywhere", LVT_BOOL, offsetof(struct LevelValues, pauseExitAnywhere), false, LOT_NONE },
|
||||
{ "metalCapSequence", LVT_U8, offsetof(struct LevelValues, metalCapSequence), false, LOT_NONE },
|
||||
{ "pssSlideStarIndex", LVT_U8, offsetof(struct LevelValues, pssSlideStarIndex), false, LOT_NONE },
|
||||
{ "pssSlideStarTime", LVT_U16, offsetof(struct LevelValues, pssSlideStarTime), false, LOT_NONE },
|
||||
{ "skipCreditsAt", LVT_S32, offsetof(struct LevelValues, skipCreditsAt), false, LOT_NONE },
|
||||
{ "starPositions", LVT_COBJECT, offsetof(struct LevelValues, starPositions), true, LOT_STARPOSITIONS },
|
||||
{ "vanishCapDuration", LVT_U16, offsetof(struct LevelValues, vanishCapDuration), false, LOT_NONE },
|
||||
{ "vanishCapDurationVcutm", LVT_U16, offsetof(struct LevelValues, vanishCapDurationVcutm), false, LOT_NONE },
|
||||
{ "vanishCapSequence", LVT_U8, offsetof(struct LevelValues, vanishCapSequence), false, LOT_NONE },
|
||||
{ "wingCapDuration", LVT_U16, offsetof(struct LevelValues, wingCapDuration), false, LOT_NONE },
|
||||
{ "wingCapDurationTotwc", LVT_U16, offsetof(struct LevelValues, wingCapDurationTotwc), false, LOT_NONE },
|
||||
{ "wingCapSequence", LVT_U8, offsetof(struct LevelValues, wingCapSequence), false, LOT_NONE },
|
||||
};
|
||||
|
||||
#define LUA_LINEAR_TRANSITION_POINT_FIELD_COUNT 5
|
||||
|
|
|
@ -3976,4 +3976,7 @@ char gSmluaConstants[] = ""
|
|||
"COOP_OBJ_FLAG_NETWORK = (1 << 0)\n"
|
||||
"COOP_OBJ_FLAG_LUA = (1 << 1)\n"
|
||||
"COOP_OBJ_FLAG_NON_SYNC = (1 << 2)\n"
|
||||
"VERSION_NUMBER = 31\n"
|
||||
"MINOR_VERSION_NUMBER = 0\n"
|
||||
"MAX_VERSION_LENGTH = 10\n"
|
||||
;
|
|
@ -10,6 +10,8 @@
|
|||
#include "object_fields.h"
|
||||
#include "engine/math_util.h"
|
||||
#include "pc/djui/djui_hud_utils.h"
|
||||
#include "include/level_misc_macros.h"
|
||||
#include "include/macro_presets.h"
|
||||
|
||||
bool smlua_functions_valid_param_count(lua_State* L, int expected) {
|
||||
int top = lua_gettop(L);
|
||||
|
@ -459,6 +461,122 @@ int smlua_func_djui_hud_render_texture_tile_interpolated(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
// level script preprocessing //
|
||||
////////////////////////////////
|
||||
|
||||
struct LuaLevelScriptParse {
|
||||
int reference;
|
||||
struct Mod* mod;
|
||||
};
|
||||
|
||||
struct LuaLevelScriptParse sLevelScriptParse = { 0 };
|
||||
|
||||
s32 smlua_func_level_script_parse_callback(u8 type, void *cmd) {
|
||||
if (type != 0x24 && type != 0x39 && type != 0x1F) {
|
||||
return 0;
|
||||
}
|
||||
lua_State* L = gLuaState;
|
||||
if (L == NULL) { return 0; }
|
||||
struct LuaLevelScriptParse* preprocess = &sLevelScriptParse;
|
||||
|
||||
lua_rawgeti(L, LUA_REGISTRYINDEX, preprocess->reference);
|
||||
|
||||
if (type == 0x1F) {
|
||||
u8 area = (u8) dynos_level_cmd_get(cmd, 2);
|
||||
lua_pushinteger(L, area);
|
||||
} else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
|
||||
if (type == 0x24) {
|
||||
const BehaviorScript *bhv = (const BehaviorScript *) dynos_level_cmd_get(cmd, 20);
|
||||
u32 behaviorArg = (u32) dynos_level_cmd_get(cmd, 16);
|
||||
|
||||
lua_newtable(L);
|
||||
|
||||
lua_pushstring(L, "behavior");
|
||||
lua_pushinteger(L, get_id_from_behavior(bhv));
|
||||
lua_settable(L, -3);
|
||||
|
||||
lua_pushstring(L, "behaviorArg");
|
||||
lua_pushinteger(L, behaviorArg);
|
||||
lua_settable(L, -3);
|
||||
} else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
|
||||
if (type == 0x39) {
|
||||
MacroObject *data = (MacroObject *) dynos_level_cmd_get(cmd, 4);
|
||||
int i = 0;
|
||||
s32 len = 0;
|
||||
|
||||
lua_newtable(L);
|
||||
int t = lua_gettop(gLuaState);
|
||||
|
||||
lua_newtable(L);
|
||||
int args = lua_gettop(gLuaState);
|
||||
while (data[len++] != MACRO_OBJECT_END()) {
|
||||
s32 presetId = (s32) ((data[len - 1] & 0x1FF) - 0x1F);
|
||||
const BehaviorScript *bhv = (const BehaviorScript *) MacroObjectPresets[presetId].behavior;
|
||||
s32 presetParams = MacroObjectPresets[presetId].param;
|
||||
s32 objParams = (data[4] & 0xFF00) + (presetParams & 0x00FF);
|
||||
u32 behaviorArg = ((objParams & 0x00FF) << 16) + (objParams & 0xFF00);
|
||||
|
||||
lua_pushinteger(L, i);
|
||||
lua_pushinteger(L, get_id_from_behavior(bhv));
|
||||
lua_settable(L, t);
|
||||
|
||||
lua_pushinteger(L, i);
|
||||
lua_pushinteger(L, behaviorArg);
|
||||
lua_settable(L, args);
|
||||
|
||||
i++;
|
||||
len += 4;
|
||||
}
|
||||
} else {
|
||||
lua_pushnil(L);
|
||||
lua_pushnil(L);
|
||||
}
|
||||
|
||||
// call the callback
|
||||
if (0 != smlua_call_hook(L, 4, 0, 0, preprocess->mod)) {
|
||||
LOG_LUA("Failed to call the callback behaviors: %u", type);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void smlua_func_level_script_parse(lua_State* L) {
|
||||
if (!smlua_functions_valid_param_count(L, 2)) { return; }
|
||||
|
||||
lua_Integer levelNum = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) {
|
||||
LOG_LUA_LINE("Invalid level script name");
|
||||
return;
|
||||
}
|
||||
|
||||
struct LuaLevelScriptParse* preprocess = &sLevelScriptParse;
|
||||
preprocess->reference = LUA_NOREF;
|
||||
|
||||
lua_pushvalue(L, 2);
|
||||
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
|
||||
if (ref == -1) {
|
||||
LOG_LUA_LINE("Level Script Parse: %lld tried to parse using undefined function", levelNum);
|
||||
return;
|
||||
}
|
||||
|
||||
preprocess->reference = ref;
|
||||
preprocess->mod = gLuaActiveMod;
|
||||
|
||||
void *script = dynos_level_get_script(levelNum);
|
||||
if (script == NULL) {
|
||||
LOG_LUA("Failed to find script: %lld", levelNum);
|
||||
return;
|
||||
}
|
||||
dynos_level_parse_script(script, smlua_func_level_script_parse_callback);
|
||||
}
|
||||
|
||||
//////////
|
||||
// bind //
|
||||
//////////
|
||||
|
@ -482,4 +600,5 @@ void smlua_bind_functions(void) {
|
|||
smlua_bind_function(L, "djui_hud_render_texture_tile", smlua_func_djui_hud_render_texture_tile);
|
||||
smlua_bind_function(L, "djui_hud_render_texture_interpolated", smlua_func_djui_hud_render_texture_interpolated);
|
||||
smlua_bind_function(L, "djui_hud_render_texture_tile_interpolated", smlua_func_djui_hud_render_texture_tile_interpolated);
|
||||
smlua_bind_function(L, "level_script_parse", smlua_func_level_script_parse);
|
||||
}
|
||||
|
|
|
@ -22252,6 +22252,22 @@ int smlua_func_cur_obj_set_behavior(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_cur_obj_set_billboard_if_vanilla_cam(UNUSED lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 0) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "cur_obj_set_billboard_if_vanilla_cam", 0, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
extern void cur_obj_set_billboard_if_vanilla_cam(void);
|
||||
cur_obj_set_billboard_if_vanilla_cam();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_cur_obj_set_direction_table(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
@ -27783,6 +27799,33 @@ int smlua_func_obj_set_vel(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_whirlpools(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 6) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "set_whirlpools", 6, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 x = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_whirlpools"); return 0; }
|
||||
f32 y = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "set_whirlpools"); return 0; }
|
||||
f32 z = smlua_to_number(L, 3);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 3, "set_whirlpools"); return 0; }
|
||||
s16 strength = smlua_to_integer(L, 4);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 4, "set_whirlpools"); return 0; }
|
||||
s16 area = smlua_to_integer(L, 5);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 5, "set_whirlpools"); return 0; }
|
||||
s32 index = smlua_to_integer(L, 6);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 6, "set_whirlpools"); return 0; }
|
||||
|
||||
set_whirlpools(x, y, z, strength, area, index);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_spawn_non_sync_object(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
@ -29874,6 +29917,7 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "cur_obj_scale", smlua_func_cur_obj_scale);
|
||||
smlua_bind_function(L, "cur_obj_scale_over_time", smlua_func_cur_obj_scale_over_time);
|
||||
smlua_bind_function(L, "cur_obj_set_behavior", smlua_func_cur_obj_set_behavior);
|
||||
smlua_bind_function(L, "cur_obj_set_billboard_if_vanilla_cam", smlua_func_cur_obj_set_billboard_if_vanilla_cam);
|
||||
smlua_bind_function(L, "cur_obj_set_direction_table", smlua_func_cur_obj_set_direction_table);
|
||||
smlua_bind_function(L, "cur_obj_set_face_angle_to_move_angle", smlua_func_cur_obj_set_face_angle_to_move_angle);
|
||||
smlua_bind_function(L, "cur_obj_set_hitbox_and_die_if_attacked", smlua_func_cur_obj_set_hitbox_and_die_if_attacked);
|
||||
|
@ -30168,6 +30212,7 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "obj_move_xyz", smlua_func_obj_move_xyz);
|
||||
smlua_bind_function(L, "obj_set_model_extended", smlua_func_obj_set_model_extended);
|
||||
smlua_bind_function(L, "obj_set_vel", smlua_func_obj_set_vel);
|
||||
smlua_bind_function(L, "set_whirlpools", smlua_func_set_whirlpools);
|
||||
smlua_bind_function(L, "spawn_non_sync_object", smlua_func_spawn_non_sync_object);
|
||||
smlua_bind_function(L, "spawn_sync_object", smlua_func_spawn_sync_object);
|
||||
|
||||
|
|
|
@ -90,11 +90,16 @@ int smlua_call_hook(lua_State* L, int nargs, int nresults, int errfunc, struct M
|
|||
gLuaActiveMod = activeMod;
|
||||
gLuaLastHookMod = activeMod;
|
||||
#if defined(LUA_PROFILER)
|
||||
lua_profiler_start_counter(activeMod);
|
||||
extern bool configLuaProfiler;
|
||||
if (configLuaProfiler) {
|
||||
lua_profiler_start_counter(activeMod);
|
||||
}
|
||||
#endif
|
||||
int rc = smlua_pcall(L, nargs, nresults, errfunc);
|
||||
#if defined(LUA_PROFILER)
|
||||
lua_profiler_stop_counter(activeMod);
|
||||
if (configLuaProfiler) {
|
||||
lua_profiler_stop_counter(activeMod);
|
||||
}
|
||||
#endif
|
||||
gLuaActiveMod = prev;
|
||||
return rc;
|
||||
|
|
|
@ -383,3 +383,13 @@ void obj_move_xyz(struct Object *o, f32 dx, f32 dy, f32 dz) {
|
|||
o->oPosY += dy;
|
||||
o->oPosZ += dz;
|
||||
}
|
||||
|
||||
void set_whirlpools(f32 x, f32 y, f32 z, s16 strength, s16 area, s32 index) {
|
||||
static struct Whirlpool whirlpool;
|
||||
|
||||
gAreas[area].whirlpools[index] = &whirlpool;
|
||||
gAreas[area].whirlpools[index]->pos[0] = x;
|
||||
gAreas[area].whirlpools[index]->pos[1] = y;
|
||||
gAreas[area].whirlpools[index]->pos[2] = z;
|
||||
gAreas[area].whirlpools[index]->strength = strength;
|
||||
}
|
||||
|
|
|
@ -53,5 +53,6 @@ bool obj_check_overlap_with_hitbox_params(struct Object *o, f32 x, f32 y, f32 z,
|
|||
void obj_set_vel(struct Object *o, f32 vx, f32 vy, f32 vz);
|
||||
void obj_move_xyz(struct Object *o, f32 dx, f32 dy, f32 dz);
|
||||
|
||||
void set_whirlpools(f32 x, f32 y, f32 z, s16 strength, s16 area, s32 index);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
#include "types.h"
|
||||
|
||||
static char sVersionString[MAX_VERSION_LENGTH] = { 0 };
|
||||
#define VERSION_TEXT "beta "
|
||||
#define VERSION_TEXT "beta"
|
||||
|
||||
char* get_version(void) {
|
||||
snprintf(sVersionString, MAX_VERSION_LENGTH, "%s%d.%d", VERSION_TEXT, VERSION_NUMBER, MINOR_VERSION_NUMBER);
|
||||
snprintf(sVersionString, MAX_VERSION_LENGTH, "%s %d.%d", VERSION_TEXT, VERSION_NUMBER, MINOR_VERSION_NUMBER);
|
||||
return sVersionString;
|
||||
}
|
Loading…
Reference in a new issue