summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2023-03-28 04:11:41 -0700
committerGitHub <noreply@github.com>2023-03-28 05:11:41 -0600
commit92b88e83e86c60442ba1f9748c80b7db9242bf92 (patch)
tree0911f27946cfd9f4f108116bbb59576b053aac6b /src/d
parent721880831e114f08756ffd846ab69cd0d729863c (diff)
d_menu_calibration done / J3DDrawBuffer done / more d_drawlist wip (#312)
* d_drawlist work / finish J3DDrawBuffer * d_menu_calibration done * remove asm
Diffstat (limited to 'src/d')
-rw-r--r--src/d/d_drawlist.cpp753
-rw-r--r--src/d/menu/d_menu_calibration.cpp749
-rw-r--r--src/d/menu/d_menu_window_HIO.cpp41
-rw-r--r--src/d/meter/d_meter2_draw.cpp4
4 files changed, 832 insertions, 715 deletions
diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp
index 208101a886..a1f3925b32 100644
--- a/src/d/d_drawlist.cpp
+++ b/src/d/d_drawlist.cpp
@@ -10,7 +10,6 @@
#include "dol2asm.h"
#include "dolphin/mtx/mtx44.h"
#include "dolphin/mtx/mtxvec.h"
-#include "dolphin/types.h"
#include "m_Do/m_Do_graphic.h"
#include "m_Do/m_Do_lib.h"
#include "m_Do/m_Do_mtx.h"
@@ -19,40 +18,95 @@
// Types:
//
-struct dDlst_blo_c {
- /* 80053B64 */ void draw();
+class dDlst_blo_c : public dDlst_base_c {
+public:
+ /* 80053B64 */ virtual void draw();
+
+ /* 0x004 */ int field_0x4;
+ /* 0x008 */ J2DScreen mScreen;
+ /* 0x120 */ f32 field_0x120;
+ /* 0x124 */ f32 field_0x124;
};
-struct dDlst_2Dm_c {
- /* 8005312C */ void draw();
+class dDlst_2Dm_c {
+public:
+ /* 8005312C */ virtual void draw();
+
+ /* 0x04 */ s16 field_0x4;
+ /* 0x06 */ s16 field_0x6;
+ /* 0x08 */ s16 field_0x8;
+ /* 0x0A */ s16 field_0xa;
+ /* 0x0C */ f32 field_0xc;
+ /* 0x10 */ f32 field_0x10;
+ /* 0x14 */ GXColor field_0x14;
+ /* 0x18 */ GXColor field_0x18;
+ /* 0x1C */ GXTexObj field_0x1c;
+ /* 0x3C */ GXTlutObj field_0x3c;
+ /* 0x48 */ s16 field_0x48;
+ /* 0x4A */ s16 field_0x4a;
+ /* 0x4C */ u8 field_0x4c;
+ /* 0x50 */ GXTexObj field_0x50;
+ /* 0x70 */ GXTlutObj field_0x70;
+ /* 0x7C */ s16 field_0x7c;
+ /* 0x7E */ s16 field_0x7e;
+ /* 0x80 */ u8 field_0x80;
};
-struct dDlst_2DTri_c {
- /* 80051AF0 */ void draw();
+class dDlst_2DTri_c {
+public:
+ /* 80051AF0 */ virtual void draw();
+
+ /* 0x04 */ s16 field_0x4;
+ /* 0x06 */ s16 field_0x6;
+ /* 0x08 */ GXColor field_0x8;
+ /* 0x0C */ s16 field_0xc;
+ /* 0x10 */ f32 field_0x10;
+ /* 0x14 */ f32 field_0x14;
};
-struct dDlst_2DT_c {
- /* 80051F98 */ void draw();
+class dDlst_2DT_c {
+public:
+ /* 80051F98 */ virtual void draw();
+
+ /* 0x04 */ void* field_0x4;
+ /* 0x08 */ u8 field_0x8[4];
+ /* 0x0C */ u8 field_0xc;
+ /* 0x0D */ u8 field_0xd;
+ /* 0x0E */ u16 field_0xe;
+ /* 0x10 */ u16 field_0x10;
+ /* 0x12 */ s16 field_0x12;
+ /* 0x14 */ s16 field_0x14;
+ /* 0x16 */ s16 field_0x16;
+ /* 0x18 */ s16 field_0x18;
+ /* 0x1C */ f32 field_0x1c;
+ /* 0x20 */ f32 field_0x20;
+ /* 0x24 */ f32 field_0x24;
+ /* 0x28 */ f32 field_0x28;
};
-struct dDlst_2DQuad_c {
- /* 80051CF0 */ void draw();
+class dDlst_2DQuad_c {
+public:
+ /* 80051CF0 */ virtual void draw();
};
-struct dDlst_2DPoint_c {
- /* 80051E5C */ void draw();
+class dDlst_2DPoint_c {
+public:
+ /* 80051E5C */ virtual void draw();
};
-struct dDlst_2DMt_c {
- /* 8005364C */ void draw();
+class dDlst_2DMt_c {
+public:
+ /* 8005364C */ virtual void draw();
};
-struct dDlst_2DM_c {
- /* 80052C58 */ void draw();
+class dDlst_2DM_c {
+public:
+ /* 80052C58 */ virtual void draw();
};
-struct ShdwDrawPoly_c {
- /* 80054A6C */ ~ShdwDrawPoly_c();
+class ShdwDrawPoly_c : public cBgS_ShdwDraw {
+public:
+ /* 80054A6C */ virtual ~ShdwDrawPoly_c() {}
};
//
@@ -251,7 +305,8 @@ void dDlst_window_c::setScissor(f32 xOrig, f32 yOrig, f32 width, f32 height) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2DTri_c::draw() {
+// asm void dDlst_2DTri_c::draw() {
+extern "C" asm void draw__13dDlst_2DTri_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__13dDlst_2DTri_cFv.s"
}
@@ -261,7 +316,8 @@ asm void dDlst_2DTri_c::draw() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2DQuad_c::draw() {
+// asm void dDlst_2DQuad_c::draw() {
+extern "C" asm void draw__14dDlst_2DQuad_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__14dDlst_2DQuad_cFv.s"
}
@@ -271,7 +327,8 @@ asm void dDlst_2DQuad_c::draw() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2DPoint_c::draw() {
+// asm void dDlst_2DPoint_c::draw() {
+extern "C" asm void draw__15dDlst_2DPoint_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__15dDlst_2DPoint_cFv.s"
}
@@ -309,7 +366,8 @@ SECTION_SDATA2 static f64 lit_4079 = 4503601774854144.0 /* cast s32 to float */;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2DT_c::draw() {
+// asm void dDlst_2DT_c::draw() {
+extern "C" asm void draw__11dDlst_2DT_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__11dDlst_2DT_cFv.s"
}
@@ -631,21 +689,31 @@ dDlst_2DT2_c::dDlst_2DT2_c() {
field_0x40 = (GXColor){0, 0, 0, 0};
}
-/* ############################################################################################## */
-/* 8045202C-80452030 00062C 0004+00 1/1 0/0 0/0 .sdata2 @4284 */
-SECTION_SDATA2 static u32 lit_4284 = 0x000000FF;
-
/* 80052B4C-80052C58 04D48C 010C+00 1/1 0/0 0/0 .text init__12dDlst_2DT2_cFP7ResTIMGffffUcUcUcff
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_2DT2_c::init(ResTIMG* param_0, f32 param_1, f32 param_2, f32 param_3, f32 param_4,
- u8 param_5, u8 param_6, u8 param_7, f32 param_8, f32 param_9) {
- nofralloc
-#include "asm/d/d_drawlist/init__12dDlst_2DT2_cFP7ResTIMGffffUcUcUcff.s"
+void dDlst_2DT2_c::init(ResTIMG* i_timg, f32 param_1, f32 param_2, f32 param_3, f32 param_4,
+ u8 param_5, u8 param_6, u8 param_7, f32 i_scaleX, f32 i_scaleY) {
+ mDoLib_setResTimgObj(i_timg, &mTexObj, 0, NULL);
+ field_0x24 = param_1;
+ field_0x28 = param_2;
+ field_0x2c = param_3;
+ field_0x30 = param_4;
+ mScaleX = i_scaleX;
+ mScaleY = i_scaleY;
+ field_0x3c = (GXColor){0, 0, 0, 255};
+
+ field_0x44 = param_6;
+ if (field_0x44 != 0 && GXGetTexObjWrapS(&mTexObj) == 2) {
+ field_0x44 = 0;
+ }
+
+ field_0x45 = param_7;
+ if (field_0x45 != 0 && GXGetTexObjWrapT(&mTexObj) == 2) {
+ field_0x45 = 0;
+ }
+
+ field_0x46 = param_5;
}
-#pragma pop
/* ############################################################################################## */
/* 80452030-80452034 000630 0004+00 2/2 0/0 0/0 .sdata2 @4360 */
@@ -655,7 +723,8 @@ SECTION_SDATA2 static f32 lit_4360 = 256.0f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2DM_c::draw() {
+// asm void dDlst_2DM_c::draw() {
+extern "C" asm void draw__11dDlst_2DM_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__11dDlst_2DM_cFv.s"
}
@@ -665,7 +734,8 @@ asm void dDlst_2DM_c::draw() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2Dm_c::draw() {
+// asm void dDlst_2Dm_c::draw() {
+extern "C" asm void draw__11dDlst_2Dm_cFv() {
nofralloc
#include "asm/d/d_drawlist/func_8005312C.s"
}
@@ -675,7 +745,8 @@ asm void dDlst_2Dm_c::draw() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_2DMt_c::draw() {
+// asm void dDlst_2DMt_c::draw() {
+extern "C" asm void draw__12dDlst_2DMt_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__12dDlst_2DMt_cFv.s"
}
@@ -693,17 +764,24 @@ asm void J2DPicture::getTexture(u8 param_0) const {
/* 80053A00-80053A9C 04E340 009C+00 0/0 1/1 0/0 .text __ct__10dDlst_2D_cFP7ResTIMGssssUc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm dDlst_2D_c::dDlst_2D_c(ResTIMG* param_0, s16 param_1, s16 param_2, s16 param_3, s16 param_4,
- u8 param_5) {
- nofralloc
-#include "asm/d/d_drawlist/__ct__10dDlst_2D_cFP7ResTIMGssssUc.s"
+dDlst_2D_c::dDlst_2D_c(ResTIMG* i_timg, s16 i_posX, s16 i_posY, s16 i_sizeX, s16 i_sizeY,
+ u8 i_alpha) {
+ mpPicture.initiate(i_timg, NULL);
+ mPosX = i_posX;
+ mPosY = i_posY;
+ mSizeX = i_sizeX;
+ mSizeY = i_sizeY;
+ mAlpha = i_alpha;
}
-#pragma pop
/* 80053A9C-80053B64 04E3DC 00C8+00 1/0 0/0 0/0 .text draw__10dDlst_2D_cFv */
+// matches with vtable data
+#ifdef NONMATCHING
+void dDlst_2D_c::draw() {
+ mpPicture.setAlpha(mAlpha);
+ mpPicture.draw(mPosX, mPosY, mSizeX, mSizeY, false, false, false);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -713,16 +791,25 @@ extern "C" asm void draw__10dDlst_2D_cFv() {
#include "asm/d/d_drawlist/draw__10dDlst_2D_cFv.s"
}
#pragma pop
+#endif
/* 80053B64-80053BA0 04E4A4 003C+00 1/0 0/0 0/0 .text draw__11dDlst_blo_cFv */
+// matches with vtable data
+#ifdef NONMATCHING
+void dDlst_blo_c::draw() {
+ mScreen.draw(field_0x120, field_0x124, dComIfGp_getCurrentGrafPort());
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_blo_c::draw() {
+// asm void dDlst_blo_c::draw() {
+extern "C" asm void draw__11dDlst_blo_cFv() {
nofralloc
#include "asm/d/d_drawlist/draw__11dDlst_blo_cFv.s"
}
#pragma pop
+#endif
/* 80053BA0-80053BC0 04E4E0 0020+00 0/0 1/0 0/0 .text clearAnmTransform__9J2DScreenFv */
#pragma push
@@ -812,15 +899,15 @@ SECTION_SDATA2 static f32 lit_4793 = 30307.0f;
SECTION_SDATA2 static f64 lit_4794 = 1.0;
/* 80053CEC-80053DE0 04E62C 00F4+00 2/2 0/0 0/0 .text get__8cM_rnd_cFv */
-// reg swap
+// matches with literals
#ifdef NONMATCHING
f32 cM_rnd_c::get() {
seed0 = seed0 * 171 % 30269;
seed1 = seed1 * 172 % 30307;
seed2 = seed2 * 170 % 30323;
- f32 rm = fmod((seed0 / 30269.0f) + (seed1 / 30307.0f) + (seed2 / 30323.0f), 1.0f);
+ f32 rm = fmodf((seed0 / 30269.0f) + (seed1 / 30307.0f) + (seed2 / 30323.0f), 1.0);
- return __fabs(rm);
+ return fabsf(rm);
}
#else
#pragma push
@@ -869,38 +956,75 @@ extern "C" asm void draw__18dDlst_effectLine_cFv() {
/* 800541F4-80054288 04EB34 0094+00 0/0 1/1 0/0 .text
* update__18dDlst_effectLine_cFR4cXyzR8_GXColorUsUsUsUsffff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_effectLine_c::update(cXyz& param_0, _GXColor& param_1, u16 param_2, u16 param_3,
- u16 param_4, u16 param_5, f32 param_6, f32 param_7, f32 param_8,
- f32 param_9) {
- nofralloc
-#include "asm/d/d_drawlist/update__18dDlst_effectLine_cFR4cXyzR8_GXColorUsUsUsUsffff.s"
+void dDlst_effectLine_c::update(cXyz& param_0, _GXColor& i_lineColor, u16 param_2, u16 param_3,
+ u16 param_4, u16 param_5, f32 param_6, f32 param_7, f32 param_8,
+ f32 param_9) {
+ field_0x10 = param_0;
+ mLineColor = i_lineColor;
+ field_0x20 = param_2;
+ field_0x22 = param_3;
+ field_0x24 = param_4;
+ field_0x26 = param_5;
+ field_0x28 = param_6;
+ field_0x2c = param_7;
+ field_0x30 = param_8;
+ field_0x34 = param_9;
+
+ dComIfGd_set2DOpa(this);
}
-#pragma pop
/* 80054288-800543B4 04EBC8 012C+00 1/1 0/0 0/0 .text
* set__18dDlst_shadowPoly_cFP10cBgD_Vtx_tUsUsUsP8cM3dGPla */
+// matches with literals
+#ifdef NONMATCHING
+int dDlst_shadowPoly_c::set(cBgD_Vtx_t* i_vtx, u16 param_1, u16 param_2, u16 param_3,
+ cM3dGPla* i_plane) {
+ if (mCount >= getTriMax()) {
+ return 0;
+ }
+
+ dDlst_shadowTri_c* dst = getTri() + mCount;
+
+ cXyz b(i_plane->i_GetNP());
+ f32 temp_f3 = (1.0f - fabsf(b.y));
+ temp_f3 *= temp_f3;
+
+ b.x *= temp_f3;
+ b.z *= temp_f3;
+ b *= 2.0f;
+
+ PSVECAdd(&i_vtx[param_1], &b, &dst->mPos[0]);
+ PSVECAdd(&i_vtx[param_2], &b, &dst->mPos[1]);
+ PSVECAdd(&i_vtx[param_3], &b, &dst->mPos[2]);
+ mCount++;
+ return 1;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_shadowPoly_c::set(cBgD_Vtx_t* param_0, u16 param_1, u16 param_2, u16 param_3,
- cM3dGPla* param_4) {
+asm int dDlst_shadowPoly_c::set(cBgD_Vtx_t* param_0, u16 param_1, u16 param_2, u16 param_3,
+ cM3dGPla* param_4) {
nofralloc
#include "asm/d/d_drawlist/set__18dDlst_shadowPoly_cFP10cBgD_Vtx_tUsUsUsP8cM3dGPla.s"
}
#pragma pop
+#endif
/* 800543B4-80054478 04ECF4 00C4+00 1/1 0/0 0/0 .text draw__18dDlst_shadowPoly_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowPoly_c::draw() {
- nofralloc
-#include "asm/d/d_drawlist/draw__18dDlst_shadowPoly_cFv.s"
+void dDlst_shadowPoly_c::draw() {
+ dDlst_shadowTri_c* tri = getTri();
+
+ GXBegin(GX_TRIANGLES, GX_VTXFMT0, mCount * 3);
+ for (int i = 0; i < mCount; i++) {
+ GXPosition3f32(tri->mPos[2].x, tri->mPos[2].y, tri->mPos[2].z);
+ GXPosition3f32(tri->mPos[1].x, tri->mPos[1].y, tri->mPos[1].z);
+ GXPosition3f32(tri->mPos[0].x, tri->mPos[0].y, tri->mPos[0].z);
+ tri++;
+ }
+
+ i_GXEnd();
}
-#pragma pop
/* 80054478-800544F0 04EDB8 0078+00 1/1 0/0 0/0 .text J3DDrawBuffer__create__FUl */
static J3DDrawBuffer* J3DDrawBuffer__create(u32 size) {
@@ -922,33 +1046,42 @@ void dDlst_shadowReal_c::reset() {
}
/* 80054500-800545D4 04EE40 00D4+00 1/1 0/0 0/0 .text imageDraw__18dDlst_shadowReal_cFPA4_f */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowReal_c::imageDraw(f32 (*param_0)[4]) {
- nofralloc
-#include "asm/d/d_drawlist/imageDraw__18dDlst_shadowReal_cFPA4_f.s"
-}
-#pragma pop
+void dDlst_shadowReal_c::imageDraw(Mtx param_0) {
+ GXSetProjection(mRenderProjMtx, GX_ORTHOGRAPHIC);
+ J3DModel** models = mpModels;
+
+ for (u8 i = 0; i < mModelNum; i++) {
+ J3DModelData* model_data = (*models)->getModelData();
+ model_data->getShapeNodePointer(0)->loadPreDrawSetting();
+
+ for (u16 j = 0; j < model_data->getShapeNum(); j++) {
+ if (!model_data->getShapeNodePointer(j)->checkFlag(1)) {
+ J3DShapePacket* shape_pkt = (*models)->getShapePacket(j);
+ shape_pkt->setBaseMtxPtr(&mViewMtx);
+ shape_pkt->drawFast();
+ shape_pkt->setBaseMtxPtr((Mtx*)param_0);
+ }
+ }
-/* ############################################################################################## */
-/* 8045064C-80450650 0000CC 0004+00 1/1 0/0 0/0 .sdata l_color$5004 */
-SECTION_SDATA static u8 l_color_5004[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x40,
-};
+ models++;
+ }
+}
/* 800545D4-80054688 04EF14 00B4+00 1/1 0/0 0/0 .text draw__18dDlst_shadowReal_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowReal_c::draw() {
- nofralloc
-#include "asm/d/d_drawlist/draw__18dDlst_shadowReal_cFv.s"
+void dDlst_shadowReal_c::draw() {
+ static GXColor l_color = {0, 0, 0, 64};
+ l_color.a = field_0x1;
+
+ GXSetTevColor(GX_TEVREG0, l_color);
+ GXCallDisplayList(l_shadowProjMat, 0x40);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetCurrentMtx(0);
+ GXLoadTexMtxImm(mReceiverProjMtx, 30, GX_MTX3x4);
+ mShadowRealPoly.draw();
}
-#pragma pop
/* ############################################################################################## */
/* 80452050-80452054 000650 0004+00 1/1 0/0 0/0 .sdata2 @5061 */
@@ -962,8 +1095,8 @@ SECTION_SDATA2 static f32 lit_5062 = -90.0f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-static asm void psdRealCallBack(cBgS_ShdwDraw* param_0, cBgD_Vtx_t* param_1, int param_2,
- int param_3, int param_4, cM3dGPla* param_5) {
+static asm int psdRealCallBack(cBgS_ShdwDraw* param_0, cBgD_Vtx_t* param_1, int param_2,
+ int param_3, int param_4, cM3dGPla* param_5) {
nofralloc
#include "asm/d/d_drawlist/psdRealCallBack__FP13cBgS_ShdwDrawP10cBgD_Vtx_tiiiP8cM3dGPla.s"
}
@@ -994,11 +1127,31 @@ static asm void realPolygonCheck(cXyz* param_0, f32 param_1, f32 param_2, cXyz*
}
#pragma pop
+/* static void realPolygonCheck(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3,
+ dDlst_shadowPoly_c* param_4) {
+ ShdwDrawPoly_c draw_poly;
+ cXyz sp1C;
+ cXyz sp10;
+
+ f32 var_f1 = cLib_maxLimit(param_1 * param_1 * 0.002f, 120.0f);
+ f32 temp_f2 = (param_1 + param_2) - var_f1;
+
+ sp1C.y = param_0->y - temp_f2;
+ sp10.y = param_0->y + (param_1 * 0.15f);
+ sp1C.x = param_0->x + (param_3->x * temp_f2);
+
+ if (sp1C.x < param_0->x) {
+ sp1C.x = sp10.x;
+ sp
+ }
+} */
+
/* 80054A6C-80054ACC 04F3AC 0060+00 1/0 0/0 0/0 .text __dt__14ShdwDrawPoly_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm ShdwDrawPoly_c::~ShdwDrawPoly_c() {
+// asm ShdwDrawPoly_c::~ShdwDrawPoly_c() {
+extern "C" asm void __dt__14ShdwDrawPoly_cFv() {
nofralloc
#include "asm/d/d_drawlist/__dt__14ShdwDrawPoly_cFv.s"
}
@@ -1013,6 +1166,39 @@ SECTION_SDATA2 static f32 lit_5156 = 13.0f / 20.0f;
/* 80054ACC-80054BD0 04F40C 0104+00 2/2 0/0 0/0 .text setkankyoShadow__FP12dKy_tevstr_cPf
*/
+// matches with literals
+#ifdef NONMATCHING
+static void setkankyoShadow(dKy_tevstr_c* param_0, f32* param_1) {
+ dScnKy_env_light_c* env_light = i_dKy_getEnvlight();
+
+ if (param_0 != NULL) {
+ *param_1 *= param_0->field_0x344;
+ } else {
+ *param_1 *= env_light->field_0x1238;
+ }
+
+ if ((env_light->mShadowMode & 4) && param_0 != NULL) {
+ *param_1 *= param_0->field_0x344;
+ }
+
+ if (env_light->mThunderEff.mStateTimer != 0 && env_light->mThunderEff.mStateTimer < 10) {
+ *param_1 += env_light->mThunderEff.field_0x8;
+ }
+
+ if (g_env_light.mSwordLight.mState == 2) {
+ f32 fvar1 = g_env_light.mSwordLight.mFrame / 15.0f;
+ if (fvar1 > 1.0f) {
+ fvar1 = 1.0f;
+ }
+
+ *param_1 += (1.0f - fvar1) * (0.65f - *param_1);
+ }
+
+ if (*param_1 > 1.0f) {
+ *param_1 = 1.0f;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1021,6 +1207,7 @@ static asm void setkankyoShadow(dKy_tevstr_c* param_0, f32* param_1) {
#include "asm/d/d_drawlist/setkankyoShadow__FP12dKy_tevstr_cPf.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80452070-80452074 000670 0004+00 1/1 0/0 0/0 .sdata2 @5267 */
@@ -1061,8 +1248,8 @@ SECTION_SDATA2 static f32 lit_5275 = -0.5f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_shadowReal_c::setShadowRealMtx(cXyz* param_0, cXyz* param_1, f32 param_2,
- f32 param_3, f32 param_4, dKy_tevstr_c* param_5) {
+asm u8 dDlst_shadowReal_c::setShadowRealMtx(cXyz* param_0, cXyz* param_1, f32 param_2, f32 param_3,
+ f32 param_4, dKy_tevstr_c* param_5) {
nofralloc
#include "asm/d/d_drawlist/setShadowRealMtx__18dDlst_shadowReal_cFP4cXyzP4cXyzfffP12dKy_tevstr_c.s"
}
@@ -1070,46 +1257,101 @@ asm void dDlst_shadowReal_c::setShadowRealMtx(cXyz* param_0, cXyz* param_1, f32
/* 80055028-800551D4 04F968 01AC+00 1/1 0/0 0/0 .text
* set__18dDlst_shadowReal_cFUlP8J3DModelP4cXyzffP12dKy_tevstr_cff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowReal_c::set(u32 param_0, J3DModel* param_1, cXyz* param_2, f32 param_3,
- f32 param_4, dKy_tevstr_c* param_5, f32 param_6, f32 param_7) {
- nofralloc
-#include "asm/d/d_drawlist/set__18dDlst_shadowReal_cFUlP8J3DModelP4cXyzffP12dKy_tevstr_cff.s"
+u32 dDlst_shadowReal_c::set(u32 i_key, J3DModel* i_model, cXyz* param_2, f32 param_3, f32 param_4,
+ dKy_tevstr_c* param_5, f32 i_cameraZ, f32 param_7) {
+ dScnKy_env_light_c* env_light = i_dKy_getEnvlight();
+
+ if (mModelNum == 0) {
+ cXyz sp60;
+
+ if (param_5 != NULL) {
+ sp60 = param_5->mLightPosWorld;
+ } else {
+ sp60 = dKy_plight_near_pos();
+
+ if (!(env_light->mShadowMode & 4) &&
+ ((env_light->mShadowMode & 1) || (env_light->mShadowMode & 2)))
+ {
+ sp60 = g_env_light.field_0x10a0;
+ param_5->mLightPosWorld = g_env_light.field_0x10a0;
+ }
+ }
+
+ field_0x1 = setShadowRealMtx(&sp60, param_2, param_3, param_4, param_7, param_5);
+ if (!field_0x1) {
+ return 0;
+ }
+
+ mState = 1;
+ mKey = i_key;
+ mModelNum = 0;
+ mCameraZ = i_cameraZ;
+ mZsortPre = NULL;
+ mZsortNext = NULL;
+ }
+
+ u8 last_model_num = mModelNum;
+ mModelNum++;
+ mpModels[last_model_num] = i_model;
+ return mKey;
}
-#pragma pop
/* 800551D4-8005520C 04FB14 0038+00 1/1 0/0 0/0 .text add__18dDlst_shadowReal_cFP8J3DModel */
-bool dDlst_shadowReal_c::add(J3DModel* pModel) {
- u8 curModelNum = mModelNum;
+bool dDlst_shadowReal_c::add(J3DModel* i_model) {
+ u8 cur_model_num = mModelNum;
- if (curModelNum == 0 || pModel == NULL) {
+ if (cur_model_num == 0 || i_model == NULL) {
return false;
}
+
mModelNum++;
- mpModels[curModelNum] = pModel;
+ mpModels[cur_model_num] = i_model;
return true;
}
-/* ############################################################################################## */
-/* 80450650-80450654 0000D0 0004+00 1/1 0/0 0/0 .sdata l_color$5326 */
-SECTION_SDATA static u8 l_color_5326[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x40,
-};
-
/* 8005520C-800553EC 04FB4C 01E0+00 1/1 0/0 0/0 .text draw__20dDlst_shadowSimple_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowSimple_c::draw() {
- nofralloc
-#include "asm/d/d_drawlist/draw__20dDlst_shadowSimple_cFv.s"
+void dDlst_shadowSimple_c::draw() {
+ static GXColor l_color = {0, 0, 0, 64};
+ l_color.a = mAlpha;
+
+ GXSetTevColor(GX_TEVREG0, l_color);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXLoadPosMtxImm(mVolumeMtx, GX_PNMTX0);
+ GXSetCurrentMtx(0);
+ GXCallDisplayList(l_frontMat, 0x40);
+ GXCallDisplayList(l_shadowVolumeDL, 0x40);
+ GXCallDisplayList(l_backSubMat, 0x20);
+ GXCallDisplayList(l_shadowVolumeDL, 0x40);
+ GXLoadPosMtxImm(mMtx, GX_PNMTX1);
+ GXSetCurrentMtx(3);
+
+ if (mpTexObj != NULL) {
+ GXLoadTexObj(mpTexObj, GX_TEXMAP0);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_A2, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+
+ if (GXGetTexObjWidth(mpTexObj) == GXGetTexObjHeight(mpTexObj)) {
+ GXCallDisplayList(l_shadowSealTexDL, 0x40);
+ } else {
+ GXCallDisplayList(l_shadowSealTex2DL, 0x40);
+ }
+ }
+
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXCallDisplayList(l_shadowSealDL, 0x60);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXSetCurrentMtx(0);
+ GXCallDisplayList(l_clearMat, 0x40);
+ GXCallDisplayList(l_shadowVolumeDL, 0x40);
}
-#pragma pop
/* ############################################################################################## */
/* 804520A4-804520A8 0006A4 0004+00 1/1 0/0 0/0 .sdata2 @5375 */
@@ -1138,14 +1380,24 @@ asm void dDlst_shadowSimple_c::set(cXyz* param_0, f32 param_1, f32 param_2, cXyz
/* ############################################################################################## */
/* 80450654-80450658 0000D4 0004+00 1/1 0/0 0/0 .sdata l_realImageSize$5383 */
-SECTION_SDATA static u8 l_realImageSize[4] = {
- 0x00,
- 0xC0,
- 0x00,
- 0x40,
-};
+SECTION_SDATA static u16 l_realImageSize[2] = {192, 64};
/* 80055684-80055768 04FFC4 00E4+00 1/1 0/0 0/0 .text init__21dDlst_shadowControl_cFv */
+// matches with literals
+#ifdef NONMATCHING
+void dDlst_shadowControl_c::init() {
+ for (int i = 0; i < 2; i++) {
+ u16 size = l_realImageSize[i];
+
+ u32 buffer_size = GXGetTexBufferSize(size, size, 5, GX_DISABLE, 0);
+ field_0x15ef0[i] = new (0x20) u8[buffer_size];
+ GXInitTexObj(&field_0x15eb0[i], field_0x15ef0[i], size, size, GX_TF_TGB5A3, GX_CLAMP,
+ GX_CLAMP, GX_DISABLE);
+ GXInitTexObjLOD(&field_0x15eb0[i], GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE,
+ GX_FALSE, GX_ANISO_1);
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1154,15 +1406,17 @@ asm void dDlst_shadowControl_c::init() {
#include "asm/d/d_drawlist/init__21dDlst_shadowControl_cFv.s"
}
#pragma pop
+#endif
/* 80055768-800557C8 0500A8 0060+00 1/1 0/0 0/0 .text reset__21dDlst_shadowControl_cFv */
void dDlst_shadowControl_c::reset() {
- dDlst_shadowReal_c* shadowReal = &mReal[0];
+ dDlst_shadowReal_c* shadowReal = mReal;
for (int i = 0; i < 8; i++) {
shadowReal->reset();
shadowReal++;
}
+
mSimpleNum = 0;
mRealNum = 0;
field_0x4 = NULL;
@@ -1172,7 +1426,7 @@ void dDlst_shadowControl_c::reset() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_shadowControl_c::imageDraw(f32 (*param_0)[4]) {
+asm void dDlst_shadowControl_c::imageDraw(Mtx param_0) {
nofralloc
#include "asm/d/d_drawlist/imageDraw__21dDlst_shadowControl_cFPA4_f.s"
}
@@ -1180,26 +1434,75 @@ asm void dDlst_shadowControl_c::imageDraw(f32 (*param_0)[4]) {
/* ############################################################################################## */
/* 80450658-8045065C 0000D8 0004+00 1/1 0/0 0/0 .sdata clearColor$5435 */
-SECTION_SDATA static u8 clearColor[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x40,
-};
+SECTION_SDATA static GXColor clearColor = {0x00, 0x00, 0x00, 0x40};
/* 804520B4-804520B8 0006B4 0004+00 1/1 0/0 0/0 .sdata2 @5433 */
SECTION_SDATA2 static u32 lit_5433 = 0x00000020;
/* 80055A14-80055C74 050354 0260+00 0/0 1/1 0/0 .text draw__21dDlst_shadowControl_cFPA4_f
*/
+// extra stack var with GXColor
+#ifdef NONMATCHING
+void dDlst_shadowControl_c::draw(Mtx param_0) {
+ j3dSys.reinitGX();
+ GXSetNumIndStages(0);
+ dKy_GxFog_set();
+
+ GXSetChanCtrl(GX_ALPHA0, 0, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
+ GXSetArray(GX_VA_POS, l_shadowVolPos, 12);
+ GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 30, GX_FALSE, 125);
+ GXSetNumTevStages(1);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXLoadPosMtxImm(param_0, GX_PNMTX0);
+ GXSetChanMatColor(GX_ALPHA0, (GXColor){0, 0, 0, 0x20});
+
+ clearColor.a = mDoGph_gInf_c::getBackColor().a;
+ GXSetTevColor(GX_TEVREG1, clearColor);
+ GXSetTevColor(GX_TEVREG2, g_whiteColor);
+
+ dDlst_shadowReal_c* real = field_0x4;
+ for (int i2 = 0, i3 = 0; real != NULL; real = real->getZsortNext()) {
+ if (real->isUse()) {
+ if (i2 == 0) {
+ GXTexObj* obj = &field_0x15eb0[i3];
+ i3++;
+
+ GXLoadTexObj(obj, GX_TEXMAP0);
+ }
+
+ GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE,
+ l_tevColorChan[i2]);
+ real->draw();
+ i2 = (i2 + 1) % 4;
+ }
+ }
+
+ GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0);
+ GXSetArray(GX_VA_POS, l_simpleShadowPos, 12);
+ GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
+
+ dDlst_shadowSimple_c* simple = mSimple;
+ for (int i = 0; i < mSimpleNum; i++) {
+ simple->draw();
+ simple++;
+ }
+
+ GXSetColorUpdate(GX_ENABLE);
+ GXSetAlphaUpdate(GX_DISABLE);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void dDlst_shadowControl_c::draw(f32 (*param_0)[4]) {
+asm void dDlst_shadowControl_c::draw(Mtx param_0) {
nofralloc
#include "asm/d/d_drawlist/draw__21dDlst_shadowControl_cFPA4_f.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 804520B8-804520BC 0006B8 0004+00 1/1 0/0 0/0 .sdata2 @5551 */
@@ -1225,26 +1528,32 @@ asm int dDlst_shadowControl_c::setReal(u32 param_0, s8 param_1, J3DModel* param_
/* 80055F1C-80055F84 05085C 0068+00 0/0 1/1 45/45 .text
* addReal__21dDlst_shadowControl_cFUlP8J3DModel */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowControl_c::addReal(u32 param_0, J3DModel* param_1) {
- nofralloc
-#include "asm/d/d_drawlist/addReal__21dDlst_shadowControl_cFUlP8J3DModel.s"
+bool dDlst_shadowControl_c::addReal(u32 i_key, J3DModel* param_1) {
+ if (i_key == 0) {
+ return false;
+ }
+
+ for (dDlst_shadowReal_c* i = field_0x4; i != NULL; i = i->getZsortNext()) {
+ if (!i->isNoUse() && i->checkKey(i_key)) {
+ return i->add(param_1);
+ }
+ }
+
+ return false;
}
-#pragma pop
/* 80055F84-80055FE8 0508C4 0064+00 0/0 1/1 10/10 .text
* setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int dDlst_shadowControl_c::setSimple(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3,
- s16 param_4, f32 param_5, _GXTexObj* param_6) {
- nofralloc
-#include "asm/d/d_drawlist/setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj.s"
+int dDlst_shadowControl_c::setSimple(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3,
+ s16 param_4, f32 param_5, GXTexObj* param_6) {
+ if (param_3 == NULL || mSimpleNum >= 128) {
+ return 0;
+ }
+
+ mSimple[mSimpleNum].set(param_0, param_1, param_2, param_3, param_4, param_5, param_6);
+ mSimpleNum++;
+ return 1;
}
-#pragma pop
/* ############################################################################################## */
/* 804248D0-804248F0 0515F0 0020+00 1/1 6/6 173/173 .bss mSimpleTexObj__21dDlst_shadowControl_c */
@@ -1252,18 +1561,13 @@ GXTexObj dDlst_shadowControl_c::mSimpleTexObj;
/* 80055FE8-80056018 050928 0030+00 0/0 1/1 0/0 .text
* setSimpleTex__21dDlst_shadowControl_cFPC7ResTIMG */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_shadowControl_c::setSimpleTex(ResTIMG const* param_0) {
- nofralloc
-#include "asm/d/d_drawlist/setSimpleTex__21dDlst_shadowControl_cFPC7ResTIMG.s"
+void dDlst_shadowControl_c::setSimpleTex(ResTIMG const* i_timg) {
+ mDoLib_setResTimgObj(i_timg, &mSimpleTexObj, 0, NULL);
}
-#pragma pop
/* 80056018-80056080 050958 0068+00 0/0 3/3 9/9 .text newData__13dDlst_peekZ_cFssPUl */
int dDlst_peekZ_c::newData(s16 x, s16 y, u32* dst) {
- if (mCount >= 0x40 || x < 0 || x > 607 || y < 0 || y > 447) {
+ if (mCount >= 64 || x < 0 || x > 607 || y < 0 || y > 447) {
return 0;
}
@@ -1288,12 +1592,15 @@ void dDlst_peekZ_c::peekData() {
}
/* 800560F0-800561C8 050A30 00D8+00 0/0 1/1 0/0 .text __ct__12dDlst_list_cFv */
+// TU vtable data order has to be fixed
#ifdef NONMATCHING
dDlst_list_c::dDlst_list_c() {
- mpCopy2DSet[1] = mpCopy2DSet[0];
- mp2DOpaTopSet[1] = mp2DOpaTopSet[0];
- mp2DOpaSet[1] = mp2DOpaSet[0];
- mp2DXluSet[1] = mp2DXluSet[0];
+ // these are probably fake matches, but cant figure out how to make these match here
+ // together with the other functions they're used in
+ mpCopy2DEnd = (dDlst_base_c**)&mpCopy2DStart;
+ mp2DOpaTopEnd = (dDlst_base_c**)&mp2DOpaTopStart;
+ mp2DOpaEnd = (dDlst_base_c**)&mp2DOpaStart;
+ mp2DXluEnd = (dDlst_base_c**)&mp2DXluStart;
J3DDrawBuffer** buffer = mDrawBuffers;
for (int i = 0; i < 21; i++) {
@@ -1316,7 +1623,8 @@ asm dDlst_list_c::dDlst_list_c() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm mDoExt_3DlineMatSortPacket::mDoExt_3DlineMatSortPacket() {
+// asm mDoExt_3DlineMatSortPacket::mDoExt_3DlineMatSortPacket() {
+extern "C" asm void __ct__26mDoExt_3DlineMatSortPacketFv() {
nofralloc
#include "asm/d/d_drawlist/__ct__26mDoExt_3DlineMatSortPacketFv.s"
}
@@ -1337,7 +1645,8 @@ extern "C" asm void __dt__18dDlst_shadowReal_cFv() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm dDlst_shadowTri_c::~dDlst_shadowTri_c() {
+// asm dDlst_shadowTri_c::~dDlst_shadowTri_c() {
+extern "C" asm void __dt__17dDlst_shadowTri_cFv() {
nofralloc
#include "asm/d/d_drawlist/__dt__17dDlst_shadowTri_cFv.s"
}
@@ -1347,7 +1656,8 @@ asm dDlst_shadowTri_c::~dDlst_shadowTri_c() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm dDlst_shadowReal_c::dDlst_shadowReal_c() {
+// asm dDlst_shadowReal_c::dDlst_shadowReal_c() {
+extern "C" asm void __ct__18dDlst_shadowReal_cFv() {
nofralloc
#include "asm/d/d_drawlist/__ct__18dDlst_shadowReal_cFv.s"
}
@@ -1357,16 +1667,15 @@ asm dDlst_shadowReal_c::dDlst_shadowReal_c() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm dDlst_shadowTri_c::dDlst_shadowTri_c() {
+// asm dDlst_shadowTri_c::dDlst_shadowTri_c() {
+extern "C" asm void __ct__17dDlst_shadowTri_cFv() {
nofralloc
#include "asm/d/d_drawlist/__ct__17dDlst_shadowTri_cFv.s"
}
#pragma pop
/* 8005638C-80056390 050CCC 0004+00 1/1 0/0 0/0 .text __ct__20dDlst_shadowSimple_cFv */
-dDlst_shadowSimple_c::dDlst_shadowSimple_c() {
- /* empty function */
-}
+dDlst_shadowSimple_c::dDlst_shadowSimple_c() {}
/* ############################################################################################## */
/* 8037A178-8037A1A4 0067D8 002A+02 1/1 0/0 0/0 .rodata l_drawlistSize$5656 */
@@ -1388,37 +1697,38 @@ SECTION_SDATA2 static u8 l_zSortId[6] = {
};
/* 80056390-8005648C 050CD0 00FC+00 0/0 1/1 0/0 .text init__12dDlst_list_cFv */
+// r3 / r4 swap
#ifdef NONMATCHING
void dDlst_list_c::init() {
- J3DDrawBuffer** buffer = mDrawBuffers;
- const u16* size = l_drawlistSize;
+ J3DDrawBuffer** var_r30 = mDrawBuffers;
+ const u16* var_r29 = l_drawlistSize;
for (int i = 0; i < 21; i++) {
- u32 bufSize = *size;
- size++;
+ u32 temp_r3 = *var_r29;
+ var_r29++;
- *buffer = J3DDrawBuffer__create(bufSize);
- buffer++;
+ *var_r30 = J3DDrawBuffer__create(temp_r3);
+ var_r30++;
}
- const u8* nonsortID = l_nonSortId;
+ const u8* var_r5 = l_nonSortId;
for (int i = 0; i < 9; i++) {
- mDrawBuffers[*nonsortID]->setNonSort();
- nonsortID++;
+ mDrawBuffers[(u8)*var_r5]->setNonSort();
+ var_r5++;
}
- u8* zsortID = l_zSortId;
+ u8* var_r5_2 = l_zSortId;
for (int i = 0; i < 6; i++) {
- mDrawBuffers[*zsortID]->setZSort();
- zsortID++;
+ mDrawBuffers[(u8)*var_r5_2]->setZSort();
+ var_r5_2++;
}
setOpaList();
setXluList();
- mpCopy2DSet[0] = mpCopy2DDraw[0];
- mp2DOpaTopSet[0] = mp2DOpaTopDraw[0];
- mp2DOpaSet[0] = mp2DOpaDraw[0];
- mp2DXluSet[0] = mp2DXluDraw[0];
+ mpCopy2DStart = mpCopy2DDrawLists;
+ mp2DOpaTopStart = mp2DOpaTopDrawLists;
+ mp2DOpaStart = mp2DOpaDrawLists;
+ mp2DXluStart = mp2DXluDrawLists;
mShadowControl.init();
}
@@ -1434,6 +1744,18 @@ asm void dDlst_list_c::init() {
#endif
/* 8005648C-80056538 050DCC 00AC+00 0/0 1/1 0/0 .text __dt__12dDlst_list_cFv */
+// TU vtable data order has to be fixed
+#ifdef NONMATCHING
+dDlst_list_c::~dDlst_list_c() {
+ J3DDrawBuffer** buffer = mDrawBuffers;
+ for (int i = 0; i < 21; i++) {
+ J3DDrawBuffer* tmp = *buffer;
+ buffer++;
+
+ delete tmp;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1442,16 +1764,31 @@ asm dDlst_list_c::~dDlst_list_c() {
#include "asm/d/d_drawlist/__dt__12dDlst_list_cFv.s"
}
#pragma pop
+#endif
/* 80056538-800565EC 050E78 00B4+00 0/0 1/1 0/0 .text reset__12dDlst_list_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dDlst_list_c::reset() {
- nofralloc
-#include "asm/d/d_drawlist/reset__12dDlst_list_cFv.s"
+void dDlst_list_c::reset() {
+ J3DDrawBuffer** buffer = mDrawBuffers;
+ for (int i = 0; i < 21; i++) {
+ J3DDrawBuffer* tmp = *buffer;
+ buffer++;
+
+ tmp->frameInit();
+ }
+
+ setOpaList();
+ setXluList();
+
+ mpCopy2DStart = mpCopy2DDrawLists;
+ mp2DOpaTopStart = mp2DOpaTopDrawLists;
+ mp2DOpaStart = mp2DOpaDrawLists;
+ mp2DXluStart = mp2DXluDrawLists;
+ mShadowControl.reset();
+
+ for (int i = 0; i < 3; i++) {
+ m3DLineMatSortPacket[i].reset();
+ }
}
-#pragma pop
/* ############################################################################################## */
/* 804520CC-804520D0 0006CC 0004+00 1/1 0/0 0/0 .sdata2 @5747 */
@@ -1459,6 +1796,29 @@ SECTION_SDATA2 static f32 lit_5747 = 9999.0f;
/* 800565EC-800566D4 050F2C 00E8+00 0/0 2/2 0/0 .text
* entryZSortXluDrawList__12dDlst_list_cFP13J3DDrawBufferP9J3DPacketR4cXyz */
+// (size / 9999.0f) register swap, but reversing values makes things much worse
+#ifdef NONMATCHING
+void dDlst_list_c::entryZSortXluDrawList(J3DDrawBuffer* param_0, J3DPacket* param_1,
+ cXyz& param_2) {
+ f32 z_value = -J3DCalcZValue(j3dSys.getViewMtx(), param_2);
+ u32 size = param_0->getEntryTableSize();
+ f32 temp_f1 = size / 9999.0f;
+
+ u16 var_r0;
+ if (temp_f1 + 1.0f < z_value) {
+ if (10000.0f - temp_f1 > z_value) {
+ var_r0 = z_value / temp_f1;
+ } else {
+ var_r0 = size - 1;
+ }
+ } else {
+ var_r0 = 0;
+ }
+
+ var_r0 = (size - 1) - var_r0;
+ param_0->entryImm(param_1, var_r0);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1468,6 +1828,7 @@ asm void dDlst_list_c::entryZSortXluDrawList(J3DDrawBuffer* param_0, J3DPacket*
#include "asm/d/d_drawlist/entryZSortXluDrawList__12dDlst_list_cFP13J3DDrawBufferP9J3DPacketR4cXyz.s"
}
#pragma pop
+#endif
/* 800566D4-80056710 051014 003C+00 1/1 1/1 0/0 .text
* drawOpaDrawList__12dDlst_list_cFP13J3DDrawBuffer */
diff --git a/src/d/menu/d_menu_calibration.cpp b/src/d/menu/d_menu_calibration.cpp
index 9eee429f9e..e3d6041ea1 100644
--- a/src/d/menu/d_menu_calibration.cpp
+++ b/src/d/menu/d_menu_calibration.cpp
@@ -1,565 +1,346 @@
-//
-// Generated By: dol2asm
-// Translation Unit: d/menu/d_menu_calibration
-//
+/**
+ * d_menu_calibration.cpp
+ * Wii Remote Calibration Option Menu
+ */
#include "d/menu/d_menu_calibration.h"
-#include "dol2asm.h"
-#include "dolphin/types.h"
-
-//
-// Types:
-//
-
-struct mDoCPd_c {
- static u8 m_cpadInfo[256];
-};
-
-struct J2DPane {};
-
-struct dSelect_cursor_c {
- /* 801950F4 */ void setPos(f32, f32, J2DPane*, bool);
- /* 801952A0 */ void setAlphaRate(f32);
-};
-
-struct JMSMesgEntry_c {};
-
-struct dMeter2Info_c {
- /* 8021C544 */ void getStringKanji(u32, char*, JMSMesgEntry_c*);
-};
-
-struct dMenu_Calibration_c {
- /* 801AED64 */ ~dMenu_Calibration_c();
- /* 801AEDAC */ void _move();
- /* 801AEE2C */ void _draw();
- /* 801AEE30 */ void step1_wait_init();
- /* 801AEF60 */ void step1_wait_move();
- /* 801AF084 */ void step1_move_init();
- /* 801AF0C0 */ void step1_move_move();
- /* 801AF188 */ void step2_wait_init();
- /* 801AF1F4 */ void step2_wait_move();
- /* 801AF380 */ void step2_move_init();
- /* 801AF3BC */ void step2_move_move();
- /* 801AF488 */ void step3_wait_init();
- /* 801AF4F8 */ void step3_wait_move();
- /* 801AF5F4 */ void step3_move_init();
- /* 801AF630 */ void step3_move_move();
- /* 801AF710 */ void setCalibrationValue();
- /* 801AF738 */ void setAButtonString(u16);
- /* 801AF7E8 */ void setBButtonString(u16);
- /* 801AF898 */ void setStepString(u16);
- /* 801AF948 */ void setExplainString(u16);
- /* 801AFA00 */ void setHIO(bool);
- /* 801AFBF4 */ void draw();
-};
-
-struct JAISoundID {};
-
-struct Vec {};
+#include "d/meter/d_meter_HIO.h"
-struct Z2SeMgr {
- /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8);
-};
-
-struct Z2AudioMgr {
- static u8 mAudioMgrPtr[4 + 4 /* padding */];
-};
-
-struct J2DTextBox {
- /* 80300658 */ void getStringPtr() const;
-};
-
-struct CPaneMgrAlpha {
- /* 802557D0 */ void setAlphaRate(f32);
- /* 80255828 */ void getAlphaRate();
-};
-
-struct CPaneMgr {
- /* 802545B0 */ void paneTrans(f32, f32);
- /* 80254EBC */ void getGlobalVtxCenter(J2DPane*, bool, s16);
-};
-
-//
-// Forward References:
-//
-
-extern "C" void __dt__19dMenu_Calibration_cFv();
-extern "C" void _move__19dMenu_Calibration_cFv();
-extern "C" void _draw__19dMenu_Calibration_cFv();
-extern "C" void step1_wait_init__19dMenu_Calibration_cFv();
-extern "C" void step1_wait_move__19dMenu_Calibration_cFv();
-extern "C" void step1_move_init__19dMenu_Calibration_cFv();
-extern "C" void step1_move_move__19dMenu_Calibration_cFv();
-extern "C" void step2_wait_init__19dMenu_Calibration_cFv();
-extern "C" void step2_wait_move__19dMenu_Calibration_cFv();
-extern "C" void step2_move_init__19dMenu_Calibration_cFv();
-extern "C" void step2_move_move__19dMenu_Calibration_cFv();
-extern "C" void step3_wait_init__19dMenu_Calibration_cFv();
-extern "C" void step3_wait_move__19dMenu_Calibration_cFv();
-extern "C" void step3_move_init__19dMenu_Calibration_cFv();
-extern "C" void step3_move_move__19dMenu_Calibration_cFv();
-extern "C" void setCalibrationValue__19dMenu_Calibration_cFv();
-extern "C" void setAButtonString__19dMenu_Calibration_cFUs();
-extern "C" void setBButtonString__19dMenu_Calibration_cFUs();
-extern "C" void setStepString__19dMenu_Calibration_cFUs();
-extern "C" void setExplainString__19dMenu_Calibration_cFUs();
-extern "C" void setHIO__19dMenu_Calibration_cFb();
-extern "C" void draw__19dMenu_Calibration_cFv();
-extern "C" void __sinit_d_menu_calibration_cpp();
-extern "C" extern char const* const d_menu_d_menu_calibration__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void setPos__16dSelect_cursor_cFffP7J2DPaneb();
-extern "C" void setAlphaRate__16dSelect_cursor_cFf();
-extern "C" void getStringKanji__13dMeter2Info_cFUlPcP14JMSMesgEntry_c();
-extern "C" void dMeter2Info_set2DVibration__Fv();
-extern "C" void paneTrans__8CPaneMgrFff();
-extern "C" void getGlobalVtxCenter__8CPaneMgrFP7J2DPanebs();
-extern "C" void setAlphaRate__13CPaneMgrAlphaFf();
-extern "C" void getAlphaRate__13CPaneMgrAlphaFv();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void __dl__FPv();
-extern "C" void getStringPtr__10J2DTextBoxCFv();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void strcpy();
-extern "C" u8 m_cpadInfo__8mDoCPd_c[256];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" extern u8 g_drawHIO[3880];
-extern "C" extern u8 g_meter2_info[248];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
/* 803BC238-803BC244 019358 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
+static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
-/* 803BC244-803BC250 -00001 000C+00 0/1 0/0 0/0 .data @3799 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3799[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step1_wait_init__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC250-803BC25C -00001 000C+00 0/1 0/0 0/0 .data @3800 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3800[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step1_move_init__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC25C-803BC268 -00001 000C+00 0/1 0/0 0/0 .data @3801 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3801[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step2_wait_init__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC268-803BC274 -00001 000C+00 0/1 0/0 0/0 .data @3802 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3802[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step2_move_init__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC274-803BC280 -00001 000C+00 0/1 0/0 0/0 .data @3803 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3803[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step3_wait_init__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC280-803BC28C -00001 000C+00 0/1 0/0 0/0 .data @3804 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3804[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step3_move_init__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
/* 803BC28C-803BC2D4 0193AC 0048+00 1/2 0/0 0/0 .data map_init_process */
-SECTION_DATA static u8 map_init_process[72] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 803BC2D4-803BC2E0 -00001 000C+00 0/1 0/0 0/0 .data @3805 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3805[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step1_wait_move__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC2E0-803BC2EC -00001 000C+00 0/1 0/0 0/0 .data @3806 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3806[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step1_move_move__19dMenu_Calibration_cFv,
+typedef void (dMenu_Calibration_c::*initFunc)();
+static initFunc map_init_process[] = {
+ &dMenu_Calibration_c::step1_wait_init, &dMenu_Calibration_c::step1_move_init,
+ &dMenu_Calibration_c::step2_wait_init, &dMenu_Calibration_c::step2_move_init,
+ &dMenu_Calibration_c::step3_wait_init, &dMenu_Calibration_c::step3_move_init,
};
-#pragma pop
-
-/* 803BC2EC-803BC2F8 -00001 000C+00 0/1 0/0 0/0 .data @3807 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3807[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step2_wait_move__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC2F8-803BC304 -00001 000C+00 0/1 0/0 0/0 .data @3808 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3808[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step2_move_move__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC304-803BC310 -00001 000C+00 0/1 0/0 0/0 .data @3809 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3809[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step3_wait_move__19dMenu_Calibration_cFv,
-};
-#pragma pop
-
-/* 803BC310-803BC31C -00001 000C+00 0/1 0/0 0/0 .data @3810 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3810[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)step3_move_move__19dMenu_Calibration_cFv,
-};
-#pragma pop
/* 803BC31C-803BC364 01943C 0048+00 1/2 0/0 0/0 .data map_move_process */
-SECTION_DATA static u8 map_move_process[72] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 803BC364-803BC380 019484 0010+0C 1/1 0/0 0/0 .data __vt__19dMenu_Calibration_c */
-SECTION_DATA extern void* __vt__19dMenu_Calibration_c[4 + 3 /* padding */] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)draw__19dMenu_Calibration_cFv,
- (void*)__dt__19dMenu_Calibration_cFv,
- /* padding */
- NULL,
- NULL,
- NULL,
+typedef void (dMenu_Calibration_c::*moveFunc)();
+static moveFunc map_move_process[] = {
+ &dMenu_Calibration_c::step1_wait_move, &dMenu_Calibration_c::step1_move_move,
+ &dMenu_Calibration_c::step2_wait_move, &dMenu_Calibration_c::step2_move_move,
+ &dMenu_Calibration_c::step3_wait_move, &dMenu_Calibration_c::step3_move_move,
};
/* 801AED64-801AEDAC 1A96A4 0048+00 1/0 0/0 0/0 .text __dt__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm dMenu_Calibration_c::~dMenu_Calibration_c() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/__dt__19dMenu_Calibration_cFv.s"
-}
-#pragma pop
+dMenu_Calibration_c::~dMenu_Calibration_c() {}
/* 801AEDAC-801AEE2C 1A96EC 0080+00 0/0 1/1 0/0 .text _move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/_move__19dMenu_Calibration_cFv.s"
-}
-#pragma pop
+void dMenu_Calibration_c::_move() {
+ u8 last_process = mProcess;
+ (this->*map_move_process[mProcess])();
-/* 801AEE2C-801AEE30 1A976C 0004+00 1/1 0/0 0/0 .text _draw__19dMenu_Calibration_cFv */
-void dMenu_Calibration_c::_draw() {
- /* empty function */
+ if (last_process != mProcess) {
+ (this->*map_init_process[mProcess])();
+ }
+
+ setHIO(false);
}
-/* ############################################################################################## */
-/* 80453F10-80453F14 002510 0004+00 5/5 0/0 0/0 .sdata2 @3847 */
-SECTION_SDATA2 static u8 lit_3847[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
+/* 801AEE2C-801AEE30 1A976C 0004+00 1/1 0/0 0/0 .text _draw__19dMenu_Calibration_cFv */
+void dMenu_Calibration_c::_draw() {}
/* 801AEE30-801AEF60 1A9770 0130+00 1/0 0/0 0/0 .text step1_wait_init__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step1_wait_init() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step1_wait_init__19dMenu_Calibration_cFv.s"
-}
-#pragma pop
+void dMenu_Calibration_c::step1_wait_init() {
+ field_0xfa = 0;
+ setAButtonString(0);
+ setBButtonString(0);
+ setStepString(1240); // "STEP 1"
+ setExplainString(1245); // "Point the Wii Remote at the screen and move the cursor vertically
+ // until it overlaps the central orange circle."
-/* ############################################################################################## */
-/* 80453F14-80453F18 002514 0004+00 6/6 0/0 0/0 .sdata2 @3885 */
-SECTION_SDATA2 static f32 lit_3885 = 1.0f;
+ ((J2DTextBox*)field_0x80->getPanePtr())->setFontSize(field_0xac[mCalibrationValue + 2]);
-/* 80453F18-80453F20 002518 0008+00 3/3 0/0 0/0 .sdata2 @3887 */
-SECTION_SDATA2 static f64 lit_3887 = 4503601774854144.0 /* cast s32 to float */;
+ Vec pos = field_0x68[mCalibrationValue + 2]->getGlobalVtxCenter(false, 0);
+ mpSelectCursor->setPos(pos.x, pos.y, field_0x68[mCalibrationValue + 2]->getPanePtr(), false);
+
+ field_0xfc = 0;
+ field_0x7c->setAlphaRate(0.0f);
+}
/* 801AEF60-801AF084 1A98A0 0124+00 1/0 0/0 0/0 .text step1_wait_move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step1_wait_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step1_wait_move__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step1_wait_move() {
+ s16 open_frames = g_drawHIO.mCalibration.mOpenFrames;
+ field_0xfa++;
+
+ if (field_0xfa >= open_frames) {
+ field_0x58[0]->setAlphaRate(1.0f);
+ field_0x7c->setAlphaRate(0.0f);
+ field_0x58[1]->setAlphaRate(0.0f);
+ mpSelectCursor->setAlphaRate(1.0f);
+ mpSelectCursor->onPlayAnime(0);
+ mProcess = PROC_STEP1_MOVE;
+ } else {
+ f32 alpha_rate = (f32)field_0xfa / (f32)open_frames;
+
+ field_0x58[0]->setAlphaRate(alpha_rate);
+ field_0x7c->setAlphaRate(0.0f);
+ mpSelectCursor->setAlphaRate(alpha_rate);
+
+ if (field_0x58[1]->getAlphaRate() != 0.0f) {
+ field_0x58[1]->setAlphaRate(1.0f - alpha_rate);
+ }
+ }
}
-#pragma pop
/* 801AF084-801AF0C0 1A99C4 003C+00 1/0 0/0 0/0 .text step1_move_init__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step1_move_init() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step1_move_init__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step1_move_init() {
+ setAButtonString(1032); // "Next"
+ setBButtonString(1377); // "Cancel"
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80453F20-80453F28 002520 0004+04 3/3 0/0 0/0 .sdata2 @3911 */
-SECTION_SDATA2 static f32 lit_3911[1 + 1 /* padding */] = {
- -1.0f,
- /* padding */
- 0.0f,
-};
/* 801AF0C0-801AF188 1A9A00 00C8+00 1/0 0/0 0/0 .text step1_move_move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step1_move_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step1_move_move__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step1_move_move() {
+ if (mDoCPd_c::getTrigA(PAD_1)) {
+ mProcess = PROC_STEP2_WAIT;
+ field_0xff = 0;
+ Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_NEXT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ dMeter2Info_set2DVibration();
+ } else if (mDoCPd_c::getTrigB(PAD_1)) {
+ field_0x101 = 0;
+ mStatus = 0;
+ Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ dMeter2Info_set2DVibration();
+ }
}
-#pragma pop
/* 801AF188-801AF1F4 1A9AC8 006C+00 1/0 0/0 0/0 .text step2_wait_init__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step2_wait_init() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step2_wait_init__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step2_wait_init() {
+ field_0xfa = 0;
+ setAButtonString(0);
+ setBButtonString(0);
+ setStepString(1242); // "STEP 2"
+ setExplainString(1241); // "Please adjust the orange bar so that it matches the exact size and
+ // position of the Sensor Bar."
+ mpSelectCursor->offPlayAnime(0);
}
-#pragma pop
/* 801AF1F4-801AF380 1A9B34 018C+00 1/0 0/0 0/0 .text step2_wait_move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step2_wait_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step2_wait_move__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step2_wait_move() {
+ s16 open_frames = g_drawHIO.mCalibration.mOpenFrames;
+ field_0xfa++;
+
+ if (field_0xfa >= open_frames) {
+ field_0x58[1]->setAlphaRate(1.0f);
+ field_0x58[0]->setAlphaRate(0.0f);
+ field_0x7c->setAlphaRate(0.0f);
+ field_0x58[2]->setAlphaRate(0.0f);
+ field_0x90->setAlphaRate(0.0f);
+
+ if (field_0xff == 0) {
+ mpSelectCursor->setAlphaRate(0.0f);
+ }
+
+ mProcess = PROC_STEP2_MOVE;
+ } else {
+ f32 alpha_rate = (f32)field_0xfa / (f32)open_frames;
+
+ field_0x58[1]->setAlphaRate(alpha_rate);
+
+ if (field_0x58[0]->getAlphaRate() != 0.0f) {
+ field_0x58[0]->setAlphaRate(1.0f - alpha_rate);
+ field_0x7c->setAlphaRate(1.0f - alpha_rate);
+ }
+
+ if (field_0x58[2]->getAlphaRate() != 0.0f) {
+ field_0x58[2]->setAlphaRate(1.0f - alpha_rate);
+ field_0x90->setAlphaRate(1.0f - alpha_rate);
+ }
+
+ if (field_0xff == 0) {
+ mpSelectCursor->setAlphaRate(alpha_rate);
+ }
+ }
}
-#pragma pop
/* 801AF380-801AF3BC 1A9CC0 003C+00 1/0 0/0 0/0 .text step2_move_init__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step2_move_init() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step2_move_init__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step2_move_init() {
+ setAButtonString(1032); // "Next"
+ setBButtonString(1017); // "Back"
}
-#pragma pop
/* 801AF3BC-801AF488 1A9CFC 00CC+00 1/0 0/0 0/0 .text step2_move_move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step2_move_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step2_move_move__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step2_move_move() {
+ if (mDoCPd_c::getTrigA(PAD_1)) {
+ mProcess = PROC_STEP3_WAIT;
+ field_0xff = 0;
+ Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_NEXT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ dMeter2Info_set2DVibration();
+ } else if (mDoCPd_c::getTrigB(PAD_1)) {
+ mProcess = PROC_STEP1_WAIT;
+ field_0xff = 1;
+ Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ dMeter2Info_set2DVibration();
+ }
}
-#pragma pop
/* 801AF488-801AF4F8 1A9DC8 0070+00 1/0 0/0 0/0 .text step3_wait_init__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step3_wait_init() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step3_wait_init__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step3_wait_init() {
+ field_0xfa = 0;
+ setAButtonString(0);
+ setBButtonString(0);
+ setStepString(1244); // "STEP 3"
+ setExplainString(1243); // "Point the Wii Remote at the screen and adjust your distance from
+ // the screen until the blue circle overlaps the orange circle."
+ field_0xfc = 0;
+
+ field_0x90->setAlphaRate(0.0f);
}
-#pragma pop
/* 801AF4F8-801AF5F4 1A9E38 00FC+00 1/0 0/0 0/0 .text step3_wait_move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step3_wait_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step3_wait_move__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step3_wait_move() {
+ s16 open_frames = g_drawHIO.mCalibration.mOpenFrames;
+ field_0xfa++;
+
+ if (field_0xfa >= open_frames) {
+ field_0x58[2]->setAlphaRate(1.0f);
+ field_0x90->setAlphaRate(0.0f);
+ field_0x58[1]->setAlphaRate(0.0f);
+
+ mProcess = PROC_STEP3_MOVE;
+ } else {
+ f32 alpha_rate = (f32)field_0xfa / (f32)open_frames;
+
+ field_0x58[2]->setAlphaRate(alpha_rate);
+ field_0x90->setAlphaRate(0.0f);
+
+ if (field_0x58[1]->getAlphaRate() != 0.0f) {
+ field_0x58[1]->setAlphaRate(1.0f - alpha_rate);
+ }
+ }
}
-#pragma pop
/* 801AF5F4-801AF630 1A9F34 003C+00 1/0 0/0 0/0 .text step3_move_init__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step3_move_init() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step3_move_init__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step3_move_init() {
+ setAButtonString(1378); // "End"
+ setBButtonString(1017); // "Back"
}
-#pragma pop
/* 801AF630-801AF710 1A9F70 00E0+00 1/0 0/0 0/0 .text step3_move_move__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::step3_move_move() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/step3_move_move__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::step3_move_move() {
+ if (mDoCPd_c::getTrigA(PAD_1)) {
+ mStatus = 0;
+ field_0x101 = 1;
+ Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ dMeter2Info_set2DVibration();
+ setCalibrationValue();
+ } else if (mDoCPd_c::getTrigB(PAD_1)) {
+ mProcess = PROC_STEP2_WAIT;
+ field_0xff = 1;
+ Z2GetAudioMgr()->mSeMgr.seStart(Z2SE_SY_MENU_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ dMeter2Info_set2DVibration();
+ }
}
-#pragma pop
/* 801AF710-801AF738 1AA050 0028+00 1/1 0/0 0/0 .text setCalibrationValue__19dMenu_Calibration_cFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::setCalibrationValue() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/setCalibrationValue__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::setCalibrationValue() {
+ dComIfGs_setOptCalValue(mCalibrationValue);
+ dComIfGs_setOptCalibrateDist(mCalibrateDist);
+ field_0xec = mCalibrationValue;
+ field_0xf6 = mCalibrateDist;
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80394F70-80394F70 0215D0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80394F70 = "";
-/* @stringBase0 padding */
-SECTION_DEAD static char const* const pad_80394F71 = "\0\0\0\0\0\0";
-#pragma pop
/* 801AF738-801AF7E8 1AA078 00B0+00 6/6 0/0 0/0 .text setAButtonString__19dMenu_Calibration_cFUs
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::setAButtonString(u16 param_0) {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/setAButtonString__19dMenu_Calibration_cFUs.s"
+void dMenu_Calibration_c::setAButtonString(u16 i_stringID) {
+ if (i_stringID == 0) {
+ for (int i = 0; i < 5; i++) {
+ strcpy(mpAButtonString[i]->getStringPtr(), "");
+ }
+ } else {
+ for (int i = 0; i < 5; i++) {
+ dMeter2Info_getStringKanji(i_stringID, mpAButtonString[i]->getStringPtr(), NULL);
+ }
+ }
}
-#pragma pop
/* 801AF7E8-801AF898 1AA128 00B0+00 6/6 0/0 0/0 .text setBButtonString__19dMenu_Calibration_cFUs
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::setBButtonString(u16 param_0) {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/setBButtonString__19dMenu_Calibration_cFUs.s"
+void dMenu_Calibration_c::setBButtonString(u16 i_stringID) {
+ if (i_stringID == 0) {
+ for (int i = 0; i < 5; i++) {
+ strcpy(mpBButtonString[i]->getStringPtr(), "");
+ }
+ } else {
+ for (int i = 0; i < 5; i++) {
+ dMeter2Info_getStringKanji(i_stringID, mpBButtonString[i]->getStringPtr(), NULL);
+ }
+ }
}
-#pragma pop
/* 801AF898-801AF948 1AA1D8 00B0+00 3/3 0/0 0/0 .text setStepString__19dMenu_Calibration_cFUs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::setStepString(u16 param_0) {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/setStepString__19dMenu_Calibration_cFUs.s"
+void dMenu_Calibration_c::setStepString(u16 i_stringID) {
+ if (i_stringID == 0) {
+ for (int i = 0; i < 3; i++) {
+ strcpy(mpStepString[i]->getStringPtr(), "");
+ }
+ } else {
+ for (int i = 0; i < 3; i++) {
+ dMeter2Info_getStringKanji(i_stringID, mpStepString[i]->getStringPtr(), NULL);
+ }
+ }
}
-#pragma pop
/* 801AF948-801AFA00 1AA288 00B8+00 3/3 0/0 0/0 .text setExplainString__19dMenu_Calibration_cFUs
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::setExplainString(u16 param_0) {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/setExplainString__19dMenu_Calibration_cFUs.s"
+void dMenu_Calibration_c::setExplainString(u16 i_stringID) {
+ if (i_stringID == 0) {
+ for (int i = 0; i < 3; i++) {
+ strcpy(mpExplainString[i]->getStringPtr(), "");
+ }
+ } else {
+ for (int i = 0; i < 3; i++) {
+ mpMsgString->getString(i_stringID, mpExplainString[i], NULL, NULL, NULL, 0);
+ }
+ }
}
-#pragma pop
/* 801AFA00-801AFBF4 1AA340 01F4+00 1/1 0/0 0/0 .text setHIO__19dMenu_Calibration_cFb */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::setHIO(bool param_0) {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/setHIO__19dMenu_Calibration_cFb.s"
+void dMenu_Calibration_c::setHIO(bool i_useHIO) {
+ if (i_useHIO || g_drawHIO.mCalibration.mDebug) {
+ field_0x7c->scale(g_drawHIO.mCalibration.mCircleScale, g_drawHIO.mCalibration.mCircleScale);
+ field_0x90->scale(g_drawHIO.mCalibration.mCircleScale2,
+ g_drawHIO.mCalibration.mCircleScale2);
+ }
+
+ if (g_drawHIO.mCollectScreen.mButtonDebugON || i_useHIO) {
+ if (field_0x94 != NULL) {
+ field_0x94->paneTrans(g_drawHIO.mCollectScreen.mAButtonPosX,
+ g_drawHIO.mCollectScreen.mAButtonPosY);
+ field_0x94->scale(g_drawHIO.mCollectScreen.mAButtonScale,
+ g_drawHIO.mCollectScreen.mAButtonScale);
+ }
+
+ if (field_0x98 != NULL) {
+ field_0x98->paneTrans(g_drawHIO.mCollectScreen.mBButtonPosX,
+ g_drawHIO.mCollectScreen.mBButtonPosY);
+ field_0x98->scale(g_drawHIO.mCollectScreen.mBButtonScale,
+ g_drawHIO.mCollectScreen.mBButtonScale);
+ }
+
+ if (field_0x9c != NULL) {
+ field_0x9c->paneTrans(g_drawHIO.mCollectScreen.mAButtonTextPosX,
+ g_drawHIO.mCollectScreen.mAButtonTextPosY);
+ field_0x9c->scale(g_drawHIO.mCollectScreen.mAButtonTextScale,
+ g_drawHIO.mCollectScreen.mAButtonTextScale);
+ }
+
+ if (field_0xa0 != NULL) {
+ field_0xa0->paneTrans(g_drawHIO.mCollectScreen.mBButtonTextPosX,
+ g_drawHIO.mCollectScreen.mBButtonTextPosY);
+ field_0xa0->scale(g_drawHIO.mCollectScreen.mBButtonTextScale,
+ g_drawHIO.mCollectScreen.mBButtonTextScale);
+ }
+ }
}
-#pragma pop
/* 801AFBF4-801AFC14 1AA534 0020+00 1/0 0/0 0/0 .text draw__19dMenu_Calibration_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dMenu_Calibration_c::draw() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/draw__19dMenu_Calibration_cFv.s"
+void dMenu_Calibration_c::draw() {
+ _draw();
}
-#pragma pop
-
-/* 801AFC14-801AFD48 1AA554 0134+00 0/0 1/0 0/0 .text __sinit_d_menu_calibration_cpp */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void __sinit_d_menu_calibration_cpp() {
- nofralloc
-#include "asm/d/menu/d_menu_calibration/__sinit_d_menu_calibration_cpp.s"
-}
-#pragma pop
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x801AFC14, __sinit_d_menu_calibration_cpp);
-#pragma pop
-
-/* 80394F70-80394F70 0215D0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/src/d/menu/d_menu_window_HIO.cpp b/src/d/menu/d_menu_window_HIO.cpp
index 56601e2817..92219afee5 100644
--- a/src/d/menu/d_menu_window_HIO.cpp
+++ b/src/d/menu/d_menu_window_HIO.cpp
@@ -1,47 +1,22 @@
-//
-// Generated By: dol2asm
-// Translation Unit: d/menu/d_menu_window_HIO
-//
+/**
+ * d_menu_window_HIO.cpp
+ * Menu HostIO functionality
+ */
#include "d/menu/d_menu_window_HIO.h"
#include "d/com/d_com_inf_game.h"
-#include "dol2asm.h"
-#include "dolphin/types.h"
-
-//
-// Declarations:
-//
/* 801F9AFC-801F9B38 1F443C 003C+00 1/1 0/0 0/0 .text __ct__9dMw_HIO_cFv */
dMw_HIO_c::dMw_HIO_c() {
init();
}
-/* ############################################################################################## */
-/* 80450748-8045074C 0001C8 0003+01 1/1 0/0 0/0 .sdata m_cloth_item$3797 */
-static u8 m_cloth_item[3] = {
- WEAR_KOKIRI,
- ARMOR,
- WEAR_ZORA,
-};
-
-/* 8045074C-80450750 0001CC 0004+00 1/1 0/0 0/0 .sdata m_sword_item$3798 */
-static u8 m_sword_item[4] = {
- SWORD,
- MASTER_SWORD,
- LIGHT_SWORD,
- WOOD_STICK,
-};
-
-/* 80450750-80450758 0001D0 0003+05 1/1 0/0 0/0 .sdata m_shield_item$3799 */
-static u8 m_shield_item[3] = {
- SHIELD,
- HYLIA_SHIELD,
- WOOD_SHIELD,
-};
-
/* 801F9B38-801F9E14 1F4478 02DC+00 1/1 0/0 0/0 .text init__9dMw_HIO_cFv */
void dMw_HIO_c::init() {
+ static u8 m_cloth_item[3] = {WEAR_KOKIRI, ARMOR, WEAR_ZORA};
+ static u8 m_sword_item[4] = {SWORD, MASTER_SWORD, LIGHT_SWORD, WOOD_STICK};
+ static u8 m_shield_item[3] = {SHIELD, HYLIA_SHIELD, WOOD_SHIELD};
+
mArrowFlag = 0;
mBombFlag = 0;
mPachinkoFlag = 0;
diff --git a/src/d/meter/d_meter2_draw.cpp b/src/d/meter/d_meter2_draw.cpp
index 3996be653e..eaeca4b17d 100644
--- a/src/d/meter/d_meter2_draw.cpp
+++ b/src/d/meter/d_meter2_draw.cpp
@@ -948,7 +948,7 @@ void dMeter2Draw_c::init() {
}
/* 8021135C-8021151C 20BC9C 01C0+00 0/0 1/1 0/0 .text exec__13dMeter2Draw_cFUl */
-void dMeter2Draw_c::exec(u32 param_0) {
+void dMeter2Draw_c::exec(u32 i_status) {
if (mHUDScale != g_drawHIO.mHUDScale) {
mHUDScale = g_drawHIO.mHUDScale;
mpParent->scale(g_drawHIO.mHUDScale, g_drawHIO.mHUDScale);
@@ -959,7 +959,7 @@ void dMeter2Draw_c::exec(u32 param_0) {
mpParent->setAlphaRate(g_drawHIO.mHUDAlpha);
}
- if (param_0 & 0x1000000) {
+ if (i_status & 0x1000000) {
if (mButtonsPosX != g_drawHIO.mRingHUDButtonsPosX ||
mButtonsPosY != g_drawHIO.mRingHUDButtonsPosY)
{