- Remove duplicate Salesman tweak
- Decoupled hacks for multi-perk-level support for Salesman and Demolition Expert from the bonus value change
- Renamed settings for consistency ("<PerkName>Bonus" when it has only one effect)
- Renamed get_clamped to math_clamp for consistency (libs should use namespace prefixes)
- Nuked above/below macros and renamed unsigned_comp to insigned_int_compare, because it doesn't work with floats
- Replaced sprintf2 and string_pos with macros (due to new metarules)
- Add a few entries to functions.yml
- Retain maximized/minimized state
- Save normal position when closing in maximized/minized state
- Allow to move window in negative x direction
- Disable close button
- Save position if game was closed by pressing Alt+F4 in console window
- Optional highlighting of critters, using the same colors and rules as in the combat mode
- Holding highlight key will update outlines based on current positions
- Enable LOS check by default for more interesting looting
Cleaned up some module headers.
Updated version number in documents.
Updated changelog in sslc document, and removed the mention about
empty statements (it never worked).
INI Config reader:
- Replaced GetPrivateProfile* functions for reading ini with vanilla-based INI reader.
- Changed IniReader classes to read INI files once using new Config class and cache results until GameReset (going to main menu).
- Added metarule to read entire INI file in one operation and return as two-dimensional map array.
- Increased limits for INI strings to 1021.
- Had to reorganize some code to make this work. Changed how some singletons are created to guarantee destructor calls in correct order (IniReader is constructed first and destructed last, after every other module).
- Reading INI from within sfall as well as get_ini_setting opcode
- calling atoi opcode
- Support auto-detecting 0x, 0 and 0b for hex, octal and binary representations respectively
- Allow to pass elevation using the free bits of the tileNum value to access elevations 1 and 2 (instead of defaulting to dude_elevation, which is not how it worked before)
- Access roof FID and raw data using mode flags in the top 4 bits
- Rename to "mods_order.txt"
- Create "mods" folder if it doesn't exist before creating an empty mods_order.txt
- Trim space and tab characters
- Allow comments after file names with ; or # (INI-style)
- HookScripts: track return types in addition to values
- Set allowNonIntReturn in hook code to allow non-int return values to be accepted
- Moved get_sfall_arg and set_sfall_return opcodes to the new table
- It didn't take different stacks of items into account as well as cases where one item is in the backback and other in the slot and you need to remove both
* before they didn't update derived stats when setting SPECIAL, for
the player it requires accessing the char screen to update.
Replaced some proto_ptr() usages with GetProto().
* 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.
* moving the processing to GPU (commit edbfc05)
Improved the functionality of AllowDShowMovies:
now can take screenshots and press any key to skip AVI movies.
Code edits to Logging.cpp.
[HRP] Fixed broken console messages when using ConsoleOutputPath (#424)
[HRP] Disabled IFACE_BAR_WIDTH for Chinese version.
Fixed the copyright line in the credits.
* when the player still has an impending radiation effect
[HRP] Fixed the clickability issue for SCALE_BUTTONS_AND_TEXT_MENU.
Moved some code related to HRP.
Unified the naming style for color variables.
(BGforgeNet/Fallout2_Restoration_Project#131, #420)
Improved the duplicate path removal in LoadOrder.cpp.
Code edits to the fix in previous commit for system compatibility.
* fixes not closing sound files after fading, which led to unable to
load the game anymore due to the the open files limit.
Code edits to CRC.cpp for displayed messages.
A set of engine modifications for the classic game Fallout 2 in form of a DLL, which modifies executable in memory without changing anything in EXE file itself.
A set of engine modifications for the classic game Fallout 2 in the form of a DLL, which modifies executable in memory without changing anything in EXE file itself.
**Engine modifications include:**
- Better support for modern operating systems
@@ -10,8 +13,52 @@ A set of engine modifications for the classic game Fallout 2 in form of a DLL, w
- Many additional features for users, such as item highlight button, party member control, etc.
- Extended scripting capabilities for modders (many new opcodes to control sfall features as well as previously unavailable vanilla engine functions)
Original author: **Timeslip**
Original author: timeslip
Original description: A set of engine modifications for the classic game Fallout 2 by Interplay. Includes fixes for bugs in the original engine, allows Fallout to run correctly on modern operating systems, and adds additional features for modders.
Original description: A set of engine modifications for the classic game Fallout 2 by Interplay. Includes fixes for bugs in the original engine, allows fallout to run correctly on modern operating systems, and adds additional features for modders.
## Installation
- Download `sfall_*.7z` from the [release archive](https://sourceforge.net/projects/sfall/files/).
- Extract `ddraw.dll`, `ddraw.ini`, `sfall.dat`, and the `mods` folder to Fallout's base directory (i.e. the one that contains `fallout2.exe`). Also, remove `gl_highlighting.int` and `gl_partycontrol.int` from Fallout's `data\scripts\` directory if you are updating from an older version.
- __Important Note:__\
If you are using a mod that already included sfall (e.g. killap's [Unofficial Patch](https://github.com/BGforgeNet/Fallout2_Unofficial_Patch) or [Restoration Project](https://github.com/BGforgeNet/Fallout2_Restoration_Project)), then that mod has probably included a custom modified `ddraw.ini`. In that case, overwriting it with sfall's vanilla `ddraw.ini` will be likely break your game. Instead, only overwrite `ddraw.dll`, and keep the mod's existing copy of `ddraw.ini`. (Or, if you know what you're doing, you can merge them together by hand.)
- The folder `translations` contains translations of some of the strings that sfall displays in the game. To use a translation, copy this folder to Fallout's base directory too, and then in `ddraw.ini` change the __TranslationsINI__ setting to `.\translations\<your language>.ini`.
## Uninstallation
Delete `ddraw.dll`, `ddraw.ini`, and `sfall.dat` from your Fallout directory, and delete `sfall-mods.ini` from the `mods` folder.
## Usage
This mod is configured via the `ddraw.ini` and `sfall-mods.ini` files, which can be opened with any text editor. Details of every configerable option are included in those files. Where a comment refers to a DX scancode, the complete list of codes can be found at the link below:\
In a default installation using an unmodified copy of `ddraw.ini`, the middle mouse button will be set to switch between weapons and the mouse wheel will be set to scroll through any menus that respond to the up/down arrow keys. Holding Ctrl and hitting numpad keys 0 to 6 (with Num Lock off) will adjust the game speed. Holding left Ctrl will let you move a whole stack of items at once. Pressing left Shift will highlight items on the ground. The script extender and any engine fixes are also enabled. Most of the options that change gameplay in some way not originally intended by the developers are disabled.
For [__Wine__](https://www.winehq.org/) users:\
You need to set DLL overrides for `ddraw.dll` to __"native, builtin"__ in `winecfg` or use `WINEDLLOVERRIDES="ddraw=n,b"` to run Fallout from the command line. If you want to play alternative sound files, you'll also need to install GStreamer Good 32-bit plugins.
## Build Instructions
### Prerequisites:
* Visual Studio 2015 with **Windows XP support for C++** component. If you're using Visual Studio 2017/2019/2022, make sure to install **VS 2015 C++ build tools (v140)**.
* [DirectX SDK (June 2010)](https://www.microsoft.com/en-us/download/details.aspx?id=6812). You will also need `ddraw.lib` from DXSDK February 2010 and `dinput.lib` from DXSDK August 2007. Both files can be found in the [DirectX SDK Collection repo](https://github.com/NovaRain/DXSDK_Collection).
* [DirectX Runtime (June 2010)](https://www.microsoft.com/en-us/download/details.aspx?id=8109). You can also install it from DirectX SDK installer.
### Steps:
1. Set up a `postbuild.cmd` using the template from the repo.
2. Open the solution file and build with the **ReleaseXP** configuration (this is the one used for sfall releases).
3. If everything is set up correctly, you should have a new sfall `ddraw.dll` in your Fallout 2 directory.
* Fallout Engine IDA Database: [for IDA Pro 6.8](https://www.dropbox.com/s/tm0nyx0lnk4yui0/Fallout_1_and_2_IDA68.rar?dl=1 "Download from Dropbox") | [for IDA Pro 7.0](https://www.dropbox.com/s/61srq09pn8grfpu/Fallout_1_and_2_IDA70.rar?dl=1 "Download from Dropbox") (comments are in Russian)
;Image: The line number (0-indexed) of the corresponding FRM in skilldex.lst
;Ranks: The number of perk levels
;Level: The minimum required level
;Type: If 0, the perk checks only Skill1 for skill requirements; if 1, it checks Skill1 or Skill2; if 2, it checks both Skill1 and Skill2
;Type: If 0, the perk checks only Skill1 for skill requirements; if 1, it checks Skill1 or Skill2; if 2, it checks both
; Skill1 and Skill2
;Stat: The modified stat or -1 if you don't want to change any stats
;StatMag: The increased/decreased value to the modified stat
;Skill1/Skill2: The first/second skill (or -1 for none) to check, but if you set a specific bit 0x4000000 (67108864), it checks GVAR.
; For example, if Skill1=0x4000004, then the perk will check GVAR_BAD_MONSTER (0x4000000 + 4) on Skill1Mag value
;Skill1/Skill2: The first/second skill (or -1 for none) to check, but if you set a specific bit 0x4000000 (67108864),
; it checks the corresponding GVAR
; For example, if Skill1=0x4000004, the perk will check GVAR_BAD_MONSTER (0x4000000 + 4) on Skill1Mag value
;Skill1Mag/Skill2Mag: Positive value is used as the minimum requirements of the first/second skill/GVAR, and a negative value is interpreted as the maximum requirement.
; For example, with Skill1=0 and Skill1Mag=100, if player has small guns skill >= 100 and meets all other requirements, the perk will be available in the
; selection window; with Skill1=1 and Skill1Mag=-120, the perk will not be available if player has big guns skill >= 120
;Skill1Mag/Skill2Mag: Positive value is used as the minimum requirements of the first/second skill/GVAR, and a negative
; value is interpreted as the maximum requirement
; For example, with Skill1=0 and Skill1Mag=100, if player has small guns skill >= 100 and meets all other requirements,
; the perk will be available in the selection window; with Skill1=1 and Skill1Mag=-120, the perk will not be available
; if player has big guns skill >= 120
;STR-LCK: Positive values are used as minimum requirements of SPECIAL stats, and negative values are interpreted as maximum requirements.
; For some special perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat), the values are not used as requirements
; but to add to corresponding SPECIAL stats
;STR-LCK: Positive values are used as minimum requirements of SPECIAL stats, and negative values are interpreted as
; maximum requirements
; For some special perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat), the values are not
; used as requirements but to add to corresponding SPECIAL stats
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
;You can add simple extra perks with ID numbers from 119 to 255
; that do not require using scripting functions to change player stats, and can also be used for Armor perks
;The extra perks do not require using scripting functions to change player stats, and can also be used for Armor perks
PartyOrderAttackHuman=I'll take care of it.|Okay, I got it.|Sounds like a plan.
PartyOrderAttackCreature=::Growl::
PartyOrderAttackRobot=::Beep::
HiResInfo=This version of sfall has its own integrated High Resolution Patch mode, which is compatible with the settings of the High Resolution Patch by Mash.\n\nIf you want to continue using the Hi-Res Patch by Mash without seeing this message, disable the 'HiResMode' option in ddraw.ini.\nOr you can disable the external Hi-Res Patch to get new graphics improvements from sfall.\n\nDo you want to disable the High Resolution Patch by Mash?
;Extra sfall configuration settings that can be used by modders
;This section is not effected by the 'UseCommandLine' option. It will always be read from the main ini
;This section is not affected by the 'UseCommandLine' option. It will always be read from the main ddraw.ini file
;Set to 1 to enable sfall debugging mode
Enable=0
@@ -848,15 +846,12 @@ AllowUnsafeScripting=0
;Does not require sfall debugging mode
;ExtraCRC=0x00000000,0x00000000
;Set to 1 to skip the executable file size check
;Set to 1 to skip the compatibility mode check
;Does not require sfall debugging mode
SkipSizeCheck=0
;Change to 1 to skip the compatibility mode check
SkipCompatModeCheck=0
;Fallout 2 Debug Patch
;Set to 1 to send debug output to the screen, 2 to a debug.log file, or 3 to both the screen and debug.log
;Set to 1 to send debug output to the screen, 2 to a debug.log file, or 3 to both
;Does not require sfall debugging mode
;While you don't need to create an environment variable, you do still need to set the appropriate lines in fallout2.cfg
;-------
@@ -875,6 +870,10 @@ DebugMode=0
;Set to 1 to hide error messages in debug output when a null value is passed to the function as an object
HideObjIsNullMsg=0
;A key to press to toggle the display of the hex grid on the map on or off
;Set to 0 to disable, or a DX scancode otherwise
MapGridToggleKey=0
;Set to 1 to stop Fallout from deleting non read-only protos at startup
;Has pretty nasty side effects when saving/reloading, so don't use for regular gameplay
DontDeleteProtos=0
@@ -890,7 +889,7 @@ AlwaysFindScripts=0
Test_ForceFloats=0
;These options control what output is saved in the debug log (sfall-log.txt)
;Prints messages duing sfall initialization
;Prints messages during sfall initialization
Init=1
;Prints messages relating to hook scripts
Hook=0
@@ -900,3 +899,19 @@ Script=0
Criticals=1
;Prints messages relating to engine fixes
Fixes=1
;Duplicates logs to a dedicated console window alongside the game window
;This option uses bit flags to control the types of messages to be shown
;All types other than sfall log (bit 1) require DebugMode to be enabled
;1 (bit 0) - debug output from the engine
;2 (bit 1) - sfall log
;4 (bit 2) - messages from debug_msg script function
;8 (bit 3) - messages from display_msg script function
ConsoleWindow=0b0000
;Console window position and size data. Do not modify
;Clear the data to reset the window position and size
ConsoleWindowData=
;Set the code page for the console window (Default is your system code page)
ConsoleCodePage=0
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.