From 38ac3b420c2ff42a006d1f5e3b0ab061add26a6b Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Mon, 26 Dec 2022 19:23:22 -0700 Subject: [PATCH] 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