Fixed interpolation glitch with Gibdo mask in Pamela cutscene

This commit is contained in:
Reonu
2025-08-02 22:01:29 +01:00
parent 3aea1bee48
commit 8e08d4d685

View File

@@ -13,6 +13,7 @@
#include "overlays/actors/ovl_En_Honotrap/z_en_honotrap.h"
#include "overlays/actors/ovl_En_Tanron1/z_en_tanron1.h"
#include "overlays/actors/ovl_En_Kusa2/z_en_kusa2.h"
#include "overlays/actors/ovl_Dm_Char05/z_dm_char05.h"
// Decomp renames, TODO update decomp and remove these
#define EnHonotrap_FlameGroup func_8092F878
@@ -1373,3 +1374,26 @@ RECOMP_PATCH void func_80A5E6F0(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
extern void func_80AADF54(PlayState* play, DmChar05* this);
// @recomp Patched to avoid an interpolation glitch in Pamela's dad's cutscene
// that happens when the mask is meant to teleport offscreen.
RECOMP_PATCH void func_80AADB4C(Actor* thisx, PlayState* play) {
DmChar05* this = (DmChar05*)thisx;
if (this->unk_18E == 0) {
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id != 1)) {
// @recomp During this cue the mask does nothing other than teleport offscreen and stay still,
// so we can just skip interpolation the entire time.
if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id == 3) {
actor_set_interpolation_skipped(thisx);
}
Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, NULL, &this->actor);
}
} else if (this->unk_18E == 1) {
func_80AADF54(play, this);
}
}