summaryrefslogtreecommitdiff
path: root/soh/src
diff options
context:
space:
mode:
authorfrizzle101101 <aaronfritz96@gmail.com>2022-12-12 15:31:33 -0500
committerGitHub <noreply@github.com>2022-12-12 15:31:33 -0500
commitcb4a0aa21b31a6f00451ccff1b78c5ea673d7abc (patch)
tree7fff28cfc0533dd1cf0b87b6a3d9162626c7f2e7 /soh/src
parente4ebdf76d96f37da069abcc81694e4840c84c91c (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')
-rw-r--r--soh/src/code/z_camera.c12
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);