mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-19 03:32:41 +00:00
Make Mario steps use his hitbox height
This commit is contained in:
parent
38be365dd3
commit
946edb0901
1 changed files with 8 additions and 8 deletions
|
@ -146,7 +146,7 @@ u32 mario_update_quicksand(struct MarioState *m, f32 sinkingSpeed) {
|
||||||
|
|
||||||
case SURFACE_DEEP_QUICKSAND:
|
case SURFACE_DEEP_QUICKSAND:
|
||||||
case SURFACE_DEEP_MOVING_QUICKSAND:
|
case SURFACE_DEEP_MOVING_QUICKSAND:
|
||||||
if ((m->quicksandDepth += sinkingSpeed) >= 160.0f) {
|
if ((m->quicksandDepth += sinkingSpeed) >= m->marioObj->hitboxHeight) {
|
||||||
update_mario_sound_and_camera(m);
|
update_mario_sound_and_camera(m);
|
||||||
return drop_and_set_mario_action(m, ACT_QUICKSAND_DEATH, 0);
|
return drop_and_set_mario_action(m, ACT_QUICKSAND_DEATH, 0);
|
||||||
}
|
}
|
||||||
|
@ -311,7 +311,7 @@ static s32 perform_ground_quarter_step(struct MarioState *m, Vec3f nextPos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextPos[1] > floorHeight + 100.0f) {
|
if (nextPos[1] > floorHeight + 100.0f) {
|
||||||
if (nextPos[1] + 160.0f >= ceilHeight) {
|
if (nextPos[1] + m->marioObj->hitboxHeight >= ceilHeight) {
|
||||||
return GROUND_STEP_HIT_WALL_STOP_QSTEPS;
|
return GROUND_STEP_HIT_WALL_STOP_QSTEPS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ static s32 perform_ground_quarter_step(struct MarioState *m, Vec3f nextPos) {
|
||||||
return GROUND_STEP_LEFT_GROUND;
|
return GROUND_STEP_LEFT_GROUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (floorHeight + 160.0f >= ceilHeight) {
|
if (floorHeight + m->marioObj->hitboxHeight >= ceilHeight) {
|
||||||
return GROUND_STEP_HIT_WALL_STOP_QSTEPS;
|
return GROUND_STEP_HIT_WALL_STOP_QSTEPS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,11 +417,11 @@ u32 check_ledge_grab(struct MarioState *m, struct Surface *wall, Vec3f intendedP
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Since the search for floors starts at y + 160, we will sometimes grab
|
//! Since the search for floors starts at y + m->marioObj->hitboxHeight (160.0f), we will sometimes grab
|
||||||
// a higher ledge than expected (glitchy ledge grab)
|
// a higher ledge than expected (glitchy ledge grab)
|
||||||
ledgePos[0] = nextPos[0] - wall->normal.x * 60.0f;
|
ledgePos[0] = nextPos[0] - wall->normal.x * 60.0f;
|
||||||
ledgePos[2] = nextPos[2] - wall->normal.z * 60.0f;
|
ledgePos[2] = nextPos[2] - wall->normal.z * 60.0f;
|
||||||
ledgePos[1] = find_floor(ledgePos[0], nextPos[1] + 160.0f, ledgePos[2], &ledgeFloor);
|
ledgePos[1] = find_floor(ledgePos[0], nextPos[1] + m->marioObj->hitboxHeight, ledgePos[2], &ledgeFloor);
|
||||||
|
|
||||||
if (!ledgeFloor) { return FALSE; }
|
if (!ledgeFloor) { return FALSE; }
|
||||||
|
|
||||||
|
@ -497,21 +497,21 @@ s32 perform_air_quarter_step(struct MarioState *m, Vec3f intendedPos, u32 stepAr
|
||||||
|
|
||||||
//! This check uses f32, but findFloor uses short (overflow jumps)
|
//! This check uses f32, but findFloor uses short (overflow jumps)
|
||||||
if (nextPos[1] <= floorHeight) {
|
if (nextPos[1] <= floorHeight) {
|
||||||
if (ceilHeight - floorHeight > 160.0f) {
|
if (ceilHeight - floorHeight > m->marioObj->hitboxHeight) {
|
||||||
m->pos[0] = nextPos[0];
|
m->pos[0] = nextPos[0];
|
||||||
m->pos[2] = nextPos[2];
|
m->pos[2] = nextPos[2];
|
||||||
m->floor = floor;
|
m->floor = floor;
|
||||||
m->floorHeight = floorHeight;
|
m->floorHeight = floorHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! When ceilHeight - floorHeight <= 160, the step result says that
|
//! When ceilHeight - floorHeight <= m->marioObj->hitboxHeight (160.0f), the step result says that
|
||||||
// Mario landed, but his movement is cancelled and his referenced floor
|
// Mario landed, but his movement is cancelled and his referenced floor
|
||||||
// isn't updated (pedro spots)
|
// isn't updated (pedro spots)
|
||||||
m->pos[1] = floorHeight;
|
m->pos[1] = floorHeight;
|
||||||
return AIR_STEP_LANDED;
|
return AIR_STEP_LANDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextPos[1] + 160.0f > ceilHeight) {
|
if (nextPos[1] + m->marioObj->hitboxHeight > ceilHeight) {
|
||||||
if (m->vel[1] >= 0.0f) {
|
if (m->vel[1] >= 0.0f) {
|
||||||
m->vel[1] = 0.0f;
|
m->vel[1] = 0.0f;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue