1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-17 04:20:44 +00:00

Fix RaycastFloor flags (#1328)

* fix raycast floor flags

* format.sh

* Name flags

* Rename RaycastFloor functions, clean up caller code, document z_bg_spot15_rrbox

* change comment to prevent format wrap

* change to "if BGCHECK_GROUND_CHECK_ON is set"

* roman suggestions
This commit is contained in:
mzxrules 2022-08-30 11:49:51 -04:00 committed by GitHub
parent fe8d5988b9
commit 327a813b37
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
42 changed files with 497 additions and 451 deletions

View file

@ -349,10 +349,9 @@ void func_808805C0(BgHakaTrap* this, PlayState* play) {
void func_808806BC(BgHakaTrap* this, PlayState* play) {
Vec3f vector;
f32 tempf20;
f32 temp;
f32 floorHeight;
f32 yIntersect;
s32 i;
s32 sp64;
this->dyna.actor.velocity.y *= 1.6f;
@ -364,20 +363,22 @@ void func_808806BC(BgHakaTrap* this, PlayState* play) {
vector.y = (this->dyna.actor.world.pos.y + 1.0f) + 25.0f;
vector.z = this->dyna.actor.world.pos.z;
tempf20 = this->dyna.actor.floorHeight;
floorHeight = this->dyna.actor.floorHeight;
for (i = 0; i < 3; i++) {
temp =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->dyna.actor.floorPoly, &sp64, &this->dyna.actor, &vector) -
s32 bgId;
yIntersect =
BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId, &this->dyna.actor, &vector) -
25.0f;
if (tempf20 < temp) {
tempf20 = temp;
if (floorHeight < yIntersect) {
floorHeight = yIntersect;
}
vector.x -= 90.0f;
}
if (Math_StepToF(&this->dyna.actor.world.pos.y, tempf20, this->dyna.actor.velocity.y)) {
if (Math_StepToF(&this->dyna.actor.world.pos.y, floorHeight, this->dyna.actor.velocity.y)) {
if (this->dyna.actor.velocity.y > 0.01f) {
Audio_PlayActorSfx2(&this->dyna.actor, NA_SE_EV_TRAP_BOUND);
}

View file

@ -378,18 +378,18 @@ void BgHeavyBlock_LiftedUp(BgHeavyBlock* this, PlayState* play) {
void BgHeavyBlock_Fly(BgHeavyBlock* this, PlayState* play) {
s32 bgId;
s32 quakeIndex;
Vec3f pos;
f32 raycastResult;
Vec3f checkPos;
f32 yIntersect;
Actor_MoveForward(&this->dyna.actor);
pos.x = this->dyna.actor.home.pos.x;
pos.y = this->dyna.actor.home.pos.y + 1000.0f;
pos.z = this->dyna.actor.home.pos.z;
raycastResult =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId, &this->dyna.actor, &pos);
this->dyna.actor.floorHeight = raycastResult;
checkPos.x = this->dyna.actor.home.pos.x;
checkPos.y = this->dyna.actor.home.pos.y + 1000.0f;
checkPos.z = this->dyna.actor.home.pos.z;
yIntersect =
BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId, &this->dyna.actor, &checkPos);
this->dyna.actor.floorHeight = yIntersect;
if (this->dyna.actor.home.pos.y <= raycastResult) {
if (this->dyna.actor.home.pos.y <= yIntersect) {
func_800AA000(0.0f, 0xFF, 0x3C, 4);
switch (this->dyna.actor.params & 0xFF) {

View file

@ -198,16 +198,16 @@ void BgJyaGoroiwa_Update(Actor* thisx, PlayState* play) {
BgJyaGoroiwa* this = (BgJyaGoroiwa*)thisx;
Player* player = GET_PLAYER(play);
s32 bgId;
Vec3f pos;
Vec3f checkPos;
if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_7 | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
this->actionFunc(this, play);
BgJyaGoroiwa_UpdateRotation(this);
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 59.5f;
pos.z = this->actor.world.pos.z;
checkPos.x = this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 59.5f;
checkPos.z = this->actor.world.pos.z;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &pos);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &checkPos);
BgJyaGoroiwa_UpdateCollider(this);
if (this->collider.base.atFlags & AT_ON) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);

View file

@ -182,8 +182,8 @@ void BgPoEvent_InitBlocks(BgPoEvent* this, PlayState* play) {
}
}
this->dyna.actor.world.pos.y = 833.0f;
this->dyna.actor.floorHeight = BgCheck_EntityRaycastFloor4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId,
&this->dyna.actor, &this->dyna.actor.world.pos);
this->dyna.actor.floorHeight = BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId,
&this->dyna.actor, &this->dyna.actor.world.pos);
this->actionFunc = BgPoEvent_BlockWait;
}

View file

@ -49,7 +49,8 @@ static Vec3f D_808B45C4[] = {
{ 770.0f, 1550.0f, -299.0f },
};
static Vec3f D_808B45DC[] = {
// list of ground check positions, relative to 1/10th model space
static Vec3f sBoxGroundCheckPoints[] = {
{ 29.99f, 0.01f, -29.99f }, { -29.99f, 0.01f, -29.99f }, { -29.99f, 0.01f, 29.99f },
{ 29.99f, 0.01f, 29.99f }, { 0.0f, 0.01f, 0.0f },
};
@ -70,10 +71,10 @@ void func_808B3960(BgSpot15Rrbox* this, PlayState* play, CollisionHeader* collis
}
}
void func_808B39E8(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3) {
arg0->x = (arg1->z * arg2) + (arg1->x * arg3);
arg0->y = arg1->y;
arg0->z = (arg1->z * arg3) - (arg1->x * arg2);
void BgSpot15Rrbox_RotatePoint(Vec3f* outPos, Vec3f* pos, f32 arg2, f32 arg3) {
outPos->x = (pos->z * arg2) + (pos->x * arg3);
outPos->y = pos->y;
outPos->z = (pos->z * arg3) - (pos->x * arg2);
}
void func_808B3A34(BgSpot15Rrbox* this) {
@ -140,25 +141,25 @@ void BgSpot15Rrbox_Destroy(Actor* thisx, PlayState* play) {
D_808B4590 = 0;
}
s32 func_808B3CA0(BgSpot15Rrbox* this, PlayState* play, s32 arg2) {
s32 BgSpot15Rrbox_TrySnapToCheckedPoint(BgSpot15Rrbox* this, PlayState* play, s32 checkIndex) {
f32 chkDist = 0.0f;
Vec3f actorPosition;
Vec3f actorScale;
Vec3f checkPos;
Vec3f relCheckPos;
func_808B3A34(this);
actorScale.x = D_808B45DC[arg2].x * (this->dyna.actor.scale.x * 10.0f);
actorScale.y = D_808B45DC[arg2].y * (this->dyna.actor.scale.y * 10.0f);
actorScale.z = D_808B45DC[arg2].z * (this->dyna.actor.scale.z * 10.0f);
relCheckPos.x = sBoxGroundCheckPoints[checkIndex].x * (this->dyna.actor.scale.x * 10.0f);
relCheckPos.y = sBoxGroundCheckPoints[checkIndex].y * (this->dyna.actor.scale.y * 10.0f);
relCheckPos.z = sBoxGroundCheckPoints[checkIndex].z * (this->dyna.actor.scale.z * 10.0f);
func_808B39E8(&actorPosition, &actorScale, this->unk_16C, this->unk_170);
BgSpot15Rrbox_RotatePoint(&checkPos, &relCheckPos, this->unk_16C, this->unk_170);
actorPosition.x += this->dyna.actor.world.pos.x;
actorPosition.y += this->dyna.actor.prevPos.y;
actorPosition.z += this->dyna.actor.world.pos.z;
checkPos.x += this->dyna.actor.world.pos.x;
checkPos.y += this->dyna.actor.prevPos.y;
checkPos.z += this->dyna.actor.world.pos.z;
this->dyna.actor.floorHeight = BgCheck_EntityRaycastFloor6(&play->colCtx, &this->dyna.actor.floorPoly, &this->bgId,
&this->dyna.actor, &actorPosition, chkDist);
this->dyna.actor.floorHeight = BgCheck_EntityRaycastDown6(&play->colCtx, &this->dyna.actor.floorPoly, &this->bgId,
&this->dyna.actor, &checkPos, chkDist);
if ((this->dyna.actor.floorHeight - this->dyna.actor.world.pos.y) >= -0.001f) {
this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight;
@ -167,51 +168,51 @@ s32 func_808B3CA0(BgSpot15Rrbox* this, PlayState* play, s32 arg2) {
return false;
}
f32 func_808B3DDC(BgSpot15Rrbox* this, PlayState* play) {
f32 BgSpot15Rrbox_GetFloorHeight(BgSpot15Rrbox* this, PlayState* play) {
s32 i;
Vec3f position;
Vec3f scale;
Vec3f checkPos;
Vec3f relCheckPos;
Actor* actor = &this->dyna.actor;
f32 yIntersect;
f32 returnValue = BGCHECK_Y_MIN;
f32 floorY = BGCHECK_Y_MIN;
s32 bgId;
func_808B3A34(this);
for (i = 0; i < ARRAY_COUNT(D_808B45DC); i++) {
scale.x = D_808B45DC[i].x * (actor->scale.x * 10.0f);
scale.y = D_808B45DC[i].y * (actor->scale.y * 10.0f);
scale.z = D_808B45DC[i].z * (actor->scale.z * 10.0f);
for (i = 0; i < ARRAY_COUNT(sBoxGroundCheckPoints); i++) {
relCheckPos.x = sBoxGroundCheckPoints[i].x * (actor->scale.x * 10.0f);
relCheckPos.y = sBoxGroundCheckPoints[i].y * (actor->scale.y * 10.0f);
relCheckPos.z = sBoxGroundCheckPoints[i].z * (actor->scale.z * 10.0f);
func_808B39E8(&position, &scale, this->unk_16C, this->unk_170);
BgSpot15Rrbox_RotatePoint(&checkPos, &relCheckPos, this->unk_16C, this->unk_170);
position.x += actor->world.pos.x;
position.y += actor->prevPos.y;
position.z += actor->world.pos.z;
checkPos.x += actor->world.pos.x;
checkPos.y += actor->prevPos.y;
checkPos.z += actor->world.pos.z;
yIntersect = BgCheck_EntityRaycastFloor6(&play->colCtx, &actor->floorPoly, &bgId, actor, &position, 0);
yIntersect = BgCheck_EntityRaycastDown6(&play->colCtx, &actor->floorPoly, &bgId, actor, &checkPos, 0);
if (returnValue < yIntersect) {
returnValue = yIntersect;
if (floorY < yIntersect) {
floorY = yIntersect;
this->bgId = bgId;
}
}
return returnValue;
return floorY;
}
s32 func_808B3F58(BgSpot15Rrbox* this, PlayState* play) {
if (func_808B3CA0(this, play, 0)) {
s32 BgSpot15Rrbox_TrySnapToFloor(BgSpot15Rrbox* this, PlayState* play) {
if (BgSpot15Rrbox_TrySnapToCheckedPoint(this, play, 0)) {
return true;
}
if (func_808B3CA0(this, play, 1)) {
if (BgSpot15Rrbox_TrySnapToCheckedPoint(this, play, 1)) {
return true;
}
if (func_808B3CA0(this, play, 2)) {
if (BgSpot15Rrbox_TrySnapToCheckedPoint(this, play, 2)) {
return true;
}
if (func_808B3CA0(this, play, 3)) {
if (BgSpot15Rrbox_TrySnapToCheckedPoint(this, play, 3)) {
return true;
}
if (func_808B3CA0(this, play, 4)) {
if (BgSpot15Rrbox_TrySnapToCheckedPoint(this, play, 4)) {
return true;
}
return false;
@ -271,7 +272,7 @@ void func_808B4194(BgSpot15Rrbox* this, PlayState* play) {
actor->world.pos.x = actor->home.pos.x + (tempUnk178 * this->unk_16C);
actor->world.pos.z = actor->home.pos.z + (tempUnk178 * this->unk_170);
if (!func_808B3F58(this, play)) {
if (!BgSpot15Rrbox_TrySnapToFloor(this, play)) {
actor->home.pos.x = actor->world.pos.x;
actor->home.pos.z = actor->world.pos.z;
player->stateFlags2 &= ~PLAYER_STATE2_4;
@ -304,7 +305,7 @@ void func_808B4380(BgSpot15Rrbox* this, PlayState* play) {
this->dyna.actor.velocity.y = 0.0f;
this->dyna.actor.velocity.z = 0.0f;
this->dyna.actor.gravity = -1.0f;
this->dyna.actor.floorHeight = func_808B3DDC(this, play);
this->dyna.actor.floorHeight = BgSpot15Rrbox_GetFloorHeight(this, play);
this->actionFunc = func_808B43D0;
}

View file

@ -431,8 +431,8 @@ void BgSpot18Basket_Update(Actor* thisx, PlayState* play) {
this->unk_216++;
this->actionFunc(this, play);
this->dyna.actor.floorHeight = BgCheck_EntityRaycastFloor4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId,
&this->dyna.actor, &this->dyna.actor.world.pos);
this->dyna.actor.floorHeight = BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId,
&this->dyna.actor, &this->dyna.actor.world.pos);
if (this->actionFunc != func_808B7AFC) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderJntSph.base);
if (this->actionFunc != func_808B7B6C) {

View file

@ -3291,19 +3291,11 @@ void BossVa_UpdateEffects(PlayState* play) {
Player* player = GET_PLAYER(play);
s16 spB6;
s16 i;
f32 floorY;
s32 padAC;
f32 spB0;
f32 spAC;
s16 pitch;
s16 yaw;
BossVa* refActor2;
BossVa* refActor;
Vec3f sp94;
CollisionPoly* sp90;
f32 pad8C;
Vec3f sp80;
CollisionPoly* sp7C;
f32 pad78;
f32 pad74;
for (i = 0; i < BOSS_VA_EFFECT_COUNT; i++, effect++) {
if (effect->type != VA_NONE) {
@ -3325,12 +3317,12 @@ void BossVa_UpdateEffects(PlayState* play) {
if ((effect->mode == SPARK_TETHER) || (effect->mode == SPARK_UNUSED)) {
pitch = effect->rot.x - Math_Vec3f_Pitch(&refActor->actor.world.pos, &GET_BODY(refActor)->unk_1D8);
pad8C = Math_SinS(refActor->actor.world.rot.y);
effect->pos.x = refActor->actor.world.pos.x - (effect->offset.x * pad8C);
pad74 = Math_CosS(refActor->actor.world.rot.y);
effect->pos.z = refActor->actor.world.pos.z - (effect->offset.x * pad74);
pad78 = Math_CosS(-pitch);
effect->pos.y = (effect->offset.y * pad78) + refActor->actor.world.pos.y;
spAC = Math_SinS(refActor->actor.world.rot.y);
effect->pos.x = refActor->actor.world.pos.x - (effect->offset.x * spAC);
spB0 = Math_CosS(refActor->actor.world.rot.y);
effect->pos.z = refActor->actor.world.pos.z - (effect->offset.x * spB0);
spB0 = Math_CosS(-pitch);
effect->pos.y = (effect->offset.y * spB0) + refActor->actor.world.pos.y;
} else if ((effect->mode == SPARK_BARI) || (effect->mode == SPARK_BODY)) {
effect->pos.x = effect->offset.x + refActor->actor.world.pos.x;
effect->pos.y = effect->offset.y + refActor->actor.world.pos.y;
@ -3396,10 +3388,14 @@ void BossVa_UpdateEffects(PlayState* play) {
if (effect->type == VA_BLOOD) {
if (effect->mode < BLOOD_SPOT) {
sp94 = effect->pos;
sp94.y -= effect->velocity.y + 4.0f;
floorY = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp90, &sp94);
if ((sp90 != NULL) && (effect->pos.y <= floorY)) {
Vec3f checkPos;
CollisionPoly* groundPoly;
f32 floorY;
checkPos = effect->pos;
checkPos.y -= effect->velocity.y + 4.0f;
floorY = BgCheck_EntityRaycastDown1(&play->colCtx, &groundPoly, &checkPos);
if ((groundPoly != NULL) && (effect->pos.y <= floorY)) {
effect->mode = BLOOD_SPOT;
effect->pos.y = floorY + 1.0f;
if (sCsState <= DEATH_SHELL_BURST) {
@ -3429,11 +3425,15 @@ void BossVa_UpdateEffects(PlayState* play) {
if (effect->type == VA_GORE) {
if (effect->mode == GORE_PERMANENT) {
sp80 = effect->pos;
sp80.y -= effect->velocity.y + 4.0f;
Vec3f checkPos;
CollisionPoly* groundPoly;
f32 floorY;
checkPos = effect->pos;
checkPos.y -= effect->velocity.y + 4.0f;
effect->rot.x += 0x1770;
floorY = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp7C, &sp80);
if ((sp7C != NULL) && (effect->pos.y <= floorY)) {
floorY = BgCheck_EntityRaycastDown1(&play->colCtx, &groundPoly, &checkPos);
if ((groundPoly != NULL) && (effect->pos.y <= floorY)) {
effect->mode = GORE_FLOOR;
effect->timer = 30;
effect->pos.y = floorY + 1.0f;
@ -3462,6 +3462,8 @@ void BossVa_UpdateEffects(PlayState* play) {
}
if (effect->type == VA_TUMOR) {
s16 yaw;
refActor = effect->parent;
effect->rot.z += 0x157C;

View file

@ -79,11 +79,11 @@ void EnBox_ClipToGround(EnBox* this, PlayState* play) {
f32 newY;
CollisionPoly* poly;
s32 bgId;
Vec3f pos;
Vec3f checkPos;
pos = this->dyna.actor.world.pos;
pos.y += 1.0f;
newY = BgCheck_EntityRaycastFloor4(&play->colCtx, &poly, &bgId, &this->dyna.actor, &pos);
checkPos = this->dyna.actor.world.pos;
checkPos.y += 1.0f;
newY = BgCheck_EntityRaycastDown4(&play->colCtx, &poly, &bgId, &this->dyna.actor, &checkPos);
if (newY != BGCHECK_Y_MIN) {
this->dyna.actor.world.pos.y = newY;
}

View file

@ -402,8 +402,8 @@ void EnEiyer_Ambush(EnEiyer* this, PlayState* play) {
this->collider.base.acFlags |= AC_ON;
EnEiyer_SetupGlide(this);
} else {
this->actor.floorHeight = BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor, &this->actor.world.pos);
this->actor.floorHeight = BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor,
&this->actor.world.pos);
}
}

View file

@ -1209,9 +1209,9 @@ void func_80A04D90(EnElf* this, PlayState* play) {
s32 pad;
s32 bgId;
this->actor.floorHeight = BgCheck_EntityRaycastFloor5(play, &play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor, &this->actor.world.pos);
this->actor.shape.shadowAlpha = 0x32;
this->actor.floorHeight = BgCheck_EntityRaycastDown5(play, &play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor, &this->actor.world.pos);
this->actor.shape.shadowAlpha = 50;
}
// move to talk to player

View file

@ -131,7 +131,7 @@ void EnEncount1_SpawnLeevers(EnEncount1* this, PlayState* play) {
spawnPos.y = player->actor.floorHeight + 120.0f;
spawnPos.z = player->actor.world.pos.z + Math_CosS(spawnAngle) * spawnDist;
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
floorY = BgCheck_EntityRaycastDown4(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
if (floorY <= BGCHECK_Y_MIN) {
break;
}
@ -192,7 +192,7 @@ void EnEncount1_SpawnTektites(EnEncount1* this, PlayState* play) {
spawnPos.x = this->actor.world.pos.x + Rand_CenteredFloat(50.0f);
spawnPos.y = this->actor.world.pos.y + 120.0f;
spawnPos.z = this->actor.world.pos.z + Rand_CenteredFloat(50.0f);
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
floorY = BgCheck_EntityRaycastDown4(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
if (floorY <= BGCHECK_Y_MIN) {
return;
}
@ -266,7 +266,7 @@ void EnEncount1_SpawnStalchildOrWolfos(EnEncount1* this, PlayState* play) {
spawnPos.y = player->actor.floorHeight + 120.0f;
spawnPos.z =
player->actor.world.pos.z + (Math_CosS(spawnAngle) * spawnDist) + Rand_CenteredFloat(40.0f);
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
floorY = BgCheck_EntityRaycastDown4(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
if (floorY <= BGCHECK_Y_MIN) {
break;
}

View file

@ -669,7 +669,7 @@ void EnFish_UpdateCutscene(EnFish* this, PlayState* play) {
this->actor.world.pos.z = (endPos.z - startPos.z) * progress + startPos.z;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
}
// Update functions and Draw

View file

@ -360,7 +360,7 @@ s32 EnGoroiwa_MoveDownToNextWaypoint(EnGoroiwa* this, PlayState* play) {
f32 yDistToFloor;
s32 quakeIdx;
CollisionPoly* floorPoly;
Vec3f raycastFrom;
Vec3f checkPos;
f32 floorY;
s32 pad2;
s32 floorBgId;
@ -386,11 +386,11 @@ s32 EnGoroiwa_MoveDownToNextWaypoint(EnGoroiwa* this, PlayState* play) {
}
this->rollRotSpeed = 0.0f;
if (!(this->stateFlags & ENGOROIWA_IN_WATER)) {
raycastFrom.x = this->actor.world.pos.x;
raycastFrom.y = this->actor.world.pos.y + 50.0f;
raycastFrom.z = this->actor.world.pos.z;
floorY = BgCheck_EntityRaycastFloor5(play, &play->colCtx, &floorPoly, &floorBgId, &this->actor,
&raycastFrom);
checkPos.x = this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 50.0f;
checkPos.z = this->actor.world.pos.z;
floorY =
BgCheck_EntityRaycastDown5(play, &play->colCtx, &floorPoly, &floorBgId, &this->actor, &checkPos);
yDistToFloor = floorY - (this->actor.world.pos.y - 59.5f);
if (fabsf(yDistToFloor) < 15.0f) {
dustPos.x = this->actor.world.pos.x;
@ -723,7 +723,7 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
EnGoroiwa* this = (EnGoroiwa*)thisx;
Player* player = GET_PLAYER(play);
s32 pad;
s32 sp30;
s32 bgId;
if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_7 | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
if (this->collisionDisabledTimer > 0) {
@ -736,8 +736,8 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_3 | UPDBGCHECKINFO_FLAG_4);
break;
case 0:
this->actor.floorHeight = BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &sp30,
&this->actor, &this->actor.world.pos);
this->actor.floorHeight = BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor, &this->actor.world.pos);
break;
}
EnGoroiwa_UpdateRotation(this, play);

View file

@ -2841,7 +2841,7 @@ s32 EnHorse_CalcFloorHeight(EnHorse* this, PlayState* play, Vec3f* pos, Collisio
WaterBox* waterBox;
*floorPoly = NULL;
*floorHeight = BgCheck_EntityRaycastFloor3(&play->colCtx, floorPoly, &bgId, pos);
*floorHeight = BgCheck_EntityRaycastDown3(&play->colCtx, floorPoly, &bgId, pos);
if (*floorHeight == BGCHECK_Y_MIN) {
return 1; // No floor
@ -2852,7 +2852,7 @@ s32 EnHorse_CalcFloorHeight(EnHorse* this, PlayState* play, Vec3f* pos, Collisio
return 2; // Water
}
if ((*floorPoly)->normal.y * COLPOLY_NORMAL_FRAC < 0.81915206f || // cos(35 degrees)
if (COLPOLY_GET_NORMAL((*floorPoly)->normal.y) < 0.81915206f || // cos(35 degrees)
SurfaceType_IsHorseBlocked(&play->colCtx, *floorPoly, bgId) ||
SurfaceType_GetFloorType(&play->colCtx, *floorPoly, bgId) == FLOOR_TYPE_7) {
return 3; // Horse blocked surface
@ -2957,9 +2957,9 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
floorSlope = RAD_TO_BINANG(Math_FAtan2F(this->yBack - this->yFront, 60.0f));
if (this->actor.floorPoly != 0) {
nx = this->actor.floorPoly->normal.x * COLPOLY_NORMAL_FRAC;
ny = this->actor.floorPoly->normal.y * COLPOLY_NORMAL_FRAC;
nz = this->actor.floorPoly->normal.z * COLPOLY_NORMAL_FRAC;
nx = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.x);
ny = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y);
nz = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z);
pos = frontPos;
pos.y = this->yFront;
dist = Math3D_DistPlaneToPos(nx, ny, nz, this->actor.floorPoly->dist, &pos);
@ -3225,7 +3225,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
obstaclePos.y = this->actor.world.pos.y + 120.0f;
obstaclePos.z += intersectDist * Math_CosS(this->actor.world.rot.y);
obstacleTop = obstaclePos;
obstacleTop.y = BgCheck_EntityRaycastFloor3(&play->colCtx, &obstacleFloor, &bgId, &obstaclePos);
obstacleTop.y = BgCheck_EntityRaycastDown3(&play->colCtx, &obstacleFloor, &bgId, &obstaclePos);
if (obstacleTop.y == BGCHECK_Y_MIN) {
return;
}
@ -3234,13 +3234,12 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
return;
}
if (Math3D_DistPlaneToPos(this->actor.floorPoly->normal.x * COLPOLY_NORMAL_FRAC,
this->actor.floorPoly->normal.y * COLPOLY_NORMAL_FRAC,
this->actor.floorPoly->normal.z * COLPOLY_NORMAL_FRAC, this->actor.floorPoly->dist,
&obstacleTop) < -40.0f &&
Math3D_DistPlaneToPos(
obstacleFloor->normal.x * COLPOLY_NORMAL_FRAC, obstacleFloor->normal.y * COLPOLY_NORMAL_FRAC,
obstacleFloor->normal.z * COLPOLY_NORMAL_FRAC, obstacleFloor->dist, &this->actor.world.pos) > 40.0f) {
if (Math3D_DistPlaneToPos(
COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.x), COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y),
COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z), this->actor.floorPoly->dist, &obstacleTop) < -40.0f &&
Math3D_DistPlaneToPos(COLPOLY_GET_NORMAL(obstacleFloor->normal.x), COLPOLY_GET_NORMAL(obstacleFloor->normal.y),
COLPOLY_GET_NORMAL(obstacleFloor->normal.z), obstacleFloor->dist,
&this->actor.world.pos) > 40.0f) {
if (movingFast == true && this->action != ENHORSE_ACT_STOPPING) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
EnHorse_StartBraking(this, play);
@ -3249,7 +3248,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
return;
}
ny = obstacleFloor->normal.y * COLPOLY_NORMAL_FRAC;
ny = COLPOLY_GET_NORMAL(obstacleFloor->normal.y);
if (ny < 0.81915206f || // cos(35 degrees)
(SurfaceType_IsHorseBlocked(&play->colCtx, obstacleFloor, bgId) != 0) ||
(SurfaceType_GetFloorType(&play->colCtx, obstacleFloor, bgId) == FLOOR_TYPE_7)) {
@ -3275,7 +3274,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
}
obstacleTop = obstaclePos;
obstacleTop.y = BgCheck_EntityRaycastFloor3(&play->colCtx, &obstacleFloor, &bgId, &obstaclePos);
obstacleTop.y = BgCheck_EntityRaycastDown3(&play->colCtx, &obstacleFloor, &bgId, &obstaclePos);
if (obstacleTop.y == BGCHECK_Y_MIN) {
return;
}
@ -3286,7 +3285,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
return;
}
ny = obstacleFloor->normal.y * COLPOLY_NORMAL_FRAC;
ny = COLPOLY_GET_NORMAL(obstacleFloor->normal.y);
if (ny < 0.81915206f || // cos(35 degrees)
SurfaceType_IsHorseBlocked(&play->colCtx, obstacleFloor, bgId) ||
SurfaceType_GetFloorType(&play->colCtx, obstacleFloor, bgId) == FLOOR_TYPE_7) {

View file

@ -270,19 +270,16 @@ void func_80A68DB0(EnHorseGanon* this, PlayState* play) {
void func_80A68E14(EnHorseGanon* this, PlayState* play) {
s32 pad;
CollisionPoly* col;
f32 temp_ret;
Vec3f v;
s32 temp1;
CollisionPoly* poly;
s32 pad2;
Vec3f checkPos;
s32 bgId;
v.x = Math_SinS(this->actor.shape.rot.y) * 30.0f + this->actor.world.pos.x;
v.y = this->actor.world.pos.y + 60.0f;
v.z = Math_CosS(this->actor.shape.rot.y) * 30.0f + this->actor.world.pos.z;
temp_ret = BgCheck_EntityRaycastFloor3(&play->colCtx, &col, &temp1, &v);
this->unk_1F4 = temp_ret;
this->actor.shape.rot.x = RAD_TO_BINANG(Math_FAtan2F(this->actor.world.pos.y - temp_ret, 30.0f));
checkPos.x = Math_SinS(this->actor.shape.rot.y) * 30.0f + this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 60.0f;
checkPos.z = Math_CosS(this->actor.shape.rot.y) * 30.0f + this->actor.world.pos.z;
this->unk_1F4 = BgCheck_EntityRaycastDown3(&play->colCtx, &poly, &bgId, &checkPos);
this->actor.shape.rot.x = RAD_TO_BINANG(Math_FAtan2F(this->actor.world.pos.y - this->unk_1F4, 30.0f));
}
void EnHorseGanon_Update(Actor* thisx, PlayState* play) {

View file

@ -557,15 +557,15 @@ void EnHorseNormal_WaitClone(EnHorseNormal* this, PlayState* play) {
void func_80A6C8E0(EnHorseNormal* this, PlayState* play) {
s32 pad;
CollisionPoly* sp38;
CollisionPoly* groundPoly;
s32 pad2;
Vec3f sp28;
s32 sp24;
Vec3f checkPos;
s32 bgId;
sp28.x = (Math_SinS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.x;
sp28.y = this->actor.world.pos.y + 60.0f;
sp28.z = (Math_CosS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.z;
this->unk_220 = BgCheck_EntityRaycastFloor3(&play->colCtx, &sp38, &sp24, &sp28);
checkPos.x = (Math_SinS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 60.0f;
checkPos.z = (Math_CosS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.z;
this->unk_220 = BgCheck_EntityRaycastDown3(&play->colCtx, &groundPoly, &bgId, &checkPos);
this->actor.shape.rot.x = RAD_TO_BINANG(Math_FAtan2F(this->actor.world.pos.y - this->unk_220, 30.0f));
}

View file

@ -217,13 +217,13 @@ void func_80A6DE38(EnHorseZelda* this, PlayState* play) {
s32 pad;
CollisionPoly* poly;
s32 pad2;
Vec3f pos;
Vec3f checkPos;
s32 bgId;
pos.x = (Math_SinS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 60.0f;
pos.z = (Math_CosS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.z;
this->unk_1F4 = BgCheck_EntityRaycastFloor3(&play->colCtx, &poly, &bgId, &pos);
checkPos.x = (Math_SinS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 60.0f;
checkPos.z = (Math_CosS(this->actor.shape.rot.y) * 30.0f) + this->actor.world.pos.z;
this->unk_1F4 = BgCheck_EntityRaycastDown3(&play->colCtx, &poly, &bgId, &checkPos);
this->actor.shape.rot.x = RAD_TO_BINANG(Math_FAtan2F(this->actor.world.pos.y - this->unk_1F4, 30.0f));
}

View file

@ -112,14 +112,14 @@ void EnIshi_InitCollider(Actor* thisx, PlayState* play) {
s32 EnIshi_SnapToFloor(EnIshi* this, PlayState* play, f32 arg2) {
CollisionPoly* poly;
Vec3f pos;
Vec3f checkPos;
s32 bgId;
f32 floorY;
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 30.0f;
pos.z = this->actor.world.pos.z;
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &poly, &bgId, &this->actor, &pos);
checkPos.x = this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 30.0f;
checkPos.z = this->actor.world.pos.z;
floorY = BgCheck_EntityRaycastDown4(&play->colCtx, &poly, &bgId, &this->actor, &checkPos);
if (floorY > BGCHECK_Y_MIN) {
this->actor.world.pos.y = floorY + arg2;
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);

View file

@ -99,7 +99,7 @@ void EnKusa_SetupAction(EnKusa* this, EnKusaActionFunc actionFunc) {
s32 EnKusa_SnapToFloor(EnKusa* this, PlayState* play, f32 yOffset) {
s32 pad;
CollisionPoly* poly;
CollisionPoly* groundPoly;
Vec3f pos;
s32 bgId;
f32 floorY;
@ -108,7 +108,7 @@ s32 EnKusa_SnapToFloor(EnKusa* this, PlayState* play, f32 yOffset) {
pos.y = this->actor.world.pos.y + 30.0f;
pos.z = this->actor.world.pos.z;
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &poly, &bgId, &this->actor, &pos);
floorY = BgCheck_EntityRaycastDown4(&play->colCtx, &groundPoly, &bgId, &this->actor, &pos);
if (floorY > BGCHECK_Y_MIN) {
this->actor.world.pos.y = floorY + yOffset;

View file

@ -74,7 +74,7 @@ void EnNwc_ChickNoop(EnNwcChick* chick, EnNwc* this, PlayState* play) {
}
void EnNwc_ChickBgCheck(EnNwcChick* chick, PlayState* play) {
CollisionPoly* outPoly;
CollisionPoly* groundPoly;
s32 bgId;
Vec3f outPos;
f32 dy;
@ -90,7 +90,7 @@ void EnNwc_ChickBgCheck(EnNwcChick* chick, PlayState* play) {
//! @bug The use of outPos here is totally wrong. Even if it didn't get overwritten
// by the wall check, it should add an offset to the y-value so the raycast
// doesn't go through the floor and cause the chicks to ignore all floors.
chick->floorY = BgCheck_EntityRaycastFloor3(&play->colCtx, &outPoly, &bgId, &outPos);
chick->floorY = BgCheck_EntityRaycastDown3(&play->colCtx, &groundPoly, &bgId, &outPos);
dy = chick->floorY - chick->pos.y;
if ((0.0f <= dy) && (dy < 40.0f)) {
chick->pos.y = chick->floorY;

View file

@ -133,7 +133,7 @@ void EnOkuta_Init(Actor* thisx, PlayState* play) {
this->numShots = 1;
}
thisx->floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &thisx->floorPoly, &floorBgId, thisx, &thisx->world.pos);
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,
&outWaterBox) ||

View file

@ -424,8 +424,8 @@ void EnPoField_WaitForSpawn(EnPoField* this, PlayState* play) {
this->actor.world.pos.x = Math_SinS(player->actor.shape.rot.y) * spawnDist + player->actor.world.pos.x;
this->actor.world.pos.z = Math_CosS(player->actor.shape.rot.y) * spawnDist + player->actor.world.pos.z;
this->actor.world.pos.y = player->actor.world.pos.y + 1000.0f;
this->actor.world.pos.y = BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor, &this->actor.world.pos);
this->actor.world.pos.y = BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor, &this->actor.world.pos);
if (this->actor.world.pos.y != BGCHECK_Y_MIN) {
this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, &player->actor);
EnPoField_SetupAppear(this);

View file

@ -1195,14 +1195,14 @@ void EnPoSisters_Update(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 0.0f,
UPDBGCHECKINFO_FLAG_0 | UPDBGCHECKINFO_FLAG_2);
} else {
Vec3f vec;
s32 sp34;
Vec3f checkPos;
s32 bgId;
vec.x = this->actor.world.pos.x;
vec.y = this->actor.world.pos.y + 10.0f;
vec.z = this->actor.world.pos.z;
checkPos.x = this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 10.0f;
checkPos.z = this->actor.world.pos.z;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &sp34, &this->actor, &vec);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &checkPos);
}
Collider_UpdateCylinder(&this->actor, &this->collider);

View file

@ -984,8 +984,8 @@ void func_80AE089C(EnPoh* this) {
void EnPoh_UpdateLiving(Actor* thisx, PlayState* play) {
EnPoh* this = (EnPoh*)thisx;
s32 pad;
Vec3f vec;
s32 sp38;
Vec3f checkPos;
s32 bgId;
if (this->colliderSph.base.atFlags & AT_HIT) {
this->colliderSph.base.atFlags &= ~AT_HIT;
@ -1013,11 +1013,11 @@ void EnPoh_UpdateLiving(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
}
vec.x = this->actor.world.pos.x;
vec.y = this->actor.world.pos.y + 20.0f;
vec.z = this->actor.world.pos.z;
checkPos.x = this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 20.0f;
checkPos.z = this->actor.world.pos.z;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &sp38, &this->actor, &vec);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &checkPos);
func_80AE089C(this);
this->actor.shape.shadowAlpha = this->lightColor.a;
}

View file

@ -204,7 +204,7 @@ void EnRiverSound_Update(Actor* thisx, PlayState* play) {
pos = &thisx->world.pos;
if (EnRiverSound_GetSfxPos(SEGMENTED_TO_VIRTUAL(path->points), path->count, &player->actor.world.pos, pos)) {
if (BgCheck_EntityRaycastFloor4(&play->colCtx, &thisx->floorPoly, &bgId, thisx, pos) != BGCHECK_Y_MIN) {
if (BgCheck_EntityRaycastDown4(&play->colCtx, &thisx->floorPoly, &bgId, thisx, pos) != BGCHECK_Y_MIN) {
// Get the river sfx frequency based on the speed of the river current under the actor
this->sfxFreqIndex = SurfaceType_GetConveyorSpeed(&play->colCtx, thisx->floorPoly, bgId);
} else {

View file

@ -156,7 +156,7 @@ void EnVali_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_0;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
this->actor.params = BARI_TYPE_NORMAL;
if (this->actor.floorHeight == BGCHECK_Y_MIN) {

View file

@ -218,7 +218,7 @@ void func_80B32804(EnWeiyer* this, PlayState* play) {
this->actor.world.pos.y += 0.5f;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
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,
&this->actor.home.pos.y, &waterBox) ||

View file

@ -162,7 +162,7 @@ void EnWood02_Init(Actor* thisx, PlayState* play2) {
f32 actorScale;
PlayState* play = play2;
EnWood02* this = (EnWood02*)thisx;
CollisionPoly* outPoly;
CollisionPoly* poly;
s32 bgId;
f32 floorY;
s16 extraRot;
@ -280,7 +280,7 @@ void EnWood02_Init(Actor* thisx, PlayState* play2) {
// Snap to floor, or remove if over void
this->actor.world.pos.y += 200.0f;
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &outPoly, &bgId, &this->actor, &this->actor.world.pos);
floorY = BgCheck_EntityRaycastDown4(&play->colCtx, &poly, &bgId, &this->actor, &this->actor.world.pos);
if (floorY > BGCHECK_Y_MIN) {
this->actor.world.pos.y = floorY;

View file

@ -151,14 +151,14 @@ void ObjBean_InitDynaPoly(ObjBean* this, PlayState* play, CollisionHeader* colli
}
void ObjBean_FindFloor(ObjBean* this, PlayState* play) {
Vec3f vec;
s32 sp20;
Vec3f checkPos;
s32 bgId;
vec.x = this->dyna.actor.world.pos.x;
vec.y = this->dyna.actor.world.pos.y + 29.999998f;
vec.z = this->dyna.actor.world.pos.z;
checkPos.x = this->dyna.actor.world.pos.x;
checkPos.y = this->dyna.actor.world.pos.y + 29.999998f;
checkPos.z = this->dyna.actor.world.pos.z;
this->dyna.actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->dyna.actor.floorPoly, &sp20, &this->dyna.actor, &vec);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId, &this->dyna.actor, &checkPos);
}
void func_80B8EBC8(ObjBean* this) {

View file

@ -189,13 +189,13 @@ void func_80B967C0(ObjLift* this) {
void func_80B96840(ObjLift* this, PlayState* play) {
s32 pad;
s32 bgId;
Vec3f sp2C;
Vec3f pos;
Actor_MoveForward(&this->dyna.actor);
Math_Vec3f_Copy(&sp2C, &this->dyna.actor.prevPos);
sp2C.y += sMaxFallDistances[(this->dyna.actor.params >> 1) & 1];
Math_Vec3f_Copy(&pos, &this->dyna.actor.prevPos);
pos.y += sMaxFallDistances[(this->dyna.actor.params >> 1) & 1];
this->dyna.actor.floorHeight =
BgCheck_EntityRaycastFloor4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId, &this->dyna.actor, &sp2C);
BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId, &this->dyna.actor, &pos);
if ((this->dyna.actor.floorHeight - this->dyna.actor.world.pos.y) >=
(sMaxFallDistances[(this->dyna.actor.params >> 1) & 1] - 0.001f)) {

View file

@ -333,7 +333,7 @@ void ObjOshihiki_SetFloors(ObjOshihiki* this, PlayState* play) {
floorPoly = &this->floorPolys[i];
floorBgId = &this->floorBgIds[i];
this->floorHeights[i] =
BgCheck_EntityRaycastFloor6(&play->colCtx, floorPoly, floorBgId, &this->dyna.actor, &colCheckPoint, 0.0f);
BgCheck_EntityRaycastDown6(&play->colCtx, floorPoly, floorBgId, &this->dyna.actor, &colCheckPoint, 0.0f);
}
}

View file

@ -98,17 +98,17 @@ void ObjTsubo_ApplyGravity(ObjTsubo* this) {
}
s32 ObjTsubo_SnapToFloor(ObjTsubo* this, PlayState* play) {
CollisionPoly* floorPoly;
CollisionPoly* groundPoly;
Vec3f pos;
s32 bgID;
f32 floorY;
s32 bgId;
f32 groundY;
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 20.0f;
pos.z = this->actor.world.pos.z;
floorY = BgCheck_EntityRaycastFloor4(&play->colCtx, &floorPoly, &bgID, &this->actor, &pos);
if (floorY > BGCHECK_Y_MIN) {
this->actor.world.pos.y = floorY;
groundY = BgCheck_EntityRaycastDown4(&play->colCtx, &groundPoly, &bgId, &this->actor, &pos);
if (groundY > BGCHECK_Y_MIN) {
this->actor.world.pos.y = groundY;
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
return true;
} else {

View file

@ -4274,7 +4274,7 @@ Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* arg2, Vec3f* arg3
f32 func_808396F4(PlayState* play, Player* this, Vec3f* arg2, Vec3f* arg3, CollisionPoly** arg4, s32* arg5) {
func_808395DC(this, &this->actor.world.pos, arg2, arg3);
return BgCheck_EntityRaycastFloor3(&play->colCtx, arg4, arg5, arg3);
return BgCheck_EntityRaycastDown3(&play->colCtx, arg4, arg5, arg3);
}
f32 func_8083973C(PlayState* play, Player* this, Vec3f* arg2, Vec3f* arg3) {
@ -4309,8 +4309,8 @@ s32 func_80839800(Player* this, PlayState* play) {
s32 frontRoom;
Actor* attachedActor;
LinkAnimationHeader* sp5C;
CollisionPoly* sp58;
Vec3f sp4C;
CollisionPoly* groundPoly;
Vec3f checkPos;
if ((this->doorType != PLAYER_DOORTYPE_NONE) &&
(!(this->stateFlags1 & PLAYER_STATE1_11) ||
@ -4428,13 +4428,14 @@ s32 func_80839800(Player* this, PlayState* play) {
Actor_DisableLens(play);
if (ENDOOR_GET_TYPE(doorActor) == DOOR_SCENEEXIT) {
sp4C.x = doorActor->world.pos.x - (sp6C * sp74);
sp4C.y = doorActor->world.pos.y + 10.0f;
sp4C.z = doorActor->world.pos.z - (sp6C * sp78);
checkPos.x = doorActor->world.pos.x - (sp6C * sp74);
checkPos.y = doorActor->world.pos.y + 10.0f;
checkPos.z = doorActor->world.pos.z - (sp6C * sp78);
BgCheck_EntityRaycastFloor1(&play->colCtx, &sp58, &sp4C);
BgCheck_EntityRaycastDown1(&play->colCtx, &groundPoly, &checkPos);
if (func_80839034(play, this, sp58, BGCHECK_SCENE)) {
//! @bug groundPoly's bgId is not guaranteed to be BGCHECK_SCENE
if (func_80839034(play, this, groundPoly, BGCHECK_SCENE)) {
gSaveContext.entranceSpeed = 2.0f;
gSaveContext.entranceSound = NA_SE_OC_DOOR_OPEN;
}
@ -9766,7 +9767,7 @@ void func_80847BA0(PlayState* play, Player* this) {
f32 wallPolyNormalY = COLPOLY_GET_NORMAL(wallPoly->normal.y);
f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z);
f32 wallHeight;
CollisionPoly* sp7C;
CollisionPoly* groundPoly;
CollisionPoly* sp78;
s32 sp74;
Vec3f sp68;
@ -9782,7 +9783,7 @@ void func_80847BA0(PlayState* play, Player* this) {
sp68.z = this->actor.world.pos.z - (spB0 * wallPolyNormalZ);
sp68.y = this->actor.world.pos.y + this->ageProperties->unk_0C;
sp64 = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp7C, &sp68);
sp64 = BgCheck_EntityRaycastDown1(&play->colCtx, &groundPoly, &sp68);
wallHeight = sp64 - this->actor.world.pos.y;
this->wallHeight = wallHeight;
@ -9800,7 +9801,7 @@ void func_80847BA0(PlayState* play, Player* this) {
this->wallHeight = 399.96002f;
} else if (SurfaceType_CheckWallFlag0(&play->colCtx, wallPoly, this->actor.wallBgId) == 0) {
if (this->ageProperties->unk_1C <= this->wallHeight) {
if (ABS(sp7C->normal.y) > 28000) {
if (ABS(groundPoly->normal.y) > 28000) {
if (this->ageProperties->unk_14 <= this->wallHeight) {
spC7 = 4;
} else if (this->ageProperties->unk_18 <= this->wallHeight) {
@ -11386,7 +11387,7 @@ static struct_80832924 D_808548A8[] = {
void func_8084C5F8(Player* this, PlayState* play) {
s32 temp;
f32* sp38;
CollisionPoly* sp34;
CollisionPoly* groundPoly;
s32 sp30;
Vec3f sp24;
@ -11416,8 +11417,8 @@ void func_8084C5F8(Player* this, PlayState* play) {
sp24.x = this->actor.world.pos.x;
sp24.y = this->actor.world.pos.y + 20.0f;
sp24.z = this->actor.world.pos.z;
if (BgCheck_EntityRaycastFloor3(&play->colCtx, &sp34, &sp30, &sp24) != 0.0f) {
this->unk_89E = SurfaceType_GetSfxType(&play->colCtx, sp34, sp30);
if (BgCheck_EntityRaycastDown3(&play->colCtx, &groundPoly, &sp30, &sp24) != 0.0f) {
this->unk_89E = SurfaceType_GetSfxType(&play->colCtx, groundPoly, sp30);
func_808328A0(this);
}
}