d_a_agb 99%

This commit is contained in:
LagoLunatic
2024-01-09 18:44:00 -05:00
parent f24ffc7345
commit 4c7ea01851
11 changed files with 399 additions and 70 deletions
+1 -1
View File
@@ -419,7 +419,7 @@ config.libs = [
Object(NonMatching, "d/d_salvage.cpp"),
Object(Matching, "d/d_snap.cpp"),
Object(Matching, "d/d_point_wind.cpp"),
Object(NonMatching, "d/actor/d_a_agb.cpp"),
Object(NonMatching, "d/actor/d_a_agb.cpp", extra_cflags=['-pragma "nosyminline on"']),
Object(Matching, "d/actor/d_a_arrow.cpp", extra_cflags=["-sym off"]),
Object(Matching, "d/actor/d_a_bg.cpp"),
Object(NonMatching, "d/actor/d_a_bomb.cpp"),
+39 -17
View File
@@ -43,7 +43,9 @@ public:
class daAgb_c : public fopAc_ac_c {
public:
// daAgb_BmRp_c struct?
struct daAgb_BmRp_c {
// TODO
};
void NameConv();
int uploadInitCheck();
@@ -77,8 +79,6 @@ public:
void modeDelete();
int createHeap();
daAgb_c();
inline void modeProcCall();
BOOL isMsgSend() { return mIsMsgSend; }
@@ -89,17 +89,22 @@ public:
void offBombDeny() { mBombDeny = false; }
void setDenyMessage(u16 msg) { mDenyMessage = msg; }
BOOL isFree() { return mIsFree; }
void offFree() {}
void isHold() {}
void offFree() { mIsFree = false; }
BOOL isHold() { return mHold; }
s32 getFollowTarget() { return mFollowTarget; }
void setFollowTarget(bool) {}
void getTargetID() {}
void setTargetID(unsigned int) {}
struct daAgb_ItemBuy {
/* 0x0 */ u8 field_0x0;
/* 0x1 */ u8 field_0x1;
} ALIGN_DECL(4);
union {
u32 U32;
struct {
/* 0x0 */ u8 field_0x0;
/* 0x1 */ u8 field_0x1;
} U8;
};
};
struct daAgb_GbaFlg {
/* 0x0 */ u16 field_0x0;
@@ -162,13 +167,30 @@ public:
/* 0x5 */ u8 field_0x5_1 : 1;
/* 0x5 */ u8 field_0x5_2 : 1;
/* 0x5 */ u8 field_0x5_3 : 3;
/* 0x5 */ u8 field_0x5_6 : 1;
/* 0x5 */ u8 field_0x5_7 : 1;
/* 0x6 */ u8 field_0x6;
/* 0x7 */ u8 field_0x7;
/* 0x8 */ u8 field_0x8;
/* 0x9 */ u8 field_0x9;
/* 0xA */ u8 field_0xa;
/* 0x5 */ u8 field_0x5_6 : 2;
/* 0x6 */ u8 field_0x6_0 : 3;
/* 0x6 */ u8 field_0x6_3 : 5;
/* 0x7 */ u8 field_0x7_0 : 1;
/* 0x7 */ u8 field_0x7_1 : 1;
/* 0x7 */ u8 field_0x7_2 : 6;
/* 0x8 */ u8 field_0x8_0 : 1;
/* 0x8 */ u8 field_0x8_1 : 7;
/* 0x9 */ u8 field_0x9_0 : 1;
/* 0x9 */ u8 field_0x9_1 : 1;
/* 0x9 */ u8 field_0x9_2 : 1;
/* 0x9 */ u8 field_0x9_3 : 1;
/* 0x9 */ u8 field_0x9_4 : 1;
/* 0x9 */ u8 field_0x9_5 : 1;
/* 0x9 */ u8 field_0x9_6 : 1;
/* 0x9 */ u8 field_0x9_7 : 1;
/* 0xA */ u8 field_0xa_0 : 1;
/* 0xA */ u8 field_0xa_1 : 1;
/* 0xA */ u8 field_0xa_2 : 1;
/* 0xA */ u8 field_0xa_3 : 1;
/* 0xA */ u8 field_0xa_4 : 1;
/* 0xA */ u8 field_0xa_5 : 1;
/* 0xA */ u8 field_0xa_6 : 1;
/* 0xA */ u8 field_0xa_7 : 1;
/* 0xB */ u8 field_0xb_0 : 1;
/* 0xB */ u8 field_0xb_3 : 5;
/* 0xB */ u8 field_0xb_6 : 1;
@@ -199,7 +221,7 @@ public:
/* 0x648 */ u64 mPlayerName;
/* 0x650 */ u32 field_0x650;
/* 0x654 */ int field_0x654;
/* 0x658 */ u16 field_0x658;
/* 0x658 */ s16 field_0x658;
/* 0x65A */ u16 mPrevButtons;
/* 0x65C */ u16 field_0x65c;
/* 0x65E */ u16 field_0x65e;
@@ -219,7 +241,7 @@ public:
/* 0x671 */ bool mIsFree;
/* 0x672 */ bool mIsActive;
/* 0x673 */ u8 field_0x673;
/* 0x674 */ u8 field_0x674;
/* 0x674 */ bool mHold;
/* 0x675 */ u8 field_0x675;
/* 0x676 */ u8 field_0x676;
/* 0x677 */ u8 mFollowTarget;
+9 -4
View File
@@ -2307,9 +2307,10 @@ public:
s16 checkTinkleShield() const { return mTinkleShieldTimer; }
void setTinkleShield(s16 time) { mTinkleShieldTimer = time; }
bool checkNoDamageMode() const { return checkEquipDragonShield() || checkTinkleShield() != 0; }
s16 checkTinkleHover() const { return mTinkleHoverTimer; }
void setHoverBoots(s16 time) {
onNoResetFlg0(daPyFlg0_HOVER_BOOTS);
m354C = time;
mTinkleHoverTimer = time;
}
void onShipTact() { onNoResetFlg1(daPyFlg1_SHIP_TACT); }
void offShipTact() { offNoResetFlg1(daPyFlg1_SHIP_TACT); }
@@ -2332,6 +2333,11 @@ public:
void npcStartRestartRoom() {}
void setDaiokutaEnd() {}
void setWhirlId(unsigned int) {}
void decrementBombCnt() {
if (mActivePlayerBombs != 0) {
mActivePlayerBombs--;
}
}
int getStartRoomNo() { return fopAcM_GetParam(this) & 0x3F; }
int getStartMode() { return (fopAcM_GetParam(this) >> 0x0C) & 0xF; }
@@ -2370,10 +2376,8 @@ public:
void checkSpecialDemoMode() const {}
void checkSwordEquip() const {}
void checkSwordEquipAnime() const {}
void checkTinkleHover() const {}
void checkUpperAnime(u16) const {}
void checkUpperGuardAnime() const {}
void decrementBombCnt() {}
void doButton() const {}
void doTrigger() const {}
void getAnmSpeedStickRate(f32, f32) {}
@@ -2440,6 +2444,7 @@ public:
virtual void changeTextureAnime(u16, u16, int);
virtual void cancelChangeTextureAnime() { resetDemoTextureAnime(); }
public:
/* 0x0320 */ request_of_phase_process_class mPhsLoad;
/* 0x0328 */ J3DModelData* mpCLModelData;
/* 0x032C */ J3DModel* mpCLModel;
@@ -2665,7 +2670,7 @@ public:
/* 0x3546 */ s16 mShieldFrontRangeYAngle;
/* 0x3548 */ s16 m3548;
/* 0x354A */ u8 m354A[0x354C - 0x354A];
/* 0x354C */ s16 m354C;
/* 0x354C */ s16 mTinkleHoverTimer;
/* 0x354E */ s16 mTinkleShieldTimer;
/* 0x3550 */ s16 m3550;
/* 0x3552 */ u16 mKeepItemType;
+1
View File
@@ -44,6 +44,7 @@ enum daPy__PlayerStatus0 {
daPyStts0_TELESCOPE_LOOK_e = 0x00200000,
daPyStts0_BOOMERANG_WAIT_e = 0x00400000,
daPyStts0_CRAWL_e = 0x08000000,
daPyStts0_UNK20000000_e = 0x20000000,
daPyStts0_SPIN_ATTACK_e = 0x40000000,
};
+1
View File
@@ -365,5 +365,6 @@ void dKyw_pwind_cylinder_set(WIND_INFLUENCE*);
void dKyw_evt_wind_set(s16 i_windX, s16 i_windY);
void dKyw_evt_wind_set_go();
void dKyw_get_AllWind_vec(cXyz* param_0, cXyz* i_direction, f32* i_power);
BOOL dKyw_gbwind_use_check();
#endif /* D_KANKYO_WETHER_H */
+2
View File
@@ -1083,6 +1083,8 @@ int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no);
void dStage_restartRoom(u32 roomParam, u32 mode);
BOOL dStage_checkRestart();
static inline u8 IkadaGetRoomNoArg0(fopAc_ac_c* i_actor) {
return (fopAcM_GetParam(i_actor) >> 4) & 0x3F;
}
+5
View File
@@ -141,6 +141,11 @@ inline void fopAcM_OffStatus(fopAc_ac_c* pActor, u32 flag) {
pActor->mStatus &= ~flag;
}
inline BOOL fopAcM_CheckStatusMap(fopAc_ac_c* pActor, u32) {
// TODO: This implementation probably isn't right, the u32 argument is likely used for something
return (pActor->mStatus & fopAcStts_SHOWMAP_e) && (pActor->mStatus & 0x1F) == 0;
}
inline void fopAcM_SetStatusMap(fopAc_ac_c* pActor, u32 flag) {
pActor->mStatus = (pActor->mStatus & ~0x3F) | fopAcStts_SHOWMAP_e | flag;
}
+333 -35
View File
@@ -13,23 +13,21 @@
#include "d/d_item_data.h"
#include "d/d_meter.h"
#include "d/d_procname.h"
#include "d/d_kankyo_wether.h"
#include "m_Do/m_Do_controller_pad.h"
#include "m_Do/m_Do_dvd_thread.h"
#include "m_Do/m_Do_gba_com.h"
#include "m_Do/m_Do_mtx.h"
#include "d/actor/d_a_npc_md.h"
#include "d/actor/d_a_npc_cb1.h"
#include "d/actor/d_a_bomb.h"
static u8 dummy_3569[0xC];
// stripped or compiler generated?
static u32 unused_lit_2100[] = {0x3F800000, 0x3F800000, 0x3F800000,
0x3F800000, 0x3F800000, 0x3F800000};
// temp
class daNpc_Cb1_c {
public:
static bool m_flying;
};
static mDoDvdThd_toMainRam_c* l_gbaCommand;
int daAgb_c::mEffect;
@@ -420,7 +418,7 @@ void daAgb_c::modeLookAttention() {
se_flag = false;
field_0x65c = 1;
if (field_0x674 == 0) {
if (mHold == 0) {
shape_angle.x = 0;
shape_angle.y = 0;
shape_angle.z = 0;
@@ -505,13 +503,13 @@ void daAgb_c::onFree() {
/* 800D05F0-800D0608 .text onHold__7daAgb_cFv */
void daAgb_c::onHold() {
field_0x674 = 1;
mHold = true;
mBrk.setPlaySpeed(6.0f);
}
/* 800D0608-800D0620 .text offHold__7daAgb_cFv */
void daAgb_c::offHold() {
field_0x674 = 0;
mHold = false;
mBrk.setPlaySpeed(1.0f);
}
@@ -544,7 +542,7 @@ void daAgb_c::resetCursor(bool param_0) {
field_0x676 = 0;
}
field_0x674 = 0;
mHold = false;
mBrk.setPlaySpeed(1.0f);
}
@@ -724,7 +722,7 @@ void daAgb_c::GbaItemUse() {
temp_r29 = 15;
}
fopAcM_create(0x128, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), &current.pos);
fopAcM_create(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), &current.pos);
field_0x65c = 0x78;
} else {
temp_r29 = 0xe;
@@ -735,7 +733,7 @@ void daAgb_c::GbaItemUse() {
break;
case 0x15:
resetCursor(false);
fopAcM_create(0x128, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), &current.pos);
fopAcM_create(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), &current.pos);
field_0x65c = 0x78;
break;
case 0x11:
@@ -856,60 +854,171 @@ void daAgb_c::GbaItemUse() {
/* 800D1188-800D12E4 .text Shopping__7daAgb_cFv */
void daAgb_c::Shopping() {
daAgb_ItemBuy& itemBuy = mItemBuy;
mItemBuy.field_0x0 = mShop.field_0x0;
mItemBuy.U8.field_0x0 = mShop.field_0x0;
// The usage of single | instead of double || here looks like a bug
if (!(dComIfGp_event_runCheck() | dMenu_flag())) {
if (dComIfGs_getRupee() < mShop.field_0x2) {
itemBuy.field_0x1 = 3;
itemBuy.U8.field_0x1 = 3;
return;
} else if (mShop.field_0x0 == 0) {
if (dComIfGs_getArrowNum() < dComIfGs_getArrowMax()) {
dComIfGp_setItemArrowNumCount(mShop.field_0x1);
} else {
itemBuy.field_0x1 = 2;
itemBuy.U8.field_0x1 = 2;
return;
}
} else if (mShop.field_0x0 == 1) {
if (dComIfGs_getBombNum() < dComIfGs_getBombMax()) {
dComIfGp_setItemBombNumCount(mShop.field_0x1);
} else {
itemBuy.field_0x1 = 2;
itemBuy.U8.field_0x1 = 2;
return;
}
} else {
if (dComIfGs_checkBaitItemEmpty()) {
dComIfGs_setBaitItem(BIRD_ESA_5);
} else {
itemBuy.field_0x1 = 2;
itemBuy.U8.field_0x1 = 2;
return;
}
}
dComIfGp_setItemRupeeCount(-mShop.field_0x2);
itemBuy.field_0x1 = 1;
itemBuy.U8.field_0x1 = 1;
} else {
itemBuy.field_0x1 = 0;
itemBuy.U8.field_0x1 = 0;
}
}
/* 800D12E4-800D1A3C .text FlagsSend__7daAgb_cFUl */
void daAgb_c::FlagsSend(u32) {
/* Nonmatching */
void daAgb_c::FlagsSend(u32 stage_type) {
if (field_0x670 &&
(stage_type == dSv_save_c::STAGE_SEA2 ||
stage_type == dSv_save_c::STAGE_TOTG ||
stage_type == dSv_save_c::STAGE_ET ||
stage_type == dSv_save_c::STAGE_WT))
{
mFlags.field_0xa_7 = 0;
} else {
mFlags.field_0xa_7 = 1;
}
mFlags.field_0xa_6 = dMenu_flag();
mFlags.field_0xa_5 = dComIfGp_event_getMode() != dEvtMode_NONE_e;
if (dStage_checkRestart() || dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK20000000_e)) {
mFlags.field_0xa_4 = 1;
} else {
mFlags.field_0xa_4 = 0;
}
mFlags.field_0x0 = BigLittleChange(dComIfGs_getRupee()) >> 16;
mFlags.field_0x5_6 = dComIfGs_getWalletSize();
if (dKyw_gbwind_use_check()) {
mFlags.field_0xb_6 = 1;
s16 r3;
// Fakematch: using the dComIfGp_event_runCheck inline breaks the match
// if (dComIfGp_event_runCheck() && (dComIfGp_evmng_startCheck("TACT_WINDOW2_SHIP") || dComIfGp_evmng_startCheck("TACT_WINDOW2"))) {
if (g_dComIfG_gameInfo.play.getEvent().runCheck() &&
(dComIfGp_evmng_startCheck("TACT_WINDOW2_SHIP") || dComIfGp_evmng_startCheck("TACT_WINDOW2")))
{
r3 = field_0x658;
} else {
cXyz* wind_vec = dKyw_get_wind_vec();
r3 = cM_atan2s(wind_vec->x, wind_vec->z);
}
mFlags.field_0x2 = (r3 & 0xFF00) >> 8;
field_0x658 = r3;
} else {
mFlags.field_0xb_6 = 0;
}
mFlags.field_0x3_4 = dComIfGs_isStageTbox(dSv_save_c::STAGE_DRC, 0xF) != FALSE;
mFlags.field_0x3_3 = dComIfGs_isStageTbox(dSv_save_c::STAGE_FW, 0xF) != FALSE;
mFlags.field_0x3_2 = dComIfGs_isStageTbox(dSv_save_c::STAGE_TOTG, 0xF) != FALSE;
mFlags.field_0x3_1 = dComIfGs_isStageTbox(dSv_save_c::STAGE_ET, 0xF) != FALSE;
mFlags.field_0x3_0 = dComIfGs_isStageTbox(dSv_save_c::STAGE_WT, 0xF) != FALSE;
mFlags.field_0x4 = (field_0x65c + 29) / 30;
mFlags.field_0x6_0 = dKy_get_dayofweek();
mFlags.field_0x6_3 = dKy_getdaytime_hour();
mFlags.field_0x7_2 = dKy_getdaytime_minute();
mFlags.field_0x8_1 = dComIfGs_getLife();
mFlags.field_0xa_1 = dComIfGs_isEventBit(0x1708);
mFlags.field_0x7_1 = dComIfGs_isEventBit(0x1A10);
mFlags.field_0x7_0 = dComIfGs_isEventBit(0x1A08);
if (!dComIfGs_isEventBit(0x0F80) || dComIfGs_isEventBit(0x1E80)) {
mFlags.field_0x9_7 = 0;
mFlags.field_0x9_6 = 0;
mFlags.field_0x9_5 = 0;
} else if (dComIfGs_isSymbol(2)) {
mFlags.field_0x9_7 = 0;
mFlags.field_0x9_6 = 0;
mFlags.field_0x9_5 = 1;
} else if (dComIfGs_isSymbol(1)) {
mFlags.field_0x9_7 = 0;
mFlags.field_0x9_6 = 1;
mFlags.field_0x9_5 = 0;
} else {
mFlags.field_0x9_7 = 1;
mFlags.field_0x9_6 = 0;
mFlags.field_0x9_5 = 0;
}
if (dComIfGs_isEventBit(0x3920)) {
mFlags.field_0x9_4 = !dComIfGs_isEventBit(0x1480);
mFlags.field_0x9_3 = !dComIfGs_isEventBit(0x1440);
mFlags.field_0x9_2 = !dComIfGs_isEventBit(0x1410);
} else {
mFlags.field_0x9_4 = 0;
mFlags.field_0x9_3 = 0;
mFlags.field_0x9_2 = 0;
}
if (dComIfGs_isEventBit(0x1820)) {
mFlags.field_0x9_1 = !dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_WT);
mFlags.field_0x9_0 = !dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_ET);
} else {
mFlags.field_0x9_1 = 0;
mFlags.field_0x9_0 = 0;
}
mFlags.field_0xa_3 = dComIfGs_isEventBit(0x1E40);
mFlags.field_0xa_0 = mIsFree;
mFlags.field_0xb_7 = mFollowTarget;
if (stage_type == dSv_save_c::STAGE_ET) {
mFlags.field_0x8_0 = 1;
} else {
mFlags.field_0x8_0 = 0;
}
mFlags.field_0x3_7 = dComIfGs_isTact(0);
if (*(u16*)&g_mDoCPd_cpadInfo[0].mButtonHold || // fakematch? is controller_pad_buttons supposed to be a u16?
g_mDoCPd_cpadInfo[0].mMainStickValue ||
g_mDoCPd_cpadInfo[0].mCStickValue)
{
mFlags.field_0x3_6 = 1;
} else {
mFlags.field_0x3_6 = 0;
}
if (dComIfGs_getMaxMagic() != 0) {
mFlags.field_0xb_0 = 1;
} else {
mFlags.field_0xb_0 = 0;
}
mFlags.field_0x5_2 = field_0x675;
mFlags.field_0x5_1 = dComIfGs_checkGetItem(COTTAGE_PAPER) != FALSE;
mDoGac_SendDataSet((u32*)&mFlags, 0xC, 9, 0);
}
/* 800D1A3C-800D25D8 .text CursorMove__7daAgb_cFP10fopAc_ac_cUl */
void daAgb_c::CursorMove(fopAc_ac_c* actor, u32 r17) {
void daAgb_c::CursorMove(fopAc_ac_c* actor, u32 stage_type) {
daPy_py_c* player = daPy_getPlayerActorClass();
f32 f31;
if (r17 == 7) {
if (stage_type == dSv_save_c::STAGE_WT) {
f31 = field_0x67e != 0 ? 50.0f : 781.25f;
} else {
f31 = 25.0f;
}
if (cLib_chaseF(&field_0x628, 2.5f, field_0x62c) &&
field_0x673 != 0 && isActive() && field_0x674 == 0 &&
field_0x673 != 0 && isActive() && !mHold &&
!CPad_CHECK_HOLD_L(mDoGaC_getPortNo())
) {
if (CPad_CHECK_HOLD_LEFT(mDoGaC_getPortNo())) {
@@ -923,7 +1032,7 @@ void daAgb_c::CursorMove(fopAc_ac_c* actor, u32 r17) {
actor->orig.pos.z += f31;
}
if (r17 == 7 && field_0x67e == 0) {
if (stage_type == dSv_save_c::STAGE_WT && field_0x67e == 0) {
if (actor->orig.pos.x < -350000.0f) {
actor->orig.pos.x = -350000.0f;
} else if (actor->orig.pos.x > 350000.0f) {
@@ -1043,7 +1152,174 @@ void daAgb_c::CursorMove(fopAc_ac_c* actor, u32 r17) {
/* 800D272C-800D303C .text modeMove__7daAgb_cFv */
void daAgb_c::modeMove() {
/* Nonmatching */
/* Nonmatching - regalloc */
daPy_py_c* player = daPy_getPlayerActorClass();
// single | instead of double ||: bug?
BOOL r26 = dComIfGp_event_runCheck() | dMenu_flag();
u32 stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo());
if (mEvtInfo.checkCommandTalk()) {
mUploadAction = 0;
mMode = 2;
return;
}
if (field_0x65c != 0) {
if (field_0x66b == 3 || field_0x66b == 12) {
field_0x65c = daPy_getPlayerLinkActorClass()->checkTinkleHover();
if (field_0x65c == 0) {
mBrk.setPlaySpeed(1.0f);
}
} else if (field_0x66b == 4 || field_0x66b == 13) {
field_0x65c = daPy_getPlayerLinkActorClass()->checkTinkleShield();
if (field_0x65c == 0) {
mBrk.setPlaySpeed(1.0f);
}
} else if (!r26) {
field_0x65c--;
if (field_0x66b == 0xE) {
if (field_0x65c == 0x78) {
fopAcM_create(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), &current.pos);
} else if (field_0x65c == 0) {
resetCursor(false);
}
}
if (field_0x66b == 15 && field_0x65c == 30) {
fopAcM_fastCreateItem(&field_0x634, field_0x640, -1, NULL, NULL, 5.0f, 50.0f, -7.0f);
}
}
}
if (field_0x673 != 0 && !r26 && field_0x65c == 0) {
mIsActive = true;
} else {
mIsActive = false;
}
if (mDoGaC_GbaLink() && mDoGaC_RecvStatusCheck(6) && mDoGac_SendStatusCheck(7)) {
if (isActive() || mItem.field_0x0 == 0x15) {
GbaItemUse();
} else {
mEffect = 0;
}
mDoGaC_DataStatusReset(6);
mDoGac_SendDataSet((u32*)&mEffect, 4, 7, mEffect);
}
if (field_0x67f != 0) {
field_0x67f = 0;
if (field_0x67d == 0 &&
!daPy_getPlayerLinkActorClass()->checkNoControll() &&
!dComIfGp_checkPlayerStatus0(0, daPyStts0_CRAWL_e) &&
(
!daPy_getPlayerActorClass()->checkPlayerFly() ||
dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) ||
dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)
)
) {
mMode = 1;
mIsActive = false;
mEyePos = current.pos;
cXyz sp3c = mEyePos - player->current.pos;
if (sp3c.absXZ() < 10.0f) {
mEyePos.x += 10.0f * cM_ssin(player->shape_angle.y);
mEyePos.z += 10.0f * cM_scos(player->shape_angle.y);
}
mAttentionInfo.mPosition = mEyePos;
if (isHold()) {
s16 angle = fopAcM_searchPlayerAngleY(this);
if (field_0x675 == 0) {
angle = -angle;
}
shape_angle.z = angle;
} else {
shape_angle.y = fopAcM_searchPlayerAngleY(this);
shape_angle.x = cM_atan2s((player->mEyePos - mEyePos).absXZ(), player->mEyePos.y - mEyePos.y);
field_0x628 = 50.0f;
}
field_0x66b = 0x10;
field_0x65c = 3*30;
}
}
if (mDoGaC_GbaLink() && mDoGaC_RecvStatusCheck(0xC) && mDoGac_SendStatusCheck(0xD)) {
Shopping();
mDoGaC_DataStatusReset(0xC);
mDoGac_SendDataSet((u32*)&mItemBuy, 4, 0xD, mItemBuy.U32);
}
if ((g_mDoCPd_cpadInfo[mDoGaC_getPortNo()].mGamepadErrorFlags == 0 && fopAcM_GetName(player) != PROC_NPC_KAM) &&
((isActive() && field_0x675 == 0 && CPad_CHECK_TRIG_R(mDoGaC_getPortNo())) ||
(mFlags.field_0x3_5 != 0 && (CPad_CHECK_TRIG_R(mDoGaC_getPortNo()) || CPad_CHECK_TRIG_A(mDoGaC_getPortNo())))))
{
offHold();
mIsFree = false;
if (getFollowTarget() != 0) {
field_0x650 = -1;
mFollowTarget = 0;
} else if (stage_type != dSv_save_c::STAGE_ET) {
dAttList_c* attList = dComIfGp_getAttention().GetLockonList(0);
if (attList) {
fopAc_ac_c* r3 = attList->getActor();
if (r3) {
if (fopAcM_CheckStatusMap(r3, 0) && !fopAcM_checkStatus(r3, fopAcStts_BOSS_e) && fopAcM_GetName(r3) != PROC_FGANON) {
current.pos = r3->current.pos;
orig.pos = r3->current.pos;
field_0x650 = attList->getPid();
mFollowTarget = 1;
}
}
}
}
}
if (!isFree()) {
if (getFollowTarget() == 1) {
fopAc_ac_c* r3 = fopAcM_SearchByID(field_0x650);
if (r3 == NULL || !fopAcM_CheckStatusMap(r3, 0)) {
field_0x650 = -1;
mFollowTarget = 0;
}
}
if (getFollowTarget() == 0) {
if (fopAcM_GetName(player) == PROC_NPC_KAM) {
onFree();
} else {
current.pos = player->current.pos;
orig.pos = player->current.pos;
}
} else {
fopAc_ac_c* r3 = fopAcM_SearchByID(field_0x650);
current.pos = r3->current.pos;
orig.pos = r3->current.pos;
}
shape_angle.setall(0);
field_0x628 = 2.5f;
if (g_mDoCPd_cpadInfo[mDoGaC_getPortNo()].mGamepadErrorFlags == 0 && !CPad_CHECK_HOLD_L(mDoGaC_getPortNo()) && (
CPad_CHECK_HOLD_LEFT(mDoGaC_getPortNo()) | CPad_CHECK_HOLD_RIGHT(mDoGaC_getPortNo()) |
CPad_CHECK_HOLD_UP(mDoGaC_getPortNo()) | CPad_CHECK_HOLD_DOWN(mDoGaC_getPortNo())
) && isActive() && !mHold)
{
onFree();
}
} else if (!mHold) {
CursorMove(this, stage_type);
}
if (mMode == 0) {
mEvtInfo.onCondition(dEvtCnd_CANTALK_e);
}
}
/* 800D303C-800D30D4 .text modeDelete__7daAgb_cFv */
@@ -1081,10 +1357,10 @@ static int daAgb_Execute(daAgb_c* i_this) {
g_mDoCPd_cpadInfo[mDoGaC_getPortNo()].mGamepadErrorFlags = 1;
}
BOOL var_r27 = dComIfGp_event_runCheck() != 0;
var_r27 |= dMenu_flag();
// single | instead of double ||: bug?
BOOL var_r27 = dComIfGp_event_runCheck() | dMenu_flag();
u32 st_type = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo());
u32 stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo());
if (mDoGaC_GbaLink()) {
if (mDoGaC_RecvStatusCheck(8)) {
@@ -1092,7 +1368,7 @@ static int daAgb_Execute(daAgb_c* i_this) {
}
if (mDoGac_SendStatusCheck(9)) {
i_this->FlagsSend(st_type);
i_this->FlagsSend(stage_type);
}
i_this->field_0x680 = 1;
@@ -1132,7 +1408,7 @@ static int daAgb_Execute(daAgb_c* i_this) {
daPy_lk_c* player_p2 = daPy_getPlayerLinkActorClass();
if ((dComIfGp_getPlayer(0) == player_p2 && !player->checkPlayerFly()) ||
((fopAcM_GetName(player) == PROC_NPC_MD && !daNpc_Md_c::isFlying()) ||
(fopAcM_GetName(player) == PROC_NPC_CB1 && !daNpc_Cb1_c::m_flying) ||
(fopAcM_GetName(player) == PROC_NPC_CB1 && !daNpc_Cb1_c::isFlying()) ||
fopAcM_GetName(player) == PROC_NPC_OS))
{
f32 speedF = fabs(player->speedF);
@@ -1153,7 +1429,7 @@ static int daAgb_Execute(daAgb_c* i_this) {
}
}
if ((int)i_this->field_0x674 != 0 && var_r27 == 0 && i_this->mMode != 1) {
if (i_this->isHold() && !var_r27 && i_this->mMode != 1) {
if (i_this->field_0x675 != 0) {
if (i_this->field_0x676 != 0) {
i_this->shape_angle.z += 0x1000;
@@ -1201,7 +1477,7 @@ static int daAgb_Draw(daAgb_c* i_this) {
u8 var_r6 = 1;
if (mDoGaC_GbaLink()) {
if (i_this->field_0x66f != 0 && !(daAgb_c::mFlags.field_0xa & 1) &&
if (i_this->field_0x66f != 0 && !daAgb_c::mFlags.field_0xa_7 &&
(!dComIfGp_event_runCheck() ||
dComIfGp_evmng_startCheck("DEFAULT_AGB_LOOK_ATTENTION") ||
i_this->mMode == 2) &&
@@ -1324,5 +1600,27 @@ static int daAgb_Create(fopAc_ac_c* i_this) {
return phase;
}
/* 800D3D2C-800D3DDC .text __ct__7daAgb_cFv */
daAgb_c::daAgb_c() : field_0x684(0, 0) {}
actor_method_class l_daAgb_Method = {
(process_method_func)daAgb_Create,
(process_method_func)daAgb_Delete,
(process_method_func)daAgb_Execute,
(process_method_func)daAgb_IsDelete,
(process_method_func)daAgb_Draw,
};
actor_process_profile_definition g_profile_AGB = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 7,
/* ListPrio */ fpcLy_CURRENT_e,
/* ProcName */ PROC_AGB,
/* Proc SubMtd */ &g_fpcLf_Method.mBase,
/* Size */ sizeof(daAgb_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ 0x000C,
/* Actor SubMtd */ &l_daAgb_Method,
/* Status */ fopAcStts_UNK4000_e | fopAcStts_NOPAUSE_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_0_e,
};
+2 -2
View File
@@ -1196,7 +1196,7 @@ BOOL daAgbsw0_c::ExeSubR() {
current.pos.y += mScale.y / 2.0f;
}
fopAcM_fastCreateItem(&current.pos, itemNo, fopAcM_GetHomeRoomNo(this), 0, 0, 0.0f, cM_rndF(10.0f) + 40.0f, -7.0f);
fopAcM_fastCreateItem(&current.pos, itemNo, fopAcM_GetHomeRoomNo(this), NULL, NULL, 0.0f, cM_rndF(10.0f) + 40.0f, -7.0f);
fopAcM_seStart(agb, JA_SE_CV_CHI_MEGAHORN, 0);
MailSend(-1, 0, 0xFF, 0xFF, 0);
@@ -1461,7 +1461,7 @@ BOOL daAgbsw0_c::ExeSubD() {
if(0 <= itemNo && itemNo < 0x1F && itemNo != KAKERA_HEART && itemNo != UTUWA_HEART && itemNo != SMALL_KEY) {
s8 roomNo = fopAcM_GetHomeRoomNo(this);
f32 rnd = cM_rndF(10.0f) + 40.0f;
fopAcM_fastCreateItem(&current.pos, itemNo, roomNo, 0, 0, 0.0f, rnd, -7.0f);
fopAcM_fastCreateItem(&current.pos, itemNo, roomNo, NULL, NULL, 0.0f, rnd, -7.0f);
MailSend(-1, 0, 0xFF, 0xFF, 0x11);
}
+2 -7
View File
@@ -799,10 +799,7 @@ int daBomb_c::procExplode_init() {
mAttentionInfo.mFlags &= ~fopAc_Attn_ACTION_CARRY_e;
if(field_0x6F0) {
if(daPy_getPlayerLinkActorClass()->mActivePlayerBombs != 0) {
daPy_getPlayerLinkActorClass()->mActivePlayerBombs -= 1;
}
daPy_getPlayerLinkActorClass()->decrementBombCnt();
field_0x6F0 = 0;
}
@@ -1208,9 +1205,7 @@ bool daBomb_c::bombDelete() {
mSparks.mpEmitter = 0;
if(field_0x6F0) {
if(daPy_getPlayerLinkActorClass()->mActivePlayerBombs != 0) {
daPy_getPlayerLinkActorClass()->mActivePlayerBombs -= 1;
}
daPy_getPlayerLinkActorClass()->decrementBombCnt();
}
se_cannon_fly_stop();
+4 -4
View File
@@ -2350,18 +2350,18 @@ void dStage_escapeRestart() {
}
/* 80043C84-80043CD0 .text dStage_checkRestart__Fv */
bool dStage_checkRestart() {
BOOL dStage_checkRestart() {
if (dComIfGp_isEnableNextStage()) {
if (dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) {
return false;
return FALSE;
}
if (dComIfGs_getRestartRoomParam() != 0) {
return true;
return TRUE;
}
}
return false;
return FALSE;
}
dStage_roomStatus_c dStage_roomControl_c::mStatus[64];