From d330c1e68a49a01250a085b525ce4859bd2da17d Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 11 Jan 2025 19:15:36 -0500 Subject: [PATCH] Add enums for items and disappears --- include/d/actor/d_a_item.h | 2 +- include/f_op/f_op_actor_mng.h | 55 +++++++++++++---- src/d/actor/d_a_disappear.cpp | 26 ++++---- src/d/actor/d_a_item.cpp | 72 +++++++++++----------- src/d/actor/d_a_obj_movebox.cpp | 16 +++-- src/d/actor/d_a_switem.cpp | 3 +- src/d/d_grass.cpp | 2 +- src/f_op/f_op_actor_mng.cpp | 102 ++++++++++++++++---------------- 8 files changed, 159 insertions(+), 119 deletions(-) diff --git a/include/d/actor/d_a_item.h b/include/d/actor/d_a_item.h index df2ba274c..f374f2e8e 100644 --- a/include/d/actor/d_a_item.h +++ b/include/d/actor/d_a_item.h @@ -107,7 +107,7 @@ public: /* 0x648 */ s32 mSpawnSwitchNo; /* 0x64C */ s32 mCollideSwitchNo; /* 0x650 */ f32 field_0x650; - /* 0x654 */ s16 field_0x654; + /* 0x654 */ s16 mRotateSpeed; /* 0x656 */ s16 mTargetAngleX; /* 0x658 */ s16 mWaitTimer; /* 0x65A */ s16 mDisappearTimer; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index a32c65be3..ebb2b0de7 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -66,6 +66,40 @@ struct fopAcM_search_prm { /* 0x08 */ u32 mParameter; }; +enum daItemType_e { + daItemType_0_e = 0, + daItemType_1_e = 1, + daItemType_3_e = 3, +}; + +enum daItemAction_e { + daItemAct_0_e = 0, + daItemAct_1_e = 1, + daItemAct_2_e = 2, + daItemAct_3_e = 3, + daItemAct_4_e = 4, + daItemAct_BOSS_DISAPPEAR_e = 5, + daItemAct_6_e = 6, + daItemAct_7_e = 7, + daItemAct_8_e = 8, + daItemAct_9_e = 9, + daItemAct_A_e = 10, + daItemAct_B_e = 11, + daItemAct_BOSS_e = 12, +}; + +enum daDisappearItemType_e { + daDisItem_NORMAL_e = 0, + daDisItem_NONE1_e = 1, + daDisItem_HEART_CONTAINER_e = 2, + daDisItem_NONE3_e = 3, + daDisItem_UNK4_e = 4, + daDisItem_HEART_e = 10, + daDisItem_MAGIC_e = 11, + daDisItem_ARROW_e = 12, + daDisItem_UNK13_e = 13, +}; + class l_HIO { public: ~l_HIO() {} @@ -74,7 +108,6 @@ public: void erase() {} }; -class dKy_tevstr_c; typedef int (*heapCallbackFunc)(fopAc_ac_c*); typedef int (*createFunc)(void*); @@ -534,8 +567,8 @@ fpc_ProcID fopAcM_createItemForPresentDemo(cXyz* p_pos, int i_itemNo, u8 argFlag fpc_ProcID fopAcM_createItemForTrBoxDemo(cXyz* p_pos, int i_itemNo, int i_itemBitNo = -1, int i_roomNo = -1, csXyz* p_angle = NULL, cXyz* p_scale = NULL); -fpc_ProcID fopAcM_createItemFromTable(cXyz* p_pos, int i_tableNo, int i_itemBitNo, int i_roomNo, int, - csXyz* p_angle, int, cXyz* p_scale = NULL); +fpc_ProcID fopAcM_createItemFromTable(cXyz* p_pos, int i_tableNo, int i_itemBitNo, int i_roomNo, int type, + csXyz* p_angle, int action, cXyz* p_scale = NULL); fpc_ProcID fopAcM_createRaceItemFromTable(cXyz* pos, int i_itemNo, int i_itemBitNo, int i_roomNo, csXyz* angle, cXyz* scale, int param_7); @@ -551,21 +584,21 @@ fpc_ProcID fopAcM_createIball(cXyz* p_pos, int itemTableIdx, int roomNo, csXyz* fpc_ProcID fopAcM_createDemoItem(cXyz* p_pos, int itemNo, int itemBitNo, csXyz* p_angle, int roomNo, cXyz* scale, u8 argFlag); -fpc_ProcID fopAcM_createItemForBoss(cXyz* p_pos, int param_2, int roomNo, csXyz* p_angle, - cXyz* p_scale = NULL, int param_8 = 0); +fpc_ProcID fopAcM_createItemForBoss(cXyz* p_pos, int unused, int roomNo, csXyz* p_angle, + cXyz* p_scale, int param_8); daItem_c* fopAcM_createItemForSimpleDemo(cXyz* p_pos, int i_itemNo, int i_roomNo, csXyz* p_angle, cXyz* p_scale, f32 speedF, f32 speedY); -fpc_ProcID fopAcM_createItem(cXyz* p_pos, int itemNo, int param_3, int roomNo, int type, csXyz* p_angle, +fpc_ProcID fopAcM_createItem(cXyz* p_pos, int itemNo, int itemBitNo, int roomNo, int type, csXyz* p_angle, int action, cXyz* p_scale = NULL); -void* fopAcM_fastCreateItem2(cXyz* p_pos, int itemNo, int param_3, int roomNo, int param_5, - csXyz* p_angle, int, cXyz* p_scale = NULL); +void* fopAcM_fastCreateItem2(cXyz* p_pos, int itemNo, int itemBitNo, int roomNo, int type, + csXyz* p_angle, int action, cXyz* p_scale = NULL); void* fopAcM_fastCreateItem(cXyz* p_pos, int i_itemNo, int i_roomNo, csXyz* p_angle, - cXyz* p_scale, f32 p_speedF, f32 p_speedY, f32 param_8, - int param_9 = -1, createFunc p_createFunc = NULL); + cXyz* p_scale, f32 speedF, f32 speedY, f32 gravity, + int i_itemBitNo = -1, createFunc p_createFunc = NULL); void* fopAcM_createStealItem(cXyz* p_pos, int i_tblNo, int i_roomNo, csXyz* p_angle, int i_itemBitNo); @@ -584,7 +617,7 @@ static const char* fopAcM_getProcNameString(fopAc_ac_c* p_actor); static fopAc_ac_c* fopAcM_findObjectCB(fopAc_ac_c* p_actor, void* p_data); -fopAc_ac_c* fopAcM_searchFromName(char* name, u32 param0, u32 param1); +fopAc_ac_c* fopAcM_searchFromName(char* name, u32 paramMask, u32 parameter); fopAc_ac_c* fopAcM_findObject4EventCB(fopAc_ac_c* p_actor, void* p_data); diff --git a/src/d/actor/d_a_disappear.cpp b/src/d/actor/d_a_disappear.cpp index 0ae30b48f..6ceca7f53 100644 --- a/src/d/actor/d_a_disappear.cpp +++ b/src/d/actor/d_a_disappear.cpp @@ -21,22 +21,22 @@ static BOOL daDisappear_Execute(disappear_class* i_this) { i_this->mTimer--; if (i_this->mTimer == 0) { - s8 health = i_this->health; // TODO: add enum for disappear types (stored in health) + s8 dropType = i_this->health; - if (health != 1 && health != 3) { - if (health == 2) { - fopAcM_createItemForBoss(&i_this->current.pos, 0, i_this->current.roomNo, &i_this->current.angle); + if (dropType != daDisItem_NONE1_e && dropType != daDisItem_NONE3_e) { + if (dropType == daDisItem_HEART_CONTAINER_e) { + fopAcM_createItemForBoss(&i_this->current.pos, 0, i_this->current.roomNo, &i_this->current.angle, NULL, 0); } - else if (health >= 0x0A && health <= 0x0D) { + else if (dropType >= daDisItem_HEART_e && dropType <= daDisItem_UNK13_e) { // Special type for Keese (ki) spawned in the Puppet Ganon fight. - if (health < 0x0D) { - static u32 ki_item_d[] = { - dItem_HEART_e, - L_MAGIC, - ARROW_10, - }; - - fopAcM_createItem(&i_this->current.pos, ki_item_d[health - 0xA], -1, -1, 0, NULL, 4); + // This also seems to be used by several other enemies, such as Molgera's spawn. + static u32 ki_item_d[] = { + dItem_HEART_e, + L_MAGIC, + ARROW_10, + }; + if (dropType < daDisItem_HEART_e + (int)ARRAY_SIZE(ki_item_d)) { + fopAcM_createItem(&i_this->current.pos, ki_item_d[dropType - daDisItem_HEART_e], -1, -1, daItemType_0_e, NULL, daItemAct_4_e); } } else { diff --git a/src/d/actor/d_a_item.cpp b/src/d/actor/d_a_item.cpp index 545efb803..573dfdd6a 100644 --- a/src/d/actor/d_a_item.cpp +++ b/src/d/actor/d_a_item.cpp @@ -159,7 +159,7 @@ void daItem_c::CreateInit() { mItemStatus = STATUS_UNK0; mType = daItem_prm::getType(this); - if (daItem_prm::getType(this) == 3 || daItem_prm::getType(this) == 1) { + if (daItem_prm::getType(this) == daItemType_3_e || daItem_prm::getType(this) == daItemType_1_e) { setFlag(FLAG_UNK02); } mAction = daItem_prm::getAction(this); @@ -309,7 +309,7 @@ void daItem_c::mode_proc_call() { &daItem_c::mode_water, }; - if (mType == 1) { + if (mType == daItemType_1_e) { itemDefaultRotateY(); } else { (this->*mode_proc[mMode])(); @@ -333,8 +333,8 @@ void daItem_c::mode_proc_call() { } } - if (mType == 1 && (fopAcM_checkHookCarryNow(this) || checkFlag(FLAG_BOOMERANG))) { - mType = 3; + if (mType == daItemType_1_e && (fopAcM_checkHookCarryNow(this) || checkFlag(FLAG_BOOMERANG))) { + mType = daItemType_3_e; } } @@ -430,7 +430,7 @@ void daItem_c::execMainGetDemoDirection() { /* 800F5D44-800F5D88 .text execBringNezumi__8daItem_cFv */ void daItem_c::execBringNezumi() { - if (mType != 1) { + if (mType != daItemType_1_e) { fopAcM_posMoveF(this, mStts.GetCCMoveP()); } mode_proc_call(); @@ -439,7 +439,7 @@ void daItem_c::execBringNezumi() { /* 800F5D88-800F5F40 .text execWaitMain__8daItem_cFv */ void daItem_c::execWaitMain() { checkGetItem(); - if (mType != 1) { + if (mType != daItemType_1_e) { fopAcM_posMoveF(this, mStts.GetCCMoveP()); } mode_proc_call(); @@ -474,7 +474,7 @@ void daItem_c::execWaitMain() { /* 800F5F40-800F5FC0 .text execWaitMainFromBoss__8daItem_cFv */ void daItem_c::execWaitMainFromBoss() { checkGetItem(); - if (mType != 1) { + if (mType != daItemType_1_e) { fopAcM_posMoveF(this, mStts.GetCCMoveP()); } mode_proc_call(); @@ -853,16 +853,16 @@ BOOL daItem_c::itemActionForRupee() { field_0x650 = speed.y; } - field_0x654 = getData()->mRotateXSpeed; + mRotateSpeed = getData()->mRotateXSpeed; if (mOnGroundTimer == 0) { - mTargetAngleX = current.angle.x + field_0x654; + mTargetAngleX = current.angle.x + mRotateSpeed; } else { mTargetAngleX = 0; } if (!checkFlag(FLAG_UNK02)) { - cLib_chaseAngleS(¤t.angle.x, mTargetAngleX, field_0x654); + cLib_chaseAngleS(¤t.angle.x, mTargetAngleX, mRotateSpeed); } return TRUE; @@ -903,7 +903,7 @@ BOOL daItem_c::itemActionForKey() { speedF = 0.0f; current.angle.x = 0x4000; mTargetAngleX = current.angle.x; - field_0x654 = 0; + mRotateSpeed = 0; } else { speed.set(0.0f, -temp2, 0.0f); } @@ -924,15 +924,15 @@ BOOL daItem_c::itemActionForKey() { field_0x650 = speed.y; } - field_0x654 = getData()->mRotateXSpeed; + mRotateSpeed = getData()->mRotateXSpeed; if (mOnGroundTimer == 0) { - mTargetAngleX = current.angle.x + field_0x654; + mTargetAngleX = current.angle.x + mRotateSpeed; } else { mTargetAngleX = 0; } - cLib_chaseAngleS(¤t.angle.x, mTargetAngleX, field_0x654); + cLib_chaseAngleS(¤t.angle.x, mTargetAngleX, mRotateSpeed); return TRUE; } @@ -1079,10 +1079,10 @@ BOOL daItem_c::itemActionForArrow() { if (mOnGroundTimer != 0) { getData(); s16 rotationSpeed = 0xFFFF / getData()->mRotateYSpeed; - cLib_addCalcAngleS(&field_0x654, rotationSpeed, 10, 0x400, 0x100); + cLib_addCalcAngleS(&mRotateSpeed, rotationSpeed, 10, 0x400, 0x100); } - cLib_chaseAngleS(&shape_angle.y, shape_angle.y + field_0x654, field_0x654); + cLib_chaseAngleS(&shape_angle.y, shape_angle.y + mRotateSpeed, mRotateSpeed); } if (speed.y != 0.0f) { @@ -1226,7 +1226,7 @@ void daItem_c::mode_water_init() { current.angle.z = 0; current.angle.x = 0; mExtraZRot = 0; - field_0x654 = 0; + mRotateSpeed = 0; clrFlag(FLAG_UNK04); scale.set(mScaleTarget.x, mScaleTarget.y, mScaleTarget.z); @@ -1333,26 +1333,26 @@ BOOL daItem_c::initAction() { scale.set(mScaleTarget.x, mScaleTarget.y, mScaleTarget.z); switch (mAction) { - case 4: { + case daItemAct_4_e: { current.angle.y = cM_rndF((f32)0xFFFF); f32 temp = getData()->field_0x2C + cM_rndF(5.0f); speedF = cM_rndF(getData()->field_0x30); speed.set(0.0f, temp, 0.0f); break; } - case 5: + case daItemAct_BOSS_DISAPPEAR_e: speed.setall(0.0f); speedF = 0.0f; scale.setall(0.0f); mItemStatus = STATUS_WAIT_BOSS1; fopAcM_OnStatus(this, fopAcStts_UNK4000_e); - field_0x654 = 0x4A8; + mRotateSpeed = 0x4A8; break; - case 0xC: + case daItemAct_BOSS_e: scale.setall(1.0f); mItemStatus = STATUS_WAIT_BOSS2; fopAcM_OnStatus(this, fopAcStts_UNK4000_e); - field_0x654 = 0x4A8; + mRotateSpeed = 0x4A8; break; } @@ -1363,10 +1363,12 @@ BOOL daItem_c::initAction() { return TRUE; } - // TODO: bug? usage of uninitialized register f31 in some cases + // Bug: Usage of uninitialized variable y_speed (register f31) in some cases. + // In practice only daItem_c::CreateInit calls daItem_c::initAction, which means y_speed will + // be set to the item's collision height if the action is 0, 5, or 0xA. f32 y_speed; switch (mAction) { - case 1: + case daItemAct_1_e: y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f); speedF = getData()->mSpeedH / 10.0f; if (g_mDoCPd_cpadInfo[0].mMainStickValue) { @@ -1374,43 +1376,43 @@ BOOL daItem_c::initAction() { } current.angle.y = cM_rndF((f32)0xFFFF); break; - case 3: + case daItemAct_3_e: y_speed = 25.0f; current.angle.y = cM_rndF((f32)0xFFFF); speedF = getData()->mVelocityScale; break; - case 7: + case daItemAct_7_e: speedF = getData()->mVelocityScale * 1.5f; current.angle.y = cM_rndF((f32)0xFFFF); y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f); break; - case 2: - case 4: - case 9: + case daItemAct_2_e: + case daItemAct_4_e: + case daItemAct_9_e: speedF = 0.0f; current.angle.y = cM_rndF((f32)0xFFFF); y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f); break; - case 8: + case daItemAct_8_e: current.angle.y = cM_rndF((f32)0xFFFF); y_speed = getData()->field_0x44 + cM_rndFX(5.0f); speedF = getData()->mVelocityScale; break; - case 0xA: + case daItemAct_A_e: gravity = getData()->mGravity; scale.setall(0.0f); mMode = MODE_WAIT; break; - case 0xB: + case daItemAct_B_e: current.angle.y = cM_rndF((f32)0xFFFF); y_speed = 0.0f; speedF = 0.0f; break; - case 6: + case daItemAct_6_e: y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f); break; - case 0: - case 5: + case daItemAct_0_e: + case daItemAct_BOSS_DISAPPEAR_e: break; } diff --git a/src/d/actor/d_a_obj_movebox.cpp b/src/d/actor/d_a_obj_movebox.cpp index 79886801b..ea20f62b7 100644 --- a/src/d/actor/d_a_obj_movebox.cpp +++ b/src/d/actor/d_a_obj_movebox.cpp @@ -1260,7 +1260,7 @@ namespace daObjMovebox { } /* 00001C64-00001DD4 .text PPCallBack__Q212daObjMovebox5Act_cFP10fopAc_ac_cP10fopAc_ac_csQ24dBgW13PushPullLabel */ - fopAc_ac_c* Act_c::PPCallBack(fopAc_ac_c* actor, fopAc_ac_c*, s16 rot, dBgW::PushPullLabel orig_pp_label) { + fopAc_ac_c* Act_c::PPCallBack(fopAc_ac_c* actor, fopAc_ac_c*, s16 angle, dBgW::PushPullLabel orig_pp_label) { Act_c* i_this = (Act_c*)actor; dBgW::PushPullLabel pp_label = static_cast(orig_pp_label & (dBgW::PP_UNK1_e | dBgW::PP_UNK2_e)); @@ -1272,18 +1272,18 @@ namespace daObjMovebox { unk = orig_pp_label & dBgW::PP_UNK8_e; } if (unk) { - s16 angle = (s16)(pp_label & dBgW::PP_UNK2_e ? rot - 0x8000 : rot) - actor->home.angle.y; + s16 angleDiff = (s16)(pp_label & dBgW::PP_UNK2_e ? angle - 0x8000 : angle) - actor->home.angle.y; int pp_field = dBgW::PP_UNK1_e | dBgW::PP_UNK2_e; JUT_ASSERT(1813, pp_label != pp_field); i_this->mPPLabel = orig_pp_label; int whichSide; - if (angle >= -0x2000 && angle < 0x2000) { + if (angleDiff >= -0x2000 && angleDiff < 0x2000) { whichSide = 0; - } else if (angle >= 0x2000 && angle < 0x6000) { + } else if (angleDiff >= 0x2000 && angleDiff < 0x6000) { whichSide = 1; - } else if (angle >= 0x6000 || angle < -0x6000) { + } else if (angleDiff >= 0x6000 || angleDiff < -0x6000) { whichSide = 2; } else { whichSide = 3; @@ -1707,7 +1707,11 @@ namespace daObjMovebox { void Act_c::make_item() { s32 itemTableNo = prm_get_itemNo(); s32 itemBitNo = prm_get_itemSave(); - fopAcM_createItemFromTable(¤t.pos, itemTableNo, itemBitNo, fopAcM_GetHomeRoomNo(this), 0, ¤t.angle, 7); + fopAcM_createItemFromTable( + ¤t.pos, itemTableNo, itemBitNo, + fopAcM_GetHomeRoomNo(this), daItemType_0_e, + ¤t.angle, daItemAct_7_e + ); } /* 00003450-00003570 .text eff_break__Q212daObjMovebox5Act_cFv */ diff --git a/src/d/actor/d_a_switem.cpp b/src/d/actor/d_a_switem.cpp index dbd49c1be..3b1e0df67 100644 --- a/src/d/actor/d_a_switem.cpp +++ b/src/d/actor/d_a_switem.cpp @@ -135,7 +135,8 @@ bool daSwItem_c::_execute() { csXyz angle(0, home.angle.y, 0); fpc_ProcID itemProcId = fopAcM_createItemFromTable( ¤t.pos, itemTbl, itemBitNo, - fopAcM_GetHomeRoomNo(this), 0, &angle, 1 + fopAcM_GetHomeRoomNo(this), daItemType_0_e, + &angle, daItemAct_1_e ); daItem_c* item = (daItem_c*)fopAcM_SearchByID(itemProcId); diff --git a/src/d/d_grass.cpp b/src/d/d_grass.cpp index c90d8c168..0c62e0ae3 100644 --- a/src/d/d_grass.cpp +++ b/src/d/d_grass.cpp @@ -149,7 +149,7 @@ void dGrass_data_c::WorkAt(fopAc_ac_c* ac, u32 p1, int roomNo, dCcMassS_HitInf* setBatta(&mPos, &tevStr->mColorK0); if (mItemIdx >= 0) - fopAcM_createItemFromTable(&mPos, mItemIdx, 0xFFFFFFFF, roomNo, 0, NULL, 1, NULL); + fopAcM_createItemFromTable(&mPos, mItemIdx, 0xFFFFFFFF, roomNo, daItemType_0_e, NULL, daItemAct_1_e, NULL); if (!l_CutSoundFlag) { l_CutSoundFlag = true; mDoAud_seStart(JA_SE_LK_CUT_GRASS, &mPos, 0, dComIfGp_getReverb(roomNo)); diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 380c7b3d7..1848365cf 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -764,7 +764,7 @@ fopAc_ac_c* fopAcM_getEventPartner(fopAc_ac_c* i_this) { } /* 80026118-800261E8 .text fopAcM_createItemForPresentDemo__FP4cXyziUciiP5csXyzP4cXyz */ -fpc_ProcID fopAcM_createItemForPresentDemo(cXyz* pos, int i_itemNo, u8 argFlag, int roomNo, int param_5, csXyz* rot, cXyz* scale) { +fpc_ProcID fopAcM_createItemForPresentDemo(cXyz* pos, int i_itemNo, u8 argFlag, int roomNo, int param_5, csXyz* angle, cXyz* scale) { JUT_ASSERT(2413, 0 <= i_itemNo && i_itemNo < 256); dComIfGp_event_setGtItm(i_itemNo); @@ -773,11 +773,11 @@ fpc_ProcID fopAcM_createItemForPresentDemo(cXyz* pos, int i_itemNo, u8 argFlag, return fpcM_ERROR_PROCESS_ID_e; } - return fopAcM_createDemoItem(pos, i_itemNo, roomNo, rot, param_5, scale, argFlag); + return fopAcM_createDemoItem(pos, i_itemNo, roomNo, angle, param_5, scale, argFlag); } /* 800261E8-800262B4 .text fopAcM_createItemForTrBoxDemo__FP4cXyziiiP5csXyzP4cXyz */ -fpc_ProcID fopAcM_createItemForTrBoxDemo(cXyz* pos, int i_itemNo, int roomNo, int param_5, csXyz* rot, cXyz* scale) { +fpc_ProcID fopAcM_createItemForTrBoxDemo(cXyz* pos, int i_itemNo, int roomNo, int param_5, csXyz* angle, cXyz* scale) { JUT_ASSERT(2458, 0 <= i_itemNo && i_itemNo < 256); dComIfGp_event_setGtItm(i_itemNo); @@ -786,7 +786,7 @@ fpc_ProcID fopAcM_createItemForTrBoxDemo(cXyz* pos, int i_itemNo, int roomNo, in return fpcM_ERROR_PROCESS_ID_e; } - return fopAcM_createDemoItem(pos, i_itemNo, roomNo, rot, param_5, scale, 0x00); + return fopAcM_createDemoItem(pos, i_itemNo, roomNo, angle, param_5, scale, 0x00); } /* 800262B4-80026694 .text fopAcM_createItemFromTable__FP4cXyziiiiP5csXyziP4cXyz */ @@ -857,7 +857,7 @@ fpc_ProcID fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo } itemNo = getItemNoByLife((s8)itemNo); - daItem_c* item = (daItem_c*)fopAcM_fastCreateItem2(&pos, itemNo, i_itemBitNo, roomNo, type, &angle, 8); + daItem_c* item = (daItem_c*)fopAcM_fastCreateItem2(&pos, itemNo, i_itemBitNo, roomNo, type, &angle, daItemAct_8_e); lastItemPID = fopAcM_GetID(item); if (lastItemPID == fpcM_ERROR_PROCESS_ID_e) { @@ -901,18 +901,18 @@ fpc_ProcID fopAcM_createRaceItemFromTable(cXyz* pos, int i_itemNo, int i_itemBit } /* 800267C8-8002688C .text fopAcM_createShopItem__FP4cXyziP5csXyziP4cXyzPFPv_i */ -fpc_ProcID fopAcM_createShopItem(cXyz* pos, int i_itemNo, csXyz* rot, int roomNo, cXyz* scale, +fpc_ProcID fopAcM_createShopItem(cXyz* pos, int i_itemNo, csXyz* angle, int roomNo, cXyz* scale, createFunc createFunc) { JUT_ASSERT(2716, 0 <= i_itemNo && i_itemNo < 256); if (i_itemNo == dItem_NONE_e) { return fpcM_ERROR_PROCESS_ID_e; } - return fopAcM_create(PROC_ShopItem, i_itemNo, pos, roomNo, rot, scale, -1, createFunc); + return fopAcM_create(PROC_ShopItem, i_itemNo, pos, roomNo, angle, scale, -1, createFunc); } /* 8002688C-80026980 .text fopAcM_createRaceItem__FP4cXyziiP5csXyziP4cXyzi */ -fpc_ProcID fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot, int roomNo, cXyz* scale, int param_7) { +fpc_ProcID fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* angle, int roomNo, cXyz* scale, int param_7) { JUT_ASSERT(2763, 0 <= i_itemNo && i_itemNo < 256 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127); if (i_itemNo == dItem_NONE_e) { return fpcM_ERROR_PROCESS_ID_e; @@ -920,33 +920,33 @@ fpc_ProcID fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz i_itemNo = check_itemno(i_itemNo); u32 params = (i_itemBitNo & 0x7F) << 0x08 | i_itemNo & 0xFF | (param_7 & 0xF) << 0xF; - return fopAcM_create(PROC_RACEITEM, params, pos, roomNo, rot, scale); + return fopAcM_create(PROC_RACEITEM, params, pos, roomNo, angle, scale); } /* 80026980-80026A68 .text fopAcM_createDemoItem__FP4cXyziiP5csXyziP4cXyzUc */ -fpc_ProcID fopAcM_createDemoItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot, int roomNo, cXyz* scale, u8 argFlag) { +fpc_ProcID fopAcM_createDemoItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* angle, int roomNo, cXyz* scale, u8 argFlag) { JUT_ASSERT(2813, 0 <= i_itemNo && i_itemNo < 256 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127); if (i_itemNo == dItem_NONE_e) { return fpcM_ERROR_PROCESS_ID_e; } u32 params = i_itemNo & 0xFF | (i_itemBitNo & 0x7F) << 0x08 | (argFlag & 0xFF) << 0x10; - return fopAcM_create(PROC_Demo_Item, params, pos, roomNo, rot, scale); + return fopAcM_create(PROC_Demo_Item, params, pos, roomNo, angle, scale); } /* 80026A68-80026ADC .text fopAcM_createItemForBoss__FP4cXyziiP5csXyzP4cXyzi */ -fpc_ProcID fopAcM_createItemForBoss(cXyz* pos, int, int roomNo, csXyz* rot, cXyz* scale, int param_6) { +fpc_ProcID fopAcM_createItemForBoss(cXyz* pos, int unused, int roomNo, csXyz* angle, cXyz* scale, int param_6) { switch (param_6) { case 1: - return fopAcM_createItem(pos, dItem_HEART_CONTAINER_e, -1, roomNo, 3, rot, 0xC, scale); - case 0: + return fopAcM_createItem(pos, dItem_HEART_CONTAINER_e, -1, roomNo, daItemType_3_e, angle, daItemAct_BOSS_e, scale); + case 0: // Disappear default: - return fopAcM_createItem(pos, dItem_HEART_CONTAINER_e, -1, roomNo, 3, rot, 5, scale); + return fopAcM_createItem(pos, dItem_HEART_CONTAINER_e, -1, roomNo, daItemType_3_e, angle, daItemAct_BOSS_DISAPPEAR_e, scale); } } /* 80026ADC-80026C90 .text fopAcM_createItem__FP4cXyziiiiP5csXyziP4cXyz */ -fpc_ProcID fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* rot, int action, cXyz* scale) { +fpc_ProcID fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* angle, int action, cXyz* scale) { int switchNo = 0xFF; int switchNo2 = 0xFF; @@ -956,32 +956,32 @@ fpc_ProcID fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN return fpcM_ERROR_PROCESS_ID_e; } - csXyz prmRot = csXyz::Zero; - if (rot) { - prmRot = *rot; + csXyz prmAngle = csXyz::Zero; + if (angle) { + prmAngle = *angle; } - prmRot.z = switchNo; + prmAngle.z = switchNo; u8 itemNo = check_itemno(i_itemNo); u32 params = MAKE_ITEM_PARAMS(itemNo, i_itemBitNo, switchNo2, type, action); switch (i_itemNo) { case RECOVER_FAIRY: - return fopAcM_create(PROC_NPC_FA1, 1, pos, roomNo, rot, scale); + return fopAcM_create(PROC_NPC_FA1, 1, pos, roomNo, angle, scale); case dItem_TRIPLE_HEART_e: // Make the two extra hearts first, then fall-through to make the third heart as normal. for (int i = 0; i < 2; i++) { - fopAcM_create(PROC_ITEM, params, pos, roomNo, &prmRot, scale); + fopAcM_create(PROC_ITEM, params, pos, roomNo, &prmAngle, scale); } // Fall-through default: - return fopAcM_create(PROC_ITEM, params, pos, roomNo, &prmRot, scale); + return fopAcM_create(PROC_ITEM, params, pos, roomNo, &prmAngle, scale); } } /* 80026C90-80026E5C .text fopAcM_fastCreateItem2__FP4cXyziiiiP5csXyziP4cXyz */ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, - csXyz* rot, int action, cXyz* scale) + csXyz* angle, int action, cXyz* scale) { int switchNo = 0xFF; int switchNo2 = 0xFF; @@ -990,41 +990,41 @@ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN int i; - csXyz prmRot = csXyz::Zero; + csXyz prmAngle = csXyz::Zero; if (i_itemNo == dItem_NONE_e) { return NULL; } - if (rot) { - prmRot = *rot; + if (angle) { + prmAngle = *angle; } - prmRot.z = switchNo; + prmAngle.z = switchNo; u8 itemNo = check_itemno(i_itemNo); u32 params = MAKE_ITEM_PARAMS(itemNo, i_itemBitNo, switchNo2, type, action); switch (i_itemNo) { case RECOVER_FAIRY: - return fopAcM_fastCreate(PROC_NPC_FA1, 1, pos, roomNo, rot, scale); + return fopAcM_fastCreate(PROC_NPC_FA1, 1, pos, roomNo, angle, scale); case dItem_TRIPLE_HEART_e: // Make the two extra hearts first, then fall-through to make the third heart as normal. for (i = 0; i < 2; i++) { - fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale); + fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmAngle, scale); } // Fall-through default: - return fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale); + return fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmAngle, scale); } } /* 80026E5C-80026F5C .text fopAcM_createItemForKP2__FP4cXyziiP5csXyzP4cXyzfffUs */ -fopAc_ac_c* fopAcM_createItemForKP2(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, f32 speedF, f32 speedY, f32 gravity, u16 i_itemBitNo) { +fopAc_ac_c* fopAcM_createItemForKP2(cXyz* pos, int i_itemNo, int roomNo, csXyz* angle, cXyz* scale, f32 speedF, f32 speedY, f32 gravity, u16 i_itemBitNo) { JUT_ASSERT(0xc25, 0 <= i_itemNo && i_itemNo < 256); if (i_itemNo == dItem_NONE_e) return NULL; - fopAc_ac_c* ac = (fopAc_ac_c*)fopAcM_fastCreate(PROC_SPC_ITEM01, i_itemNo | (i_itemBitNo & 0xFFFF) << 8, pos, roomNo, rot, scale); + fopAc_ac_c* ac = (fopAc_ac_c*)fopAcM_fastCreate(PROC_SPC_ITEM01, i_itemNo | (i_itemBitNo & 0xFFFF) << 8, pos, roomNo, angle, scale); if (ac != NULL) { fopAcM_SetSpeedF(ac, speedF); ac->speed.y = speedY; @@ -1034,18 +1034,18 @@ fopAc_ac_c* fopAcM_createItemForKP2(cXyz* pos, int i_itemNo, int roomNo, csXyz* } /* 80026F5C-80026F98 .text fopAcM_createItemForSimpleDemo__FP4cXyziiP5csXyzP4cXyzff */ -daItem_c* fopAcM_createItemForSimpleDemo(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, f32 speedF, f32 speedY) { - daItem_c* item = (daItem_c*)fopAcM_fastCreateItem(pos, i_itemNo, roomNo, rot, scale, speedF, speedY, -7.0f); +daItem_c* fopAcM_createItemForSimpleDemo(cXyz* pos, int i_itemNo, int roomNo, csXyz* angle, cXyz* scale, f32 speedF, f32 speedY) { + daItem_c* item = (daItem_c*)fopAcM_fastCreateItem(pos, i_itemNo, roomNo, angle, scale, speedF, speedY, -7.0f); if (item != NULL) item->setStatus(5); return item; } /* 80026F98-80027254 .text fopAcM_fastCreateItem__FP4cXyziiP5csXyzP4cXyzfffiPFPv_i */ -void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, +void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* angle, cXyz* scale, f32 speedF, f32 speedY, f32 gravity, int i_itemBitNo, createFunc createFunc) { - int type = 0; - int action = 0xA; + int type = daItemType_0_e; + int action = daItemAct_A_e; int switchNo = 0xFF; int switchNo2 = 0xFF; @@ -1065,23 +1065,23 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy } daItem_c* item; - csXyz prmRot; + csXyz prmAngle; switch (i_itemNo) { case RECOVER_FAIRY: - item = (daItem_c*)fopAcM_fastCreate(PROC_NPC_FA1, 1, pos, roomNo, rot, scale); + item = (daItem_c*)fopAcM_fastCreate(PROC_NPC_FA1, 1, pos, roomNo, angle, scale); return item; case dItem_TRIPLE_HEART_e: // Make the two extra hearts first, then fall-through to make the third heart as normal. for (i = 0; i < 2; i++) { - if (rot) { - prmRot = *rot; + if (angle) { + prmAngle = *angle; } else { - prmRot = csXyz::Zero; + prmAngle = csXyz::Zero; } - prmRot.z = switchNo; - prmRot.y += (int)cM_rndFX(0x2000); + prmAngle.z = switchNo; + prmAngle.y += (int)cM_rndFX(0x2000); - item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale, -1, createFunc); + item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmAngle, scale, -1, createFunc); if (item) { item->speedF = speedF * (1.0f + cM_rndFX(0.3f)); item->speed.y = speedY * (1.0f + cM_rndFX(0.2f)); @@ -1090,14 +1090,14 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy } // Fall-through default: - if (rot) { - prmRot = *rot; + if (angle) { + prmAngle = *angle; } else { - prmRot = csXyz::Zero; + prmAngle = csXyz::Zero; } - prmRot.z = 0xFF; + prmAngle.z = 0xFF; - item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale, -1, createFunc); + item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmAngle, scale, -1, createFunc); if (item) { item->speedF = speedF; item->speed.y = speedY;