From 538383235f8098b6689c90788883d280b073ce55 Mon Sep 17 00:00:00 2001 From: PeachyPeach <72323920+PeachyPeachSM64@users.noreply.github.com> Date: Tue, 13 Sep 2022 23:44:08 +0200 Subject: [PATCH] Fixed gLevelValues initialization and missing limits (#188) --- src/game/behaviors/tree_particles.inc.c | 2 +- src/game/camera.c | 2 +- src/game/hardcoded.c | 10 ++++++---- src/game/object_helpers.c | 11 ++++++----- src/pc/lua/utils/smlua_misc_utils.c | 3 ++- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/game/behaviors/tree_particles.inc.c b/src/game/behaviors/tree_particles.inc.c index 534856408..a7422b28f 100644 --- a/src/game/behaviors/tree_particles.inc.c +++ b/src/game/behaviors/tree_particles.inc.c @@ -12,7 +12,7 @@ void bhv_tree_snow_or_leaf_loop(void) { } if (o->oPosY < o->oFloorHeight) obj_mark_for_deletion(o); - if (o->oFloorHeight < -11000.0f) + if (o->oFloorHeight < gLevelValues.floorLowerLimit) obj_mark_for_deletion(o); if (o->oTimer > 100) obj_mark_for_deletion(o); diff --git a/src/game/camera.c b/src/game/camera.c index ccbcb3b00..f96cdf55e 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -11770,7 +11770,7 @@ static u8 rom_hack_cam_can_see_mario(Vec3f desiredPos) { } f32 floorHeight = find_floor(desiredPos[0], desiredPos[1], desiredPos[2], &surf); - if (surf == NULL || floorHeight <= -11000) { + if (surf == NULL || floorHeight <= gLevelValues.floorLowerLimit) { return false; } diff --git a/src/game/hardcoded.c b/src/game/hardcoded.c index 3776efeef..0d73808d8 100644 --- a/src/game/hardcoded.c +++ b/src/game/hardcoded.c @@ -1,4 +1,5 @@ #include "hardcoded.h" +#include "engine/surface_collision.h" #include "levels/bbh/header.h" #include "levels/bitdw/header.h" @@ -88,10 +89,10 @@ struct LevelValues gDefaultLevelValues = { .UnagiStarPos = { 6833.0f, -3654.0f, 2230.0f }, .JetstreamRingStarPos = { 3400.0f, -3200.0f, -500.0f }, }, - .ceilHeightLimit = 20000, - .floorLowerLimit = -11000, - .floorLowerLimitMisc = -10000, - .floorLowerLimitShadow = -10000, + .ceilHeightLimit = CEIL_HEIGHT_LIMIT, + .floorLowerLimit = FLOOR_LOWER_LIMIT, + .floorLowerLimitMisc = FLOOR_LOWER_LIMIT_MISC, + .floorLowerLimitShadow = FLOOR_LOWER_LIMIT_SHADOW, }; struct LevelValues gLevelValues = { 0 }; @@ -251,6 +252,7 @@ struct BehaviorValues gBehaviorValues = { 0 }; // functions // /////////////// +__attribute__((constructor)) void hardcoded_reset_default_values(void) { gLevelValues = gDefaultLevelValues; gBehaviorValues = gDefaultBehaviorValues; diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 94bf3d770..cb82eebe0 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -12,6 +12,7 @@ #include "engine/math_util.h" #include "engine/surface_collision.h" #include "game_init.h" +#include "hardcoded.h" #include "helper_macros.h" #include "ingame_menu.h" #include "interaction.h" @@ -909,7 +910,7 @@ void cur_obj_unused_init_on_floor(void) { cur_obj_enable_rendering(); o->oPosY = find_floor_height(o->oPosX, o->oPosY, o->oPosZ); - if (o->oPosY < -10000.0f) { + if (o->oPosY < gLevelValues.floorLowerLimitMisc) { cur_obj_set_pos_relative_to_parent(0, 0, -70); o->oPosY = find_floor_height(o->oPosX, o->oPosY, o->oPosZ); } @@ -1259,7 +1260,7 @@ void cur_obj_move_after_thrown_or_dropped(f32 forwardVel, f32 velY) { if (o->oFloorHeight > o->oPosY) { o->oPosY = o->oFloorHeight; - } else if (o->oFloorHeight < -10000.0f) { + } else if (o->oFloorHeight < gLevelValues.floorLowerLimitMisc) { //! OoB failsafe obj_copy_pos(o, gMarioObject); o->oFloorHeight = find_floor_height(o->oPosX, o->oPosY, o->oPosZ); @@ -1424,7 +1425,7 @@ s32 cur_obj_move_xz(f32 steepSlopeNormalY, s32 careAboutEdgesAndSteepSlopes) { } } - if (intendedFloorHeight < -10000.0f) { + if (intendedFloorHeight < gLevelValues.floorLowerLimitMisc) { // Don't move into OoB o->oMoveFlags |= OBJ_MOVE_HIT_EDGE; return FALSE; @@ -1524,7 +1525,7 @@ f32 cur_obj_move_y_and_get_water_level(f32 gravity, f32 buoyancy) { o->oPosY += o->oVelY; if (o->activeFlags & ACTIVE_FLAG_UNK10) { - waterLevel = -11000.0f; + waterLevel = gLevelValues.floorLowerLimit; } else { waterLevel = find_water_level(o->oPosX, o->oPosZ); } @@ -1895,7 +1896,7 @@ s32 cur_obj_detect_steep_floor(s16 steepAngleDegrees) { intendedFloorHeight = find_floor(intendedX, o->oPosY, intendedZ, &intendedFloor); deltaFloorHeight = intendedFloorHeight - o->oFloorHeight; - if (intendedFloorHeight < -10000.0f) { + if (intendedFloorHeight < gLevelValues.floorLowerLimitMisc) { o->oWallAngle = o->oMoveAngleYaw + 0x8000; return 2; } else if (intendedFloor->normal.y < steepNormalY && deltaFloorHeight > 0 diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c index 99cc91606..4b7a68a15 100644 --- a/src/pc/lua/utils/smlua_misc_utils.c +++ b/src/pc/lua/utils/smlua_misc_utils.c @@ -4,6 +4,7 @@ #include "data/dynos.c.h" #include "game/bettercamera.h" #include "game/camera.h" +#include "game/hardcoded.h" #include "game/hud.h" #include "pc/lua/smlua.h" #include "smlua_misc_utils.h" @@ -333,7 +334,7 @@ f32 get_environment_region(u8 index) { if (gEnvironmentRegions != NULL && index <= gEnvironmentRegions[0]) { return gEnvironmentRegions[6 * (int)index]; } - return -11000; + return gLevelValues.floorLowerLimit; } ///