From cbc5be21cdfbf3272881c92efd19ab3463eba339 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 30 Jun 2024 15:45:44 -0400 Subject: [PATCH] player_main work --- include/d/actor/d_a_boomerang.h | 9 +-- include/d/actor/d_a_player.h | 1 + include/d/actor/d_a_player_main.h | 4 +- src/d/actor/d_a_player_main.cpp | 119 +++++++++++++++++++++++++++--- 4 files changed, 115 insertions(+), 18 deletions(-) diff --git a/include/d/actor/d_a_boomerang.h b/include/d/actor/d_a_boomerang.h index 49153df8d..d133cc13f 100644 --- a/include/d/actor/d_a_boomerang.h +++ b/include/d/actor/d_a_boomerang.h @@ -6,7 +6,7 @@ class daBoomerang_c : public fopAc_ac_c { public: - void onCancelFlg() {} + void onCancelFlg() { mCancelFlg = true; } daBoomerang_c(); s32 create(); @@ -27,6 +27,8 @@ public: public: /* Place member variables here */ + /* 0x290 */ u8 m290[0xF34 - 0x290]; + /* 0xF34 */ bool mCancelFlg; }; class daBoomerang_blur_c { @@ -43,9 +45,4 @@ public: void play(int); }; -class dBgS_BoomerangLinChk { -public: - ~dBgS_BoomerangLinChk(); -}; - #endif /* D_A_BOOMERANG_H */ diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index bf21b962a..74259998a 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -125,6 +125,7 @@ public: daPyFlg1_UNK800000 = 0x00800000, daPyFlg1_UNK1000000 = 0x01000000, daPyFlg1_VINE_CATCH = 0x02000000, + daPyFlg1_UNK4000000 = 0x04000000, daPyFlg1_UNK8000000 = 0x08000000, daPyFlg1_UNK10000000 = 0x10000000, daPyFlg1_LAST_COMBO_WAIT = 0x20000000, diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 08f31a09b..5698fa7e9 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -827,7 +827,7 @@ public: void seStartSwordCut(u32); BOOL itemButton() const; BOOL itemTrigger() const; - u8 getReadyItem(); + int getReadyItem(); BOOL checkGroupItem(int, int); BOOL checkSetItemTrigger(int, int); BOOL auraJointCB0(int); @@ -895,7 +895,7 @@ public: void setBlendMoveAnime(f32); void setBlendAtnBackMoveAnime(f32); void setBlendAtnMoveAnime(f32); - void setAnimeEquipSword(int); + void setAnimeEquipSword(BOOL); void setAnimeEquipSingleItem(u16); void setAnimeEquipItem(); void setAnimeUnequipSword(); diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 3f8a28da4..519df981e 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -28,6 +28,7 @@ #include "d/actor/d_a_ship.h" #include "d/actor/d_a_boko.h" #include "d/actor/d_a_npc_sarace.h" +#include "d/actor/d_a_boomerang.h" #include "SSystem/SComponent/c_counter.h" #include "m_Do/m_Do_graphic.h" @@ -333,7 +334,7 @@ BOOL daPy_lk_c::itemTrigger() const { } /* 80103214-80103258 .text getReadyItem__9daPy_lk_cFv */ -u8 daPy_lk_c::getReadyItem() { +int daPy_lk_c::getReadyItem() { if (mReadyItemIdx == 0) { return dComIfGp_getSelectItem(0); } else if (mReadyItemIdx == 1) { @@ -1302,33 +1303,131 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32) { } /* 8010C010-8010C100 .text setAnimeEquipSword__9daPy_lk_cFi */ -void daPy_lk_c::setAnimeEquipSword(int) { - /* Nonmatching */ +void daPy_lk_c::setAnimeEquipSword(BOOL r4) { + if (!checkSwordEquip()) { + return; + } + m3562 = daPyItem_SWORD_e; + f32 rate = daPy_HIO_cut_c0::m.field_0x8; + f32 start = daPy_HIO_cut_c0::m.field_0xC; + s16 end = daPy_HIO_cut_c0::m.field_0x0; + f32 f3 = daPy_HIO_cut_c0::m.field_0x10; + setActAnimeUpper(LKANM_BCK_REST, UPPER_MOVE2_e, rate, start, end, f3); + setPriTextureAnime(0x72, 0); + dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); + if (mActorKeepThrow.getActor() != NULL) { + daBoomerang_c* boomerang = (daBoomerang_c*)mActorKeepThrow.getActor(); + boomerang->onCancelFlg(); + } + if (!r4) { + onNoResetFlg1(daPyFlg1_UNK4000000); + } else { + offNoResetFlg1(daPyFlg1_UNK4000000); + } } /* 8010C100-8010C158 .text setAnimeEquipSingleItem__9daPy_lk_cFUs */ -void daPy_lk_c::setAnimeEquipSingleItem(u16) { - /* Nonmatching */ +void daPy_lk_c::setAnimeEquipSingleItem(u16 bckIdx) { + f32 rate = daPy_HIO_item_c0::m.field_0x14; + f32 start = daPy_HIO_item_c0::m.field_0x18; + s16 end = daPy_HIO_item_c0::m.field_0x2; + f32 f3 = daPy_HIO_item_c0::m.field_0x1C; + setActAnimeUpper(bckIdx, UPPER_MOVE2_e, rate, start, end, f3); + setPriTextureAnime(0x74, 0); } /* 8010C158-8010C1D4 .text setAnimeEquipItem__9daPy_lk_cFv */ void daPy_lk_c::setAnimeEquipItem() { - /* Nonmatching */ + if (mActorKeepThrow.getActor() != NULL) { + if (getReadyItem() == dItem_BOOMERANG_e) { + return; + } + daBoomerang_c* boomerang = (daBoomerang_c*)mActorKeepThrow.getActor(); + boomerang->onCancelFlg(); + } + u8 itemNo = getReadyItem(); + m3562 = itemNo; + dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); + setAnimeUnequipItem(m3562); } /* 8010C1D4-8010C284 .text setAnimeUnequipSword__9daPy_lk_cFv */ void daPy_lk_c::setAnimeUnequipSword() { - /* Nonmatching */ + f32 rate; + f32 start; + s16 end; + f32 f3; + if (checkModeFlg( + // These combine to: 0x01FD2810 + ModeFlg_WHIDE | + ModeFlg_ROPE | + ModeFlg_IN_SHIP | + ModeFlg_CLIMB | + ModeFlg_SWIM | + ModeFlg_00080000 | + ModeFlg_GRAB | + ModeFlg_PUSHPULL | + ModeFlg_LADDER | + ModeFlg_CROUCH | + ModeFlg_CRAWL + ) || dComIfGp_event_runCheck() || mDemo.getDemoType() != 0) { + rate = daPy_HIO_cut_c0::m.field_0x20; + start = daPy_HIO_cut_c0::m.field_0x24; + end = daPy_HIO_cut_c0::m.field_0x4; + f3 = daPy_HIO_cut_c0::m.field_0x28; + } else { + rate = daPy_HIO_cut_c0::m.field_0x14; + start = daPy_HIO_cut_c0::m.field_0x18; + end = daPy_HIO_cut_c0::m.field_0x2; + f3 = daPy_HIO_cut_c0::m.field_0x1C; + } + + setActAnimeUpper(LKANM_BCK_REST, UPPER_MOVE2_e, rate, start, end, f3); + setPriTextureAnime(0x72, 0); } /* 8010C284-8010C3C0 .text setAnimeUnequipItem__9daPy_lk_cFUs */ -void daPy_lk_c::setAnimeUnequipItem(u16) { - /* Nonmatching */ +void daPy_lk_c::setAnimeUnequipItem(u16 i_itemNo) { + if (i_itemNo == dItem_BOOMERANG_e || + i_itemNo == dItem_GRAPPLING_HOOK_e || + i_itemNo == dItem_TELESCOPE_e || + checkPhotoBoxItem(i_itemNo) || + i_itemNo == dItem_HOOKSHOT_e || + i_itemNo == dItem_DEKU_LEAF_e || + i_itemNo == dItem_TINGLE_TUNER_e || + i_itemNo == dItem_WIND_WAKER_e || + checkBottleItem(i_itemNo) + ) { + setAnimeEquipSingleItem(LKANM_BCK_TAKEL); + } else if (checkBowItem(i_itemNo)) { + setAnimeEquipSingleItem(LKANM_BCK_TAKER); + } else if (i_itemNo == dItem_SKULL_HAMMER_e) { + f32 rate = daPy_HIO_item_c0::m.field_0x24; + f32 start = daPy_HIO_item_c0::m.field_0x28; + s16 end = daPy_HIO_item_c0::m.field_0x4; + f32 f3 = daPy_HIO_item_c0::m.field_0x2C; + setActAnimeUpper(LKANM_BCK_TAKEBOTH, UPPER_MOVE2_e, rate, start, end, f3); + } else { + f32 rate = daPy_HIO_item_c0::m.field_0x8; + f32 start = daPy_HIO_item_c0::m.field_0xC; + s16 end = daPy_HIO_item_c0::m.field_0x0; + f32 f3 = daPy_HIO_item_c0::m.field_0x10; + setActAnimeUpper(LKANM_BCK_TAKE, UPPER_MOVE2_e, rate, start, end, f3); + setPriTextureAnime(0x73, 0); + } } /* 8010C3C0-8010C430 .text setAnimeUnequip__9daPy_lk_cFv */ void daPy_lk_c::setAnimeUnequip() { - /* Nonmatching */ + if (mEquipItem == daPyItem_SWORD_e) { + setAnimeUnequipSword(); + } else if (mEquipItem == daPyItem_BOKO_e) { + deleteEquipItem(FALSE); + m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); + } else { + setAnimeUnequipItem(mEquipItem); + } + m3562 = daPyItem_NONE_e; } /* 8010C430-8010C4A4 .text checkBossGomaStage__9daPy_lk_cFv */