diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2024-05-05 11:24:35 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-05 11:24:35 -0400 |
| commit | fb4db5dcbb0493aeea41fcec30f193d47d40685c (patch) | |
| tree | 40a939334475988741da22b8de39043613ac6ef4 /src | |
| parent | 430ad58726f2d13e03970af69e0b91e8a84af7c2 (diff) | |
| parent | dcb2c48b588405ab01807516bb2ee920f734a1f2 (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.cpp | 14 | ||||
| -rw-r--r-- | src/toBeSorted/counters/bomb_counter.cpp | 14 | ||||
| -rw-r--r-- | src/toBeSorted/counters/counter.cpp | 55 | ||||
| -rw-r--r-- | src/toBeSorted/counters/extra_wallet_counter.cpp | 15 | ||||
| -rw-r--r-- | src/toBeSorted/counters/key_piece_counter.cpp | 14 | ||||
| -rw-r--r-- | src/toBeSorted/counters/rupee_counter.cpp | 50 | ||||
| -rw-r--r-- | src/toBeSorted/counters/slingshot_seed_counter.cpp | 14 | ||||
| -rw-r--r-- | src/toBeSorted/counters/tear_counter.cpp | 14 |
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) { } |
