Everything OK except for weak dtor order

This commit is contained in:
robojumper
2024-10-25 11:05:26 +02:00
parent e689fbaa42
commit ceac3a6ef8
8 changed files with 105 additions and 67 deletions
@@ -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 */
+44 -8
View File
@@ -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;
}