mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-06 11:37:25 -04:00
1550 lines
40 KiB
C++
1550 lines
40 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_s_play.cpp
|
|
//
|
|
|
|
#include "d/d_s_play.h"
|
|
#include "JSystem/JKernel/JKRExpHeap.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include "JSystem/JUtility/JUTConsole.h"
|
|
#include "JSystem/JUtility/JUTReport.h"
|
|
#include "SSystem/SComponent/c_counter.h"
|
|
#include "c/c_dylink.h"
|
|
#include "d/actor/d_a_dai.h"
|
|
#include "d/actor/d_a_ib.h"
|
|
#include "d/actor/d_a_npc_kg2.h"
|
|
#include "d/actor/d_a_player_main.h"
|
|
#include "d/actor/d_a_salvage.h"
|
|
#include "d/actor/d_a_sea.h"
|
|
#include "d/actor/d_a_steam_tag.h"
|
|
#include "d/actor/d_a_title.h"
|
|
#include "d/actor/d_a_ykgr.h"
|
|
#include "d/actor/d_a_obj_tribox.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_com_lib_game.h"
|
|
#include "d/d_kankyo_rain.h"
|
|
#include "d/d_material.h"
|
|
#include "d/d_meter.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_snap.h"
|
|
#include "f_op/f_op_draw_iter.h"
|
|
#include "f_op/f_op_msg_mng.h"
|
|
#include "f_op/f_op_overlap_mng.h"
|
|
#include "f_op/f_op_scene_mng.h"
|
|
#include "f_pc/f_pc_manager.h"
|
|
#include "m_Do/m_Do_Reset.h"
|
|
#include "m_Do/m_Do_audio.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "m_Do/m_Do_dvd_thread.h"
|
|
#include "m_Do/m_Do_graphic.h"
|
|
#include "m_Do/m_Do_machine.h"
|
|
#include <stdio.h>
|
|
|
|
#include "weak_bss_3569.h" // IWYU pragma: keep
|
|
|
|
static const int PRELOAD_RES_MAX = 0x23;
|
|
static const int PRELOAD_DYL_MAX = 0x1B;
|
|
|
|
struct PreLoadInfoT_s {
|
|
char* stageName;
|
|
const s16* dylKeyTbl;
|
|
const char** resName;
|
|
u8 dylKeyTblNum;
|
|
u8 resNameNum;
|
|
};
|
|
|
|
s8 dScnPly_ply_c::pauseTimer;
|
|
s8 dScnPly_ply_c::nextPauseTimer;
|
|
|
|
/* 80234570-802345B0 .text calcPauseTimer__13dScnPly_ply_cFv */
|
|
s8 dScnPly_ply_c::calcPauseTimer() {
|
|
if (nextPauseTimer != 0) {
|
|
pauseTimer = nextPauseTimer;
|
|
nextPauseTimer = 0;
|
|
return pauseTimer;
|
|
}
|
|
|
|
return cLib_calcTimer(&pauseTimer);
|
|
}
|
|
|
|
/* 802345B0-80234654 .text __ct__18dScnPly_dark_HIO_cFv */
|
|
dScnPly_dark_HIO_c::dScnPly_dark_HIO_c() {
|
|
field_0x05 = 0;
|
|
field_0x06 = 0;
|
|
|
|
mDarkStatus = dStage_roomControl_c::getDarkStatus(0);
|
|
}
|
|
|
|
dScnPly_dark_HIO_c g_darkHIO;
|
|
|
|
/* 80234654-802346A4 .text __ct__22dScnPly_reg_childHIO_cFv */
|
|
dScnPly_reg_childHIO_c::dScnPly_reg_childHIO_c() {
|
|
for (int i = 0; i < 30; i++) {
|
|
mFloatRegs[i] = 0.0f;
|
|
}
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
mShortRegs[i] = 0;
|
|
}
|
|
}
|
|
|
|
dScnPly_reg_HIO_c g_regHIO;
|
|
|
|
/* 802346A4-80234734 .text __ct__22dScnPly_env_otherHIO_cFv */
|
|
dScnPly_env_otherHIO_c::dScnPly_env_otherHIO_c() {
|
|
field_0x05 = 1;
|
|
field_0x06 = 1;
|
|
field_0x40 = 0;
|
|
field_0x07 = 0;
|
|
field_0x08 = 0;
|
|
field_0x09 = 0;
|
|
field_0x44 = 4000.0f;
|
|
field_0x0a = 0;
|
|
field_0x0b = 0;
|
|
field_0x0c = 0;
|
|
field_0x0d = 128;
|
|
field_0x0e = 16;
|
|
field_0x0f = 0;
|
|
field_0x10 = 0;
|
|
field_0x11 = 0;
|
|
field_0x12 = 0;
|
|
field_0x15 = 0;
|
|
|
|
for (int i = 0; i < 20; i++) {
|
|
field_0x18[i] = 0xFFFF;
|
|
}
|
|
|
|
field_0x16 = 0;
|
|
}
|
|
|
|
/* 80234734-80234778 .text __ct__22dScnPly_env_debugHIO_cFv */
|
|
dScnPly_env_debugHIO_c::dScnPly_env_debugHIO_c() {
|
|
field_0x08 = -100.0f;
|
|
field_0x0c = -100.0f;
|
|
field_0x10 = -100.0f;
|
|
|
|
field_0x14 = 100.0f;
|
|
field_0x18 = 100.0f;
|
|
field_0x1c = 100.0f;
|
|
|
|
field_0x20 = 0.0f;
|
|
field_0x24 = 0.0f;
|
|
field_0x28 = 0.0f;
|
|
|
|
field_0x2c = 100.0f;
|
|
}
|
|
|
|
dScnPly_env_HIO_c g_envHIO;
|
|
|
|
/* 80234778-802347B4 .text __ct__17dScnPly_msg_HIO_cFv */
|
|
dScnPly_msg_HIO_c::dScnPly_msg_HIO_c() {
|
|
field_0x08 = 0;
|
|
mIsUpdate = false;
|
|
field_0x06 = 0;
|
|
field_0x07 = 0;
|
|
field_0x09 = 0;
|
|
mGroup = 0;
|
|
mID = 1;
|
|
field_0x10 = fpcM_ERROR_PROCESS_ID_e;
|
|
}
|
|
|
|
dScnPly_msg_HIO_c g_msgDHIO;
|
|
|
|
/* 802347B4-802347BC .text dScnPly_msg_HIO_checkUpdate__17dScnPly_msg_HIO_cFUc */
|
|
void dScnPly_msg_HIO_c::dScnPly_msg_HIO_checkUpdate(u8 i_update) {
|
|
mIsUpdate = i_update;
|
|
}
|
|
|
|
/* 802347BC-802347C4 .text dScnPly_msg_HIO_setUpdate__17dScnPly_msg_HIO_cFUc */
|
|
void dScnPly_msg_HIO_c::dScnPly_msg_HIO_setUpdate(u8 param_0) {
|
|
field_0x07 = param_0;
|
|
}
|
|
|
|
/* 802347C4-80234830 .text dScnPly_msg_HIO_numUpdate__17dScnPly_msg_HIO_cFss */
|
|
void dScnPly_msg_HIO_c::dScnPly_msg_HIO_numUpdate(s16 i_addGroup, s16 i_addID) {
|
|
mGroup += i_addGroup;
|
|
mID += i_addID;
|
|
|
|
if (mGroup > 99) {
|
|
mGroup = 99;
|
|
}
|
|
|
|
if (mGroup < 0) {
|
|
mGroup = 0;
|
|
}
|
|
|
|
if (mID > 0x7FFF) {
|
|
mID = 0x7FFF;
|
|
}
|
|
|
|
if (mID < 0) {
|
|
mID = 0;
|
|
}
|
|
}
|
|
|
|
/* 80234830-80234AA8 .text dScnPly_msg_HIO_padCheck__17dScnPly_msg_HIO_cFv */
|
|
void dScnPly_msg_HIO_c::dScnPly_msg_HIO_padCheck() {
|
|
if (mIsUpdate) {
|
|
if (CPad_CHECK_TRIG_Z(3)) {
|
|
dScnPly_msg_HIO_checkUpdate(0);
|
|
}
|
|
|
|
if (CPad_CHECK_TRIG_UP(3)) {
|
|
if (CPad_CHECK_HOLD_A(3)) {
|
|
dScnPly_msg_HIO_numUpdate(10, 0);
|
|
} else {
|
|
dScnPly_msg_HIO_numUpdate(1, 0);
|
|
}
|
|
} else if (CPad_CHECK_TRIG_DOWN(3)) {
|
|
if (CPad_CHECK_HOLD_A(3)) {
|
|
dScnPly_msg_HIO_numUpdate(-10, 0);
|
|
} else {
|
|
dScnPly_msg_HIO_numUpdate(-1, 0);
|
|
}
|
|
} else if (CPad_CHECK_TRIG_RIGHT(3)) {
|
|
if (CPad_CHECK_HOLD_Y(3)) {
|
|
dScnPly_msg_HIO_numUpdate(0, 1000);
|
|
} else if (CPad_CHECK_HOLD_X(3)) {
|
|
dScnPly_msg_HIO_numUpdate(0, 100);
|
|
} else if (CPad_CHECK_HOLD_A(3)) {
|
|
dScnPly_msg_HIO_numUpdate(0, 10);
|
|
} else {
|
|
dScnPly_msg_HIO_numUpdate(0, 1);
|
|
}
|
|
} else if (CPad_CHECK_TRIG_LEFT(3)) {
|
|
if (CPad_CHECK_HOLD_Y(3)) {
|
|
dScnPly_msg_HIO_numUpdate(0, -1000);
|
|
} else if (CPad_CHECK_HOLD_X(3)) {
|
|
dScnPly_msg_HIO_numUpdate(0, -100);
|
|
} else if (CPad_CHECK_HOLD_A(3)) {
|
|
dScnPly_msg_HIO_numUpdate(0, -10);
|
|
} else {
|
|
dScnPly_msg_HIO_numUpdate(0, -1);
|
|
}
|
|
} else if (CPad_CHECK_TRIG_B(3)) {
|
|
if (field_0x06 == 0) {
|
|
field_0x06 = 1;
|
|
}
|
|
} else if (field_0x07 != 0) {
|
|
if (field_0x06 == 0) {
|
|
field_0x06 = 1;
|
|
}
|
|
|
|
dScnPly_msg_HIO_setUpdate(0);
|
|
}
|
|
|
|
JUTReport(470, 250, "Group : %05d", mGroup);
|
|
JUTReport(470, 270, "ID : %05d", mID);
|
|
}
|
|
}
|
|
|
|
/* 80234AA8-80234B9C .text dScnPly_msg_HIO_messageProc__17dScnPly_msg_HIO_cFv */
|
|
void dScnPly_msg_HIO_c::dScnPly_msg_HIO_messageProc() {
|
|
dScnPly_msg_HIO_padCheck();
|
|
|
|
if (field_0x06) {
|
|
if (field_0x10 == fpcM_ERROR_PROCESS_ID_e) {
|
|
u32 msg_num = mGroup;
|
|
msg_num <<= 0x10;
|
|
msg_num |= mID;
|
|
cXyz sp10;
|
|
sp10.x = sp10.y = sp10.z = 0.0f;
|
|
|
|
if (mGroup != 99 && mGroup != 98 && mGroup != 89) {
|
|
msg_num = fopMsgM_searchMessageNumber(msg_num);
|
|
mGroup = (msg_num >> 0x10) & 0xFFFF;
|
|
mID = msg_num & 0xFFFF;
|
|
}
|
|
|
|
field_0x10 = fopMsgM_messageSet(msg_num, &sp10);
|
|
} else {
|
|
msg_class* msg_p = fopMsgM_SearchByID(field_0x10);
|
|
if (msg_p != NULL) {
|
|
if (msg_p->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
msg_p->mStatus = fopMsgStts_MSG_ENDS_e;
|
|
} else if (msg_p->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
msg_p->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
field_0x10 = fpcM_ERROR_PROCESS_ID_e;
|
|
field_0x06 = 0;
|
|
mID++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static OSTime dylPreLoadTime1;
|
|
static OSTime resPreLoadTime0;
|
|
static OSTime resPreLoadTime1;
|
|
|
|
static u8 number_of_resPhase[PRELOAD_RES_MAX];
|
|
static u8 number_of_dylPhase[PRELOAD_DYL_MAX];
|
|
static request_of_phase_process_class resPhase[PRELOAD_RES_MAX];
|
|
static request_of_phase_process_class dylPhase[PRELOAD_DYL_MAX];
|
|
|
|
static dScnPly_preLoad_HIO_c g_preLoadHIO;
|
|
|
|
/* 80234B9C-80234FD0 .text dScnPly_Draw__FP13dScnPly_ply_c */
|
|
static BOOL dScnPly_Draw(dScnPly_ply_c* i_this) {
|
|
dComIfG_Ccsp()->Move();
|
|
dComIfG_Bgsp()->ClrMoveFlag();
|
|
|
|
if (!fopOvlpM_IsPeek() && !dComIfG_resetToOpening(i_this) && fpcM_GetName(i_this) == PROC_PLAY_SCENE) {
|
|
if (dComIfGp_isEnableNextStage()) {
|
|
static s16 l_wipeType[] = {
|
|
PROC_OVERLAP0,
|
|
PROC_OVERLAP0,
|
|
PROC_OVERLAP2,
|
|
PROC_OVERLAP3,
|
|
PROC_OVERLAP4,
|
|
PROC_OVERLAP1,
|
|
PROC_OVERLAP6,
|
|
PROC_OVERLAP1,
|
|
PROC_OVERLAP7,
|
|
PROC_OVERLAP7,
|
|
PROC_OVERLAP8,
|
|
PROC_OVERLAP8,
|
|
};
|
|
|
|
JUT_ASSERT(VERSION_SELECT(997, 997, 1001, 1001),
|
|
dComIfGp_getNextStageWipe() < ARRAY_SIZE(l_wipeType));
|
|
|
|
if (strcmp(dComIfGp_getNextStageName(), "ENDING") == 0) {
|
|
fopScnM_ChangeReq(i_this, PROC_ENDING_SCENE, PROC_OVERLAP0, 5);
|
|
mDoAud_bgmStop(30);
|
|
} else {
|
|
fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, l_wipeType[dComIfGp_getNextStageWipe()], 5);
|
|
|
|
int hour = dKy_getdaytime_hour();
|
|
BOOL isNight = FALSE;
|
|
|
|
if (dKy_checkEventNightStop()) {
|
|
isNight = TRUE;
|
|
} else {
|
|
isNight = (hour >= 6 && hour < 18) ? FALSE : TRUE;
|
|
}
|
|
|
|
if (dComIfGp_getNextStageWipe() == 1 || dComIfGp_getNextStageWipe() == 2 || dComIfGp_getNextStageWipe() == 7 ||
|
|
((dComIfGp_getNextStageWipe() == 8 || dComIfGp_getNextStageWipe() == 10) && isNight) ||
|
|
((dComIfGp_getNextStageWipe() == 9 || dComIfGp_getNextStageWipe() == 11) && !isNight))
|
|
{
|
|
mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_saftyWhiteColor); // Fakematch?
|
|
} else {
|
|
mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_blackColor); // Fakematch?
|
|
}
|
|
|
|
mDoAud_setSceneName(dComIfGp_getNextStageName(), dComIfGp_getNextStageRoomNo(),
|
|
dComIfGp_getNextStageLayer());
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!dMenu_flag() && dScnPly_ply_c::pauseTimer == 0) {
|
|
dComIfGp_getVibration().Run();
|
|
dMat_control_c::icePlay();
|
|
dComIfGp_executeMagma();
|
|
|
|
if (dComIfGp_getGrass() != NULL || dComIfGp_getTree() != NULL ||
|
|
dComIfGp_getWood() != NULL || dComIfGp_getFlower() != NULL || dKyr_poison_live_check())
|
|
{
|
|
// using the inline breaks the match
|
|
// dComIfG_Ccsp()->PrepareMass();
|
|
g_dComIfG_gameInfo.play.mCcS.PrepareMass();
|
|
}
|
|
|
|
dComIfGp_executeGrass();
|
|
dComIfGp_executeTree();
|
|
dComIfGp_executeWood();
|
|
dComIfGp_executeFlower();
|
|
dKyr_poison_light_colision();
|
|
dComIfG_Bgsp()->Move();
|
|
dSnap_Execute();
|
|
|
|
if (daPy_getPlayerLinkActorClass() == NULL ||
|
|
!daPy_getPlayerLinkActorClass()->checkGameOverStart())
|
|
{
|
|
dComIfGp_particle_calc3D();
|
|
}
|
|
|
|
dComIfGp_particle_calc2D();
|
|
cCt_execCounter();
|
|
} else {
|
|
dComIfGp_getVibration().Pause();
|
|
}
|
|
|
|
dComIfG_Ccsp()->MassClear();
|
|
dComIfGp_particle_calcMenu();
|
|
g_msgDHIO.dScnPly_msg_HIO_messageProc();
|
|
dComIfGp_roomControl_checkDrawArea();
|
|
|
|
for (create_tag_class* i = fopDwIt_Begin(); i != NULL; i = fopDwIt_Next(i)) {
|
|
fpcM_Draw(i->mpTagData);
|
|
}
|
|
|
|
if (!dMenu_flag()) {
|
|
dComIfGp_particle_drawModelParticle();
|
|
dComIfGp_drawMagma();
|
|
dComIfGp_drawGrass();
|
|
dComIfGp_drawTree();
|
|
dComIfGp_drawWood();
|
|
dComIfGp_drawFlower();
|
|
dComIfG_Ccsp()->Draw();
|
|
dSnap_DebugDraw();
|
|
dComIfGp_getAttention().Draw();
|
|
dComIfGp_map_mapBufferSendAGB(3);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
const char* sea_resName[] = {
|
|
"Ship",
|
|
"Cloth",
|
|
"knob",
|
|
"Yslvg00",
|
|
"Kamome",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(sea_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const char* M_Dai_resName[] = {
|
|
"door12",
|
|
"System",
|
|
"Dalways",
|
|
"M_DOOR",
|
|
"Odokuro",
|
|
"Key",
|
|
"Mspot",
|
|
"Kbota_00",
|
|
"Tenmado",
|
|
"Osiblk",
|
|
"Mmirror",
|
|
"MkieK",
|
|
"Mkanoke",
|
|
"Vds",
|
|
"St",
|
|
"Msdan",
|
|
"MkieB",
|
|
"Mhsg",
|
|
"Club",
|
|
"ltubw",
|
|
"Rd",
|
|
"MpwrB",
|
|
"Fm",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_Dai_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 majroom_dylKeyTbl[] = {
|
|
PROC_DOOR10,
|
|
PROC_EP,
|
|
PROC_HIMO3,
|
|
PROC_KNOB00,
|
|
PROC_KYTAG02,
|
|
PROC_MO2,
|
|
PROC_NPC_NZ,
|
|
PROC_NZ,
|
|
PROC_NZG,
|
|
PROC_Obj_Barrel,
|
|
PROC_Obj_Mshokki,
|
|
PROC_OBJ_OTBLE,
|
|
PROC_Tag_Attention,
|
|
PROC_TAG_EVENT,
|
|
PROC_TAG_HINT,
|
|
PROC_TBOX,
|
|
PROC_TSUBO,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(majroom_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* majroom_resName[] = {
|
|
"Dalways",
|
|
"Ep",
|
|
"Ktaru_01",
|
|
"System",
|
|
"knob",
|
|
"Himo3",
|
|
"Mshokki",
|
|
"Okmono",
|
|
"Kantera",
|
|
"Mbdoor",
|
|
"Mo2",
|
|
"Spear",
|
|
"NZ",
|
|
"NZG",
|
|
"Npcnz",
|
|
"Atdoor",
|
|
"Ylesr00",
|
|
"Pt",
|
|
"Mozo",
|
|
"Ki",
|
|
"Kbota_00",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(majroom_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 ma2room_dylKeyTbl[] = {
|
|
PROC_AGBSW0,
|
|
PROC_BK,
|
|
PROC_DOOR10,
|
|
PROC_EP,
|
|
PROC_KNOB00,
|
|
PROC_MO2,
|
|
PROC_NZ,
|
|
PROC_NZG,
|
|
PROC_Obj_Mshokki,
|
|
PROC_OBJ_OTBLE,
|
|
PROC_Tag_Attention,
|
|
PROC_TAG_EVENT,
|
|
PROC_TBOX,
|
|
PROC_TSUBO,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(ma2room_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* ma2room_resName[] = {
|
|
"Dalways",
|
|
"Ep",
|
|
"System",
|
|
"knob",
|
|
"Ktaru_01",
|
|
"Okmono",
|
|
"Mo2",
|
|
"Mbdoor",
|
|
"Kantera",
|
|
"Mshokki",
|
|
"NZ",
|
|
"NZG",
|
|
"Shmrgrd",
|
|
"Spear",
|
|
"Nata",
|
|
"Bk",
|
|
"Atdoor",
|
|
"Fm",
|
|
"Kbota_00",
|
|
"Mozo",
|
|
"OQ",
|
|
"Pt",
|
|
"StpTetu",
|
|
"Ylesr00",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(ma2room_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 ma3room_dylKeyTbl[] = {
|
|
PROC_DOOR10,
|
|
PROC_EP,
|
|
PROC_KI,
|
|
PROC_KNOB00,
|
|
PROC_MO2,
|
|
PROC_NZ,
|
|
PROC_NZG,
|
|
PROC_Obj_Mshokki,
|
|
PROC_OBJ_OTBLE,
|
|
PROC_Tag_Attention,
|
|
PROC_TAG_EVENT,
|
|
PROC_TBOX,
|
|
PROC_TSUBO,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(ma3room_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* ma3room_resName[] = {
|
|
"Dalways",
|
|
"Ep",
|
|
"System",
|
|
"knob",
|
|
"Ki",
|
|
"Ktaru_01",
|
|
"Okmono",
|
|
"Mbdoor",
|
|
"Mshokki",
|
|
"NZ",
|
|
"NZG",
|
|
"Npcnz",
|
|
"Atdoor",
|
|
"Kbota_00",
|
|
"Mozo",
|
|
"StpTetu",
|
|
"Ylesr00",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(ma3room_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 M_NewD2_dylKeyTbl[] = {
|
|
PROC_TBOX,
|
|
PROC_TAG_EVENT,
|
|
PROC_DOOR10,
|
|
PROC_AGBSW0,
|
|
PROC_Ykgr,
|
|
PROC_TSUBO,
|
|
PROC_BK,
|
|
PROC_SteamTag,
|
|
PROC_MT,
|
|
PROC_CC,
|
|
PROC_NPC_NZ,
|
|
PROC_Fire,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_NewD2_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* M_NewD2_resName[] = {
|
|
"System",
|
|
"Link",
|
|
"Key",
|
|
"Dalways",
|
|
"Always",
|
|
"Agb",
|
|
"Ep",
|
|
"Magma",
|
|
"Boko",
|
|
"KsakuCo",
|
|
"Bk",
|
|
"YFire_00",
|
|
"Kmtub_00",
|
|
"Kui",
|
|
"Knsak_00",
|
|
"Ki",
|
|
"ltubw",
|
|
"Osiblk",
|
|
"Nata",
|
|
"Mt",
|
|
"Ksaku_00",
|
|
"Ebrock",
|
|
"CC",
|
|
"Bridge",
|
|
"Odokuro",
|
|
"Msw",
|
|
"Kbota_00",
|
|
"Otana",
|
|
"Okmono",
|
|
"Npcnz",
|
|
"NZG",
|
|
"NZ",
|
|
"MtoriSU",
|
|
"Mflft",
|
|
"Bb",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_NewD2_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 kindan_dylKeyTbl[] = {
|
|
PROC_TBOX,
|
|
PROC_TAG_EVENT,
|
|
PROC_SWC00,
|
|
PROC_DOOR10,
|
|
PROC_AGBSW0,
|
|
PROC_Tag_Attention,
|
|
PROC_TSUBO,
|
|
PROC_CC,
|
|
PROC_PH,
|
|
PROC_KLFT,
|
|
PROC_SITEM,
|
|
PROC_KITA,
|
|
PROC_Obj_Mtest,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(kindan_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* kindan_resName[] = {
|
|
"System",
|
|
"Ssk",
|
|
"Link",
|
|
"Key",
|
|
"Dalways",
|
|
"Always",
|
|
"Agb",
|
|
"Sitem",
|
|
"Ss",
|
|
"CC",
|
|
"Vochi",
|
|
"PH",
|
|
"JBO",
|
|
"Ep",
|
|
"Klft",
|
|
"KS",
|
|
"BO",
|
|
"ltubw",
|
|
"Kui",
|
|
"KsakuCo",
|
|
"Sss",
|
|
"Sk2",
|
|
"Sk",
|
|
"Shand",
|
|
"Knsak_00",
|
|
"Yaflw00",
|
|
"Vpbot_00",
|
|
"Spear",
|
|
"Mtest",
|
|
"Ksaku_00",
|
|
"Kokiie",
|
|
"Kita",
|
|
"Kanat",
|
|
"Boko",
|
|
"Mdoor",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(kindan_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 M_Dai_dylKeyTbl[] = {
|
|
PROC_ALLDIE,
|
|
PROC_Obj_Msdan2,
|
|
PROC_Obj_Msdan,
|
|
PROC_Obj_MsdanSub2,
|
|
PROC_Obj_MsdanSub,
|
|
PROC_SW_ATTACK,
|
|
PROC_Obj_Correct,
|
|
PROC_Obj_Mkiek,
|
|
PROC_Obj_Vds,
|
|
PROC_Obj_Ladder,
|
|
PROC_DOOR12,
|
|
PROC_Obj_MknjD,
|
|
PROC_Obj_Swhammer,
|
|
PROC_Obj_Swlight,
|
|
PROC_Obj_Mkie,
|
|
PROC_KANTERA,
|
|
PROC_Obj_Mmrr,
|
|
PROC_Obj_Kanoke,
|
|
PROC_BOKO,
|
|
PROC_BL,
|
|
PROC_PW,
|
|
PROC_CC,
|
|
PROC_Obj_Tapestry,
|
|
PROC_ST,
|
|
PROC_FM,
|
|
PROC_MO2,
|
|
PROC_TN,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_Dai_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const s16 sea_dylKeyTbl[] = {
|
|
PROC_TAG_SO,
|
|
PROC_Salvage,
|
|
PROC_Obj_Coming,
|
|
PROC_LODBG,
|
|
PROC_Coming2,
|
|
PROC_SHIP,
|
|
PROC_NPC_SO,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(sea_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const s16 kaze_dylKeyTbl[] = {
|
|
PROC_GRASS,
|
|
PROC_PH,
|
|
PROC_FM,
|
|
PROC_TAG_MDCB,
|
|
PROC_Obj_Hfuck1,
|
|
PROC_Obj_Eff,
|
|
PROC_WindTag,
|
|
PROC_Obj_Homen,
|
|
PROC_TSUBO,
|
|
PROC_EP,
|
|
PROC_Obj_Jump,
|
|
PROC_Obj_Hami3,
|
|
PROC_WINDMILL,
|
|
PROC_Obj_Hbrf1,
|
|
PROC_Obj_Hami4,
|
|
PROC_Obj_Hami2,
|
|
PROC_MACHINE,
|
|
PROC_Obj_Vmc,
|
|
PROC_Obj_MknjD,
|
|
PROC_NPC_CB1,
|
|
PROC_Obj_Trap,
|
|
PROC_SW_PROPELLER,
|
|
PROC_TOGE,
|
|
PROC_SHUTTER2,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(kaze_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* kaze_resName[] = {
|
|
"Dalways",
|
|
"Key",
|
|
"door13",
|
|
"Am",
|
|
"Am2",
|
|
"Ep",
|
|
"Hami1",
|
|
"Hami2",
|
|
"Hami3",
|
|
"Hami4",
|
|
"Hfuck1",
|
|
"Hhbot",
|
|
"Hhyu1",
|
|
"Hjump",
|
|
"Hpbot1",
|
|
"Hsen1",
|
|
"Hsen3",
|
|
"Kbota_00",
|
|
"Ybgaf00",
|
|
"Ph",
|
|
"Sss",
|
|
"Trap",
|
|
"Vmc",
|
|
"Yaflw00",
|
|
"ltubw",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(kaze_resName) <= PRELOAD_RES_MAX);
|
|
|
|
s16 Siren_dylKeyTbl[] = {
|
|
PROC_Obj_Hha,
|
|
PROC_Obj_Htetu1,
|
|
PROC_NPC_OS,
|
|
PROC_LIGHTSTAIR,
|
|
PROC_WALL,
|
|
PROC_Obj_Try,
|
|
PROC_Obj_Correct,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(Siren_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* Siren_resName[] = {
|
|
"Dalways",
|
|
"Ship",
|
|
"Cloth",
|
|
"Key",
|
|
"Hha",
|
|
"Htetu1",
|
|
"Os",
|
|
"Htw1",
|
|
"Hcbh",
|
|
"Hdai1",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(Siren_resName) <= PRELOAD_RES_MAX);
|
|
|
|
s16 GanonJ_dylKeyTbl[] = {
|
|
PROC_TBOX,
|
|
PROC_DOOR10,
|
|
PROC_MANT,
|
|
PROC_FGANON,
|
|
PROC_TSUBO,
|
|
PROC_MO2,
|
|
PROC_BK,
|
|
PROC_TN,
|
|
PROC_PT,
|
|
PROC_Obj_Hcbh,
|
|
PROC_ANDSW0,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(GanonJ_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* GanonJ_resName[] = {
|
|
"System",
|
|
"Link",
|
|
"Dalways",
|
|
"Always",
|
|
"Agb",
|
|
"Fganon",
|
|
"Spear",
|
|
"Nata",
|
|
"Mo2",
|
|
"Bk",
|
|
"Tn",
|
|
"Tkwn",
|
|
"Odokuro",
|
|
"Boko",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(GanonJ_resName) <= PRELOAD_RES_MAX);
|
|
|
|
s16 GanonK_dylKeyTbl[] = {
|
|
PROC_TSUBO,
|
|
PROC_Obj_Vteng,
|
|
PROC_KUI,
|
|
PROC_KS,
|
|
PROC_EP,
|
|
PROC_BGN,
|
|
PROC_TAG_EVENT,
|
|
PROC_Tag_Attention,
|
|
PROC_PZ,
|
|
PROC_Obj_Gbed,
|
|
PROC_BGN3,
|
|
PROC_BGN2,
|
|
PROC_ATT,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(GanonK_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* GanonK_resName[] = {
|
|
"Agb",
|
|
"Always",
|
|
"Ep",
|
|
"KS",
|
|
"Kui",
|
|
"Link",
|
|
"System",
|
|
"ltubw",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(GanonK_resName) <= PRELOAD_RES_MAX);
|
|
|
|
s16 GanonM_dylKeyTbl[] = {
|
|
PROC_FGANON,
|
|
PROC_MANT,
|
|
PROC_Ygcwp,
|
|
PROC_Obj_Vfan,
|
|
PROC_WARPGANON,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(GanonM_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* GanonM_resName[] = {
|
|
"Fganon",
|
|
"Pgsw",
|
|
"Vfan",
|
|
"Ygcwp",
|
|
"Gmjwp",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(GanonM_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 M_DragB_dylKeyTbl[] = {
|
|
PROC_WARPFLOWER,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_DragB_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* M_DragB_resName[] = {
|
|
NULL,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_DragB_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 kinBOSS_dylKeyTbl[] = {
|
|
PROC_NPC_CB1,
|
|
PROC_WARPFLOWER,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(kinBOSS_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* kinBOSS_resName[] = {
|
|
"Cb",
|
|
"Gtfglow",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(kinBOSS_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 M_DaiB_dylKeyTbl[] = {
|
|
PROC_WARPFLOWER,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_DaiB_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* M_DaiB_resName[] = {
|
|
"Gtfglow",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(M_DaiB_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const s16 SirenB_dylKeyTbl[] = {
|
|
PROC_WARPFLOWER,
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(SirenB_dylKeyTbl) <= PRELOAD_DYL_MAX);
|
|
|
|
const char* SirenB_resName[] = {
|
|
"Ysbwp00",
|
|
};
|
|
STATIC_ASSERT(ARRAY_SIZE(SirenB_resName) <= PRELOAD_RES_MAX);
|
|
|
|
const PreLoadInfoT_s PreLoadInfoT[] = {
|
|
{
|
|
"sea",
|
|
sea_dylKeyTbl,
|
|
sea_resName,
|
|
ARRAY_SIZE(sea_dylKeyTbl),
|
|
ARRAY_SIZE(sea_resName),
|
|
},
|
|
{
|
|
"M_Dai",
|
|
M_Dai_dylKeyTbl,
|
|
M_Dai_resName,
|
|
ARRAY_SIZE(M_Dai_dylKeyTbl),
|
|
ARRAY_SIZE(M_Dai_resName),
|
|
},
|
|
{
|
|
"kaze",
|
|
kaze_dylKeyTbl,
|
|
kaze_resName,
|
|
ARRAY_SIZE(kaze_dylKeyTbl),
|
|
ARRAY_SIZE(kaze_resName),
|
|
},
|
|
{
|
|
"Siren",
|
|
Siren_dylKeyTbl,
|
|
Siren_resName,
|
|
ARRAY_SIZE(Siren_dylKeyTbl),
|
|
ARRAY_SIZE(Siren_resName),
|
|
},
|
|
{
|
|
"M_DragB",
|
|
M_DragB_dylKeyTbl,
|
|
M_DragB_resName,
|
|
ARRAY_SIZE(M_DragB_dylKeyTbl),
|
|
ARRAY_SIZE(M_DragB_resName),
|
|
},
|
|
{
|
|
"kinBOSS",
|
|
kinBOSS_dylKeyTbl,
|
|
kinBOSS_resName,
|
|
ARRAY_SIZE(kinBOSS_dylKeyTbl),
|
|
ARRAY_SIZE(kinBOSS_resName),
|
|
},
|
|
{
|
|
"SirenB",
|
|
SirenB_dylKeyTbl,
|
|
SirenB_resName,
|
|
ARRAY_SIZE(SirenB_dylKeyTbl),
|
|
ARRAY_SIZE(SirenB_resName),
|
|
},
|
|
{
|
|
"M_DaiB",
|
|
M_DaiB_dylKeyTbl,
|
|
M_DaiB_resName,
|
|
ARRAY_SIZE(M_DaiB_dylKeyTbl),
|
|
ARRAY_SIZE(M_DaiB_resName),
|
|
},
|
|
{
|
|
"majroom",
|
|
majroom_dylKeyTbl,
|
|
majroom_resName,
|
|
ARRAY_SIZE(majroom_dylKeyTbl),
|
|
ARRAY_SIZE(majroom_resName),
|
|
},
|
|
{
|
|
"ma2room",
|
|
ma2room_dylKeyTbl,
|
|
ma2room_resName,
|
|
ARRAY_SIZE(ma2room_dylKeyTbl),
|
|
ARRAY_SIZE(ma2room_resName),
|
|
},
|
|
{
|
|
"ma3room",
|
|
ma3room_dylKeyTbl,
|
|
ma3room_resName,
|
|
ARRAY_SIZE(ma3room_dylKeyTbl),
|
|
ARRAY_SIZE(ma3room_resName),
|
|
},
|
|
{
|
|
"M_NewD2",
|
|
M_NewD2_dylKeyTbl,
|
|
M_NewD2_resName,
|
|
ARRAY_SIZE(M_NewD2_dylKeyTbl),
|
|
ARRAY_SIZE(M_NewD2_resName),
|
|
},
|
|
{
|
|
"kindan",
|
|
kindan_dylKeyTbl,
|
|
kindan_resName,
|
|
ARRAY_SIZE(kindan_dylKeyTbl),
|
|
ARRAY_SIZE(kindan_resName),
|
|
},
|
|
{
|
|
"GanonJ",
|
|
GanonJ_dylKeyTbl,
|
|
GanonJ_resName,
|
|
ARRAY_SIZE(GanonJ_dylKeyTbl),
|
|
ARRAY_SIZE(GanonJ_resName),
|
|
},
|
|
{
|
|
"GanonK",
|
|
GanonK_dylKeyTbl,
|
|
GanonK_resName,
|
|
ARRAY_SIZE(GanonK_dylKeyTbl),
|
|
ARRAY_SIZE(GanonK_resName),
|
|
},
|
|
{
|
|
"GanonM",
|
|
GanonM_dylKeyTbl,
|
|
GanonM_resName,
|
|
ARRAY_SIZE(GanonM_dylKeyTbl),
|
|
ARRAY_SIZE(GanonM_resName),
|
|
},
|
|
};
|
|
|
|
/* 80234FD0-802350B4 .text dScnPly_Execute__FP13dScnPly_ply_c */
|
|
static BOOL dScnPly_Execute(dScnPly_ply_c* i_this) {
|
|
if (!fopOvlpM_IsPeek()) {
|
|
if (mDoAud_zelAudio_c::isBgmSet()) {
|
|
mDoAud_sceneBgmStart();
|
|
mDoAud_load2ndDynamicWave();
|
|
mDoAud_zelAudio_c::offBgmSet();
|
|
}
|
|
|
|
if (i_this->calcPauseTimer() != 0) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
dKy_itudemo_se();
|
|
if (!dMenu_flag()) {
|
|
dComIfGp_demo_update();
|
|
// dComIfGp_jcame_update(); // Debug only
|
|
// dComIfGp_jprev_update(); // Debug only
|
|
dComIfGp_evmng_execute();
|
|
|
|
if (dComIfGp_getAttention().Owner() != NULL) {
|
|
dComIfGp_getAttention().Run(-1);
|
|
} else {
|
|
dComIfGp_getAttention().Init(dComIfGp_getPlayer(0), 0);
|
|
}
|
|
|
|
dComIfGp_getDetect().proc();
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 802350B4-802350BC .text dScnPly_IsDelete__FP13dScnPly_ply_c */
|
|
static BOOL dScnPly_IsDelete(dScnPly_ply_c* i_this) {
|
|
return TRUE;
|
|
}
|
|
|
|
static s8 preLoadNo = 0xFF;
|
|
static bool doPreLoad = true;
|
|
|
|
/* 802350BC-80235364 .text dScnPly_Delete__FP13dScnPly_ply_c */
|
|
static BOOL dScnPly_Delete(dScnPly_ply_c* i_this) {
|
|
dComIfGp_getAttention().~dAttention_c();
|
|
dComIfGp_getVibration().dVibration_c::~dVibration_c();
|
|
dComIfG_Bgsp()->Dt();
|
|
dComIfG_Ccsp()->Dt();
|
|
dSnap_Delete();
|
|
dStage_Delete();
|
|
|
|
dComIfGp_event_remove();
|
|
dComIfGp_particle_removeScene();
|
|
// dComIfGp_removeJcame(); // Debug only
|
|
// dComIfGp_removeJprev(); // Debug only
|
|
dComIfGp_removeDemo();
|
|
dMat_control_c::remove();
|
|
|
|
fopMsgM_destroyExpHeap(dComIfGp_getExpHeap2D());
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "Xboss0") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "Xboss1") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "Xboss2") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "Xboss3") == 0
|
|
) {
|
|
dComIfGs_revPlayerRecollectionData();
|
|
}
|
|
|
|
dComIfGp_removeMagma();
|
|
dComIfGp_removeGrass();
|
|
dComIfGp_removeTree();
|
|
dComIfGp_removeWood();
|
|
dComIfGp_removeFlower();
|
|
|
|
dComIfGp_clearItemTimeCount();
|
|
|
|
g_msgDHIO.field_0x06 = 0;
|
|
g_msgDHIO.field_0x10 = -1;
|
|
mDoHIO_deleteChild(g_darkHIO.mNo);
|
|
mDoHIO_deleteChild(g_envHIO.mNo);
|
|
mDoHIO_deleteChild(g_msgDHIO.mNo);
|
|
|
|
dComIfGp_setWindowNum(0);
|
|
|
|
if (preLoadNo >= 0) {
|
|
const char** resName = PreLoadInfoT[preLoadNo].resName;
|
|
s32 resNameNum = PreLoadInfoT[preLoadNo].resNameNum;
|
|
if (resName != NULL && resName[0] != NULL) {
|
|
for (int i = 0; i < resNameNum; i++) {
|
|
dComIfG_resDelete(&resPhase[i], resName[i]);
|
|
}
|
|
}
|
|
|
|
const s16* dylKeyTbl = PreLoadInfoT[preLoadNo].dylKeyTbl;
|
|
s32 dylKeyTblNum = PreLoadInfoT[preLoadNo].dylKeyTblNum;
|
|
if (dylKeyTbl != NULL && dylKeyTbl[0] != NULL) {
|
|
for (int i = 0; i < dylKeyTblNum; i++) {
|
|
cDylPhs::Unlink(&dylPhase[i], dylKeyTbl[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
dComIfGp_init();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80235364-802355A8 .text heapSizeCheck__Fv */
|
|
BOOL heapSizeCheck() {
|
|
int archive_free = mDoExt_getArchiveHeap()->getFreeSize();
|
|
int archive_total_free = mDoExt_getArchiveHeap()->getTotalFreeSize();
|
|
f32 temp_f31 = (f32)archive_total_free / (f32)mDoExt_getSafeArchiveHeapSize();
|
|
f32 temp_f30 = (f32)archive_free / (f32)archive_total_free;
|
|
|
|
int game_free = mDoExt_getGameHeap()->getFreeSize();
|
|
int game_total_free = mDoExt_getGameHeap()->getTotalFreeSize();
|
|
f32 temp_f29 = (f32)game_total_free / (f32)mDoExt_getSafeGameHeapSize();
|
|
f32 temp_f28 = (f32)game_free / (f32)game_total_free;
|
|
|
|
mDoExt_getZeldaHeap()->getFreeSize();
|
|
#if VERSION <= VERSION_JPN
|
|
int zelda_total_free = mDoExt_getZeldaHeap()->getFreeSize();
|
|
#else
|
|
int zelda_total_free = mDoExt_getZeldaHeap()->getTotalFreeSize();
|
|
#endif
|
|
f32 temp_f27 = (f32)zelda_total_free / (f32)mDoExt_getSafeZeldaHeapSize();
|
|
|
|
mDoExt_getCommandHeap()->getFreeSize();
|
|
#if VERSION <= VERSION_JPN
|
|
int command_total_free = mDoExt_getCommandHeap()->getFreeSize();
|
|
#else
|
|
int command_total_free = mDoExt_getCommandHeap()->getTotalFreeSize();
|
|
#endif
|
|
f32 temp_f1 = (f32)command_total_free / (f32)mDoExt_getSafeCommandHeapSize();
|
|
|
|
if (temp_f31 < 0.7f || temp_f30 < 0.7f || temp_f29 < 0.7f || temp_f28 < 0.7f ||
|
|
temp_f27 < 0.7f || temp_f1 < 0.7f)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 802355A8-802356B0 .text phase_00__FP13dScnPly_ply_c */
|
|
cPhs_State phase_00(dScnPly_ply_c* i_this) {
|
|
if (mDoAud_isUsedHeapForStreamBuffer()) {
|
|
return cPhs_INIT_e;
|
|
}
|
|
|
|
mDoGph_gInf_c::offBlure();
|
|
|
|
if (fpcM_GetName(i_this) != PROC_PLAY_SCENE) {
|
|
if (!heapSizeCheck()) {
|
|
mDoRst_reset(0, 0x80000000, 0);
|
|
}
|
|
|
|
if (mDoRst::isReset()) {
|
|
if (mDoAud_zelAudio_c::isResetFlag()) {
|
|
mDoAud_zelAudio_c::getInterface()->resetRecover();
|
|
mDoAud_zelAudio_c::offResetFlag();
|
|
}
|
|
|
|
mDoGph_gInf_c::offFade();
|
|
mDoGph_gInf_c::offMonotone();
|
|
dDlst_list_c::offWipe();
|
|
daTitle_proc_c::daTitle_Kirakira_Sound_flag_on();
|
|
daObjTribox::Act_c::reset();
|
|
dComIfGp_offEnableNextStage();
|
|
}
|
|
|
|
dComIfGs_init();
|
|
} else {
|
|
if (!heapSizeCheck()) {
|
|
JUT_WARN(VERSION_SELECT(3356, 3356, 3372, 3372), "%s", "Memory Danger !!");
|
|
}
|
|
}
|
|
|
|
return cPhs_NEXT_e;
|
|
}
|
|
|
|
/* 802356B0-802356E0 .text phase_01__FP13dScnPly_ply_c */
|
|
cPhs_State phase_01(dScnPly_ply_c* i_this) {
|
|
if (!mDoAud_load1stDynamicWave()) {
|
|
return cPhs_INIT_e;
|
|
} else {
|
|
return cPhs_NEXT_e;
|
|
}
|
|
}
|
|
|
|
static mDoDvdThd_mountXArchive_c* l_lkDemoAnmCommand;
|
|
|
|
/* 802356E0-802357F4 .text phase_0__FP13dScnPly_ply_c */
|
|
cPhs_State phase_0(dScnPly_ply_c* i_this) {
|
|
if (mDoAud_checkAllWaveLoadStatus()) {
|
|
return cPhs_INIT_e;
|
|
} else {
|
|
l_lkDemoAnmCommand = NULL;
|
|
|
|
s32 darcIdx = dComIfGs_isEventBit(0x2D01) ? 1 : 0;
|
|
if (darcIdx != dComIfGp_getLkDemoAnmNo()) {
|
|
if (dComIfGp_getLkDemoAnmNo() >= 0) {
|
|
dComIfGp_getLkDemoAnmArchive()->unmount();
|
|
}
|
|
dComIfGp_setLkDemoAnmNo(darcIdx);
|
|
|
|
char buf[32];
|
|
sprintf(buf, "/res/Object/LkD%02d.arc", dComIfGp_getLkDemoAnmNo());
|
|
l_lkDemoAnmCommand = mDoDvdThd_mountXArchive_c::create(buf, 0, JKRArchive::MOUNT_ARAM);
|
|
JUT_ASSERT(VERSION_SELECT(3399, 3399, 3414, 3414), l_lkDemoAnmCommand != NULL);
|
|
}
|
|
|
|
return cPhs_NEXT_e;
|
|
}
|
|
}
|
|
|
|
/* 802357F4-802359DC .text phase_1__FP13dScnPly_ply_c */
|
|
cPhs_State phase_1(dScnPly_ply_c* i_this) {
|
|
if (l_lkDemoAnmCommand != NULL) {
|
|
if (!l_lkDemoAnmCommand->sync()) {
|
|
return cPhs_INIT_e;
|
|
}
|
|
|
|
JUT_ASSERT(VERSION_SELECT(3424, 3424, 3439, 3439), l_lkDemoAnmCommand->getArchive());
|
|
dComIfGp_setLkDemoAnmArchive(l_lkDemoAnmCommand->getArchive());
|
|
|
|
delete l_lkDemoAnmCommand;
|
|
}
|
|
|
|
fpc_ProcID id = fopScnM_GetID(i_this);
|
|
dStage_roomControl_c::setProcID(id);
|
|
|
|
dComIfGp_setStartStage(dComIfGp_getNextStartStage());
|
|
dComIfGp_offEnableNextStage();
|
|
|
|
JUTReportConsole_f("Start StageName:RoomNo [%s:%d]\n", dComIfGp_getStartStageName(),
|
|
dComIfGp_getStartStageRoomNo());
|
|
dComIfGp_setStatus(0);
|
|
|
|
int rt = dComIfG_setStageRes("Stage", NULL);
|
|
JUT_ASSERT(VERSION_SELECT(3443, 3443, 3458, 3458), rt == 1);
|
|
|
|
dMat_control_c::create((J3DMaterialTable*)dComIfG_getObjectRes("Always", ALWAYS_BMT_ICE),
|
|
(J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", ALWAYS_BTK_ICE));
|
|
|
|
return cPhs_NEXT_e;
|
|
}
|
|
|
|
/* 802359DC-80235ABC .text phase_2__FP13dScnPly_ply_c */
|
|
cPhs_State phase_2(dScnPly_ply_c* i_this) {
|
|
int rt = dComIfG_syncStageRes("Stage");
|
|
JUT_ASSERT(VERSION_SELECT(3470, 3470, 3485, 3485), rt >= 0)
|
|
|
|
if (rt != 0) {
|
|
return cPhs_INIT_e;
|
|
} else {
|
|
dStage_infoCreate();
|
|
u8 particle_no = dStage_stagInfo_GetParticleNo(dComIfGp_getStageStagInfo());
|
|
dComIfGp_particle_readScene(particle_no, &i_this->sceneCommand);
|
|
return cPhs_NEXT_e;
|
|
}
|
|
}
|
|
|
|
/* 80235ABC-80235B0C .text phase_3__FP13dScnPly_ply_c */
|
|
cPhs_State phase_3(dScnPly_ply_c* i_this) {
|
|
if ((i_this->sceneCommand != NULL && !i_this->sceneCommand->sync()) ||
|
|
mDoAud_zelAudio_c::getInterface()->check1stDynamicWave())
|
|
{
|
|
return cPhs_INIT_e;
|
|
}
|
|
|
|
return cPhs_NEXT_e;
|
|
}
|
|
|
|
/* 80235B0C-80236334 .text phase_4__FP13dScnPly_ply_c */
|
|
cPhs_State phase_4(dScnPly_ply_c* i_this) {
|
|
if (i_this->sceneCommand != NULL) {
|
|
JUT_ASSERT(VERSION_SELECT(3552, 3552, 3567, 3567), i_this->sceneCommand->getMemAddress() != NULL);
|
|
dComIfGp_particle_createScene(i_this->sceneCommand->getMemAddress());
|
|
delete i_this->sceneCommand;
|
|
} else {
|
|
dComIfGp_particle_createScene(NULL);
|
|
}
|
|
|
|
// dComIfG_initStopwatch(); // Debug only
|
|
dComIfG_Bgsp()->Ct();
|
|
dComIfG_Ccsp()->Ct();
|
|
dComIfGp_createDemo();
|
|
daSea_Init();
|
|
dSnap_Create();
|
|
// dComIfGp_createJcame(); // Debug only
|
|
// dComIfGp_createJprev(); // Debug only
|
|
dComIfGp_setPlayerInfo(0, NULL, 0);
|
|
for (s32 i = 0; i < 3; i++)
|
|
dComIfGp_setPlayerPtr(i, NULL);
|
|
dComIfGp_setWindowNum(1);
|
|
dComIfGp_setWindow(0, 0.0f, 0.0f, mDoMch_render_c::getFbWidth(), mDoMch_render_c::getEfbHeight(), 0.0f, 1.0f, 0, 2);
|
|
dComIfGp_setCameraInfo(0, NULL, 0, 0, -1);
|
|
dComIfGd_setWindow(NULL);
|
|
dComIfGd_setViewport(NULL);
|
|
dComIfGd_setView(NULL);
|
|
|
|
JKRExpHeap* heap = fopMsgM_createExpHeap(VERSION_SELECT(0x736A1, 0x736A1, 0x73EA1, 0x73EA1));
|
|
JUT_ASSERT(VERSION_SELECT(3633, 3633, 3653, 3653), heap != NULL);
|
|
dComIfGp_setExpHeap2D(heap);
|
|
|
|
dStage_Create();
|
|
mDoGph_gInf_c::setTickRate((OS_BUS_CLOCK / 4) / 30);
|
|
|
|
g_darkHIO.mNo = mDoHIO_createChild("暗闇スポット", &g_darkHIO); // "Darkness Spot"
|
|
g_envHIO.mNo = mDoHIO_createChild("描画設定", &g_envHIO); // "Draw Settings"
|
|
g_msgDHIO.mNo = mDoHIO_createChild("Message Data", &g_msgDHIO);
|
|
|
|
new(&dComIfGp_getAttention()) dAttention_c(dComIfGp_getPlayer(0), NULL);
|
|
dComIfGp_getVibration().Init();
|
|
daSteamTag_c::init();
|
|
daYkgr_c::init();
|
|
daSalvage_c::init();
|
|
daDai_c::init();
|
|
daNpc_Kg2_c::init();
|
|
daIball_c::init();
|
|
dComIfG_setBrightness(0xFF);
|
|
mDoGph_gInf_c::offFade();
|
|
|
|
stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo();
|
|
if (stag_info != NULL && dStage_stagInfo_GetSTType(stag_info) == dStageType_FF1_e && dComIfGs_isEventBit(0x0801)) {
|
|
dComIfGs_setSelectEquip(0, dItem_NONE_e);
|
|
dComIfGp_setSelectEquip(0, dItem_NONE_e);
|
|
dComIfGs_offCollect(0, 0);
|
|
}
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "GTower") == 0) {
|
|
dComIfGs_setItem(dInvSlot_BOW_e, dItem_NONE_e); // take away the bow
|
|
for (int itemBtn = 0; itemBtn < dItemBtn_COUNT_e; itemBtn++) {
|
|
u32 itemno = dComIfGp_getSelectItem(itemBtn);
|
|
if (itemno == dItem_BOW_e || itemno == dItem_MAGIC_ARROW_e || itemno == dItem_LIGHT_ARROW_e) {
|
|
dComIfGs_setSelectItem(itemBtn, dInvSlot_NONE_e);
|
|
dComIfGp_setSelectItem(itemBtn);
|
|
}
|
|
}
|
|
} else if (dComIfGs_getItem(dInvSlot_BOW_e) == dItem_NONE_e) {
|
|
// give the bow back
|
|
if (dComIfGs_isGetItem(dInvSlot_BOW_e, 2))
|
|
dComIfGs_setItem(dInvSlot_BOW_e, dItem_LIGHT_ARROW_e);
|
|
else if (dComIfGs_isGetItem(dInvSlot_BOW_e, 1))
|
|
dComIfGs_setItem(dInvSlot_BOW_e, dItem_MAGIC_ARROW_e);
|
|
else if (dComIfGs_isGetItem(dInvSlot_BOW_e, 0))
|
|
dComIfGs_setItem(dInvSlot_BOW_e, dItem_BOW_e);
|
|
}
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "Xboss0") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "Xboss1") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "Xboss2") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "Xboss3") == 0
|
|
) {
|
|
dComIfGs_setPlayerRecollectionData();
|
|
}
|
|
|
|
mDoAud_monsSeInit();
|
|
|
|
if (fpcM_GetName(i_this) == PROC_PLAY_SCENE) {
|
|
mDoAud_zelAudio_c::onBgmSet();
|
|
} else {
|
|
mDoAud_zelAudio_c::offBgmSet();
|
|
}
|
|
|
|
dScnPly_ply_c::pauseTimer = 0;
|
|
dScnPly_ply_c::nextPauseTimer = 0;
|
|
|
|
if (((strcmp(dComIfGp_getStartStageName(), "Hyrule") == 0 || strcmp(dComIfGp_getStartStageName(), "Hyroom") == 0 || strcmp(dComIfGp_getStartStageName(), "kenroom") == 0) && !dComIfGs_isEventBit(0x3802)) || dComIfGp_getStartStageName()[0] == 'X') {
|
|
mDoGph_gInf_c::onMonotone();
|
|
|
|
bool hy8 = strcmp(dComIfGp_getStartStageName(), "Hyrule") == 0 && dComIfGp_getStartStageLayer() == 8;
|
|
s16 rate = hy8 ? -600 : 400;
|
|
mDoGph_gInf_c::setMonotoneRate(rate);
|
|
mDoGph_gInf_c::setMonotoneRateSpeed(0);
|
|
} else {
|
|
mDoGph_gInf_c::offMonotone();
|
|
}
|
|
|
|
preLoadNo = -1;
|
|
if (doPreLoad) {
|
|
for (int i = 0; i < ARRAY_SIZE(PreLoadInfoT); i++) {
|
|
if (strcmp(dComIfGp_getStartStageName(), PreLoadInfoT[i].stageName) == 0) {
|
|
preLoadNo = i;
|
|
}
|
|
}
|
|
}
|
|
|
|
mDoRst::offReset();
|
|
OSTime time = resPreLoadTime0;
|
|
JUTGamePad::clearResetOccurred();
|
|
JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL);
|
|
|
|
cPhs_State rt;
|
|
if (preLoadNo < 0)
|
|
return cPhs_COMPLEATE_e;
|
|
|
|
time = OSGetTime();
|
|
rt = cPhs_NEXT_e;
|
|
resPreLoadTime0 = time;
|
|
|
|
return rt;
|
|
}
|
|
|
|
/* 80236334-80236444 .text phase_5__FP13dScnPly_ply_c */
|
|
cPhs_State phase_5(dScnPly_ply_c* i_this) {
|
|
if (preLoadNo >= 0) {
|
|
cPhs_State rt = cPhs_NEXT_e;
|
|
const char** resName = PreLoadInfoT[preLoadNo].resName;
|
|
s32 resNameNum = PreLoadInfoT[preLoadNo].resNameNum;
|
|
if (resName != NULL && resName[0] != NULL) {
|
|
JUT_ASSERT(VERSION_SELECT(3804, 3804, 3824, 3824), resNameNum <= ARRAY_SIZE(resPhase));
|
|
for (int i = 0; i < resNameNum; i++) {
|
|
if (dComIfG_resLoad(&resPhase[i], resName[i]) != cPhs_COMPLEATE_e) {
|
|
rt = cPhs_INIT_e;
|
|
}
|
|
}
|
|
}
|
|
if (rt == cPhs_COMPLEATE_e) {
|
|
resPreLoadTime1 = OSGetTime();
|
|
}
|
|
return rt;
|
|
} else {
|
|
return cPhs_NEXT_e;
|
|
}
|
|
}
|
|
|
|
/* 80236444-80236554 .text phase_6__FP13dScnPly_ply_c */
|
|
cPhs_State phase_6(dScnPly_ply_c* i_this) {
|
|
if (preLoadNo >= 0) {
|
|
cPhs_State rt = cPhs_NEXT_e;
|
|
const s16* dylKeyTbl = PreLoadInfoT[preLoadNo].dylKeyTbl;
|
|
s32 dylKeyTblNum = PreLoadInfoT[preLoadNo].dylKeyTblNum;
|
|
if (dylKeyTbl != NULL && dylKeyTbl[0] != NULL) {
|
|
JUT_ASSERT(VERSION_SELECT(3838, 3838, 3858, 3858), dylKeyTblNum <= ARRAY_SIZE(dylPhase));
|
|
for (int i = 0; i < dylKeyTblNum; i++) {
|
|
if (cDylPhs::Link(&dylPhase[i], dylKeyTbl[i]) != cPhs_COMPLEATE_e) {
|
|
rt = cPhs_INIT_e;
|
|
}
|
|
}
|
|
}
|
|
if (rt == cPhs_COMPLEATE_e) {
|
|
dylPreLoadTime1 = OSGetTime();
|
|
}
|
|
return rt;
|
|
} else {
|
|
return cPhs_NEXT_e;
|
|
}
|
|
}
|
|
|
|
/* 80236554-8023655C .text phase_compleate__FPv */
|
|
cPhs_State phase_compleate(void* i_this) {
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 8023655C-8023658C .text dScnPly_Create__FP11scene_class */
|
|
static cPhs_State dScnPly_Create(scene_class* i_this) {
|
|
static request_of_phase_process_fn l_method[] = {
|
|
(request_of_phase_process_fn)phase_00, (request_of_phase_process_fn)phase_01,
|
|
(request_of_phase_process_fn)phase_0, (request_of_phase_process_fn)phase_1,
|
|
(request_of_phase_process_fn)phase_2, (request_of_phase_process_fn)phase_3,
|
|
(request_of_phase_process_fn)phase_4, (request_of_phase_process_fn)phase_5,
|
|
(request_of_phase_process_fn)phase_6, (request_of_phase_process_fn)phase_compleate,
|
|
};
|
|
|
|
return dComLbG_PhaseHandler(&static_cast<dScnPly_ply_c*>(i_this)->mLoadPhs, l_method, i_this);
|
|
}
|
|
|
|
static scene_method_class l_dScnPly_Method = {
|
|
(process_method_func)dScnPly_Create, (process_method_func)dScnPly_Delete,
|
|
(process_method_func)dScnPly_Execute, (process_method_func)dScnPly_IsDelete,
|
|
(process_method_func)dScnPly_Draw,
|
|
};
|
|
|
|
scene_process_profile_definition g_profile_PLAY_SCENE = {
|
|
/* LayerID */ fpcLy_ROOT_e,
|
|
/* ListID */ 1,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_PLAY_SCENE,
|
|
/* Proc SubMtd */ &g_fpcNd_Method.base,
|
|
/* Size */ sizeof(dScnPly_ply_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Node SubMtd */ &g_fopScn_Method.base,
|
|
/* Scene SubMtd */ &l_dScnPly_Method,
|
|
};
|
|
|
|
scene_process_profile_definition g_profile_OPENING_SCENE = {
|
|
/* LayerID */ fpcLy_ROOT_e,
|
|
/* ListID */ 1,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_OPENING_SCENE,
|
|
/* Proc SubMtd */ &g_fpcNd_Method.base,
|
|
/* Size */ sizeof(dScnPly_ply_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Node SubMtd */ &g_fopScn_Method.base,
|
|
/* Scene SubMtd */ &l_dScnPly_Method,
|
|
};
|
|
|
|
scene_process_profile_definition g_profile_OPENING2_SCENE = {
|
|
/* LayerID */ fpcLy_ROOT_e,
|
|
/* ListID */ 1,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_OPENING2_SCENE,
|
|
/* Proc SubMtd */ &g_fpcNd_Method.base,
|
|
/* Size */ sizeof(dScnPly_ply_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Node SubMtd */ &g_fopScn_Method.base,
|
|
/* Scene SubMtd */ &l_dScnPly_Method,
|
|
};
|