summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>2024-05-05 11:24:35 -0400
committerGitHub <noreply@github.com>2024-05-05 11:24:35 -0400
commitfb4db5dcbb0493aeea41fcec30f193d47d40685c (patch)
tree40a939334475988741da22b8de39043613ac6ef4 /src
parent430ad58726f2d13e03970af69e0b91e8a84af7c2 (diff)
parentdcb2c48b588405ab01807516bb2ee920f734a1f2 (diff)
Merge pull request #16 from robojumper/single-counters
Match the single-counter files
Diffstat (limited to 'src')
-rw-r--r--src/toBeSorted/counters/arrow_counter.cpp14
-rw-r--r--src/toBeSorted/counters/bomb_counter.cpp14
-rw-r--r--src/toBeSorted/counters/counter.cpp55
-rw-r--r--src/toBeSorted/counters/extra_wallet_counter.cpp15
-rw-r--r--src/toBeSorted/counters/key_piece_counter.cpp14
-rw-r--r--src/toBeSorted/counters/rupee_counter.cpp50
-rw-r--r--src/toBeSorted/counters/slingshot_seed_counter.cpp14
-rw-r--r--src/toBeSorted/counters/tear_counter.cpp14
8 files changed, 190 insertions, 0 deletions
diff --git a/src/toBeSorted/counters/arrow_counter.cpp b/src/toBeSorted/counters/arrow_counter.cpp
new file mode 100644
index 00000000..a770d160
--- /dev/null
+++ b/src/toBeSorted/counters/arrow_counter.cpp
@@ -0,0 +1,14 @@
+#include <toBeSorted/counters/counter.h>
+
+class ArrowCounter : public Counter {
+public:
+ ArrowCounter();
+ /* 8016DFA0 */ ~ArrowCounter() {}
+ /* 8016E000 */ virtual u16 getMax() override {
+ return 20;
+ };
+};
+
+/* 80575618 */ ArrowCounter lbl_80575618;
+
+/* 8016DFE0 */ ArrowCounter::ArrowCounter() : Counter(0x1f2) {}
diff --git a/src/toBeSorted/counters/bomb_counter.cpp b/src/toBeSorted/counters/bomb_counter.cpp
new file mode 100644
index 00000000..02d11af0
--- /dev/null
+++ b/src/toBeSorted/counters/bomb_counter.cpp
@@ -0,0 +1,14 @@
+#include <toBeSorted/counters/counter.h>
+
+class BombCounter : public Counter {
+public:
+ BombCounter();
+ /* 8016E020 */ ~BombCounter() {}
+ /* 8016E080 */ virtual u16 getMax() override {
+ return 10;
+ }
+};
+
+/* 80575620 */ BombCounter lbl_80575620;
+
+/* 8016E060 */ BombCounter::BombCounter(): Counter(0x1f3) { }
diff --git a/src/toBeSorted/counters/counter.cpp b/src/toBeSorted/counters/counter.cpp
new file mode 100644
index 00000000..2c388e44
--- /dev/null
+++ b/src/toBeSorted/counters/counter.cpp
@@ -0,0 +1,55 @@
+#include <toBeSorted/counters/counter.h>
+
+// TODO use the item flag manager once it exists
+class ItemFlagManager {
+public:
+ ItemFlagManager() {}
+ /** 0x08 */ virtual ~ItemFlagManager();
+ /** 0x0C */ virtual void setFlagszptr();
+ /** 0x10 */ virtual void onDirty();
+ /** 0x14 */ virtual void copyFlagsFromSave() = 0;
+ /** 0x18 */ virtual void setupUnkFlagsStuff() = 0;
+ /** 0x1C */ virtual bool doCommit() = 0;
+ /** 0x20 */ virtual void setFlag(u16 flag);
+ /** 0x24 */ virtual void unsetFlag(u16 flag);
+ /** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value);
+ /** 0x2C */ virtual u16 getCounterOrFlag(u16 flag);
+ /** 0x30 */ virtual u16 getUncommittedValue(u16 flag);
+ /** 0x34 */ virtual void unk3();
+ /** 0x38 */ virtual u16 *getSaveFlagSpace() = 0;
+};
+
+// TODO set up item flag manager
+extern "C" ItemFlagManager *lbl_80575400;
+
+
+/* 8016cc40 */ s32 Counter::checkedAdd(s32 num) {
+ s32 uncommitted = getUncommittedValue();
+ s32 max = getMax();
+ s32 result = uncommitted + num;
+ if (result < 0) {
+ setValue(0);
+ } else if (result < max) {
+ setValue(result);
+ } else {
+ setValue(max);
+ }
+
+ if (result < 0) {
+ return result;
+ }
+
+ return result <= max ? 0 : (result - max);
+}
+
+/* 8016cd30 */ u16 Counter::getCommittedValue() {
+ return lbl_80575400->getCounterOrFlag(counterId | 0x4000);
+}
+
+/* 8016cd50 */ u16 Counter::getUncommittedValue() {
+ return lbl_80575400->getUncommittedValue(counterId | 0x4000);
+}
+
+/* 8016cd70 */ void Counter::setValue(u16 num) {
+ lbl_80575400->setFlagOrCounterToValue(counterId | 0x4000, num);
+}
diff --git a/src/toBeSorted/counters/extra_wallet_counter.cpp b/src/toBeSorted/counters/extra_wallet_counter.cpp
new file mode 100644
index 00000000..342f2e81
--- /dev/null
+++ b/src/toBeSorted/counters/extra_wallet_counter.cpp
@@ -0,0 +1,15 @@
+#include <toBeSorted/counters/counter.h>
+
+class ExtraWalletCounter : public Counter {
+public:
+ ExtraWalletCounter();
+ /* 8016E220 */ ~ExtraWalletCounter() {}
+ /* 8016E280 */ virtual u16 getMax() override {
+ return 3;
+ }
+};
+
+
+/* 80575640 */ ExtraWalletCounter lbl_80575640;
+
+/* 8016E260 */ ExtraWalletCounter::ExtraWalletCounter(): Counter(0x1fc) { }
diff --git a/src/toBeSorted/counters/key_piece_counter.cpp b/src/toBeSorted/counters/key_piece_counter.cpp
new file mode 100644
index 00000000..55ddded7
--- /dev/null
+++ b/src/toBeSorted/counters/key_piece_counter.cpp
@@ -0,0 +1,14 @@
+#include <toBeSorted/counters/counter.h>
+
+class KeyPieceCounter : public Counter {
+public:
+ KeyPieceCounter();
+ /* 8016E1A0 */ ~KeyPieceCounter() {}
+ /* 8016E200 */ virtual u16 getMax() override {
+ return 5;
+ }
+};
+
+/* 80575638 */ KeyPieceCounter lbl_80575638;
+
+/* 8016E1E0 */ KeyPieceCounter::KeyPieceCounter() : Counter(0x1f9) {}
diff --git a/src/toBeSorted/counters/rupee_counter.cpp b/src/toBeSorted/counters/rupee_counter.cpp
new file mode 100644
index 00000000..d1264a74
--- /dev/null
+++ b/src/toBeSorted/counters/rupee_counter.cpp
@@ -0,0 +1,50 @@
+#include <toBeSorted/counters/counter.h>
+
+static u16 getBaseCapacity();
+static u16 getExtraWalletCapacity();
+
+class RupeeCounter : public Counter {
+public:
+ RupeeCounter();
+ /* 8016DEF0 */ ~RupeeCounter() {}
+ /* 8016DF50 */ virtual u16 getMax() override {
+ return (getBaseCapacity() + getExtraWalletCapacity());
+ }
+};
+
+struct WalletStruct {
+ u32 flag;
+ u16 capacity;
+};
+
+// TODO set up item flag manager
+extern "C" void *lbl_80575400;
+extern "C" u16 fn_800BF5E0(void *data, u16 flag);
+
+/* 8016DE10 */ static u16 getBaseCapacity() {
+ int i = 0;
+ /* 804E91B0 */ WalletStruct wallet_definitions[4] = {
+ {0x6c, 500},
+ {0x6d, 1000},
+ {0x6e, 5000},
+ {0x6f, 9000},
+ };
+ const WalletStruct *wallet = &wallet_definitions[3];
+ for (; i < 4; i++, wallet--) {
+ if (fn_800BF5E0(lbl_80575400, wallet->flag)) {
+ return wallet->capacity;
+ }
+ }
+ return 300;
+}
+
+// TODO main counters class
+extern "C" u16 fn_8016D730(u16);
+
+/* 8016DEC0 */ static u16 getExtraWalletCapacity() {
+ return 300 * fn_8016D730(0x27);
+}
+
+/* 80575610 */ RupeeCounter lbl_80575610;
+
+/* 8016DF30 */ RupeeCounter::RupeeCounter() : Counter(0x1f5) {}
diff --git a/src/toBeSorted/counters/slingshot_seed_counter.cpp b/src/toBeSorted/counters/slingshot_seed_counter.cpp
new file mode 100644
index 00000000..797018d6
--- /dev/null
+++ b/src/toBeSorted/counters/slingshot_seed_counter.cpp
@@ -0,0 +1,14 @@
+#include <toBeSorted/counters/counter.h>
+
+class SlingshotSeedCounter : public Counter {
+public:
+ SlingshotSeedCounter();
+ /* 8016E120 */ ~SlingshotSeedCounter() {}
+ /* 8016E180 */ virtual u16 getMax() override {
+ return 20;
+ };
+};
+
+/* 80575630 */ SlingshotSeedCounter lbl_80575630;
+
+/* 8016E160 */ SlingshotSeedCounter::SlingshotSeedCounter() : Counter(0x1ed) {}
diff --git a/src/toBeSorted/counters/tear_counter.cpp b/src/toBeSorted/counters/tear_counter.cpp
new file mode 100644
index 00000000..2a8503cd
--- /dev/null
+++ b/src/toBeSorted/counters/tear_counter.cpp
@@ -0,0 +1,14 @@
+#include <toBeSorted/counters/counter.h>
+
+class TearCounter : public Counter {
+public:
+ TearCounter();
+ /* 8016E0A0 */ ~TearCounter() {}
+ /* 8016E100 */ virtual u16 getMax() override {
+ return 15;
+ };
+};
+
+/* 80575628 */ TearCounter lbl_80575628;
+
+/* 8016E0E0 */ TearCounter::TearCounter(): Counter(0x1f4) { }