summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormzxrules <mzxrules@gmail.com>2026-08-31 12:46:13 -0400
committerGitHub <noreply@github.com>2026-08-31 18:46:13 +0200
commit176a0bc02ac59d5abb3cae9a676ca855c2501266 (patch)
treec14345053f371646e9bc2a6c8a1ece3e9b74bee2 /src
parent6bc695cc14265a9b9803ce00c96e22e668bd5395 (diff)
Document pass on WaterBox code (#2695)
* Document pass on WaterBox code * implement suggestions, missing comment --------- Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/code/z_actor.c4
-rw-r--r--src/code/z_bgcheck.c125
-rw-r--r--src/code/z_camera.c7
-rw-r--r--src/code/z_play.c4
-rw-r--r--src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c4
-rw-r--r--src/overlays/actors/ovl_En_Fr/z_en_fr.c2
-rw-r--r--src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c2
-rw-r--r--src/overlays/actors/ovl_En_Horse/z_en_horse.c6
-rw-r--r--src/overlays/actors/ovl_En_Okuta/z_en_okuta.c5
-rw-r--r--src/overlays/actors/ovl_En_Tite/z_en_tite.c8
-rw-r--r--src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c2
-rw-r--r--src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c2
-rw-r--r--src/overlays/actors/ovl_player_actor/z_player.c31
-rw-r--r--src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c2
-rw-r--r--src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c2
15 files changed, 117 insertions, 89 deletions
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 13cd13160..4fb43be5b 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -1489,8 +1489,8 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight,
sp64.y = actor->prevPos.y;
func_8002E2AC(play, actor, &sp64, flags);
waterBoxYSurface = actor->world.pos.y;
- if (WaterBox_GetSurface1(play, &play->colCtx, actor->world.pos.x, actor->world.pos.z, &waterBoxYSurface,
- &waterBox)) {
+ if (BgCheck_GetWaterSurfaceAllHack(play, &play->colCtx, actor->world.pos.x, actor->world.pos.z,
+ &waterBoxYSurface, &waterBox)) {
actor->depthInWater = waterBoxYSurface - actor->world.pos.y;
if (actor->depthInWater < 0.0f) {
actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 656bb04b5..0cd8ab9e2 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -4247,7 +4247,14 @@ u32 func_80042108(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
/**
* Zora's Domain WaterBox in King Zora's Room
*/
-WaterBox sZorasDomainWaterBox = { -348, 877, -1746, 553, 780, 0x2104 };
+WaterBox sZorasDomainWaterBox = {
+ -348, // xMin
+ 877, // ySurface
+ -1746, // zMin
+ 553, // xLength
+ 780, // zLength
+ WATERBOX_PROPERTIES(/* bgCamIndex */ 4, /* lightIndex */ 1, /* roomIndex */ 1, /* isDisabled */ false),
+};
/**
* WaterBox's effective bounding box
@@ -4260,31 +4267,38 @@ f32 sZorasDomainWaterBoxMaxY = 977.0f;
f32 sZorasDomainWaterBoxMaxZ = -967.0f;
/**
- * Public. Get the water surface at point (`x`, `ySurface`, `z`). `ySurface` doubles as position y input
- * returns true if point is within the xz boundaries of an active water box, else false
- * `ySurface` returns the water box's surface, while `outWaterBox` returns a pointer to the WaterBox
+ * Get the water surface at point (`x`, `y`, `z`). `y` doubles as `outWaterSurface` result
+ * returns true if point is within the xz boundaries of an active WaterBox, else false
+ * `y` returns the WaterBox's surface
+ * `outWaterBox` returns a pointer to the WaterBox
+ *
+ * This performs a special case check on a custom waterbox in Zora's Domain that has a finite depth
+ * Otherwise, the search performed assumes waterboxes do not overlap, and have infinite depth.
*/
-s32 WaterBox_GetSurface1(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface,
- WaterBox** outWaterBox) {
+s32 BgCheck_GetWaterSurfaceAllHack(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* y,
+ WaterBox** outWaterBox) {
if (play->sceneId == SCENE_ZORAS_DOMAIN) {
s32 pad;
- if (sZorasDomainWaterBoxMinX < x && x < sZorasDomainWaterBoxMaxX && sZorasDomainWaterBoxMinY < *ySurface &&
- *ySurface < sZorasDomainWaterBoxMaxY && sZorasDomainWaterBoxMinZ < z && z < sZorasDomainWaterBoxMaxZ) {
+ if (sZorasDomainWaterBoxMinX < x && x < sZorasDomainWaterBoxMaxX && sZorasDomainWaterBoxMinY < *y &&
+ *y < sZorasDomainWaterBoxMaxY && sZorasDomainWaterBoxMinZ < z && z < sZorasDomainWaterBoxMaxZ) {
*outWaterBox = &sZorasDomainWaterBox;
- *ySurface = sZorasDomainWaterBox.ySurface;
+ *y = sZorasDomainWaterBox.ySurface;
return true;
}
}
- return WaterBox_GetSurfaceImpl(play, colCtx, x, z, ySurface, outWaterBox);
+ return BgCheck_GetWaterSurface(play, colCtx, x, z, y, outWaterBox);
}
/**
- * Internal. Get the water surface at point (`x`, `ySurface`, `z`). `ySurface` doubles as position y input
- * returns true if point is within the xz boundaries of an active water box, else false
- * `ySurface` returns the water box's surface, while `outWaterBox` returns a pointer to the WaterBox
+ * Get the water surface at point (`x`, `z`).
+ * returns true if point is within the xz boundaries of an active WaterBox, else false
+ * `outWaterSurface` returns the WaterBox's surface
+ * `outWaterBox` returns a pointer to the WaterBox
+ *
+ * The search performed assumes waterboxes do not overlap, and have infinite depth.
*/
-s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface,
+s32 BgCheck_GetWaterSurface(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* outWaterSurface,
WaterBox** outWaterBox) {
CollisionHeader* colHeader = colCtx->colHeader;
s32 room;
@@ -4296,15 +4310,20 @@ s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f3
for (waterBox = colHeader->waterBoxes; waterBox < colHeader->waterBoxes + colHeader->numWaterBoxes; waterBox++) {
room = WATERBOX_ROOM(waterBox->properties);
- if (room == play->roomCtx.curRoom.num || room == WATERBOX_ROOM_ALL) {
- if (!(waterBox->properties & WATERBOX_FLAG_19)) {
- if (waterBox->xMin < x && x < waterBox->xMin + waterBox->xLength) {
- if (waterBox->zMin < z && z < waterBox->zMin + waterBox->zLength) {
- *outWaterBox = waterBox;
- *ySurface = waterBox->ySurface;
- return true;
- }
- }
+ if (room != play->roomCtx.curRoom.num && room != WATERBOX_ROOM_ALL) {
+ continue;
+ }
+ if (waterBox->properties & WATERBOX_IS_DISABLED) {
+ continue;
+ }
+ //! @bug: WaterBox bounds check issue. This range check excludes all points falling exactly on the border of the
+ //! WaterBox. Thus, when two waterboxes are flush against each other, a seam will exist between them where no
+ //! water is detected.
+ if (waterBox->xMin < x && x < waterBox->xMin + waterBox->xLength) {
+ if (waterBox->zMin < z && z < waterBox->zMin + waterBox->zLength) {
+ *outWaterBox = waterBox;
+ *outWaterSurface = waterBox->ySurface;
+ return true;
}
}
}
@@ -4312,12 +4331,12 @@ s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f3
}
/**
- * Gets the first active WaterBox at `pos` with WATERBOX_FLAG_19 not set
+ * Gets the first active WaterBox at `pos`, within +- `surfaceChkDist`
* `surfaceChkDist` is the absolute y distance from the water surface to check
* returns the index of the waterbox found, or -1 if no waterbox is found
* `outWaterBox` returns the pointer to the waterbox found, or NULL if none is found
*/
-s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceChkDist,
+s32 BgCheck_FindWaterBox(PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceChkDist,
WaterBox** outWaterBox) {
CollisionHeader* colHeader = colCtx->colHeader;
s32 room;
@@ -4334,16 +4353,18 @@ s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos,
waterBox = &colHeader->waterBoxes[i];
room = WATERBOX_ROOM(waterBox->properties);
- if (room == play->roomCtx.curRoom.num || room == WATERBOX_ROOM_ALL) {
- if (!(waterBox->properties & WATERBOX_FLAG_19)) {
- if (waterBox->xMin < pos->x && pos->x < waterBox->xMin + waterBox->xLength) {
- if (waterBox->zMin < pos->z && pos->z < waterBox->zMin + waterBox->zLength) {
- if (pos->y - surfaceChkDist < waterBox->ySurface &&
- waterBox->ySurface < pos->y + surfaceChkDist) {
- *outWaterBox = waterBox;
- return i;
- }
- }
+ if (room != play->roomCtx.curRoom.num && room != WATERBOX_ROOM_ALL) {
+ continue;
+ }
+ if (waterBox->properties & WATERBOX_IS_DISABLED) {
+ continue;
+ }
+ //! @bug: WaterBox bounds check issue. See BgCheck_GetWaterSurface for more details.
+ if ((waterBox->xMin < pos->x) && (pos->x < waterBox->xMin + waterBox->xLength)) {
+ if ((waterBox->zMin < pos->z) && (pos->z < waterBox->zMin + waterBox->zLength)) {
+ if (pos->y - surfaceChkDist < waterBox->ySurface && waterBox->ySurface < pos->y + surfaceChkDist) {
+ *outWaterBox = waterBox;
+ return i;
}
}
}
@@ -4386,12 +4407,15 @@ u32 WaterBox_GetLightIndex(CollisionContext* colCtx, WaterBox* waterBox) {
}
/**
- * Get the water surface at point (`x`, `ySurface`, `z`). `ySurface` doubles as position y input
- * same as WaterBox_GetSurfaceImpl, but tests if WATERBOX_FLAG_19 is set
- * returns true if point is within the xz boundaries of an active water box, else false
- * `ySurface` returns the water box's surface, while `outWaterBox` returns a pointer to the WaterBox
+ * Unused. Gets the water surface? at point (`x`, `z`) for disabled? waterboxes only.
+ * returns true if point is within the xz boundaries of a disabled? WaterBox, else false
+ * `outWaterSurface` returns the WaterBox's surface
+ * `outWaterBox` returns a pointer to the WaterBox
+ *
+ * The search performed assumes waterboxes do not overlap.
*/
-s32 func_800425B0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox) {
+s32 func_800425B0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* outWaterSurface,
+ WaterBox** outWaterBox) {
CollisionHeader* colHeader = colCtx->colHeader;
s32 room;
WaterBox* waterBox;
@@ -4402,15 +4426,18 @@ s32 func_800425B0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32*
for (waterBox = colHeader->waterBoxes; waterBox < colHeader->waterBoxes + colHeader->numWaterBoxes; waterBox++) {
room = WATERBOX_ROOM(waterBox->properties);
- if ((room == play->roomCtx.curRoom.num) || (room == WATERBOX_ROOM_ALL)) {
- if (waterBox->properties & WATERBOX_FLAG_19) {
- if (waterBox->xMin < x && x < (waterBox->xMin + waterBox->xLength)) {
- if (waterBox->zMin < z && z < (waterBox->zMin + waterBox->zLength)) {
- *outWaterBox = waterBox;
- *ySurface = waterBox->ySurface;
- return true;
- }
- }
+ if ((room != play->roomCtx.curRoom.num) && (room != WATERBOX_ROOM_ALL)) {
+ continue;
+ }
+ if (!(waterBox->properties & WATERBOX_IS_DISABLED)) {
+ continue;
+ }
+ //! @bug: WaterBox bounds check issue. See BgCheck_GetWaterSurface for more details.
+ if (waterBox->xMin < x && x < (waterBox->xMin + waterBox->xLength)) {
+ if (waterBox->zMin < z && z < (waterBox->zMin + waterBox->zLength)) {
+ *outWaterBox = waterBox;
+ *outWaterSurface = waterBox->ySurface;
+ return true;
}
}
}
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index b94c5beda..fb8b1ccf1 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -685,8 +685,8 @@ s32 Camera_GetWaterBoxBgCamIndex(Camera* camera, f32* waterY) {
playerPosRot = Actor_GetWorldPosShapeRot(&camera->player->actor);
*waterY = playerPosRot.pos.y;
- if (!WaterBox_GetSurface1(camera->play, &camera->play->colCtx, playerPosRot.pos.x, playerPosRot.pos.z, waterY,
- &waterBox)) {
+ if (!BgCheck_GetWaterSurfaceAllHack(camera->play, &camera->play->colCtx, playerPosRot.pos.x, playerPosRot.pos.z,
+ waterY, &waterBox)) {
// player's position is not within the x/z boundaries of a water box.
*waterY = BGCHECK_Y_MIN;
return -1;
@@ -722,7 +722,8 @@ f32 Camera_GetWaterSurface(Camera* camera, Vec3f* chkPos, s32* lightIndex) {
playerPosRot = Actor_GetWorldPosShapeRot(&camera->player->actor);
waterY = playerPosRot.pos.y;
- if (!WaterBox_GetSurface1(camera->play, &camera->play->colCtx, chkPos->x, chkPos->z, &waterY, &waterBox)) {
+ if (!BgCheck_GetWaterSurfaceAllHack(camera->play, &camera->play->colCtx, chkPos->x, chkPos->z, &waterY,
+ &waterBox)) {
// chkPos is not within the x/z boundaries of a water box.
return BGCHECK_Y_MIN;
}
diff --git a/src/code/z_play.c b/src/code/z_play.c
index ad0023e2d..acacb7174 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1974,8 +1974,8 @@ s32 func_800C0DB4(PlayState* this, Vec3f* pos) {
waterSurfacePos = *pos;
- if (WaterBox_GetSurface1(this, &this->colCtx, waterSurfacePos.x, waterSurfacePos.z, &waterSurfacePos.y,
- &waterBox) == true &&
+ if (BgCheck_GetWaterSurfaceAllHack(this, &this->colCtx, waterSurfacePos.x, waterSurfacePos.z, &waterSurfacePos.y,
+ &waterBox) == true &&
pos->y < waterSurfacePos.y &&
BgCheck_EntityRaycastDown3(&this->colCtx, &poly, &bgId, &waterSurfacePos) != BGCHECK_Y_MIN) {
return true;
diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
index c2ab0160d..1bb6a4f1d 100644
--- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
+++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
@@ -465,8 +465,8 @@ void EnBomChu_Update(Actor* thisx, PlayState* play2) {
waterY = this->actor.world.pos.y;
- if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterY,
- &waterBox)) {
+ if (BgCheck_GetWaterSurfaceAllHack(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
+ &waterY, &waterBox)) {
this->actor.depthInWater = waterY - this->actor.world.pos.y;
if (this->actor.depthInWater < 0.0f) {
diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
index 17889ad56..b413f3907 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -360,7 +360,7 @@ void EnFr_IsDivingIntoWater(EnFr* this, PlayState* play) {
WaterBox* waterBox;
f32 waterSurface;
- if (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface,
+ if (BgCheck_GetWaterSurface(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface,
&waterBox)) {
this->isBelowWaterSurfacePrevious = this->isBelowWaterSurfaceCurrent;
this->isBelowWaterSurfaceCurrent = this->actor.world.pos.y <= waterSurface ? true : false;
diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
index f00a7b6de..0a571f115 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -436,7 +436,7 @@ s32 EnGoroiwa_MoveDownToNextWaypoint(EnGoroiwa* this, PlayState* play) {
this->actor.world.pos.y = nextPointY - ((this->actor.world.pos.y - nextPointY) * 0.3f);
}
if (this->bounceCount == 0 &&
- WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface,
+ BgCheck_GetWaterSurface(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface,
&waterBox) &&
this->actor.world.pos.y <= ySurface) {
this->stateFlags |= ENGOROIWA_IN_WATER;
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
index e2c9cb2c1..c817c5cb9 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -2861,7 +2861,7 @@ s32 EnHorse_CalcFloorHeight(EnHorse* this, PlayState* play, Vec3f* pos, Collisio
return 1; // No floor
}
- if (WaterBox_GetSurfaceImpl(play, &play->colCtx, pos->x, pos->z, &waterY, &waterBox) == 1 &&
+ if (BgCheck_GetWaterSurface(play, &play->colCtx, pos->x, pos->z, &waterY, &waterBox) == true &&
*floorHeight < waterY) {
return 2; // Water
}
@@ -2930,8 +2930,8 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
WaterBox* waterBox;
s32 pad;
- if (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterHeight,
- &waterBox) == 1 &&
+ if (BgCheck_GetWaterSurface(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterHeight,
+ &waterBox) == true &&
this->actor.floorHeight < waterHeight) {
EnHorse_ObstructMovement(this, play, 1, galloping);
return;
diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
index 938e7ebda..2284d9eab 100644
--- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
+++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
@@ -148,8 +148,7 @@ void EnOkuta_Init(Actor* thisx, PlayState* play) {
}
thisx->floorHeight =
BgCheck_EntityRaycastDown4(&play->colCtx, &thisx->floorPoly, &floorBgId, thisx, &thisx->world.pos);
- //! @bug calls WaterBox_GetSurfaceImpl directly
- if (!WaterBox_GetSurfaceImpl(play, &play->colCtx, thisx->world.pos.x, thisx->world.pos.z, &ySurface,
+ if (!BgCheck_GetWaterSurface(play, &play->colCtx, thisx->world.pos.x, thisx->world.pos.z, &ySurface,
&outWaterBox) ||
(ySurface <= thisx->floorHeight)) {
Actor_Kill(thisx);
@@ -596,7 +595,7 @@ void EnOkuta_Update(Actor* thisx, PlayState* play2) {
if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
if (this->actor.params == 0) {
EnOkuta_ColliderCheck(this, play);
- if (!WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
+ if (!BgCheck_GetWaterSurface(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
&ySurface, &outWaterBox) ||
(ySurface < this->actor.floorHeight)) {
if (this->actor.colChkInfo.health != 0) {
diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
index b61f66d3a..1085a9051 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
@@ -927,28 +927,28 @@ void EnTite_Update(Actor* thisx, PlayState* play) {
if ((this->actor.params == TEKTITE_BLUE) && (thisx->bgCheckFlags & BGCHECKFLAG_WATER)) {
floorPoly = thisx->floorPoly;
if ((((play->gameplayFrames % 8) == 0) || (thisx->velocity.y < 0.0f)) &&
- (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->backRightFootPos.x, this->backRightFootPos.z,
+ (BgCheck_GetWaterSurface(play, &play->colCtx, this->backRightFootPos.x, this->backRightFootPos.z,
&waterSurfaceY, &waterBox)) &&
(this->backRightFootPos.y <= waterSurfaceY)) {
this->backRightFootPos.y = waterSurfaceY;
EffectSsGRipple_Spawn(play, &this->backRightFootPos, 0, 220, 0);
}
if (((((play->gameplayFrames + 2) % 8) == 0) || (thisx->velocity.y < 0.0f)) &&
- (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->backLeftFootPos.x, this->backLeftFootPos.z,
+ (BgCheck_GetWaterSurface(play, &play->colCtx, this->backLeftFootPos.x, this->backLeftFootPos.z,
&waterSurfaceY, &waterBox)) &&
(this->backLeftFootPos.y <= waterSurfaceY)) {
this->backLeftFootPos.y = waterSurfaceY;
EffectSsGRipple_Spawn(play, &this->backLeftFootPos, 0, 220, 0);
}
if (((((play->gameplayFrames + 4) % 8) == 0) || (thisx->velocity.y < 0.0f)) &&
- (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->frontLeftFootPos.x, this->frontLeftFootPos.z,
+ (BgCheck_GetWaterSurface(play, &play->colCtx, this->frontLeftFootPos.x, this->frontLeftFootPos.z,
&waterSurfaceY, &waterBox)) &&
(this->frontLeftFootPos.y <= waterSurfaceY)) {
this->frontLeftFootPos.y = waterSurfaceY;
EffectSsGRipple_Spawn(play, &this->frontLeftFootPos, 0, 220, 0);
}
if (((((play->gameplayFrames + 1) % 8) == 0) || (thisx->velocity.y < 0.0f)) &&
- (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->frontRightFootPos.x, this->frontRightFootPos.z,
+ (BgCheck_GetWaterSurface(play, &play->colCtx, this->frontRightFootPos.x, this->frontRightFootPos.z,
&waterSurfaceY, &waterBox)) &&
(this->frontRightFootPos.y <= waterSurfaceY)) {
this->frontRightFootPos.y = waterSurfaceY;
diff --git a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c
index f7a2bfdc2..bc480f659 100644
--- a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c
+++ b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c
@@ -232,7 +232,7 @@ void EnWeiyer_InitInsideWaterBox(EnWeiyer* this, PlayState* play) {
this->actor.floorHeight =
BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
- if (!WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
+ if (!BgCheck_GetWaterSurface(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
&this->actor.home.pos.y, &waterBox) ||
((this->actor.home.pos.y - 5.0f) <= this->actor.floorHeight)) {
Actor_Kill(&this->actor);
diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
index 4f1c201cd..2134534e3 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -152,7 +152,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
if (torchCount == 10) {
torchCount = 24;
}
- if (WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface,
+ if (BgCheck_GetWaterSurface(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface,
&dummy) &&
((waterSurface - this->actor.world.pos.y) > 52.0f)) {
this->litTimer = 0;
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 812a502f6..9ba6899e1 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -5823,10 +5823,10 @@ void func_8083AA10(Player* this, PlayState* play) {
s32 sp5C;
CollisionPoly* sp58;
s32 sp54;
- WaterBox* sp50;
+ WaterBox* waterBox;
Vec3f sp44;
f32 sp40;
- f32 sp3C;
+ f32 waterSurfaceY;
this->fallDistance = this->fallStartHeight - (s32)this->actor.world.pos.y;
@@ -5871,10 +5871,11 @@ void func_8083AA10(Player* this, PlayState* play) {
!(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) {
sp40 = func_808396F4(play, this, &D_8085451C, &sp44, &sp58, &sp54);
- sp3C = this->actor.world.pos.y;
+ waterSurfaceY = this->actor.world.pos.y;
- if (WaterBox_GetSurface1(play, &play->colCtx, sp44.x, sp44.z, &sp3C, &sp50) &&
- ((sp3C - sp40) > 50.0f)) {
+ if (BgCheck_GetWaterSurfaceAllHack(play, &play->colCtx, sp44.x, sp44.z, &waterSurfaceY,
+ &waterBox) &&
+ ((waterSurfaceY - sp40) > 50.0f)) {
func_808389E8(this, &gPlayerAnim_link_normal_run_jump_water_fall, 6.0f, play);
Player_SetupAction(play, this, Player_Action_80844A44, 0);
return;
@@ -6681,12 +6682,12 @@ void func_8083C8DC(Player* this, PlayState* play, s16 arg2) {
}
s32 Player_SetStartingMovement(PlayState* play, Player* this, f32 arg2) {
- WaterBox* sp2C;
+ WaterBox* waterBox;
f32 sp28;
sp28 = this->actor.world.pos.y;
- if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp28, &sp2C) !=
- 0) {
+ if (BgCheck_GetWaterSurfaceAllHack(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp28,
+ &waterBox)) {
sp28 -= this->actor.world.pos.y;
if (this->ageProperties->unk_24 <= sp28) {
Player_SetupAction(play, this, Player_Action_8084D7C4, 0);
@@ -6817,24 +6818,24 @@ void func_8083CF5C(Player* this, PlayState* play) {
s32 func_8083CFA8(PlayState* play, Player* this, f32 arg2, s32 splashScale) {
f32 sp3C = fabsf(arg2);
- WaterBox* sp38;
- f32 sp34;
+ WaterBox* waterBox;
+ f32 waterSurfaceY;
Vec3f splashPos;
s32 splashType;
if (sp3C > 2.0f) {
splashPos.x = this->bodyPartsPos[PLAYER_BODYPART_WAIST].x;
splashPos.z = this->bodyPartsPos[PLAYER_BODYPART_WAIST].z;
- sp34 = this->actor.world.pos.y;
- if (WaterBox_GetSurface1(play, &play->colCtx, splashPos.x, splashPos.z, &sp34, &sp38)) {
+ waterSurfaceY = this->actor.world.pos.y;
+ if (BgCheck_GetWaterSurfaceAllHack(play, &play->colCtx, splashPos.x, splashPos.z, &waterSurfaceY, &waterBox)) {
#if OOT_VERSION < PAL_1_0
- if ((sp34 - this->actor.world.pos.y) < 80.0f)
+ if ((waterSurfaceY - this->actor.world.pos.y) < 80.0f)
#else
- if ((sp34 - this->actor.world.pos.y) < 100.0f)
+ if ((waterSurfaceY - this->actor.world.pos.y) < 100.0f)
#endif
{
splashType = (sp3C <= 10.0f) ? 0 : 1;
- splashPos.y = sp34;
+ splashPos.y = waterSurfaceY;
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, splashType, splashScale);
return 1;
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
index bf25e04fe..26d05493b 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
@@ -71,7 +71,7 @@ void EffectSsBubble_Update(PlayState* play, u32 index, EffectSs* this) {
f32 waterSurfaceY = this->pos.y;
// kill bubble if it's out of range of a water box
- if (!WaterBox_GetSurface1(play, &play->colCtx, this->pos.x, this->pos.z, &waterSurfaceY, &waterBox)) {
+ if (!BgCheck_GetWaterSurfaceAllHack(play, &play->colCtx, this->pos.x, this->pos.z, &waterSurfaceY, &waterBox)) {
this->life = -1;
return;
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
index 8822faadb..049b95fed 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
@@ -63,7 +63,7 @@ u32 EffectSsGRipple_Init(PlayState* play, u32 index, EffectSs* this, void* initP
this->rEnvColorG = 255;
this->rEnvColorB = 255;
this->rEnvColorA = 255;
- this->rWaterBoxNum = WaterBox_GetSurface2(play, &play->colCtx, &initParams->pos, 3.0f, &waterBox);
+ this->rWaterBoxNum = BgCheck_FindWaterBox(play, &play->colCtx, &initParams->pos, 3.0f, &waterBox);
return 1;
}