mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-21 06:25:59 +00:00
* Nuke Op datumization. * Whoops * Fixes use_tag for nukes. Only syndiebomb uses one. * Fixing rebase stuff * How many times * Cleanup
83 lines
2.9 KiB
Plaintext
83 lines
2.9 KiB
Plaintext
/obj/item/pinpointer/nuke
|
|
var/mode = TRACK_NUKE_DISK
|
|
|
|
/obj/item/pinpointer/nuke/examine(mob/user)
|
|
..()
|
|
var/msg = "Its tracking indicator reads "
|
|
switch(mode)
|
|
if(TRACK_NUKE_DISK)
|
|
msg += "\"nuclear_disk\"."
|
|
if(TRACK_MALF_AI)
|
|
msg += "\"01000001 01001001\"."
|
|
if(TRACK_INFILTRATOR)
|
|
msg += "\"vasvygengbefuvc\"."
|
|
else
|
|
msg = "Its tracking indicator is blank."
|
|
to_chat(user, msg)
|
|
for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines)
|
|
if(bomb.timing)
|
|
to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].")
|
|
|
|
/obj/item/pinpointer/nuke/process()
|
|
..()
|
|
if(active) // If shit's going down
|
|
for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list)
|
|
if(bomb.timing)
|
|
if(!alert)
|
|
alert = TRUE
|
|
playsound(src, 'sound/items/nuke_toy_lowpower.ogg', 50, 0)
|
|
if(isliving(loc))
|
|
var/mob/living/L = loc
|
|
to_chat(L, "<span class='userdanger'>Your [name] vibrates and lets out a tinny alarm. Uh oh.</span>")
|
|
|
|
/obj/item/pinpointer/nuke/scan_for_target()
|
|
target = null
|
|
switch(mode)
|
|
if(TRACK_NUKE_DISK)
|
|
var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list
|
|
target = N
|
|
if(TRACK_MALF_AI)
|
|
for(var/V in GLOB.ai_list)
|
|
var/mob/living/silicon/ai/A = V
|
|
if(A.nuking)
|
|
target = A
|
|
for(var/V in GLOB.apcs_list)
|
|
var/obj/machinery/power/apc/A = V
|
|
if(A.malfhack && A.occupier)
|
|
target = A
|
|
if(TRACK_INFILTRATOR)
|
|
target = SSshuttle.getShuttle("syndicate")
|
|
..()
|
|
|
|
/obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode)
|
|
if(isliving(loc))
|
|
var/mob/living/L = loc
|
|
to_chat(L, "<span class='userdanger'>Your [name] beeps as it reconfigures its tracking algorithms.</span>")
|
|
playsound(L, 'sound/machines/triple_beep.ogg', 50, 1)
|
|
mode = new_mode
|
|
scan_for_target()
|
|
|
|
/obj/item/pinpointer/nuke/syndicate // Syndicate pinpointers automatically point towards the infiltrator once the nuke is active.
|
|
name = "syndicate pinpointer"
|
|
desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device."
|
|
icon_state = "pinpointer_syndicate"
|
|
|
|
/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative.
|
|
name = "cyborg syndicate pinpointer"
|
|
desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives."
|
|
flags_1 = NODROP_1
|
|
|
|
/obj/item/pinpointer/syndicate_cyborg/scan_for_target()
|
|
target = null
|
|
var/list/possible_targets = list()
|
|
var/turf/here = get_turf(src)
|
|
for(var/V in get_antagonists(/datum/antagonist/nukeop))
|
|
var/datum/mind/M = V
|
|
if(ishuman(M.current) && M.current.stat != DEAD)
|
|
possible_targets |= M.current
|
|
var/mob/living/closest_operative = get_closest_atom(/mob/living/carbon/human, possible_targets, here)
|
|
if(closest_operative)
|
|
target = closest_operative
|
|
..()
|
|
|