From cff2e372873072a04457499c3243549bbcf6045c Mon Sep 17 00:00:00 2001 From: inspectredc <78732756+inspectredc@users.noreply.github.com> Date: Tue, 17 Oct 2023 15:25:09 +0100 Subject: [PATCH] Restoration: RBA Values (#2672) * Restore RBA Values Matches all rba scenarios achievable in game to their original outcomes. This only ends up affecting certain trade items. * tooltip rewrite * rba cases generalised * re-add to menu bar * better byteswap and checks for endianness * remove leftover defines --- soh/soh/Enhancements/presets.h | 1 + soh/soh/SohMenuBar.cpp | 2 ++ soh/src/code/z_parameter.c | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index 8847f61f1..6afc36248 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -167,6 +167,7 @@ const std::vector enhancementsCvars = { "gBombchusOOB", "gQuickPutaway", "gGsCutscene", + "gRestoreRBAValues", "gSkipSaveConfirmation", "gAutosave", "gDisableCritWiggle", diff --git a/soh/soh/SohMenuBar.cpp b/soh/soh/SohMenuBar.cpp index d8cbefd0b..04f25d2e8 100644 --- a/soh/soh/SohMenuBar.cpp +++ b/soh/soh/SohMenuBar.cpp @@ -1067,6 +1067,8 @@ void DrawEnhancementsMenu() { UIWidgets::PaddedEnhancementCheckbox("Restore old Gold Skulltula cutscene", "gGsCutscene", true, false); UIWidgets::PaddedEnhancementCheckbox("Quick Bongo Kill", "gQuickBongoKill", true, false); UIWidgets::Tooltip("Restore a bug from NTSC 1.0 that allows bypassing Bongo Bongo's intro cutscene to quickly kill him"); + UIWidgets::PaddedEnhancementCheckbox("Original RBA Values", "gRestoreRBAValues", true, false); + UIWidgets::Tooltip("Restores the original outcomes when performing Reverse Bottle Adventure."); ImGui::EndMenu(); } diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 75c85e3e4..1ff5b35b2 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -2782,6 +2782,13 @@ s32 Inventory_HasSpecificBottle(u8 bottleItem) { } } +void byteSwapInventory() { + gSaveContext.inventory.equipment = BE16SWAP(gSaveContext.inventory.equipment); + gSaveContext.inventory.upgrades = BE32SWAP(gSaveContext.inventory.upgrades); + gSaveContext.inventory.questItems = BE32SWAP(gSaveContext.inventory.questItems); + gSaveContext.inventory.gsTokens = BE16SWAP(gSaveContext.inventory.gsTokens); +} + void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 button) { osSyncPrintf("item_no=%x, c_no=%x, Pt=%x Item_Register=%x\n", item, button, gSaveContext.equips.cButtonSlots[button - 1], @@ -2793,7 +2800,14 @@ void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 button) { item = ITEM_MILK_HALF; } - gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item; + if (CVarGetInteger("gRestoreRBAValues",0)) { + byteSwapInventory(); + gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item; + byteSwapInventory(); + } else { + gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item; + } + gSaveContext.equips.buttonItems[button] = item; Interface_LoadItemIcon1(play, button);