diff --git a/data/uking_functions.csv b/data/uking_functions.csv index bfd4066a..6417839f 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -6520,7 +6520,7 @@ 0x000000710011cd2c,AI_Action_EventOpenGetDemo::dtorDelete,52, 0x000000710011cd60,AI_Action_EventOpenGetDemo::init,8, 0x000000710011cd68,AI_Action_EventOpenGetDemo::enter,112, -0x000000710011cdd8,GameDataMgr::setBoolByIter,196, +0x000000710011cdd8,GameDataMgr::setBoolByIter,196,_ZN4ksys3gdt7Manager7setBoolEbNS0_10FlagHandleE 0x000000710011ce9c,AI_Action_EventOpenGetDemo::calc,240, 0x000000710011cf8c,AI_Action_EventOpenGetDemo::leave,68, 0x000000710011cfd0,AI_Action_EventOpenGetDemo::loadParams,108, @@ -72739,7 +72739,7 @@ 0x0000007100d6cd40,aoc2::Instance::dtorDelete,100,_ZN5uking4aoc218SingletonDisposer_D0Ev 0x0000007100d6cda4,aoc2::createInstance,136,_ZN5uking4aoc214createInstanceEPN4sead4HeapE 0x0000007100d6ce2c,aoc2::ctor,524,_ZN5uking4aoc2C1Ev -0x0000007100d6d038,aoc2::setAocHardModeEnabledFlag,96, +0x0000007100d6d038,aoc2::setAocHardModeEnabledFlag,96,_ZN5uking4aoc222setHardModeEnabledFlagEPN4ksys3gdt7Manager10ResetEventE 0x0000007100d6d098,aoc2::initGameDataIters,212,_ZN5uking4aoc215initFlagHandlesEPN4ksys3gdt7Manager11ReinitEventE 0x0000007100d6d16c,aoc2::dtor,228,_ZN5uking4aoc2D1Ev 0x0000007100d6d250,aoc2::dtorDelete,36,_ZN5uking4aoc2D0Ev @@ -72751,12 +72751,12 @@ 0x0000007100d6d410,sub_7100D6D410,304, 0x0000007100d6d540,aoc2::shouldApplyMasterModeDamageMultiplier,6164,_ZN5uking4aoc237shouldApplyMasterModeDamageMultiplierERKN4ksys3act20ActorConstDataAccessE 0x0000007100d6ed54,aoc2::buffDamage,40,_ZN5uking4aoc210buffDamageERi -0x0000007100d6ed7c,aoc2::initHardModeFlag,172, -0x0000007100d6ee28,aoc2::setAocFlag2,172, -0x0000007100d6eed4,aoc2::setIsLastPlayHardMode,60, -0x0000007100d6ef10,aoc2::setIsLastPlayHardModeToFalse,76, +0x0000007100d6ed7c,aoc2::initHardModeFlag,172,_ZN5uking4aoc226loadIsLastPlayHardModeFlagEv +0x0000007100d6ee28,aoc2::setAocFlag2,172,_ZN5uking4aoc218loadIsHardModeFlagEv +0x0000007100d6eed4,aoc2::setIsLastPlayHardMode,60,_ZN5uking4aoc227storeIsLastPlayHardModeFlagEv +0x0000007100d6ef10,aoc2::setIsLastPlayHardModeToFalse,76,_ZN5uking4aoc227resetIsLastPlayHardModeFlagEv 0x0000007100d6ef5c,aoc2::isTestOfStrengthDungeon,396,_ZNK5uking4aoc222isTestOfStrengthShrineEv -0x0000007100d6f0e8,aoc2::calc,20, +0x0000007100d6f0e8,aoc2::calc,20,_ZN5uking4aoc24calcEv 0x0000007100d6f0fc,aoc2::rankUpEnemy,7780,_ZN5uking4aoc211rankUpEnemyERKN4sead14SafeStringBaseIcEERKN4ksys3map6ObjectEPPKc 0x0000007100d70f60,sub_7100D70F60,48,_ZN4sead9Delegate1IN5uking4aoc2EPN4ksys3gdt7Manager10ResetEventEE6invokeES7_ 0x0000007100d70f90,sub_7100D70F90,92,_ZNK4sead9Delegate1IN5uking4aoc2EPN4ksys3gdt7Manager10ResetEventEE5cloneEPNS_4HeapE @@ -74264,7 +74264,7 @@ 0x0000007100dd0a6c,GameDataMgr::setCurrentRupeeFlagName,12, 0x0000007100dd0a78,GameDataMgr::requestResetAllToInitial,16, 0x0000007100dd0a88,GameDataMgr::getAndSetShrineQuestAndKassFlags,3628, -0x0000007100dd18b4,GameDataMgr::setBoolByKey,164, +0x0000007100dd18b4,GameDataMgr::setBoolByKey,164,_ZN4ksys3gdt7Manager7setBoolEbRKN4sead14SafeStringBaseIcEE 0x0000007100dd1958,GameDataMgr::getAndSetShrineQuestFlagsAndKassDlc2,1416, 0x0000007100dd1ee0,GameDataMgr::setStringInArrayByKey,184, 0x0000007100dd1f98,GameDataMgr::setBoolByKeyB,164, diff --git a/src/Game/DLC/aoc2.cpp b/src/Game/DLC/aoc2.cpp index 41473d20..59076d34 100644 --- a/src/Game/DLC/aoc2.cpp +++ b/src/Game/DLC/aoc2.cpp @@ -37,6 +37,11 @@ aoc2::aoc2() setHardModeChange(HardModeChange::ApplyDamageMultiplier, true); } +void aoc2::setHardModeEnabledFlag(ksys::gdt::Manager::ResetEvent*) { + ksys::gdt::Manager::instance()->setBool(true, mAoCHardModeEnabledFlag); + mGdtResetSlot.release(); +} + void aoc2::initFlagHandles(ksys::gdt::Manager::ReinitEvent*) { auto* gdm = ksys::gdt::Manager::instance(); mHardModeHighScoreFlag = gdm->getS32Handle(sData.flag_name_HardMode_HighScore); @@ -114,6 +119,42 @@ bool aoc2::shouldApplyMasterModeDamageMultiplier(const ksys::act::ActorConstData return false; } +void aoc2::buffDamage(s32& damage) { + damage = damage * 1.5f; + if (damage == 1) { + damage = 2; + } +} + +void aoc2::loadIsLastPlayHardModeFlag() { + bool value{}; + ksys::gdt::Manager::instance()->getBool(mIsLastPlayHardModeFlag, &value); + const bool x = value; +#ifdef MATCHING_HACK_NX_CLANG + asm(""); +#endif + setFlag(Flag::EnableHardMode, x); +} + +void aoc2::loadIsHardModeFlag() { + bool value{}; + ksys::gdt::Manager::instance()->getBool(mAoCHardModeEnabledFlag, &value); + const bool x = value; +#ifdef MATCHING_HACK_NX_CLANG + asm(""); +#endif + setFlag(Flag::EnableHardMode, x); +} + +void aoc2::storeIsLastPlayHardModeFlag() { + ksys::gdt::Manager::instance()->setBool(checkFlag(Flag::EnableHardMode), + mIsLastPlayHardModeFlag); +} + +void aoc2::resetIsLastPlayHardModeFlag() { + ksys::gdt::Manager::instance()->setBool(false, "IsLastPlayHardMode"); +} + bool aoc2::isTestOfStrengthShrine() const { if (mMapType != "CDungeon") return false; @@ -129,6 +170,11 @@ bool aoc2::isTestOfStrengthShrine() const { return false; } +void aoc2::calc() { + volatile u32 unused = 0; + static_cast(unused); +} + bool aoc2::rankUpEnemy(const sead::SafeString& actor_name, const ksys::map::Object& obj, const char** new_name) { if (obj.getFlags().isOn(ksys::map::Object::Flag::HasUniqueName) || @@ -267,11 +313,4 @@ bool aoc2::rankUpEnemy(const sead::SafeString& actor_name, const ksys::map::Obje return true; } -void aoc2::buffDamage(s32& damage) { - damage = damage * 1.5f; - if (damage == 1) { - damage = 2; - } -} - } // namespace uking diff --git a/src/Game/DLC/aoc2.h b/src/Game/DLC/aoc2.h index e881d6a3..3d6c612c 100644 --- a/src/Game/DLC/aoc2.h +++ b/src/Game/DLC/aoc2.h @@ -29,6 +29,14 @@ public: void init(sead::Heap* heap); + void loadIsLastPlayHardModeFlag(); + void loadIsHardModeFlag(); + + void storeIsLastPlayHardModeFlag(); + void resetIsLastPlayHardModeFlag(); + + void calc(); + void nerfHpRestore(f32* hp) const; void nerfHpRestore(s32* hp) const; void modifyEnemyNoticeDuration(f32* value) const; @@ -44,7 +52,10 @@ public: void setHardModeChange(HardModeChange flag, bool on) { mHardModeChanges.changeBit(flag, on); } bool isHardModeChangeOn(HardModeChange flag) const { return mHardModeChanges.isOnBit(flag); } + + void setFlag(Flag flag, bool on) { mFlags.changeBit(flag, on); } bool checkFlag(Flag flag) const { return mFlags.isOnBit(flag); } + f32 getMultiplier(MultiplierType type) const { return mMultipliers[type]; } private: