diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 2f9d91872..947c8a03f 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -1607,7 +1607,7 @@ public: BOOL procPushMove(); BOOL procPullMove_init(); BOOL procPullMove(); - void changeBottleDrinkFace(int); + int changeBottleDrinkFace(int); void setBottleModel(u16); void makeFairy(cXyz*, u32); BOOL procBottleDrink_init(u16); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 5984c3664..3be552276 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -77,6 +77,8 @@ enum daPy__PlayerStatus1 { daPyStts1_DEKU_LEAF_FAN_e = 0x00000040, daPyStts1_UNK80_e = 0x00000080, daPyStts1_SAIL_e = 0x00000400, + daPyStts1_UNK1000_e = 0x00001000, + daPyStts1_UNK2000_e = 0x00002000, daPyStts1_UNK4000_e = 0x00004000, daPyStts1_UNK8000_e = 0x00008000, daPyStts1_UNK10000_e = 0x00010000, diff --git a/src/d/actor/d_a_player_bottle.inc b/src/d/actor/d_a_player_bottle.inc index 4004a723b..1722b985b 100644 --- a/src/d/actor/d_a_player_bottle.inc +++ b/src/d/actor/d_a_player_bottle.inc @@ -11,10 +11,16 @@ */ #include "d/actor/d_a_player_main.h" +#include "d/actor/d_a_player_HIO.h" +#include "d/d_camera.h" +#include "d/d_procname.h" /* 80151E40-80151E60 .text changeBottleDrinkFace__9daPy_lk_cFi */ -void daPy_lk_c::changeBottleDrinkFace(int) { - /* Nonmatching */ +int daPy_lk_c::changeBottleDrinkFace(int param_0) { + if ((param_0 == 0x55) || (param_0 == 0x54)) { + return true; + } + return false; } /* 80151E60-80152128 .text setBottleModel__9daPy_lk_cFUs */ @@ -23,13 +29,39 @@ void daPy_lk_c::setBottleModel(u16) { } /* 80152128-801521A0 .text makeFairy__9daPy_lk_cFP4cXyzUl */ -void daPy_lk_c::makeFairy(cXyz*, u32) { - /* Nonmatching */ +void daPy_lk_c::makeFairy(cXyz* param_0, u32 param_1) { + onResetFlg0(daPyRFlg0_FAIRY_USE); + resetCurse(); + fopAcM_fastCreate(PROC_NPC_FA1, param_1, param_0, fopAcM_GetRoomNo(this), + &shape_angle); + return; } /* 801521A0-80152300 .text procBottleDrink_init__9daPy_lk_cFUs */ -BOOL daPy_lk_c::procBottleDrink_init(u16) { - /* Nonmatching */ +BOOL daPy_lk_c::procBottleDrink_init(u16 param_0) { + if (!dComIfGp_event_compulsory(this)) { + return false; + } else { + mDemo.setDemoType(5); + int iVar1 = checkShipRideUseItem(1); + commonProcInit(daPyProc_BOTTLE_DRINK_e); + current.angle.y = shape_angle.y; + mVelocity = 0.0f; + setSingleMoveAnime(ANM_BINDRINKPRE, 1.0f, daPy_HIO_bottle_c0::m.field_0x5C, + daPy_HIO_bottle_c0::m.field_0xC, + daPy_HIO_bottle_c0::m.field_0x60); + if (changeBottleDrinkFace(param_0)) { + setTextureAnime(0x85, 0); + } + keepItemData(); + setBottleModel(param_0); + dComIfGp_setPlayerStatus1(0, daPyStts1_UNK2000_e); + m3570 = 1; + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", &m3570, + 0); + initShipRideUseItem(iVar1, 2); + } + return true; } /* 80152300-80152624 .text procBottleDrink__9daPy_lk_cFv */ @@ -38,8 +70,44 @@ BOOL daPy_lk_c::procBottleDrink() { } /* 80152624-801527CC .text procBottleOpen_init__9daPy_lk_cFUs */ -BOOL daPy_lk_c::procBottleOpen_init(u16) { - /* Nonmatching */ +BOOL daPy_lk_c::procBottleOpen_init(u16 param_0) { + if (mCurProc == daPyProc_BOTTLE_OPEN_e) { + return true; + } else { + if (mDemo.getDemoMode() != 0x3d) { + if (!dComIfGp_event_compulsory(this)) { + return false; + } + mDemo.setDemoType(5); + } else { + param_0 = dComIfGp_event_getPreItemNo(); + } + int iVar1 = checkShipRideUseItem(1); + commonProcInit(daPyProc_BOTTLE_OPEN_e); + current.angle.y = shape_angle.y; + mVelocity = 0.0f; + setSingleMoveAnime(ANM_BINOPENPRE, 1.0f, daPy_HIO_bottle_c0::m.field_0x3C, + daPy_HIO_bottle_c0::m.field_0x6, + daPy_HIO_bottle_c0::m.field_0x40); + keepItemData(); + setBottleModel(param_0); + dComIfGp_setPlayerStatus1(0, daPyStts1_UNK4000_e); + if (mEquipItem == dItem_FAIRY_BOTTLE_e) { + m3570 = 3; + } else { + m3570 = 2; + } + if (mDemo.getDemoMode() != 0x3d) { + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", &m3570, + 0); + } + initShipRideUseItem(iVar1, 2); + m34D4 = 0; + m34D6 = 0; + m34D0 = -1; + m34D8 = 0; + } + return true; } /* 801527CC-80152ED0 .text procBottleOpen__9daPy_lk_cFv */ @@ -50,8 +118,51 @@ BOOL daPy_lk_c::procBottleOpen() { } /* 80152ED0-80153064 .text procBottleSwing_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procBottleSwing_init(int) { - /* Nonmatching */ +BOOL daPy_lk_c::procBottleSwing_init(int param_0) { + /* Nonmatching - missing "lwz" instruction */ + BOOL bVar1; + int iVar2; + fopAc_ac_c *iVar3; + + iVar2 = checkShipRideUseItem(1); + commonProcInit(daPyProc_BOTTLE_SWING_e); + if ((int)param_0 != 0) { + deleteEquipItem(0); + setBottleModel(0x50); + } + current.angle.y = shape_angle.y; + mVelocity = 0.0f; + iVar3 = dComIfGp_att_getCatghTarget(); + if (iVar3 != 0) { + if (iVar3->current.pos.y > mpCLModel->getBaseScale()->y) { + bVar1 = false; + } else { + bVar1 = true; + } + } else if (m35D0 > 10.0f + current.pos.y) { + bVar1 = true; + } else { + bVar1 = false; + } + if (bVar1) { + setSingleMoveAnime(ANM_BINSWINGU, daPy_HIO_bottle_c0::m.field_0x20, + daPy_HIO_bottle_c0::m.field_0x24, + daPy_HIO_bottle_c0::m.field_0x2, + daPy_HIO_bottle_c0::m.field_0x2C); + m35A0 = daPy_HIO_bottle_c0::m.field_0x28; + } else { + setSingleMoveAnime(ANM_BINSWINGS, daPy_HIO_bottle_c0::m.field_0x10, + daPy_HIO_bottle_c0::m.field_0x14, + daPy_HIO_bottle_c0::m.field_0x0, + daPy_HIO_bottle_c0::m.field_0x1C); + m35A0 = daPy_HIO_bottle_c0::m.field_0x18; + } + m3570 = 0; + m3574 = 0; + m34D4 = 0; + voiceStart(7); + initShipRideUseItem(iVar2, 2); + return true; } /* 80153064-80153338 .text procBottleSwing__9daPy_lk_cFv */ @@ -61,10 +172,44 @@ BOOL daPy_lk_c::procBottleSwing() { /* 80153338-80153438 .text procBottleGet_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procBottleGet_init() { - /* Nonmatching */ + int iVar1 = checkShipRideUseItem(0); + commonProcInit(daPyProc_BOTTLE_GET_e); + setSingleMoveAnime(ANM_BINGET, daPy_HIO_bottle_c0::m.field_0x30, + daPy_HIO_bottle_c0::m.field_0x34, + daPy_HIO_bottle_c0::m.field_0x4, + daPy_HIO_bottle_c0::m.field_0x38); + dComIfGp_setPlayerStatus1(0, daPyStts1_UNK1000_e); + m3628 = fpcM_ERROR_PROCESS_ID_e; + m3570 = 0; + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", &m3570, 0); + if (mEquipItem == dItem_FOREST_WATER_e) { + m32F0.makeEmitter(dPa_name::ID_COMMON_020D, + mpEquipItemModel->getBaseTRMtx(), ¤t.pos, NULL); + } + initShipRideUseItem(iVar1, 2); + return true; } /* 80153438-80153554 .text procBottleGet__9daPy_lk_cFv */ BOOL daPy_lk_c::procBottleGet() { - /* Nonmatching */ + /* Nonmatching - floats */ + J3DFrameCtrl &frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; + + setShipRidePosUseItem(); + if ((frameCtrl.getRate() < 0.0099999998f) && + (checkEndMessage(mEquipItem + 0x65))) { + dComIfGp_event_reset(); + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + deleteEquipItem(0); + endDemoMode(); + } else { + if (frameCtrl.getFrame() >= 9.0f) { + m355E = 1; + } + } + if (frameCtrl.checkPass(39.0f)) { + mDoAud_seStart(JA_SE_ME_ITEM_GET_S); + g_dComIfG_gameInfo.play.field_0x4977 = 2; + } + return true; }