mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
Add enums for items and disappears
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+37
-35
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<dBgW::PushPullLabel>(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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -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));
|
||||
|
||||
+51
-51
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user