diff --git a/artifacts/ddraw.ini b/artifacts/ddraw.ini index 3c12e1a5..8bd3d726 100644 --- a/artifacts/ddraw.ini +++ b/artifacts/ddraw.ini @@ -638,8 +638,8 @@ PipboyTimeAnimDelay=50 ;Set to 0 to disable ;Set to 1 to control all critters in combat ;Set to 2 to control all party members -;If you want to control only specific critters, uncomment the ControlCombatPIDList line and set a comma delimited list of PIDs ControlCombat=0 +;If you want to control only specific critters, uncomment the ControlCombatPIDList line and set a comma delimited list of PIDs ;ControlCombatPIDList=62,89,97,107,160,161 ;Set to 1 to stack empty identical weapons, no matter what type of ammo was loaded before diff --git a/artifacts/example_mods/AutoCloseBox/gl_auto_closebox.int b/artifacts/example_mods/AutoCloseBox/gl_auto_closebox.int new file mode 100644 index 00000000..a308c257 Binary files /dev/null and b/artifacts/example_mods/AutoCloseBox/gl_auto_closebox.int differ diff --git a/artifacts/example_mods/AutoCloseBox/gl_auto_closebox.ssl b/artifacts/example_mods/AutoCloseBox/gl_auto_closebox.ssl new file mode 100644 index 00000000..a4d1a7ea --- /dev/null +++ b/artifacts/example_mods/AutoCloseBox/gl_auto_closebox.ssl @@ -0,0 +1,33 @@ +/* + +Auto-Close Containers mod for Fallout 2 by Mr.Stalin +---------------------------------------------------- + +- automatically closes the container after looting + +Requires sfall 4.2.2/3.8.29 or higher + +*/ + +#include "..\headers\sfall\sfall.h" +#include "..\headers\sfall\define_extra.h" + +procedure start; + +variable lootObject; + +procedure start begin + if (game_loaded) then begin + register_hook_proc_spec(HOOK_GAMEMODECHANGE, start); + end else begin + variable mode := get_game_mode; + if (mode andAlso mode != INTFACELOOT) then return; + if (mode == INTFACELOOT) then begin + lootObject := loot_obj; + if (obj_type(lootObject) != OBJ_TYPE_ITEM) then lootObject = 0; + end else if (lootObject andAlso get_sfall_arg_at(1) == INTFACELOOT) then begin + obj_close(lootObject); + lootObject = 0; + end + end +end diff --git a/artifacts/example_mods/AutoCloseBox/readme.txt b/artifacts/example_mods/AutoCloseBox/readme.txt new file mode 100644 index 00000000..5abbb24a --- /dev/null +++ b/artifacts/example_mods/AutoCloseBox/readme.txt @@ -0,0 +1,9 @@ +Auto-Close Containers mod for Fallout 2 by Mr.Stalin +---------------------------------------------------- + +- automatically closes the container after looting + + +Requires sfall 4.2.2/3.8.29 or higher. + +To use, copy gl_auto_closebox.int to your scripts folder. diff --git a/artifacts/example_mods/AutoDoors/readme.txt b/artifacts/example_mods/AutoDoors/readme.txt index 47670b5a..f10eed1d 100644 --- a/artifacts/example_mods/AutoDoors/readme.txt +++ b/artifacts/example_mods/AutoDoors/readme.txt @@ -1,4 +1,4 @@ -Auto Doors mod v1.1 for Fallout 2 by Mr.Stalin +Auto Doors mod v1.2 for Fallout 2 by Mr.Stalin ---------------------------------------------- - allows the player to automatically open/walk through unlocked doors when not in combat diff --git a/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.int b/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.int index 36d6b1a6..95606b04 100644 Binary files a/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.int and b/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.int differ diff --git a/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.ssl b/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.ssl index 8ec71524..46a2a178 100644 --- a/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.ssl +++ b/artifacts/example_mods/ItemHighlight_Lite/gl_highlighting_lite.ssl @@ -100,8 +100,16 @@ procedure KeyPressHandler begin end end +// visual glitch fix - for 3.8.29+ +procedure GameModeChangeHandler begin + if isHighlight and (get_game_mode bwand (INTFACELOOT bwor BARTER)) then begin + isHighlight := false; + call ToggleHighlight(false); + end +end + procedure InventoryMoveHandler begin - // remove item outline when player picks up the item + // remove item outline when player picks up the item - for 3.8.18+ if (isHighlight and get_sfall_arg == 7) then set_outline(get_sfall_arg, 0); end @@ -121,6 +129,7 @@ procedure start begin highlightFailMsg2 := Translate("HighlightFail2", "Your motion sensor is out of charge."); register_hook_proc(HOOK_KEYPRESS, KeyPressHandler); + register_hook_proc(HOOK_GAMEMODECHANGE, GameModeChangeHandler); register_hook_proc(HOOK_INVENTORYMOVE, InventoryMoveHandler); end end diff --git a/artifacts/example_mods/ItemHighlight_Lite/main.h b/artifacts/example_mods/ItemHighlight_Lite/main.h index 16223ad9..28c719f3 100644 --- a/artifacts/example_mods/ItemHighlight_Lite/main.h +++ b/artifacts/example_mods/ItemHighlight_Lite/main.h @@ -4,6 +4,7 @@ #include "..\scripting\headers\sfall.h" #include "..\scripting\headers\define_lite.h" #include "..\scripting\headers\define_extra.h" +#include "..\scripting\headers\command_lite.h" #include "..\scripting\headers\dik.h" /* #include "..\scripting\headers\lib.arrays.h" diff --git a/sfall/BugFixes.cpp b/sfall/BugFixes.cpp index d66515c6..eac9c9f9 100644 --- a/sfall/BugFixes.cpp +++ b/sfall/BugFixes.cpp @@ -3593,7 +3593,7 @@ void BugFixes_Init() // Fix broken Print() script function HookCall(0x461AD4, (void*)windowOutput_); - // Fix obj_close/open functions setting/unsetting incorrect flags for non-door objects + // Fix for the flags of non-door objects being set/unset when opening/closing objects (e.g. using obj_close/open functions) MakeCall(0x49CBF7, check_door_state_hack_close, 2); MakeCall(0x49CB30, check_door_state_hack_open, 1); } diff --git a/sfall/FalloutStructs.h b/sfall/FalloutStructs.h index 9f3f5a24..16b2d186 100644 --- a/sfall/FalloutStructs.h +++ b/sfall/FalloutStructs.h @@ -70,7 +70,7 @@ struct TGameObj { long y; long sx; long sy; - long frm; + long frm; // current frame long rotation; long artFid; long flags; @@ -84,15 +84,15 @@ struct TGameObj { union { struct { - char updatedFlags[4]; + long updatedFlags; // for weapons - ammo in magazine, for ammo - amount of ammo in last ammo pack long charges; // current type of ammo loaded in magazine long ammoPid; - char gap_44[32]; + long unused[8]; // offset 0x44 } item; struct { - long reaction; + long reaction; // unused? // 1 - combat, 2 - enemies out of sight, 4 - running away long combatState; // aka action points @@ -105,14 +105,27 @@ struct TGameObj { long health; long rads; long poison; + + inline bool IsDead() { + return ((damageFlags & DAM_DEAD) != 0); + } + inline bool IsNotDead() { + return ((damageFlags & DAM_DEAD) == 0); + } + inline bool IsActive() { + return ((damageFlags & (DAM_KNOCKED_OUT | DAM_LOSE_TURN)) == 0); + } + inline bool IsNotActive() { + return ((damageFlags & (DAM_KNOCKED_OUT | DAM_LOSE_TURN)) != 0); + } } critter; }; - DWORD protoId; - long cid; + DWORD protoId; // object PID + long cid; // combat ID long lightDistance; long lightIntensity; DWORD outline; - long scriptId; + long scriptId; // SID 0x0Y00XXXX: Y - type: 0=s_system, 1=s_spatial, 2=s_time, 3=s_item, 4=s_critter; XXXX - index in scripts.lst; 0xFFFFFFFF no attached script TGameObj* owner; long scriptIndex; @@ -122,6 +135,13 @@ struct TGameObj { inline char TypeFid() { return ((artFid >> 24) & 0x0F); } + + inline bool IsItem() { + return (Type() == OBJ_TYPE_ITEM); + } + inline bool IsCritter() { + return (Type() == OBJ_TYPE_CRITTER); + } }; // Results of compute_attack_() function. @@ -664,7 +684,7 @@ struct AudioFile { long length; long sample_rate; long channels; - long tell; + long position; }; #pragma pack(pop)