summaryrefslogtreecommitdiff
path: root/src/Game/Actor/Damage/dmgStruct20.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2026-09-28 03:39:31 +0200
committerLéo Lam <leo@leolam.fr>2026-10-04 06:50:35 +0200
commitec2ec9ad6dc334522d5175967be8e4a468874896 (patch)
tree3c54330657ceeff7ad4b65b6a5fec44cae90a2be /src/Game/Actor/Damage/dmgStruct20.cpp
parenta0245d469640cbe64199a2167cbd7b73c9873904 (diff)
Damage: move Game/Damage under Game/Actor
Link order: the damage code is interleaved with actor TUs inside the Game/Actor block, not in a block of its own. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
Diffstat (limited to 'src/Game/Actor/Damage/dmgStruct20.cpp')
-rw-r--r--src/Game/Actor/Damage/dmgStruct20.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/Game/Actor/Damage/dmgStruct20.cpp b/src/Game/Actor/Damage/dmgStruct20.cpp
new file mode 100644
index 00000000..d52eb3a6
--- /dev/null
+++ b/src/Game/Actor/Damage/dmgStruct20.cpp
@@ -0,0 +1,53 @@
+#include "Game/Actor/Damage/dmgStruct20.h"
+
+namespace uking::dmg {
+
+void Struct20::reset() {
+ mField_8 = 0;
+ mField_C = 0;
+ mField_10 = 0;
+ mField_14 = -1;
+ mField_18 = -1;
+}
+
+void Struct20::combineMaybe(Struct20Base* other) {
+ Struct20* otherStruct = sead::DynamicCast<Struct20>(other);
+ if (!otherStruct) {
+ return;
+ }
+
+ mField_8 += otherStruct->mField_8;
+ mField_C += otherStruct->mField_C;
+ mField_10 += otherStruct->mField_10;
+ if (mField_18 < otherStruct->mField_18) {
+ mField_14 = otherStruct->mField_14;
+ mField_18 = otherStruct->mField_18;
+ }
+}
+
+void Struct20_2::reset() {
+ mField_1C = 0;
+ mField_30 = false;
+
+ Struct20::reset();
+}
+
+void Struct20_2::combineMaybe(Struct20Base* other) {
+ Struct20_2* otherStruct = sead::DynamicCast<Struct20_2>(other);
+ if (!otherStruct) {
+ Struct20::combineMaybe(other);
+ return;
+ }
+
+ mField_1C |= otherStruct->mField_1C;
+ Struct20::combineMaybe(other);
+ if (mField_18 == otherStruct->mField_18 && otherStruct->mField_30) {
+ mField_30 = true;
+ mField_20 = otherStruct->mField_20;
+ mField_24 = otherStruct->mField_24;
+ mField_28 = otherStruct->mField_28;
+ mField_2C = otherStruct->mField_2C;
+ }
+}
+
+} // namespace uking::dmg