mirror of
https://github.com/zeldaret/ss
synced 2026-06-18 07:25:18 -04:00
Everything OK except for weak dtor order
This commit is contained in:
@@ -18,11 +18,11 @@ public:
|
||||
static u16 sDungeonFlags[8];
|
||||
// static DungeonflagManager *sInstance;
|
||||
|
||||
void copyFromSave(s16 flag);
|
||||
void copyFromSave(u16 flagIndex);
|
||||
void copyFromSave(u32 flag);
|
||||
void copyFromSave_Internal(u16 flagIndex);
|
||||
void setCommitFlag(u16 flag);
|
||||
DungeonflagManager();
|
||||
void setupFlagStuff();
|
||||
void init();
|
||||
void setToValue(u16 flag, u32 value);
|
||||
void setFlag(u16 flag);
|
||||
u16 getDungeonFlag(u16 flag);
|
||||
@@ -38,13 +38,13 @@ public:
|
||||
};
|
||||
|
||||
/** 80575404 */
|
||||
// DungeonflagManager *DungeonflagManager::sInstance = nullptr;
|
||||
DungeonflagManager *DungeonflagManager::sInstance = nullptr;
|
||||
|
||||
/** 805a9c58 */
|
||||
u16 DungeonflagManager::sDungeonFlags[8] = {};
|
||||
|
||||
/** 800bf8d0 */
|
||||
void DungeonflagManager::copyFromSave(u16 flagIndex) {
|
||||
void DungeonflagManager::copyFromSave_Internal(u16 flagIndex) {
|
||||
mFlagSpace.copyFromSaveFile(saveFilePtr(flagIndex), 0, 0x8);
|
||||
}
|
||||
|
||||
@@ -59,15 +59,15 @@ DungeonflagManager::DungeonflagManager()
|
||||
mFlagSpace(sDungeonFlags, ARRAY_LENGTH(sDungeonFlags)) {}
|
||||
|
||||
/** 800bf980 */
|
||||
void DungeonflagManager::setupFlagStuff() {
|
||||
void DungeonflagManager::init() {
|
||||
mFlagStuff = new UnkFlagStuff(0x11, DungeonflagManager__FLAG_DEFINITIONS);
|
||||
mShouldCommit = false;
|
||||
}
|
||||
|
||||
/** 800bf9e0 */
|
||||
void DungeonflagManager::copyFromSave(s16 flag) {
|
||||
void DungeonflagManager::copyFromSave(u32 flag) {
|
||||
mStageIndex = flag;
|
||||
copyFromSave((u16)flag);
|
||||
copyFromSave_Internal(flag);
|
||||
}
|
||||
|
||||
/** 800bf9f0 */
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
// clang-format off
|
||||
|
||||
#include "common.h"
|
||||
#include "toBeSorted/sceneflag_manager.h"
|
||||
#include <toBeSorted/flag_space.h>
|
||||
#include <toBeSorted/misc_flag_managers.h>
|
||||
#include <toBeSorted/item_story_flag_manager.h>
|
||||
@@ -11,6 +13,12 @@
|
||||
#include <toBeSorted/flag_managers/unk_flag_stuff.inc>
|
||||
#include <toBeSorted/flag_managers/bitwise_flag_helper.inc>
|
||||
|
||||
u16 StoryflagManager::sFlags[0x80];
|
||||
u16 ItemflagManager::sFlags[0x40];
|
||||
|
||||
|
||||
StoryflagManager *StoryflagManager::sInstance = nullptr;
|
||||
ItemflagManager *ItemflagManager::sInstance = nullptr;
|
||||
|
||||
ItemStoryManagerBase::ItemStoryManagerBase(): flagSizeMaybe(0), anotherSizeMaybe(0), storyFlagsPtr(nullptr), unkFlagsPtr(nullptr), dirty(false) {}
|
||||
ItemStoryManagerBase::~ItemStoryManagerBase() {
|
||||
@@ -197,6 +205,10 @@ bool ItemflagManager::commit() {
|
||||
static void postSetup();
|
||||
static void updateFlagForFlagIndex(u16 stage);
|
||||
class TBoxFlagManagerSub : public TBoxFlagManager {
|
||||
public:
|
||||
TBoxFlagManagerSub() {
|
||||
TBoxFlagManager::sInstance = this;
|
||||
}
|
||||
// virtual ~TBoxFlagManagerSub() {}
|
||||
};
|
||||
|
||||
@@ -213,14 +225,23 @@ class ItemflagManagerSub : public ItemflagManager {
|
||||
// virtual ~ItemflagManagerSub() {}
|
||||
};
|
||||
|
||||
class SceneflagManagerSub : public SceneflagManager {
|
||||
|
||||
};
|
||||
|
||||
class DungeonflagManagerSub : public DungeonflagManager {
|
||||
|
||||
};
|
||||
|
||||
class SkipflagManagerSub : public SkipflagManager {
|
||||
|
||||
};
|
||||
|
||||
void setupFlagManagers(EGG::Heap *heap) {
|
||||
if (SceneflagManager::sInstance == nullptr) {
|
||||
SceneflagManager::sInstance = new (heap) SceneflagManager();
|
||||
SceneflagManager::sInstance = new (heap) SceneflagManagerSub();
|
||||
mHeap m(heap);
|
||||
SceneflagManager::sInstance->doNothing();
|
||||
SceneflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (TBoxFlagManager::sInstance == nullptr) {
|
||||
@@ -248,15 +269,15 @@ void setupFlagManagers(EGG::Heap *heap) {
|
||||
}
|
||||
|
||||
if (DungeonflagManager::sInstance == nullptr) {
|
||||
DungeonflagManager::sInstance = new (heap) DungeonflagManager();
|
||||
DungeonflagManager::sInstance = new (heap) DungeonflagManagerSub();
|
||||
mHeap m(heap);
|
||||
DungeonflagManager::sInstance->setupFlagStuff();
|
||||
DungeonflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (SkipflagManager::sInstance == nullptr) {
|
||||
SkipflagManager::sInstance = new (heap) SkipflagManager();
|
||||
SkipflagManager::sInstance = new (heap) SkipflagManagerSub();
|
||||
mHeap m(heap);
|
||||
SkipflagManager::sInstance->unsetCommitFlag();
|
||||
SkipflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
postSetup();
|
||||
@@ -273,11 +294,26 @@ void copyAllFlagManagersFromSave() {
|
||||
StoryflagManager::sInstance->copyFlagsFromSave_Priv();
|
||||
ItemflagManager::sInstance->copyFlagsFromSave_Priv();
|
||||
DungeonflagManager::sInstance->copyFromSave(flag);
|
||||
SkipflagManager::sInstance->copyFromSave();
|
||||
SkipflagManager::sInstance->thunk_copyFromSave();
|
||||
EnemyDefeatManager::sInstance->copyFromSave(flag);
|
||||
}
|
||||
|
||||
static void updateFlagForFlagIndex(u16 stage) {}
|
||||
static void updateFlagForFlagIndex(u16 stage) {
|
||||
SceneflagManager::sInstance->updateFlagindex(stage);
|
||||
TBoxFlagManager::sInstance->copyFromSave(stage);
|
||||
EnemyDefeatManager::sInstance->updateFlagIndex(stage);
|
||||
DungeonflagManager::sInstance->copyFromSave(stage);
|
||||
}
|
||||
|
||||
void commitAllFlagManagers() {
|
||||
StoryflagManager::sInstance->commit();
|
||||
ItemflagManager::sInstance->commit();
|
||||
DungeonflagManager::sInstance->doCommit();
|
||||
SkipflagManager::sInstance->commitFlags();
|
||||
SceneflagManager::sInstance->doCommit();
|
||||
TBoxFlagManager::sInstance->commitIfNecessary();
|
||||
EnemyDefeatManager::sInstance->commitIfNecessary();
|
||||
}
|
||||
|
||||
extern "C" bool checkedMemcpy(void *dest, u32 destLen, const void *src, u32 count) {
|
||||
if (dest == nullptr || src == nullptr || destLen < count || destLen > 0xFFFF) {
|
||||
|
||||
@@ -10,7 +10,7 @@ u16 SceneflagManager::sTempFlags[] = {};
|
||||
u16 SceneflagManager::sSceneFlags[8] = {};
|
||||
u16 SceneflagManager::sZoneFlags[0xFC] = {};
|
||||
|
||||
void SceneflagManager::doNothing() {}
|
||||
void SceneflagManager::init() {}
|
||||
void SceneflagManager::setShouldCommit(u16 flag) {
|
||||
mShouldCommit = 1;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public:
|
||||
void copyFromSave();
|
||||
void setCommitFlag(u16 flag);
|
||||
SkipflagManager();
|
||||
void unsetCommitFlag();
|
||||
void init();
|
||||
void thunk_copyFromSave();
|
||||
void setFlag(u16 flag);
|
||||
bool checkFlag(u16 flag);
|
||||
@@ -44,7 +44,7 @@ void SkipflagManager::setCommitFlag(u16 flag) {
|
||||
SkipflagManager::SkipflagManager() : mFlagSpace(sSkipFlags, ARRAY_LENGTH(sSkipFlags)), mShouldCommit(false) {}
|
||||
|
||||
// 800bfc30
|
||||
void SkipflagManager::unsetCommitFlag() {
|
||||
void SkipflagManager::init() {
|
||||
mShouldCommit = false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user