From 6a4e50e74b9823329889c509e6e548ccdd18844d Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 27 Aug 2023 20:09:20 -0700 Subject: [PATCH] d_file_select::dFile_select3D_c (#1899) --- Progress.md | 20 +- .../_move__16dFile_select3D_cFv.s | 51 ---- .../draw__16dFile_select3D_cFv.s | 47 ---- .../freeHeap__16dFile_select3D_cFv.s | 19 -- include/JSystem/J3DGraphAnimator/J3DModel.h | 4 + include/JSystem/J3DGraphLoader/J3DAnmLoader.h | 2 + include/d/file/d_file_select.h | 13 +- include/m_Do/m_Do_mtx.h | 10 +- src/d/file/d_file_select.cpp | 226 +++++++++++++++--- 9 files changed, 228 insertions(+), 164 deletions(-) delete mode 100644 asm/d/file/d_file_select/_move__16dFile_select3D_cFv.s delete mode 100644 asm/d/file/d_file_select/draw__16dFile_select3D_cFv.s delete mode 100644 asm/d/file/d_file_select/freeHeap__16dFile_select3D_cFv.s diff --git a/Progress.md b/Progress.md index 67562e80088..eb1766199e5 100644 --- a/Progress.md +++ b/Progress.md @@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes) .init | 97.972973% | 9280 | 9472 .extab | 100.000000% | 96 | 96 .extabindex | 100.000000% | 96 | 96 -.text | 31.559742% | 1135060 | 3596544 +.text | 31.572087% | 1135504 | 3596544 .ctors | 100.000000% | 448 | 448 .dtors | 100.000000% | 32 | 32 .rodata | 100.000000% | 193856 | 193856 .data | 100.000000% | 197632 | 197632 .sdata | 100.000000% | 1408 | 1408 .sdata2 | 100.000000% | 20832 | 20832 -Total | 38.774513% | 1558996 | 4020672 +Total | 38.785556% | 1559440 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 38.774513% | 1558996 | 4020672 -RELs | 34.280808% | 3942404 | 11500324 -Total | 35.444890% | 5501400 | 15520996 +main.dol | 38.785556% | 1559440 | 4020672 +RELs | 34.306025% | 3945304 | 11500324 +Total | 35.466435% | 5504744 | 15520996 ## RELs @@ -407,7 +407,7 @@ d_a_obj_firepillar2 | 32.320564% | 2936 | 9084 d_a_obj_flag | 37.518248% | 2056 | 5480 d_a_obj_flag2 | 46.370840% | 5852 | 12620 d_a_obj_flag3 | 33.292929% | 3296 | 9900 -d_a_obj_fmobj | 55.200000% | 1104 | 2000 +d_a_obj_fmobj | 80.800000% | 1616 | 2000 d_a_obj_food | 36.994728% | 3368 | 9104 d_a_obj_fw | 43.368592% | 2132 | 4916 d_a_obj_gadget | 34.371565% | 3752 | 10916 @@ -536,7 +536,7 @@ d_a_obj_magLift | 41.319181% | 2180 | 5276 d_a_obj_magLiftRot | 51.744186% | 3916 | 7568 d_a_obj_magne_arm | 34.395028% | 7084 | 20596 d_a_obj_maki | 45.531587% | 2364 | 5192 -d_a_obj_master_sword | 43.575419% | 2808 | 6444 +d_a_obj_master_sword | 59.776536% | 3852 | 6444 d_a_obj_mato | 37.093023% | 2552 | 6880 d_a_obj_metalbox | 50.268097% | 1500 | 2984 d_a_obj_mgate | 100.000000% | 4152 | 4152 @@ -654,7 +654,7 @@ d_a_obj_tp | 35.262726% | 3436 | 9744 d_a_obj_treesh | 48.098664% | 1872 | 3892 d_a_obj_twGate | 57.395498% | 2856 | 4976 d_a_obj_udoor | 49.156627% | 1632 | 3320 -d_a_obj_usaku | 55.081301% | 1084 | 1968 +d_a_obj_usaku | 100.000000% | 1968 | 1968 d_a_obj_vground | 100.000000% | 2856 | 2856 d_a_obj_volcball | 50.478183% | 6756 | 13384 d_a_obj_volcbom | 32.897713% | 5236 | 15916 @@ -716,7 +716,7 @@ d_a_tag_attack_item | 43.212237% | 1808 | 4184 d_a_tag_attention | 100.000000% | 2024 | 2024 d_a_tag_bottle_item | 100.000000% | 2656 | 2656 d_a_tag_camera | 37.023593% | 1632 | 4408 -d_a_tag_chgrestart | 73.981900% | 1308 | 1768 +d_a_tag_chgrestart | 100.000000% | 1768 | 1768 d_a_tag_chkpoint | 43.726937% | 948 | 2168 d_a_tag_csw | 35.869565% | 3696 | 10304 d_a_tag_escape | 100.000000% | 712 | 712 @@ -785,4 +785,4 @@ d_a_vrbox2 | 44.907111% | 2804 | 6244 d_a_warp_bug | 100.000000% | 2024 | 2024 d_a_ykgr | 44.400631% | 2252 | 5072 f_pc_profile_lst | 100.000000% | 28156 | 28156 -Total | 34.280808% | 3942404 | 11500324 +Total | 34.306025% | 3945304 | 11500324 diff --git a/asm/d/file/d_file_select/_move__16dFile_select3D_cFv.s b/asm/d/file/d_file_select/_move__16dFile_select3D_cFv.s deleted file mode 100644 index d38593fb272..00000000000 --- a/asm/d/file/d_file_select/_move__16dFile_select3D_cFv.s +++ /dev/null @@ -1,51 +0,0 @@ -lbl_801904E4: -/* 801904E4 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 801904E8 7C 08 02 A6 */ mflr r0 -/* 801904EC 90 01 00 44 */ stw r0, 0x44(r1) -/* 801904F0 93 E1 00 3C */ stw r31, 0x3c(r1) -/* 801904F4 7C 7F 1B 78 */ mr r31, r3 -/* 801904F8 80 03 00 08 */ lwz r0, 8(r3) -/* 801904FC 28 00 00 00 */ cmplwi r0, 0 -/* 80190500 41 82 00 94 */ beq lbl_80190594 -/* 80190504 80 9F 03 9C */ lwz r4, 0x39c(r31) -/* 80190508 38 61 00 08 */ addi r3, r1, 8 -/* 8019050C 80 A4 00 04 */ lwz r5, 4(r4) -/* 80190510 38 C0 00 00 */ li r6, 0 -/* 80190514 38 E0 00 00 */ li r7, 0 -/* 80190518 48 0C 49 A5 */ bl getGlobalVtxCenter__8CPaneMgrFP7J2DPanebs -/* 8019051C 80 61 00 08 */ lwz r3, 8(r1) -/* 80190520 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80190524 90 61 00 14 */ stw r3, 0x14(r1) -/* 80190528 90 01 00 18 */ stw r0, 0x18(r1) -/* 8019052C 80 01 00 10 */ lwz r0, 0x10(r1) -/* 80190530 90 01 00 1C */ stw r0, 0x1c(r1) -/* 80190534 7F E3 FB 78 */ mr r3, r31 -/* 80190538 C0 21 00 14 */ lfs f1, 0x14(r1) -/* 8019053C C0 1F 03 B8 */ lfs f0, 0x3b8(r31) -/* 80190540 EC 21 00 2A */ fadds f1, f1, f0 -/* 80190544 C0 41 00 18 */ lfs f2, 0x18(r1) -/* 80190548 C0 1F 03 BC */ lfs f0, 0x3bc(r31) -/* 8019054C EC 42 00 2A */ fadds f2, f2, f0 -/* 80190550 C0 62 9F B4 */ lfs f3, lit_8459(r2) -/* 80190554 38 81 00 20 */ addi r4, r1, 0x20 -/* 80190558 48 00 0A 91 */ bl toItem3Dpos__16dFile_select3D_cFfffP4cXyz -/* 8019055C C0 01 00 20 */ lfs f0, 0x20(r1) -/* 80190560 D0 1F 03 A4 */ stfs f0, 0x3a4(r31) -/* 80190564 C0 01 00 24 */ lfs f0, 0x24(r1) -/* 80190568 D0 1F 03 A8 */ stfs f0, 0x3a8(r31) -/* 8019056C C0 01 00 28 */ lfs f0, 0x28(r1) -/* 80190570 D0 1F 03 AC */ stfs f0, 0x3ac(r31) -/* 80190574 38 00 00 00 */ li r0, 0 -/* 80190578 B0 1F 03 B0 */ sth r0, 0x3b0(r31) -/* 8019057C B0 1F 03 B2 */ sth r0, 0x3b2(r31) -/* 80190580 B0 1F 03 B4 */ sth r0, 0x3b4(r31) -/* 80190584 7F E3 FB 78 */ mr r3, r31 -/* 80190588 48 00 04 8D */ bl animePlay__16dFile_select3D_cFv -/* 8019058C 7F E3 FB 78 */ mr r3, r31 -/* 80190590 48 00 03 CD */ bl set_mtx__16dFile_select3D_cFv -lbl_80190594: -/* 80190594 83 E1 00 3C */ lwz r31, 0x3c(r1) -/* 80190598 80 01 00 44 */ lwz r0, 0x44(r1) -/* 8019059C 7C 08 03 A6 */ mtlr r0 -/* 801905A0 38 21 00 40 */ addi r1, r1, 0x40 -/* 801905A4 4E 80 00 20 */ blr diff --git a/asm/d/file/d_file_select/draw__16dFile_select3D_cFv.s b/asm/d/file/d_file_select/draw__16dFile_select3D_cFv.s deleted file mode 100644 index 087aa3bef6b..00000000000 --- a/asm/d/file/d_file_select/draw__16dFile_select3D_cFv.s +++ /dev/null @@ -1,47 +0,0 @@ -lbl_801905A8: -/* 801905A8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801905AC 7C 08 02 A6 */ mflr r0 -/* 801905B0 90 01 00 14 */ stw r0, 0x14(r1) -/* 801905B4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801905B8 93 C1 00 08 */ stw r30, 8(r1) -/* 801905BC 7C 7E 1B 78 */ mr r30, r3 -/* 801905C0 80 03 00 08 */ lwz r0, 8(r3) -/* 801905C4 28 00 00 00 */ cmplwi r0, 0 -/* 801905C8 41 82 00 7C */ beq lbl_80190644 -/* 801905CC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 801905D0 38 83 61 C0 */ addi r4, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 801905D4 80 04 5F 98 */ lwz r0, 0x5f98(r4) -/* 801905D8 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */ -/* 801905DC 3B E3 4A C8 */ addi r31, r3, j3dSys@l /* 0x80434AC8@l */ -/* 801905E0 90 1F 00 48 */ stw r0, 0x48(r31) -/* 801905E4 80 04 5F 9C */ lwz r0, 0x5f9c(r4) -/* 801905E8 90 1F 00 4C */ stw r0, 0x4c(r31) -/* 801905EC 3C 60 80 43 */ lis r3, g_env_light@ha /* 0x8042CA54@ha */ -/* 801905F0 38 63 CA 54 */ addi r3, r3, g_env_light@l /* 0x8042CA54@l */ -/* 801905F4 38 80 00 0D */ li r4, 0xd -/* 801905F8 38 BE 03 A4 */ addi r5, r30, 0x3a4 -/* 801905FC 38 DE 00 14 */ addi r6, r30, 0x14 -/* 80190600 48 01 31 C5 */ bl settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c -/* 80190604 3C 60 80 43 */ lis r3, g_env_light@ha /* 0x8042CA54@ha */ -/* 80190608 38 63 CA 54 */ addi r3, r3, g_env_light@l /* 0x8042CA54@l */ -/* 8019060C 80 9E 00 08 */ lwz r4, 8(r30) -/* 80190610 80 84 00 04 */ lwz r4, 4(r4) -/* 80190614 38 BE 00 14 */ addi r5, r30, 0x14 -/* 80190618 48 01 47 89 */ bl setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c -/* 8019061C 7F C3 F3 78 */ mr r3, r30 -/* 80190620 48 00 05 25 */ bl animeEntry__16dFile_select3D_cFv -/* 80190624 80 7E 00 08 */ lwz r3, 8(r30) -/* 80190628 4B E7 D6 9D */ bl mDoExt_modelUpdateDL__FP8J3DModel -/* 8019062C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80190630 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80190634 80 03 5F 80 */ lwz r0, 0x5f80(r3) -/* 80190638 90 1F 00 48 */ stw r0, 0x48(r31) -/* 8019063C 80 03 5F 84 */ lwz r0, 0x5f84(r3) -/* 80190640 90 1F 00 4C */ stw r0, 0x4c(r31) -lbl_80190644: -/* 80190644 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80190648 83 C1 00 08 */ lwz r30, 8(r1) -/* 8019064C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80190650 7C 08 03 A6 */ mtlr r0 -/* 80190654 38 21 00 10 */ addi r1, r1, 0x10 -/* 80190658 4E 80 00 20 */ blr diff --git a/asm/d/file/d_file_select/freeHeap__16dFile_select3D_cFv.s b/asm/d/file/d_file_select/freeHeap__16dFile_select3D_cFv.s deleted file mode 100644 index 0add087110f..00000000000 --- a/asm/d/file/d_file_select/freeHeap__16dFile_select3D_cFv.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_801904A0: -/* 801904A0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801904A4 7C 08 02 A6 */ mflr r0 -/* 801904A8 90 01 00 14 */ stw r0, 0x14(r1) -/* 801904AC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801904B0 7C 7F 1B 78 */ mr r31, r3 -/* 801904B4 80 63 00 04 */ lwz r3, 4(r3) -/* 801904B8 28 03 00 00 */ cmplwi r3, 0 -/* 801904BC 41 82 00 14 */ beq lbl_801904D0 -/* 801904C0 4B E7 EC CD */ bl mDoExt_destroySolidHeap__FP12JKRSolidHeap -/* 801904C4 38 00 00 00 */ li r0, 0 -/* 801904C8 90 1F 00 04 */ stw r0, 4(r31) -/* 801904CC 90 1F 00 08 */ stw r0, 8(r31) -lbl_801904D0: -/* 801904D0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801904D4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801904D8 7C 08 03 A6 */ mtlr r0 -/* 801904DC 38 21 00 10 */ addi r1, r1, 0x10 -/* 801904E0 4E 80 00 20 */ blr diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index f1a192199f2..ad15bbdac2f 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -34,6 +34,10 @@ public: J3DModel() { initialize(); } + J3DModel(J3DModelData* param_0, u32 param_1, u32 param_2) { + initialize(); + entryModelData(param_0, param_1, param_2); + } /* 800CFFF4 */ void setBaseTRMtx(f32 (*)[4]); /* 80327100 */ void initialize(); diff --git a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h index 21df0044fd9..959f56df2f4 100644 --- a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h @@ -10,6 +10,8 @@ struct J3DAnmBase; struct J3DAnmLoaderDataBase { /* 80337B40 */ static void* load(void const*, J3DAnmLoaderDataBaseFlag); /* 80338134 */ static void setResource(J3DAnmBase*, void const*); + + static void* load(void const* param_0) { return load(param_0, J3DLOADER_UNK_FLAG0); } }; #endif /* J3DANMLOADER_H */ diff --git a/include/d/file/d_file_select.h b/include/d/file/d_file_select.h index 12307931db5..2b7e532e60e 100644 --- a/include/d/file/d_file_select.h +++ b/include/d/file/d_file_select.h @@ -20,7 +20,7 @@ public: class dFile_select3D_c { public: /* 801902F0 */ dFile_select3D_c(); - /* 80190380 */ ~dFile_select3D_c(); + /* 80190380 */ /* virtual */ ~dFile_select3D_c(); /* 801903DC */ void _create(u8, u8); /* 8019049C */ void _delete(); /* 801904A0 */ void freeHeap(); @@ -33,7 +33,7 @@ public: /* 80190BA8 */ void createMaskModel(); /* 80190D68 */ void createMirrorModel(); /* 80190FE8 */ void toItem3Dpos(f32, f32, f32, cXyz*); - /* 801910D4 */ void calcViewMtx(f32 (*)[4]); + /* 801910D4 */ void calcViewMtx(Mtx); void drawOff() { mpModel = 0; } @@ -42,12 +42,9 @@ public: /* 0x0008 */ J3DModel* mpModel; /* 0x000C */ mDoExt_bckAnm* mBckAnm; /* 0x0010 */ mDoExt_brkAnm* mBrkAnm; - /* 0x0014 */ J3DLightInfo mLightInfo; - /* 0x0048 */ u8 field_0x0048[0x0088 - 0x0048]; - /* 0x0088 */ J3DLightObj mLightObjects[6]; - /* 0x0340 */ u8 field_0x0340[0x039C - 0x0340]; - /* 0x039C */ J2DPane* pane; - /* 0x03A0 */ u8 field_0x03A0[0x03A4 - 0x03A0]; + /* 0x0014 */ dKy_tevstr_c mTevstr; + /* 0x039C */ CPaneMgr* mPaneMgr; + /* 0x03A0 */ J2DPane* mPane; /* 0x03A4 */ cXyz field_0x03a4; /* 0x03B0 */ csXyz field_0x03b0; /* 0x03B6 */ u8 padding[2]; diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index ad432f2ffe7..0ade5bdb488 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -73,7 +73,7 @@ inline void cMtx_multVec(Mtx mtx, const Vec* src, Vec* dst) { mDoMtx_multVec(mtx, src, dst); } -inline void cMtx_lookAt(f32 (*param_0)[4],Vec const* param_1, Vec const* param_2,Vec const* param_3, s16 param_4) { +inline void cMtx_lookAt(Mtx param_0, const Vec* param_1, const Vec* param_2, const Vec* param_3, s16 param_4) { mDoMtx_lookAt(param_0,param_1,param_2,param_3,param_4); } @@ -107,6 +107,14 @@ inline void mDoMtx_concat(const Mtx a, const Mtx b, Mtx c) { PSMTXConcat(a, b, c); } +inline void mDoMtx_inverse(const Mtx a, Mtx b) { + PSMTXInverse(a, b); +} + +inline void cMtx_inverse(const Mtx a, Mtx b) { + mDoMtx_inverse(a, b); +} + class mDoMtx_stack_c { public: /* 8000CCC8 */ static bool push(); diff --git a/src/d/file/d_file_select.cpp b/src/d/file/d_file_select.cpp index dae02a3ae6c..14b1e60b017 100644 --- a/src/d/file/d_file_select.cpp +++ b/src/d/file/d_file_select.cpp @@ -8,7 +8,11 @@ #include "d/file/d_file_select.h" #include "JSystem/J2DGraph/J2DTextBox.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "JSystem/JKernel/JKRSolidHeap.h" #include "d/meter/d_meter2_info.h" +#include "d/s/d_s_play.h" #include "dol2asm.h" #include "dolphin/dvd/dvd.h" #include "dolphin/types.h" @@ -4882,9 +4886,14 @@ asm void dFile_select_c::dataSave() { #endif /* 801902F0-80190380 18AC30 0090+00 1/1 0/0 0/0 .text __ct__16dFile_select3D_cFv */ +// vtable data #ifdef NONMATCHING dFile_select3D_c::dFile_select3D_c() { - mLightInfo.dKy_tevstr_c(); + mpHeap = NULL; + mpModel = NULL; + field_0x03b8.y = 0.0f; + field_0x03b8.x = 0.0f; + field_0x03b8.z = 1.0f; } #else #pragma push @@ -4898,6 +4907,12 @@ asm dFile_select3D_c::dFile_select3D_c() { #endif /* 80190380-801903DC 18ACC0 005C+00 1/0 0/0 0/0 .text __dt__16dFile_select3D_cFv */ +// vtable data +#ifdef NONMATCHING +dFile_select3D_c::~dFile_select3D_c() { + freeHeap(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4906,14 +4921,15 @@ asm dFile_select3D_c::~dFile_select3D_c() { #include "asm/d/file/d_file_select/__dt__16dFile_select3D_cFv.s" } #pragma pop +#endif /* 801903DC-8019049C 18AD1C 00C0+00 1/1 0/0 0/0 .text _create__16dFile_select3D_cFUcUc */ #ifdef NONMATCHING // matches with literals void dFile_select3D_c::_create(u8 i_mirrorIdx, u8 i_maskIdx) { - JKRHeap* ppHeap[2]; + JKRHeap* ppHeap; - mpHeap = mDoExt_createSolidHeapFromGameToCurrent(ppHeap,0x25800,32); + mpHeap = mDoExt_createSolidHeapFromGameToCurrent(&ppHeap,0x25800,32); field_0x03c4 = 0.0f; field_0x03c8 = 0.0f; mMirrorIdx = i_mirrorIdx; @@ -4927,10 +4943,10 @@ void dFile_select3D_c::_create(u8 i_mirrorIdx, u8 i_maskIdx) { } mpHeap->adjustSize(); - mDoExt_setCurrentHeap(*ppHeap); + mDoExt_setCurrentHeap(ppHeap); if (mpModel) { - dKy_tevstr_init((dKy_tevstr_c *)&mLightInfo,0xFF,0xFF); + dKy_tevstr_init(&mTevstr,0xFF,0xFF); set_mtx(); } } @@ -4951,40 +4967,75 @@ void dFile_select3D_c::_delete() { } /* 801904A0-801904E4 18ADE0 0044+00 2/2 0/0 0/0 .text freeHeap__16dFile_select3D_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dFile_select3D_c::freeHeap() { - nofralloc -#include "asm/d/file/d_file_select/freeHeap__16dFile_select3D_cFv.s" +void dFile_select3D_c::freeHeap() { + if (mpHeap) { + mDoExt_destroySolidHeap(mpHeap); + mpHeap = NULL; + mpModel = NULL; + } } -#pragma pop /* ############################################################################################## */ /* 804539B4-804539B8 001FB4 0004+00 1/1 0/0 0/0 .sdata2 @8459 */ SECTION_SDATA2 static f32 lit_8459 = 720.0f; /* 801904E4-801905A8 18AE24 00C4+00 1/1 0/0 0/0 .text _move__16dFile_select3D_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dFile_select3D_c::_move() { - nofralloc -#include "asm/d/file/d_file_select/_move__16dFile_select3D_cFv.s" +void dFile_select3D_c::_move() { + if (mpModel) { + cXyz stack_20; + Vec stack_8 = mPaneMgr->getGlobalVtxCenter(false, 0); + toItem3Dpos(stack_8.x + field_0x03b8.x, stack_8.y + field_0x03b8.y, 720.0f, &stack_20); + field_0x03a4.set(stack_20); + field_0x03b0.set(0, 0, 0); + animePlay(); + set_mtx(); + } } -#pragma pop /* 801905A8-8019065C 18AEE8 00B4+00 1/1 0/0 0/0 .text draw__16dFile_select3D_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dFile_select3D_c::draw() { - nofralloc -#include "asm/d/file/d_file_select/draw__16dFile_select3D_cFv.s" +void dFile_select3D_c::draw() { + if (mpModel) { + dComIfGd_setListItem3D(); + g_env_light.settingTevStruct(13, &field_0x03a4, &mTevstr); + g_env_light.setLightTevColorType_MAJI(mpModel, &mTevstr); + animeEntry(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + } } -#pragma pop /* 8019065C-8019095C 18AF9C 0300+00 2/2 0/0 0/0 .text setJ3D__16dFile_select3D_cFPCcPCcPCc */ +#ifdef NONMATCHING +// double branch, regswap +void dFile_select3D_c::setJ3D(char const* param_0, char const* param_1, char const* param_2) { + JKRArchive* archive = dComIfGp_getCollectResArchive(); + J3DModelData* modelData = (J3DModelData*)J3DModelLoaderDataBase::load( + archive->getResource('BMD ', param_0), 0x51020010); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterialAnm* local_48 = new J3DMaterialAnm(); + modelData->getMaterialNodePointer(i)->change(); + modelData->getMaterialNodePointer(i)->setMaterialAnm(local_48); + } + mpModel = new J3DModel(modelData, 0, 1); + if (param_1) { + J3DAnmTransform* pbck = + (J3DAnmTransform*)J3DAnmLoaderDataBase::load(archive->getResource('BCK ', param_1)); + mBckAnm = new mDoExt_bckAnm(); + if (mBckAnm && !mBckAnm->init(pbck, 1, 2, 1.0f, 0, -1, false)) { + return; + } + } + if (param_2) { + J3DAnmTevRegKey* pbrk = + (J3DAnmTevRegKey*)J3DAnmLoaderDataBase::load(archive->getResource('BRK ', param_2)); + pbrk->searchUpdateMaterialID(modelData); + mBrkAnm = new mDoExt_brkAnm(); + if (mBrkAnm && !mBrkAnm->init(modelData, pbrk, -1, 2, 1.0f, 0, -1)) { + return; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4993,12 +5044,28 @@ asm void dFile_select3D_c::setJ3D(char const* param_0, char const* param_1, char #include "asm/d/file/d_file_select/setJ3D__16dFile_select3D_cFPCcPCcPCc.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804539B8-804539BC 001FB8 0004+00 1/1 0/0 0/0 .sdata2 @8608 */ SECTION_SDATA2 static f32 lit_8608 = 1.0f / 10.0f; /* 8019095C-80190A14 18B29C 00B8+00 2/2 0/0 0/0 .text set_mtx__16dFile_select3D_cFv */ +#ifdef NONMATCHING +// matches with literals +void dFile_select3D_c::set_mtx() { + cXyz stack_8; + f32 tmp = mPane->getScaleX(); + if (tmp <= 0.1f) { + tmp = 0.0f; + } + stack_8.x = stack_8.y = stack_8.z = tmp * field_0x03b8.z; + mDoMtx_stack_c::transS(field_0x03a4.x, field_0x03a4.y, field_0x03a4.z); + mDoMtx_stack_c::XYZrotM(field_0x03b0.x, field_0x03b0.y, field_0x03b0.z); + mpModel->setBaseScale(stack_8); + mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5007,8 +5074,30 @@ asm void dFile_select3D_c::set_mtx() { #include "asm/d/file/d_file_select/set_mtx__16dFile_select3D_cFv.s" } #pragma pop +#endif /* 80190A14-80190B44 18B354 0130+00 1/1 0/0 0/0 .text animePlay__16dFile_select3D_cFv */ +#ifdef NONMATCHING +// matches with literals +void dFile_select3D_c::animePlay() { + if (mBrkAnm) { + field_0x03c4 += 1.0f; + if (field_0x03c4 >= mBrkAnm->getEndFrame()) { + field_0x03c4 -= mBrkAnm->getEndFrame(); + } + mBrkAnm->setFrame(field_0x03c4); + mBrkAnm->play(); + } + if (mBckAnm) { + field_0x03c8 += 1.0f; + if (field_0x03c8 >= mBckAnm->getEndFrame()) { + field_0x03c8 -= mBckAnm->getEndFrame(); + } + mBckAnm->setFrame(field_0x03c8); + mBckAnm->play(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5017,6 +5106,7 @@ asm void dFile_select3D_c::animePlay() { #include "asm/d/file/d_file_select/animePlay__16dFile_select3D_cFv.s" } #pragma pop +#endif /* 80190B44-80190BA8 18B484 0064+00 1/1 0/0 0/0 .text animeEntry__16dFile_select3D_cFv */ void dFile_select3D_c::animeEntry() { @@ -5067,6 +5157,34 @@ COMPILER_STRIP_GATE(0x80394338, &m_kamen_scale); #pragma pop /* 80190BA8-80190D68 18B4E8 01C0+00 1/1 0/0 0/0 .text createMaskModel__16dFile_select3D_cFv */ +#ifdef NONMATCHING +// matches with literals +void dFile_select3D_c::createMaskModel() { + field_0x03b8.x = m_kamen_offset_x[mMaskIdx]; + field_0x03b8.y = m_kamen_offset_y[mMaskIdx]; + field_0x03b8.z = m_kamen_scale[mMaskIdx]; + field_0x03a4.set(0.0f, 0.0f, 0.0f); + field_0x03b0.set(0, 0, 0); + mpModel = NULL; + mBckAnm = NULL; + mBrkAnm = NULL; + if (mMaskIdx == 0) { + return; + } + setJ3D("md_mask_UI.bmd", bck_name_8683[mMaskIdx - 1], brk_name_8684[mMaskIdx - 1]); + switch (mMaskIdx) { + case 1: + mpModel->getModelData()->getMaterialNodePointer(0)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(1)->getShape()->hide(); + case 2: + mpModel->getModelData()->getMaterialNodePointer(2)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(3)->getShape()->hide(); + case 3: + mpModel->getModelData()->getMaterialNodePointer(6)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(7)->getShape()->hide(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5075,6 +5193,7 @@ asm void dFile_select3D_c::createMaskModel() { #include "asm/d/file/d_file_select/createMaskModel__16dFile_select3D_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8039434C-80394360 0209AC 0014+00 0/1 0/0 0/0 .rodata m_mirror_offset_x$8781 */ @@ -5125,6 +5244,40 @@ SECTION_DEAD static char const* const pad_80394827 = ""; #pragma pop /* 80190D68-80190FE8 18B6A8 0280+00 1/1 0/0 0/0 .text createMirrorModel__16dFile_select3D_cFv */ +#ifdef NONMATCHING +// matches with literals +void dFile_select3D_c::createMirrorModel() { + field_0x03b8.x = m_mirror_offset_x[mMirrorIdx]; + field_0x03b8.y = m_mirror_offset_y[mMirrorIdx]; + field_0x03b8.z = m_mirror_scale[mMirrorIdx]; + field_0x03a4.set(0.0f, 0.0f, 0.0f); + field_0x03b0.set(0, 0, 0); + mpModel = NULL; + mBckAnm = NULL; + mBrkAnm = NULL; + if (mMirrorIdx == 0) { + return; + } + setJ3D("kageri_mirrer_UI.bmd", bck_name_8786[mMirrorIdx - 1], brk_name_8787[mMirrorIdx - 1]); + switch (mMirrorIdx) { + case 1: + mpModel->getModelData()->getMaterialNodePointer(4)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(5)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(6)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(7)->getShape()->hide(); + case 2: + mpModel->getModelData()->getMaterialNodePointer(8)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(9)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(10)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(11)->getShape()->hide(); + case 3: + mpModel->getModelData()->getMaterialNodePointer(12)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(13)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(14)->getShape()->hide(); + mpModel->getModelData()->getMaterialNodePointer(15)->getShape()->hide(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5133,6 +5286,7 @@ asm void dFile_select3D_c::createMirrorModel() { #include "asm/d/file/d_file_select/createMirrorModel__16dFile_select3D_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804539BC-804539C0 001FBC 0004+00 1/1 0/0 0/0 .sdata2 @8978 */ @@ -5152,6 +5306,21 @@ SECTION_SDATA2 static f64 lit_8980 = 0.39269909262657166; SECTION_SDATA2 static f32 lit_8981 = 19.0f / 14.0f; /* 80190FE8-801910D4 18B928 00EC+00 1/1 0/0 0/0 .text toItem3Dpos__16dFile_select3D_cFfffP4cXyz */ +#ifdef NONMATCHING +// floating point hell +void dFile_select3D_c::toItem3Dpos(f32 param_0, f32 param_1, f32 param_2, cXyz* param_3) { + f32 f28 = ((param_0 - mDoGph_gInf_c::getMinXF()) / mDoGph_gInf_c::getWidthF()) * 2.0f - 1.0f; + f32 f29 = ((param_1 - -100.0f) / 448.0f) * 2.0f - 1.0f; + Mtx stack_50; + Mtx stack_20; + calcViewMtx(&stack_50); + cMtx_inverse(stack_50, stack_20); + f32 f31 = tan(0.3926990926265717); + cXyz stack_10((f28 * param_2) * (f31 * mDoGph_gInf_c::getAspect()), f31 * (f29 * -param_2), + -param_2); + cMtx_multVec(stack_20, &stack_10, param_3); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5160,6 +5329,7 @@ asm void dFile_select3D_c::toItem3Dpos(f32 param_0, f32 param_1, f32 param_2, cX #include "asm/d/file/d_file_select/toItem3Dpos__16dFile_select3D_cFfffP4cXyz.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804539D4-804539D8 001FD4 0004+00 1/1 0/0 0/0 .sdata2 @8993 */ @@ -5168,14 +5338,14 @@ SECTION_SDATA2 static f32 lit_8993 = -1000.0f; /* 801910D4-80191130 18BA14 005C+00 1/1 0/0 0/0 .text calcViewMtx__16dFile_select3D_cFPA4_f */ #ifdef NONMATCHING // matches with literals -void dFile_select3D_c::calcViewMtx(f32 (*param_0)[4]) { +void dFile_select3D_c::calcViewMtx(Mtx param_0) { cMtx_lookAt(param_0,&cXyz(0.0f,0.0f,-1000.0f),&cXyz::Zero,&cXyz(0.0f,1.0f,0.0f),0); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dFile_select3D_c::calcViewMtx(f32 (*param_0)[4]) { +asm void dFile_select3D_c::calcViewMtx(Mtx param_0) { nofralloc #include "asm/d/file/d_file_select/calcViewMtx__16dFile_select3D_cFPA4_f.s" }