mirror of
https://github.com/zeldaret/ss
synced 2026-07-08 13:56:15 -04:00
OK, checkpoint
This commit is contained in:
+14
-14
@@ -3560,7 +3560,7 @@ fn_8009EAE0 = .text:0x8009EAE0; // type:function size:0x4
|
||||
fn_8009EAF0 = .text:0x8009EAF0; // type:function size:0xC
|
||||
fn_8009EB00 = .text:0x8009EB00; // type:function size:0xC
|
||||
fn_8009EB10 = .text:0x8009EB10; // type:function size:0xC
|
||||
fn_8009EB20 = .text:0x8009EB20; // type:function size:0x8
|
||||
setFlag__15ItemflagManagerFUs = .text:0x8009EB20; // type:function size:0x8
|
||||
copyQueuedEventToCurrentAndHandleSkipEvent = .text:0x8009EB30; // type:function size:0x36C
|
||||
fn_8009EEA0 = .text:0x8009EEA0; // type:function size:0x53C
|
||||
alsoSetAsCurrentEvent__12EventManagerFP9dAcBase_cP5EventPv = .text:0x8009F3E0; // type:function size:0x470
|
||||
@@ -4147,15 +4147,15 @@ setupUnkFlagStuff__20ItemStoryManagerBaseFP17UnkFlagDefinitionUs = .text:0x800BF
|
||||
copyFlagsFromSave_Priv__20ItemStoryManagerBaseFv = .text:0x800BF380; // type:function size:0x58
|
||||
init__20ItemStoryManagerBaseFv = .text:0x800BF3E0; // type:function size:0x88
|
||||
setFlagszptr__20ItemStoryManagerBaseFv = .text:0x800BF470; // type:function size:0x4
|
||||
getCounterOrFlag__20ItemStoryManagerBaseCFUs = .text:0x800BF480; // type:function size:0x58
|
||||
getFlag__20ItemStoryManagerBaseCFUs = .text:0x800BF480; // type:function size:0x58
|
||||
getUncommittedValue_Priv__20ItemStoryManagerBaseFUs = .text:0x800BF4E0; // type:function size:0x50
|
||||
setOrClearFlag__20ItemStoryManagerBaseFUsUs = .text:0x800BF530; // type:function size:0x78
|
||||
setFlag__20ItemStoryManagerBaseFUs = .text:0x800BF5B0; // type:function size:0x8
|
||||
unsetFlag__20ItemStoryManagerBaseFUs = .text:0x800BF5C0; // type:function size:0x8
|
||||
thunk_setOrClearFlag__20ItemStoryManagerBaseFUsUs = .text:0x800BF5D0; // type:function size:0x4
|
||||
getFlag__20ItemStoryManagerBaseCFUs = .text:0x800BF5E0; // type:function size:0x4
|
||||
setFlagOrCounterToValue__20ItemStoryManagerBaseFUsUs = .text:0x800BF5D0; // type:function size:0x4
|
||||
getCounterOrFlag__20ItemStoryManagerBaseCFUs = .text:0x800BF5E0; // type:function size:0x4
|
||||
getUncommittedValue__20ItemStoryManagerBaseFUs = .text:0x800BF5F0; // type:function size:0x4
|
||||
FUN_800bf600__20ItemStoryManagerBaseFUs = .text:0x800BF600; // type:function size:0x4
|
||||
unk3__20ItemStoryManagerBaseFUs = .text:0x800BF600; // type:function size:0x4
|
||||
FUN_800bf610__20ItemStoryManagerBaseFUs = .text:0x800BF610; // type:function size:0x18
|
||||
onDirty__20ItemStoryManagerBaseFv = .text:0x800BF630; // type:function size:0x4
|
||||
FUN_800bf640__20ItemStoryManagerBaseFUs = .text:0x800BF640; // type:function size:0x10
|
||||
@@ -4198,7 +4198,7 @@ postSetup__Fv = .text:0x800C01E0; // type:function size:0x8
|
||||
copyAllFlagManagersFromSave__Fv = .text:0x800C01F0; // type:function size:0x78
|
||||
updateFlagForFlagIndex__FUs = .text:0x800C0270; // type:function size:0x58
|
||||
commitAllFlagManagers__Fv = .text:0x800C02D0; // type:function size:0x54
|
||||
checkedMemcpy = .text:0x800C0330; // type:function size:0x54
|
||||
checkedMemcpy__FPvUlPCvUl = .text:0x800C0330; // type:function size:0x54
|
||||
getSaveFlagSpace__15ItemflagManagerCFv = .text:0x800C0390; // type:function size:0x8
|
||||
unk3__15ItemflagManagerFUs = .text:0x800C03A0; // type:function size:0x8
|
||||
getUncommittedValue__15ItemflagManagerFUs = .text:0x800C03B0; // type:function size:0x8
|
||||
@@ -4211,10 +4211,10 @@ getSaveFlagSpace__16StoryflagManagerCFv = .text:0x800C0450; // type:function siz
|
||||
doCommit__16StoryflagManagerFv = .text:0x800C0460; // type:function size:0x44
|
||||
setFlagszptr__16StoryflagManagerFv = .text:0x800C04B0; // type:function size:0xC
|
||||
doCommit__18EnemyDefeatManagerFv = .text:0x800C04C0; // type:function size:0x44
|
||||
__dt__18ItemflagManagerSubFv = .text:0x800C0510; // type:function size:0x5C
|
||||
__dt__19StoryflagManagerSubFv = .text:0x800C0570; // type:function size:0x5C
|
||||
__dt__21EnemyDefeatManagerSubFv = .text:0x800C05D0; // type:function size:0x40
|
||||
__dt__18TBoxFlagManagerSubFv = .text:0x800C0610; // type:function size:0x40
|
||||
__dt__32MyFlagManager<15ItemflagManager>Fv = .text:0x800C0510; // type:function size:0x5C
|
||||
__dt__33MyFlagManager<16StoryflagManager>Fv = .text:0x800C0570; // type:function size:0x5C
|
||||
__dt__35MyFlagManager<18EnemyDefeatManager>Fv = .text:0x800C05D0; // type:function size:0x40
|
||||
__dt__32MyFlagManager<15TBoxFlagManager>Fv = .text:0x800C0610; // type:function size:0x40
|
||||
fn_800C0650 = .text:0x800C0650; // type:function size:0x3C
|
||||
fn_800C0690 = .text:0x800C0690; // type:function size:0x70
|
||||
fn_800C0700 = .text:0x800C0700; // type:function size:0x7C
|
||||
@@ -31008,10 +31008,10 @@ lbl_80510B48 = .data:0x80510B48; // type:object size:0xC
|
||||
lbl_80510B54 = .data:0x80510B54; // type:object size:0xC
|
||||
lbl_80510B60 = .data:0x80510B60; // type:object size:0x10
|
||||
lbl_80510B70 = .data:0x80510B70; // type:object size:0x18
|
||||
__vt__18ItemflagManagerSub = .data:0x80510B88; // type:object size:0x3C
|
||||
__vt__19StoryflagManagerSub = .data:0x80510BC4; // type:object size:0x3C
|
||||
__vt__21EnemyDefeatManagerSub = .data:0x80510C00; // type:object size:0x14
|
||||
__vt__18TBoxFlagManagerSub = .data:0x80510C14; // type:object size:0x14
|
||||
__vt__32MyFlagManager<15ItemflagManager> = .data:0x80510B88; // type:object size:0x3C
|
||||
__vt__33MyFlagManager<16StoryflagManager> = .data:0x80510BC4; // type:object size:0x3C
|
||||
__vt__35MyFlagManager<18EnemyDefeatManager> = .data:0x80510C00; // type:object size:0x14
|
||||
__vt__32MyFlagManager<15TBoxFlagManager> = .data:0x80510C14; // type:object size:0x14
|
||||
__vt__15ItemflagManager = .data:0x80510C28; // type:object size:0x3C
|
||||
__vt__16StoryflagManager = .data:0x80510C64; // type:object size:0x3C
|
||||
__vt__20ItemStoryManagerBase = .data:0x80510CA0; // type:object size:0x3C
|
||||
|
||||
+1
-1
@@ -321,7 +321,7 @@ config.libs = [
|
||||
"progress_category": "game",
|
||||
"host": False,
|
||||
"objects": [
|
||||
Object(NonMatching, "toBeSorted/flag_managers/flag_managers.cpp", extra_cflags=["-i src"]),
|
||||
Object(Matching, "toBeSorted/flag_managers/flag_managers.cpp"),
|
||||
Object(NonMatching, "toBeSorted/special_item_drop_mgr.cpp"),
|
||||
Object(Matching, "d/d_base.cpp"),
|
||||
Object(Matching, "d/d_dvd.cpp"),
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef D_FLAG_FLAG_MANAGERS_H
|
||||
#define D_FLAG_FLAG_MANAGERS_H
|
||||
|
||||
#include "egg/core/eggHeap.h"
|
||||
|
||||
void setupFlagManagers(EGG::Heap *heap);
|
||||
void copyAllFlagManagersFromSave();
|
||||
void updateFlagForFlagIndex(u16 stage);
|
||||
void commitAllFlagManagers();
|
||||
|
||||
bool checkedMemcpy(void *dest, u32 destLen, const void *src, u32 count);
|
||||
|
||||
#endif
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
/** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value);
|
||||
/** 0x2C */ virtual u16 getCounterOrFlag(u16 flag) const;
|
||||
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag);
|
||||
/** 0x34 */ virtual void unk3(u16 arg);
|
||||
/** 0x34 */ virtual u16 unk3(u16 arg);
|
||||
/** 0x38 */ virtual const u16 *getSaveFlagSpace() const = 0;
|
||||
|
||||
|
||||
@@ -33,10 +33,8 @@ public:
|
||||
void copyFlagsFromSave_Priv();
|
||||
void setupUnkFlagStuff(UnkFlagDefinition *def, u16 count);
|
||||
void doCommit_Priv();
|
||||
void thunk_setOrClearFlag(u16 flag, u16 value);
|
||||
void setOrClearFlag(u16 flag, u16 value);
|
||||
u16 getFlag(u16 flag) const;
|
||||
u16 FUN_800bf600(u16 flag);
|
||||
u16 getFlag(u16 flag) const;
|
||||
void FUN_800bf610(u16 flag);
|
||||
u16 FUN_800bf640(u16 flag);
|
||||
void FUN_800bf690();
|
||||
@@ -72,12 +70,7 @@ public:
|
||||
u16 *flags = storyFlagsPtr->getFlagPtrUnchecked();
|
||||
FileManager::sInstance->setStoryFlags(flags, 0, sz);
|
||||
}
|
||||
/** 0x20 */ virtual void setFlag(u16 flag) override;
|
||||
/** 0x24 */ virtual void unsetFlag(u16 flag) override;
|
||||
/** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value) override;
|
||||
/** 0x2C */ virtual u16 getCounterOrFlag(u16 flag) const override;
|
||||
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag) override;
|
||||
/** 0x34 */ virtual void unk3(u16 arg) override;
|
||||
/** 0x38 */ virtual const u16 *getSaveFlagSpace() const override {
|
||||
return FileManager::sInstance->getStoryFlagsConst();
|
||||
};
|
||||
@@ -108,26 +101,32 @@ public:
|
||||
u16 *flags = storyFlagsPtr->getFlagPtrUnchecked();
|
||||
FileManager::sInstance->setItemFlags(flags, 0, sz);
|
||||
}
|
||||
/** 0x20 */ virtual void setFlag(u16 flag);
|
||||
/** 0x20 */ virtual void setFlag(u16 flag) {
|
||||
ItemStoryManagerBase::setFlag(flag & ~0x4000);
|
||||
}
|
||||
/** 0x24 */ virtual void unsetFlag(u16 flag) {
|
||||
ItemStoryManagerBase::unsetFlag(flag & ~0x4000);
|
||||
}
|
||||
/** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value) {
|
||||
ItemStoryManagerBase::thunk_setOrClearFlag(flag & ~0x4000, value);
|
||||
ItemStoryManagerBase::setFlagOrCounterToValue(flag & ~0x4000, value);
|
||||
}
|
||||
/** 0x2C */ virtual u16 getCounterOrFlag(u16 flag) const {
|
||||
return getFlag(flag & ~0x4000);
|
||||
return ItemStoryManagerBase::getCounterOrFlag(flag & ~0x4000);
|
||||
}
|
||||
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag) {
|
||||
return ItemStoryManagerBase::getUncommittedValue(flag & ~0x4000);
|
||||
}
|
||||
/** 0x34 */ virtual void unk3(u16 arg) {
|
||||
FUN_800bf600(arg & ~0x4000);
|
||||
/** 0x34 */ virtual u16 unk3(u16 arg) {
|
||||
return ItemStoryManagerBase::unk3(arg & ~0x4000);
|
||||
}
|
||||
/** 0x38 */ virtual const u16 *getSaveFlagSpace() const {
|
||||
return FileManager::sInstance->getItemFlagsConst();
|
||||
};
|
||||
|
||||
u16 getFlagDirect(u16 flag) {
|
||||
return ItemStoryManagerBase::getCounterOrFlag(flag);
|
||||
}
|
||||
|
||||
public:
|
||||
static ItemflagManager *sInstance;
|
||||
static u16 sFlags[0x40];
|
||||
|
||||
@@ -56,13 +56,13 @@ bool dTgDowsing_c::checkDowsing() const {
|
||||
|
||||
switch (mDowsingOption) {
|
||||
case TRIAL_0:
|
||||
return ItemflagManager::sInstance->getFlag(187) && !StoryflagManager::sInstance->getCounterOrFlag(93);
|
||||
return ItemflagManager::sInstance->getFlagDirect(187) && !StoryflagManager::sInstance->getCounterOrFlag(93);
|
||||
case TRIAL_1:
|
||||
return ItemflagManager::sInstance->getFlag(188) && !StoryflagManager::sInstance->getCounterOrFlag(97);
|
||||
return ItemflagManager::sInstance->getFlagDirect(188) && !StoryflagManager::sInstance->getCounterOrFlag(97);
|
||||
case TRIAL_2:
|
||||
return ItemflagManager::sInstance->getFlag(189) && !StoryflagManager::sInstance->getCounterOrFlag(98);
|
||||
return ItemflagManager::sInstance->getFlagDirect(189) && !StoryflagManager::sInstance->getCounterOrFlag(98);
|
||||
case TRIAL_3:
|
||||
return ItemflagManager::sInstance->getFlag(193) && !StoryflagManager::sInstance->getCounterOrFlag(99);
|
||||
return ItemflagManager::sInstance->getFlagDirect(193) && !StoryflagManager::sInstance->getCounterOrFlag(99);
|
||||
case PROPELLER: return DowsingTarget::hasPropellerDowsing();
|
||||
case WATER_BASIN: return DowsingTarget::hasWaterBasinDowsing();
|
||||
case CRYSTAL_BALL: return DowsingTarget::hasCrystalBallDowsing();
|
||||
|
||||
@@ -28,7 +28,7 @@ struct WalletStruct {
|
||||
};
|
||||
const WalletStruct *wallet = &wallet_definitions[3];
|
||||
for (; i < 4; i++, wallet--) {
|
||||
if (ItemflagManager::sInstance->getFlag(wallet->flag)) {
|
||||
if (ItemflagManager::sInstance->getFlagDirect(wallet->flag)) {
|
||||
return wallet->capacity;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
// clang-format off
|
||||
|
||||
#include "d/flag/flag_managers.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "toBeSorted/sceneflag_manager.h"
|
||||
#include <toBeSorted/flag_space.h>
|
||||
@@ -61,7 +63,7 @@ void ItemStoryManagerBase::setFlagszptr() {
|
||||
}
|
||||
|
||||
/** 800bf480 */
|
||||
u16 ItemStoryManagerBase::getCounterOrFlag(u16 flag) const {
|
||||
u16 ItemStoryManagerBase::getFlag(u16 flag) const {
|
||||
const u16 *data = this->getSaveFlagSpace();
|
||||
return this->unkFlagsPtr->getCounterOrFlag(flag, data, this->flagSizeMaybe);
|
||||
}
|
||||
@@ -91,13 +93,13 @@ void ItemStoryManagerBase::unsetFlag(u16 flag) {
|
||||
}
|
||||
|
||||
/** 800bf5d0 */
|
||||
void ItemStoryManagerBase::thunk_setOrClearFlag(u16 flag, u16 value) {
|
||||
void ItemStoryManagerBase::setFlagOrCounterToValue(u16 flag, u16 value) {
|
||||
this->setOrClearFlag(flag, value);
|
||||
}
|
||||
|
||||
/** 800bf5e0 */
|
||||
u16 ItemStoryManagerBase::getFlag(u16 flag) const {
|
||||
return ItemStoryManagerBase::getCounterOrFlag(flag);
|
||||
u16 ItemStoryManagerBase::getCounterOrFlag(u16 flag) const {
|
||||
return ItemStoryManagerBase::getFlag(flag);
|
||||
}
|
||||
|
||||
/** 800bf5f0 */
|
||||
@@ -106,7 +108,7 @@ u16 ItemStoryManagerBase::getUncommittedValue(u16 flag) {
|
||||
}
|
||||
|
||||
/** 800bf600 */
|
||||
u16 ItemStoryManagerBase::FUN_800bf600(u16 flag) {
|
||||
u16 ItemStoryManagerBase::unk3(u16 flag) {
|
||||
return this->FUN_800bf640(flag);
|
||||
}
|
||||
|
||||
@@ -203,79 +205,54 @@ bool ItemflagManager::commit() {
|
||||
#include <m/m_heap.h>
|
||||
|
||||
static void postSetup();
|
||||
static void updateFlagForFlagIndex(u16 stage);
|
||||
class TBoxFlagManagerSub : public TBoxFlagManager {
|
||||
|
||||
template <typename T>
|
||||
class MyFlagManager : public T {
|
||||
public:
|
||||
TBoxFlagManagerSub() {
|
||||
TBoxFlagManager::sInstance = this;
|
||||
MyFlagManager<T>() {
|
||||
}
|
||||
// virtual ~TBoxFlagManagerSub() {}
|
||||
};
|
||||
|
||||
class EnemyDefeatManagerSub : public EnemyDefeatManager {
|
||||
// virtual ~EnemyDefeatManagerSub() {}
|
||||
};
|
||||
|
||||
|
||||
class StoryflagManagerSub : public StoryflagManager {
|
||||
// virtual ~StoryflagManagerSub() {}
|
||||
};
|
||||
|
||||
class ItemflagManagerSub : public ItemflagManager {
|
||||
// virtual ~ItemflagManagerSub() {}
|
||||
};
|
||||
|
||||
class SceneflagManagerSub : public SceneflagManager {
|
||||
|
||||
};
|
||||
|
||||
class DungeonflagManagerSub : public DungeonflagManager {
|
||||
|
||||
};
|
||||
|
||||
class SkipflagManagerSub : public SkipflagManager {
|
||||
|
||||
~MyFlagManager<T>() {}
|
||||
};
|
||||
|
||||
void setupFlagManagers(EGG::Heap *heap) {
|
||||
if (SceneflagManager::sInstance == nullptr) {
|
||||
SceneflagManager::sInstance = new (heap) SceneflagManagerSub();
|
||||
SceneflagManager::sInstance = new (heap) MyFlagManager<SceneflagManager>();
|
||||
mHeap m(heap);
|
||||
SceneflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (TBoxFlagManager::sInstance == nullptr) {
|
||||
TBoxFlagManager::sInstance = new (heap) TBoxFlagManagerSub();
|
||||
TBoxFlagManager::sInstance = new (heap) MyFlagManager<TBoxFlagManager>();
|
||||
mHeap m(heap);
|
||||
TBoxFlagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (EnemyDefeatManager::sInstance == nullptr) {
|
||||
EnemyDefeatManager::sInstance = new (heap) EnemyDefeatManagerSub();
|
||||
EnemyDefeatManager::sInstance = new (heap) MyFlagManager<EnemyDefeatManager>();
|
||||
mHeap m(heap);
|
||||
EnemyDefeatManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (StoryflagManager::sInstance == nullptr) {
|
||||
StoryflagManager::sInstance = new (heap) StoryflagManagerSub();
|
||||
StoryflagManager::sInstance = new (heap) MyFlagManager<StoryflagManager>();
|
||||
mHeap m(heap);
|
||||
StoryflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (ItemflagManager::sInstance == nullptr) {
|
||||
ItemflagManager::sInstance = new (heap) ItemflagManagerSub();
|
||||
ItemflagManager::sInstance = new (heap) MyFlagManager<ItemflagManager>();
|
||||
mHeap m(heap);
|
||||
ItemflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (DungeonflagManager::sInstance == nullptr) {
|
||||
DungeonflagManager::sInstance = new (heap) DungeonflagManagerSub();
|
||||
DungeonflagManager::sInstance = new (heap) MyFlagManager<DungeonflagManager>();
|
||||
mHeap m(heap);
|
||||
DungeonflagManager::sInstance->init();
|
||||
}
|
||||
|
||||
if (SkipflagManager::sInstance == nullptr) {
|
||||
SkipflagManager::sInstance = new (heap) SkipflagManagerSub();
|
||||
SkipflagManager::sInstance = new (heap) MyFlagManager<SkipflagManager>();
|
||||
mHeap m(heap);
|
||||
SkipflagManager::sInstance->init();
|
||||
}
|
||||
@@ -298,7 +275,7 @@ void copyAllFlagManagersFromSave() {
|
||||
EnemyDefeatManager::sInstance->copyFromSave(flag);
|
||||
}
|
||||
|
||||
static void updateFlagForFlagIndex(u16 stage) {
|
||||
void updateFlagForFlagIndex(u16 stage) {
|
||||
SceneflagManager::sInstance->updateFlagindex(stage);
|
||||
TBoxFlagManager::sInstance->copyFromSave(stage);
|
||||
EnemyDefeatManager::sInstance->updateFlagIndex(stage);
|
||||
@@ -315,7 +292,7 @@ void commitAllFlagManagers() {
|
||||
EnemyDefeatManager::sInstance->commitIfNecessary();
|
||||
}
|
||||
|
||||
extern "C" bool checkedMemcpy(void *dest, u32 destLen, const void *src, u32 count) {
|
||||
bool checkedMemcpy(void *dest, u32 destLen, const void *src, u32 count) {
|
||||
if (dest == nullptr || src == nullptr || destLen < count || destLen > 0xFFFF) {
|
||||
return true;
|
||||
} else {
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
#include "d/flag/flag_managers.h"
|
||||
#include "toBeSorted/flag_space.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
#include <common.h>
|
||||
|
||||
extern "C" bool checkedMemcpy(void *dest, u32 destLen, const void *src, u32 count);
|
||||
#include "common.h"
|
||||
|
||||
u16 *FlagSpace::getFlagPtrChecked() const {
|
||||
filemanagerCheck();
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
#include "common.h"
|
||||
#include "d/flag/flag_managers.h"
|
||||
#include "toBeSorted/bitwise_flag_helper.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
#include "toBeSorted/flag_space.h"
|
||||
|
||||
extern "C" bool checkedMemcpy(void *dest, u32 destLen, const void *src, u32 count);
|
||||
|
||||
class SkipflagManager {
|
||||
public:
|
||||
bool mShouldCommit;
|
||||
|
||||
Reference in New Issue
Block a user