mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp
synced 2025-10-06 00:22:39 +02:00
75 lines
2.6 KiB
C
75 lines
2.6 KiB
C
![]() |
#include "patches.h"
|
||
|
#include "transform_ids.h"
|
||
|
#include "overlays/actors/ovl_En_Pamera/z_en_pamera.h"
|
||
|
|
||
|
extern void EnPamera_Draw(Actor* thisx, PlayState* play);
|
||
|
extern void func_80BD9E88(EnPamera* this);
|
||
|
extern void func_80BD9EE0(EnPamera* this);
|
||
|
extern void func_80BDA038(EnPamera* this);
|
||
|
extern void func_80BDA0A0(EnPamera* this);
|
||
|
extern void func_80BDA170(EnPamera* this);
|
||
|
extern void func_80BDA288(EnPamera* this);
|
||
|
extern void func_80BD994C(EnPamera* this, PlayState* play);
|
||
|
extern void EnPamera_HandleDialogue(EnPamera* this, PlayState* play);
|
||
|
extern void func_80BD9904(EnPamera* this);
|
||
|
extern void func_80BD9E60(EnPamera* this);
|
||
|
|
||
|
// @recomp Skip interpolation when the animations change during the cutscene, as the
|
||
|
// animation changes are meant to happen at the same time as the camera cuts.
|
||
|
RECOMP_PATCH s32 func_80BD9CB8(EnPamera* this, PlayState* play) {
|
||
|
s32 cueChannel;
|
||
|
|
||
|
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_485)) {
|
||
|
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_485);
|
||
|
if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
|
||
|
this->cueId = play->csCtx.actorCues[cueChannel]->id;
|
||
|
|
||
|
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||
|
case 1:
|
||
|
func_80BD9E88(this);
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
if (this->actor.draw == NULL) {
|
||
|
this->actor.draw = EnPamera_Draw;
|
||
|
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
|
||
|
}
|
||
|
func_80BD9EE0(this);
|
||
|
break;
|
||
|
|
||
|
case 3:
|
||
|
func_80BDA038(this);
|
||
|
break;
|
||
|
|
||
|
case 4:
|
||
|
func_80BDA0A0(this);
|
||
|
break;
|
||
|
|
||
|
case 5:
|
||
|
func_80BDA170(this);
|
||
|
break;
|
||
|
|
||
|
case 6:
|
||
|
func_80BDA288(this);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
actor_set_interpolation_skipped(&this->actor);
|
||
|
}
|
||
|
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||
|
this->setupFunc(this, play);
|
||
|
return true;
|
||
|
}
|
||
|
if ((play->csCtx.state == CS_STATE_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20)) {
|
||
|
if ((this->actionFunc != func_80BD994C) && (this->actionFunc != EnPamera_HandleDialogue)) {
|
||
|
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||
|
func_80BD9904(this);
|
||
|
func_80BD9E60(this);
|
||
|
}
|
||
|
}
|
||
|
this->cueId = 99;
|
||
|
return false;
|
||
|
}
|