From 318ad2a00f2e587e4706d20117b29f5960b03528 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Thu, 14 May 2026 10:14:35 -0400 Subject: [PATCH] third item, missing visuals --- include/d/actor/d_a_alink.h | 2 +- include/d/d_event.h | 1 + include/d/d_menu_ring.h | 2 +- include/d/d_meter2_draw.h | 2 +- include/d/d_save.h | 3 +- src/d/actor/d_a_alink.cpp | 40 +++++++++++------------ src/d/actor/d_a_alink_demo.inc | 2 +- src/d/d_com_inf_game.cpp | 16 ++------- src/d/d_event.cpp | 4 +++ src/d/d_menu_item_explain.cpp | 4 ++- src/d/d_menu_ring.cpp | 60 +++++++++++++++++++++++++--------- src/d/d_meter2_info.cpp | 2 ++ 12 files changed, 84 insertions(+), 54 deletions(-) diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 107afc1ed3..2e557543a8 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -4059,7 +4059,7 @@ public: /* 0x02180 */ daAlink_matAnm_c* field_0x2180[2]; /* 0x02188 */ dEyeHL_c mEyeHL1; /* 0x0219C */ dEyeHL_c mEyeHL2; - /* 0x021B0 */ daPy_anmHeap_c mItemHeap[2]; + /* 0x021B0 */ daPy_anmHeap_c mItemHeap[3]; /* 0x021D8 */ daPy_anmHeap_c mAnmHeap9; /* 0x021EC */ daAlinkHIO_c* mpHIO; /* 0x021F0 */ daAlink_blur_c m_swordBlur; diff --git a/include/d/d_event.h b/include/d/d_event.h index ed0d749db4..827682ba15 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -47,6 +47,7 @@ enum dEvt_type_e { /* 0x5 */ dEvt_type_ITEM_e, /* 0x6 */ dEvt_type_SHOWITEM_X_e, /* 0x7 */ dEvt_type_SHOWITEM_Y_e, + /* 0x8 */ dEvt_type_SHOWITEM_Z_e, /* 0xA */ dEvt_type_CATCH_e = 10, /* 0xB */ dEvt_type_TREASURE_e, }; diff --git a/include/d/d_menu_ring.h b/include/d/d_menu_ring.h index 74624eac80..0a86ab4f13 100644 --- a/include/d/d_menu_ring.h +++ b/include/d/d_menu_ring.h @@ -172,7 +172,7 @@ private: /* 0x6A9 */ u8 field_0x6a9; // unused /* 0x6AA */ u8 mXButtonSlot; /* 0x6AB */ u8 mYButtonSlot; - /* 0x6AC */ u8 field_0x6ac; + /* 0x6AC */ u8 mZButtonSlot; /* 0x6AD */ u8 field_0x6ad; /* 0x6AE */ u8 mItemsTotal; // Contains the amount of items which are actually obtained and in // the item wheel diff --git a/include/d/d_meter2_draw.h b/include/d/d_meter2_draw.h index 10cded803d..8c1d4dbad7 100644 --- a/include/d/d_meter2_draw.h +++ b/include/d/d_meter2_draw.h @@ -160,7 +160,7 @@ private: /* 0x078 */ J2DScreen* mpScreen; /* 0x07C */ J2DScreen* mpKanteraScreen; /* 0x080 */ J2DScreen* mpPikariScreen; - /* 0x084 */ J2DPicture* mpItemNumTex[2][3]; + /* 0x084 */ J2DPicture* mpItemNumTex[3][3]; /* 0x09C */ CPaneMgr* field_0x9c[3]; /* 0x0A8 */ int field_0xa8; /* 0x0AC */ dKantera_icon_c* mpKanteraMeter[2]; diff --git a/include/d/d_save.h b/include/d/d_save.h index e2719e0a98..cdecf1a26d 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -12,7 +12,7 @@ static const int DEFAULT_SELECT_ITEM_INDEX = 0; static const int MAX_SELECT_ITEM = 4; -static const int SELECT_ITEM_NUM = 2; +static const int SELECT_ITEM_NUM = 3; static const int MAX_EQUIPMENT = 6; static const int MAX_EVENTS = 256; static const int MAX_ITEM_SLOTS = 24; @@ -123,6 +123,7 @@ enum { /* 0x3 */ SELECT_ITEM_B, /* 0x0 */ SELECT_ITEM_X = SELECT_ITEM_LEFT, /* 0x1 */ SELECT_ITEM_Y = SELECT_ITEM_RIGHT, + /* 0x2 */ SELECT_ITEM_Z = SELECT_ITEM_DOWN, }; enum { diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index 498d3de173..7b34418d54 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -4552,7 +4552,7 @@ void daAlink_c::playerInit() { PLAYER_CREATE_ANM_HEAP(mFaceBtkHeap, daPy_anmHeap_c::HEAP_TYPE_2, "daAlink_c::mFaceBtkHeap"); PLAYER_CREATE_ANM_HEAP(mFaceBckHeap, daPy_anmHeap_c::HEAP_TYPE_3, "daAlink_c::mFaceBckHeap"); - for (i = 0; i < 2; i++) { + for (i = 0; i < SELECT_ITEM_NUM; i++) { mItemHeap[i].setBufferSize(0x13200); PLAYER_CREATE_ANM_HEAP_F(mItemHeap[i], daPy_anmHeap_c::HEAP_TYPE_4, "daAlink_c::mItemHeap[%d]", i); } @@ -9494,7 +9494,7 @@ void daAlink_c::setStickData() { if (mDoCPd_c::getTrigY(PAD_1)) { mItemTrigger |= (daAlink_ITEM_BTN)BTN_Y; } - if (mDoCPd_c::getTrigZ(PAD_1)) { + if (mDoCPd_c::getTrigZ(PAD_1) && !mDoCPd_c::getHoldR(PAD_1)) { mItemTrigger |= (daAlink_ITEM_BTN)BTN_Z; } if (mDoCPd_c::getTrigL(PAD_1)) { @@ -11297,8 +11297,8 @@ BOOL daAlink_c::checkUpperItemActionFly() { void daAlink_c::checkItemButtonChange() { if (mProcID != PROC_CANOE_PADDLE_PUT && mEquipItem != dItemNo_NONE_e && !checkEquipAnime()) { u8 temp_r0; - for (u8 i = 0; i < 2; i++) { - temp_r0 = (i + 1) % 2; + for (u8 i = 0; i < SELECT_ITEM_NUM; i++) { + temp_r0 = (i + 1) % SELECT_ITEM_NUM; if (mEquipItem == dComIfGp_getSelectItem(i) && (mEquipItem != dComIfGp_getSelectItem(temp_r0) || mSelectItemId != temp_r0)) { @@ -11468,8 +11468,8 @@ int daAlink_c::orderTalk(int i_checkZTalk) { } if (!checkWolf() && checkRequestTalkActor(mAttList2, field_0x27f8)) { - for (int i = 0; i < 2; i++) { - // check if pressed X or Y and if item on button is a trade item + for (int i = 0; i < 3; i++) { + // check if pressed X or Y or Z and if item on button is a trade item if (checkTradeItem(dComIfGp_getSelectItem(i)) && itemTriggerCheck(1 << i)) { fopAcM_orderTalkItemBtnEvent(itemTalkType[i], this, field_0x27f8, 0, 0); return 1; @@ -12107,7 +12107,7 @@ void daAlink_c::allUnequip(BOOL param_0) { if (checkNoResetFlg2(FLG2_UNK_1) && param_0 && !checkCanoeRide() && mEquipItem != dItemNo_KANTERA_e) { - for (u8 i = 0; i < 2; i++) { + for (u8 i = 0; i < SELECT_ITEM_NUM; i++) { if (dComIfGp_getSelectItem(i) == dItemNo_KANTERA_e) { mSelectItemId = i; } @@ -12159,7 +12159,7 @@ BOOL daAlink_c::checkItemChangeFromButton() { itemEquip(0x105); } else { u8 i; - for (i = 0; i < 2; i++) { + for (i = 0; i < SELECT_ITEM_NUM; i++) { int proc_type = checkNewItemChange(i); if (proc_type != 0 && itemTriggerCheck(1 << i)) { BOOL var_r27 = changeItemTriggerKeepProc(i, proc_type); @@ -12180,7 +12180,7 @@ BOOL daAlink_c::checkItemChangeFromButton() { } else if (mEquipItem == dItemNo_NONE_e && mThrowBoomerangAcKeep.getActor() == NULL && !checkCanoeRide() && checkNoUpperAnime() && checkNoResetFlg2(FLG2_UNK_1)) { - for (i = 0; i < 2; i++) { + for (i = 0; i < SELECT_ITEM_NUM; i++) { if (dComIfGp_getSelectItem(i) == dItemNo_KANTERA_e) { mSelectItemId = i; } @@ -12192,7 +12192,7 @@ BOOL daAlink_c::checkItemChangeFromButton() { mEquipItem != 0x102 && (!checkCanoeRide() || !checkFisingRodLure())) { if (!checkEventRun() || strcmp(dComIfGp_getEventManager().getRunEventName(), "ANGER") != 0) { - if (strcmp(dComIfGp_getEventManager().getRunEventName(), "ANGER2") != 0 && checkItemSetButton(mEquipItem) == 2) { + if (strcmp(dComIfGp_getEventManager().getRunEventName(), "ANGER2") != 0 && checkItemSetButton(mEquipItem) == 3) { allUnequip(1); } } @@ -14386,7 +14386,7 @@ BOOL daAlink_c::checkGroupItem(int i_itemNo, int i_selItem) const { } int daAlink_c::checkSetItemTrigger(int i_itemNo) { - for (u8 i = 0; i < 2; i++) { + for (u8 i = 0; i < SELECT_ITEM_NUM; i++) { if (checkGroupItem(i_itemNo, dComIfGp_getSelectItem(i)) && itemTriggerCheck(1 << i)) { if (i_itemNo != dItemNo_HVY_BOOTS_e) { mSelectItemId = i; @@ -14399,13 +14399,13 @@ int daAlink_c::checkSetItemTrigger(int i_itemNo) { } int daAlink_c::checkItemSetButton(int i_itemNo) { - for (u8 i = 0; i < 2; i++) { + for (u8 i = 0; i < SELECT_ITEM_NUM; i++) { if (checkGroupItem(i_itemNo, dComIfGp_getSelectItem(i))) { return i; } } - return 2; + return 3; } bool daAlink_c::checkField() { @@ -14605,7 +14605,7 @@ int daAlink_c::checkNewItemChange(u8 i_selItemIdx) { return ITEM_PROC_BOTTLE_DRINK; } - if (checkOilBottleItem(sel_item) && checkItemSetButton(dItemNo_KANTERA_e) != 2) { + if (checkOilBottleItem(sel_item) && checkItemSetButton(dItemNo_KANTERA_e) != 3) { return ITEM_PROC_KANDELAAR_POUR; } } else if (sel_item == dItemNo_HVY_BOOTS_e) { @@ -14650,7 +14650,7 @@ int daAlink_c::checkNewItemChange(u8 i_selItemIdx) { return ITEM_PROC_SPINNER_READY; } else if (checkDungeonWarpItem(sel_item)) { return ITEM_PROC_DUNGEON_WARP_READY; - } else if (checkItemSetButton(0x108) != 2 && + } else if (checkItemSetButton(0x108) != 3 && (sel_item == dItemNo_WORM_e || sel_item == dItemNo_BEE_CHILD_e)) { int itemNo = dComIfGp_getSelectItem(checkItemSetButton(0x108)); @@ -14674,7 +14674,7 @@ int daAlink_c::checkNewItemChange(u8 i_selItemIdx) { return ITEM_PROC_NOT_USE_ITEM; } else if (sel_item == dItemNo_HORSE_FLUTE_e) { return ITEM_PROC_GRASS_WHISTLE; - } else if (checkOilBottleItem(sel_item) && checkItemSetButton(0x48) != 2) { + } else if (checkOilBottleItem(sel_item) && checkItemSetButton(0x48) != 3) { return ITEM_PROC_KANDELAAR_POUR; } else if (sel_item == dItemNo_HAWK_EYE_e) { if (acceptSubjectModeChange()) { @@ -17826,7 +17826,7 @@ int daAlink_c::execute() { if (checkNoResetFlg2(FLG2_UNK_1) != FALSE && mEquipItem != dItemNo_KANTERA_e && - checkItemSetButton(dItemNo_KANTERA_e) == 2) { + checkItemSetButton(dItemNo_KANTERA_e) == 3) { offKandelaarModel(); } @@ -18215,7 +18215,7 @@ int daAlink_c::execute() { if (checkEquipHeavyBoots()) { int itemButton = checkItemSetButton(dItemNo_HVY_BOOTS_e); - if (itemButton == 2 || checkNotHeavyBootsStage()) { + if (itemButton == 3 || checkNotHeavyBootsStage()) { if (!dComIfGp_checkPlayerStatus1(0, 0x10000) || !checkHookshotRoofLv7Boss()) { setHeavyBoots(0); } @@ -18737,7 +18737,7 @@ int daAlink_c::execute() { if (!checkWolf()) { u8 tmp; - for (u8 i = 0; i < 2; i++) { + for (u8 i = 0; i < SELECT_ITEM_NUM; i++) { tmp = (i + 1) % 2; if (dComIfGp_getSelectItem(i) == dItemNo_EMPTY_BOTTLE_e && (mUseButtonFlags & (1 << i)) && dComIfGp_getSelectItem(tmp) == dItemNo_EMPTY_BOTTLE_e) @@ -18747,7 +18747,7 @@ int daAlink_c::execute() { } } - for (int i = 0; i < 2; i++) { + for (int i = 0; i < SELECT_ITEM_NUM; i++) { if (!(mUseButtonFlags & (1 << i)) && !(field_0x2faf & (1 << i))) { dMeter2Info_offUseButton(METER2_USEBUTTON_X << i); } diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index 55e261cc13..adcffe8074 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -4121,7 +4121,7 @@ int daAlink_c::procDungeonWarpReadyInit() { } fpc_ProcID id; - if (checkItemSetButton(dItemNo_DUNGEON_EXIT_e) != 2) { + if (checkItemSetButton(dItemNo_DUNGEON_EXIT_e) != 3) { id = fopAcM_create(fpcNm_OBJ_TKS_e, 0, ¤t.pos, fopAcM_GetRoomNo(this), &shape_angle, NULL, -1); } else { diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index aa5b5659e9..0862e86a12 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -1952,18 +1952,7 @@ u8 dComIfGs_getMixItemIndex(int i_no) { } void dComIfGp_setSelectItem(int i_selItemIdx) { - if (i_selItemIdx == SELECT_ITEM_DOWN) { - if (dComIfGs_getSelectItemIndex(i_selItemIdx) != 0xFF) { - u8 selItem_slotNo = dComIfGs_getSelectItemIndex(i_selItemIdx); - g_dComIfG_gameInfo.play.setSelectItem(i_selItemIdx, selItem_slotNo); - - if (selItem_slotNo == 0xFF) { - dComIfGs_setSelectItemIndex(i_selItemIdx, 0xFF); - } - } else { - g_dComIfG_gameInfo.play.setSelectItem(i_selItemIdx, dItemNo_NONE_e); - } - } else if (dComIfGs_getSelectItemIndex(i_selItemIdx) != 0xFF) { + if (dComIfGs_getSelectItemIndex(i_selItemIdx) != 0xFF) { u8 item = dComIfGs_getItem(dComIfGs_getSelectItemIndex(i_selItemIdx), false); g_dComIfG_gameInfo.play.setSelectItem(i_selItemIdx, item); @@ -1978,7 +1967,8 @@ void dComIfGp_setSelectItem(int i_selItemIdx) { u8 dComIfGp_getSelectItem(int i_selItemIdx) { u8 playItem = g_dComIfG_gameInfo.play.getSelectItem(i_selItemIdx); - if ((i_selItemIdx == SELECT_ITEM_X || i_selItemIdx == SELECT_ITEM_Y) && + if ((i_selItemIdx == SELECT_ITEM_X || i_selItemIdx == SELECT_ITEM_Y || + i_selItemIdx == SELECT_ITEM_Z) && dComIfGs_getMixItemIndex(i_selItemIdx) != 0xFF) { u8 saveItem = dComIfGs_getItem(dComIfGs_getMixItemIndex(i_selItemIdx), false); diff --git a/src/d/d_event.cpp b/src/d/d_event.cpp index 73891276df..2f9e97454e 100644 --- a/src/d/d_event.cpp +++ b/src/d/d_event.cpp @@ -287,6 +287,10 @@ int dEvt_control_c::talkXyCheck(dEvt_order_c* order) { mTalkXyType = 2; itemIndex = SELECT_ITEM_Y; break; + case dEvt_type_SHOWITEM_Z_e: + mTalkXyType = 3; + itemIndex = SELECT_ITEM_Z; + break; #if PLATFORM_WII || PLATFORM_SHIELD case 8: mTalkXyType = 3; diff --git a/src/d/d_menu_item_explain.cpp b/src/d/d_menu_item_explain.cpp index dd3af54571..a394a9211c 100644 --- a/src/d/d_menu_item_explain.cpp +++ b/src/d/d_menu_item_explain.cpp @@ -446,7 +446,7 @@ void dMenu_ItemExplain_c::move_proc() { if (field_0xe7 == 0) { return; } - if (!mDoCPd_c::getTrigX(PAD_1) && !mDoCPd_c::getTrigY(PAD_1)) { + if (!mDoCPd_c::getTrigX(PAD_1) && !mDoCPd_c::getTrigY(PAD_1) && !mDoCPd_c::getTrigZ(PAD_1)) { return; } } @@ -460,6 +460,8 @@ void dMenu_ItemExplain_c::move_proc() { mEndButton = 3; } else if (mDoCPd_c::getTrigY(PAD_1)) { mEndButton = 4; + } else if (mDoCPd_c::getTrigZ(PAD_1)) { + mEndButton = 5; } mStatus = 5; Z2GetAudioMgr()->seStart(Z2SE_SY_EXP_WIN_CLOSE, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); diff --git a/src/d/d_menu_ring.cpp b/src/d/d_menu_ring.cpp index ba2b86b760..61c9189d1e 100644 --- a/src/d/d_menu_ring.cpp +++ b/src/d/d_menu_ring.cpp @@ -134,7 +134,7 @@ dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i field_0x6a9 = 0; mXButtonSlot = 0xff; mYButtonSlot = 0xff; - field_0x6ac = 0xff; + mZButtonSlot = 0xff; field_0x6ad = 0xff; field_0x670 = 0; field_0x67e = 0; @@ -244,8 +244,8 @@ dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i if (dComIfGs_getSelectItemIndex(1) == dComIfGs_getLineUpItem(i)) { mYButtonSlot = i; } - if (dComIfGs_getSelectItemIndex(2) == dComIfGs_getWolfAbility(i)) { - field_0x6ac = i; + if (dComIfGs_getSelectItemIndex(2) == dComIfGs_getLineUpItem(i)) { + mZButtonSlot = i; } } mRingRadiusH = g_ringHIO.mRingRadiusH; @@ -259,7 +259,7 @@ dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i } } field_0x6be[i] = 0; - if (i == 2) { + if (i == MAX_SELECT_ITEM) { setSelectItem(i, 0); } else { setSelectItem(i, 0x43); @@ -977,8 +977,8 @@ void dMenu_Ring_c::setItem() { } else { uVar2 = dItemNo_NONE_e; } - if (field_0x6ac != dItemNo_NONE_e) { - uVar3 = mItemSlots[field_0x6ac]; + if (mZButtonSlot != dItemNo_NONE_e) { + uVar3 = mItemSlots[mZButtonSlot]; } else { uVar3 = dItemNo_NONE_e; } @@ -1058,6 +1058,9 @@ void dMenu_Ring_c::setItem() { mixItemIndex1 = dItemNo_NONE_e; } } + } else if (field_0x6b3 == 2) { + mZButtonSlot = mCurrentSlot; + uVar3 = mItemSlots[mZButtonSlot]; } field_0x6b4[0] = uVar1; field_0x6b4[1] = uVar2; @@ -1073,7 +1076,7 @@ void dMenu_Ring_c::setItem() { void dMenu_Ring_c::setJumpItem(bool i_useVibrationM) { for (int i = 0; i < 4; i++) { - if (i == 2) { + if (i == 4) { setSelectItem(i, field_0x6b4[i]); } else if (i == field_0x6cd) { setSelectItem(i, getItem(field_0x6cb, 0)); @@ -1089,9 +1092,9 @@ void dMenu_Ring_c::setJumpItem(bool i_useVibrationM) { field_0x518[1] = mItemSlotPosX[mYButtonSlot]; field_0x528[1] = mItemSlotPosY[mYButtonSlot]; } - if (field_0x6ac != dItemNo_NONE_e) { - field_0x518[2] = mItemSlotPosX[field_0x6ac]; - field_0x528[2] = mItemSlotPosY[field_0x6ac]; + if (mZButtonSlot != dItemNo_NONE_e) { + field_0x518[2] = mItemSlotPosX[mZButtonSlot]; + field_0x528[2] = mItemSlotPosY[mZButtonSlot]; } if (field_0x6ad != dItemNo_NONE_e) { field_0x518[3] = mItemSlotPosX[field_0x6ad]; @@ -1117,9 +1120,21 @@ void dMenu_Ring_c::setJumpItem(bool i_useVibrationM) { field_0x674[1] = 1; #if TARGET_PC mSelectItemSlideElapsed[1] = 0.0f; +#endif + } + } else if (field_0x6b3 == 2) { + field_0x538[0] = g_ringHIO.mUnselectItemScale; + field_0x538[1] = g_ringHIO.mSelectItemScale; + if (field_0x6b4[2] != dComIfGs_getSelectItemIndex(2) || + field_0x6b8[2] != dComIfGs_getMixItemIndex(2)) + { + field_0x674[2] = 1; +#if TARGET_PC + mSelectItemSlideElapsed[2] = 0.0f; #endif } } + if (field_0x674[0] == 1) { if (i_useVibrationM) { dMeter2Info_set2DVibrationM(); @@ -1160,7 +1175,7 @@ void dMenu_Ring_c::setScale() { } setNameString(itemId); setItemScale(i, g_ringHIO.mUnselectItemScale); - for (int j = 0; j < 2; j++) { + for (int j = 0; j < SELECT_ITEM_NUM; j++) { if (j == field_0x6cf) { setButtonScale(j, g_ringHIO.mSelectButtonScale); } else { @@ -1180,7 +1195,7 @@ void dMenu_Ring_c::setScale() { } else { setItemScale(i, g_ringHIO.mUnselectItemScale); } - for (int j = 0; j < 2; j++) { + for (int j = 0; j < SELECT_ITEM_NUM; j++) { setButtonScale(j, g_ringHIO.mUnselectButtonScale); } } @@ -1214,6 +1229,7 @@ void dMenu_Ring_c::setNameString(u32 i_stringID) { void dMenu_Ring_c::setActiveCursor() { u8 item = dComIfGs_getItem(mItemSlots[mCurrentSlot], false); + if (mStatus == STATUS_WAIT && mOldStatus != STATUS_EXPLAIN_FORCE && mOldStatus != STATUS_EXPLAIN && mpItemExplain->getStatus() == 0) { if (mDoCPd_c::getTrigR(PAD_1) && !mPlayerIsWolf && item != dItemNo_NONE_e) { for (int i = 0; i < MAX_SELECT_ITEM; i++) { @@ -1244,7 +1260,21 @@ void dMenu_Ring_c::setActiveCursor() { (this->*stick_init[mStatus])(); } } - } else if (mDoCPd_c::getTrigX(PAD_1) || mDoCPd_c::getTrigY(PAD_1)) { + } else if (mDoCPd_c::getTrigZ(PAD_1) && !mPlayerIsWolf && item != dItemNo_NONE_e) { + for (int i = 0; i < MAX_SELECT_ITEM; i++) { + setSelectItemForce(i); + } + field_0x6b3 = 2; + if (!checkCombineBomb(field_0x6b3)) { + setItem(); + if (mpItemExplain->getStatus() == 0) { + setStatus(STATUS_WAIT); + (this->*stick_init[mStatus])(); + } + } + } else if (mDoCPd_c::getTrigX(PAD_1) || mDoCPd_c::getTrigY(PAD_1) || + mDoCPd_c::getTrigZ(PAD_1)) + { // If the player is a wolf or somehow manages to access an item slot with no item, error Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } @@ -1660,7 +1690,7 @@ void dMenu_Ring_c::drawSelectItem() { } void dMenu_Ring_c::setSelectItemForce(int i_idx) { - if (i_idx == 2) { + if (i_idx == SELECT_ITEM_NUM) { if (field_0x674[i_idx] != 0) { dComIfGs_setSelectItemIndex(i_idx, field_0x6b4[i_idx]); field_0x674[i_idx] = 0; @@ -1669,7 +1699,7 @@ void dMenu_Ring_c::setSelectItemForce(int i_idx) { #endif } } else if (field_0x674[i_idx] != 0) { - for (int i = 0; i < 2; i++) { + for (int i = 0; i < SELECT_ITEM_NUM; i++) { dComIfGs_setMixItemIndex(i, field_0x6b8[i]); dComIfGs_setSelectItemIndex(i, field_0x6b4[i]); } diff --git a/src/d/d_meter2_info.cpp b/src/d/d_meter2_info.cpp index bb533e6370..253185fe03 100644 --- a/src/d/d_meter2_info.cpp +++ b/src/d/d_meter2_info.cpp @@ -1533,6 +1533,8 @@ void dMeter2Info_c::setMiniGameItem(u8 i_minigameFlag) { if (mMiniGameItemSetFlag != 3) { dComIfGs_setItem(SLOT_4, dItemNo_BOW_e); dComIfGp_setItem(SLOT_4, dItemNo_BOW_e); + dComIfGs_setMixItemIndex(SELECT_ITEM_Z, 0xFF); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Z, 0xFF); dComIfGs_setMixItemIndex(SELECT_ITEM_Y, 0xFF); dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, 0xFF); dComIfGs_setMixItemIndex(SELECT_ITEM_X, SLOT_4);