Merge pull request #376 from TakaRikka/lv4floor

d_a_obj_lv4floor OK, d_a_b_oh / d_a_dshutter mostly done
This commit is contained in:
hatal175
2023-07-19 16:11:46 +03:00
committed by GitHub
19 changed files with 2046 additions and 1603 deletions
+108 -85
View File
@@ -13,7 +13,6 @@
#include "JSystem/J3DGraphLoader/J3DModelLoader.h"
#include "JSystem/JKernel/JKRMemArchive.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "m_Do/m_Do_graphic.h"
#include "MSL_C/stdio.h"
#include "MSL_C/string.h"
#include "d/com/d_com_inf_game.h"
@@ -22,6 +21,7 @@
#include "dolphin/os/OS.h"
#include "dolphin/types.h"
#include "global.h"
#include "m_Do/m_Do_graphic.h"
//
// Types:
@@ -257,15 +257,15 @@ static void setAlpha(J3DModelData* pModelData) {
/* ############################################################################################## */
/* 80379840-803798A4 005EA0 0064+00 2/2 0/0 0/0 .rodata l_texMtxInfo */
SECTION_RODATA static const J3DTexMtxInfo l_texMtxInfo = {
0x00,
0x08,
0x00,
0x08,
{0.5f, 0.5f, 0.0f},
{ 0.1f, 0.1f, 0, 0.0f, 0.0f},
{0.1f, 0.1f, 0, 0.0f, 0.0f},
{
{ 0.5f, 0.0f, 0.0f, 0.5f },
{ 0.0f, 0.5f, 0.0f, 0.5f },
{ 0.0f, 0.0f, 0.0f, 1.0f },
{ 0.0f, 0.0f, 0.0f, 1.0f },
{0.5f, 0.0f, 0.0f, 0.5f},
{0.0f, 0.5f, 0.0f, 0.5f},
{0.0f, 0.0f, 0.0f, 1.0f},
{0.0f, 0.0f, 0.0f, 1.0f},
},
};
@@ -384,7 +384,8 @@ void dRes_info_c::offWarpMaterial(J3DModelData* modelData) {
/* 8003AD08-8003AE14 035648 010C+00 0/0 1/1 0/0 .text
* setWarpSRT__11dRes_info_cFP12J3DModelDataRC4cXyzff */
void dRes_info_c::setWarpSRT(J3DModelData* modelData, cXyz const& param_1, f32 translationX, f32 translationY) {
void dRes_info_c::setWarpSRT(J3DModelData* modelData, cXyz const& param_1, f32 translationX,
f32 translationY) {
J3DMaterial* pMaterial = modelData->getMaterialNodePointer(0);
J3DTexGenBlock* texGenBlock = pMaterial->getTexGenBlock();
u32 texGenNum = texGenBlock->getTexGenNum();
@@ -416,72 +417,80 @@ SECTION_DATA static void* lit_4017[8] = {
*/
// regalloc
#ifdef NONMATCHING
J3DModelData* dRes_info_c::loaderBasicBmd(u32 param_1, void* param_2) {
u32 pvVar5 = 0x59020010;
J3DModelData* dRes_info_c::loaderBasicBmd(u32 i_type, void* i_data) {
u32 flags = 0x59020010;
J3DMaterial* pMaterial;
J3DModelData* modelData;
J3DModelData* modelData;
u8 lightMask;
if (param_1 == 'BMDE' || param_1 == 'BMDV') {
pvVar5 |= 0x20;
} else if (param_1 == 'BMWR' || param_1 == 'BMWE') {
pvVar5 ^= 0x60020;
if (i_type == 'BMDE' || i_type == 'BMDV') {
flags |= 0x20;
} else if (i_type == 'BMWR' || i_type == 'BMWE') {
flags ^= 0x60020;
}
modelData = (J3DModelData*)J3DModelLoaderDataBase::load(param_2, pvVar5);
modelData = (J3DModelData*)J3DModelLoaderDataBase::load(i_data, flags);
if (modelData == NULL) {
return NULL;
}
if ((param_1 == 'BMDE' || param_1 == 'BMDV') || param_1 == 'BMWE') {
if (i_type == 'BMDE' || i_type == 'BMDV' || i_type == 'BMWE') {
for (u16 i = 0; i < modelData->getShapeNum(); i++) {
modelData->getShapeNodePointer(i)->setTexMtxLoadType(0x2000);
}
}
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
pMaterial = modelData->getMaterialNodePointer(i);
lightMask = pMaterial->getColorBlock()->getColorChan(0)->getLightMask();
switch (g_env_light.field_0x1308) {
case 1:
lightMask &= 4;
lightMask &= 0x4;
break;
case 2:
lightMask &= 0xc;
lightMask &= 0xC;
break;
case 3:
lightMask &= 0xd;
lightMask &= 0xD;
break;
case 4:
lightMask &= 0xf;
lightMask &= 0xF;
break;
case 5:
lightMask &= 0x1f;
lightMask &= 0x1F;
break;
case 6:
lightMask &= 0x3f;
lightMask &= 0x3F;
break;
case 7:
lightMask &= 0x7f;
lightMask &= 0x7F;
}
pMaterial->getColorBlock()->getColorChan(0)->setLightMask(lightMask);
pMaterial->change();
J3DMaterialAnm* local_38 = new J3DMaterialAnm();
if (local_38 == NULL) {
J3DMaterialAnm* material_anm = new J3DMaterialAnm();
if (material_anm == NULL) {
return NULL;
}
pMaterial->setMaterialAnm(local_38);
pMaterial->setMaterialAnm(material_anm);
}
setIndirectTex(modelData);
if ((param_1 == 'BMWR') || (param_1 == 'BMWE')) {
if (i_type == 'BMWR' || i_type == 'BMWE') {
addWarpMaterial(modelData);
}
if ((param_1 == 'BMDR') || (param_1 == 'BMWR')) {
if (i_type == 'BMDR' || i_type == 'BMWR') {
if (modelData->newSharedDisplayList(0x40000) == 0) {
modelData->simpleCalcMaterial(0, (float (*)[4])j3dDefaultMtx);
modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx);
modelData->makeSharedDL();
} else {
modelData = NULL;
}
}
return modelData;
}
#else
@@ -661,14 +670,14 @@ SECTION_DEAD static char const* const stringBase_80379912 = "<%s> res == NULL !!
// J3DXXX ctor/dtor inlines
#ifdef NONMATCHING
int dRes_info_c::loadResource() {
s32 pJVar4 = mArchive->countFile();
mRes = new void*[pJVar4];
s32 file_num = mArchive->countFile();
mRes = new void*[file_num];
if (mRes == NULL) {
OSReport_Error("<%s.arc> setRes: res pointer buffer nothing !!\n", this);
OSReport_Error("<%s.arc> setRes: res pointer buffer nothing !!\n", mArchiveName);
return -1;
}
for (int i = 0; i < pJVar4; i++) {
for (int i = 0; i < file_num; i++) {
mRes[i] = NULL;
}
JKRArchive::SDIDirEntry* node = mArchive->mNodes;
@@ -678,52 +687,60 @@ int dRes_info_c::loadResource() {
u32 firstFileIndex = node->first_file_index;
J3DModelData* modelData;
void* result;
for (int j = 0; j < node->num_entries; j++) {
if (mArchive->isFileEntry(firstFileIndex)) {
result = mArchive->getIdxResource(firstFileIndex);
if (result == NULL) {
OSReport_Error("<%s> res == NULL !!\n", mArchive->mStringTable + (mArchive->findIdxResource(firstFileIndex)->type_flags_and_name_offset & 0xFFFFFF));
}
else if (nodeType == 'ARC ') {
JKRArchive::SDIFileEntry* fileEntry = mArchive->findIdxResource(firstFileIndex);
const char* __s = mArchive->mStringTable + fileEntry->getNameOffset();
size_t len = strlen(__s) - 4;
char aJStack_24[9];
strncpy(aJStack_24, __s, len);
aJStack_24[len] = '\0';
JKRHeap* local_58 = JKRHeap::findFromRoot(JKRHeap::getCurrentHeap());
JKRHeap* pJVar3 = local_58;
if (local_58 == (JKRHeap*)mDoExt_getGameHeap()) {
local_58 = NULL;
OSReport_Error(
"<%s> res == NULL !!\n",
mArchive->mStringTable +
(mArchive->findIdxResource(firstFileIndex)->type_flags_and_name_offset &
0xFFFFFF));
} else if (nodeType == 'ARC ') {
JKRArchive::SDIFileEntry* entry = mArchive->findIdxResource(firstFileIndex);
const char* name_p = mArchive->mStringTable + entry->getNameOffset();
size_t resNameLen = strlen(name_p) - 4;
char arc_name[9];
strncpy(arc_name, name_p, resNameLen);
arc_name[resNameLen] = '\0';
JKRHeap* parentHeap = JKRHeap::findFromRoot(JKRHeap::getCurrentHeap());
if (parentHeap == (JKRHeap*)mDoExt_getGameHeap()) {
parentHeap = NULL;
}
dComIfG_setObjectRes(aJStack_24, result, fileEntry->data_size);
dComIfG_setObjectRes(arc_name, result, entry->data_size);
} else if (nodeType == 'BMDP') {
result = (J3DModelData*) J3DModelLoaderDataBase::load(result, 0x59020030);
result = (J3DModelData*)J3DModelLoaderDataBase::load(result, 0x59020030);
if (result == NULL) {
return -1;
}
modelData = (J3DModelData*)result;
for (u16 k = 0; k < modelData->getMaterialNum(); k++) {
J3DMaterial* pMaterial = modelData->getMaterialNodePointer(k);
pMaterial->change();
J3DMaterialAnm* materialAnm = new J3DMaterialAnm();
if (materialAnm == (J3DMaterialAnm*)0x0) {
J3DMaterial* material_p = modelData->getMaterialNodePointer(k);
material_p->change();
J3DMaterialAnm* material_anm = new J3DMaterialAnm();
if (material_anm == NULL) {
return -1;
}
pMaterial->setMaterialAnm(materialAnm);
material_p->setMaterialAnm(material_anm);
}
setAlpha(modelData);
if (modelData->newSharedDisplayList(0x40000) != 0) {
return -1;
}
modelData->simpleCalcMaterial(0, (float (*)[4])j3dDefaultMtx);
modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx);
modelData->makeSharedDL();
} else if ((((nodeType == 'BMDR') ||
(nodeType == 'BMDV')) ||
(nodeType == 'BMDE')) ||
((nodeType == 'BMWR' ||
(nodeType == 'BMWE'))))
} else if (nodeType == 'BMDR' || nodeType == 'BMDV' || nodeType == 'BMDE' ||
nodeType == 'BMWR' || nodeType == 'BMWE')
{
result = loaderBasicBmd(nodeType, result);
if (result == NULL) {
@@ -734,60 +751,63 @@ int dRes_info_c::loadResource() {
if (result == NULL) {
return -1;
}
modelData = (J3DModelData*)result;
if (modelData->newSharedDisplayList(0x40000) != 0) {
return -1;
}
modelData->simpleCalcMaterial(0, (float (*)[4])j3dDefaultMtx);
modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx);
modelData->makeSharedDL();
} else if (nodeType == 'BMDA') {
result = (J3DModelData*)J3DModelLoaderDataBase::load(result, 0x59020010);
if (result == NULL) {
return -1;
}
modelData = (J3DModelData*)result;
if (modelData->newSharedDisplayList(0x40000) != 0) {
return -1;
}
modelData->simpleCalcMaterial(0, (float (*)[4])j3dDefaultMtx);
modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx);
modelData->makeSharedDL();
} else if (nodeType == 'BLS ') {
result = J3DClusterLoaderDataBase::load(result);
if (result == NULL) {
return -1;
}
} else if ((nodeType == 'BCKS') ||
(nodeType == 'BCK '))
{
} else if (nodeType == 'BCKS' || nodeType == 'BCK ') {
int sVar1 = *(int*)((int)result + 0x1c);
void* local_9c = sVar1 != 0xffffffff ? (void*)(sVar1 + (u32)result) : NULL;
mDoExt_transAnmBas* transAnmBas = new mDoExt_transAnmBas(local_9c);
if (transAnmBas == NULL) {
return -1;
}
J3DAnmLoaderDataBase::setResource(transAnmBas, result);
result = transAnmBas;
} else if ((((nodeType == 'BTP ') ||
(nodeType == 'BTK ')) ||
(nodeType == 'BPK ')) ||
(((nodeType == 'BRK ' ||
(nodeType == 'BLK ')) ||
((nodeType == 'BVA ' ||
(nodeType == 'BXA '))))))
} else if (nodeType == 'BTP ' || nodeType == 'BTK ' || nodeType == 'BPK ' ||
nodeType == 'BRK ' || nodeType == 'BLK ' || nodeType == 'BVA ' ||
nodeType == 'BXA ')
{
result = J3DAnmLoaderDataBase::load(result, J3DLOADER_UNK_FLAG0);
if (result == NULL) {
return -1;
}
} else if (nodeType == 'DZB ') {
result = ((cBgS*)result)->ConvDzb(result);
result = cBgS::ConvDzb(result);
} else if (nodeType == 'KCL ') {
result = dBgWKCol::initKCollision(result);
}
mRes[firstFileIndex] = result;
}
firstFileIndex++;
}
node++;
}
@@ -853,9 +873,9 @@ void dRes_info_c::deleteArchiveRes() {
/* 8003BA9C-8003BAC4 0363DC 0028+00 2/2 0/0 0/0 .text getArcHeader__FP10JKRArchive */
static SArcHeader* getArcHeader(JKRArchive* param_0) {
if (param_0 != NULL) {
switch(param_0->getMountMode()) {
case JKRArchive::MOUNT_MEM:
return ((JKRMemArchive*)param_0)->getArcHeader();
switch (param_0->getMountMode()) {
case JKRArchive::MOUNT_MEM:
return ((JKRMemArchive*)param_0)->getArcHeader();
}
}
@@ -983,8 +1003,8 @@ void dRes_info_c::dump_long(dRes_info_c* param_0, int param_1) {
}
JUTReportConsole_f("%2d %08x %08x %08x(%6x) %08x(%5x) %08x %3d %s\n", i,
param_0->getDMCommand(), archive, header, blockSize1,
dataHeap, blockSize2, param_0->mRes, param_0->getCount(),
param_0->getDMCommand(), archive, header, blockSize1, dataHeap,
blockSize2, param_0->mRes, param_0->getCount(),
param_0->getArchiveName());
}
param_0++;
@@ -1034,14 +1054,17 @@ void dRes_info_c::dump(dRes_info_c* param_0, int param_1) {
arcHeaderSize = JKRGetMemBlockSize(NULL, getArcHeader(param_0->getArchive()));
heapSize = JKRGetMemBlockSize(NULL, param_0->mDataHeap);
archiveName = param_0->getArchiveName();
JUTReportConsole_f("%2d %6.1f %6x %6.1f %6x %3d %s\n", i, arcHeaderSize / 1024.0f, arcHeaderSize, heapSize / 1024.0f, heapSize, param_0->getCount(), archiveName);
JUTReportConsole_f("%2d %6.1f %6x %6.1f %6x %3d %s\n", i, arcHeaderSize / 1024.0f,
arcHeaderSize, heapSize / 1024.0f, heapSize, param_0->getCount(),
archiveName);
totalArcHeaderSize += arcHeaderSize;
totalHeapSize += heapSize;
}
param_0++;
}
JUTReportConsole_f(
"----------------------------------------------\n %6.1f %6x %6.1f %6x Total\n\n", totalArcHeaderSize / 1024.0f, totalArcHeaderSize, totalHeapSize / 1024.0f, totalHeapSize);
"----------------------------------------------\n %6.1f %6x %6.1f %6x Total\n\n",
totalArcHeaderSize / 1024.0f, totalArcHeaderSize, totalHeapSize / 1024.0f, totalHeapSize);
}
#else
#pragma push
@@ -1184,8 +1207,8 @@ void* dRes_control_c::getRes(char const* arcName, s32 resIdx, dRes_info_c* pInfo
u32 fileCount = archive->countFile();
if (resIdx >= (int)fileCount) {
OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", arcName,
resIdx, fileCount);
OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", arcName, resIdx,
fileCount);
return NULL;
}
return resInfo->getRes(resIdx);
+293 -257
View File
@@ -11,8 +11,11 @@
#include "d/com/d_com_inf_game.h"
#include "d/com/d_com_static.h"
#include "d/d_lib.h"
#include "d/d_path.h"
#include "d/d_procname.h"
#include "d/d_tresure.h"
#include "d/map/d_map_path_dmap.h"
#include "d/map/d_map_path_fmap.h"
#include "d/save/d_save_HIO.h"
#include "dol2asm.h"
#include "dolphin/os/OS.h"
@@ -567,6 +570,7 @@ dStage_roomStatus_c* dStage_roomControl_c::getStatusRoomDt(int i_statusIdx) {
return &mStatus[i_statusIdx];
}
// clang-format off
#define OBJNAME(name, proc, sub) \
{ name, proc, sub }
@@ -1485,95 +1489,7 @@ static dStage_objectNameInf l_objectName[0x38F] = {
OBJNAME("DemoItm", PROC_Demo_Item, 0xFF),
OBJNAME("EndCode", PROC_PLAY_SCENE, 0xFF),
};
/* 803A65CC-803A65FC -00001 0030+00 1/1 0/0 0/0 .data l_roomFuncTable$5052 */
static FuncTable l_roomFuncTable[4] = {
{"TRES", dStage_stageKeepTresureInit},
{"FILI", dStage_filiInfo2Init},
{"MPAT", dStage_mapPathInitCommonLayer},
{"Door", dStage_RoomKeepDoorInit},
};
/* 803A65FC-803A6620 -00001 0024+00 1/1 0/0 0/0 .data l_layerFuncTable$5053 */
SECTION_DATA static FuncTable l_layerFuncTable_5053[3] = {
{"TRE0", dStage_stageKeepTresureInit},
{"MPA0", dStage_mapPathInit},
{"Doo0", dStage_RoomKeepDoorInit},
};
/* 803A6620-803A6638 -00001 0018+00 1/1 0/0 0/0 .data l_layerFuncTable$5131 */
SECTION_DATA static FuncTable l_layerFuncTable_5131[2] = {
{"MEM0", dStage_memaInfoInit},
{"MEC0", dStage_mecoInfoInit},
};
/* 803A6638-803A6644 -00001 000C+00 1/1 0/0 0/0 .data l_funcTable$5136 */
SECTION_DATA static FuncTable l_funcTable_5136[1] = {"STAG", dStage_stagInfoInit};
/* 803A6644-803A6650 -00001 000C+00 1/1 0/0 0/0 .data l_layerFuncTableA$5141 */
SECTION_DATA static FuncTable l_layerFuncTableA[1] = {"SON0", dStage_soundInfoInit};
/* 803A6650-803A668C -00001 003C+00 1/1 0/0 0/0 .data l_envLayerFuncTable$5142 */
SECTION_DATA static FuncTable l_envLayerFuncTable[5] = {
{"LGT0", dStage_lgtvInfoInit}, {"Env0", dStage_envrInfoInit},
{"Col0", dStage_pselectInfoInit}, {"PAL0", dStage_paletteInfoInit},
{"VRB0", dStage_vrboxcolInfoInit},
};
/* 803A668C-803A66BC -00001 0030+00 1/1 0/0 0/0 .data l_layerFuncTable$5158 */
SECTION_DATA static FuncTable l_layerFuncTable_5158[4] = {
{"Doo0", dStage_roomDrtgInfoInit},
{"SCO0", dStage_tgscInfoInit},
{"ACT0", dStage_actorInit},
{"TRE0", dStage_layerTresureInit},
};
/* 803A66BC-803A67F4 -00001 0138+00 1/1 0/0 0/0 .data l_funcTable$5163 */
SECTION_DATA static FuncTable l_funcTable_5163[26] = {
{"EVLY", dStage_elstInfoInit}, {"RPPN", dStage_rppnInfoInit},
{"RPAT", dStage_rpatInfoInit}, {"MULT", dStage_multInfoInit},
{"PLYR", dStage_playerInit}, {"CAMR", dStage_cameraInit},
{"RCAM", dStage_cameraInit}, {"ACTR", dStage_actorInit_always},
{"TGOB", dStage_actorInit_always}, {"RTBL", dStage_roomReadInit},
{"AROB", dStage_arrowInit}, {"RARO", dStage_arrowInit},
{"Virt", dStage_vrboxInfoInit}, {"SCLS", dStage_sclsInfoInit},
{"TGSC", dStage_tgscInfoInit}, {"LGHT", dStage_plightInfoInit},
{"PPNT", dStage_ppntInfoInit}, {"PATH", dStage_pathInfoInit},
{"SCOB", dStage_tgscInfoInit}, {"FILI", dStage_filiInfoInit},
{"Door", dStage_stageDrtgInfoInit}, {"FLOR", dStage_floorInfoInit},
{"TGDR", dStage_tgscInfoInit}, {"DMAP", dStage_dmapInfoInit},
{"REVT", dStage_stEventInfoInit}, {"SOND", dStage_soundInfoInitCL},
};
/* 803A67F4-803A689C -00001 00A8+00 1/1 0/0 0/0 .data l_funcTable$5168 */
SECTION_DATA static FuncTable l_funcTable_5168[14] = {
{"PLYR", dStage_playerInit}, {"RCAM", dStage_RoomCameraInit}, {"RARO", dStage_arrowInit},
{"RTBL", dStage_roomReadInit}, {"AROB", dStage_arrowInit}, {"Virt", dStage_vrboxInfoInit},
{"SCLS", dStage_sclsInfoInit}, {"LGHT", dStage_plightInfoInit}, {"RPPN", dStage_rppnInfoInit},
{"RPAT", dStage_rpatInfoInit}, {"FILI", dStage_filiInfoInit}, {"FLOR", dStage_floorInfoInit},
{"LBNK", dStage_lbnkInfoInit}, {"SOND", dStage_soundInfoInitCL},
};
/* 803A689C-803A68FC -00001 0060+00 1/1 0/0 0/0 .data l_funcTable$5173 */
SECTION_DATA static FuncTable l_funcTable_5173[8] = {
{"Door", dStage_roomDrtgInfoInit}, {"ACTR", dStage_actorCommonLayerInit},
{"TGOB", dStage_actorCommonLayerInit}, {"TRES", dStage_roomTresureInit},
{"TGSC", dStage_tgscCommonLayerInit}, {"SCOB", dStage_tgscCommonLayerInit},
{"TGDR", dStage_tgscInfoInit}, {"REVT", dStage_mapEventInfoInit},
};
/* 803A68FC-803A6920 -00001 0024+00 1/1 0/0 0/0 .data l_funcTable$5178 */
SECTION_DATA static FuncTable l_funcTable_5178[3] = {
{"TRES", dStage_fieldMapTresureInit},
{"FILI", dStage_fieldMapFiliInfo2Init},
{"MPAT", dStage_fieldMapMapPathInit},
};
/* 803A6920-803A696C 003A40 004C+00 3/3 0/0 0/0 .data mMemoryBlock__20dStage_roomControl_c */
SECTION_DATA JKRExpHeap* dStage_roomControl_c::mMemoryBlock[19] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
};
// clang-format on
/* 800243B0-800243E8 01ECF0 0038+00 0/0 3/3 1/1 .text getMemoryBlock__20dStage_roomControl_cFi */
JKRExpHeap* dStage_roomControl_c::getMemoryBlock(int i_roomNo) {
@@ -1587,9 +1503,9 @@ JKRExpHeap* dStage_roomControl_c::getMemoryBlock(int i_roomNo) {
/* 800243E8-80024424 01ED28 003C+00 2/2 0/0 0/0 .text setStayNo__20dStage_roomControl_cFi
*/
void dStage_roomControl_c::setStayNo(int stayNo) {
void dStage_roomControl_c::setStayNo(int i_roomNo) {
mOldStayNo = mStayNo;
mStayNo = stayNo;
mStayNo = i_roomNo;
mNextStayNo = mStayNo;
if (mStayNo < 0) {
@@ -1636,6 +1552,7 @@ bool dStage_roomControl_c::checkRoomDisp(int i_roomNo) const {
if (checkStatusFlag(i_roomNo, 8)) {
return false;
}
return checkStatusFlag(i_roomNo, 16) ? true : false;
}
@@ -1650,7 +1567,7 @@ asm int dStage_roomControl_c::loadRoom(int param_0, u8* param_1, bool param_2) {
#pragma pop
/* 8002471C-8002483C 01F05C 0120+00 1/1 0/0 0/3 .text zoneCountCheck__20dStage_roomControl_cCFi */
void dStage_roomControl_c::zoneCountCheck(int stayNo) const {
void dStage_roomControl_c::zoneCountCheck(int i_roomNo) const {
dStage_roomStatus_c* status = mStatus;
for (int i = 0; i < 0x40; i++) {
if (status->mZoneNo >= 0 && status->mZoneCount > 0) {
@@ -1658,7 +1575,8 @@ void dStage_roomControl_c::zoneCountCheck(int stayNo) const {
dComIfGs_clearRoomItem(status->mZoneNo);
if (dStage_stagInfo_GetSTType(i_dComIfGp_getStage()->getStagInfo()) != ST_FIELD &&
stayNo != mOldStayNo) {
i_roomNo != mOldStayNo)
{
if (--status->mZoneCount == 0) {
dComIfGs_removeZone(status->mZoneNo);
status->mZoneNo = -1;
@@ -1667,18 +1585,20 @@ void dStage_roomControl_c::zoneCountCheck(int stayNo) const {
}
status++;
}
setStayNo(stayNo);
setStayNo(i_roomNo);
}
stage_stag_info_class* dStage_stageDt_c::getStagInfo() const {
return mStagInfo;
}
JKRExpHeap* dStage_roomControl_c::createMemoryBlock(int index, u32 param_1) {
if (mMemoryBlock[index] == NULL) {
mMemoryBlock[index] = JKRExpHeap::create(param_1, mDoExt_getArchiveHeap(), false);
JKRExpHeap* dStage_roomControl_c::createMemoryBlock(int i_blockIdx, u32 i_heapSize) {
if (mMemoryBlock[i_blockIdx] == NULL) {
mMemoryBlock[i_blockIdx] = JKRExpHeap::create(i_heapSize, mDoExt_getArchiveHeap(), false);
}
return mMemoryBlock[index];
return mMemoryBlock[i_blockIdx];
}
void dStage_roomControl_c::destroyMemoryBlock() {
@@ -1690,31 +1610,6 @@ void dStage_roomControl_c::destroyMemoryBlock() {
}
}
/* ############################################################################################## */
/* 803A696C-803A6AAC 003A8C 0140+00 2/2 0/0 0/0 .data mArcBank__20dStage_roomControl_c */
SECTION_DATA char dStage_roomControl_c::mArcBank[32][10] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 8002490C-80024940 01F24C 0034+00 1/1 1/1 0/2 .text setArcBank__20dStage_roomControl_cFiPCc */
void dStage_roomControl_c::setArcBank(int i_bank, char const* bankName) {
strncpy(&mArcBank[i_bank][0], bankName, 9);
@@ -1889,24 +1784,24 @@ void dStage_roomDt_c::init() {
}
/* 80024D10-80024DB0 01F650 00A0+00 1/1 0/0 0/0 .text dStage_roomInit__Fi */
static int dStage_roomInit(int stayNo) {
dComIfGp_roomControl_setStayNo(stayNo);
static int dStage_roomInit(int i_roomNo) {
dComIfGp_roomControl_setStayNo(i_roomNo);
roomRead_class* room = dComIfGp_getStageRoom();
if (room != NULL && room->field_0x0 > stayNo) {
int time_pass = dStage_roomRead_dt_c_GetTimePass(*room->field_0x4[stayNo]);
if (room != NULL && room->field_0x0 > i_roomNo) {
int time_pass = dStage_roomRead_dt_c_GetTimePass(*room->field_0x4[i_roomNo]);
dComIfGp_roomControl_setTimePass(time_pass);
return dComIfGp_roomControl_loadRoom(room->field_0x4[stayNo]->field_0x0,
room->field_0x4[stayNo]->field_0x4, true);
return dComIfGp_roomControl_loadRoom(room->field_0x4[i_roomNo]->field_0x0,
room->field_0x4[i_roomNo]->field_0x4, true);
}
return 1;
}
/* 80024DB0-80024DB8 01F6F0 0008+00 2/2 0/0 0/0 .text SetTimePass__20dStage_roomControl_cFi */
void dStage_roomControl_c::SetTimePass(int isPassing) {
m_time_pass = isPassing;
void dStage_roomControl_c::SetTimePass(int i_timepass) {
m_time_pass = i_timepass;
}
roomRead_class* dStage_stageDt_c::getRoom() const {
@@ -1914,7 +1809,7 @@ roomRead_class* dStage_stageDt_c::getRoom() const {
}
dStage_objectNameInf* dStage_searchName(char const* objName) {
dStage_objectNameInf* obj = &l_objectName[0];
dStage_objectNameInf* obj = l_objectName;
for (u32 i = 0; i < ARRAY_SIZE(l_objectName); i++) {
if (!strcmp(obj->mName, objName)) {
@@ -1922,13 +1817,14 @@ dStage_objectNameInf* dStage_searchName(char const* objName) {
}
obj++;
}
return NULL;
}
static const char* dStage_getName(s16 procName, s8 subtype) {
static char tmp_name[8];
dStage_objectNameInf* obj = &l_objectName[0];
dStage_objectNameInf* obj = l_objectName;
char* tmp = NULL;
for (int i = 0; i < ARRAY_SIZE(l_objectName); i++) {
@@ -1981,41 +1877,43 @@ char* dStage_roomControl_c::mArcBankData;
/* 80024EFC-80024F98 01F83C 009C+00 7/7 0/0 0/0 .text
* dStage_actorCreate__FP22stage_actor_data_classP16fopAcM_prm_class */
static void dStage_actorCreate(stage_actor_data_class* param_0, fopAcM_prm_class* param_1) {
dStage_objectNameInf* actorInf = dStage_searchName((char*)param_0);
static void dStage_actorCreate(stage_actor_data_class* i_actorData, fopAcM_prm_class* i_actorPrm) {
dStage_objectNameInf* actorInf = dStage_searchName(i_actorData->mName);
fopAc_ac_c* actor;
if (actorInf == NULL) {
JKRHeap::free(param_1, NULL);
JKRHeap::free(i_actorPrm, NULL);
} else {
param_1->mSubtype = actorInf->mSubtype;
s16 objName = actorInf->mProcName;
i_actorPrm->mSubtype = actorInf->mSubtype;
s16 actor_name = actorInf->mProcName;
if (objName == PROC_SUSPEND) {
actor = (fopAc_ac_c*)fopAcM_FastCreate(objName, 0, NULL, param_1);
if (actor_name == PROC_SUSPEND) {
actor = (fopAc_ac_c*)fopAcM_FastCreate(actor_name, NULL, NULL, i_actorPrm);
if (actor != NULL) {
fopAcM_delete(actor);
}
} else {
layer_class* curLayer = fpcLy_CurrentLayer();
fpcSCtRq_Request(curLayer, objName, 0, NULL, param_1);
fpcSCtRq_Request(curLayer, actor_name, NULL, NULL, i_actorPrm);
}
}
}
/* 80024F98-80025004 01F8D8 006C+00 1/1 0/0 0/0 .text
* dStage_cameraCreate__FP24stage_camera2_data_classii */
static int dStage_cameraCreate(stage_camera2_data_class* camera, int i_cameraIdx, int param_2) {
camera = static_cast<stage_camera2_data_class*>(cMl::memalignB(-4, 0x18));
static int dStage_cameraCreate(stage_camera2_data_class* i_cameraData, int i_cameraIdx,
int param_2) {
i_cameraData = static_cast<stage_camera2_data_class*>(cMl::memalignB(-4, 0x18));
if (camera != NULL) {
camera->field_0x4 = 0.0f;
camera->field_0x8 = 0.0f;
camera->field_0x4 = 0.0f;
camera->field_0x0 = param_2;
fopCamM_Create(i_cameraIdx, PROC_CAMERA, camera);
if (i_cameraData != NULL) {
i_cameraData->field_0x4 = 0.0f;
i_cameraData->field_0x8 = 0.0f;
i_cameraData->field_0x4 = 0.0f;
i_cameraData->field_0x0 = param_2;
fopCamM_Create(i_cameraIdx, PROC_CAMERA, i_cameraData);
}
return 1;
}
@@ -2122,14 +2020,25 @@ static int dStage_arrowInit(dStage_dt_c* i_stage, void* i_data, int param_2, voi
/* 80025370-800253FC 01FCB0 008C+00 1/0 0/0 0/0 .text getMapInfo2__15dStage_roomDt_cCFi
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm stage_map_info_class* dStage_roomDt_c::getMapInfo2(int param_0) const {
nofralloc
#include "asm/d/d_stage/getMapInfo2__15dStage_roomDt_cCFi.s"
stage_map_info_class* dStage_roomDt_c::getMapInfo2(int param_0) const {
stage_map_info_dummy_class* map_info_p = getMapInfoBase();
if (map_info_p == NULL || map_info_p->field_0x0 == 0 || map_info_p->mData == NULL) {
return NULL;
}
stage_map_info_class* data_p = map_info_p->mData;
for (int i = 0; i < map_info_p->field_0x0; i++) {
if (param_0 == data_p->field_0x35) {
return data_p;
}
data_p++;
}
return NULL;
}
#pragma pop
/* 800253FC-80025404 01FD3C 0008+00 1/0 0/0 0/0 .text getMapInfoBase__15dStage_roomDt_cCFv */
stage_map_info_dummy_class* dStage_roomDt_c::getMapInfoBase() const {
@@ -2138,14 +2047,25 @@ stage_map_info_dummy_class* dStage_roomDt_c::getMapInfoBase() const {
/* 80025404-80025490 01FD44 008C+00 1/0 0/0 0/0 .text getMapInfo2__16dStage_stageDt_cCFi
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm stage_map_info_class* dStage_stageDt_c::getMapInfo2(int param_0) const {
nofralloc
#include "asm/d/d_stage/getMapInfo2__16dStage_stageDt_cCFi.s"
stage_map_info_class* dStage_stageDt_c::getMapInfo2(int param_0) const {
stage_map_info_dummy_class* map_info_p = getMapInfoBase();
if (map_info_p == NULL || map_info_p->field_0x0 == 0 || map_info_p->mData == NULL) {
return NULL;
}
stage_map_info_class* data_p = map_info_p->mData;
for (int i = 0; i < map_info_p->field_0x0; i++) {
if (param_0 == data_p->field_0x35) {
return data_p;
}
data_p++;
}
return NULL;
}
#pragma pop
/* 80025490-80025498 01FDD0 0008+00 1/0 0/0 0/0 .text getMapInfoBase__16dStage_stageDt_cCFv */
stage_map_info_dummy_class* dStage_stageDt_c::getMapInfoBase() const {
@@ -2190,15 +2110,16 @@ static int dStage_filiInfo2Init(dStage_dt_c* stageDt, void* i_data, int entryNum
/* 8002556C-8002558C 01FEAC 0020+00 1/0 0/0 0/0 .text
* dStage_fieldMapFiliInfo2Init__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_fieldMapFiliInfo2Init(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_fieldMapFiliInfo2Init__FP11dStage_dt_cPviPv.s"
static int dStage_fieldMapFiliInfo2Init(dStage_dt_c* param_0, void* i_data, int i_entryNum,
void* param_3) {
if (i_entryNum == 0) {
return 1;
}
dStage_nodeHeader* fili_info = (dStage_nodeHeader*)(i_data);
((dMenu_Fmap_data_c*)param_0)->setFileList2((dStage_FileList2_dt_c*)fili_info->m_offset);
return 1;
}
#pragma pop
/* 8002558C-800255E0 01FECC 0054+00 2/0 0/0 0/0 .text dStage_filiInfoInit__FP11dStage_dt_cPviPv */
static int dStage_filiInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, void* param_3) {
@@ -2450,6 +2371,24 @@ static int dStage_doorInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum,
}
/* 80025DA8-80025E40 0206E8 0098+00 2/0 0/0 0/0 .text dStage_roomReadInit__FP11dStage_dt_cPviPv */
// close
#ifdef NONMATCHING
static int dStage_roomReadInit(dStage_dt_c* param_0, void* i_data, int param_2, void* param_3) {
roomRead_class* p_node = (roomRead_class*)((int*)i_data + 1);
roomRead_data_class** rtbl = p_node->field_0x4;
param_0->setRoom(p_node);
for (int i = 0; i < p_node->field_0x0; i++) {
if ((int)rtbl[i] < 0x80000000) {
rtbl[i] += (int)param_3;
rtbl[i]->field_0x4 += (int)param_3;
}
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -2459,6 +2398,7 @@ static asm int dStage_roomReadInit(dStage_dt_c* param_0, void* param_1, int para
#include "asm/d/d_stage/dStage_roomReadInit__FP11dStage_dt_cPviPv.s"
}
#pragma pop
#endif
/* 80025E40-80025E70 020780 0030+00 0/0 1/1 0/0 .text
* dStage_roomRead_dt_c_GetReverbStage__FR14roomRead_classi */
@@ -2477,6 +2417,24 @@ static int dStage_ppntInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum,
}
/* 80025EA4-80025F44 0207E4 00A0+00 1/0 0/0 0/0 .text dStage_pathInfoInit__FP11dStage_dt_cPviPv */
// close
#ifdef NONMATCHING
static int dStage_pathInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, void* param_3) {
dStage_dPath_c* path_c = (dStage_dPath_c*)((char*)i_data + 4);
dPath* path = path_c->m_path;
stageDt->setPathInfo(path_c);
for (int i = 0; i < path_c->m_num; i++) {
if ((u32)path->m_points < 0x80000000) {
path->m_points += (int)stageDt->getPntInf();
}
path++;
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -2486,20 +2444,7 @@ static asm int dStage_pathInfoInit(dStage_dt_c* param_0, void* param_1, int para
#include "asm/d/d_stage/dStage_pathInfoInit__FP11dStage_dt_cPviPv.s"
}
#pragma pop
/* static int dStage_pathInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, void* param_3) {
dStage_dPath_c* path_c = ((char*)i_data + 4);
dPath* path = path_c->m_path;
stageDt->setPathInfo(path_c);
for (int i = 0; i < path_c->m_num; i++) {
if ((u32)path->m_points < 0x80000000) {
path->m_points += path_c->m_num
}
path++;
}
} */
#endif
/* 80025F44-80025F78 020884 0034+00 2/0 0/0 0/0 .text dStage_rppnInfoInit__FP11dStage_dt_cPviPv */
static int dStage_rppnInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, void* param_3) {
@@ -2597,26 +2542,38 @@ static int dStage_floorInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum
}
/* 80026218-80026298 020B58 0080+00 1/0 0/0 0/9 .text dStage_memaInfoInit__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_memaInfoInit(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_memaInfoInit__FP11dStage_dt_cPviPv.s"
static int dStage_memaInfoInit(dStage_dt_c* param_0, void* param_1, int param_2, void* param_3) {
dStage_MemoryMap_c* pd = (dStage_MemoryMap_c*)((char*)param_1 + 4);
param_0->setMemoryMap(pd);
if (pd != NULL) {
u32* entry_p = pd->field_0x4;
for (int i = 0; i < pd->m_num; i++) {
dStage_roomControl_c::createMemoryBlock(i, *entry_p + 0x380);
entry_p++;
}
}
return 1;
}
#pragma pop
/* 80026298-8002631C 020BD8 0084+00 1/0 0/0 0/0 .text dStage_mecoInfoInit__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_mecoInfoInit(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_mecoInfoInit__FP11dStage_dt_cPviPv.s"
static int dStage_mecoInfoInit(dStage_dt_c* param_0, void* param_1, int param_2, void* param_3) {
dStage_MemoryConfig_c* pd = (dStage_MemoryConfig_c*)((char*)param_1 + 4);
param_0->setMemoryConfig(pd);
if (pd != NULL) {
dStage_MemoryConfig_data* entry_p = pd->field_0x4;
for (int i = 0; i < pd->m_num; i++) {
dStage_roomControl_c::setMemoryBlockID(entry_p->m_roomNo, entry_p->m_blockID);
entry_p++;
}
}
return 1;
}
#pragma pop
/* 8002631C-8002634C 020C5C 0030+00 2/0 0/0 0/0 .text
* dStage_stageKeepTresureInit__FP11dStage_dt_cPviPv */
@@ -2628,61 +2585,52 @@ static int dStage_stageKeepTresureInit(dStage_dt_c* stageDt, void* i_data, int e
/* 8002634C-8002635C 020C8C 0010+00 1/0 0/0 0/0 .text
* dStage_fieldMapTresureInit__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_fieldMapTresureInit(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_fieldMapTresureInit__FP11dStage_dt_cPviPv.s"
static int dStage_fieldMapTresureInit(dStage_dt_c* i_stageDt, void* i_data, int i_entryNum,
void* param_3) {
((dMenu_Fmap_data_c*)i_stageDt)->setTresure((dTres_c::list_class*)((char*)i_data + 4));
return 1;
}
#pragma pop
/* 8002635C-800263A0 020C9C 0044+00 4/4 0/0 0/0 .text dStage_dt_c_offsetToPtr__FPv */
static void dStage_dt_c_offsetToPtr(void* i_data) {
dStage_nodeHeader* p_node = (dStage_nodeHeader*)((int*)i_data + 1);
dStage_nodeHeader* p_tno = (dStage_nodeHeader*)((int*)i_data + 1);
for (int i = 0; i < ((dStage_fileHeader*)i_data)->chunkCount; i++) {
if (p_node->m_offset != 0 && p_node->m_offset < 0x80000000) {
p_node->m_offset += (u32)i_data;
if (p_tno->m_offset != 0 && p_tno->m_offset < 0x80000000) {
p_tno->m_offset += (u32)i_data;
}
p_node++;
p_tno++;
}
}
/* 800263A0-800263D0 020CE0 0030+00 1/0 0/0 0/0 .text dStage_mapPathInit__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_mapPathInit(dStage_dt_c* param_0, void* param_1, int param_2, void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_mapPathInit__FP11dStage_dt_cPviPv.s"
static int dStage_mapPathInit(dStage_dt_c* param_0, void* param_1, int param_2, void* param_3) {
dMpath_c::setPointer(param_0->getRoomNo(), (char*)param_1 + 4, 0);
return 1;
}
#pragma pop
/* 800263D0-80026400 020D10 0030+00 1/0 0/0 0/0 .text
* dStage_mapPathInitCommonLayer__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_mapPathInitCommonLayer(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_mapPathInitCommonLayer__FP11dStage_dt_cPviPv.s"
static int dStage_mapPathInitCommonLayer(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
dMpath_c::setPointer(param_0->getRoomNo(), (char*)param_1 + 4, 1);
return 1;
}
#pragma pop
/* 80026400-8002645C 020D40 005C+00 1/0 0/0 0/0 .text
* dStage_fieldMapMapPathInit__FP11dStage_dt_cPviPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dStage_fieldMapMapPathInit(dStage_dt_c* param_0, void* param_1, int param_2,
void* param_3) {
nofralloc
#include "asm/d/d_stage/dStage_fieldMapMapPathInit__FP11dStage_dt_cPviPv.s"
static int dStage_fieldMapMapPathInit(dStage_dt_c* i_stageDt, void* param_1, int param_2,
void* param_3) {
dDrawPath_c::room_class* room_p = (dDrawPath_c::room_class*)((dStage_nodeHeader*)param_1)->m_offset;
if (room_p == NULL) {
return 1;
}
s8 sp8, sp9;
dMpath_c::setPointer(room_p, &sp8, &sp9);
((dMenu_Fmap_data_c*)i_stageDt)->setMapPath(room_p);
return 1;
}
#pragma pop
/* 80450D74-80450D7C 000274 0008+00 3/3 0/0 0/0 .sbss m_roomDzs__20dStage_roomControl_c
*/
@@ -2691,11 +2639,25 @@ dStage_roomControl_c::roomDzs_c dStage_roomControl_c::m_roomDzs;
/* 8002645C-800265DC 020D9C 0180+00 1/1 0/0 0/0 .text readMult__FP11dStage_dt_cP14dStage_Multi_cb
*/
static void readMult(dStage_dt_c* stageDt, dStage_Multi_c* multi, bool useOldRes) {
static FuncTable l_roomFuncTable[] = {
{"TRES", dStage_stageKeepTresureInit},
{"FILI", dStage_filiInfo2Init},
{"MPAT", dStage_mapPathInitCommonLayer},
{"Door", dStage_RoomKeepDoorInit},
};
static FuncTable l_layerFuncTable[] = {
{"TRE0", dStage_stageKeepTresureInit},
{"MPA0", dStage_mapPathInit},
{"Doo0", dStage_RoomKeepDoorInit},
};
if (multi != NULL) {
dStage_Mult_info* info = multi->mInfo;
if (dStage_stagInfo_GetUpButton(i_dComIfGp_getStage()->getStagInfo()) == 0 ||
dStage_stagInfo_GetUpButton(i_dComIfGp_getStage()->getStagInfo()) == 6) {
dStage_stagInfo_GetUpButton(i_dComIfGp_getStage()->getStagInfo()) == 6)
{
dStage_roomControl_c::m_roomDzs.create(multi->field_0x0);
}
@@ -2716,9 +2678,10 @@ static void readMult(dStage_dt_c* stageDt, dStage_Multi_c* multi, bool useOldRes
if (dzs != NULL) {
dStage_dt_c_offsetToPtr(dzs);
stageDt->setRoomNo(info->mRoomNo);
dStage_dt_c_decode(dzs, stageDt, l_roomFuncTable, 4);
dStage_setLayerTagName(l_layerFuncTable_5053, 3, dComIfG_play_c::getLayerNo(0));
dStage_dt_c_decode(dzs, stageDt, l_layerFuncTable_5053, 3);
dStage_dt_c_decode(dzs, stageDt, l_roomFuncTable, ARRAY_SIZE(l_roomFuncTable));
dStage_setLayerTagName(l_layerFuncTable, ARRAY_SIZE(l_layerFuncTable),
dComIfG_play_c::getLayerNo(0));
dStage_dt_c_decode(dzs, stageDt, l_layerFuncTable, ARRAY_SIZE(l_layerFuncTable));
}
info++;
@@ -2808,20 +2771,35 @@ static void dKankyo_create() {
/* 80026914-80026940 021254 002C+00 1/1 0/0 0/0 .text layerMemoryInfoLoader__FPvP11dStage_dt_ci */
static void layerMemoryInfoLoader(void* i_data, dStage_dt_c* i_stage, int param_2) {
dStage_dt_c_decode(i_data, i_stage, l_layerFuncTable_5131, 2);
static FuncTable l_layerFuncTable[] = {
{"MEM0", dStage_memaInfoInit},
{"MEC0", dStage_mecoInfoInit},
};
dStage_dt_c_decode(i_data, i_stage, l_layerFuncTable, ARRAY_SIZE(l_layerFuncTable));
}
/* 80026940-800269B4 021280 0074+00 1/1 0/0 0/0 .text
* dStage_dt_c_stageInitLoader__FPvP11dStage_dt_c */
static void dStage_dt_c_stageInitLoader(void* i_data, dStage_dt_c* i_stage) {
static FuncTable l_funcTable[] = {"STAG", dStage_stagInfoInit};
dStage_dt_c_offsetToPtr(i_data);
i_stage->init();
dStage_dt_c_decode(i_data, i_stage, l_funcTable_5136, 1);
dStage_dt_c_decode(i_data, i_stage, l_funcTable, ARRAY_SIZE(l_funcTable));
layerMemoryInfoLoader(i_data, i_stage, -1);
}
/* 800269B4-80026AE8 0212F4 0134+00 2/2 0/0 0/0 .text layerTableLoader__FPvP11dStage_dt_ci */
static void layerTableLoader(void* i_data, dStage_dt_c* stageDt, int roomNo) {
static FuncTable l_layerFuncTableA[] = {"SON0", dStage_soundInfoInit};
static FuncTable l_envLayerFuncTable[] = {
{"LGT0", dStage_lgtvInfoInit}, {"Env0", dStage_envrInfoInit},
{"Col0", dStage_pselectInfoInit}, {"PAL0", dStage_paletteInfoInit},
{"VRB0", dStage_vrboxcolInfoInit},
};
int newRoomNo;
if (roomNo != -1) {
newRoomNo = roomNo;
@@ -2853,14 +2831,37 @@ dStage_Elst_c* dStage_stageDt_c::getElst() {
/* 80026AF0-80026B58 021430 0068+00 2/2 0/0 0/0 .text layerActorLoader__FPvP11dStage_dt_ci */
static void layerActorLoader(void* i_data, dStage_dt_c* stageDt, int param_2) {
dStage_setLayerTagName(l_layerFuncTable_5158, 4, dComIfG_play_c::getLayerNo(0));
dStage_dt_c_decode(i_data, stageDt, l_layerFuncTable_5158, 4);
static FuncTable l_layerFuncTable[] = {
{"Doo0", dStage_roomDrtgInfoInit},
{"SCO0", dStage_tgscInfoInit},
{"ACT0", dStage_actorInit},
{"TRE0", dStage_layerTresureInit},
};
dStage_setLayerTagName(l_layerFuncTable, 4, dComIfG_play_c::getLayerNo(0));
dStage_dt_c_decode(i_data, stageDt, l_layerFuncTable, ARRAY_SIZE(l_layerFuncTable));
}
/* 80026B58-80026BBC 021498 0064+00 1/1 0/0 0/0 .text dStage_dt_c_stageLoader__FPvP11dStage_dt_c
*/
static void dStage_dt_c_stageLoader(void* i_data, dStage_dt_c* stageDt) {
dStage_dt_c_decode(i_data, stageDt, l_funcTable_5163, 26);
static FuncTable l_funcTable[] = {
{"EVLY", dStage_elstInfoInit}, {"RPPN", dStage_rppnInfoInit},
{"RPAT", dStage_rpatInfoInit}, {"MULT", dStage_multInfoInit},
{"PLYR", dStage_playerInit}, {"CAMR", dStage_cameraInit},
{"RCAM", dStage_cameraInit}, {"ACTR", dStage_actorInit_always},
{"TGOB", dStage_actorInit_always}, {"RTBL", dStage_roomReadInit},
{"AROB", dStage_arrowInit}, {"RARO", dStage_arrowInit},
{"Virt", dStage_vrboxInfoInit}, {"SCLS", dStage_sclsInfoInit},
{"TGSC", dStage_tgscInfoInit}, {"LGHT", dStage_plightInfoInit},
{"PPNT", dStage_ppntInfoInit}, {"PATH", dStage_pathInfoInit},
{"SCOB", dStage_tgscInfoInit}, {"FILI", dStage_filiInfoInit},
{"Door", dStage_stageDrtgInfoInit}, {"FLOR", dStage_floorInfoInit},
{"TGDR", dStage_tgscInfoInit}, {"DMAP", dStage_dmapInfoInit},
{"REVT", dStage_stEventInfoInit}, {"SOND", dStage_soundInfoInitCL},
};
dStage_dt_c_decode(i_data, stageDt, l_funcTable, ARRAY_SIZE(l_funcTable));
layerTableLoader(i_data, stageDt, -1);
layerActorLoader(i_data, stageDt, -1);
}
@@ -2868,26 +2869,59 @@ static void dStage_dt_c_stageLoader(void* i_data, dStage_dt_c* stageDt) {
/* 80026BBC-80026C34 0214FC 0078+00 0/0 1/1 0/0 .text dStage_dt_c_roomLoader__FPvP11dStage_dt_ci
*/
void dStage_dt_c_roomLoader(void* i_data, dStage_dt_c* stageDt, int param_2) {
static FuncTable l_funcTable[] = {
{"PLYR", dStage_playerInit}, {"RCAM", dStage_RoomCameraInit},
{"RARO", dStage_arrowInit}, {"RTBL", dStage_roomReadInit},
{"AROB", dStage_arrowInit}, {"Virt", dStage_vrboxInfoInit},
{"SCLS", dStage_sclsInfoInit}, {"LGHT", dStage_plightInfoInit},
{"RPPN", dStage_rppnInfoInit}, {"RPAT", dStage_rpatInfoInit},
{"FILI", dStage_filiInfoInit}, {"FLOR", dStage_floorInfoInit},
{"LBNK", dStage_lbnkInfoInit}, {"SOND", dStage_soundInfoInitCL},
};
dStage_dt_c_offsetToPtr(i_data);
stageDt->init();
dStage_dt_c_decode(i_data, stageDt, l_funcTable_5168, 14);
dStage_dt_c_decode(i_data, stageDt, l_funcTable, ARRAY_SIZE(l_funcTable));
layerTableLoader(i_data, stageDt, param_2);
}
/* 80026C34-80026C8C 021574 0058+00 0/0 1/1 0/0 .text dStage_dt_c_roomReLoader__FPvP11dStage_dt_ci
*/
void dStage_dt_c_roomReLoader(void* i_data, dStage_dt_c* stageDt, int param_2) {
dStage_dt_c_decode(i_data, stageDt, l_funcTable_5173, 8);
static FuncTable l_funcTable[] = {
{"Door", dStage_roomDrtgInfoInit}, {"ACTR", dStage_actorCommonLayerInit},
{"TGOB", dStage_actorCommonLayerInit}, {"TRES", dStage_roomTresureInit},
{"TGSC", dStage_tgscCommonLayerInit}, {"SCOB", dStage_tgscCommonLayerInit},
{"TGDR", dStage_tgscInfoInit}, {"REVT", dStage_mapEventInfoInit},
};
dStage_dt_c_decode(i_data, stageDt, l_funcTable, ARRAY_SIZE(l_funcTable));
layerActorLoader(i_data, stageDt, param_2);
}
/* 80026C8C-80026CDC 0215CC 0050+00 0/0 1/1 0/0 .text
* dStage_dt_c_fieldMapLoader__FPvP11dStage_dt_c */
void dStage_dt_c_fieldMapLoader(void* i_data, dStage_dt_c* i_stage) {
static FuncTable l_funcTable[] = {
{"TRES", dStage_fieldMapTresureInit},
{"FILI", dStage_fieldMapFiliInfo2Init},
{"MPAT", dStage_fieldMapMapPathInit},
};
dStage_dt_c_offsetToPtr(i_data);
dStage_dt_c_decode(i_data, i_stage, l_funcTable_5178, 3);
dStage_dt_c_decode(i_data, i_stage, l_funcTable, ARRAY_SIZE(l_funcTable));
}
/* ############################################################################################## */
/* 803A6920-803A696C 003A40 004C+00 3/3 0/0 0/0 .data mMemoryBlock__20dStage_roomControl_c */
JKRExpHeap* dStage_roomControl_c::mMemoryBlock[19] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
};
/* 803A696C-803A6AAC 003A8C 0140+00 2/2 0/0 0/0 .data mArcBank__20dStage_roomControl_c */
char dStage_roomControl_c::mArcBank[32][10] = {0};
/* 80026CDC-80026D38 02161C 005C+00 0/0 1/1 0/0 .text dStage_infoCreate__Fv */
void dStage_infoCreate() {
void* stageRsrc = dComIfG_getStageRes("stage.dzs");
@@ -2931,7 +2965,8 @@ void dStage_Delete() {
dStage_roomControl_c::removeRoomDzs();
if (mDoRst::isReset() || !dComIfGp_isEnableNextStage() ||
strcmp(dComIfGp_getNextStageName(), dComIfGp_getStartStageName())) {
strcmp(dComIfGp_getNextStageName(), dComIfGp_getStartStageName()))
{
dStage_roomControl_c::destroyMemoryBlock();
if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == ST_DUNGEON) {
@@ -2997,7 +3032,7 @@ int dStage_RoomCheck(cBgS_GndChk* gndChk) {
/* 800270FC-80027170 021A3C 0074+00 0/0 1/1 0/0 .text
* dStage_changeSceneExitId__FR13cBgS_PolyInfofUlScs */
int dStage_changeSceneExitId(cBgS_PolyInfo& param_0, f32 speed, u32 mode, s8 roomNo, s16 angle) {
return dStage_changeScene(dComIfG_Bgsp().GetExitId(param_0), speed, mode, roomNo, angle, -1);
return dStage_changeScene(dComIfG_Bgsp().GetExitId(param_0), speed, mode, roomNo, angle, -1);
}
/* ############################################################################################## */
@@ -3042,8 +3077,8 @@ int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no, s16 angle,
dKy_set_nexttime(15.0f * timeH);
}
dComIfGp_setNextStage(scls_info->mStage, scls_info->mStart, (s8)scls_info->mRoom, (s8)layer, speed,
mode, 1, wipe == 15 ? 0 : wipe, angle, 1, wipe_time);
dComIfGp_setNextStage(scls_info->mStage, scls_info->mStart, (s8)scls_info->mRoom, (s8)layer,
speed, mode, 1, wipe == 15 ? 0 : wipe, angle, 1, wipe_time);
return 1;
}
#else
@@ -3080,7 +3115,7 @@ SECTION_DEAD static char const* const stringBase_80378BB3 = "d_stage.cpp";
/* 800272F0-800274B0 021C30 01C0+00 0/0 1/1 0/0 .text dStage_changeScene4Event__FiScibfUlsi */
#ifdef NONMATCHING
int dStage_changeScene4Event(int i_exitId, s8 room_no, int i_wipe, bool param_3, f32 speed,
u32 mode, s16 angle, int param_7) {
u32 mode, s16 angle, int param_7) {
stage_scls_info_dummy_class* scls;
if (room_no == -1) {
@@ -3110,7 +3145,7 @@ int dStage_changeScene4Event(int i_exitId, s8 room_no, int i_wipe, bool param_3,
} else {
wipe_time = 0;
}
s32 layer = dStage_sclsInfo_getSceneLayer(scls_info);
int timeH = dStage_sclsInfo_getTimeH(scls_info);
@@ -3126,8 +3161,9 @@ int dStage_changeScene4Event(int i_exitId, s8 room_no, int i_wipe, bool param_3,
dKy_set_nexttime(15.0f * timeH);
}
dComIfGp_setNextStage(scls_info->mStage, scls_info->mStart, (s8)scls_info->mRoom, (s8)layer, speed,
mode, 1, wipe == 15 ? 0 : wipe, angle, param_3 != false, wipe_time);
dComIfGp_setNextStage(scls_info->mStage, scls_info->mStart, (s8)scls_info->mRoom, (s8)layer,
speed, mode, 1, wipe == 15 ? 0 : wipe, angle, param_3 != false,
wipe_time);
return 1;
}
#else
@@ -3135,7 +3171,7 @@ int dStage_changeScene4Event(int i_exitId, s8 room_no, int i_wipe, bool param_3,
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dStage_changeScene4Event(int param_0, s8 param_1, int param_2, bool param_3, f32 param_4,
u32 param_5, s16 param_6, int param_7) {
u32 param_5, s16 param_6, int param_7) {
nofralloc
#include "asm/d/d_stage/dStage_changeScene4Event__FiScibfUlsi.s"
}
+26 -26
View File
@@ -78,16 +78,16 @@ void dMpath_n::dTexObjAggregate_c::remove() {
/* 8003C94C-8003CA40 03728C 00F4+00 2/0 9/2 0/0 .text
* rendering__11dDrawPath_cFPCQ211dDrawPath_c10line_class */
void dDrawPath_c::rendering(dDrawPath_c::line_class const* p_line) {
if (isDrawType(p_line->unk0)) {
int width = getLineWidth(p_line->unk1);
if (isDrawType(p_line->field_0x0)) {
int width = getLineWidth(p_line->field_0x1);
if (width > 0 && p_line->unk2 >= 2) {
if (width > 0 && p_line->mDataNum >= 2) {
GXSetLineWidth(width, GX_TO_ZERO);
GXSetTevColor(GX_TEVREG0, *getLineColor(p_line->unk0 & 0x3F, p_line->unk1));
GXBegin(GX_LINESTRIP, GX_VTXFMT0, p_line->unk2);
GXSetTevColor(GX_TEVREG0, *getLineColor(p_line->field_0x0 & 0x3F, p_line->field_0x1));
GXBegin(GX_LINESTRIP, GX_VTXFMT0, p_line->mDataNum);
u16* tmp = p_line->unk4;
for (int i = 0; i < p_line->unk2; i++) {
u16* tmp = p_line->mpData;
for (int i = 0; i < p_line->mDataNum; i++) {
GXPosition1x16(*tmp);
tmp++;
}
@@ -102,11 +102,11 @@ void dDrawPath_c::rendering(dDrawPath_c::poly_class const* p_poly) {
if (isDrawType(p_poly->field_0x0)) {
GXSetTevColor(GX_TEVREG0, *getColor(p_poly->field_0x0 & 0x3F));
if (p_poly->field_0x1 >= 3) {
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, p_poly->field_0x1);
if (p_poly->mDataNum >= 3) {
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, p_poly->mDataNum);
u16* tmp = p_poly->field_0x4;
for (int i = 0; i < p_poly->field_0x1; i++) {
u16* tmp = p_poly->mpData;
for (int i = 0; i < p_poly->mDataNum; i++) {
GXPosition1x16(*tmp);
tmp++;
}
@@ -120,13 +120,13 @@ void dDrawPath_c::rendering(dDrawPath_c::poly_class const* p_poly) {
void dDrawPath_c::rendering(dDrawPath_c::group_class const* p_group) {
if (isSwitch(p_group)) {
poly_class* poly = p_group->mpPoly;
for (int i = 0; i < p_group->field_0x4; i++) {
for (int i = 0; i < p_group->mPolyNum; i++) {
rendering(poly);
poly++;
}
line_class* line = p_group->mpLine;
for (int i = 0; i < p_group->field_0x2; i++) {
for (int i = 0; i < p_group->mLineNum; i++) {
rendering(line);
line++;
}
@@ -139,7 +139,7 @@ void dDrawPath_c::rendering(dDrawPath_c::floor_class const* p_floor) {
if (p_floor->mpGroup != NULL) {
group_class* group = p_floor->mpGroup;
for (int i = 0; i < p_floor->field_0x1; i++) {
for (int i = 0; i < p_floor->mGroupNum; i++) {
rendering(group);
group++;
}
@@ -150,12 +150,12 @@ void dDrawPath_c::rendering(dDrawPath_c::floor_class const* p_floor) {
* rendering__11dDrawPath_cFPCQ211dDrawPath_c10room_class */
void dDrawPath_c::rendering(dDrawPath_c::room_class const* p_room) {
if (p_room != NULL) {
GXSetArray(GX_VA_POS, p_room->field_0x8, 8);
GXSetArray(GX_VA_POS, p_room->mpFloatData, 8);
floor_class* floor = p_room->mpFloor;
if (floor != NULL) {
for (int i = 0; i < p_room->field_0x0; i++) {
if (isRenderingFloor(floor->field_0x0)) {
for (int i = 0; i < p_room->mFloorNum; i++) {
if (isRenderingFloor(floor->mFloorNo)) {
rendering(floor);
}
floor++;
@@ -317,7 +317,7 @@ dMpath_n::dTexObjAggregate_c dMpath_n::m_texObjAgg;
/* 8003D3C0-8003D68C 037D00 02CC+00 0/0 2/2 0/0 .text
* renderingDecoration__18dRenderingFDAmap_cFPCQ211dDrawPath_c10line_class */
void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_line) {
s32 width = getDecorationLineWidth(p_line->unk1);
s32 width = getDecorationLineWidth(p_line->field_0x1);
if (width <= 0) {
return;
}
@@ -331,18 +331,18 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetNumTevStages(1);
GXLoadTexObj(dMpath_n::m_texObjAgg.mp_texObj[6], GX_TEXMAP0);
u16* unk = p_line->unk4;
s32 unk2 = p_line->unk2;
u16* data_p = p_line->mpData;
s32 data_num = p_line->mDataNum;
GXSetLineWidth(width, GX_TO_ONE);
GXSetPointSize(width, GX_TO_ONE);
GXColor lineColor = *getDecoLineColor(p_line->unk0 & 0x3f, p_line->unk1);
GXColor lineColor = *getDecoLineColor(p_line->field_0x0 & 0x3f, p_line->field_0x1);
GXSetTevColor(GX_TEVREG0, lineColor);
lineColor.r = lineColor.r - 4;
GXSetTevColor(GX_TEVREG1, lineColor);
for (int i = 0; i < unk2; unk++, i++) {
for (int i = 0; i < data_num; data_p++, i++) {
#ifndef HYRULE_FIELD_SPEEDHACK
if (i < unk2 - 1) {
if (i < data_num - 1) {
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
@@ -350,9 +350,9 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 2);
GXPosition1x16(unk[0]);
GXPosition1x16(data_p[0]);
GXTexCoord2f32(0, 0);
GXPosition1x16(unk[1]);
GXPosition1x16(data_p[1]);
GXTexCoord2f32(0, 0);
}
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_KONST, GX_CC_TEXC, GX_CC_C1);
@@ -361,7 +361,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
#endif
GXBegin(GX_POINTS, GX_VTXFMT0, 1);
GXPosition1x16(unk[0]);
GXPosition1x16(data_p[0]);
GXTexCoord2f32(0, 0);
i_GXEnd();
}
+77
View File
@@ -597,6 +597,82 @@ asm void dMpath_c::createWork() {
/* 8003F810-8003FA40 03A150 0230+00 1/1 1/1 0/0 .text
* setPointer__8dMpath_cFPQ211dDrawPath_c10room_classPScPSc */
// close
#ifdef NONMATCHING
int dMpath_c::setPointer(dDrawPath_c::room_class* i_room, s8* param_1, s8* param_2) {
int var_r6 = 0;
if ((u32)i_room->mpFloor >= 0x80000000) {
dDrawPath_c::floor_class* floor_p = i_room->mpFloor;
for (int i = 0; i < i_room->field_0x0; i++) {
if (floor_p->field_0x0 < *param_1) {
*param_1 = floor_p->field_0x0;
}
if (floor_p->field_0x0 > *param_2) {
*param_2 = floor_p->field_0x0;
}
floor_p++;
}
dDrawPath_c::floor_class* floor_e = &i_room->mpFloor[i_room->field_0x0 - 1];
dDrawPath_c::group_class* group_e = &floor_e->mpGroup[floor_e->field_0x1 - 1];
if (group_e->field_0x4 != 0) {
dDrawPath_c::poly_class* poly_e = &group_e->mpPoly[group_e->field_0x4 - 1];
return (u32)(poly_e->field_0x4 + poly_e->field_0x1) - (u32)i_room;
}
dDrawPath_c::line_class* line_e = &group_e->mpLine[group_e->field_0x2 - 1];
return (u32)(line_e->unk4 + line_e->unk2) - (u32)i_room;
}
i_room->mpFloor = (dDrawPath_c::floor_class*)((u32)i_room + (u32)i_room->mpFloor);
i_room->field_0x8 = (f32*)((u32)i_room + (u32)i_room->field_0x8);
dDrawPath_c::floor_class* floor_p = i_room->mpFloor;
for (int i = 0; i < i_room->field_0x0; i++) {
int room = (int)i_room;
floor_p->mpGroup = (dDrawPath_c::group_class*)(room + (u32)floor_p->mpGroup);
dDrawPath_c::group_class* group_p = floor_p->mpGroup;
for (int j = 0; j < floor_p->field_0x1; j++) {
var_r6 = (u32)group_p->mpPoly;
group_p->mpLine = (dDrawPath_c::line_class*)(room + (u32)group_p->mpLine);
dDrawPath_c::line_class* line_p = group_p->mpLine;
for (int k = 0; k < group_p->field_0x2; k++) {
var_r6 = (u32)(line_p->unk4 + line_p->unk2);
line_p->unk4 += room;
line_p++;
}
group_p->mpPoly = (dDrawPath_c::poly_class*)(room + (u32)group_p->mpPoly);
dDrawPath_c::poly_class* poly_p = group_p->mpPoly;
for (int l = 0; l < group_p->field_0x4; l++) {
var_r6 = (u32)(poly_p->field_0x4 + poly_p->field_0x1);
poly_p->field_0x4 += room;
poly_p++;
}
group_p++;
}
if (floor_p->field_0x0 < *param_1) {
*param_1 = floor_p->field_0x0;
}
if (floor_p->field_0x0 > *param_2) {
*param_2 = floor_p->field_0x0;
}
floor_p++;
}
return var_r6;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -605,6 +681,7 @@ asm void dMpath_c::setPointer(dDrawPath_c::room_class* param_0, s8* param_1, s8*
#include "asm/d/map/d_map_path_dmap/setPointer__8dMpath_cFPQ211dDrawPath_c10room_classPScPSc.s"
}
#pragma pop
#endif
struct map_path_class {
int field_0x0;
-155
View File
@@ -6,163 +6,8 @@
#include "d/map/d_map_path_fmap.h"
#include "MSL_C/float.h"
#include "d/com/d_com_inf_game.h"
#include "d/map/d_map_path.h"
#include "d/d_tresure.h"
#include "dol2asm.h"
//
// Types:
//
class fmpTresTypeGroupData_c {
public:
fmpTresTypeGroupData_c() {
mpTresData = NULL;
mpNext = NULL;
}
/* 8003EB70 */ ~fmpTresTypeGroupData_c();
void setTypeGroupNo(u8 i_no) { mTypeGroupNo = i_no; }
void setNextData(fmpTresTypeGroupData_c* i_next) { mpNext = i_next; }
void setTresData(const dTres_c::data_s* i_data) { mpTresData = i_data; }
const dTres_c::data_s* getTresData() { return mpTresData; }
fmpTresTypeGroupData_c* getNextData() { return mpNext; }
/* 0x0 */ const dTres_c::data_s* mpTresData;
/* 0x0 */ fmpTresTypeGroupData_c* mpNext;
/* 0x8 */ u8 mTypeGroupNo;
}; // Size: 0xC
class fmpTresTypeGroupDataList_c {
public:
/* 8003D790 */ void addTypeGroupData(u8, dTres_c::data_s const*);
/* 8003EB10 */ ~fmpTresTypeGroupDataList_c();
/* 8003EC90 */ fmpTresTypeGroupDataList_c();
/* 0x0 */ fmpTresTypeGroupData_c* mpTypeGroupDataHead;
/* 0x4 */ fmpTresTypeGroupData_c* mpNextData;
};
class fmpTresTypeGroupDataListAll_c {
public:
void addTypeGroupData(u8 i_typeGroupNo, const dTres_c::data_s* i_data) {
mpTypeGroupData[i_typeGroupNo].addTypeGroupData(i_typeGroupNo, i_data);
}
/* 0x0 */ fmpTresTypeGroupDataList_c mpTypeGroupData[17];
};
class dMenu_Fmap_data_c {
public:
dTres_c::list_class* getTresure() { return mp_tresure; }
f32 getFilelist2MinX() { return m_fileList2->mLeftRmX; }
f32 getFilelist2MinZ() { return m_fileList2->mInnerRmZ; }
f32 getFilelist2MaxX() { return m_fileList2->mRightRmX; }
f32 getFilelist2MaxZ() { return m_fileList2->mFrontRmZ; }
/* 0x0 */ dTres_c::list_class* mp_tresure;
/* 0x4 */ dStage_FileList2_dt_c* m_fileList2;
/* 0x8 */ dDrawPath_c::room_class* mp_mapPath;
/* 0xC */ void* mp_dzsData;
};
class dMenu_Fmap_stage_data_c;
class dMenu_Fmap_room_data_c {
public:
/* 8003D818 */ bool isArrival();
/* 8003D868 */ void buildTresTypeGroup(int, int, int);
/* 8003D92C */ void buildFmapRoomData(int, int, f32, f32, f32, f32);
f32 getFileList2MinX() { return mp_fmapData->getFilelist2MinX(); }
f32 getFileList2MinZ() { return mp_fmapData->getFilelist2MinZ(); }
f32 getFileList2MaxX() { return mp_fmapData->getFilelist2MaxX(); }
f32 getFileList2MaxZ() { return mp_fmapData->getFilelist2MaxZ(); }
dMenu_Fmap_room_data_c* getNextData() { return mp_nextData; }
int getRoomNo() { return m_roomNo; }
/* 0x00 */ dMenu_Fmap_data_c* mp_fmapData;
/* 0x04 */ fmpTresTypeGroupDataListAll_c* mp_fmpTresTypeGroupDataListAll;
/* 0x08 */ dMenu_Fmap_room_data_c* mp_nextData;
/* 0x0C */ dMenu_Fmap_stage_data_c* mp_parentStage;
/* 0x10 */ u8 m_roomNo;
};
class dMenu_Fmap_stage_arc_data_c {
public:
u8 getVisitedRoomSaveTableNo() { return mVisitedRoomSaveTableNo; }
/* 0x0 */ u8 field_0x0;
/* 0x1 */ u8 mSaveTableNo;
/* 0x2 */ u8 mVisitedRoomSaveTableNo;
};
class dMenu_Fmap_stage_data_c {
public:
/* 8003D95C */ bool isArrival();
/* 8003D9D8 */ int buildFmapStageData(int, f32, f32);
dMenu_Fmap_stage_arc_data_c* getStageArc() { return mpStageArc; }
dMenu_Fmap_stage_data_c* getNextData() { return mpNextData; }
/* 0x00 */ char name[8];
/* 0x08 */ dMenu_Fmap_stage_arc_data_c* mpStageArc;
/* 0x0C */ dMenu_Fmap_room_data_c* mp_roomTop;
/* 0x10 */ dMenu_Fmap_stage_data_c* mpNextData;
/* 0x14 */ f32 m_offsetX;
/* 0x18 */ f32 m_offsetZ;
/* 0x1C */ f32 m_stageMinX;
/* 0x20 */ f32 m_stageMinZ;
/* 0x24 */ f32 m_stageMaxX;
/* 0x28 */ f32 m_stageMaxZ;
/* 0x2C */ int m_stageCntNo;
};
class dMenu_Fmap_region_data_c {
public:
/* 8003DB48 */ dMenu_Fmap_stage_data_c* getMenuFmapStageData(int);
/* 8003DB70 */ void getPointStagePathInnerNo(f32, f32, int, int*, int*);
/* 8003DEE0 */ void buildFmapRegionData(int);
/* 0x00 */ dMenu_Fmap_stage_data_c* mpMenuFmapStageDataTop;
/* 0x04 */ dMenu_Fmap_region_data_c* mpNextData;
/* 0x08 */ f32 mRegionOffsetX;
/* 0x0C */ f32 mRegionOffsetZ;
/* 0x10 */ f32 mRegionMinX;
/* 0x14 */ f32 mRegionMaxX;
/* 0x18 */ f32 mRegionMinZ;
/* 0x1C */ f32 mRegionMaxZ;
/* 0x20 */ int mRegionNo;
};
struct dMenu_Fmap_world_data_c {
/* 8003E028 */ void create(dMenu_Fmap_region_data_c*);
/* 8003E04C */ void buildFmapWorldData();
/* 0x00 */ dMenu_Fmap_region_data_c* mp_fmapRegionData;
/* 0x04 */ f32 m_worldMinX;
/* 0x08 */ f32 m_worldMinZ;
/* 0x0C */ f32 m_worldMaxX;
/* 0x10 */ f32 m_worldMaxZ;
};
struct dMenuFmapIconPointer_c {
/* 8003E114 */ void init(dMenu_Fmap_region_data_c*, dMenu_Fmap_stage_data_c*, u8, int, int);
/* 8003E1C0 */ void getFirstData();
/* 8003E2BC */ void getData();
/* 8003E350 */ void getFirstRoomData();
/* 8003E37C */ void getNextRoomData();
/* 8003E3A4 */ void getNextStageData();
/* 8003E3D8 */ void getNextData();
/* 8003E490 */ void nextData();
/* 8003E510 */ void getValidData();
};
struct dMenuFmapIconDisp_c {
/* 8003E578 */ void getPosition(int*, int*, f32*, f32*, dTres_c::data_s const**);
/* 8003E6E8 */ void isDrawDisp();
};
//
// Forward References:
//