From 48fa3cf3def23a3d8e4948bd31d697fe914326bf Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 2 Dec 2023 23:02:18 -0500 Subject: [PATCH] d_a_player_food progress --- include/d/actor/d_a_player_main.h | 1 + include/d/d_com_inf_game.h | 30 +++++++++++-- include/f_op/f_op_camera.h | 1 + src/d/actor/d_a_player_food.inc | 75 ++++++++++++++++++++++++++++++- src/d/actor/d_a_player_main.cpp | 17 ++++++- src/d/d_save.cpp | 4 +- 6 files changed, 119 insertions(+), 9 deletions(-) diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 9bc344103..0a7985369 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -1215,6 +1215,7 @@ public: enum daPy_ANM { ANM_UNK_C4 = 0xC4, + ANM_UNK_C5 = 0xC5, }; enum daPy_UNDER { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index f7b10e673..5e95107bd 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -455,6 +455,7 @@ public: JKRArchive* getFontArchive() { return mpFont0Archive; } JKRArchive* getRubyArchive() { return mpFont1Archive; } void setAnmArchive(JKRArchive * pArc) { mpAnmArchive = pArc; } + JKRArchive* getAnmArchive() { return mpAnmArchive; } void setLkDArc(JKRArchive * pArc) { mpLkDArc = pArc; } void setFmapArchive(JKRArchive * pArc) { mpFmapArchive = pArc; } void setItemResArchive(JKRArchive * pArc) { mpItemResArchive = pArc; } @@ -1321,16 +1322,36 @@ inline void dComIfGs_onGetBottleItem(u8 i_itemNo) { g_dComIfG_gameInfo.save.getPlayer().getGetItem().onBottleItem(i_itemNo); } -inline BOOL dComIfGs_checkEmptyBottle() { - return g_dComIfG_gameInfo.save.getPlayer().getItem().checkEmptyBottle(); +inline void dComIfGs_setBottleItemIn(u8 prevItemNo, u8 newItemNo) { + g_dComIfG_gameInfo.save.getPlayer().getItem().setBottleItemIn(prevItemNo, newItemNo); +} + +inline void dComIfGs_setEmptyBottleItemIn(u8 i_itemNo) { + g_dComIfG_gameInfo.save.getPlayer().getItem().setEmptyBottleItemIn(i_itemNo); } inline void dComIfGs_setEmptyBottle() { g_dComIfG_gameInfo.save.getPlayer().getItem().setEmptyBottle(); } -inline void dComIfGs_setEmptyBottleItemIn(u8 i_itemNo) { - g_dComIfG_gameInfo.save.getPlayer().getItem().setEmptyBottleItemIn(i_itemNo); +inline void dComIfGs_setEquipBottleItemIn(u8 i_btnIdx, u8 i_itemNo) { + g_dComIfG_gameInfo.save.getPlayer().getItem().setEquipBottleItemIn(i_btnIdx, i_itemNo); +} + +inline void dComIfGs_setEquipBottleItemEmpty(u8 i_btnIdx) { + g_dComIfG_gameInfo.save.getPlayer().getItem().setEquipBottleItemEmpty(i_btnIdx); +} + +inline void dComIfGs_setEquipBottleItemEmpty() { + g_dComIfG_gameInfo.save.getPlayer().getItem().setEquipBottleItemEmpty(); +} + +inline u8 dComIfGs_checkBottle(u8 i_itemNo) { + return g_dComIfG_gameInfo.save.getPlayer().getItem().checkBottle(i_itemNo); +} + +inline BOOL dComIfGs_checkEmptyBottle() { + return g_dComIfG_gameInfo.save.getPlayer().getItem().checkEmptyBottle(); } inline BOOL dComIfGs_checkGetBottle() { @@ -2480,6 +2501,7 @@ inline void dComIfGd_reset() { g_dComIfG_gameInfo.drawlist.reset(); } */ inline void dComIfGp_setAnmArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setAnmArchive(pArc); } +inline JKRArchive* dComIfGp_getAnmArchive() { return g_dComIfG_gameInfo.play.getAnmArchive(); } inline void dComIfGp_setMsgArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setMsgArchive(pArc); } inline void dComIfGp_setDmsgArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setDmsgArchive(pArc); } inline void dComIfGp_setTmsgArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setTmsgArchive(pArc); } diff --git a/include/f_op/f_op_camera.h b/include/f_op/f_op_camera.h index 5ebec4303..62580bc8a 100644 --- a/include/f_op/f_op_camera.h +++ b/include/f_op/f_op_camera.h @@ -245,6 +245,7 @@ public: void Stay(); void SetTrimSize(s32); void StartEventCamera(int, int, ...); + void EndEventCamera(int); void CStickUse() {} void CStickUseless() {} diff --git a/src/d/actor/d_a_player_food.inc b/src/d/actor/d_a_player_food.inc index f93002c27..15b734fec 100644 --- a/src/d/actor/d_a_player_food.inc +++ b/src/d/actor/d_a_player_food.inc @@ -12,6 +12,8 @@ #include "d/actor/d_a_player_main.h" #include "f_op/f_op_camera.h" +#include "d/d_com_inf_game.h" +#include "d/d_item_data.h" /* 80154334-801543A0 .text setHyoiModel__9daPy_lk_cFv */ void daPy_lk_c::setHyoiModel() { @@ -115,10 +117,79 @@ BOOL daPy_lk_c::procFoodThrow() { /* 80154880-80154A48 .text procFoodSet_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procFoodSet_init() { - /* Nonmatching */ + if (mCurProcID == PROC_FOOD_SET_e) { + if (mDemo.getParam0() == 1) { + if (mHeldItemType == ANIMAL_ESA) { + u8 btnIdx = dComIfGp_event_getTalkXYBtn(); + if (btnIdx == 1) { + dComIfGs_setEquipBottleItemEmpty(0); + } else if (btnIdx == 2) { + dComIfGs_setEquipBottleItemEmpty(1); + } else { + dComIfGs_setEquipBottleItemEmpty(2); + } + } + + deleteEquipItem(0); + } else { + setHyoiModel(); + } + return TRUE; + } + + if (!dComIfGp_event_runCheck()) { + if (!dComIfGp_event_compulsory(this, NULL, -1)) { + return FALSE; + } + mDemo.setDemoType(5); + } + + int temp = checkShipRideUseItem(1); + commonProcInit(PROC_FOOD_SET_e); + current.angle.y = shape_angle.y; + + mVelocity = 0.0f; + setSingleMoveAnime(ANM_UNK_C5, daPy_HIO_food_c0::m.field_0x10, daPy_HIO_food_c0::m.field_0x14, daPy_HIO_food_c0::m.field_0x2, daPy_HIO_food_c0::m.field_0x18); + keepItemData(); + setHyoiModel(); + + if (mDemo.getDemoType() == 5) { + m3570 = 1; + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", &m3570, 0); + } + + initShipRideUseItem(temp, 2); + m34D0 = 1*30; + + return TRUE; } /* 80154A48-80154B80 .text procFoodSet__9daPy_lk_cFv */ BOOL daPy_lk_c::procFoodSet() { - /* Nonmatching */ + J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[0]; + + setShipRidePosUseItem(); + + if (frameCtrl.getRate() > 0.0f && frameCtrl.checkPass(9.0f)) { + seStartOnlyReverb(JA_SE_LK_HYOI_SET); + } + + if (fabsf(frameCtrl.getRate()) < 0.01f) { + if (mDemo.getDemoType() != 5) { + dComIfGp_evmng_cutEnd(mStaffIdx); + } else if (m34D0 < 0) { + dComIfGp_event_reset(); + deleteEquipItem(0); + u32 playerPID = fopAcM_GetID(this); + dCam_getBody()->EndEventCamera(playerPID); + endDemoMode(); + } else if (m34D0 == 0) { + m34D0 = -1; + frameCtrl.setRate(-daPy_HIO_food_c0::m.field_0x10); + } else if (m34D0 > 0) { + m34D0--; + } + } + + return TRUE; } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 9a59cbf78..5a8809d06 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -2532,7 +2532,12 @@ JKRHeap* daPy_lk_c::setItemHeap() { } /* 80104240-80104280 .text setBlurPosResource__9daPy_lk_cFUs */ -void daPy_lk_c::setBlurPosResource(u16) { +void daPy_lk_c::setBlurPosResource(u16 index) { + dComIfGp_getAnmArchive()->readIdxResource(mSwBlur.mpBlurPos, 0x4800, index); +} + +/* 80104280-80104364 .text getItemAnimeResource__9daPy_lk_cFUs */ +J3DAnmTransform* daPy_lk_c::getItemAnimeResource(u16) { /* Nonmatching */ } @@ -4505,6 +4510,16 @@ J3DModelData* daPy_lk_c::initModel(J3DModel** i_model, int i_fileIndex, u32 i_di return tmp_modelData; } +/* 80124B30-80124BE4 .text entryBtk__9daPy_lk_cFP12J3DModelDatai */ +J3DAnmTextureSRTKey* daPy_lk_c::entryBtk(J3DModelData*, int) { + /* Nonmatching */ +} + +/* 80124BE4-80124C98 .text entryBrk__9daPy_lk_cFP12J3DModelDatai */ +J3DAnmTevRegKey* daPy_lk_c::entryBrk(J3DModelData*, int) { + /* Nonmatching */ +} + /* 80124C98-80125CC8 .text playerInit__9daPy_lk_cFv */ void daPy_lk_c::playerInit() { if (!fopAcM_entrySolidHeap(this, daPy_createHeap, 0xB0000)) { diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index 08811abe1..bbb57e3f5 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -127,8 +127,8 @@ void dSv_player_item_c::setEquipBottleItemIn(u8 i_btnIdx, u8 i_itemNo) { } /* 8005918C-800591B0 .text setEquipBottleItemEmpty__17dSv_player_item_cFUc */ -void dSv_player_item_c::setEquipBottleItemEmpty(u8 i_itemNo) { - setEquipBottleItemIn(i_itemNo, EMPTY_BOTTLE); +void dSv_player_item_c::setEquipBottleItemEmpty(u8 i_btnIdx) { + setEquipBottleItemIn(i_btnIdx, EMPTY_BOTTLE); } /* 800591B0-80059408 .text setEquipBottleItemIn__17dSv_player_item_cFUc */