diff --git a/artifacts/ddraw.ini b/artifacts/ddraw.ini index 4d86e1dd..7c2eb5d5 100644 --- a/artifacts/ddraw.ini +++ b/artifacts/ddraw.ini @@ -662,7 +662,8 @@ ReloadReserve=-1 ;Set to 1 to change the counter in the 'Move Items' window to start with maximum number, except in the barter screen ItemCounterDefaultMax=0 -;Set to 1 to enable caps auto-balancing: when dragging caps between tables in the barter screen, 'Move Items' window will be shown with correct number pre-filled that balances the tables +;Set to 1 to enable money/caps auto-balancing in the barter screen +;When moving money/caps to or from the table, the 'Move Items' window will be pre-filled with the correct balancing amount ItemCounterAutoCaps=0 ;Set to 1 to leave the music playing in dialogue with talking heads diff --git a/sfall/FalloutEngine/Fallout2.h b/sfall/FalloutEngine/Fallout2.h index a7ef739c..74e985e2 100644 --- a/sfall/FalloutEngine/Fallout2.h +++ b/sfall/FalloutEngine/Fallout2.h @@ -23,7 +23,6 @@ */ #include "Enums.h" -#include "GamePids.h" #include "FunctionOffsets.h" #include "Structs.h" #include "EngineUtils.h" diff --git a/sfall/Modules/HookScripts/MiscHs.cpp b/sfall/Modules/HookScripts/MiscHs.cpp index c97e559d..3afc7c1f 100644 --- a/sfall/Modules/HookScripts/MiscHs.cpp +++ b/sfall/Modules/HookScripts/MiscHs.cpp @@ -9,7 +9,7 @@ namespace sfall { - + static DWORD lastTableCostPC; // keep last cost for pc static DWORD lastTableCostNPC; @@ -55,11 +55,6 @@ static DWORD __fastcall BarterPriceHook_Script(fo::GameObject* source, fo::GameO cost = rets[0]; // new cost for npc } } - if (isPCHook) { - lastTableCostPC = cost; - } else { - lastTableCostNPC = cost; - } EndHook(); return cost; } @@ -74,6 +69,7 @@ static void __declspec(naked) BarterPriceHook() { call BarterPriceHook_Script; // edx - target pop ecx; pop edx; + mov lastTableCostNPC, eax; retn; } } @@ -89,6 +85,7 @@ static void __declspec(naked) PC_BarterPriceHook() { call BarterPriceHook_Script; pop ecx; pop edx; + mov lastTableCostPC, eax; retn; } } diff --git a/sfall/Modules/Inventory.cpp b/sfall/Modules/Inventory.cpp index f72ca1cf..42ab5e7e 100644 --- a/sfall/Modules/Inventory.cpp +++ b/sfall/Modules/Inventory.cpp @@ -621,17 +621,16 @@ end: static long CalculateSuggestedMoveCount(fo::GameObject* item, long maxQuantity, bool fromPlayer, bool fromInventory) { // This is an exact copy of logic from https://github.com/alexbatalov/fallout2-ce/pull/311 - if (item->protoId == fo::PID_BOTTLE_CAPS && !fo::var::dialog_target_is_party) { - // Calculate change money automatically - long totalCostPlayer; - long totalCostNpc; + if (item->protoId == fo::PID_BOTTLE_CAPS && !fo::var::dialog_target_is_party) { + // Calculate change money automatically + long totalCostPlayer, totalCostNpc; BarterPriceHook_GetLastCosts(totalCostPlayer, totalCostNpc); - // Actor's balance: negative - the actor must add money to balance the tables and vice versa - long balance = fromPlayer ? totalCostPlayer - totalCostNpc : totalCostNpc - totalCostPlayer; - if ((balance < 0 && fromInventory) || (balance > 0 && !fromInventory)) { - return min(std::abs(balance), maxQuantity); - } - } + // Actor's balance: negative - the actor must add money to balance the tables and vice versa + long balance = fromPlayer ? totalCostPlayer - totalCostNpc : totalCostNpc - totalCostPlayer; + if ((balance < 0 && fromInventory) || (balance > 0 && !fromInventory)) { + return min(std::abs(balance), maxQuantity); + } + } return 1; } @@ -675,11 +674,11 @@ static void __declspec(naked) do_move_timer_hack() { __asm { push ecx; push ebp; // max - mov edx, dword ptr[esp + 32]; // return address - mov ecx, dword ptr[esp + 20]; // item, potentially + mov edx, dword ptr [esp + 32]; // return address + mov ecx, dword ptr [esp + 20]; // item, potentially call CalculateDefaultMoveCount; mov ebx, eax; - pop ecx; + pop ecx; retn; } } @@ -811,8 +810,8 @@ void Inventory::init() { skipFromContainer = IniReader::GetConfigInt("Input", "FastMoveFromContainer", 0); } - itemCounterDefaultMax = IniReader::GetConfigInt("Misc", "ItemCounterDefaultMax", 0); - itemCounterAutoCaps = IniReader::GetConfigInt("Misc", "ItemCounterAutoCaps", 0); + itemCounterDefaultMax = (IniReader::GetConfigInt("Misc", "ItemCounterDefaultMax", 0) != 0); + itemCounterAutoCaps = (IniReader::GetConfigInt("Misc", "ItemCounterAutoCaps", 0) != 0); if (itemCounterDefaultMax || itemCounterAutoCaps) { MakeCall(0x4768A3, do_move_timer_hack); }