Layout arc manager

This commit is contained in:
robojumper
2024-05-29 23:02:12 +02:00
parent 892a040a97
commit 7d8831508e
4 changed files with 105 additions and 14 deletions
+6
View File
@@ -133,6 +133,12 @@ toBeSorted/arc_managers/oarc_manager.cpp:
.sdata start:0x80571D40 end:0x80571D68
.sbss start:0x80575280 end:0x80575288
toBeSorted/arc_managers/layout_arc_manager.cpp:
.text start:0x8006A0C0 end:0x8006A2D4
.data start:0x8050E048 end:0x8050E054
.sdata start:0x80571D68 end:0x80571D70
.sbss start:0x80575288 end:0x80575290
toBeSorted/sceneflag_manager.cpp:
.text start:0x800BD8C0 end:0x800BE7A8
.sbss start:0x805753E0 end:0x805753F0
+14 -14
View File
@@ -3023,17 +3023,17 @@ fn_80069EE0 = .text:0x80069EE0; // type:function size:0x6C
fn_80069F50 = .text:0x80069F50; // type:function size:0xC
fn_80069F60 = .text:0x80069F60; // type:function size:0x88
fn_80069FF0 = .text:0x80069FF0; // type:function size:0xC4
fn_8006A0C0 = .text:0x8006A0C0; // type:function size:0x44
fn_8006A110 = .text:0x8006A110; // type:function size:0x64
fn_8006A180 = .text:0x8006A180; // type:function size:0x14
fn_8006A1A0 = .text:0x8006A1A0; // type:function size:0x48
fn_8006A1F0 = .text:0x8006A1F0; // type:function size:0x8
fn_8006A200 = .text:0x8006A200; // type:function size:0x8
fn_8006A210 = .text:0x8006A210; // type:function size:0x8
fn_8006A220 = .text:0x8006A220; // type:function size:0x30
fn_8006A250 = .text:0x8006A250; // type:function size:0x8
fn_8006A260 = .text:0x8006A260; // type:function size:0x8
fn_8006A270 = .text:0x8006A270; // type:function size:0x64
__ct__16LayoutArcManagerFv = .text:0x8006A0C0; // type:function size:0x44
__dt__16LayoutArcManagerFv = .text:0x8006A110; // type:function size:0x64
init__16LayoutArcManagerFPQ23EGG4Heap = .text:0x8006A180; // type:function size:0x14
loadLayoutArcFromDisk__16LayoutArcManagerFPCcPQ23EGG4Heap = .text:0x8006A1A0; // type:function size:0x48
ensureLoaded1__16LayoutArcManagerFPCc = .text:0x8006A1F0; // type:function size:0x8
ensureLoaded2__16LayoutArcManagerFPCc = .text:0x8006A200; // type:function size:0x8
hasEntry__16LayoutArcManagerFPCc = .text:0x8006A210; // type:function size:0x8
decrement__16LayoutArcManagerFPCc = .text:0x8006A220; // type:function size:0x30
getData__16LayoutArcManagerFPCcPCc = .text:0x8006A250; // type:function size:0x8
getLoadedData__16LayoutArcManagerFPCc = .text:0x8006A260; // type:function size:0x8
create__16LayoutArcManagerFPQ23EGG4Heap = .text:0x8006A270; // type:function size:0x64
fn_8006A2E0 = .text:0x8006A2E0; // type:function size:0x6C
fn_8006A350 = .text:0x8006A350; // type:function size:0xC
fn_8006A360 = .text:0x8006A360; // type:function size:0x88
@@ -30791,7 +30791,7 @@ lbl_8050E010 = .data:0x8050E010; // type:object size:0x10 data:string
lbl_8050E020 = .data:0x8050E020; // type:object size:0xC data:string
__vt__11OarcManager = .data:0x8050E02C; // type:object size:0xC
lbl_8050E038 = .data:0x8050E038; // type:object size:0x10
lbl_8050E048 = .data:0x8050E048; // type:object size:0xC
__vt__16LayoutArcManager = .data:0x8050E048; // type:object size:0xC
lbl_8050E054 = .data:0x8050E054; // type:object size:0xC
lbl_8050E060 = .data:0x8050E060; // type:object size:0x30
lbl_8050E090 = .data:0x8050E090; // type:object size:0x2FC
@@ -37665,7 +37665,7 @@ lbl_80571D48 = .sdata:0x80571D48; // type:object size:0x5 data:string
lbl_80571D50 = .sdata:0x80571D50; // type:object size:0x5 data:string
lbl_80571D58 = .sdata:0x80571D58; // type:object size:0x5 data:string
lbl_80571D60 = .sdata:0x80571D60; // type:object size:0x5 data:string
lbl_80571D68 = .sdata:0x80571D68; // type:object size:0x8
lbl_80571D68 = .sdata:0x80571D68; // type:object size:0x7 data:string
lbl_80571D70 = .sdata:0x80571D70; // type:object size:0x4
lbl_80571D74 = .sdata:0x80571D74; // type:object size:0x4
lbl_80571D78 = .sdata:0x80571D78; // type:object size:0x4 data:wstring
@@ -39824,7 +39824,7 @@ lbl_80575274 = .sbss:0x80575274; // type:object size:0x4 data:4byte
sInstance__22CurrentStageArcManager = .sbss:0x80575278; // type:object size:0x4 data:4byte
@GUARD@getCurrentStageDirectory__22CurrentStageArcManagerFv@sStageDirTmp = .sbss:0x8057527C; // type:object size:0x1 data:byte
sInstance__11OarcManager = .sbss:0x80575280; // type:object size:0x4 data:4byte
lbl_80575288 = .sbss:0x80575288; // type:object size:0x8 data:4byte
sInstance__16LayoutArcManager = .sbss:0x80575288; // type:object size:0x8 data:4byte
lbl_80575290 = .sbss:0x80575290; // type:object size:0x4
lbl_80575294 = .sbss:0x80575294; // type:object size:0x4
lbl_80575298 = .sbss:0x80575298; // type:object size:0x4 data:4byte
+1
View File
@@ -294,6 +294,7 @@ config.libs = [
Object(NonMatching, "d/a/obj/d_a_obj_base.cpp"),
Object(Matching, "toBeSorted/arc_managers/current_stage_arc_manager.cpp"),
Object(Matching, "toBeSorted/arc_managers/oarc_manager.cpp"),
Object(Matching, "toBeSorted/arc_managers/layout_arc_manager.cpp"),
Object(Matching, "toBeSorted/save_file.cpp"),
Object(Matching, "toBeSorted/counters/counter.cpp"),
Object(Matching, "toBeSorted/counters/rupee_counter.cpp"),
@@ -0,0 +1,84 @@
#include <d/d_heap.h>
#include <d/d_rawarchive.h>
#include <egg/core/eggHeap.h>
// clang-format off
#include <sized_string.h>
// clang-format on
class LayoutArcManager {
LayoutArcManager();
virtual ~LayoutArcManager();
dRawArcTable_c mArcTable;
static LayoutArcManager *sInstance;
static bool create(EGG::Heap *heap);
void init(EGG::Heap *heap);
bool loadLayoutArcFromDisk(const char *object, EGG::Heap *heap);
void ensureLoaded1(const char *object);
void ensureLoaded2(const char *object);
bool hasEntry(const char *object);
bool decrement(const char *path);
void *getData(const char *oarcName, const char *fileName);
void *getLoadedData(const char *path);
};
LayoutArcManager *LayoutArcManager::sInstance;
LayoutArcManager::LayoutArcManager() {
sInstance = this;
}
LayoutArcManager::~LayoutArcManager() {
sInstance = nullptr;
}
extern char lbl_80575250;
void LayoutArcManager::init(EGG::Heap *heap) {
mArcTable.init(16, &lbl_80575250, heap);
}
bool LayoutArcManager::loadLayoutArcFromDisk(const char *object, EGG::Heap *heap) {
if (heap == nullptr) {
heap = dHeap::layoutResHeap.heap;
}
return mArcTable.getArcOrLoadFromDisk(object, "Layout", 0, heap);
}
void LayoutArcManager::ensureLoaded1(const char *object) {
mArcTable.ensureLoadedMaybe2(object);
}
void LayoutArcManager::ensureLoaded2(const char *object) {
mArcTable.ensureLoadedMaybe(object);
}
bool LayoutArcManager::hasEntry(const char *object) {
return mArcTable.hasEntry(object);
}
bool LayoutArcManager::decrement(const char *path) {
return mArcTable.decreaseRefCount(path);
}
void *LayoutArcManager::getData(const char *oarcName, const char *fileName) {
return mArcTable.getDataFromOarc(oarcName, fileName);
}
void *LayoutArcManager::getLoadedData(const char *path) {
return mArcTable.getLoadedArcData(path);
}
bool LayoutArcManager::create(EGG::Heap *heap) {
new (heap, 0x04) LayoutArcManager();
if (LayoutArcManager::sInstance == nullptr) {
return false;
}
LayoutArcManager::sInstance->init(heap);
return true;
}