diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-01-21 11:15:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-21 01:15:22 -0800 |
| commit | 0228b4e03ba255fdfabc25dab14ed21b5479a8d2 (patch) | |
| tree | 6e8f6ab50a10deb32db03e34d1139cb73e968511 /src | |
| parent | 9f372c40d5cbac67bb445247efc56ab6a2b5a81e (diff) | |
Work on d_msg_scrn_howl + misc (#2040)
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/d_drawlist.cpp | 210 | ||||
| -rw-r--r-- | src/d/d_lib.cpp | 80 | ||||
| -rw-r--r-- | src/d/d_name.cpp | 39 | ||||
| -rw-r--r-- | src/msg/scrn/d_msg_scrn_base.cpp | 1 | ||||
| -rw-r--r-- | src/msg/scrn/d_msg_scrn_boss.cpp | 1 | ||||
| -rw-r--r-- | src/msg/scrn/d_msg_scrn_explain.cpp | 9 | ||||
| -rw-r--r-- | src/msg/scrn/d_msg_scrn_howl.cpp | 1049 |
7 files changed, 973 insertions, 416 deletions
diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 1cfc970235..0c7cbbda02 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -4,7 +4,9 @@ // #include "d/d_drawlist.h" +#include "d/s/d_s_play.h" #include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DGrafContext.h" #include "JSystem/J3DGraphBase/J3DDrawBuffer.h" #include "SSystem/SComponent/c_bg_s_shdw_draw.h" #include "d/com/d_com_inf_game.h" @@ -351,7 +353,6 @@ extern "C" extern void* __vt__12dDlst_base_c[3]; 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_envHIO[68]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" u8 mBackColor__13mDoGph_gInf_c[4]; extern "C" f32 mSystemFar__14mDoLib_clipper; @@ -430,7 +431,7 @@ extern "C" asm void draw__13dDlst_2DTri_cFv() { #endif /* 80051CF0-80051E5C 04C630 016C+00 1/0 0/0 0/0 .text draw__14dDlst_2DQuad_cFv */ -// regalloc +// vtable #ifdef NONMATCHING void dDlst_2DQuad_c::draw() { GXClearVtxDesc(); @@ -447,10 +448,10 @@ void dDlst_2DQuad_c::draw() { GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0); GXSetCurrentMtx(GX_PNMTX0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3s16(field_0x4, field_0x6, 0); - GXPosition3s16(field_0x8, field_0x6, 0); - GXPosition3s16(field_0x8, field_0xa, 0); - GXPosition3s16(field_0x4, field_0xa, 0); + GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0); + GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0); + GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0); + GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0); GXEnd(); dComIfGp_getCurrentGrafPort()->setup2D(); } @@ -530,7 +531,7 @@ SECTION_SDATA2 static f64 lit_4076 = 4503599627370496.0 /* cast u32 to float */; SECTION_SDATA2 static f64 lit_4079 = 4503601774854144.0 /* cast s32 to float */; /* 80051F98-80052354 04C8D8 03BC+00 1/0 0/0 0/0 .text draw__11dDlst_2DT_cFv */ -// regalloc +// Matches with literals #ifdef NONMATCHING void dDlst_2DT_c::draw() { f32 var5 = field_0xe; @@ -572,16 +573,16 @@ void dDlst_2DT_c::draw() { GXSetClipMode(GX_CLIP_DISABLE); GXSetCurrentMtx(GX_PNMTX0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3s16(field_0x12, field_0x14, 0); + GXPosition3s16((s32)field_0x12, (s32)field_0x14, 0); GXColor1u32(0xffffffff); GXTexCoord2u16(var1, var2); - GXPosition3s16(field_0x16, field_0x14, 0); + GXPosition3s16((s32)field_0x16, (s32)field_0x14, 0); GXColor1u32(0xffffffff); GXTexCoord2u16(var3, var2); - GXPosition3s16(field_0x16, field_0x18, 0); + GXPosition3s16((s32)field_0x16, (s32)field_0x18, 0); GXColor1u32(0xffffffff); GXTexCoord2u16(var3, var4); - GXPosition3s16(field_0x12, field_0x18, 0); + GXPosition3s16((s32)field_0x12, (s32)field_0x18, 0); GXColor1u32(0xffffffff); GXTexCoord2u16(var1, var4); GXEnd(); @@ -1146,7 +1147,7 @@ void dDlst_2DT2_c::init(ResTIMG* i_timg, f32 param_1, f32 param_2, f32 param_3, SECTION_SDATA2 static f32 lit_4360 = 256.0f; /* 80052C58-8005312C 04D598 04D4+00 1/0 0/0 0/0 .text draw__11dDlst_2DM_cFv */ -// regalloc +// Matches with literals #ifdef NONMATCHING void dDlst_2DM_c::draw() { s16 r31 = field_0x22; @@ -1193,16 +1194,16 @@ void dDlst_2DM_c::draw() { GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3s16(field_0x4, field_0x6, 0); + GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0); GXTexCoord2s16(r31, r30); GXTexCoord2s16(r27, r26); - GXPosition3s16(field_0x8, field_0x6, 0); + GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0); GXTexCoord2s16(r29, r30); GXTexCoord2s16(r25, r26); - GXPosition3s16(field_0x8, field_0xa, 0); + GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0); GXTexCoord2s16(r29, r28); GXTexCoord2s16(r25, r24); - GXPosition3s16(field_0x4, field_0xa, 0); + GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0); GXTexCoord2s16(r31, r28); GXTexCoord2s16(r27, r24); GXEnd(); @@ -1221,7 +1222,7 @@ extern "C" asm void draw__11dDlst_2DM_cFv() { #endif /* 8005312C-8005364C 04DA6C 0520+00 1/0 0/0 0/0 .text draw__11dDlst_2Dm_cFv */ -// regalloc +// Matches with literals #ifdef NONMATCHING void dDlst_2Dm_c::draw() { s16 r31 = field_0x48; @@ -1271,16 +1272,16 @@ void dDlst_2Dm_c::draw() { GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); GXSetCurrentMtx(0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3s16(field_0x4, field_0x6, 0); + GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0); GXTexCoord2s16(r31, r30); GXTexCoord2s16(r27, r26); - GXPosition3s16(field_0x8, field_0x6, 0); + GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0); GXTexCoord2s16(r29, r30); GXTexCoord2s16(r25, r26); - GXPosition3s16(field_0x8, field_0xa, 0); + GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0); GXTexCoord2s16(r29, r28); GXTexCoord2s16(r25, r24); - GXPosition3s16(field_0x4, field_0xa, 0); + GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0); GXTexCoord2s16(r31, r28); GXTexCoord2s16(r27, r24); GXEnd(); @@ -1299,7 +1300,7 @@ extern "C" asm void draw__11dDlst_2Dm_cFv() { #endif /* 8005364C-800539DC 04DF8C 0390+00 1/0 0/0 0/0 .text draw__12dDlst_2DMt_cFv */ -// regalloc +// vtable #ifdef NONMATCHING void dDlst_2DMt_c::draw() { GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); @@ -1307,7 +1308,6 @@ void dDlst_2DMt_c::draw() { GXSetVtxDesc(GX_VA_POS, GX_DIRECT); dDlst_2DMt_tex_c* r27 = field_0x8; int r28 = 0; - int r30 = 0; for (int i = 0; i < field_0x4; i++) { if (r27->check()) { if (r27->getCI()) { @@ -1319,12 +1319,11 @@ void dDlst_2DMt_c::draw() { GXSetTevColor(GXTevRegID(GX_TEVREG0 + r28), r27->mColor); GXSetTexCoordGen(GXTexCoordID(r28), GX_TG_MTX2x4, GXTexGenSrc(GX_TG_TEX0 + r28), GX_IDENTITY); GXSetTevOrder(GXTevStageID(r28), GXTexCoordID(r28), GXTexMapID(r28), GX_COLOR_NULL); - GXSetTevColorIn(GXTevStageID(r28), GX_CC_ZERO, GXTevColorArg(GX_CC_C0 + r30), GX_CC_TEXC, r28 ? GX_CC_CPREV : GX_CC_ZERO); + GXSetTevColorIn(GXTevStageID(r28), GX_CC_ZERO, GXTevColorArg(GX_CC_C0 + r28*2), GX_CC_TEXC, r28 ? GX_CC_CPREV : GX_CC_ZERO); GXSetTevColorOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); GXSetTevAlphaIn(GXTevStageID(r28), GX_CA_ZERO, GXTevAlphaArg(GX_CA_A0 + r28), GX_CA_TEXA, r28 ? GX_CA_APREV : GX_CA_ZERO); GXSetTevAlphaOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); r28++; - r30 += 2; if (r28 >= 3) { break; } @@ -1386,14 +1385,13 @@ extern "C" asm void draw__12dDlst_2DMt_cFv() { #endif /* 800539DC-80053A00 04E31C 0024+00 0/0 1/0 0/0 .text getTexture__10J2DPictureCFUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JUTTexture* J2DPicture::getTexture(u8 param_0) const { - nofralloc -#include "asm/d/d_drawlist/getTexture__10J2DPictureCFUc.s" +// Should be inline +JUTTexture* J2DPicture::getTexture(u8 param_0) const { + if (param_0 < 2) { + return mTexture[param_0]; + } + return NULL; } -#pragma pop /* 80053A00-80053A9C 04E340 009C+00 0/0 1/1 0/0 .text __ct__10dDlst_2D_cFP7ResTIMGssssUc */ @@ -1968,7 +1966,7 @@ SECTION_SDATA2 static f32 lit_5275 = -0.5f; /* 80054BD0-80055028 04F510 0458+00 1/1 0/0 0/0 .text * setShadowRealMtx__18dDlst_shadowReal_cFP4cXyzP4cXyzfffP12dKy_tevstr_c */ -// g_envHIO +// Matches with literals #ifdef NONMATCHING 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) { @@ -2150,7 +2148,7 @@ SECTION_SDATA2 static f32 lit_5378 = 16.0f; /* 800553EC-80055684 04FD2C 0298+00 1/1 0/0 0/0 .text * set__20dDlst_shadowSimple_cFP4cXyzffP4cXyzsfP9_GXTexObj */ -// g_envHIO +// Matches with literals #ifdef NONMATCHING void dDlst_shadowSimple_c::set(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3, s16 param_4, f32 param_5, _GXTexObj* param_6) { @@ -2330,7 +2328,7 @@ 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 +// Matches with literals #ifdef NONMATCHING void dDlst_shadowControl_c::draw(Mtx param_0) { j3dSys.reinitGX(); @@ -2343,7 +2341,8 @@ void dDlst_shadowControl_c::draw(Mtx param_0) { GXSetNumTevStages(1); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXLoadPosMtxImm(param_0, GX_PNMTX0); - GXSetChanMatColor(GX_ALPHA0, (GXColor){0, 0, 0, 0x20}); + GXColor matColor = {0, 0, 0, 0x20}; + GXSetChanMatColor(GX_ALPHA0, matColor); clearColor.a = mDoGph_gInf_c::getBackColor().a; GXSetTevColor(GX_TEVREG1, clearColor); @@ -2405,6 +2404,100 @@ SECTION_SDATA2 static f32 lit_5553 = 0.0010000000474974513f; /* 80055C74-80055F1C 0505B4 02A8+00 0/0 1/1 1/1 .text * setReal__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ +// Matches with literals +#ifdef NONMATCHING +int dDlst_shadowControl_c::setReal(u32 param_1, s8 param_2, J3DModel* param_3, cXyz* param_4, + f32 param_5, f32 param_6, dKy_tevstr_c* param_7) { + f32 fVar1; + f32 dVar16 = (param_2 == 0) ? 1.0f : (1.0f - 0.003000000026077032f * param_6); + if (dVar16 <= 0.0f) { + return 0; + } + if (dVar16 > 1.0f) { + dVar16 = 1.0f; + } + cXyz acStack_94; + cMtx_multVec(j3dSys.getViewMtx(), param_4, &acStack_94); + if ((acStack_94.z - param_5) >= 0.0f) { + return 0; + } + f32 dVar17 = acStack_94.z + param_5; + if (dVar17 < -1000.0f) { + f32 fVar1 = 0.0010000000474974513f * + (-1000.0f - dVar17); + if (fVar1 >= 1.0f) { + return 0; + } + dVar16 = (dVar16 * (1.0f - fVar1)); + } + if (param_2 == 0) { + dVar17 = FLT_MAX; + } + dDlst_shadowReal_c* pdVar11; + dDlst_shadowReal_c* pdVar10 = NULL; + dDlst_shadowReal_c* local_98 = field_0x4; + pdVar11 = NULL; + while (local_98 != NULL) { + pdVar11 = local_98; + if (dVar17 > local_98->getCameraZ()) { + pdVar10 = local_98; + local_98 = NULL; + } else { + local_98 = local_98->getZsortNext(); + } + } + dDlst_shadowReal_c* pdVar12; + if (mRealNum >= 8) { + if (pdVar10 == NULL) { + return 0; + } + pdVar12 = field_0x8; + field_0x8 = pdVar12->getZsortPre(); + field_0x8->setZsortNext(NULL); + if (pdVar12 == pdVar10) { + pdVar10 = NULL; + pdVar11 = field_0x8; + } + pdVar12->reset(); + mRealNum--; + } else { + pdVar12 = mReal; + for (int i = 0; i < 8; i++, pdVar12++) { + if (pdVar12->isNoUse()) { + break; + } + } + } + + do { + } while (++mNextID == 0); + u32 rv = pdVar12->set(mNextID, param_3, param_4, param_5, param_6, param_7, dVar17, dVar16); + if (!rv) { + return 0; + } + mRealNum++; + if (pdVar10 == NULL) { + if (pdVar11 == NULL) { + field_0x4 = pdVar12; + } else { + pdVar11->setZsortNext(pdVar12); + pdVar12->setZsortPre(pdVar11); + } + field_0x8 = pdVar12; + } else { + pdVar11 = pdVar10->getZsortPre(); + if (pdVar11 == NULL) { + field_0x4 = pdVar12; + } else { + pdVar11->setZsortNext(pdVar12); + pdVar12->setZsortPre(pdVar11); + } + pdVar12->setZsortNext(pdVar10); + pdVar10->setZsortPre(pdVar12); + } + return rv; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2414,6 +2507,7 @@ asm int dDlst_shadowControl_c::setReal(u32 param_0, s8 param_1, J3DModel* param_ #include "asm/d/d_drawlist/setReal__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c.s" } #pragma pop +#endif /* 80055F1C-80055F84 05085C 0068+00 0/0 1/1 45/45 .text * addReal__21dDlst_shadowControl_cFUlP8J3DModel */ @@ -2566,48 +2660,39 @@ dDlst_shadowSimple_c::dDlst_shadowSimple_c() {} /* ############################################################################################## */ /* 8037A178-8037A1A4 0067D8 002A+02 1/1 0/0 0/0 .rodata l_drawlistSize$5656 */ -SECTION_RODATA static u16 const l_drawlistSize[21] = { +static u16 const l_drawlistSize[21] = { 0x0001, 0x0001, 0x0001, 0x0080, 0x0001, 0x0001, 0x0001, 0x0080, 0x0100, 0x0001, 0x0100, 0x0001, 0x0020, 0x0010, 0x0010, 0x0020, 0x0020, 0x0100, 0x0001, 0x0004, 0x0004, }; -COMPILER_STRIP_GATE(0x8037A178, &l_drawlistSize); /* 8037A1A4-8037A1B0 006804 0009+03 1/1 0/0 0/0 .rodata l_nonSortId$5662 */ -SECTION_RODATA static u8 const l_nonSortId[9] = { +static u8 const l_nonSortId[9] = { 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x09, 0x12, 0x0D, }; -COMPILER_STRIP_GATE(0x8037A1A4, &l_nonSortId); /* 804520C4-804520CC 0006C4 0006+02 1/1 0/0 0/0 .sdata2 l_zSortId$5668 */ -SECTION_SDATA2 static u8 l_zSortId[6] = { +static const u8 l_zSortId[6] = { 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x11, }; /* 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** var_r30 = mDrawBuffers; const u16* var_r29 = l_drawlistSize; for (int i = 0; i < 21; i++) { - u32 temp_r3 = *var_r29; - var_r29++; - - *var_r30 = J3DDrawBuffer__create(temp_r3); + *var_r30 = J3DDrawBuffer__create(*var_r29++); var_r30++; } const u8* var_r5 = l_nonSortId; for (int i = 0; i < 9; i++) { - mDrawBuffers[(u8)*var_r5]->setNonSort(); - var_r5++; + mDrawBuffers[*var_r5++]->setNonSort(); } - u8* var_r5_2 = l_zSortId; + const u8* var_r5_2 = l_zSortId; for (int i = 0; i < 6; i++) { - mDrawBuffers[(u8)*var_r5_2]->setZSort(); - var_r5_2++; + mDrawBuffers[*var_r5_2++]->setZSort(); } setOpaList(); @@ -2619,16 +2704,6 @@ void dDlst_list_c::init() { mShadowControl.init(); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDlst_list_c::init() { - nofralloc -#include "asm/d/d_drawlist/init__12dDlst_list_cFv.s" -} -#pragma pop -#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 @@ -2683,18 +2758,19 @@ 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 +// Matches with literals #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; + f32 fsize = size; + fsize = 9999.0f / fsize; u16 var_r0; - if (temp_f1 + 1.0f < z_value) { - if (10000.0f - temp_f1 > z_value) { - var_r0 = z_value / temp_f1; + if (fsize + 1.0f < z_value) { + if (10000.0f - fsize > z_value) { + var_r0 = z_value / fsize; } else { var_r0 = size - 1; } diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp index e07fd63e27..32b555c52f 100644 --- a/src/d/d_lib.cpp +++ b/src/d/d_lib.cpp @@ -4,30 +4,18 @@ // #include "d/d_lib.h" +#include "d/event/d_event.h" +#include "d/d_stage.h" #include "SSystem/SComponent/c_m3d.h" +#include "JSystem/JKernel/JKRAramArchive.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRDvdRipper.h" #include "dol2asm.h" #include "f_op/f_op_actor.h" #include "m_Do/m_Do_controller_pad.h" // -// Types: -// - -struct dEvt_control_c { - /* 800434D8 */ void searchMapEventData(u8); -}; - -struct JKRExpandSwitch {}; - -struct JKRAramArchive { - /* 802D781C */ void getAramAddress(char const*); -}; - -struct JKRAram { - /* 802D25B4 */ void aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*); -}; - -// // Forward References: // @@ -316,37 +304,49 @@ bool STControl::checkDownTrigger() { } /* 8003261C-80032654 02CF5C 0038+00 0/0 0/0 1/1 .text dLib_getEventSwitchNo__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u8 dLib_getEventSwitchNo(int param_0) { - nofralloc -#include "asm/d/d_lib/dLib_getEventSwitchNo__Fi.s" +u8 dLib_getEventSwitchNo(int param_0) { + dStage_MapEvent_dt_c* mapEvent = dEvt_control_c::searchMapEventData(param_0); + if (mapEvent != NULL) { + return mapEvent->mSwitch; + } + return 0xff; } -#pragma pop /* 80032654-80032738 02CF94 00E4+00 0/0 0/0 8/8 .text * dLib_checkActorInRectangle__FP10fopAc_ac_cP10fopAc_ac_cPC4cXyzPC4cXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOOL dLib_checkActorInRectangle(fopAc_ac_c* param_0, fopAc_ac_c* param_1, cXyz const* param_2, - cXyz const* param_3) { - nofralloc -#include "asm/d/d_lib/dLib_checkActorInRectangle__FP10fopAc_ac_cP10fopAc_ac_cPC4cXyzPC4cXyz.s" +BOOL dLib_checkActorInRectangle(fopAc_ac_c* param_0, fopAc_ac_c* param_1, cXyz const* param_2, + cXyz const* param_3) { + cXyz local_24 = param_0->current.pos - param_1->current.pos; + mDoMtx_stack_c::YrotS(-param_1->current.angle.y); + mDoMtx_stack_c::multVec(&local_24, &local_24); + if (param_2->x <= local_24.x && local_24.x <= param_3->x && param_2->z <= local_24.z && + local_24.z <= param_3->z) + { + return TRUE; + } + return FALSE; } -#pragma pop /* 80032738-80032804 02D078 00CC+00 0/0 4/4 0/0 .text * dLib_getExpandSizeFromAramArchive__FP14JKRAramArchivePCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* param_0, char const* param_1) { - nofralloc -#include "asm/d/d_lib/dLib_getExpandSizeFromAramArchive__FP14JKRAramArchivePCc.s" +u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* i_aramArchive, char const* param_2) { + u8 header[32] __attribute__((aligned(32))); + JUT_ASSERT(1252, i_aramArchive != 0); + u32 address = i_aramArchive->getAramAddress(param_2); + if (address == 0) { + return 0; + } + u8* readAddress = JKRAramToMainRam(address, header, 0x20, EXPAND_SWITCH_UNKNOWN0, 0, 0, 0xffffffff, 0); + JUT_ASSERT(1260, readAddress == header); + JKRArchive::SDIFileEntry* entry = i_aramArchive->findFsResource(param_2, 0); + JUT_ASSERT(1263, entry != 0); + u32 uVar1 = ALIGN_NEXT(JKRDecompExpandSize(header), 32); + u32 uVar5 = ALIGN_NEXT(entry->data_size, 32); + if (uVar1 > uVar5) { + return uVar1; + } + return uVar5; } -#pragma pop /* ############################################################################################## */ /* 80450DD8-80450DDC 0002D8 0004+00 2/2 0/0 0/0 .sbss m_diffTime__11dLib_time_c */ diff --git a/src/d/d_name.cpp b/src/d/d_name.cpp index 903bf23776..acbad3e5f8 100644 --- a/src/d/d_name.cpp +++ b/src/d/d_name.cpp @@ -723,13 +723,9 @@ int dName_c::mojiChange(u8 idx) { mChrInfo[idx].mCharacter = 'ゥ'; } } else { - int c = 'ァ'; - if (mChrInfo[idx].mMojiSet != MOJI_HIRA) { - c = 'ぁ'; - } - bool check = mChrInfo[idx].mCharacter - c == 0 ? 1 : 0; + int c = mChrInfo[idx].mMojiSet != MOJI_HIRA ? 'ぁ' : 'ァ'; - if (check) { + if ((mChrInfo[idx].mCharacter - c) % 2) { --mChrInfo[idx].mCharacter; } else { ++mChrInfo[idx].mCharacter; @@ -737,36 +733,25 @@ int dName_c::mojiChange(u8 idx) { } break; case 1: - int c = 'か'; - if (mChrInfo[idx].mMojiSet != MOJI_HIRA) { - c = 'カ'; + int c = mChrInfo[idx].mMojiSet != MOJI_HIRA ? 'カ' : 'か'; + if ((mChrInfo[idx].mCharacter - c) % 2 == 0) { + mChrInfo[idx].mCharacter += 1; + } else { + mChrInfo[idx].mCharacter -= 1; } - - mChrInfo[idx].mCharacter == c ? mChrInfo[idx].mCharacter++ : mChrInfo[idx].mCharacter--; break; case 2: - int c2 = 'さ'; - if (mChrInfo[idx].mMojiSet != MOJI_HIRA) { - c2 = 'サ'; - } - - mChrInfo[idx].mCharacter == c ? mChrInfo[idx].mCharacter++ : mChrInfo[idx].mCharacter--; + int c2 = mChrInfo[idx].mMojiSet != MOJI_HIRA ? 'サ' : 'さ'; + ((mChrInfo[idx].mCharacter - c) % 2) ? mChrInfo[idx].mCharacter++ : mChrInfo[idx].mCharacter--; break; case 3: case 12: if (mChrInfo[idx].mCharacter != 0x815b) { - int c = 'ぢ'; - if (mChrInfo[idx].mMojiSet != MOJI_HIRA) { - c = 'ヂ'; - } + int c = mChrInfo[idx].mMojiSet != MOJI_HIRA ? 'ヂ': 'ぢ'; if (c < mChrInfo[idx].mCharacter) { - int c2 = 'ぢ'; - if (mChrInfo[idx].mMojiSet != MOJI_HIRA) { - c2 = 'ヂ'; - } - - mChrInfo[idx].mCharacter == c2 ? mChrInfo[idx].mCharacter++ : + int c2 = mChrInfo[idx].mMojiSet != MOJI_HIRA ? 'ヂ' : 'ぢ'; + (mChrInfo[idx].mCharacter - c2) % 2 ? mChrInfo[idx].mCharacter++ : mChrInfo[idx].mCharacter--; } } diff --git a/src/msg/scrn/d_msg_scrn_base.cpp b/src/msg/scrn/d_msg_scrn_base.cpp index c99550b468..2c715e2455 100644 --- a/src/msg/scrn/d_msg_scrn_base.cpp +++ b/src/msg/scrn/d_msg_scrn_base.cpp @@ -1,5 +1,4 @@ // -// Generated By: dol2asm // Translation Unit: msg/scrn/d_msg_scrn_base // diff --git a/src/msg/scrn/d_msg_scrn_boss.cpp b/src/msg/scrn/d_msg_scrn_boss.cpp index ae609921a7..d1f32e4a9b 100644 --- a/src/msg/scrn/d_msg_scrn_boss.cpp +++ b/src/msg/scrn/d_msg_scrn_boss.cpp @@ -1,5 +1,4 @@ // -// Generated By: dol2asm // Translation Unit: msg/scrn/d_msg_scrn_boss // diff --git a/src/msg/scrn/d_msg_scrn_explain.cpp b/src/msg/scrn/d_msg_scrn_explain.cpp index a81ac6363a..b7c317810a 100644 --- a/src/msg/scrn/d_msg_scrn_explain.cpp +++ b/src/msg/scrn/d_msg_scrn_explain.cpp @@ -1,5 +1,4 @@ // -// Generated By: dol2asm // Translation Unit: msg/scrn/d_msg_scrn_explain // @@ -19,14 +18,6 @@ #include "dolphin/types.h" // -// Types: -// - -// -// Forward References: -// - -// // External References: // diff --git a/src/msg/scrn/d_msg_scrn_howl.cpp b/src/msg/scrn/d_msg_scrn_howl.cpp index d91720425c..07b0a93688 100644 --- a/src/msg/scrn/d_msg_scrn_howl.cpp +++ b/src/msg/scrn/d_msg_scrn_howl.cpp @@ -4,151 +4,25 @@ // #include "msg/scrn/d_msg_scrn_howl.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_graphic.h" +#include "d/msg/d_msg_class.h" +#include "d/msg/d_msg_object.h" +#include "d/meter/d_meter2_info.h" +#include "d/meter/d_meter2_draw.h" +#include "d/pane/d_pane_class_alpha.h" +#include "d/pane/d_pane_class.h" +#include "d/a/d_a_alink.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JKernel/JKRArchive.h" +#include "JSystem/JUtility/JUTTexture.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/J2DGraph/J2DGrafContext.h" +#include "JSystem/J2DGraph/J2DScreen.h" +#include "Z2AudioLib/Z2WolfHowlMgr.h" #include "dol2asm.h" // -// Types: -// - -struct mDoCPd_c { - static u8 m_cpadInfo[256]; -}; - -struct dMsgScrnHowl_c { - /* 8024096C */ dMsgScrnHowl_c(); - /* 80241784 */ ~dMsgScrnHowl_c(); - /* 80241A70 */ void exec(); - /* 80241C30 */ void drawSelf(); - /* 80241D58 */ void guide_on_init(); - /* 80241D5C */ void guide_on_proc(); - /* 80241DFC */ void guide_off_init(); - /* 80241E00 */ void guide_off_proc(); - /* 80241E7C */ void guide_stop_init(); - /* 80241E80 */ void guide_stop_proc(); - /* 80241F28 */ void guide_demo_play_init(); - /* 80241F34 */ void guide_demo_play_proc(); - /* 8024202C */ void guide_off_test_init(); - /* 80242030 */ void guide_off_test_proc(); - /* 80242034 */ void fukiScale(f32); - /* 80242038 */ void fukiTrans(f32, f32); - /* 8024205C */ void fukiAlpha(f32); - /* 80242080 */ void isKeyCheck(); - /* 802420D4 */ void resetLine(); - /* 80242198 */ void drawWave(); - /* 802427A8 */ void drawGuide(); - /* 80242FE4 */ void drawGuide2(); - /* 802435BC */ void drawEffect(); - /* 80243838 */ void calcMain(); - /* 8024389C */ void calcWave(); - /* 80243A50 */ void calcGuide(); - /* 80243BE0 */ void moveLineV(bool); - /* 80243DCC */ void moveBaseLength(bool); - /* 80243EEC */ void getOnLineNum(int); - /* 80243F58 */ void addCount(s16); - /* 80243F7C */ void addCountGuide(s16); - /* 80243F94 */ void getNowPlotPitch(f32); - /* 80244108 */ void getPlotPitch(f32); - /* 8024414C */ void calcPitchLevel(); - /* 802441FC */ void initGuideData(); - /* 80244304 */ void getGuideDataSize(); - /* 8024438C */ void getGuideDataType(int); -}; - -struct dMsgScrnBase_c { - /* 80238C40 */ void setSelectRubyString(char*, char*, char*); - /* 80238C44 */ void setSelectString(char*, char*, char*); - /* 80238C48 */ bool selectAnimeMove(u8, u8, bool); - /* 80238C50 */ void selectAnimeInit(u8, u8, f32, u8); - /* 80238C54 */ void arwAnimeMove(); - /* 80238C58 */ void arwAnimeInit(); - /* 80238C5C */ void fukiPosCalc(u8); - /* 80238C60 */ bool isSelect(); - /* 80238C68 */ bool selectAnimeEnd(); - /* 80238C70 */ void dotAnimeMove(); - /* 80238C74 */ void dotAnimeInit(); - /* 8023C0DC */ dMsgScrnBase_c(); - /* 8023C124 */ ~dMsgScrnBase_c(); - /* 8023C16C */ void init(); - /* 8023C234 */ void multiDraw(); - /* 8023C274 */ void draw(); - /* 8023C4F4 */ void fontAlpha(f32); -}; - -struct JMSMesgEntry_c {}; - -struct dMeter2Info_c { - /* 8021C544 */ void getStringKanji(u32, char*, JMSMesgEntry_c*); -}; - -struct JUtility { - struct TColor {}; -}; - -struct dMeter2Draw_c { - /* 802140DC */ void drawPikari(f32, f32, f32*, f32, JUtility::TColor, JUtility::TColor, - JUtility::TColor, JUtility::TColor, f32, u8); -}; - -struct Z2WolfHowlMgr { - /* 802CACCC */ void getNowInputValue(); - /* 802CB320 */ void getCorrectLine(u8); - /* 802CB370 */ void getCorrectLineNum(); - /* 802CB650 */ void getOnLineNum(); - /* 802CBA88 */ void startGuideMelody(bool); -}; - -struct ResTIMG {}; - -struct JKRExpHeap {}; - -struct JKRArchive {}; - -struct JGeometry { - template <typename A1> - struct TBox2 {}; - /* TBox2<f32> */ - struct TBox2__template0 {}; -}; - -struct J2DTextBox { - /* 80300658 */ void getStringPtr() const; - /* 8030074C */ void setString(s16, char const*, ...); -}; - -struct J2DScreen { - /* 802F8498 */ J2DScreen(); - /* 802F8648 */ void setPriority(char const*, u32, JKRArchive*); -}; - -struct J2DPicture { - /* 802FC708 */ J2DPicture(ResTIMG const*); -}; - -struct J2DPane { - /* 802F7100 */ void getBounds(); -}; - -struct J2DGrafContext { - /* 802E90C0 */ void scissor(JGeometry::TBox2<f32> const&); -}; - -struct CPaneMgrAlpha { - /* 802557D0 */ void setAlphaRate(f32); - /* 80255828 */ void getAlphaRate(); -}; - -struct CPaneMgr { - /* 80253984 */ CPaneMgr(J2DScreen*, u64, u8, JKRExpHeap*); - /* 80253930 */ CPaneMgr(); - /* 80253A18 */ ~CPaneMgr(); - /* 802542E8 */ void getGlobalPosX(); - /* 80254364 */ void getGlobalPosY(); - /* 802545B0 */ void paneTrans(f32, f32); - /* 80254C90 */ void getGlobalVtx(J2DPane*, f32 (*)[3][4], u8, bool, s16); - /* 80254EBC */ void getGlobalVtxCenter(J2DPane*, bool, s16); -}; - -// // Forward References: // @@ -243,7 +117,6 @@ extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); extern "C" void __ct__10J2DPictureFPC7ResTIMG(); extern "C" void getStringPtr__10J2DTextBoxCFv(); extern "C" void setString__10J2DTextBoxFsPCce(); -extern "C" void GXGetScissor(); extern "C" void __ptmf_scall(); extern "C" void _savegpr_21(); extern "C" void _savegpr_23(); @@ -260,9 +133,8 @@ extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" u8 m_cpadInfo__8mDoCPd_c[256]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_meter2_info[248]; -extern "C" extern u8 g_MsgObject_HIO_c[1040]; + +extern dMsgObject_HIO_c g_MsgObject_HIO_c; // // Declarations: @@ -287,6 +159,18 @@ SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +typedef void (dMsgScrnHowl_c::*dMsgScrnHowl_cFunc)(); + +#ifdef NONMATCHING +static dMsgScrnHowl_cFunc init_proc[5] = { + &dMsgScrnHowl_c::guide_on_init, + &dMsgScrnHowl_c::guide_off_init, + &dMsgScrnHowl_c::guide_stop_init, + &dMsgScrnHowl_c::guide_demo_play_init, + &dMsgScrnHowl_c::guide_off_test_init, +}; +#else + /* 803C0FDC-803C0FE8 -00001 000C+00 0/1 0/0 0/0 .data @4173 */ #pragma push #pragma force_active on @@ -345,6 +229,17 @@ SECTION_DATA static u8 init_proc[60] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +#endif + +#ifdef NONMATCHING +static dMsgScrnHowl_cFunc process[5] = { + &dMsgScrnHowl_c::guide_on_proc, + &dMsgScrnHowl_c::guide_off_proc, + &dMsgScrnHowl_c::guide_stop_proc, + &dMsgScrnHowl_c::guide_demo_play_proc, + &dMsgScrnHowl_c::guide_off_test_proc, +}; +#else /* 803C1054-803C1060 -00001 000C+00 0/1 0/0 0/0 .data @4178 */ #pragma push #pragma force_active on @@ -463,46 +358,39 @@ SECTION_DATA static u8 process[60 + 4 /* padding */] = { 0x00, 0x00, }; +#endif /* 803C10D0-803C10E8 01E1F0 0018+00 0/1 0/0 0/0 .data ylinen_tag$4210 */ #pragma push #pragma force_active on -SECTION_DATA static u8 ylinen_tag[24] = { - 0x79, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x30, 0x79, 0x6C, 0x69, 0x6E, - 0x65, 0x6E, 0x30, 0x32, 0x79, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x34, +SECTION_DATA static u64 ylinen_tag[3] = { + 'ylinen00', + 'ylinen02', + 'ylinen04', }; #pragma pop /* 803C10E8-803C1120 01E208 0038+00 0/1 0/0 0/0 .data tlinen_tag$4211 */ #pragma push #pragma force_active on -SECTION_DATA static u8 tlinen_tag[56] = { - 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x30, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x6E, - 0x30, 0x31, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x32, 0x74, 0x6C, 0x69, 0x6E, - 0x65, 0x6E, 0x30, 0x33, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x34, 0x74, 0x6C, - 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x35, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x36, +SECTION_DATA static u64 tlinen_tag[7] = { + 'tlinen00', 'tlinen01', 'tlinen02', 'tlinen03', 'tlinen04', 'tlinen05', 'tlinen06', }; #pragma pop /* 803C1120-803C1158 01E240 0038+00 0/0 0/0 0/0 .data tline_tag$4212 */ #pragma push #pragma force_active on -SECTION_DATA static u8 tline_tag[56] = { - 0x00, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x30, 0x30, 0x00, 0x74, 0x6C, 0x69, 0x6E, 0x65, - 0x30, 0x31, 0x00, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x30, 0x32, 0x00, 0x74, 0x6C, 0x69, - 0x6E, 0x65, 0x30, 0x33, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x6E, 0x30, 0x34, 0x00, 0x74, - 0x6C, 0x69, 0x6E, 0x65, 0x30, 0x35, 0x00, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x30, 0x36, +SECTION_DATA static u64 tline_tag[7] = { + 'tline00', 'tline01', 'tline02', 'tline03', 'tlinen04', 'tline05', 'tline06', }; #pragma pop /* 803C1158-803C1190 01E278 0038+00 0/0 0/0 0/0 .data tlines_tag$4213 */ #pragma push #pragma force_active on -SECTION_DATA static u8 tlines_tag[56] = { - 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x30, 0x30, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x73, - 0x30, 0x31, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x30, 0x32, 0x74, 0x6C, 0x69, 0x6E, - 0x65, 0x73, 0x30, 0x33, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x30, 0x34, 0x74, 0x6C, - 0x69, 0x6E, 0x65, 0x73, 0x30, 0x35, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x30, 0x36, +SECTION_DATA static u64 tlines_tag[7] = { + 'tlines00', 'tlines01', 'tlines02', 'tlines03', 'tlines04', 'tlines05', 'tlines06', }; #pragma pop @@ -560,6 +448,168 @@ SECTION_SDATA2 static f32 lit_4431[1 + 1 /* padding */] = { SECTION_SDATA2 static f64 lit_4434 = 4503601774854144.0 /* cast s32 to float */; /* 8024096C-80241784 23B2AC 0E18+00 0/0 1/1 0/0 .text __ct__14dMsgScrnHowl_cFv */ +// Matches with literals (Maybe minor issue with tag arrays) +#ifdef NONMATCHING +dMsgScrnHowl_c::dMsgScrnHowl_c() { + init(); + mpScreen = new J2DScreen(); + JUT_ASSERT(61, mpScreen != 0); + bool fg = mpScreen->setPriority("zelda_wolf_howl.blo", 0x20000, dComIfGp_getMsgArchive(5)); + JUT_ASSERT(73, fg != false); + dPaneClass_showNullPane(mpScreen); + mpScreen->search('line00')->hide(); + mpPmp_c = new CPaneMgr(mpScreen, 'n_all', 3, NULL); + JUT_ASSERT(79, mpPmP_c != 0); + mpScreen->search('ag_n')->hide(); + field_0x1994 = 0.0f; + field_0x1998 = 0.0f; + mpScreen->search('wi_btn_n')->hide(); + mpButtonIcon[0] = new CPaneMgr(mpScreen, 'cbtn_n', 2, NULL); + JUT_ASSERT(91, mpButtonIcon[0] != 0); + mpButtonText[0] = new CPaneMgr(mpScreen, 'g_ltxt_n', 2, NULL); + JUT_ASSERT(93, mpButtonText[0] != 0); + mpButtonIcon[1] = new CPaneMgr(mpScreen, 'abt_n', 2, NULL); + JUT_ASSERT(96, mpButtonIcon[1] != 0); + mpButtonText[1] = new CPaneMgr(mpScreen, 'gr_txt_n', 2, NULL); + JUT_ASSERT(98, mpButtonText[1] != 0); + J2DTextBox* piStack_19c = (J2DTextBox*)mpScreen->search('fgl_info'); + J2DTextBox* piStack_1a0 = (J2DTextBox*)mpScreen->search('fgr_info'); + mpScreen->search('g_l_info')->hide(); + mpScreen->search('g_r_info')->hide(); + piStack_19c->setString(0x40, ""); + piStack_19c->setFont(mDoExt_getMesgFont()); + dMeter2Info_getStringKanji(0x4d4, piStack_19c->getStringPtr(), NULL); + piStack_1a0->setString(0x40, ""); + piStack_1a0->setFont(mDoExt_getMesgFont()); + dMeter2Info_getStringKanji(0x4d5, piStack_1a0->getStringPtr(), NULL); + field_0x2195 = 0; + for (int i = 0; i < 0x300; i++) { + field_0x180[i] = 0.0f; + field_0xd80[i] = 0.0f; + field_0x2198[i] = 0; + field_0x2498[i] = 0; + field_0x1b14[i] = 0; + } + for (int i = 0; i < 3; i++) { + field_0x1b08[i] = 0.0f; + } + field_0x2114 = 0; + field_0x2118 = 0; + field_0x211c = 0; + field_0x2120 = 0; + for (int i = 0; i < 30; i++) { + field_0x213a[i] = 0; + field_0x2158[i] = 0; + field_0x2176[i] = 0; + field_0x19a0[i] = 0.0f; + field_0x1a18[i] = 0.0f; + field_0x1a90[i] = 0.0f; + } + field_0x279b = 0x0; + field_0x2124 = 0; + field_0x2128 = 0; + mPlotTime = 0; + field_0x212c = 0; + field_0x212e = 0; + field_0x2126 = 0; + field_0x2130 = 0; + field_0x2132 = 0; + field_0x17c = 1; + field_0x279a = 0; + field_0x199c = 0.0f; + s16 howl = daAlink_getAlinkActorClass()->checkWindStoneHowl(); + if (howl != 0) { + field_0x2798 = 3; + } else { + field_0x2798 = 0; + } + field_0x2799 = field_0x2798; + (this->*init_proc[field_0x2798])(); + field_0x1980 = g_MsgObject_HIO_c.mHowlHIO.mDrawInterval; + field_0x2136 = (350.0f / field_0x1980); + field_0x2138 = 0; + field_0x1984 = 255.0f / field_0x2136; + mpABase = new CPaneMgr(mpScreen, 'a_base', 0, NULL); + JUT_ASSERT(218, mpABase != 0); + mpLineAll = new CPaneMgr(mpScreen, 'line_all', 0, NULL); + JUT_ASSERT(221, mpLineAll != 0); + f32 in_f31; + for (int i = 0; i < 7; i++) { + J2DPane* piStack_1b4 = mpScreen->search(tlinen_tag[i]); + if (i == 0) { + CPaneMgr aCStack_b0; + Mtx mtx1; + Vec fStack_120 = mpABase->getGlobalVtx(&mtx1, 0, true, 0); + Vec fStack_144 = aCStack_b0.getGlobalVtxCenter(piStack_1b4, true, 0); + in_f31 = fStack_120.x - fStack_144.x; + } + f32 f29 = piStack_1b4->getBounds().i.y; + piStack_1b4->move(g_MsgObject_HIO_c.mHowlHIO.mInputStartPoint + + ((in_f31 + piStack_1b4->getBounds().i.x) - 3.0f), + f29); + } + for (int i = 0; i < 3; i++) { + mpLineH[i] = new CPaneMgr(mpScreen, ylinen_tag[i], 0, NULL); + JUT_ASSERT(242, mpLineH[i] != 0); + } + for (int i = 0; i < 7; i++) { + mpLineV[i] = new CPaneMgr(mpScreen, tline_tag[i], 2, NULL); + JUT_ASSERT(247, mpLineV[i] != 0); + } + Mtx mtx2; + field_0x128 = mpLineH[0]->getGlobalVtx(&mtx2, 0, true, 0); + field_0x134 = mpLineH[0]->getGlobalVtx(&mtx2, 3, true, 0); + field_0x140 = mpLineH[2]->getGlobalVtx(&mtx2, 3, true, 0); + field_0x14c = mpLineV[0]->getGlobalVtx(&mtx2, 0, true, 0); + field_0x158 = mpLineV[0]->getGlobalVtx(&mtx2, 3, true, 0); + field_0x164 = mpLineV[1]->getGlobalVtx(&mtx2, 0, true, 0); + field_0x170 = mpLineV[1]->getGlobalVtx(&mtx2, 3, true, 0); + field_0x279c = 0.0f; + field_0x27a0 = 0.0f; + field_0x27a4 = 1.0f; + field_0x27a8 = 0.0f; + ResTIMG const* res = (ResTIMG const*) dComIfGp_getMsgArchive(5)->getResource('TIMG', "tt_ginnouroko_s3tc.bti"); + mpDot = new J2DPicture(res); + JUT_ASSERT(275, mpDot != 0); + mpDot->setWhite(JUtility::TColor(0xff, 0xff, 0x71, 0xff)); + res = (ResTIMG const*)dComIfGp_getMsgArchive(5)->getResource('TIMG', "tt_black_32.bti"); + mpGuideDot = new J2DPicture(res); + JUT_ASSERT(280, mpGuideDot != 0); + mpGuideDot->setBlackWhite(((J2DPicture*)mpScreen->search('line00'))->getBlack(), ((J2DPicture*)mpScreen->search('line00'))->getWhite()); + res = (ResTIMG const*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_iastarRR.bti"); + mpTopBall = new J2DPicture(res); + JUT_ASSERT(287, mpTopBall != 0); + mpTopBall->setBlackWhite(g_MsgObject_HIO_c.mHowlHIO.mDotBlack, g_MsgObject_HIO_c.mHowlHIO.mDotWhite); + + ; + for (int i = 0; i < 5; i++) { + mpTopBallTail[i] = new J2DPicture(res); + JUT_ASSERT(292, mpTopBallTail[i] != 0); + mpTopBallTail[i]->setBlackWhite(g_MsgObject_HIO_c.mHowlHIO.mDotBlack, g_MsgObject_HIO_c.mHowlHIO.mDotWhite); + } + field_0x2134 = 0; + field_0x1988 = mpScreen->search('line00')->getWidth(); + field_0x198c = mpScreen->search('line00')->getHeight(); + field_0x2194 = daAlink_getAlinkActorClass()->getCorrectCurveID(); + mCorrectLineMax = 0; + field_0x2197 = 0; + res = (ResTIMG const*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti"); + mpWaveTex = new J2DPicture(res); + JUT_ASSERT(307, mpWaveTex != 0); + mpWaveTex->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(255, 200, 0, 255)); + mpWaveTex->setCornerColor( + JUtility::TColor(128, 128, 128, 0), JUtility::TColor(255, 255, 255, 255), + JUtility::TColor(128, 128, 128, 0), JUtility::TColor(255, 255, 255, 255)); + mpWaveTex->setAlpha(0); + if (field_0x2194 >= 0) { + mCorrectLineMax = daAlink_getAlinkActorClass()->getCorrectLineNum(); + JUT_ASSERT(322, mCorrectLineMax < LINE_MAX); + field_0x2197 = LINE_MAX; + field_0x2138 = getGuideDataSize(); + } + resetLine(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -568,16 +618,48 @@ asm dMsgScrnHowl_c::dMsgScrnHowl_c() { #include "asm/msg/scrn/d_msg_scrn_howl/__ct__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 80241784-80241A70 23C0C4 02EC+00 1/0 0/0 0/0 .text __dt__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMsgScrnHowl_c::~dMsgScrnHowl_c() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/__dt__14dMsgScrnHowl_cFv.s" +dMsgScrnHowl_c::~dMsgScrnHowl_c() { + delete mpScreen; + mpScreen = NULL; + + delete mpPmp_c; + mpPmp_c = NULL; + + for (int i = 0; i < 2; i++) { + delete mpButtonIcon[i]; + mpButtonIcon[i] = NULL; + delete mpButtonText[i]; + mpButtonText[i] = NULL; + } + for (int i = 0; i < 3; i++) { + delete mpLineH[i]; + mpLineH[i] = NULL; + } + for (int i = 0; i < 7; i++) { + delete mpLineV[i]; + mpLineV[i] = NULL; + } + delete mpABase; + mpABase = NULL; + delete mpLineAll; + mpLineAll = NULL; + delete mpDot; + mpDot = NULL; + delete mpGuideDot; + mpGuideDot = NULL; + delete mpTopBall; + mpTopBall = NULL; + for (int i = 0; i < 5; i++) { + delete mpTopBallTail[i]; + mpTopBallTail[i] = NULL; + } + delete mpWaveTex; + mpWaveTex = NULL; + dComIfGp_getMsgArchive(5)->removeResourceAll();; } -#pragma pop /* ############################################################################################## */ /* 80454C70-80454C74 003270 0004+00 7/7 0/0 0/0 .sdata2 @4561 */ @@ -594,6 +676,48 @@ SECTION_SDATA2 static f32 lit_4563[1 + 1 /* padding */] = { }; /* 80241A70-80241C30 23C3B0 01C0+00 1/0 0/0 0/0 .text exec__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::exec() { + field_0x2799 = field_0x2798; + (this->*process[field_0x2798])(); + for (int i = 0; i < 0x300; i++) { + if (field_0x1b14[i] > 0) { + field_0x1b14[i]--; + } + } + if (field_0x2799 != field_0x2798) { + (this->*init_proc[field_0x2798])(); + } + + f32 dVar10 = mpPmp_c->getAlphaRate(); + f32 fVar1; + f32 fVar2; + if (field_0x2798 == 3) { + fVar1 = 0.5f; + fVar2 = 0.0f; + } else { + fVar1 = 1.0f; + fVar2 = 1.0f; + } + if (field_0x1994 != fVar1) { + cLib_addCalc2(&field_0x1994, fVar1, 0.2f, 1.0f); + if (fabsf(field_0x1994 - fVar1) < 0.1f) { + field_0x1994 = fVar1; + } + } + if (field_0x1998 != fVar2) { + cLib_addCalc2(&field_0x1998, fVar2, 0.2f, 1.0f); + if (fabsf(field_0x1998 - fVar2) < 0.1f) { + field_0x1998 = fVar2; + } + } + mpButtonIcon[0]->setAlphaRate(field_0x1994 * dVar10); + mpButtonIcon[1]->setAlphaRate(field_0x1994 * dVar10); + mpButtonText[0]->setAlphaRate(field_0x1998 * dVar10); + mpButtonText[1]->setAlphaRate(field_0x1998 * dVar10); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -602,12 +726,32 @@ asm void dMsgScrnHowl_c::exec() { #include "asm/msg/scrn/d_msg_scrn_howl/exec__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80454C80-80454C88 003280 0008+00 6/6 0/0 0/0 .sdata2 @4587 */ SECTION_SDATA2 static f64 lit_4587 = 4503599627370496.0 /* cast u32 to float */; /* 80241C30-80241D58 23C570 0128+00 1/0 0/0 0/0 .text drawSelf__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::drawSelf() { + J2DGrafContext* grafContext = dComIfGp_getCurrentGrafPort(); + GXGetScissor(&field_0x2114, &field_0x2118, &field_0x211c, &field_0x2120); + if (field_0x2138 != 0) { + if ((field_0x2798 == 0) || field_0x2798 == 4) { + drawGuide(); + } else { + drawGuide2(); + } + } + if (field_0x2798 != 3) { + drawWave(); + } + grafContext->scissor(field_0x2114, field_0x2118, field_0x211c, field_0x2120); + grafContext->setScissor(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -616,6 +760,7 @@ asm void dMsgScrnHowl_c::drawSelf() { #include "asm/msg/scrn/d_msg_scrn_howl/drawSelf__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 80241D58-80241D5C 23C698 0004+00 1/0 0/0 0/0 .text guide_on_init__14dMsgScrnHowl_cFv */ @@ -625,14 +770,22 @@ void dMsgScrnHowl_c::guide_on_init() { /* 80241D5C-80241DFC 23C69C 00A0+00 1/0 0/0 0/0 .text guide_on_proc__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::guide_on_proc() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/guide_on_proc__14dMsgScrnHowl_cFv.s" +void dMsgScrnHowl_c::guide_on_proc() { + if (daAlink_getAlinkActorClass()->getWolfHowlTimer() == 0) { + if (field_0x2195 == 1) { + field_0x2195 = 2; + } + if (mDoCPd_c::getTrigB(0) != 0 && field_0x2195 == 2) { + resetLine(); + } + } else { + if (field_0x2195 == 2) { + resetLine(); + } + field_0x2195 = 1; + calcMain(); + } } -#pragma pop /* 80241DFC-80241E00 23C73C 0004+00 1/0 0/0 0/0 .text guide_off_init__14dMsgScrnHowl_cFv */ @@ -642,14 +795,16 @@ void dMsgScrnHowl_c::guide_off_init() { /* 80241E00-80241E7C 23C740 007C+00 1/0 0/0 0/0 .text guide_off_proc__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::guide_off_proc() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/guide_off_proc__14dMsgScrnHowl_cFv.s" +void dMsgScrnHowl_c::guide_off_proc() { + calcMain(); + if (daAlink_getAlinkActorClass()->getWolfHowlMgrP()->getReleaseTimer() != 30) { + if (daAlink_getAlinkActorClass()->getWolfHowlTimer() != 0) { + return; + } + } + field_0x2798 = 2; + resetLine(); } -#pragma pop /* 80241E7C-80241E80 23C7BC 0004+00 1/0 0/0 0/0 .text guide_stop_init__14dMsgScrnHowl_cFv */ @@ -659,34 +814,50 @@ void dMsgScrnHowl_c::guide_stop_init() { /* 80241E80-80241F28 23C7C0 00A8+00 1/0 0/0 0/0 .text guide_stop_proc__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::guide_stop_proc() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/guide_stop_proc__14dMsgScrnHowl_cFv.s" +void dMsgScrnHowl_c::guide_stop_proc() { + field_0x180[field_0x2124] = + getNowPlotPitch(-daAlink_getAlinkActorClass()->getWolfHowlMgrP()->getNowInputValue()); + if (mDoCPd_c::getHoldA(0) != 0) { + resetLine(); + field_0x2798 = 1; + } else { + if (mDoCPd_c::getTrigB(0) != 0) { + resetLine(); + field_0x2798 = 3; + } + } } -#pragma pop /* 80241F28-80241F34 23C868 000C+00 1/0 0/0 0/0 .text guide_demo_play_init__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::guide_demo_play_init() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/guide_demo_play_init__14dMsgScrnHowl_cFv.s" +void dMsgScrnHowl_c::guide_demo_play_init() { + field_0x279a = 0; } -#pragma pop /* 80241F34-8024202C 23C874 00F8+00 1/0 0/0 0/0 .text guide_demo_play_proc__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::guide_demo_play_proc() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/guide_demo_play_proc__14dMsgScrnHowl_cFv.s" +void dMsgScrnHowl_c::guide_demo_play_proc() { + if (mDoCPd_c::getHoldA(0) != 0) { + if (daAlink_getAlinkActorClass()->getWolfHowlTimer() != 0) { + resetLine(); + field_0x2798 = 1; + } + } + calcMain(); + bool startGuideMelody = false; + if (mPlotTime == 30) { + startGuideMelody = true; + } + field_0x17c = daAlink_getAlinkActorClass()->getWolfHowlMgrP()->startGuideMelody(startGuideMelody); + if (mPlotTime >= 30) { + if (field_0x17c == 0) { + if (field_0x279a != 0) { + resetLine(); + field_0x279a = 0; + } + } else if (field_0x279a == 0) { + field_0x279a = 1; + } + } } -#pragma pop /* 8024202C-80242030 23C96C 0004+00 1/0 0/0 0/0 .text guide_off_test_init__14dMsgScrnHowl_cFv */ void dMsgScrnHowl_c::guide_off_test_init() { @@ -704,36 +875,53 @@ void dMsgScrnHowl_c::fukiScale(f32 param_0) { } /* 80242038-8024205C 23C978 0024+00 1/0 0/0 0/0 .text fukiTrans__14dMsgScrnHowl_cFff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::fukiTrans(f32 param_0, f32 param_1) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/fukiTrans__14dMsgScrnHowl_cFff.s" +void dMsgScrnHowl_c::fukiTrans(f32 param_0, f32 param_1) { + mpPmp_c->paneTrans(param_0, param_1); } -#pragma pop /* 8024205C-80242080 23C99C 0024+00 1/0 0/0 0/0 .text fukiAlpha__14dMsgScrnHowl_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::fukiAlpha(f32 param_0) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/fukiAlpha__14dMsgScrnHowl_cFf.s" +void dMsgScrnHowl_c::fukiAlpha(f32 param_0) { + mpPmp_c->setAlphaRate(param_0); } -#pragma pop /* 80242080-802420D4 23C9C0 0054+00 0/0 1/1 0/0 .text isKeyCheck__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::isKeyCheck() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/isKeyCheck__14dMsgScrnHowl_cFv.s" +bool dMsgScrnHowl_c::isKeyCheck() { + if (daAlink_getAlinkActorClass()->getWolfHowlTimer() == 0 && field_0x2799 == field_0x2798 && + (field_0x2798 == 3 || (field_0x2798 == 0 && field_0x2195 == 0))) + { + return true; + } + return false; } -#pragma pop /* 802420D4-80242198 23CA14 00C4+00 5/5 0/0 0/0 .text resetLine__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::resetLine() { + field_0x2195 = 0; + field_0x2128 = 0; + mPlotTime = 0; + field_0x212c = 0; + field_0x212e = 0; + field_0x2124 = 0; + field_0x2130 = 0; + field_0x2126 = 0; + field_0x279b = 0; + for (int i = 0; i < 30; i++) { + field_0x2158[i] = 0; + field_0x2176[i] = 0; + field_0x19a0[i] = 0.0f; + field_0x1a18[i] = 0.0f; + field_0x1a90[i] = 0.0f; + } + if (field_0x2138 != 0) { + initGuideData(); + } + moveLineV(true); + moveBaseLength(true); + field_0x2138 = getGuideDataSize(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -742,6 +930,7 @@ asm void dMsgScrnHowl_c::resetLine() { #include "asm/msg/scrn/d_msg_scrn_howl/resetLine__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80454C88-80454C8C 003288 0004+00 2/2 0/0 0/0 .sdata2 @4824 */ @@ -763,6 +952,127 @@ SECTION_SDATA2 static f32 lit_4828 = 5.0f; SECTION_SDATA2 static f32 lit_4829 = 15.0f; /* 80242198-802427A8 23CAD8 0610+00 1/1 0/0 0/0 .text drawWave__14dMsgScrnHowl_cFv */ +// float regallocs +#ifdef NONMATCHING +void dMsgScrnHowl_c::drawWave() { + J2DGrafContext* grafContext = dComIfGp_getCurrentGrafPort(); + f32 local_e0 = mpLineH[0]->getGlobalPosX(); + s16 sVar14 = field_0x2124; + f32 local_60 = 0.0f; + f32 local_64 = 0.0f; + f32 local_68 = 0.0f; + f32 f26 = local_e0; + f32 local_e4 = field_0x180[sVar14]; + s32 uVar6 = g_MsgObject_HIO_c.mHowlHIO.mWaveformDotLen; + s32 local_80 = field_0x2128 - 1 - uVar6; + f32 fVar4 = (30 - daAlink_getAlinkActorClass()->getWolfHowlMgrP()->getReleaseTimer()) / 30.0f; + if (local_80 < 0) { + local_80 = 0; + } + s32 local_94 = 0; + Vec fVar12 = field_0x128; + Vec this_02 = field_0x140; + f32 fVar1 = mDoGph_gInf_c::getWidthF() / 608.0f; + f32 fVar2 = mDoGph_gInf_c::getHeightF() / 448.0f; + f32 dVar16 = mDoGph_gInf_c::getMinXF(); + grafContext->scissor( + (fVar12.x - dVar16) / fVar1 - 16.0f, + (fVar12.y / fVar2) / fVar2 - 16.0f, + 32.0f + (this_02.x - fVar12.x) / fVar1, + 32.0f + ((this_02.y - fVar12.y) + 2.0f) + ); + grafContext->setScissor(); + bool bVar5 = true; + if (field_0x2798 == 0) { + if (mPlotTime != field_0x212c) { + field_0x212c = mPlotTime; + } else { + bVar5 = false; + } + } + if (bVar5) { + for (int iVar10 = 0; iVar10 < field_0x2128 - 1; iVar10++) { + f32 local_54 = local_e0; + f32 local_c8 = field_0x180[sVar14]; + s32 sVar3 = field_0x1b14[sVar14]; + local_e0 += field_0x1980; + local_68 += field_0x1984; + if (local_68 > 255.0f) { + local_68 = 255.0f; + } + sVar14 = addCount(sVar14); + f32 fVar2 = field_0x180[sVar14]; + s16 temp_r4 = field_0x1b14[sVar14]; + if (iVar10 == field_0x2128 - 2) { + local_60 = local_e0; + local_64 = fVar2; + local_94 = temp_r4; + } + if (mPlotTime >= 30 && iVar10 >= local_80 && iVar10 >= 30) { + f32 local_b0 = 0.0f; + if (sVar3 > 0) { + local_b0 = (f32)sVar3 / (f32)uVar6; + } + if (fVar4 > 0.0f && local_b0 > 0.0f) { + f32 fVar7 = 0.1f + 0.2f * local_b0; + f32 fVar8 = 32.0f * g_MsgObject_HIO_c.mHowlHIO.mDotScale * fVar7; + f32 fVar9 = 32.0f * g_MsgObject_HIO_c.mHowlHIO.mDotScale * fVar7; + u8 cVar9 = 255.0f * local_b0 * fVar4; + if (cVar9 != 0) { + f32 local_c4 = local_54; + f32 dVar16 = 5.0f; + fVar2 = local_e0 - local_54; + f32 f19 = fVar2 / 5.0f; + f32 f17 = (fVar2 - local_c8) / 5.0f; + for (int iVar15 = 0; iVar15 < 5; iVar15++) { + mpTopBallTail[iVar15]->setAlpha(cVar9); + mpTopBallTail[iVar15]->draw(local_c4 - fVar8 / 2, + local_c8 - fVar9 / 2, fVar8, fVar9, + false, false, false); + local_c4 += f19; + local_c8 += f17; + } + } + } + } + local_54 = fVar1; + } + if (fVar4 > 0.0f) { + f32 fVar1 = 32.0f * g_MsgObject_HIO_c.mHowlHIO.mDotScale; + f32 fVar2 = 32.0f * g_MsgObject_HIO_c.mHowlHIO.mDotScale; + f32 local_dc = 0.0f; + f32 f17; + f32 f18; + if (field_0x2128 != 0) { + if (local_94 > 0) { + local_dc = (f32)local_94 / (f32)uVar6; + } + f17 = local_60; + f18 = local_64; + } else { + field_0x2134++; + if (field_0x2134 > 30) { + field_0x2134 = 0; + } + if (field_0x2134 < 15) { + local_dc = field_0x2134 / 15.0f; + } else { + local_dc = (30.0f - field_0x2134) / 15.0f; + } + f17 = f26; + f18 = local_e4; + } + if (local_dc > 0.0f) { + mpTopBall->setAlpha(255.0f * local_dc * fVar4); + mpTopBall->draw( + f17 - fVar1 / 2, + f18 - fVar2 / 2, fVar1, + fVar2, false, false, false); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -771,6 +1081,7 @@ asm void dMsgScrnHowl_c::drawWave() { #include "asm/msg/scrn/d_msg_scrn_howl/drawWave__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 802427A8-80242FE4 23D0E8 083C+00 1/1 0/0 0/0 .text drawGuide__14dMsgScrnHowl_cFv */ #pragma push @@ -814,16 +1125,54 @@ asm void dMsgScrnHowl_c::drawEffect() { #pragma pop /* 80243838-8024389C 23E178 0064+00 3/3 0/0 0/0 .text calcMain__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::calcMain() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/calcMain__14dMsgScrnHowl_cFv.s" +void dMsgScrnHowl_c::calcMain() { + if (mPlotTime < field_0x2138 + 380) { + mPlotTime++; + } else { + field_0x212c--; + } + calcWave(); + calcGuide(); } -#pragma pop /* 8024389C-80243A50 23E1DC 01B4+00 1/1 0/0 0/0 .text calcWave__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::calcWave() { + if (field_0x2128 < field_0x2136) { + field_0x2132 = field_0x2128; + field_0x2128++; + moveBaseLength(true); + } else { + if (field_0x212e < field_0x2138 + 380) { + field_0x212e++; + } + field_0x2132 = field_0x2124; + field_0x2124 = addCount(field_0x2124); + moveLineV(false); + moveBaseLength(false); + for (int iVar5 = 0; iVar5 < 30; iVar5++) { + if (field_0x1a90[iVar5] > 0.0f) { + field_0x19a0[iVar5] -= field_0x1980; + } + } + } + if (field_0x2798 != 3) { + s8 i_onNum = daAlink_getAlinkActorClass()->getOnLineNum(); + if (i_onNum >= 0 && mPlotTime >= 30 && daAlink_getAlinkActorClass()->getWolfHowlTimer() != 0) { + JUT_ASSERT(1439, i_onNum < LINE_MAX); + JUT_ASSERT(1439, mPlotTime <= PLOT_BUFFER_MAX_e); + field_0x2158[i_onNum]++; + field_0x2498[mPlotTime] = 1; + } else { + field_0x2498[mPlotTime] = 0; + } + } + + field_0x180[field_0x2132] = getNowPlotPitch(-daAlink_getAlinkActorClass()->getWolfHowlMgrP()->getNowInputValue()); + field_0x1b14[field_0x2132] = g_MsgObject_HIO_c.mHowlHIO.mWaveformDotLen; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -832,8 +1181,41 @@ asm void dMsgScrnHowl_c::calcWave() { #include "asm/msg/scrn/d_msg_scrn_howl/calcWave__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 80243A50-80243BE0 23E390 0190+00 1/1 0/0 0/0 .text calcGuide__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::calcGuide() { + if (field_0x2138 != 0) { + if ((daAlink_getAlinkActorClass()->getWolfHowlTimer() != 0) || (field_0x2798 == 3)) { + calcPitchLevel(); + for (int i = 0; i < 350; i++) { + if (field_0x2130 < field_0x2136) { + if (i < field_0x2138) { + u8 dataType = getGuideDataType(i); + field_0xd80[i] = getPlotPitch(dataType); + field_0x2198[i] = dataType; + } else { + field_0xd80[i] = 0.0f; + field_0x2198[i] = 0; + } + } else if (i + (field_0x2130 - field_0x2136) < field_0x2138) { + u8 dataType = getGuideDataType(i + (field_0x2130 - field_0x2136)); + field_0xd80[i] = getPlotPitch(dataType); + field_0x2198[i] = dataType; + } else { + field_0xd80[i] = 0.0f; + field_0x2198[i] = 0; + } + } + if (field_0x2130 < (field_0x2138 + field_0x2136)) { + field_0x2130++; + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -842,8 +1224,45 @@ asm void dMsgScrnHowl_c::calcGuide() { #include "asm/msg/scrn/d_msg_scrn_howl/calcGuide__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 80243BE0-80243DCC 23E520 01EC+00 2/2 0/0 0/0 .text moveLineV__14dMsgScrnHowl_cFb */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::moveLineV(bool param_0) { + f32 dVar7 = (mpLineH[0]->getInitPosX() - mpLineV[0]->getInitCenterPosX()); + f32 fVar1; + if (param_0) { + fVar1 = 0.0f; + } else { + fVar1 = (mpLineV[0]->getCenterPosX() - mpLineV[0]->getInitCenterPosX()); + fVar1 -= field_0x1980; + } + f32 dVar8 = (mpLineV[0]->getInitCenterPosX() - mpLineV[1]->getInitCenterPosX()) - g_MsgObject_HIO_c.mHowlHIO.mLineSpaceOffset; + if (fVar1 < dVar7) { + fVar1 -= dVar8; + } + if (fVar1 < (dVar7 - (dVar8 / 2))) { + f32 fVar4 = ((dVar7 - (dVar8 / 2)) - fVar1); + dVar7 = fVar4 / (-dVar8 / 2); + mpLineV[0]->setAlphaRate(1.0f - dVar7); + mpLineV[6]->setAlphaRate(1.0f); + } else { + f32 fVar4 = fVar1 - (dVar7 - (dVar8 / 2)); + dVar7 = fVar4 / (-dVar8 / 2); + mpLineV[0]->setAlphaRate(1.0f); + mpLineV[6]->setAlphaRate((1.0f - dVar7)); + } + f32 fVar3 = 0.0f; + for (int i = 0; i < 7; i++) { + if (0 < i && i < 6) { + mpLineV[i]->setAlphaRate(1.0f); + } + mpLineV[i]->move((fVar3 + (fVar1 + mpLineV[i]->getInitPosX())), mpLineV[i]->getInitPosY()); + fVar3 += g_MsgObject_HIO_c.mHowlHIO.mLineSpaceOffset; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -852,9 +1271,29 @@ asm void dMsgScrnHowl_c::moveLineV(bool param_0) { #include "asm/msg/scrn/d_msg_scrn_howl/moveLineV__14dMsgScrnHowl_cFb.s" } #pragma pop +#endif /* 80243DCC-80243EEC 23E70C 0120+00 2/2 0/0 0/0 .text moveBaseLength__14dMsgScrnHowl_cFb */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::moveBaseLength(bool param_0) { + if (param_0) { + field_0x1990 = 0.0f; + } else { + field_0x1990 -= field_0x1980; + } + f32 dVar6 = mpLineH[0]->getGlobalPosX(); + f32 dVar8 = mpABase->getGlobalPosX() + mpABase->getSizeX(); + f32 dVar7 = field_0x1990 + (mpABase->getInitGlobalPosX() - field_0x27a8); + if (dVar7 < dVar6) { + dVar7 = dVar6; + } + f32 dVar9 = dVar7 - mpABase->getInitGlobalPosX(); + mpABase->resize((dVar8 - dVar7), mpABase->getSizeY()); + mpABase->move(dVar9 + mpABase->getInitPosX(), mpABase->getPosY()); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -863,37 +1302,42 @@ asm void dMsgScrnHowl_c::moveBaseLength(bool param_0) { #include "asm/msg/scrn/d_msg_scrn_howl/moveBaseLength__14dMsgScrnHowl_cFb.s" } #pragma pop +#endif /* 80243EEC-80243F58 23E82C 006C+00 2/2 0/0 0/0 .text getOnLineNum__14dMsgScrnHowl_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::getOnLineNum(int param_0) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/getOnLineNum__14dMsgScrnHowl_cFi.s" +s8 dMsgScrnHowl_c::getOnLineNum(int param_0) { + if (param_0 < 0) { + return -1; + } + + if (param_0 >= 30 && param_0 < field_0x2138 + 380) { + int iVar1 = 30; + for (int i = 0; i < mCorrectLineMax; i++) { + iVar1 += field_0x213a[i]; + if (param_0 < iVar1) { + return i; + } + } + } + return -1; } -#pragma pop /* 80243F58-80243F7C 23E898 0024+00 2/2 0/0 0/0 .text addCount__14dMsgScrnHowl_cFs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::addCount(s16 param_0) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/addCount__14dMsgScrnHowl_cFs.s" +s16 dMsgScrnHowl_c::addCount(s16 param_0) { + if (++param_0 >= field_0x2136) { + param_0 -= field_0x2136; + } + return param_0; } -#pragma pop /* 80243F7C-80243F94 23E8BC 0018+00 2/2 0/0 0/0 .text addCountGuide__14dMsgScrnHowl_cFs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::addCountGuide(s16 param_0) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/addCountGuide__14dMsgScrnHowl_cFs.s" +s16 dMsgScrnHowl_c::addCountGuide(s16 param_0) { + if (++param_0 >= 350) { + param_0 -= 350; + } + return param_0; } -#pragma pop /* ############################################################################################## */ /* 80454CAC-80454CB0 0032AC 0004+00 1/1 0/0 0/0 .sdata2 @5508 */ @@ -901,27 +1345,62 @@ SECTION_SDATA2 static f32 lit_5508 = -1.0f; /* 80243F94-80244108 23E8D4 0174+00 2/2 0/0 0/0 .text getNowPlotPitch__14dMsgScrnHowl_cFf */ +// Matches with literals +#ifdef NONMATCHING +f32 dMsgScrnHowl_c::getNowPlotPitch(f32 param_0) { + if (param_0 < 0.0f) { + param_0 *= -1.0f; + return mpLineH[1]->getGlobalCenterPosY() + (param_0 * (mpLineH[0]->getGlobalCenterPosY() - mpLineH[1]->getGlobalCenterPosY())); + } + return mpLineH[1]->getGlobalCenterPosY() + (param_0 * (mpLineH[2]->getGlobalCenterPosY() - mpLineH[1]->getGlobalCenterPosY())); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgScrnHowl_c::getNowPlotPitch(f32 param_0) { +asm f32 dMsgScrnHowl_c::getNowPlotPitch(f32 param_0) { nofralloc #include "asm/msg/scrn/d_msg_scrn_howl/getNowPlotPitch__14dMsgScrnHowl_cFf.s" } #pragma pop +#endif /* 80244108-8024414C 23EA48 0044+00 2/2 0/0 0/0 .text getPlotPitch__14dMsgScrnHowl_cFf */ +// Matches with literals +#ifdef NONMATCHING +f32 dMsgScrnHowl_c::getPlotPitch(f32 param_0) { + if (1.0f == param_0) { + return field_0x1b08[0]; + } + if (2.0f == param_0) { + return field_0x1b08[1]; + } + if (3.0f == param_0) { + return field_0x1b08[2]; + } + return 0.0f; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgScrnHowl_c::getPlotPitch(f32 param_0) { +asm f32 dMsgScrnHowl_c::getPlotPitch(f32 param_0) { nofralloc #include "asm/msg/scrn/d_msg_scrn_howl/getPlotPitch__14dMsgScrnHowl_cFf.s" } #pragma pop +#endif /* 8024414C-802441FC 23EA8C 00B0+00 2/2 0/0 0/0 .text calcPitchLevel__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::calcPitchLevel() { + field_0x1b08[0] = mpLineH[0]->getGlobalCenterPosY(); + field_0x1b08[1] = mpLineH[1]->getGlobalCenterPosY(); + field_0x1b08[2] = mpLineH[2]->getGlobalCenterPosY(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -930,9 +1409,32 @@ asm void dMsgScrnHowl_c::calcPitchLevel() { #include "asm/msg/scrn/d_msg_scrn_howl/calcPitchLevel__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 802441FC-80244304 23EB3C 0108+00 1/1 0/0 0/0 .text initGuideData__14dMsgScrnHowl_cFv */ +// Matches with literals +#ifdef NONMATCHING +void dMsgScrnHowl_c::initGuideData() { + calcPitchLevel(); + for (int i = 0; i < 350; i++) { + if (field_0x2138 <= 350) { + if (i < field_0x2138) { + u8 dataType = getGuideDataType(i); + field_0xd80[i] = getPlotPitch(dataType); + field_0x2198[i] = dataType; + } else { + field_0xd80[i] = 0.0f; + field_0x2198[i] = 0; + } + } else { + u8 dataType = getGuideDataType(i); + field_0xd80[i] = getPlotPitch(dataType); + field_0x2198[i] = dataType; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -941,26 +1443,31 @@ asm void dMsgScrnHowl_c::initGuideData() { #include "asm/msg/scrn/d_msg_scrn_howl/initGuideData__14dMsgScrnHowl_cFv.s" } #pragma pop +#endif /* 80244304-8024438C 23EC44 0088+00 2/2 0/0 0/0 .text getGuideDataSize__14dMsgScrnHowl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::getGuideDataSize() { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/getGuideDataSize__14dMsgScrnHowl_cFv.s" +u16 dMsgScrnHowl_c::getGuideDataSize() { + u16 dataSize = field_0x2197; + for (int i = 0; i < mCorrectLineMax; i++) { + field_0x213a[i] = daAlink_getAlinkActorClass()->getCorrectLine(i).length; + dataSize += field_0x213a[i]; + } + return dataSize; } -#pragma pop /* 8024438C-80244454 23ECCC 00C8+00 2/2 0/0 0/0 .text getGuideDataType__14dMsgScrnHowl_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMsgScrnHowl_c::getGuideDataType(int param_0) { - nofralloc -#include "asm/msg/scrn/d_msg_scrn_howl/getGuideDataType__14dMsgScrnHowl_cFi.s" +u8 dMsgScrnHowl_c::getGuideDataType(int param_0) { + u16 uVar2 = field_0x2197; + u16 uVar3 = field_0x2197; + for (int i = 0; i < mCorrectLineMax; i++) { + uVar3 += daAlink_getAlinkActorClass()->getCorrectLine(i).length; + if (uVar2 <= param_0 && uVar3 > param_0) { + return daAlink_getAlinkActorClass()->getCorrectLine(i).barType; + } + uVar2 = uVar3; + } + return 0; } -#pragma pop /* 80244454-80244558 23ED94 0104+00 0/0 1/0 0/0 .text __sinit_d_msg_scrn_howl_cpp */ #pragma push |
