From a75886a0209c8fa244ffc6396fe23e6958206047 Mon Sep 17 00:00:00 2001 From: NovaRain Date: Wed, 1 Mar 2023 09:13:48 +0800 Subject: [PATCH] Added a tweak to the ammo info for Glovz's/YAAM * to display correct ammo stats based on the formulas w/o editing proto.msg manually. Updated translation ini files. Set the maximum number of screenshots to 10k (was 100k) * 100k is impractical because the max files per directory on FAT32 is 65535 (only if all files are in 8.3 format) when the game came out. --- artifacts/config_files/Translations.ini | 2 ++ .../translations/brazilian_portuguese.ini | 2 ++ artifacts/translations/chs.ini | 2 ++ artifacts/translations/cht.ini | 2 ++ artifacts/translations/french.ini | 2 ++ artifacts/translations/german.ini | 2 ++ artifacts/translations/polish.ini | 2 ++ artifacts/translations/russian.ini | 2 ++ sfall/Modules/Credits.cpp | 2 -- sfall/Modules/DamageMod.cpp | 23 +++++++++++++++++++ sfall/Modules/Graphics.cpp | 3 +++ 11 files changed, 42 insertions(+), 2 deletions(-) diff --git a/artifacts/config_files/Translations.ini b/artifacts/config_files/Translations.ini index f93611d0..2c95cfa0 100644 --- a/artifacts/config_files/Translations.ini +++ b/artifacts/config_files/Translations.ini @@ -11,6 +11,8 @@ PartyLvlMsg=Lvl: PartyACMsg=AC: PartyAddictMsg=Addict NPCPickupFail=%s cannot pick up the item. +AmmoInfoGlovz=Div: DR/%d, DT/%d +AmmoInfoYAAM=DT Mod: %d PartyOrderAttackHuman=I'll take care of it.|Okay, I got it.|Sounds like a plan. PartyOrderAttackCreature=::Growl:: diff --git a/artifacts/translations/brazilian_portuguese.ini b/artifacts/translations/brazilian_portuguese.ini index 377f6851..a4ab998d 100644 --- a/artifacts/translations/brazilian_portuguese.ini +++ b/artifacts/translations/brazilian_portuguese.ini @@ -11,6 +11,8 @@ PartyLvlMsg=Nvl: PartyACMsg=CA: PartyAddictMsg=Viciado NPCPickupFail=%s não pôde pegar o item. +AmmoInfoGlovz=Div: DR/%d, DT/%d +AmmoInfoYAAM=DT Mod: %d PartyOrderAttackHuman=Eu tomarei conta disso.|Ok, eu entendi.|Soa como um plano. PartyOrderAttackCreature=::Rosnado:: diff --git a/artifacts/translations/chs.ini b/artifacts/translations/chs.ini index 2bca2dcd..d374a429 100644 --- a/artifacts/translations/chs.ini +++ b/artifacts/translations/chs.ini @@ -11,6 +11,8 @@ PartyLvlMsg= PartyACMsg=AC: PartyAddictMsg=ÉÏñ« NPCPickupFail=%sÎÞ·¨½«¶«Î÷¼ñÆðÀ´¡£ +AmmoInfoGlovz=Div: DR/%d, DT/%d +AmmoInfoYAAM=DT Mod: %d PartyOrderAttackHuman=ÎÒ»á¶Ô¸¶ËûµÄ¡£|ºÃ£¬ÎÒÖªµÀÁË¡£|ºÃÖ÷Òâ¡£ PartyOrderAttackCreature=::ºðºð:: diff --git a/artifacts/translations/cht.ini b/artifacts/translations/cht.ini index bf1a0809..67d28467 100644 --- a/artifacts/translations/cht.ini +++ b/artifacts/translations/cht.ini @@ -11,6 +11,8 @@ PartyLvlMsg= PartyACMsg=AC: PartyAddictMsg=¤WÅ} NPCPickupFail=%sµLªk±NªF¦è¾ß°_¨Ó¡C +AmmoInfoGlovz=Div: DR/%d, DT/%d +AmmoInfoYAAM=DT Mod: %d PartyOrderAttackHuman=§Ú·|¹ï¥I¥Lªº¡C|¦n¡A§Úª¾¹D¤F¡C|¦n¥D·N¡C PartyOrderAttackCreature=::§q§q:: diff --git a/artifacts/translations/french.ini b/artifacts/translations/french.ini index 52314b82..402c4209 100644 --- a/artifacts/translations/french.ini +++ b/artifacts/translations/french.ini @@ -11,6 +11,8 @@ PartyLvlMsg=Niveau: PartyACMsg=CA: PartyAddictMsg=Accroc NPCPickupFail=%s ne peux pas prendre cet objet. +AmmoInfoGlovz=Div. : RD/%d, SD/%d +AmmoInfoYAAM=Mod. SD : %d PartyOrderAttackHuman=Je m'en occupe|Okay, je fais ça|Bonne idée PartyOrderAttackCreature=::Grogne:: diff --git a/artifacts/translations/german.ini b/artifacts/translations/german.ini index b158536d..ea82c489 100644 --- a/artifacts/translations/german.ini +++ b/artifacts/translations/german.ini @@ -11,6 +11,8 @@ PartyLvlMsg=Lvl: PartyACMsg=RÜ: PartyAddictMsg=Abhäng NPCPickupFail=%s kann das Objekt nicht nehmen. +AmmoInfoGlovz=Div: RV/%d, SV/%d +AmmoInfoYAAM=SV-Mod: %d PartyOrderAttackHuman=Ich kümmere mich darum.|Wird gemacht.|Geht klar. PartyOrderAttackCreature=::Grrrr:: diff --git a/artifacts/translations/polish.ini b/artifacts/translations/polish.ini index 5d5398d8..bf806be4 100644 --- a/artifacts/translations/polish.ini +++ b/artifacts/translations/polish.ini @@ -11,6 +11,8 @@ PartyLvlMsg=Lvl: PartyACMsg=AC: PartyAddictMsg=Uzale¿niony NPCPickupFail=%s nie mo¿e podnieœæ przedmiotu. +AmmoInfoGlovz=Dz.: OO/%d, PO/%d +AmmoInfoYAAM=Mod. PO: %d PartyOrderAttackHuman=Zajmê siê tym.|Okej, zrozumia³em.|No to mamy plan. PartyOrderAttackCreature=::Warkniêcie:: diff --git a/artifacts/translations/russian.ini b/artifacts/translations/russian.ini index 794f9a6d..f4c8c1de 100644 --- a/artifacts/translations/russian.ini +++ b/artifacts/translations/russian.ini @@ -11,6 +11,8 @@ PartyLvlMsg= PartyACMsg=ÊÁ: PartyAddictMsg=Çàâèñèìîñòü NPCPickupFail=%s íå ìîæåò ïîäîáðàòü ïðåäìåò. +AmmoInfoGlovz=Äåë.: ÑÓ/%d, ÏÓ/%d +AmmoInfoYAAM=Èçì. ÏÓ: %d PartyOrderAttackHuman=Õîðîøî, ÿ èì çàéìóñü.|Öåëü ÿñíà.|Äåéñòâóþ ïî ïëàíó. PartyOrderAttackCreature=::Ãððð:: diff --git a/sfall/Modules/Credits.cpp b/sfall/Modules/Credits.cpp index 03210fbd..2cab8283 100644 --- a/sfall/Modules/Credits.cpp +++ b/sfall/Modules/Credits.cpp @@ -82,7 +82,6 @@ static const char* ExtraLines[] = { }; static DWORD ExtraLineCount = sizeof(ExtraLines) / 4; -//static const char* creditsFile = "credits.txt"; static DWORD __fastcall CreditsNextLine(char* buf, DWORD* font, DWORD* colour) { if (!InCredits || CreditsLine >= ExtraLineCount) return 0; @@ -172,7 +171,6 @@ static void __declspec(naked) ShowCreditsHook() { pop eax; mov InCredits, 1; mov CreditsLine, 0; - //mov eax, creditsFile; call fo::funcoffs::credits_; mov InCredits, 0; retn; diff --git a/sfall/Modules/DamageMod.cpp b/sfall/Modules/DamageMod.cpp index 16cde82a..2c4a10c0 100644 --- a/sfall/Modules/DamageMod.cpp +++ b/sfall/Modules/DamageMod.cpp @@ -20,6 +20,7 @@ #include "..\FalloutEngine\Fallout2.h" #include "..\Logging.h" +#include "..\Translate.h" #include "HookScripts.h" #include "Unarmed.h" @@ -32,6 +33,8 @@ namespace sfall int DamageMod::formula; +static char ammoInfoFmt[32]; + // Integer division w/ round half to even for Glovz's damage formula // Prerequisite: both dividend and divisor must be positive integers (should already be handled in the main function) static long DivRound(long dividend, long divisor) { @@ -117,6 +120,13 @@ void DamageMod::DamageGlovz(fo::ComputeAttackResult &ctd, DWORD &accumulatedDama } } +static __declspec(naked) void AmmoInfoPrintGlovz() { + __asm { + lea edi, ammoInfoFmt; + retn; + } +} + // YAAM v1.1a by Haenlomal 2010.05.13 void DamageMod::DamageYAAM(fo::ComputeAttackResult &ctd, DWORD &accumulatedDamage, long rounds, long armorDT, long armorDR, long bonusRangedDamage, long multiplyDamage, long difficulty) { if (rounds <= 0) return; // Check number of hits @@ -169,6 +179,13 @@ void DamageMod::DamageYAAM(fo::ComputeAttackResult &ctd, DWORD &accumulatedDamag } } +static __declspec(naked) void AmmoInfoPrintYAAM() { + __asm { + lea ecx, ammoInfoFmt; + retn; + } +} + //////////////////////////////////////////////////////////////////////////////// // Display melee damage w/o PERK_bonus_hth_damage bonus @@ -326,8 +343,14 @@ void DamageMod::init() { switch (formula) { case 1: case 2: + HookScripts::InjectingHook(HOOK_SUBCOMBATDAMAGE); + MakeCall(0x49B54A, AmmoInfoPrintGlovz, 2); // Dmg Mod (obj_examine_func_) + Translate::Get("sfall", "AmmoInfoGlovz", "Div: DR/%d, DT/%d", ammoInfoFmt, 32); + break; case 5: HookScripts::InjectingHook(HOOK_SUBCOMBATDAMAGE); + MakeCall(0x49B4EB, AmmoInfoPrintYAAM, 2); // DR Mod (obj_examine_func_) + Translate::Get("sfall", "AmmoInfoYAAM", "DT Mod: %d", ammoInfoFmt, 32); break; default: formula = 0; diff --git a/sfall/Modules/Graphics.cpp b/sfall/Modules/Graphics.cpp index ff9e9b3e..07f8d323 100644 --- a/sfall/Modules/Graphics.cpp +++ b/sfall/Modules/Graphics.cpp @@ -1307,6 +1307,9 @@ void Graphics::init() { LoadGameHook::OnBeforeGameInit() += []() { WinProc::SetWindowProc(); }; } + // Set the maximum number of BMP screenshots to 10k (was 100k) + SafeWriteBatch(10000, {0x4C908B, 0x4C9093}); // default_screendump_ + WindowRender::init(); }