summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-11-07 19:06:25 +0100
committerLéo Lam <leo@leolam.fr>2020-11-07 23:28:51 +0100
commit3bd9d7a599a54519ca766f2e7ae476d35d13f67a (patch)
tree8b64cb73ee7a4327e882f4208987fa3b90c27c59 /src
parent3f11fdb6d20e2a52581e3f2d829516efe803eb73 (diff)
aoc2: Implement more functions
Diffstat (limited to 'src')
-rw-r--r--src/Game/DLC/aoc2.cpp53
-rw-r--r--src/Game/DLC/aoc2.h11
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: