diff --git a/include/d/actor/d_a_item.h b/include/d/actor/d_a_item.h index 213021f60..3d33a3204 100644 --- a/include/d/actor/d_a_item.h +++ b/include/d/actor/d_a_item.h @@ -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 */ \ No newline at end of file diff --git a/include/d/d_npc.h b/include/d/d_npc.h index 5a1387cbf..116eb1a30 100644 --- a/include/d/d_npc.h +++ b/include/d/d_npc.h @@ -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; } diff --git a/src/d/actor/d_a_item.cpp b/src/d/actor/d_a_item.cpp index cb30d35e6..c300eee54 100644 --- a/src/d/actor/d_a_item.cpp +++ b/src/d/actor/d_a_item.cpp @@ -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, ¤t.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(¤t.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(¤t.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(¤t.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, ¤t.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; } diff --git a/src/d/actor/d_a_rd.cpp b/src/d/actor/d_a_rd.cpp index 5ced5a6bb..24d5d9d08 100644 --- a/src/d/actor/d_a_rd.cpp +++ b/src/d/actor/d_a_rd.cpp @@ -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; } } diff --git a/src/d/d_a_item_static.cpp b/src/d/d_a_item_static.cpp index 3f254f950..339eefb37 100644 --- a/src/d/d_a_item_static.cpp +++ b/src/d/d_a_item_static.cpp @@ -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; } diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index d8fd55d56..d17564606 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -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; }