From 2dc405b6af0cc700b7f3086aabb424bbdf98822d Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 21 Oct 2023 06:30:18 +1100 Subject: [PATCH] Match `Camera_Normal1` (#1446) * improve Camera_Normal1 * decompme * Match Camera_Normal1, thanks darkeye * use the pad --- src/code/z_camera.c | 329 +++++++++++++++++++------------------------- 1 file changed, 145 insertions(+), 184 deletions(-) diff --git a/src/code/z_camera.c b/src/code/z_camera.c index a9477231c8..6ff74e9df6 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -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