Match `Camera_Normal1` (#1446)

* improve Camera_Normal1

* decompme

* Match Camera_Normal1, thanks darkeye

* use the pad
This commit is contained in:
engineer124 2023-10-21 06:30:18 +11:00 committed by GitHub
parent 1d3f38dcaa
commit 2dc405b6af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 145 additions and 184 deletions

View File

@ -1963,63 +1963,39 @@ s32 Camera_Noop(Camera* camera) {
return 1;
}
// SP, FLOATS - Many temps reused to get the stack pointer down, even though it doesn't seem logical
// https://decomp.me/scratch/zVOSG
#ifdef NON_EQUIVALENT
s32 Camera_Normal1(Camera* camera) {
CameraModeValue* values;
f32 phi_f16_2;
Vec3f spD8; // D8-DC-E0
Vec3f* eye = &camera->eye;
Vec3f* at = &camera->at;
Vec3f* eyeNext = &camera->eyeNext;
Vec3f spD8;
f32 spD4;
f32 spD0;
Vec3f* temp;
f32 spC8;
f32 spC4;
f32 spC0;
VecGeo spB4; // B4-B8-BA
VecGeo spAC; // AC-B0-B2
VecGeo spA4; // A4-A8-AA
VecGeo sp9C; // 9C-A0-A2
VecGeo sp74; // 74-78-7A
s16 sp72;
f32 sp6C;
VecGeo sp64; // 64-68-6A
CollisionPoly* sp60;
f32 sp88 = Camera_GetFocalActorHeight(camera);
s32 sp5C; // BgID
f32 sp58;
f32 phi_f2;
// Vec3f *sp48;
// Vec3f *sp44;
// f32 phi_f0;
f32 phi_f2_2;
f32 phi_f0_4;
s32 phi_v1_2;
Vec3f* sp4C = &camera->eye;
VecGeo spB4;
VecGeo spAC;
VecGeo spA4;
VecGeo sp9C;
PosRot* sp40 = &camera->focalActorPosRot;
// f32 phi_f16_5;
s16 phi_a0;
s16 temp_a0_3; // May be fake
Vec3f* new_var3;
Normal1ReadOnlyData* roData = &camera->paramData.norm1.roData;
Normal1ReadWriteData* rwData = &camera->paramData.norm1.rwData;
s16 phi_v1_2;
s16 temp_a0_3;
f32 sp88 = Camera_GetFocalActorHeight(camera);
CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
f32 phi_f2;
f32 rand;
// sp48 = &camera->at;
// sp4C;/
// sp44 = &camera->eyeNext;
// sp40;
// sp88;
values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
roData->unk_00 = GET_NEXT_RO_DATA(values) * (sp88 * 0.01f * (0.8f - ((68.0f / sp88) * -0.2f)));
roData->unk_04 = GET_NEXT_RO_DATA(values) * (sp88 * 0.01f * (0.8f - ((68.0f / sp88) * -0.2f)));
roData->unk_08 = GET_NEXT_RO_DATA(values) * (sp88 * 0.01f * (0.8f - ((68.0f / sp88) * -0.2f)));
roData->unk_04 = roData->unk_08 - (roData->unk_08 - roData->unk_04);
if (RELOAD_PARAMS(camera)) {
roData->unk_20 = (s16)((GET_NEXT_RO_DATA(values) * 182.04167f) + .5f);
roData->unk_20 = CAM_DEG_TO_BINANG(GET_NEXT_RO_DATA(values));
roData->unk_0C = GET_NEXT_RO_DATA(values);
roData->unk_0C = 40.0f - (40.0f - roData->unk_0C);
roData->unk_10 = GET_NEXT_RO_DATA(values);
@ -2031,19 +2007,20 @@ s32 Camera_Normal1(Camera* camera) {
}
sCameraInterfaceFlags = roData->interfaceFlags;
OLib_Vec3fDiffToVecGeo(&spA4, &camera->at, sp4C);
OLib_Vec3fDiffToVecGeo(&sp9C, &camera->at, &camera->eyeNext);
OLib_Vec3fDiffToVecGeo(&spA4, at, eye);
OLib_Vec3fDiffToVecGeo(&sp9C, at, eyeNext);
switch (camera->animState) {
case 20:
Camera_SetUpdateRatesFastYaw(camera);
// fallthrough?
// fallthrough
case 0:
rwData->unk_0C = 1;
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) && (camera->animState != 20)) {
rwData->unk_0C |= 0x1000;
}
// fallthrough?
// fallthrough
case 10:
if (camera->animState == 10) {
rwData->unk_0C = 0;
@ -2052,12 +2029,15 @@ s32 Camera_Normal1(Camera* camera) {
D_801EDC30[camera->camId].yaw = D_801EDC30[camera->camId].pitch = D_801EDC30[camera->camId].unk_64 = 0;
rwData->unk_0A = 0x514;
D_801EDC30[camera->camId].swingUpdateRate = roData->unk_0C;
rwData->unk_00 = camera->focalActorPosRot.pos.y;
rwData->unk_00 = sp40->pos.y;
rwData->unk_04 = camera->xzSpeed;
D_801EDC30[camera->camId].timer = 0;
sUpdateCameraDirection = false;
rwData->unk_10 = 120.0f;
break;
default:
break;
}
camera->animState = 1;
@ -2072,7 +2052,7 @@ s32 Camera_Normal1(Camera* camera) {
}
if (func_800CB950(camera)) {
rwData->unk_00 = camera->focalActorPosRot.pos.y;
rwData->unk_00 = sp40->pos.y;
}
if (rwData->unk_0C & 0x1000) {
@ -2091,18 +2071,15 @@ s32 Camera_Normal1(Camera* camera) {
spC4 = spC4 / (roData->unk_04 + roData->unk_08);
}
// Everything above matches except stack pointers
// PERM_RANDOMIZE(
spD0 = 0.2f;
phi_f16_2 = 0.2f;
phi_f2 = (camera->xzSpeed - rwData->unk_04) * 0.2f;
phi_f0_4 = phi_f2;
if (phi_f2 < 0.0f) {
phi_f0_4 = (camera->xzSpeed - rwData->unk_04) * (0.2f * 1.0f);
if (phi_f0_4 < 0.0f) {
phi_f0_4 = 0.0f;
}
spC0 = OLib_ClampMaxDist(SQ(phi_f0_4), 1.0f);
camera->yOffsetUpdateRate =
Camera_ScaledStepToCeilF(0.05f, camera->yOffsetUpdateRate, (0.5f * spC8) + (0.5f * spC4), 0.0001f);
camera->xzOffsetUpdateRate =
@ -2120,7 +2097,7 @@ s32 Camera_Normal1(Camera* camera) {
if (D_801EDC30[camera->camId].timer != 0) {
camera->yawUpdateRateInv =
Camera_ScaledStepToCeilF((D_801EDC30[camera->camId].timer * 2) + D_801EDC30[camera->camId].swingUpdateRate,
Camera_ScaledStepToCeilF(D_801EDC30[camera->camId].swingUpdateRate + (D_801EDC30[camera->camId].timer * 2),
camera->yawUpdateRateInv, phi_f2, 0.1f);
if (roData->interfaceFlags & NORMAL1_FLAG_3) {
camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(100.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f);
@ -2143,99 +2120,86 @@ s32 Camera_Normal1(Camera* camera) {
}
if (roData->interfaceFlags & NORMAL1_FLAG_0) {
//! FAKE
if (!spC8) {}
//! FAKE:
if (spC8) {}
temp_a0_3 = Camera_GetPitchAdjFromFloorHeightDiffs(camera, spA4.yaw + 0x8000, rwData->unk_0C & 1);
phi_f2 = (1.0f / roData->unk_10) * 0.7f;
phi_f16_2 = (1.0f / roData->unk_10) * 0.3f * (1.0f - camera->speedRatio);
spD0 = phi_f16_2;
rwData->unk_08 = Camera_ScaledStepToCeilS(temp_a0_3, rwData->unk_08, phi_f2 + phi_f16_2, 5);
spD0 = (1.0f / roData->unk_10) * 0.3f * (1.0f - camera->speedRatio);
rwData->unk_08 = Camera_ScaledStepToCeilS(temp_a0_3, rwData->unk_08, phi_f2 + spD0, 5);
} else {
rwData->unk_08 = 0;
}
if ((D_801EDC30[camera->camId].unk_64 == 1) && (roData->unk_00 > -40.0f)) {
phi_f0_4 = Math_SinS(D_801EDC30[camera->camId].pitch);
phi_f2 = roData->unk_00;
phi_f2 = phi_f2 * (1.0f - phi_f0_4); // TODO: phi_f2 should not be on the LHS and RHS
// phi_f2 = roData->unk_00 * (1.0f - phi_f0_4);
spD0 = Math_SinS(D_801EDC30[camera->camId].pitch);
phi_f2 = (-40.0f * spD0) + roData->unk_00 * (1.0f - spD0);
camera->yawUpdateRateInv = 80.0f;
camera->pitchUpdateRateInv = 80.0f;
phi_f2_2 = ((-40.0f) * phi_f0_4) + phi_f2;
phi_f16_2 = phi_f0_4;
} else {
phi_f2_2 = roData->unk_00;
phi_f2 = roData->unk_00;
}
if (roData->interfaceFlags & (NORMAL1_FLAG_6 | NORMAL1_FLAG_5)) {
if (camera->dist < roData->unk_04) {
phi_f16_2 = 0.0f;
spD0 = 0.0f;
} else if (roData->unk_08 < camera->dist) {
phi_f16_2 = 1.0f;
spD0 = 1.0f;
} else if (roData->unk_08 == roData->unk_04) {
phi_f16_2 = 1.0f;
spD0 = 1.0f;
} else {
// phi_f16_2 = camera->dist - roData->unk_04;
spD4 = (camera->dist - roData->unk_04) / (roData->unk_08 - roData->unk_04);
phi_f16_2 = spD4;
spD0 = (camera->dist - roData->unk_04) / (roData->unk_08 - roData->unk_04);
}
Camera_CalcAtForNormal1(camera, &sp9C, phi_f2_2, 25.0f * phi_f16_2 * camera->speedRatio);
Camera_CalcAtForNormal1(camera, &sp9C, phi_f2, 25.0f * spD0 * camera->speedRatio);
rwData->unk_10 = 120.0f;
spD0 = phi_f16_2;
} else if ((roData->interfaceFlags & NORMAL1_FLAG_7) && (rwData->unk_0A < 0)) {
phi_f0_4 = rwData->unk_0A / -1200.0f; // May be used to swap $f registers
phi_f0_4 = rwData->unk_0A / -1200.0f;
Camera_CalcAtForNormal1(
camera, &sp9C,
phi_f2_2 - ((phi_f2_2 - ((0.8f - ((68.0f / sp88) * -0.2f)) * sp88 * -0.45f)) * phi_f0_4 * 0.75f),
camera, &sp9C, phi_f2 - ((phi_f2 - ((0.8f - ((68.0f / sp88) * -0.2f)) * sp88 * -0.45f)) * phi_f0_4 * 0.75f),
10.0f * phi_f0_4);
rwData->unk_10 = 120.0f;
spD0 = phi_f16_2;
//! FAKE
if (0) {}
} else if (roData->interfaceFlags & NORMAL1_FLAG_3) {
spD0 = phi_f16_2;
Camera_CalcAtForScreen(camera, &sp9C, roData->unk_00, &rwData->unk_00, rwData->unk_10);
if (rwData->unk_10 > 20.0f) {
rwData->unk_10 -= 0.2f;
}
} else {
spD0 = phi_f16_2;
Camera_CalcAtDefault(camera, &sp9C, phi_f2_2, roData->interfaceFlags & NORMAL1_FLAG_0);
Camera_CalcAtDefault(camera, &sp9C, phi_f2, roData->interfaceFlags & NORMAL1_FLAG_0);
rwData->unk_10 = 120.0f;
}
phi_f16_2 = spD0;
OLib_Vec3fDiffToVecGeo(&spB4, &camera->at, &camera->eyeNext);
OLib_Vec3fDiffToVecGeo(&spB4, at, eyeNext);
if ((roData->interfaceFlags & NORMAL1_FLAG_7) && (rwData->unk_0A < 0)) {
if (camera->focalActor == &GET_PLAYER(camera->play)->actor) {
switch (((Player*)camera->focalActor)->transformation) {
case PLAYER_FORM_HUMAN:
phi_f16_2 = 66.0f;
spD0 = 66.0f;
break;
case PLAYER_FORM_DEKU:
phi_f16_2 = 66.0f;
break;
case PLAYER_FORM_ZORA:
phi_f16_2 = 115.0f;
spD0 = 66.0f;
break;
case PLAYER_FORM_GORON:
phi_f16_2 = 115.0f;
spD0 = 115.0f;
break;
case PLAYER_FORM_ZORA:
spD0 = 115.0f;
break;
case PLAYER_FORM_FIERCE_DEITY:
phi_f16_2 = roData->unk_04;
spD0 = roData->unk_04;
break;
default:
phi_f16_2 = roData->unk_04;
spD0 = roData->unk_04;
break;
}
}
phi_f0_4 = Camera_ClampDist2(camera, spB4.r, phi_f16_2, phi_f16_2, 0);
phi_f0_4 = Camera_ClampDist2(camera, spB4.r, spD0, spD0, 0);
} else if (roData->interfaceFlags & NORMAL1_FLAG_7) {
phi_f0_4 = Camera_ClampDist2(camera, spB4.r, roData->unk_04, roData->unk_08, 1);
} else {
@ -2245,68 +2209,67 @@ s32 Camera_Normal1(Camera* camera) {
camera->dist = spB4.r = phi_f0_4;
if (D_801EDC30[camera->camId].unk_64 != 0) {
//! FAKE
if (phi_v1_2) {}
spB4.pitch =
Camera_ScaledStepToCeilS(D_801EDC30[camera->camId].pitch, sp9C.pitch, 1.0f / camera->yawUpdateRateInv, 5);
spB4.yaw =
Camera_ScaledStepToCeilS(D_801EDC30[camera->camId].yaw, sp9C.yaw, 1.0f / camera->yawUpdateRateInv, 5);
} else {
if (roData->interfaceFlags & NORMAL1_FLAG_5) {
} else if (roData->interfaceFlags & NORMAL1_FLAG_5) {
spB4.yaw = sp9C.yaw;
spB4.pitch = sp9C.pitch;
camera->animState = 20;
} else if (D_801ED920 != NULL) {
VecGeo sp74;
s16 sp72;
f32 sp6C;
//! FAKE:
if (1) {}
temp = &D_801ED920->world.pos;
OLib_Vec3fDiffToVecGeo(&sp74, &sp40->pos, temp);
sp72 = sp40->rot.y - sp74.yaw;
// Interface and shrink-window flags
if ((roData->interfaceFlags & 0xFF00) == 0xFF00) {
sp6C = 1.0f;
} else {
sp6C = 1.0f - (ABS(sp72) / 10922.0f);
}
if (ABS((s16)(sp9C.yaw - sp74.yaw)) < 0x4000) {
sp74.yaw += 0x8000;
}
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || !func_800CB924(camera)) {
spB4.yaw =
Camera_CalcDefaultYaw(camera, sp9C.yaw, (s16)(sp40->rot.y - (s16)(sp72 * sp6C)), roData->unk_14, spC0);
}
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || (camera->speedRatio < 0.01f)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch,
roData->unk_20 + (s16)((roData->unk_20 - sp74.pitch) * sp6C * 0.75f),
rwData->unk_08);
}
} else if (roData->interfaceFlags & NORMAL1_FLAG_1) {
VecGeo sp64;
if ((camera->speedRatio > 0.1f) || (rwData->unk_0A > 0x4B0)) {
OLib_Vec3fToVecGeo(&sp64, &camera->unk_0F0);
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || !func_800CB924(camera)) {
spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, sp64.yaw, roData->unk_14, spC0);
}
if (!(roData->interfaceFlags & NORMAL1_FLAG_3)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08);
} else if ((camera->unk_0F0.y > 0.0f) && func_800CB924(camera)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08);
}
} else {
spB4.yaw = sp9C.yaw;
spB4.pitch = sp9C.pitch;
camera->animState = 20;
} else {
if (D_801ED920 != NULL) {
//! FAKE
if (sp40) {}
new_var3 = &D_801ED920->world.pos;
OLib_Vec3fDiffToVecGeo(&sp74, &sp40->pos, new_var3); // TODO: arg0 & arg1 swapped
sp72 = sp40->rot.y - sp74.yaw;
// Interface and shrink-window flags
if ((roData->interfaceFlags & 0xFF00) == 0xFF00) {
sp6C = 1.0f;
} else {
sp6C = 1.0f - (ABS(sp72) / 10922.0f);
}
if (ABS((s16)(sp9C.yaw - sp74.yaw)) < 0x4000) {
sp74.yaw += 0x8000;
}
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || !func_800CB924(camera)) {
spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, (s16)(sp40->rot.y - (s16)(sp72 * sp6C)),
roData->unk_14, spC0);
}
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || (camera->speedRatio < 0.01f)) {
spB4.pitch = Camera_CalcDefaultPitch(
camera, sp9C.pitch, roData->unk_20 + (s16)((roData->unk_20 - sp74.pitch) * sp6C * 0.75f),
rwData->unk_08);
}
dummy:; // TODO: Will this be needed?
} else if (roData->interfaceFlags & NORMAL1_FLAG_1) {
if ((camera->speedRatio > 0.1f) || (rwData->unk_0A > 0x4B0)) {
OLib_Vec3fToVecGeo(&sp64, &camera->unk_0F0);
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || !func_800CB924(camera)) {
spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, sp64.yaw, roData->unk_14, spC0);
}
if (!(roData->interfaceFlags & NORMAL1_FLAG_3)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08);
} else if ((camera->unk_0F0.y > 0.0f) && func_800CB924(camera)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08);
}
} else {
spB4.yaw = sp9C.yaw;
spB4.pitch = sp9C.pitch;
dummy4:; // TODO: Will this be needed?
}
} else {
spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, sp40->rot.y, roData->unk_14, spC0);
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || (camera->speedRatio < 0.1f)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08);
}
}
}
} else {
spB4.yaw = Camera_CalcDefaultYaw(camera, sp9C.yaw, sp40->rot.y, roData->unk_14, spC0);
if (!(roData->interfaceFlags & NORMAL1_FLAG_3) || (camera->speedRatio < 0.1f)) {
spB4.pitch = Camera_CalcDefaultPitch(camera, sp9C.pitch, roData->unk_20, rwData->unk_08);
}
}
@ -2320,64 +2283,65 @@ s32 Camera_Normal1(Camera* camera) {
spB4.pitch = -0x36B0;
}
OLib_AddVecGeoToVec3f(&camera->eyeNext, &camera->at, &spB4);
if ((camera->status == CAM_STATUS_ACTIVE) && !(roData->interfaceFlags & NORMAL1_FLAG_4) && (spC4 <= 0.9f)) {
OLib_AddVecGeoToVec3f(eyeNext, at, &spB4);
if ((camera->status == CAM_STATUS_ACTIVE) && !(roData->interfaceFlags & NORMAL1_FLAG_4) && (spC4 <= 0.9f)) {
if (!func_800CBA7C(camera)) {
CollisionPoly* sp60;
s32 sp5C; // bgId
f32 sp58;
if (func_800CBA7C(camera) == 0) {
Camera_CalcDefaultSwing(camera, &spB4, &sp9C, roData->unk_04, roData->unk_0C, &D_801EDC30[camera->camId],
&rwData->unk_0C);
sp58 = BgCheck_CameraRaycastFloor2(&camera->play->colCtx, &sp60, &sp5C, sp4C);
sp58 = BgCheck_CameraRaycastFloor2(&camera->play->colCtx, &sp60, &sp5C, eye);
if ((roData->interfaceFlags & NORMAL1_FLAG_3) && func_800CB924(camera)) {
phi_f16_2 = 25.0f;
spD0 = 25.0f;
} else {
phi_f16_2 = 5.0f;
spD0 = 5.0f;
}
spD0 = sp4C->y; // TODO: another fake reuse of temp
phi_f0_4 = sp4C->y;
phi_f0_4 -= sp58;
// new_var2 = sp4C->y;
if ((sp58 != BGCHECK_Y_MIN) && (phi_f0_4 < phi_f16_2)) {
sp4C->y = sp58 + phi_f16_2;
} else if ((camera->waterYPos != camera->focalActorFloorHeight) && ((spD0 - camera->waterYPos) < 5.0f) &&
((spD0 - camera->waterYPos) > -5.0f)) {
sp4C->y = camera->waterYPos + 5.0f;
phi_f2 = eye->y - sp58;
if ((sp58 != BGCHECK_Y_MIN) && (phi_f2 < spD0)) {
eye->y = sp58 + spD0;
} else if ((camera->waterYPos != camera->focalActorFloorHeight) && ((eye->y - camera->waterYPos) < 5.0f) &&
((eye->y - camera->waterYPos) > -5.0f)) {
eye->y = camera->waterYPos + 5.0f;
}
}
OLib_Vec3fDiffToVecGeo(&spAC, sp4C, &camera->at);
OLib_Vec3fDiffToVecGeo(&spAC, eye, at);
camera->inputDir.x = spAC.pitch;
camera->inputDir.y = spAC.yaw;
camera->inputDir.z = 0;
if (gSaveContext.save.saveInfo.playerData.health < 17) {
phi_v1_2 = (camera->play->state.frames << 0x18);
phi_v1_2 = (s16)((phi_v1_2 >> 0x15) & 0xFD68);
// crit wiggle
if (gSaveContext.save.saveInfo.playerData.health <= 0x10) {
phi_v1_2 = ((s32)(camera->play->state.frames << 0x18) >> 0x15) & 0xFD68;
camera->inputDir.y += phi_v1_2;
}
} else {
D_801EDC30[camera->camId].swingUpdateRate = roData->unk_0C;
D_801EDC30[camera->camId].unk_64 = 0;
sUpdateCameraDirection = false;
*sp4C = camera->eyeNext;
*eye = *eyeNext;
}
// Everything below OLib_Vec3fDiffToVecGeo matches except stack pointers
// )
phi_f2 = (gSaveContext.save.saveInfo.playerData.health <= 16) ? 0.8f : 1.0f;
phi_f2 = (gSaveContext.save.saveInfo.playerData.health <= 0x10) ? 0.8f : 1.0f;
camera->fov = Camera_ScaledStepToCeilF(roData->unk_18 * phi_f2, camera->fov, camera->fovUpdateRate, 0.1f);
if (roData->interfaceFlags & NORMAL1_FLAG_2) {
spD4 = Math_SinS((s16)(spA4.yaw - spB4.yaw));
camera->roll = Camera_ScaledStepToCeilS(((Rand_ZeroOne() - 0.5f) * 500.0f * camera->speedRatio) +
(spD4 * spD4 * spD4 * 10000.0f),
rand = Rand_ZeroOne() - 0.5f;
camera->roll = Camera_ScaledStepToCeilS((rand * 500.0f * camera->speedRatio) + (spD4 * spD4 * spD4 * 10000.0f),
camera->roll, 0.1f, 5);
} else {
if (gSaveContext.save.saveInfo.playerData.health <= 16) {
phi_a0 = (Rand_ZeroOne() - 0.5f) * 100.0f * camera->speedRatio;
if (gSaveContext.save.saveInfo.playerData.health <= 0x10) {
rand = Rand_ZeroOne() - 0.5f;
phi_v1_2 = rand * 100.0f * camera->speedRatio;
} else {
phi_a0 = 0.0f;
phi_v1_2 = 0.0f;
}
camera->roll = Camera_ScaledStepToCeilS(phi_a0, camera->roll, 0.2f, 5);
camera->roll = Camera_ScaledStepToCeilS(phi_v1_2, camera->roll, 0.2f, 5);
}
camera->atLerpStepScale = Camera_ClampLerpScale(camera, roData->unk_1C);
@ -2385,9 +2349,6 @@ s32 Camera_Normal1(Camera* camera) {
return true;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal1.s")
#endif
/**
* Unused Camera RemoteBomb Setting