summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-09-13 10:05:17 +0200
committerGitHub <noreply@github.com>2025-09-13 10:05:17 +0200
commit342f867df2825eb5d76bea7e2a85cba1cdd60c80 (patch)
tree8de6499e1a3ae3dec95d22550b6f68bf20b7f2b7 /include
parent8efc3f6de1b84b3c7f2424e8984b8b0a8fdc2f73 (diff)
parentda63feb111ea145e33be6d6bf108e6d8f559e77b (diff)
Merge pull request #233 from robojumper/arc-dvd-ret-cleanups
Small status/result cleanups for arc managers
Diffstat (limited to 'include')
-rw-r--r--include/d/d_rawarchive.h23
-rw-r--r--include/m/m_dvd.h6
-rw-r--r--include/toBeSorted/arc_managers/current_stage_arc_manager.h2
-rw-r--r--include/toBeSorted/arc_managers/layout_arc_manager.h33
-rw-r--r--include/toBeSorted/arc_managers/oarc_manager.h32
5 files changed, 54 insertions, 42 deletions
diff --git a/include/d/d_rawarchive.h b/include/d/d_rawarchive.h
index 3835ae10..aead942f 100644
--- a/include/d/d_rawarchive.h
+++ b/include/d/d_rawarchive.h
@@ -6,6 +6,13 @@
#include "nw4r/g3d/res/g3d_resfile.h"
#include "sized_string.h"
+enum dArcResult_e {
+ D_ARC_RESULT_WAIT = 1,
+ D_ARC_RESULT_OK = 0,
+ D_ARC_RESULT_ERROR_INTERNAL = -1,
+ D_ARC_RESULT_ERROR_NOT_FOUND = -2,
+};
+
class ArcCallbackHandlerBase {
public:
ArcCallbackHandlerBase() : mPrefix(' ') {}
@@ -26,8 +33,6 @@ public:
void BindSystemModelsAndLighting(nw4r::g3d::ResFile);
-// TODO: loading status could be an enum (-2/-1/0/+1)
-
// Ghidra: ArcManagerEntry
// size: 0x40
class dRawArcEntry_c {
@@ -41,10 +46,10 @@ public:
static BOOL checkArcExistsOnDisk(const char *fileName, const char *dirName);
static BOOL checkArcExistsOnDiskInner(SizedString<128> &path, const char *fileName, const char *dirName);
- int mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap);
- int onMount(void *callbackArg);
+ dArcResult_e mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap);
+ dArcResult_e onMount(void *callbackArg);
- int ensureLoadedMaybe(void *callbackArg);
+ dArcResult_e ensureLoadedMaybe(void *callbackArg);
inline bool isReferenced() {
return mRefCount != 0;
@@ -105,14 +110,14 @@ public:
bool init(u16 count, ArcCallbackHandler *callbackArg, EGG::Heap *heap);
BOOL getArcOrLoadFromDisk(const char *name, const char *dirName, u8 mountDirection, EGG::Heap *heap);
BOOL addEntryFromSuperArc(const char *name, void *data, u8 mountDirection, EGG::Heap *heap);
- int ensureLoadedMaybe2(const char *name);
- int ensureLoadedMaybe(const char *name);
+ dArcResult_e ensureLoadedMaybe2(const char *name);
+ dArcResult_e ensureLoadedMaybe(const char *name);
bool hasEntry(const char *name);
BOOL decreaseRefCount(const char *name);
void *getDataFromOarc(const char *name, const char *path);
void *getSubEntryData(const char *name, const char *path);
void *getLoadedArcData(const char *name);
- int ensureAllEntriesLoaded();
+ dArcResult_e ensureAllEntriesLoaded();
dRawArcEntry_c *findEntry(const char *name) const;
dRawArcEntry_c *findEmptySlot();
dRawArcEntry_c *findLoadedEntry(const char *name);
@@ -123,4 +128,4 @@ private:
/* 0x8 */ ArcCallbackHandler *mCallbackArg;
};
-#endif;
+#endif
diff --git a/include/m/m_dvd.h b/include/m/m_dvd.h
index 6dc49b88..64272a18 100644
--- a/include/m/m_dvd.h
+++ b/include/m/m_dvd.h
@@ -47,6 +47,7 @@ EGG::Heap *getArchiveHeap();
} // namespace mDvd
class mDvd_command_c {
+ friend class mDvd_param_c;
public:
mDvd_command_c();
virtual ~mDvd_command_c();
@@ -60,9 +61,14 @@ public:
static void destroy(mDvd_command_c **cmd);
void do_delete();
+ bool isDone() const {
+ return mStatus != 0;
+ }
+
void *operator new(size_t size);
void operator delete(void *ptr);
+protected:
mDvd_command_c *mNext;
u8 mStatus;
u8 mMountDirection;
diff --git a/include/toBeSorted/arc_managers/current_stage_arc_manager.h b/include/toBeSorted/arc_managers/current_stage_arc_manager.h
index 1fadc389..25afab1f 100644
--- a/include/toBeSorted/arc_managers/current_stage_arc_manager.h
+++ b/include/toBeSorted/arc_managers/current_stage_arc_manager.h
@@ -30,7 +30,7 @@ public:
EGG::ExpHeap *getHeap(s32 roomid);
- inline int ensureAllEntriesLoaded() {
+ inline dArcResult_e ensureAllEntriesLoaded() {
return mArcTable.ensureAllEntriesLoaded();
}
diff --git a/include/toBeSorted/arc_managers/layout_arc_manager.h b/include/toBeSorted/arc_managers/layout_arc_manager.h
index 0c036acc..48b38789 100644
--- a/include/toBeSorted/arc_managers/layout_arc_manager.h
+++ b/include/toBeSorted/arc_managers/layout_arc_manager.h
@@ -5,6 +5,20 @@
#include "d/d_rawarchive.h"
#include "egg/core/eggHeap.h"
+class LayoutArcControl {
+public:
+ LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {}
+ virtual ~LayoutArcControl();
+ void set(const char *const *layoutArcs, s32 numArcs);
+ bool load(EGG::Heap *heap) const;
+ bool allLoaded() const;
+ bool release();
+
+private:
+ const char *const *mLayoutArcs;
+ s32 mNumArcs;
+};
+
class LayoutArcManager {
public:
LayoutArcManager();
@@ -14,13 +28,13 @@ public:
void init(EGG::Heap *heap);
- inline int ensureAllEntriesLoaded() {
+ inline dArcResult_e ensureAllEntriesLoaded() {
return mArcTable.ensureAllEntriesLoaded();
}
bool loadLayoutArcFromDisk(const char *object, EGG::Heap *heap);
- int ensureLoaded1(const char *object);
- int ensureLoaded2(const char *object);
+ dArcResult_e ensureLoaded1(const char *object);
+ dArcResult_e ensureLoaded2(const char *object);
bool hasEntry(const char *object);
bool decrement(const char *path);
void *getData(const char *oarcName, const char *fileName);
@@ -35,17 +49,4 @@ private:
dRawArcTable_c mArcTable;
};
-class LayoutArcControl {
-public:
- LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {}
- virtual ~LayoutArcControl();
- void set(const char *const *layoutArcs, s32 numArcs);
- void load(EGG::Heap *heap);
- void release();
-
-private:
- const char **mLayoutArcs;
- s32 mNumArcs;
-};
-
#endif
diff --git a/include/toBeSorted/arc_managers/oarc_manager.h b/include/toBeSorted/arc_managers/oarc_manager.h
index 8d75dd75..ec127221 100644
--- a/include/toBeSorted/arc_managers/oarc_manager.h
+++ b/include/toBeSorted/arc_managers/oarc_manager.h
@@ -4,6 +4,19 @@
#include "d/d_rawarchive.h"
#include "egg/core/eggHeap.h"
+class ObjectArcControl {
+public:
+ ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {}
+ virtual ~ObjectArcControl();
+ void set(const char *const *objectArcs, s32 numArcs);
+ bool load(EGG::Heap *heap) const;
+ bool release();
+
+private:
+ const char *const *mObjectArcs;
+ s32 mNumArcs;
+};
+
class OarcManager {
public:
OarcManager();
@@ -13,15 +26,15 @@ public:
void init(EGG::Heap *heap);
- inline int ensureAllEntriesLoaded() {
+ inline dArcResult_e ensureAllEntriesLoaded() {
return mArcTable.ensureAllEntriesLoaded();
}
bool checkIfObjectArcExistsOnDisk(const char *object);
bool loadObjectArcFromDisk(const char *object, EGG::Heap *heap);
bool addEntryFromSuperArc(const char *object, void *data, EGG::Heap *heap);
- int ensureLoaded1(const char *object);
- void ensureLoaded2(const char *object);
+ dArcResult_e ensureLoaded1(const char *object);
+ dArcResult_e ensureLoaded2(const char *object);
bool decrement(const char *path);
void *getData(const char *oarcName, const char *fileName);
@@ -41,17 +54,4 @@ private:
dRawArcTable_c mArcTable;
};
-class ObjectArcControl {
-public:
- ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {}
- virtual ~ObjectArcControl();
- void set(const char *const *objectArcs, s32 numArcs);
- void load(EGG::Heap *heap);
- void release();
-
-private:
- const char **mObjectArcs;
- s32 mNumArcs;
-};
-
#endif