mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-26 17:41:05 +00:00
* Fixes for AI detector (#68301) Fixes multitool detection Also modifies the uplink description to reflect the changes made to the multitool and makes the HUD mode into toggleable detection mode, and removes the unused hud code * Fixes for AI detector Co-authored-by: Couls <coul422@gmail.com>
145 lines
4.9 KiB
Plaintext
145 lines
4.9 KiB
Plaintext
#define PROXIMITY_NONE ""
|
|
#define PROXIMITY_ON_SCREEN "_red"
|
|
#define PROXIMITY_NEAR "_yellow"
|
|
|
|
/**
|
|
* Multitool -- A multitool is used for hacking electronic devices.
|
|
*
|
|
*/
|
|
|
|
|
|
|
|
|
|
/obj/item/multitool//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
|
|
name = "multitool"
|
|
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "multitool"
|
|
inhand_icon_state = "multitool"
|
|
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
|
force = 5
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
tool_behaviour = TOOL_MULTITOOL
|
|
throwforce = 0
|
|
throw_range = 7
|
|
throw_speed = 3
|
|
drop_sound = 'sound/items/handling/multitool_drop.ogg'
|
|
pickup_sound = 'sound/items/handling/multitool_pickup.ogg'
|
|
custom_materials = list(/datum/material/iron=50, /datum/material/glass=20)
|
|
custom_premium_price = PAYCHECK_COMMAND * 3
|
|
toolspeed = 1
|
|
usesound = 'sound/weapons/empty.ogg'
|
|
var/obj/machinery/buffer // simple machine buffer for device linkage
|
|
var/mode = 0
|
|
|
|
/obj/item/multitool/examine(mob/user)
|
|
. = ..()
|
|
. += span_notice("Its buffer [buffer ? "contains [buffer]." : "is empty."]")
|
|
|
|
/obj/item/multitool/suicide_act(mob/living/carbon/user)
|
|
user.visible_message(span_suicide("[user] puts the [src] to [user.p_their()] chest. It looks like [user.p_theyre()] trying to pulse [user.p_their()] heart off!"))
|
|
return OXYLOSS//theres a reason it wasn't recommended by doctors
|
|
|
|
|
|
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
|
|
|
|
/obj/item/multitool/ai_detect
|
|
special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
|
|
special_desc = "A special sensor embedded stealthily into this device can detect and warn of nearby silicon activity and camera vision range." // Skyrat edit
|
|
actions_types = list(/datum/action/item_action/toggle_multitool)
|
|
var/detect_state = PROXIMITY_NONE
|
|
var/rangealert = 8 //Glows red when inside
|
|
var/rangewarning = 20 //Glows yellow when inside
|
|
var/hud_type = DATA_HUD_AI_DETECT
|
|
var/detecting = FALSE
|
|
|
|
/obj/item/multitool/ai_detect/Destroy()
|
|
STOP_PROCESSING(SSfastprocess, src)
|
|
return ..()
|
|
|
|
/obj/item/multitool/ai_detect/ui_action_click()
|
|
return
|
|
|
|
/obj/item/multitool/ai_detect/update_icon_state()
|
|
. = ..()
|
|
icon_state = "[initial(icon_state)][detect_state]"
|
|
|
|
/obj/item/multitool/ai_detect/process()
|
|
var/old_detect_state = detect_state
|
|
multitool_detect()
|
|
if(detect_state != old_detect_state)
|
|
update_appearance()
|
|
|
|
/obj/item/multitool/ai_detect/proc/toggle_detect(mob/user)
|
|
detecting = !detecting
|
|
if(user)
|
|
to_chat(user, span_notice("You toggle the ai detection feature on [src] [detecting ? "on" : "off"]."))
|
|
if(!detecting)
|
|
detect_state = PROXIMITY_NONE
|
|
update_appearance()
|
|
STOP_PROCESSING(SSfastprocess, src)
|
|
return
|
|
if(detecting)
|
|
START_PROCESSING(SSfastprocess, src)
|
|
|
|
/obj/item/multitool/ai_detect/proc/multitool_detect()
|
|
var/turf/our_turf = get_turf(src)
|
|
detect_state = PROXIMITY_NONE
|
|
for(var/mob/living/silicon/ai/AI as anything in GLOB.ai_list)
|
|
if(AI.cameraFollow == src)
|
|
detect_state = PROXIMITY_ON_SCREEN
|
|
return
|
|
|
|
for(var/mob/camera/ai_eye/AI_eye as anything in GLOB.aiEyes)
|
|
if(!AI_eye.ai_detector_visible)
|
|
continue
|
|
|
|
var/distance = get_dist(our_turf, get_turf(AI_eye))
|
|
|
|
if(distance == -1) //get_dist() returns -1 for distances greater than 127 (and for errors, so assume -1 is just max range)
|
|
if(our_turf == get_turf(AI_eye)) // EXCEPT if the AI is on our TURF(ITS RIGHT ONTOP OF US!!!!)
|
|
detect_state = PROXIMITY_ON_SCREEN
|
|
break
|
|
continue
|
|
|
|
if(distance < rangealert) //ai should be able to see us
|
|
detect_state = PROXIMITY_ON_SCREEN
|
|
break
|
|
if(distance < rangewarning) //ai cant see us but is close
|
|
detect_state = PROXIMITY_NEAR
|
|
|
|
/mob/camera/ai_eye/remote/ai_detector
|
|
name = "AI detector eye"
|
|
ai_detector_visible = FALSE
|
|
visible_icon = FALSE
|
|
use_static = FALSE
|
|
|
|
/datum/action/item_action/toggle_multitool
|
|
name = "Toggle AI detecting mode"
|
|
check_flags = NONE
|
|
|
|
/datum/action/item_action/toggle_multitool/Trigger(trigger_flags)
|
|
if(!..())
|
|
return FALSE
|
|
if(target)
|
|
var/obj/item/multitool/ai_detect/M = target
|
|
M.toggle_detect(owner)
|
|
return TRUE
|
|
|
|
/obj/item/multitool/abductor
|
|
name = "alien multitool"
|
|
desc = "An omni-technological interface."
|
|
icon = 'icons/obj/abductor.dmi'
|
|
icon_state = "multitool"
|
|
belt_icon_state = "multitool_alien"
|
|
custom_materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 5000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
|
toolspeed = 0.1
|
|
|
|
/obj/item/multitool/cyborg//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
|
|
name = "electronic multitool"
|
|
desc = "Optimised version of a regular multitool. Streamlines processes handled by its internal microchip."
|
|
icon = 'modular_skyrat/modules/fixing_missing_icons/items_cyborg.dmi' //skyrat edit
|
|
icon_state = "multitool_cyborg"
|
|
toolspeed = 0.5
|