diff options
| author | Léo Lam <leo@leolam.fr> | 2020-11-07 19:06:25 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-11-07 23:28:51 +0100 |
| commit | 3bd9d7a599a54519ca766f2e7ae476d35d13f67a (patch) | |
| tree | 8b64cb73ee7a4327e882f4208987fa3b90c27c59 /src | |
| parent | 3f11fdb6d20e2a52581e3f2d829516efe803eb73 (diff) | |
aoc2: Implement more functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/Game/DLC/aoc2.cpp | 53 | ||||
| -rw-r--r-- | src/Game/DLC/aoc2.h | 11 |
2 files changed, 57 insertions, 7 deletions
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<void>(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: |
