summaryrefslogtreecommitdiff
path: root/soh/src
diff options
context:
space:
mode:
authorAdam Bird <Archez@users.noreply.github.com>2023-10-30 11:55:26 -0400
committerGitHub <noreply@github.com>2023-10-30 10:55:26 -0500
commit671ce062d0eebeae7d02c126a82dd07dd7092c2a (patch)
tree5870e3d2a33b59fc460a5a326bd3d291a6a984e0 /soh/src
parentdab070a8a138e3fb0b04dbd3ff81a7f4b7794d9b (diff)
improve free camera reset (#3225)
Diffstat (limited to 'soh/src')
-rw-r--r--soh/src/code/z_camera.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/soh/src/code/z_camera.c b/soh/src/code/z_camera.c
index 783731506..a177e29e7 100644
--- a/soh/src/code/z_camera.c
+++ b/soh/src/code/z_camera.c
@@ -2138,8 +2138,6 @@ s32 Camera_Parallel1(Camera* camera) {
OLib_Vec3fDiffToVecSphGeo(&atToEyeDir, at, eye);
OLib_Vec3fDiffToVecSphGeo(&atToEyeNextDir, at, eyeNext);
- camera->play->manualCamera = false;
-
switch (camera->animState) {
case 0:
case 0xA:
@@ -7888,6 +7886,15 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 flags) {
break;
}
}
+
+ // Clear free camera if an action is performed that would move the camera (targeting, first person, talking)
+ if (CVarGetInteger("gFreeCamera", 0) && SetCameraManual(camera) == 1 &&
+ ((mode >= CAM_MODE_TARGET && mode <= CAM_MODE_BATTLE) ||
+ (mode >= CAM_MODE_FIRSTPERSON && mode <= CAM_MODE_CLIMBZ) || mode == CAM_MODE_HANGZ ||
+ mode == CAM_MODE_FOLLOWBOOMERANG)) {
+ camera->play->manualCamera = false;
+ }
+
func_8005A02C(camera);
camera->mode = mode;
return 0x80000000 | mode;