diff options
Diffstat (limited to 'src/d')
| -rw-r--r-- | src/d/actor/d_a_grass.cpp | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_kago.cpp | 2038 | ||||
| -rw-r--r-- | src/d/actor/d_a_mg_fshop.cpp | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_npc_wrestler.cpp | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_obj_volcball.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_camera.cpp | 4 | ||||
| -rw-r--r-- | src/d/d_com_inf_game.cpp | 8 | ||||
| -rw-r--r-- | src/d/d_path.cpp | 19 | ||||
| -rw-r--r-- | src/d/d_s_logo.cpp | 894 | ||||
| -rw-r--r-- | src/d/d_s_play.cpp | 1032 | ||||
| -rw-r--r-- | src/d/d_stage.cpp | 4 |
11 files changed, 2764 insertions, 1243 deletions
diff --git a/src/d/actor/d_a_grass.cpp b/src/d/actor/d_a_grass.cpp index 04992b39b5..c0cedf9e78 100644 --- a/src/d/actor/d_a_grass.cpp +++ b/src/d/actor/d_a_grass.cpp @@ -406,7 +406,7 @@ actor_process_profile_definition g_profile_GRASS = { fpcPi_CURRENT_e, // mListPrio PROC_GRASS, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00000570, // mSize + sizeof(daGrass_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_kago.cpp b/src/d/actor/d_a_kago.cpp index 9f4dd6e463..de8cd355c4 100644 --- a/src/d/actor/d_a_kago.cpp +++ b/src/d/actor/d_a_kago.cpp @@ -23,6 +23,16 @@ #include "f_op/f_op_camera_mng.h" #include "f_op/f_op_overlap_mng.h" +#include "res/Object/E_yc.h" +#include "res/Object/E_kc.h" + +#define TYPE_TWILIGHT 0 +#define TYPE_NORMAL 1 + +#define SCENE_TYPE_LAKE_HYLIA 0 +#define SCENE_TYPE_RIVER 1 +#define SCENE_TYPE_BOARD_HOUSE 2 +#define SCENE_TYPE_DEFAULT 3 namespace { static dCcD_SrcSph cc_sph_src = { { @@ -143,44 +153,34 @@ void daKago_HIO_c::genMessage(JORMContext* ctx) { } #endif -int daKago_c::getBckName(int param_0) { - if (field_0x6e7 == 0) { - return param_0; +int daKago_c::getBckName(int i_resIdx) { + if (mType == TYPE_TWILIGHT) { + return i_resIdx; } - switch (param_0) { - case 7: - return 4; - case 8: - return 5; - case 9: - return 6; - case 10: - return 7; - case 11: - return 8; - case 12: - return 9; - case 13: - return 10; - case 14: - return 11; - case 15: - return 12; - case 21: - return 13; - default: - return 6; - } -} - -void daKago_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { - mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(field_0x75c, getBckName(param_0)), - param_1, param_2, param_3, 0.0f, -1.0f); -} - -bool daKago_c::checkBck(int param_0) { - if (mpMorf->getAnm() == dComIfG_getObjectRes(field_0x75c, getBckName(param_0))) { + // convert shadow kargorok res idx to normal kargorok res idx + switch (i_resIdx) { + case dRes_ID_E_YC_BCK_YC_CRASH_e: return dRes_ID_E_KC_BCK_KC_CRASH_e; + case dRes_ID_E_YC_BCK_YC_CRASH2_e: return dRes_ID_E_KC_BCK_KC_CRASH2_e; + case dRes_ID_E_YC_BCK_YC_FLY_e: return dRes_ID_E_KC_BCK_KC_FLY_e; + case dRes_ID_E_YC_BCK_YC_FLY_BRAKE_e: return dRes_ID_E_KC_BCK_KC_FLY_BRAKE_e; + case dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_DASH_WL_e; + case dRes_ID_E_YC_BCK_YC_FLY_GLIDE_e: return dRes_ID_E_KC_BCK_KC_FLY_GLIDE_e; + case dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_GLIDE_WL_e; + case dRes_ID_E_YC_BCK_YC_FLY_LIMIT_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_LIMIT_WL_e; + case dRes_ID_E_YC_BCK_YC_FLY_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_WL_e; + case dRes_ID_E_YC_BCK_YC_HOVERING_e: return dRes_ID_E_KC_BCK_KC_HOVERING_e; + default: return dRes_ID_E_KC_BCK_KC_FLY_e; + } +} + +void daKago_c::setBck(int i_anm, u8 i_mode, f32 i_morf, f32 i_speed) { + mAnm_p->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(mArcName, getBckName(i_anm)), + i_mode, i_morf, i_speed, 0.0f, -1.0f); +} + +bool daKago_c::checkBck(int i_anm) { + if (mAnm_p->getAnm() == dComIfG_getObjectRes(mArcName, getBckName(i_anm))) { return true; } else { return false; @@ -193,16 +193,19 @@ int daKago_c::draw() { } g_env_light.settingTevStruct(2, ¤t.pos, &tevStr); - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); g_env_light.setLightTevColorType_MAJI(model, &tevStr); + fopAcM_setEffectMtx(this, model->getModelData()); + dComIfGd_setListDark(); - mpMorf->entryDL(); + mAnm_p->entryDL(); dComIfGd_setList(); + cXyz unkXyz1; unkXyz1.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); - field_0x764 = - dComIfGd_setShadow(field_0x764, 0, model, &unkXyz1, 3500.0f, 0.0f, current.pos.y, + mShadowId = + dComIfGd_setShadow(mShadowId, 0, model, &unkXyz1, 3500.0f, 0.0f, current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); @@ -216,22 +219,26 @@ static int daKago_Draw(daKago_c* i_this) { int daKago_c::executeBalloonMenu() { dCamera_c* camera = dCam_getBody(); - switch (field_0x6eb) { + switch (mBalloonMenuMode) { case 0: - if (field_0x6e7 == 1 && (mCurrentAction == 0 || mCurrentAction == 5) && - !dComIfGp_event_runCheck() && mDoCPd_c::getTrigB(0)) + if (mType == TYPE_NORMAL && (mAction == ACTION_FLY_e || mAction == ACTION_ATTACK_e) && + !dComIfGp_event_runCheck() && mDoCPd_c::getTrigB(PAD_1)) { - field_0x6eb = 1; + mBalloonMenuMode = 1; return 1; } return 0; case 1: - if (eventInfo.checkCommandDemoAccrpt() == 0) { + if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 1, 0xffff, 0); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + #if VERSION == VERSION_SHIELD_DEBUG + return 0; + #else break; + #endif } mMsgFlow.init(this, 0x457, 0, NULL); @@ -239,32 +246,29 @@ int daKago_c::executeBalloonMenu() { camera->Stop(); camera->SetTrimSize(3); - field_0x6eb = 0x2; - + mBalloonMenuMode = 2; break; case 2: if (mMsgFlow.doFlow(this, NULL, 0)) { if (dMsgObject_getSelectCursorPos() == 0) { - field_0x6eb = 0; + mBalloonMenuMode = 0; camera->Start(); camera->SetTrimSize(0); dComIfGp_event_reset(); - return 1; } if (dMsgObject_getSelectCursorPos() == 1) { - field_0x6eb = 3; + mBalloonMenuMode = 3; dComIfGp_setNextStage("F_SP112", 0, dComIfGp_roomControl_getStayNo(), dComIfG_play_c::getLayerNo(0), 0.0f, 10, 1, 0, 0, 1, 0); } else { - field_0x6eb = 3; + mBalloonMenuMode = 3; dStage_changeScene(3, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); } } - break; } @@ -275,37 +279,35 @@ static u8 hio_set; static daKago_HIO_c l_HIO; f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { - f32 retVal; - - retVal = mGroundHeight; + f32 gnd_height = mGroundHeight; if (mpPath1 != NULL) { - cXyz pointPos1; - cXyz pointPos2; + cXyz nextPntPos; + cXyz prevPntPos; cXyz cStack_140; - pointPos1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; - int pointIdx2 = (int)mPathIdx - (int)mPathIdxOffset; - if (pointIdx2 >= mpPath1->m_num || pointIdx2 < 0) { - pointIdx2 = mPathIdx; + int prevPntNo = (int)mPathCurrentPointNo - (int)mPathStep; + if (prevPntNo >= mpPath1->m_num || prevPntNo < 0) { + prevPntNo = mPathCurrentPointNo; } - pointPos2 = dPath_GetPnt(mpPath1, pointIdx2)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, prevPntNo)->m_position; - s16 targetAngleY = cLib_targetAngleY(&pointPos2, &pointPos1); + s16 pntAngle = cLib_targetAngleY(&prevPntPos, &nextPntPos); - mDoMtx_stack_c::YrotS(-targetAngleY); + mDoMtx_stack_c::YrotS(-pntAngle); mDoMtx_stack_c::transM(-i_pos.x, -i_pos.y, -i_pos.z); - mDoMtx_stack_c::multVec(&pointPos2, &cStack_140); + mDoMtx_stack_c::multVec(&prevPntPos, &cStack_140); f32 var_f29 = -cStack_140.z; if (var_f29 < 0.0f) { var_f29 = 0.0f; } - mDoMtx_stack_c::YrotS(-targetAngleY); + mDoMtx_stack_c::YrotS(-pntAngle); mDoMtx_stack_c::transM(-i_pos.x, -i_pos.y, -i_pos.z); - mDoMtx_stack_c::multVec(&pointPos1, &cStack_140); + mDoMtx_stack_c::multVec(&nextPntPos, &cStack_140); f32 var_f28 = cStack_140.z; if (var_f28 < 0.0f) { @@ -313,12 +315,12 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { } f32 var_f27 = var_f29 / (var_f29 + var_f28); - retVal = pointPos1.y * var_f27 + pointPos2.y * (1.0f - var_f27); + gnd_height = nextPntPos.y * var_f27 + prevPntPos.y * (1.0f - var_f27); if (o_step != NULL) { - f32 pointLatDist = pointPos1.absXZ(pointPos2); - f32 pointVertDist = std::abs(pointPos1.y - pointPos2.y); - *o_step = pointVertDist * l_HIO.mFlightSpeed / pointLatDist + 5.0f; + f32 pntDistXZ = nextPntPos.absXZ(prevPntPos); + f32 pntDistY = std::abs(nextPntPos.y - prevPntPos.y); + *o_step = pntDistY * l_HIO.mFlightSpeed / pntDistXZ + 5.0f; } } @@ -327,19 +329,20 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { dBgS_GndChk gndChk; cXyz gndChkPos(i_pos.x, i_pos.y + 500.0f, i_pos.z); gndChk.SetPos(&gndChkPos); - field_0x700 = dComIfG_Bgsp().GroundCross(&gndChk); + mGroundFlyHeight = dComIfG_Bgsp().GroundCross(&gndChk); + + mGndSpecialCode = 0; - field_0x738 = 0; + if (mGroundFlyHeight != -G_CM3D_F_INF) { + mGndSpecialCode = dComIfG_Bgsp().GetSpecialCode(gndChk); - if (field_0x700 != -G_CM3D_F_INF) { - field_0x738 = dComIfG_Bgsp().GetSpecialCode(gndChk); - field_0x700 += l_HIO.mFlightGroundAltitude; - if (retVal < field_0x700) { - retVal = field_0x700; - if (current.pos.y < retVal) { + mGroundFlyHeight += l_HIO.mFlightGroundAltitude; + if (gnd_height < mGroundFlyHeight) { + gnd_height = mGroundFlyHeight; + if (current.pos.y < gnd_height) { mGroundHeight = current.pos.y; } else { - mGroundHeight = field_0x700; + mGroundHeight = mGroundFlyHeight; } if (o_step != NULL) { @@ -360,15 +363,15 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { unkFlag1 = TRUE; } - if (retVal < gndCrossMag) { - field_0x700 = gndCrossMag; - retVal = gndCrossMag; + if (gnd_height < gndCrossMag) { + mGroundFlyHeight = gndCrossMag; + gnd_height = gndCrossMag; field_0x6e0 = 1; if (current.pos.y < gndCrossMag) { mGroundHeight = current.pos.y; } else { - mGroundHeight = field_0x700; + mGroundHeight = mGroundFlyHeight; } if (o_step != NULL) { @@ -382,37 +385,37 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { field_0x6e6 = 1; } } else { - field_0x71c = 0; + mWaterSplashTimer = 0; field_0x6e6 = 0; } - return retVal; + return gnd_height; } -f32 daKago_c::checkRoofHeight(cXyz param_0) { - f32 roofChkYVal = mRoofHeight; +f32 daKago_c::checkRoofHeight(cXyz i_pos) { + f32 roof_height = mRoofHeight; BOOL unkFlag1 = FALSE; field_0x6e5 = 0; dBgS_RoofChk roofChk; - cXyz unkXyz1(param_0.x, param_0.y - 500.0f, param_0.z); - roofChk.SetPos(unkXyz1); + cXyz chkpos(i_pos.x, i_pos.y - 500.0f, i_pos.z); + roofChk.SetPos(chkpos); - roofChkYVal = dComIfG_Bgsp().RoofChk(&roofChk); - if (roofChkYVal != G_CM3D_F_INF) { - roofChkYVal -= l_HIO.mFlightCeilingAltitude; - if (current.pos.y > roofChkYVal) { + roof_height = dComIfG_Bgsp().RoofChk(&roofChk); + if (roof_height != G_CM3D_F_INF) { + roof_height -= l_HIO.mFlightCeilingAltitude; + if (current.pos.y > roof_height) { mRoofHeight = current.pos.y; } else { - mRoofHeight = roofChkYVal; + mRoofHeight = roof_height; } if (dComIfG_Bgsp().GetSpecialCode(roofChk) == 1) { unkFlag1 = TRUE; } - if (std::abs(current.pos.y - roofChkYVal) < 310.0f) { + if (std::abs(current.pos.y - roof_height) < 310.0f) { fopAc_ac_c* actor = dComIfG_Bgsp().GetActorPointer(roofChk); if (actor != NULL && fopAcM_GetName(actor) == PROC_Obj_RIVERROCK) { if (((daObjRIVERROCK_c*)actor)->mBreakSubAction == daObjRIVERROCK_c::BREAK_MOVE) { @@ -432,7 +435,7 @@ f32 daKago_c::checkRoofHeight(cXyz param_0) { field_0x6e3 = 0; } - return roofChkYVal; + return roof_height; } void daKago_c::checkMoveHeight() { @@ -444,58 +447,61 @@ void daKago_c::checkMoveHeight() { void daKago_c::checkSizeBg() { dBgS_LinChk linChk; - cXyz unkXyz1; - cXyz unkXyz2; + cXyz line_start; + cXyz line_end; cM3dGPla plane; - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); field_0x6d9 = 0; - if (mCurrentAction == 4) { + if (mAction == ACTION_WAIT_e) { return; } - mDoMtx_stack_c::copy(model->getAnmMtx(10)); - mDoMtx_stack_c::multVecZero(&unkXyz1); - mDoMtx_stack_c::copy(model->getAnmMtx(14)); - mDoMtx_stack_c::multVecZero(&unkXyz2); - unkXyz2 = unkXyz1 + (unkXyz2 - unkXyz1) * 0.9f; - linChk.Set(&unkXyz1, &unkXyz2, NULL); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_SHOULDERL_1_e)); + mDoMtx_stack_c::multVecZero(&line_start); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_HANDL_3_e)); + mDoMtx_stack_c::multVecZero(&line_end); + line_end = line_start + (line_end - line_start) * 0.9f; + linChk.Set(&line_start, &line_end, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { dComIfG_Bgsp().GetTriPla(linChk, &plane); if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { field_0x6d9 |= (u8)1; - field_0x650[0] = linChk.GetCross(); + mWallHitEffPos[0] = linChk.GetCross(); } } - mDoMtx_stack_c::copy(model->getAnmMtx(15)); - mDoMtx_stack_c::multVecZero(&unkXyz1); - mDoMtx_stack_c::copy(model->getAnmMtx(19)); - mDoMtx_stack_c::multVecZero(&unkXyz2); - unkXyz2 = (unkXyz1 + (unkXyz2 - unkXyz1) * 0.9f); - linChk.Set(&unkXyz1, &unkXyz2, NULL); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_SHOULDERR_1_e)); + mDoMtx_stack_c::multVecZero(&line_start); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_HANDR_3_e)); + mDoMtx_stack_c::multVecZero(&line_end); + line_end = (line_start + (line_end - line_start) * 0.9f); + linChk.Set(&line_start, &line_end, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { dComIfG_Bgsp().GetTriPla(linChk, &plane); if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { field_0x6d9 |= (u8)0x2; - field_0x650[1] = linChk.GetCross(); + mWallHitEffPos[1] = linChk.GetCross(); } } - unkXyz1 = current.pos; - mDoMtx_stack_c::copy(model->getAnmMtx(1)); - mDoMtx_stack_c::multVecZero(&unkXyz1); + line_start = current.pos; + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_BACKBONE1_e)); + mDoMtx_stack_c::multVecZero(&line_start); mDoMtx_stack_c::transM(300.0f, 0.0f, 0.0f); - mDoMtx_stack_c::multVecZero(&unkXyz2); - linChk.Set(&unkXyz1, &unkXyz2, NULL); + mDoMtx_stack_c::multVecZero(&line_end); + linChk.Set(&line_start, &line_end, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { dComIfG_Bgsp().GetTriPla(linChk, &plane); if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { if (!checkYaguraPos(linChk.GetCross())) { field_0x6d9 |= (u8)4; - this->field_0x650[2] = linChk.GetCross(); + mWallHitEffPos[2] = linChk.GetCross(); } } } @@ -505,12 +511,12 @@ s16 daKago_c::getBeforeGroundHeight(u8 param_0) { return 0; } -void daKago_c::demo_skip(int param_0) { +void daKago_c::demo_skip(int i_parameter) { dCamera_c* camera = dCam_getBody(); - switch (param_0) { + switch (i_parameter) { case 0: - field_0x748 = 2; + mDemoMode = 2; field_0x74c = 0; break; case 1: @@ -521,10 +527,10 @@ void daKago_c::demo_skip(int param_0) { case 2: setMidnaRideOn(); setPlayerRideOn(); - field_0x718 = field_0x71a = 0; + mHeadRotZ = mHeadRotY = 0; /* dSv_event_flag_c::M_051 - Main Event - Shadow Kargorok (?) (Large) event complete (Horse grass appears in various places) */ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[84]); - field_0x748 = 7; + mDemoMode = 7; field_0x74c = 0; break; case 4: @@ -534,10 +540,10 @@ void daKago_c::demo_skip(int param_0) { case 5: case 6: if (setSceneChange(3)) { - if (param_0 == 5) { - field_0x748 = 6; + if (i_parameter == 5) { + mDemoMode = 6; } else { - field_0x748 = 5; + mDemoMode = 5; field_0x6cc = 1.0f; } } @@ -545,14 +551,14 @@ void daKago_c::demo_skip(int param_0) { case 7: setRideOff(); case 8: { - field_0x68c.set(-77875.0f, -18287.0f, 42000.0f); - field_0x698.set(-77275.0f, -18500.0f, 41090.0f); + mDemoCamCenter.set(-77875.0f, -18287.0f, 42000.0f); + mDemoCamEye.set(-77275.0f, -18500.0f, 41090.0f); field_0x6a4.set(-77615.0f, -18640.0f, 41400.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x6a4, 0, 0); field_0x6de = 0; speed.y = speedF = 0.0f; - setActionMode(4, 0); - camera->Set(field_0x68c, field_0x698, 70.0f, 0); + setActionMode(ACTION_WAIT_e, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, 70.0f, 0); camera->Reset(); camera->Start(); camera->SetTrimSize(0); @@ -563,14 +569,14 @@ void daKago_c::demo_skip(int param_0) { case 9: setRideOff(); case 10: - field_0x68c.set(3703.0f, 337.0f, 863.0f); - field_0x698.set(3726.0f, 272.0f, 1196.0f); + mDemoCamCenter.set(3703.0f, 337.0f, 863.0f); + mDemoCamEye.set(3726.0f, 272.0f, 1196.0f); field_0x6a4.set(3782.0f, 222.0f, 690.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x6a4, 0, 0); field_0x6de = 0; speed.y = speedF = 0.0f; - setActionMode(4, 0); - camera->Set(field_0x68c, field_0x698, 70.0f, 0); + setActionMode(ACTION_WAIT_e, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, 70.0f, 0); camera->Reset(); camera->Start(); camera->SetTrimSize(0); @@ -579,27 +585,28 @@ void daKago_c::demo_skip(int param_0) { } } -int daKago_c::DemoSkipCallBack(void* param_0, int param_1) { - if (param_0 != NULL) { - ((daKago_c*)param_0)->demo_skip(param_1); - return 1; +int daKago_c::DemoSkipCallBack(void* i_this, int i_parameter) { + if (i_this != NULL) { + ((daKago_c*)i_this)->demo_skip(i_parameter); + return TRUE; } - return 0; + + return FALSE; } -void daKago_c::setActionMode(int param_0, int param_1) { +void daKago_c::setActionMode(int i_action, int i_mode) { mIsFlying = false; - mCurrentAction = param_0; - field_0x744 = param_1; + mAction = i_action; + mMode = i_mode; } void daKago_c::setMidnaTagPos() { - cXyz unkXyz1; + cXyz tagPos; daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); if (midna != NULL) { mDoMtx_stack_c::copy(getMidnaLocaterMtx()); - mDoMtx_stack_c::multVecZero(&unkXyz1); - midna->onTagWaitPos(&unkXyz1); + mDoMtx_stack_c::multVecZero(&tagPos); + midna->onTagWaitPos(&tagPos); } } @@ -621,6 +628,7 @@ void daKago_c::setRideOff() { midna->offTagWaitPos(); midna->offCargoActor(); } + daPy_getPlayerActorClass()->offCargoCarry(); } @@ -628,78 +636,75 @@ s8 daKago_c::searchNearPassPoint() { cXyz pointPos; cXyz playerPos(daPy_getPlayerActorClass()->current.pos); - f32 unkFloat1; - f32 unkFloat2 = unkFloat1 = 100000.0f; - int pointIdx1; + f32 prev_nearest_distXZ, nearest_distXZ; + nearest_distXZ = prev_nearest_distXZ = 100000.0f; + int nearest_point_no; + for (int i = 0; i < mpPath1->m_num; i++) { - pointPos = dPath_GetPnt(mpPath1,i)->m_position; + pointPos = dPath_GetPnt(mpPath1, i)->m_position; - f32 playerLatDist = playerPos.absXZ(pointPos); - if (playerLatDist < unkFloat2) { - unkFloat1 = unkFloat2; - unkFloat2 = playerLatDist; - pointIdx1 = i; - } else if (playerLatDist < unkFloat1) { - unkFloat1 = playerLatDist; + f32 player_pnt_distXZ = playerPos.absXZ(pointPos); + if (player_pnt_distXZ < nearest_distXZ) { + prev_nearest_distXZ = nearest_distXZ; + nearest_distXZ = player_pnt_distXZ; + nearest_point_no = i; + } else if (player_pnt_distXZ < prev_nearest_distXZ) { + prev_nearest_distXZ = player_pnt_distXZ; } } - int pointIdx2 = pointIdx1 + mPathIdxOffset; - if (pointIdx2 < 0) { - pointIdx2 = 1; - } else if (pointIdx2 >= mpPath1->m_num) { - pointIdx2 = mpPath1->m_num - 1; + int next_point_no = nearest_point_no + mPathStep; + if (next_point_no < 0) { + next_point_no = 1; + } else if (next_point_no >= mpPath1->m_num) { + next_point_no = mpPath1->m_num - 1; } - return pointIdx2; + return next_point_no; } -int daKago_c::setSceneChange(int param_0) { - int unkInt1 = 0; - switch (param_0) { +int daKago_c::setSceneChange(int i_mode) { + int exitID = 0; + + switch (i_mode) { case 0: - if (field_0x6e7 == 0) { - unkInt1 = 1; + if (mType == TYPE_TWILIGHT) { + exitID = 1; } else { - unkInt1 = 6; + exitID = 6; } - break; case 1: - unkInt1 = 0; - + exitID = 0; endBalloonScore(); - break; case 2: - if (field_0x6e7 == 0) { - unkInt1 = 3; + if (mType == TYPE_TWILIGHT) { + exitID = 3; } else { - unkInt1 = 0; + exitID = 0; } endBalloonScore(); - break; case 3: - unkInt1 = 3; - + exitID = 3; break; } - return dStage_changeScene(unkInt1, 0.0f, 10, fopAcM_GetRoomNo(this), 0, -1); + return dStage_changeScene(exitID, 0.0f, 10, fopAcM_GetRoomNo(this), 0, -1); } void daKago_c::createBalloonScore() { - if (field_0x6e7 != 0 && mBalloon2DId == fpcM_ERROR_PROCESS_ID_e) { - mBalloon2DId = fopAcM_create(PROC_BALLOON2D, 0, 0, 0xffffffff, 0, 0, -1); + if (mType != TYPE_TWILIGHT && mBalloon2DId == fpcM_ERROR_PROCESS_ID_e) { + mBalloon2DId = fopAcM_create(PROC_BALLOON2D, 0, NULL, -1, NULL, NULL, -1); field_0x6e9 = 1; } } void daKago_c::startBalloonScore() { fopAc_ac_c* balloon_actor; - if (field_0x6e7 != 0 && field_0x6e9 == 1) { + if (mType != TYPE_TWILIGHT && field_0x6e9 == 1) { fopAcM_SearchByID(mBalloon2DId, &balloon_actor); if (balloon_actor != NULL) { ((daBalloon2D_c*)balloon_actor)->show(); @@ -711,9 +716,9 @@ void daKago_c::startBalloonScore() { void daKago_c::endBalloonScore() { fopAc_ac_c* balloon2D; - fopAc_ac_c *balloonObj; + fopAc_ac_c* balloonObj; - if (field_0x6e7 != 0) { + if (mType != TYPE_TWILIGHT) { fopAcM_SearchByID(mBalloon2DId, &balloon2D); if (balloon2D != NULL) { ((daBalloon2D_c*)balloon2D)->hide(); @@ -726,11 +731,11 @@ void daKago_c::endBalloonScore() { } } -f32 daKago_c::checkNextPath(cXyz param_0) { +f32 daKago_c::checkNextPath(cXyz i_pntPos) { cXyz cStack_14; mDoMtx_stack_c::YrotS(-field_0x714); mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z); - mDoMtx_stack_c::multVec(¶m_0, &cStack_14); + mDoMtx_stack_c::multVec(&i_pntPos, &cStack_14); return cStack_14.z; } @@ -745,10 +750,11 @@ void daKago_c::checkHeight() { bool daKago_c::checkYaguraPos(cXyz param_0) { cXyz local_18(-22984.0f, 0.0f, 7455.0f); cXyz cStack_24; - s16 temp = -0x770; - mDoMtx_stack_c::YrotS(-temp); + s16 rot_y = -0x770; + mDoMtx_stack_c::YrotS(-rot_y); mDoMtx_stack_c::transM(-local_18.x, -local_18.y, -local_18.z); mDoMtx_stack_c::multVec(¶m_0, &cStack_24); + if (std::abs(cStack_24.z) < 700.0f) { return true; } else { @@ -758,12 +764,12 @@ bool daKago_c::checkYaguraPos(cXyz param_0) { bool daKago_c::checkWallHitFall(int param_0) { if (field_0x6e5 != 0) { - cXyz unkXyz1; - setActionMode(1, 3); - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - unkXyz1 = current.pos; - unkXyz1.y += 200.0f; - setWallHitEffect(unkXyz1, 0); + cXyz effpos; + setActionMode(ACTION_STAGGER_e, 3); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + effpos = current.pos; + effpos.y += 200.0f; + setWallHitEffect(effpos, 0); return true; } @@ -773,37 +779,37 @@ bool daKago_c::checkWallHitFall(int param_0) { if (!checkYaguraPos(current.pos)) { if (abs(unkInt1) > 0x7000) { field_0x6d9 |= (u8)0x4; - field_0x650[2].set(current.pos.x + cM_ssin(shape_angle.y) * 200.0f, current.pos.y, current.pos.z + cM_scos(shape_angle.y) * 200.0f); + mWallHitEffPos[2].set(current.pos.x + cM_ssin(shape_angle.y) * 200.0f, current.pos.y, current.pos.z + cM_scos(shape_angle.y) * 200.0f); } } if (unkInt1 > 0) { field_0x6d9 |= (u8)0x1; - field_0x650[0].set(current.pos.x + cM_ssin(shape_angle.y + 0x4000) * 200.0f, current.pos.y, - current.pos.z + cM_scos(shape_angle.y + 0x4000) * 200.0f); + mWallHitEffPos[0].set(current.pos.x + cM_ssin(shape_angle.y + 0x4000) * 200.0f, current.pos.y, + current.pos.z + cM_scos(shape_angle.y + 0x4000) * 200.0f); } else { field_0x6d9 |= (u8)0x2; - field_0x650[1].set(current.pos.x + cM_ssin(shape_angle.y + -0x4000) * 200.0f, - current.pos.y, - current.pos.z + cM_scos(shape_angle.y + -0x4000) * 200.0f); + mWallHitEffPos[1].set(current.pos.x + cM_ssin(shape_angle.y + -0x4000) * 200.0f, + current.pos.y, + current.pos.z + cM_scos(shape_angle.y + -0x4000) * 200.0f); } } if ((field_0x6d9 & 0x4) != 0) { - setActionMode(1, 0); - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - setWallHitEffect(field_0x650[2], 0); + setActionMode(ACTION_STAGGER_e, 0); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + setWallHitEffect(mWallHitEffPos[2], 0); return true; } - if (param_0 != 0 && field_0x720 == 0 && (field_0x6d9 & 0x3) != 0) { - dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + if (param_0 != 0 && mWallHitInvulnTimer == 0 && (field_0x6d9 & 0x3) != 0) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); if ((field_0x6d9 & 0x1) != 0) { - setActionMode(1, 1); - setWallHitEffect(field_0x650[0], 1); + setActionMode(ACTION_STAGGER_e, 1); + setWallHitEffect(mWallHitEffPos[0], 1); } else { - setActionMode(1, 2); - setWallHitEffect(field_0x650[1], 1); + setActionMode(ACTION_STAGGER_e, 2); + setWallHitEffect(mWallHitEffPos[1], 1); } return true; } @@ -816,8 +822,8 @@ bool daKago_c::checkAttackStart() { return false; } - if (mDoCPd_c::getTrigA(0)) { - setActionMode(5, 0); + if (mDoCPd_c::getTrigA(PAD_1)) { + setActionMode(ACTION_ATTACK_e, 0); mIsFlying = true; return true; } else { @@ -825,11 +831,9 @@ bool daKago_c::checkAttackStart() { } } -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - s16 daKago_c::getValueY(f32 param_0) { - s16 valueY = field_0x6f4 * param_0; + s16 valueY = mStickY * param_0; + f32 var_f31; if (valueY < 0) { if (current.pos.y > mRoofHeight - 200.0f) { @@ -853,11 +857,11 @@ s16 daKago_c::getValueY(f32 param_0) { } s16 daKago_c::getValueX(f32 param_0) { - return -field_0x6f0 * param_0; + return -mStickX * param_0; } s16 daKago_c::getValueAbsX(f32 param_0) { - return std::abs(-field_0x6f0 * param_0); + return std::abs(-mStickX * param_0); } void daKago_c::flySpeedCalcLockOn() { @@ -873,31 +877,31 @@ void daKago_c::flySpeedCalcLockOn() { cLib_addCalcAngleS(¤t.angle.x, angleX, 8, 0x100, 0x10); shape_angle.x = current.angle.x; - s16 angleX2 = current.angle.y; + + s16 prevAngleY = current.angle.y; cLib_addCalcAngleS(¤t.angle.y, angleY, 8, 0x100, 0x10); shape_angle.y = current.angle.y; - cLib_addCalcAngleS(&shape_angle.z, ((angleX2 - current.angle.y) * 0x20), 8, 0x400, 0x10); + cLib_addCalcAngleS(&shape_angle.z, ((prevAngleY - current.angle.y) * 0x20), 8, 0x400, 0x10); if (shape_angle.z > 0x3000) { shape_angle.z = 0x3000; } - if (shape_angle.z < -0x3000) { shape_angle.z = -0x3000; } } -void daKago_c::flySpeedCalc(s16 param_0, int param_1) { +void daKago_c::flySpeedCalc(s16 param_0, int i_calcType) { s16 var_r29; s16 var_r28; s16 var_r27; s16 sp_8; - if (param_1 == 0) { + if (i_calcType == 0) { sp_8 = 0x2000; - } else if (param_1 == 1) { + } else if (i_calcType == 1) { sp_8 = 0x1000; - } else if (param_1 == 2) { + } else if (i_calcType == 2) { sp_8 = 0x2aaa; } @@ -910,7 +914,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { field_0x710 += getValueY(40.0f); var_r29 = 0x200; - if (param_1 == 2) { + if (i_calcType == 2) { var_r29 = 0x400; } if (field_0x710 > var_r29) { @@ -920,7 +924,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { field_0x710 = -var_r29; } - if (field_0x6f4 > 0.0f) { + if (mStickY > 0.0f) { if (current.angle.x < var_r28) { current.angle.x += field_0x710; } else { @@ -952,6 +956,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { } current.angle.x += field_0x710; } + if (current.angle.x > 0x2aaa) { current.angle.x = 0x2aaa; } @@ -961,28 +966,28 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { shape_angle.x = current.angle.x; var_r27 = 0x2000; - if (param_1 == 1) { + if (i_calcType == 1) { var_r27 = 0x1000; - } else if (param_1 == 2) { + } else if (i_calcType == 2) { var_r27 = 0x2aaa; } f32 unkFloat1 = 20.0f; var_r29 = 0x100; - if (param_1 == 2) { + if (i_calcType == 2) { unkFloat1 = 30.0f; var_r29 = 0x200; } var_r28 = param_0 + getValueX(var_r27); if (mpLockActor != NULL) { - var_r28 = cLib_targetAngleY((Vec*)¤t, (Vec*)&mpLockActor->current); + var_r28 = cLib_targetAngleY(¤t.pos, &mpLockActor->current.pos); } int always_zero = 0; if (!always_zero) { if (abs((s16)(current.angle.y - param_0)) < var_r27) { - if (field_0x6f0) { + if (mStickX) { field_0x712 += getValueX(unkFloat1); if (field_0x712 > getValueAbsX(var_r29)) { field_0x712 = getValueAbsX(var_r29); @@ -993,18 +998,20 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { } else { cLib_addCalcAngleS(&field_0x712, 0, 8, 0x20, 0x10); } + current.angle.y += field_0x712; } else { int sp_14 = 0; - if (field_0x6f0 < 0.0f) { + if (mStickX < 0.0f) { if ((s16)(current.angle.y - param_0) < var_r27) { sp_14 = 1; } } else { - if (field_0x6f0 > 0.0f && (s16)(current.angle.y - param_0) > var_r27) { + if (mStickX > 0.0f && (s16)(current.angle.y - param_0) > var_r27) { sp_14 = 1; } } + if (sp_14 != 0) { field_0x712 += getValueX(unkFloat1); if (field_0x712 > getValueAbsX(var_r29)) { @@ -1020,7 +1027,9 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { } } } + shape_angle.y = current.angle.y; + cLib_addCalcAngleS(&shape_angle.z, -field_0x712 * 0x20, 8, 0x400, 0x10); if (shape_angle.z > 0x3000) { shape_angle.z = 0x3000; @@ -1031,7 +1040,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { if (field_0x6e3 == 1) { field_0x6e3 = 2; - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -1040,58 +1049,60 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { if (field_0x6e6 == 1) { field_0x6e6 = 2; - if (mCurrentAction == 5) { - field_0x71c = l_HIO.mSplashGenTimeDuringDash; + if (mAction == ACTION_ATTACK_e) { + mWaterSplashTimer = l_HIO.mSplashGenTimeDuringDash; } else { - field_0x71c = l_HIO.mWaterSplashTime; + mWaterSplashTimer = l_HIO.mWaterSplashTime; } } } bool daKago_c::checkFlySceneChange() { - if ((mPathIdxOffset > 0 && mPathIdx >= mpPath1->m_num - 1 || - mPathIdxOffset < 0 && mPathIdx < 1) && - field_0x73c == 1 && fopOvlpM_IsPeek() == 0) + if (((mPathStep > 0 && mPathCurrentPointNo >= mpPath1->m_num - 1) || (mPathStep < 0 && mPathCurrentPointNo < 1)) + && mSceneType == SCENE_TYPE_RIVER + && !fopOvlpM_IsPeek()) { - setActionMode(0, 4); + setActionMode(ACTION_FLY_e, 4); field_0x728 = 300; - if (checkBck(9) == 0) { - setBck(9, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_e, 2, 10.0f, 1.0f); } - if (mPathIdxOffset > 0) { + if (mPathStep > 0) { setSceneChange(1); } else { setSceneChange(2); } return true; - } else { - return false; } + + return false; } void daKago_c::setFlyAway() { current.angle.y = shape_angle.y; - setActionMode(0, 3); + setActionMode(ACTION_FLY_e, 3); field_0x728 = 90; - if (!checkBck(9)) { - setBck(9, 2, 10.0f, 1.0f); + + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_e, 2, 10.0f, 1.0f); } + dComIfGp_getVibration().StopQuake(0x1f); } void daKago_c::setFlyAnime() { if (cM_rnd() < 0.5) { - if (checkBck(15) == 0) { - setBck(15, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); } else { - setBck(13, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); } } else { - if (!checkBck(13)) { - setBck(13, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); } } @@ -1099,23 +1110,24 @@ void daKago_c::setFlyAnime() { } void daKago_c::executeFly() { - s16 unkInt1; - s16 unkInt2; - f32 unkFloat1; - cXyz unkXyz1; - cXyz unkXyz2; + s16 pntAngleY; + s16 pntAngleX; + f32 targetFlySpeed; + cXyz nextPntPos; + cXyz prevPntPos; cXyz unkXyz3; startBalloonScore(); - if (field_0x744 < 3) { + if (mMode < 3) { if (mDashCooldownTime == 0) { - dComIfGp_setDoStatusForce(0x4b, 0); + dComIfGp_setDoStatusForce(BUTTON_STATUS_UNK_75, 0); } - if (field_0x6e7 == 1) { - dComIfGp_setAStatusForce(0x2a, 0); + + if (mType == TYPE_NORMAL) { + dComIfGp_setAStatusForce(BUTTON_STATUS_QUIT, 0); } else { - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } } @@ -1126,7 +1138,7 @@ void daKago_c::executeFly() { checkHeight(); mIsFlying = true; - switch (field_0x744) { + switch (mMode) { case 0: shape_angle.y = current.angle.y; mGroundHeight = checkGroundHeight(current.pos, NULL); @@ -1135,27 +1147,29 @@ void daKago_c::executeFly() { case 1: setFlyAnime(); field_0x710 = field_0x712 = 0; - field_0x744 = 2; + mMode = 2; break; case 2: - unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; - unkInt1 = cLib_targetAngleY(&unkXyz2, &unkXyz1); - field_0x714 = unkInt1; - flySpeedCalc(unkInt1, 0); - if (checkBck(11)) { - if (mpMorf->isStop()) { + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; + pntAngleY = cLib_targetAngleY(&prevPntPos, &nextPntPos); + field_0x714 = pntAngleY; + + flySpeedCalc(pntAngleY, 0); + + if (checkBck(dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e)) { + if (mAnm_p->isStop()) { setFlyAnime(); } } else { if (field_0x710 < 0) { - if (!checkBck(15)) { - setBck(15, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); } field_0x728 = 10; } else if (field_0x710 > 0) { - if (!checkBck(13)) { - setBck(13, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); } field_0x728 = 90; } else { @@ -1164,22 +1178,26 @@ void daKago_c::executeFly() { } } } + if (cM_ssin(current.angle.x) > 0.0f) { - unkFloat1 = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); + targetFlySpeed = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); } else { - unkFloat1 = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); + targetFlySpeed = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); } - if (std::abs(field_0x6f8 - unkFloat1) > 10.0f) { - cLib_chaseF(&field_0x6f8, unkFloat1, 2.0f); + + if (std::abs(mFlySpeed - targetFlySpeed) > 10.0f) { + cLib_chaseF(&mFlySpeed, targetFlySpeed, 2.0f); } else { - cLib_chaseF(&field_0x6f8, unkFloat1, 1.0f); + cLib_chaseF(&mFlySpeed, targetFlySpeed, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - unkXyz3.z = checkNextPath(unkXyz1); + + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + + unkXyz3.z = checkNextPath(nextPntPos); if (unkXyz3.z < 0.0f) { - if (abs((s16)(unkInt1 - cLib_targetAngleY(&unkXyz2, ¤t.pos))) < 0x4000) { - mPathIdx += mPathIdxOffset; + if (abs((s16)(pntAngleY - cLib_targetAngleY(&prevPntPos, ¤t.pos))) < 0x4000) { + mPathCurrentPointNo += mPathStep; if (checkFlySceneChange()) { return; } @@ -1188,35 +1206,40 @@ void daKago_c::executeFly() { break; case 3: case 4: - if (mPathIdx >= mpPath1->m_num) { - unkInt1 = current.angle.y; - unkInt2 = 0; + if (mPathCurrentPointNo >= mpPath1->m_num) { + pntAngleY = current.angle.y; + pntAngleX = 0; } else { - unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; - unkInt1 = cLib_targetAngleY(&unkXyz2, &unkXyz1); - unkInt2 = -cLib_targetAngleX(&unkXyz2, &unkXyz1); + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; + pntAngleY = cLib_targetAngleY(&prevPntPos, &nextPntPos); + pntAngleX = -cLib_targetAngleX(&prevPntPos, &nextPntPos); } - if (field_0x744 == 3) { + + if (mMode == 3) { cLib_chaseUC(&field_0x6de, 0, 4); - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x10); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x10); } else { - cLib_addCalcAngleS(¤t.angle.x, unkInt2, 8, 0x100, 0x10); + cLib_addCalcAngleS(¤t.angle.x, pntAngleX, 8, 0x100, 0x10); } + shape_angle.x = current.angle.x; - cLib_addCalcAngleS(¤t.angle.y, unkInt1, 8, 0x400, 0x10); + cLib_addCalcAngleS(¤t.angle.y, pntAngleY, 8, 0x400, 0x10); shape_angle.y = current.angle.y; cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x400, 0x10); - unkFloat1 = l_HIO.mFlightSpeed + 20.0f; - if (std::abs(field_0x6f8 - unkFloat1) > 10.0f) { - cLib_chaseF(&field_0x6f8, unkFloat1, 2.0f); + targetFlySpeed = l_HIO.mFlightSpeed + 20.0f; + + if (std::abs(mFlySpeed - targetFlySpeed) > 10.0f) { + cLib_chaseF(&mFlySpeed, targetFlySpeed, 2.0f); } else { - cLib_chaseF(&field_0x6f8, unkFloat1, 1.0f); + cLib_chaseF(&mFlySpeed, targetFlySpeed, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + if (field_0x728 == 0) { - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); } return; } @@ -1229,31 +1252,31 @@ void daKago_c::executeFly() { void daKago_c::executeStagger() { dCamera_c* camera = dCam_getBody(); - cXyz cStack_94 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - cXyz cStack_a0 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + cXyz nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + cXyz prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; - field_0x714 = cLib_targetAngleY(&cStack_a0, &cStack_94); + field_0x714 = cLib_targetAngleY(&prevPntPos, &nextPntPos); - if (field_0x6e7 == 1) { - dComIfGp_setAStatusForce(0x2a, 0); + if (mType == TYPE_NORMAL) { + dComIfGp_setAStatusForce(BUTTON_STATUS_QUIT, 0); } else { - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } checkHeight(); mIsFlying = true; - switch (field_0x744) { + switch (mMode) { case 0: mSph.OffAtSetBit(); - daPy_getPlayerActorClass()->setPlayerDamage(0, 1); + daPy_getPlayerActorClass()->setPlayerDamage(0, TRUE); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(YC_JNT_HEAD_e)); mDoMtx_stack_c::multVecZero(&field_0x674); - if (field_0x6e7 == 0) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_CRASH, 0, -1); mSound.startCreatureVoice(Z2SE_EN_YC_V_HANGED, -1); } else { @@ -1261,12 +1284,12 @@ void daKago_c::executeStagger() { mSound.startCreatureVoice(Z2SE_EN_KC_V_CRASH, -1); } - setBck(7, 0, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_CRASH_e, 0, 10.0f, 1.0f); field_0x728 = 60; speedF = 30.0f; - if (current.pos.y < cStack_94.y) { + if (current.pos.y < nextPntPos.y) { speed.y = 30.0f; } else { speed.y = -30.0f; @@ -1274,22 +1297,21 @@ void daKago_c::executeStagger() { current.angle.y = field_0x6da - (s16)(current.angle.y - field_0x6da) + 0x8000; - field_0x744 = 4; - + mMode = 4; break; case 1: case 2: mSph.OffAtSetBit(); - daPy_getPlayerActorClass()->setPlayerDamage(0, 1); + daPy_getPlayerActorClass()->setPlayerDamage(0, TRUE); - setBck(15, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); field_0x728 = 10; - field_0x720 = (int)l_HIO.mWallHitInvulnTime; + mWallHitInvulnTimer = (int)l_HIO.mWallHitInvulnTime; speedF = 40.0f; - if (field_0x744 == 1) { + if (mMode == 1) { shape_angle.z = 0x3000; ANGLE_ADD(current.angle.y, -0x2000); if (abs((s16)(current.angle.y - field_0x714)) > 0x2000) { @@ -1306,18 +1328,17 @@ void daKago_c::executeStagger() { mSound.startCreatureSound(Z2SE_EN_YC_HIT_SIDE, 0, -1); dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - field_0x744 = 5; - + mMode = 5; break; case 3: - daPy_getPlayerActorClass()->setPlayerDamage(2, 1); + daPy_getPlayerActorClass()->setPlayerDamage(2, TRUE); mSph.OffAtSetBit(); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(YC_JNT_HEAD_e)); mDoMtx_stack_c::multVecZero(&field_0x674); - if (field_0x6e7 == 0) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_CRASH, 0, -1); mSound.startCreatureVoice(Z2SE_EN_YC_V_HANGED, -1); } else { @@ -1325,14 +1346,13 @@ void daKago_c::executeStagger() { mSound.startCreatureVoice(Z2SE_EN_KC_V_CRASH, -1); } - setBck(7, 0, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_CRASH_e, 0, 10.0f, 1.0f); - field_0x728 = 0x3c; + field_0x728 = 60; speedF = 30.0f; speed.y = -50.0f; - field_0x744 = 6; - + mMode = 6; break; case 5: cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x400, 0x40); @@ -1351,28 +1371,27 @@ void daKago_c::executeStagger() { } shape_angle.y = current.angle.y; - field_0x6f8 = 40.0f; + mFlySpeed = 40.0f; - setActionMode(0, 1); + setActionMode(ACTION_FLY_e, 1); dComIfGp_getVibration().StopQuake(0x1f); - break; case 4: case 6: - if (checkBck(7)) { - cXyz cStack_ac; + if (checkBck(dRes_ID_E_YC_BCK_YC_CRASH_e)) { + cXyz line_end; mDoMtx_stack_c::copy(mLegR3Mtx); - mDoMtx_stack_c::multVecZero(&cStack_ac); - cStack_ac.y -= 20.0f; + mDoMtx_stack_c::multVecZero(&line_end); + line_end.y -= 20.0f; - cXyz cStack_b8 = current.pos; - cStack_b8.y += 50.0f; + cXyz line_start = current.pos; + line_start.y += 50.0f; - dBgS_LinChk dStack_88; - dStack_88.Set(&cStack_b8, &cStack_ac, NULL); + dBgS_LinChk linechk; + linechk.Set(&line_start, &line_end, NULL); - if (dComIfG_Bgsp().LineCross(&dStack_88)) { + if (dComIfG_Bgsp().LineCross(&linechk)) { current.pos.y += 5.0f; } @@ -1380,13 +1399,13 @@ void daKago_c::executeStagger() { field_0x728 = 60; - if (mpMorf->checkFrame(22.0f)) { + if (mAnm_p->checkFrame(22.0f)) { setRideOff(); - setBck(8, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_CRASH2_e, 2, 10.0f, 1.0f); } } - if (field_0x744 == 4) { + if (mMode == 4) { cLib_addCalcAngleS(&shape_angle.y, current.angle.y + 0x8000, 8, 0x100, 0x10); } else { cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x100, 0x10); @@ -1401,40 +1420,38 @@ void daKago_c::executeStagger() { if (field_0x728 == 0) { setFlyAway(); - field_0x6f8 = -10.0f; + mFlySpeed = -10.0f; } - break; } } void daKago_c::executeWait() { - daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass()->getMidnaActor(); + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); if (field_0x728 == 0) { cLib_chaseUC(&field_0x6de, 0, 4); } if (field_0x6df == 0) { - if (player->checkWolfCargoCarrySceneChange()) { - if (field_0x73c == 1) { + if (daPy_py_c::checkWolfCargoCarrySceneChange()) { + if (mSceneType == SCENE_TYPE_RIVER) { createBalloonScore(); if (dComIfGp_getStartStagePoint() == 0) { - mPathIdxOffset = 1; - mPathIdx = 0; + mPathStep = 1; + mPathCurrentPointNo = 0; mPathDir = 1; } else { - mPathIdxOffset = -1; - mPathIdx = mpPath1->m_num + -1; + mPathStep = -1; + mPathCurrentPointNo = mpPath1->m_num + -1; mPathDir = -1; } - old.pos = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - current.pos = old.pos; - mPathIdx += mPathIdxOffset; - field_0x6a4 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + current.pos = old.pos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + mPathCurrentPointNo += mPathStep; + field_0x6a4 = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; - current.angle.y = shape_angle.y = cLib_targetAngleY((Vec*)¤t, &field_0x6a4); - if (player != NULL) { + current.angle.y = shape_angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + if (midna != NULL) { setMidnaRideOn(); setPlayerRideOn(); @@ -1442,16 +1459,16 @@ void daKago_c::executeWait() { field_0x6de = 0xff; field_0x6df = 1; - if (mPathDir == 1 && field_0x6e7 == 0 && dComIfGs_isSaveSwitch(9) == 0) { - setActionMode(9, 0); + if (mPathDir == 1 && mType == TYPE_TWILIGHT && !dComIfGs_isSaveSwitch(9)) { + setActionMode(ACTION_DEMO_FLY_e, 0); } else { - setActionMode(10, 0); + setActionMode(ACTION_DEMO_FLY2_e, 0); } setFlyAnime(); moveDemoFly(); } - } else if (field_0x73c == 0 || field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_LAKE_HYLIA || mSceneType == SCENE_TYPE_BOARD_HOUSE) { setMidnaRideOn(); setPlayerRideOn(); @@ -1459,30 +1476,29 @@ void daKago_c::executeWait() { field_0x6de = 0xff; field_0x6df = 1; - setActionMode(8, 0); + setActionMode(ACTION_LANDING_e, 0); executeLanding(); } - } - return; } #if DEBUG mPathDir = 1; - if (mDoCPd_c::getHoldL(0) && mDoCPd_c::getHoldR(0) && - mDoCPd_c::getTrigB(0)) + if (mDoCPd_c::getHoldL(PAD_1) && mDoCPd_c::getHoldR(PAD_1) && + mDoCPd_c::getTrigB(PAD_1)) { - setActionMode(2, 0); + setActionMode(ACTION_EVENT_e, 0); - if (field_0x73c == 2) { + if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { setKagoPath(1); } else { setKagoPath(5); - if (field_0x73c == 1) { + if (mSceneType == SCENE_TYPE_RIVER) { createBalloonScore(); + return; } } } @@ -1490,48 +1506,49 @@ void daKago_c::executeWait() { } bool daKago_c::calcAttackMove(int param_0) { - cXyz acStack_20; - cXyz cStack_2c; + cXyz nextPntPos; + cXyz prevPntPos; cXyz cStack_38; - acStack_20 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - cStack_2c = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; - s16 targetAngleY = cLib_targetAngleY(&cStack_2c, &acStack_20); - field_0x714 = targetAngleY; + s16 pntAngleY = cLib_targetAngleY(&prevPntPos, &nextPntPos); + field_0x714 = pntAngleY; if (mpLockActor != NULL) { flySpeedCalcLockOn(); } else { if (param_0 == 0) { - flySpeedCalc(targetAngleY, 1); + flySpeedCalc(pntAngleY, 1); } else { - flySpeedCalc(targetAngleY, 2); + flySpeedCalc(pntAngleY, 2); } } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - cStack_38.z = checkNextPath(acStack_20); + cStack_38.z = checkNextPath(nextPntPos); if (cStack_38.z < 0.0f) { - if (abs((s16)(targetAngleY - cLib_targetAngleY(&cStack_2c, ¤t.pos))) < 0x4000) { - mPathIdx += mPathIdxOffset; + if (abs((s16)(pntAngleY - cLib_targetAngleY(&prevPntPos, ¤t.pos))) < 0x4000) { + mPathCurrentPointNo += mPathStep; if (checkFlySceneChange()) { return true; } } } + return false; } void daKago_c::executeAttack() { - field_0x6dd = 1; + mIsAttack = TRUE; - if (field_0x6e7 == 1) { - dComIfGp_setAStatusForce(0x2a, 0); + if (mType == TYPE_NORMAL) { + dComIfGp_setAStatusForce(BUTTON_STATUS_QUIT, 0); } else { - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } checkHeight(); @@ -1543,15 +1560,15 @@ void daKago_c::executeAttack() { setDashSibukiEffect(); } - switch (field_0x744) { + switch (mMode) { case 0: mDashCooldownTime = l_HIO.mDashCooldownTime; mDashTime = l_HIO.mDashTime; - field_0x744 = 1; + mMode = 1; setDashBlurEffect(0); - setBck(11, 0, 5.0f, l_HIO.mDashTimeMultiplier); + setBck(dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e, 0, 5.0f, l_HIO.mDashTimeMultiplier); dComIfGp_getVibration().StartShock(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); @@ -1568,18 +1585,20 @@ void daKago_c::executeAttack() { break; case 1: setDashEffect(); + if (calcAttackMove(0) == 0) { - cLib_chaseF(&field_0x6f8, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); - if (mpMorf->checkFrame(9.0f)) { - if (field_0x6e7 == 0) { + cLib_chaseF(&mFlySpeed, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); + if (mAnm_p->checkFrame(9.0f)) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_DASH, 0, -1); } else { mSound.startCreatureSound(Z2SE_EN_KC_DASH, 0, -1); } } - if (mpMorf->checkFrame(12.0f)) { - field_0x744 = 2; - field_0x728 = 0x14; + + if (mAnm_p->checkFrame(12.0f)) { + mMode = 2; + field_0x728 = 20; dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); @@ -1593,15 +1612,15 @@ void daKago_c::executeAttack() { case 2: setDashEffect(); - if (mpMorf->checkFrame(23.0f)) { + if (mAnm_p->checkFrame(23.0f)) { mSph.OnAtSetBit(); } if (calcAttackMove(1) == 0) { - cLib_chaseF(&field_0x6f8, 100.0f, 5.0f); + cLib_chaseF(&mFlySpeed, 100.0f, 5.0f); if (field_0x728 == 0) { - field_0x744 = 3; + mMode = 3; } if (field_0x728 < 10 && checkWallHitFall(0)) { @@ -1617,8 +1636,9 @@ void daKago_c::executeAttack() { break; case 3: setDashEffect(); + if (calcAttackMove(1) == 0) { - cLib_chaseF(&field_0x6f8, 100.0f, 3.0f); + cLib_chaseF(&mFlySpeed, 100.0f, 3.0f); if (checkWallHitFall(0)) { dComIfGp_getVibration().StopQuake(0x1f); @@ -1626,8 +1646,7 @@ void daKago_c::executeAttack() { } else { mDashTime--; if (mDashTime == 0) { - field_0x744 = 4; - + mMode = 4; dComIfGp_getVibration().StopQuake(0x1f); } } @@ -1637,13 +1656,13 @@ void daKago_c::executeAttack() { setDashEffect(); case 5: if (calcAttackMove(0) == 0) { - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 5.0f); - if (field_0x6f8 <= l_HIO.mFlightSpeed) { + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 5.0f); + if (mFlySpeed <= l_HIO.mFlightSpeed) { mpLockActor = NULL; mSph.OffAtSetBit(); - setActionMode(0, 2); + setActionMode(ACTION_FLY_e, 2); field_0x6c8 = 0; field_0x6c4 = 8000.0f; @@ -1655,56 +1674,57 @@ void daKago_c::executeAttack() { } void daKago_c::calcCircleCamera(int param_0) { - cXyz cStack_20; + cXyz targetPos; mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); mDoMtx_stack_c::XrotM(shape_angle.x); mDoMtx_stack_c::transM(0.0f, 0.0f, 1500.0f); - mDoMtx_stack_c::multVecZero(&cStack_20); + mDoMtx_stack_c::multVecZero(&targetPos); if (param_0 == 0) { - field_0x68c = cStack_20; + mDemoCamCenter = targetPos; } else if (param_0 == 1) { - cLib_addCalcPos(&field_0x68c, cStack_20, 0.1f, field_0x6f8 + 100.0f, + cLib_addCalcPos(&mDemoCamCenter, targetPos, 0.1f, mFlySpeed + 100.0f, 10.0f); } else { - cLib_addCalcPos(&field_0x68c, cStack_20, 0.5f, field_0x6f8 + 30.0f, + cLib_addCalcPos(&mDemoCamCenter, targetPos, 0.5f, mFlySpeed + 30.0f, 10.0f); } + mDoMtx_stack_c::transM(0.0f, 0.0f, -1000.0f); - mDoMtx_stack_c::multVecZero(&cStack_20); + mDoMtx_stack_c::multVecZero(&targetPos); if (param_0 == 0) { - field_0x698 = cStack_20; + mDemoCamEye = targetPos; } else if (param_0 == 1) { - cLib_addCalcPos(&field_0x698, cStack_20, 0.1f, field_0x6f8 + 100.0f, + cLib_addCalcPos(&mDemoCamEye, targetPos, 0.1f, mFlySpeed + 100.0f, 10.0f); } else { - cLib_addCalcPos(&field_0x698, cStack_20, 0.5f, field_0x6f8 + 30.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, targetPos, 0.5f, mFlySpeed + 30.0f, 10.0f); } - field_0x6d4 = 60.0f; - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + mDemoCamFovy = 60.0f; + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); } void daKago_c::executeEvent() { dCamera_c* camera = dCam_getBody(); - daPy_py_c* unusedPlayer = daPy_getPlayerActorClass(); + daPy_py_c* player = daPy_getPlayerActorClass(); - if ((field_0x73c == 0) && dComIfG_play_c::getLayerNo(0) == 13 && dComIfGs_isSaveSwitch(0x10)) { - dComIfGs_onSaveSwitch(0x1a); - setActionMode(4, 0); + if (mSceneType == SCENE_TYPE_LAKE_HYLIA && dComIfG_play_c::getLayerNo(0) == 13 && dComIfGs_isSaveSwitch(16)) { + dComIfGs_onSaveSwitch(26); + setActionMode(ACTION_WAIT_e, 0); } else { if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); } else { camera->Stop(); camera->SetTrimSize(3); - field_0x748 = 0; + mDemoMode = 0; field_0x74c = 0; - setActionMode(3, 0); + setActionMode(ACTION_PERCH_e, 0); field_0x6dc = 1; field_0x6de = 0xff; dComIfGs_onSaveSwitch(8); @@ -1718,13 +1738,13 @@ void daKago_c::initPerchDemo() { cXyz midnaPos; fopAc_ac_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; } - switch (field_0x748) { + switch (mDemoMode) { case 0: { - Z2GetAudioMgr()->setDemoName(field_0x760); + Z2GetAudioMgr()->setDemoName(mDemoName); field_0x771 = 0; current.pos = dPath_GetPnt(mpPath2, field_0x771)->m_position; @@ -1753,46 +1773,44 @@ void daKago_c::initPerchDemo() { speed.y = 0.0f; speedF = 20.0f; - field_0x72c = 0xb4; + field_0x72c = 180; field_0x728 = field_0x72c + 90; field_0x6e8 = 0; - if ((field_0x73c == 0) && dComIfG_play_c::getLayerNo(0) == 13 && (playerPos.x > -90000.0f)) - { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA && dComIfG_play_c::getLayerNo(0) == 13 && playerPos.x > -90000.0f) { field_0x6e8 = 1; } calcCircleCamera(0); field_0x6e4 = 0; - break; } case 1: { field_0x728 = 90; - field_0x6f8 = 20.0f; + mFlySpeed = 20.0f; break; } case 2: { - if (field_0x73c != 0) { - mPathIdx = searchNearPassPoint(); + if (mSceneType != SCENE_TYPE_LAKE_HYLIA) { + mPathCurrentPointNo = searchNearPassPoint(); } field_0x758 = 1; - if (mPathIdxOffset < 0) { + if (mPathStep < 0) { angleY = angleY + 0x8000; daPy_getPlayerActorClass()->setPlayerPosAndAngle(&playerPos, angleY, 0); - field_0x758 = 0xffffffff; + field_0x758 = -1; } mDoMtx_stack_c::transS(midnaPos); mDoMtx_stack_c::YrotM(angleY); mDoMtx_stack_c::transM(0.0f, 1000.0f, -1000.0f); - mDoMtx_stack_c::multVecZero((Vec*)¤t); + mDoMtx_stack_c::multVecZero(¤t.pos); - setBck(0xc, 2, 0.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_e, 2, 0.0f, 1.0f); mDoMtx_stack_c::transS(midnaPos); mDoMtx_stack_c::YrotM(angleY); @@ -1801,10 +1819,10 @@ void daKago_c::initPerchDemo() { current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); - field_0x6f8 = 20.0f; + mFlySpeed = 20.0f; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; @@ -1813,37 +1831,35 @@ void daKago_c::initPerchDemo() { mDoMtx_stack_c::transS(playerPos); mDoMtx_stack_c::YrotM(angleY); mDoMtx_stack_c::transM(-100.0f, 100.0f, -300.0f); - mDoMtx_stack_c::multVecZero(&field_0x68c); + mDoMtx_stack_c::multVecZero(&mDemoCamCenter); mDoMtx_stack_c::transM(100.0f, -100.0f, 300.0f); mDoMtx_stack_c::transM(100.0f, 30.0f, 300.0f); - mDoMtx_stack_c::multVecZero(&field_0x698); + mDoMtx_stack_c::multVecZero(&mDemoCamEye); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); field_0x728 = 10; - break; } case 3: { - setBck(9, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_e, 2, 10.0f, 1.0f); setMidnaTagPos(); speedF = speed.y = 0.0f; field_0x728 = 30; - break; } case 4: { - setBck(0xf, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { field_0x6a4.set(-90000.0f, -16000.0f, 40000.0f); } else { - field_0x6a4 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + field_0x6a4 = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; } setMidnaRideOn(); @@ -1851,15 +1867,14 @@ void daKago_c::initPerchDemo() { dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - field_0x744 = 1; + mMode = 1; field_0x728 = 30; - break; } } field_0x74c = 1; - field_0x744 = 0; + mMode = 0; } bool daKago_c::executePerchDemo() { @@ -1870,17 +1885,17 @@ bool daKago_c::executePerchDemo() { daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); s16 midnaYaw; - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; midnaYaw = midna->shape_angle.y; } field_0x750++; - switch (field_0x748) { + switch (mDemoMode) { case 0: { calcCircleCamera(1); - if ((field_0x750 & 0x20) != 0) { + if (field_0x750 & 0x20) { cLib_chaseF(&field_0x6fc, 3.0f, 0.3f); } else { cLib_chaseF(&field_0x6fc, -3.0f, 0.3f); @@ -1900,7 +1915,7 @@ bool daKago_c::executePerchDemo() { cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 0x20, 0x100, 0x40); } else { if (field_0x754 == 0) { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -1914,57 +1929,55 @@ bool daKago_c::executePerchDemo() { } if (field_0x728 == 0) { - field_0x748 = 1; + mDemoMode = 1; return true; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 0); - break; } case 1: { calcCircleCamera(2); cLib_addCalcAngleS(&shape_angle.x, -cLib_targetAngleX(¤t.pos, &playerPos), 4, 0x400, 0x40); - cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY((Vec*)¤t, &playerPos), 4, 0x200, 0x40); + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &playerPos), 4, 0x200, 0x40); current.angle.y = shape_angle.y; current.angle.x = shape_angle.x; - cLib_chaseF(&field_0x6f8, 60.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 60.0f, 1.0f); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (current.pos.abs(playerPos) < 2000.0f) { - field_0x748 = 2; + mDemoMode = 2; return true; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 0); - break; } case 2: { if (field_0x6e4 == 0) { - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 4); - } else if (field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 5); } } - if (field_0x744 == 0) { + if (mMode == 0) { current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 != 0) { shape_angle.x = current.angle.x; if (field_0x728 == 1) { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -1976,9 +1989,9 @@ bool daKago_c::executePerchDemo() { shape_angle.y = current.angle.y; if (field_0x6a4.abs(current.pos) < 300.0f) { - field_0x744 = 1; + mMode = 1; - setBck(0x15, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_HOVERING_e, 2, 10.0f, 1.0f); field_0x728 = 60; @@ -1988,16 +2001,16 @@ bool daKago_c::executePerchDemo() { mDoMtx_stack_c::multVecZero(&field_0x6a4); } } else { - cLib_chaseF(&field_0x6f8, 0.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 0.0f, 1.0f); cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a4), 4, 0x400, 0x100); cLib_addCalcAngleS(¤t.angle.x, 0, 4, 0x100, 0x80); cLib_addCalcAngleS(&shape_angle.x, 0, 4, 0x100, 0x80); shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - if (!field_0x6f8 && field_0x728 == 0) { - field_0x748 = 3; + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + if (!mFlySpeed && field_0x728 == 0) { + mDemoMode = 3; return true; } } @@ -2006,23 +2019,22 @@ bool daKago_c::executePerchDemo() { mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 400.0f, -300.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 5.0f, 5.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 5.0f, 5.0f); mDoMtx_stack_c::transS(playerPos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(100.0f, 30.0f, 300.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); - - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); break; } case 3: { if (field_0x6e4 == 0) { - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 4); - } else if (field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 5); } } @@ -2031,34 +2043,33 @@ bool daKago_c::executePerchDemo() { mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 20.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(300.0f, 50.0f, 500.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); cLib_addCalcAngleS(¤t.angle.x, 0, 4, 0x400, 0x100); shape_angle.x = current.angle.x; if (field_0x728 == 0) { - field_0x748 = 4; + mDemoMode = 4; return true; } - break; } case 4: { if (field_0x6e4 == 0) { - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 4); - } else if (field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 6); } } @@ -2066,22 +2077,20 @@ bool daKago_c::executePerchDemo() { if (PerchDemoAwayForward()) { return true; } - break; } case 5: { f32 maxStep = field_0x6cc * 50.0f; f32 minStep = field_0x6cc * 10.0f; cLib_chaseF(&field_0x6cc, 0.0f, 0.05f); - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, maxStep, minStep); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, maxStep, minStep); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, maxStep, minStep); - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); - + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, maxStep, minStep); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); break; } case 6: @@ -2092,7 +2101,6 @@ bool daKago_c::executePerchDemo() { } bool daKago_c::PerchDemoAwayForward() { - cXyz playerPos = daPy_getPlayerActorClass()->current.pos; s16 playerYaw = daPy_getPlayerActorClass()->shape_angle.y; @@ -2108,58 +2116,58 @@ bool daKago_c::PerchDemoAwayForward() { midnaYaw = midna->shape_angle.y; } - switch (field_0x744) { + switch (mMode) { case 0: case 1: { f32 unusedFloat1 = 20.0f; f32 unusedFloat2 = 10.0f; - field_0x68c += speed; - field_0x698 += speed; + mDemoCamCenter += speed; + mDemoCamEye += speed; mDoMtx_stack_c::transS(midnaPos); mDoMtx_stack_c::YrotM(playerYaw); - if (field_0x744 == 0) { + if (mMode == 0) { mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f); } else { mDoMtx_stack_c::transM(0.0f, -200.0f, 0.0f); } mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 5.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 5.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); - if (field_0x744 == 0) { + if (mMode == 0) { mDoMtx_stack_c::transM(300.0f, 50.0f, 500.0f); } else { mDoMtx_stack_c::transM(500.0f, 50.0f, 0.0f); } mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 5.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 5.0f); - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); mGroundHeight = checkGroundHeight(current.pos, NULL); mRoofHeight = checkRoofHeight(current.pos); - cLib_chaseF(&field_0x6f8, 30.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 30.0f, 1.0f); cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x200, 0x80); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - if (field_0x744 == 0) { + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + if (mMode == 0) { cLib_addCalcAngleS(&shape_angle.x, 0x2000, 8, 0x200, 0x40); } else { cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x200, 0x40); } - if (field_0x728 == 0x14 && field_0x744 == 0) { - if (field_0x6e7 == 1) { + if (field_0x728 == 20 && mMode == 0) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2167,90 +2175,89 @@ bool daKago_c::PerchDemoAwayForward() { } if (field_0x728 == 0) { - if (field_0x744 == 0) { - field_0x744 = 1; - field_0x728 = 0x1e; + if (mMode == 0) { + mMode = 1; + field_0x728 = 30; setPlayerRideOn(); dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - } else if (field_0x73c != 0) { + } else if (mSceneType != SCENE_TYPE_LAKE_HYLIA) { field_0x728 = 60; - field_0x744 = 2; + mMode = 2; } else { field_0x728 = 90; - field_0x744 = 3; + mMode = 3; field_0x6cc = 1.0f; } } - break; } case 2: { if (field_0x728 > 10) { - field_0x68c += speed; - field_0x698 += speed; + mDemoCamCenter += speed; + mDemoCamEye += speed; - s16 targetYaw = cLib_targetAngleY(&field_0x698, &field_0x68c); + s16 targetYaw = cLib_targetAngleY(&mDemoCamEye, &mDemoCamCenter); if (abs((s16)(midnaYaw - targetYaw)) < 0x2000) { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 5.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 5.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); } else { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 5.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 5.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(300.0f, 50.0f, -500.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); } } else { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 50.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 50.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 50.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 50.0f, 10.0f); } - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); mGroundHeight = checkGroundHeight(current.pos, NULL); mRoofHeight = checkRoofHeight(current.pos); - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 2.0f); + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 2.0f); if (field_0x728 < 30) { cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x100, 0x40); } else { - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x40); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x40); } shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - if (field_0x73c == 2) { + if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { if (setSceneChange(3)) { - field_0x748 = 5; + mDemoMode = 5; field_0x6cc = 1.0f; } } else { field_0x6dc = 0; - setActionMode(0, 0); + setActionMode(ACTION_FLY_e, 0); - camera->Reset(field_0x68c, field_0x698); + camera->Reset(mDemoCamCenter, mDemoCamEye); camera->Start(); camera->SetTrimSize(0); @@ -2259,37 +2266,35 @@ bool daKago_c::PerchDemoAwayForward() { Z2GetAudioMgr()->setDemoName(NULL); } } - break; } case 3: { cLib_chaseF(&field_0x6cc, 0.0f, 0.1f); - field_0x68c += speed; - field_0x698 += speed * field_0x6cc; + mDemoCamCenter += speed; + mDemoCamEye += speed * field_0x6cc; unkXyz1.set(playerPos.x, playerPos.y + 100.0f, playerPos.z); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); - cLib_chaseF(&field_0x6f8, 30.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 30.0f, 1.0f); - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x40); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x40); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - setActionMode(7, 0); - field_0x748 = 8; + setActionMode(ACTION_PERCH2_e, 0); + mDemoMode = 8; return true; } - break; } } @@ -2310,14 +2315,14 @@ void daKago_c::executePerch() { void daKago_c::executeEvent2() { dCamera_c* camera = dCam_getBody(); if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this,2,0xffff,3); + fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); eventInfo.onCondition(2); } else { camera->Stop(); camera->SetTrimSize(3); - field_0x748 = 0; + mDemoMode = 0; field_0x74c = 0; - setActionMode(7,0); + setActionMode(ACTION_PERCH2_e, 0); field_0x6dc = 1; field_0x6de = 0xff; } @@ -2327,47 +2332,51 @@ void daKago_c::initFirstDemo() { dCamera_c* camera = dCam_getBody(); cXyz acStack_28; cXyz cStack_34; + daPy_py_c* player = daPy_getPlayerActorClass(); s16 playerYaw = player->shape_angle.y; cXyz playerPos = player->current.pos; + daMidna_c* midna = daPy_py_c::getMidnaActor(); cXyz midnaPos; - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; } s16 targetYaw; - switch (field_0x748) { + switch (mDemoMode) { case 0: { - Z2GetAudioMgr()->setDemoName(field_0x760); - field_0x718 = -0x800; + Z2GetAudioMgr()->setDemoName(mDemoName); + mHeadRotZ = -0x800; player->changeOriginalDemo(); - player->changeDemoMode(0x17, 0, 0, 0); + player->changeDemoMode(daPy_demo_c::DEMO_UNK_23_e, 0, 0, 0); + playerPos.set(-103292.0f, -23437.0f, 39925.0f); field_0x6a4.set(-60000.0f, -11000.0f, 28000.0f); shape_angle.y = current.angle.y = cLib_targetAngleY(&playerPos, &field_0x6a4); cStack_34.set(-300.0f, 400.0f, -1000.0f); cLib_offsetPos(¤t.pos, &playerPos, shape_angle.y, &cStack_34); targetYaw = cLib_targetAngleY(&playerPos, ¤t.pos); + player->setPlayerPosAndAngle(&playerPos, targetYaw, 0); if (midna != NULL) { midna->current.pos = playerPos; midnaPos = midna->current.pos; } + field_0x680.set(0.0f, 0.0f, 0.0f); - field_0x68c = current.pos; + mDemoCamCenter = current.pos; field_0x6bc = 0x3000; field_0x6cc = 500.0f; field_0x6d0 = 400.0f; cStack_34.set(0.0f, field_0x6d0, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, - &cStack_34); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); - field_0x728 = 0xa0; - setBck(15, 2, 10.0f, 1.0f); - field_0x6e4 = 0; + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &cStack_34); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + field_0x728 = 160; + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); + field_0x6e4 = 0; break; } case 1: { @@ -2375,37 +2384,33 @@ void daKago_c::initFirstDemo() { midna->current.pos = playerPos; midnaPos = midna->current.pos; } - field_0x68c = current.pos; + + mDemoCamCenter = current.pos; field_0x6bc = 0x800; field_0x6cc = 700.0f; cStack_34.set(0.0f, 0.0f, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, - &cStack_34); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); - field_0x728 = 0x50; - + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &cStack_34); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + field_0x728 = 80; break; } case 2: { field_0x728 = 60; mMsgFlow.init(this, 0x7d3, 0, NULL); - break; } case 3: { - field_0x718 = cLib_targetAngleX(¤t.pos, &playerPos) / 4; + mHeadRotZ = cLib_targetAngleX(¤t.pos, &playerPos) / 4; targetYaw = cLib_targetAngleY(¤t.pos, &playerPos) - shape_angle.y; - field_0x71a = targetYaw / 4; + mHeadRotY = targetYaw / 4; cStack_34.set(50.0f, 150.0f, -200.0f); - cLib_offsetPos(&field_0x698, &midnaPos, shape_angle.y, &cStack_34); + cLib_offsetPos(&mDemoCamEye, &midnaPos, shape_angle.y, &cStack_34); cStack_34.set(50.0f, 0.0f, 50.0f); - cLib_offsetPos(&field_0x68c, &midnaPos, shape_angle.y, &cStack_34); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); - targetYaw = cLib_targetAngleY(&playerPos, (Vec*)¤t); - player->setPlayerPosAndAngle(&playerPos, targetYaw, 0); - + cLib_offsetPos(&mDemoCamCenter, &midnaPos, shape_angle.y, &cStack_34); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + player->setPlayerPosAndAngle(&playerPos, cLib_targetAngleY(&playerPos, ¤t.pos), 0); break; } case 4: { @@ -2416,8 +2421,7 @@ void daKago_c::initFirstDemo() { mDoMtx_stack_c::YrotM(field_0x6bc); mDoMtx_stack_c::transM(0.0f, 300.0f, field_0x6cc); mDoMtx_stack_c::multVecZero(&field_0x6a4); - field_0x6f8 = 0.0f; - + mFlySpeed = 0.0f; break; } case 5: { @@ -2426,68 +2430,66 @@ void daKago_c::initFirstDemo() { mDoMtx_stack_c::YrotM(field_0x6bc); mDoMtx_stack_c::transM(0.0f, 300.0f, 200.0f); mDoMtx_stack_c::multVecZero(&field_0x6a4); - break; } case 6: { player->cancelOriginalDemo(); setPlayerRideOn(); dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - field_0x728 = 0x96; + field_0x728 = 150; field_0x6cc = 1.0f; - break; } case 7: { field_0x6e8 = 0; } case 8: { - setBck(15, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); + if (field_0x6e8 != 0) { - mpMorf->setFrame(0.0f); + mAnm_p->setFrame(0.0f); field_0x6a4.set(-67000.0f, -13000.0f, 28000.0f); current.pos.set(-76600.0f, -15500.0f, 37340.0f); shape_angle.y = current.angle.y = -0x8000; shape_angle.x = current.angle.x = -0x1000; - field_0x6f8 = 50.0f; - field_0x698.set(-75232.0f, -14685.0f, 34417.0f); - field_0x68c.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + mFlySpeed = 50.0f; + mDemoCamEye.set(-75232.0f, -14685.0f, 34417.0f); + mDemoCamCenter.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); field_0x728 = 200; } else { field_0x6a4.set(-60000.0f, -11000.0f, 28000.0f); current.pos.set(-90000.0f, -16000.0f, 40000.0f); shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); shape_angle.x = current.angle.x = -0x2000; - field_0x6f8 = 50.0f; + mFlySpeed = 50.0f; cStack_34.set(-500.0f, 1000.0f, 5000.0f); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y, &cStack_34); - field_0x68c.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y, &cStack_34); + mDemoCamCenter.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); field_0x728 = 200; } - break; } } field_0x74c = 1; - field_0x744 = 0; + mMode = 0; } bool daKago_c::executeFirstDemo() { dCamera_c* camera = dCam_getBody(); cXyz unkXyz1; - cXyz unkXyz2; + cXyz offset; cXyz midnaPos; daPy_py_c* player = daPy_getPlayerActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; } @@ -2495,8 +2497,8 @@ bool daKago_c::executeFirstDemo() { cXyz playerPos = player->current.pos; int unkFlag1; - int switchVal = field_0x748; - switch (switchVal) { + int mode = mDemoMode; // fakematch + switch (mode) { case 0: dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 2); @@ -2504,21 +2506,21 @@ bool daKago_c::executeFirstDemo() { cLib_chaseF(&field_0x6cc, 1250.0f, 6.7f); cLib_chaseF(&field_0x6d0, -400.0f, 7.1f); - unkXyz2.set(0.0f, field_0x6d0, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, &unkXyz2); + offset.set(0.0f, field_0x6d0, field_0x6cc); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &offset); unkXyz1.set(0.0f, -200.0f, 400.0f); cLib_chasePos(&field_0x680, unkXyz1, 4.0f); - cLib_offsetPos(&field_0x68c, ¤t.pos, shape_angle.y, &field_0x680); + cLib_offsetPos(&mDemoCamCenter, ¤t.pos, shape_angle.y, &field_0x680); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x728 < 10) { setMidnaTagPos(); if (field_0x728 == 0) { - field_0x748 = 1; + mDemoMode = 1; return 1; } } @@ -2529,35 +2531,35 @@ bool daKago_c::executeFirstDemo() { cLib_chaseAngleS(&field_0x6bc, 0x1000, 0x20); - unkXyz2.set(0.0f, 0.0f, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, &unkXyz2); + offset.set(0.0f, 0.0f, field_0x6cc); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &offset); - if (field_0x728 < 0x46) { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 10.0f, 10.0f); + if (field_0x728 < 70) { + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 10.0f, 10.0f); } else { - field_0x68c = current.pos; + mDemoCamCenter = current.pos; } - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); setMidnaTagPos(); if (field_0x728 == 30) { - setBck(0x14, 0x02, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_HANGED_WAIT_e, 2, 10.0f, 1.0f); } if (field_0x728 > 30) { cLib_chaseF(&field_0x6cc, 350.0f, 4.0f); - cLib_addCalcAngleS(&field_0x718, -2048, 8, 0x100, 0x10); + cLib_addCalcAngleS(&mHeadRotZ, -0x800, 8, 0x100, 0x10); } else { cLib_chaseF(&field_0x6cc, 350.0f, 6.0f); - cLib_addCalcAngleS(&field_0x718, 0x400, 8, 0x200, 0x10); + cLib_addCalcAngleS(&mHeadRotZ, 0x400, 8, 0x200, 0x10); if (field_0x728 == 30) { setMidnaRideOn(); } - if (field_0x728 == 0x14) { - if (field_0x6e7 == 1) { + if (field_0x728 == 20) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2565,7 +2567,7 @@ bool daKago_c::executeFirstDemo() { } if (field_0x728 == 0) { - field_0x748 = 2; + mDemoMode = 2; return true; } @@ -2575,25 +2577,24 @@ bool daKago_c::executeFirstDemo() { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 3); setMidnaTagPos(); - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 10.0f, 10.0f); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 10.0f, 10.0f); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); mMsgFlow.doFlow(this, NULL, 0); if (field_0x728 != 0) { if (field_0x728 == 1) { - setBck(0xf, 0x02, 20.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 20.0f, 1.0f); } if (mMsgFlow.getNowMsgNo() == 0x1774) { - setBck(0xf, 0x02, 20.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 20.0f, 1.0f); field_0x728 = 0; } } if (mMsgFlow.getNowMsgNo() == 0x1775) { - field_0x748 = 3; - + mDemoMode = 3; return true; } @@ -2603,18 +2604,17 @@ bool daKago_c::executeFirstDemo() { setMidnaTagPos(); cLib_addCalcAngleS( - &field_0x718, cLib_targetAngleX(¤t.pos, &playerPos) / 4, + &mHeadRotZ, cLib_targetAngleX(¤t.pos, &playerPos) / 4, 8, 0x100, 0x10); // adding braces to the switch case for this decl regresses debug match s16 targetYaw = cLib_targetAngleY(¤t.pos, &playerPos) - shape_angle.y; cLib_addCalcAngleS( - &field_0x71a, targetYaw / 4, + &mHeadRotY, targetYaw / 4, 8, 0x100, 0x10); if (mMsgFlow.doFlow(this, NULL, 0)) { - field_0x748 = 4; - + mDemoMode = 4; return true; } @@ -2623,8 +2623,8 @@ bool daKago_c::executeFirstDemo() { case 4: dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 2); - cLib_addCalcAngleS(&field_0x718, 0, 8, 0x100, 0x10); - cLib_addCalcAngleS(&field_0x71a, 0, 8, 0x100, 0x10); + cLib_addCalcAngleS(&mHeadRotZ, 0, 8, 0x100, 0x10); + cLib_addCalcAngleS(&mHeadRotY, 0, 8, 0x100, 0x10); cLib_chaseF(&field_0x6cc, -300.0f, 10.0f); @@ -2638,27 +2638,27 @@ bool daKago_c::executeFirstDemo() { shape_angle.y = current.angle.y; shape_angle.x = current.angle.x; - cLib_chaseF(&field_0x6f8, 20.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 20.0f, 1.0f); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - field_0x68c += speed; - field_0x698 += speed; + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + mDemoCamCenter += speed; + mDemoCamEye += speed; - unkXyz2.set(0.0f, 200.0f, -500.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); - unkXyz2.set(0.0f, 0.0f, 0.0f); + offset.set(0.0f, 200.0f, -500.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 0.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x6a4.abs(current.pos) < 100.0f) { - field_0x748 = 5; + mDemoMode = 5; return true; } @@ -2671,87 +2671,84 @@ bool daKago_c::executeFirstDemo() { shape_angle.y = current.angle.y; shape_angle.x = current.angle.x; - cLib_chaseF(&field_0x6f8, 20.0f, 1.0f); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + cLib_chaseF(&mFlySpeed, 20.0f, 1.0f); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - field_0x68c += speed; - field_0x698 += speed; + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + mDemoCamCenter += speed; + mDemoCamEye += speed; - unkXyz2.set(400.0f, 50.0f, -300.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(400.0f, 50.0f, -300.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 3.0f); - unkXyz2.set(0.0f, 50.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 50.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x6a4.abs(current.pos) < 100.0f) { - field_0x748 = 6; - + mDemoMode = 6; return true; } break; case 6: dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 2); - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x40); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x40); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 > 120) { - field_0x68c += speed; - field_0x698 += speed; + mDemoCamCenter += speed; + mDemoCamEye += speed; - unkXyz2.set(400.0f, 100.0f, -300.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(400.0f, 100.0f, -300.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 3.0f); - unkXyz2.set(0.0f, 100.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); } else { cLib_chaseF(&field_0x6cc, 0.0f, 0.1f); - field_0x68c += speed; - field_0x698 += speed * field_0x6cc; + mDemoCamCenter += speed; + mDemoCamEye += speed * field_0x6cc; - unkXyz2.set(0.0f, 100.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); } - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x728 == 0) { - field_0x748 = 7; - + mDemoMode = 7; return true; } - break; case 7: case 8: unkFlag1 = 0; - if (switchVal == 7 || field_0x6e8 == 0) { + if (mode == 7 || field_0x6e8 == 0) { if (field_0x728 == 110) { unkFlag1 = 1; } - } else if (switchVal == 8 && field_0x728 == 140) { + } else if (mode == 8 && field_0x728 == 140) { unkFlag1 = 1; } if (unkFlag1 != 0) { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2761,8 +2758,8 @@ bool daKago_c::executeFirstDemo() { if (field_0x728 != 0) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 1); } else { - if (field_0x73c == 0 && setSceneChange(0)) { - field_0x748 = 9; + if (mSceneType == SCENE_TYPE_LAKE_HYLIA && setSceneChange(0)) { + mDemoMode = 9; } } case 9: @@ -2771,16 +2768,15 @@ bool daKago_c::executeFirstDemo() { shape_angle.y = current.angle.y; shape_angle.x = current.angle.x; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - - unkXyz2.set(0.0f, 100.0f, 0.0f); - cLib_offsetPos(&field_0x68c, ¤t.pos, shape_angle.y, &unkXyz2); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - field_0x6d4 = 70.0f; + offset.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&mDemoCamCenter, ¤t.pos, shape_angle.y, &offset); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); break; } @@ -2802,13 +2798,13 @@ void daKago_c::executeLandingLakeHairia() { cXyz unkXyz1; cXyz unkXyz2(-700.0f, 0.0f, -300.0f); - switch (field_0x744) { + switch (mMode) { case 0: current.pos.set(-74500.0f, -12775.0f, 31400.0f); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } @@ -2816,38 +2812,37 @@ void daKago_c::executeLandingLakeHairia() { camera->SetTrimSize(3); current.pos.set(-74500.0f, -12775.0f, 31400.0f); - field_0x698.set(-79460.0f, -13000.0f, 34200.0f); - field_0x68c = current.pos; + mDemoCamEye.set(-79460.0f, -13000.0f, 34200.0f); + mDemoCamCenter = current.pos; - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - current.angle.x = 0; - shape_angle.x = 0; - shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x698); + shape_angle.x = current.angle.x = 0; + shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &mDemoCamEye); field_0x716 = shape_angle.y + 0x2000; field_0x6a4.set(-77615.0f, -18500.0f, 41400.0f); field_0x6a4 += unkXyz2; - field_0x744 = 1; + mMode = 1; field_0x712 = 0; field_0x728 = 150; - field_0x6f8 = 50.0f; + mFlySpeed = 50.0f; break; case 1: - Z2GetAudioMgr()->setDemoName(field_0x760); - field_0x744 = 2; + Z2GetAudioMgr()->setDemoName(mDemoName); + mMode = 2; case 2: - if (field_0x728 == 0x8c) { - if (field_0x6e7 == 0x01) { + if (field_0x728 == 140) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); } } - field_0x68c = current.pos; + mDemoCamCenter = current.pos; cLib_chaseAngleS(&field_0x712, 0x80, 4); @@ -2856,17 +2851,16 @@ void daKago_c::executeLandingLakeHairia() { cLib_chaseAngleS(&shape_angle.x, 0x1000, 0x20); current.angle.x = shape_angle.x; - field_0x6f8 = 50.0f; + mFlySpeed = 50.0f; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - field_0x744 = 3; + mMode = 3; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 7); - break; case 3: current.pos.set(-76600.0f, -15500.0f, 37340.0f); @@ -2875,37 +2869,36 @@ void daKago_c::executeLandingLakeHairia() { field_0x6a4.set(-77615.0f, -18500.0f, 41400.0f); field_0x6a4 += unkXyz2; - field_0x698.set(-76900.0f, -18550.0f, 41660.0f); - field_0x698 += unkXyz2; + mDemoCamEye.set(-76900.0f, -18550.0f, 41660.0f); + mDemoCamEye += unkXyz2; - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; shape_angle.x = current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); - field_0x744 = 4; + mMode = 4; field_0x728 = 60; - setBck(13, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); case 4: - field_0x68c = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + mDemoCamCenter = current.pos; + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - field_0x744 = 5; - field_0x728 = 0x28; + mMode = 5; + field_0x728 = 40; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 7); - break; case 5: - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); cLib_chaseAngleS(&shape_angle.x, 0, 0x80); current.angle.x = shape_angle.x; @@ -2913,10 +2906,10 @@ void daKago_c::executeLandingLakeHairia() { if (field_0x728 == 0) { setRideOff(); - field_0x744 = 6; + mMode = 6; field_0x728 = 100; - setBck(0xf, 0x02, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); } else { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 7); } @@ -2927,28 +2920,29 @@ void daKago_c::executeLandingLakeHairia() { case 6: unkXyz1.set(-77875.0f, -18287.0f, 42000.0f); unkXyz1 += unkXyz2; - cLib_chasePos(&field_0x68c, unkXyz1, field_0x6cc); - if (field_0x68c.abs(unkXyz1) < 500.0f) { + cLib_chasePos(&mDemoCamCenter, unkXyz1, field_0x6cc); + if (mDemoCamCenter.abs(unkXyz1) < 500.0f) { cLib_chaseF(&field_0x6cc, 0.0f, 3.0f); } unkXyz1.set(-77275.0f, -18500.0f, 41090.0f); unkXyz1 += unkXyz2; - cLib_chasePos(&field_0x698, unkXyz1, field_0x6d0); - if (field_0x698.abs(unkXyz1) < 200.0f) { + cLib_chasePos(&mDemoCamEye, unkXyz1, field_0x6d0); + + if (mDemoCamEye.abs(unkXyz1) < 200.0f) { cLib_chaseF(&field_0x6d0, 0.0f, 1.0f); } else { cLib_chaseF(&field_0x6d0, 20.0f, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - cLib_chaseAngleS(&shape_angle.x, -8192, 0x100); + cLib_chaseAngleS(&shape_angle.x, -0x2000, 0x100); current.angle.x = shape_angle.x; if (field_0x728 == 90) { - if (field_0x6e7 == 0x01) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2956,7 +2950,7 @@ void daKago_c::executeLandingLakeHairia() { } if (field_0x728 == 0) { - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); camera->Reset(); camera->Start(); @@ -2965,91 +2959,87 @@ void daKago_c::executeLandingLakeHairia() { dComIfGp_event_reset(); Z2GetAudioMgr()->setDemoName(NULL); - return; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 8); } - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); } void daKago_c::executeLandingBoartHouse() { dCamera_c* camera = dCam_getBody(); cXyz unkXyz1; - switch (field_0x744) { + switch (mMode) { case 0: { current.pos.set(5750.0f, 1600.0f, 6100.0f); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); eventInfo.onCondition(2); - return; } camera->Stop(); camera->SetTrimSize(3); - field_0x744 = 10; - + mMode = 10; break; } case 10: { - Z2GetAudioMgr()->setDemoName(field_0x760); + Z2GetAudioMgr()->setDemoName(mDemoName); current.pos.set(5750.0f, 1600.0f, 6100.0f); - setBck(0xf, 0x02, 10.0f, 1.0f); - field_0x698.set(2900.0f, 300.0f, 500.0f); - field_0x68c = current.pos; - field_0x6d4 = 70.0f; + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 0x02, 10.0f, 1.0f); + mDemoCamEye.set(2900.0f, 300.0f, 500.0f); + mDemoCamCenter = current.pos; + mDemoCamFovy = 70.0f; field_0x6a4.set(3630.0f, 300.0f, 600.0f); shape_angle.x = current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); - field_0x744 = 1; + mMode = 1; field_0x712 = 0; - field_0x728 = 0x50; - field_0x6f8 = 50.0f; + field_0x728 = 80; + mFlySpeed = 50.0f; } case 1: { - if (field_0x728 == 0x46) { - if (field_0x6e7 == 0x01) { + if (field_0x728 == 70) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); } } - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - field_0x744 = 2; - field_0x728 = 0x28; + mMode = 2; + field_0x728 = 40; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 9); - break; } case 2: { - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); cLib_chaseAngleS(&shape_angle.x, 0, 0x80); current.angle.x = shape_angle.x; if (field_0x728 == 0) { setRideOff(); - field_0x744 = 3; + mMode = 3; field_0x728 = 90; } else { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 9); @@ -3057,32 +3047,31 @@ void daKago_c::executeLandingBoartHouse() { field_0x6cc = 40.0f; field_0x6d0 = 15.0f; - break; } case 3: { unkXyz1.set(3440.0f, 500.0f, 400.0f); - cLib_chasePos(&field_0x68c, unkXyz1, field_0x6cc); - if (field_0x68c.abs(unkXyz1) < 500.0f) { + cLib_chasePos(&mDemoCamCenter, unkXyz1, field_0x6cc); + if (mDemoCamCenter.abs(unkXyz1) < 500.0f) { cLib_chaseF(&field_0x6cc, 0.0f, 3.0f); } unkXyz1.set(3584.0f, 270.0f, 1007.0f); - cLib_chasePos(&field_0x698, unkXyz1, field_0x6d0); - if (field_0x698.abs(unkXyz1) < 200.0f) { + cLib_chasePos(&mDemoCamEye, unkXyz1, field_0x6d0); + if (mDemoCamEye.abs(unkXyz1) < 200.0f) { cLib_chaseF(&field_0x6d0, 0.0f, 1.0f); } else { cLib_chaseF(&field_0x6d0, 15.0f, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - cLib_chaseAngleS(&shape_angle.x, -8192, 0x100); + cLib_chaseAngleS(&shape_angle.x, -0x2000, 0x100); current.angle.x = shape_angle.x; - if (field_0x728 == 0x50) { - if (field_0x6e7 == 0x01) { + if (field_0x728 == 80) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -3090,10 +3079,10 @@ void daKago_c::executeLandingBoartHouse() { } if (field_0x728 == 0) { - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); - if (field_0x6e7 == 0x01) { - field_0x728 = 0x78; + if (mType == TYPE_NORMAL) { + field_0x728 = 120; } camera->Reset(); @@ -3103,44 +3092,42 @@ void daKago_c::executeLandingBoartHouse() { dComIfGp_event_reset(); Z2GetAudioMgr()->setDemoName(NULL); - return; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 10); - break; } } - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); } void daKago_c::executeLanding() { - if (this->field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { executeLandingLakeHairia(); - } else if (this->field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { executeLandingBoartHouse(); } else { setRideOff(); - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); } } void daKago_c::moveDemoFly() { - if (field_0x744 == 0) { - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 2.0f); + if (mMode == 0) { + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 2.0f); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); } else { setPlayerRideOn(); mDashCooldownTime = (int)l_HIO.mDashCooldownTime; mDashTime = (int)l_HIO.mDashTime; - field_0x744 = 1; + mMode = 1; setDashBlurEffect(0); - setBck(11, 0, 5.0f, l_HIO.mDashTimeMultiplier); + setBck(dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e, 0, 5.0f, l_HIO.mDashTimeMultiplier); dComIfGp_getVibration().StartShock(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mpLockActor = NULL; @@ -3148,9 +3135,8 @@ void daKago_c::moveDemoFly() { mGroundHeight = checkGroundHeight(current.pos, NULL); mRoofHeight = checkRoofHeight(current.pos); - if (mCurrentAction == 9) { + if (mAction == ACTION_DEMO_FLY_e) { dComIfGs_onSaveSwitch(9); - mMsgFlow.init(this, 0xbbf, 0, NULL); } } @@ -3159,75 +3145,72 @@ void daKago_c::moveDemoFly() { mIsFlying = true; - if (mCurrentAction == 9) { + if (mAction == ACTION_DEMO_FLY_e) { mMsgFlow.doFlow(this, NULL, 0); } - if (field_0x744 < 6) { - setDashEffect(); - field_0x6dd = 0x01; - - dComIfGp_setAStatusForce(0x27, 0); + if (mMode < 6) { + setDashEffect(); + mIsAttack = TRUE; + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } - switch (field_0x744) { + switch (mMode) { case 1: { - Z2GetAudioMgr()->setDemoName(field_0x760); - - field_0x744 = 2; + Z2GetAudioMgr()->setDemoName(mDemoName); + mMode = 2; } case 2: { - cLib_chaseF(&field_0x6f8, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); - if (mpMorf->checkFrame(9.0f)) { - if (field_0x6e7 == 0) { + cLib_chaseF(&mFlySpeed, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); + if (mAnm_p->checkFrame(9.0f)) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_DASH, 0, -1); } else { mSound.startCreatureSound(Z2SE_EN_KC_DASH, 0, -1); } } - if (mpMorf->checkFrame(12.0f)) { - field_0x744 = 3; - field_0x728 = 0x14; + + if (mAnm_p->checkFrame(12.0f)) { + mMode = 3; + field_0x728 = 20; dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); field_0x6e6 = 0; } - break; } case 3: case 4: { - cLib_chaseF(&field_0x6f8, 100.0f, 5.0f); + cLib_chaseF(&mFlySpeed, 100.0f, 5.0f); if (field_0x728 == 0) { - if (field_0x744 == 3) { - field_0x744 = 4; - field_0x728 = 0xf; + if (mMode == 3) { + mMode = 4; + field_0x728 = 15; } else { - field_0x744 = 5; + mMode = 5; dComIfGp_getVibration().StopQuake(0x1f); } } - break; } case 5: { - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 5.0f); - if (field_0x6f8 <= l_HIO.mFlightSpeed) { + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 5.0f); + if (mFlySpeed <= l_HIO.mFlightSpeed) { field_0x6c8 = 0; field_0x6c4 = 8000.0f; field_0x710 = field_0x712 = 0; -#if VERSION == VERSION_WII_USA_R0 + #if VERSION == VERSION_WII_USA_R0 field_0x72c = 30; -#else + #else if (dComIfGp_getStartStagePoint() == 0) { field_0x72c = 30; } else { field_0x72c = 60 + nREG_S(1); } -#endif + #endif shape_angle.y = current.angle.y; @@ -3237,9 +3220,8 @@ void daKago_c::moveDemoFly() { setFlyAnime(); field_0x710 = field_0x712 = 0; - field_0x744 = 6; + mMode = 6; } - break; } case 6: { @@ -3249,32 +3231,30 @@ void daKago_c::moveDemoFly() { f32 fVar11 = 0.0f; if (cM_ssin(current.angle.x) > 0.0f) { - fVar11 = - l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); + fVar11 = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); } else { fVar11 = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); } - if (std::abs(field_0x6f8 - fVar11) > 10.0f) { - cLib_chaseF(&field_0x6f8, fVar11, 2.0f); + if (std::abs(mFlySpeed - fVar11) > 10.0f) { + cLib_chaseF(&mFlySpeed, fVar11, 2.0f); } else { - cLib_chaseF(&field_0x6f8, fVar11, 1.0f); + cLib_chaseF(&mFlySpeed, fVar11, 1.0f); } if (field_0x72c == 0) { - setActionMode(0, 0); + setActionMode(ACTION_FLY_e, 0); dComIfGp_event_reset(); Z2GetAudioMgr()->setDemoName(NULL); return; } - break; } } } - cXyz unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - cXyz unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + cXyz unkXyz1 = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + cXyz unkXyz2 = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; s16 targetYaw = field_0x714 = cLib_targetAngleY(&unkXyz2, &unkXyz1); if (dComIfGp_getStartStagePoint() == 0) { @@ -3288,13 +3268,13 @@ void daKago_c::moveDemoFly() { cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(&unkXyz2, &unkXyz1), 8, 0x40, 0x10); shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); f32 nextPath = checkNextPath(unkXyz1); if (nextPath < 0.0f) { if (abs((s16)(targetYaw - cLib_targetAngleY(&unkXyz2, ¤t.pos))) < 0x4000) { - mPathIdx += this->mPathIdxOffset; + mPathCurrentPointNo += mPathStep; if (checkFlySceneChange()) { return; } @@ -3303,41 +3283,41 @@ void daKago_c::moveDemoFly() { } void daKago_c::setFlyEffect() { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { return; } - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); JPABaseEmitter* emitter; - field_0xb30 = dComIfGp_particle_set(field_0xb30, 0x8607, ¤t.pos, &tevStr); + field_0xb30 = dComIfGp_particle_set(field_0xb30, dPa_RM(ID_ZF_S_YCFLY_HANDLR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb30); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDL_2_e)); } - field_0xb34 = dComIfGp_particle_set(field_0xb34, 0x8607, ¤t.pos, &tevStr); + field_0xb34 = dComIfGp_particle_set(field_0xb34, dPa_RM(ID_ZF_S_YCFLY_HANDLR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb34); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDR_2_e)); } } void daKago_c::setDashEffect() { - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); JPABaseEmitter* emitter; - if (field_0x6e7 == 0) { - field_0xb38 = dComIfGp_particle_set(field_0xb38, 0x8609, ¤t.pos, &tevStr); - emitter = dComIfGp_particle_getEmitter(this->field_0xb38); + if (mType == TYPE_TWILIGHT) { + field_0xb38 = dComIfGp_particle_set(field_0xb38, dPa_RM(ID_ZF_S_YCDASH_HANDL2), ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb38); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDL_2_e)); } - field_0xb3c = dComIfGp_particle_set(field_0xb3c, 0x860a, ¤t.pos, &tevStr); + field_0xb3c = dComIfGp_particle_set(field_0xb3c, dPa_RM(ID_ZF_S_YCDASH_HANDR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb3c); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDR_2_e)); } } @@ -3345,25 +3325,27 @@ void daKago_c::setDashEffect() { } void daKago_c::setDamageEffect() { - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); JPABaseEmitter* emitter; - if (field_0x6e7 != 1) { - field_0xb38 = dComIfGp_particle_set(field_0xb38, 0x8603, ¤t.pos, &tevStr); - emitter = dComIfGp_particle_getEmitter(this->field_0xb38); + if (mType != TYPE_NORMAL) { + field_0xb38 = dComIfGp_particle_set(field_0xb38, dPa_RM(ID_ZF_S_YCDAMAGE00_HANDLR2), ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb38); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDL_2_e)); } - field_0xb3c = dComIfGp_particle_set(field_0xb3c, 0x8603, ¤t.pos, &tevStr); + field_0xb3c = dComIfGp_particle_set(field_0xb3c, dPa_RM(ID_ZF_S_YCDAMAGE00_HANDLR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb3c); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDR_2_e)); } } } void daKago_c::setDashBlurEffect(int param_0) { + UNUSED(param_0); + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz cameraEye = dCam_getBody()->Eye(); cXyz cameraEyeOffset; @@ -3381,51 +3363,53 @@ void daKago_c::setDashBlurEffect(int param_0) { cameraEyeOffset = cameraEye + local_78; - local_94.set((s16)cLib_targetAngleX(&field_0x6b0, &cameraEye), (s16)cLib_targetAngleY(&field_0x6b0, &cameraEye), 0); + local_94.set((s16)cLib_targetAngleX(&mPrevCamEye, &cameraEye), (s16)cLib_targetAngleY(&mPrevCamEye, &cameraEye), 0); if (l_HIO.mAngleTrackingMode == 0) { field_0x6be.x = -local_94.x; field_0x6be.y = local_94.y; field_0x6be.z = 0; } else { - field_0x6be.x = shape_angle.x * (0.5f + XREG_F(0x13)); + field_0x6be.x = shape_angle.x * (0.5f + XREG_F(19)); field_0x6be.y = shape_angle.y; field_0x6be.z = 0; } - field_0xb40 = dComIfGp_particle_set(field_0xb40, 0x860f, &cameraEyeOffset, &tevStr, &field_0x6be, 0, 0xff, 0, -1, 0, 0, 0); + + field_0xb40 = dComIfGp_particle_set(field_0xb40, dPa_RM(ID_ZF_S_YCSPEED), &cameraEyeOffset, &tevStr, &field_0x6be, NULL, 0xff, NULL, -1, NULL, NULL, NULL); } -void daKago_c::setWallHitEffect(cXyz param_0, int param_1) { +void daKago_c::setWallHitEffect(cXyz i_pos, int i_effType) { // might be a 2D array? static u16 kago_wall_hit_id[6] = { - 0x8658, - 0x86F9, - 0x86FA, - 0x8659, - 0x86FB, - 0x86FC, + dPa_RM(ID_ZF_S_YCHITA), + dPa_RM(ID_ZF_S_YCHITA_1), + dPa_RM(ID_ZF_S_YCHITA_2), + + dPa_RM(ID_ZF_S_YCHITB), + dPa_RM(ID_ZF_S_YCHITB_1), + dPa_RM(ID_ZF_S_YCHITB_2), }; for (int i = 0; i < 3; i++) { - dComIfGp_particle_set(kago_wall_hit_id[i + param_1 * 3], ¶m_0, &tevStr, 0, 0); + dComIfGp_particle_set(kago_wall_hit_id[i + i_effType * 3], &i_pos, &tevStr, NULL, NULL); } } void daKago_c::setSibukiEffect() { static u16 kago_wave_id[3] = { - 0x865A, - 0x865B, - 0x865C, + dPa_RM(ID_ZF_S_YCWAVE00_WAVE), + dPa_RM(ID_ZF_S_YCWAVE01_SPLASH), + dPa_RM(ID_ZF_S_YCWAVE02_DROP), }; - cXyz acStack_28(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); - csXyz cStack_30(0, shape_angle.y, 0); + cXyz effpos(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); + csXyz effrot(0, shape_angle.y, 0); for (int i = 0; i < 3; i++) { - field_0xb44[i] = - dComIfGp_particle_set(field_0xb44[i], kago_wave_id[i], &acStack_28, &tevStr, &cStack_30, - 0, 0xff, 0, -1, 0, 0, 0); + mSibukiEmitterIDs[i] = + dComIfGp_particle_set(mSibukiEmitterIDs[i], kago_wave_id[i], &effpos, &tevStr, &effrot, + NULL, 0xff, NULL, -1, NULL, NULL, NULL); } - if (field_0x6e7 == 0) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSoundLevel(Z2SE_EN_YC_SPLASH, 0, -1); } else { mSound.startCreatureSoundLevel(Z2SE_EN_KC_SPLASH, 0, -1); @@ -3433,40 +3417,40 @@ void daKago_c::setSibukiEffect() { } void daKago_c::setDashSibukiEffect() { - cXyz acStack_20(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); - csXyz cStack_28(0, shape_angle.y, 0); - field_0xb50 = dComIfGp_particle_set(field_0xb50, 0x86fe, &acStack_20, &tevStr, &cStack_28, 0, - 0xff, 0, -1, 0, 0, 0); + cXyz effpos(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); + csXyz effrot(0, shape_angle.y, 0); + mDashSibukiEmitterID = dComIfGp_particle_set(mDashSibukiEmitterID, dPa_RM(ID_ZF_S_YCWAVE03_SPLASH), &effpos, &tevStr, &effrot, NULL, + 0xff, NULL, -1, NULL, NULL, NULL); } void daKago_c::setWaterFallEffect() { static u16 kago_wave_id[2] = { - 0x865B, - 0x865C, + dPa_RM(ID_ZF_S_YCWAVE01_SPLASH), + dPa_RM(ID_ZF_S_YCWAVE02_DROP), }; - cXyz acStack_28(current.pos.x, current.pos.y, current.pos.z); - csXyz cStack_30(0, shape_angle.y, 0); + cXyz effpos(current.pos.x, current.pos.y, current.pos.z); + csXyz effrot(0, shape_angle.y, 0); for (int i = 0; i < 2; i++) { - field_0xb44[i] = - dComIfGp_particle_set(field_0xb44[i], kago_wave_id[i], &acStack_28, &tevStr, &cStack_30, - 0, 0xff, 0, -1, 0, 0, 0); + mSibukiEmitterIDs[i] = + dComIfGp_particle_set(mSibukiEmitterIDs[i], kago_wave_id[i], &effpos, &tevStr, &effrot, + NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } - if (field_0x6e7 == 0) { + + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSoundLevel(Z2SE_EN_YC_SPLASH, 0, -1); } else { mSound.startCreatureSoundLevel(Z2SE_EN_KC_SPLASH, 0, -1); } } -static void* s_waterfall(void* param_0, void* param_1) { - if (fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_Tag_WaterFall) { - if (!fpcM_IsCreating(fopAcM_GetID(param_0))) { - if (((daTagWaterFall_c*)param_0) - ->checkHitWaterFall(((fopAc_ac_c*)param_1)->current.pos)) +static void* s_waterfall(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Tag_WaterFall) { + if (!fpcM_IsCreating(fopAcM_GetID(i_actor))) { + if (((daTagWaterFall_c*)i_actor)->checkHitWaterFall(((fopAc_ac_c*)i_data)->current.pos)) { - ((daKago_c*)param_1)->onWaterFall(); - return param_0; + ((daKago_c*)i_data)->onWaterFall(); + return i_actor; } } } @@ -3475,44 +3459,46 @@ static void* s_waterfall(void* param_0, void* param_1) { } void daKago_c::setFlySound() { + BOOL isPlayWingSound; + if (field_0x6de != 0) { - BOOL unkFlag1 = FALSE; - if (checkBck(9) || checkBck(15)) { - if (field_0x6e7 == 0) { - if (mpMorf->checkFrame(27.0f)) { - unkFlag1 = TRUE; + isPlayWingSound = FALSE; + if (checkBck(dRes_ID_E_YC_BCK_YC_FLY_e) || checkBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e)) { + if (mType == TYPE_TWILIGHT) { + if (mAnm_p->checkFrame(27.0f)) { + isPlayWingSound = TRUE; } } else { - if (mpMorf->checkFrame(29.0f)) { - unkFlag1 = TRUE; + if (mAnm_p->checkFrame(29.0f)) { + isPlayWingSound = TRUE; } } - } else if (checkBck(21)) { - if (mpMorf->checkFrame(10.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_HOVERING_e)) { + if (mAnm_p->checkFrame(10.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(6)) { - if (mpMorf->checkFrame(26.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_CATCH_START_e)) { + if (mAnm_p->checkFrame(26.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(5)) { - if (mpMorf->checkFrame(10.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_CATCH_MIDDLE_e)) { + if (mAnm_p->checkFrame(10.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(4)) { - if (mpMorf->checkFrame(10.0f) || mpMorf->checkFrame(35.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_CATCH_END_e)) { + if (mAnm_p->checkFrame(10.0f) || mAnm_p->checkFrame(35.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(12) || checkBck(13)) { - if (field_0x6e7 == 0) { + } else if (checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_e) || checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e)) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSoundLevel(Z2SE_EN_YC_GLIDE, 0, -1); } else { mSound.startCreatureSoundLevel(Z2SE_EN_KC_GLIDE, 0, -1); } } - if (unkFlag1) { - if (field_0x6e7 == 0) { + if (isPlayWingSound) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_WING, 0, -1); } else { mSound.startCreatureSound(Z2SE_EN_KC_WING, 0, -1); @@ -3526,78 +3512,78 @@ void daKago_c::action() { checkSizeBg(); setFlyEffect(); - field_0x6f0 = mDoCPd_c::getStickX3D(0); - field_0x6f4 = mDoCPd_c::getStickY(0); + mStickX = mDoCPd_c::getStickX3D(PAD_1); + mStickY = mDoCPd_c::getStickY(PAD_1); - u32 unkInt1 = field_0x6ea; - field_0x6ea = 0; + u8 prevIsWaterfall = mIsWaterfall; + mIsWaterfall = FALSE; fpcM_Search(s_waterfall, this); - if (field_0x6ea != 0) { - if (unkInt1 == 0) { + if (mIsWaterfall) { + if (!prevIsWaterfall) { current.angle.x = 0x1000; dComIfGp_getVibration().StartQuake(3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } - field_0x6f0 = field_0x6f0 * 0.5f; + mStickX = mStickX * 0.5f; - if (field_0x6f4 < 0.0f) { - field_0x6f4 = field_0x6f4 * 0.5f; + if (mStickY < 0.0f) { + mStickY = mStickY * 0.5f; } else { - field_0x6f4 = field_0x6f4 * 1.5f; + mStickY = mStickY * 1.5f; } setWaterFallEffect(); - } else if (unkInt1 != 0) { + } else if (prevIsWaterfall) { dComIfGp_getVibration().StopQuake(0x1f); } - field_0x6dd = 0; + mIsAttack = FALSE; - switch (mCurrentAction) { - case 0: + switch (mAction) { + case ACTION_FLY_e: executeFly(); break; - case 1: + case ACTION_STAGGER_e: executeStagger(); break; - case 2: + case ACTION_EVENT_e: executeEvent(); break; - case 3: + case ACTION_PERCH_e: executePerch(); break; - case 4: + case ACTION_WAIT_e: executeWait(); break; - case 5: + case ACTION_ATTACK_e: executeAttack(); break; - case 6: + case ACTION_EVENT2_e: executeEvent2(); break; - case 7: + case ACTION_PERCH2_e: executePerch2(); break; - case 8: + case ACTION_LANDING_e: executeLanding(); break; - case 9: + case ACTION_DEMO_FLY_e: moveDemoFly(); break; - case 10: + case ACTION_DEMO_FLY2_e: moveDemoFly(); break; } - if (field_0x6e7 == 1 && (mCurrentAction == 0 || mCurrentAction == 5)) { + if (mType == TYPE_NORMAL && (mAction == ACTION_FLY_e || mAction == ACTION_ATTACK_e)) { mSph.OnAtSetBit(); } setFlySound(); if (daPy_getPlayerActorClass()->checkCargoCarry()) { - if (mCurrentAction == 9 || mCurrentAction == 10) { + if (mAction == ACTION_DEMO_FLY_e || mAction == ACTION_DEMO_FLY2_e) { dCam_getBody()->SetTrimTypeForce(2); } else if (isAttack()) { dCam_getBody()->SetTrimTypeForce(0); @@ -3605,19 +3591,20 @@ void daKago_c::action() { } } - fopAcM_posMoveF(this, 0); + fopAcM_posMoveF(this, NULL); + if (field_0x6dc == 0) { mObjAcch.CrrPos(dComIfG_Bgsp()); } - if (mpMorf != NULL) { - mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if (mAnm_p != NULL) { + mAnm_p->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } field_0x674 = current.pos; if (cLib_chaseF(&field_0x6c4, 0.0f, 60.0f) == 0) { - field_0x6c8 = field_0x6c8 + 0x800; + ANGLE_ADD(field_0x6c8, 0x800); } field_0x6ca = field_0x6c4 * cM_ssin(field_0x6c8); @@ -3628,11 +3615,11 @@ void daKago_c::mtx_set() { mDoMtx_stack_c::ZXYrotM(shape_angle); mDoMtx_stack_c::scaleM(l_HIO.mBasicSize,l_HIO.mBasicSize,l_HIO.mBasicSize); - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); model->setBaseTRMtx(mDoMtx_stack_c::get()); - mpMorf->modelCalc(); + mAnm_p->modelCalc(); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x1c)); + mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(YC_JNT_LEGR_3_e)); mDoMtx_stack_c::ZrotM(field_0x6ca); cMtx_copy(mDoMtx_stack_c::get(), mLegR3Mtx); } @@ -3654,7 +3641,7 @@ void daKago_c::cc_set() { int daKago_c::execute() { if (executeBalloonMenu()) { #if VERSION != VERSION_SHIELD_DEBUG - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); #endif return 1; } @@ -3667,24 +3654,27 @@ int daKago_c::execute() { field_0x72c--; } - if (field_0x720 != 0) { - field_0x720--; + if (mWallHitInvulnTimer != 0) { + mWallHitInvulnTimer--; } + if (mDashCooldownTime != 0) { mDashCooldownTime--; } - if (field_0x71c != 0) { - field_0x71c--; + + if (mWaterSplashTimer != 0) { + mWaterSplashTimer--; } - if (field_0x6ed != 0) { - field_0x6ed--; + + if (unk_0x6ed != 0) { + unk_0x6ed--; } action(); mtx_set(); cc_set(); - field_0x6b0 = dCam_getBody()->Eye(); + mPrevCamEye = dCam_getBody()->Eye(); return 1; } @@ -3698,9 +3688,9 @@ static int daKago_IsDelete(daKago_c* i_this) { } int daKago_c::_delete() { - dComIfG_resDelete(&mPhase, field_0x75c); + dComIfG_resDelete(&mPhase, mArcName); - if (field_0xb54 != 0) { + if (mIsHioSet != 0) { hio_set = false; mDoHIO_DELETE_CHILD(l_HIO.mChild); } @@ -3717,65 +3707,64 @@ static int daKago_Delete(daKago_c* i_this) { return i_this->_delete(); } -int daKago_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - J3DJoint* joint = param_0; +int daKago_c::ctrlJoint(J3DJoint* i_joint, J3DModel* param_1) { + J3DJoint* joint = i_joint; int jointNo = joint->getJntNo(); mDoMtx_stack_c::copy(param_1->getAnmMtx(jointNo)); - if (jointNo == 3 || jointNo == 5 || jointNo == 6) { - mDoMtx_stack_c::YrotM(field_0x71a); - mDoMtx_stack_c::ZrotM(field_0x718); + if (jointNo == YC_JNT_NECK1_e || jointNo == YC_JNT_NECK2_e || jointNo == YC_JNT_HEAD_e) { + mDoMtx_stack_c::YrotM(mHeadRotY); + mDoMtx_stack_c::ZrotM(mHeadRotZ); } param_1->setAnmMtx(jointNo,mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(),J3DSys::mCurrentMtx); - return 1; } -int daKago_c::JointCallBack(J3DJoint* param_0, int param_1) { +int daKago_c::JointCallBack(J3DJoint* i_joint, int param_1) { if (param_1 == 0) { J3DModel* model = j3dSys.getModel(); daKago_c* kago = (daKago_c*)model->getUserArea(); if (kago != NULL) { - kago->ctrlJoint(param_0, model); + kago->ctrlJoint(i_joint, model); } } + return 1; } int daKago_c::CreateHeap() { J3DModelData* modelData; - if (field_0x6e7 == 0) { - modelData = (J3DModelData*)dComIfG_getObjectRes(field_0x75c, 0x18); + if (mType == TYPE_TWILIGHT) { + modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, dRes_ID_E_YC_BMD_YC_e); } else { - modelData = (J3DModelData*)dComIfG_getObjectRes(field_0x75c, 0x10); + modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, dRes_ID_E_KC_BMD_KC_e); } - JUT_ASSERT(0x139f, modelData != NULL); - - mpMorf = new mDoExt_McaMorfSO( - modelData, NULL, NULL, - (J3DAnmTransform*)dComIfG_getObjectRes(field_0x75c, getBckName(9)), 2, 1.0f, 0, -1, &this->mSound, 0x80000, 0x11000084); + JUT_ASSERT(5023, modelData != NULL); - if (mpMorf == NULL || mpMorf->getModel() == NULL) { + mAnm_p = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes(mArcName, getBckName(dRes_ID_E_YC_BCK_YC_FLY_e)), 2, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); + if (mAnm_p == NULL || mAnm_p->getModel() == NULL) { return 0; } - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); model->setUserArea((uintptr_t)this); for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { - if (i == 3 || i == 5 || i == 6) { + if (i == YC_JNT_NECK1_e || i == YC_JNT_NECK2_e || i == YC_JNT_HEAD_e) { model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); } } + return 1; } -static int useHeapInit(fopAc_ac_c* param_0) { - daKago_c* kago = (daKago_c*)param_0; - return kago->CreateHeap(); +static int useHeapInit(fopAc_ac_c* actor) { + daKago_c* i_this = (daKago_c*)actor; + return i_this->CreateHeap(); } int daKago_c::create() { @@ -3786,39 +3775,40 @@ int daKago_c::create() { mpPath1 = dPath_GetRoomPath(param & 0xff, fopAcM_GetRoomNo(this)); if (mpPath1 == NULL) { OS_REPORT("KAGO ......NONONONONONO PATH !!!!\n"); - return 5; + return cPhs_ERROR_e; } } - field_0x6e7 = (fopAcM_GetParam(this) >> 16) & 0xff; - if (field_0x6e7 == 0xff) { - field_0x6e7 = 0; + mType = (fopAcM_GetParam(this) >> 16) & 0xff; + if (mType == 0xFF) { + mType = TYPE_TWILIGHT; } - if (field_0x6e7 == 0) { - field_0x75c = "E_YC"; - field_0x760 = "KAGO_YAMI"; + + if (mType == TYPE_TWILIGHT) { + mArcName = "E_YC"; + mDemoName = "KAGO_YAMI"; } else { - field_0x75c = "E_KC"; - field_0x760 = "KAGO_HIKARI"; + mArcName = "E_KC"; + mDemoName = "KAGO_HIKARI"; } - int phase_state = dComIfG_resLoad(&mPhase, field_0x75c); + int phase_state = dComIfG_resLoad(&mPhase, mArcName); if (phase_state == cPhs_COMPLEATE_e) { OS_REPORT("Kago PARAM %x \n", fopAcM_GetParam(this)); - if (fopAcM_entrySolidHeap(this, useHeapInit, 0x23a0) == 0) { + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x23a0)) { return cPhs_ERROR_e; } - if (hio_set == 0) { - field_0xb54 = 1; - hio_set = 1; - l_HIO.mChild = mDoHIO_CREATE_CHILD("", &l_HIO); + if (!hio_set) { + mIsHioSet = TRUE; + hio_set = TRUE; + l_HIO.mChild = mDoHIO_CREATE_CHILD("カーゴロック(いい奴)", &l_HIO); } attention_info.flags = 0; - fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); @@ -3841,16 +3831,16 @@ int daKago_c::create() { maxFallSpeed = -100.0f; gravity = 0.0f; - mPathIdxOffset = 0x01; + mPathStep = 1; - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); #if DEBUG - if (mDoCPd_c::getHoldL(0) && mDoCPd_c::getHoldR(0)) { - dComIfGs_offSwitch(0x2d, fopAcM_GetRoomNo(this)); - dComIfGs_offSwitch(0x32, fopAcM_GetRoomNo(this)); + if (mDoCPd_c::getHoldL(PAD_1) && mDoCPd_c::getHoldR(PAD_1)) { + dComIfGs_offSwitch(45, fopAcM_GetRoomNo(this)); + dComIfGs_offSwitch(50, fopAcM_GetRoomNo(this)); - setActionMode(8, 0); + setActionMode(ACTION_LANDING_e, 0); setMidnaRideOn(); setPlayerRideOn(); @@ -3860,19 +3850,19 @@ int daKago_c::create() { } #endif - field_0x73c = 3; + mSceneType = SCENE_TYPE_DEFAULT; if (strcmp("F_SP115", dComIfGp_getStartStageName()) == 0) { if (dComIfGp_getStartStageRoomNo() == 0) { - field_0x73c = 0; + mSceneType = SCENE_TYPE_LAKE_HYLIA; } } else if (strcmp("F_SP112", dComIfGp_getStartStageName()) == 0) { if (dComIfGp_getStartStageRoomNo() == 1) { - field_0x73c = 1; + mSceneType = SCENE_TYPE_RIVER; } } else if (strcmp("F_SP126", dComIfGp_getStartStageName()) == 0 && dComIfGp_getStartStageRoomNo() == 0) { - field_0x73c = 2; + mSceneType = SCENE_TYPE_BOARD_HOUSE; } mBalloon2DId = fpcM_ERROR_PROCESS_ID_e; @@ -3885,8 +3875,8 @@ int daKago_c::create() { return phase_state; } -static int daKago_Create(daKago_c* param_0) { - return param_0->create(); +static int daKago_Create(daKago_c* i_this) { + return i_this->create(); } static actor_method_class l_daKago_Method = { diff --git a/src/d/actor/d_a_mg_fshop.cpp b/src/d/actor/d_a_mg_fshop.cpp index f24db03e89..cd3ff1ef19 100644 --- a/src/d/actor/d_a_mg_fshop.cpp +++ b/src/d/actor/d_a_mg_fshop.cpp @@ -1778,7 +1778,7 @@ actor_process_profile_definition g_profile_FSHOP = { fpcPi_CURRENT_e, // mListPrio PROC_FSHOP, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00006B80, // mSize + sizeof(fshop_class), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_npc_wrestler.cpp b/src/d/actor/d_a_npc_wrestler.cpp index e385f97b43..8143b8c1af 100644 --- a/src/d/actor/d_a_npc_wrestler.cpp +++ b/src/d/actor/d_a_npc_wrestler.cpp @@ -5226,7 +5226,7 @@ actor_process_profile_definition g_profile_NPC_WRESTLER = { fpcPi_CURRENT_e, // mListPrio PROC_NPC_WRESTLER, // mProcName &g_fpcLf_Method.base, // sub_method - 0xEA0, // mSize (fix this) + sizeof(daNpcWrestler_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_obj_volcball.cpp b/src/d/actor/d_a_obj_volcball.cpp index faad909e12..6c02a2311b 100644 --- a/src/d/actor/d_a_obj_volcball.cpp +++ b/src/d/actor/d_a_obj_volcball.cpp @@ -618,7 +618,7 @@ actor_process_profile_definition g_profile_Obj_VolcanicBall = { fpcPi_CURRENT_e, // mListPrio PROC_Obj_VolcanicBall, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00002928, // mSize + sizeof(daObjVolcBall_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index a54cc0ec55..1baf13362a 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -11212,7 +11212,7 @@ camera_process_profile_definition g_profile_CAMERA = { fpcPi_CURRENT_e, PROC_CAMERA, &g_fpcLf_Method.base, - sizeof(dCamera_c), + sizeof(camera_class), 0, 0, &g_fopVw_Method, @@ -11233,7 +11233,7 @@ camera_process_profile_definition g_profile_CAMERA2 = { fpcPi_CURRENT_e, PROC_CAMERA2, &g_fpcLf_Method.base, - sizeof(dCamera_c), + sizeof(camera_class), 0, 0, &g_fopVw_Method, diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 253ef224cb..1f37fc6fe4 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -1287,7 +1287,7 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_arcNa static int (*l_method[3])(void*) = {(int (*)(void*))phase_1, (int (*)(void*))phase_2, (int (*)(void*))phase_3}; - if (i_phase->id == cPhs_NEXT_e) { + if (i_phase->id == 2) { return cPhs_COMPLEATE_e; } @@ -1335,7 +1335,7 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resNa static int (*l_method[3])(void*) = {(int (*)(void*))phase_01, (int (*)(void*))phase_02, (int (*)(void*))phase_03}; - if (i_phase->id == cPhs_NEXT_e) { + if (i_phase->id == 2) { return cPhs_COMPLEATE_e; } @@ -1352,12 +1352,12 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resNa */ int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* i_resName) { JUT_ASSERT(1889, i_phase->id != 1); - if (i_phase->id != cPhs_NEXT_e) { + if (i_phase->id != 2) { return 0; } int r30 = dComIfG_deleteObjectResMain(i_resName); - i_phase->id = cPhs_INIT_e; + i_phase->id = 0; return 1; } diff --git a/src/d/d_path.cpp b/src/d/d_path.cpp index fb15758e06..a01cfdc8a6 100644 --- a/src/d/d_path.cpp +++ b/src/d/d_path.cpp @@ -111,3 +111,22 @@ u8 dPath_GetPolyRoomPathVec(cBgS_PolyInfo const& poly, cXyz* p_pathVec, int* par return 1; } + +#if VERSION == VERSION_SHIELD_DEBUG +void dPath_Ct() { + #if DEBUG + #endif +} + +void dPath_Dt() { + #if DEBUG + #endif +} + +void dPath_Move() {} + +void dPath_Draw() { + #if DEBUG + #endif +} +#endif diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 7a2e5303f7..663d98e425 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -18,12 +18,32 @@ #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" #include <cstring> +#include "m_Do/m_Do_main.h" +#include "JSystem/JUtility/JUTConsole.h" -#if PLATFORM_WII +#if !PLATFORM_GCN +#include <revolution/os.h> +#include <revolution/sc.h> +#include "m_Do/m_Do_Reset.h" + +#include "res/Object/LogoUsWii.h" +#endif + +#if PLATFORM_WII || VERSION == VERSION_SHIELD +#include "m_Re/m_Re_controller_pad.h" #include "d/d_cursor_mng.h" +#include "d/d_home_button.h" + +struct homeBtnData { + /* 0x0 */ int region; + /* 0x4 */ const char* path; +}; #endif -#if VERSION == VERSION_GCN_JPN +#if VERSION == VERSION_SHIELD +#define LOGO_ARC "LogoUs" +#define MSG_PATH "/res/Msgcn/bmgres.arc" +#elif VERSION == VERSION_GCN_JPN #define LOGO_ARC "Logo" #define MSG_PATH "/res/Msgjp/bmgres.arc" #elif VERSION == VERSION_GCN_PAL @@ -42,22 +62,70 @@ #define PROGRESSIVE_MODE_ON OS_PROGRESSIVE_MODE_ON #endif -static dLog_HIO_c g_LogHIO; +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG +#define FMAP_RES_PATH "/res/LayoutRevo/fmapresR.arc" +#define DMAP_RES_PATH "/res/LayoutRevo/dmapresR.arc" +#define COLLECT_RES_PATH "/res/LayoutRevo/clctresR.arc" -typedef void (dScnLogo_c::*execFunc)(); -static execFunc l_execFunc[16] = { - &dScnLogo_c::warningInDraw, &dScnLogo_c::warningDispDraw, &dScnLogo_c::warningOutDraw, - &dScnLogo_c::nintendoInDraw, &dScnLogo_c::nintendoOutDraw, &dScnLogo_c::dolbyInDraw, - &dScnLogo_c::dolbyOutDraw, &dScnLogo_c::dolbyOutDraw2, &dScnLogo_c::progInDraw, - &dScnLogo_c::progSelDraw, &dScnLogo_c::progOutDraw, &dScnLogo_c::progSetDraw, - &dScnLogo_c::progSet2Draw, &dScnLogo_c::progChangeDraw, &dScnLogo_c::dvdWaitDraw, - &dScnLogo_c::nextSceneChange, -}; +#define MSG_COM_PATH "/res/LayoutRevo/msgcomR.arc" +#define MSG_RES0_PATH "/res/LayoutRevo/msgres00R.arc" +#define MSG_RES1_PATH "/res/LayoutRevo/msgres01R.arc" +#define MSG_RES2_PATH "/res/LayoutRevo/msgres02R.arc" +#define MSG_RES3_PATH "/res/LayoutRevo/msgres03R.arc" +#else +#define FMAP_RES_PATH "/res/Layout/fmapres.arc" +#define DMAP_RES_PATH "/res/Layout/dmapres.arc" +#define COLLECT_RES_PATH "/res/Layout/clctres.arc" + +#define MSG_COM_PATH "/res/Layout/msgcom.arc" +#define MSG_RES0_PATH "/res/Layout/msgres00.arc" +#define MSG_RES1_PATH "/res/Layout/msgres01.arc" +#define MSG_RES2_PATH "/res/Layout/msgres02.arc" +#define MSG_RES3_PATH "/res/Layout/msgres03.arc" +#endif + +#if PLATFORM_WII || PLATFORM_SHIELD +#define ICON_RES_PATH "/res/WiiBannerIcon/bannerIcon.arc" +#define PARTICLE_COM_PATH "/res/Particle/common-r.jpc" +#else +#define ICON_RES_PATH "/res/CardIcon/cardicon.arc" +#define PARTICLE_COM_PATH "/res/Particle/common.jpc" +#endif + +#if PLATFORM_WII +#define RING_RES_PATH "/res/LayoutRevo/ringresR.arc" +#define ITEM_INF_RES_PATH "/res/LayoutRevo/itmInfResR.arc" +#define BUTTON_RES_PATH "/res/LayoutRevo/buttonR.arc" +#define MAIN2D_PATH "/res/LayoutRevo/main2DR.arc" +#else +#define RING_RES_PATH "/res/Layout/ringres.arc" +#define ITEM_INF_RES_PATH "/res/Layout/itmInfRes.arc" +#define BUTTON_RES_PATH "/res/Layout/button.arc" +#define MAIN2D_PATH "/res/Layout/main2D.arc" +#endif + +class dLog_HIO_c : public JORReflexible { +public: + dLog_HIO_c(); + virtual ~dLog_HIO_c() {} + + void genMessage(JORMContext*); + + u8 field_0x4[0x8 - 0x4]; +}; // Size: 0x8 + +static dLog_HIO_c g_LogHIO; dLog_HIO_c::dLog_HIO_c() {} +#if DEBUG +void dLog_HIO_c::genMessage(JORMContext*) {} +#endif + void dScnLogo_c::preLoad_dyl_create() { m_preLoad_dylPhase = new request_of_phase_process_class[14]; + JUT_ASSERT(194, m_preLoad_dylPhase != NULL); + memset(m_preLoad_dylPhase, 0, sizeof(request_of_phase_process_class) * 14); } @@ -65,15 +133,54 @@ void dScnLogo_c::preLoad_dyl_remove() { delete[] m_preLoad_dylPhase; } +typedef void (dScnLogo_c::*execFunc)(); +static execFunc l_execFunc[] = { + &dScnLogo_c::warningInDraw, &dScnLogo_c::warningDispDraw, &dScnLogo_c::warningOutDraw, + &dScnLogo_c::nintendoInDraw, &dScnLogo_c::nintendoOutDraw, &dScnLogo_c::dolbyInDraw, + &dScnLogo_c::dolbyOutDraw, &dScnLogo_c::dolbyOutDraw2, &dScnLogo_c::progInDraw, + &dScnLogo_c::progSelDraw, &dScnLogo_c::progOutDraw, &dScnLogo_c::progSetDraw, + &dScnLogo_c::progSet2Draw, &dScnLogo_c::progChangeDraw, &dScnLogo_c::dvdWaitDraw, + &dScnLogo_c::nextSceneChange, + + #if PLATFORM_WII || PLATFORM_SHIELD + &dScnLogo_c::strapInDraw, + &dScnLogo_c::strapDispDraw, + &dScnLogo_c::strapOutDraw, + &dScnLogo_c::strapOut2Draw, + #endif + + #if VERSION == VERSION_SHIELD + &dScnLogo_c::mocInDraw, + &dScnLogo_c::mocDispDraw, + &dScnLogo_c::mocOutDraw, + &dScnLogo_c::nvLogoInDraw, + &dScnLogo_c::nvLogoDispDraw, + &dScnLogo_c::nvLogoOutDraw, + #endif +}; + static s16 const l_preLoad_dylKeyTbl[14] = { - 0x02DC, 0x02CE, 0x0221, 0x00F2, 0x021B, 0x02F4, 0x0139, - 0x015A, 0x02E4, 0x00FE, 0x0308, 0x030F, 0x00FF, 0x013F, + PROC_BG, + PROC_DEMO00, + PROC_NBOMB, + PROC_SPINNER, + PROC_Obj_LifeContainer, + PROC_CROD, + PROC_DISAPPEAR, + PROC_Tag_Attp, + PROC_MG_ROD, + PROC_BOOMERANG, + PROC_ARROW, + PROC_SUSPEND, + PROC_MIDNA, + PROC_Obj_Yousei, }; bool dScnLogo_c::preLoad_dyl() { bool ret = true; + int var_r28 = 14; - for (int i = 0; i < 14; i++) { + for (int i = 0; i < var_r28; i++) { int phase_state = cDylPhs::Link(&m_preLoad_dylPhase[i], l_preLoad_dylKeyTbl[i]); if (phase_state != cPhs_COMPLEATE_e) { @@ -84,6 +191,10 @@ bool dScnLogo_c::preLoad_dyl() { return ret; } +#if DEBUG +u8 dScnLogo_c::mOpeningCut; +#endif + void dScnLogo_c::checkProgSelect() { #if VERSION == VERSION_GCN_PAL if (mDoRst::getProgSeqFlag() == 0) { @@ -133,16 +244,34 @@ void dScnLogo_c::progSelDraw() { if (field_0x20b == 0) { if (field_0x209 == 0) { - if (mDoCPd_c::getHoldRight(PAD_1) || mDoCPd_c::getStickX(PAD_1) > 0.5f) { + #if PLATFORM_WII + if (mReCPd::getTrigRight(PAD_1) || mReCPd::getStickX(PAD_1) > 0.5f) + #else + if (mDoCPd_c::getHoldRight(PAD_1) || mDoCPd_c::getStickX(PAD_1) > 0.5f) + #endif + { + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_CURSOR_OPTION, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_MENU_CURSOR_COMMON, NULL, 0, 0); + #endif field_0x209 = 1; field_0x20e = 30; field_0x210 = field_0x20e; field_0x212 = 0; } } else { - if (mDoCPd_c::getHoldLeft(PAD_1) || mDoCPd_c::getStickX(PAD_1) < -0.5f) { + #if PLATFORM_WII + if (mReCPd::getTrigLeft(PAD_1) || mReCPd::getStickX(PAD_1) < -0.5f) + #else + if (mDoCPd_c::getHoldLeft(PAD_1) || mDoCPd_c::getStickX(PAD_1) < -0.5f) + #endif + { + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_CURSOR_OPTION, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_MENU_CURSOR_COMMON, NULL, 0, 0); + #endif field_0x209 = 0; field_0x20e = 30; field_0x210 = field_0x20e; @@ -150,16 +279,40 @@ void dScnLogo_c::progSelDraw() { } } - if (mDoCPd_c::getTrigA(PAD_1) || mTimer == 0) { + #if PLATFORM_WII + if (cAPICPad_A_TRIGGER(PAD_1) || mTimer == 0) + #else + if (mDoCPd_c::getTrigA(PAD_1) || mTimer == 0) + #endif + { if (field_0x209 == 0) { - mProgressiveSel->getPicture()->changeTexture(mProgressivePro, 0); + J2DPicture* pic = mProgressiveSel->getPicture(); + pic->changeTexture(mProgressivePro, 0); + + #if VERSION != VERSION_SHIELD setProgressiveMode(PROGRESSIVE_MODE_ON); + #endif + mDoRst::setProgChgFlag(1); + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_TALK_WIN_CLOSE, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0); + #endif } else { - mProgressiveSel->getPicture()->changeTexture(mProgressiveInter, 0); + J2DPicture* pic = mProgressiveSel->getPicture(); + pic->changeTexture(mProgressiveInter, 0); + + #if VERSION != VERSION_SHIELD setProgressiveMode(PROGRESSIVE_MODE_OFF); + #endif + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_CURSOR_CANCEL, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0); + #endif } if (mTimer > 540) { @@ -173,7 +326,12 @@ void dScnLogo_c::progSelDraw() { field_0x210 = field_0x20e; field_0x212 = 0; } + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoRst::setProgSeqFlag(0); + #else mDoRst::setProgSeqFlag(1); + #endif } } else { if (field_0x214 == 0) { @@ -224,13 +382,18 @@ void dScnLogo_c::progOutDraw() { if (mTimer == 0) { #if VERSION == VERSION_GCN_PAL - if (field_0x218 == 1 && field_0x209 == 0) { + if (field_0x218 == 1 && field_0x209 == 0) #else - if (field_0x218 != 0 && field_0x209 == 0) { + if (field_0x218 != 0 && field_0x209 == 0) #endif + { mExecCommand = EXEC_PROG_CHANGE; mTimer = 150; } else if (field_0x218 == 0 && field_0x209 != 0) { + #if PLATFORM_WII || PLATFORM_SHIELD + mTimer = 90; + mExecCommand = EXEC_NINTENDO_IN; + #else if (mDoRst::getWarningDispFlag() != 0) { mTimer = 90; mExecCommand = EXEC_NINTENDO_IN; @@ -238,6 +401,7 @@ void dScnLogo_c::progOutDraw() { mTimer = 120; mExecCommand = EXEC_WARNING_IN; } + #endif mDoGph_gInf_c::startFadeIn(30); } else { @@ -273,11 +437,22 @@ void dScnLogo_c::progSet2Draw() { } void dScnLogo_c::progChangeDraw() { + #if PLATFORM_SHIELD + OSReport("progChangeDraw"); + #endif + if (getProgressiveMode() != 0 && mTimer == 90 && field_0x209 == 0) { setRenderMode(); } if (mTimer == 0) { + #if VERSION == VERSION_SHIELD_DEBUG + mExecCommand = EXEC_STRAP_IN; + mTimer = 0; + #elif PLATFORM_WII || PLATFORM_SHIELD + mExecCommand = EXEC_STRAP_IN; + mTimer = 90; + #else if (mDoRst::getWarningDispFlag() != 0) { mTimer = 90; mExecCommand = EXEC_NINTENDO_IN; @@ -285,6 +460,7 @@ void dScnLogo_c::progChangeDraw() { mTimer = 120; mExecCommand = EXEC_WARNING_IN; } + #endif mDoGph_gInf_c::startFadeIn(30); } @@ -306,12 +482,14 @@ void dScnLogo_c::warningDispDraw() { dComIfGd_set2DOpa(mWarning); dComIfGd_set2DOpa(mWarningStart); - f32 alpha = (f32)field_0x210 / (f32)field_0x20e; + f32 alphaf = (f32)field_0x210 / (f32)field_0x20e; if (field_0x212 != 0) { - alpha = 1.0f - alpha; + alphaf = 1.0f - alphaf; } - mWarningStart->setAlpha(255.0f * alpha); + u8 alpha = 255.0f * alphaf; + mWarningStart->setAlpha(alpha); + if (field_0x210 == 0) { field_0x210 = field_0x20e; field_0x212 ^= 1; @@ -319,10 +497,14 @@ void dScnLogo_c::warningDispDraw() { field_0x210--; } + #if PLATFORM_WII + if (mTimer == 0 || cAPICPad_A_TRIGGER(PAD_1) || cAPICPad_B_TRIGGER(PAD_1) || cAPICPad_START_TRIGGER(PAD_1)) + #else if (mTimer == 0 || mDoCPd_c::getTrig(PAD_1) & (PAD_BUTTON_A | PAD_BUTTON_B | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_START | PAD_TRIGGER_Z | PAD_TRIGGER_L | PAD_TRIGGER_R | PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_DOWN | PAD_BUTTON_UP)) + #endif { mExecCommand = EXEC_WARNING_OUT; mTimer = 30; @@ -387,40 +569,208 @@ void dScnLogo_c::dolbyOutDraw2() { } } +#if PLATFORM_WII || PLATFORM_SHIELD +void dScnLogo_c::strapInDraw() { + dComIfGd_set2DOpa(mStrapImg); + if (mTimer == 0) { + mExecCommand = EXEC_STRAP_DISP; + + #if VERSION == VERSION_SHIELD_DEBUG + mTimer = 0; + #elif VERSION == VERSION_SHIELD + mTimer = 60; + #else + mTimer = 840; + #endif + } +} + +void dScnLogo_c::strapDispDraw() { + dComIfGd_set2DOpa(mStrapImg); + + #if VERSION == VERSION_SHIELD_DEBUG + if (mTimer == 0) + #elif VERSION == VERSION_SHIELD + if (mTimer == 0 || cAPICPad_ANY_BUTTON(PAD_1)) + #else + if (mTimer == 0 || mReCPd::getTrig(PAD_1) & ~WPAD_BUTTON_HOME) + #endif + { + mExecCommand = EXEC_DVD_WAIT; + } +} + +void dScnLogo_c::strapOutDraw() { + dComIfGd_set2DOpa(mStrapImg); + if (mTimer == 0) { + #if VERSION == VERSION_SHIELD + mExecCommand = EXEC_NVLOGO_IN; + #else + mExecCommand = EXEC_STRAP_OUT2; + #endif + + mTimer = 30; + mDoGph_gInf_c::startFadeIn(30); + } +} + +void dScnLogo_c::strapOut2Draw() { + if (mTimer == 0) { + mExecCommand = EXEC_SCENE_CHANGE; + } +} +#endif + +#if VERSION == VERSION_SHIELD +void dScnLogo_c::mocInDraw() { + dComIfGd_set2DOpa(mMocImg); + + if (mTimer == 0) { + mExecCommand = EXEC_MOC_DISP; + mTimer = 120; + } +} + +void dScnLogo_c::mocDispDraw() { + dComIfGd_set2DOpa(mMocImg); + + if (mTimer == 0 || cAPICPad_ANY_BUTTON(PAD_1)) { + mExecCommand = EXEC_MOC_OUT; + mTimer = 30; + mDoGph_gInf_c::startFadeOut(30); + } +} + +void dScnLogo_c::mocOutDraw() { + dComIfGd_set2DOpa(mMocImg); + + if (mTimer == 0) { + mExecCommand = EXEC_STRAP_IN; + mTimer = 90; + mDoGph_gInf_c::startFadeIn(30); + } +} + +void dScnLogo_c::nvLogoInDraw() { + dComIfGd_set2DOpa(mNvLogo); + + if (mTimer == 0) { + mExecCommand = EXEC_NVLOGO_DISP; + mTimer = 120; + } +} + +void dScnLogo_c::nvLogoDispDraw() { + dComIfGd_set2DOpa(mNvLogo); + + if (mTimer == 0 || cAPICPad_ANY_BUTTON(PAD_1)) { + mExecCommand = EXEC_NVLOGO_OUT; + mTimer = 30; + mDoGph_gInf_c::startFadeOut(30); + } +} + +void dScnLogo_c::nvLogoOutDraw() { + dComIfGd_set2DOpa(mNvLogo); + + if (mTimer == 0) { + mExecCommand = EXEC_STRAP_OUT2; + mTimer = 30; + mDoGph_gInf_c::startFadeIn(30); + } +} +#endif + void dScnLogo_c::dvdWaitDraw() { + #if PLATFORM_WII || PLATFORM_SHIELD + dComIfGd_set2DOpa(mStrapImg); + #endif + if (!dComIfG_syncAllObjectRes()) { - if (mpField0Command->sync() && mpAlAnmCommand->sync() && mpFmapResCommand->sync() && - mpDmapResCommand->sync() && mpCollectResCommand->sync() && mpItemIconCommand->sync() && - mpRingResCommand->sync() && mpPlayerNameCommand->sync() && - mpItemInfResCommand->sync() && mpButtonCommand->sync() && mpCardIconCommand->sync() && - mpBmgResCommand->sync() && mpMsgComCommand->sync() && mpMsgResCommand[0]->sync() && - mpMsgResCommand[1]->sync() && mpMsgResCommand[2]->sync() && - mpMsgResCommand[3]->sync() && mpMsgResCommand[4]->sync() && - mpMsgResCommand[5]->sync() && mpMsgResCommand[6]->sync() && mpFontResCommand->sync() && - mpMain2DCommand->sync() && mpRubyResCommand->sync() && mParticleCommand->sync() && - mItemTableCommand->sync() && mEnemyItemCommand->sync() && preLoad_dyl()) + if ( + #if PLATFORM_WII || VERSION == VERSION_SHIELD + mpHomeBtnCommand->sync() && + #endif + mpField0Command->sync() + && mpAlAnmCommand->sync() + && mpFmapResCommand->sync() + && mpDmapResCommand->sync() + && mpCollectResCommand->sync() + && mpItemIconCommand->sync() + && mpRingResCommand->sync() + && mpPlayerNameCommand->sync() + && mpItemInfResCommand->sync() + && mpButtonCommand->sync() + && mpCardIconCommand->sync() + && mpBmgResCommand->sync() + && mpMsgComCommand->sync() + && mpMsgResCommand[0]->sync() + && mpMsgResCommand[1]->sync() + && mpMsgResCommand[2]->sync() + && mpMsgResCommand[3]->sync() + && mpMsgResCommand[4]->sync() + && mpMsgResCommand[5]->sync() + && mpMsgResCommand[6]->sync() + && mpFontResCommand->sync() + && mpMain2DCommand->sync() + && mpRubyResCommand->sync() + && mParticleCommand->sync() + && mItemTableCommand->sync() + && mEnemyItemCommand->sync() + && preLoad_dyl()) { mDoRst::setLogoScnFlag(0); + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoRst::setProgSeqFlag(0); + #endif + mDoRst::setProgChgFlag(0); + + #if PLATFORM_WII || PLATFORM_SHIELD + mExecCommand = EXEC_STRAP_OUT; + mTimer = 30; + mDoGph_gInf_c::startFadeOut(30); + #else mExecCommand = EXEC_SCENE_CHANGE; + #endif } } } void dScnLogo_c::nextSceneChange() { if (!mDoRst::isReset()) { - dComIfG_changeOpeningScene(this, PROC_OPENING_SCENE); + if (!isOpeningCut()) + { + dComIfG_changeOpeningScene(this, PROC_OPENING_SCENE); + } else { + #if DEBUG + fopScnM_ChangeReq(this, PROC_MENU_SCENE, 0, 30); + dComIfGs_init(); + dComIfG_playerStatusD(); + return; + #endif + } } } dScnLogo_c::~dScnLogo_c() { if (mDoRst::isReset()) { - if (mDoAud_zelAudio_c::isInitFlag()) { + #if !(PLATFORM_WII || PLATFORM_SHIELD) + if (mDoAud_zelAudio_c::isInitFlag()) + #endif + { Z2AudioMgr::getInterface()->resetProcess(5, true); } + mDoRst_reset(0, 0x80000000, 0); } + #if PLATFORM_WII || PLATFORM_SHIELD + delete mStrapImg; + #endif + + #if !(PLATFORM_WII || PLATFORM_SHIELD) delete mNintendoLogo; delete mWarning; delete mWarningStart; @@ -435,14 +785,41 @@ dScnLogo_c::~dScnLogo_c() { mpPalLogoResCommand->getArchive()->unmount(); mpPalLogoResCommand->destroy(); #endif + #endif + + #if VERSION == VERSION_SHIELD + delete mNvLogo; + delete mMocImg; + #endif preLoad_dyl_remove(); + + #if PLATFORM_WII || PLATFORM_SHIELD + switch (getPalLanguage()) { + case 2: + dComIfG_deleteObjectResMain("LogoFrWii"); + break; + case 3: + dComIfG_deleteObjectResMain("LogoSpWii"); + break; + case 0: + default: + dComIfG_deleteObjectResMain("LogoUsWii"); + break; + } + #else dComIfG_deleteObjectResMain(LOGO_ARC); + #endif - field_0x1d4->destroy(); - field_0x1d0->destroy(); + mLogo01Heap->destroy(); + mLogoHeap->destroy(); JKRFree(dummyGameAlloc); + #if PLATFORM_WII || VERSION == VERSION_SHIELD + dHomeButton_c::create(mHomeBtnRegion, mpHomeBtnCommand->getMemAddress()); + mpHomeBtnCommand->destroy(); + #endif + dComIfGp_particle_createCommon(mParticleCommand->getMemAddress()); dComIfGp_setFieldMapArchive2(mpField0Command->getArchive()); dComIfGp_setAnmArchive(mpAlAnmCommand->getArchive()); @@ -454,7 +831,17 @@ dScnLogo_c::~dScnLogo_c() { dComIfGp_setRingResArchive(mpRingResCommand->getArchive()); dComIfGp_setNameResArchive(mpPlayerNameCommand->getArchive()); dComIfGp_setDemoMsgArchive(mpItemInfResCommand->getArchive()); + dComIfGp_setMeterButtonArchive(mpButtonCommand->getArchive()); + #if DEBUG + JKRArchive* button = mpButtonCommand->getArchive(); + if (button != NULL) { + OS_REPORT("button not nullptr\n"); + } else { + OS_REPORT("button nullptr\n"); + } + #endif + dComIfGp_setErrorResArchive(NULL); dComIfGp_setCardIconResArchive(mpCardIconCommand->getArchive()); dComIfGp_setMsgDtArchive(0, mpBmgResCommand->getArchive()); @@ -485,7 +872,12 @@ dScnLogo_c::~dScnLogo_c() { mpFontResCommand->destroy(); mpMain2DCommand->destroy(); mpRubyResCommand->destroy(); + + #if !PLATFORM_SHIELD mParticleCommand->destroy(); + #else + delete mParticleCommand; + #endif JKRAramHeap* aram_heap = JKRAram::getAramHeap(); u32 free_size = aram_heap->getTotalFreeSize(); @@ -502,15 +894,30 @@ dScnLogo_c::~dScnLogo_c() { #endif dComIfGp_setItemTable(mItemTableCommand->getMemAddress()); + #if !PLATFORM_SHIELD mItemTableCommand->destroy(); + #else + delete mItemTableCommand; + #endif dEnemyItem_c::setItemData((u8*)mEnemyItemCommand->getMemAddress()); + #if !PLATFORM_SHIELD mEnemyItemCommand->destroy(); + #else + delete mEnemyItemCommand; + #endif dDlst_shadowControl_c::setSimpleTex((ResTIMG*)dComIfG_getObjectRes("Always", 0x4A)); + + #if PLATFORM_WII || PLATFORM_SHIELD + dComIfG_inf_c::createBaseCsr(); + #endif + dTres_c::createWork(); dMpath_c::createWork(); + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1479, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + #if PLATFORM_WII data_8053a730 = 0; #endif @@ -520,10 +927,18 @@ static int phase_0(dScnLogo_c* i_this) { mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_blackColor); dComIfGp_particle_create(); - i_this->dummyGameAlloc = mDoExt_getGameHeap()->alloc(0x340000, -0x10); + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1497, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + u32 var_r29 = 0x340000; + u32 var_r28 = 0x130000; + + i_this->dummyGameAlloc = mDoExt_getGameHeap()->alloc(var_r29, -0x10); JUT_ASSERT(1523, i_this->dummyGameAlloc != NULL); - i_this->field_0x1d0 = JKRExpHeap::create(i_this->dummyGameAlloc, 0x340000, NULL, false); - i_this->field_0x1d4 = JKRExpHeap::create(0x130000, i_this->field_0x1d0, false); + + i_this->mLogoHeap = JKRExpHeap::create(i_this->dummyGameAlloc, var_r29, NULL, false); + JUT_ASSERT(1525, i_this->mLogoHeap != NULL); + + i_this->mLogo01Heap = JKRCreateExpHeap(var_r28, i_this->mLogoHeap, false); + JUT_ASSERT(1528, i_this->mLogo01Heap != NULL); #if VERSION == VERSION_GCN_PAL switch (i_this->getPalLanguage()) { @@ -546,6 +961,10 @@ static int phase_0(dScnLogo_c* i_this) { } #endif + #if PLATFORM_WII || PLATFORM_SHIELD + OSSetPowerCallback(mDoRst_shutdownCallBack); + #endif + return cPhs_NEXT_e; } @@ -554,9 +973,11 @@ static int phase_1(dScnLogo_c* i_this) { return cPhs_INIT_e; } + #if !(PLATFORM_WII || PLATFORM_SHIELD) if (!mDoAud_zelAudio_c::isInitFlag() || Z2AudioMgr::getInterface()->checkFirstWaves()) { return cPhs_INIT_e; } + #endif #if VERSION == VERSION_GCN_PAL if (!mDoDvdThd::SyncWidthSound) { @@ -568,8 +989,29 @@ static int phase_1(dScnLogo_c* i_this) { } #endif - dComIfG_setObjectRes(LOGO_ARC, (u8)0, i_this->field_0x1d0); + int rt; + #if PLATFORM_WII || PLATFORM_SHIELD + switch (i_this->getPalLanguage()) { + case 0: + default: + rt = dComIfG_setObjectRes("LogoUsWii", (u8)0, i_this->mLogoHeap); + break; + case 2: + rt = dComIfG_setObjectRes("LogoFrWii", (u8)0, i_this->mLogoHeap); + break; + case 3: + rt = dComIfG_setObjectRes("LogoSpWii", (u8)0, i_this->mLogoHeap); + break; + } + #else + rt = dComIfG_setObjectRes(LOGO_ARC, (u8)0, i_this->mLogoHeap); + #endif + + JUT_ASSERT(1652, rt == 1); + mDoRst::setLogoScnFlag(1); + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 1667, archiveHeap->getTotalFreeSize()); archiveHeap->dump_sort(); return cPhs_NEXT_e; } @@ -599,17 +1041,45 @@ int dScnLogo_c::create() { data_8053a730 = 1; #endif - mpHeap = mDoExt_setCurrentHeap(field_0x1d4); + mpHeap = mDoExt_setCurrentHeap(mLogo01Heap); + + #if PLATFORM_WII || PLATFORM_SHIELD + logoInitWii(); + #else logoInitGC(); - mpHeap->becomeCurrentHeap(); + #endif + + JKRSetCurrentHeap(mpHeap); + + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1732, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); dvdDataLoad(); + + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1738, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + + #if !(PLATFORM_WII || PLATFORM_SHIELD) Z2AudioMgr::getInterface()->loadStaticWaves(); - mDoGph_gInf_c::setTickRate((OS_BUS_CLOCK / 4) / 60); + #endif + + mDoGph_gInf_c::setTickRate(OS_TIMER_CLOCK / 60); mDoGph_gInf_c::waitBlanking(0); + field_0x20a = 0; + + #if VERSION == VERSION_SHIELD_DEBUG + mExecCommand = EXEC_STRAP_IN; + mTimer = 0; + #elif VERSION == VERSION_SHIELD + mExecCommand = EXEC_MOC_IN; + mTimer = 30; + #elif PLATFORM_WII + mExecCommand = EXEC_STRAP_IN; + mTimer = 90; + #endif + mDoGph_gInf_c::startFadeIn(30); + #if !(PLATFORM_WII || PLATFORM_SHIELD) checkProgSelect(); if (field_0x20a != 0) { mExecCommand = EXEC_PROG_IN; @@ -628,12 +1098,92 @@ int dScnLogo_c::create() { JUTGamePad::clearResetOccurred(); JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL); + #endif + mDoRst::offReset(); mDoRst::offResetPrepare(); + #if PLATFORM_WII || VERSION == VERSION_SHIELD + dHomeButton_c::lbl_8053A724 = 0; + #endif + return phase_state; } +#if PLATFORM_WII || PLATFORM_SHIELD +void dScnLogo_c::logoInitWii() { + u8 language = getPalLanguage(); + if (language > 5) { + language = 0; + } + + ResTIMG* timg; + s16 width; + s16 height; + if (mDoGph_gInf_c::isWide()) { + switch (language) { + case 0: + default: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", dRes_ID_LOGOUSWII_BTI_STRAP_16_9_832X456_US_e); + break; + case 2: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoFrWii", 3); + break; + case 3: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoSpWii", 3); + break; + } + + width = 832; + height = 456; + } else { + switch (language) { + case 0: + default: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", dRes_ID_LOGOUSWII_BTI_STRAP_608X456_US_e); + break; + case 2: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoFrWii", 4); + break; + case 3: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoSpWii", 4); + break; + } + + width = 608; + height = 456; + } + + JUT_ASSERT(2309, timg != NULL); + mStrapImg = new dDlst_2D_c(timg, 304 - (width / 2), 224 - (height / 2), width, height, 255); + + #if VERSION == VERSION_SHIELD + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", 5); + mNvLogo = new dDlst_2D_c(timg, 304 - (width / 2), 224 - (height / 2), width, height, 255); + + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", 4); + mMocImg = new dDlst_2D_c(timg, 304 - (width / 2), 224 - (height / 2), width, height, 255); + #endif + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2316, archiveHeap->getTotalFreeSize()); + + JUT_ASSERT(2319, mStrapImg != NULL); + + mNintendoLogo = NULL; + mDolbyLogo = NULL; + mWarning = NULL; + mWarningStart = NULL; + mProgressiveChoice = NULL; + mProgressiveYes = NULL; + mProgressiveNo = NULL; + mProgressivePro = NULL; + mProgressiveInter = NULL; + mProgressiveSel = NULL; + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2341, archiveHeap->getTotalFreeSize()); + OS_REPORT("%d mLogo01Heap->getTotalFreeSize %08x\n\x1b[m", 2344, mLogo01Heap->getTotalFreeSize()); +} +#else void dScnLogo_c::logoInitGC() { ResTIMG* nintendoImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 4); mNintendoLogo = new dDlst_2D_c(nintendoImg, 117, 154, 376, 104, 255); @@ -751,103 +1301,133 @@ void dScnLogo_c::logoInitGC() { mProgressiveSel = new dDlst_2D_c(mProgressivePro, 153, 309, 336, 88, 255); #endif } +#endif void dScnLogo_c::dvdDataLoad() { - dComIfG_setObjectRes("Always", (u8)0, NULL); + int rt; + + #if PLATFORM_WII || VERSION == VERSION_SHIELD + rt = dComIfG_setObjectRes("HomeBtn", (u8)0, NULL); + JUT_ASSERT(__LINE__, rt == 1); + + static const homeBtnData l_homeBtnData[] = { + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_FRENCH, "/res/HomeBtn/homeBtn_FRA.arc"}, + {SC_LANG_SPANISH, "/res/HomeBtn/homeBtn_SPA.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + }; + + u8 language = getPalLanguage(); + const homeBtnData* data = &l_homeBtnData[language]; + mpHomeBtnCommand = mDoDvdThd_toMainRam_c::create(data->path, 0, NULL); + mHomeBtnRegion = data->region; + #endif + + rt = dComIfG_setObjectRes("Always", (u8)0, NULL); + JUT_ASSERT(2420, rt == 1); + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2421, archiveHeap->getTotalFreeSize()); archiveHeap->dump_sort(); - dComIfG_setObjectRes("Alink", (u8)0, NULL); - - mpField0Command = mDoDvdThd_mountXArchive_c::create( - "/res/FieldMap/Field0.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpAlAnmCommand = - mDoDvdThd_mountXArchive_c::create("/res/Object/AlAnm.arc", 0, JKRArchive::MOUNT_ARAM, NULL); - mpFmapResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/fmapres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpDmapResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/dmapres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpCollectResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/clctres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpItemIconCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/itemicon.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpRingResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/ringres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpPlayerNameCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/playerName.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpItemInfResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/itmInfRes.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpButtonCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/button.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpCardIconCommand = mDoDvdThd_mountXArchive_c::create( - "/res/CardIcon/cardicon.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + rt = dComIfG_setObjectRes("Alink", (u8)0, NULL); + JUT_ASSERT(2429, rt == 1); + + #if PLATFORM_WII || PLATFORM_SHIELD + rt = dComIfG_setObjectRes("NNGC", (u8)0, NULL); + JUT_ASSERT(2433, rt == 1); + #endif + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2436, archiveHeap->getTotalFreeSize()); + + mpField0Command = aramMount("/res/FieldMap/Field0.arc", mDoExt_getJ2dHeap()); + mpAlAnmCommand = aramMount("/res/Object/AlAnm.arc", NULL); + mpFmapResCommand = aramMount(FMAP_RES_PATH, mDoExt_getJ2dHeap()); + mpDmapResCommand = aramMount(DMAP_RES_PATH, mDoExt_getJ2dHeap()); + mpCollectResCommand = aramMount(COLLECT_RES_PATH, mDoExt_getJ2dHeap()); + mpItemIconCommand = aramMount("/res/Layout/itemicon.arc", mDoExt_getJ2dHeap()); + mpRingResCommand = aramMount(RING_RES_PATH, mDoExt_getJ2dHeap()); + mpPlayerNameCommand = aramMount("/res/Layout/playerName.arc", mDoExt_getJ2dHeap()); + mpItemInfResCommand = aramMount(ITEM_INF_RES_PATH, mDoExt_getJ2dHeap()); + mpButtonCommand = aramMount(BUTTON_RES_PATH, mDoExt_getJ2dHeap()); + mpCardIconCommand = aramMount(ICON_RES_PATH, mDoExt_getJ2dHeap()); #if VERSION == VERSION_GCN_PAL switch (getPalLanguage()) { case 1: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgde/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgde/bmgres.arc"); break; case 2: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgfr/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgfr/bmgres.arc"); break; case 3: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgsp/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgsp/bmgres.arc"); break; case 4: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgit/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgit/bmgres.arc"); break; case 0: default: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msguk/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msguk/bmgres.arc"); + break; + } + #elif VERSION == VERSION_SHIELD_DEBUG + switch (getPalLanguage()) { + case 2: + mpBmgResCommand = onMemMount("/res/Msgfr/bmgres.arc"); + break; + case 3: + mpBmgResCommand = onMemMount("/res/Msgsp/bmgres.arc"); + break; + default: + mpBmgResCommand = onMemMount("/res/Msgus/bmgres.arc"); break; } #else - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create(MSG_PATH, 0, JKRArchive::MOUNT_MEM, NULL); - #endif - - mpMsgComCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgcom.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[0] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres00.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[1] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres01.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[2] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres02.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[3] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres03.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + mpBmgResCommand = onMemMount(MSG_PATH); + #endif + + mpMsgComCommand = aramMount(MSG_COM_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[0] = aramMount(MSG_RES0_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[1] = aramMount(MSG_RES1_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[2] = aramMount(MSG_RES2_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[3] = aramMount(MSG_RES3_PATH, mDoExt_getJ2dHeap()); #if VERSION == VERSION_GCN_JPN - mpMsgResCommand[4] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres04.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + mpMsgResCommand[4] = aramMount("/res/Layout/msgres04.arc", mDoExt_getJ2dHeap()); #else - mpMsgResCommand[4] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres04F.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + mpMsgResCommand[4] = aramMount("/res/Layout/msgres04F.arc", mDoExt_getJ2dHeap()); #endif - mpMsgResCommand[5] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres05.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[6] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres06.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMain2DCommand = - mDoDvdThd_mountXArchive_c::create("/res/Layout/main2D.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpMsgResCommand[5] = aramMount("/res/Layout/msgres05.arc", mDoExt_getJ2dHeap()); + mpMsgResCommand[6] = aramMount("/res/Layout/msgres06.arc", mDoExt_getJ2dHeap()); + + mpMain2DCommand = onMemMount(MAIN2D_PATH); #if VERSION == VERSION_GCN_JPN - mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/fontres.arc", 1, - JKRArchive::MOUNT_MEM, NULL); - mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/rubyres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); + mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/fontres.arc", 1, JKRArchive::MOUNT_MEM, NULL); + mpRubyResCommand = onMemMount("/res/Fontjp/rubyres.arc"); #elif VERSION == VERSION_GCN_PAL - mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fonteu/fontres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); - mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fonteu/rubyres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); + mpFontResCommand = onMemMount("/res/Fonteu/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fonteu/rubyres.arc"); +#elif VERSION == VERSION_SHIELD_DEBUG + mpFontResCommand = onMemMount("/res/Fonteu/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fontus/rubyres.arc"); +#elif VERSION == VERSION_SHIELD + mpFontResCommand = onMemMount("/res/Fontcn/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fontcn/rubyres.arc"); #else - mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/fontres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); - mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/rubyres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); + mpFontResCommand = onMemMount("/res/Fontus/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fontus/rubyres.arc"); #endif - mParticleCommand = mDoDvdThd_toMainRam_c::create("/res/Particle/common.jpc", 0, - dComIfGp_particle_getResHeap()); + + mParticleCommand = mDoDvdThd_toMainRam_c::create(PARTICLE_COM_PATH, 0, dComIfGp_particle_getResHeap()); + mItemTableCommand = mDoDvdThd_toMainRam_c::create("/res/ItemTable/item_table.bin", 0, NULL); + JUT_ASSERT(2620, mItemTableCommand != NULL); + mEnemyItemCommand = mDoDvdThd_toMainRam_c::create("/res/ItemTable/enemy_table.bin", 0, NULL); + JUT_ASSERT(2624, mEnemyItemCommand != NULL); preLoad_dyl_create(); preLoad_dyl(); @@ -858,13 +1438,58 @@ static int dScnLogo_Create(scene_class* i_this) { } static int dScnLogo_Execute(dScnLogo_c* i_this) { + fpc_ProcID id = fpcM_GetID(i_this); + if (mDoRst::isReset()) { fopScnM_ChangeReq(i_this, PROC_LOGO_SCENE, 0, 5); } + return 1; } +#if DEBUG +static u8 lbl_8074CA49; +#endif + static int dScnLogo_Draw(dScnLogo_c* i_this) { + #if DEBUG + int x = 36; + int y = 40; + + y += 12; + JUTReport(x, y, "COPYDATE %s", mDoMain::COPYDATE_STRING); + + y += 12; + JUTReport(x, y, "Build by %s", "Authorized User"); + + y += 12; + JUTReport(x, y, "_DEBUG/Debug version"); + + if (!lbl_8074CA49) { + lbl_8074CA49 = 1; + JUTReportConsole_f("COPYDATE %s\n", mDoMain::COPYDATE_STRING); + JUTReportConsole_f("Build by %s\n", "Authorized User"); + JUTReportConsole_f("_DEBUG/Debug version\n"); + JUTReportConsole_f("SDKVersion %s\n", "11Dec2009Patch02"); + + #if PLATFORM_WII || PLATFORM_SHIELD + JUTReportConsole_f("ConsoleSimMem %08x\n", OSGetConsoleSimulatedMem1Size()); + JUTReportConsole_f("PhysicalMemory %08x\n", OSGetPhysicalMem1Size()); + JUTReportConsole_f("ConsoleType %08x\n", OSGetConsoleType()); + JUTReportConsole_f("Language(PAL) %1x\n", SCGetLanguage()); + JUTReportConsole_f("Progressive %1x\n", SCGetProgressiveMode()); + JUTReportConsole_f("SoundMode %1x\n", SCGetSoundMode()); + #else + JUTReportConsole_f("ConsoleSimMem %08x\n", OSGetConsoleSimulatedMemSize()); + JUTReportConsole_f("PhysicalMemory %08x\n", OSGetPhysicalMemSize()); + JUTReportConsole_f("ConsoleType %08x\n", OSGetConsoleType()); + JUTReportConsole_f("Language(PAL) %1x\n", OSGetLanguage()); + JUTReportConsole_f("Progressive %1x\n", OSGetProgressiveMode()); + JUTReportConsole_f("SoundMode %1x\n", OSGetSoundMode()); + #endif + } + #endif + i_this->draw(); return 1; } @@ -878,9 +1503,35 @@ static int dScnLogo_IsDelete(dScnLogo_c* i_this) { return 1; } -#if VERSION == VERSION_GCN_PAL +#if VERSION == VERSION_GCN_PAL || PLATFORM_WII || PLATFORM_SHIELD u8 dScnLogo_c::getPalLanguage() { u8 language; + + #if PLATFORM_WII || PLATFORM_SHIELD + switch (SCGetLanguage()) { + case SC_LANG_JAPANESE: + language = 6; + break; + case SC_LANG_ENGLISH: + language = 0; + break; + case SC_LANG_GERMAN: + language = 1; + break; + case SC_LANG_FRENCH: + language = 2; + break; + case SC_LANG_SPANISH: + language = 3; + break; + case SC_LANG_ITALIAN: + language = 4; + break; + case SC_LANG_DUTCH: + language = 5; + break; + } + #else switch (OSGetLanguage()) { case OS_LANGUAGE_ENGLISH: language = 0; @@ -901,13 +1552,20 @@ u8 dScnLogo_c::getPalLanguage() { language = 5; break; } + #endif return language; } #endif void dScnLogo_c::setProgressiveMode(u8 mode) { - #if VERSION == VERSION_GCN_PAL + #if VERSION == VERSION_SHIELD_DEBUG + return; + #endif + + #if PLATFORM_WII + SCSetProgressiveMode(mode); + #elif VERSION == VERSION_GCN_PAL OSSetEuRgb60Mode(mode); #else OSSetProgressiveMode(mode); @@ -915,6 +1573,10 @@ void dScnLogo_c::setProgressiveMode(u8 mode) { } u8 dScnLogo_c::getProgressiveMode() { + #if PLATFORM_WII || PLATFORM_SHIELD + return SCGetProgressiveMode(); + #endif + #if VERSION == VERSION_GCN_PAL return OSGetEuRgb60Mode(); #else @@ -934,8 +1596,6 @@ void dScnLogo_c::setRenderMode() { mDoMch_render_c::setProgressiveMode(); } -dLog_HIO_c::~dLog_HIO_c() {} - static scene_method_class l_dScnLogo_Method = { (process_method_func)dScnLogo_Create, (process_method_func)dScnLogo_Delete, diff --git a/src/d/d_s_play.cpp b/src/d/d_s_play.cpp index 1e4636c457..4f3c6807f0 100644 --- a/src/d/d_s_play.cpp +++ b/src/d/d_s_play.cpp @@ -26,13 +26,33 @@ #include "m_Do/m_Do_graphic.h" #include "d/actor/d_a_suspend.h" #include "d/actor/d_a_ykgr.h" +#include "JSystem/JHostIO/JORFile.h" +#include "JSystem/JHostIO/JORServer.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JFramework/JFWSystem.h" +#include "f_ap/f_ap_game.h" +#include "d/d_bg_parts.h" +#include "f_op/f_op_kankyo_mng.h" +#include "d/actor/d_a_alink.h" +#include "d/actor/d_a_midna.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramArchive.h" + +#if DEBUG +#include "d/d_s_menu.h" +#include "d/d_debug_pad.h" +#include "d/d_jpreviewer.h" +#include "d/d_jcam_editor.h" +#include "d/d_a_obj.h" +#include "d/d_debug_viewer.h" +#endif #include <cstring> #if PLATFORM_WII #include "d/d_cursor_mng.h" #endif -static void dScnPly_Create(scene_class*); +static int dScnPly_Create(scene_class*); static int dScnPly_Delete(dScnPly_c*); static int dScnPly_IsDelete(dScnPly_c); static int dScnPly_Execute(dScnPly_c*); @@ -54,6 +74,10 @@ static request_of_phase_process_class resPhase[1]; static request_of_phase_process_class dylPhase[1]; +#if DEBUG +static OSTime dylPreLoadTime0; +#endif + static OSTime dylPreLoadTime1; static OSTime resPreLoadTime0; @@ -66,6 +90,47 @@ s8 dScnPly_c::pauseTimer; s8 dScnPly_c::nextPauseTimer; +#if DEBUG +u8 dScnPly_c::debugPause; +#endif + +static const s16 T_JOINT_dylKeyTbl[1] = { + PROC_COW, +}; + +static const char* T_JOINT_resName[1] = {"Always"}; + +struct PreLoadInfo { + const char* stageName; + const s16* profNameTbl; + const char** resNameTbl; + u8 dylKeyTblNum; + u8 resNameNum; +}; + +static PreLoadInfo const PreLoadInfoT[1] = { + { + "T_JOINT", + T_JOINT_dylKeyTbl, + T_JOINT_resName, + ARRAY_SIZE(T_JOINT_dylKeyTbl), + ARRAY_SIZE(T_JOINT_resName), + }, +}; + +static s8 preLoadNo = -1; + +static u8 doPreLoad = 1; + +#if DEBUG +void dScnPly_preLoad_HIO_c::genMessage(JORMContext* mctx) { + mctx->startComboBox("プリロード", &doPreLoad); + mctx->genComboBoxItem("しない", 0); + mctx->genComboBoxItem("する", 1); + mctx->endComboBox(); +} +#endif + s8 dScnPly_c::calcPauseTimer() { if (nextPauseTimer != 0) { pauseTimer = nextPauseTimer; @@ -76,18 +141,281 @@ s8 dScnPly_c::calcPauseTimer() { } } -static const s16 T_JOINT_dylKeyTbl[1] = { - 0x0106, -}; +#if DEBUG +dScnPly_reg_childHIO_c::dScnPly_reg_childHIO_c() { + for (int i = 0; i < 30; i++) { + mFloatReg[i] = 0.0f; + } + + for (int i = 0; i < 10; i++) { + mShortReg[i] = 0; + } +} + +void dScnPly_reg_childHIO_c::genMessage(JORMContext* mctx) { + char textbuf[8]; + + for (int i = 0; i < 20; i++) { + sprintf(textbuf, " F(%02d)", i); + mctx->genSlider(textbuf, &mFloatReg[i], -100000.0f, 100000.0f); + } + + for (int i = 20; i < 25; i++) { + sprintf(textbuf, " F(%02d)", i); + mctx->genSlider(textbuf, &mFloatReg[i], 0.0f, 1.0f); + } + + for (int i = 25; i < 30; i++) { + sprintf(textbuf, " F(%02d)", i); + mctx->genSlider(textbuf, &mFloatReg[i], -1.0f, 1.0f); + } + + for (int i = 0; i < 10; i++) { + sprintf(textbuf, " S(%02d)", i); + mctx->genSlider(textbuf, &mShortReg[i], -0x8000, 0x7FFF); + } +} + +void dScnPly_reg_HIO_c::genMessage(JORMContext* mctx) { + static const char l_nodeName[][20] = { + "森田(T)", + "まつたに(D)", + "イワワキ(I)", + "ささ(S)", + "うめみや(U)", + "おがわ(O)", + "坂口(Y)", + "さかい(K)", + "ハラ(B)", + "すみよし(M)", + "(空)-たけした(A)", + "吉田茂樹(P)", + "(空)-のま(N)", + "(空)-にしわき(W)", + "(空)-榊原政郎(J)", + "はやかわ(H)", + "(空)-定本(V)", + "(空)-西川(X)", + "(空)-鈴木(ゆ)(Z)", + "なかにし(n)", + "くわじま(k)", + "おかじま(o)", + "山崎(y)", + "芦田(a)", + "岡田(h)", + "高橋(t)", + }; + + // "Example usage" + mctx->genLabel("使い方例", 0); + mctx->genLabel("R_HS(00-09) ... はやかわレジスタ -32768 - +32767(short)", 0); + mctx->genLabel("R_HF(00-19) ... はやかわレジスタ -100000.0 - +100000.0", 0); + mctx->genLabel("R_HF(20-24) ... はやかわレジスタ 0.0f - 1.0f", 0); + mctx->genLabel("R_HF(25-29) ... はやかわレジスタ -1.0f - 1.0f", 0); + + for (int i = 0; i < 26; i++) { + mctx->genNode(l_nodeName[i], &mChildReg[i], 0, 0); + } +} + +dScnPly_preset_HIO_c::dScnPly_preset_HIO_c() { + field_0x5 = 0; + memset(mPresetData, 0, sizeof(mPresetData)); + memset(filename_buf, 0, sizeof(filename_buf)); + field_0x2716 = 0; + field_0x2717 = 0; +} + +void dScnPly_preset_HIO_c::exePreset() { + JORFile file; + + if (g_presetHIO.filename_buf[0] != 0) { + if (file.open((char*)filename_buf, 1, "", NULL, NULL, NULL)) { + memset(mPresetData, 0, sizeof(mPresetData)); + field_0x2716 = 0; + field_0x2717 = 1; + + file.readData(mPresetData, 0); + file.close(); + + if (dSm_read_stageset(mPresetData)) { + field_0x2717 = 2; + } + } else { + // "\nLoading error loop" + OS_REPORT("\n読み込みしっぱいのまきまき"); + } + + g_presetHIO.filename_buf[0] = 0; + } +} + +void dScnPly_preset_HIO_c::genMessage(JORMContext* mctx) { + // "Load situation file" + mctx->genLabel("【状況ファイルを読みこみ】", 0x80000001); + // "Items and Status can be set in a file" + mctx->genLabel(" アイテムやステータスの状態をファイルで指定することが出来ます。", 0x80000001); + mctx->genLabel("", 0x80000001); + + // "Click here to select a file to load!" + mctx->genButton("ここを押して読込ファイルを指定して下さい!", 0x40000001); + mctx->genLabel("", 0x80000001); + + // "- Loading during gameplay will automatically return you to the debug menu." + mctx->genLabel("・ゲーム中に読み込むと自動的にデバッグメニューへ戻ります。", 0x80000001); + // "- When loading a file from the debug menu," + mctx->genLabel("・デバッグメニューでファイルを読み込んだ際", 0x80000001); + // " if a stage command exists the game will temporarily load then return to the menu." + mctx->genLabel(" stage命令がある場合は一旦ゲームに入りメニューへと戻ります。", 0x80000001); + // " (To position the cursor)" + mctx->genLabel(" (カーソルを合わせる為)", 0x80000001); + mctx->genLabel("", 0x80000001); + + // "Reset state to before loading situation file" + mctx->genButton("状況ファイルを読み込んでいない状態に戻す", 0x40000003); + mctx->genLabel("", 0x80000001); + mctx->genLabel("", 0x80000001); + + // "Click here for the situation file location!" + mctx->genButton("状況ファイルの格納場所はコチラを押下!", 0x40000005); + mctx->genLabel("\\\\10.121.2.9\\zelda$\\JMAP_FOLDER\\situation", 0x80000001); + // "For details about the situation file contents, please refer to Nakamura-san's website" + mctx->genLabel("ファイルの内容については中村さんのHPをご参照ください", 0x80000001); + // "Click here to launch browser and view webpage." + mctx->genButton("ここを押すとブラウザが起動し表示されます。", 0x40000004); + mctx->genLabel("http://www-ead/~nakamuh/gc-zelda_2/misc/spec-situation_file.html", 0x80000001); +} + +void dScnPly_preset_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + JORFile file; + + switch ((int)event->id) { + case 0x40000001: + if (file.open(1, "すべてのファイル(*.*)\0*.*", NULL, NULL, NULL)) { + memset(mPresetData, 0, sizeof(mPresetData)); + field_0x2716 = 0; + field_0x2717 = 1; + + file.readData(mPresetData, 0); + file.close(); + + if (dSm_read_stageset(mPresetData)) { + field_0x2717 = 2; + } + } + break; + case 0x40000003: + memset(mPresetData, 0, sizeof(mPresetData)); + break; + case 0x40000004: + JORShellExecute(NULL, "http://www-ead/~nakamuh/gc-zelda_2/misc/spec-situation_file.html", NULL, NULL, 1); + break; + case 0x40000005: + JORShellExecute(NULL, "\\\\10.121.2.9\\zelda$\\ZELDA2_JMAP_FOLDER\\situation", NULL, NULL, 1); + break; + } +} +#endif dScnPly_env_otherHIO_c::dScnPly_env_otherHIO_c() { mShadowDensity = 255.0f; - mAdjustLODBias = 1; - mDisplayTransparentCyl = false; + mAdjustLODBias = TRUE; + mDisplayTransparentCyl = FALSE; + + #if DEBUG + mAdjustCullFar = FALSE; + mCullFarValue = 4000.0f; + mDisplayShadows = TRUE; + mDisplayShadowImage = FALSE; + mDisplayShadowPoly = FALSE; + mDisplayCullBox = FALSE; + mLoadAllRooms = FALSE; + mDepthOfField = TRUE; + + mRailSize = 5.0f; + mRailColorR = 0x50; + mRailColorG = 0x50; + mRailColorB = 0x50; + + field_0x1a = 0xFF; + mDisplayParticleInfo = 0; + field_0x4e = 0; + field_0x4f = 0; + + for (int i = 0; i < 20; i++) { + field_0x1c[i] = -1; + } + #endif } -void dScnPly_env_otherHIO_c::genMessage(JORMContext* ctx) { +void dScnPly_env_otherHIO_c::genMessage(JORMContext* mctx) { + #if DEBUG + mctx->genCheckBox("影表示", &mDisplayShadows, 1); + mctx->genSlider("影濃さ", &mShadowDensity, 0.0f, 255.0f); + mctx->genCheckBox("被写界深度", &mDepthOfField, 1); + mctx->genCheckBox("LODバイアス変更", &mAdjustLODBias, 1); + mctx->genCheckBox("カリングFar変更", &mAdjustCullFar, 1); + mctx->genSlider("カリングFar値", &mCullFarValue, 0.0f, 50000.0f); + mctx->genCheckBox("影イメージ表示", &mDisplayShadowImage, 1); + mctx->genCheckBox("影ポリゴン表示", &mDisplayShadowPoly, 1); + mctx->genCheckBox("透明円柱表示", &mDisplayTransparentCyl, 1); + mctx->genCheckBox("カリングボックス表示", &mDisplayCullBox, 1); + mctx->genCheckBox("パーティクル情報表示", &mDisplayParticleInfo, 1); + mctx->genButton("パーティクル履歴", 0x4000003); + mctx->genCheckBox("全部屋読み込み", &mLoadAllRooms, 1); + mctx->genButton("部屋メモリ", 0x4000001); + mctx->genButton("草、花、低木本数", 0x4000002); + mctx->genSlider("レールサイズ", &mRailSize, 0.0f, 100.0f); + mctx->genSlider("レールカラー(R)", &mRailColorR, 0, 0xff); + mctx->genSlider("レールカラー(G)", &mRailColorG, 0, 0xff); + mctx->genSlider("レールカラー(B)", &mRailColorB, 0, 0xff); + #endif +} + +#if DEBUG +void dScnPly_env_otherHIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + JORFile file; + + switch ((int)event->id) { + case 0x4000001: + OS_REPORT("#############################################\n"); + break; + case 0x4000002: + break; + case 0x4000003: + g_envHIO.mOther.field_0x4e = 1; + break; + } +} + +void dScnPly_env_otherHIO_c::printParticle() { + dDbVw_Report(20, 100, "Emitter Num <%d> X=<%d>", dComIfGp_particle_getEmitterNum(), dComIfGp_particle_getHeapSize()); + dDbVw_Report(20, 120, "Particle Num <%d> Y=<%d>", dComIfGp_particle_getParticleNum(), dComIfGp_particle_getSceneHeapSize() - 0x180000); + + int var_r26 = 0xA0; + int var_r28 = field_0x4f; + if (field_0x4e != 0) { + OS_REPORT("Particle Error !!\n"); + + for (int i = 0; i < 20; i++) { + var_r28--; + if (var_r28 < 0) { + var_r28= 19; + } + + if (field_0x1c[var_r28] != 0xFFFF) { + OS_REPORT(" <ID=%d : %s>\n", field_0x1c[var_r28], dPa_name::getName(field_0x1c[var_r28])); + } + + var_r26 += 20; + } + + field_0x4e = 0; + } } +#endif dScnPly_env_debugHIO_c::dScnPly_env_debugHIO_c() { mBoxCullMinSize.set(-100.0f, -100.0f, -100.0f); @@ -96,31 +424,152 @@ dScnPly_env_debugHIO_c::dScnPly_env_debugHIO_c() { mSphereCullRadius = 100.0f; } -void dScnPly_env_debugHIO_c::genMessage(JORMContext* ctx) { +void dScnPly_env_debugHIO_c::genMessage(JORMContext* mctx) { + #if DEBUG + mctx->genLabel("【ボックスカリング(CULLSIZE_DEBUG)サイズ】", 0x80000001); + mctx->genSlider("最小X", &mBoxCullMinSize.x, -10000.0f, 10000.0f); + mctx->genSlider("最小Y", &mBoxCullMinSize.y, -10000.0f, 10000.0f); + mctx->genSlider("最小Z", &mBoxCullMinSize.z, -10000.0f, 10000.0f); + mctx->genSlider("最大X", &mBoxCullMaxSize.x, -10000.0f, 10000.0f); + mctx->genSlider("最大Y", &mBoxCullMaxSize.y, -10000.0f, 10000.0f); + mctx->genSlider("最大Z", &mBoxCullMaxSize.z, -10000.0f, 10000.0f); + + mctx->genLabel("【球カリング(CULLSIZE_Q_DEBUG)サイズ】", 0x80000001); + mctx->genSlider("中心X", &mSphereCullCenter.x, -10000.0f, 10000.0f); + mctx->genSlider("中心Y", &mSphereCullCenter.y, -10000.0f, 10000.0f); + mctx->genSlider("中心Z", &mSphereCullCenter.z, -10000.0f, 10000.0f); + mctx->genSlider("半径", &mSphereCullRadius, -10000.0f, 10000.0f); + #endif +} + +#if DEBUG +void dScnPly_env_debugHIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + + l_cullSizeBox[fopAc_CULLBOX_14_e].min = mBoxCullMinSize; + l_cullSizeBox[fopAc_CULLBOX_14_e].max = mBoxCullMaxSize; + l_cullSizeSphere[fopAc_CULLSPHERE_8_e - fopAc_CULLSPHERE_0_e].center = mSphereCullCenter; + l_cullSizeSphere[fopAc_CULLSPHERE_8_e - fopAc_CULLSPHERE_0_e].radius = mSphereCullRadius; } +void dScnPly_env_HIO_c::genMessage(JORMContext* mctx) { + mctx->genNode("デバッグ用", &mDebug, 0, 0); + mctx->genNode("その他", &mOther, 0, 0); +} + +static u32 l_usedMemoryBlockSize = 0xFFFFFFFF; + +static int checkObjectSize(void* i_process, void* i_data) { + s16 profname = fpcM_GetProfName(i_process); + if (profname == PROC_BG) { + fopAc_ac_c* actor = (fopAc_ac_c*)i_process; + *((u32*)i_data) += ((l_usedMemoryBlockSize != 0 && actor->heap == NULL) ? 0 : actor->heap->getHeapSize()) + actor->base.base.profile->process_size; + } else if (profname == PROC_PLAY_SCENE || profname == PROC_ROOM_SCENE) { + *((u32*)i_data) += ((base_process_class*)i_process)->profile->process_size; + } else if (fopKyM_IsKy(i_process)) { + *((u32*)i_data + 1) += ((base_process_class*)i_process)->profile->process_size; + } else if (fopAcM_IsActor(i_process)) { + fopAc_ac_c* actor = (fopAc_ac_c*)i_process; + *((u32*)i_data + 1) += (actor->heap == NULL ? 0 : actor->heap->getHeapSize()) + actor->base.base.profile->process_size; + + if (profname == PROC_ALINK) { + daAlink_c* alink = (daAlink_c*)actor; + *((u32*)i_data + 1) += alink->getOtherHeapSize(); + } else if (profname == PROC_MIDNA) { + daMidna_c* midna = (daMidna_c*)actor; + *((u32*)i_data + 1) += midna->getOtherHeapSize(); + } + } + + return 1; +} + +static void initUsedHeapSize() { + l_usedMemoryBlockSize = 0; + for (int i = 0; i < 19; i++) { + JKRHeap* heap = dStage_roomControl_c::getMemoryBlockHeap(i); + if (heap != NULL) { + l_usedMemoryBlockSize += heap->getHeapSize(); + } + } +} + +static bool lbl_8074CADB; + +static void drawUsedHeapSize() { + if (mDoCPd_c::getHoldL(PAD_3) && mDoCPd_c::getHoldR(PAD_3) && mDoCPd_c::getTrigZ(PAD_3)) { + lbl_8074CADB = !lbl_8074CADB; + } + + if (lbl_8074CADB) { + int gameSize = mDoExt_getSafeGameHeapSize() - mDoExt_getGameHeap()->getTotalFreeSize(); + int zeldaSize = mDoExt_getSafeZeldaHeapSize() - mDoExt_getZeldaHeap()->getTotalFreeSize(); + int archiveSize = mDoExt_getSafeArchiveHeapSize() - mDoExt_getArchiveHeap()->getTotalFreeSize(); + int j2dSize = mDoExt_getSafeJ2dHeapSize() - mDoExt_getJ2dHeap()->getTotalFreeSize(); + + u32 sizes[2]; + sizes[0] = dComIfG_getStageAllSize(); + sizes[1] = dComIfG_getObjectAllSize() - (dComIfG_getObjectSize("CamParam") + + dComIfG_getObjectSize("Event") + + dComIfG_getObjectSize("Always") + + dComIfG_getObjectSize("Alink") + + dComIfG_getObjectSize("Midna")); + + fpcLyIt_All(checkObjectSize, sizes); + if (l_usedMemoryBlockSize != 0) { + sizes[0] = l_usedMemoryBlockSize + dComIfG_getStageSize("Stg_00") + dComIfG_getStageSize("Xtg_00"); + } + + int var_r25 = JKRGetAramFreeSize() / 1024; + JUTReport(380, 300, "Stage : %d(K)", (sizes[0] + 0x3FF) / 1024); + JUTReport(380, 316, "Obj : %d(K)", (sizes[1] + 0x3FF) / 1024); + JUTReport(380, 332, "C-ARAM : %d(K)", var_r25); + JUTReport(380, 348, ">Game : %d(K)", (gameSize + 0x3FF) / 1024); + JUTReport(380, 364, ">Zelda : %d(K)", (zeldaSize + 0x3FF) / 1024); + JUTReport(380, 380, ">Archive : %d(K)", (archiveSize + 0x3FF) / 1024); + JUTReport(380, 380, ">J2d : %d(K)", (j2dSize + 0x3FF) / 1024); + } +} +#endif + static int dScnPly_Draw(dScnPly_c* i_this) { static s16 l_wipeType[] = { - 0x0000, 0x0000, 0x0011, 0x0002, 0x0002, 0x0001, 0x0003, 0x0001, 0x0004, 0x0004, 0x0005, 0x0005, - 0x0006, 0x0007, 0x0000, 0x0000, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0008, 0x0008, + 0, 0, 17, 2, 2, 1, 3, 1, 4, 4, 5, 5, 6, 7, 0, 0, 2, 2, 2, 2, 2, 8, 8, }; + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + fpc_ProcID id = fpcM_GetID(i_this); + drawUsedHeapSize(); + dStage_DebugDisp(); + #endif + dComIfG_Ccsp()->Move(); dComIfG_Bgsp().ClrMoveFlag(); - u8 useWhiteColor; if (!fopOvlpM_IsPeek() && !dComIfG_resetToOpening(i_this)) { - if (dComIfGp_isEnableNextStage()) { + if (dComIfGp_isEnableNextStage() + #if DEBUG + && !dScnMenu_c::isAutoSelect() + #endif + ) { + JUT_ASSERT(1019, dComIfGp_getNextStageWipe() < ARRAY_SIZEU(l_wipeType)); + u8 wipe = dComIfGp_getNextStageWipe(); - fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, l_wipeType[wipe], 5); + #if DEBUG + if (g_kankyoHIO.navy.wipe_test_ON != 0xFF) { + wipe = g_kankyoHIO.navy.wipe_test_ON; + } + #endif + + int rt = fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, l_wipeType[wipe], 5); int hour = dKy_getdaytime_hour(); - useWhiteColor = hour >= 6 && hour < 18 ? true : false; - BOOL tmp = useWhiteColor == 0 ? 1 : 0; + BOOL isDaytime = (hour >= 6 && hour < 18) ? FALSE : TRUE; if (wipe == 1 || wipe == 2 || wipe == 7 || wipe == 17 || wipe == 21 || - ((wipe == 8 || wipe == 10 || wipe == 18) && tmp) || - ((wipe == 9 || wipe == 11 || wipe == 19) && !tmp)) + ((wipe == 8 || wipe == 10 || wipe == 18) && isDaytime) || + ((wipe == 9 || wipe == 11 || wipe == 19) && !isDaytime)) { mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_saftyWhiteColor); } else if (wipe == 14 || wipe == 20) { @@ -136,42 +585,142 @@ static int dScnPly_Draw(dScnPly_c* i_this) { } } } + dMdl_mng_c::reset(); - if (!dComIfGp_isPauseFlag() && dScnPly_c::pauseTimer == 0) { + if (!dComIfGp_isPauseFlag() && !dScnPly_c::isPause() + #if DEBUG + && !fapGm_HIO_c::isCaptureScreen() + #endif + ) { if (fpcM_GetName(i_this) == PROC_PLAY_SCENE) { dComIfGp_getVibration().Run(); } daSus_c::execute(); dComIfG_Bgsp().Move(); + #if VERSION == VERSION_SHIELD_DEBUG + dPath_Move(); + #endif dComIfGp_particle_calc3D(); dComIfGp_particle_calc2D(); cCt_execCounter(); } else { dPa_control_c::onStatus(1); - if (dScnPly_c::pauseTimer == 0) { + + if (!dScnPly_c::isPause()) { dPa_control_c::onStatus(2); } + if (dScnPly_c::pauseTimer == 0) { dComIfGp_getVibration().Pause(); } } + #if DEBUG + if (fopOvlpM_IsDoingReq() != TRUE) { + if (dScnMenu_c::isAutoSelect() || dComIfG_isSceneResetButton() || g_presetHIO.field_0x2717 != 0) { + if (g_presetHIO.field_0x2717 != 0) { + dSm_read_stageset(g_presetHIO.mPresetData); + g_presetHIO.field_0x2717 = 0; + } + + s16 spA = 0; + if (dDemo_c::getMode() == 1) { + dDemo_c::end(); + spA = 7; + } + + fopScnM_ChangeReq(i_this, PROC_MENU_SCENE, spA, 5); + mDoAud_bgmStop(30); + + if (fpcM_GetName(i_this) != PROC_PLAY_SCENE) { + dComIfG_playerStatusD(); + } + } + } + + dDebugPad.Update(); + + fapGm_HIO_c::printCpuTimer(""); + fapGm_HIO_c::stopCpuTimer("ゲーム管理(計算処理2)"); + fapGm_HIO_c::printCpuTimer(""); + #endif + for (create_tag_class* i = fopDwIt_Begin(); i != NULL; i = fopDwIt_Next(i)) { - fpcM_Draw(i->mpTagData); + void* process = i->mpTagData; + fpcM_Draw(process); } + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + if (!dComIfGp_isPauseFlag()) { dEyeHL_mng_c::update(); + + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::drawShare(); + #endif + #if DEBUG + daSus_c::draw(); + #endif + dComIfG_Ccsp()->Draw(); - dComIfGp_getAttention()->Draw(); + #if DEBUG + dComIfG_Bgsp().Draw(); + dPath_Draw(); + #endif + + dAttention_c* attention = dComIfGp_getAttention(); + attention->Draw(); } + #if DEBUG + if (g_envHIO.mOther.mDisplayParticleInfo) { + g_envHIO.mOther.printParticle(); + } + + fapGm_HIO_c::printCpuTimer(""); + fapGm_HIO_c::stopCpuTimer("ゲーム管理(描画処理)"); + #endif + return 1; } +#if DEBUG +static BOOL l_pause; +static f32 l_pauseFrame; +static u8 lbl_8074CAE4; +static u32 l_sceneChangeStartTick; +#endif + static int dScnPly_Execute(dScnPly_c* i_this) { + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + i_this->offReset(); + + #if DEBUG + if (lbl_8074CAE4) { + u32 var_r27 = OSGetTick() - l_sceneChangeStartTick; + OS_REPORT("\x1b[33m"); + // "Scene transition time: %f seconds\n" + OS_REPORT("シーン切り替え時間 %f秒\n\x1B[m", (f32)OSTicksToMicroseconds(var_r27) / 1000000.0f); + lbl_8074CAE4 = 0; + + initUsedHeapSize(); + OS_REPORT("Game Heap <%d,%d,%d>\n", mDoExt_getGameHeap()->getTotalUsedSize(), mDoExt_getGameHeap()->getTotalFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + OS_REPORT("Zelda Heap <%d,%d,%d>\n", mDoExt_getZeldaHeap()->getTotalUsedSize(), mDoExt_getZeldaHeap()->getTotalFreeSize(), mDoExt_getZeldaHeap()->getFreeSize()); + OS_REPORT("Archive Heap <%d,%d,%d>\n", mDoExt_getArchiveHeap()->getTotalUsedSize(), mDoExt_getArchiveHeap()->getTotalFreeSize(), mDoExt_getArchiveHeap()->getFreeSize()); + OS_REPORT("最終残り %d(%fM)\n", JFWSystem::getRootHeap()->getTotalFreeSize(), (f32)JFWSystem::getRootHeap()->getTotalFreeSize() / (f32)0x100000); + OS_REPORT("拡張最終残り %d(%fM)\n", JKRGetRootHeap2()->getTotalFreeSize(), (f32)JKRGetRootHeap2()->getTotalFreeSize() / (f32)0x100000); + OS_REPORT("\x1b[m"); + } + #endif + + BOOL comboTrig = FALSE; + dStage_roomControl_c::offNoChangeRoom(); dStage_roomControl_c::setRoomReadId(0xFF); @@ -188,11 +737,63 @@ static int dScnPly_Execute(dScnPly_c* i_this) { } dKy_itudemo_se(); + + #if DEBUG + if (mDoCPd_c::isConnect(PAD_3)) { + if (mDoCPd_c::getTrigStart(PAD_1) && !fapGmHIO_get2Ddraw()) { + comboTrig = TRUE; + } else if (mDoCPd_c::getHoldR(PAD_2) && mDoCPd_c::getTrigStart(PAD_2)) { + comboTrig = TRUE; + } + + if (comboTrig == TRUE) { + if (l_pause) { + l_pause = FALSE; + } else { + l_pause = TRUE; + l_pauseFrame = 0.0f; + } + } + + if (l_pause) { + l_pauseFrame += mDoCPd_c::getAnalogR(PAD_2); + if (!mDoCPd_c::getTrigZ(PAD_2) && l_pauseFrame < 1.0f) { + i_this->onDebugPause(); + return 1; + } + + l_pauseFrame -= 1.0f; + } + + i_this->offDebugPause(); + } + #endif + if (!dComIfGp_isPauseFlag()) { + #if DEBUG + dJprev_c::get()->update(); + #endif + dDemo_c::update(); + + #if DEBUG + dJcame_c::get()->update(); + #endif + + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::executeShare(); + #endif + dComIfGp_getEvent()->Step(); dComIfGp_getAttention()->Run(); } + + #if DEBUG + fapGm_HIO_c::printCpuTimer(""); + fapGm_HIO_c::stopCpuTimer("ゲーム管理(計算処理1)"); + fapGm_HIO_c::printCpuTimer(""); + #endif + return 1; } @@ -201,40 +802,34 @@ static int dScnPly_IsDelete(dScnPly_c i_this) { return 1; } -struct PreLoadInfo { - const char* stageName; - const s16* profNameTbl; - const char** resNameTbl; - u8 dylKeyTblNum; - u8 resNameNum; -}; - -static const char* T_JOINT_resName[1] = {"Always"}; - -static PreLoadInfo const PreLoadInfoT[1] = { - { - "T_JOINT", - T_JOINT_dylKeyTbl, - T_JOINT_resName, - 1, - 1, - }, -}; - -static s8 preLoadNo = -1; - -static u8 doPreLoad = 1; - static int dScnPly_Delete(dScnPly_c* i_this) { + UNUSED(i_this); + + #if VERSION == VERSION_SHIELD_DEBUG + for (int i = 0; i < 32; i++) { + char* bank = dStage_roomControl_c::getArcBank(i); + if (strcmp(bank, "") != 0) { + int rt = dComIfG_syncObjectRes(bank); + if (rt > 0) { + return 0; + } + } + } + #endif + daSus_c::reset(); dMpath_c::remove(); dTres_c::remove(); - dComIfGp_getAttention()->~dAttention_c(); + dAttention_c* attention = dComIfGp_getAttention(); + attention->~dAttention_c(); dComIfGp_getVibration().Remove(); dComIfG_Bgsp().Dt(); dComIfG_Ccsp()->Dt(); + #if VERSION == VERSION_SHIELD_DEBUG + dPath_Dt(); + #endif dStage_Delete(); dComIfGp_event_remove(); @@ -244,6 +839,11 @@ static int dScnPly_Delete(dScnPly_c* i_this) { dComIfGp_getMsgDtArchive(1)->removeResourceAll(); JKRUnmountArchive(dComIfGp_getMsgDtArchive(1)); + #if DEBUG + dJcame_c::remove(); + dJprev_c::remove(); + #endif + dDemo_c::remove(); fopMsgM_destroyExpHeap(dComIfGp_getExpHeap2D()); @@ -256,11 +856,25 @@ static int dScnPly_Delete(dScnPly_c* i_this) { mDoGph_gInf_c::getBloom()->remove(); + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::removeShare(); + #endif + dComIfGs_offPlayerFieldLastStayFieldDataExistFlag(); + + #if DEBUG + daObj::HioObj_c::clean(); + mDoHIO_deleteChild(g_envHIO.field_0x4); + mDoHIO_deleteChild(g_save_bit_HIO.field_0x4); + g_preLoadHIO.removeHIO(); + #endif + dComIfGp_setWindowNum(0); dComIfGd_setView(NULL); if (preLoadNo >= 0) { + OS_REPORT("\x1b[32mプリロード解放\n\x1b[m"); + const char** resname_table = PreLoadInfoT[preLoadNo].resNameTbl; int res_num = PreLoadInfoT[preLoadNo].resNameNum; if (resname_table != NULL && (*resname_table != NULL)) { @@ -288,6 +902,113 @@ static int dScnPly_Delete(dScnPly_c* i_this) { return 1; } +#if DEBUG +static u32 getArchiveHeapSize(JKRHeap* i_heap, dRes_info_c* i_resInfo) { + if (i_resInfo == NULL) { + return 0; + } + + u32 size = 0; + int var_r29; + JKRArchive* archive = i_resInfo->getArchive(); + if (archive != NULL) { + var_r29 = i_heap->getSize(archive); + if (var_r29 > 0) { + size += var_r29 + 0x10; + } + + var_r29 = i_heap->getSize(((JKRAramArchive*)archive)->mBlock); + if (var_r29 > 0) { + size += var_r29 + 0x10; + } + } + + JKRSolidHeap* dataHeap = i_resInfo->getDataHeap(); + if (dataHeap != NULL) { + int var_r26 = i_heap->getSize(dataHeap); + if (var_r26 > 0) { + size += var_r26 + 0x10; + } + } + + return size; +} + +static u32 getArchiveBankHeapSize(JKRHeap* i_heap) { + u32 size = 0; + for (int i = 0; i < 32; i++) { + char* bank = dStage_roomControl_c::getArcBank(i); + if (strcmp(bank, "") != 0) { + size += getArchiveHeapSize(i_heap, dComIfG_getObjectResInfo(bank)); + } + } + + return size; +} + +static u32 getStageHeapSize(JKRHeap* i_heap) { + u32 size = 0; + for (int i = 0; i < 19; i++) { + JKRHeap* heap = dStage_roomControl_c::getMemoryBlockHeap(i); + if (heap != NULL) { + int var_r26 = i_heap->getSize(heap); + if (var_r26 > 0) { + size += var_r26 + 0x10; + } + } + } + + if (size == 0) { + for (int i = 0; i < 64; i++) { + size += getArchiveHeapSize(i_heap, dComIfG_getStageResInfo(dComIfG_getRoomArcName(i))); + } + } + + size += getArchiveHeapSize(i_heap, dComIfG_getStageResInfo("Stg_00")) + getArchiveHeapSize(i_heap, dComIfG_getStageResInfo("Xtg_00")); + return size; +} + +static BOOL heapSizeCheck(const char* i_label, JKRExpHeap* i_heap, s32 i_base, BOOL param_3) { + s32 free = i_heap->getFreeSize(); + s32 total = i_heap->getTotalUsedSize(); + + if (param_3) { + total -= getArchiveBankHeapSize(i_heap); + total -= getStageHeapSize(i_heap); + } + + s32 archiveHeapSize = mDoExt_getSafeArchiveHeapSize(); + f32 totalRatio = (f32)total / (f32)archiveHeapSize; + f32 freeRatio = (f32)free / (f32)total; + OS_REPORT("%s Free<%d> Total<%d> Base<%d> TotalRatio<%f> FreeRatio<%f>\n", + i_label, + free, + total, + i_base, + totalRatio, + freeRatio + ); + + int var_r30 = std::abs(total - i_base); + if (var_r30 > 64) { + // "%d (0x%x) byte difference!\n" + OS_REPORT("%d (0x%x) バイトの差があります!\n", var_r30, var_r30); + i_heap->dump(); + return FALSE; + } + + return TRUE; +} + +static BOOL heapSizeCheck() { + return heapSizeCheck("ArchiveHeap", mDoExt_getArchiveHeap(), mDoExt_getSafeArchiveHeapSize(), TRUE) + && heapSizeCheck("J2dHeap", mDoExt_getJ2dHeap(), mDoExt_getSafeJ2dHeapSize(), FALSE) + && heapSizeCheck("GameHeap", mDoExt_getGameHeap(), mDoExt_getSafeGameHeapSize(), TRUE) + && heapSizeCheck("ZeldaHeap", mDoExt_getZeldaHeap(), mDoExt_getSafeZeldaHeapSize(), FALSE) + && heapSizeCheck("CommandHeap", mDoExt_getCommandHeap(), mDoExt_getSafeCommandHeapSize(), FALSE); +} +#endif + bool dScnPly_c::resetGame() { if (fpcM_GetName(this) == PROC_OPENING_SCENE) { if (!dStage_roomControl_c::resetArchiveBank(0)) { @@ -302,6 +1023,7 @@ bool dScnPly_c::resetGame() { field_0x1d4 = 1; } } else { + #if VERSION != VERSION_SHIELD_DEBUG if (dComIfGp_getNextStagePoint() == -4 || (dComIfGs_getLastSceneMode() & 0xF) == 0xC || !strcmp(dComIfGp_getNextStageName(), "F_SP109") || (!strcmp(dComIfGp_getNextStageName(), "F_SP116") && @@ -311,6 +1033,7 @@ bool dScnPly_c::resetGame() { return false; } } + #endif } dComIfG_setBrightness(255); @@ -323,8 +1046,10 @@ void dScnPly_c::offReset() { if (field_0x1d4 != 0 && !fopOvlpM_IsPeek()) { mDoRst::offReset(); mDoRst::offResetPrepare(); + #if VERSION != VERSION_SHIELD_DEBUG JUTGamePad::C3ButtonReset::sResetOccurred = false; JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL); + #endif field_0x1d4 = 0; } } @@ -332,14 +1057,35 @@ void dScnPly_c::offReset() { static int phase_00(dScnPly_c* i_this) { if (!i_this->resetGame()) { return cPhs_INIT_e; - } else { - #if PLATFORM_WII - data_8053a730 = 1; - #endif + } - mDoGph_gInf_c::offBlure(); - return cPhs_NEXT_e; + #if PLATFORM_WII + data_8053a730 = 1; + #endif + + #if DEBUG + l_sceneChangeStartTick = OSGetTick(); + lbl_8074CAE4 = 1; + + mDoExt_setSafeGameHeapSize(); + mDoExt_setSafeZeldaHeapSize(); + mDoExt_setSafeCommandHeapSize(); + mDoExt_setSafeArchiveHeapSize(); + mDoExt_setSafeJ2dHeapSize(); + #endif + + mDoGph_gInf_c::offBlure(); + + #if DEBUG + if (!heapSizeCheck()) { + BOOL isDispWarning = mDoCPd_c::isConnect(PAD_3); + if (isDispWarning) { + JUT_WARN(2046, "%s", "Memory Danger !!"); + } } + #endif + + return cPhs_NEXT_e; } static int phase_01(dScnPly_c* i_this) { @@ -353,6 +1099,7 @@ static int phase_01(dScnPly_c* i_this) { mDoAud_setInDarkness(false); } + mDoAud_setSceneName(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), @@ -370,19 +1117,17 @@ static int phase_0(dScnPly_c* i_this) { } static int phase_1(dScnPly_c* i_this) { - u32 id = fopScnM_GetID(i_this); - dStage_roomControl_c::setProcID(id); + dStage_roomControl_c::setProcID(fopScnM_GetID(i_this)); dComIfGp_setStartStage(dComIfGp_getNextStartStage()); if (dComIfGp_getStartStageLayer() < 0 && daPy_py_c::checkRoomRestartStart()) { - const char* stage = dComIfGp_getStartStageName(); - s8 room = dComIfGp_getStartStageRoomNo(); - s8 layer = dComIfGp_getStartStageLayer(); - if (dComIfG_play_c::getLayerNo_common_common(stage, room, layer) < 0) { + int layer = dComIfG_play_c::getLayerNo_common_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), dComIfGp_getStartStageLayer()); + if (layer < 0) { dComIfGp_setStartStageLayer(dComIfGp_getLayerOld()); } } + dComIfGp_offEnableNextStage(); // Stage: Faron Woods, Room: Faron Spring @@ -431,14 +1176,32 @@ static int phase_1(dScnPly_c* i_this) { dComIfGp_world_dark_set(0); } + #if DEBUG + if (dKy_darkworld_check()) { + if (dComIfGp_getStartStageLayer() != -1 && dComIfGp_getStartStageLayer() < 10 && dComIfG_play_c::getLayerNo(0) < 10) { + if (strcmp(dComIfGp_getStartStageName(), "D_MN08") != 0) { + // "Twilight layer spec error! sasaki" + OSReport_Error("\nトワイライトのレイヤー指定異常です! sasaki"); + // "(If loaded from the debug menu, you can directly specify layers, so I can't tell if it's invalid.)" + OSReport_Error("\n(デバグメニューからの場合はレイヤー直指定できるので危険なのかは予測つきません。)"); + + OSReport_Error("\nstage[%s]", dComIfGp_getStartStageName()); + OSReport_Error("\nroom[%d]", dComIfGp_getStartStageRoomNo()); + OSReport_Error("\nlayer[%d]", dComIfG_play_c::getLayerNo(0)); + OSReport_Error("\nTW1[%d]", dComIfGs_isDarkClearLV(0)); + OSReport_Error("\nTW2[%d]", dComIfGs_isDarkClearLV(1)); + OSReport_Error("\nTW3[%d]", dComIfGs_isDarkClearLV(2)); + OSReport_Error("\nTW4[%d]", dComIfGs_isDarkClearLV(3)); + } + } + } + #endif + // Stage: Lake Hylia, Room: Fountain if (!strcmp(dComIfGp_getStartStageName(), "F_SP115") && dComIfGp_getStartStageRoomNo() == 1 && dComIfGp_getStartStageLayer() < 0) { - const char* stage = dComIfGp_getStartStageName(); - s8 room = dComIfGp_getStartStageRoomNo(); - s8 layer = dComIfGp_getStartStageLayer(); - if (dComIfG_play_c::getLayerNo_common(stage, room, layer) == 9) { + if (dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), dComIfGp_getStartStageLayer()) == 9) { dComIfGp_setStartStageLayer(9); } } @@ -467,6 +1230,14 @@ static int phase_1(dScnPly_c* i_this) { dComIfGs_onSaveDunSwitch(30); } + #if DEBUG + if (!strcmp(dComIfGp_getStartStageName(), "NPC_GND") && dComIfGp_getStartStageRoomNo() == 0 && + dComIfGp_getStartStageLayer() >= 12) + { + dComIfGp_world_dark_set(1); + } + #endif + dKy_darkworld_Area_set(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo()); // Stage: Hyrule Castle Sewers, Room: Prison Cell @@ -507,21 +1278,36 @@ static int phase_1(dScnPly_c* i_this) { } dComIfGs_BossLife_public_Set(0xFF); + + #if DEBUG + if (g_env_light.light_mask_type & 0xF0) { + g_env_light.light_mask_type = g_env_light.light_mask_type & 0xF; + } else { + g_env_light.light_mask_type = 0; + } + #else g_env_light.light_mask_type = 0; + #endif JUTReportConsole_f("Start StageName:RoomNo [%s:%d]\n", dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo()); dComIfGp_setStatus(0); + if (dComIfG_syncStageRes("Stg_00") < 0) { - dComIfG_setStageRes("Stg_00", NULL); + int rt = dComIfG_setStageRes("Stg_00", NULL); + JUT_ASSERT(2442, rt == 1); } + return cPhs_NEXT_e; } static int phase_1_0(dScnPly_c* i_this) { static char camparamarc[10] = "CamParam"; - if (dComIfG_syncStageRes("Stg_00")) { + int rt = dComIfG_syncStageRes("Stg_00"); + JUT_ASSERT(2469, rt >= 0); + + if (rt != 0) { return cPhs_INIT_e; } else { dStage_infoCreate(); @@ -533,8 +1319,8 @@ static int phase_1_0(dScnPly_c* i_this) { } static int phase_2(dScnPly_c* i_this) { - int tmp = dComIfG_syncAllObjectRes(); - if (tmp >= 0 && tmp != 0) { + int rt = dComIfG_syncAllObjectRes(); + if (rt >= 0 && rt != 0) { return cPhs_INIT_e; } @@ -544,6 +1330,13 @@ static int phase_2(dScnPly_c* i_this) { particle_no = dStage_stagInfo_GetParticleNo(dComIfGp_getStage()->getStagInfo()); } + #if DEBUG + if (fapGm_HIO_c::mParticle254Fix) { + particle_no = 0xFE; + } + #endif + + OS_REPORT("============== sceneParticleNo=%d\n", particle_no); dComIfGp_particle_readScene(particle_no, &i_this->sceneCommand); dMsgObject_readMessageGroup(&i_this->field_0x1d0); return cPhs_NEXT_e; @@ -558,6 +1351,10 @@ static int phase_3(dScnPly_c* i_this) { return cPhs_INIT_e; } + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::createShare(); + #endif + return cPhs_NEXT_e; } @@ -570,9 +1367,16 @@ dScnPly_preset_HIO_c g_presetHIO; #endif static int phase_4(dScnPly_c* i_this) { + #if VERSION == VERSION_SHIELD_DEBUG + if (!dBgp_c::executeShare()) { + return cPhs_INIT_e; + } + #endif + if (i_this->sceneCommand) { + JUT_ASSERT(2610, i_this->sceneCommand->getMemAddress() != NULL); dComIfGp_particle_createScene(i_this->sceneCommand->getMemAddress()); - i_this->sceneCommand->destroy(); + delete i_this->sceneCommand; } else { dComIfGp_particle_createScene(NULL); } @@ -583,13 +1387,25 @@ static int phase_4(dScnPly_c* i_this) { } dComIfGp_calcNowRegion(); + #if DEBUG + dComIfG_initStopwatch(); + #endif dComIfG_Bgsp().Ct(); fopAcM_lc_c::getLineCheck()->ClearPi(); fopAcM_gc_c::getGroundCheck()->ClearPi(); fopAcM_rc_c::getRoofCheck()->ClearPi(); fopAcM_wt_c::getWaterCheck()->ClearPi(); dComIfG_Ccsp()->Ct(); + #if VERSION == VERSION_SHIELD_DEBUG + dPath_Ct(); + #endif dDemo_c::create(); + dEyeHL_mng_c::create(); + + #if DEBUG + dJcame_c::create(dDemo_c::getSystem(), 0.03333334f, *mDoCPd_c::getGamePad(PAD_4)); + dJprev_c::create((JStudio::TControl*)dDemo_c::getControl(), *mDoCPd_c::getGamePad(PAD_4)); + #endif dComIfGp_setPlayerInfo(0, NULL, 0); for (int i = 0; i < 2; i++) { @@ -602,11 +1418,19 @@ static int phase_4(dScnPly_c* i_this) { dComIfGd_setViewport(NULL); dComIfGd_setView(NULL); - dComIfGp_setExpHeap2D(fopMsgM_createExpHeap(0xBB800, NULL)); - dComIfGp_setMsgExpHeap(fopMsgM_createExpHeap(0xA800, NULL)); + JKRExpHeap* heap = fopMsgM_createExpHeap(0xBB800, NULL); + JUT_ASSERT(2704, heap != NULL); + dComIfGp_setExpHeap2D(heap); + + JKRExpHeap* heap2 = fopMsgM_createExpHeap(0xA800, NULL); + JUT_ASSERT(2709, heap2 != NULL); + dComIfGp_setMsgExpHeap(heap2); if (fpcM_GetName(i_this) == PROC_OPENING_SCENE) { fopAcM_create(PROC_TITLE, 0, NULL, -1, NULL, NULL, -1); + #if DEBUG + g_playerKind = 0; + #endif dComIfGs_init(); dComIfGs_setOptPointer(0); dComIfGs_setLife(12); @@ -622,10 +1446,20 @@ static int phase_4(dScnPly_c* i_this) { dComIfGp_createSimpleModel(); dMdl_mng_c::create(); - mDoGph_gInf_c::setTickRate((OS_BUS_CLOCK / 4) / 30); - g_envHIO.field_0x4 = -1; - g_save_bit_HIO.field_0x4 = -1; - new (dComIfGp_getAttention()) dAttention_c(dComIfGp_getPlayer(0), 0); + mDoGph_gInf_c::setTickRate(OS_TIMER_CLOCK / 30); + + #if DEBUG + g_preLoadHIO.entryHIO("プリロード制御"); + #endif + g_envHIO.field_0x4 = mDoHIO_CREATE_CHILD("描画設定", &g_envHIO); + g_save_bit_HIO.field_0x4 = mDoHIO_CREATE_CHILD("記録ビット", &g_save_bit_HIO); + + #if DEBUG + daObj::HioObj_c::init(); + #endif + + dAttention_c* attention = dComIfGp_getAttention(); + new (attention) dAttention_c(dComIfGp_getPlayer(0), 0); dComIfGp_getVibration().Init(); daYkgr_c::init(); @@ -650,6 +1484,7 @@ static int phase_4(dScnPly_c* i_this) { return cPhs_COMPLEATE_e; } + OS_REPORT("\x1b[32mプリロードやります\n\x1b[m"); resPreLoadTime0 = OSGetTime(); return cPhs_NEXT_e; } @@ -657,25 +1492,30 @@ static int phase_4(dScnPly_c* i_this) { static int phase_5(dScnPly_c* i_this) { if (preLoadNo >= 0) { int phase_state = cPhs_NEXT_e; + int goodLoads = 0; + int loadNum = 0; const char** resNames = PreLoadInfoT[preLoadNo].resNameTbl; s32 resNameNum = PreLoadInfoT[preLoadNo].resNameNum; if (resNames != NULL && *resNames != NULL) { JUT_ASSERT(2830, resNameNum <= ARRAY_SIZEU(resPhase)); - int goodLoads = 0; - int loadNum = 0; + for (int i = 0; i < resNameNum; i++) { - if (dComIfG_resLoad(&resPhase[i], resNames[i]) == 4) { - goodLoads++; - } else { + int load_phase = dComIfG_resLoad(&resPhase[i], resNames[i]); + if (load_phase != cPhs_COMPLEATE_e) { phase_state = cPhs_INIT_e; + } else { + goodLoads++; } loadNum++; } + + OS_REPORT("\x1b[32mリソースプリロード %d/%d\n\x1b[m", goodLoads, loadNum); } if (phase_state == cPhs_COMPLEATE_e) { resPreLoadTime1 = OSGetTime(); + OS_REPORT("\x1b[32mリソースプリロード %lld ms\n\x1b[m", OSTicksToMilliseconds(resPreLoadTime1 - resPreLoadTime0)); } return phase_state; @@ -687,25 +1527,30 @@ static int phase_5(dScnPly_c* i_this) { static int phase_6(dScnPly_c* i_this) { if (preLoadNo >= 0) { int phase_state = cPhs_NEXT_e; + int goodLoads = 0; + int loadNum = 0; const s16* dylKeyTbl = PreLoadInfoT[preLoadNo].profNameTbl; s32 dylKeyTblNum = PreLoadInfoT[preLoadNo].dylKeyTblNum; if (dylKeyTbl != NULL && *dylKeyTbl != 0) { JUT_ASSERT(2864, dylKeyTblNum <= ARRAY_SIZEU(dylPhase)); - int goodLoads = 0; - int loadNum = 0; + for (int i = 0; i < dylKeyTblNum; i++) { - if (cDylPhs::Link(&dylPhase[i], dylKeyTbl[i]) == cPhs_COMPLEATE_e) { - goodLoads++; - } else { + int load_phase = cDylPhs::Link(&dylPhase[i], dylKeyTbl[i]); + if (load_phase != cPhs_COMPLEATE_e) { phase_state = cPhs_INIT_e; + } else { + goodLoads++; } loadNum++; } + + OS_REPORT("\x1b[32mダイナミックリンクプリロード %d/%d\n\x1b[m", goodLoads, loadNum); } if (phase_state == cPhs_COMPLEATE_e) { dylPreLoadTime1 = OSGetTime(); + OS_REPORT("\x1b[32mダイナミックリンクプリロード %lld ms\n\x1b[m", OSTicksToMilliseconds(dylPreLoadTime1 - dylPreLoadTime0)); } return phase_state; @@ -718,17 +1563,24 @@ static int phase_compleate(void* i_this) { return cPhs_COMPLEATE_e; } -static void dScnPly_Create(scene_class* i_this) { +static int 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_1, - (request_of_phase_process_fn)phase_1_0, (request_of_phase_process_fn)phase_01, - (request_of_phase_process_fn)phase_0, (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_00, + (request_of_phase_process_fn)phase_1, + (request_of_phase_process_fn)phase_1_0, + (request_of_phase_process_fn)phase_01, + (request_of_phase_process_fn)phase_0, + (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, }; - dComLbG_PhaseHandler(&static_cast<dScnPly_c*>(i_this)->field_0x1c4, l_method, i_this); + dScnPly_c* a_this = (dScnPly_c*)i_this; + int phase_state = dComLbG_PhaseHandler(&a_this->field_0x1c4, l_method, a_this); + return phase_state; } static scene_method_class l_dScnPly_Method = { diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index cd0fcd0958..e1bd46d431 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -1552,7 +1552,7 @@ u8 data_8074C56A_debug; u8 data_8074C56B_debug; u8 data_8074C56C_debug; -u32 dStage_roomControl_c::mProcID; +fpc_ProcID dStage_roomControl_c::mProcID; s8 dStage_roomControl_c::mStayNo; @@ -2485,7 +2485,7 @@ static void dStage_dt_c_stageInitLoader(void* i_data, dStage_dt_c* i_stage) { } #if DEBUG -static void dStage_DebugDisp() { +void dStage_DebugDisp() { if (data_8074C569_debug) { JUTReport(30, 270, "envLayerSet: EnvRoom None"); } |
