From 7cac806b68026956bc4e6d143b8c6c7e182ea58a Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 16:30:25 -0700 Subject: [PATCH] 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