diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 16773cf8..99219872 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -74468,7 +74468,7 @@ Address,Quality,Size,Name 0x0000007100d6d35c,O,000056,_ZNK5uking3aoc15HardModeManager13nerfHpRestoreEPf 0x0000007100d6d394,O,000064,_ZNK5uking3aoc15HardModeManager13nerfHpRestoreEPi 0x0000007100d6d3d4,O,000060,_ZNK5uking3aoc15HardModeManager25modifyEnemyNoticeDurationEPf -0x0000007100d6d410,U,000304, +0x0000007100d6d410,O,000304,_ZN5uking3aoc15HardModeManager27shouldCreateLifeRecoverInfoEPN4ksys3act5ActorE 0x0000007100d6d540,O,006164,_ZN5uking3aoc15HardModeManager37shouldApplyMasterModeDamageMultiplierERKN4ksys3act20ActorConstDataAccessE 0x0000007100d6ed54,O,000040,_ZN5uking3aoc15HardModeManager10buffDamageERi 0x0000007100d6ed7c,O,000172,_ZN5uking3aoc15HardModeManager26loadIsLastPlayHardModeFlagEv diff --git a/src/Game/DLC/aocHardModeManager.cpp b/src/Game/DLC/aocHardModeManager.cpp index cf4233e0..f149265d 100644 --- a/src/Game/DLC/aocHardModeManager.cpp +++ b/src/Game/DLC/aocHardModeManager.cpp @@ -1,5 +1,7 @@ #include "Game/DLC/aocHardModeManager.h" #include +#include "KingSystem/ActorSystem/actActor.h" +#include "KingSystem/ActorSystem/actActorUtil.h" #include "KingSystem/ActorSystem/actTag.h" #include "KingSystem/Utils/InitTimeInfo.h" @@ -75,6 +77,26 @@ void HardModeManager::modifyEnemyNoticeDuration(f32* value) const { *value = sead::Mathf::max(*value * getMultiplier(MultiplierType::EnemyNoticeDuration), 0); } +bool HardModeManager::shouldCreateLifeRecoverInfo(ksys::act::Actor* actor) { + // Health regen should only apply to enemy actors. + if (!ksys::act::isEnemyProfile(actor)) + return false; + + // But not to wolves or bears... + if (ksys::act::isWolfOrBear(actor)) + return false; + + // and not to Dark Beast Ganon... + if (actor->getName() == "Enemy_GanonBeast") + return false; + + // and not to enemy swarms... + if (actor->getProfile() == "EnemySwarm") + return false; + + return actor->getMaxLife() > 1; +} + bool HardModeManager::shouldApplyMasterModeDamageMultiplier( const ksys::act::ActorConstDataAccess& accessor) { if (!accessor.hasProc()) diff --git a/src/Game/DLC/aocHardModeManager.h b/src/Game/DLC/aocHardModeManager.h index 26127c2a..49e7e1c0 100644 --- a/src/Game/DLC/aocHardModeManager.h +++ b/src/Game/DLC/aocHardModeManager.h @@ -40,6 +40,7 @@ public: void nerfHpRestore(s32* hp) const; void modifyEnemyNoticeDuration(f32* value) const; + static bool shouldCreateLifeRecoverInfo(ksys::act::Actor* actor); static bool shouldApplyMasterModeDamageMultiplier(const ksys::act::ActorConstDataAccess& accessor); static void buffDamage(s32& damage);