d_a_item cleanup, and a couple small matches

This commit is contained in:
LagoLunatic
2023-11-28 15:04:45 -05:00
parent d82fa3ccae
commit 548215d707
6 changed files with 119 additions and 116 deletions
+25 -25
View File
@@ -3,22 +3,23 @@
#include "d/actor/d_a_itembase.h"
#include "d/d_particle.h"
#include "f_pc/f_pc_manager.h"
#include "f_op/f_op_actor_mng.h"
#include "SSystem/SComponent/c_lib.h"
class daItem_c : public daItemBase_c {
public:
typedef void (daItem_c::*ModeFunc)();
enum State {
STATE_WAIT_MAIN = 0x2,
STATE_BRING_NEZUMI = 0x3,
STATE_INIT_NORMAL = 0x5,
STATE_MAIN_NORMAL = 0x6,
STATE_INIT_GET_DEMO = 0x7,
STATE_WAIT_GET_DEMO = 0x8,
STATE_MAIN_GET_DEMO = 0x9,
STATE_WAIT_BOSS1 = 0xA,
STATE_WAIT_BOSS2 = 0xB,
STATUS_WAIT_MAIN = 0x2,
STATUS_BRING_NEZUMI = 0x3,
STATUS_INIT_NORMAL = 0x5,
STATUS_MAIN_NORMAL = 0x6,
STATUS_INIT_GET_DEMO = 0x7,
STATUS_WAIT_GET_DEMO = 0x8,
STATUS_MAIN_GET_DEMO = 0x9,
STATUS_WAIT_BOSS1 = 0xA,
STATUS_WAIT_BOSS2 = 0xB,
};
float getYOffset();
@@ -75,12 +76,11 @@ public:
mDisappearTimer = param_1;
field_0x65a = param_2;
}
// TODO
void setFlag(u8) {}
void clrFlag(u8) {}
void checkFlag(u8) {}
void setStatus(u8) {}
void printStatus() {}
void setFlag(u8 flag) { cLib_onBit(mFlag, flag); }
void clrFlag(u8 flag) { cLib_offBit(mFlag, flag); }
bool checkFlag(u8 flag) { return cLib_checkBit(mFlag, flag); }
void setStatus(u8 status) { mItemStatus = status; }
void printStatus() {} // this might be a debug-only function
static dCcD_SrcCyl m_cyl_src;
static s32 m_timer_max;
@@ -101,9 +101,9 @@ public:
/* 0x666 */ u8 field_0x666;
/* 0x667 */ u8 mType;
/* 0x668 */ u8 mAction;
/* 0x669 */ u8 mStatusFlags; // TODO rename this
/* 0x669 */ u8 mFlag;
/* 0x66A */ u8 mMode;
/* 0x66B */ u8 mCurState;
/* 0x66B */ u8 mItemStatus;
/* 0x66C */ u8 mOnGroundTimer;
/* 0x66D */ u8 field_0x66D[0x670 - 0x66D];
/* 0x670 */ u32 mDemoItemBsPcId;
@@ -112,19 +112,19 @@ public:
/* 0x69C */ dPa_smokeEcallBack mPtclSmokeCb;
/* 0x6BC */ JPABaseEmitter* mpParticleEmitter;
// TODO add enums for type, action, state, and status flags
// state 7 is probably "about to start an item get demo"
// TODO add enums for type, action, flags, mode, and status
// status 7 is probably "about to start an item get demo"
};
STATIC_ASSERT(sizeof(daItem_c) == 0x6C0);
namespace daItem_prm {
inline u32 getType(daItem_c* item) { return (fpcM_GetParam(item) & 0x03000000) >> 0x18; }
inline u32 getAction(daItem_c* item) { return (fpcM_GetParam(item) & 0xFC000000) >> 0x1A; }
inline u32 getItemNo(daItem_c* item) { return (fpcM_GetParam(item) & 0x000000FF) >> 0x00; }
inline u32 getItemBitNo(daItem_c* item) { return (fpcM_GetParam(item) & 0x0000FF00) >> 0x08; }
inline u32 getType(daItem_c* item) { return (fopAcM_GetParam(item) & 0x03000000) >> 0x18; }
inline u32 getAction(daItem_c* item) { return (fopAcM_GetParam(item) & 0xFC000000) >> 0x1A; }
inline u32 getItemNo(daItem_c* item) { return (fopAcM_GetParam(item) & 0x000000FF) >> 0x00; }
inline u32 getItemBitNo(daItem_c* item) { return (fopAcM_GetParam(item) & 0x0000FF00) >> 0x08; }
inline u32 getSwitchNo(daItem_c* item) { return (item->orig.angle.z & 0x00FF) >> 0; }
inline u32 getSwitchNo2(daItem_c* item) { return (fpcM_GetParam(item) & 0x00FF0000) >> 0x10; }
inline u32 getSwitchNo2(daItem_c* item) { return (fopAcM_GetParam(item) & 0x00FF0000) >> 0x10; }
};
#endif /* D_A_ITEM_H */
+4 -4
View File
@@ -73,10 +73,10 @@ public:
s8 getBackboneJntNum() { return mBackboneJntNum; }
void setHeadJntNum(s8 jnt) { mHeadJntNum = jnt; }
void setBackboneJntNum(s8 jnt) { mBackboneJntNum = jnt; }
s16 getHead_x() { return mAngles[0][0]; }
s16 getHead_y() { return mAngles[0][1]; }
s16 getBackbone_x() { return mAngles[1][0]; }
s16 getBackbone_y() { return mAngles[1][1]; }
int getHead_x() { return mAngles[0][0]; }
int getHead_y() { return mAngles[0][1]; }
int getBackbone_x() { return mAngles[1][0]; }
int getBackbone_y() { return mAngles[1][1]; }
void setHead_x(s16 angle) { mAngles[0][0] = angle; }
void setHead_y(s16 angle) { mAngles[0][1] = angle; }
void setBackBone_x(s16 angle) { mAngles[1][0] = angle; }
+75 -74
View File
@@ -160,17 +160,17 @@ void daItem_c::CreateInit() {
mDisappearTimer = getData()->mDuration;
field_0x65a = getData()->field_0x18;
field_0x650 = speedPtr->y;
mCurState = 0;
mItemStatus = 0;
mType = daItem_prm::getType(this);
if (daItem_prm::getType(this) == 3 || daItem_prm::getType(this) == 1) {
mStatusFlags |= 2;
setFlag(0x02);
}
mAction = daItem_prm::getAction(this);
show();
if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (m_itemNo == SMALL_KEY && (mStatusFlags & 2)))) {
if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (m_itemNo == SMALL_KEY && checkFlag(0x02)))) {
u16 particleID = dItem_data::getSpecialEffect(m_itemNo);
dComIfGp_particle_set(particleID, &current.pos, NULL, NULL, 0xFF, &mPtclFollowCb);
}
@@ -190,7 +190,7 @@ void daItem_c::CreateInit() {
mSwitchId = daItem_prm::getSwitchNo2(this);
if (mSwitchId != 0xFF && !fopAcM_isSwitch(this, mSwitchId)) {
hide();
mStatusFlags |= 2;
setFlag(0x02);
}
mActivationSwitch = daItem_prm::getSwitchNo(this);
@@ -201,7 +201,7 @@ void daItem_c::CreateInit() {
switch (m_itemNo) {
case SWORD:
case SHIELD:
mStatus |= 0x4000;
fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
break;
case DROPPED_SWORD:
current.angle.x = 0x4000;
@@ -230,7 +230,7 @@ s32 daItem_c::_daItem_create() {
mPickupFlag = daItem_prm::getItemBitNo(this);
if (m_itemNo != BLUE_JELLY) { // Blue Chu Jelly uses mPickupFlag as if it was a switch.
mPickupFlag &= 0x7F;
if (dComIfGs_isItem(mPickupFlag, orig.roomNo) && mPickupFlag != 0x7F) {
if (fopAcM_isItem(this, mPickupFlag) && mPickupFlag != 0x7F) {
// Already picked up, don't create the item again.
setLoadError();
return cPhs_ERROR_e;
@@ -265,36 +265,36 @@ BOOL daItem_c::_daItem_execute() {
mEyePos.y += dItem_data::getH(m_itemNo)/2.0f;
mAttentionInfo.mPosition = current.pos;
switch (mCurState) {
case STATE_BRING_NEZUMI:
switch (mItemStatus) {
case STATUS_BRING_NEZUMI:
execBringNezumi();
break;
case 0:
case 1:
if (checkActionNow()) {
mCurState = 1;
mItemStatus = 1;
} else {
mCurState = 0;
mItemStatus = 0;
}
case STATE_WAIT_MAIN:
case STATUS_WAIT_MAIN:
execWaitMain();
break;
case STATE_INIT_NORMAL:
case STATUS_INIT_NORMAL:
execInitNormalDirection();
case STATE_MAIN_NORMAL:
case STATUS_MAIN_NORMAL:
execMainNormalDirection();
break;
case STATE_INIT_GET_DEMO:
case STATUS_INIT_GET_DEMO:
execInitGetDemoDirection();
break;
case STATE_WAIT_GET_DEMO:
case STATUS_WAIT_GET_DEMO:
execWaitGetDemoDirection();
break;
case STATE_MAIN_GET_DEMO:
case STATUS_MAIN_GET_DEMO:
execMainGetDemoDirection();
break;
case STATE_WAIT_BOSS1:
case STATE_WAIT_BOSS2:
case STATUS_WAIT_BOSS1:
case STATUS_WAIT_BOSS2:
execWaitMainFromBoss();
break;
}
@@ -319,25 +319,25 @@ void daItem_c::mode_proc_call() {
(this->*mode_proc[mMode])();
}
if (mStatusFlags & 0x08) {
if (checkFlag(0x08)) {
fopAc_ac_c* boomerang = (fopAc_ac_c*)fopAcM_SearchByName(PROC_BOOMERANG);
if (boomerang) {
current.pos = boomerang->current.pos;
} else {
mStatusFlags &= ~0x08;
clrFlag(0x08);
}
}
if (mStatusFlags & 0x40) {
if (checkFlag(0x40)) {
fopAc_ac_c* grappling_hook = (fopAc_ac_c*)fopAcM_SearchByName(PROC_HIMO2);
if (grappling_hook) {
current.pos = grappling_hook->current.pos;
} else {
mStatusFlags &= ~0x40;
clrFlag(0x40);
}
}
if (mType == 1 && (fopAcM_checkHookCarryNow(this) || mStatusFlags & 0x08)) {
if (mType == 1 && (fopAcM_checkHookCarryNow(this) || checkFlag(0x08))) {
mType = 3;
}
}
@@ -369,7 +369,7 @@ void daItem_c::execInitNormalDirection() {
mpParticleEmitter = NULL;
}
mCurState = STATE_MAIN_NORMAL;
mItemStatus = STATUS_MAIN_NORMAL;
}
/* 800F5AFC-800F5BC8 .text execMainNormalDirection__8daItem_cFv */
@@ -404,7 +404,7 @@ void daItem_c::execInitGetDemoDirection() {
fopAcM_orderItemEvent(this);
mEvtInfo.onCondition(dEvtCnd_CANGETITEM_e);
mDemoItemBsPcId = fopAcM_createItemForTrBoxDemo(&current.pos, m_itemNo, -1, current.roomNo, NULL, NULL);
mCurState = STATE_WAIT_GET_DEMO;
mItemStatus = STATUS_WAIT_GET_DEMO;
}
}
@@ -413,7 +413,7 @@ void daItem_c::execWaitGetDemoDirection() {
hide();
if (mEvtInfo.checkCommandItem()) {
mCurState = STATE_MAIN_GET_DEMO;
mItemStatus = STATUS_MAIN_GET_DEMO;
if (mDemoItemBsPcId != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(mDemoItemBsPcId);
}
@@ -449,7 +449,7 @@ void daItem_c::execWaitMain() {
}
mode_proc_call();
if (!(mStatusFlags & 0x02)) {
if (!checkFlag(0x02)) {
f32 temp1 = mScaleTarget.x / getData()->mScaleAnimSpeed;
f32 temp2 = mScaleTarget.y / getData()->mScaleAnimSpeed;
f32 temp3 = mScaleTarget.z / getData()->mScaleAnimSpeed;
@@ -485,7 +485,7 @@ void daItem_c::execWaitMainFromBoss() {
}
mode_proc_call();
if (mCurState != STATE_WAIT_BOSS2) {
if (mItemStatus != STATUS_WAIT_BOSS2) {
scaleAnimFromBossItem();
}
@@ -578,10 +578,10 @@ bool Reflect(cXyz& surfVec, cXyz* moveVec, f32 param_2, f32 xzMult) {
/* 800F6434-800F6D24 .text itemGetExecute__8daItem_cFv */
void daItem_c::itemGetExecute() {
if (mCurState == STATE_INIT_NORMAL) {
if (mItemStatus == STATUS_INIT_NORMAL) {
return;
}
mCurState = STATE_INIT_NORMAL;
mItemStatus = STATUS_INIT_NORMAL;
switch (m_itemNo) {
case HEART:
@@ -618,11 +618,11 @@ void daItem_c::itemGetExecute() {
break;
case KAKERA_HEART:
mDoAud_seStart(JA_SE_HEART_PIECE, NULL, 0, 0);
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case UTUWA_HEART:
mDoAud_seStart(JA_SE_HEART_PIECE, NULL, 0, 0);
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case S_MAGIC:
mDoAud_seStart(JA_SE_MAGIC_POT_GET_S, NULL, 0, 0);
@@ -643,7 +643,7 @@ void daItem_c::itemGetExecute() {
execItemGet(m_itemNo);
break;
case SMALL_KEY:
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case TRIPLE_HEART:
mDoAud_seStart(JA_SE_HEART_PIECE, NULL, 0, 0);
@@ -652,36 +652,36 @@ void daItem_c::itemGetExecute() {
case PENDANT:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(7)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(7);
} else {
execItemGet(m_itemNo);
}
break;
case DEKU_LEAF:
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case SWORD:
daItem_c* item = (daItem_c*)fopAcM_SearchByName(PROC_ITEM);
if (item && item->m_itemNo == SHIELD) {
item->itemGetExecute();
}
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case SHIELD:
item = (daItem_c*)fopAcM_SearchByName(PROC_ITEM);
if (item && item->m_itemNo == SWORD) {
item->itemGetExecute();
}
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case DROPPED_SWORD:
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
break;
case SKULL_NECKLACE:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(0)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(0);
} else {
execItemGet(m_itemNo);
@@ -690,7 +690,7 @@ void daItem_c::itemGetExecute() {
case BOKOBABA_SEED:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(1)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(1);
} else {
execItemGet(m_itemNo);
@@ -699,7 +699,7 @@ void daItem_c::itemGetExecute() {
case GOLDEN_FEATHER:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(2)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(2);
} else {
execItemGet(m_itemNo);
@@ -708,7 +708,7 @@ void daItem_c::itemGetExecute() {
case BOKO_BELT:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(3)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(3);
} else {
execItemGet(m_itemNo);
@@ -717,7 +717,7 @@ void daItem_c::itemGetExecute() {
case RED_JELLY:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(4)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(4);
} else {
execItemGet(m_itemNo);
@@ -726,7 +726,7 @@ void daItem_c::itemGetExecute() {
case GREEN_JELLY:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(5)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(5);
} else {
execItemGet(m_itemNo);
@@ -735,7 +735,7 @@ void daItem_c::itemGetExecute() {
case BLUE_JELLY:
mDoAud_seStart(JA_SE_SPOILS_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBeast(6)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBeast(6);
} else {
execItemGet(m_itemNo);
@@ -744,7 +744,7 @@ void daItem_c::itemGetExecute() {
case BIRD_ESA_5:
mDoAud_seStart(JA_SE_ESA_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBait(0)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBait(0);
} else {
execItemGet(m_itemNo);
@@ -753,7 +753,7 @@ void daItem_c::itemGetExecute() {
case ANIMAL_ESA:
mDoAud_seStart(JA_SE_ESA_GET, NULL, 0, 0);
if (!dComIfGs_isGetItemBait(1)) {
mCurState = STATE_INIT_GET_DEMO;
mItemStatus = STATUS_INIT_GET_DEMO;
dComIfGs_onGetItemBait(1);
} else {
execItemGet(m_itemNo);
@@ -771,7 +771,7 @@ void daItem_c::itemGetExecute() {
dComIfGs_onItem(flag, (s8)roomNo);
}
mStatusFlags &= ~0x4;
clrFlag(0x04);
mCyl.SetTgType(0);
mCyl.OffCoSetBit();
@@ -789,14 +789,14 @@ void daItem_c::itemDefaultRotateY() {
/* 800F6D78-800F6E54 .text checkItemDisappear__8daItem_cFv */
BOOL daItem_c::checkItemDisappear() {
BOOL disappearing = TRUE;
if (mCurState == STATE_BRING_NEZUMI) {
if (mItemStatus == STATUS_BRING_NEZUMI) {
disappearing = FALSE;
show();
}
if (mStatusFlags & 0x02) {
if (checkFlag(0x02)) {
disappearing = FALSE;
}
if (mStatusFlags & 0x10) {
if (checkFlag(0x10)) {
disappearing = FALSE;
}
if (dItem_data::chkFlag(m_itemNo, 0x01)) {
@@ -805,10 +805,10 @@ BOOL daItem_c::checkItemDisappear() {
if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0) {
disappearing = FALSE;
}
if (mCurState == 4) {
if (mItemStatus == 4) {
disappearing = FALSE;
}
if ((mStatusFlags & 0x08) || (mStatusFlags & 0x40) || (mStatus & fopAcStts_HOOK_CARRY_e)) {
if (checkFlag(0x08) || checkFlag(0x40) || fopAcM_checkStatus(this, fopAcStts_HOOK_CARRY_e)) {
disappearing = FALSE;
show();
}
@@ -818,7 +818,7 @@ BOOL daItem_c::checkItemDisappear() {
/* 800F6E54-800F6E74 .text setItemTimer__8daItem_cFi */
void daItem_c::setItemTimer(int timer) {
if (timer == -1) {
mStatusFlags |= 0x10;
setFlag(0x10);
return;
}
mDisappearTimer = timer;
@@ -829,7 +829,7 @@ BOOL daItem_c::checkPlayerGet() {
if (field_0x638 < getData()->field_0x42) {
return FALSE;
}
if (mCurState == STATE_BRING_NEZUMI) {
if (mItemStatus == STATUS_BRING_NEZUMI) {
return FALSE;
}
return TRUE;
@@ -850,14 +850,14 @@ BOOL daItem_c::itemActionForRupee() {
mOnGroundTimer++;
if (mOnGroundTimer >= 2) {
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
}
set_bound_se();
} else if (mAcch.ChkGroundHit()) {
itemDefaultRotateY();
speedF = 0.0f;
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
mOnGroundTimer = 1;
}
@@ -873,7 +873,7 @@ BOOL daItem_c::itemActionForRupee() {
mTargetAngleX = 0;
}
if (!cLib_checkBit(mStatusFlags, (u8)0x02)) {
if (!checkFlag(0x02)) {
cLib_chaseAngleS(&current.angle.x, mTargetAngleX, field_0x654);
}
@@ -891,7 +891,7 @@ BOOL daItem_c::itemActionForHeart() {
mAcch.CrrPos(*dComIfG_Bgsp());
if (mAcch.ChkGroundLanding() || mAcch.ChkGroundHit()) {
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
mExtraZRot = 0;
speed.set(0.0f, -1.0f, 0.0f);
speedF = 0.0f;
@@ -923,13 +923,13 @@ BOOL daItem_c::itemActionForKey() {
mOnGroundTimer++;
if (mOnGroundTimer >= 2) {
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
}
} else if (mAcch.ChkGroundHit()) {
mOnGroundTimer = 1;
mTargetAngleX = 0;
current.angle.x = 0;
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
itemDefaultRotateY();
}
@@ -983,7 +983,7 @@ BOOL daItem_c::itemActionForSword() {
mAcch.CrrPos(*dComIfG_Bgsp());
bool isQuake = dComIfGp_getDetect().chk_quake(&current.pos);
if (isQuake && !cLib_checkBit(mStatusFlags, (u8)0x20) && mAcch.ChkGroundHit()) {
if (isQuake && !checkFlag(0x20) && mAcch.ChkGroundHit()) {
speed.set(0.0f, 21.0f, 0.0f);
mGravity = -3.5f;
}
@@ -1037,9 +1037,9 @@ BOOL daItem_c::itemActionForSword() {
}
if (isQuake) {
cLib_onBit(mStatusFlags, (u8)0x20);
setFlag(0x20);
} else {
cLib_offBit(mStatusFlags, (u8)0x20);
clrFlag(0x20);
}
return TRUE;
@@ -1188,7 +1188,7 @@ BOOL daItem_c::checkGetItem() {
itemGetExecute();
return TRUE;
} else if (atType & AT_TYPE_BOOMERANG) {
mStatusFlags |= 0x08;
setFlag(0x08);
}
}
}
@@ -1243,7 +1243,7 @@ void daItem_c::mode_water_init() {
current.angle.x = 0;
mExtraZRot = 0;
field_0x654 = 0;
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
mScale.set(mScaleTarget.x, mScaleTarget.y, mScaleTarget.z);
cXyz scale;
@@ -1258,7 +1258,7 @@ void daItem_c::mode_water_init() {
/* 800F80CC-800F844C .text mode_wait__8daItem_cFv */
void daItem_c::mode_wait() {
if (cLib_checkBit(mStatusFlags, (u8)0x04) && dItem_data::checkAppearEffect(m_itemNo)) {
if (checkFlag(0x04) && dItem_data::checkAppearEffect(m_itemNo)) {
u16 appearEffect = dItem_data::getAppearEffect(m_itemNo);
dComIfGp_particle_setSimple(appearEffect, &current.pos, 0xFF, g_whiteColor, g_whiteColor, 0);
}
@@ -1345,8 +1345,7 @@ void daItem_c::mode_water() {
/* 800F8528-800F8950 .text initAction__8daItem_cFv */
BOOL daItem_c::initAction() {
/* Nonmatching - regalloc */
if (cLib_checkBit(mStatusFlags, (u8)0x02)) {
if (checkFlag(0x02)) {
mScale.set(mScaleTarget.x, mScaleTarget.y, mScaleTarget.z);
switch (mAction) {
@@ -1355,26 +1354,25 @@ BOOL daItem_c::initAction() {
f32 temp = getData()->field_0x2C + cM_rndF(5.0f);
speedF = cM_rndF(getData()->field_0x30);
speed.set(0.0f, temp, 0.0f);
// speedF = cM_rndF(getData()->field_0x30);
break;
case 5:
speed.setall(0.0f);
speedF = 0.0f;
mScale.setall(0.0f);
mCurState = STATE_WAIT_BOSS1;
mItemStatus = STATUS_WAIT_BOSS1;
fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
field_0x654 = 0x4A8;
break;
case 0xC:
mScale.setall(1.0f);
mCurState = STATE_WAIT_BOSS2;
mItemStatus = STATUS_WAIT_BOSS2;
fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
field_0x654 = 0x4A8;
break;
}
mGravity = getData()->mFieldItemGravity;
cLib_offBit(mStatusFlags, (u8)0x04);
clrFlag(0x04);
mMode = 0;
return TRUE;
@@ -1440,11 +1438,14 @@ BOOL daItem_c::initAction() {
mGravity = getData()->mFieldItemGravity;
speed.set(0.0f, temp_f31, 0.0f);
// This line setting speedF to itself gets optimized out and produces no code, but affects regalloc.
// It's not known what the original code that got optimized out here was, it could be speedF or something else.
speedF = speedF;
mScale.setall(0.0f);
mMode = 0;
cLib_onBit(mStatusFlags, (u8)0x04);
setFlag(0x04);
return TRUE;
}
+4 -2
View File
@@ -888,7 +888,7 @@ void daRd_c::modeParalysisInit() {
/* 000020EC-000021F0 .text modeParalysis__6daRd_cFv */
void daRd_c::modeParalysis() {
/* Nonmatching: isStop inline regalloc + checkTgHit() clrlwi. missing? */
/* Nonmatching: isStop inline regalloc */
if (isAnm(AnmPrm_BEAM_HIT) && mpMorf->isStop()) {
setAnm(AnmPrm_BEAM, false);
} else if (isAnm(AnmPrm_BEAM)) {
@@ -900,7 +900,9 @@ void daRd_c::modeParalysis() {
}
if (checkTgHit()) {
// Did something in here get optimized out weirdly?
// This line setting speedF to itself gets optimized out and produces no code, but affects codegen.
// It's not known what the original code that got optimized out here was, it could be speedF or something else.
speedF = speedF;
}
}
+9 -9
View File
@@ -8,16 +8,16 @@
/* 80068820-800688A0 .text checkControl__8daItem_cFv */
BOOL daItem_c::checkControl() {
if (mCurState == STATE_BRING_NEZUMI) {
if (mItemStatus == STATUS_BRING_NEZUMI) {
return FALSE;
}
if (checkActionNow()) {
return FALSE;
}
if (mCurState == 4) {
if (mItemStatus == 4) {
return FALSE;
}
if (mCurState == STATE_INIT_NORMAL || mCurState == STATE_MAIN_NORMAL) {
if (mItemStatus == STATUS_INIT_NORMAL || mItemStatus == STATUS_MAIN_NORMAL) {
return FALSE;
}
return TRUE;
@@ -28,13 +28,13 @@ BOOL daItem_c::startControl() {
if (!checkControl()) {
return FALSE;
}
mCurState = STATE_BRING_NEZUMI;
mItemStatus = STATUS_BRING_NEZUMI;
return TRUE;
}
/* 800688E8-800688F8 .text endControl__8daItem_cFv */
BOOL daItem_c::endControl() {
mCurState = 0;
mItemStatus = 0;
return TRUE;
}
@@ -43,10 +43,10 @@ BOOL daItem_c::checkLock() {
if (checkActionNow()) {
return FALSE;
}
if (mCurState == 4) {
if (mItemStatus == 4) {
return FALSE;
}
return mCurState == 0 ? TRUE : FALSE;
return mItemStatus == 0 ? TRUE : FALSE;
}
/* 80068950-80068998 .text setLock__8daItem_cFv */
@@ -54,13 +54,13 @@ BOOL daItem_c::setLock() {
if (!checkLock()) {
return FALSE;
}
mCurState = STATE_WAIT_MAIN;
mItemStatus = STATUS_WAIT_MAIN;
return TRUE;
}
/* 80068998-800689A8 .text releaseLock__8daItem_cFv */
BOOL daItem_c::releaseLock() {
mCurState = 0;
mItemStatus = 0;
return TRUE;
}
+2 -2
View File
@@ -1003,7 +1003,7 @@ fopAc_ac_c* fopAcM_createItemForKP2(cXyz* pos, int i_itemNo, int roomNo, csXyz*
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, 0xFFFFFFFF, NULL);
if (item != NULL)
item->mCurState = 5;
item->setStatus(5);
return item;
}
@@ -1070,7 +1070,7 @@ BOOL stealItem_CB(void* actor) {
if (actor) {
daItem_c* item = (daItem_c*)actor;
item->mScale.setall(1.0f);
item->mStatusFlags |= 0x40;
item->setFlag(0x40);
}
return TRUE;
}