From aca7849a0f4ba5dd2e431544cb6b4ceede5d1d21 Mon Sep 17 00:00:00 2001 From: Zelllll <56516451+Zelllll@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:29:28 -0600 Subject: [PATCH] Add ACTOR_FLAG_FREEZE_EXCEPTION support (#170) * Add ACTOR_FLAG_FREEZE_EXCEPTION support * format * fixed * fix cutscene manager issue --------- Co-authored-by: Yanis002 <35189056+Yanis002@users.noreply.github.com> --- src/code/cutscene_manager.c | 16 +++++++++------- src/code/z_actor.c | 18 ++++++++++++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/code/cutscene_manager.c b/src/code/cutscene_manager.c index 0fafd2b1a..55461b1f6 100644 --- a/src/code/cutscene_manager.c +++ b/src/code/cutscene_manager.c @@ -186,7 +186,7 @@ s16 CutsceneManager_MarkNextCutscenes(void) { s32 j; s32 count = 0; s16 csIdMax = CS_ID_NONE; - s16 priorityMax = SDC_MAX; // lower number means higher priority + s16 priorityMax = SHT_MAX; // lower number means higher priority s16 csId; s16 priority; @@ -540,12 +540,14 @@ s16 CutsceneManager_FindEntranceCsId(void) { s32 csId; for (csId = 0; csId < sSceneCutsceneCount; csId++) { - //! FAKE: - if ((sSceneCutsceneList[csId].scriptIndex != CS_SCRIPT_ID_NONE) && - (sSceneCutsceneList[csId].scriptIndex < (play = sCutsceneMgr.play)->csCtx.scriptListCount) && - (sCutsceneMgr.play->spawn == - sCutsceneMgr.play->csCtx.scriptList[sSceneCutsceneList[csId].scriptIndex].spawn)) { - return csId; + if (sSceneCutsceneList[csId].scriptIndex != CS_SCRIPT_ID_NONE) { + PlayState* play = sCutsceneMgr.play; + + if ((sSceneCutsceneList[csId].scriptIndex < play->csCtx.scriptListCount) && + (sCutsceneMgr.play->spawn == + sCutsceneMgr.play->csCtx.scriptList[sSceneCutsceneList[csId].scriptIndex].spawn)) { + return csId; + } } } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 8b3317529..9d1c46310 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2479,10 +2479,20 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } else if (!Object_IsLoaded(&play->objectCtx, actor->objectSlot)) { Actor_Kill(actor); actor = actor->next; - } else if ((freezeExceptionFlag != 0 && !(actor->flags & freezeExceptionFlag)) || - (freezeExceptionFlag == 0 && canFreezeCategory && - !((sp74 == actor) || (player->naviActor == actor) || (player->heldActor == actor) || - (actor->parent == &player->actor)))) { + } else if +#if ENABLE_CUTSCENE_IMPROVEMENTS + ((freezeExceptionFlag && !(actor->flags & freezeExceptionFlag)) || + ((!freezeExceptionFlag) && (!(actor->flags & ACTOR_FLAG_FREEZE_EXCEPTION)) && canFreezeCategory && + (actor != sp74) && (actor != player->heldActor) && (actor != player->naviActor) && + (actor->parent != &player->actor))) + +#else + ((freezeExceptionFlag != 0 && !(actor->flags & freezeExceptionFlag)) || + (freezeExceptionFlag == 0 && canFreezeCategory && + !((sp74 == actor) || (player->naviActor == actor) || (player->heldActor == actor) || + (actor->parent == &player->actor)))) +#endif + { CollisionCheck_ResetDamage(&actor->colChkInfo); actor = actor->next; } else if (actor->update == NULL) {