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