From adf8dd13dddd9dea5588f341e6ea929eb4e9646b Mon Sep 17 00:00:00 2001 From: phobos2077 Date: Thu, 16 Mar 2017 01:21:20 +0700 Subject: [PATCH] Moved highlighting-related settings into new "sfall-mods.ini", dedicated for scripted sfall mods; Reverted description for MotionScannerFlags 1 and 2, it was actually correct before. --- artifacts/ddraw.ini | 11 +---- artifacts/mods/gl_highlighting.int | Bin 3122 -> 2994 bytes artifacts/mods/gl_highlighting.ssl | 64 +++++++++++++--------------- artifacts/mods/main.h | 7 ++- artifacts/scripting/headers/sfall.h | 2 +- artifacts/sfall-mods.ini | 24 +++++++++++ 6 files changed, 62 insertions(+), 46 deletions(-) create mode 100644 artifacts/sfall-mods.ini diff --git a/artifacts/ddraw.ini b/artifacts/ddraw.ini index 614a42cc..5f17a0d1 100644 --- a/artifacts/ddraw.ini +++ b/artifacts/ddraw.ini @@ -127,13 +127,6 @@ SpeedKey9=0x00 ;Set to -1 for either ctrl key, -2 for either alt key or -3 for either shift key WindowScrollKey=0 -;A key to press to toggle the highlighting of all items on the ground on the current map -ToggleItemHighlightsKey=42 - -;Set to 1 to also highlight containers -;Set to 2 for purple outlines -HighlightContainers=0 - ;A key to press to reload your currently equipped weapon ReloadWeaponKey=0 @@ -448,8 +441,8 @@ CritterInvSizeLimitMode=0 CritterInvSizeLimit=200 ;Some bit flags to alter behaviour of the motion sensor -;2 - Motion sensor require charges when using highlight feature -;4 - Motion sensor is required to use the item highlight feature +;1 - Allow sensor use on automap when motion sensor is in pack rather than hands +;2 - Motion sensor doesn't require charges MotionScannerFlags=1 ;Set to non-0 to adjust the maximum encounter table size diff --git a/artifacts/mods/gl_highlighting.int b/artifacts/mods/gl_highlighting.int index f1173bd6c24fffdf22943ddf2019606605e0d2d4..629e5418a7b8182a9932c26211a4aad91b6348a7 100644 GIT binary patch literal 2994 zcmZo*I>5-lz#!DX3!<588dw?x8l)N&8l)N&8>AYP8l)PO8&n!p8`KyW7&sXi7}yw4 z0P_wgR|`r*DX=&*0|SE@Q~*k`fcPMBH>d!VV!6V=z`(@7zz_r#fKse+P{uJR4W(FD zK-J%a3P35gSquyeARm2z3P35284v~|$PNe-Omc;QDF#Ls1_3=3z`(#DP*RkbSDcer zl9`|9nU~4Hz`*66TH>6amzJ5%z`zG*2bUCq&iOg{AanR~^FbB{Cnx6Rr4}(T2*Gu` zC1&RM7N;9x5i??75DUpqPtQs9fZ64rl$DxX!oVPaCeFYh;GJ3-P?TC+?2(w4k^{1X zt+*tysD$DF|Ns9P7#Ncn1d7uVb8>WZ^HYlTGQmD)s)580M@=wDs)m7q%{MVK4-`r; ze`n_B6?^)5GBAkf=_89lP2hvOEHf`16kh46CGlyHFyJXpEs2MQ0|SEql$8>n5A}ms zNoG!Jd{JszQEG8Ud`f0&_cQOHkINX|$sN>9~e0Ecvg4k*ttFc42RFoV=`g*31{L6KV-;r9oP(p z1|hH+3do_;2yqP)BrI56z$%#U;MA;a7t)Kme9Nw%g27Az_lVDbzMxYHQKOcF`PCNr=Oq}XW!r+ZksW?ur9XMwxb zsKLC!04xT}0W1whO<`aWR!BMl#W9p`)C9>bj1U?27O*&D10-%+n#vkXAo+>C2~x8% zz|spWbRhLEYXd7Jgcx8hVT7hr7Kq7gzZzJ;W-~y2#0C*(U~4df`iLDO!T||=4ycdV z8xTHXgNkv$eZ&dT12P3{I%fl#k2oMc2gU7gunI<4%I63n(nm0tz1FHb#X>dGq9su)M8ic?!Q-c}ABv6WIk_3xEOE%7RP@WN(W@xZLs053E zOI%PJrNOF63Y;g_!NP%a2`ps6DjC5f8!Uxz?trEQwg#bw9UwW*dk_)MJ9zbdfT&_% zh3VrGgNSg6;M2!t165@ORRyW1&|HN(=W@?#Oo8~Fs|>{i7MPE?7C_6zC~!DH!Wd!; zq+Dc#mWzxH;Bt}c0*d-$pfG^eo~Y`XAnLgpP}D=pKWyeRL)9CgsE4F8h<{PdXMw7Z wf~x-laz7&**gcSZ%?x!pD^z6*L?xphSfv9Nm241|3}Bx!us0=v)nLgP0MK5N{Qv*} literal 3122 zcmZo*I>5-lz#!DX3!<5)G_W)XG)OflG)OflHb^xnHApomH>fnIHmET$FmNz1Ft9P8 z0Oku&t`?MrQebgr1_lN*r~s5=@nc|M0ExRn1)vnm8wLgjCI$wE6Hoyt#aadxe*_hP zQfvzt7#Kh<{{|I+QXKOj3`Q;p4I{adAS^~61_3=3z`(#DP*RkbSDcerl9`|9nU~4H zz`*66TH>6amzJ5%z`zG*2bUCqBXQ}fa`Wk%*^pEPB&y=5JDF-VqlOc z$xlzuNsWg~#pfqwr6!j!FbJW`fK1I!t&A@yN-Zvq&q&Nm$w@6@U|=gQNh~U1`2YX^ ze+CA|E(WfYl%m9Py-bkjnQ9<0!BG>OmY9=M!@$6mo>~&025}@$acW6?erZWgW?m`- zg8-D30(XH}NoG!Jd{JszQEG8Ud`f0aK1nhgylGI!eSm+mngP$!swbE9Bfk6Z=jvVG} zzL~|zpg8iy7WN$ANU#N^avg=tyi5>F0B#N_J`5Qc7}O&3OBE7}QuEYH6p|B*iYhbn z(iIXFAhD@XoSIjhU!(`}6N*kFsLmo(g$kL)3i+ia3i)XY$r*`7>8W}Q;23Gp0p&#o z2I9#EW{_I0qz0A-Z4irrVFD;`uz^XT21|%ogHeMeiU=b}q;U;cmbt+YM6;NHNCxHx zqXUef)X`wvpbr*d0*Qd~E<_zjMFVexWP?_NW&=-y449T7!}ix;(_yw>g7OfyOM^sM z4m3zKxHjlFNP&1DyTSetBhPhUGZ-3#z-CAxhfX8JHB1mcvc`Z_GBp@AxHf>@!Rm$L z4yFd9CV#LR2DnQYq2UBIg8`%)M>w%{K=m3yO+V5g0rw*)ZeX^8#KFFA*bmon1 z%7eL$jRi?JQ-cu1Ot2_eFW9##U|kFiMor})mHgY0!163mKQlKNHJCR*!U2}vSsIL*!oaFnA*lisqfow46C`giLS)#xz~YPz zM&PirYbt9nf#e?c4oLmV081UPP=?gLEDfyC5P-Ra5t=Glpe8dkuz<~Gfcl6HBF@0p zULYd}AF)BjIN(0wgy;d80@lUZfaW6(NDcs{h2LNmjIeah5k;hr zU@n3Ahy!9L`=tgJa3}>dl|lVZQtUTA0lSBx!4S%V#sQZXSR5A4j159C7jr>N)dnL- zoN%#$RkAb)L1~8ueQ5r&ZUnc67@+Bf^9xu7C?|vCoAVr)57Wui-~cfZlrowm!E(^_ z#kmK{GXm2L4HgKMU=eUR3u?(UST#w3!y^M09-NzCAq-Z@2qsx!DTVVGG)1sA2sP{g z$#K4ch;Y8btM4B~6$2|wAD0S5gi8sZJ}xh)Di5eCNM1y96$8#Vljr1DzM5;ATem&2vN@nRnOQU3|4UltO6AC zmXMI)=0Gt4QgTAvk7@!F#71sAunA1ilmSok3<_XzW~izZNQiK!fJI@dnPBM+>KmBq z9;h2$f!+8CtOpW$sBU0^_=1rGtb(OM2vTP=B5HA=2Fu0}kSzBth?$HsATt^DKw=D# m5``HWCae&*@~}WvhJjUPU{T2iQON)fa|X7iB(NGR@d*G~0=TgN diff --git a/artifacts/mods/gl_highlighting.ssl b/artifacts/mods/gl_highlighting.ssl index 124f53ef..a6290839 100644 --- a/artifacts/mods/gl_highlighting.ssl +++ b/artifacts/mods/gl_highlighting.ssl @@ -8,7 +8,10 @@ - configurable hotkey is used to trigger highlight - only objects in direct line-of-sight of player are highlighted - motion scanner is required to enable highlight (optional) - - motion scanner charges are decreesed on each use (optional) + - motion scanner charges are decreased on each use (optional) + + NOTE: this script requires compiler from sfall modderspack with -s option + (short circuit evaluation) **/ @@ -19,91 +22,84 @@ #define PID_MOTION_SENSOR (59) #define NO_HIGHLIGHT(obj) (get_flags(obj) bwand FLAG_NOHIGHLIGHT) +variable configSection := "Highlighting"; variable highlightKey; -variable highlightContainers; -variable colorContainers; -variable motionScannerFlags; +variable ignoreFlags; +variable outlineColor; +variable motionScanner; variable highlightFailMsg1; variable highlightFailMsg2; -procedure toggle_highlight_object(variable obj, variable enable) begin +procedure ToggleHighlightObject(variable obj, variable enable) begin if obj and (not enable or not obj_blocking_line(dude_obj, tile_num(obj), BLOCKING_TYPE_SHOOT)) - and (highlightContainers or not NO_HIGHLIGHT(obj)) then begin - set_outline( - obj, - enable and (NO_HIGHLIGHT(obj) and colorContainers or OUTLINE_DARK_YELLOW) or 0 - ); + and (ignoreFlags or not NO_HIGHLIGHT(obj)) then begin + if (enable) then set_outline(obj, outlineColor); + else set_outline(obj, 0); end end -procedure toggle_highlight(variable enable) begin +procedure ToggleHighlight(variable enable) begin variable obj; foreach obj in list_as_array(LIST_GROUNDITEMS) begin if obj != outlined_object then begin - call toggle_highlight_object(obj, enable); + call ToggleHighlightObject(obj, enable); end end foreach obj in list_as_array(LIST_CRITTERS) begin if critter_state(obj) == CRITTER_IS_DEAD then begin - call toggle_highlight_object(obj, enable); + call ToggleHighlightObject(obj, enable); end end tile_refresh_display; end -procedure key_press_handler begin +procedure KeyPressHandler begin variable pressed := get_sfall_arg, scanCode := get_sfall_arg, scanner, charges; if scanCode == highlightKey then begin if pressed then begin - if motionScannerFlags bwand 4 then begin + if motionScanner then begin scanner := obj_carrying_pid_obj(dude_obj, PID_MOTION_SENSOR); if scanner then begin - if motionScannerFlags bwand 2 then begin + if motionScanner >= 2 then begin charges := get_weapon_ammo_count(scanner); if charges > 0 then begin set_weapon_ammo_count(scanner, charges - 1); intface_redraw; - call toggle_highlight(true); + call ToggleHighlight(true); end else begin display_msg(highlightFailMsg2); end end else begin - call toggle_highlight(true); + call ToggleHighlight(true); end end else begin display_msg(highlightFailMsg1); end end else begin - call toggle_highlight(true); + call ToggleHighlight(true); end end else begin - call toggle_highlight(false); + call ToggleHighlight(false); end end end procedure start begin if game_loaded then begin - translationIni := GetConfigStr("Main", "TranslationsINI", "./Translations.ini"); + call InitConfigs; - highlightKey := GetConfig("Input", "ToggleItemHighlightsKey", 0); - display_msg("key= " + highlightKey); - highlightContainers := GetConfig("Input", "HighlightContainers", 0); - if highlightContainers == 1 then begin - colorContainers := OUTLINE_DARK_YELLOW; - end else if highlightContainers == 2 then begin - colorContainers := OUTLINE_PURPLE; - end - motionScannerFlags := GetConfig("Misc", "MotionScannerFlags", 1); - debug_msg("Flags=" + motionScannerFlags + ", ini=" + translationIni); + highlightKey := GetConfig(configSection, "Key", 0); + ignoreFlags := GetConfig(configSection, "IgnoreFlags", 0); + outlineColor := GetConfig(configSection, "OutlineColor", 0); + motionScanner := GetConfig(configSection, "MotionScanner", 1); - highlightFailMsg1 := translate("HighlightFail1", "You aren't carrying a motion sensor."); - highlightFailMsg2 := translate("HighlightFail2", "Your motion sensor is out of charge."); + highlightFailMsg1 := Translate("HighlightFail1", "You aren't carrying a motion sensor."); + highlightFailMsg2 := Translate("HighlightFail2", "Your motion sensor is out of charge."); - register_hook_proc(HOOK_KEYPRESS, key_press_handler); + register_hook_proc(HOOK_KEYPRESS, KeyPressHandler); end end diff --git a/artifacts/mods/main.h b/artifacts/mods/main.h index f62e3305..7112ccc4 100644 --- a/artifacts/mods/main.h +++ b/artifacts/mods/main.h @@ -2,7 +2,7 @@ #include "..\scripting\headers\sfall.h" #include "..\scripting\headers\define_extra.h" -variable ini := "ddraw.ini"; +variable ini := "sfall-mods.ini"; variable translationIni; // Gets the integer value from ddraw.ini @@ -20,7 +20,7 @@ procedure GetConfigStr(variable section, variable key, variable def) begin end // Translates given string using Translations.ini -procedure translate(variable id, variable def) begin +procedure Translate(variable id, variable def) begin variable str := get_ini_string(translationIni + "|Sfall|" + id); if not str or (strlen(str) == 0) then begin str := def; @@ -28,3 +28,6 @@ procedure translate(variable id, variable def) begin return str; end +procedure InitConfigs begin + translationIni := GetConfigStr("Main", "TranslationsINI", "./Translations.ini"); +end diff --git a/artifacts/scripting/headers/sfall.h b/artifacts/scripting/headers/sfall.h index d523dd8c..acda6abd 100644 --- a/artifacts/scripting/headers/sfall.h +++ b/artifacts/scripting/headers/sfall.h @@ -161,11 +161,11 @@ #define OUTLINE_NONE (0) #define OUTLINE_RED_GLOW (0x01) #define OUTLINE_RED (0x02) -#define OUTLINE_PURPLE (0x03) #define OUTLINE_GREY (0x04) #define OUTLINE_GREEN_GLOW (0x08) #define OUTLINE_YELLOW (0x10) #define OUTLINE_DARK_YELLOW (0x20) +#define OUTLINE_PURPLE (0x40) #define mstr_combat(x) (message_str_game(GAME_MSG_COMBAT, x)) #define mstr_ai(x) (message_str_game(GAME_MSG_AI, x)) diff --git a/artifacts/sfall-mods.ini b/artifacts/sfall-mods.ini new file mode 100644 index 00000000..f60bc6f0 --- /dev/null +++ b/artifacts/sfall-mods.ini @@ -0,0 +1,24 @@ +[Highlighting] + +; DX scandode of a key to press to highlight items on the ground +; 207 - END key +Key=207 + +; Set to 1 to ignore NO_HIGHLIGHT flag present on most containers +IgnoreFlags=1 + +; Set the color of outlines, available colors: +; 1 - glowing red +; 2 - red +; 4 - grey +; 8 - glowing green +; 16 - bright yellow +; 32 - dark yellow +; 64 - purple +OutlineColor=32 + +; Motion Scanner mode: +; 0 - ignored +; 1 - requires Motion Scanner present in player inventory to activate highlighting +; 2 - requires Motion Scanner and also requires 1 charge on every use (depleted scanner will not work anymore) +MotionScanner=2