From 38ac3b420c2ff42a006d1f5e3b0ab061add26a6b Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Mon, 26 Dec 2022 19:23:22 -0700 Subject: [PATCH 1/4] d_jnt_col first pass (#222) * dJntCol_c::dJntCol_c * dJntCol_c::init * dJntCol_c::setArrowPosAndAngle * remove asm --- asm/d/d_jnt_col/__ct__9dJntCol_cFv.s | 6 -- ...10fopAc_ac_cPC13dJntColData_cP8J3DModeli.s | 12 --- ..._9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz.s | 37 --------- include/d/d_jnt_col.h | 4 +- include/f_op/f_op_actor_mng.h | 4 + src/d/d_jnt_col.cpp | 75 ++++++++++--------- 6 files changed, 45 insertions(+), 93 deletions(-) delete mode 100644 asm/d/d_jnt_col/__ct__9dJntCol_cFv.s delete mode 100644 asm/d/d_jnt_col/init__9dJntCol_cFP10fopAc_ac_cPC13dJntColData_cP8J3DModeli.s delete mode 100644 asm/d/d_jnt_col/setArrowPosAndAngle__9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz.s diff --git a/asm/d/d_jnt_col/__ct__9dJntCol_cFv.s b/asm/d/d_jnt_col/__ct__9dJntCol_cFv.s deleted file mode 100644 index 66dfe12f189..00000000000 --- a/asm/d/d_jnt_col/__ct__9dJntCol_cFv.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_80035C8C: -/* 80035C8C 38 00 00 00 */ li r0, 0 -/* 80035C90 90 03 00 04 */ stw r0, 4(r3) -/* 80035C94 90 03 00 00 */ stw r0, 0(r3) -/* 80035C98 90 03 00 08 */ stw r0, 8(r3) -/* 80035C9C 4E 80 00 20 */ blr diff --git a/asm/d/d_jnt_col/init__9dJntCol_cFP10fopAc_ac_cPC13dJntColData_cP8J3DModeli.s b/asm/d/d_jnt_col/init__9dJntCol_cFP10fopAc_ac_cPC13dJntColData_cP8J3DModeli.s deleted file mode 100644 index 2a6ea02a2f0..00000000000 --- a/asm/d/d_jnt_col/init__9dJntCol_cFP10fopAc_ac_cPC13dJntColData_cP8J3DModeli.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_80035CA0: -/* 80035CA0 90 A3 00 00 */ stw r5, 0(r3) -/* 80035CA4 90 C3 00 04 */ stw r6, 4(r3) -/* 80035CA8 90 E3 00 08 */ stw r7, 8(r3) -/* 80035CAC 38 00 00 00 */ li r0, 0 -/* 80035CB0 90 03 00 0C */ stw r0, 0xc(r3) -/* 80035CB4 28 04 00 00 */ cmplwi r4, 0 -/* 80035CB8 41 82 00 08 */ beq lbl_80035CC0 -/* 80035CBC 90 64 05 28 */ stw r3, 0x528(r4) -lbl_80035CC0: -/* 80035CC0 38 60 00 01 */ li r3, 1 -/* 80035CC4 4E 80 00 20 */ blr diff --git a/asm/d/d_jnt_col/setArrowPosAndAngle__9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz.s b/asm/d/d_jnt_col/setArrowPosAndAngle__9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz.s deleted file mode 100644 index c3c097194d7..00000000000 --- a/asm/d/d_jnt_col/setArrowPosAndAngle__9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_80036FA8: -/* 80036FA8 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80036FAC 7C 08 02 A6 */ mflr r0 -/* 80036FB0 90 01 00 34 */ stw r0, 0x34(r1) -/* 80036FB4 39 61 00 30 */ addi r11, r1, 0x30 -/* 80036FB8 48 32 B2 1D */ bl _savegpr_27 -/* 80036FBC 7C 7B 1B 78 */ mr r27, r3 -/* 80036FC0 7C 9C 23 78 */ mr r28, r4 -/* 80036FC4 7C FD 3B 78 */ mr r29, r7 -/* 80036FC8 7D 1E 43 78 */ mr r30, r8 -/* 80036FCC 80 63 00 04 */ lwz r3, 4(r3) -/* 80036FD0 80 63 00 84 */ lwz r3, 0x84(r3) -/* 80036FD4 80 03 00 0C */ lwz r0, 0xc(r3) -/* 80036FD8 1F E6 00 30 */ mulli r31, r6, 0x30 -/* 80036FDC 7C 60 FA 14 */ add r3, r0, r31 -/* 80036FE0 7C A4 2B 78 */ mr r4, r5 -/* 80036FE4 38 A1 00 08 */ addi r5, r1, 8 -/* 80036FE8 48 30 FE 65 */ bl PSMTXMultVecSR -/* 80036FEC 38 61 00 08 */ addi r3, r1, 8 -/* 80036FF0 48 23 01 61 */ bl atan2sY_XZ__4cXyzCFv -/* 80036FF4 B0 7E 00 00 */ sth r3, 0(r30) -/* 80036FF8 38 61 00 08 */ addi r3, r1, 8 -/* 80036FFC 48 23 01 2D */ bl atan2sX_Z__4cXyzCFv -/* 80037000 B0 7E 00 02 */ sth r3, 2(r30) -/* 80037004 80 7B 00 04 */ lwz r3, 4(r27) -/* 80037008 80 63 00 84 */ lwz r3, 0x84(r3) -/* 8003700C 80 03 00 0C */ lwz r0, 0xc(r3) -/* 80037010 7C 60 FA 14 */ add r3, r0, r31 -/* 80037014 7F 84 E3 78 */ mr r4, r28 -/* 80037018 7F A5 EB 78 */ mr r5, r29 -/* 8003701C 48 30 FD 51 */ bl PSMTXMultVec -/* 80037020 39 61 00 30 */ addi r11, r1, 0x30 -/* 80037024 48 32 B1 FD */ bl _restgpr_27 -/* 80037028 80 01 00 34 */ lwz r0, 0x34(r1) -/* 8003702C 7C 08 03 A6 */ mtlr r0 -/* 80037030 38 21 00 30 */ addi r1, r1, 0x30 -/* 80037034 4E 80 00 20 */ blr diff --git a/include/d/d_jnt_col.h b/include/d/d_jnt_col.h index ce664a66e77..9d7dfc39c08 100644 --- a/include/d/d_jnt_col.h +++ b/include/d/d_jnt_col.h @@ -8,12 +8,10 @@ class dJntColData_c {}; -class fopAc_ac_c; - class dJntCol_c { public: /* 80035C8C */ dJntCol_c(); - /* 80035CA0 */ void init(fopAc_ac_c*, dJntColData_c const*, J3DModel*, int); + /* 80035CA0 */ int init(fopAc_ac_c*, dJntColData_c const*, J3DModel*, int); /* 80035CC8 */ void setNowLine(cM3dGLin*, cXyz const*, csXyz const*, cXyz*); /* 80035DC8 */ void searchNearPos(cM3dGLin const*, cXyz const*, cXyz*, int) const; /* 80036AEC */ void getArrowOffsetPosAndAngle(cXyz const*, csXyz const*, cXyz*, cXyz*) const; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 04c14d9a6b3..d183ae6dec3 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -154,6 +154,10 @@ inline void fopAcM_SetParam(void* p_actor, u32 param) { fpcM_SetParam(p_actor, param); } +inline void fopAcM_SetJntCol(fopAc_ac_c* i_actorP, dJntCol_c* i_jntColP) { + i_actorP->mJntCol = i_jntColP; +} + inline s16 fopAcM_GetProfName(const void* pActor) { return fpcM_GetProfName(pActor); } diff --git a/src/d/d_jnt_col.cpp b/src/d/d_jnt_col.cpp index 05b7b398109..a21ea160793 100644 --- a/src/d/d_jnt_col.cpp +++ b/src/d/d_jnt_col.cpp @@ -6,29 +6,18 @@ #include "d/d_jnt_col.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_mtx.h" // // Types: // -struct mDoMtx_stack_c { - /* 8000CD64 */ void transS(cXyz const&); - /* 8000CD9C */ void transM(f32, f32, f32); - /* 8000CF0C */ void ZXYrotS(csXyz const&); - - static u8 now[48]; -}; - struct cM3dGSph { /* 80036AA4 */ ~cM3dGSph(); /* 8026F664 */ void Set(cXyz const&, f32); }; -struct cM3dGPla { - /* 8026F408 */ void crossInfLin(cXyz const&, cXyz const&, cXyz&) const; - /* 8026F4C4 */ void SetupNP0(Vec const&, Vec const&); -}; - struct cM3dGCyl { /* 8026F180 */ void Set(cXyz const&, f32, f32); }; @@ -94,26 +83,25 @@ extern "C" u8 BaseZ__4cXyz[12]; // /* 80035C8C-80035CA0 0305CC 0014+00 0/0 1/1 8/8 .text __ct__9dJntCol_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dJntCol_c::dJntCol_c() { - nofralloc -#include "asm/d/d_jnt_col/__ct__9dJntCol_cFv.s" +dJntCol_c::dJntCol_c() { + mModel = 0; + mData = 0; + field_0x8 = 0; } -#pragma pop /* 80035CA0-80035CC8 0305E0 0028+00 0/0 2/2 8/8 .text * init__9dJntCol_cFP10fopAc_ac_cPC13dJntColData_cP8J3DModeli */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dJntCol_c::init(fopAc_ac_c* param_0, dJntColData_c const* param_1, J3DModel* param_2, +int dJntCol_c::init(fopAc_ac_c* i_actorP, dJntColData_c const* i_jntColP, J3DModel* i_modelP, int param_3) { - nofralloc -#include "asm/d/d_jnt_col/init__9dJntCol_cFP10fopAc_ac_cPC13dJntColData_cP8J3DModeli.s" + mData = (dJntColData_c*)i_jntColP; + mModel = i_modelP; + field_0x8 = param_3; + field_0xc = 0; + if (i_actorP) { + fopAcM_SetJntCol(i_actorP,this); + } + return 1; } -#pragma pop /* ############################################################################################## */ /* 80451D60-80451D64 000360 0004+00 1/1 0/0 0/0 .sdata2 @3655 */ @@ -121,6 +109,23 @@ SECTION_SDATA2 static f32 lit_3655 = 500.0f; /* 80035CC8-80035DC8 030608 0100+00 2/2 0/0 0/0 .text * setNowLine__9dJntCol_cFP8cM3dGLinPC4cXyzPC5csXyzP4cXyz */ +#ifdef NONMATCHING +// regalloc, parameters are loading in wrong? +void dJntCol_c::setNowLine(cM3dGLin* param_0, cXyz const* param_1, csXyz const* param_2, + cXyz* param_3) { + + if (param_2) { + mDoMtx_stack_c::ZXYrotS(*param_2); + mDoMtx_stack_c::multVec(&cXyz::BaseZ,param_3); + } else { + *param_3 = cXyz::BaseZ; + } + + cXyz start_pos = *param_1 - *param_3 * FLOAT_LABEL(lit_3655); + cXyz end_pos = *param_1 + *param_3 * FLOAT_LABEL(lit_3655); + param_0->SetStartEnd(start_pos,end_pos); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -130,6 +135,7 @@ asm void dJntCol_c::setNowLine(cM3dGLin* param_0, cXyz const* param_1, csXyz con #include "asm/d/d_jnt_col/setNowLine__9dJntCol_cFP8cM3dGLinPC4cXyzPC5csXyzP4cXyz.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803A78F8-803A7904 004A18 000C+00 4/4 21/21 0/0 .data __vt__8cM3dGLin */ @@ -237,12 +243,11 @@ asm void dJntCol_c::getHitmarkPosAndAngle(cXyz const* param_0, csXyz const* para /* 80036FA8-80037038 0318E8 0090+00 0/0 0/0 1/1 .text * setArrowPosAndAngle__9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dJntCol_c::setArrowPosAndAngle(cXyz const* param_0, cXyz const* param_1, int param_2, - cXyz* param_3, csXyz* param_4) { - nofralloc -#include "asm/d/d_jnt_col/setArrowPosAndAngle__9dJntCol_cFPC4cXyzPC4cXyziP4cXyzP5csXyz.s" +void dJntCol_c::setArrowPosAndAngle(cXyz const* param_0, cXyz const* i_srcPos, int i_anmMtxIdx, + cXyz* param_3, csXyz* i_arrowPosP) { + cXyz dst_pos; + mDoMtx_multVecSR(mModel->i_getAnmMtx(i_anmMtxIdx),i_srcPos,&dst_pos); + i_arrowPosP->x = dst_pos.atan2sY_XZ(); + i_arrowPosP->y = dst_pos.atan2sX_Z(); + mDoMtx_multVec(mModel->i_getAnmMtx(i_anmMtxIdx),param_0,param_3); } -#pragma pop From 082f5b40af19dfe0e756bc476e05f91136f3b337 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Mon, 26 Dec 2022 22:53:24 -0700 Subject: [PATCH 2/4] d_select_cursor first pass (#221) --- ...veCenter__16dSelect_cursor_cFP7J2DPaneff.s | 15 -- .../setAlphaRate__16dSelect_cursor_cFf.s | 39 ---- ...16dSelect_cursor_cFP18J2DAnmTransformKey.s | 25 --- .../setParam__16dSelect_cursor_cFfffff.s | 7 - include/d/d_select_cursor.h | 35 +++- src/d/cc/d_cc_d_nonmatching.cpp | 2 +- src/d/d_select_cursor.cpp | 166 ++++++++++++++---- 7 files changed, 162 insertions(+), 127 deletions(-) delete mode 100644 asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s delete mode 100644 asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s delete mode 100644 asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s delete mode 100644 asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s diff --git a/asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s b/asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s deleted file mode 100644 index c875b81224e..00000000000 --- a/asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80195940: -/* 80195940 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80195944 7C 08 02 A6 */ mflr r0 -/* 80195948 90 01 00 14 */ stw r0, 0x14(r1) -/* 8019594C D0 24 00 D4 */ stfs f1, 0xd4(r4) -/* 80195950 D0 44 00 D8 */ stfs f2, 0xd8(r4) -/* 80195954 7C 83 23 78 */ mr r3, r4 -/* 80195958 81 84 00 00 */ lwz r12, 0(r4) -/* 8019595C 81 8C 00 2C */ lwz r12, 0x2c(r12) -/* 80195960 7D 89 03 A6 */ mtctr r12 -/* 80195964 4E 80 04 21 */ bctrl -/* 80195968 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8019596C 7C 08 03 A6 */ mtlr r0 -/* 80195970 38 21 00 10 */ addi r1, r1, 0x10 -/* 80195974 4E 80 00 20 */ blr diff --git a/asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s b/asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s deleted file mode 100644 index 7359654ad68..00000000000 --- a/asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s +++ /dev/null @@ -1,39 +0,0 @@ -lbl_801952A0: -/* 801952A0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 801952A4 7C 08 02 A6 */ mflr r0 -/* 801952A8 90 01 00 24 */ stw r0, 0x24(r1) -/* 801952AC DB E1 00 10 */ stfd f31, 0x10(r1) -/* 801952B0 F3 E1 00 18 */ psq_st f31, 24(r1), 0, 0 /* qr0 */ -/* 801952B4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801952B8 7C 7F 1B 78 */ mr r31, r3 -/* 801952BC FF E0 08 90 */ fmr f31, f1 -/* 801952C0 C0 02 A0 50 */ lfs f0, lit_3808(r2) -/* 801952C4 FC 1F 00 40 */ fcmpo cr0, f31, f0 -/* 801952C8 40 81 00 20 */ ble lbl_801952E8 -/* 801952CC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801952D0 48 0C 03 7D */ bl isVisible__13CPaneMgrAlphaFv -/* 801952D4 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 801952D8 40 82 00 30 */ bne lbl_80195308 -/* 801952DC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801952E0 48 0C 02 E9 */ bl show__13CPaneMgrAlphaFv -/* 801952E4 48 00 00 24 */ b lbl_80195308 -lbl_801952E8: -/* 801952E8 FF E0 00 90 */ fmr f31, f0 -/* 801952EC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801952F0 48 0C 03 5D */ bl isVisible__13CPaneMgrAlphaFv -/* 801952F4 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 801952F8 28 00 00 01 */ cmplwi r0, 1 -/* 801952FC 40 82 00 0C */ bne lbl_80195308 -/* 80195300 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 80195304 48 0C 03 05 */ bl hide__13CPaneMgrAlphaFv -lbl_80195308: -/* 80195308 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 8019530C FC 20 F8 90 */ fmr f1, f31 -/* 80195310 48 0C 04 C1 */ bl setAlphaRate__13CPaneMgrAlphaFf -/* 80195314 E3 E1 00 18 */ psq_l f31, 24(r1), 0, 0 /* qr0 */ -/* 80195318 CB E1 00 10 */ lfd f31, 0x10(r1) -/* 8019531C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80195320 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80195324 7C 08 03 A6 */ mtlr r0 -/* 80195328 38 21 00 20 */ addi r1, r1, 0x20 -/* 8019532C 4E 80 00 20 */ blr diff --git a/asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s b/asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s deleted file mode 100644 index f98dacc811a..00000000000 --- a/asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_801958E0: -/* 801958E0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801958E4 7C 08 02 A6 */ mflr r0 -/* 801958E8 90 01 00 14 */ stw r0, 0x14(r1) -/* 801958EC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801958F0 7C 9F 23 78 */ mr r31, r4 -/* 801958F4 80 63 00 04 */ lwz r3, 4(r3) -/* 801958F8 3C 80 5F 69 */ lis r4, 0x5F69 /* 0x5F69636F@ha */ -/* 801958FC 38 C4 63 6F */ addi r6, r4, 0x636F /* 0x5F69636F@l */ -/* 80195900 3C 80 73 73 */ lis r4, 0x7373 /* 0x7373656C@ha */ -/* 80195904 38 A4 65 6C */ addi r5, r4, 0x656C /* 0x7373656C@l */ -/* 80195908 81 83 00 00 */ lwz r12, 0(r3) -/* 8019590C 81 8C 00 3C */ lwz r12, 0x3c(r12) -/* 80195910 7D 89 03 A6 */ mtctr r12 -/* 80195914 4E 80 04 21 */ bctrl -/* 80195918 7F E4 FB 78 */ mr r4, r31 -/* 8019591C 81 83 00 00 */ lwz r12, 0(r3) -/* 80195920 81 8C 00 60 */ lwz r12, 0x60(r12) -/* 80195924 7D 89 03 A6 */ mtctr r12 -/* 80195928 4E 80 04 21 */ bctrl -/* 8019592C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80195930 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80195934 7C 08 03 A6 */ mtlr r0 -/* 80195938 38 21 00 10 */ addi r1, r1, 0x10 -/* 8019593C 4E 80 00 20 */ blr diff --git a/asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s b/asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s deleted file mode 100644 index 9d4e0fd83d9..00000000000 --- a/asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_801951B0: -/* 801951B0 D0 23 00 60 */ stfs f1, 0x60(r3) -/* 801951B4 D0 43 00 64 */ stfs f2, 0x64(r3) -/* 801951B8 D0 63 00 68 */ stfs f3, 0x68(r3) -/* 801951BC D0 83 00 6C */ stfs f4, 0x6c(r3) -/* 801951C0 D0 A3 00 70 */ stfs f5, 0x70(r3) -/* 801951C4 4E 80 00 20 */ blr diff --git a/include/d/d_select_cursor.h b/include/d/d_select_cursor.h index eee23d7f3a5..e9d3f70360f 100644 --- a/include/d/d_select_cursor.h +++ b/include/d/d_select_cursor.h @@ -4,6 +4,8 @@ #include "d/d_drawlist.h" #include "d/d_select_icon.h" #include "dolphin/types.h" +#include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DPane.h" class dSelect_cursorHIO_c { public: @@ -31,8 +33,8 @@ public: /* 801951B0 */ void setParam(f32, f32, f32, f32, f32); /* 801951C8 */ void setScale(f32); /* 801952A0 */ void setAlphaRate(f32); - /* 80195330 */ void addAlpha(); - /* 801953CC */ void decAlpha(); + /* 80195330 */ int addAlpha(); + /* 801953CC */ int decAlpha(); /* 80195460 */ void setBpkAnimation(J2DAnmColor*); /* 801955F0 */ void setBtk0Animation(J2DAnmTextureSRTKey*); /* 80195724 */ void setCursorAnimation(); @@ -43,15 +45,32 @@ public: /* 801949EC */ virtual ~dSelect_cursor_c(); void setPos(f32 x, f32 y) { - field_0x58 = x; - field_0x5c = y; + mPositionX = x; + mPositionY = y; } private: - u8 field_0x4[0x54]; - f32 field_0x58; - f32 field_0x5c; - u8 field_0x60[0x58]; + /* 0x04 */ J2DScreen* mpScreen; + /* 0x08 */ J2DPane* mpPane; + /* 0x0C */ dSelect_icon_c* mpSelectIcon; + /* 0x10 */ CPaneMgr* mpPaneMgr; + /* 0x14 */ u8 field_0x14[40]; + /* 0x3C */ dSelect_cursorHIO_c* mpCursorHIO; + /* 0x40 */ u8 field_0x40[16]; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 mPositionX; + /* 0x5C */ f32 mPositionY; + /* 0x60 */ f32 mParam1; + /* 0x64 */ f32 mParam2; + /* 0x68 */ f32 mParam3; + /* 0x6C */ f32 mParam4; + /* 0x70 */ f32 mParam5; + /* 0x74 */ u8 field_0x74[32]; + /* 0x94 */ f32 field_0x94[4]; + /* 0xA4 */ f32 field_0xa4[4]; + /* 0xB4 */ u8 field_0xb4; + /* 0xB5 */ s8 mNameIdx; }; #endif /* D_D_SELECT_CURSOR_H */ diff --git a/src/d/cc/d_cc_d_nonmatching.cpp b/src/d/cc/d_cc_d_nonmatching.cpp index a29adfbbb84..a67067aa585 100644 --- a/src/d/cc/d_cc_d_nonmatching.cpp +++ b/src/d/cc/d_cc_d_nonmatching.cpp @@ -235,7 +235,7 @@ cCcD_GObjInf* dCcD_GObjInf::GetAtHitGObj() { } /* 800843DC-800843FC 07ED1C 0020+00 0/0 1/1 0/0 .text ChkAtNoGuard__12dCcD_GObjInfFv */ -#ifdef NON_MATCHING +#ifdef NONMATCHING bool dCcD_GObjInf::ChkAtNoGuard() { return 12 < mGObjAt.mSpl; } diff --git a/src/d/d_select_cursor.cpp b/src/d/d_select_cursor.cpp index 28a646cc835..e01da64eb46 100644 --- a/src/d/d_select_cursor.cpp +++ b/src/d/d_select_cursor.cpp @@ -6,6 +6,7 @@ #include "d/d_select_cursor.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "d/com/d_com_inf_game.h" // // Types: @@ -74,7 +75,6 @@ extern "C" extern void* __vt__12dDlst_base_c[3]; extern "C" extern void* __vt__10J2DAnmBase[4]; extern "C" extern void* __vt__15J2DAnmTransform[5 + 4 /* padding */]; extern "C" extern void* __vt__18J2DAnmTransformKey[6]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; // // Declarations: @@ -249,6 +249,18 @@ asm dSelect_cursor_c::~dSelect_cursor_c() { #pragma pop /* 80194C30-80194CC0 18F570 0090+00 1/0 0/0 0/0 .text draw__16dSelect_cursor_cFv */ +#ifdef NONMATCHING +void dSelect_cursor_c::draw() { + mpPaneMgr->getAlphaRate(); + update(); + J2DGrafContext* gphCtx = dComIfGp_getCurrentGrafPort(); + gphCtx->setup2D(); + mpScreen->draw(FLOAT_LABEL(lit_3808),FLOAT_LABEL(lit_3808),gphCtx); + if (mpSelectIcon) { + // mpSelectIcon->drawSelf(); // inline here, but not sure how to properly define it + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -258,6 +270,7 @@ extern "C" asm void draw__16dSelect_cursor_cFv() { #include "asm/d/d_select_cursor/draw__16dSelect_cursor_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80453A54-80453A58 002054 0004+00 3/3 0/0 0/0 .sdata2 @4062 */ @@ -281,6 +294,41 @@ asm void dSelect_cursor_c::update() { SECTION_SDATA2 static f32 lit_4089 = -1.0f; /* 801950F4-801951B0 18FA34 00BC+00 0/0 30/30 0/0 .text setPos__16dSelect_cursor_cFffP7J2DPaneb */ +#ifdef NONMATCHING +void dSelect_cursor_c::setPos(f32 i_posX, f32 i_posY, J2DPane* i_pane, bool i_scaleBounds) { + mpPane = i_pane; + setPos(i_posX,i_posY); + + if (!i_pane) { + return; + } + + f32 width = i_pane->getWidth() * FLOAT_LABEL(lit_3673) * FLOAT_LABEL(lit_4062); + f32 height = i_pane->getHeight() * FLOAT_LABEL(lit_4062); + + if (i_scaleBounds) { + width *= i_pane->getScaleX(); + height *= i_pane->getScaleY(); + } + + f32 tmp7 = FLOAT_LABEL(lit_4089); + + for (int i = 0; i < 4; i++) { + + field_0x94[i] = width; + field_0xa4[i] = height; + + if (i < 2) { + field_0x94[i] *= tmp7; + } + + if ((i & 1) ^ (i >> 0x1f) == i >> 0x1f) { + field_0xa4[i] *= tmp7; + } + } + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -289,19 +337,35 @@ asm void dSelect_cursor_c::setPos(f32 param_0, f32 param_1, J2DPane* param_2, bo #include "asm/d/d_select_cursor/setPos__16dSelect_cursor_cFffP7J2DPaneb.s" } #pragma pop +#endif /* 801951B0-801951C8 18FAF0 0018+00 0/0 24/24 0/0 .text setParam__16dSelect_cursor_cFfffff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::setParam(f32 param_0, f32 param_1, f32 param_2, f32 param_3, - f32 param_4) { - nofralloc -#include "asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s" +void dSelect_cursor_c::setParam(f32 i_param1, f32 i_param2, f32 i_param3, f32 i_param4, + f32 i_param5) { + mParam1 = i_param1; + mParam2 = i_param2; + mParam3 = i_param3; + mParam4 = i_param4; + mParam5 = i_param5; } -#pragma pop /* 801951C8-801952A0 18FB08 00D8+00 0/0 14/14 0/0 .text setScale__16dSelect_cursor_cFf */ +#ifdef NONMATCHING +// first conditional has issues +void dSelect_cursor_c::setScale(f32 i_scale) { + J2DPane* pane = mpPaneMgr->getPanePtr(); + pane->scale(i_scale,i_scale); + + s8 name_idx = mNameIdx; + if ((name_idx == 1 || name_idx < 1) || (name_idx < 0 && name_idx < 4)) { + field_0x50 = mpScreen->search('ssel_ico')->getTranslateX(); + field_0x54 = mpScreen->search('ssel_ico')->getTranslateY(); + } else { + field_0x50 = 0.0f; + field_0x54 = 0.0f; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -310,40 +374,88 @@ asm void dSelect_cursor_c::setScale(f32 param_0) { #include "asm/d/d_select_cursor/setScale__16dSelect_cursor_cFf.s" } #pragma pop +#endif /* 801952A0-80195330 18FBE0 0090+00 0/0 77/77 0/0 .text setAlphaRate__16dSelect_cursor_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::setAlphaRate(f32 param_0) { - nofralloc -#include "asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s" +void dSelect_cursor_c::setAlphaRate(f32 i_alphaRate) { + if (i_alphaRate > FLOAT_LABEL(lit_3808)) { + if (mpPaneMgr->isVisible() == 0) { + mpPaneMgr->show(); + } + } else { + i_alphaRate = FLOAT_LABEL(lit_3808); + if (mpPaneMgr->isVisible() == 1) { + mpPaneMgr->hide(); + } + } + + mpPaneMgr->setAlphaRate(i_alphaRate); } -#pragma pop /* ############################################################################################## */ /* 80453A64-80453A68 002064 0004+00 2/2 0/0 0/0 .sdata2 @4157 */ SECTION_SDATA2 static f32 lit_4157 = 5.0f; /* 80195330-801953CC 18FC70 009C+00 0/0 1/1 0/0 .text addAlpha__16dSelect_cursor_cFv */ +#ifdef NONMATCHING +// matches with literals +int dSelect_cursor_c::addAlpha() { + s16 alpha_timer = mpPaneMgr->getAlphaTimer(); + + if (mpPaneMgr->isVisible() == 0) { + mpPaneMgr->show(); + } + + if (alpha_timer >= 5) { + return 1; + } else { + alpha_timer++; + mpPaneMgr->alphaAnimeStart(alpha_timer); + mpPaneMgr->setAlphaRate(alpha_timer/FLOAT_LABEL(lit_4157)); + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dSelect_cursor_c::addAlpha() { +asm int dSelect_cursor_c::addAlpha() { nofralloc #include "asm/d/d_select_cursor/addAlpha__16dSelect_cursor_cFv.s" } #pragma pop +#endif /* 801953CC-80195460 18FD0C 0094+00 0/0 1/1 0/0 .text decAlpha__16dSelect_cursor_cFv */ +#ifdef NONMATCHING +// matches with literals +int dSelect_cursor_c::decAlpha() { + s16 alpha_timer = mpPaneMgr->getAlphaTimer(); + + if (alpha_timer <= 0) { + if (mpPaneMgr->isVisible() == 1) { + mpPaneMgr->hide(); + } + return 1; + } else { + alpha_timer--; + mpPaneMgr->alphaAnimeStart(alpha_timer); + mpPaneMgr->setAlphaRate(alpha_timer/FLOAT_LABEL(lit_4157)); + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dSelect_cursor_c::decAlpha() { +asm int dSelect_cursor_c::decAlpha() { nofralloc #include "asm/d/d_select_cursor/decAlpha__16dSelect_cursor_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80394A30-80394A50 021090 0020+00 1/1 0/0 0/0 .rodata tag$4181 */ @@ -410,25 +522,15 @@ asm void dSelect_cursor_c::setCursorAnimation() { /* 801958E0-80195940 190220 0060+00 1/1 0/0 0/0 .text * setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::setBckAnimation(J2DAnmTransformKey* param_0) { - nofralloc -#include "asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s" +void dSelect_cursor_c::setBckAnimation(J2DAnmTransformKey* param_0) { + mpScreen->search('ssel_ico')->setAnimation((J2DAnmTransform*)param_0); } -#pragma pop /* 80195940-80195978 190280 0038+00 1/1 0/0 0/0 .text moveCenter__16dSelect_cursor_cFP7J2DPaneff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::moveCenter(J2DPane* param_0, f32 param_1, f32 param_2) { - nofralloc -#include "asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s" +void dSelect_cursor_c::moveCenter(J2DPane* i_pane, f32 i_x, f32 i_y) { + i_pane->translate(i_x,i_y); } -#pragma pop /* 80195978-801959C0 1902B8 0048+00 1/0 0/0 0/0 .text __dt__19dSelect_cursorHIO_cFv */ #pragma push From 8244d9a6e1aed5fb3cd96a1cbbd0f72401f2baa7 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 16:16:36 -0700 Subject: [PATCH 3/4] d_ky_thunder first pass (#223) * dThunder_c::adjustHeap and dThunder_c::createHeap * remove asm --- .../d_ky_thunder/adjustHeap__10dThunder_cFv.s | 21 ---- .../d_ky_thunder/createHeap__10dThunder_cFv.s | 26 ---- include/d/d_ky_thunder.h | 32 +++++ src/d/d_ky_thunder.cpp | 117 ++++++++---------- 4 files changed, 85 insertions(+), 111 deletions(-) delete mode 100644 asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s delete mode 100644 asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s diff --git a/asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s b/asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s deleted file mode 100644 index 7d587e2af7d..00000000000 --- a/asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_801ADFB4: -/* 801ADFB4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801ADFB8 7C 08 02 A6 */ mflr r0 -/* 801ADFBC 90 01 00 14 */ stw r0, 0x14(r1) -/* 801ADFC0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801ADFC4 7C 7F 1B 78 */ mr r31, r3 -/* 801ADFC8 4B E6 12 2D */ bl mDoExt_restoreCurrentHeap__Fv -/* 801ADFCC 80 7F 00 F8 */ lwz r3, 0xf8(r31) -/* 801ADFD0 4B E6 10 BD */ bl mDoExt_adjustSolidHeap__FP12JKRSolidHeap -/* 801ADFD4 2C 03 00 00 */ cmpwi r3, 0 -/* 801ADFD8 41 80 00 14 */ blt lbl_801ADFEC -/* 801ADFDC 80 7F 00 F8 */ lwz r3, 0xf8(r31) -/* 801ADFE0 80 83 00 38 */ lwz r4, 0x38(r3) -/* 801ADFE4 80 63 00 30 */ lwz r3, 0x30(r3) -/* 801ADFE8 48 18 D6 51 */ bl DCStoreRangeNoSync -lbl_801ADFEC: -/* 801ADFEC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801ADFF0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801ADFF4 7C 08 03 A6 */ mtlr r0 -/* 801ADFF8 38 21 00 10 */ addi r1, r1, 0x10 -/* 801ADFFC 4E 80 00 20 */ blr diff --git a/asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s b/asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s deleted file mode 100644 index 887cb6968f7..00000000000 --- a/asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_801ADF58: -/* 801ADF58 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801ADF5C 7C 08 02 A6 */ mflr r0 -/* 801ADF60 90 01 00 14 */ stw r0, 0x14(r1) -/* 801ADF64 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801ADF68 7C 7F 1B 78 */ mr r31, r3 -/* 801ADF6C 80 03 00 F8 */ lwz r0, 0xf8(r3) -/* 801ADF70 28 00 00 00 */ cmplwi r0, 0 -/* 801ADF74 40 82 00 28 */ bne lbl_801ADF9C -/* 801ADF78 38 60 00 00 */ li r3, 0 -/* 801ADF7C 38 80 00 20 */ li r4, 0x20 -/* 801ADF80 4B E6 10 C5 */ bl mDoExt_createSolidHeapFromGameToCurrent__FUlUl -/* 801ADF84 90 7F 00 F8 */ stw r3, 0xf8(r31) -/* 801ADF88 80 1F 00 F8 */ lwz r0, 0xf8(r31) -/* 801ADF8C 28 00 00 00 */ cmplwi r0, 0 -/* 801ADF90 40 82 00 0C */ bne lbl_801ADF9C -/* 801ADF94 38 60 00 00 */ li r3, 0 -/* 801ADF98 48 00 00 08 */ b lbl_801ADFA0 -lbl_801ADF9C: -/* 801ADF9C 38 60 00 01 */ li r3, 1 -lbl_801ADFA0: -/* 801ADFA0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801ADFA4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801ADFA8 7C 08 03 A6 */ mtlr r0 -/* 801ADFAC 38 21 00 10 */ addi r1, r1, 0x10 -/* 801ADFB0 4E 80 00 20 */ blr diff --git a/include/d/d_ky_thunder.h b/include/d/d_ky_thunder.h index 644c2cdecd7..fd2049b86c1 100644 --- a/include/d/d_ky_thunder.h +++ b/include/d/d_ky_thunder.h @@ -2,5 +2,37 @@ #define D_D_KY_THUNDER_H #include "dolphin/types.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "m_Do/m_Do_ext.h" + +class dThunder_c { +private: + /* 0x00 */ u8 field_0x00[0xf8]; + /* 0xF8 */ JKRSolidHeap* mpHeap; +public: + /* 801ADF58 */ int createHeap(); + /* 801ADFB4 */ void adjustHeap(); + /* 801AE458 */ int create(); + + ~dThunder_c() { + mDoExt_destroySolidHeap(mpHeap); + } + +}; + +inline int draw() { + // finish +}; + +inline int execute() { + // finish +}; + +inline int thunder_delete(dThunder_c* i_dthunderP) { + if (i_dthunderP) { + delete i_dthunderP; + } + return 1; +} #endif /* D_D_KY_THUNDER_H */ diff --git a/src/d/d_ky_thunder.cpp b/src/d/d_ky_thunder.cpp index 2bfaf8446ed..546a81f8fc1 100644 --- a/src/d/d_ky_thunder.cpp +++ b/src/d/d_ky_thunder.cpp @@ -15,28 +15,9 @@ struct mDoMtx_stack_c { static u8 now[48]; }; -struct J3DAnmTevRegKey {}; - -struct J3DMaterialTable { - /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*); -}; - -struct mDoExt_brkAnm { - /* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16); - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - struct kankyo_class {}; -struct dThunder_c { - /* 801ADF58 */ void createHeap(); - /* 801ADFB4 */ void adjustHeap(); - /* 801AE458 */ void create(); -}; + struct dRes_info_c {}; @@ -44,30 +25,6 @@ struct dRes_control_c { /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); }; -struct cXyz { - /* 80009184 */ ~cXyz(); -}; - -struct Vec {}; - -struct Z2EnvSeMgr { - /* 802C7E68 */ void startFarThunderSe(Vec*, s8); -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct JKRSolidHeap {}; - -struct J3DModelData {}; - -struct J3DModel {}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); -}; - // // Forward References: // @@ -111,9 +68,6 @@ extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); extern "C" void startFarThunderSe__10Z2EnvSeMgrFP3VecSc(); extern "C" void init__12J3DFrameCtrlFs(); extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void DCStoreRangeNoSync(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); extern "C" void __register_global_object(); extern "C" void _savegpr_27(); extern "C" void _restgpr_27(); @@ -124,9 +78,7 @@ extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 g_mEnvSeMgr[780]; extern "C" extern u8 g_Counter[12 + 4 /* padding */]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; extern "C" extern u8 struct_80451070[8]; @@ -136,24 +88,23 @@ extern "C" extern u8 struct_80451070[8]; // /* 801ADF58-801ADFB4 1A8898 005C+00 1/1 0/0 0/0 .text createHeap__10dThunder_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dThunder_c::createHeap() { - nofralloc -#include "asm/d/d_ky_thunder/createHeap__10dThunder_cFv.s" +int dThunder_c::createHeap() { + if (!mpHeap) { + mpHeap = mDoExt_createSolidHeapFromGameToCurrent(0,0x20); + if (!mpHeap) { + return 0; + } + } + return 1; } -#pragma pop /* 801ADFB4-801AE000 1A88F4 004C+00 1/1 0/0 0/0 .text adjustHeap__10dThunder_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dThunder_c::adjustHeap() { - nofralloc -#include "asm/d/d_ky_thunder/adjustHeap__10dThunder_cFv.s" +void dThunder_c::adjustHeap() { + mDoExt_restoreCurrentHeap(); + if ((s32)mDoExt_adjustSolidHeap(mpHeap) >= 0) { + DCStoreRangeNoSync(mpHeap->getStartAddr(),mpHeap->getHeapSize()); + } } -#pragma pop /* ############################################################################################## */ /* 8042E7F0-8042E7FC 05B510 000C+00 1/1 0/0 0/0 .bss @3816 */ @@ -187,6 +138,12 @@ SECTION_SDATA2 static f32 lit_3884 = -250.0f; SECTION_SDATA2 static f32 lit_3885 = 1.0f; /* 801AE000-801AE19C 1A8940 019C+00 1/0 0/0 0/0 .text dThunder_Draw__FP10dThunder_c */ +#ifdef NONMATCHING +// needs to have inline defined +void dThunder_Draw(dThunder_c* i_dthunderP) { + i_dthunderP->draw(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -195,6 +152,7 @@ static asm void dThunder_Draw(dThunder_c* param_0) { #include "asm/d/d_ky_thunder/dThunder_Draw__FP10dThunder_c.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80453E80-80453E84 002480 0004+00 2/2 0/0 0/0 .sdata2 @3923 */ @@ -219,6 +177,12 @@ SECTION_SDATA2 static f32 lit_3928 = 1.0f / 100.0f; SECTION_SDATA2 static f32 lit_3929 = 1.0f / 50.0f; /* 801AE19C-801AE374 1A8ADC 01D8+00 1/0 0/0 0/0 .text dThunder_Execute__FP10dThunder_c */ +#ifdef NONMATCHING +// needs to have inline defined +void dThunder_Execute(dThunder_c* i_dthunderP) { + i_dthunderP->execute(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -227,6 +191,7 @@ static asm void dThunder_Execute(dThunder_c* param_0) { #include "asm/d/d_ky_thunder/dThunder_Execute__FP10dThunder_c.s" } #pragma pop +#endif /* 801AE374-801AE37C 1A8CB4 0008+00 1/0 0/0 0/0 .text dThunder_IsDelete__FP10dThunder_c */ @@ -235,6 +200,12 @@ static bool dThunder_IsDelete(dThunder_c* param_0) { } /* 801AE37C-801AE3FC 1A8CBC 0080+00 1/0 0/0 0/0 .text dThunder_Delete__FP10dThunder_c */ +#ifdef NONMATCHING +// needs to have destructor defined +void dThunder_Delete(dThunder_c* i_dthunderP) { + thunder_delete(i_dthunderP); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -243,9 +214,26 @@ static asm void dThunder_Delete(dThunder_c* param_0) { #include "asm/d/d_ky_thunder/dThunder_Delete__FP10dThunder_c.s" } #pragma pop +#endif /* 801AE3FC-801AE458 1A8D3C 005C+00 1/0 0/0 0/0 .text dThunder_Create__FP12kankyo_class */ +#ifdef NONMATCHING +// regalloc +static int dThunder_Create(kankyo_class* param_0) { + dThunder_c* thunder_ptr = (dThunder_c*)param_0; + int ret = thunder_ptr->createHeap(); + + if (ret == 0) { + return 5; + } else { + ret = thunder_ptr->create(); + thunder_ptr->adjustHeap(); + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -254,6 +242,7 @@ static asm void dThunder_Create(kankyo_class* param_0) { #include "asm/d/d_ky_thunder/dThunder_Create__FP12kankyo_class.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80394F40-80394F40 0215A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -336,7 +325,7 @@ SECTION_SDATA2 static f32 lit_4099 = 3.0f / 10.0f; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dThunder_c::create() { +asm int dThunder_c::create() { nofralloc #include "asm/d/d_ky_thunder/create__10dThunder_cFv.s" } From 7cac806b68026956bc4e6d143b8c6c7e182ea58a Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 16:30:25 -0700 Subject: [PATCH 4/4] f_op_actor matches (#224) * fopEn_enemy_c::checkBallModelDraw * fopEn_enemy_c::initBallModel * fopEn_enemy_c::setBallModelEffect * fopEn_enemy_c::drawBallModel * dStage_roomDt_c::getFileListInfo * fopAc_Delete * remove asm * convert getBall* to static functions --- .../checkBallModelDraw__13fopEn_enemy_cFv.s | 11 -- ...llModel__13fopEn_enemy_cFP12dKy_tevstr_c.s | 75 --------- asm/f_op/f_op_actor/fopAc_Delete__FPv.s | 34 ----- .../getFileListInfo__15dStage_roomDt_cCFv.s | 3 - .../initBallModel__13fopEn_enemy_cFv.s | 65 -------- include/d/a/d_a_alink.h | 4 + include/d/com/d_com_inf_game.h | 4 + include/dolphin/types.h | 3 + include/f_op/f_op_actor.h | 4 +- include/m_Do/m_Do_mtx.h | 4 + src/f_op/f_op_actor.cpp | 142 +++++++++++------- 11 files changed, 105 insertions(+), 244 deletions(-) delete mode 100644 asm/f_op/f_op_actor/checkBallModelDraw__13fopEn_enemy_cFv.s delete mode 100644 asm/f_op/f_op_actor/drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c.s delete mode 100644 asm/f_op/f_op_actor/fopAc_Delete__FPv.s delete mode 100644 asm/f_op/f_op_actor/getFileListInfo__15dStage_roomDt_cCFv.s delete mode 100644 asm/f_op/f_op_actor/initBallModel__13fopEn_enemy_cFv.s diff --git a/asm/f_op/f_op_actor/checkBallModelDraw__13fopEn_enemy_cFv.s b/asm/f_op/f_op_actor/checkBallModelDraw__13fopEn_enemy_cFv.s deleted file mode 100644 index dfb3c38afdf..00000000000 --- a/asm/f_op/f_op_actor/checkBallModelDraw__13fopEn_enemy_cFv.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_800194FC: -/* 800194FC 38 80 00 00 */ li r4, 0 -/* 80019500 A0 63 05 8E */ lhz r3, 0x58e(r3) -/* 80019504 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 80019508 41 82 00 10 */ beq lbl_80019518 -/* 8001950C 70 60 00 32 */ andi. r0, r3, 0x32 -/* 80019510 40 82 00 08 */ bne lbl_80019518 -/* 80019514 38 80 00 01 */ li r4, 1 -lbl_80019518: -/* 80019518 7C 83 23 78 */ mr r3, r4 -/* 8001951C 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_actor/drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c.s b/asm/f_op/f_op_actor/drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c.s deleted file mode 100644 index e8af87579a9..00000000000 --- a/asm/f_op/f_op_actor/drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c.s +++ /dev/null @@ -1,75 +0,0 @@ -lbl_800196A0: -/* 800196A0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 800196A4 7C 08 02 A6 */ mflr r0 -/* 800196A8 90 01 00 24 */ stw r0, 0x24(r1) -/* 800196AC 39 61 00 20 */ addi r11, r1, 0x20 -/* 800196B0 48 34 8B 2D */ bl _savegpr_29 -/* 800196B4 7C 7D 1B 78 */ mr r29, r3 -/* 800196B8 7C 9E 23 78 */ mr r30, r4 -/* 800196BC 80 83 05 80 */ lwz r4, 0x580(r3) -/* 800196C0 28 04 00 00 */ cmplwi r4, 0 -/* 800196C4 41 82 00 E0 */ beq lbl_800197A4 -/* 800196C8 3B E4 00 18 */ addi r31, r4, 0x18 -/* 800196CC 4B FF FE 31 */ bl checkBallModelDraw__13fopEn_enemy_cFv -/* 800196D0 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 800196D4 41 82 00 0C */ beq lbl_800196E0 -/* 800196D8 C0 22 81 E0 */ lfs f1, lit_4505(r2) -/* 800196DC 48 00 00 08 */ b lbl_800196E4 -lbl_800196E0: -/* 800196E0 C0 22 81 F0 */ lfs f1, lit_4555(r2) -lbl_800196E4: -/* 800196E4 7F E3 FB 78 */ mr r3, r31 -/* 800196E8 C0 42 81 F4 */ lfs f2, lit_4556(r2) -/* 800196EC 48 25 70 55 */ bl cLib_chaseF__FPfff -/* 800196F0 C0 1F 00 00 */ lfs f0, 0(r31) -/* 800196F4 D0 1F 00 04 */ stfs f0, 4(r31) -/* 800196F8 C0 1F 00 00 */ lfs f0, 0(r31) -/* 800196FC D0 1F 00 08 */ stfs f0, 8(r31) -/* 80019700 80 7D 05 80 */ lwz r3, 0x580(r29) -/* 80019704 C0 1F 00 00 */ lfs f0, 0(r31) -/* 80019708 D0 03 00 18 */ stfs f0, 0x18(r3) -/* 8001970C C0 1F 00 04 */ lfs f0, 4(r31) -/* 80019710 D0 03 00 1C */ stfs f0, 0x1c(r3) -/* 80019714 C0 1F 00 08 */ lfs f0, 8(r31) -/* 80019718 D0 03 00 20 */ stfs f0, 0x20(r3) -/* 8001971C C0 3F 00 00 */ lfs f1, 0(r31) -/* 80019720 C0 02 81 F8 */ lfs f0, lit_4557(r2) -/* 80019724 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80019728 40 81 00 7C */ ble lbl_800197A4 -/* 8001972C 80 7D 05 80 */ lwz r3, 0x580(r29) -/* 80019730 38 63 00 24 */ addi r3, r3, 0x24 -/* 80019734 C0 3D 05 68 */ lfs f1, 0x568(r29) -/* 80019738 C0 5D 05 6C */ lfs f2, 0x56c(r29) -/* 8001973C C0 7D 05 70 */ lfs f3, 0x570(r29) -/* 80019740 48 32 D1 A9 */ bl PSMTXTrans -/* 80019744 3C 60 80 43 */ lis r3, g_env_light@ha /* 0x8042CA54@ha */ -/* 80019748 38 63 CA 54 */ addi r3, r3, g_env_light@l /* 0x8042CA54@l */ -/* 8001974C 80 9D 05 80 */ lwz r4, 0x580(r29) -/* 80019750 80 84 00 04 */ lwz r4, 4(r4) -/* 80019754 7F C5 F3 78 */ mr r5, r30 -/* 80019758 48 18 B6 49 */ bl setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c -/* 8001975C C0 1D 05 90 */ lfs f0, 0x590(r29) -/* 80019760 80 7D 05 84 */ lwz r3, 0x584(r29) -/* 80019764 D0 03 00 08 */ stfs f0, 8(r3) -/* 80019768 80 7D 05 80 */ lwz r3, 0x580(r29) -/* 8001976C 80 63 00 04 */ lwz r3, 4(r3) -/* 80019770 38 63 00 58 */ addi r3, r3, 0x58 -/* 80019774 80 9D 05 84 */ lwz r4, 0x584(r29) -/* 80019778 48 31 65 4D */ bl entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey -/* 8001977C C0 1D 05 90 */ lfs f0, 0x590(r29) -/* 80019780 80 7D 05 88 */ lwz r3, 0x588(r29) -/* 80019784 D0 03 00 08 */ stfs f0, 8(r3) -/* 80019788 80 7D 05 80 */ lwz r3, 0x580(r29) -/* 8001978C 80 63 00 04 */ lwz r3, 4(r3) -/* 80019790 38 63 00 58 */ addi r3, r3, 0x58 -/* 80019794 80 9D 05 88 */ lwz r4, 0x588(r29) -/* 80019798 48 31 66 D9 */ bl entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey -/* 8001979C 80 7D 05 80 */ lwz r3, 0x580(r29) -/* 800197A0 4B FF 45 25 */ bl mDoExt_modelUpdateDL__FP8J3DModel -lbl_800197A4: -/* 800197A4 39 61 00 20 */ addi r11, r1, 0x20 -/* 800197A8 48 34 8A 81 */ bl _restgpr_29 -/* 800197AC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 800197B0 7C 08 03 A6 */ mtlr r0 -/* 800197B4 38 21 00 20 */ addi r1, r1, 0x20 -/* 800197B8 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_actor/fopAc_Delete__FPv.s b/asm/f_op/f_op_actor/fopAc_Delete__FPv.s deleted file mode 100644 index 08e4f5627bc..00000000000 --- a/asm/f_op/f_op_actor/fopAc_Delete__FPv.s +++ /dev/null @@ -1,34 +0,0 @@ -lbl_80018FCC: -/* 80018FCC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80018FD0 7C 08 02 A6 */ mflr r0 -/* 80018FD4 90 01 00 14 */ stw r0, 0x14(r1) -/* 80018FD8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80018FDC 93 C1 00 08 */ stw r30, 8(r1) -/* 80018FE0 7C 7F 1B 78 */ mr r31, r3 -/* 80018FE4 80 63 00 EC */ lwz r3, 0xec(r3) -/* 80018FE8 7F E4 FB 78 */ mr r4, r31 -/* 80018FEC 48 00 94 BD */ bl fpcMtd_Delete__FP20process_method_classPv -/* 80018FF0 7C 7E 1B 78 */ mr r30, r3 -/* 80018FF4 2C 1E 00 01 */ cmpwi r30, 1 -/* 80018FF8 40 82 00 38 */ bne lbl_80019030 -/* 80018FFC 38 7F 00 C4 */ addi r3, r31, 0xc4 -/* 80019000 48 00 08 61 */ bl fopAcTg_ActorQTo__FP16create_tag_class -/* 80019004 38 7F 00 D8 */ addi r3, r31, 0xd8 -/* 80019008 48 00 74 CD */ bl fopDwTg_DrawQTo__FP16create_tag_class -/* 8001900C 7F E3 FB 78 */ mr r3, r31 -/* 80019010 48 00 11 29 */ bl fopAcM_DeleteHeap__FP10fopAc_ac_c -/* 80019014 80 6D 88 A0 */ lwz r3, m_object__7dDemo_c(r13) -/* 80019018 88 9F 04 98 */ lbz r4, 0x498(r31) -/* 8001901C 48 02 00 6D */ bl getActor__14dDemo_object_cFUc -/* 80019020 28 03 00 00 */ cmplwi r3, 0 -/* 80019024 41 82 00 0C */ beq lbl_80019030 -/* 80019028 38 80 00 00 */ li r4, 0 -/* 8001902C 48 01 F1 31 */ bl setActor__13dDemo_actor_cFP10fopAc_ac_c -lbl_80019030: -/* 80019030 7F C3 F3 78 */ mr r3, r30 -/* 80019034 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80019038 83 C1 00 08 */ lwz r30, 8(r1) -/* 8001903C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80019040 7C 08 03 A6 */ mtlr r0 -/* 80019044 38 21 00 10 */ addi r1, r1, 0x10 -/* 80019048 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_actor/getFileListInfo__15dStage_roomDt_cCFv.s b/asm/f_op/f_op_actor/getFileListInfo__15dStage_roomDt_cCFv.s deleted file mode 100644 index 93179f1b86f..00000000000 --- a/asm/f_op/f_op_actor/getFileListInfo__15dStage_roomDt_cCFv.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_800193FC: -/* 800193FC 80 63 00 24 */ lwz r3, 0x24(r3) -/* 80019400 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_actor/initBallModel__13fopEn_enemy_cFv.s b/asm/f_op/f_op_actor/initBallModel__13fopEn_enemy_cFv.s deleted file mode 100644 index a88c251d72d..00000000000 --- a/asm/f_op/f_op_actor/initBallModel__13fopEn_enemy_cFv.s +++ /dev/null @@ -1,65 +0,0 @@ -lbl_80019404: -/* 80019404 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80019408 7C 08 02 A6 */ mflr r0 -/* 8001940C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80019410 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80019414 93 C1 00 08 */ stw r30, 8(r1) -/* 80019418 7C 7E 1B 78 */ mr r30, r3 -/* 8001941C 3C 60 80 38 */ lis r3, f_op_f_op_actor__stringBase0@ha /* 0x80378878@ha */ -/* 80019420 38 63 88 78 */ addi r3, r3, f_op_f_op_actor__stringBase0@l /* 0x80378878@l */ -/* 80019424 38 80 00 25 */ li r4, 0x25 -/* 80019428 3C A0 80 40 */ lis r5, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8001942C 38 A5 61 C0 */ addi r5, r5, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80019430 3F E5 00 02 */ addis r31, r5, 2 -/* 80019434 3B FF C2 F8 */ addi r31, r31, -15624 -/* 80019438 7F E5 FB 78 */ mr r5, r31 -/* 8001943C 38 C0 00 80 */ li r6, 0x80 -/* 80019440 48 02 2E AD */ bl getRes__14dRes_control_cFPCclP11dRes_info_ci -/* 80019444 3C 80 00 08 */ lis r4, 8 -/* 80019448 3C A0 11 00 */ lis r5, 0x1100 /* 0x11000284@ha */ -/* 8001944C 38 A5 02 84 */ addi r5, r5, 0x0284 /* 0x11000284@l */ -/* 80019450 4B FF B8 05 */ bl mDoExt_J3DModel__create__FP12J3DModelDataUlUl -/* 80019454 90 7E 05 80 */ stw r3, 0x580(r30) -/* 80019458 80 9E 05 80 */ lwz r4, 0x580(r30) -/* 8001945C 28 04 00 00 */ cmplwi r4, 0 -/* 80019460 40 82 00 0C */ bne lbl_8001946C -/* 80019464 38 60 00 00 */ li r3, 0 -/* 80019468 48 00 00 7C */ b lbl_800194E4 -lbl_8001946C: -/* 8001946C 3C 60 80 43 */ lis r3, Zero__4cXyz@ha /* 0x80430CF4@ha */ -/* 80019470 C4 03 0C F4 */ lfsu f0, Zero__4cXyz@l(r3) /* 0x80430CF4@l */ -/* 80019474 D0 04 00 18 */ stfs f0, 0x18(r4) -/* 80019478 C0 03 00 04 */ lfs f0, 4(r3) -/* 8001947C D0 04 00 1C */ stfs f0, 0x1c(r4) -/* 80019480 C0 03 00 08 */ lfs f0, 8(r3) -/* 80019484 D0 04 00 20 */ stfs f0, 0x20(r4) -/* 80019488 3C 60 80 38 */ lis r3, f_op_f_op_actor__stringBase0@ha /* 0x80378878@ha */ -/* 8001948C 38 63 88 78 */ addi r3, r3, f_op_f_op_actor__stringBase0@l /* 0x80378878@l */ -/* 80019490 38 80 00 49 */ li r4, 0x49 -/* 80019494 7F E5 FB 78 */ mr r5, r31 -/* 80019498 38 C0 00 80 */ li r6, 0x80 -/* 8001949C 48 02 2E 51 */ bl getRes__14dRes_control_cFPCclP11dRes_info_ci -/* 800194A0 90 7E 05 84 */ stw r3, 0x584(r30) -/* 800194A4 80 7E 05 80 */ lwz r3, 0x580(r30) -/* 800194A8 80 83 00 04 */ lwz r4, 4(r3) -/* 800194AC 80 7E 05 84 */ lwz r3, 0x584(r30) -/* 800194B0 48 31 1D 25 */ bl searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData -/* 800194B4 3C 60 80 38 */ lis r3, f_op_f_op_actor__stringBase0@ha /* 0x80378878@ha */ -/* 800194B8 38 63 88 78 */ addi r3, r3, f_op_f_op_actor__stringBase0@l /* 0x80378878@l */ -/* 800194BC 38 80 00 41 */ li r4, 0x41 -/* 800194C0 7F E5 FB 78 */ mr r5, r31 -/* 800194C4 38 C0 00 80 */ li r6, 0x80 -/* 800194C8 48 02 2E 25 */ bl getRes__14dRes_control_cFPCclP11dRes_info_ci -/* 800194CC 90 7E 05 88 */ stw r3, 0x588(r30) -/* 800194D0 80 7E 05 80 */ lwz r3, 0x580(r30) -/* 800194D4 80 83 00 04 */ lwz r4, 4(r3) -/* 800194D8 80 7E 05 88 */ lwz r3, 0x588(r30) -/* 800194DC 48 31 23 A1 */ bl searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData -/* 800194E0 38 60 00 01 */ li r3, 1 -lbl_800194E4: -/* 800194E4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800194E8 83 C1 00 08 */ lwz r30, 8(r1) -/* 800194EC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800194F0 7C 08 03 A6 */ mtlr r0 -/* 800194F4 38 21 00 10 */ addi r1, r1, 0x10 -/* 800194F8 4E 80 00 20 */ blr diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h index f381434c6be..be42e28f57d 100644 --- a/include/d/a/d_a_alink.h +++ b/include/d/a/d_a_alink.h @@ -3278,6 +3278,10 @@ public: return getDirectionFromAngle(field_0x2fe2 - current.angle.y); } + static int getBallModelIdx() { return 0x25; } + static int getBallBtkIdx() { return 0x49; } + static int getBallBrkIdx() { return 0x41; } + bool checkRootTransClearMode() { return field_0x2f99 & 7; } bool checkRootTransZClearMode() { return field_0x2f99 & 4; } bool checkRootTransXClearMode() { return field_0x2f99 & 1; } diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index b7e094eb846..c38edee974a 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -2587,6 +2587,10 @@ inline u32 dComIfGp_particle_set(u32 param_0, u16 param_1, const cXyz* param_2, param_9, param_10, 1.0f); } +inline u32 dComIfGp_particle_set(u32 param_0, u16 param_1, const cXyz* param_2, const dKy_tevstr_c* param_3) { + return dComIfGp_particle_set(param_0,param_1,param_2,param_3,0,0,0xFF,0,0xFFFFFFFF,0,0,0); +} + inline JPABaseEmitter* dComIfGp_particle_set(u16 param_1, const cXyz* param_2, const dKy_tevstr_c* param_3, const csXyz* param_4, const cXyz* param_5, u8 param_6, dPa_levelEcallBack* param_7, s8 param_8, const GXColor* param_9, diff --git a/include/dolphin/types.h b/include/dolphin/types.h index 0144f699a6c..072a4dac123 100644 --- a/include/dolphin/types.h +++ b/include/dolphin/types.h @@ -36,4 +36,7 @@ typedef unsigned long size_t; #define INT32_MAX (0x7fffffff) #define UINT32_MAX (0xffffffff) +#define FLOAT_MIN (-1e31f) +#define FLOAT_MAX (3.40282346638528860e+38f) + #endif \ No newline at end of file diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 9c2f1a1da8a..421cca1f994 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -140,8 +140,8 @@ STATIC_ASSERT(sizeof(fopAc_ac_c) == 0x568); class fopEn_enemy_c : public fopAc_ac_c { public: - /* 80019404 */ void initBallModel(); - /* 800194FC */ void checkBallModelDraw(); + /* 80019404 */ bool initBallModel(); + /* 800194FC */ int checkBallModelDraw(); /* 80019520 */ void setBallModelEffect(dKy_tevstr_c*); /* 800196A0 */ void drawBallModel(dKy_tevstr_c*); diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index f2103edf581..9d344948f80 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -33,6 +33,10 @@ inline void mDoMtx_copy(const Mtx src, Mtx dst) { PSMTXCopy(src, dst); } +inline void mDoMtx_trans(Mtx m, f32 x, f32 y, f32 z) { + PSMTXTrans(m,x,y,z); +} + class mDoMtx_stack_c { public: /* 8000CCC8 */ static bool push(); diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp index cca5d654205..b5af90e1c7c 100644 --- a/src/f_op/f_op_actor.cpp +++ b/src/f_op/f_op_actor.cpp @@ -212,8 +212,8 @@ static int fopAc_Execute(void* actor) { fopAcM_delete(ac); } - if (ac->current.pos.y < -9.999999848243207e+30f) { - ac->current.pos.y = -9.999999848243207e+30f; + if (ac->current.pos.y < FLOAT_MIN) { + ac->current.pos.y = FLOAT_MIN; } dKy_depth_dist_set(ac); @@ -236,7 +236,6 @@ static int fopAc_IsDelete(void* actor) { } /* 80018FCC-8001904C 01390C 0080+00 1/0 0/0 0/0 .text fopAc_Delete__FPv */ -#ifdef NONMATCHING static int fopAc_Delete(void* actor) { fopAc_ac_c* ac = (fopAc_ac_c*)actor; @@ -254,16 +253,6 @@ static int fopAc_Delete(void* actor) { return deleted; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void fopAc_Delete(void* param_0) { - nofralloc -#include "asm/f_op/f_op_actor/fopAc_Delete__FPv.s" -} -#pragma pop -#endif /* ############################################################################################## */ /* 80451BD0-80451BD4 0001D0 0004+00 2/2 0/0 0/0 .sdata2 @4431 */ @@ -371,36 +360,40 @@ static asm int fopAc_Create(void* param_0) { #endif /* 800193FC-80019404 013D3C 0008+00 0/0 1/0 0/0 .text getFileListInfo__15dStage_roomDt_cCFv */ -#pragma push -#pragma force_active on -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm void dStage_roomDt_c::getFileListInfo() const { -extern "C" asm void getFileListInfo__15dStage_roomDt_cCFv() { - nofralloc -#include "asm/f_op/f_op_actor/getFileListInfo__15dStage_roomDt_cCFv.s" +dStage_FileList_dt_c* dStage_roomDt_c::getFileListInfo() const { + return mFileListInfo; } -#pragma pop /* 80019404-800194FC 013D44 00F8+00 0/0 0/0 2/2 .text initBallModel__13fopEn_enemy_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fopEn_enemy_c::initBallModel() { - nofralloc -#include "asm/f_op/f_op_actor/initBallModel__13fopEn_enemy_cFv.s" -} -#pragma pop +bool fopEn_enemy_c::initBallModel() { + void* objRes = dComIfG_getObjectRes("Alink",daAlink_c::getBallModelIdx()); + mBallModel = mDoExt_J3DModel__create((J3DModelData*)objRes, 0x80000, 0x11000284); -/* 800194FC-80019520 013E3C 0024+00 2/2 0/0 2/2 .text checkBallModelDraw__13fopEn_enemy_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fopEn_enemy_c::checkBallModelDraw() { - nofralloc -#include "asm/f_op/f_op_actor/checkBallModelDraw__13fopEn_enemy_cFv.s" + if (!mBallModel) { + return false; + } + else { + mBallModel->setBaseScale(cXyz::Zero); + + mBtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Alink",daAlink_c::getBallBtkIdx()); + mBtk->searchUpdateMaterialID(mBallModel->getModelData()); + + mBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Alink",daAlink_c::getBallBrkIdx()); + mBrk->searchUpdateMaterialID(mBallModel->getModelData()); + } + + return true; +} +/* 800194FC-80019520 013E3C 0024+00 2/2 0/0 2/2 .text checkBallModelDraw__13fopEn_enemy_cFv */ +int fopEn_enemy_c::checkBallModelDraw() { + int ret = 0; + + if ((mFlags & 1) && !(mFlags & 0x32)) { + ret = 1; + } + + return ret; } -#pragma pop /* ############################################################################################## */ /* 80451BE0-80451BE8 0001E0 0004+04 2/2 0/0 0/0 .sdata2 @4505 */ @@ -415,6 +408,29 @@ SECTION_SDATA2 static f64 lit_4507 = 4503601774854144.0 /* cast s32 to float */; /* 80019520-800196A0 013E60 0180+00 0/0 0/0 2/2 .text * setBallModelEffect__13fopEn_enemy_cFP12dKy_tevstr_c */ +#ifdef NONMATCHING +// matches with literals +void fopEn_enemy_c::setBallModelEffect(dKy_tevstr_c* param_0) { + if (mBallModel) { + field_0x590 += FLOAT_LABEL(lit_4505); + + if (field_0x590 >= mBtk->getFrameMax()) { + field_0x590 -= mBtk->getFrameMax(); + } + + if ((u8)checkBallModelDraw()) { + Vec* base_scale = mBallModel->getBaseScale(); + cLib_chaseF(&base_scale->x,FLOAT_LABEL(lit_4505),FLOAT_LABEL(lit_4431)); + f32 result = base_scale->x; + base_scale->z = result; + base_scale->y = result; + + mEffectID1 = dComIfGp_particle_set(mEffectID1, 0x86c8, &mDownPos, param_0); + mEffectID2 = dComIfGp_particle_set(mEffectID2, 0x86c9, &mDownPos, param_0); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -423,6 +439,7 @@ asm void fopEn_enemy_c::setBallModelEffect(dKy_tevstr_c* param_0) { #include "asm/f_op/f_op_actor/setBallModelEffect__13fopEn_enemy_cFP12dKy_tevstr_c.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80451BF0-80451BF4 0001F0 0004+00 1/1 0/0 0/0 .sdata2 @4555 */ @@ -445,26 +462,43 @@ SECTION_SDATA2 static f32 lit_4557[1 + 1 /* padding */] = { /* 800196A0-800197BC 013FE0 011C+00 0/0 0/0 2/2 .text * drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fopEn_enemy_c::drawBallModel(dKy_tevstr_c* param_0) { - nofralloc -#include "asm/f_op/f_op_actor/drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c.s" +void fopEn_enemy_c::drawBallModel(dKy_tevstr_c* param_0) { + f32 tmp; + + if (mBallModel) { + Vec* base_scale = mBallModel->getBaseScale(); + + if ((u8)checkBallModelDraw()) { + tmp = FLOAT_LABEL(lit_4505); + } else { + tmp = FLOAT_LABEL(lit_4555); + } + + cLib_chaseF(&base_scale->x,tmp,FLOAT_LABEL(lit_4556)); + + base_scale->y = base_scale->x; + base_scale->z = base_scale->x; + + mBallModel->setBaseScale(*base_scale); + + if (base_scale->x > FLOAT_LABEL(lit_4557)) { + mDoMtx_trans(mBallModel->getBaseTRMtx(),mDownPos.x,mDownPos.y,mDownPos.z); + i_dKy_getEnvlight()->setLightTevColorType_MAJI(mBallModel, param_0); + + mBtk->setFrame(field_0x590); + mBallModel->getModelData()->entryTexMtxAnimator(mBtk); + + mBrk->setFrame(field_0x590); + mBallModel->getModelData()->entryTevRegAnimator(mBrk); + + mDoExt_modelUpdateDL(mBallModel); + } + + } } -#pragma pop /* ############################################################################################## */ /* 80450CC0-80450CC8 0001C0 0004+04 0/0 9/9 0/0 .sbss * sInstance__35JASGlobalInstance<14JAUSectionHeap> */ extern u8 data_80450CC0[4 + 4 /* padding */]; u8 data_80450CC0[4 + 4 /* padding */]; - -/* 80378878-80378880 004ED8 0006+02 1/1 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -#pragma section ".dead" -SECTION_DEAD static char const* const stringBase_80378878 = "Alink"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_8037887E = "\0"; -#pragma pop