Fix custom tunics not updating on scene change (#6026)
This commit is contained in:
@@ -8,21 +8,8 @@ extern "C" {
|
||||
extern PlayState* gPlayState;
|
||||
}
|
||||
|
||||
static void UpdateCustomSkeletonOnEquipTunic() {
|
||||
if (!GameInteractor::IsSaveLoaded() || gPlayState == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
static int8_t previousTunic = -1;
|
||||
int8_t equippedTunic = CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC);
|
||||
if (equippedTunic != previousTunic) {
|
||||
SOH::SkeletonPatcher::UpdateCustomSkeletons();
|
||||
previousTunic = equippedTunic;
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdateCustomSkeletonOnAssetAltChange() {
|
||||
if (!GameInteractor::IsSaveLoaded() || gPlayState == NULL) {
|
||||
static void UpdateCustomSkeleton() {
|
||||
if (!GameInteractor::IsSaveLoaded(true) || gPlayState == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -30,8 +17,9 @@ static void UpdateCustomSkeletonOnAssetAltChange() {
|
||||
}
|
||||
|
||||
static void RegisterCustomSkeletons() {
|
||||
COND_HOOK(OnGameFrameUpdate, true, UpdateCustomSkeletonOnEquipTunic);
|
||||
COND_HOOK(OnAssetAltChange, true, UpdateCustomSkeletonOnAssetAltChange);
|
||||
COND_HOOK(OnAssetAltChange, true, UpdateCustomSkeleton);
|
||||
COND_HOOK(OnLinkSkeletonInit, true, SOH::SkeletonPatcher::UpdateCustomSkeletons);
|
||||
COND_HOOK(OnLinkEquipmentChange, true, SOH::SkeletonPatcher::UpdateCustomSkeletons);
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(RegisterCustomSkeletons);
|
||||
|
||||
@@ -22,6 +22,8 @@ DEFINE_HOOK(OnSceneFlagUnset, (int16_t sceneNum, int16_t flagType, int16_t flag)
|
||||
DEFINE_HOOK(OnFlagSet, (int16_t flagType, int16_t flag));
|
||||
DEFINE_HOOK(OnFlagUnset, (int16_t flagType, int16_t flag));
|
||||
DEFINE_HOOK(OnSceneSpawnActors, ());
|
||||
DEFINE_HOOK(OnLinkSkeletonInit, ());
|
||||
DEFINE_HOOK(OnLinkEquipmentChange, ());
|
||||
DEFINE_HOOK(OnPlayerUpdate, ());
|
||||
DEFINE_HOOK(OnSetDoAction, (uint16_t action));
|
||||
DEFINE_HOOK(OnPlayerSfx, (u16 sfxId));
|
||||
|
||||
@@ -86,6 +86,14 @@ void GameInteractor_ExecuteOnSceneSpawnActors() {
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnSceneSpawnActors>();
|
||||
}
|
||||
|
||||
void GameInteractor_ExecuteOnLinkSkeletonInit() {
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnLinkSkeletonInit>();
|
||||
}
|
||||
|
||||
void GameInteractor_ExecuteOnLinkEquipmentChange() {
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnLinkEquipmentChange>();
|
||||
}
|
||||
|
||||
void GameInteractor_ExecuteOnPlayerUpdate() {
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnPlayerUpdate>();
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ void GameInteractor_ExecuteOnSceneFlagUnset(int16_t sceneNum, int16_t flagType,
|
||||
void GameInteractor_ExecuteOnFlagSet(int16_t flagType, int16_t flag);
|
||||
void GameInteractor_ExecuteOnFlagUnset(int16_t flagType, int16_t flag);
|
||||
void GameInteractor_ExecuteOnSceneSpawnActors();
|
||||
void GameInteractor_ExecuteOnLinkSkeletonInit();
|
||||
void GameInteractor_ExecuteOnLinkEquipmentChange();
|
||||
void GameInteractor_ExecuteOnPlayerUpdate();
|
||||
void GameInteractor_ExecuteOnSetDoAction(uint16_t action);
|
||||
void GameInteractor_ExecuteOnPlayerSfx(u16 sfxId);
|
||||
|
||||
@@ -187,6 +187,8 @@ u8 gItemSlots[] = {
|
||||
void Inventory_ChangeEquipment(s16 equipment, u16 value) {
|
||||
gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.equips.equipment |= value << gEquipShifts[equipment];
|
||||
|
||||
GameInteractor_ExecuteOnLinkEquipmentChange();
|
||||
}
|
||||
|
||||
u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
|
||||
|
||||
@@ -1140,6 +1140,8 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade
|
||||
}
|
||||
|
||||
LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f);
|
||||
|
||||
GameInteractor_ExecuteOnLinkSkeletonInit();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user