From 862b852620d301ae91478a4c2e7f4b1749f1b744 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Mon, 11 Sep 2023 20:59:34 -0400 Subject: [PATCH] Match d_a_boss_item.cpp (#14) * Match d_a_boss_item.cpp * Revert changes to isStageBossEnemy and isStageLife --- configure.py | 2 +- include/f_op/f_op_actor_mng.h | 4 +-- src/d/actor/d_a_boss_item.cpp | 67 +++++++++++++++++++++++++++++++---- 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/configure.py b/configure.py index 1e3b0c94..5524f5ac 100644 --- a/configure.py +++ b/configure.py @@ -534,7 +534,7 @@ LIBS = [ ActorRel(NonMatching, "d_a_bmdfoot"), ActorRel(NonMatching, "d_a_bmdhand"), ActorRel(NonMatching, "d_a_bo"), - ActorRel(NonMatching, "d_a_boss_item"), + ActorRel(Matching, "d_a_boss_item"), ActorRel(NonMatching, "d_a_bpw"), ActorRel(NonMatching, "d_a_bst"), ActorRel(NonMatching, "d_a_btd"), diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index a3af34d0..02318cd9 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -507,8 +507,8 @@ s32 fopAcM_createItemFromTable(cXyz const* p_pos, int i_tableNo, int i_itemBitNo s32 fopAcM_createDemoItem(const cXyz* p_pos, int itemNo, int itemBitNo, const csXyz* p_angle, int roomNo, const cXyz* scale, u8 param_7); -s32 fopAcM_createItemForBoss(const cXyz* p_pos, int param_2, int roomNo, const csXyz* p_angle, - const cXyz* p_scale, f32 speedF, f32 speedY, int param_8); +s32 fopAcM_createItemForBoss(cXyz* p_pos, int param_2, int roomNo, csXyz* p_angle, + cXyz* p_scale, int param_8); s32 fopAcM_createItemForMidBoss(const cXyz* p_pos, int i_itemNo, int i_roomNo, const csXyz* p_angle, const cXyz* p_scale, int param_6, int param_7); diff --git a/src/d/actor/d_a_boss_item.cpp b/src/d/actor/d_a_boss_item.cpp index 1fb7e046..92692c69 100644 --- a/src/d/actor/d_a_boss_item.cpp +++ b/src/d/actor/d_a_boss_item.cpp @@ -3,21 +3,74 @@ // Translation Unit: d_a_boss_item.cpp // -#include "d_a_boss_item.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_procname.h" #include "dolphin/types.h" +extern BOOL dComIfGs_isStageBossEnemy(int i_stageNo); +extern BOOL dComIfGs_isStageLife(int i_stageNo); + +class bossitem_class : public fopAc_ac_c { + s32 m0000; + s32 m0004; +}; + /* 00000078-00000080 .text daBossItem_IsDelete__FP14bossitem_class */ -void daBossItem_IsDelete(bossitem_class*) { - /* Nonmatching */ +BOOL daBossItem_IsDelete(bossitem_class* i_this) { + return TRUE; } /* 00000080-00000088 .text daBossItem_Delete__FP14bossitem_class */ -void daBossItem_Delete(bossitem_class*) { - /* Nonmatching */ +BOOL daBossItem_Delete(bossitem_class* i_this) { + return TRUE; } /* 00000088-00000128 .text daBossItem_Create__FP10fopAc_ac_c */ -void daBossItem_Create(fopAc_ac_c*) { - /* Nonmatching */ +s32 daBossItem_Create(fopAc_ac_c* i_this) { + bossitem_class* bItem = static_cast(i_this); + + fopAcM_SetupActor(bItem, bossitem_class); + + int stageNo = bItem->mBase.mParameters & 0xFF; + BOOL isStageBossDead = dComIfGs_isStageBossEnemy(stageNo); + + if (isStageBossDead && !dComIfGs_isStageLife(stageNo)) { + fopAcM_createItemForBoss( + &bItem->current.pos, + 1, + bItem->current.roomNo, + &bItem->current.angle, + 0, + 1 + ); + } + + return cPhs_ERROR_e; } +static actor_method_class daBossItem_METHODS = { + (process_method_func)daBossItem_Create, + (process_method_func)daBossItem_Delete, + (process_method_func)0, + (process_method_func)daBossItem_IsDelete, + (process_method_func)0, +}; + +extern actor_process_profile_definition g_profile_BOSSITEM = { + fpcLy_CURRENT_e, + 7, + fpcLy_CURRENT_e, + PROC_BOSSITEM, + &g_fpcLf_Method.mBase, + sizeof(bossitem_class), + 0, + 0, + &g_fopAc_Method.base, + 0x00FB, + &daBossItem_METHODS, + 0x00040000, + fopAc_ACTOR_e, + fopAc_CULLBOX_0_e, +};