d_s_room OK (#2033)

This commit is contained in:
hatal175
2024-01-16 14:20:47 +02:00
committed by GitHub
parent ead852383f
commit b27b6b287c
11 changed files with 155 additions and 538 deletions
+4 -4
View File
@@ -538,8 +538,8 @@ void dStage_roomControl_c::init() {
status++;
}
mArcBankName = (char*)dComIfG_getStageRes("name.bin");
mArcBankData = (char*)dComIfG_getStageRes("bank.bin");
mArcBankName = (dStage_roomControl_c::nameData*)dComIfG_getStageRes("name.bin");
mArcBankData = (dStage_roomControl_c::bankData*)dComIfG_getStageRes("bank.bin");
if (mArcBankName == NULL) {
mArcBankData = NULL;
@@ -1867,10 +1867,10 @@ s8 dStage_roomControl_c::m_time_pass;
u8 dStage_roomControl_c::mNoChangeRoom;
/* 80450D6C-80450D70 00026C 0004+00 1/1 2/2 0/0 .sbss mArcBankName__20dStage_roomControl_c */
char* dStage_roomControl_c::mArcBankName;
dStage_roomControl_c::nameData* dStage_roomControl_c::mArcBankName;
/* 80450D70-80450D74 000270 0004+00 1/1 1/1 0/0 .sbss mArcBankData__20dStage_roomControl_c */
char* dStage_roomControl_c::mArcBankData;
dStage_roomControl_c::bankData* dStage_roomControl_c::mArcBankData;
/* 80024EFC-80024F98 01F83C 009C+00 7/7 0/0 0/0 .text
* dStage_actorCreate__FP22stage_actor_data_classP16fopAcM_prm_class */
+113 -182
View File
@@ -1,6 +1,5 @@
//
// Generated By: dol2asm
// Translation Unit: d/s/d_s_room
// d_s_room
//
#include "d/s/d_s_room.h"
@@ -9,138 +8,48 @@
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
#include "d/s/d_s_play.h"
#include "dol2asm.h"
#include "dolphin/os/OS.h"
#include "f_op/f_op_actor_mng.h"
#include "f_op/f_op_scene_mng.h"
#include "m_Do/m_Do_Reset.h"
static bool resetArchiveBank(int param_0);
static bool setArchiveBank(int param_0);
//
// Types:
//
class room_of_scene_class : public scene_class {
public:
/* 0x1C4 */ request_of_phase_process_class field_0x1c4;
/* 0x1CC */ void* mpDzrRes;
/* 0x1D0 */ dStage_roomDt_c* mpRoomDt;
/* 0x1D4 */ s8 field_0x1d4;
/* 0x1D5 */ u8 field_0x1d5;
/* 0x1D6 */ u8 field_0x1d6[2];
/* 0x1D8 */ u8 field_0x1d8;
};
//
// Forward References:
//
extern "C" static bool dScnRoom_Draw__FP19room_of_scene_class();
extern "C" static void getResetArchiveBank__FiPPCUc();
extern "C" static void resetArchiveBank__Fi();
extern "C" static void setArchiveBank__Fi();
extern "C" static void objectDeleteJugge__FPvPv();
extern "C" static void deleteJugge__FPvPv();
extern "C" static void isCreatingCallback__FP10create_tagPUi();
extern "C" static void isCreating__FUi();
extern "C" static void loadDemoArchive__Fi();
extern "C" static void objectSetCheck__FP19room_of_scene_class();
extern "C" static void dScnRoom_Execute__FP19room_of_scene_class();
extern "C" static bool dScnRoom_IsDelete__FP19room_of_scene_class();
extern "C" static void isReadRoom__Fi();
extern "C" static void dScnRoom_Delete__FP19room_of_scene_class();
extern "C" static void phase_0__FP19room_of_scene_class();
extern "C" static void phase_1__FP19room_of_scene_class();
extern "C" static void phase_2__FP19room_of_scene_class();
extern "C" void setZoneNo__20dStage_roomControl_cFii();
extern "C" static void phase_3__FP19room_of_scene_class();
extern "C" static void phase_4__FP19room_of_scene_class();
extern "C" static void dScnRoom_Create__FP11scene_class();
extern "C" extern char const* const d_s_d_s_room__stringBase0;
extern "C" extern void* g_profile_ROOM_SCENE[10];
//
// External References:
//
extern "C" void mDoExt_getArchiveHeap__Fv();
extern "C" void mDoExt_setCurrentHeap__FP7JKRHeap();
extern "C" void fopAc_IsActor__FPv();
extern "C" void fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc();
extern "C" void fopScnM_DeleteReq__FP11scene_class();
extern "C" void fpcBs_Is_JustOfType__Fii();
extern "C" void fpcCtIt_Judge__FPFPvPv_PvPv();
extern "C" void fpcLyIt_Judge__FP11layer_classPFPvPv_PvPv();
extern "C" void fpcM_Delete__FPv();
extern "C" void getStatusRoomDt__20dStage_roomControl_cFi();
extern "C" void getMemoryBlock__20dStage_roomControl_cFi();
extern "C" void setArcBank__20dStage_roomControl_cFiPCc();
extern "C" void getArcBank__20dStage_roomControl_cFi();
extern "C" void resetArchiveBank__20dStage_roomControl_cFi();
extern "C" void dStage_dt_c_roomLoader__FPvP11dStage_dt_ci();
extern "C" void dStage_dt_c_roomReLoader__FPvP11dStage_dt_ci();
extern "C" void getLayerNo__14dComIfG_play_cFi();
extern "C" void getZoneNo__20dStage_roomControl_cFi();
extern "C" void dComIfG_getRoomArcName__Fi();
extern "C" void dComIfGp_ret_wp_set__FSc();
extern "C" void dComLbG_PhaseHandler__FP30request_of_phase_process_classPPFPv_iPv();
extern "C" void clearRoomSwitch__13dSv_zoneBit_cFv();
extern "C" void clearRoomItem__13dSv_zoneBit_cFv();
extern "C" void createZone__10dSv_info_cFi();
extern "C" void setRes__14dRes_control_cFPCcP11dRes_info_ciPCcUcP7JKRHeap();
extern "C" void syncRes__14dRes_control_cFPCcP11dRes_info_ci();
extern "C" void deleteRes__14dRes_control_cFPCcP11dRes_info_ci();
extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci();
extern "C" void setStageRes__14dRes_control_cFPCcP7JKRHeap();
extern "C" void demoInit__16dEvent_manager_cFv();
extern "C" void roomInit__16dEvent_manager_cFi();
extern "C" void roomFinish__16dEvent_manager_cFi();
extern "C" void allForceOnEventMove__Q213dPa_control_c7level_cFv();
extern "C" void freeAll__7JKRHeapFv();
extern "C" void getTotalUsedSize__10JKRExpHeapCFv();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
// extern "C" extern void* g_fopScn_Method[5 + 1 /* padding */];
// extern "C" extern void* g_fpcNd_Method[5 + 1 /* padding */];
extern "C" u8 mStatus__20dStage_roomControl_c[65792];
extern "C" u8 mDemoArcName__20dStage_roomControl_c[10 + 2 /* padding */];
extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */];
extern "C" u8 mArcBankName__20dStage_roomControl_c[4];
extern "C" u8 mArcBankData__20dStage_roomControl_c[4];
//
// Declarations:
//
/* 8025AE1C-8025AE24 25575C 0008+00 1/0 0/0 0/0 .text dScnRoom_Draw__FP19room_of_scene_class */
static int dScnRoom_Draw(room_of_scene_class* i_this) {
return 1;
}
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039A388 = "";
#pragma pop
/* 8025AE24-8025AF24 255764 0100+00 2/2 0/0 0/0 .text getResetArchiveBank__FiPPCUc */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int getResetArchiveBank(int param_0, u8 const** param_1) {
nofralloc
#include "asm/d/s/d_s_room/getResetArchiveBank__FiPPCUc.s"
static int getResetArchiveBank(int param_1, u8 const** param_2) {
dStage_roomControl_c::nameData* arcBankName = dStage_roomControl_c::getArcBankName();
int local_30 = 0;
*param_2 = NULL;
if (arcBankName != NULL) {
dStage_roomControl_c::bankData* arcBankData = dStage_roomControl_c::getArcBankData();
dStage_roomControl_c::bankDataEntry* entries = arcBankData->m_entries;
for (int i = 0; i < arcBankData->m_num; entries++, i++) {
if (entries->field_0x0 == param_1) {
if (entries->mLayerNo == dComIfG_play_c::getLayerNo(0)) {
local_30 = 0x20;
*param_2 = entries->field_0x2;
break;
}
}
}
}
u8 const* pbVar1 = *param_2;
for (int i = 0; i < local_30; pbVar1++, i++) {
char* arcBank = dStage_roomControl_c::getArcBank(i);
char* name = "";
int id = *pbVar1;
if (id != 0xff) {
JUT_ASSERT(160, 0 <= id && id < arcBankName->m_num);
name = arcBankName->m_names[id];
}
if (strcmp(arcBank, name) != 0) {
return i;
}
}
return local_30;
}
#pragma pop
/* 8025AF24-8025AF4C 255864 0028+00 1/1 0/0 0/0 .text resetArchiveBank__Fi */
static bool resetArchiveBank(int param_0) {
@@ -148,24 +57,43 @@ static bool resetArchiveBank(int param_0) {
return dStage_roomControl_c::resetArchiveBank(getResetArchiveBank(param_0, &tmp));
}
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039A389 = "pack";
SECTION_DEAD static char const* const stringBase_8039A38E = "/res/Object/";
SECTION_DEAD static char const* const stringBase_8039A39B = "Bank[%d] : %s.arc Read Error !!\n";
#pragma pop
/* 8025AF4C-8025B0F0 25588C 01A4+00 1/1 0/0 0/0 .text setArchiveBank__Fi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm bool setArchiveBank(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/setArchiveBank__Fi.s"
static bool setArchiveBank(int param_0) {
u8* arr[4];
int iVar1 = getResetArchiveBank(param_0, (u8 const**)&arr);
if (arr[0] == NULL) {
return true;
}
dStage_roomControl_c::nameData* arcBankName = dStage_roomControl_c::getArcBankName();
for (; (int)iVar1 < 0x20; iVar1++) {
const char* name = "";
int id = arr[0][iVar1];
if (id != 0xff) {
JUT_ASSERT(216, 0 <= id && id < arcBankName->m_num);
name = arcBankName->m_names[id];
}
if (strcmp(name, "") != 0) {
if (strnicmp(name, "pack", 4) == 0) {
int syncres = dComIfG_syncObjectRes(name);
if (syncres < 0) {
if (!dComIfG_setObjectRes(name, 0, mDoExt_getArchiveHeap())) {
OSReport_Error("Bank[%d] : %s.arc Read Error !!\n", iVar1, name);
} else {
return false;
}
} else if (syncres != 0) {
return false;
}
} else {
if (!dComIfG_setObjectRes(name, 0, mDoExt_getArchiveHeap())) {
OSReport_Error("Bank[%d] : %s.arc Read Error !!\n", iVar1, name);
}
}
}
dStage_roomControl_c::setArcBank(iVar1, name);
}
return true;
}
#pragma pop
/* 8025B0F0-8025B150 255A30 0060+00 1/1 0/0 0/0 .text objectDeleteJugge__FPvPv */
static int objectDeleteJugge(void* i_obj, void*) {
@@ -186,36 +114,43 @@ static int deleteJugge(void* i_obj, void*) {
}
/* 8025B174-8025B194 255AB4 0020+00 1/1 0/0 0/0 .text isCreatingCallback__FP10create_tagPUi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void* isCreatingCallback(create_tag* param_0, unsigned int* param_1) {
nofralloc
#include "asm/d/s/d_s_room/isCreatingCallback__FP10create_tagPUi.s"
static void* isCreatingCallback(create_tag* param_1, unsigned int* param_2) {
void* tagData = param_1->mBase.mpTagData;
if (*(*((int**)tagData + 0x11) + 3) == *param_2) {
return tagData;
}
return NULL;
}
#pragma pop
/* 8025B194-8025B1D0 255AD4 003C+00 2/2 0/0 0/0 .text isCreating__FUi */
static bool isCreating(unsigned int param_0) {
return fpcCtIt_Judge((fpcCtIt_JudgeFunc)isCreatingCallback, &param_0);
}
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039A3BC = "Demo%02d_%02d";
#pragma pop
/* 8025B1D0-8025B2EC 255B10 011C+00 1/1 0/0 0/0 .text loadDemoArchive__Fi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void loadDemoArchive(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/loadDemoArchive__Fi.s"
static int loadDemoArchive(int room_no) {
if (*dStage_roomControl_c::getDemoArcName() == 0) {
dStage_Lbnk_c* lbnk = dComIfGp_roomControl_getStatusRoomDt(room_no)->mRoomDt.getLbnk();
if (lbnk != NULL) {
dStage_Lbnk_dt_c* entries = lbnk->entries;
if (entries != NULL) {
int bank = entries[dComIfG_play_c::getLayerNo(room_no)].bank;
if (bank != 0xff) {
JUT_ASSERT(350, 0 <= bank && bank < 100);
u8 bank2 = entries[dComIfG_play_c::getLayerNo(room_no)].bank2;
JUT_ASSERT(353, 0 <= bank2 && bank2 < 100);
sprintf(dStage_roomControl_c::getDemoArcName(), "Demo%02d_%02d", bank, bank2);
if (!dComIfG_setObjectRes(dStage_roomControl_c::getDemoArcName(), 0, (JKRHeap*)NULL)) {
*dStage_roomControl_c::getDemoArcName() = 0;
} else {
return 1;
}
}
}
}
}
return 0;
}
#pragma pop
/* 8025B2EC-8025B564 255C2C 0278+00 3/3 0/0 0/0 .text objectSetCheck__FP19room_of_scene_class */
static bool objectSetCheck(room_of_scene_class* i_this) {
@@ -277,12 +212,12 @@ static bool objectSetCheck(room_of_scene_class* i_this) {
}
/* 8025B564-8025B674 255EA4 0110+00 1/0 0/0 0/0 .text dScnRoom_Execute__FP19room_of_scene_class */
#ifdef NONMATCHING
static int dScnRoom_Execute(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
if (dComIfGp_roomControl_checkStatusFlag(roomNo, 2)) {
dComIfGp_roomControl_offStatusFlag(roomNo, 2);
u32 flag = g_dComIfG_gameInfo.play.getRoomControl()->mStatus[roomNo].mFlag;
if (flag & 2) {
dComIfGp_roomControl_setStatusFlag(roomNo, flag & ~2);
dComIfGp_roomControl_onStatusFlag(roomNo, 1);
} else if (objectSetCheck(i_this)) {
if (dComIfGp_roomControl_checkStatusFlag(roomNo, 4)) {
@@ -291,7 +226,7 @@ static int dScnRoom_Execute(room_of_scene_class* i_this) {
!i_dComIfGp_event_runCheck() &&
(int)fopScnM_GetParam(i_this) == dComIfGp_roomControl_getStayNo()) {
if (isCreating(fpcM_LayerID(i_this))) {
dScnPly_c::setPauseTimer(2);
dScnPly_c::nextPauseTimer = 2;
} else {
i_this->field_0x1d5 = 0;
}
@@ -300,16 +235,6 @@ static int dScnRoom_Execute(room_of_scene_class* i_this) {
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm int dScnRoom_Execute(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/dScnRoom_Execute__FP19room_of_scene_class.s"
}
#pragma pop
#endif
/* 8025B674-8025B67C 255FB4 0008+00 1/0 0/0 0/0 .text dScnRoom_IsDelete__FP19room_of_scene_class
*/
@@ -478,16 +403,22 @@ static int dScnRoom_Create(scene_class* i_this) {
/* ############################################################################################## */
/* 803C3274-803C3288 -00001 0014+00 1/0 0/0 0/0 .data l_dScnRoom_Method */
SECTION_DATA static void* l_dScnRoom_Method[5] = {
(void*)dScnRoom_Create, (void*)dScnRoom_Delete, (void*)dScnRoom_Execute,
(void*)dScnRoom_IsDelete, (void*)dScnRoom_Draw,
static leafdraw_method_class l_dScnRoom_Method = {
(process_method_func)dScnRoom_Create, (process_method_func)dScnRoom_Delete, (process_method_func)dScnRoom_Execute,
(process_method_func)dScnRoom_IsDelete, (process_method_func)dScnRoom_Draw,
};
/* 803C3288-803C32B0 -00001 0028+00 0/0 0/0 1/0 .data g_profile_ROOM_SCENE */
SECTION_DATA extern void* g_profile_ROOM_SCENE[10] = {
(void*)0xFFFFFFFD, (void*)0x0000FFFD, (void*)0x00120000, (void*)&g_fpcNd_Method,
(void*)0x000001DC, (void*)NULL, (void*)NULL, (void*)&g_fopScn_Method,
(void*)&l_dScnRoom_Method, (void*)NULL,
scene_process_profile_definition g_profile_ROOM_SCENE = {
fpcLy_CURRENT_e, // mLayerID
0, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_ROOM_SCENE, // mProcName
&g_fpcNd_Method.mBase, // mSubMtd
sizeof(room_of_scene_class), // mSize
0, // mSizeOther
0, // mParameters
&g_fopScn_Method.mBase, // mSubMtd
(process_method_class*)&l_dScnRoom_Method, // mpMtd
};
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+1
View File
@@ -6,6 +6,7 @@
#include "f_op/f_op_msg_mng.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "SSystem/SComponent/c_malloc.h"
#include "SSystem/SComponent/c_math.h"
#include "d/meter/d_meter2.h"
#include "d/meter/d_meter2_info.h"
#include "d/msg/d_msg_object.h"
+6
View File
@@ -9,7 +9,13 @@
#include "JSystem/JUtility/JUTDbPrint.h"
#include "JSystem/JUtility/JUTException.h"
#include "JSystem/JUtility/JUTVideo.h"
#include "JSystem/JKernel/JKRAramStream.h"
#include "JSystem/JKernel/JKRDvdRipper.h"
#include "JSystem/JKernel/JKRDvdAramRipper.h"
#include "JSystem/JKernel/JKRAram.h"
#include "SSystem/SComponent/c_API_controller_pad.h"
#include "SSystem/SComponent/c_malloc.h"
#include "SSystem/SComponent/c_math.h"
#include "dol2asm.h"
#include "dolphin/os/OS.h"
#include "m_Do/m_Do_DVDError.h"