Fallout 2 mod FO2 Engine Tweaks (Sfall)

You can use my settings if you wish to use InventoryFilter with both Expanded sfall options:
Code:
;The offset value of the position of the switch panel with party members along the X-axis
SwapBarterOffset=-294
SwapLootOffset=12

;The offset value of the position of the switch panel with party members along the Y-axis
SwapBarterYOffset=-226
SwapLootYOffset=188

;The offset value of the position of the "weight" label in the player's inventory along the Y-axis
WeightWinShift=93

I think InventoryFilter needs visual update: party member swap buttons are ugly AF, they need to use the existing arrows that appear when searching through files of corpses. Why invent custom UI (which is ugly and doesn't even match the original style) when there's already something appropriate in the game?

@phobos2077 Works perfectly, thank you. Can you please also check Fallout Et Tu "ShowLootWeight" mod and post correct setting?
 

Attachments

Is there possible to have Combat Control in Fallout 2 using sFall 4.4.4? What is the last sFall that allows it? + where is the ammo prompt hidden in the .ini file? I have the ammo type shown in Fallout 2 but I don't in Fallout et tu (I mean a prompt in the place where addiction, radiation or leveling up shows usually)
 
Is there possible to have Combat Control in Fallout 2 using sFall 4.4.4? What is the last sFall that allows it? + where is the ammo prompt hidden in the .ini file? I have the ammo type shown in Fallout 2 but I don't in Fallout et tu (I mean a prompt in the place where addiction, radiation or leveling up shows usually)

well Combat Control.. you must be talking about some reeeeally ancient sfall here.... You see from quite some time Combat Control mod has been externalized into a global script, it is controlled from sfall-mods.ini . this ini has been tossed around in the game folder system as well, initially it was in game's root folder but now is mooved with other config .ini files. (usually somewhere in mods folder or somewhere or somewhere in the subfloders), however it is still possible to control party members, i always use it, so it's not gone, it only changed the form.
as for ammo type display in "boxbars".. that is a part of a third party mod bundle "fo2tweaks" i think..
 
Some random survey:
Do you think the game should keep your sneak state after map change? (i.e. if you're sneaking and move to another map, you will still be sneaking.)
 
Some random survey:
Do you think the game should keep your sneak state after map change? (i.e. if you're sneaking and move to another map, you will still be sneaking.)
yeah. example of use: mariposa/cathedral in fallout 1997 when you're trying to keep it secret
 
@NovaRain that can aleady be achived, although it's not perfect in it's curret form.

One can hex edit the character file one begins the game with, either a custom or predefined one. simply the first or second digit in the save needs to be set to "1" in hex editor and saved.
it's aquirk then:
pros:
+the character starts the game sneaking and is always sneaking even when starting a randm encounter until the con hapens
cons:
if player decides to turn off the sneak skill at any given point in the game( eiter by skiilldex or by pressin 1), then sneak returns to normal behaviour, a.k.a sneak is turned of on map change.
 
@phobos2077
i wasn't talking of save editing

only hex editing the character cgd file you have to use to start the game (a.k.a even creation of a character from scratch is made from a cgd file with 5 in all stats and 5 extra stats plus no triats and tags chosen).

i wasn't implying save edits
 
hi, hello, sorry if this off topic, but i cant find any thread about ddraw.ini
I just want to ask about this config in ddraw,

;Set to 1 to enable Ray's patch to make world map encounter rate independent of your travel speed
;Higher values of WorldMapEncounterRate cause a slower encounter rate
WorldMapEncounterFix=0
WorldMapEncounterRate=5

should i enable the encounter fix? and if i raise the number on encounter rate, like 50, would i have less encounter then?
 
Sfall [mostly 4.4.3]

Town Rep breakpoints: The RepPoint.H says:
Code:
// macros for general town status
// good
#define town_rep_is_idolized                 (global_var(TOWN_REP_VAR) >= 30)
#define town_rep_is_liked                    (global_var(TOWN_REP_VAR) >= 15)
#define town_rep_is_accepted                 (global_var(TOWN_REP_VAR) >= 1)
// neutral
#define town_rep_is_neutral                  (global_var(TOWN_REP_VAR) == 0)
// bad
#define town_rep_is_antipaty                 (global_var(TOWN_REP_VAR) <= -1)
#define town_rep_is_hated                    (global_var(TOWN_REP_VAR) <= -15)
#define town_rep_is_vilified                 (global_var(TOWN_REP_VAR) <= -30)
But the breakpoints [of the last two]are actually [< -15 & < -30]. I could adjust the header,but it seems to me the above is the intended range, so maybe the engine should rather adjust to the above? [edit: I'm pretty sure these breakpoints are hard-coded, not something I can fix in txt or script]


Mutate! perk:
I had several Perks to pick (i.e. I levelled up to 12 w/o picking one). When I pick Mutate! it asks me to"Lose a Trait", I do, it returns to the Perk selection,when I select another Perk, it again opens "Lose a Trait",and I can do it again - and so on. Besides the repeat glitch, this basically allows me to replace both Traits with one perk. (note: this does not allow to pick traits I originally started with, but I can pick the same trait twice, i.e. replace both my traits with Gifted,for example) [sfall was 4.3.7, then retested in 4.4.3]
Edit: And it needs two Traits. If I have only one it crashes. [sfall was 4.4.3]
Edit: When I have None it first allows me to pick one (vanilla behaviour, checked), then (after selecting another perk) I can repick it, and then (ditto) it crashed on the third time.
Edit: This may be related to the way Mutate! is cancelled (memory). For example, even when chaining several trait swaps I can still press cancel (while on the "Lose a Trait" screen) and return to my original two traits.
Either way, you should probably fix the crash (at least) as that is normal game-play (i.e. I save up, I mutate (to replace my single trait), I pick the next perk and(instant) crash – can happen fairly naturally).


[The following are my notes on display bugs (vanilla & display bonus damage) and describes the behaviour. There is also my test set-up at the end. Maybe this is interesting (starting point), if inclined to fix it, as it seems there are already fixes in place, they only need to be used.]

Character Sheet/Screen
-Firstly, the character screen does not display negative bonus values to Melee Damage. It does display positive values (i.e. setting the Melee Damage bonus to 1000, gets displayed as 500 (the max) but when I set it to -1000 it is 0 (the min) but does not get displayed as such, instead it just remains at base value. [example, I set my ST to 10, and bonus value to -2, so Melee Damage should be 3 (and it is) but character screen says it's 5).] Note: you may check "DisplayBonusDamage"which if set to 1 seems to fix this.
[edit: other values, like Healing Rate, do not show this behaviour, only MD does. HR is also a good comparison as it's very similar to MD (i.e. base (has a min of 1), and after bonus (it's a min of 0). So a fix could also try to emulate HR.]

-Secondly, this "display error"also applies in the inventory screen where it displays a damage of(example) 1-1 as 1-2 or (example of ST 10 w/ -2) 1-4 as 1-6. Possibly a follow up error. EDIT: surprisingly for weapons only. The standard punch & kick attacks are displayed correctly (for example, a Strong Punch is 4-5 (base), and displayed as such when my melee damage is 0, if my melee damage is 1 it adjusts to 4-6 [or in the ST10 w/ -2 example to 4-8], only weapons like (for example Brass Knuckles) are displayed incorrectly. Note: you may either check what kick & punch do differently OR you may check"DisplayBonusDamage" which if set to 1 seems to fix this(too & again).

-Thirdly, there are some weapons that never display Melee Damage, those are rocks (rock, gold nugget,uranium ore and refined uranium) and Throwing Knives. I speculated that this is caused by their primary attack being a throw (and the engine does not check the secondary after that) and it seems to be correct. When I switch the attack type around (Throwing Knife to primary Swing & secondary Throw) it applies Melee Damage in the inventory screen, but to both attacks (Swing & Throw); which in turn is not correct (same as Spears, see next bulletin). [Note: That the engine (when it matters) has no issue telling these attacks apart(Fast Shot, applying Melee Damage, bonus damage perks etc).]

-Fourthly, the engine does not distinguish between (primary & secondary) attack types, for example, the throw attack of a spear adds Melee Damage to the damage displayed in the inventory screen (which is incorrect, MD doesn't apply to throw attacks). This seems to be the same as the previous point (i.e. it checks the primary attack, and then applies that to both, rather than checking both attack types). [Note: I'm not sure if this is easy to fix, but (melee damage, weapon skill, Fast Shot and Bonus HtH/Ranged Damage (as well as the AP versions)), all separate between attack types really well. Also "DisplayBonusDamage"(if enabled) already does it (but only in some cases) like with rocks(throw & punch) & throwing knives (throw & swing) [where it displays the Perks' "bonus damage" depending on attack type], but it also goes a bit haywire... but possibly for different reasons.]

DisplayBonusDamage
Not sure this works correctly.
I expected it to display based on attack type. But it behaves a bit odd. I did a full test with all Melee/Unarmed Weapons and the following is how it behaves:
The following are correct:

-Ranged Weapons seem to behave correct (but I only tested about half of them)
-The default (weaponless) kick &punch seem to behave correctly (but small sample size, not tested all)
-The punch weapons (knuckles, power fist, gloves), knife weapons (shiv, ripper etc.) and club weapons(crowbar etc.) seem to work correct (checked all)

The following are the ones that are off[after selecting the HtH or Ranged bonus damage perk]:

-"Rocks" (rocks, gold nugget etc) after HtH (punch attack) displays +2 min only, should be +2 min & +2 max and after Ranged (throw attack) displays +2 min & +2 max, should be none.
-"Throwing Knives": (same as rocks) after HtH (swing attack) displays +2 min only, should be +2 min & +2 max and after Ranged (throw attack) displays +2 min &+2 max, should be none.
[Note: speculation, but it is possible that the (punch & swing) bug (+2 min only) is caused by the engine blocking the display of Melee Damage for weapons (that have throw as their primary attack), and as DBD treats the +2 BD (to max)as MD (see second bug below), it may get blocked. Note that it fails to display BD and MD. So this may be (in part) engine, (in part) DBD.]
-"Throwing" (grenades, plant spike, flare): after Ranged they display +2 min & +2 max, should be none.
[Note: I believe this is a basic error,i.e. DBD assumes Ranged Bonus Damage applies to throw. This seems to be a bug throughout. Guess, but maybe DBD is based on the Fast Shot check (which includes throwing), while the Ranged perk check actually excludes it.]
-"Spears" (all three): after HtH it displays +2 max (thrust & throw attack), should be +2 min& +2 max (but for thrust attack only) and after Ranged it displays +2 min & +2 max (thrust & throw attack), should be none.
-"Hammers" (both): after HtH it displays +2 max (thrust & swing attack), should be +2 min &+2 max and after Ranged it displays +2 min & +2 max (thrust &swing attack), should be none.
[Note: These two are bizarre, can't think of a reason why spears and hammers behave like this. Especially hammers make no sense. Also note that these two cases don't separate between attacks as the rocks & throwing knives do.]

Extra Notes:
-Throwing Knives (throw & swing)bug out like rocks (throw & punch) [as described above], but that changes when I swap the attacks around (to: swing & throw) or(thrust & throw) then the swing & thrust attack (are displayed correctly) [something that does not work for spears & hammers], while throw got displayed like a spear or hammer [as described above, i.e. +2 to max (after HtH) and then +2 min & +2 max (after Ranged)].
-I also made a Mad Test and set a 10mm SMG to (Single & Punch) and a Flamer to (Punch & Continuos). And again, the engine handles this surprisingly well (applies melee damage, skill use and bonus damage correctly), but "DisplayBonusDamage" displayed the bonus damage rather weirdly again (the SMG like a range weapon (for both attacks) and the Flamer like a hammer/spear [as described above]. [edit: it had some other quirks like requiring ammo to punch (i.e. can't bayonet when out of ammo) and the "flamer sound" wouldn't play anymore(?), but those are details/different topic/or require mods.] Anyway, DBD has again more problems displaying bonus damage than the engine has with applying it.
I really can't tell if DBD is bungled or a wrong check... atm, it seems to be an error (throwing) and a bungled one (for spears and hammers).
I did some tests (once) and based on those I thought the three categories are:
Melee: punch, kick, swing, thrust(Bonus HtH Attacks & Bonus HtH Damage apply)
Throw: throwing
Range: single, burst, continuously(Bonus Rate of Fire & Bonus Ranged Damage apply)
However, after the above (came out odd)I started to doubt myself and repeated the test (see link to test setup below) but it came out as expected.
So... it seems the perks work correctly(based on attack type) but "DisplayBonusDamage" is a bit of a muddle. [which is surprising, as I would assume it would just use the same check as the perks, not sure why it doesn't/can't]
[sfall was 4.3.7 & then 4.4.3]

DisplayBonusDamage : second bug (BD is treated as MD)
It seems it applies the bonus damage like Melee Damage (i.e. as part of the bonus value). Example: When I set my Melee Damage to -1000 it claimed I have 0 (character screen)(which is incorrect) and the Brass Knuckles claimed to do 3-1 damage(inventory screen) (also incorrect).
Seems it calculates "base + (bonus+ perk)", but it's actually "base (has a min of 1) + bonus(min (after addition) of 0) and then it should add +2 (perk)" so even with a (MD) bonus value of -1000 the weapon still does (example)3-3 damage w/ perk (i.e. 1-1 from weapon, 0 Melee Damage, +2 from perk), and which is what "DisplayBonusDamage" should display. Also the character sheet should display Melee Damage as 2(not 0) in this case. [edit: Although it could be argue that the bonus damage (from perks) should only be displayed as part of the weapons damage (in the inventory screen), but not as part of Melee Damage (in the character screen), as that is technically not correct.]
I'm also not sure if it handles max correctly. When I set Melee Damage to +1000 it displayed Melee as 500(character screen) and damage (example) as 3-501, but I believe that should be (character screen) 502 (max of 500 + perk) and (inventory screen) 3-503 (1-1 (weapon), +500 Melee Damage (max) and +2 from perk), but I can't test that (reasonably) at least not with my current abilities (i.e. I'm not going to hit Vic 500 times to see if I can get a 502 or 503). However, I believe the +2 damage from the perks should always be added on top (part of damage calculation) [and possible to the damage in inventory screen only], and not as part of Melee Damage.]

My Test Set-Up: https://easyupload.io/h15os5
Link includes a mod folder (with 1.02d (base), WeaponTest (with a map, protos & script),ThrowingKnifeSwap (weapon with attack switched around) and a MadTest (ranged/HtH mix)) and some savegames (slot 11 to 21, 22-23, plus 25 to 28, and 30 (temporary test slot)]) [modifications; I adjusted GVAR47 (in slot 11 to 21) and in slot 25 (already on lvl 15) I set meleedamage to 1 (base) + -1 (bonus) to eliminate the unarmed/melee variation in damage, the other (slot 26 & 27) edited Melee Damage to test the min (-1000) & max (+1000) values, while slot (28) is set to ST 10 & -2 MD aka a MD of 3]. Just enable mod and load (to check) or use your own saves (just enter map from worldmap at any one spot). The weapons inside the fridge are all "attack types"there are, and the damage has been set to a flat 1-1. So as long as you fire at a DT/DR 0/0% target (Vic volunteered in the saves) you don't have to worry about complex damage calculations. I also set the ammo (10mm & flamer) to do nothing – i.e. it's as flat as it gets (only crits remain). To level up read the book in the fridge(modified, only gives XP, which gives more flexibility for testing;you may have to edit to meet SPECIAL requirements though). [Test Example (what to expect): w/o perks all weapons should be 1-1, and with perks change to 3-3 and then do either 3 (if it applies) or 1(if it doesn't) damage to Vic – this will then fail to display correctly as detailed above (for example, the frag grenade is 1-1 but w/ Ranged Perk will be displayed as 3-3). You can then toggle "DisplayBonusDamage" and use slot 22-23 (unmodified) &25-28 (modified; see name, i.e. "-1 Melee Damage", "-1000","+1000" & "ST 10-2") to check how the display changes. My main go-to save was Slot 25 (with a Melee Damage of 0 and all Perks available). For comparison I used slot 22 (melee damage of 1) and 28 (melee damage of 3).] - However, you may also create your own clean set-up from ground up – that's what I would do, tbh -.- (i.e. see if it reproduces, learn/understand by repeating,avoid having to figure out the set-up quirks... but time-loss,possibly [note: I tried to avoid complications but forgot One Hander on slot 28, something to keep in mind when looking at hit chance]).
The Town Rep saves (slot 11-21) are all for Arroyo. The save name implies the break point the GVAR (47) has been set to [may double check in F12se]. You can just go over them to see that it's < -15 and < -30 not <=.
I've made no edit to ddraw [4.4.3] except Extra Save Slots (and I toggled the HtH settings [DisplayBonusDamage] during testing, ofc), rest was default.
[edit: Added 1.02d patch to the mod folder, just to avoid the Vault13 : "INVAIDITATOR" thing so you won't have issues loading the saves and should also put us on the same version... probably (edit: not seen anything to the contrary yet, in opposite to Fo1, the patch000 really does unify). Note: to use the old F12se you need to have a Vault13 copy also under data/data else it throws a wobbler (edit: added one).]


P.S.S.
Something from my notes which I forgot about:
EDIT II: When fixing the[remove_pid_qty] header to remove worn armour correctly, the full exploit (w/ worn armour) doesn't work anymore. Only the "normal"one of hiding items on handslot or worn, still works, as well as the full exploit when putting the armour on a handslot. No change. Still,may be interesting why a correctly removed armour (i.e. after header fix) gets those "dropped & picked up" items out of their limbo state.
"rm_mult_objs_from_inven" fails to remove items from inventory correctly, while"item_caps_adjust" can do it correctly : possible exploit :hide items on hand-slot or worn (engine can't remove those). Full exploit (hide one item on hand-slot or worn, drop the rest and pick them up again (w/o opening the inventory screen after), if done, it will only remove the one item from hand-slot or worn. An easy example to test this is getting the Flint for Healing Powder from Morlis.

Correct Macro (changed self_obj to who_obj in "critter_inven_obj"):
Code:
#define remove_pid_qty(who_obj, the_pid, pid_qty)                                            \
           removed_qty := obj_is_carrying_obj_pid(who_obj,the_pid);                          \
           if ((pid_qty) < removed_qty) then begin                                           \
              removed_qty := pid_qty;                                                        \
           end                                                                               \
           if (removed_qty > 0) then begin                                                   \
              restock_obj := obj_carrying_pid_obj(who_obj, the_pid);                         \
              if (obj_type(self_obj) == 1) then begin                                        \
                 restock_obj := obj_carrying_pid_obj(who_obj, the_pid);                      \
                 if (critter_inven_obj(who_obj, INVEN_TYPE_WORN) == restock_obj) then begin  \
                    remove_armor(who_obj)                                                    \
                 end else if ((critter_inven_obj(who_obj, INVEN_TYPE_LEFT_HAND) == restock_obj) or (critter_inven_obj(who_obj, INVEN_TYPE_RIGHT_HAND) == restock_obj)) then begin     \
                    inven_unwield(who_obj);                                                  \
                 end                                                                         \
              end                                                                            \
              restock_amt := rm_mult_objs_from_inven(who_obj, restock_obj, removed_qty);     \
              destroy_object(restock_obj);                                                   \
           end                                                                               \
           restock_obj := 0;                                                                 \
           restock_amt := 0;
This fixes a bug of removing the armour incorrectly from the dude (i.e. it does not reset stats) but it also prevents the full exploit (somehow)...
Maybe interesting, too, if anyone cares.
 
Hello,
I have some questions please.

Do you if it's possible to "intercept" each dialog lines, from floating message, and inside dialog view with characters ? Can I use a hook ?

Thank you !
 
In fact, I wanted to play with a friend to some F2 mods, in my native language.

We first tried to fully translate dialog files, but some mods are too heavy. Then use Python scripting with Deepl or OpenAI api, but got some in-game errors, maybe because there were file structure problems or other.

Then I thought about doing it with Sfall, so I started to read the Sfall documentation and test some global scripts. The idea is to intercept dialogs, translate it with given API, then display translated lines.

Sure it must be overkilled, maybe it's not even possible to call "outside" API, or it's too complex ! Let me know, thanks :)
 
Back
Top