From ebcaddede413a93af8c63ba5a2a855282844be1f Mon Sep 17 00:00:00 2001 From: MysterD Date: Mon, 21 Feb 2022 18:15:05 -0800 Subject: [PATCH] Prevent multiple star cutscenes from causing a rare softlock --- src/game/camera.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/game/camera.c b/src/game/camera.c index 8c82adf64..bbd45b62f 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -394,6 +394,7 @@ struct CameraStoredInfo sCameraStoreCutscene; // first iteration of data u32 unused8032CFC0 = 0; struct Object *gCutsceneFocus = NULL; +const BehaviorScript *gCutsceneFocusBehavior = NULL; // other camera focuses? u32 unused8032CFC8 = 0; u32 unused8032CFCC = 0; @@ -3277,6 +3278,7 @@ void reset_camera(struct Camera *c) { gCutsceneObjSpawn = 0; gObjCutsceneDone = FALSE; gCutsceneFocus = NULL; + gCutsceneFocusBehavior = NULL; unused8032CFC8 = 0; unused8032CFCC = 0; gSecondCameraFocus = NULL; @@ -6944,6 +6946,7 @@ void start_object_cutscene(u8 cutscene, struct Object *o) { sObjectCutscene = cutscene; gRecentCutscene = 0; gCutsceneFocus = o; + gCutsceneFocusBehavior = o->behavior; gObjCutsceneDone = FALSE; } @@ -11295,9 +11298,14 @@ void play_cutscene(struct Camera *c) { gCameraMovementFlags &= ~CAM_MOVING_INTO_MODE; if (gCutsceneFocus != NULL) { - if (gCutsceneFocus->activeFlags == ACTIVE_FLAG_DEACTIVATED) { + if (gCutsceneFocus->activeFlags == ACTIVE_FLAG_DEACTIVATED || gCutsceneFocus->behavior != gCutsceneFocusBehavior) { gObjCutsceneDone = true; gTimeStopState = 0; + + sStatusFlags |= CAM_FLAG_SMOOTH_MOVEMENT; + gCutsceneTimer = CUTSCENE_STOP; + c->cutscene = 0; + return; } }