summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/d/a/d_a_alink.cpp315
-rw-r--r--src/d/a/d_a_npc.cpp89
-rw-r--r--src/d/bg/d_bg_s.cpp2
-rw-r--r--src/d/bg/d_bg_w.cpp2
-rw-r--r--src/d/bg/d_bg_w_kcol.cpp2
-rw-r--r--src/d/d_drawlist.cpp1
-rw-r--r--src/d/d_lib.cpp8
-rw-r--r--src/d/d_resorce.cpp1
-rw-r--r--src/d/kankyo/d_kankyo.cpp2
-rw-r--r--src/d/menu/d_menu_collect.cpp1
-rw-r--r--src/d/menu/d_menu_window.cpp20
-rw-r--r--src/d/particle/d_particle.cpp1
-rw-r--r--src/f_op/f_op_actor.cpp1
-rw-r--r--src/m_Do/m_Do_DVDError.cpp127
-rw-r--r--src/m_Do/m_Do_Reset.cpp158
-rw-r--r--src/m_Do/m_Do_audio.cpp92
-rw-r--r--src/m_Do/m_Do_graphic.cpp2
-rw-r--r--src/m_Do/m_Do_main.cpp418
18 files changed, 483 insertions, 759 deletions
diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp
index cf4975757c..0846767685 100644
--- a/src/d/a/d_a_alink.cpp
+++ b/src/d/a/d_a_alink.cpp
@@ -13,6 +13,7 @@
#include "d/a/d_a_horse_static.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_bomb.h"
+#include "d/d_procname.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "f_op/f_op_actor_mng.h"
@@ -3307,7 +3308,6 @@ extern "C" u8 mGndCheck__11fopAcM_gc_c[84];
extern "C" u8 mWaterCheck__11fopAcM_wt_c[84 + 4 /* padding */];
extern "C" u8 mDemoArcName__20dStage_roomControl_c[10 + 2 /* padding */];
extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32];
-extern "C" extern u8 g_env_light[4880];
extern "C" f32 Zero__4cXyz[3];
extern "C" u8 BaseX__4cXyz[12];
extern "C" u8 BaseY__4cXyz[12];
@@ -3347,6 +3347,10 @@ inline BOOL i_dComIfGs_isEventBit(u16 id) {
return g_dComIfG_gameInfo.info.getEvent().isEventBit(id);
}
+inline bool i_dComIfGp_checkPlayerStatus1(int param_0, u32 flag) {
+ return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 1, flag);
+}
+
/* 8009D87C-8009D884 0981BC 0008+00 0/0 1/1 0/0 .text getE3Zhint__9daAlink_cFv */
bool daAlink_c::getE3Zhint() {
return false;
@@ -15665,8 +15669,8 @@ BOOL daAlink_c::itemButtonCheck(u8 pButton) {
return mItemButton & pButton;
}
-void daAlink_c::itemButton() {
- itemButtonCheck(1 << mSelectItemId);
+BOOL daAlink_c::itemButton() {
+ return itemButtonCheck(1 << mSelectItemId);
}
void daAlink_c::itemTrigger() {
@@ -17152,7 +17156,7 @@ asm J3DModelData* daAlink_c::loadAramBmd(u16 param_0, u32 param_1) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void daAlink_c::loadAram(u16 param_0, u32 param_1) {
+asm void* daAlink_c::loadAram(u16 param_0, u32 param_1) {
nofralloc
#include "asm/d/a/d_a_alink/loadAram__9daAlink_cFUsUl.s"
}
@@ -28031,164 +28035,141 @@ asm void daAlink_c::hookshotAtHitCallBack(dCcD_GObjInf* param_0, fopAc_ac_c* par
/* 8010859C-801085BC 102EDC 0020+00 1/1 0/0 0/0 .text
* daAlink_hookshotAtHitCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void daAlink_hookshotAtHitCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1,
+static void daAlink_hookshotAtHitCallBack(fopAc_ac_c* player, dCcD_GObjInf* param_1,
fopAc_ac_c* param_2, dCcD_GObjInf* param_3) {
- nofralloc
-#include "asm/d/a/d_a_alink/daAlink_hookshotAtHitCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf.s"
+ ((daAlink_c*)player)->hookshotAtHitCallBack(param_1, param_2, param_3);
}
-#pragma pop
/* 801085BC-80108600 102EFC 0044+00 1/0 0/0 0/0 .text getHookshotTopPos__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool daAlink_c::getHookshotTopPos() {
- nofralloc
-#include "asm/d/a/d_a_alink/getHookshotTopPos__9daAlink_cFv.s"
+cXyz* daAlink_c::getHookshotTopPos() {
+ if (checkHookshotItem(mEquipItem)) {
+ return &mHookshotTopPos;
+ }
+
+ return NULL;
}
-#pragma pop
/* 80108600-80108668 102F40 0068+00 1/0 0/0 0/0 .text checkHookshotReturnMode__9daAlink_cCFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool daAlink_c::checkHookshotReturnMode() const {
- nofralloc
-#include "asm/d/a/d_a_alink/checkHookshotReturnMode__9daAlink_cCFv.s"
+bool daAlink_c::checkHookshotReturnMode() const {
+ return checkHookshotItem(mEquipItem) && (mHookshotMode == 4 || mHookshotMode == 5 || mHookshotMode == 6);
}
-#pragma pop
/* 80108668-801086DC 102FA8 0074+00 1/0 0/0 0/0 .text checkHookshotShootReturnMode__9daAlink_cCFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool daAlink_c::checkHookshotShootReturnMode() const {
- nofralloc
-#include "asm/d/a/d_a_alink/checkHookshotShootReturnMode__9daAlink_cCFv.s"
+bool daAlink_c::checkHookshotShootReturnMode() const {
+ return (checkHookshotItem(mEquipItem) && mHookshotMode == 3) || checkHookshotReturnMode();
}
-#pragma pop
/* 801086DC-8010871C 10301C 0040+00 6/6 0/0 0/0 .text resetHookshotMode__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::resetHookshotMode() {
- nofralloc
-#include "asm/d/a/d_a_alink/resetHookshotMode__9daAlink_cFv.s"
+void daAlink_c::resetHookshotMode() {
+ mHookshotMode = 0;
+ initLockAt();
+ mSearchBallScale = __float_max[0];
}
-#pragma pop
/* 8010871C-80108784 10305C 0068+00 0/0 0/0 1/1 .text
* setEnemyBombHookshot__9daAlink_cFP10fopAc_ac_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::setEnemyBombHookshot(fopAc_ac_c* param_0) {
- nofralloc
-#include "asm/d/a/d_a_alink/setEnemyBombHookshot__9daAlink_cFP10fopAc_ac_c.s"
+bool daAlink_c::setEnemyBombHookshot(fopAc_ac_c* actor) {
+ if (field_0x284c.getActor() != NULL) {
+ cancelHookshotCarry();
+ field_0x284c.setData(actor);
+ fopAcM_setHookCarryNow(actor);
+ return true;
+ }
+ return false;
}
-#pragma pop
/* 80108784-801087B0 1030C4 002C+00 3/3 0/0 0/0 .text checkLv7BossRoom__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkLv7BossRoom() {
- nofralloc
-#include "asm/d/a/d_a_alink/checkLv7BossRoom__9daAlink_cFv.s"
+bool daAlink_c::checkLv7BossRoom() {
+ return checkStageName("D_MN07A");
}
-#pragma pop
/* 801087B0-80108828 1030F0 0078+00 6/6 0/0 0/0 .text
* checkHookshotStickBG__9daAlink_cFR13cBgS_PolyInfo */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkHookshotStickBG(cBgS_PolyInfo& param_0) {
- nofralloc
-#include "asm/d/a/d_a_alink/checkHookshotStickBG__9daAlink_cFR13cBgS_PolyInfo.s"
+bool daAlink_c::checkHookshotStickBG(cBgS_PolyInfo& poly) {
+ if (dComIfG_Bgsp().ChkPolyHSStick(poly)) {
+ dBgW_Base* bgw = dComIfG_Bgsp().GetBgWBasePointer(poly);
+ if (bgw != NULL && bgw->ChkPushPullOk()) {
+ return true;
+ }
+ }
+
+ return false;
}
-#pragma pop
/* 80108828-80108864 103168 003C+00 4/4 0/0 0/0 .text cancelHookshotCarry__9daAlink_cFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::cancelHookshotCarry() {
- nofralloc
-#include "asm/d/a/d_a_alink/cancelHookshotCarry__9daAlink_cFv.s"
+void daAlink_c::cancelHookshotCarry() {
+ if (field_0x284c.getActor() != NULL) {
+ fopAcM_cancelHookCarryNow(field_0x284c.getActor());
+ field_0x284c.clearData();
+ }
}
-#pragma pop
/* 80108864-801088A0 1031A4 003C+00 2/2 0/0 0/0 .text changeHookshotDrawModel__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::changeHookshotDrawModel() {
- nofralloc
-#include "asm/d/a/d_a_alink/changeHookshotDrawModel__9daAlink_cFv.s"
+void daAlink_c::changeHookshotDrawModel() {
+ if (mEquipItem == HOOKSHOT && field_0x3020 == 1) {
+ J3DModel* old_item = mHeldItemModel;
+ mHeldItemModel = field_0x0710;
+ field_0x0710 = old_item;
+
+ J3DModel* old_item2 = field_0x070c;
+ field_0x070c = field_0x0714;
+ field_0x0714 = old_item2;
+ }
}
-#pragma pop
/* 801088A0-801088C8 1031E0 0028+00 6/6 0/0 0/0 .text checkHookshotRoofLv7Boss__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkHookshotRoofLv7Boss() {
- nofralloc
-#include "asm/d/a/d_a_alink/checkHookshotRoofLv7Boss__9daAlink_cFv.s"
+BOOL daAlink_c::checkHookshotRoofLv7Boss() {
+ return mCargoCarryActor.getActor() != NULL && fopAcM_GetName(mCargoCarryActor.getActor()) == PROC_B_DR;
}
-#pragma pop
/* 801088C8-80108980 103208 00B8+00 2/2 0/0 0/0 .text checkChaseHookshot__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkChaseHookshot() {
- nofralloc
-#include "asm/d/a/d_a_alink/checkChaseHookshot__9daAlink_cFv.s"
+BOOL daAlink_c::checkChaseHookshot() {
+ if (field_0x2804 == NULL) {
+ if (mTargetedActor != NULL) {
+ field_0x2804 = mTargetedActor;
+ } else {
+ field_0x2804 = this;
+ }
+ } else if (field_0x2804 != mTargetedActor) {
+ field_0x2804 = this;
+ }
+
+ if (mTargetedActor != NULL) {
+ s16 actorName = fopAcM_GetName(mTargetedActor);
+ return field_0x2804 == mTargetedActor && (checkBossOctaIealRoom() || actorName == PROC_Obj_FallObj || actorName == PROC_B_DR || actorName == PROC_E_PH);
+ }
+
+ return false;
}
-#pragma pop
/* 80108980-801089E8 1032C0 0068+00 2/2 0/0 0/0 .text checkOctaIealSpecialCollect__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkOctaIealSpecialCollect() {
- nofralloc
-#include "asm/d/a/d_a_alink/checkOctaIealSpecialCollect__9daAlink_cFv.s"
+BOOL daAlink_c::checkOctaIealSpecialCollect() {
+ return mActionID == 0xC6 && checkHookshotItem(mEquipItem) && checkBossOctaIealRoom();
}
-#pragma pop
/* 801089E8-80108A18 103328 0030+00 5/5 0/0 0/0 .text checkBossOctaIealRoom__9daAlink_cFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkBossOctaIealRoom() {
- nofralloc
-#include "asm/d/a/d_a_alink/checkBossOctaIealRoom__9daAlink_cFv.s"
+BOOL daAlink_c::checkBossOctaIealRoom() {
+ return checkStageName("D_MN01A");
}
-#pragma pop
/* 80108A18-80108A3C 103358 0024+00 19/19 0/0 0/0 .text checkHookshotWait__9daAlink_cCFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::checkHookshotWait() const {
- nofralloc
-#include "asm/d/a/d_a_alink/checkHookshotWait__9daAlink_cCFv.s"
+BOOL daAlink_c::checkHookshotWait() const {
+ return mHookshotMode == 0 || mHookshotMode == 1;
}
-#pragma pop
/* 80108A3C-80108A90 10337C 0054+00 1/1 0/0 0/0 .text setHookshotCatchNow__9daAlink_cFv
*/
+// matches with literals
+#ifdef NONMATCHING
+void daAlink_c::setHookshotCatchNow() {
+ field_0x3026 = 5;
+ dComIfGp_getVibration().StartShock(4, 1, cXyz(0.0f, 1.0f, 0.0f));
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -28197,27 +28178,78 @@ asm void daAlink_c::setHookshotCatchNow() {
#include "asm/d/a/d_a_alink/setHookshotCatchNow__9daAlink_cFv.s"
}
#pragma pop
+#endif
/* 80108A90-80108B34 1033D0 00A4+00 1/0 0/0 0/0 .text setHookshotCarryOffset__9daAlink_cFUiPC4cXyz
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool daAlink_c::setHookshotCarryOffset(unsigned int param_0, cXyz const* param_1) {
- nofralloc
-#include "asm/d/a/d_a_alink/setHookshotCarryOffset__9daAlink_cFUiPC4cXyz.s"
+bool daAlink_c::setHookshotCarryOffset(unsigned int actorID, cXyz const* offset) {
+ if (i_dComIfGp_checkPlayerStatus1(0, 0x10000)) {
+ fopAc_ac_c* carryActor = mCargoCarryActor.getActor();
+
+ if (carryActor != NULL && fopAcM_checkHookCarryNow(carryActor) && actorID == mCargoCarryActor.getID()) {
+ field_0x37c8 = *offset;
+ return true;
+ }
+ }
+
+ fopAc_ac_c* actor = field_0x284c.getActor();
+ if (actor != NULL && fopAcM_checkHookCarryNow(actor) && actorID == field_0x284c.getID()) {
+ field_0x37f8 = *offset;
+ return true;
+ }
+
+ return false;
}
-#pragma pop
/* 80108B34-80108DB4 103474 0280+00 1/1 0/0 0/0 .text setHookshotModel__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::setHookshotModel() {
- nofralloc
-#include "asm/d/a/d_a_alink/setHookshotModel__9daAlink_cFv.s"
+void daAlink_c::setHookshotModel() {
+ J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(0x17E);
+
+ JKRHeap* heap = setItemHeap();
+ field_0x730.init(bck, 0, 2, lit_6040, 0, -1, false);
+
+ J3DModelData* heldItem_modelData = loadAramBmd(0x316, 0x5C00);
+ mHeldItemModel = initModel(heldItem_modelData, 0x80000, 0);
+
+ J3DModelData* modelData = loadAramBmd(0x318, 0x3800);
+ field_0x070c = initModel(modelData, 0x80000, 0);
+ field_0x0710 = initModel(mHeldItemModel->getModelData(), 0x80000, 0);
+ field_0x0714 = initModel(field_0x070c->getModelData(), 0x80000, 0);
+
+ field_0x0768 = loadAramBmd(0x317, 0x1000);
+ field_0x770 = new hsChainShape_c();
+ field_0x076c = new Z2SoundObjSimple();
+
+ mpHookshotLinChk = new dBgS_ObjLinChk();
+ mpHookshotLinChk->OffFullGrp();
+ mpHookshotLinChk->OnWaterGrp();
+
+ J3DAnmTransform* bck2 = (J3DAnmTransform*)loadAram(0x17F, 0x800);
+ field_0x74C.init(bck2, 0, 2, lit_6040, 0, -1, false);
+ mDoExt_setCurrentHeap(heap);
+
+ resetHookshotMode();
+ field_0x770->setUserArea((u32)this);
+ field_0x2f94 = 1;
+ if (mEquipItem == W_HOOKSHOT) {
+ field_0x2f95 = 6;
+ }
+
+ field_0x3020 = 0;
+ field_0x3024 = 0;
+
+ field_0x122C[0].SetAtSpl(dCcG_At_Spl_UNK_0);
+ field_0x122C[0].OffAtNoHitMark();
+ field_0x122C[0].SetAtAtp(0);
+ field_0x122C[0].SetR(lit_7808);
+ field_0x122C[0].SetAtSe(8);
+ field_0x122C[0].SetAtType(0x4000);
+ field_0x122C[0].SetAtHitMark(1);
+ field_0x122C[0].OnAtSetBit();
+ field_0x122C[0].SetAtHitCallback(daAlink_hookshotAtHitCallBack);
+ field_0x122C[0].SetAtMtrl(0);
+ field_0x076c->init(&mHookshotTopPos, 1);
}
-#pragma pop
/* 80108DB4-80108EEC 1036F4 0138+00 6/6 0/0 0/0 .text setHookshotSight__9daAlink_cFv */
#pragma push
@@ -28230,24 +28262,37 @@ asm void daAlink_c::setHookshotSight() {
#pragma pop
/* 80108EEC-80108F64 10382C 0078+00 1/1 0/0 0/0 .text cancelHookshotShot__9daAlink_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daAlink_c::cancelHookshotShot() {
- nofralloc
-#include "asm/d/a/d_a_alink/cancelHookshotShot__9daAlink_cFv.s"
+void daAlink_c::cancelHookshotShot() {
+ if (checkHookshotItem(mEquipItem) && (mHookshotMode == 3 || mHookshotMode == 5 || mHookshotMode == 4)) {
+ if (mActionID != 0xC5 && mActionID != 0xC6 && mActionID != 0xC4) {
+ mHookshotMode = 6;
+ }
+ }
}
-#pragma pop
/* 80108F64-8010903C 1038A4 00D8+00 4/4 0/0 0/0 .text cancelHookshotMove__9daAlink_cFv */
+// checkAttentionLock has weird codegen
+#ifdef NONMATCHING
+bool daAlink_c::cancelHookshotMove() {
+ if (mFastShotTime == 0 && mHookshotMode == 0) {
+ if (checkHookshotAnime() && (mTargetedActor == NULL && !i_checkAttentionLock() || !itemButton())) {
+ resetUpperAnime(UPPER_NOW, -1.0f);
+ return 1;
+ }
+ }
+
+ return 0;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void daAlink_c::cancelHookshotMove() {
+asm bool daAlink_c::cancelHookshotMove() {
nofralloc
#include "asm/d/a/d_a_alink/cancelHookshotMove__9daAlink_cFv.s"
}
#pragma pop
+#endif
/* 8010903C-80109070 10397C 0034+00 2/2 0/0 0/0 .text
* checkHookshotReadyMaterialOffMode__9daAlink_cCFv */
@@ -32159,10 +32204,6 @@ asm void daAlink_c::checkWolfLandAction(int param_0) {
}
#pragma pop
-inline bool i_dComIfGp_checkPlayerStatus1(int param_0, u32 flag) {
- return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 1, flag);
-}
-
/* 80129958-801299A8 124298 0050+00 1/1 0/0 1/1 .text checkMidnaUseAbility__9daAlink_cCFv
*/
BOOL daAlink_c::checkMidnaUseAbility() const {
@@ -35893,8 +35934,8 @@ bool daPy_py_c::getDpdFarFlg() const {
}
/* 8014188C-80141894 13C1CC 0008+00 1/0 0/0 0/0 .text getHookshotTopPos__9daPy_py_cFv */
-bool daPy_py_c::getHookshotTopPos() {
- return false;
+cXyz* daPy_py_c::getHookshotTopPos() {
+ return NULL;
}
/* 80141894-8014189C 13C1D4 0008+00 1/0 0/0 0/0 .text checkHookshotReturnMode__9daPy_py_cCFv */
diff --git a/src/d/a/d_a_npc.cpp b/src/d/a/d_a_npc.cpp
index 5a1f3575e8..54088d85d9 100644
--- a/src/d/a/d_a_npc.cpp
+++ b/src/d/a/d_a_npc.cpp
@@ -37,80 +37,6 @@ struct daNpcT_MatAnm_c {
/* 8014D24C */ ~daNpcT_MatAnm_c();
};
-struct daNpcF_c {
- struct daNpcF_anmPlayData {};
-
- /* 80152014 */ void execute();
- /* 801522AC */ void draw(int, int, f32, _GXColorS10*, int);
- /* 80152614 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*);
- /* 80152654 */ void srchAttnActor1(void*, void*);
- /* 801526E8 */ void srchActor(void*, void*);
- /* 8015276C */ void setMtx();
- /* 801527FC */ void setMtx2();
- /* 801528C8 */ void initialize();
- /* 80152B2C */ void getTrnsfrmKeyAnmP(char*, int);
- /* 80152B68 */ void getTexPtrnAnmP(char*, int);
- /* 80152BA4 */ void getTexSRTKeyAnmP(char*, int);
- /* 80152BE0 */ void getTevRegKeyAnmP(char*, int);
- /* 80152C1C */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int);
- /* 80152C80 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool);
- /* 80152CC4 */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int);
- /* 80152D04 */ void setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int);
- /* 80152D44 */ void setBrkAnm(J3DAnmTevRegKey*, J3DModelData*, f32, int);
- /* 80152D84 */ void setEnvTevColor();
- /* 80152DE0 */ void setRoomNo();
- /* 80152E24 */ void chkEndAnm(f32);
- /* 80152EC4 */ void chkEndAnm(J3DFrameCtrl*, f32);
- /* 80152F40 */ void playAllAnm();
- /* 80153150 */ void playExpressionAnm(daNpcF_c::daNpcF_anmPlayData***);
- /* 80153264 */ void playMotionAnm(daNpcF_c::daNpcF_anmPlayData***);
- /* 8015337C */ void setLookatMtx(int, int*, f32);
- /* 80153578 */ void hitChk2(dCcD_Cyl*, int, int);
- /* 80153658 */ void setDamage(int, int, int);
- /* 80153718 */ void ctrlMsgAnm(int&, int&, fopAc_ac_c*, int);
- /* 8015387C */ void orderEvent(int, char*, u16, u16, u8, u16);
- /* 80153954 */ void changeEvent(char*, char*, u16, u16);
- /* 801539F0 */ void chkActorInSight(fopAc_ac_c*, f32);
- /* 80153A78 */ void chkActorInArea(fopAc_ac_c*, cXyz, cXyz, s16);
- /* 80153BDC */ void chkActorInAttnArea(fopAc_ac_c*, fopAc_ac_c*, int);
- /* 80153D1C */ void initTalk(int, fopAc_ac_c**);
- /* 80153D84 */ void talkProc(int*, int, fopAc_ac_c**);
- /* 80153EF4 */ void turn(s16, f32, int);
- /* 801540A4 */ void step(s16, int, int, int);
- /* 80154250 */ void setAngle(s16);
- /* 80154278 */ void getDistTableIdx(int, int);
- /* 801542A0 */ void getEvtAreaTagP(int, int);
- /* 8015436C */ void getAttnActorP(int, void* (*)(void*, void*), f32, f32, f32, f32, s16, int,
- int);
- /* 80154730 */ void chkActorInSight2(fopAc_ac_c*, f32, s16);
- /* 80154834 */ void chkPointInArea(cXyz, cXyz, f32, f32, f32, s16);
- /* 801548F4 */ void chkPointInArea(cXyz, cXyz, cXyz, s16);
- /* 8015496C */ void getAttentionPos(fopAc_ac_c*);
- /* 801549E0 */ void chkFindPlayer2(int, s16);
- /* 80154BD8 */ void setHitodamaPrtcl();
- /* 80155BB4 */ void setCollisions();
- /* 80155BB8 */ void setAttnPos();
- /* 80155BBC */ void adjustShapeAngle();
- /* 80155BC0 */ bool main();
- /* 80155BC8 */ void setParam();
- /* 80155BCC */ void drawOtherMdls();
- /* 80155BD0 */ bool drawDbgInfo();
- /* 80155BD8 */ bool ctrlBtk();
- /* 80155BE0 */ bool setExpressionAnm(int, bool);
- /* 80155BE8 */ void setMotionAnm(int, f32);
- /* 80155BEC */ void setMotion(int, f32, int);
- /* 80155BF0 */ void setExpression(int, f32);
- /* 80155BF4 */ ~daNpcF_c();
- /* 80155EC8 */ bool setExpressionBtp(int);
-
- static u8 const mCcDObjInfo[48];
- static u8 mCcDCyl[68];
- static u8 mCcDSph[64];
- static u8 mFindActorPList[400];
- static u8 mFindCount[4];
- static u8 mSrchActorName[2 + 2 /* padding */];
-};
-
struct dPath {};
struct daNpcF_SPCurve_c {
@@ -163,15 +89,6 @@ struct daNpcF_Lookat_c {
/* 80151FE0 */ void clrRotAngle();
};
-struct daNpcF_ActorMngr_c {
- /* 801506B0 */ void initialize();
- /* 801506D8 */ void entry(unsigned int);
- /* 801506BC */ void entry(fopAc_ac_c*);
- /* 801506E0 */ void remove();
- /* 801506EC */ void getActorP();
- /* 80155E40 */ ~daNpcF_ActorMngr_c();
-};
-
struct daBaseNpc_path_c {
/* 8014D998 */ daBaseNpc_path_c();
/* 8014D9A8 */ void isPath();
@@ -4762,7 +4679,8 @@ void daNpcF_c::setExpression(int param_0, f32 param_1) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm daNpcF_c::~daNpcF_c() {
+// asm daNpcF_c::~daNpcF_c() {
+extern "C" asm void __dt__8daNpcF_cFv() {
nofralloc
#include "asm/d/a/d_a_npc/__dt__8daNpcF_cFv.s"
}
@@ -4772,7 +4690,8 @@ asm daNpcF_c::~daNpcF_c() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm daNpcF_ActorMngr_c::~daNpcF_ActorMngr_c() {
+// asm daNpcF_ActorMngr_c::~daNpcF_ActorMngr_c() {
+extern "C" asm void __dt__18daNpcF_ActorMngr_cFv() {
nofralloc
#include "asm/d/a/d_a_npc/__dt__18daNpcF_ActorMngr_cFv.s"
}
diff --git a/src/d/bg/d_bg_s.cpp b/src/d/bg/d_bg_s.cpp
index 5516f14d1e..fb90040c4f 100644
--- a/src/d/bg/d_bg_s.cpp
+++ b/src/d/bg/d_bg_s.cpp
@@ -671,7 +671,7 @@ bool dBgS::GetPolyAttackThrough(cBgS_PolyInfo const& poly) {
}
/* 800751F8-8007524C 06FB38 0054+00 0/0 1/1 0/0 .text ChkPolyHSStick__4dBgSFRC13cBgS_PolyInfo */
-bool dBgS::ChkPolyHSStick(cBgS_PolyInfo const& poly) {
+u32 dBgS::ChkPolyHSStick(cBgS_PolyInfo const& poly) {
int bg_index = poly.GetBgIndex();
if (m_chk_element[bg_index].ChkUsed()) {
return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyHSStick(poly.GetPolyIndex());
diff --git a/src/d/bg/d_bg_w.cpp b/src/d/bg/d_bg_w.cpp
index ba90aee54a..9676d73678 100644
--- a/src/d/bg/d_bg_w.cpp
+++ b/src/d/bg/d_bg_w.cpp
@@ -1076,7 +1076,7 @@ asm void dBgW::GetPolyArrowThrough(int param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm bool dBgW::GetPolyHSStick(int param_0) {
+asm u32 dBgW::GetPolyHSStick(int param_0) {
nofralloc
#include "asm/d/bg/d_bg_w/GetPolyHSStick__4dBgWFi.s"
}
diff --git a/src/d/bg/d_bg_w_kcol.cpp b/src/d/bg/d_bg_w_kcol.cpp
index 8b47c5a3a9..a35621f5b4 100644
--- a/src/d/bg/d_bg_w_kcol.cpp
+++ b/src/d/bg/d_bg_w_kcol.cpp
@@ -686,7 +686,7 @@ asm void dBgWKCol::GetPolyArrowThrough(int param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dBgWKCol::GetPolyHSStick(int param_0) {
+asm u32 dBgWKCol::GetPolyHSStick(int param_0) {
nofralloc
#include "asm/d/bg/d_bg_w_kcol/GetPolyHSStick__8dBgWKColFi.s"
}
diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp
index 6deebb62d9..936ab7279b 100644
--- a/src/d/d_drawlist.cpp
+++ b/src/d/d_drawlist.cpp
@@ -263,7 +263,6 @@ extern "C" extern void* __vt__9J3DPacket[5];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mClipper__14mDoLib_clipper[92];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" extern u8 g_env_light[4880];
extern "C" extern u8 g_envHIO[68];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u8 mBackColor__13mDoGph_gInf_c[4];
diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp
index ad09b0485c..3030b34766 100644
--- a/src/d/d_lib.cpp
+++ b/src/d/d_lib.cpp
@@ -163,19 +163,19 @@ asm void STControl::Yinit() {
#endif
f32 STControl::getValueStick() {
- return mDoCPd_c::getStickValue(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getStickValue(PAD_1);
}
s16 STControl::getAngleStick() {
- return mDoCPd_c::getStickAngle(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getStickAngle(PAD_1);
}
f32 CSTControl::getValueStick() {
- return mDoCPd_c::getSubStickValue(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getSubStickValue(PAD_1);
}
s16 CSTControl::getAngleStick() {
- return mDoCPd_c::getSubStickAngle(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getSubStickAngle(PAD_1);
}
/* 8003219C-8003242C 02CADC 0290+00 0/0 24/24 0/0 .text checkTrigger__9STControlFv */
diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp
index d735f1a7ec..c2d2534697 100644
--- a/src/d/d_resorce.cpp
+++ b/src/d/d_resorce.cpp
@@ -154,7 +154,6 @@ extern "C" void _restgpr_29();
extern "C" void memcmp();
extern "C" extern void* __vt__14J3DMaterialAnm[4];
extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_env_light[4880];
extern "C" u8 mFrameBufferTimg__13mDoGph_gInf_c[4];
extern "C" u8 mZbufferTimg__13mDoGph_gInf_c[4];
extern "C" u8 sCurrentHeap__7JKRHeap[4];
diff --git a/src/d/kankyo/d_kankyo.cpp b/src/d/kankyo/d_kankyo.cpp
index 21e0ab0ef0..bcf72b3f7a 100644
--- a/src/d/kankyo/d_kankyo.cpp
+++ b/src/d/kankyo/d_kankyo.cpp
@@ -5,7 +5,6 @@
#include "d/kankyo/d_kankyo.h"
#include "MSL_C/MSL_Common/Src/mem.h"
-#include "Z2AudioLib/Z2EnvSeMgr.h"
#include "d/com/d_com_inf_game.h"
#include "d/kankyo/d_kankyo_data.h"
#include "d/msg/d_msg_object.h"
@@ -1934,7 +1933,6 @@ asm void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* param_0, dKy_
#pragma pop
/* 8042DD70-8042E07C 05AA90 030C+00 1/2 8/8 9/9 .bss g_mEnvSeMgr */
-extern Z2EnvSeMgr g_mEnvSeMgr;
Z2EnvSeMgr g_mEnvSeMgr;
/* 8042E07C-8042E7BC 05AD9C 0740+00 5/4 0/0 0/0 .bss lightStatusData */
diff --git a/src/d/menu/d_menu_collect.cpp b/src/d/menu/d_menu_collect.cpp
index e843e45287..a6a90f09f7 100644
--- a/src/d/menu/d_menu_collect.cpp
+++ b/src/d/menu/d_menu_collect.cpp
@@ -427,7 +427,6 @@ extern "C" extern void* __vt__8J3DModel[9];
extern "C" extern void* __vt__14J3DMaterialAnm[4];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" extern u8 g_env_light[4880];
extern "C" extern u8 g_drawHIO[3880];
extern "C" extern u8 g_meter2_info[248];
extern "C" f32 Zero__4cXyz[3];
diff --git a/src/d/menu/d_menu_window.cpp b/src/d/menu/d_menu_window.cpp
index d4bee51560..af15b9a5d8 100644
--- a/src/d/menu/d_menu_window.cpp
+++ b/src/d/menu/d_menu_window.cpp
@@ -277,15 +277,15 @@ inline BOOL dComIfGp_event_runCheck() {
}
BOOL dMw_UP_TRIGGER() {
- return (bool)mDoCPd_c::getTrigUp(mDoCPd_c::PAD_0);
+ return (bool)mDoCPd_c::getTrigUp(PAD_1);
}
bool dMw_DOWN_TRIGGER() {
- return mDoCPd_c::getTrigDown(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getTrigDown(PAD_1);
}
BOOL dMw_LEFT_TRIGGER() {
- if (mDoCPd_c::getTrigLeft(mDoCPd_c::PAD_0) && !dMw_UP_TRIGGER()) {
+ if (mDoCPd_c::getTrigLeft(PAD_1) && !dMw_UP_TRIGGER()) {
return true;
} else {
return false;
@@ -293,7 +293,7 @@ BOOL dMw_LEFT_TRIGGER() {
}
BOOL dMw_RIGHT_TRIGGER() {
- if (mDoCPd_c::getTrigRight(mDoCPd_c::PAD_0) && !dMw_UP_TRIGGER()) {
+ if (mDoCPd_c::getTrigRight(PAD_1) && !dMw_UP_TRIGGER()) {
return true;
} else {
return false;
@@ -301,19 +301,19 @@ BOOL dMw_RIGHT_TRIGGER() {
}
bool dMw_A_TRIGGER() {
- return mDoCPd_c::getTrigA(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getTrigA(PAD_1);
}
BOOL dMw_B_TRIGGER() {
- return (bool)mDoCPd_c::getTrigB(mDoCPd_c::PAD_0);
+ return (bool)mDoCPd_c::getTrigB(PAD_1);
}
bool dMw_Z_TRIGGER() {
- return mDoCPd_c::getTrigZ(mDoCPd_c::PAD_0);
+ return mDoCPd_c::getTrigZ(PAD_1);
}
BOOL dMw_START_TRIGGER() {
- return (bool)mDoCPd_c::getTrigStart(mDoCPd_c::PAD_0);
+ return (bool)mDoCPd_c::getTrigStart(PAD_1);
}
void dMw_onPauseWindow() {
@@ -2011,9 +2011,9 @@ void dMw_c::dMw_collect_create() {
mpMenuCollect = new dMenu_Collect_c(mpHeap, mpStick, mpCStick);
mpMenuCollect->_create();
- if (mDoCPd_c::getHoldLockL(mDoCPd_c::PAD_0)) {
+ if (mDoCPd_c::getHoldLockL(PAD_1)) {
dMw_onButtonBit(1);
- } else if (mDoCPd_c::getHoldLockR(mDoCPd_c::PAD_0)) {
+ } else if (mDoCPd_c::getHoldLockR(PAD_1)) {
dMw_onButtonBit(2);
}
}
diff --git a/src/d/particle/d_particle.cpp b/src/d/particle/d_particle.cpp
index f2f0d51860..b581e837dd 100644
--- a/src/d/particle/d_particle.cpp
+++ b/src/d/particle/d_particle.cpp
@@ -474,7 +474,6 @@ extern "C" u8 j_o_id__8dPa_name[10 + 2 /* padding */];
extern "C" u8 s_o_id__8dPa_name[28];
extern "C" u8 mClipper__14mDoLib_clipper[92];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" extern u8 g_env_light[4880];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" extern u32 g_whiteColor;
extern "C" u8 mFrameBufferTimg__13mDoGph_gInf_c[4];
diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp
index ea987b19bb..21578c3f41 100644
--- a/src/f_op/f_op_actor.cpp
+++ b/src/f_op/f_op_actor.cpp
@@ -126,7 +126,6 @@ extern "C" void __construct_array();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" extern u8 g_env_light[4880];
extern "C" f32 Zero__4cXyz[3];
extern "C" extern u8 g_dComIfAc_gameInfo[8];
extern "C" u8 m_object__7dDemo_c[4];
diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp
index 6fc91edc2a..64b2811856 100644
--- a/src/m_Do/m_Do_DVDError.cpp
+++ b/src/m_Do/m_Do_DVDError.cpp
@@ -4,120 +4,71 @@
//
#include "m_Do/m_Do_DVDError.h"
+#include "m_Do/m_Do_dvd_thread.h"
+#include "m_Do/m_Do_reset.h"
+#include "m_Do/m_Do_ext.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
-// Types:
-//
-
-struct mDoDvdThd {
- /* 800158B4 */ void suspend();
-};
-
-struct OSThread {};
-
-struct OSContext {};
-
-struct OSAlarm {};
-
-struct JKRThread {
- /* 802D16B8 */ JKRThread(OSThread*, int);
- /* 802D1758 */ ~JKRThread();
-};
-
-struct JKRHeap {
- /* 802CE438 */ void becomeCurrentHeap();
-};
-
-//
-// Forward References:
-//
-
-extern "C" void mDoDvdErr_ThdInit__Fv();
-extern "C" void mDoDvdErr_ThdCleanup__Fv();
-extern "C" static void mDoDvdErr_Watch__FPv();
-extern "C" static void AlarmHandler__FP7OSAlarmP9OSContext();
-
-//
-// External References:
-//
-
-extern "C" void mDoExt_getAssertHeap__Fv();
-extern "C" void suspend__9mDoDvdThdFv();
-extern "C" void becomeCurrentHeap__7JKRHeapFv();
-extern "C" void __ct__9JKRThreadFP8OSThreadi();
-extern "C" void __dt__9JKRThreadFv();
-extern "C" void OSCreateAlarm();
-extern "C" void OSSetPeriodicAlarm();
-extern "C" void OSCancelAlarm();
-extern "C" void OSDisableInterrupts();
-extern "C" void OSGetCurrentThread();
-extern "C" void OSCreateThread();
-extern "C" void OSCancelThread();
-extern "C" void OSResumeThread();
-extern "C" void OSSuspendThread();
-extern "C" void OSGetThreadPriority();
-extern "C" void OSGetTime();
-extern "C" void DVDGetDriveStatus();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_29();
-extern "C" extern u8 data_80450C88[8];
-
-//
// Declarations:
//
/* ############################################################################################## */
/* 803DECC0-803DEFE0 00B9E0 0318+08 4/4 0/0 0/0 .bss DvdErr_thread */
-static u8 DvdErr_thread[792 + 8 /* padding */];
+static OSThread DvdErr_thread;
/* 803DEFE0-803DFBE0 00BD00 0C00+00 0/1 0/0 0/0 .bss DvdErr_stack */
#pragma push
#pragma force_active on
-static u8 DvdErr_stack[3072];
+static u8 DvdErr_stack[3072] ALIGN_DECL(16);
#pragma pop
/* 803DFBE0-803DFC20 00C900 0028+18 1/2 0/0 0/0 .bss Alarm */
-static u8 Alarm[40 + 24 /* padding */];
+static OSAlarm Alarm;
/* 8001659C-8001665C 010EDC 00C0+00 0/0 1/1 0/0 .text mDoDvdErr_ThdInit__Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void mDoDvdErr_ThdInit() {
- nofralloc
-#include "asm/m_Do/m_Do_DVDError/mDoDvdErr_ThdInit__Fv.s"
+void mDoDvdErr_ThdInit() {
+ if (!data_80450C88) {
+ OSTime time = OSGetTime();
+ OSThread* curThread = OSGetCurrentThread();
+ s32 priority = OSGetThreadPriority(curThread);
+
+ OSCreateThread(&DvdErr_thread, mDoDvdErr_Watch, NULL, DvdErr_stack + sizeof(DvdErr_stack), sizeof(DvdErr_stack), priority - 3, 1);
+ OSResumeThread(&DvdErr_thread);
+ OSCreateAlarm(&Alarm);
+ OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, AlarmHandler);
+
+ data_80450C88 = 1;
+ }
}
-#pragma pop
/* 8001665C-800166A4 010F9C 0048+00 0/0 1/1 0/0 .text mDoDvdErr_ThdCleanup__Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void mDoDvdErr_ThdCleanup() {
- nofralloc
-#include "asm/m_Do/m_Do_DVDError/mDoDvdErr_ThdCleanup__Fv.s"
+void mDoDvdErr_ThdCleanup() {
+ if (data_80450C88) {
+ OSCancelThread(&DvdErr_thread);
+ OSCancelAlarm(&Alarm);
+ data_80450C88 = 0;
+ }
}
-#pragma pop
/* 800166A4-80016704 010FE4 0060+00 1/1 0/0 0/0 .text mDoDvdErr_Watch__FPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void mDoDvdErr_Watch(void* param_0) {
- nofralloc
-#include "asm/m_Do/m_Do_DVDError/mDoDvdErr_Watch__FPv.s"
+static void mDoDvdErr_Watch(void*) {
+ OSDisableInterrupts();
+ { JKRThread thread(OSGetCurrentThread(), 0); }
+
+ mDoExt_getAssertHeap()->becomeCurrentHeap();
+
+ do {
+ if (DVDGetDriveStatus() == DVD_STATE_FATAL_ERROR) {
+ mDoDvdThd::suspend();
+ }
+ OSSuspendThread(&DvdErr_thread);
+ } while (true);
}
-#pragma pop
/* 80016704-8001672C 011044 0028+00 1/1 0/0 0/0 .text AlarmHandler__FP7OSAlarmP9OSContext
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void AlarmHandler(OSAlarm* param_0, OSContext* param_1) {
- nofralloc
-#include "asm/m_Do/m_Do_DVDError/AlarmHandler__FP7OSAlarmP9OSContext.s"
+static void AlarmHandler(OSAlarm*, OSContext*) {
+ OSResumeThread(&DvdErr_thread);
}
-#pragma pop
diff --git a/src/m_Do/m_Do_Reset.cpp b/src/m_Do/m_Do_Reset.cpp
index 5abaa68cea..e1996726ef 100644
--- a/src/m_Do/m_Do_Reset.cpp
+++ b/src/m_Do/m_Do_Reset.cpp
@@ -4,40 +4,17 @@
//
#include "m_Do/m_Do_Reset.h"
+#include "m_Do/m_Do_DVDError.h"
+#include "m_Do/m_Do_Audio.h"
+#include "m_Do/m_Do_MemCard.h"
#include "dol2asm.h"
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
-
-//
-// Types:
-//
-
-struct Z2AudioMgr {
- /* 802CDA6C */ void hasReset() const;
-
- static u8 mAudioMgrPtr[4 + 4 /* padding */];
-};
-
-struct JUTXfb {
- /* 802E5214 */ void clearIndex();
-
- static u8 sManager[4 + 4 /* padding */];
-};
-
-struct JUTVideo {
- /* 802E4CAC */ void destroyManager();
-};
-
-struct JUTGamePad {
- struct C3ButtonReset {
- static u8 sCallback[4];
- static u8 sCallbackArg[4 + 4 /* padding */];
- };
-};
-
-struct JASTaskThread {
- /* 8028FE88 */ void pause(bool);
-};
+#include "JSystem/JUtility/JUTGamePad.h"
+#include "JSystem/JUtility/JUTVideo.h"
+#include "JSystem/JUtility/JUTXfb.h"
+#include "JSystem/JAudio2/JASDvdThread.h"
+#include "SSystem/SComponent/c_API_controller_pad.h"
//
// Forward References:
@@ -51,13 +28,11 @@ extern "C" u32 getResetData__6mDoRstFv();
extern "C" extern char const* const m_Do_m_Do_Reset__stringBase0;
extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */];
extern "C" extern u8 struct_80450C80;
-extern "C" extern u8 data_80450C88[8];
//
// External References:
//
-extern "C" void OSAttention();
extern "C" void mDoDvdErr_ThdCleanup__Fv();
extern "C" void cAPICPad_recalibrate__Fv();
extern "C" void pause__13JASTaskThreadFb();
@@ -66,29 +41,15 @@ extern "C" void hasReset__10Z2AudioMgrCFv();
extern "C" void destroyManager__8JUTVideoFv();
extern "C" void clearIndex__6JUTXfbFv();
extern "C" void LCDisable();
-extern "C" void OSDisableInterrupts();
-extern "C" void OSRestoreInterrupts();
-extern "C" void OSSetSaveRegion();
-extern "C" void OSResetSystem();
-extern "C" void OSGetCurrentThread();
-extern "C" void OSCancelThread();
-extern "C" void OSDetachThread();
-extern "C" void OSSuspendThread();
-extern "C" void DVDGetDriveStatus();
-extern "C" void DVDCheckDisk();
extern "C" void VIWaitForRetrace();
extern "C" void VIFlush();
-extern "C" void VISetBlack(s32);
extern "C" void GXFlush();
extern "C" void GXAbortFrame();
extern "C" void GXDrawDone();
extern "C" void _savegpr_27();
-extern "C" extern u8 g_mDoMemCd_control[8192];
-extern "C" extern u8 struct_80450BB8[4];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" u8 sCallback__Q210JUTGamePad13C3ButtonReset[4];
extern "C" u8 sCallbackArg__Q210JUTGamePad13C3ButtonReset[4 + 4 /* padding */];
-extern "C" extern u8 struct_80451500[4];
extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */];
//
@@ -100,7 +61,7 @@ static void my_OSCancelAlarmAll() {
}
static void destroyVideo() {
- destroyManager__8JUTVideoFv();
+ JUTVideo::destroyManager();
GXSetDrawDoneCallback(NULL);
VISetBlack(1);
VIFlush();
@@ -108,40 +69,30 @@ static void destroyVideo() {
return;
}
-/* ############################################################################################## */
-/* 80374198-80374198 0007F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80374198 = "DVD_STATE_BUSY\n";
-#pragma pop
-
/* 80450C78-80450C80 000178 0004+04 3/2 42/42 2/2 .sbss mResetData__6mDoRst */
mDoRstData* mDoRst::mResetData;
/* 80015614-8001574C 00FF54 0138+00 0/0 3/3 0/0 .text mDoRst_reset__FiUli */
-#ifdef NONMATCHING
-void mDoRst_reset(int p1, u32 p2, int p3) {
- mDoCPd_c* pmVar1;
- u32 uVar2;
- DVDState DVar3;
- OSThread* thread;
- s32 enable;
- /* sManager */ lbl_80451550->clearIndex();
- mDoDvdErr_ThdCleanup__Fv();
- cAPICPad_recalibrate__Fv();
- if (lbl_80450BB8 != false) {
+void mDoRst_reset(int param_0, u32 param_1, int param_2) {
+ JUTXfb::getManager()->clearIndex();
+ mDoDvdErr_ThdCleanup();
+ cAPICPad_recalibrate();
+
+ if (mDoAud_zelAudio_c::isInitFlag()) {
+ bool audioReset;
do {
- uVar2 = lbl_80451368->hasReset();
- } while ((uVar2 & 0xff) == 0);
+ audioReset = Z2AudioMgr::getInterface()->hasReset();
+ } while (!audioReset);
}
- if ((s32)DVDGetDriveStatus() == (s32)DVD_STATE_BUSY) {
- OSAttention(lbl_80374198);
+ if (DVDGetDriveStatus() == DVD_STATE_BUSY) {
+ OSAttention("DVD_STATE_BUSY\n");
}
- JASTaskThread* task_thread = getThreadPointer__6JASDvdFv();
+
+ JASTaskThread* task_thread = JASDvd::getThreadPointer();
if (task_thread != NULL) {
- pause__13JASTaskThreadFb(task_thread, true);
- thread = task_thread->thread;
+ task_thread->pause(true);
+ OSThread* thread = task_thread->getThreadRecord();
if (thread != NULL) {
OSSuspendThread(thread);
OSDetachThread(thread);
@@ -152,79 +103,57 @@ void mDoRst_reset(int p1, u32 p2, int p3) {
VIWaitForRetrace();
VIWaitForRetrace();
- thread = GXGetCurrentGXThread();
- enable = OSDisableInterrupts();
- OSThread* ourThread = OSGetCurrentThread();
- if (thread != ourThread) {
- OSCancelThread(thread);
+ OSThread* gxThread = GXGetCurrentGXThread();
+ s32 enable = OSDisableInterrupts();
+
+ if (gxThread != OSGetCurrentThread()) {
+ OSCancelThread(gxThread);
GXSetCurrentGXThread();
}
+
GXFlush();
GXAbortFrame();
GXDrawDone();
-
OSRestoreInterrupts(enable);
destroyVideo();
- while (mDoMemCd_isCardCommNone() != 0) {
+ while (!mDoMemCd_isCardCommNone()) {
VIWaitForRetrace();
}
my_OSCancelAlarmAll();
LCDisable();
- // probably false match; check out 80015728 or thereabouts in Ghidra
- OSSetSaveRegion(mDoRst::mResetData, (u8*)(&mDoRst::getResetData()) + 0x18);
- OSResetSystem(p1, p2, p3);
+ OSSetSaveRegion(mDoRst::mResetData, (u8*)&mDoRst::getResetData + 0x18);
+ OSResetSystem(param_0, param_1, param_2);
+
do {
VIWaitForRetrace();
} while (true);
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void mDoRst_reset(int param_0, u32 param_1, int param_2) {
- nofralloc
-#include "asm/m_Do/m_Do_Reset/mDoRst_reset__FiUli.s"
-}
-#pragma pop
-#endif
/* 8001574C-800157F4 01008C 00A8+00 0/0 3/3 0/0 .text mDoRst_resetCallBack__FiPv */
-// fix JUTGamePad data
-#ifdef NONMATCHING
-void mDoRst_resetCallBack(int port, void* p2) {
+void mDoRst_resetCallBack(int port, void*) {
if (!mDoRst::isReset()) {
if (port == -1) {
- cAPICPad_recalibrate__Fv();
+ cAPICPad_recalibrate();
} else {
- if (mDoRst::is3ButtonReset() != 0) {
- lbl_80451501 = false;
- /* sCallback */ lbl_804514EC = &mDoRst_resetCallBack;
- /* sCallbackArg */ lbl_804514F0 = 0;
+ if (mDoRst::is3ButtonReset()) {
+ struct_80451501 = false;
+ JUTGamePad::C3ButtonReset::sCallback = mDoRst_resetCallBack;
+ JUTGamePad::C3ButtonReset::sCallbackArg = NULL;
return;
}
mDoRst::on3ButtonReset();
mDoRst::set3ButtonResetPort(port);
- cAPICPad_recalibrate__Fv();
+ cAPICPad_recalibrate();
}
- if ((DVDCheckDisk() == 0) && (DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR)) {
+ if (DVDCheckDisk() == 0 && DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR) {
mDoRst::onReturnToMenu();
}
mDoRst::onReset();
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void mDoRst_resetCallBack(int param_0, void* param_1) {
- nofralloc
-#include "asm/m_Do/m_Do_Reset/mDoRst_resetCallBack__FiPv.s"
-}
-#pragma pop
-#endif
/* 800157F4-800157FC -00001 0008+00 0/0 0/0 0/0 .text getResetData__6mDoRstFv */
mDoRstData* mDoRst::getResetData() {
@@ -253,7 +182,6 @@ u8 struct_80450C87;
#pragma pop
/* 80450C88-80450C90 000188 0008+00 0/0 2/2 0/0 .sbss None */
-extern u8 data_80450C88[8];
-u8 data_80450C88[8];
+u8 data_80450C88;
/* 80374198-80374198 0007F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/src/m_Do/m_Do_audio.cpp b/src/m_Do/m_Do_audio.cpp
index b5365c30af..2ae9e42e30 100644
--- a/src/m_Do/m_Do_audio.cpp
+++ b/src/m_Do/m_Do_audio.cpp
@@ -6,23 +6,14 @@
#include "m_Do/m_Do_audio.h"
#include "dol2asm.h"
#include "dolphin/types.h"
+#include "m_Do/m_Do_Reset.h"
+#include "m_Do/m_Do_dvd_thread.h"
+#include "d/com/d_com_inf_game.h"
//
// Types:
//
-struct mDoRst {
- static u8 mResetData[4 + 4 /* padding */];
-};
-
-struct mDoDvdThd_toMainRam_c {
- /* 80016394 */ void create(char const*, u8, JKRHeap*);
-};
-
-struct mDoDvdThd_mountXArchive_c {
- /* 800161E0 */ void create(char const*, u8, JKRArchive::EMountMode, JKRHeap*);
-};
-
struct JAIStreamDataMgr {
/* 802A3AD8 */ ~JAIStreamDataMgr();
};
@@ -96,7 +87,6 @@ extern "C" extern void* __vt__14Z2SoundStarter[5 + 1 /* padding */];
extern "C" extern void* __vt__11Z2SoundInfo[20];
extern "C" extern void* __vt__15Z2SpeechStarter[5];
extern "C" extern void* __vt__10Z2AudioMgr[3];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" extern u8 data_80450B40[4];
extern "C" extern u8 data_80450B48[4];
extern "C" extern u8 data_80450B4C[4];
@@ -112,7 +102,7 @@ extern "C" extern u8 data_80450B80[4];
extern "C" extern u8 data_80450B84[4];
extern "C" extern u8 data_80450B88[4];
extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */];
-extern "C" extern u8 struct_80450C80[8];
+extern "C" extern bool struct_80450C80;
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" u8 sCurrentHeap__7JKRHeap[4];
@@ -140,18 +130,6 @@ void mDoAud_zelAudio_c::reset() {
data_80450bba = false;
}
-/* ############################################################################################## */
-/* 80373D68-80373D68 0003C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80373D68 = "/Audiores/Z2Sound.baa";
-SECTION_DEAD static char const* const stringBase_80373D7E = "/Audiores/Seqs/Z2SoundSeqs.arc";
-SECTION_DEAD static char const* const stringBase_80373D9D =
- "ヒープ確保失敗につきオーディオ初期化できません\n";
-/* @stringBase0 padding */
-SECTION_DEAD static char const* const pad_80373DCD = "\0\0";
-#pragma pop
-
/* 803DBF40-803DBF4C 008C60 000C+00 1/1 0/1 0/0 .bss @3620 */
static u8 lit_3620[12];
@@ -168,24 +146,58 @@ static mDoDvdThd_toMainRam_c* l_affCommand;
static mDoDvdThd_mountXArchive_c* l_arcCommand;
/* 80006FC0-80007164 001900 01A4+00 1/1 0/0 0/0 .text mDoAud_Create__Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void mDoAud_Create() {
- nofralloc
-#include "asm/m_Do/m_Do_audio/mDoAud_Create__Fv.s"
+static void mDoAud_Create() {
+ if (l_affCommand == NULL) {
+ l_affCommand = mDoDvdThd_toMainRam_c::create("/Audiores/Z2Sound.baa", 2, NULL);
+
+ if (l_affCommand == NULL) {
+ return;
+ }
+ }
+
+ if (l_arcCommand == NULL) {
+ l_arcCommand = mDoDvdThd_mountXArchive_c::create("/Audiores/Seqs/Z2SoundSeqs.arc", 0, JKRArchive::MOUNT_DVD, NULL);
+
+ if (l_arcCommand == NULL) {
+ return;
+ }
+ }
+
+ if (l_affCommand->sync() && l_arcCommand->sync()) {
+ if (g_mDoAud_audioHeap != NULL) {
+ s32 groupID = JKRHeap::sCurrentHeap->changeGroupID(5);
+ (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.init(g_mDoAud_audioHeap, 0xA00000, l_affCommand->getMemAddress(), l_arcCommand->getArchive());
+ JKRHeap::sCurrentHeap->changeGroupID(groupID);
+ g_mDoAud_audioHeap->adjustSize();
+ } else {
+ // "Cannot initialize audio due to heap allocation failure\n"
+ OSReport_Error("ヒープ確保失敗につきオーディオ初期化できません\n");
+ }
+
+ (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.mStatusMgr.setEventBit(dComIfGs_getPEventBit());
+ (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).reset();
+
+ u32 soundMode = OSGetSoundMode();
+ Z2AudioMgr::getInterface()->setOutputMode(soundMode);
+ JKRHeap::free(l_affCommand->getMemAddress(), NULL);
+ l_affCommand->destroy();
+ l_arcCommand->destroy();
+
+ mDoAud_zelAudio_c::onInitFlag();
+ struct_80450C80 = true;
+ }
}
-#pragma pop
/* 80007164-800071BC 001AA4 0058+00 0/0 1/1 0/0 .text mDoAud_Execute__Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void mDoAud_Execute() {
- nofralloc
-#include "asm/m_Do/m_Do_audio/mDoAud_Execute__Fv.s"
+void mDoAud_Execute() {
+ if (!mDoAud_zelAudio_c::isInitFlag()) {
+ if (!mDoRst::isShutdown() && !mDoRst::isReturnToMenu()) {
+ mDoAud_Create();
+ }
+ } else {
+ (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.gframeProcess();
+ }
}
-#pragma pop
/* 800071BC-800071F8 001AFC 003C+00 0/0 3/3 0/0 .text mDoAud_setSceneName__FPCcll */
void mDoAud_setSceneName(char const* spot, s32 room, s32 layer) {
diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp
index 4718a4deae..5008983ab4 100644
--- a/src/m_Do/m_Do_graphic.cpp
+++ b/src/m_Do/m_Do_graphic.cpp
@@ -140,13 +140,11 @@ extern "C" void _restgpr_28();
extern "C" extern void* __vt__14J2DGrafContext[10];
extern "C" extern void* __vt__13J2DOrthoGraph[10];
extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_env_light[4880];
extern "C" f32 Zero__4cXyz[3];
extern "C" u8 mPadStatus__10JUTGamePad[48];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" extern s8 data_80450580;
extern "C" void* mRenderModeObj__15mDoMch_render_c[1 + 1 /* padding */];
-;
extern "C" u8 systemConsole__9JFWSystem[4];
extern "C" u8 sManager__10JFWDisplay[4];
extern "C" u8 sCurrentHeap__7JKRHeap[4];
diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp
index 9e206cc8ca..86f291d94c 100644
--- a/src/m_Do/m_Do_main.cpp
+++ b/src/m_Do/m_Do_main.cpp
@@ -17,14 +17,8 @@
#include "m_Do/m_Do_controller_pad.h"
#include "m_Do/m_Do_dvd_thread.h"
#include "m_Do/m_Do_graphic.h"
-
-//
-// Types:
-//
-
-struct DynamicModuleControlBase {
- /* 80262470 */ void dump();
-};
+#include "m_Do/m_Do_machine.h"
+#include "DynamicLink.h"
//
// Forward References:
@@ -220,21 +214,21 @@ static HeapCheck CommandHeapCheck;
/* 8000578C-80005848 0000CC 00BC+00 1/1 0/0 0/0 .text CheckHeap__FUl */
void CheckHeap(u32 i_padNo) {
- mDoMch_HeapCheckAll__Fv();
+ mDoMch_HeapCheckAll();
OSCheckActiveThreads();
bool comboCheck = false;
- // if L + R + Z is pressed...
+ // if L + R + Z is pressed
if ((mDoCPd_c::getHold(i_padNo) & ~CButton::Z) == (CButton::L + CButton::R) &&
mDoCPd_c::getTrig(i_padNo) & CButton::Z) {
comboCheck = true;
}
- int unk2 = comboCheck;
+ int saveRel = comboCheck;
for (int i = 0; i < 8; i++) {
HeapCheckTable[i]->CheckHeap1();
- if (unk2) {
+ if (saveRel) {
HeapCheckTable[i]->saveRelBase();
}
}
@@ -266,59 +260,24 @@ void HeapCheck::heapDisplay() const {
s32 total_free_size = mHeap->getTotalFreeSize();
s32 heap_free_size = mHeap->getFreeSize();
- JUTReport(0x64, 0xd4, "[%sName]", mName);
- JUTReport(0x64, 0xe3, "HeapSize %8ld", heap_size);
- JUTReport(0x64, 0xf0, "TargetHeapSize %8ld", mTargetHeapSize);
- JUTReport(0x64, 0xfd, "TotalFree %8ld", total_free_size - used_count);
- JUTReport(0x64, 0x10a, "FreeSize %8ld", heap_free_size - used_count);
- JUTReport(0x64, 0x117, "TotalUsedSize %8ld", total_used_size);
- JUTReport(0x64, 0x124, "TotalUsedRate %3ld%%",
+ JUTReport(100, 212, "[%sName]", mName);
+ JUTReport(100, 227, "HeapSize %8ld", heap_size);
+ JUTReport(100, 240, "TargetHeapSize %8ld", mTargetHeapSize);
+ JUTReport(100, 253, "TotalFree %8ld", total_free_size - used_count);
+ JUTReport(100, 266, "FreeSize %8ld", heap_free_size - used_count);
+ JUTReport(100, 279, "TotalUsedSize %8ld", total_used_size);
+ JUTReport(100, 292, "TotalUsedRate %3ld%%",
(int)(total_used_size * 0x64) / (int)mTargetHeapSize);
- JUTReport(0x64, 0x131, "MaxTotalUsedSize %8ld", mMaxTotalUsedSize);
- JUTReport(0x64, 0x13e, "MaxTotalUsedRate %3ld%%",
+ JUTReport(100, 305, "MaxTotalUsedSize %8ld", mMaxTotalUsedSize);
+ JUTReport(100, 318, "MaxTotalUsedRate %3ld%%",
(mMaxTotalUsedSize * 0x64) / (int)mTargetHeapSize);
- JUTReport(0x64, 0x14b, "MinFreeSize %8ld", mMaxTotalFreeSize - used_count);
- JUTReport(0x64, 0x158, "MinFreeRate %3ld%%",
+ JUTReport(100, 331, "MinFreeSize %8ld", mMaxTotalFreeSize - used_count);
+ JUTReport(100, 344, "MinFreeRate %3ld%%",
((mMaxTotalFreeSize - used_count) * 0x64) / (int)mTargetHeapSize);
used_count = countUsed(mHeap);
- JUTReport(0x64, 0x165, "UsedCount %3ld%", used_count);
+ JUTReport(100, 357, "UsedCount %3ld%", used_count);
}
-/* ############################################################################################## */
-/* 803739A0-803739A0 000000 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80373AEF = "";
-SECTION_DEAD static char const* const stringBase_80373AF0 = "TotalFree";
-SECTION_DEAD static char const* const stringBase_80373AFA = "MaxUsed ";
-SECTION_DEAD static char const* const stringBase_80373B04 = "Used ";
-SECTION_DEAD static char const* const stringBase_80373B0E = "RelUsed ";
-SECTION_DEAD static char const* const stringBase_80373B18 = "/ MaxFree";
-SECTION_DEAD static char const* const stringBase_80373B22 = "/HeapSize";
-SECTION_DEAD static char const* const stringBase_80373B2C = "Blk/Bytes";
-SECTION_DEAD static char const* const stringBase_80373B36 = "ARAM Free";
-SECTION_DEAD static char const* const stringBase_80373B40 = "%d";
-SECTION_DEAD static char const* const stringBase_80373B43 = "%s";
-SECTION_DEAD static char const* const stringBase_80373B46 = " [%s]";
-SECTION_DEAD static char const* const stringBase_80373B4C = "%10d";
-#pragma pop
-
-/* 803A2F14-803A2F28 -00001 0014+00 0/1 0/0 0/0 .data desc1$3717 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static char* desc1[5] = {
- "", "TotalFree", "MaxUsed ", "Used ", "RelUsed ",
-};
-#pragma pop
-
-/* 803A2F28-803A2F40 -00001 0014+04 0/1 0/0 0/0 .data desc2$3718 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static char* desc2[5] = {
- "", "/ MaxFree", "/HeapSize", "Blk/Bytes", "Blk/Bytes",
-};
-#pragma pop
-
/* 80450580-80450584 000000 0004+00 3/3 6/6 0/0 .sdata None */
SECTION_SDATA s8 data_80450580 = 0xFF;
@@ -326,10 +285,7 @@ SECTION_SDATA s8 data_80450580 = 0xFF;
SECTION_SDATA u32 mDoMain::memMargin = 0xFFFFFFFF;
/* 80450588-80450590 000008 0008+00 2/2 0/0 0/0 .sdata None */
-// 0x04 is mDoMain::mHeapBriefType
-SECTION_SDATA static u8 data_80450588[8] = {
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+SECTION_SDATA u8 mDoMain::mHeapBriefType = 4;
/* 80450B00-80450B08 000000 0008+00 1/1 0/0 0/0 .sbss None */
static u8 data_80450B00;
@@ -344,201 +300,135 @@ OSTime mDoMain::sHungUpTime;
/* 80450B18 0001+00 data_80450B18 None */
/* 80450B19 0001+00 data_80450B19 None */
/* 80450B1A 0002+00 data_80450B1A None */
-static u8 struct_80450B18[2];
-
-static u8 data_80450B1A;
-static u8 data_80450B1B;
+static bool struct_80450B18; // sDisplayHeapDebug
+static u8 sDisplayHeap;
+static bool sCheckHeap;
/* 80005AD8-80005D4C 000418 0274+00 1/1 0/0 0/0 .text debugDisplay__Fv */
-#ifdef NONMATCHING
-void debugDisplay(void) {
- int tmp1;
- int tmp2;
+void debugDisplay() {
+ static char* desc1[5] = {
+ "", "TotalFree", "MaxUsed ", "Used ", "RelUsed ",
+ };
- if (struct_80450B18[1] >= 1 && struct_80450B18[1] <= 6) {
- HeapCheckTable[struct_80450B18[1]]->heapDisplay();
+ static char* desc2[5] = {
+ "", "/ MaxFree", "/HeapSize", "Blk/Bytes", "Blk/Bytes",
+ };
+
+ if (sDisplayHeap >= 1 && sDisplayHeap <= 6) {
+ HeapCheckTable[sDisplayHeap - 1]->heapDisplay();
}
- if (data_80450588[0] == 5) {
+ if (mDoMain::mHeapBriefType == 5) {
JKRAramHeap* heap = JKRAram::getAramHeap();
if (heap) {
- JUTReport(0x1db, 100, "ARAM Free");
- JUTReport(0x1db, 0x72, "%d", heap->getFreeSize());
- JUTReport(0x1db, 0x80, "TotalFree");
- JUTReport(0x1db, 0x8e, "%d", heap->getTotalFreeSize());
+ JUTReport(475, 100, "ARAM Free");
+ JUTReport(475, 114, "%d", heap->getFreeSize());
+ JUTReport(475, 128, "TotalFree");
+ JUTReport(475, 142, "%d", heap->getTotalFreeSize());
+ return;
}
- } else {
- if (data_80450588[0] != 0) {
- JUTReport(0x1db, 100, "%s", desc1[data_80450588[0]]);
- JUTReport(0x1db, 0x72, "%s", lbl_803A2F28[data_80450588[0]]);
-
- int k = 0;
- for (int i = 0; i < 8; i++, k += 0x2C) {
- HeapCheck* heap_check = HeapCheckTable[i];
-
- switch (data_80450588[0]) {
- case 3: {
- tmp1 = heap_check->getUsedCount();
- tmp2 = heap_check->getHeap()->getTotalUsedSize();
- break;
- }
- case 1: {
- tmp1 = heap_check->getHeap()->getTotalFreeSize();
- tmp2 = heap_check->getHeap()->getFreeSize();
- break;
- }
- case 2: {
- tmp1 = heap_check->getMaxTotalUsedSize();
- tmp2 = heap_check->getHeap()->getSize();
- break;
- }
- case 4: {
- tmp1 = heap_check->getUsedCount() - heap_check->getUsedCountRef();
- tmp2 = heap_check->getHeap()->getTotalUsedSize() -
- heap_check->getTotalUsedSizeRef();
- break;
- }
-
- JUTReport(0x1db, k + 0x96, " [%s]", heap_check->getName());
- JUTReport(0x1db, k + 0xA4, "%10d", tmp1);
- JUTReport(0x1db, k + 0xB2, "%10d", tmp2);
- }
+ } else if (mDoMain::mHeapBriefType != 0) {
+ JUTReport(475, 100, "%s", desc1[mDoMain::mHeapBriefType]);
+ JUTReport(475, 114, "%s", desc2[mDoMain::mHeapBriefType]);
+
+ for (int i = 0; i < 8; i++) {
+ HeapCheck* heap_check = HeapCheckTable[i];
+ JKRExpHeap* expHeap = heap_check->getHeap();
+
+ s32 check1;
+ s32 check2;
+ switch (mDoMain::mHeapBriefType) {
+ case 1:
+ check1 = expHeap->getTotalFreeSize();
+ check2 = expHeap->getFreeSize();
+ break;
+ case 2:
+ check1 = heap_check->getMaxTotalUsedSize();
+ check2 = expHeap->getHeapSize();
+ break;
+ case 3:
+ check1 = heap_check->getUsedCount();
+ check2 = expHeap->getTotalUsedSize();
+ break;
+ case 4:
+ check1 = heap_check->getRelUsedCount();
+ check2 = heap_check->getRelTotalUsedSize();
+ break;
}
+
+ JUTReport(475, (i * 44) + 150, " [%s]", heap_check->getName());
+ JUTReport(475, (i * 44) + 164, "%10d", check1);
+ JUTReport(475, (i * 44) + 178, "%10d", check2);
}
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void debugDisplay() {
- nofralloc
-#include "asm/m_Do/m_Do_main/debugDisplay__Fv.s"
-}
-#pragma pop
-#endif
-
-/* ############################################################################################## */
-/* 803739A0-803739A0 000000 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80373B51 = "Press X+Y+START to CLEAR console.";
-SECTION_DEAD static char const* const stringBase_80373B73 = "3DStick UP/Down to scroll";
-SECTION_DEAD static char const* const stringBase_80373B8D =
- "Press A to output terminal from console.";
-SECTION_DEAD static char const* const stringBase_80373BB6 = "SCROLL:%3d %3d %3d Output=%1x";
-SECTION_DEAD static char const* const stringBase_80373BD5 = "Press L+R trigger to control console.";
-SECTION_DEAD static char const* const stringBase_80373BFB =
- "Press [Z] trigger to close this window.";
-#pragma pop
-
-/* 80450B1C-80450B20 00001C 0004+00 1/1 0/0 0/0 .sbss console_position_x$3776 */
-static f32 console_position_x;
-
-/* 80450B20-80450B24 000020 0004+00 1/1 0/0 0/0 .sbss None */
-static s8 data_80450B20;
-
-/* 80450B24-80450B28 000024 0004+00 1/1 0/0 0/0 .sbss console_position_y$3779 */
-static f32 console_position_y;
-
-/* 80450B28-80450B2C 000028 0004+00 1/1 0/0 0/0 .sbss None */
-static s8 data_80450B28;
-
-/* 80450B2C-80450B30 00002C 0004+00 1/1 0/0 0/0 .sbss console_scroll$3782 */
-static f32 console_scroll;
-
-/* 80450B30-80450B34 000030 0004+00 1/1 0/0 0/0 .sbss None */
-static s8 data_80450B30;
-
-/* 80451A00-80451A04 000000 0004+00 1/1 0/0 0/0 .sdata2 @3884 */
-SECTION_SDATA2 static f32 lit_3884 = 20.0f;
-
-/* 80451A04-80451A08 000004 0004+00 1/1 0/0 0/0 .sdata2 @3885 */
-SECTION_SDATA2 static f32 lit_3885 = 30.0f;
-
-/* 80451A08-80451A0C 000008 0004+00 1/1 0/0 0/0 .sdata2 @3886 */
-SECTION_SDATA2 static u8 lit_3886[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-
-/* 80451A0C-80451A10 00000C 0004+00 1/1 0/0 0/0 .sdata2 @3887 */
-SECTION_SDATA2 static f32 lit_3887 = 1.0f;
-
-/* 80451A10-80451A18 000010 0004+04 1/1 0/0 0/0 .sdata2 @3888 */
-SECTION_SDATA2 static f32 lit_3888[1 + 1 /* padding */] = {
- -1.0f,
- /* padding */
- 0.0f,
-};
-
-/* 80451A18-80451A20 000018 0008+00 1/1 0/0 0/0 .sdata2 @3890 */
-SECTION_SDATA2 static f64 lit_3890 = 4503601774854144.0 /* cast s32 to float */;
/* 80005D4C-8000614C 00068C 0400+00 1/1 0/0 0/0 .text Debug_console__FUl */
-// middle section has lots of issues
-#ifdef NONMATCHING
bool Debug_console(u32 i_padNo) {
- float tmp2;
- float tmp3;
- int tmp6;
+ static f32 console_position_x;
+ static s8 console_x_init;
+
+ static f32 console_position_y;
+ static s8 console_y_init;
+
+ static f32 console_scroll;
+ static s8 console_scroll_init;
JUTConsole* console = JFWSystem::getSystemConsole();
if (console) {
- if (!data_80450B20) {
+ if (!console_x_init) {
console_position_x = 20.0f;
- data_80450B20 = 1;
+ console_x_init = 1;
}
- if (!data_80450B28) {
+ if (!console_y_init) {
console_position_y = 30.0f;
- data_80450B28 = 1;
+ console_y_init = 1;
}
- if (!data_80450B30) {
+ if (!console_scroll_init) {
console_scroll = 0.0f;
- data_80450B30 = 1;
+ console_scroll_init = 1;
}
- if (mDoCPd_c::getTrig(i_padNo) & CButton::Z &&
- !(mDoCPd_c::getHold(i_padNo) & ~CButton::Z)) {
- bool visible = console->isVisible() == false;
- console->setVisible(visible);
+ if (mDoCPd_c::getTrig(i_padNo) & CButton::Z && !(mDoCPd_c::getHold(i_padNo) & ~CButton::Z)) {
+ console->setVisible(console->isVisible() == false);
JUTAssertion::setMessageCount(0);
}
if (console->isVisible()) {
- // if R and L are pressed
- if ((mDoCPd_c::getHold(i_padNo) & CButton::L &&
- mDoCPd_c::getHold(i_padNo) & CButton::R) ||
- ((mDoCPd_c::getAnalogL(i_padNo) > 0.0f &&
- (0.0f > mDoCPd_c::getAnalogR(i_padNo))))) {
- if (mDoCPd_c::getTrig(i_padNo) & (CButton::Y | CButton::X) &&
+ u32 holdButtons = mDoCPd_c::getHold(i_padNo);
+ if ((holdButtons & CButton::L && holdButtons & CButton::R) ||
+ ((mDoCPd_c::getAnalogL(i_padNo) > 0.0f && mDoCPd_c::getAnalogR(i_padNo) > 0.0f))) {
+ f32 stick_x = mDoCPd_c::getStickX(i_padNo);
+ f32 stick_y = mDoCPd_c::getStickY(i_padNo);
+
+ if (holdButtons & (CButton::Y | CButton::X) &&
mDoCPd_c::getTrig(i_padNo) & CButton::START) {
console->clear();
}
if (!(mDoCPd_c::getHold(i_padNo) & (CButton::Y | CButton::X))) {
- // subtract console scroll value from stick Y
- console_scroll -= mDoCPd_c::getStickY(i_padNo);
- int tmp;
- if (1.0f <= console_scroll) {
- -1.0f <= console_scroll ? tmp = 0 : tmp = -console_scroll;
+ console_scroll -= stick_y;
+
+ int scrollAmount;
+ if (console_scroll > 1.0f) {
+ scrollAmount = console_scroll;
+ } else if (console_scroll < -1.0f) {
+ scrollAmount = -(int)-console_scroll;
} else {
- tmp = mDoCPd_c::getStickX(i_padNo) - mDoCPd_c::getStickY(i_padNo);
+ scrollAmount = 0;
}
- if (tmp) {
- console_scroll -= tmp;
- console->scroll(tmp);
+ if (scrollAmount != 0) {
+ console_scroll -= scrollAmount;
+ console->scroll(scrollAmount);
}
} else {
if (mDoCPd_c::getHold(i_padNo) & CButton::X) {
- console_position_x += mDoCPd_c::getStickX(i_padNo);
+ console_position_x += stick_x;
}
if (mDoCPd_c::getHold(i_padNo) & CButton::Y) {
- console_position_y -= mDoCPd_c::getStickY(i_padNo);
+ console_position_y -= stick_y;
}
}
@@ -547,54 +437,46 @@ bool Debug_console(u32 i_padNo) {
console->setOutput(JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE);
}
- JUTReport(0x1E, 0x186, 1, "Press X+Y+START to CLEAR console.");
- JUTReport(0x1E, 400, 1, "3DStick UP/Down to scroll");
- JUTReport(0x1E, 0x19A, 1, "Press A to output terminal from console.");
- JUTReport(0x1E, 0x1A4, 1, "SCROLL:%3d %3d %3d Output=%1x",
+ JUTReport(30, 390, 1, "Press X+Y+START to CLEAR console.");
+ JUTReport(30, 400, 1, "3DStick UP/Down to scroll");
+ JUTReport(30, 410, 1, "Press A to output terminal from console.");
+ JUTReport(30, 420, 1, "SCROLL:%3d %3d %3d Output=%1x",
console->getLineOffset(), console->getPositionX(),
console->getPositionY(), console->getOutput());
- }
- } else {
- if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_DOWN) {
- g_HIO.mDisplayMeter ^= 1;
- }
+ } else {
+ u32 pressButtons = mDoCPd_c::getTrig(i_padNo);
- if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_LEFT) {
- if (JKRAram::getAramHeap()) {
- JKRAram::getAramHeap()->dump();
+ if (pressButtons & CButton::DPAD_DOWN) {
+ g_HIO.mDisplayMeter ^= 1;
}
- dump__24DynamicModuleControlBaseFv();
- g_dComIfG_gameInfo.mResControl.dump();
- }
+ if (pressButtons & CButton::DPAD_LEFT) {
+ if (JKRAram::getAramHeap()) {
+ JKRAram::getAramHeap()->dump();
+ }
- if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_RIGHT) {
- JKRHeap::getSystemHeap()->dump_sort();
- }
+ dump__24DynamicModuleControlBaseFv();
+ g_dComIfG_gameInfo.mResControl.dump();
+ }
- if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_UP) {
- zeldaHeap->dump_sort();
- gameHeap->dump_sort();
- archiveHeap->dump_sort();
+ if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_RIGHT) {
+ JKRHeap::getSystemHeap()->dump_sort();
+ }
+
+ if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_UP) {
+ zeldaHeap->dump_sort();
+ gameHeap->dump_sort();
+ archiveHeap->dump_sort();
+ }
+ JUTReport(30, 440, 1, "Press L+R trigger to control console.");
+ JUTReport(30, 450, 1, "Press [Z] trigger to close this window.");
}
- JUTReport(0x1E, 0x1B8, 1, "Press L+R trigger to control console.");
- JUTReport(0x1E, 0x1C2, 1, "Press [Z] trigger to close this window.");
+ console->setPosition(console_position_x, console_position_y);
+ return 1;
}
- console->setPosition(console_position_x, console_position_y);
- return 1;
}
return 0;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void Debug_console(u32 param_0) {
- nofralloc
-#include "asm/m_Do/m_Do_main/Debug_console__FUl.s"
-}
-#pragma pop
-#endif
/* ############################################################################################## */
/* 803739A0-803739A0 000000 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -633,25 +515,25 @@ asm void* LOAD_COPYDATE(void* param_0) {
static void debug() {
if (data_80450580) {
- if (data_80450B1A) {
- CheckHeap(2);
+ if (sCheckHeap) {
+ CheckHeap(PAD_3);
}
- if ((mDoCPd_c::getGamePad(2)->getButton() & ~CButton::Z) == CButton::R &&
- mDoCPd_c::getGamePad(2)->testTrigger(CButton::Z)) {
- struct_80450B18[0] ^= 0x1;
+ if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~CButton::Z) == CButton::R &&
+ mDoCPd_c::getGamePad(PAD_3)->testTrigger(CButton::Z)) {
+ struct_80450B18 ^= 1;
}
- if (struct_80450B18[0]) {
- if ((mDoCPd_c::getGamePad(2)->getButton() & ~CButton::Z) == CButton::L &&
- mDoCPd_c::getGamePad(2)->testTrigger(CButton::Z)) {
- data_80450588[0] < 0x5 ? data_80450588[0]++ : data_80450588[0] = 0x1;
+ if (struct_80450B18) {
+ if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~CButton::Z) == CButton::L &&
+ mDoCPd_c::getGamePad(PAD_3)->testTrigger(CButton::Z)) {
+ mDoMain::mHeapBriefType < 5 ? mDoMain::mHeapBriefType++ : mDoMain::mHeapBriefType = 1;
}
debugDisplay();
}
- Debug_console(2);
+ Debug_console(PAD_3);
}
}
@@ -660,7 +542,7 @@ static void debug() {
static u32 frame;
/* 8000628C-80006454 000BCC 01C8+00 1/1 0/0 0/0 .text main01__Fv */
-// almost
+// only issue is output check section with weird code gen
#ifdef NONMATCHING
void main01(void) {
mDoMch_Create__Fv();
@@ -708,18 +590,18 @@ void main01(void) {
}
JUTConsole* console = JFWSystem::getSystemConsole();
- u32 output = JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE;
+ s32 output = 0;
if (data_80450580 != 0) {
- data_80450580 = JUTConsole::OUTPUT_NONE;
+ output = JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE;
}
- console->setOutput(output);
+ console->setOutput(output);
console->setPosition(32, 42);
mDoDvdThd_callback_c::create(LOAD_COPYDATE, NULL);
fapGm_Create__Fv();
fopAcM_initManager__Fv();
- struct_80450B18[0] = 0;
+ struct_80450B18 = 0;
cDyl_InitAsync__Fv();
g_mDoAud_audioHeap = JKRSolidHeap::create(0x14D800, JKRHeap::getCurrentHeap(), false);
@@ -761,7 +643,7 @@ static OSThread mainThread;
/* 80006454-800065D8 000D94 0184+00 0/0 1/1 0/0 .text main */
void main() {
OSThread* current_thread = OSGetCurrentThread();
- u8* stack = &mainThreadStack[0];
+ u8* stack = mainThreadStack;
mDoMain::sPowerOnTime = OSGetTime();
OSReportInit();
version_check();
@@ -795,7 +677,7 @@ void main() {
data_80450580 = 1;
} else if (disk_id->game_version > 0x80) {
u32 consoleType = OSGetConsoleType();
- data_80450580 = (consoleType >> 0x1c) & 1;
+ data_80450580 = (consoleType >> 0x1C) & 1;
} else {
data_80450580 = 0;
}