summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_switem.cpp
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2023-10-27 02:57:29 -0400
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2023-10-27 02:57:29 -0400
commit35e8bd76bdd63ba76bc47199724b0262919188b3 (patch)
tree3f0b998871ee48b2504dfb8211082b8b7d2f8564 /src/d/actor/d_a_switem.cpp
parent828c8672e0436d7dd14eacb85d6123bec085bbd7 (diff)
d_a_switem OK
Diffstat (limited to 'src/d/actor/d_a_switem.cpp')
-rw-r--r--src/d/actor/d_a_switem.cpp352
1 files changed, 216 insertions, 136 deletions
diff --git a/src/d/actor/d_a_switem.cpp b/src/d/actor/d_a_switem.cpp
index fb007373..afc260ff 100644
--- a/src/d/actor/d_a_switem.cpp
+++ b/src/d/actor/d_a_switem.cpp
@@ -3,171 +3,251 @@
// Translation Unit: d_a_switem.cpp
//
-#include "d_a_switem.h"
-#include "dolphin/types.h"
+#include "f_op/f_op_actor_mng.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "d/d_procname.h"
+#include "d/d_cc_d.h"
+#include "f_op/f_op_draw_tag.h"
+#include "d/d_com_inf_game.h"
+#include "d/d_item.h"
+#include "d/actor/d_a_item.h"
+
+class daSwItem_c : public fopAc_ac_c {
+public:
+ bool _delete();
+ BOOL CreateInit();
+ s32 _create();
+ bool _execute();
+ BOOL isRupeeInAllCreateTable(int);
+ bool _draw();
+
+public:
+ /* 0x290 */ u8 m290[0x29C - 0x290];
+ /* 0x29C */ dCcD_Stts mStts;
+ /* 0x2D8 */ dCcD_Cyl mCyl;
+ /* 0x408 */ u8 mAtTypeTrigger;
+ /* 0x409 */ bool mSpawnedItem;
+ /* 0x40A */ u8 field_40A[0x40C - 0x40A];
+};
+
+namespace daSwItem_prm {
+ inline u32 getAtType(daSwItem_c* item) { return (fopAcM_GetParam(item) >> 0x00) & 0xFF; }
+ inline u32 getItemTbl(daSwItem_c* item) { return (fopAcM_GetParam(item) >> 0x08) & 0x3F; }
+ inline u32 getItemBitNo(daSwItem_c* item) { return (fopAcM_GetParam(item) >> 0x0E) & 0x7F; }
+}
+
+static dCcD_SrcCyl l_cyl_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ AT_TYPE_ALL,
+ /* SrcObjTg SPrm */ 0x09,
+ /* SrcObjCo SPrm */ 0,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ 0,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt GFlag */ 0,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg GFlag */ 0x04,
+ /* SrcGObjCo GFlag */ 0,
+ },
+ // cM3dGCylS
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 25.0f,
+ /* Height */ 50.0f,
+ },
+};
/* 00000078-00000080 .text _delete__10daSwItem_cFv */
-void daSwItem_c::_delete() {
- /* Nonmatching */
+bool daSwItem_c::_delete() {
+ return true;
}
/* 00000080-00000154 .text CreateInit__10daSwItem_cFv */
-void daSwItem_c::CreateInit() {
- /* Nonmatching */
+BOOL daSwItem_c::CreateInit() {
+ int itemBitNo = daSwItem_prm::getItemBitNo(this);
+ mAtTypeTrigger = daSwItem_prm::getAtType(this);
+
+ mStts.Init(0xFF, 0xFF, this);
+ mCyl.Set(l_cyl_src);
+ mCyl.SetStts(&mStts);
+ mCyl.SetR(mScale.x * 25.0f);
+ mCyl.SetH(mScale.y * 50.0f);
+
+ if (fopAcM_isItem(this, itemBitNo) && itemBitNo != 0x7F) {
+ return FALSE;
+ }
+
+ fopDwTg_DrawQTo(&mDwTg);
+ return TRUE;
}
/* 00000154-00000250 .text _create__10daSwItem_cFv */
-void daSwItem_c::_create() {
- /* Nonmatching */
-}
-
-/* 00000250-0000031C .text __dt__8dCcD_CylFv */
-dCcD_Cyl::~dCcD_Cyl() {
- /* Nonmatching */
-}
-
-/* 0000031C-00000364 .text __dt__8cM3dGCylFv */
-cM3dGCyl::~cM3dGCyl() {
- /* Nonmatching */
-}
-
-/* 00000364-000003C0 .text __dt__14cCcD_ShapeAttrFv */
-cCcD_ShapeAttr::~cCcD_ShapeAttr() {
- /* Nonmatching */
-}
-
-/* 000003C0-00000408 .text __dt__8cM3dGAabFv */
-cM3dGAab::~cM3dGAab() {
- /* Nonmatching */
+s32 daSwItem_c::_create() {
+ fopAcM_SetupActor(this, daSwItem_c);
+
+ if (!CreateInit()) {
+ return cPhs_ERROR_e;
+ }
+
+ return cPhs_COMPLEATE_e;
}
/* 00000408-000006DC .text _execute__10daSwItem_cFv */
-void daSwItem_c::_execute() {
- /* Nonmatching */
+bool daSwItem_c::_execute() {
+ /* Nonmatching */
+ bool triggered = false;
+ if (mCyl.ChkTgHit()) {
+ cCcD_Obj* obj = mCyl.GetTgHitObj();
+ if(obj) {
+ switch (mAtTypeTrigger) {
+ case 0xFF:
+ triggered = true;
+ break;
+ case 0:
+ if (obj->ChkAtType(AT_TYPE_SWORD) || obj->ChkAtType(AT_TYPE_BOKO_STICK) ||
+ obj->ChkAtType(AT_TYPE_STALFOS_MACE) || obj->ChkAtType(AT_TYPE_MACHETE) ||
+ obj->ChkAtType(AT_TYPE_DARKNUT_SWORD))
+ {
+ triggered = true;
+ }
+ break;
+ case 1:
+ if (obj->ChkAtType(AT_TYPE_BOMB)) {
+ triggered = true;
+ }
+ break;
+ case 2:
+ if (obj->ChkAtType(AT_TYPE_BOOMERANG)) {
+ triggered = true;
+ }
+ break;
+ case 3:
+ if (obj->ChkAtType(AT_TYPE_SKULL_HAMMER)) {
+ triggered = true;
+ }
+ break;
+ case 4:
+ if (obj->ChkAtType(AT_TYPE_FIRE_ARROW) || obj->ChkAtType(AT_TYPE_ICE_ARROW) ||
+ obj->ChkAtType(AT_TYPE_LIGHT_ARROW) || obj->ChkAtType(AT_TYPE_NORMAL_ARROW))
+ {
+ triggered = true;
+ }
+ break;
+ case 5:
+ if (obj->ChkAtType(0x8000)) {
+ triggered = true;
+ }
+ break;
+ }
+ }
+ }
+
+ if (triggered && !mSpawnedItem) {
+ int itemTbl = daSwItem_prm::getItemTbl(this);
+ int itemBitNo = daSwItem_prm::getItemBitNo(this);
+ if (fopAcM_isItem(this, daSwItem_prm::getItemBitNo(this))) {
+ itemBitNo = 0x7F;
+ }
+
+ csXyz angle(0, orig.angle.y, 0);
+ u32 itemProcId = fopAcM_createItemFromTable(
+ &current.pos, itemTbl, itemBitNo,
+ fopAcM_GetHomeRoomNo(this), 0, &angle, 1, NULL
+ );
+
+ daItem_c* item = (daItem_c*)fopAcM_SearchByID(itemProcId);
+ if(item) {
+ if (isRupee(item->getItemNo()) || isRupeeInAllCreateTable(itemTbl)) {
+ fopAcM_seStart(this, JA_SE_OBJ_LUPY_OUT, 0);
+ } else {
+ fopAcM_seStart(this, JA_SE_OBJ_ITEM_OUT, 0);
+ }
+ }
+
+ mSpawnedItem = true;
+ }
+
+ mCyl.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mCyl);
+
+ return true;
}
/* 000006DC-0000076C .text isRupeeInAllCreateTable__10daSwItem_cFi */
-void daSwItem_c::isRupeeInAllCreateTable(int) {
- /* Nonmatching */
+BOOL daSwItem_c::isRupeeInAllCreateTable(int param_1) {
+ ItemTableList* itemTableList = dComIfGp_getItemTable();
+ if (param_1 >= 0x20 && param_1 <= 0x3E && itemTableList) {
+ u8* itemNo = itemTableList->mItemTables[param_1 - 0x20];
+ for (int i = 0; i < 0x10; i++) {
+ if (isRupee(*itemNo)) {
+ return true;
+ }
+ itemNo++;
+ }
+ }
+ return false;
}
/* 0000076C-00000774 .text _draw__10daSwItem_cFv */
-void daSwItem_c::_draw() {
- /* Nonmatching */
+bool daSwItem_c::_draw() {
+ return true;
}
/* 00000774-00000794 .text daSwItem_Create__FPv */
-void daSwItem_Create(void*) {
- /* Nonmatching */
+static BOOL daSwItem_Create(void* i_this) {
+ return static_cast<daSwItem_c*>(i_this)->_create();
}
/* 00000794-000007B8 .text daSwItem_Delete__FPv */
-void daSwItem_Delete(void*) {
- /* Nonmatching */
+static BOOL daSwItem_Delete(void* i_this) {
+ return static_cast<daSwItem_c*>(i_this)->_delete();
}
/* 000007B8-000007DC .text daSwItem_Draw__FPv */
-void daSwItem_Draw(void*) {
- /* Nonmatching */
+static BOOL daSwItem_Draw(void* i_this) {
+ return static_cast<daSwItem_c*>(i_this)->_draw();
}
/* 000007DC-00000800 .text daSwItem_Execute__FPv */
-void daSwItem_Execute(void*) {
- /* Nonmatching */
+static BOOL daSwItem_Execute(void* i_this) {
+ return static_cast<daSwItem_c*>(i_this)->_execute();
}
/* 00000800-00000808 .text daSwItem_IsDelete__FPv */
-void daSwItem_IsDelete(void*) {
- /* Nonmatching */
-}
-
-/* 00000808-00000818 .text GetShapeAttr__8dCcD_CylFv */
-void dCcD_Cyl::GetShapeAttr() {
- /* Nonmatching */
-}
-
-/* 00000818-00000820 .text GetCoCP__12cCcD_CylAttrFv */
-void cCcD_CylAttr::GetCoCP() {
- /* Nonmatching */
-}
-
-/* 00000820-00000828 .text GetCoCP__12cCcD_CylAttrCFv */
-void cCcD_CylAttr::GetCoCP() const {
- /* Nonmatching */
-}
-
-/* 00000828-00000830 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */
-void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const {
- /* Nonmatching */
-}
-
-/* 00000830-00000838 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */
-void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const {
- /* Nonmatching */
-}
-
-/* 00000838-00000870 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */
-void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const {
- /* Nonmatching */
-}
-
-/* 00000870-00000878 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */
-void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const {
- /* Nonmatching */
-}
-
-/* 00000878-00000880 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */
-void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const {
- /* Nonmatching */
-}
-
-/* 00000880-00000888 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */
-void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const {
- /* Nonmatching */
-}
-
-/* 00000888-000008C0 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */
-void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const {
- /* Nonmatching */
-}
-
-/* 000008C0-000008C4 .text GetGObjInf__12cCcD_GObjInfCFv */
-void cCcD_GObjInf::GetGObjInf() const {
- /* Nonmatching */
-}
-
-/* 000008C4-000008CC .text GetShapeAttr__8cCcD_ObjCFv */
-void cCcD_Obj::GetShapeAttr() const {
- /* Nonmatching */
-}
-
-/* 000008CC-000008D4 .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */
-void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const {
- /* Nonmatching */
-}
-
-/* 000008D4-000008DC .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */
-void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const {
- /* Nonmatching */
-}
-
-/* 000008DC-000008E8 .text GetCoCP__14cCcD_ShapeAttrFv */
-void cCcD_ShapeAttr::GetCoCP() {
- /* Nonmatching */
-}
-
-/* 000008E8-000008F4 .text GetCoCP__14cCcD_ShapeAttrCFv */
-void cCcD_ShapeAttr::GetCoCP() const {
- /* Nonmatching */
-}
-
-/* 000008F4-000008FC .text @280@__dt__8dCcD_CylFv */
-void @280@__dt__8dCcD_CylFv {
- /* Nonmatching */
-}
-
-/* 000008FC-00000904 .text @248@__dt__8dCcD_CylFv */
-void @248@__dt__8dCcD_CylFv {
- /* Nonmatching */
-}
-
+static BOOL daSwItem_IsDelete(void* i_this) {
+ return TRUE;
+}
+
+static actor_method_class daSwItemMethodTable = {
+ (process_method_func)daSwItem_Create,
+ (process_method_func)daSwItem_Delete,
+ (process_method_func)daSwItem_Execute,
+ (process_method_func)daSwItem_IsDelete,
+ (process_method_func)daSwItem_Draw,
+};
+
+actor_process_profile_definition g_profile_SW_ITEM = {
+ /* LayerID */ fpcLy_CURRENT_e,
+ /* ListID */ 7,
+ /* ListPrio */ fpcLy_CURRENT_e,
+ /* ProcName */ PROC_SW_ITEM,
+ /* Proc SubMtd */ &g_fpcLf_Method.mBase,
+ /* Size */ sizeof(daSwItem_c),
+ /* SizeOther */ 0,
+ /* Parameters */ 0,
+ /* Leaf SubMtd */ &g_fopAc_Method.base,
+ /* Priority */ 0x013A,
+ /* Actor SubMtd */ &daSwItemMethodTable,
+ /* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
+ /* Group */ fopAc_ACTOR_e,
+ /* CullType */ fopAc_CULLBOX_CUSTOM_e,
+};