mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp.git
synced 2025-10-30 08:03:03 +00:00
WIP fix for pamela's dad anims
This commit is contained in:
parent
8e08d4d685
commit
14b3492792
3 changed files with 154 additions and 0 deletions
|
|
@ -14,3 +14,13 @@ symbols = [
|
|||
{ name = "FileSelect_Init_NORELOCATE", vram = 0x80813C98 },
|
||||
{ name = "DayTelop_Init_NORELOCATE", vram = 0x80815820 },
|
||||
]
|
||||
|
||||
[[section]]
|
||||
name = "..ovl_En_Hg"
|
||||
rom = 0x01034170
|
||||
vram = 0x80BCF1D0
|
||||
size = 0x10E0
|
||||
|
||||
symbols = [
|
||||
{ name = "sPamelasFatherAnimationInfo", vram = 0x80bd0008 },
|
||||
]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
typedef enum PamelasFatherGibdoLimb {
|
||||
/* 0x00 */ PAMELAS_FATHER_GIBDO_LIMB_NONE,
|
||||
/* 0x01 */ PAMELAS_FATHER_GIBDO_LIMB_ROOT,
|
||||
/* 0x02 */ PAMELAS_FATHER_GIBDO_LIMB_ABDOMEN,
|
||||
/* 0x03 */ PAMELAS_FATHER_GIBDO_LIMB_CHEST,
|
||||
/* 0x04 */ PAMELAS_FATHER_GIBDO_LIMB_LEFT_UPPER_ARM,
|
||||
/* 0x05 */ PAMELAS_FATHER_GIBDO_LIMB_LEFT_FOREARM,
|
||||
/* 0x06 */ PAMELAS_FATHER_GIBDO_LIMB_LEFT_HAND,
|
||||
/* 0x07 */ PAMELAS_FATHER_GIBDO_LIMB_RIGHT_UPPER_ARM,
|
||||
/* 0x08 */ PAMELAS_FATHER_GIBDO_LIMB_RIGHT_FOREARM,
|
||||
/* 0x09 */ PAMELAS_FATHER_GIBDO_LIMB_RIGHT_HAND,
|
||||
/* 0x0A */ PAMELAS_FATHER_GIBDO_LIMB_EYEBROWS,
|
||||
/* 0x0B */ PAMELAS_FATHER_GIBDO_LIMB_HEAD,
|
||||
/* 0x0C */ PAMELAS_FATHER_GIBDO_LIMB_PELVIS,
|
||||
/* 0x0D */ PAMELAS_FATHER_GIBDO_LIMB_LEFT_THIGH,
|
||||
/* 0x0E */ PAMELAS_FATHER_GIBDO_LIMB_LEFT_SHIN,
|
||||
/* 0x0F */ PAMELAS_FATHER_GIBDO_LIMB_LEFT_FOOT,
|
||||
/* 0x10 */ PAMELAS_FATHER_GIBDO_LIMB_RIGHT_THIGH,
|
||||
/* 0x11 */ PAMELAS_FATHER_GIBDO_LIMB_RIGHT_SHIN,
|
||||
/* 0x12 */ PAMELAS_FATHER_GIBDO_LIMB_RIGHT_FOOT,
|
||||
/* 0x13 */ PAMELAS_FATHER_GIBDO_LIMB_MAX
|
||||
} PamelasFatherGibdoLimb;
|
||||
|
|
@ -1397,3 +1397,125 @@ RECOMP_PATCH void func_80AADB4C(Actor* thisx, PlayState* play) {
|
|||
func_80AADF54(play, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#include "overlays/actors/ovl_En_Hg/z_en_hg.h"
|
||||
|
||||
extern AnimationInfo sPamelasFatherAnimationInfo[];
|
||||
extern void EnHg_SetupWait(EnHg* this);
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ HG_ANIM_IDLE,
|
||||
/* 1 */ HG_ANIM_LURCH_FORWARD,
|
||||
/* 2 */ HG_ANIM_RECOIL,
|
||||
/* 3 */ HG_ANIM_LEAN_FORWARD,
|
||||
/* 4 */ HG_ANIM_REACH_FORWARD,
|
||||
/* 5 */ HG_ANIM_CURL_UP,
|
||||
/* 6 */ HG_ANIM_CROUCHED_PANIC,
|
||||
/* 7 */ HG_ANIM_PANIC,
|
||||
/* 8 */ HG_ANIM_MAX
|
||||
} HgAnimation;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ HG_CS_FIRST_ENCOUNTER,
|
||||
/* 1 */ HG_CS_GET_MASK,
|
||||
/* 2 */ HG_CS_SUBSEQUENT_ENCOUNTER,
|
||||
/* 3 */ HG_CS_SONG_OF_HEALING
|
||||
} HgCsIndex;
|
||||
|
||||
void EnHg_HandleCutscene(EnHg* this, PlayState* play) {
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_484)) {
|
||||
s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_484);
|
||||
|
||||
if (this->csIdList[3] != play->csCtx.actorCues[cueChannel]->id) {
|
||||
this->csIdList[3] = play->csCtx.actorCues[cueChannel]->id;
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
case 1:
|
||||
this->animIndex = HG_ANIM_IDLE;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_IDLE);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->csIdList[2] = 0;
|
||||
this->animIndex = HG_ANIM_LEAN_FORWARD;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_LEAN_FORWARD);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->csIdList[2] = 0;
|
||||
this->animIndex = HG_ANIM_CURL_UP;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_CURL_UP);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
this->csIdList[2] = 0;
|
||||
this->animIndex = HG_ANIM_PANIC;
|
||||
if ((this->csIdIndex == HG_CS_GET_MASK) || (this->csIdIndex == HG_CS_SONG_OF_HEALING)) {
|
||||
Audio_PlaySfx_2(NA_SE_EN_HALF_REDEAD_TRANS);
|
||||
}
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_PANIC);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
this->animIndex = HG_ANIM_LURCH_FORWARD;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_LURCH_FORWARD);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
SET_WEEKEVENTREG(WEEKEVENTREG_75_20);
|
||||
Actor_Kill(&this->actor);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
actor_set_interpolation_skipped(&this->actor);
|
||||
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
switch (this->animIndex) {
|
||||
case HG_ANIM_LEAN_FORWARD:
|
||||
this->animIndex = HG_ANIM_REACH_FORWARD;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_REACH_FORWARD);
|
||||
break;
|
||||
|
||||
case HG_ANIM_CURL_UP:
|
||||
this->animIndex = HG_ANIM_CROUCHED_PANIC;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sPamelasFatherAnimationInfo, HG_ANIM_CROUCHED_PANIC);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
actor_set_interpolation_skipped(&this->actor);
|
||||
}
|
||||
|
||||
switch (this->animIndex) {
|
||||
case HG_ANIM_LEAN_FORWARD:
|
||||
case HG_ANIM_REACH_FORWARD:
|
||||
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG);
|
||||
break;
|
||||
|
||||
case HG_ANIM_CURL_UP:
|
||||
case HG_ANIM_CROUCHED_PANIC:
|
||||
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
|
||||
break;
|
||||
|
||||
case HG_ANIM_PANIC:
|
||||
if ((this->csIdIndex == HG_CS_FIRST_ENCOUNTER) || (this->csIdIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) {
|
||||
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
return;
|
||||
|
||||
} else if (play->csCtx.state == CS_STATE_IDLE) {
|
||||
EnHg_SetupWait(this);
|
||||
}
|
||||
|
||||
this->csIdList[3] = 99;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue