fix halfmilk RBA (#6670)

This commit is contained in:
ph
2026-06-14 11:55:37 -07:00
committed by GitHub
parent 3250cc27f5
commit fc2f525052
3 changed files with 31 additions and 2 deletions
@@ -452,6 +452,11 @@ void DoRBA(uint8_t itemToPutInBottle) {
}
}
bool DoHalfMilkRBA(uint8_t item) {
auto itemOnCRight = gSaveContext.equips.buttonItems[3];
return (item == ITEM_BOTTLE) && (gSaveContext.inventory.items[itemOnCRight] == ITEM_MILK_BOTTLE);
}
void RegisterBottleAdventure() {
REGISTER_VB_SHOULD(VB_SET_BUTTON_ITEM_FROM_C_BUTTON_SLOT, {
// if we aren't dealing with the b button, early return
@@ -476,6 +481,17 @@ void RegisterBottleAdventure() {
auto itemToPutInBottle = static_cast<uint8_t>(va_arg(args, int32_t));
DoRBA(itemToPutInBottle);
});
REGISTER_VB_SHOULD(VB_EMPTY_BOTTLE_TO_HALF_MILK, {
// if we aren't dealing with a bottle on b, early return
auto buttonBottleIsOn = static_cast<uint8_t>(va_arg(args, int32_t));
if (buttonBottleIsOn != 0) {
return;
}
auto item = static_cast<uint8_t>(va_arg(args, int32_t));
*should = DoHalfMilkRBA(item);
});
}
static RegisterShipInitFunc initFunc(RegisterBottleAdventure);
@@ -620,6 +620,16 @@ typedef enum {
// - Player*
VB_EMPTYING_BOTTLE,
// #### `result`
// ```c
// (gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] == ITEM_MILK_BOTTLE) &&
// (item == ITEM_BOTTLE)
// ```
// #### `args`
// - `int32_t` (button - promoted from `u8`)
// - `int32_t` (item - promoted from `u8`)
VB_EMPTY_BOTTLE_TO_HALF_MILK,
// #### `result`
// ```c
// (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)
+5 -2
View File
@@ -2671,8 +2671,11 @@ void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 button) {
gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]]);
// Special case to only empty half of a Lon Lon Milk Bottle
if ((gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] == ITEM_MILK_BOTTLE) &&
(item == ITEM_BOTTLE)) {
if (GameInteractor_Should(
VB_EMPTY_BOTTLE_TO_HALF_MILK,
(gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] == ITEM_MILK_BOTTLE) &&
(item == ITEM_BOTTLE),
button, item)) {
item = ITEM_MILK_HALF;
}