mirror of
https://github.com/zeldaret/ss
synced 2026-06-23 00:49:51 -04:00
Merge pull request #16 from robojumper/single-counters
Match the single-counter files
This commit is contained in:
@@ -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) {}
|
||||
@@ -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) { }
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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) { }
|
||||
@@ -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) {}
|
||||
@@ -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) {}
|
||||
@@ -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) {}
|
||||
@@ -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) { }
|
||||
Reference in New Issue
Block a user