mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-07 13:23:27 -04:00
d_a_agb 99%
This commit is contained in:
+1
-1
@@ -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
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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), ¤t.pos);
|
||||
fopAcM_create(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), ¤t.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), ¤t.pos);
|
||||
fopAcM_create(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_8, false, false), ¤t.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), ¤t.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,
|
||||
};
|
||||
|
||||
@@ -1196,7 +1196,7 @@ BOOL daAgbsw0_c::ExeSubR() {
|
||||
current.pos.y += mScale.y / 2.0f;
|
||||
}
|
||||
|
||||
fopAcM_fastCreateItem(¤t.pos, itemNo, fopAcM_GetHomeRoomNo(this), 0, 0, 0.0f, cM_rndF(10.0f) + 40.0f, -7.0f);
|
||||
fopAcM_fastCreateItem(¤t.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(¤t.pos, itemNo, roomNo, 0, 0, 0.0f, rnd, -7.0f);
|
||||
fopAcM_fastCreateItem(¤t.pos, itemNo, roomNo, NULL, NULL, 0.0f, rnd, -7.0f);
|
||||
MailSend(-1, 0, 0xFF, 0xFF, 0x11);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user