d_s_room / d_a_bg first pass

This commit is contained in:
TakaRikka
2023-01-03 17:43:38 -08:00
parent ba08966f58
commit f1518a9a93
23 changed files with 973 additions and 707 deletions
+4 -4
View File
@@ -1365,10 +1365,10 @@ int dComIfGd_setSimpleShadow(cXyz* i_pos, f32 param_1, f32 param_2, cBgS_PolyInf
}
/* 8002D1AC-8002D25C 027AEC 00B0+00 0/0 0/0 1/1 .text dComIfGp_getMapTrans__FiPfPfPs */
int dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angle) {
bool dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angle) {
dStage_Multi_c* multi = dComIfGp_getMulti();
if (multi == NULL) {
return 0;
return false;
}
dStage_Mult_info* info = multi->mInfo;
@@ -1377,12 +1377,12 @@ int dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angl
*o_transX = info->mTransX;
*o_transY = info->mTransY;
*o_angle = info->mAngle;
return 1;
return true;
}
info++;
}
return 0;
return false;
}
/* 8002D25C-8002D2AC 027B9C 0050+00 0/0 3/3 3/3 .text dComIfGp_getRoomCamera__Fi */
+1 -1
View File
@@ -528,7 +528,7 @@ void dStage_roomControl_c::init() {
}
status->mMemBlockID = -1;
status->field_0x400 = 0;
status->mpBgW = NULL;
status++;
}
+249 -137
View File
@@ -5,24 +5,25 @@
#include "d/s/d_s_room.h"
#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/types.h"
#include "f_op/f_op_scene.h"
static bool resetArchiveBank(int param_0);
static bool setArchiveBank(int param_0);
//
// Types:
//
class room_of_scene_class : public process_node_class {
class room_of_scene_class : public scene_class {
public:
/* 0x1AC */ process_method_class* mpProcessMtd;
/* 0x1B0 */ scene_tag_class* field_0x1b0;
/* 0x1B4 */ u8 field_0x1b4[0x10];
/* 0x1C4 */ request_of_phase_process_class field_0x1c4;
/* 0x1CC */ void* field_0x1cc;
/* 0x1D0 */ dStage_roomDt_c* field_0x1d0;
/* 0x1CC */ void* mpDzrRes;
/* 0x1D0 */ dStage_roomDt_c* mpRoomDt;
/* 0x1D4 */ s8 field_0x1d4;
/* 0x1D5 */ s8 field_0x1d5;
/* 0x1D5 */ u8 field_0x1d5;
/* 0x1D6 */ u8 field_0x1d6[2];
/* 0x1D8 */ u8 field_0x1d8;
};
@@ -110,15 +111,14 @@ 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];
extern "C" extern u8 pauseTimer__9dScnPly_c[4];
//
// Declarations:
//
/* 8025AE1C-8025AE24 25575C 0008+00 1/0 0/0 0/0 .text dScnRoom_Draw__FP19room_of_scene_class */
static bool dScnRoom_Draw(room_of_scene_class* param_0) {
return true;
static int dScnRoom_Draw(room_of_scene_class* i_this) {
return 1;
}
/* ############################################################################################## */
@@ -132,21 +132,17 @@ SECTION_DEAD static char const* const stringBase_8039A388 = "";
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void getResetArchiveBank(int param_0, u8 const** param_1) {
static asm int getResetArchiveBank(int param_0, u8 const** param_1) {
nofralloc
#include "asm/d/s/d_s_room/getResetArchiveBank__FiPPCUc.s"
}
#pragma pop
/* 8025AF24-8025AF4C 255864 0028+00 1/1 0/0 0/0 .text resetArchiveBank__Fi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void resetArchiveBank(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/resetArchiveBank__Fi.s"
static bool resetArchiveBank(int param_0) {
const u8* tmp;
return dStage_roomControl_c::resetArchiveBank(getResetArchiveBank(param_0, &tmp));
}
#pragma pop
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -161,51 +157,44 @@ SECTION_DEAD static char const* const stringBase_8039A39B = "Bank[%d] : %s.arc R
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void setArchiveBank(int param_0) {
static asm bool setArchiveBank(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/setArchiveBank__Fi.s"
}
#pragma pop
/* 8025B0F0-8025B150 255A30 0060+00 1/1 0/0 0/0 .text objectDeleteJugge__FPvPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void objectDeleteJugge(void* param_0, void* param_1) {
nofralloc
#include "asm/d/s/d_s_room/objectDeleteJugge__FPvPv.s"
static int objectDeleteJugge(void* i_obj, void*) {
if (fpcM_GetProfName(i_obj) != PROC_BG) {
if (fopAcM_IsActor(i_obj) && !fopAcM_CheckCondition((fopAc_ac_c*)i_obj, 4)) {
return 0;
}
fpcM_Delete(i_obj);
}
return 0;
}
#pragma pop
/* 8025B150-8025B174 255A90 0024+00 1/1 0/0 0/0 .text deleteJugge__FPvPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void deleteJugge(void* param_0, void* param_1) {
nofralloc
#include "asm/d/s/d_s_room/deleteJugge__FPvPv.s"
static int deleteJugge(void* i_obj, void*) {
fpcM_Delete(i_obj);
return 0;
}
#pragma pop
/* 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) {
static asm void* isCreatingCallback(create_tag* param_0, unsigned int* param_1) {
nofralloc
#include "asm/d/s/d_s_room/isCreatingCallback__FP10create_tagPUi.s"
}
#pragma pop
/* 8025B194-8025B1D0 255AD4 003C+00 2/2 0/0 0/0 .text isCreating__FUi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void isCreating(unsigned int param_0) {
nofralloc
#include "asm/d/s/d_s_room/isCreating__FUi.s"
static bool isCreating(unsigned int param_0) {
return fpcCtIt_Judge((fpcCtIt_JudgeFunc)isCreatingCallback, &param_0);
}
#pragma pop
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -225,146 +214,269 @@ static asm void loadDemoArchive(int param_0) {
#pragma pop
/* 8025B2EC-8025B564 255C2C 0278+00 3/3 0/0 0/0 .text objectSetCheck__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void objectSetCheck(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/objectSetCheck__FP19room_of_scene_class.s"
static bool objectSetCheck(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
BOOL status_flag_8 = dComIfGp_roomControl_checkStatusFlag(roomNo, 8);
BOOL status_flag_20 = dComIfGp_roomControl_checkStatusFlag(roomNo, 0x20);
if (i_this->field_0x1d4 == 0 || (i_this->field_0x1d4 > 0 && !status_flag_8)) {
if (!status_flag_8) {
switch (i_this->field_0x1d4) {
case 0:
if (!resetArchiveBank(roomNo)) {
return 0;
}
i_this->field_0x1d4++;
case 1:
if (!setArchiveBank(roomNo)) {
return 0;
}
if (i_this->mpDzrRes != NULL) {
loadDemoArchive(roomNo);
}
default:
if (*dStage_roomControl_c::getDemoArcName() != '\0') {
int phase = dComIfG_syncObjectRes(dStage_roomControl_c::getDemoArcName());
if (phase >= 0 && phase > 0) {
return 0;
}
}
fopAcM_create(PROC_BG, roomNo, NULL, -1, NULL, NULL, -1);
dComIfGp_getPEvtManager()->demoInit();
dComIfGp_getPEvtManager()->roomInit(roomNo);
dStage_dt_c_roomReLoader(i_this->mpDzrRes, i_this->mpRoomDt, roomNo);
dComIfGp_ret_wp_set(roomNo);
i_this->field_0x1d4 = -1;
i_this->field_0x1d5 = 1;
}
}
} else if (status_flag_8) {
if (isCreating(fpcM_LayerID(i_this))) {
return 0;
}
fpcM_LyJudge(&i_this->mBase, (fpcLyIt_JudgeFunc)deleteJugge, NULL);
g_dComIfG_gameInfo.play.getParticle()->levelAllForceOnEventMove();
dComIfGs_clearRoomSwitch(dComIfGp_roomControl_getZoneNo(roomNo));
dComIfGs_clearRoomItem(dComIfGp_roomControl_getZoneNo(roomNo));
dComIfGp_roomControl_offStatusFlag(roomNo, 0x20);
i_this->field_0x1d4 = 0;
} else if (status_flag_20) {
fpcM_LyJudge(&i_this->mBase, (fpcLyIt_JudgeFunc)objectDeleteJugge, NULL);
g_dComIfG_gameInfo.play.getParticle()->levelAllForceOnEventMove();
}
return 1;
}
#pragma pop
/* 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);
dComIfGp_roomControl_onStatusFlag(roomNo, 1);
} else if (objectSetCheck(i_this)) {
if (dComIfGp_roomControl_checkStatusFlag(roomNo, 4)) {
fopScnM_DeleteReq(i_this);
} else if (i_this->field_0x1d4 < 0 && i_this->field_0x1d5 != 0 &&
!i_dComIfGp_event_runCheck() &&
(int)fopScnM_GetParam(i_this) == dComIfGp_roomControl_getStayNo()) {
if (isCreating(fpcM_LayerID(i_this))) {
dScnPly_c::setPauseTimer(2);
} else {
i_this->field_0x1d5 = 0;
}
}
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void dScnRoom_Execute(room_of_scene_class* param_0) {
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
*/
static bool dScnRoom_IsDelete(room_of_scene_class* param_0) {
return true;
static int dScnRoom_IsDelete(room_of_scene_class*) {
return 1;
}
/* 8025B67C-8025B73C 255FBC 00C0+00 1/1 0/0 0/0 .text isReadRoom__Fi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void isReadRoom(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/isReadRoom__Fi.s"
static bool isReadRoom(int param_0) {
roomRead_class* room = dComIfGp_getStageRoom();
if (room == NULL) {
return false;
}
if (room->field_0x0 <= param_0) {
return false;
}
roomRead_data_class* roomData = room->field_0x4[dComIfGp_getNextStageRoomNo()];
u8* tmp = roomData->field_0x4;
for (int i = 0; i < roomData->field_0x0; i++) {
if (dStage_roomRead_dt_c_ChkBg(*tmp) &&
param_0 == dStage_roomRead_dt_c_GetLoadRoomIndex(*tmp)) {
return true;
}
tmp++;
}
return false;
}
inline const char* setArcName(room_of_scene_class* i_room) {
return dComIfG_getRoomArcName(fopAcM_GetParam(i_room));
}
#pragma pop
/* 8025B73C-8025B870 25607C 0134+00 1/0 0/0 0/0 .text dScnRoom_Delete__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void dScnRoom_Delete(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/dScnRoom_Delete__FP19room_of_scene_class.s"
static int dScnRoom_Delete(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
dComIfGp_roomControl_setStatusFlag(roomNo, 0);
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.init();
if (mDoRst::isReset() || !dComIfGp_isEnableNextStage() ||
strcmp(dComIfGp_getNextStageName(), dComIfGp_getStartStageName()) ||
(roomNo != dComIfGp_getNextStageRoomNo() && !isReadRoom(roomNo))) {
dComIfG_deleteStageRes(setArcName(i_this));
JKRExpHeap* heap = dStage_roomControl_c::getMemoryBlock(roomNo);
if (heap != NULL) {
heap->freeAll();
}
}
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.init();
dComIfGp_getPEvtManager()->roomFinish(roomNo);
return 1;
}
#pragma pop
/* 8025B870-8025B8A4 2561B0 0034+00 1/0 0/0 0/0 .text phase_0__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_0(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_0__FP19room_of_scene_class.s"
static int phase_0(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
dStage_roomControl_c::setStatusProcID(roomNo, fopScnM_GetID(i_this));
return 2;
}
#pragma pop
/* 8025B8A4-8025B980 2561E4 00DC+00 1/0 0/0 0/0 .text phase_1__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_1(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_1__FP19room_of_scene_class.s"
}
#pragma pop
static int phase_1(room_of_scene_class* i_this) {
i_this->field_0x1d8 = 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_8039A3CA = "room.dzr";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_8039A3D3 = "\0\0\0\0";
#pragma pop
int roomNo = fopScnM_GetParam(i_this);
const char* arcName = setArcName(i_this);
if (dComIfG_syncStageRes(arcName) < 0) {
JKRExpHeap* heap = dStage_roomControl_c::getMemoryBlock(roomNo);
if (heap != NULL) {
if (heap->getTotalUsedSize() != 0) {
return 0;
}
} else {
stage_stag_info_class* stagInfo = i_dComIfGp_getStage()->getStagInfo();
if (dStage_staginfo_GetArchiveHeap(stagInfo) != NULL) {
heap = mDoExt_getArchiveHeap();
}
}
if (!dComIfG_setStageRes(arcName, heap)) {
return cPhs_ERROR_e;
}
}
return 2;
}
/* 8025B980-8025BAAC 2562C0 012C+00 1/0 0/0 0/0 .text phase_2__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_2(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_2__FP19room_of_scene_class.s"
static int phase_2(room_of_scene_class* i_this) {
const char* arcName = setArcName(i_this);
int phase = dComIfG_syncStageRes(arcName);
if (phase < 0) {
return cPhs_ERROR_e;
}
if (phase != 0) {
return 0;
}
int roomNo = fopScnM_GetParam(i_this);
if (dComIfGp_roomControl_getZoneNo(roomNo) < 0) {
dComIfGp_roomControl_setZoneNo(roomNo, dComIfGs_createZone(roomNo));
}
i_this->mpRoomDt = &dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt;
i_this->mpRoomDt->setRoomNo(roomNo);
i_this->mpDzrRes = dComIfG_getStageRes(arcName, "room.dzr");
if (i_this->mpDzrRes != NULL) {
dStage_dt_c_roomLoader(i_this->mpDzrRes, i_this->mpRoomDt, roomNo);
}
JKRHeap* old_heap = NULL;
JKRExpHeap* heap = dStage_roomControl_c::getMemoryBlock(roomNo);
if (heap != NULL) {
old_heap = mDoExt_setCurrentHeap(heap);
}
if (old_heap != NULL) {
mDoExt_setCurrentHeap(old_heap);
}
return 2;
}
#pragma pop
/* 8025BAAC-8025BAC4 2563EC 0018+00 1/1 0/0 0/0 .text setZoneNo__20dStage_roomControl_cFii */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dStage_roomControl_c::setZoneNo(int param_0, int param_1) {
nofralloc
#include "asm/d/s/d_s_room/setZoneNo__20dStage_roomControl_cFii.s"
void dStage_roomControl_c::setZoneNo(int i_roomNo, int i_zoneNo) {
mStatus[i_roomNo].mZoneNo = i_zoneNo;
}
#pragma pop
/* 8025BAC4-8025BAF8 256404 0034+00 1/0 0/0 0/0 .text phase_3__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_3(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_3__FP19room_of_scene_class.s"
static int phase_3(room_of_scene_class* i_this) {
return objectSetCheck(i_this) ? 2 : 0;
}
#pragma pop
/* 8025BAF8-8025BB48 256438 0050+00 1/0 0/0 0/0 .text phase_4__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_4(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_4__FP19room_of_scene_class.s"
}
#pragma pop
static int phase_4(room_of_scene_class* i_this) {
if (dComIfGp_getPlayer(0) == NULL) {
return 0;
}
/* ############################################################################################## */
/* 803C3260-803C3274 -00001 0014+00 1/1 0/0 0/0 .data l_method$4056 */
SECTION_DATA static void* l_method[5] = {
(void*)phase_0__FP19room_of_scene_class, (void*)phase_1__FP19room_of_scene_class,
(void*)phase_2__FP19room_of_scene_class, (void*)phase_3__FP19room_of_scene_class,
(void*)phase_4__FP19room_of_scene_class,
};
return objectSetCheck(i_this) ? cPhs_COMPLEATE_e : 0;
}
/* 8025BB48-8025BB78 256488 0030+00 1/0 0/0 0/0 .text dScnRoom_Create__FP11scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void dScnRoom_Create(scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/dScnRoom_Create__FP11scene_class.s"
static int dScnRoom_Create(scene_class* i_this) {
static int (*l_method[5])(void*) = {
(int (*)(void*))phase_0, (int (*)(void*))phase_1, (int (*)(void*))phase_2,
(int (*)(void*))phase_3, (int (*)(void*))phase_4,
};
room_of_scene_class* room = static_cast<room_of_scene_class*>(i_this);
return dComLbG_PhaseHandler(&room->field_0x1c4, l_method, i_this);
}
#pragma pop
/* ############################################################################################## */
/* 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__FP11scene_class,
(void*)dScnRoom_Delete__FP19room_of_scene_class,
(void*)dScnRoom_Execute__FP19room_of_scene_class,
(void*)dScnRoom_IsDelete__FP19room_of_scene_class,
(void*)dScnRoom_Draw__FP19room_of_scene_class,
(void*)dScnRoom_Create, (void*)dScnRoom_Delete, (void*)dScnRoom_Execute,
(void*)dScnRoom_IsDelete, (void*)dScnRoom_Draw,
};
/* 803C3288-803C32B0 -00001 0028+00 0/0 0/0 1/0 .data g_profile_ROOM_SCENE */