summaryrefslogtreecommitdiff
path: root/src/d/d_resorce.cpp
diff options
context:
space:
mode:
authorLuke Street <luke.street@encounterpc.com>2023-09-10 00:42:26 -0400
committerLuke Street <luke.street@encounterpc.com>2023-09-10 00:48:55 -0400
commitadb95b135c3d7498eba29bbd9728d345eed5a407 (patch)
tree655575b939c12067569263171b68c079b1a232c8 /src/d/d_resorce.cpp
parent81ac53f1317dafb3506ae3ed8b2820d40645c3c8 (diff)
Import project
Original repository: https://github.com/encounter/ww
Diffstat (limited to 'src/d/d_resorce.cpp')
-rw-r--r--src/d/d_resorce.cpp329
1 files changed, 329 insertions, 0 deletions
diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp
new file mode 100644
index 00000000..f2856450
--- /dev/null
+++ b/src/d/d_resorce.cpp
@@ -0,0 +1,329 @@
+//
+// Generated by dtk
+// Translation Unit: d_resorce.cpp
+//
+
+#include "d_resorce.h"
+#include "dolphin/types.h"
+
+/* 8006D804-8006D824 .text __ct__11dRes_info_cFv */
+dRes_info_c::dRes_info_c()
+ : mCount(0)
+ , mpDMCommand(NULL)
+ , mpArchive(NULL)
+ , mpParentHeap(NULL)
+ , mpDataHeap(NULL)
+ , mpRes(NULL)
+{
+}
+
+/* 8006D824-8006D8F4 .text __dt__11dRes_info_cFv */
+dRes_info_c::~dRes_info_c() {
+ if (mpDMCommand != NULL) {
+ delete mpDMCommand;
+ mpDMCommand = NULL;
+ } else if (mpArchive != NULL) {
+ deleteArchiveRes();
+ if (mpDataHeap != NULL) {
+ mDoExt_destroySolidHeap(mpDataHeap);
+ mpDataHeap = NULL;
+ mpArchive->unmount();
+ }
+ mpRes = NULL;
+ mpArchive = NULL;
+ }
+}
+
+/* 8006D8F4-8006D990 .text set__11dRes_info_cFPCcPCcUcP7JKRHeap */
+int dRes_info_c::set(char const* pArcName, char const* pArcPath, u8 param_2, JKRHeap* pHeap) {
+ char path[40];
+
+ if (*pArcPath != NULL) {
+ snprintf(path, 40, "%s%s.arc", pArcPath, pArcName);
+ mDMCommand = mDoDvdThd_mountArchive_c::create(path, param_2, pHeap);
+
+ if (mDMCommand == NULL) {
+ return false;
+ }
+ }
+ strncpy(mArchiveName, pArcName, 10);
+ return true;
+}
+
+/* 8006D990-8006DCEC .text setToonTex__FP12J3DModelData */
+static void setToonTex(J3DModelData* pModel) {
+ /* Nonmatching */
+}
+
+/* 8006DCEC-8006DFD4 .text setToonTex__FP16J3DMaterialTable */
+static void setToonTex(J3DMaterialTable* pMaterial) {
+ /* Nonmatching */
+}
+
+/* 8006DFD4-8006E7A4 .text loadResource__11dRes_info_cFv */
+void dRes_info_c::loadResource() {
+ /* Nonmatching */
+}
+
+/* 8006E7A4-8006E7EC .text __dt__13JKRFileFinderFv */
+JKRFileFinder::~JKRFileFinder() {
+ /* Nonmatching */
+}
+
+/* 8006E7EC-8006E858 .text __dt__18J3DAnmTransformKeyFv */
+J3DAnmTransformKey::~J3DAnmTransformKey() {
+ /* Nonmatching */
+}
+
+/* 8006E858-8006E8B4 .text __dt__15J3DAnmTransformFv */
+J3DAnmTransform::~J3DAnmTransform() {
+ /* Nonmatching */
+}
+
+/* 8006E8B4-8006E8FC .text __dt__10J3DAnmBaseFv */
+J3DAnmBase::~J3DAnmBase() {
+ /* Nonmatching */
+}
+
+/* 8006E8FC-8006EBD0 .text setRes__11dRes_info_cFv */
+int dRes_info_c::setRes() {
+ if (mpArchive == NULL) {
+ if (mpDMCommand == NULL) {
+ return -1;
+ }
+ if ((int)mpDMCommand->mIsDone == 0) {
+ return 1;
+ }
+
+ mpArchive = mpDMCommand->getArchive();
+ mpParentHeap = mpDMCommand->getHeap();
+
+ delete mpDMCommand;
+ mpDMCommand = NULL;
+
+ if (mpArchive == NULL) {
+ OSReport_Error("<%s.arc> setRes: archive mount error !!\n", mArchiveName);
+ return -1;
+ }
+ if (mpParentHeap != NULL) {
+ mpParentHeap->lock();
+ mpDataHeap = mDoExt_createSolidHeapToCurrent(0, mpParentHeap, 0x20);
+
+ int rt = loadResource();
+ mDoExt_restoreCurrentHeap();
+ mDoExt_adjustSolidHeap(mpDataHeap);
+ heap->unlock();
+
+ if (rt < 0) {
+ return -1;
+ }
+ } else {
+ mpDataHeap = mDoExt_createSolidHeapFromGameToCurrent(0, 0);
+ if (mpDataHeap == NULL) {
+ OSReport_Error("<%s.arc> mDMCommandsetRes: can't alloc memory\n", mArchiveName);
+ return -1;
+ }
+ int rt = loadResource();
+ mDoExt_restoreCurrentHeap();
+ mDoExt_adjustSolidHeap(mpDataHeap);
+
+ if (rt < 0) {
+ return -1;
+ }
+ }
+
+ u32 heapSize = mpDataHeap->getHeapSize();
+ void* heapStartAddr = mpDataHeap->getStartAddr();
+ DCStoreRangeNoSync(heapStartAddr, heapSize);
+ }
+
+ return 0;
+}
+
+/* 8006EBD0-8006EBF8 .text getArcHeader__FP10JKRArchive */
+static SArcHeader* getArcHeader(JKRArchive* pArchive) {
+ if (pArchive != NULL) {
+ switch (pArchive->getMountMode()) {
+ case JKRArchive::MOUNT_MEM:
+ return ((JKRMemArchive*)pArchive)->getArcHeader();
+ }
+ }
+
+ return NULL;
+}
+
+/* 8006EBF8-8006ECF4 .text dump_long__11dRes_info_cFP11dRes_info_ci */
+void dRes_info_c::dump_long(dRes_info_c*, int) {
+ /* Nonmatching */
+}
+
+/* 8006ECF4-8006EE6C .text dump__11dRes_info_cFP11dRes_info_ci */
+void dRes_info_c::dump(dRes_info_c*, int) {
+ /* Nonmatching */
+}
+
+/* 8006EE6C-8006EF34 .text __dt__14dRes_control_cFv */
+dRes_control_c::~dRes_control_c() {
+ /* Nonmatching */
+}
+
+/* 8006EF34-8006F01C .text setRes__14dRes_control_cFPCcP11dRes_info_ciPCcUcP7JKRHeap */
+void dRes_control_c::setRes(const char*, dRes_info_c*, int, const char*, unsigned char, JKRHeap*) {
+ /* Nonmatching */
+}
+
+/* 8006F01C-8006F074 .text syncRes__14dRes_control_cFPCcP11dRes_info_ci */
+int dRes_control_c::syncRes(char const* arcName, dRes_info_c* pInfo, int infoSize) {
+ dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize);
+
+ if (resInfo == NULL) {
+ return -1;
+ } else {
+ return resInfo->setRes();
+ }
+}
+
+/* 8006F074-8006F0E8 .text deleteRes__14dRes_control_cFPCcP11dRes_info_ci */
+int dRes_control_c::deleteRes(char const* arcName, dRes_info_c* pInfo, int infoSize) {
+ dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize);
+
+ if (resInfo == NULL) {
+ return 0;
+ } else {
+ if (resInfo->decCount() == 0) {
+ resInfo->~dRes_info_c();
+ }
+ return 1;
+ }
+}
+
+/* 8006F0E8-8006F164 .text getResInfo__14dRes_control_cFPCcP11dRes_info_ci */
+dRes_info_c* dRes_control_c::getResInfo(char const* pArcName, dRes_info_c* pResInfo, int infoSize) {
+ for (int i = 0; i < infoSize; i++) {
+ if (pResInfo->getCount() != 0) {
+ if (!stricmp(pArcName, pResInfo->getArchiveName())) {
+ return pResInfo;
+ }
+ }
+ pResInfo++;
+ }
+ return NULL;
+}
+
+/* 8006F164-8006F18C .text newResInfo__14dRes_control_cFP11dRes_info_ci */
+dRes_info_c* dRes_control_c::newResInfo(dRes_info_c* pResInfo, int infoSize) {
+ for (int i = 0; i < infoSize; i++) {
+ if (pResInfo->getCount() == 0) {
+ return pResInfo;
+ }
+ pResInfo++;
+ }
+ return NULL;
+}
+
+/* 8006F18C-8006F208 .text getResInfoLoaded__14dRes_control_cFPCcP11dRes_info_ci */
+dRes_info_c* dRes_control_c::getResInfoLoaded(char const* arcName, dRes_info_c* pResInfo,
+ int infoSize) {
+ dRes_info_c* resInfo = getResInfo(arcName, pResInfo, infoSize);
+
+ if (resInfo == NULL) {
+ resInfo = NULL;
+ } else if (resInfo->getArchive() == NULL) {
+ OSReport_Warning("<%s.arc> getRes: res during reading !!\n", arcName);
+ resInfo = NULL;
+ }
+ return resInfo;
+}
+
+/* 8006F208-8006F298 .text getRes__14dRes_control_cFPCclP11dRes_info_ci */
+void* dRes_control_c::getRes(char const* arcName, s32 resIdx, dRes_info_c* pInfo, int infoSize) {
+ dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize);
+
+ if (resInfo == NULL) {
+ return resInfo;
+ }
+ JKRArchive* archive = resInfo->getArchive();
+ u32 fileCount = archive->countFile();
+
+ if (resIdx >= (int)fileCount) {
+ OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", arcName, resIdx,
+ fileCount);
+ return NULL;
+ }
+ return resInfo->getRes(resIdx);
+}
+
+/* 8006F298-8006F34C .text getRes__14dRes_control_cFPCcPCcP11dRes_info_ci */
+void* dRes_control_c::getRes(char const* arcName, char const* resName, dRes_info_c* pInfo, int infoSize) {
+ dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize);
+
+ if (resInfo == NULL) {
+ return resInfo;
+ }
+
+ JKRArchive* archive = resInfo->getArchive();
+ JKRArchive::SDIFileEntry* entry = archive->findNameResource(resName);
+
+ if (entry != NULL) {
+ return resInfo->getRes(entry - archive->mFiles);
+ } else {
+ return NULL;
+ }
+}
+
+/* 8006F34C-8006F3BC .text getIDRes__14dRes_control_cFPCcUsP11dRes_info_ci */
+void* dRes_control_c::getIDRes(char const* arcName, u16 param_1, dRes_info_c* pInfo, int infoSize) {
+ dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize);
+
+ if (resInfo == NULL) {
+ return resInfo;
+ }
+
+ JKRArchive* archive = resInfo->getArchive();
+ int index = mDoExt_resIDToIndex(archive, param_1);
+
+ if (index < 0) {
+ return 0;
+ }
+
+ return resInfo->getRes(index);
+}
+
+/* 8006F3BC-8006F430 .text syncAllRes__14dRes_control_cFP11dRes_info_ci */
+int dRes_control_c::syncAllRes(dRes_info_c* pInfo, int infoSize) {
+ for (int i = 0; i < infoSize; i++) {
+ if (pInfo->getDMCommand() != NULL && pInfo->setRes() > 0) {
+ return 1;
+ }
+ pInfo++;
+ }
+ return 0;
+}
+
+/* 8006F430-8006F500 .text setStageRes__14dRes_control_cFPCcP7JKRHeap */
+int dRes_control_c::setStageRes(char const* arcName, JKRHeap* pHeap) {
+ char path[20];
+ snprintf(path, 20, "/res/Stage/%s/", dComIfGp_getStartStageName());
+ return setRes(arcName, &mStageInfo[0], 0x40, path, 1, pHeap);
+}
+
+/* 8006F500-8006F580 .text dump__14dRes_control_cFv */
+void dRes_control_c::dump() {
+ JUTReportConsole_f("\ndRes_control_c::dump mObjectInfo\n");
+ dRes_info_c::dump(&mObjectInfo[0], ARRAY_SIZE(mObjectInfo));
+ dRes_info_c::dump_long(&mObjectInfo[0], ARRAY_SIZE(mObjectInfo));
+
+ JUTReportConsole_f("\ndRes_control_c::dump mStageInfo\n");
+ dRes_info_c::dump(&mStageInfo[0], ARRAY_SIZE(mStageInfo));
+ dRes_info_c::dump_long(&mStageInfo[0], ARRAY_SIZE(mStageInfo));
+}
+
+/* 8006F580-8006F5FC .text __dt__18mDoExt_transAnmBasFv */
+mDoExt_transAnmBas::~mDoExt_transAnmBas() {
+ /* Nonmatching */
+}
+
+/* 8006F5FC-8006F62C .text getTransform__18J3DAnmTransformKeyCFUsP16J3DTransformInfo */
+void J3DAnmTransformKey::getTransform(unsigned short, J3DTransformInfo*) const {
+ /* Nonmatching */
+}