diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py index 5c6567fa3..d532db102 100644 --- a/autogen/convert_structs.py +++ b/autogen/convert_structs.py @@ -227,7 +227,7 @@ 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 'const ' in ftype).lower() - if lvt.startswith('LVT_') and lvt.endswith('_P') and 'OBJECT' not in lvt and 'COLLISION' not in lvt: + if lvt.startswith('LVT_') and lvt.endswith('_P') and 'OBJECT' not in lvt and 'COLLISION' not in lvt and 'TRAJECTORY' not in lvt: fimmutable = 'true' if sid in override_field_immutable: diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index 34ccb05ce..f5eaab5bc 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -7141,6 +7141,12 @@ function get_temp_object_hitbox() -- ... end +--- @param name string +--- @return Pointer_Trajectory +function get_trajectory(name) + -- ... +end + --- @param objList ObjectList --- @return Object function obj_get_first(objList) @@ -7441,3 +7447,4 @@ end --- @class Pointer_BehaviorScript --- @class Pointer_number --- @class Pointer_Collision +--- @class Pointer_Trajectory diff --git a/autogen/lua_definitions/manual.lua b/autogen/lua_definitions/manual.lua index 444dcde57..dc6e94b3e 100644 --- a/autogen/lua_definitions/manual.lua +++ b/autogen/lua_definitions/manual.lua @@ -31,6 +31,9 @@ gPlayerSyncTable = {} --- @type LevelValues gLevelValues = {} +--- @type BehaviorValues +gBehaviorValues = {} + ----------- -- hooks -- ----------- diff --git a/autogen/lua_definitions/structs.lua b/autogen/lua_definitions/structs.lua index bd3ac141e..9a0d19799 100644 --- a/autogen/lua_definitions/structs.lua +++ b/autogen/lua_definitions/structs.lua @@ -72,6 +72,9 @@ --- @field public UnagiTrajectory Pointer_Trajectory --- @class BehaviorValues +--- @field public KoopaBobAgility number +--- @field public KoopaCatchupAgility number +--- @field public KoopaThiAgility number --- @field public trajectories BehaviorTrajectories --- @class BullyCollisionData diff --git a/data/dynos.c.h b/data/dynos.c.h index 64fb48cfd..a8a920a4e 100644 --- a/data/dynos.c.h +++ b/data/dynos.c.h @@ -40,6 +40,7 @@ Collision* dynos_collision_get(const char* collisionName); void dynos_add_level(s32 modIndex, const char *modPath, const char* levelName); const char* dynos_level_get_token(u32 index); struct MovtexQuadCollection *dynos_level_get_movtexqc(s32 index); +Trajectory* dynos_level_get_trajectory(const char* name); void dynos_level_load_background(void *ptr); #endif diff --git a/data/dynos.cpp.h b/data/dynos.cpp.h index 94d3f852c..9fc0a19fe 100644 --- a/data/dynos.cpp.h +++ b/data/dynos.cpp.h @@ -761,6 +761,7 @@ void DynOS_Lvl_Activate(s32 modIndex, const SysPath &aPackFolder, const char *aL DataNode *DynOS_Lvl_GetTexture(void *aPtr); const char* DynOS_Lvl_GetToken(u32 index); DataNode *DynOS_Lvl_GetMovtexQuadCollection(s32 index); +Trajectory* DynOS_Lvl_GetTrajectory(const char* aName); void DynOS_Lvl_LoadBackground(void *aPtr); void *DynOS_Lvl_Override(void *aCmd); diff --git a/data/dynos_bin_lvl.cpp b/data/dynos_bin_lvl.cpp index a7280eb2a..c8bfbb6d5 100644 --- a/data/dynos_bin_lvl.cpp +++ b/data/dynos_bin_lvl.cpp @@ -2044,7 +2044,7 @@ static bool DynOS_Lvl_GeneratePack_Internal(const SysPath &aPackFolder, ArraymModelIdentifier); DynOS_Lvl_Parse(_GfxData, _LvlRoot, true); - // Force all of the movtexs and collisions into the compiled lvl + // Force all of the movtexs, collisions, and trajectories into the compiled lvl for (auto &_Node : _GfxData->mMovtexs) { if (_Node->mModelIdentifier != _GfxData->mModelIdentifier) { continue; } DynOS_Movtex_Parse(_GfxData, _Node, false); @@ -2057,6 +2057,10 @@ static bool DynOS_Lvl_GeneratePack_Internal(const SysPath &aPackFolder, ArraymModelIdentifier != _GfxData->mModelIdentifier) { continue; } DynOS_Col_Parse(_GfxData, _Node, false); } + for (auto &_Node : _GfxData->mTrajectories) { + if (_Node->mModelIdentifier != _GfxData->mModelIdentifier) { continue; } + DynOS_Trajectory_Parse(_GfxData, _Node, false); + } // Write if no error if (_GfxData->mErrorCount == 0) { diff --git a/data/dynos_c.cpp b/data/dynos_c.cpp index 2657be033..a52514b94 100644 --- a/data/dynos_c.cpp +++ b/data/dynos_c.cpp @@ -119,6 +119,10 @@ struct MovtexQuadCollection *dynos_level_get_movtexqc(s32 index) { return node->mData; } +Trajectory* dynos_level_get_trajectory(const char* name) { + return DynOS_Lvl_GetTrajectory(name); +} + void dynos_level_load_background(void *ptr) { DynOS_Lvl_LoadBackground(ptr); } diff --git a/data/dynos_level.cpp b/data/dynos_level.cpp index d28a29d7c..80c1450e0 100644 --- a/data/dynos_level.cpp +++ b/data/dynos_level.cpp @@ -831,12 +831,17 @@ static void DynOS_Level_ParseScript(const void *aScript, s32 (*aPreprocessFuncti s16 *DynOS_Level_GetWarp(s32 aLevel, s32 aArea, u8 aWarpId) { DynOS_Level_Init(); + s16 *bestWarp = NULL; for (const auto &_Warp : sDynosLevelWarps[aLevel]) { - if (_Warp.mArea == aArea && _Warp.mId == aWarpId) { - return (s16 *) &_Warp; + if (_Warp.mArea == aArea) { + if (_Warp.mId == aWarpId) { + return (s16 *) &_Warp; + } else { + bestWarp = (s16 *) &_Warp; + } } } - return NULL; + return bestWarp; } s16 *DynOS_Level_GetWarpEntry(s32 aLevel, s32 aArea) { diff --git a/data/dynos_mgr_lvl.cpp b/data/dynos_mgr_lvl.cpp index 0cfa244bc..019087404 100644 --- a/data/dynos_mgr_lvl.cpp +++ b/data/dynos_mgr_lvl.cpp @@ -4,8 +4,14 @@ extern "C" { #include "game/skybox.h" } +struct OverrideLevelScript { + const void* originalScript; + const void* newScript; + GfxData* gfxData; +}; + static Array> sDynosCustomLevelScripts; -static Array> sDynosOverrideLevelScripts; +static Array sDynosOverrideLevelScripts; Array> &DynOS_Lvl_GetArray() { return sDynosCustomLevelScripts; @@ -45,7 +51,7 @@ void DynOS_Lvl_Activate(s32 modIndex, const SysPath &aPackFolder, const char *aL } DynOS_Level_Override((void*)originalScript, newScriptNode->mData); - sDynosOverrideLevelScripts.Add({ originalScript, newScriptNode->mData}); + sDynosOverrideLevelScripts.Add({ originalScript, newScriptNode->mData, _Node}); } DataNode *DynOS_Lvl_GetTexture(void *aPtr) { @@ -105,6 +111,17 @@ DataNode *DynOS_Lvl_GetMovtexQuadCollection(s32 index) { return mMovtexQCs[index]; } +Trajectory* DynOS_Lvl_GetTrajectory(const char* aName) { + for (auto& script : sDynosCustomLevelScripts) { + for (auto& trajectoryNode : script.second->mTrajectories) { + if (trajectoryNode->mName == aName) { + return trajectoryNode->mData; + } + } + } + return NULL; +} + void DynOS_Lvl_LoadBackground(void *aPtr) { // ensure this texture list exists GfxData* foundGfxData = NULL; @@ -139,13 +156,11 @@ double_break: } void *DynOS_Lvl_Override(void *aCmd) { - for (auto& overridePair : sDynosOverrideLevelScripts) { - if (aCmd == overridePair.first || aCmd == overridePair.second) { - aCmd = (void*)overridePair.second; - for (auto& customPair : sDynosCustomLevelScripts) { - gLevelScriptModIndex = customPair.second->mModIndex; - gLevelScriptActive = (LevelScript*)aCmd; - } + for (auto& overrideStruct : sDynosOverrideLevelScripts) { + if (aCmd == overrideStruct.originalScript || aCmd == overrideStruct.newScript) { + aCmd = (void*)overrideStruct.newScript; + gLevelScriptModIndex = overrideStruct.gfxData->mModIndex; + gLevelScriptActive = (LevelScript*)aCmd; } } return aCmd; diff --git a/docs/lua/functions.md b/docs/lua/functions.md index d286e38c3..1235dd5e1 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -1335,6 +1335,7 @@ - smlua_obj_utils.h - [get_temp_object_hitbox](#get_temp_object_hitbox) + - [get_trajectory](#get_trajectory) - [obj_get_first](#obj_get_first) - [obj_get_first_with_behavior_id](#obj_get_first_with_behavior_id) - [obj_get_first_with_behavior_id_and_field_f32](#obj_get_first_with_behavior_id_and_field_f32) @@ -24957,6 +24958,26 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+## [get_trajectory](#get_trajectory) + +### Lua Example +`local PointerValue = get_trajectory(name)` + +### Parameters +| Field | Type | +| ----- | ---- | +| name | `string` | + +### Returns +- `Pointer` <`Trajectory`> + +### C Prototype +`Trajectory* get_trajectory(const char* name);` + +[:arrow_up_small:](#) + +
+ ## [obj_get_first](#obj_get_first) ### Lua Example diff --git a/docs/lua/structs.md b/docs/lua/structs.md index 6abd80b07..91cc4a15e 100644 --- a/docs/lua/structs.md +++ b/docs/lua/structs.md @@ -135,34 +135,34 @@ | Field | Type | Access | | ----- | ---- | ------ | -| BowlingBallBob2Trajectory | `Pointer` <`Trajectory`> | read-only | -| BowlingBallBobTrajectory | `Pointer` <`Trajectory`> | read-only | -| BowlingBallTtmTrajectory | `Pointer` <`Trajectory`> | read-only | -| KoopaBobTrajectory | `Pointer` <`Trajectory`> | read-only | -| KoopaThiTrajectory | `Pointer` <`Trajectory`> | read-only | -| Mips10Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips2Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips3Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips4Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips5Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips6Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips7Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips8Trajectory | `Pointer` <`Trajectory`> | read-only | -| Mips9Trajectory | `Pointer` <`Trajectory`> | read-only | -| MipsTrajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformBitfsTrajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformCcmTrajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformHmcTrajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformLll2Trajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformLllTrajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformRr2Trajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformRr3Trajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformRr4Trajectory | `Pointer` <`Trajectory`> | read-only | -| PlatformRrTrajectory | `Pointer` <`Trajectory`> | read-only | -| RacingPenguinTrajectory | `Pointer` <`Trajectory`> | read-only | -| SnowmanHeadTrajectory | `Pointer` <`Trajectory`> | read-only | -| Unagi2Trajectory | `Pointer` <`Trajectory`> | read-only | -| UnagiTrajectory | `Pointer` <`Trajectory`> | read-only | +| BowlingBallBob2Trajectory | `Pointer` <`Trajectory`> | | +| BowlingBallBobTrajectory | `Pointer` <`Trajectory`> | | +| BowlingBallTtmTrajectory | `Pointer` <`Trajectory`> | | +| KoopaBobTrajectory | `Pointer` <`Trajectory`> | | +| KoopaThiTrajectory | `Pointer` <`Trajectory`> | | +| Mips10Trajectory | `Pointer` <`Trajectory`> | | +| Mips2Trajectory | `Pointer` <`Trajectory`> | | +| Mips3Trajectory | `Pointer` <`Trajectory`> | | +| Mips4Trajectory | `Pointer` <`Trajectory`> | | +| Mips5Trajectory | `Pointer` <`Trajectory`> | | +| Mips6Trajectory | `Pointer` <`Trajectory`> | | +| Mips7Trajectory | `Pointer` <`Trajectory`> | | +| Mips8Trajectory | `Pointer` <`Trajectory`> | | +| Mips9Trajectory | `Pointer` <`Trajectory`> | | +| MipsTrajectory | `Pointer` <`Trajectory`> | | +| PlatformBitfsTrajectory | `Pointer` <`Trajectory`> | | +| PlatformCcmTrajectory | `Pointer` <`Trajectory`> | | +| PlatformHmcTrajectory | `Pointer` <`Trajectory`> | | +| PlatformLll2Trajectory | `Pointer` <`Trajectory`> | | +| PlatformLllTrajectory | `Pointer` <`Trajectory`> | | +| PlatformRr2Trajectory | `Pointer` <`Trajectory`> | | +| PlatformRr3Trajectory | `Pointer` <`Trajectory`> | | +| PlatformRr4Trajectory | `Pointer` <`Trajectory`> | | +| PlatformRrTrajectory | `Pointer` <`Trajectory`> | | +| RacingPenguinTrajectory | `Pointer` <`Trajectory`> | | +| SnowmanHeadTrajectory | `Pointer` <`Trajectory`> | | +| Unagi2Trajectory | `Pointer` <`Trajectory`> | | +| UnagiTrajectory | `Pointer` <`Trajectory`> | | [:arrow_up_small:](#) @@ -172,6 +172,9 @@ | Field | Type | Access | | ----- | ---- | ------ | +| KoopaBobAgility | `number` | | +| KoopaCatchupAgility | `number` | | +| KoopaThiAgility | `number` | | | trajectories | [BehaviorTrajectories](structs.md#BehaviorTrajectories) | read-only | [:arrow_up_small:](#) diff --git a/src/game/behaviors/koopa.inc.c b/src/game/behaviors/koopa.inc.c index 7763031c8..3db27f036 100644 --- a/src/game/behaviors/koopa.inc.c +++ b/src/game/behaviors/koopa.inc.c @@ -740,11 +740,11 @@ static void koopa_the_quick_act_race(void) { && (o->oPathedPrevWaypointFlags & WAYPOINT_MASK_00FF) < 28) { // Move faster if mario has already finished the race or // cheated by shooting from cannon - o->oKoopaAgility = 8.0f; + o->oKoopaAgility = gBehaviorValues.KoopaCatchupAgility; } else if (o->oKoopaTheQuickRaceIndex != KOOPA_THE_QUICK_BOB_INDEX) { - o->oKoopaAgility = 6.0f; + o->oKoopaAgility = gBehaviorValues.KoopaThiAgility; } else { - o->oKoopaAgility = 4.0f; + o->oKoopaAgility = gBehaviorValues.KoopaBobAgility; } obj_forward_vel_approach(o->oKoopaAgility * 6.0f * downhillSteepness, diff --git a/src/game/behaviors/mips.inc.c b/src/game/behaviors/mips.inc.c index 9a8ff0269..205aff4f1 100644 --- a/src/game/behaviors/mips.inc.c +++ b/src/game/behaviors/mips.inc.c @@ -2,7 +2,7 @@ * Behavior for MIPS (everyone's favorite yellow rabbit). */ -static const Trajectory** sMipsPaths[] = { +static Trajectory** sMipsPaths[] = { &gBehaviorValues.trajectories.MipsTrajectory, &gBehaviorValues.trajectories.Mips2Trajectory, &gBehaviorValues.trajectories.Mips3Trajectory, diff --git a/src/game/behaviors/platform_on_track.inc.c b/src/game/behaviors/platform_on_track.inc.c index c123b133c..a4cf9b1fe 100644 --- a/src/game/behaviors/platform_on_track.inc.c +++ b/src/game/behaviors/platform_on_track.inc.c @@ -18,7 +18,7 @@ static void const *sPlatformOnTrackCollisionModels[] = { /** * Paths for the different instances of these platforms. */ -static const Trajectory** sPlatformOnTrackPaths[] = { +static Trajectory** sPlatformOnTrackPaths[] = { &gBehaviorValues.trajectories.PlatformRrTrajectory, &gBehaviorValues.trajectories.PlatformRr2Trajectory, &gBehaviorValues.trajectories.PlatformCcmTrajectory, diff --git a/src/game/hardcoded.c b/src/game/hardcoded.c index 3027f689a..adaac9bc5 100644 --- a/src/game/hardcoded.c +++ b/src/game/hardcoded.c @@ -78,34 +78,37 @@ struct LevelValues gLevelValues = { /////////////// struct BehaviorValues gBehaviorValues = { + .KoopaBobAgility = 4.0f, + .KoopaThiAgility = 6.0f, + .KoopaCatchupAgility = 8.0f, .trajectories = { - .KoopaBobTrajectory = bob_seg7_trajectory_koopa, - .KoopaThiTrajectory = thi_seg7_trajectory_koopa, - .UnagiTrajectory = jrb_seg7_trajectory_unagi_1, - .Unagi2Trajectory = jrb_seg7_trajectory_unagi_2, - .SnowmanHeadTrajectory = ccm_seg7_trajectory_snowman, - .RacingPenguinTrajectory = ccm_seg7_trajectory_penguin_race, - .BowlingBallBobTrajectory = bob_seg7_metal_ball_path0, - .BowlingBallBob2Trajectory = bob_seg7_metal_ball_path1, - .BowlingBallTtmTrajectory = ttm_seg7_trajectory_070170A0, - .MipsTrajectory = inside_castle_seg7_trajectory_mips_0, - .Mips2Trajectory = inside_castle_seg7_trajectory_mips_1, - .Mips3Trajectory = inside_castle_seg7_trajectory_mips_2, - .Mips4Trajectory = inside_castle_seg7_trajectory_mips_3, - .Mips5Trajectory = inside_castle_seg7_trajectory_mips_4, - .Mips6Trajectory = inside_castle_seg7_trajectory_mips_5, - .Mips7Trajectory = inside_castle_seg7_trajectory_mips_6, - .Mips8Trajectory = inside_castle_seg7_trajectory_mips_7, - .Mips9Trajectory = inside_castle_seg7_trajectory_mips_8, - .Mips10Trajectory = inside_castle_seg7_trajectory_mips_9, - .PlatformRrTrajectory = rr_seg7_trajectory_0702EC3C, - .PlatformRr2Trajectory = rr_seg7_trajectory_0702ECC0, - .PlatformRr3Trajectory = rr_seg7_trajectory_0702ED9C, - .PlatformRr4Trajectory = rr_seg7_trajectory_0702EEE0, - .PlatformCcmTrajectory = ccm_seg7_trajectory_0701669C, - .PlatformBitfsTrajectory = bitfs_seg7_trajectory_070159AC, - .PlatformHmcTrajectory = hmc_seg7_trajectory_0702B86C, - .PlatformLllTrajectory = lll_seg7_trajectory_0702856C, - .PlatformLll2Trajectory = lll_seg7_trajectory_07028660, + .KoopaBobTrajectory = (Trajectory*) bob_seg7_trajectory_koopa, + .KoopaThiTrajectory = (Trajectory*) thi_seg7_trajectory_koopa, + .UnagiTrajectory = (Trajectory*) jrb_seg7_trajectory_unagi_1, + .Unagi2Trajectory = (Trajectory*) jrb_seg7_trajectory_unagi_2, + .SnowmanHeadTrajectory = (Trajectory*) ccm_seg7_trajectory_snowman, + .RacingPenguinTrajectory = (Trajectory*) ccm_seg7_trajectory_penguin_race, + .BowlingBallBobTrajectory = (Trajectory*) bob_seg7_metal_ball_path0, + .BowlingBallBob2Trajectory = (Trajectory*) bob_seg7_metal_ball_path1, + .BowlingBallTtmTrajectory = (Trajectory*) ttm_seg7_trajectory_070170A0, + .MipsTrajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_0, + .Mips2Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_1, + .Mips3Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_2, + .Mips4Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_3, + .Mips5Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_4, + .Mips6Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_5, + .Mips7Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_6, + .Mips8Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_7, + .Mips9Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_8, + .Mips10Trajectory = (Trajectory*) inside_castle_seg7_trajectory_mips_9, + .PlatformRrTrajectory = (Trajectory*) rr_seg7_trajectory_0702EC3C, + .PlatformRr2Trajectory = (Trajectory*) rr_seg7_trajectory_0702ECC0, + .PlatformRr3Trajectory = (Trajectory*) rr_seg7_trajectory_0702ED9C, + .PlatformRr4Trajectory = (Trajectory*) rr_seg7_trajectory_0702EEE0, + .PlatformCcmTrajectory = (Trajectory*) ccm_seg7_trajectory_0701669C, + .PlatformBitfsTrajectory = (Trajectory*) bitfs_seg7_trajectory_070159AC, + .PlatformHmcTrajectory = (Trajectory*) hmc_seg7_trajectory_0702B86C, + .PlatformLllTrajectory = (Trajectory*) lll_seg7_trajectory_0702856C, + .PlatformLll2Trajectory = (Trajectory*) lll_seg7_trajectory_07028660, }, }; diff --git a/src/game/hardcoded.h b/src/game/hardcoded.h index 9ab86e71f..04430909b 100644 --- a/src/game/hardcoded.h +++ b/src/game/hardcoded.h @@ -47,37 +47,40 @@ extern struct LevelValues gLevelValues; /////////////// struct BehaviorTrajectories { - const Trajectory* KoopaBobTrajectory; - const Trajectory* KoopaThiTrajectory; - const Trajectory* UnagiTrajectory; - const Trajectory* Unagi2Trajectory; - const Trajectory* SnowmanHeadTrajectory; - const Trajectory* RacingPenguinTrajectory; - const Trajectory* BowlingBallBobTrajectory; - const Trajectory* BowlingBallBob2Trajectory; - const Trajectory* BowlingBallTtmTrajectory; - const Trajectory* MipsTrajectory; - const Trajectory* Mips2Trajectory; - const Trajectory* Mips3Trajectory; - const Trajectory* Mips4Trajectory; - const Trajectory* Mips5Trajectory; - const Trajectory* Mips6Trajectory; - const Trajectory* Mips7Trajectory; - const Trajectory* Mips8Trajectory; - const Trajectory* Mips9Trajectory; - const Trajectory* Mips10Trajectory; - const Trajectory* PlatformRrTrajectory; - const Trajectory* PlatformRr2Trajectory; - const Trajectory* PlatformRr3Trajectory; - const Trajectory* PlatformRr4Trajectory; - const Trajectory* PlatformCcmTrajectory; - const Trajectory* PlatformBitfsTrajectory; - const Trajectory* PlatformHmcTrajectory; - const Trajectory* PlatformLllTrajectory; - const Trajectory* PlatformLll2Trajectory; + Trajectory* KoopaBobTrajectory; + Trajectory* KoopaThiTrajectory; + Trajectory* UnagiTrajectory; + Trajectory* Unagi2Trajectory; + Trajectory* SnowmanHeadTrajectory; + Trajectory* RacingPenguinTrajectory; + Trajectory* BowlingBallBobTrajectory; + Trajectory* BowlingBallBob2Trajectory; + Trajectory* BowlingBallTtmTrajectory; + Trajectory* MipsTrajectory; + Trajectory* Mips2Trajectory; + Trajectory* Mips3Trajectory; + Trajectory* Mips4Trajectory; + Trajectory* Mips5Trajectory; + Trajectory* Mips6Trajectory; + Trajectory* Mips7Trajectory; + Trajectory* Mips8Trajectory; + Trajectory* Mips9Trajectory; + Trajectory* Mips10Trajectory; + Trajectory* PlatformRrTrajectory; + Trajectory* PlatformRr2Trajectory; + Trajectory* PlatformRr3Trajectory; + Trajectory* PlatformRr4Trajectory; + Trajectory* PlatformCcmTrajectory; + Trajectory* PlatformBitfsTrajectory; + Trajectory* PlatformHmcTrajectory; + Trajectory* PlatformLllTrajectory; + Trajectory* PlatformLll2Trajectory; }; struct BehaviorValues { + f32 KoopaBobAgility; + f32 KoopaThiAgility; + f32 KoopaCatchupAgility; struct BehaviorTrajectories trajectories; }; diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/pc/controller/controller_keyboard_debug.c index 2222b15a6..e89265603 100644 --- a/src/pc/controller/controller_keyboard_debug.c +++ b/src/pc/controller/controller_keyboard_debug.c @@ -46,7 +46,7 @@ static void debug_warp_level1() { } static void debug_warp_level2() { - dynos_warp_to_level(LEVEL_WDW, 1, 1); + dynos_warp_to_level(LEVEL_WDW, 2, 1); } static void debug_grand_star(void) { diff --git a/src/pc/lua/smlua_cobject.c b/src/pc/lua/smlua_cobject.c index 005e3bbd2..31ee76ba5 100644 --- a/src/pc/lua/smlua_cobject.c +++ b/src/pc/lua/smlua_cobject.c @@ -482,6 +482,7 @@ static int smlua__set_field(lua_State* L) { case LVT_BEHAVIORSCRIPT_P: case LVT_OBJECTANIMPOINTER_P: case LVT_COLLISION_P: + case LVT_TRAJECTORY_P: valuePointer = smlua_to_cpointer(L, 4, data->valueType); if (gSmLuaConvertSuccess) { *(u8**)p = valuePointer; diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index 2c0bc85e7..e602d2461 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -74,39 +74,42 @@ static struct LuaObjectField sAreaFields[LUA_AREA_FIELD_COUNT] = { #define LUA_BEHAVIOR_TRAJECTORIES_FIELD_COUNT 28 static struct LuaObjectField sBehaviorTrajectoriesFields[LUA_BEHAVIOR_TRAJECTORIES_FIELD_COUNT] = { - { "BowlingBallBob2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, BowlingBallBob2Trajectory), true, LOT_POINTER }, - { "BowlingBallBobTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, BowlingBallBobTrajectory), true, LOT_POINTER }, - { "BowlingBallTtmTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, BowlingBallTtmTrajectory), true, LOT_POINTER }, - { "KoopaBobTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, KoopaBobTrajectory), true, LOT_POINTER }, - { "KoopaThiTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, KoopaThiTrajectory), true, LOT_POINTER }, - { "Mips10Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips10Trajectory), true, LOT_POINTER }, - { "Mips2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips2Trajectory), true, LOT_POINTER }, - { "Mips3Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips3Trajectory), true, LOT_POINTER }, - { "Mips4Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips4Trajectory), true, LOT_POINTER }, - { "Mips5Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips5Trajectory), true, LOT_POINTER }, - { "Mips6Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips6Trajectory), true, LOT_POINTER }, - { "Mips7Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips7Trajectory), true, LOT_POINTER }, - { "Mips8Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips8Trajectory), true, LOT_POINTER }, - { "Mips9Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips9Trajectory), true, LOT_POINTER }, - { "MipsTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, MipsTrajectory), true, LOT_POINTER }, - { "PlatformBitfsTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformBitfsTrajectory), true, LOT_POINTER }, - { "PlatformCcmTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformCcmTrajectory), true, LOT_POINTER }, - { "PlatformHmcTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformHmcTrajectory), true, LOT_POINTER }, - { "PlatformLll2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformLll2Trajectory), true, LOT_POINTER }, - { "PlatformLllTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformLllTrajectory), true, LOT_POINTER }, - { "PlatformRr2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRr2Trajectory), true, LOT_POINTER }, - { "PlatformRr3Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRr3Trajectory), true, LOT_POINTER }, - { "PlatformRr4Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRr4Trajectory), true, LOT_POINTER }, - { "PlatformRrTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRrTrajectory), true, LOT_POINTER }, - { "RacingPenguinTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, RacingPenguinTrajectory), true, LOT_POINTER }, - { "SnowmanHeadTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, SnowmanHeadTrajectory), true, LOT_POINTER }, - { "Unagi2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Unagi2Trajectory), true, LOT_POINTER }, - { "UnagiTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, UnagiTrajectory), true, LOT_POINTER }, + { "BowlingBallBob2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, BowlingBallBob2Trajectory), false, LOT_POINTER }, + { "BowlingBallBobTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, BowlingBallBobTrajectory), false, LOT_POINTER }, + { "BowlingBallTtmTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, BowlingBallTtmTrajectory), false, LOT_POINTER }, + { "KoopaBobTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, KoopaBobTrajectory), false, LOT_POINTER }, + { "KoopaThiTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, KoopaThiTrajectory), false, LOT_POINTER }, + { "Mips10Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips10Trajectory), false, LOT_POINTER }, + { "Mips2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips2Trajectory), false, LOT_POINTER }, + { "Mips3Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips3Trajectory), false, LOT_POINTER }, + { "Mips4Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips4Trajectory), false, LOT_POINTER }, + { "Mips5Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips5Trajectory), false, LOT_POINTER }, + { "Mips6Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips6Trajectory), false, LOT_POINTER }, + { "Mips7Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips7Trajectory), false, LOT_POINTER }, + { "Mips8Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips8Trajectory), false, LOT_POINTER }, + { "Mips9Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Mips9Trajectory), false, LOT_POINTER }, + { "MipsTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, MipsTrajectory), false, LOT_POINTER }, + { "PlatformBitfsTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformBitfsTrajectory), false, LOT_POINTER }, + { "PlatformCcmTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformCcmTrajectory), false, LOT_POINTER }, + { "PlatformHmcTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformHmcTrajectory), false, LOT_POINTER }, + { "PlatformLll2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformLll2Trajectory), false, LOT_POINTER }, + { "PlatformLllTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformLllTrajectory), false, LOT_POINTER }, + { "PlatformRr2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRr2Trajectory), false, LOT_POINTER }, + { "PlatformRr3Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRr3Trajectory), false, LOT_POINTER }, + { "PlatformRr4Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRr4Trajectory), false, LOT_POINTER }, + { "PlatformRrTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, PlatformRrTrajectory), false, LOT_POINTER }, + { "RacingPenguinTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, RacingPenguinTrajectory), false, LOT_POINTER }, + { "SnowmanHeadTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, SnowmanHeadTrajectory), false, LOT_POINTER }, + { "Unagi2Trajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, Unagi2Trajectory), false, LOT_POINTER }, + { "UnagiTrajectory", LVT_TRAJECTORY_P, offsetof(struct BehaviorTrajectories, UnagiTrajectory), false, LOT_POINTER }, }; -#define LUA_BEHAVIOR_VALUES_FIELD_COUNT 1 +#define LUA_BEHAVIOR_VALUES_FIELD_COUNT 4 static struct LuaObjectField sBehaviorValuesFields[LUA_BEHAVIOR_VALUES_FIELD_COUNT] = { - { "trajectories", LVT_COBJECT, offsetof(struct BehaviorValues, trajectories), true, LOT_BEHAVIORTRAJECTORIES }, + { "KoopaBobAgility", LVT_F32, offsetof(struct BehaviorValues, KoopaBobAgility), false, LOT_NONE }, + { "KoopaCatchupAgility", LVT_F32, offsetof(struct BehaviorValues, KoopaCatchupAgility), false, LOT_NONE }, + { "KoopaThiAgility", LVT_F32, offsetof(struct BehaviorValues, KoopaThiAgility), false, LOT_NONE }, + { "trajectories", LVT_COBJECT, offsetof(struct BehaviorValues, trajectories), true, LOT_BEHAVIORTRAJECTORIES }, }; #define LUA_BULLY_COLLISION_DATA_FIELD_COUNT 6 diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 9da7ff5f0..4ad4033eb 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -14840,6 +14840,17 @@ int smlua_func_get_temp_object_hitbox(UNUSED lua_State* L) { return 1; } +int smlua_func_get_trajectory(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 1)) { return 0; } + + const char* name = smlua_to_string(L, 1); + if (!gSmLuaConvertSuccess) { return 0; } + + smlua_push_pointer(L, LVT_TRAJECTORY_P, (void*)get_trajectory(name)); + + return 1; +} + int smlua_func_obj_get_first(lua_State* L) { if(!smlua_functions_valid_param_count(L, 1)) { return 0; } @@ -16810,6 +16821,7 @@ void smlua_bind_functions_autogen(void) { // smlua_obj_utils.h smlua_bind_function(L, "get_temp_object_hitbox", smlua_func_get_temp_object_hitbox); + smlua_bind_function(L, "get_trajectory", smlua_func_get_trajectory); smlua_bind_function(L, "obj_get_first", smlua_func_obj_get_first); smlua_bind_function(L, "obj_get_first_with_behavior_id", smlua_func_obj_get_first_with_behavior_id); smlua_bind_function(L, "obj_get_first_with_behavior_id_and_field_f32", smlua_func_obj_get_first_with_behavior_id_and_field_f32); diff --git a/src/pc/lua/utils/smlua_obj_utils.c b/src/pc/lua/utils/smlua_obj_utils.c index 569022d7c..e79ea670e 100644 --- a/src/pc/lua/utils/smlua_obj_utils.c +++ b/src/pc/lua/utils/smlua_obj_utils.c @@ -97,6 +97,10 @@ void obj_set_model_extended(struct Object *o, enum ModelExtendedId modelId) { o->header.gfx.sharedChild = gLoadedGraphNodes[smlua_model_util_load(modelId)]; } +Trajectory* get_trajectory(const char* name) { + return dynos_level_get_trajectory(name); +} + // // Helpers to iterate through the object table // diff --git a/src/pc/lua/utils/smlua_obj_utils.h b/src/pc/lua/utils/smlua_obj_utils.h index 06eb18a08..d9c268d61 100644 --- a/src/pc/lua/utils/smlua_obj_utils.h +++ b/src/pc/lua/utils/smlua_obj_utils.h @@ -12,6 +12,8 @@ s32 obj_has_behavior_id(struct Object *o, enum BehaviorId behaviorId); s32 obj_has_model_extended(struct Object *o, enum ModelExtendedId modelId); void obj_set_model_extended(struct Object *o, enum ModelExtendedId modelId); +Trajectory* get_trajectory(const char* name); + // // Helpers to iterate through the object table //