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>
This commit is contained in:
Zelllll
2025-11-04 11:29:28 -06:00
committed by GitHub
parent 0f778a9749
commit aca7849a0f
2 changed files with 23 additions and 11 deletions

View File

@@ -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;
}
}
}

View File

@@ -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) {