* Fixed NPCs being unable to select a burst attack mode if the line of
fire was blocked.
* Changed the return point of combat_ai_hook_FleeFix to run
ai_check_drugs_ first.
Changed the debug message about missing art file for critters to be
displayed in game only when in sfall debugging mode.
* before they would "forget" their current target when trying to find
new ones (only 3), now the current target is included as one of
potential targets.
Tweaked the code of MultiHexPathingFix.
* NPCs will reload the weapon in the same turn (and attack if have
enough AP left) if weapon is empty while selecting targets.
Moved some leftover code in main.cpp to KillCounter.cpp & Elevators.cpp.
Misc code edits.
Limited NumSoundBuffers to the max of 32.
Fixed replacing Body_Torso with Body_Uncalled (from commit 62f890d)
Corrected the code in the previous commit.
* NPCs use only one box per reload. If the weapon has more ammo
capacity than a box of ammo (e.g. miniguns and BB gun), it'll take
several tries for them to fully reload it.
* reason: the skills didn't get initialized properly if loading a save
from the main menu before starting any game. And some inits in 3.8
also require running ResetState() before any game, so reverting is
probably the easiest solution before I break more stuff.
Backported some code setup from 4.x for Combat.cpp & Skills.cpp.
Changed "Radiated" to be highlighted in red color when the player is
under the influence of negative effects of radiation.
Some edits to macros in HookScripts.cpp.
Fixed potential crash/bug when alt-tab out of game and get back.
Edited OnDeath hook to minimize its hook points to the engine (from 4.x)
Minor edits to ddraw.ini.
* it changes the behavior of vanilla division operator to use signed
integer division. Before it used signed division for floats but
unsigned for integers.
Added a new "div" operator for unsigned integer division.
Moved mathematical script functions from ScriptUtils.hpp to new MathOps.
Added include guard to sfall.h and main.h in modders pack.
* now WORLDMAP, PIPBOY, INVENTORY, INTFACEUSE, and INTFACELOOT are
toggled after creating/before deleting their corresponding interface
windows.
Fixed the array out of bounds bug in Skills.cpp.
* calling endgame_movie now plays Movie11 or Movie12 depending on
the player's gender before the credits.
Added new flags to force_encounter_with_flags function.
* although 3.8 doesn't have the path issue as 4.x due to the lack of
loading custom .dat, it's better to unify the path in this case.
Refactored the code for DataLoadOrderPatch in the same way as 4.x.
* fixed the crashing bug and added a new behavior.
Changed the error message due to missing critter frame (again):
* replaced the interruption with printing the error message to in-game
message window.
Added "add_g_timer_event" and "remove_timer_event" script functions
for timed_event_p_proc in global scripts.
Fixed the check on the 'hidden' flag for previous commit.
* prevents player's movement when clicking on the window.
* the mouse cursor will not be toggled when the cursor hovers over
a hidden window.
Updated version number.
* Added BoxBarCount option.
* Added "set_iface_tag_text" and "add_iface_tag" script functions.
* Now number of simultaneously displayed boxes depends on game res.
* Updated documents.
Moved some codes from Worldmap.cpp to new Interface.cpp (same as 4.x).
Moved some option codes from main.cpp to other modules.
Removed CorpseLineOfFireFix from ddraw.ini (always enabled).
* to toggle modification sections for perks and traits.
Backported ini reading functions from 4.x to main.cpp, and edited
related code in Perks.cpp (need to implement to other source later)
Added error/warning icons to message boxes.
* before it set player's FID incorrectly if PC is in other appearance.
Prevented the player from equipping a weapon when player's current
appearance doesn't have the animation for it.
Fixed the player name while controlling other critters.
Edited texts for some error message boxes.
* it now runs for the player and NPCs when removing equipped items.
* added an additional argument.
Fixed drop_obj script function not removing the equipped armor properly
for the player and party members.
* it didn't remove the equipped armor properly for the player and party
members, resulting in broken armor stats.
Added a check for valid objects to get/set_object_data functions.
Some code edits to HeroAppearance.cpp.
Moved the code of NPCStage6Fix to BugFixes.cpp.
(to its original relative location, right above MultiHexPathingFix)
Reorganized some code in BugFixes.cpp.
Tweaked the error printing for ResizeArray in Arrays.cpp.
* Improved the display of the car fuel gauge on the world map interface.
* Expanded set_critter_stat function to allow changing STAT_unused and
STAT_dmg_* stats for the player, and STAT_unused for other critters.
* Changed AllowUnsafeScripting to not require sfall debugging mode.
* Changed NPCStage6Fix to be enabled by default.
* Added a new value to AIBestWeaponFix to change the priority multiplier
for having weapon perk to 3x.
Updated version number.
* disables playing the final movie/credits after the endgame slideshow.
* disables halving the weight for power armor items.
Moved FastShotFix and Ray's combat_p_proc fix from main.cpp to other
files.
Fixed player's direction after leaving a map via ladder/stairs.
Fixed MainMenuFontColour not changing the font color for the copyright
text on the main menu (#261)
Code correction in main.cpp.
Added code for preparing clearing map_update_event in queue.
Fixed a crash bug in message_str_game function when passing a negative
fileId value.
Corrected/edited some code.
* it forces the weapon to use EW skill regardless of its damage type.
Placed an object with PID 0x5000004 (corpse blood) to the lower z-layer
of the tile.
* prevent it from creating multiple message windows.
Capped StartMonth/StartDay in case people didn't notice "0-indexed".
Minor fix for assigning an ID to objects when loading a map.
Small optimization for sfall gl/hs scripts.
* technically it should only effect the visibility of tiles when you're
exploring on the world map.
Fixed the incorrect coordinates for small/medium location circles when
highlighting their sub-tiles (one of bugs listed in #228)
Moved the fix for the position of the target marker from Worldmap.cpp to
BugFixes.cpp.
Slightly adjusted the position/size for Local variables button in debug
editor.
* it happens when the player try to use objects with Bonus Move APs
available. The distance has to be greater than remaining normal APs.
Replaced calling db_dir_entry_ with db_access_ in HeroAppearance.cpp.
* to prevent save file corruption (one of bugs listed in #228). Now
party member's corpse is removed in the same way as all other critter
corpses.
Simplified the ASM code of combat_ai_hack (take 2).
* now the proto limit is always handled by set_proto_data function when
needed, since the related issue was originally from using it to process
lots of protos at once.
* the increased the width is according to the max width of one char in
font (uppercase A seems to be the widest with 8 px).
Adjusted code format in Console.cpp.
* now ignoring the inv capacity only happens in combat for preventing
AI inf loop. The vanilla behavior still applies outside of combat.
* added a correct message for NPC not being able to pick up an item.
* message for the player is displayed when the NPC cannot pick up item.
* if in combat, NPC will also be stuck in a loop of picking up item.
Fixed HideObjIsNullMsg option.
* FINDTARGET, BARTERPRICE, WITHINPERCEPTION, and INVENTORYMOVE. For
unifying the behavior of common hooks between 3.8 and 4.x.
Added the example script of WITHINPERCEPTION from 4.x.
Updated gl_highlighting_lite.
* Fixed the position of the talking head texture when the game res is
larger than 640x480.
* Added the support to use textures without the need of patching
talking head FRM files.
* weapons with knockback modifiers applied will have a special ID
(negative value) that work as a temporary UID for the current game
session.
Added checks on object types to functions in Combat module.
Added the second argument to set_unique_id script function.
* If the required standard script procedure is missing, the procedure
above the start proc is called instead of the start (from Crafty)
Added a id reversion mechanism to remove_weapon_knockback.
* Mainly for fixing the issues with CheckWeaponAmmoCost. Because it's
easier to backport the whole set of code than working on the old
implementation. Shouldn't affect the performance much.
Also backported the CheckWeaponAmmoCost code from 4.x.
Updated hookscripts.txt to reflect the change.
Now the debug editor starts at the center of the screen.
Added a fix to prevent the reserved object IDs of the player and party members from being generated for other objects.
Moved SkipOpeningMovies to movies.cpp.
Added log entries for various Init() functions in main.cpp.
Renamed timer.cpp/h to SpeedPatch.cpp/h.
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 form of a DLL, which modifies executable in memory without changing anything in EXE file itself.
Engine modifications include:
**Engine modifications include:**
- Better support for modern operating systems
- Externalizing many settings like starting map and game time, skills, perks, critical hit tables, books, etc.
- Bug fixes
@@ -10,7 +10,7 @@ Engine modifications include:
- 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.
;Desc: The description of the perk (max 255 characters)
;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
;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
;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
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
- allows the player to automatically open/walk through unlocked doors when not in combat
Requires sfall 3.7b or higher
NOTE: this script requires compiler from sfall modderspack with -s option
(short circuit evaluation)
NOTE: this script requires compiler from sfall modderspack with -s option (short circuit evaluation)
*/
@@ -30,8 +29,8 @@ procedure combatturn_handler;
#define PORTAL (0)
#define DOOR_FLAGS (0x24)
variable only_once := 0;
variable arrayPid;
variable onlyOnce := 0;
variable pidDoors;
procedure start begin
if game_loaded then begin
@@ -41,11 +40,11 @@ procedure start begin
set_global_script_repeat(40); // for sfall 3.x
call map_enter_p_proc;
end else begin
if (only_once == 1 and combat_is_initialized) then begin
only_once := 2;
if (onlyOnce == 1 and combat_is_initialized) then begin
onlyOnce := 2;
call set_door_flag(0); // reset flag when entering combat mode
end else if (only_once == 2 and not(combat_is_initialized)) then begin
only_once := 1;
end else if (onlyOnce == 2 and not(combat_is_initialized)) then begin
onlyOnce := 1;
if (sfall_ver_major >= 4) then set_global_script_repeat(0);
call set_door_flag(FLAG_WALKTHRU); // set flag after combat mode ends
end
@@ -53,34 +52,35 @@ procedure start begin
end
procedure map_enter_p_proc begin
if (arrayPid) then begin
// when changing maps, delete the current array to create a new one
free_array(arrayPid);
arrayPid := 0;
if (pidDoors) then begin
// when changing the map, delete the current array to create a new one
free_array(pidDoors);
pidDoors := 0;
end
only_once := 1;
onlyOnce := 1;
call set_door_flag(FLAG_WALKTHRU); // set flag when entering the map
end
procedure set_door_flag(variable state) begin
variable objectMap, obj, objPid, i;
if (arrayPid) then begin
if (pidDoors) then begin
call set_door_flag_array(state);
return;
end
objectMap := list_as_array(LIST_SCENERY);
arrayPid := create_array(0, 0);
pidDoors := create_array(0, 0);
foreach (obj in objectMap) begin
objPid := obj_pid(obj);
if (proto_data(objPid, sc_type) != PORTAL) or is_in_array(objPid, arrayPid) then
if (proto_data(objPid, sc_type) != PORTAL or get_proto_data(objPid, DOOR_FLAGS) or is_in_array(objPid, pidDoors)) then begin
continue; // next object
end
resize_array(arrayPid, i + 1);
arrayPid[i] := objPid;
resize_array(pidDoors, i + 1);
pidDoors[i] := objPid; // add pid to array
i++;
set_proto_data(objPid, DOOR_FLAGS, state);
end
@@ -88,14 +88,14 @@ end
procedure set_door_flag_array(variable state) begin
variable objPid;
foreach (objPid in arrayPid) begin
foreach (objPid in pidDoors) begin
set_proto_data(objPid, DOOR_FLAGS, state);
end
end
procedure combatturn_handler begin
if (only_once == 1) then begin
only_once := 2;
if (onlyOnce == 1) then begin
onlyOnce := 2;
call set_door_flag_array(0);
set_global_script_repeat(60);
end
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.