/** Item Highlight mod. Previously was part of sfall itself, now a separate mod. Features: - highlighting items, containers (optional) and dead bodies on the ground - 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 decreased on each use (optional) NOTE: this script requires compiler from sfall modderspack with -s option (short circuit evaluation) version 1.0 **/ #include "main.h" //#include "..\..\..\!SRC\headers\define.h" #define CRITTER_IS_DEAD (1) #define PID_MOTION_SENSOR (59) #define NO_HIGHLIGHT(obj) (get_flags(obj) bwand FLAG_NOHIGHLIGHT) variable configSection := "Highlighting"; variable highlightKey; variable ignoreFlags; variable outlineColor; variable motionScanner; variable highlightFailMsg1; variable highlightFailMsg2; 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 (ignoreFlags or not NO_HIGHLIGHT(obj)) then begin if (enable) then set_outline(obj, outlineColor); else set_outline(obj, 0); end end procedure ToggleHighlight(variable enable) begin variable obj; foreach obj in list_as_array(LIST_GROUNDITEMS) begin if obj != outlined_object then begin 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 ToggleHighlightObject(obj, enable); end end tile_refresh_display; end procedure KeyPressHandler begin variable pressed := get_sfall_arg, scanCode := get_sfall_arg, scanner, charges; if scanCode == highlightKey then begin if pressed then begin if motionScanner then begin scanner := obj_carrying_pid_obj(dude_obj, PID_MOTION_SENSOR); if scanner 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 ToggleHighlight(true); end else begin display_msg(highlightFailMsg2); end end else begin call ToggleHighlight(true); end end else begin display_msg(highlightFailMsg1); end end else begin call ToggleHighlight(true); end end else begin call ToggleHighlight(false); end end end procedure start begin if game_loaded then begin call InitConfigs; 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."); register_hook_proc(HOOK_KEYPRESS, KeyPressHandler); end end