Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions config/SOUE01/splits.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,15 @@ toBeSorted/unk_flag_stuff.cpp:
toBeSorted/bitwise_flag_helper.cpp:
.text start:0x800BF200 end:0x800BF264

toBeSorted/itemstory_manager_base.cpp:
.text start:0x800BF270 end:0x800BF694

toBeSorted/storyflag_manager.cpp:
.text start:0x800BF6A0 end:0x800BF7B4

toBeSorted/itemflag_manager.cpp:
.text start:0x800BF7C0 end:0x800BF8CC

toBeSorted/skipflag_manager.cpp:
.text start:0x800BFBA0 end:0x800BFE00
.sbss start:0x80575408 end:0x8057540C
Expand Down
74 changes: 37 additions & 37 deletions config/SOUE01/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2228,7 +2228,7 @@ fn_80054CF0 = .text:0x80054CF0; // type:function size:0x88
fn_80054D80 = .text:0x80054D80; // type:function size:0x98
fn_80054E20 = .text:0x80054E20; // type:function size:0x88
fn_80054EB0 = .text:0x80054EB0; // type:function size:0x4
fn_80054EC0 = .text:0x80054EC0; // type:function size:0xC
__nw__FUl = .text:0x80054EC0; // type:function size:0xC
fn_80054ED0 = .text:0x80054ED0; // type:function size:0xC
__dl__FPv = .text:0x80054EE0; // type:function size:0x8
fn_80054EF0 = .text:0x80054EF0; // type:function size:0x8
Expand Down Expand Up @@ -4132,45 +4132,45 @@ calculateMask__12UnkFlagStuffFi = .text:0x800BEF90; // type:function size:0x18
doNothing__12UnkFlagStuffFUi = .text:0x800BEFB0; // type:function size:0x4
__ct__12UnkFlagStuffFUsP17UnkFlagDefinition = .text:0x800BEFC0; // type:function size:0xC
prepareIndexShiftMask__12UnkFlagStuffFUsUiPUsPUcPUs = .text:0x800BEFD0; // type:function size:0x80
maskForIdx__12UnkFlagStuffFUs = .text:0x800BF050; // type:function size:0x50
maskForIdx__12UnkFlagStuffFUsUs = .text:0x800BF050; // type:function size:0x50
getCounterOrFlag__12UnkFlagStuffFUsPUsUi = .text:0x800BF0A0; // type:function size:0x68
setCounterOrFlag__12UnkFlagStuffFUsPUsUiUi = .text:0x800BF110; // type:function size:0x9C
checkFlagValid__12UnkFlagStuffFUsUi = .text:0x800BF1B0; // type:function size:0x50
checkFlag__17BitwiseFlagHelperFUsUsPCUsUs = .text:0x800BF200; // type:function size:0x14
setFlag__17BitwiseFlagHelperFUsUsPUsUs = .text:0x800BF220; // type:function size:0x20
unsetFlag__17BitwiseFlagHelperFUsUsPUsUs = .text:0x800BF240; // type:function size:0x24
fn_800BF270 = .text:0x800BF270; // type:function size:0x28
fn_800BF2A0 = .text:0x800BF2A0; // type:function size:0x70
fn_800BF310 = .text:0x800BF310; // type:function size:0xC
fn_800BF320 = .text:0x800BF320; // type:function size:0x60
fn_800BF380 = .text:0x800BF380; // type:function size:0x58
fn_800BF3E0 = .text:0x800BF3E0; // type:function size:0x88
fn_800BF470 = .text:0x800BF470; // type:function size:0x4
fn_800BF480 = .text:0x800BF480; // type:function size:0x58
fn_800BF4E0 = .text:0x800BF4E0; // type:function size:0x50
fn_800BF530 = .text:0x800BF530; // type:function size:0x78
fn_800BF5B0 = .text:0x800BF5B0; // type:function size:0x8
fn_800BF5C0 = .text:0x800BF5C0; // type:function size:0x8
fn_800BF5D0 = .text:0x800BF5D0; // type:function size:0x4
fn_800BF5E0 = .text:0x800BF5E0; // type:function size:0x4
fn_800BF5F0 = .text:0x800BF5F0; // type:function size:0x4
fn_800BF600 = .text:0x800BF600; // type:function size:0x4
fn_800BF610 = .text:0x800BF610; // type:function size:0x18
fn_800BF630 = .text:0x800BF630; // type:function size:0x4
fn_800BF640 = .text:0x800BF640; // type:function size:0x10
fn_800BF650 = .text:0x800BF650; // type:function size:0x40
fn_800BF690 = .text:0x800BF690; // type:function size:0x4
fn_800BF6A0 = .text:0x800BF6A0; // type:function size:0x5C
fn_800BF700 = .text:0x800BF700; // type:function size:0x3C
fn_800BF740 = .text:0x800BF740; // type:function size:0x10
fn_800BF750 = .text:0x800BF750; // type:function size:0x4
fn_800BF760 = .text:0x800BF760; // type:function size:0x4C
fn_800BF7B0 = .text:0x800BF7B0; // type:function size:0x4
fn_800BF7C0 = .text:0x800BF7C0; // type:function size:0x5C
fn_800BF820 = .text:0x800BF820; // type:function size:0x3C
fn_800BF860 = .text:0x800BF860; // type:function size:0x10
fn_800BF870 = .text:0x800BF870; // type:function size:0x4
fn_800BF880 = .text:0x800BF880; // type:function size:0x4C
__ct__20ItemStoryManagerBaseFv = .text:0x800BF270; // type:function size:0x28
__dt__20ItemStoryManagerBaseFv = .text:0x800BF2A0; // type:function size:0x70
setFlagSizes__20ItemStoryManagerBaseFUsUs = .text:0x800BF310; // type:function size:0xC
setupUnkFlagStuff__20ItemStoryManagerBaseFP17UnkFlagDefinitionUs = .text:0x800BF320; // type:function size:0x60
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__20ItemStoryManagerBaseFUs = .text:0x800BF480; // type:function size:0x58
getUncommittedValue_Priv__20ItemStoryManagerBaseFUs = .text:0x800BF4E0; // type:function size:0x50
setOrClearFlag__20ItemStoryManagerBaseFUsb = .text:0x800BF530; // type:function size:0x78
setFlag__20ItemStoryManagerBaseFUs = .text:0x800BF5B0; // type:function size:0x8
unsetFlag__20ItemStoryManagerBaseFUs = .text:0x800BF5C0; // type:function size:0x8
thunk_setOrClearFlag__20ItemStoryManagerBaseFUsb = .text:0x800BF5D0; // type:function size:0x4
FUN_800bf5e0__20ItemStoryManagerBaseFUs = .text:0x800BF5E0; // type:function size:0x4
getUncommittedValue__20ItemStoryManagerBaseFUs = .text:0x800BF5F0; // type:function size:0x4
FUN_800bf600__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
doCommit_Priv__20ItemStoryManagerBaseFv = .text:0x800BF650; // type:function size:0x40
FUN_800bf690__20ItemStoryManagerBaseFv = .text:0x800BF690; // type:function size:0x4
__ct__16StoryFlagManagerFv = .text:0x800BF6A0; // type:function size:0x5C
copyFlagsFromSave__16StoryFlagManagerFv = .text:0x800BF700; // type:function size:0x3C
setupUnkFlagsStuff__16StoryFlagManagerFv = .text:0x800BF740; // type:function size:0x10
onDirty__16StoryFlagManagerFv = .text:0x800BF750; // type:function size:0x4
doCommit__16StoryFlagManagerFv = .text:0x800BF760; // type:function size:0x4C
unsetFlag__16StoryFlagManagerFUs = .text:0x800BF7B0; // type:function size:0x4
__ct__15ItemFlagManagerFv = .text:0x800BF7C0; // type:function size:0x5C
copyFlagsFromSave__15ItemFlagManagerFv = .text:0x800BF820; // type:function size:0x3C
setupUnkFlagsStuff__15ItemFlagManagerFv = .text:0x800BF860; // type:function size:0x10
onDirty__15ItemFlagManagerFv = .text:0x800BF870; // type:function size:0x4
doCommit__15ItemFlagManagerFv = .text:0x800BF880; // type:function size:0x4C
fn_800BF8D0 = .text:0x800BF8D0; // type:function size:0x54
fn_800BF930 = .text:0x800BF930; // type:function size:0xC
fn_800BF940 = .text:0x800BF940; // type:function size:0x3C
Expand Down Expand Up @@ -31009,9 +31009,9 @@ lbl_80510B88 = .data:0x80510B88; // type:object size:0x3C
lbl_80510BC4 = .data:0x80510BC4; // type:object size:0x3C
lbl_80510C00 = .data:0x80510C00; // type:object size:0x14
lbl_80510C14 = .data:0x80510C14; // type:object size:0x14
lbl_80510C28 = .data:0x80510C28; // type:object size:0x3C
lbl_80510C64 = .data:0x80510C64; // type:object size:0x3C
lbl_80510CA0 = .data:0x80510CA0; // type:object size:0x3C
__vt__15ItemFlagManager = .data:0x80510C28; // type:object size:0x3C
__vt__16StoryFlagManager = .data:0x80510C64; // type:object size:0x3C
__vt__20ItemStoryManagerBase = .data:0x80510CA0; // type:object size:0x3C
__vt__18EnemyDefeatManager = .data:0x80510CDC; // type:object size:0x14
__vt__15TBoxFlagManager = .data:0x80510CF0; // type:object size:0x14
__vt__9FlagSpace = .data:0x80510D04; // type:object size:0xC
Expand Down
3 changes: 3 additions & 0 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,9 @@ def nw4rLib(lib_name, objects):
Object(Matching, "toBeSorted/sceneflag_manager.cpp"),
Object(NonMatching, "toBeSorted/flag_space.cpp"),
Object(NonMatching, "toBeSorted/misc_flag_managers.cpp"),
Object(Matching, "toBeSorted/itemstory_manager_base.cpp"),
Object(NonMatching, "toBeSorted/itemflag_manager.cpp"),
Object(NonMatching, "toBeSorted/storyflag_manager.cpp"),
Object(Matching, "toBeSorted/skipflag_manager.cpp"),
Object(Matching, "c/c_list.cpp"),
Object(Matching, "c/c_tree.cpp"),
Expand Down
17 changes: 17 additions & 0 deletions include/toBeSorted/itemflag_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifndef ITEMFLAG_MANAGER_H
#define ITEMFLAG_MANAGER_H

#include <toBeSorted/itemstory_manager_base.h>

class ItemFlagManager: ItemStoryManagerBase {
public:
FlagSpace itemFlags;

ItemFlagManager();
void copyFlagsFromSave() override;
void setupUnkFlagsStuff() override;
void onDirty() override;
bool doCommit() override;
};

#endif
49 changes: 49 additions & 0 deletions include/toBeSorted/itemstory_manager_base.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#ifndef ITEMSTORY_MANAGER_BASE_H
#define ITEMSTORY_MANAGER_BASE_H

#include <common.h>
#include <toBeSorted/flag_space.h>
#include <toBeSorted/unk_flag_stuff.h>

class ItemStoryManagerBase {
public:
// vtables, how do they work???
/** 0x00 */ ItemStoryManagerBase();
virtual void unk();
/** 0x08 */ ~ItemStoryManagerBase();
/** 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();
/** 0x2C */ virtual u32 getCounterOrFlag(u16 flag);
/** 0x30 */ virtual u32 getUncommittedValue(u16 flag);
/** 0x34 */ virtual void unk3();
/** 0x38 */ virtual u16 *getSaveFlagSpace() = 0;

void init();
void setFlagSizes(u16 flagSizeMaybe, u16 anotherFlagSizeMaybe);
void copyFlagsFromSave_Priv();
void setupUnkFlagStuff(UnkFlagDefinition *def, u16 count);
void doCommit_Priv();
void thunk_setOrClearFlag(u16 flag, bool value);
void setOrClearFlag(u16 flag, bool value);
u32 FUN_800bf5e0(u16 flag);
u16 FUN_800bf600(u16 flag);
void FUN_800bf610(u16 flag);
u16 FUN_800bf640(u16 flag);
void FUN_800bf690();

u32 getUncommittedValue_Priv(u16 flag);

/** 0x04 */ u16 flagSizeMaybe;
/** 0x06 */ u16 anotherSizeMaybe;
/** 0x08 */ FlagSpace *storyFlagsPtr;
/** 0x0C */ UnkFlagStuff *unkFlagsPtr;
/** 0x10 */ bool dirty;
};

#endif
18 changes: 18 additions & 0 deletions include/toBeSorted/storyflag_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ifndef STORYFLAG_MANAGER_H
#define STORYFLAG_MANAGER_H

#include <toBeSorted/itemstory_manager_base.h>

class StoryFlagManager: ItemStoryManagerBase {
public:
FlagSpace storyFlags;

StoryFlagManager();
void copyFlagsFromSave() override;
void setupUnkFlagsStuff() override;
void onDirty() override;
void unsetFlag(u16 flag) override;
bool doCommit() override;
};

#endif
2 changes: 1 addition & 1 deletion include/toBeSorted/unk_flag_stuff.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class UnkFlagStuff {
void doNothing(u32 unused);
UnkFlagStuff(u16 count, UnkFlagDefinition *definitions);
void prepareIndexShiftMask(u16 counterIdx, u32 flagCount, u16 *pIndex, u8 *pShift, u16 *pMask);
u16 maskForIdx(u16 index);
u16 maskForIdx(u16 index, u16 flagSizeMaybe);
u32 getCounterOrFlag(u16 counterIdx, u16 *pData, u32 flagCount);
void setCounterOrFlag(u16 counterIdx, u16 *pData, u32 flagCount, u32 value);
u32 checkFlagValid(u16 counterIdx, u32 flagCount);
Expand Down
34 changes: 34 additions & 0 deletions src/toBeSorted/itemflag_manager.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include <toBeSorted/itemflag_manager.h>

// TODO Move
extern "C" u16 lbl_805A9BD8[];
extern "C" UnkFlagDefinition lbl_805116F4[];

/** 800bf7c0 */
ItemFlagManager::ItemFlagManager(): ItemStoryManagerBase(), itemFlags(lbl_805A9BD8, 0x40) {
}

/** 800bf820 */
void ItemFlagManager::copyFlagsFromSave() {
ItemStoryManagerBase::setFlagSizes(0x40, 0x80);
ItemStoryManagerBase::copyFlagsFromSave_Priv();
}

/** 800bf860 */
void ItemFlagManager::setupUnkFlagsStuff() {
this->setupUnkFlagStuff(lbl_805116F4, 0x1fe);
}

/** 800bf870 */
void ItemFlagManager::onDirty() {
}

/** 800bf880 */
bool ItemFlagManager::doCommit() {
if (this->dirty) {
ItemStoryManagerBase::doCommit_Priv();
ItemStoryManagerBase::FUN_800bf690();
return true;
}
return false;
}
124 changes: 124 additions & 0 deletions src/toBeSorted/itemstory_manager_base.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
#include <toBeSorted/itemstory_manager_base.h>

/** 800bf270 */
ItemStoryManagerBase::ItemStoryManagerBase(): flagSizeMaybe(0), anotherSizeMaybe(0), storyFlagsPtr(nullptr), unkFlagsPtr(nullptr), dirty(false) {

}

/** 800bf2a0 */
ItemStoryManagerBase::~ItemStoryManagerBase() {
if (this->unkFlagsPtr) {
delete this->unkFlagsPtr;
}
}

/** 800bf310 */
void ItemStoryManagerBase::setFlagSizes(u16 flagSizeMaybe, u16 anotherFlagSizeMaybe) {
this->flagSizeMaybe = flagSizeMaybe;
this->anotherSizeMaybe = anotherFlagSizeMaybe;
}

/** 800bf320 */
void ItemStoryManagerBase::setupUnkFlagStuff(UnkFlagDefinition *def, u16 count) {
UnkFlagStuff *stuff = new UnkFlagStuff(count, def);
this->unkFlagsPtr = stuff;
}

/** 800bf380 */
void ItemStoryManagerBase::copyFlagsFromSave_Priv() {
FlagSpace *current = this->storyFlagsPtr;
u16 *saved = this->getSaveFlagSpace();
current->copyFromSaveFile(saved, 0, this->flagSizeMaybe);
}

/** 800bf3e0 */
void ItemStoryManagerBase::init() {
u16 *space = this->getSaveFlagSpace();
if (space == nullptr || this->unkFlagsPtr == nullptr) {
this->setFlagszptr();
this->copyFlagsFromSave();
this->setupUnkFlagsStuff();
}
}

/** 800bf470 */
void ItemStoryManagerBase::setFlagszptr() {

}

/** 800bf480 */
u32 ItemStoryManagerBase::getCounterOrFlag(u16 flag) {
u16 *data = this->getSaveFlagSpace();
return this->unkFlagsPtr->getCounterOrFlag(flag, data, this->flagSizeMaybe);
}

/** 800bf4e0 */
u32 ItemStoryManagerBase::getUncommittedValue_Priv(u16 flag) {
u16 *data = this->storyFlagsPtr->getFlagPtrUnchecked();
return this->unkFlagsPtr->getCounterOrFlag(flag, data, this->flagSizeMaybe);
}

/** 800bf530 */
void ItemStoryManagerBase::setOrClearFlag(u16 flag, bool value) {
FlagSpace *storyFlagsPtr = this->storyFlagsPtr;
u16 *pData = storyFlagsPtr->getFlagPtrChecked();
this->unkFlagsPtr->setCounterOrFlag(flag, pData, storyFlagsPtr->mCount, value);
this->FUN_800bf610(flag);
}

/** 800bf5b0 */
void ItemStoryManagerBase::setFlag(u16 flag) {
this->setOrClearFlag(flag, true);
}

/** 800bf5c0 */
void ItemStoryManagerBase::unsetFlag(u16 flag) {
this->setOrClearFlag(flag, false);
}

/** 800bf5d0 */
void ItemStoryManagerBase::thunk_setOrClearFlag(u16 flag, bool value) {
this->setOrClearFlag(flag, value);
}

/** 800bf5e0 */
u32 ItemStoryManagerBase::FUN_800bf5e0(u16 flag) {
return ItemStoryManagerBase::getCounterOrFlag(flag);
}

/** 800bf5f0 */
u32 ItemStoryManagerBase::getUncommittedValue(u16 flag) {
return this->getUncommittedValue_Priv(flag);
}

/** 800bf600 */
u16 ItemStoryManagerBase::FUN_800bf600(u16 flag) {
return this->FUN_800bf640(flag);
}

/** 800bf610 */
void ItemStoryManagerBase::FUN_800bf610(u16 flag) {
this->dirty = true;
this->onDirty();
}

/** 800bf630 */
void ItemStoryManagerBase::onDirty() {

}

/** 800bf640 */
u16 ItemStoryManagerBase::FUN_800bf640(u16 flag) {
return this->unkFlagsPtr->maskForIdx(flag, this->flagSizeMaybe);
}

/** 800bf650 */
void ItemStoryManagerBase::doCommit_Priv() {
this->doCommit();
this->dirty = false;
}

/* 800bf690 */
void ItemStoryManagerBase::FUN_800bf690() {

}
2 changes: 2 additions & 0 deletions src/toBeSorted/misc_flag_managers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ class EnemyDefeatManager : public CommittableFlagManager {
void setFlag(u16 flag);
};

/** 0x805753F0 */
EnemyDefeatManager *EnemyDefeatManager::sInstance = nullptr;
/** 0x805A7AD8 */
u16 EnemyDefeatManager::sEnemyDefeatFlags[4096] = {};

/* 0x800BEAC0 */
Expand Down
Loading