From fe5a148d7fba7e6c591d269db2440f417cf2bfeb Mon Sep 17 00:00:00 2001 From: NovaRain Date: Mon, 11 Feb 2019 10:53:00 +0800 Subject: [PATCH] Moved DontDeleteProtos option from MiscPatches.cpp to DebugEditor.cpp. Updated Auto Doors script mod from Mr.Stalin and ddraw.ini. --- artifacts/ddraw.ini | 2 +- .../example_mods/AutoDoors/gl_autodoors.int | Bin 1202 -> 1626 bytes .../example_mods/AutoDoors/gl_autodoors.ssl | 57 +++++++++++++----- artifacts/example_mods/AutoDoors/readme.txt | 4 +- sfall/Modules/DebugEditor.cpp | 9 +++ sfall/Modules/MiscPatches.cpp | 9 --- 6 files changed, 53 insertions(+), 28 deletions(-) diff --git a/artifacts/ddraw.ini b/artifacts/ddraw.ini index abae1fcd..ba694096 100644 --- a/artifacts/ddraw.ini +++ b/artifacts/ddraw.ini @@ -46,7 +46,7 @@ SpeedMulti9=900 ;The initial speed at game startup SpeedMultiInitial=100 -;Set to 1 to also affect the playback speed of videos without audio tracks +;Set to 1 to also affect the playback speed of mve video files without an audio track AffectPlayback=0 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX diff --git a/artifacts/example_mods/AutoDoors/gl_autodoors.int b/artifacts/example_mods/AutoDoors/gl_autodoors.int index 91ae7288d4f4f260d6a19673372e3daf070692e6..55ef77832742ed0de4fc1137972c9fe3fcc8891e 100644 GIT binary patch literal 1626 zcmZo*I>5-lz#!DX3!)i)8dw?x8l)N&8l)N&8>AYP8l)PO8&n!p8`KyW7}%hg0Rb4Z zplk^!4W;1X3Qz$k#k2~_FoDugiW#IIQ#OeAcEU5Y4!(fdxb}Xf$Sl zXvRH|ID(qb)WF&x1rleP1X0JN1mZC;Gzfud#s=dCuz8Gc8YCL@8>AXFpte9_oS{J& zq>f1f#Z*R+7y~ng*^|KHFteFpW;1!g&31*F4lw~{dI^Rf86du4ngF#I;zx)sxV;Pv z4ZIDK4O$JF4Ll7pU|I$eeoR-uE@5mCg4x#~)MNk_gM>RH#9s^$6JhT7N1koau!fk7 zmt<}Oy8-Sl<|3$#3=KvQ88FEL3t3bjg5{W+%)m5bgCUrP+SjBD=E3|05oLp_VQesJ zf~aPNh_FJ!lMQMsYlBgPc>^ST7@=Zp4Mt62U^CevdKh3b>5-lz#!DX3!)i?8dw?x8l)N&8l)N&8>AYP8l)PO8&n!p8`KyW7+4t?7}yw4 z0HYR^D*>gU6kJ>ZDgdRJvY-qTC=I2UHZU+SfL!7N6@XGK6;MV3gMc0i0J){OB(bQ3 zfk7xYu^>J*uOzi7z97D!C_kBjfq}0$wIn_zKffqGEhjOZfk7lWKQ}3{q@=VcFFqqN zFC{0nh=GBDD?cx%GCn^qIhEl*6g237LV|$-LN+jiXhy9DmIiGwtF1AmK_ASDYZ3s_ z3@i<15D^Ax2)`)_L^Gx}uz+X=o5m~<%~%5oW2nhY4Xh1PAaSN3h&skcARYrlgAkZz zY%p#Bo5#4OL83vwL8?&$Y6~RB7#f5@>KJdJn92weV_-%%n<)q^4l|nxW;PQS+-z5< z=@1j3rZbsf_>lqP8>RrLy%0Y_biwUqU})fNkZjOu&}`sokO9*&knm%GsDzn6jZ9OZ zu>4p=8M)GW?MNZ2wo zm_Skj^Q8uf23Js80IOqxs$*_2YO(~2FgCa~m_Xu@#Q~D47+|VckyPt}Rl`IW8z8z_ zA+EsC!PsEg1o1JIR&tfn^q0KP+8>(mW)Lpm_#c GIsyRJ#q9zB diff --git a/artifacts/example_mods/AutoDoors/gl_autodoors.ssl b/artifacts/example_mods/AutoDoors/gl_autodoors.ssl index db7dfa97..ae1691e9 100644 --- a/artifacts/example_mods/AutoDoors/gl_autodoors.ssl +++ b/artifacts/example_mods/AutoDoors/gl_autodoors.ssl @@ -1,7 +1,7 @@ /* -Auto Doors mod for Fallout 2 by Mr.Stalin ------------------------------------------ +Auto Doors mod v1.1 for Fallout 2 by Mr.Stalin +---------------------------------------------- - allows the player to automatically open/walk through unlocked doors when not in combat @@ -12,66 +12,91 @@ NOTE: this script requires compiler from sfall modderspack with -s option */ +/* Include Files */ #include "..\headers\define.h" -#include "..\headers\command.h" -#include "..\headers\sfall\sfall.h" -#include "..\headers\sfall\define_extra.h" +//#include "..\headers\command.h" +#include "..\..\scripting_docs\headers\sfall.h" +#include "..\..\scripting_docs\headers\define_extra.h" +/* Standard Script Procedures */ procedure start; procedure map_enter_p_proc; + procedure set_door_flag(variable state); +procedure set_door_flag_array(variable state); procedure combatturn_handler; +/* Defines */ #define PORTAL (0) #define DOOR_FLAGS (0x24) variable only_once := 0; +variable arrayPid; procedure start begin if game_loaded then begin if (sfall_ver_major >= 4) then register_hook_proc(HOOK_COMBATTURN, combatturn_handler); else - set_global_script_repeat(60); + 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; - call set_door_flag(false); + 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; - if (sfall_ver_major >= 4) then - set_global_script_repeat(0); - call set_door_flag(FLAG_WALKTHRU); + if (sfall_ver_major >= 4) then set_global_script_repeat(0); + call set_door_flag(FLAG_WALKTHRU); // set flag after combat mode ends end end 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; + end only_once := 1; - call set_door_flag(FLAG_WALKTHRU); + call set_door_flag(FLAG_WALKTHRU); // set flag when entering the map end procedure set_door_flag(variable state) begin - variable objectMap, obj, objPid, arrayPid, i; + variable objectMap, obj, objPid, i; + + if (arrayPid) then begin + call set_door_flag_array(state); + return; + end objectMap := list_as_array(LIST_SCENERY); - arrayPid := temp_array(1, 0); + arrayPid := 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 - continue; + continue; // next object + resize_array(arrayPid, i + 1); arrayPid[i] := objPid; i++; - resize_array(arrayPid, i + 1); + set_proto_data(objPid, DOOR_FLAGS, state); + end +end + +procedure set_door_flag_array(variable state) begin + variable objPid; + foreach (objPid in arrayPid) begin set_proto_data(objPid, DOOR_FLAGS, state); end end procedure combatturn_handler begin - if (only_once == 1) then + if (only_once == 1) then begin + only_once := 2; + call set_door_flag_array(0); set_global_script_repeat(60); + end end diff --git a/artifacts/example_mods/AutoDoors/readme.txt b/artifacts/example_mods/AutoDoors/readme.txt index 23e945c2..47670b5a 100644 --- a/artifacts/example_mods/AutoDoors/readme.txt +++ b/artifacts/example_mods/AutoDoors/readme.txt @@ -1,5 +1,5 @@ -Auto Doors mod for Fallout 2 by Mr.Stalin ------------------------------------------ +Auto Doors mod v1.1 for Fallout 2 by Mr.Stalin +---------------------------------------------- - allows the player to automatically open/walk through unlocked doors when not in combat diff --git a/sfall/Modules/DebugEditor.cpp b/sfall/Modules/DebugEditor.cpp index a361d2c9..a4fa3301 100644 --- a/sfall/Modules/DebugEditor.cpp +++ b/sfall/Modules/DebugEditor.cpp @@ -293,9 +293,18 @@ void DebugModePatch() { } } +void DontDeleteProtosPatch() { + if (GetPrivateProfileIntA("Debugging", "DontDeleteProtos", 0, ::sfall::ddrawIni)) { + dlog("Applying permanent protos patch.", DL_INIT); + SafeWrite8(0x48007E, 0xEB); + dlogr(" Done", DL_INIT); + } +} + void DebugEditor::init() { if (!isDebug) return; DebugModePatch(); + DontDeleteProtosPatch(); debugEditorKey = GetConfigInt("Input", "DebugEditorKey", 0); if (debugEditorKey != 0) { diff --git a/sfall/Modules/MiscPatches.cpp b/sfall/Modules/MiscPatches.cpp index e05aece9..ca765b69 100644 --- a/sfall/Modules/MiscPatches.cpp +++ b/sfall/Modules/MiscPatches.cpp @@ -739,14 +739,6 @@ void DialogueFix() { } } -void DontDeleteProtosPatch() { - if (isDebug && GetPrivateProfileIntA("Debugging", "DontDeleteProtos", 0, ::sfall::ddrawIni)) { - dlog("Applying permanent protos patch.", DL_INIT); - SafeWrite8(0x48007E, 0xEB); - dlogr(" Done", DL_INIT); - } -} - void AlwaysReloadMsgs() { if (GetConfigInt("Misc", "AlwaysReloadMsgs", 0)) { dlog("Applying always reload messages patch.", DL_INIT); @@ -932,7 +924,6 @@ void MiscPatches::init() { CombatProcFix(); NpcAutoLevelPatch(); DialogueFix(); - DontDeleteProtosPatch(); AdditionalWeaponAnimsPatch(); MultiPatchesPatch(); AlwaysReloadMsgs();