diff options
| author | frizzle101101 <aaronfritz96@gmail.com> | 2022-12-12 15:31:33 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-12 15:31:33 -0500 |
| commit | cb4a0aa21b31a6f00451ccff1b78c5ea673d7abc (patch) | |
| tree | 7fff28cfc0533dd1cf0b87b6a3d9162626c7f2e7 /soh/src/code | |
| parent | e4ebdf76d96f37da069abcc81694e4840c84c91c (diff) | |
added fix option to fix camera swing; (#1992)
* added fix option to fix camera swing; Fixes camera getting stuck on collision when standing still, also fixes slight shift back in camera when stop moving
* add option to fix hang off ledge swing rate; Fixes camera swing rate when player falls of a ledge and camera swings around
* adding camera fixes to preset list
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/z_camera.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/soh/src/code/z_camera.c b/soh/src/code/z_camera.c index af343d8fc..13c1f3dab 100644 --- a/soh/src/code/z_camera.c +++ b/soh/src/code/z_camera.c @@ -1316,6 +1316,7 @@ s16 Camera_CalcDefaultYaw(Camera* camera, s16 cur, s16 target, f32 arg3, f32 acc return cur + (s16)(angDelta * velocity * velFactor * yawUpdRate); } +//Follow player with collision void func_80046E20(Camera* camera, VecSph* eyeAdjustment, f32 minDist, f32 arg3, f32* arg4, SwingAnimation* anim) { static CamColChk atEyeColChk; static CamColChk eyeAtColChk; @@ -1699,6 +1700,7 @@ s32 Camera_Normal1(Camera* camera) { Camera_Vec3fVecSphGeoAdd(eyeNext, at, &eyeAdjustment); if ((camera->status == CAM_STAT_ACTIVE) && (!(norm1->interfaceFlags & 0x10))) { anim->swingYawTarget = BINANG_ROT180(camera->playerPosRot.rot.y); + if (!CVar_GetS32("gFixCameraSwing", 0)) { if (anim->startSwingTimer > 0) { func_80046E20(camera, &eyeAdjustment, norm1->distMin, norm1->unk_0C, &sp98, &anim->swing); } else { @@ -1712,7 +1714,13 @@ s32 Camera_Normal1(Camera* camera) { } anim->swing.unk_18 = 0; } - + } else { + if (anim->startSwingTimer <= 0) { + anim->swing.swingUpdateRate = camera->yawUpdateRateInv = norm1->unk_0C * 2.0f; + anim->swing.unk_18 = 0; + } + func_80046E20(camera, &eyeAdjustment, norm1->distMin, norm1->unk_0C, &sp98, &anim->swing); + } if (anim->swing.unk_18 != 0) { camera->inputDir.y = Camera_LERPCeilS(camera->inputDir.y + BINANG_SUB(BINANG_ROT180(anim->swing.unk_16), camera->inputDir.y), @@ -4710,7 +4718,7 @@ s32 Camera_Unique1(Camera* camera) { anim->timer--; } - sp8C.yaw = Camera_LERPFloorS(anim->yawTarget, eyeNextAtOffset.yaw, 0.5f, 0x2710); + sp8C.yaw = Camera_LERPFloorS(anim->yawTarget, eyeNextAtOffset.yaw, 0.5f, CVar_GetS32("gFixHangingLedgeSwingRate", 0) ? 0xA : 0x2710); Camera_Vec3fVecSphGeoAdd(eyeNext, at, &sp8C); *eye = *eyeNext; Camera_BGCheck(camera, at, eye); |
