Fixed gLevelValues initialization and missing limits (#188)

This commit is contained in:
PeachyPeach 2022-09-13 23:44:08 +02:00 committed by GitHub
parent f13f78b823
commit 538383235f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 12 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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;

View file

@ -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

View file

@ -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;
}
///