mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into kitchen
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/aicard
|
||||
/obj/item/aicard
|
||||
name = "inteliCard"
|
||||
icon = 'icons/obj/aicards.dmi'
|
||||
icon_state = "aicard" // aicard-full
|
||||
@@ -10,7 +10,7 @@
|
||||
origin_tech = "programming=3;materials=3"
|
||||
|
||||
|
||||
/obj/item/device/aicard/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/aicard/afterattack(atom/target, mob/user, proximity)
|
||||
..()
|
||||
if(!proximity || !target)
|
||||
return
|
||||
@@ -22,7 +22,7 @@
|
||||
target.transfer_ai(AI_TRANS_TO_CARD, user, null, src)
|
||||
update_state() //Whatever happened, update the card's state (icon, name) to match.
|
||||
|
||||
/obj/item/device/aicard/proc/update_state()
|
||||
/obj/item/aicard/proc/update_state()
|
||||
var/mob/living/silicon/ai/AI = locate(/mob/living/silicon/ai) in src //AI is inside.
|
||||
if(AI)
|
||||
name = "intelliCard - [AI.name]"
|
||||
@@ -36,11 +36,11 @@
|
||||
name = "intelliCard"
|
||||
overlays.Cut()
|
||||
|
||||
/obj/item/device/aicard/attack_self(mob/user)
|
||||
/obj/item/aicard/attack_self(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
|
||||
/obj/item/aicard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state)
|
||||
@@ -48,7 +48,7 @@
|
||||
ui.set_auto_update(1)
|
||||
|
||||
|
||||
/obj/item/device/aicard/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state)
|
||||
/obj/item/aicard/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state)
|
||||
var/data[0]
|
||||
|
||||
var/mob/living/silicon/ai/AI = locate() in src
|
||||
@@ -70,7 +70,7 @@
|
||||
return data
|
||||
|
||||
|
||||
/obj/item/device/aicard/Topic(href, href_list, nowindow, state)
|
||||
/obj/item/aicard/Topic(href, href_list, nowindow, state)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/device/aicard/ex_act(severity)
|
||||
/obj/item/aicard/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/device/camera_bug
|
||||
/obj/item/camera_bug
|
||||
name = "camera bug"
|
||||
desc = "For illicit snooping through the camera network."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -30,11 +30,11 @@
|
||||
var/last_found = null
|
||||
var/last_seen = null
|
||||
|
||||
/obj/item/device/camera_bug/New()
|
||||
/obj/item/camera_bug/New()
|
||||
..()
|
||||
processing_objects += src
|
||||
|
||||
/obj/item/device/camera_bug/Destroy()
|
||||
/obj/item/camera_bug/Destroy()
|
||||
get_cameras()
|
||||
for(var/cam_tag in bugged_cameras)
|
||||
var/obj/machinery/camera/camera = bugged_cameras[cam_tag]
|
||||
@@ -45,16 +45,16 @@
|
||||
tracking = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/camera_bug/interact(var/mob/user = usr)
|
||||
/obj/item/camera_bug/interact(var/mob/user = usr)
|
||||
var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src)
|
||||
popup.set_content(menu(get_cameras()))
|
||||
popup.open()
|
||||
|
||||
/obj/item/device/camera_bug/attack_self(mob/user as mob)
|
||||
/obj/item/camera_bug/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/camera_bug/check_eye(var/mob/user as mob)
|
||||
/obj/item/camera_bug/check_eye(var/mob/user as mob)
|
||||
if(user.stat || loc != user || !user.canmove || !user.has_vision() || !current)
|
||||
user.reset_perspective(null)
|
||||
user.unset_machine()
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/device/camera_bug/proc/get_cameras()
|
||||
/obj/item/camera_bug/proc/get_cameras()
|
||||
if(world.time > (last_net_update + 100))
|
||||
bugged_cameras = list()
|
||||
for(var/obj/machinery/camera/camera in cameranet.cameras)
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/device/camera_bug/proc/menu(var/list/cameras)
|
||||
/obj/item/camera_bug/proc/menu(var/list/cameras)
|
||||
if(!cameras || !cameras.len)
|
||||
return "No bugged cameras found."
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
return .(cameras)
|
||||
return html
|
||||
|
||||
/obj/item/device/camera_bug/proc/camera_report()
|
||||
/obj/item/camera_bug/proc/camera_report()
|
||||
// this should only be called if current exists
|
||||
var/dat = ""
|
||||
if(current && current.can_use())
|
||||
@@ -181,7 +181,7 @@
|
||||
else
|
||||
return "Camera Offline<br>"
|
||||
|
||||
/obj/item/device/camera_bug/Topic(var/href,var/list/href_list)
|
||||
/obj/item/camera_bug/Topic(var/href,var/list/href_list)
|
||||
if(usr != loc)
|
||||
usr.unset_machine()
|
||||
usr.reset_perspective(null)
|
||||
@@ -244,7 +244,7 @@
|
||||
|
||||
interact()
|
||||
|
||||
/obj/item/device/camera_bug/process()
|
||||
/obj/item/camera_bug/process()
|
||||
if(track_mode == BUGMODE_LIST || (world.time < (last_tracked + refresh_interval)))
|
||||
return
|
||||
last_tracked = world.time
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/item/device/chameleon
|
||||
/obj/item/chameleon
|
||||
name = "chameleon-projector"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "shield0"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -17,16 +18,16 @@
|
||||
var/saved_overlays = null
|
||||
var/saved_underlays = null
|
||||
|
||||
/obj/item/device/chameleon/dropped()
|
||||
/obj/item/chameleon/dropped()
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/equipped()
|
||||
/obj/item/chameleon/equipped()
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/attack_self()
|
||||
/obj/item/chameleon/attack_self()
|
||||
toggle()
|
||||
|
||||
/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
if(!proximity) return
|
||||
if(!active_dummy)
|
||||
if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear))
|
||||
@@ -38,7 +39,7 @@
|
||||
saved_overlays = target.overlays
|
||||
saved_underlays = target.underlays
|
||||
|
||||
/obj/item/device/chameleon/proc/toggle()
|
||||
/obj/item/chameleon/proc/toggle()
|
||||
if(!can_use || !saved_item) return
|
||||
if(active_dummy)
|
||||
eject_all()
|
||||
@@ -64,7 +65,7 @@
|
||||
spawn(8)
|
||||
qdel(T)
|
||||
|
||||
/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1)
|
||||
/obj/item/chameleon/proc/disrupt(var/delete_dummy = 1)
|
||||
if(active_dummy)
|
||||
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
|
||||
spark_system.set_up(5, 0, src)
|
||||
@@ -77,7 +78,7 @@
|
||||
can_use = 0
|
||||
spawn(50) can_use = 1
|
||||
|
||||
/obj/item/device/chameleon/proc/eject_all()
|
||||
/obj/item/chameleon/proc/eject_all()
|
||||
for(var/atom/movable/A in active_dummy)
|
||||
A.loc = active_dummy.loc
|
||||
if(ismob(A))
|
||||
@@ -90,9 +91,9 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/can_move = 1
|
||||
var/obj/item/device/chameleon/master = null
|
||||
var/obj/item/chameleon/master = null
|
||||
|
||||
/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, new_underlays, var/obj/item/device/chameleon/C)
|
||||
/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, new_underlays, var/obj/item/chameleon/C)
|
||||
name = O.name
|
||||
desc = O.desc
|
||||
icon = new_icon
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/flash
|
||||
/obj/item/flash
|
||||
name = "flash"
|
||||
desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "flash"
|
||||
item_state = "flashtool" //looks exactly like a flash (and nothing like a flashbang)
|
||||
throwforce = 0
|
||||
@@ -18,13 +19,13 @@
|
||||
var/overcharged = 0 //if overcharged the flash will set people on fire then immediately burn out (does so even if it doesn't blind them).
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/clown_check(mob/user)
|
||||
/obj/item/flash/proc/clown_check(mob/user)
|
||||
if(user && (CLUMSY in user.mutations) && prob(50))
|
||||
flash_carbon(user, user, 15, 0)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/device/flash/attackby(obj/item/W, mob/user, params)
|
||||
/obj/item/flash/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(battery_panel)
|
||||
to_chat(user, "<span class='notice'>You close the battery compartment on the [src].</span>")
|
||||
@@ -39,19 +40,19 @@
|
||||
overcharged = 1
|
||||
overlays += "overcharge"
|
||||
|
||||
/obj/item/device/flash/random/New()
|
||||
/obj/item/flash/random/New()
|
||||
..()
|
||||
if(prob(25))
|
||||
broken = 1
|
||||
icon_state = "[initial(icon_state)]burnt"
|
||||
|
||||
/obj/item/device/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
|
||||
/obj/item/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
|
||||
broken = 1
|
||||
icon_state = "[initial(icon_state)]burnt"
|
||||
visible_message("<span class='notice'>The [src.name] burns out!</span>")
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/flash_recharge(var/mob/user)
|
||||
/obj/item/flash/proc/flash_recharge(var/mob/user)
|
||||
if(prob(times_used * 2)) //if you use it 5 times in a minute it has a 10% chance to break!
|
||||
burn_out()
|
||||
return 0
|
||||
@@ -64,7 +65,7 @@
|
||||
times_used = max(0, times_used) //sanity
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/try_use_flash(var/mob/user = null)
|
||||
/obj/item/flash/proc/try_use_flash(var/mob/user = null)
|
||||
flash_recharge(user)
|
||||
|
||||
if(broken)
|
||||
@@ -80,7 +81,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, targeted = 1)
|
||||
/obj/item/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, targeted = 1)
|
||||
add_attack_logs(user, M, "Flashed with [src]")
|
||||
if(user && targeted)
|
||||
if(M.weakeyes)
|
||||
@@ -103,7 +104,7 @@
|
||||
if(M.flash_eyes())
|
||||
M.AdjustConfused(power)
|
||||
|
||||
/obj/item/device/flash/attack(mob/living/M, mob/user)
|
||||
/obj/item/flash/attack(mob/living/M, mob/user)
|
||||
if(!try_use_flash(user))
|
||||
return 0
|
||||
|
||||
@@ -133,7 +134,7 @@
|
||||
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the [src.name]!</span>", "<span class='warning'>You fail to blind [M] with the [src.name]!</span>")
|
||||
|
||||
|
||||
/obj/item/device/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
|
||||
/obj/item/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
|
||||
if(!try_use_flash(user))
|
||||
return 0
|
||||
user.visible_message("<span class='disarm'>[user]'s [src.name] emits a blinding light!</span>", "<span class='danger'>Your [src.name] emits a blinding light!</span>")
|
||||
@@ -141,7 +142,7 @@
|
||||
flash_carbon(M, user, 3, 0)
|
||||
|
||||
|
||||
/obj/item/device/flash/emp_act(severity)
|
||||
/obj/item/flash/emp_act(severity)
|
||||
if(!try_use_flash())
|
||||
return 0
|
||||
for(var/mob/living/carbon/M in viewers(3, null))
|
||||
@@ -150,7 +151,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/terrible_conversion_proc(mob/M, mob/user)
|
||||
/obj/item/flash/proc/terrible_conversion_proc(mob/M, mob/user)
|
||||
if(ishuman(M) && ishuman(user) && M.stat != DEAD)
|
||||
if(user.mind && (user.mind in ticker.mode.head_revolutionaries))
|
||||
if(M.client)
|
||||
@@ -174,42 +175,42 @@
|
||||
to_chat(user, "<span class='warning'>This mind is so vacant that it is not susceptible to influence!</span>")
|
||||
|
||||
|
||||
/obj/item/device/flash/cyborg
|
||||
/obj/item/flash/cyborg
|
||||
origin_tech = null
|
||||
|
||||
/obj/item/device/flash/cyborg/attack(mob/living/M, mob/user)
|
||||
/obj/item/flash/cyborg/attack(mob/living/M, mob/user)
|
||||
..()
|
||||
new /obj/effect/temp_visual/borgflash(get_turf(src))
|
||||
|
||||
/obj/item/device/flash/cyborg/attack_self(mob/user)
|
||||
/obj/item/flash/cyborg/attack_self(mob/user)
|
||||
..()
|
||||
new /obj/effect/temp_visual/borgflash(get_turf(src))
|
||||
|
||||
/obj/item/device/flash/memorizer
|
||||
/obj/item/flash/memorizer
|
||||
name = "memorizer"
|
||||
desc = "If you see this, you're not likely to remember it any time soon."
|
||||
icon_state = "memorizer"
|
||||
item_state = "nullrod"
|
||||
|
||||
/obj/item/device/flash/armimplant
|
||||
/obj/item/flash/armimplant
|
||||
name = "photon projector"
|
||||
desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocals fix the flashbulb if it ever burns out."
|
||||
var/flashcd = 20
|
||||
var/overheat = 0
|
||||
var/obj/item/organ/internal/cyberimp/arm/flash/I = null
|
||||
|
||||
/obj/item/device/flash/armimplant/Destroy()
|
||||
/obj/item/flash/armimplant/Destroy()
|
||||
I = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/flash/armimplant/burn_out()
|
||||
/obj/item/flash/armimplant/burn_out()
|
||||
if(I && I.owner)
|
||||
to_chat(I.owner, "<span class='warning'>Your photon projector implant overheats and deactivates!</span>")
|
||||
I.Retract()
|
||||
overheat = FALSE
|
||||
addtimer(src, "cooldown", flashcd * 2)
|
||||
|
||||
/obj/item/device/flash/armimplant/try_use_flash(mob/user = null)
|
||||
/obj/item/flash/armimplant/try_use_flash(mob/user = null)
|
||||
if(overheat)
|
||||
if(I && I.owner)
|
||||
to_chat(I.owner, "<span class='warning'>Your photon projector is running too hot to be used again so quickly!</span>")
|
||||
@@ -220,8 +221,8 @@
|
||||
update_icon(1)
|
||||
return TRUE
|
||||
|
||||
/obj/item/device/flash/armimplant/proc/cooldown()
|
||||
/obj/item/flash/armimplant/proc/cooldown()
|
||||
overheat = FALSE
|
||||
|
||||
|
||||
/obj/item/device/flash/synthetic //just a regular flash now
|
||||
/obj/item/flash/synthetic //just a regular flash now
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/flashlight
|
||||
/obj/item/flashlight
|
||||
name = "flashlight"
|
||||
desc = "A hand-held emergency light."
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
@@ -12,7 +12,7 @@
|
||||
var/on = 0
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
|
||||
/obj/item/device/flashlight/initialize()
|
||||
/obj/item/flashlight/initialize()
|
||||
..()
|
||||
if(on)
|
||||
icon_state = "[initial(icon_state)]-on"
|
||||
@@ -21,7 +21,7 @@
|
||||
icon_state = initial(icon_state)
|
||||
set_light(0)
|
||||
|
||||
/obj/item/device/flashlight/proc/update_brightness(var/mob/user = null)
|
||||
/obj/item/flashlight/proc/update_brightness(var/mob/user = null)
|
||||
if(on)
|
||||
icon_state = "[initial(icon_state)]-on"
|
||||
set_light(brightness_on)
|
||||
@@ -29,7 +29,7 @@
|
||||
icon_state = initial(icon_state)
|
||||
set_light(0)
|
||||
|
||||
/obj/item/device/flashlight/attack_self(mob/user)
|
||||
/obj/item/flashlight/attack_self(mob/user)
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "You cannot turn the light on while in this [user.loc].")//To prevent some lighting anomalities.
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(on && user.zone_sel.selecting == "eyes")
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/flashlight/pen
|
||||
/obj/item/flashlight/pen
|
||||
name = "penlight"
|
||||
desc = "A pen-sized light, used by medical staff."
|
||||
icon_state = "penlight"
|
||||
@@ -93,7 +93,7 @@
|
||||
flags = CONDUCT
|
||||
brightness_on = 2
|
||||
|
||||
/obj/item/device/flashlight/seclite
|
||||
/obj/item/flashlight/seclite
|
||||
name = "seclite"
|
||||
desc = "A robust flashlight used by security."
|
||||
icon_state = "seclite"
|
||||
@@ -102,7 +102,7 @@
|
||||
brightness_on = 5 // A little better than the standard flashlight.
|
||||
hitsound = 'sound/weapons/genhit1.ogg'
|
||||
|
||||
/obj/item/device/flashlight/drone
|
||||
/obj/item/flashlight/drone
|
||||
name = "low-power flashlight"
|
||||
desc = "A miniature lamp, that might be used by small robots."
|
||||
icon_state = "penlight"
|
||||
@@ -112,7 +112,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
// the desk lamps are a bit special
|
||||
/obj/item/device/flashlight/lamp
|
||||
/obj/item/flashlight/lamp
|
||||
name = "desk lamp"
|
||||
desc = "A desk lamp with an adjustable mount."
|
||||
icon_state = "lamp"
|
||||
@@ -125,14 +125,14 @@
|
||||
|
||||
|
||||
// green-shaded desk lamp
|
||||
/obj/item/device/flashlight/lamp/green
|
||||
/obj/item/flashlight/lamp/green
|
||||
desc = "A classic green-shaded desk lamp."
|
||||
icon_state = "lampgreen"
|
||||
item_state = "lampgreen"
|
||||
|
||||
|
||||
|
||||
/obj/item/device/flashlight/lamp/verb/toggle_light()
|
||||
/obj/item/flashlight/lamp/verb/toggle_light()
|
||||
set name = "Toggle light"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
@@ -141,7 +141,7 @@
|
||||
attack_self(usr)
|
||||
|
||||
//Bananalamp
|
||||
obj/item/device/flashlight/lamp/bananalamp
|
||||
obj/item/flashlight/lamp/bananalamp
|
||||
name = "banana lamp"
|
||||
desc = "Only a clown would think to make a ghetto banana-shaped lamp. Even has a goofy pullstring."
|
||||
icon_state = "bananalamp"
|
||||
@@ -150,7 +150,7 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
|
||||
// FLARES
|
||||
|
||||
/obj/item/device/flashlight/flare
|
||||
/obj/item/flashlight/flare
|
||||
name = "flare"
|
||||
desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -162,11 +162,11 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
var/on_damage = 7
|
||||
var/produce_heat = 1500
|
||||
|
||||
/obj/item/device/flashlight/flare/New()
|
||||
/obj/item/flashlight/flare/New()
|
||||
fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.
|
||||
..()
|
||||
|
||||
/obj/item/device/flashlight/flare/process()
|
||||
/obj/item/flashlight/flare/process()
|
||||
var/turf/pos = get_turf(src)
|
||||
if(pos)
|
||||
pos.hotspot_expose(produce_heat, 5)
|
||||
@@ -177,7 +177,7 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
src.icon_state = "[initial(icon_state)]-empty"
|
||||
processing_objects -= src
|
||||
|
||||
/obj/item/device/flashlight/flare/proc/turn_off()
|
||||
/obj/item/flashlight/flare/proc/turn_off()
|
||||
on = 0
|
||||
src.force = initial(src.force)
|
||||
src.damtype = initial(src.damtype)
|
||||
@@ -187,14 +187,14 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
else
|
||||
update_brightness(null)
|
||||
|
||||
/obj/item/device/flashlight/flare/update_brightness(var/mob/user = null)
|
||||
/obj/item/flashlight/flare/update_brightness(var/mob/user = null)
|
||||
..()
|
||||
if(on)
|
||||
item_state = "[initial(item_state)]-on"
|
||||
else
|
||||
item_state = "[initial(item_state)]"
|
||||
|
||||
/obj/item/device/flashlight/flare/attack_self(mob/user)
|
||||
/obj/item/flashlight/flare/attack_self(mob/user)
|
||||
|
||||
// Usual checks
|
||||
if(!fuel)
|
||||
@@ -211,7 +211,7 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
src.damtype = "fire"
|
||||
processing_objects += src
|
||||
|
||||
/obj/item/device/flashlight/flare/torch
|
||||
/obj/item/flashlight/flare/torch
|
||||
name = "torch"
|
||||
desc = "A torch fashioned from some leaves and a log."
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
@@ -220,7 +220,7 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
item_state = "torch"
|
||||
on_damage = 10
|
||||
|
||||
/obj/item/device/flashlight/slime
|
||||
/obj/item/flashlight/slime
|
||||
gender = PLURAL
|
||||
name = "glowing slime extract"
|
||||
desc = "A glowing ball of what appears to be amber."
|
||||
@@ -233,16 +233,16 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
materials = list()
|
||||
on = 1 //Bio-luminesence has one setting, on.
|
||||
|
||||
/obj/item/device/flashlight/slime/New()
|
||||
/obj/item/flashlight/slime/New()
|
||||
set_light(brightness_on)
|
||||
spawn(1) //Might be sloppy, but seems to be necessary to prevent further runtimes and make these work as intended... don't judge me!
|
||||
update_brightness()
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/device/flashlight/slime/attack_self(mob/user)
|
||||
/obj/item/flashlight/slime/attack_self(mob/user)
|
||||
return //Bio-luminescence does not toggle.
|
||||
|
||||
/obj/item/device/flashlight/emp
|
||||
/obj/item/flashlight/emp
|
||||
origin_tech = "magnets=3;syndicate=1"
|
||||
|
||||
var/emp_max_charges = 4
|
||||
@@ -250,27 +250,27 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
var/charge_tick = 0
|
||||
|
||||
|
||||
/obj/item/device/flashlight/emp/New()
|
||||
/obj/item/flashlight/emp/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/device/flashlight/emp/Destroy()
|
||||
/obj/item/flashlight/emp/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/flashlight/emp/process()
|
||||
/obj/item/flashlight/emp/process()
|
||||
charge_tick++
|
||||
if(charge_tick < 10) return 0
|
||||
charge_tick = 0
|
||||
emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
|
||||
return 1
|
||||
|
||||
/obj/item/device/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(on && user.zone_sel.selecting == "eyes") // call original attack proc only if aiming at the eyes
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/device/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity)
|
||||
/obj/item/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(emp_cur_charges > 0)
|
||||
emp_cur_charges -= 1
|
||||
@@ -285,7 +285,7 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
to_chat(user, "<span class='warning'>\The [src] needs time to recharge!</span>")
|
||||
return
|
||||
|
||||
/obj/item/device/flashlight/spotlight //invisible lighting source
|
||||
/obj/item/flashlight/spotlight //invisible lighting source
|
||||
name = "disco light"
|
||||
desc = "Groovy..."
|
||||
icon_state = null
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
// Floor painter
|
||||
|
||||
/obj/item/device/floor_painter
|
||||
/obj/item/floor_painter
|
||||
name = "floor painter"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "floor_painter"
|
||||
item_state = "electronic"
|
||||
|
||||
var/floor_icon
|
||||
var/floor_state = "floor"
|
||||
var/floor_dir = SOUTH
|
||||
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
item_state = "electronic"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -25,7 +26,7 @@
|
||||
"whitered", "whiteredcorner", "whiteredfull", "whiteyellow", "whiteyellowcorner", "whiteyellowfull", "yellow",
|
||||
"yellowcorner", "yellowcornersiding", "yellowsiding")
|
||||
|
||||
/obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params)
|
||||
/obj/item/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
@@ -38,14 +39,14 @@
|
||||
F.icon_regular_floor = floor_state
|
||||
F.dir = floor_dir
|
||||
|
||||
/obj/item/device/floor_painter/attack_self(var/mob/user)
|
||||
/obj/item/floor_painter/attack_self(var/mob/user)
|
||||
if(!user)
|
||||
return 0
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
return 1
|
||||
|
||||
/obj/item/device/floor_painter/interact(mob/user as mob)
|
||||
/obj/item/floor_painter/interact(mob/user as mob)
|
||||
if(!floor_icon)
|
||||
floor_icon = icon('icons/turf/floors.dmi', floor_state, floor_dir)
|
||||
user << browse_rsc(floor_icon, "floor.png")
|
||||
@@ -65,7 +66,7 @@
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/device/floor_painter/Topic(href, href_list)
|
||||
/obj/item/floor_painter/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//copy pasta of the space piano, don't hurt me -Pete
|
||||
/obj/item/device/instrument
|
||||
/obj/item/instrument
|
||||
name = "generic instrument"
|
||||
icon = 'icons/obj/musician.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/equipment/instruments_lefthand.dmi'
|
||||
@@ -9,38 +9,38 @@
|
||||
var/instrumentId = "generic"
|
||||
var/instrumentExt = "mid"
|
||||
|
||||
/obj/item/device/instrument/New()
|
||||
/obj/item/instrument/New()
|
||||
song = new(instrumentId, src, instrumentExt)
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/Destroy()
|
||||
/obj/item/instrument/Destroy()
|
||||
QDEL_NULL(song)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/instrument/suicide_act(mob/user)
|
||||
/obj/item/instrument/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins to play 'Gloomy Sunday'! It looks like \he's trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/device/instrument/initialize(mapload)
|
||||
/obj/item/instrument/initialize(mapload)
|
||||
song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/attack_self(mob/user)
|
||||
/obj/item/instrument/attack_self(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/instrument/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
|
||||
/obj/item/instrument/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
|
||||
if(!isliving(user) || user.incapacitated())
|
||||
return
|
||||
|
||||
song.ui_interact(user, ui_key, ui, force_open)
|
||||
|
||||
/obj/item/device/instrument/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
/obj/item/instrument/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
return song.ui_data(user, ui_key, state)
|
||||
|
||||
/obj/item/device/instrument/Topic(href, href_list)
|
||||
/obj/item/instrument/Topic(href, href_list)
|
||||
song.Topic(href, href_list)
|
||||
|
||||
/obj/item/device/instrument/violin
|
||||
/obj/item/instrument/violin
|
||||
name = "space violin"
|
||||
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
||||
icon_state = "violin"
|
||||
@@ -50,14 +50,14 @@
|
||||
hitsound = "swing_hit"
|
||||
instrumentId = "violin"
|
||||
|
||||
/obj/item/device/instrument/violin/golden
|
||||
/obj/item/instrument/violin/golden
|
||||
name = "golden violin"
|
||||
desc = "A golden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
||||
icon_state = "golden_violin"
|
||||
item_state = "golden_violin"
|
||||
burn_state = LAVA_PROOF
|
||||
|
||||
/obj/item/device/instrument/piano_synth
|
||||
/obj/item/instrument/piano_synth
|
||||
name = "synthesizer"
|
||||
desc = "An advanced electronic synthesizer that can be used as various instruments."
|
||||
icon_state = "synth"
|
||||
@@ -67,11 +67,11 @@
|
||||
var/static/list/insTypes = list("accordion" = "mid", "glockenspiel" = "mid", "guitar" = "ogg", "eguitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "ogg", "xylophone" = "mid")
|
||||
actions_types = list(/datum/action/item_action/synthswitch)
|
||||
|
||||
/obj/item/device/instrument/piano_synth/proc/changeInstrument(name = "piano")
|
||||
/obj/item/instrument/piano_synth/proc/changeInstrument(name = "piano")
|
||||
song.instrumentDir = name
|
||||
song.instrumentExt = insTypes[name]
|
||||
|
||||
/obj/item/device/instrument/guitar
|
||||
/obj/item/instrument/guitar
|
||||
name = "guitar"
|
||||
desc = "It's made of wood and has bronze strings."
|
||||
icon_state = "guitar"
|
||||
@@ -82,7 +82,7 @@
|
||||
hitsound = 'sound/effects/guitarsmash.ogg'
|
||||
instrumentId = "guitar"
|
||||
|
||||
/obj/item/device/instrument/eguitar
|
||||
/obj/item/instrument/eguitar
|
||||
name = "electric guitar"
|
||||
desc = "Makes all your shredding needs possible."
|
||||
icon_state = "eguitar"
|
||||
@@ -93,42 +93,42 @@
|
||||
hitsound = 'sound/weapons/stringsmash.ogg'
|
||||
instrumentId = "eguitar"
|
||||
|
||||
/obj/item/device/instrument/glockenspiel
|
||||
/obj/item/instrument/glockenspiel
|
||||
name = "glockenspiel"
|
||||
desc = "Smooth metal bars perfect for any marching band."
|
||||
icon_state = "glockenspiel"
|
||||
item_state = "glockenspiel"
|
||||
instrumentId = "glockenspiel"
|
||||
|
||||
/obj/item/device/instrument/accordion
|
||||
/obj/item/instrument/accordion
|
||||
name = "accordion"
|
||||
desc = "Pun-Pun not included."
|
||||
icon_state = "accordion"
|
||||
item_state = "accordion"
|
||||
instrumentId = "accordion"
|
||||
|
||||
/obj/item/device/instrument/saxophone
|
||||
/obj/item/instrument/saxophone
|
||||
name = "saxophone"
|
||||
desc = "This soothing sound will be sure to leave your audience in tears."
|
||||
icon_state = "saxophone"
|
||||
item_state = "saxophone"
|
||||
instrumentId = "saxophone"
|
||||
|
||||
/obj/item/device/instrument/trombone
|
||||
/obj/item/instrument/trombone
|
||||
name = "trombone"
|
||||
desc = "How can any pool table ever hope to compete?"
|
||||
icon_state = "trombone"
|
||||
item_state = "trombone"
|
||||
instrumentId = "trombone"
|
||||
|
||||
/obj/item/device/instrument/recorder
|
||||
/obj/item/instrument/recorder
|
||||
name = "recorder"
|
||||
desc = "Just like in school, playing ability and all."
|
||||
icon_state = "recorder"
|
||||
item_state = "recorder"
|
||||
instrumentId = "recorder"
|
||||
|
||||
/obj/item/device/instrument/harmonica
|
||||
/obj/item/instrument/harmonica
|
||||
name = "harmonica"
|
||||
desc = "For when you get a bad case of the space blues."
|
||||
icon_state = "harmonica"
|
||||
@@ -137,14 +137,14 @@
|
||||
force = 5
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/device/instrument/xylophone
|
||||
/obj/item/instrument/xylophone
|
||||
name = "xylophone"
|
||||
desc = "a percussion instrument with a bright tone."
|
||||
icon_state = "xylophone"
|
||||
item_state = "xylophone"
|
||||
instrumentId = "xylophone"
|
||||
|
||||
/obj/item/device/instrument/bikehorn
|
||||
/obj/item/instrument/bikehorn
|
||||
name = "gilded bike horn"
|
||||
desc = "An exquisitely decorated bike horn, capable of honking in a variety of notes."
|
||||
icon_state = "bike_horn"
|
||||
@@ -162,7 +162,7 @@
|
||||
|
||||
/datum/crafting_recipe/violin
|
||||
name = "Violin"
|
||||
result = /obj/item/device/instrument/violin
|
||||
result = /obj/item/instrument/violin
|
||||
reqs = list(/obj/item/stack/sheet/wood = 5,
|
||||
/obj/item/stack/cable_coil = 6,
|
||||
/obj/item/stack/tape_roll = 5)
|
||||
@@ -171,7 +171,7 @@
|
||||
|
||||
/datum/crafting_recipe/guitar
|
||||
name = "Guitar"
|
||||
result = /obj/item/device/instrument/guitar
|
||||
result = /obj/item/instrument/guitar
|
||||
reqs = list(/obj/item/stack/sheet/wood = 5,
|
||||
/obj/item/stack/cable_coil = 6,
|
||||
/obj/item/stack/tape_roll = 5)
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
/datum/crafting_recipe/eguitar
|
||||
name = "Electric Guitar"
|
||||
result = /obj/item/device/instrument/eguitar
|
||||
result = /obj/item/instrument/eguitar
|
||||
reqs = list(/obj/item/stack/sheet/metal = 5,
|
||||
/obj/item/stack/cable_coil = 6,
|
||||
/obj/item/stack/tape_roll = 5)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/laser_pointer
|
||||
/obj/item/laser_pointer
|
||||
name = "laser pointer"
|
||||
desc = "Don't shine it in your eyes!"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -18,35 +18,35 @@
|
||||
var/obj/item/stock_parts/micro_laser/diode //used for upgrading!
|
||||
|
||||
|
||||
/obj/item/device/laser_pointer/red
|
||||
/obj/item/laser_pointer/red
|
||||
pointer_icon_state = "red_laser"
|
||||
/obj/item/device/laser_pointer/green
|
||||
/obj/item/laser_pointer/green
|
||||
pointer_icon_state = "green_laser"
|
||||
/obj/item/device/laser_pointer/blue
|
||||
/obj/item/laser_pointer/blue
|
||||
pointer_icon_state = "blue_laser"
|
||||
/obj/item/device/laser_pointer/purple
|
||||
/obj/item/laser_pointer/purple
|
||||
pointer_icon_state = "purple_laser"
|
||||
|
||||
/obj/item/device/laser_pointer/New()
|
||||
/obj/item/laser_pointer/New()
|
||||
..()
|
||||
diode = new(src)
|
||||
if(!pointer_icon_state)
|
||||
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
|
||||
|
||||
/obj/item/device/laser_pointer/Destroy()
|
||||
/obj/item/laser_pointer/Destroy()
|
||||
QDEL_NULL(diode)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/laser_pointer/upgraded/New()
|
||||
/obj/item/laser_pointer/upgraded/New()
|
||||
..()
|
||||
diode = new /obj/item/stock_parts/micro_laser/ultra
|
||||
|
||||
|
||||
|
||||
/obj/item/device/laser_pointer/attack(mob/living/M, mob/user)
|
||||
/obj/item/laser_pointer/attack(mob/living/M, mob/user)
|
||||
laser_act(M, user)
|
||||
|
||||
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params)
|
||||
/obj/item/laser_pointer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stock_parts/micro_laser))
|
||||
if(!diode)
|
||||
user.drop_item()
|
||||
@@ -65,12 +65,12 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params)
|
||||
/obj/item/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params)
|
||||
if(flag) //we're placing the object on a table or in backpack
|
||||
return
|
||||
laser_act(target, user, params)
|
||||
|
||||
/obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user, var/params)
|
||||
/obj/item/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user, var/params)
|
||||
if( !(user in (viewers(7,target))) )
|
||||
return
|
||||
if(!diode)
|
||||
@@ -175,7 +175,7 @@
|
||||
flick_overlay(I, showto, 10)
|
||||
icon_state = "pointer"
|
||||
|
||||
/obj/item/device/laser_pointer/process()
|
||||
/obj/item/laser_pointer/process()
|
||||
if(prob(20 - recharge_locked*5))
|
||||
energy += 1
|
||||
if(energy >= max_energy)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#define LIGHT_BURNED 3
|
||||
|
||||
|
||||
/obj/item/device/lightreplacer
|
||||
/obj/item/lightreplacer
|
||||
|
||||
name = "light replacer"
|
||||
desc = "A device to automatically replace lights. Refill with working lightbulbs."
|
||||
@@ -63,16 +63,16 @@
|
||||
var/decrement = 1
|
||||
var/charge = 1
|
||||
|
||||
/obj/item/device/lightreplacer/New()
|
||||
/obj/item/lightreplacer/New()
|
||||
uses = max_uses / 2
|
||||
failmsg = "The [name]'s refill light blinks red."
|
||||
..()
|
||||
|
||||
/obj/item/device/lightreplacer/examine(mob/user)
|
||||
/obj/item/lightreplacer/examine(mob/user)
|
||||
if(..(user, 2))
|
||||
to_chat(user, "It has [uses] lights and [shards] shards remaining.")
|
||||
|
||||
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user, params)
|
||||
/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = W
|
||||
if(G.amount - decrement >= 0 && uses < max_uses)
|
||||
@@ -133,11 +133,11 @@
|
||||
to_chat(user, "<span class='warning'>[S] contains no bulbs.</span>")
|
||||
return
|
||||
|
||||
/obj/item/device/lightreplacer/emag_act(user as mob)
|
||||
/obj/item/lightreplacer/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
Emag()
|
||||
|
||||
/obj/item/device/lightreplacer/attack_self(mob/user)
|
||||
/obj/item/lightreplacer/attack_self(mob/user)
|
||||
/* // This would probably be a bit OP. If you want it though, uncomment the code.
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
@@ -148,21 +148,21 @@
|
||||
*/
|
||||
to_chat(usr, "It has [uses] lights remaining.")
|
||||
|
||||
/obj/item/device/lightreplacer/update_icon()
|
||||
/obj/item/lightreplacer/update_icon()
|
||||
icon_state = "lightreplacer[emagged]"
|
||||
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Use(var/mob/user)
|
||||
/obj/item/lightreplacer/proc/Use(var/mob/user)
|
||||
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
AddUses(-1)
|
||||
return 1
|
||||
|
||||
// Negative numbers will subtract
|
||||
/obj/item/device/lightreplacer/proc/AddUses(var/amount = 1)
|
||||
/obj/item/lightreplacer/proc/AddUses(var/amount = 1)
|
||||
uses = min(max(uses + amount, 0), max_uses)
|
||||
|
||||
/obj/item/device/lightreplacer/proc/AddShards(amount = 1)
|
||||
/obj/item/lightreplacer/proc/AddShards(amount = 1)
|
||||
shards += amount
|
||||
var/recycled_lights = round(shards / recycle)
|
||||
if(recycled_lights > 0)
|
||||
@@ -170,13 +170,13 @@
|
||||
shards = shards % recycle
|
||||
return recycled_lights
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Charge(var/mob/user)
|
||||
/obj/item/lightreplacer/proc/Charge(var/mob/user)
|
||||
charge += 1
|
||||
if(charge > 7)
|
||||
AddUses(1)
|
||||
charge = 1
|
||||
|
||||
/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||
/obj/item/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||
|
||||
if(target.status != LIGHT_OK)
|
||||
if(CanUse(U))
|
||||
@@ -221,7 +221,7 @@
|
||||
to_chat(U, "There is a working [target.fitting] already inserted.")
|
||||
return
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Emag()
|
||||
/obj/item/lightreplacer/proc/Emag()
|
||||
emagged = !emagged
|
||||
playsound(src.loc, "sparks", 100, 1)
|
||||
if(emagged)
|
||||
@@ -232,12 +232,12 @@
|
||||
|
||||
//Can you use it?
|
||||
|
||||
/obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
/obj/item/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
J.put_in_cart(src, user)
|
||||
J.myreplacer = src
|
||||
J.update_icon()
|
||||
|
||||
/obj/item/device/lightreplacer/proc/CanUse(var/mob/living/user)
|
||||
/obj/item/lightreplacer/proc/CanUse(var/mob/living/user)
|
||||
src.add_fingerprint(user)
|
||||
//Not sure what else to check for. Maybe if clumsy?
|
||||
if(uses > 0)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/machineprototype
|
||||
/obj/item/machineprototype
|
||||
name = "machine prototype"
|
||||
desc = "A complicated machine prototype. You have no idea how it works."
|
||||
icon = 'icons/obj/machineprototype.dmi'
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/megaphone
|
||||
/obj/item/megaphone
|
||||
name = "megaphone"
|
||||
desc = "A device used to project your voice. Loudly."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "megaphone"
|
||||
item_state = "radio"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -11,7 +12,7 @@
|
||||
var/insults = 0
|
||||
var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!")
|
||||
|
||||
/obj/item/device/megaphone/attack_self(mob/living/user as mob)
|
||||
/obj/item/megaphone/attack_self(mob/living/user as mob)
|
||||
if(user.client && (user.client.prefs.muted & MUTE_IC))
|
||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
||||
return
|
||||
@@ -56,12 +57,12 @@
|
||||
spawn(20)
|
||||
spamcheck = 0
|
||||
|
||||
/obj/item/device/megaphone/proc/saymsg(mob/living/user as mob, message)
|
||||
/obj/item/megaphone/proc/saymsg(mob/living/user as mob, message)
|
||||
audible_message("<span class='game say'><span class='name'>[user]</span> broadcasts, <span class='reallybig'>\"[message]\"</span></span>", hearing_distance = 14)
|
||||
for(var/obj/O in oview(14, get_turf(src)))
|
||||
O.hear_talk(user, "<span class='reallybig'>[message]</span>")
|
||||
|
||||
/obj/item/device/megaphone/emag_act(user as mob)
|
||||
/obj/item/megaphone/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
emagged = 1
|
||||
|
||||
@@ -8,9 +8,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/obj/item/device/multitool
|
||||
/obj/item/multitool
|
||||
name = "multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "multitool"
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
@@ -25,18 +26,18 @@
|
||||
var/shows_wire_information = FALSE // shows what a wire does if set to TRUE
|
||||
var/obj/machinery/buffer // simple machine buffer for device linkage
|
||||
|
||||
/obj/item/device/multitool/proc/IsBufferA(var/typepath)
|
||||
/obj/item/multitool/proc/IsBufferA(var/typepath)
|
||||
if(!buffer)
|
||||
return 0
|
||||
return istype(buffer,typepath)
|
||||
|
||||
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
|
||||
|
||||
/obj/item/device/multitool/Destroy()
|
||||
/obj/item/multitool/Destroy()
|
||||
buffer = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/ai_detect
|
||||
/obj/item/multitool/ai_detect
|
||||
var/track_cooldown = 0
|
||||
var/track_delay = 10 //How often it checks for proximity
|
||||
var/detect_state = PROXIMITY_NONE
|
||||
@@ -44,15 +45,15 @@
|
||||
var/rangewarning = 20 //Glows yellow when inside
|
||||
origin_tech = "magnets=1;engineering=2;syndicate=1"
|
||||
|
||||
/obj/item/device/multitool/ai_detect/New()
|
||||
/obj/item/multitool/ai_detect/New()
|
||||
..()
|
||||
processing_objects += src
|
||||
|
||||
/obj/item/device/multitool/ai_detect/Destroy()
|
||||
/obj/item/multitool/ai_detect/Destroy()
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/ai_detect/process()
|
||||
/obj/item/multitool/ai_detect/process()
|
||||
if(track_cooldown > world.time)
|
||||
return
|
||||
detect_state = PROXIMITY_NONE
|
||||
@@ -60,7 +61,7 @@
|
||||
icon_state = "[initial(icon_state)][detect_state]"
|
||||
track_cooldown = world.time + track_delay
|
||||
|
||||
/obj/item/device/multitool/ai_detect/proc/multitool_detect()
|
||||
/obj/item/multitool/ai_detect/proc/multitool_detect()
|
||||
var/turf/our_turf = get_turf(src)
|
||||
for(var/mob/living/silicon/ai/AI in ai_list)
|
||||
if(AI.cameraFollow == src)
|
||||
@@ -80,12 +81,12 @@
|
||||
detect_state = PROXIMITY_NEAR
|
||||
break
|
||||
|
||||
/obj/item/device/multitool/ai_detect/admin
|
||||
/obj/item/multitool/ai_detect/admin
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item?
|
||||
track_delay = 5
|
||||
shows_wire_information = TRUE
|
||||
|
||||
/obj/item/device/multitool/ai_detect/admin/multitool_detect()
|
||||
/obj/item/multitool/ai_detect/admin/multitool_detect()
|
||||
var/turf/our_turf = get_turf(src)
|
||||
for(var/mob/J in urange(rangewarning,our_turf))
|
||||
if(check_rights(R_ADMIN, 0, J))
|
||||
@@ -95,12 +96,12 @@
|
||||
detect_state = PROXIMITY_ON_SCREEN
|
||||
break
|
||||
|
||||
/obj/item/device/multitool/cyborg
|
||||
/obj/item/multitool/cyborg
|
||||
name = "multitool"
|
||||
desc = "Optimised and stripped-down version of a regular multitool."
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/device/multitool/abductor
|
||||
/obj/item/multitool/abductor
|
||||
name = "alien multitool"
|
||||
desc = "An omni-technological interface."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/paicard
|
||||
/obj/item/paicard
|
||||
name = "personal AI device"
|
||||
icon = 'icons/obj/aicards.dmi'
|
||||
icon_state = "pai"
|
||||
@@ -8,34 +8,34 @@
|
||||
origin_tech = "programming=2"
|
||||
var/request_cooldown = 5 // five seconds
|
||||
var/last_request
|
||||
var/obj/item/device/radio/radio
|
||||
var/obj/item/radio/radio
|
||||
var/looking_for_personality = 0
|
||||
var/mob/living/silicon/pai/pai
|
||||
var/list/faction = list("neutral") // The factions the pAI will inherit from the card
|
||||
|
||||
/obj/item/device/paicard/syndicate
|
||||
/obj/item/paicard/syndicate
|
||||
name = "syndicate personal AI device"
|
||||
faction = list("syndicate")
|
||||
|
||||
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
|
||||
/obj/item/paicard/relaymove(var/mob/user, var/direction)
|
||||
if(user.stat || user.stunned)
|
||||
return
|
||||
var/obj/item/rig/rig = get_rig()
|
||||
if(istype(rig))
|
||||
rig.forced_move(direction, user)
|
||||
|
||||
/obj/item/device/paicard/New()
|
||||
/obj/item/paicard/New()
|
||||
..()
|
||||
overlays += "pai-off"
|
||||
|
||||
/obj/item/device/paicard/Destroy()
|
||||
/obj/item/paicard/Destroy()
|
||||
if(pai)
|
||||
pai.ghostize()
|
||||
QDEL_NULL(pai)
|
||||
QDEL_NULL(radio)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/paicard/attack_self(mob/user)
|
||||
/obj/item/paicard/attack_self(mob/user)
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
@@ -231,7 +231,7 @@
|
||||
onclose(user, "paicard")
|
||||
return
|
||||
|
||||
/obj/item/device/paicard/Topic(href, href_list)
|
||||
/obj/item/paicard/Topic(href, href_list)
|
||||
|
||||
var/mob/U = usr
|
||||
|
||||
@@ -298,18 +298,18 @@
|
||||
// WIRE_RECEIVE = 2
|
||||
// WIRE_TRANSMIT = 4
|
||||
|
||||
/obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
||||
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
||||
pai = personality
|
||||
overlays += "pai-happy"
|
||||
|
||||
/obj/item/device/paicard/proc/removePersonality()
|
||||
/obj/item/paicard/proc/removePersonality()
|
||||
pai = null
|
||||
overlays.Cut()
|
||||
overlays += "pai-off"
|
||||
|
||||
/obj/item/device/paicard
|
||||
/obj/item/paicard
|
||||
var/current_emotion = 1
|
||||
/obj/item/device/paicard/proc/setEmotion(var/emotion)
|
||||
/obj/item/paicard/proc/setEmotion(var/emotion)
|
||||
if(pai)
|
||||
overlays.Cut()
|
||||
switch(emotion)
|
||||
@@ -324,17 +324,17 @@
|
||||
if(9) overlays += "pai-what"
|
||||
current_emotion = emotion
|
||||
|
||||
/obj/item/device/paicard/proc/alertUpdate()
|
||||
/obj/item/paicard/proc/alertUpdate()
|
||||
var/turf/T = get_turf_or_move(loc)
|
||||
for(var/mob/M in viewers(T))
|
||||
M.show_message("<span class='notice'>[src] flashes a message across its screen, \"Additional personalities available for download.\"</span>", 3, "<span class='notice'>[src] bleeps electronically.</span>", 2)
|
||||
|
||||
/obj/item/device/paicard/emp_act(severity)
|
||||
/obj/item/paicard/emp_act(severity)
|
||||
for(var/mob/M in src)
|
||||
M.emp_act(severity)
|
||||
..()
|
||||
|
||||
/obj/item/device/paicard/ex_act(severity)
|
||||
/obj/item/paicard/ex_act(severity)
|
||||
if(pai)
|
||||
pai.ex_act(severity)
|
||||
else
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/pipe_painter
|
||||
/obj/item/pipe_painter
|
||||
name = "pipe painter"
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "labeler1"
|
||||
@@ -6,14 +6,14 @@
|
||||
var/list/modes
|
||||
var/mode
|
||||
|
||||
/obj/item/device/pipe_painter/New()
|
||||
/obj/item/pipe_painter/New()
|
||||
..()
|
||||
modes = new()
|
||||
for(var/C in pipe_colors)
|
||||
modes += "[C]"
|
||||
mode = pick(modes)
|
||||
|
||||
/obj/item/device/pipe_painter/afterattack(atom/A, mob/user as mob)
|
||||
/obj/item/pipe_painter/afterattack(atom/A, mob/user as mob)
|
||||
if(!istype(A,/obj/machinery/atmospherics/pipe) || istype(A,/obj/machinery/atmospherics/pipe/simple/heat_exchanging) || istype(A,/obj/machinery/atmospherics/pipe/simple/insulated) || !in_range(user, A))
|
||||
return
|
||||
var/obj/machinery/atmospherics/pipe/P = A
|
||||
@@ -25,9 +25,9 @@
|
||||
|
||||
P.change_color(pipe_colors[mode])
|
||||
|
||||
/obj/item/device/pipe_painter/attack_self(mob/user as mob)
|
||||
/obj/item/pipe_painter/attack_self(mob/user as mob)
|
||||
mode = input("Which colour do you want to use?", "Pipe Painter", mode) in modes
|
||||
|
||||
/obj/item/device/pipe_painter/examine(mob/user)
|
||||
/obj/item/pipe_painter/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "It is in [mode] mode.")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/pizza_bomb
|
||||
/obj/item/pizza_bomb
|
||||
name = "pizza box"
|
||||
desc = "A box suited for pizzas."
|
||||
icon = 'icons/obj/food/food.dmi'
|
||||
@@ -11,7 +11,7 @@
|
||||
var/correct_wire
|
||||
var/armer //Used for admin purposes
|
||||
|
||||
/obj/item/device/pizza_bomb/attack_self(mob/user)
|
||||
/obj/item/pizza_bomb/attack_self(mob/user)
|
||||
if(disarmed)
|
||||
to_chat(user, "<span class='notice'>\The [src] is disarmed.</span>")
|
||||
return
|
||||
@@ -48,7 +48,7 @@
|
||||
sleep(timer)
|
||||
return go_boom()
|
||||
|
||||
/obj/item/device/pizza_bomb/proc/go_boom()
|
||||
/obj/item/pizza_bomb/proc/go_boom()
|
||||
if(disarmed)
|
||||
visible_message("<span class='danger'>[bicon(src)] Sparks briefly jump out of the [correct_wire] wire on \the [src], but it's disarmed!")
|
||||
return
|
||||
@@ -57,7 +57,7 @@
|
||||
explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/pizza_bomb/attackby(var/obj/item/I, var/mob/user, params)
|
||||
/obj/item/pizza_bomb/attackby(var/obj/item/I, var/mob/user, params)
|
||||
if(istype(I, /obj/item/wirecutters) && primed)
|
||||
to_chat(user, "<span class='danger'>Oh God, what wire do you cut?!</span>")
|
||||
var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires
|
||||
@@ -96,6 +96,6 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/device/pizza_bomb/New()
|
||||
/obj/item/pizza_bomb/New()
|
||||
..()
|
||||
correct_wire = pick(wires)
|
||||
@@ -1,8 +1,9 @@
|
||||
// Powersink - used to drain station power
|
||||
|
||||
/obj/item/device/powersink
|
||||
/obj/item/powersink
|
||||
name = "power sink"
|
||||
desc = "A nulling power sink which drains energy from electrical systems."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "powersink0"
|
||||
item_state = "electronic"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
@@ -24,14 +25,14 @@
|
||||
var/datum/powernet/PN // Our powernet
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
|
||||
/obj/item/device/powersink/Destroy()
|
||||
/obj/item/powersink/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
processing_power_items.Remove(src)
|
||||
PN = null
|
||||
attached = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
|
||||
/obj/item/powersink/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(mode == 0)
|
||||
var/turf/T = loc
|
||||
@@ -64,10 +65,10 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/device/powersink/attack_ai()
|
||||
/obj/item/powersink/attack_ai()
|
||||
return
|
||||
|
||||
/obj/item/device/powersink/attack_hand(var/mob/user)
|
||||
/obj/item/powersink/attack_hand(var/mob/user)
|
||||
switch(mode)
|
||||
if(0)
|
||||
..()
|
||||
@@ -85,7 +86,7 @@
|
||||
processing_objects.Remove(src)
|
||||
processing_power_items.Remove(src)
|
||||
|
||||
/obj/item/device/powersink/pwr_drain()
|
||||
/obj/item/powersink/pwr_drain()
|
||||
if(!attached)
|
||||
return 0
|
||||
|
||||
@@ -120,7 +121,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/powersink/process()
|
||||
/obj/item/powersink/process()
|
||||
drained_this_tick = 0
|
||||
power_drained -= min(dissipation_rate, power_drained)
|
||||
if(power_drained > max_power * 0.98)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/radio/beacon
|
||||
/obj/item/radio/beacon
|
||||
name = "Tracking Beacon"
|
||||
desc = "A beacon used by a teleporter."
|
||||
icon_state = "beacon"
|
||||
@@ -8,29 +8,29 @@
|
||||
var/emagged = 0
|
||||
var/syndicate = 0
|
||||
|
||||
/obj/item/device/radio/beacon/New()
|
||||
/obj/item/radio/beacon/New()
|
||||
..()
|
||||
code = "[code] ([beacons.len + 1])"
|
||||
beacons += src
|
||||
|
||||
/obj/item/device/radio/beacon/Destroy()
|
||||
/obj/item/radio/beacon/Destroy()
|
||||
beacons -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/beacon/emag_act(user as mob)
|
||||
/obj/item/radio/beacon/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
syndicate = 1
|
||||
to_chat(user, "<span class='notice'>The This beacon now only be locked on to by emagged teleporters!</span>")
|
||||
|
||||
/obj/item/device/radio/beacon/hear_talk()
|
||||
/obj/item/radio/beacon/hear_talk()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/radio/beacon/send_hear()
|
||||
/obj/item/radio/beacon/send_hear()
|
||||
return null
|
||||
|
||||
/obj/item/device/radio/beacon/verb/alter_signal(t as text)
|
||||
/obj/item/radio/beacon/verb/alter_signal(t as text)
|
||||
set name = "Alter Beacon's Signal"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
@@ -44,19 +44,19 @@
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/item/device/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
|
||||
/obj/item/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
|
||||
proc/digest_delay()
|
||||
spawn(600)
|
||||
qdel(src)
|
||||
|
||||
// SINGULO BEACON SPAWNER
|
||||
/obj/item/device/radio/beacon/syndicate
|
||||
/obj/item/radio/beacon/syndicate
|
||||
name = "suspicious beacon"
|
||||
desc = "A label on it reads: <i>Activate to have a singularity beacon teleported to your location</i>."
|
||||
origin_tech = "bluespace=6;syndicate=5"
|
||||
syndicate = 1
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob)
|
||||
/obj/item/radio/beacon/syndicate/attack_self(mob/user as mob)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
|
||||
@@ -64,12 +64,12 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate/bomb
|
||||
/obj/item/radio/beacon/syndicate/bomb
|
||||
name = "suspicious beacon"
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a high-ordinance explosive to your location</i>."
|
||||
origin_tech = "bluespace=5;syndicate=5"
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate/bomb/attack_self(mob/user as mob)
|
||||
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user as mob)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/syndicatebomb( user.loc )
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/radio/electropack
|
||||
/obj/item/radio/electropack
|
||||
name = "electropack"
|
||||
desc = "Dance my monkeys! DANCE!!!"
|
||||
icon_state = "electropack0"
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
is_special = 1
|
||||
|
||||
/obj/item/device/radio/electropack/attack_hand(mob/user as mob)
|
||||
/obj/item/radio/electropack/attack_hand(mob/user as mob)
|
||||
if(src == user.back)
|
||||
to_chat(user, "<span class='notice'>You need help taking this off!</span>")
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/radio/electropack/Destroy()
|
||||
/obj/item/radio/electropack/Destroy()
|
||||
if(istype(src.loc, /obj/item/assembly/shock_kit))
|
||||
var/obj/item/assembly/shock_kit/S = src.loc
|
||||
if(S.part1 == src)
|
||||
@@ -28,7 +28,7 @@
|
||||
master = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/electropack/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
/obj/item/radio/electropack/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/clothing/head/helmet))
|
||||
if(!b_stat)
|
||||
@@ -54,7 +54,7 @@
|
||||
if(src.flags & NODROP)
|
||||
A.flags |= NODROP
|
||||
|
||||
/obj/item/device/radio/electropack/Topic(href, href_list)
|
||||
/obj/item/radio/electropack/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/item/device/radio/electropack/receive_signal(datum/signal/signal)
|
||||
/obj/item/radio/electropack/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.encryption != code)
|
||||
return
|
||||
|
||||
@@ -98,14 +98,14 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/radio/electropack/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
/obj/item/radio/electropack/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "radio_electro.tmpl", "[name]", 400, 500)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/item/device/radio/electropack/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
/obj/item/radio/electropack/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
|
||||
data["power"] = on
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
/obj/item/device/encryptionkey/
|
||||
/obj/item/encryptionkey/
|
||||
name = "Standard Encryption Key"
|
||||
desc = "An encyption key for a radio headset. Contains cypherkeys."
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
@@ -13,139 +13,139 @@
|
||||
var/list/channels = list()
|
||||
|
||||
|
||||
/obj/item/device/encryptionkey/New()
|
||||
/obj/item/encryptionkey/New()
|
||||
|
||||
/obj/item/device/encryptionkey/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
/obj/item/encryptionkey/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
|
||||
/obj/item/device/encryptionkey/syndicate
|
||||
/obj/item/encryptionkey/syndicate
|
||||
icon_state = "cypherkey"
|
||||
channels = list("Syndicate" = 1)
|
||||
origin_tech = "syndicate=1;engineering=3;bluespace=2"
|
||||
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
|
||||
|
||||
/obj/item/device/encryptionkey/syndteam
|
||||
/obj/item/encryptionkey/syndteam
|
||||
icon_state = "cypherkey"
|
||||
channels = list("SyndTeam" = 1, "Syndicate" = 1)
|
||||
origin_tech = "syndicate=4"
|
||||
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
|
||||
|
||||
/obj/item/device/encryptionkey/binary
|
||||
/obj/item/encryptionkey/binary
|
||||
name = "binary translator key"
|
||||
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
|
||||
icon_state = "cypherkey"
|
||||
translate_binary = 1
|
||||
origin_tech = "syndicate=3;engineering=4;bluespace=3"
|
||||
|
||||
/obj/item/device/encryptionkey/headset_sec
|
||||
/obj/item/encryptionkey/headset_sec
|
||||
name = "Security Radio Encryption Key"
|
||||
icon_state = "sec_cypherkey"
|
||||
channels = list("Security" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_eng
|
||||
/obj/item/encryptionkey/headset_eng
|
||||
name = "Engineering Radio Encryption Key"
|
||||
icon_state = "eng_cypherkey"
|
||||
channels = list("Engineering" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_rob
|
||||
/obj/item/encryptionkey/headset_rob
|
||||
name = "Robotics Radio Encryption Key"
|
||||
icon_state = "rob_cypherkey"
|
||||
channels = list("Engineering" = 1, "Science" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_med
|
||||
/obj/item/encryptionkey/headset_med
|
||||
name = "Medical Radio Encryption Key"
|
||||
icon_state = "med_cypherkey"
|
||||
channels = list("Medical" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_sci
|
||||
/obj/item/encryptionkey/headset_sci
|
||||
name = "Science Radio Encryption Key"
|
||||
icon_state = "sci_cypherkey"
|
||||
channels = list("Science" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_medsci
|
||||
/obj/item/encryptionkey/headset_medsci
|
||||
name = "Medical Research Radio Encryption Key"
|
||||
icon_state = "medsci_cypherkey"
|
||||
channels = list("Medical" = 1, "Science" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_com
|
||||
/obj/item/encryptionkey/headset_com
|
||||
name = "Command Radio Encryption Key"
|
||||
icon_state = "com_cypherkey"
|
||||
channels = list("Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/captain
|
||||
/obj/item/encryptionkey/heads/captain
|
||||
name = "Captain's Encryption Key"
|
||||
icon_state = "cap_cypherkey"
|
||||
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/rd
|
||||
/obj/item/encryptionkey/heads/rd
|
||||
name = "Research Director's Encryption Key"
|
||||
icon_state = "rd_cypherkey"
|
||||
channels = list("Science" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/hos
|
||||
/obj/item/encryptionkey/heads/hos
|
||||
name = "Head of Security's Encryption Key"
|
||||
icon_state = "hos_cypherkey"
|
||||
channels = list("Security" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/ce
|
||||
/obj/item/encryptionkey/heads/ce
|
||||
name = "Chief Engineer's Encryption Key"
|
||||
icon_state = "ce_cypherkey"
|
||||
channels = list("Engineering" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/cmo
|
||||
/obj/item/encryptionkey/heads/cmo
|
||||
name = "Chief Medical Officer's Encryption Key"
|
||||
icon_state = "cmo_cypherkey"
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/hop
|
||||
/obj/item/encryptionkey/heads/hop
|
||||
name = "Head of Personnel's Encryption Key"
|
||||
icon_state = "hop_cypherkey"
|
||||
channels = list("Supply" = 1, "Service" = 1, "Security" = 0, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/ntrep
|
||||
/obj/item/encryptionkey/heads/ntrep
|
||||
name = "Nanotrasen Representative's Encryption Key"
|
||||
icon_state = "com_cypherkey"
|
||||
channels = list("Command" = 1, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/magistrate
|
||||
/obj/item/encryptionkey/heads/magistrate
|
||||
name = "Magistrate's Encryption Key"
|
||||
icon_state = "com_cypherkey"
|
||||
channels = list("Command" = 1, "Security" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/blueshield
|
||||
/obj/item/encryptionkey/heads/blueshield
|
||||
name = "Blueshield's Encryption Key"
|
||||
icon_state = "com_cypherkey"
|
||||
channels = list("Command" = 1)
|
||||
|
||||
/*
|
||||
/obj/item/device/encryptionkey/headset_mine
|
||||
/obj/item/encryptionkey/headset_mine
|
||||
name = "Mining Radio Encryption Key"
|
||||
icon_state = "mine_cypherkey"
|
||||
channels = list("Mining" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/qm
|
||||
/obj/item/encryptionkey/heads/qm
|
||||
name = "Quartermaster's Encryption Key"
|
||||
icon_state = "qm_cypherkey"
|
||||
channels = list("Cargo" = 1, "Mining" = 1)
|
||||
*/
|
||||
/obj/item/device/encryptionkey/headset_cargo
|
||||
/obj/item/encryptionkey/headset_cargo
|
||||
name = "Supply Radio Encryption Key"
|
||||
icon_state = "cargo_cypherkey"
|
||||
channels = list("Supply" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_service
|
||||
/obj/item/encryptionkey/headset_service
|
||||
name = "Service Radio Encryption Key"
|
||||
icon_state = "srv_cypherkey"
|
||||
channels = list("Service" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/ert
|
||||
/obj/item/encryptionkey/ert
|
||||
name = "Nanotrasen ERT Radio Encryption Key"
|
||||
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/centcom
|
||||
/obj/item/encryptionkey/centcom
|
||||
name = "Centcom Radio Encryption Key"
|
||||
channels = list("Response Team" = 1, "Special Ops" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/ai_integrated //ported from bay, this goes 'inside' the AI.
|
||||
/obj/item/encryptionkey/heads/ai_integrated //ported from bay, this goes 'inside' the AI.
|
||||
name = "AI Integrated Encryption Key"
|
||||
desc = "Integrated encryption key"
|
||||
icon_state = "cap_cypherkey"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/radio/headset
|
||||
/obj/item/radio/headset
|
||||
name = "radio headset"
|
||||
desc = "An updated, modular intercom that fits over the head. Takes encryption keys."
|
||||
var/radio_desc = ""
|
||||
@@ -11,17 +11,17 @@
|
||||
slot_flags = SLOT_EARS
|
||||
var/translate_binary = 0
|
||||
var/translate_hive = 0
|
||||
var/obj/item/device/encryptionkey/keyslot1 = null
|
||||
var/obj/item/device/encryptionkey/keyslot2 = null
|
||||
var/obj/item/encryptionkey/keyslot1 = null
|
||||
var/obj/item/encryptionkey/keyslot2 = null
|
||||
|
||||
var/ks1type = null
|
||||
var/ks2type = null
|
||||
|
||||
/obj/item/device/radio/headset/New()
|
||||
/obj/item/radio/headset/New()
|
||||
..()
|
||||
internal_channels.Cut()
|
||||
|
||||
/obj/item/device/radio/headset/initialize()
|
||||
/obj/item/radio/headset/initialize()
|
||||
..()
|
||||
|
||||
if(ks1type)
|
||||
@@ -31,22 +31,22 @@
|
||||
|
||||
recalculateChannels(1)
|
||||
|
||||
/obj/item/device/radio/headset/Destroy()
|
||||
/obj/item/radio/headset/Destroy()
|
||||
QDEL_NULL(keyslot1)
|
||||
QDEL_NULL(keyslot2)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/headset/list_channels(var/mob/user)
|
||||
/obj/item/radio/headset/list_channels(var/mob/user)
|
||||
return list_secure_channels()
|
||||
|
||||
/obj/item/device/radio/headset/examine(mob/user, var/distance = -1)
|
||||
/obj/item/radio/headset/examine(mob/user, var/distance = -1)
|
||||
if(!(..(user, 1) && radio_desc))
|
||||
return
|
||||
|
||||
to_chat(user, "The following channels are available:")
|
||||
to_chat(user, radio_desc)
|
||||
|
||||
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
|
||||
/obj/item/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
|
||||
if(channel == "special")
|
||||
if(translate_binary)
|
||||
var/datum/language/binary = all_languages["Robot Talk"]
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/headset/is_listening()
|
||||
/obj/item/radio/headset/is_listening()
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(H.l_ear == src || H.r_ear == src)
|
||||
@@ -70,19 +70,19 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/device/radio/headset/alt
|
||||
/obj/item/radio/headset/alt
|
||||
name = "bowman headset"
|
||||
desc = "An updated, modular intercom that fits over the head. Takes encryption keys. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/syndicate
|
||||
/obj/item/radio/headset/syndicate
|
||||
origin_tech = "syndicate=3"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/device/encryptionkey/syndicate
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/device/radio/headset/syndicate/alt //undisguised bowman with flash protection
|
||||
/obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection
|
||||
name = "syndicate headset"
|
||||
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
@@ -90,222 +90,222 @@
|
||||
icon_state = "syndie_headset"
|
||||
item_state = "syndie_headset"
|
||||
|
||||
/obj/item/device/radio/headset/syndicate/syndteam
|
||||
ks1type = /obj/item/device/encryptionkey/syndteam
|
||||
/obj/item/radio/headset/syndicate/syndteam
|
||||
ks1type = /obj/item/encryptionkey/syndteam
|
||||
|
||||
/obj/item/device/radio/headset/syndicate/alt/syndteam
|
||||
ks1type = /obj/item/device/encryptionkey/syndteam
|
||||
/obj/item/radio/headset/syndicate/alt/syndteam
|
||||
ks1type = /obj/item/encryptionkey/syndteam
|
||||
|
||||
/obj/item/device/radio/headset/binary
|
||||
/obj/item/radio/headset/binary
|
||||
origin_tech = "syndicate=3"
|
||||
ks1type = /obj/item/device/encryptionkey/binary
|
||||
ks1type = /obj/item/encryptionkey/binary
|
||||
|
||||
/obj/item/device/radio/headset/headset_sec
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_sec
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/device/radio/headset/headset_sec/alt
|
||||
/obj/item/radio/headset/headset_sec/alt
|
||||
name = "security bowman headset"
|
||||
desc = "This is used by your elite security force. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "sec_headset_alt"
|
||||
item_state = "sec_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/headset_eng
|
||||
/obj/item/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_eng
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/device/radio/headset/headset_rob
|
||||
/obj/item/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
desc = "Made specifically for the roboticists who cannot decide between departments."
|
||||
icon_state = "rob_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_rob
|
||||
ks2type = /obj/item/encryptionkey/headset_rob
|
||||
|
||||
/obj/item/device/radio/headset/headset_med
|
||||
/obj/item/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_med
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/device/radio/headset/headset_sci
|
||||
/obj/item/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
desc = "A sciency headset. Like usual."
|
||||
icon_state = "sci_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_sci
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/device/radio/headset/headset_medsci
|
||||
/obj/item/radio/headset/headset_medsci
|
||||
name = "medical research radio headset"
|
||||
desc = "A headset that is a result of the mating between medical and science."
|
||||
icon_state = "medsci_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_medsci
|
||||
ks2type = /obj/item/encryptionkey/headset_medsci
|
||||
|
||||
/obj/item/device/radio/headset/headset_com
|
||||
/obj/item/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_com
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain
|
||||
/obj/item/radio/headset/heads/captain
|
||||
name = "captain's headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/captain
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain/alt
|
||||
/obj/item/radio/headset/heads/captain/alt
|
||||
name = "\proper the captain's bowman headset"
|
||||
desc = "The headset of the boss. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd
|
||||
/obj/item/radio/headset/heads/rd
|
||||
name = "Research Director's headset"
|
||||
desc = "Headset of the researching God."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/rd
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos
|
||||
/obj/item/radio/headset/heads/hos
|
||||
name = "head of security's headset"
|
||||
desc = "The headset of the man who protects your worthless lives."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hos
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos/alt
|
||||
/obj/item/radio/headset/heads/hos/alt
|
||||
name = "\proper the head of security's bowman headset"
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/heads/ce
|
||||
/obj/item/radio/headset/heads/ce
|
||||
name = "chief engineer's headset"
|
||||
desc = "The headset of the guy who is in charge of morons."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/ce
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/device/radio/headset/heads/cmo
|
||||
/obj/item/radio/headset/heads/cmo
|
||||
name = "chief medical officer's headset"
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/cmo
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/device/radio/headset/heads/hop
|
||||
/obj/item/radio/headset/heads/hop
|
||||
name = "head of personnel's headset"
|
||||
desc = "The headset of the guy who will one day be captain."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hop
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo
|
||||
/obj/item/radio/headset/headset_cargo
|
||||
name = "supply radio headset"
|
||||
desc = "A headset used by the cargo department."
|
||||
icon_state = "cargo_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_cargo
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo/mining
|
||||
/obj/item/radio/headset/headset_cargo/mining
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by shaft miners."
|
||||
icon_state = "mine_headset"
|
||||
|
||||
/obj/item/device/radio/headset/headset_service
|
||||
/obj/item/radio/headset/headset_service
|
||||
name = "service radio headset"
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
|
||||
icon_state = "srv_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_service
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/device/radio/headset/heads/ntrep
|
||||
/obj/item/radio/headset/heads/ntrep
|
||||
name = "nanotrasen representative's headset"
|
||||
desc = "The headset of the Nanotrasen Representative."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/ntrep
|
||||
ks2type = /obj/item/encryptionkey/heads/ntrep
|
||||
|
||||
/obj/item/device/radio/headset/heads/magistrate
|
||||
/obj/item/radio/headset/heads/magistrate
|
||||
name = "magistrate's headset"
|
||||
desc = "The headset of the Magistrate."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/magistrate
|
||||
ks2type = /obj/item/encryptionkey/heads/magistrate
|
||||
|
||||
/obj/item/device/radio/headset/heads/magistrate/alt
|
||||
/obj/item/radio/headset/heads/magistrate/alt
|
||||
name = "\proper magistrate's bowman headset"
|
||||
desc = "The headset of the Magistrate. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/heads/blueshield
|
||||
/obj/item/radio/headset/heads/blueshield
|
||||
name = "blueshield's headset"
|
||||
desc = "The headset of the Blueshield."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/blueshield
|
||||
ks2type = /obj/item/encryptionkey/heads/blueshield
|
||||
|
||||
/obj/item/device/radio/headset/heads/blueshield/alt
|
||||
/obj/item/radio/headset/heads/blueshield/alt
|
||||
name = "\proper blueshield's bowman headset"
|
||||
desc = "The headset of the Blueshield. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/ert
|
||||
/obj/item/radio/headset/ert
|
||||
name = "emergency response team headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/device/radio/headset/ert/alt
|
||||
/obj/item/radio/headset/ert/alt
|
||||
name = "\proper emergency response team's bowman headset"
|
||||
desc = "The headset of the boss. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/centcom
|
||||
/obj/item/radio/headset/centcom
|
||||
name = "\proper centcom officer's bowman headset"
|
||||
desc = "The headset of final authority. Protects ears from flashbangs."
|
||||
flags = EARBANGPROTECT
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
ks2type = /obj/item/device/encryptionkey/centcom
|
||||
ks2type = /obj/item/encryptionkey/centcom
|
||||
|
||||
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "\improper AI subspace transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/ai_integrated
|
||||
ks2type = /obj/item/encryptionkey/heads/ai_integrated
|
||||
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
|
||||
var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu.
|
||||
|
||||
/obj/item/device/radio/headset/heads/ai_integrated/is_listening()
|
||||
/obj/item/radio/headset/heads/ai_integrated/is_listening()
|
||||
if(disabledAi)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/headset/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob)
|
||||
user.set_machine(src)
|
||||
if(!( istype(W, /obj/item/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ ))))
|
||||
if(!( istype(W, /obj/item/screwdriver) || (istype(W, /obj/item/encryptionkey/ ))))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
@@ -331,7 +331,7 @@
|
||||
else
|
||||
to_chat(user, "This headset doesn't have any encryption keys! How useless...")
|
||||
|
||||
if(istype(W, /obj/item/device/encryptionkey/))
|
||||
if(istype(W, /obj/item/encryptionkey/))
|
||||
if(keyslot1 && keyslot2)
|
||||
to_chat(user, "The headset can't hold another key!")
|
||||
return
|
||||
@@ -349,7 +349,7 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/radio/headset/proc/recalculateChannels(var/setDescription = 0)
|
||||
/obj/item/radio/headset/proc/recalculateChannels(var/setDescription = 0)
|
||||
src.channels = list()
|
||||
src.translate_binary = 0
|
||||
src.translate_hive = 0
|
||||
@@ -400,7 +400,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/radio/headset/proc/setupRadioDescription()
|
||||
/obj/item/radio/headset/proc/setupRadioDescription()
|
||||
var/radio_text = ""
|
||||
for(var/i = 1 to channels.len)
|
||||
var/channel = channels[i]
|
||||
@@ -411,8 +411,8 @@
|
||||
|
||||
radio_desc = radio_text
|
||||
|
||||
/obj/item/device/radio/headset/proc/make_syndie() // Turns normal radios into Syndicate radios!
|
||||
/obj/item/radio/headset/proc/make_syndie() // Turns normal radios into Syndicate radios!
|
||||
qdel(keyslot1)
|
||||
keyslot1 = new /obj/item/device/encryptionkey/syndicate
|
||||
keyslot1 = new /obj/item/encryptionkey/syndicate
|
||||
syndie = 1
|
||||
recalculateChannels()
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/radio/intercom
|
||||
/obj/item/radio/intercom
|
||||
name = "station intercom (General)"
|
||||
desc = "Talk through this."
|
||||
icon_state = "intercom"
|
||||
@@ -11,41 +11,41 @@
|
||||
var/last_tick //used to delay the powercheck
|
||||
var/buildstage = 0
|
||||
|
||||
/obj/item/device/radio/intercom/custom
|
||||
/obj/item/radio/intercom/custom
|
||||
name = "station intercom (Custom)"
|
||||
broadcasting = 0
|
||||
listening = 0
|
||||
|
||||
/obj/item/device/radio/intercom/interrogation
|
||||
/obj/item/radio/intercom/interrogation
|
||||
name = "station intercom (Interrogation)"
|
||||
frequency = 1449
|
||||
|
||||
/obj/item/device/radio/intercom/private
|
||||
/obj/item/radio/intercom/private
|
||||
name = "station intercom (Private)"
|
||||
frequency = AI_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/command
|
||||
/obj/item/radio/intercom/command
|
||||
name = "station intercom (Command)"
|
||||
frequency = COMM_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/specops
|
||||
/obj/item/radio/intercom/specops
|
||||
name = "\improper Special Operations intercom"
|
||||
frequency = ERT_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/department
|
||||
/obj/item/radio/intercom/department
|
||||
canhear_range = 5
|
||||
broadcasting = 0
|
||||
listening = 1
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay
|
||||
/obj/item/radio/intercom/department/medbay
|
||||
name = "station intercom (Medbay)"
|
||||
frequency = MED_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/department/security
|
||||
/obj/item/radio/intercom/department/security
|
||||
name = "station intercom (Security)"
|
||||
frequency = SEC_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/New(turf/loc, var/ndir = 0, var/building = 3)
|
||||
/obj/item/radio/intercom/New(turf/loc, var/ndir = 0, var/building = 3)
|
||||
..()
|
||||
buildstage = building
|
||||
if(buildstage)
|
||||
@@ -59,34 +59,34 @@
|
||||
global_intercoms.Add(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay/New()
|
||||
/obj/item/radio/intercom/department/medbay/New()
|
||||
..()
|
||||
internal_channels = default_medbay_channels.Copy()
|
||||
|
||||
/obj/item/device/radio/intercom/department/security/New()
|
||||
/obj/item/radio/intercom/department/security/New()
|
||||
..()
|
||||
internal_channels = list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(SEC_I_FREQ) = list(access_security)
|
||||
)
|
||||
|
||||
/obj/item/device/radio/intercom/syndicate
|
||||
/obj/item/radio/intercom/syndicate
|
||||
name = "illicit intercom"
|
||||
desc = "Talk through this. Evilly"
|
||||
frequency = SYND_FREQ
|
||||
subspace_transmission = 1
|
||||
syndie = 1
|
||||
|
||||
/obj/item/device/radio/intercom/syndicate/New()
|
||||
/obj/item/radio/intercom/syndicate/New()
|
||||
..()
|
||||
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
|
||||
|
||||
/obj/item/device/radio/intercom/pirate
|
||||
/obj/item/radio/intercom/pirate
|
||||
name = "pirate radio intercom"
|
||||
desc = "You wouldn't steal a space shuttle. Piracy. It's a crime!"
|
||||
subspace_transmission = 1
|
||||
|
||||
/obj/item/device/radio/intercom/pirate/New()
|
||||
/obj/item/radio/intercom/pirate/New()
|
||||
..()
|
||||
internal_channels.Cut()
|
||||
internal_channels = list(
|
||||
@@ -103,23 +103,23 @@
|
||||
num2text(SRV_FREQ) = list()
|
||||
)
|
||||
|
||||
/obj/item/device/radio/intercom/Destroy()
|
||||
/obj/item/radio/intercom/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
global_intercoms.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
|
||||
/obj/item/radio/intercom/attack_ai(mob/user as mob)
|
||||
add_hiddenprint(user)
|
||||
add_fingerprint(user)
|
||||
spawn(0)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/attack_hand(mob/user as mob)
|
||||
/obj/item/radio/intercom/attack_hand(mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
spawn(0)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/receive_range(freq, level)
|
||||
/obj/item/radio/intercom/receive_range(freq, level)
|
||||
if(!is_listening())
|
||||
return -1
|
||||
if(!(0 in level))
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
return canhear_range
|
||||
|
||||
/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/item/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
switch(buildstage)
|
||||
if(3)
|
||||
if(iswirecutter(W) && b_stat && wires.IsAllCut())
|
||||
@@ -205,13 +205,13 @@
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
/obj/item/device/radio/intercom/update_icon()
|
||||
/obj/item/radio/intercom/update_icon()
|
||||
if(!circuitry_installed)
|
||||
icon_state="intercom-frame"
|
||||
return
|
||||
icon_state = "intercom[!on?"-p":""][b_stat ? "-open":""]"
|
||||
|
||||
/obj/item/device/radio/intercom/process()
|
||||
/obj/item/radio/intercom/process()
|
||||
if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0))
|
||||
last_tick = world.timeofday
|
||||
|
||||
@@ -237,28 +237,28 @@
|
||||
toolspeed = 1
|
||||
usesound = 'sound/items/Deconstruct.ogg'
|
||||
|
||||
/obj/item/device/radio/intercom/locked
|
||||
/obj/item/radio/intercom/locked
|
||||
var/locked_frequency
|
||||
|
||||
/obj/item/device/radio/intercom/locked/set_frequency(var/frequency)
|
||||
/obj/item/radio/intercom/locked/set_frequency(var/frequency)
|
||||
if(frequency == locked_frequency)
|
||||
..(locked_frequency)
|
||||
|
||||
/obj/item/device/radio/intercom/locked/list_channels()
|
||||
/obj/item/radio/intercom/locked/list_channels()
|
||||
return ""
|
||||
|
||||
/obj/item/device/radio/intercom/locked/ai_private
|
||||
/obj/item/radio/intercom/locked/ai_private
|
||||
name = "\improper AI intercom"
|
||||
frequency = AI_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/locked/confessional
|
||||
/obj/item/radio/intercom/locked/confessional
|
||||
name = "confessional intercom"
|
||||
frequency = 1480
|
||||
|
||||
/obj/item/device/radio/intercom/locked/prison
|
||||
/obj/item/radio/intercom/locked/prison
|
||||
name = "\improper prison intercom"
|
||||
desc = "Talk through this. It looks like it has been modified to not broadcast."
|
||||
|
||||
/obj/item/device/radio/intercom/locked/prison/New()
|
||||
/obj/item/radio/intercom/locked/prison/New()
|
||||
..()
|
||||
wires.CutWireIndex(WIRE_TRANSMIT)
|
||||
|
||||
@@ -19,7 +19,7 @@ var/global/list/default_medbay_channels = list(
|
||||
num2text(MED_I_FREQ) = list(access_medical)
|
||||
)
|
||||
|
||||
/obj/item/device/radio
|
||||
/obj/item/radio
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
name = "station bounced radio"
|
||||
suffix = "\[3\]"
|
||||
@@ -58,20 +58,20 @@ var/global/list/default_medbay_channels = list(
|
||||
var/list/datum/radio_frequency/secure_radio_connections = new
|
||||
|
||||
|
||||
/obj/item/device/radio/proc/set_frequency(new_frequency)
|
||||
/obj/item/radio/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
|
||||
/obj/item/device/radio/New()
|
||||
/obj/item/radio/New()
|
||||
..()
|
||||
wires = new(src)
|
||||
|
||||
internal_channels = default_internal_channels.Copy()
|
||||
global_radios |= src
|
||||
|
||||
/obj/item/device/radio/Destroy()
|
||||
/obj/item/radio/Destroy()
|
||||
QDEL_NULL(wires)
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
@@ -83,7 +83,7 @@ var/global/list/default_medbay_channels = list(
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/radio/initialize()
|
||||
/obj/item/radio/initialize()
|
||||
if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ)
|
||||
frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
|
||||
set_frequency(frequency)
|
||||
@@ -91,14 +91,14 @@ var/global/list/default_medbay_channels = list(
|
||||
for(var/ch_name in channels)
|
||||
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
|
||||
|
||||
/obj/item/device/radio/attack_ghost(mob/user)
|
||||
/obj/item/radio/attack_ghost(mob/user)
|
||||
return interact(user)
|
||||
|
||||
/obj/item/device/radio/attack_self(mob/user as mob)
|
||||
/obj/item/radio/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/radio/interact(mob/user)
|
||||
/obj/item/radio/interact(mob/user)
|
||||
if(!user)
|
||||
return 0
|
||||
|
||||
@@ -107,14 +107,14 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return ui_interact(user)
|
||||
|
||||
/obj/item/device/radio/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
/obj/item/radio/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 550)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/item/device/radio/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
/obj/item/radio/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
|
||||
data["mic_status"] = broadcasting
|
||||
@@ -136,10 +136,10 @@ var/global/list/default_medbay_channels = list(
|
||||
return data
|
||||
|
||||
|
||||
/obj/item/device/radio/proc/list_channels(var/mob/user)
|
||||
/obj/item/radio/proc/list_channels(var/mob/user)
|
||||
return list_internal_channels(user)
|
||||
|
||||
/obj/item/device/radio/proc/list_secure_channels(var/mob/user)
|
||||
/obj/item/radio/proc/list_secure_channels(var/mob/user)
|
||||
var/dat[0]
|
||||
|
||||
for(var/ch_name in channels)
|
||||
@@ -150,7 +150,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return dat
|
||||
|
||||
/obj/item/device/radio/proc/list_internal_channels(var/mob/user)
|
||||
/obj/item/radio/proc/list_internal_channels(var/mob/user)
|
||||
var/dat[0]
|
||||
for(var/internal_chan in internal_channels)
|
||||
if(has_channel_access(user, internal_chan))
|
||||
@@ -158,7 +158,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return dat
|
||||
|
||||
/obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq)
|
||||
/obj/item/radio/proc/has_channel_access(var/mob/user, var/freq)
|
||||
if(!user)
|
||||
return 0
|
||||
|
||||
@@ -178,13 +178,13 @@ var/global/list/default_medbay_channels = list(
|
||||
/mob/dead/observer/has_internal_radio_channel_access(var/mob/user, var/list/req_one_accesses)
|
||||
return can_admin_interact()
|
||||
|
||||
/obj/item/device/radio/proc/ToggleBroadcast()
|
||||
/obj/item/radio/proc/ToggleBroadcast()
|
||||
broadcasting = !broadcasting && !(wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL))
|
||||
|
||||
/obj/item/device/radio/proc/ToggleReception()
|
||||
/obj/item/radio/proc/ToggleReception()
|
||||
listening = !listening && !(wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL))
|
||||
|
||||
/obj/item/device/radio/Topic(href, href_list)
|
||||
/obj/item/radio/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -231,7 +231,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = config.contact_levels, var/role = "Unknown") //BS12 EDIT
|
||||
/obj/item/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = config.contact_levels, var/role = "Unknown") //BS12 EDIT
|
||||
var/datum/radio_frequency/connection = null
|
||||
if(channel && channels && channels.len > 0)
|
||||
if(channel == "department")
|
||||
@@ -249,7 +249,7 @@ var/global/list/default_medbay_channels = list(
|
||||
A.role = role
|
||||
A.message = message
|
||||
var/jammed = FALSE
|
||||
for(var/obj/item/device/jammer/jammer in active_jammers)
|
||||
for(var/obj/item/jammer/jammer in active_jammers)
|
||||
if(get_dist(get_turf(src), get_turf(jammer)) < jammer.range)
|
||||
jammed = TRUE
|
||||
break
|
||||
@@ -284,7 +284,7 @@ var/global/list/default_medbay_channels = list(
|
||||
qdel(src)
|
||||
|
||||
// Interprets the message mode when talking into a radio, possibly returning a connection datum
|
||||
/obj/item/device/radio/proc/handle_message_mode(mob/living/M as mob, message, message_mode)
|
||||
/obj/item/radio/proc/handle_message_mode(mob/living/M as mob, message, message_mode)
|
||||
// If a channel isn't specified, send to common.
|
||||
if(!message_mode || message_mode == "headset")
|
||||
return radio_connection
|
||||
@@ -300,7 +300,7 @@ var/global/list/default_medbay_channels = list(
|
||||
// If we were to send to a channel we don't have, drop it.
|
||||
return RADIO_CONNECTION_FAIL
|
||||
|
||||
/obj/item/device/radio/talk_into(mob/living/M as mob, message, channel, var/verb = "says", var/datum/language/speaking = null)
|
||||
/obj/item/radio/talk_into(mob/living/M as mob, message, channel, var/verb = "says", var/datum/language/speaking = null)
|
||||
if(!on)
|
||||
return 0 // the device has to be on
|
||||
// Fix for permacell radios, but kinda eh about actually fixing them.
|
||||
@@ -341,7 +341,7 @@ var/global/list/default_medbay_channels = list(
|
||||
var/turf/position = get_turf(src)
|
||||
|
||||
var/jammed = FALSE
|
||||
for(var/obj/item/device/jammer/jammer in active_jammers)
|
||||
for(var/obj/item/jammer/jammer in active_jammers)
|
||||
if(get_dist(position, get_turf(jammer)) < jammer.range)
|
||||
jammed = TRUE
|
||||
break
|
||||
@@ -459,7 +459,7 @@ var/global/list/default_medbay_channels = list(
|
||||
var/filter_type = 2
|
||||
|
||||
/* --- Intercoms can only broadcast to other intercoms, but bounced radios can broadcast to bounced radios and intercoms --- */
|
||||
if(istype(src, /obj/item/device/radio/intercom))
|
||||
if(istype(src, /obj/item/radio/intercom))
|
||||
filter_type = 1
|
||||
|
||||
|
||||
@@ -519,7 +519,7 @@ var/global/list/default_medbay_channels = list(
|
||||
filter_type, signal.data["compression"], list(position.z), connection.frequency,verb,speaking)
|
||||
|
||||
|
||||
/obj/item/device/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/language/speaking = null)
|
||||
/obj/item/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/language/speaking = null)
|
||||
|
||||
if(broadcasting)
|
||||
if(get_dist(src, M) <= canhear_range)
|
||||
@@ -527,7 +527,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
|
||||
/*
|
||||
/obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message)
|
||||
/obj/item/radio/proc/accept_rad(obj/item/radio/R as obj, message)
|
||||
|
||||
if((R.frequency == frequency && message))
|
||||
return 1
|
||||
@@ -539,7 +539,7 @@ var/global/list/default_medbay_channels = list(
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/device/radio/proc/receive_range(freq, level)
|
||||
/obj/item/radio/proc/receive_range(freq, level)
|
||||
// check if this radio can receive on the given frequency, and if so,
|
||||
// what the range is in which mobs will hear the radio
|
||||
// returns: -1 if can't receive, range otherwise
|
||||
@@ -568,12 +568,12 @@ var/global/list/default_medbay_channels = list(
|
||||
return -1
|
||||
return canhear_range
|
||||
|
||||
/obj/item/device/radio/proc/send_hear(freq, level)
|
||||
/obj/item/radio/proc/send_hear(freq, level)
|
||||
var/range = receive_range(freq, level)
|
||||
if(range > -1)
|
||||
return get_mobs_in_view(canhear_range, src)
|
||||
|
||||
/obj/item/device/radio/proc/is_listening()
|
||||
/obj/item/radio/proc/is_listening()
|
||||
var/is_listening = TRUE
|
||||
if(!on)
|
||||
is_listening = FALSE
|
||||
@@ -584,13 +584,13 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return is_listening
|
||||
|
||||
/obj/item/device/radio/proc/send_announcement()
|
||||
/obj/item/radio/proc/send_announcement()
|
||||
if(is_listening())
|
||||
return get_mobs_in_view(canhear_range, src)
|
||||
|
||||
return null
|
||||
|
||||
/obj/item/device/radio/examine(mob/user, var/distance = -1)
|
||||
/obj/item/radio/examine(mob/user, var/distance = -1)
|
||||
. = ..(user, distance)
|
||||
if((in_range(src, user) || loc == user))
|
||||
if(b_stat)
|
||||
@@ -599,13 +599,13 @@ var/global/list/default_medbay_channels = list(
|
||||
user.show_message("<span class='notice'>\the [src] can not be modified or attached!</span>")
|
||||
return .
|
||||
|
||||
/obj/item/device/radio/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
/obj/item/radio/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
user.set_machine(src)
|
||||
if(!( istype(W, /obj/item/screwdriver) ))
|
||||
return
|
||||
b_stat = !( b_stat )
|
||||
if(!istype(src, /obj/item/device/radio/beacon))
|
||||
if(!istype(src, /obj/item/radio/beacon))
|
||||
if(b_stat)
|
||||
user.show_message("<span class='notice'>The radio can now be attached and modified!</span>")
|
||||
else
|
||||
@@ -616,7 +616,7 @@ var/global/list/default_medbay_channels = list(
|
||||
return
|
||||
else return
|
||||
|
||||
/obj/item/device/radio/emp_act(severity)
|
||||
/obj/item/radio/emp_act(severity)
|
||||
on = 0
|
||||
disable_timer++
|
||||
addtimer(src, "enable_radio", rand(100, 200))
|
||||
@@ -630,7 +630,7 @@ var/global/list/default_medbay_channels = list(
|
||||
channels[ch_name] = 0
|
||||
..()
|
||||
|
||||
/obj/item/device/radio/proc/enable_radio()
|
||||
/obj/item/radio/proc/enable_radio()
|
||||
if(disable_timer > 0)
|
||||
disable_timer--
|
||||
if(!disable_timer)
|
||||
@@ -641,52 +641,52 @@ var/global/list/default_medbay_channels = list(
|
||||
///////////////////////////////
|
||||
//Giving borgs their own radio to have some more room to work with -Sieve
|
||||
|
||||
/obj/item/device/radio/borg
|
||||
/obj/item/radio/borg
|
||||
var/mob/living/silicon/robot/myborg = null // Cyborg which owns this radio. Used for power checks
|
||||
var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key
|
||||
var/obj/item/encryptionkey/keyslot = null//Borg radios can handle a single encryption key
|
||||
var/shut_up = 1
|
||||
icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component.
|
||||
icon_state = "radio"
|
||||
canhear_range = 0
|
||||
subspace_transmission = 1
|
||||
|
||||
/obj/item/device/radio/borg/syndicate
|
||||
/obj/item/radio/borg/syndicate
|
||||
syndie = 1
|
||||
keyslot = new /obj/item/device/encryptionkey/syndicate
|
||||
keyslot = new /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/device/radio/borg/syndicate/CanUseTopic(mob/user, datum/topic_state/state)
|
||||
/obj/item/radio/borg/syndicate/CanUseTopic(mob/user, datum/topic_state/state)
|
||||
. = ..()
|
||||
if(. == STATUS_UPDATE && istype(user, /mob/living/silicon/robot/syndicate))
|
||||
. = STATUS_INTERACTIVE
|
||||
|
||||
/obj/item/device/radio/borg/Destroy()
|
||||
/obj/item/radio/borg/Destroy()
|
||||
myborg = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/borg/list_channels(var/mob/user)
|
||||
/obj/item/radio/borg/list_channels(var/mob/user)
|
||||
return list_secure_channels(user)
|
||||
|
||||
/obj/item/device/radio/borg/syndicate/New()
|
||||
/obj/item/radio/borg/syndicate/New()
|
||||
..()
|
||||
set_frequency(SYND_FREQ)
|
||||
|
||||
/obj/item/device/radio/borg/deathsquad
|
||||
/obj/item/radio/borg/deathsquad
|
||||
|
||||
/obj/item/device/radio/borg/deathsquad/New()
|
||||
/obj/item/radio/borg/deathsquad/New()
|
||||
..()
|
||||
set_frequency(DTH_FREQ)
|
||||
|
||||
/obj/item/device/radio/borg/ert
|
||||
keyslot = new /obj/item/device/encryptionkey/ert
|
||||
/obj/item/radio/borg/ert
|
||||
keyslot = new /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/device/radio/borg/ert/New()
|
||||
/obj/item/radio/borg/ert/New()
|
||||
..()
|
||||
set_frequency(ERT_FREQ)
|
||||
|
||||
/obj/item/device/radio/borg/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
/obj/item/radio/borg/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
if(!( istype(W, /obj/item/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ ))))
|
||||
if(!( istype(W, /obj/item/screwdriver) || (istype(W, /obj/item/encryptionkey/ ))))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
@@ -710,7 +710,7 @@ var/global/list/default_medbay_channels = list(
|
||||
else
|
||||
to_chat(user, "This radio doesn't have any encryption keys!")
|
||||
|
||||
if(istype(W, /obj/item/device/encryptionkey/))
|
||||
if(istype(W, /obj/item/encryptionkey/))
|
||||
if(keyslot)
|
||||
to_chat(user, "The radio can't hold another key!")
|
||||
return
|
||||
@@ -724,7 +724,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/radio/borg/proc/recalculateChannels()
|
||||
/obj/item/radio/borg/proc/recalculateChannels()
|
||||
src.channels = list()
|
||||
src.syndie = 0
|
||||
|
||||
@@ -757,7 +757,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/radio/borg/Topic(href, href_list)
|
||||
/obj/item/radio/borg/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if(href_list["mode"])
|
||||
@@ -787,20 +787,20 @@ var/global/list/default_medbay_channels = list(
|
||||
. = 1
|
||||
|
||||
|
||||
/obj/item/device/radio/borg/interact(mob/user as mob)
|
||||
/obj/item/radio/borg/interact(mob/user as mob)
|
||||
if(!on)
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/radio/borg/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
/obj/item/radio/borg/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 430, 500)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/item/device/radio/borg/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
/obj/item/radio/borg/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
|
||||
data["mic_status"] = broadcasting
|
||||
@@ -823,7 +823,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/device/radio/proc/config(op)
|
||||
/obj/item/radio/proc/config(op)
|
||||
if(radio_controller)
|
||||
for(var/ch_name in channels)
|
||||
radio_controller.remove_object(src, radiochannels[ch_name])
|
||||
@@ -834,19 +834,19 @@ var/global/list/default_medbay_channels = list(
|
||||
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
|
||||
return
|
||||
|
||||
/obj/item/device/radio/off
|
||||
/obj/item/radio/off
|
||||
listening = 0
|
||||
|
||||
/obj/item/device/radio/phone
|
||||
/obj/item/radio/phone
|
||||
broadcasting = 0
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "red_phone"
|
||||
listening = 1
|
||||
name = "phone"
|
||||
|
||||
/obj/item/device/radio/phone/medbay
|
||||
/obj/item/radio/phone/medbay
|
||||
frequency = MED_I_FREQ
|
||||
|
||||
/obj/item/device/radio/phone/medbay/New()
|
||||
/obj/item/radio/phone/medbay/New()
|
||||
..()
|
||||
internal_channels = default_medbay_channels.Copy()
|
||||
|
||||
@@ -8,9 +8,10 @@ PLANT ANALYZER
|
||||
MASS SPECTROMETER
|
||||
REAGENT SCANNER
|
||||
*/
|
||||
/obj/item/device/t_scanner
|
||||
/obj/item/t_scanner
|
||||
name = "T-ray scanner"
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "t-ray0"
|
||||
var/on = 0
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -22,22 +23,22 @@ REAGENT SCANNER
|
||||
var/scan_range = 1
|
||||
var/pulse_duration = 10
|
||||
|
||||
/obj/item/device/t_scanner/longer_pulse
|
||||
/obj/item/t_scanner/longer_pulse
|
||||
pulse_duration = 50
|
||||
|
||||
/obj/item/device/t_scanner/extended_range
|
||||
/obj/item/t_scanner/extended_range
|
||||
scan_range = 3
|
||||
|
||||
/obj/item/device/t_scanner/extended_range/longer_pulse
|
||||
/obj/item/t_scanner/extended_range/longer_pulse
|
||||
scan_range = 3
|
||||
pulse_duration = 50
|
||||
|
||||
/obj/item/device/t_scanner/Destroy()
|
||||
/obj/item/t_scanner/Destroy()
|
||||
if(on)
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/t_scanner/attack_self(mob/user)
|
||||
/obj/item/t_scanner/attack_self(mob/user)
|
||||
|
||||
on = !on
|
||||
icon_state = copytext(icon_state, 1, length(icon_state))+"[on]"
|
||||
@@ -46,13 +47,13 @@ REAGENT SCANNER
|
||||
processing_objects.Add(src)
|
||||
|
||||
|
||||
/obj/item/device/t_scanner/process()
|
||||
/obj/item/t_scanner/process()
|
||||
if(!on)
|
||||
processing_objects.Remove(src)
|
||||
return null
|
||||
scan()
|
||||
|
||||
/obj/item/device/t_scanner/proc/scan()
|
||||
/obj/item/t_scanner/proc/scan()
|
||||
|
||||
for(var/turf/T in range(scan_range, src.loc) )
|
||||
|
||||
@@ -107,8 +108,9 @@ REAGENT SCANNER
|
||||
else
|
||||
user.show_message("<span class='notice'>Subject is not addicted to any reagents.</span>")
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
/obj/item/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "health"
|
||||
item_state = "healthanalyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
@@ -124,7 +126,7 @@ REAGENT SCANNER
|
||||
var/mode = 1;
|
||||
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(( (CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))
|
||||
to_chat(user, text("<span class='warning'>You try to analyze the floor's vitals!</span>"))
|
||||
for(var/mob/O in viewers(M, null))
|
||||
@@ -259,7 +261,7 @@ REAGENT SCANNER
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/healthanalyzer/verb/toggle_mode()
|
||||
/obj/item/healthanalyzer/verb/toggle_mode()
|
||||
set name = "Switch Verbosity"
|
||||
set category = "Object"
|
||||
|
||||
@@ -270,8 +272,8 @@ REAGENT SCANNER
|
||||
if(0)
|
||||
to_chat(usr, "The scanner no longer shows limb damage.")
|
||||
|
||||
/obj/item/device/healthanalyzer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/healthupgrade))
|
||||
/obj/item/healthanalyzer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/healthupgrade))
|
||||
if(upgraded)
|
||||
to_chat(user, "<span class='notice'>You have already installed an upgraded in the [src].</span>")
|
||||
else
|
||||
@@ -281,24 +283,26 @@ REAGENT SCANNER
|
||||
upgraded = 1
|
||||
qdel(W)
|
||||
|
||||
/obj/item/device/healthanalyzer/advanced
|
||||
/obj/item/healthanalyzer/advanced
|
||||
upgraded = 1
|
||||
|
||||
/obj/item/device/healthanalyzer/advanced/New()
|
||||
/obj/item/healthanalyzer/advanced/New()
|
||||
overlays += "advanced"
|
||||
|
||||
|
||||
/obj/item/device/healthupgrade
|
||||
/obj/item/healthupgrade
|
||||
name = "Health Analyzer Upgrade"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "healthupgrade"
|
||||
desc = "An upgrade unit that can be installed on a health analyzer for expanded functionality."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "magnets=2;biotech=2"
|
||||
usesound = 'sound/items/Deconstruct.ogg'
|
||||
|
||||
/obj/item/device/analyzer
|
||||
/obj/item/analyzer
|
||||
desc = "A hand-held environmental scanner which reports current gas levels."
|
||||
name = "analyzer"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "atmos"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -310,7 +314,7 @@ REAGENT SCANNER
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=20)
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
/obj/item/device/analyzer/attack_self(mob/user as mob)
|
||||
/obj/item/analyzer/attack_self(mob/user as mob)
|
||||
|
||||
if(user.stat)
|
||||
return
|
||||
@@ -362,9 +366,10 @@ REAGENT SCANNER
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/mass_spectrometer
|
||||
/obj/item/mass_spectrometer
|
||||
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample. Inject sample with syringe."
|
||||
name = "mass-spectrometer"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "spectrometer"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -380,17 +385,17 @@ REAGENT SCANNER
|
||||
var/scanning = TRUE
|
||||
actions_types = list(/datum/action/item_action/print_report)
|
||||
|
||||
/obj/item/device/mass_spectrometer/New()
|
||||
/obj/item/mass_spectrometer/New()
|
||||
..()
|
||||
create_reagents(5)
|
||||
|
||||
/obj/item/device/mass_spectrometer/on_reagent_change()
|
||||
/obj/item/mass_spectrometer/on_reagent_change()
|
||||
if(reagents.total_volume)
|
||||
icon_state = initial(icon_state) + "_s"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
|
||||
/obj/item/mass_spectrometer/attack_self(mob/user as mob)
|
||||
if(user.stat)
|
||||
return
|
||||
if(!user.IsAdvancedToolUser())
|
||||
@@ -418,13 +423,13 @@ REAGENT SCANNER
|
||||
reagents.clear_reagents()
|
||||
return
|
||||
|
||||
/obj/item/device/mass_spectrometer/adv
|
||||
/obj/item/mass_spectrometer/adv
|
||||
name = "advanced mass-spectrometer"
|
||||
icon_state = "adv_spectrometer"
|
||||
details = 1
|
||||
origin_tech = "magnets=4;biotech=3;plasmatech=3"
|
||||
|
||||
/obj/item/device/mass_spectrometer/proc/print_report()
|
||||
/obj/item/mass_spectrometer/proc/print_report()
|
||||
if(!scanning)
|
||||
scanning = TRUE
|
||||
usr.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
|
||||
@@ -443,12 +448,13 @@ REAGENT SCANNER
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>[src] has no logs or is already in use.</span>")
|
||||
|
||||
/obj/item/device/mass_spectrometer/ui_action_click()
|
||||
/obj/item/mass_spectrometer/ui_action_click()
|
||||
print_report()
|
||||
|
||||
/obj/item/device/reagent_scanner
|
||||
/obj/item/reagent_scanner
|
||||
name = "reagent scanner"
|
||||
desc = "A hand-held reagent scanner which identifies chemical agents."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "spectrometer"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -464,7 +470,7 @@ REAGENT SCANNER
|
||||
var/scanning = 1
|
||||
actions_types = list(/datum/action/item_action/print_report)
|
||||
|
||||
/obj/item/device/reagent_scanner/afterattack(obj/O, mob/user as mob)
|
||||
/obj/item/reagent_scanner/afterattack(obj/O, mob/user as mob)
|
||||
if(user.stat)
|
||||
return
|
||||
if(!user.IsAdvancedToolUser())
|
||||
@@ -489,13 +495,13 @@ REAGENT SCANNER
|
||||
to_chat(user, "<span class='notice'>No significant chemical agents found in [O].</span>")
|
||||
return
|
||||
|
||||
/obj/item/device/reagent_scanner/adv
|
||||
/obj/item/reagent_scanner/adv
|
||||
name = "advanced reagent scanner"
|
||||
icon_state = "adv_spectrometer"
|
||||
details = 1
|
||||
origin_tech = "magnets=4;biotech=3;plasmatech=3"
|
||||
|
||||
/obj/item/device/reagent_scanner/proc/print_report()
|
||||
/obj/item/reagent_scanner/proc/print_report()
|
||||
if(!scanning)
|
||||
usr.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
|
||||
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
|
||||
@@ -514,11 +520,12 @@ REAGENT SCANNER
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>[src] has no logs or is already in use.</span>")
|
||||
|
||||
/obj/item/device/reagent_scanner/ui_action_click()
|
||||
/obj/item/reagent_scanner/ui_action_click()
|
||||
print_report()
|
||||
|
||||
/obj/item/device/slime_scanner
|
||||
/obj/item/slime_scanner
|
||||
name = "slime scanner"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "adv_spectrometer_s"
|
||||
item_state = "analyzer"
|
||||
origin_tech = "biotech=2"
|
||||
@@ -529,7 +536,7 @@ REAGENT SCANNER
|
||||
throw_range = 7
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=20)
|
||||
|
||||
/obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(!isslime(M))
|
||||
user.show_message("<span class='warning'>This device can only scan slimes!</span>", 1)
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/sensor_device
|
||||
/obj/item/sensor_device
|
||||
name = "handheld crew monitor"
|
||||
desc = "A miniature machine that tracks suit sensors across the station."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -8,15 +8,15 @@
|
||||
origin_tech = "programming=3;materials=3;magnets=3"
|
||||
var/datum/nano_module/crew_monitor/crew_monitor
|
||||
|
||||
/obj/item/device/sensor_device/New()
|
||||
/obj/item/sensor_device/New()
|
||||
crew_monitor = new(src)
|
||||
|
||||
/obj/item/device/sensor_device/Destroy()
|
||||
/obj/item/sensor_device/Destroy()
|
||||
QDEL_NULL(crew_monitor)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/sensor_device/attack_self(mob/user as mob)
|
||||
/obj/item/sensor_device/attack_self(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/sensor_device/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
/obj/item/sensor_device/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
crew_monitor.ui_interact(user, ui_key, ui, force_open)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/taperecorder
|
||||
/obj/item/taperecorder
|
||||
name = "universal recorder"
|
||||
desc = "A device that can record to cassette tapes, and play them. It automatically translates the content in playback."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "taperecorder_empty"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -11,33 +12,33 @@
|
||||
var/recording = 0
|
||||
var/playing = 0
|
||||
var/playsleepseconds = 0
|
||||
var/obj/item/device/tape/mytape
|
||||
var/obj/item/tape/mytape
|
||||
var/open_panel = 0
|
||||
var/canprint = 1
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/New()
|
||||
mytape = new /obj/item/device/tape/random(src)
|
||||
/obj/item/taperecorder/New()
|
||||
mytape = new /obj/item/tape/random(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/taperecorder/Destroy()
|
||||
/obj/item/taperecorder/Destroy()
|
||||
QDEL_NULL(mytape)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/taperecorder/examine(mob/user)
|
||||
/obj/item/taperecorder/examine(mob/user)
|
||||
if(..(user, 1))
|
||||
to_chat(user, "The wire panel is [open_panel ? "opened" : "closed"].")
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/attackby(obj/item/I, mob/user)
|
||||
if(!mytape && istype(I, /obj/item/device/tape))
|
||||
/obj/item/taperecorder/attackby(obj/item/I, mob/user)
|
||||
if(!mytape && istype(I, /obj/item/tape))
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
mytape = I
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/taperecorder/proc/eject(mob/user)
|
||||
/obj/item/taperecorder/proc/eject(mob/user)
|
||||
if(mytape)
|
||||
to_chat(user, "<span class='notice'>You remove [mytape] from [src].</span>")
|
||||
stop()
|
||||
@@ -46,11 +47,11 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/fire_act()
|
||||
/obj/item/taperecorder/fire_act()
|
||||
mytape.ruin() //Fires destroy the tape
|
||||
return ..()
|
||||
|
||||
/obj/item/device/taperecorder/attack_hand(mob/user)
|
||||
/obj/item/taperecorder/attack_hand(mob/user)
|
||||
if(loc == user)
|
||||
if(mytape)
|
||||
if(user.l_hand != src && user.r_hand != src)
|
||||
@@ -61,7 +62,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/verb/ejectverb()
|
||||
/obj/item/taperecorder/verb/ejectverb()
|
||||
set name = "Eject Tape"
|
||||
set category = "Object"
|
||||
|
||||
@@ -73,7 +74,7 @@
|
||||
eject(usr)
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/update_icon()
|
||||
/obj/item/taperecorder/update_icon()
|
||||
if(!mytape)
|
||||
icon_state = "taperecorder_empty"
|
||||
else if(recording)
|
||||
@@ -84,7 +85,7 @@
|
||||
icon_state = "taperecorder_idle"
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/hear_talk(mob/living/M as mob, msg)
|
||||
/obj/item/taperecorder/hear_talk(mob/living/M as mob, msg)
|
||||
if(mytape && recording)
|
||||
var/ending = copytext(msg, length(msg))
|
||||
mytape.timestamp += mytape.used_capacity
|
||||
@@ -102,12 +103,12 @@
|
||||
return
|
||||
mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [M.name] says, \"[msg]\""
|
||||
|
||||
/obj/item/device/taperecorder/hear_message(mob/living/M as mob, msg)
|
||||
/obj/item/taperecorder/hear_message(mob/living/M as mob, msg)
|
||||
if(mytape && recording)
|
||||
mytape.timestamp += mytape.used_capacity
|
||||
mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [M.name] [msg]"
|
||||
|
||||
/obj/item/device/taperecorder/verb/record()
|
||||
/obj/item/taperecorder/verb/record()
|
||||
set name = "Start Recording"
|
||||
set category = "Object"
|
||||
|
||||
@@ -140,7 +141,7 @@
|
||||
to_chat(usr, "<span class='notice'>The tape is full.</span>")
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/verb/stop()
|
||||
/obj/item/taperecorder/verb/stop()
|
||||
set name = "Stop"
|
||||
set category = "Object"
|
||||
|
||||
@@ -159,7 +160,7 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/verb/play()
|
||||
/obj/item/taperecorder/verb/play()
|
||||
set name = "Play Tape"
|
||||
set category = "Object"
|
||||
|
||||
@@ -203,7 +204,7 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/attack_self(mob/user)
|
||||
/obj/item/taperecorder/attack_self(mob/user)
|
||||
if(!mytape || mytape.ruined)
|
||||
return
|
||||
if(recording)
|
||||
@@ -212,7 +213,7 @@
|
||||
record()
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/verb/print_transcript()
|
||||
/obj/item/taperecorder/verb/print_transcript()
|
||||
set name = "Print Transcript"
|
||||
set category = "Object"
|
||||
|
||||
@@ -240,13 +241,14 @@
|
||||
canprint = 1
|
||||
|
||||
//empty tape recorders
|
||||
/obj/item/device/taperecorder/empty/New()
|
||||
/obj/item/taperecorder/empty/New()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/tape
|
||||
/obj/item/tape
|
||||
name = "tape"
|
||||
desc = "A magnetic tape that can hold up to ten minutes of content."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "tape_white"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
@@ -259,15 +261,15 @@
|
||||
var/list/timestamp = list()
|
||||
var/ruined = 0
|
||||
|
||||
/obj/item/device/tape/fire_act()
|
||||
/obj/item/tape/fire_act()
|
||||
ruin()
|
||||
|
||||
/obj/item/device/tape/attack_self(mob/user)
|
||||
/obj/item/tape/attack_self(mob/user)
|
||||
if(!ruined)
|
||||
to_chat(user, "<span class='notice'>You pull out all the tape!</span>")
|
||||
ruin()
|
||||
|
||||
/obj/item/device/tape/verb/wipe()
|
||||
/obj/item/tape/verb/wipe()
|
||||
set name = "Wipe Tape"
|
||||
set category = "Object"
|
||||
|
||||
@@ -279,24 +281,24 @@
|
||||
to_chat(usr, "You erase the data from the [src]")
|
||||
clear()
|
||||
|
||||
/obj/item/device/tape/proc/clear()
|
||||
/obj/item/tape/proc/clear()
|
||||
used_capacity = 0
|
||||
storedinfo.Cut()
|
||||
timestamp.Cut()
|
||||
|
||||
/obj/item/device/tape/proc/ruin()
|
||||
/obj/item/tape/proc/ruin()
|
||||
if(!ruined)
|
||||
overlays += "ribbonoverlay"
|
||||
ruined = 1
|
||||
|
||||
|
||||
|
||||
/obj/item/device/tape/proc/fix()
|
||||
/obj/item/tape/proc/fix()
|
||||
overlays -= "ribbonoverlay"
|
||||
ruined = 0
|
||||
|
||||
|
||||
/obj/item/device/tape/attackby(obj/item/I, mob/user)
|
||||
/obj/item/tape/attackby(obj/item/I, mob/user)
|
||||
if(ruined && istype(I, /obj/item/screwdriver))
|
||||
to_chat(user, "<span class='notice'>You start winding the tape back in.</span>")
|
||||
if(do_after(user, 120 * I.toolspeed, target = src))
|
||||
@@ -311,5 +313,5 @@
|
||||
|
||||
|
||||
//Random colour tapes
|
||||
/obj/item/device/tape/random/New()
|
||||
/obj/item/tape/random/New()
|
||||
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
|
||||
|
||||
@@ -14,9 +14,10 @@ effective or pretty fucking useless.
|
||||
|
||||
*/
|
||||
|
||||
/obj/item/device/batterer
|
||||
/obj/item/batterer
|
||||
name = "mind batterer"
|
||||
desc = "A strange device with twin antennas."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "batterer"
|
||||
throwforce = 5
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
@@ -29,14 +30,14 @@ effective or pretty fucking useless.
|
||||
var/times_used = 0 //Number of times it's been used.
|
||||
var/max_uses = 5
|
||||
|
||||
/obj/item/device/batterer/examine(mob/user)
|
||||
/obj/item/batterer/examine(mob/user)
|
||||
..(user)
|
||||
if(times_used >= max_uses)
|
||||
to_chat(user, "<span class='notice'>[src] is out of charge.</span>")
|
||||
if(times_used < max_uses)
|
||||
to_chat(user, "<span class='notice'>[src] has [max_uses-times_used] charges left.</span>")
|
||||
|
||||
/obj/item/device/batterer/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
|
||||
/obj/item/batterer/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
|
||||
if(!user)
|
||||
return
|
||||
if(times_used >= max_uses)
|
||||
@@ -71,8 +72,9 @@ effective or pretty fucking useless.
|
||||
Wavelength is also slightly increased by the intensity as well.
|
||||
*/
|
||||
|
||||
/obj/item/device/rad_laser
|
||||
/obj/item/rad_laser
|
||||
name = "Health Analyzer"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "health2"
|
||||
item_state = "healthanalyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end."
|
||||
@@ -88,7 +90,7 @@ effective or pretty fucking useless.
|
||||
var/wavelength = 10 // time it takes for the radiation to kick in, in seconds
|
||||
var/used = 0 // is it cooling down?
|
||||
|
||||
/obj/item/device/rad_laser/attack(mob/living/M, mob/living/user)
|
||||
/obj/item/rad_laser/attack(mob/living/M, mob/living/user)
|
||||
if(!used)
|
||||
add_attack_logs(user, M, "Irradiated by [src]")
|
||||
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>")
|
||||
@@ -104,16 +106,16 @@ effective or pretty fucking useless.
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The radioactive microlaser is still recharging.</span>")
|
||||
|
||||
/obj/item/device/rad_laser/proc/handle_cooldown(cooldown)
|
||||
/obj/item/rad_laser/proc/handle_cooldown(cooldown)
|
||||
spawn(cooldown)
|
||||
used = 0
|
||||
icon_state = "health2"
|
||||
|
||||
/obj/item/device/rad_laser/attack_self(mob/user)
|
||||
/obj/item/rad_laser/attack_self(mob/user)
|
||||
..()
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/rad_laser/interact(mob/user)
|
||||
/obj/item/rad_laser/interact(mob/user)
|
||||
user.set_machine(src)
|
||||
|
||||
var/cooldown = round(max(10,((intensity*8)-(wavelength/2))+(intensity*2)))
|
||||
@@ -127,7 +129,7 @@ effective or pretty fucking useless.
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/device/rad_laser/Topic(href, href_list)
|
||||
/obj/item/rad_laser/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -147,18 +149,19 @@ effective or pretty fucking useless.
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/item/device/jammer
|
||||
/obj/item/jammer
|
||||
name = "radio jammer"
|
||||
desc = "Device used to disrupt nearby radio communication."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "jammer"
|
||||
var/active = FALSE
|
||||
var/range = 12
|
||||
|
||||
/obj/item/device/jammer/Destroy()
|
||||
/obj/item/jammer/Destroy()
|
||||
active_jammers -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/jammer/attack_self(mob/user)
|
||||
/obj/item/jammer/attack_self(mob/user)
|
||||
to_chat(user,"<span class='notice'>You [active ? "deactivate" : "activate"] the [src].</span>")
|
||||
active = !active
|
||||
if(active)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/transfer_valve
|
||||
/obj/item/transfer_valve
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
name = "tank transfer valve"
|
||||
icon_state = "valve_1"
|
||||
@@ -6,23 +6,23 @@
|
||||
desc = "Regulates the transfer of air between two tanks"
|
||||
var/obj/item/tank/tank_one = null
|
||||
var/obj/item/tank/tank_two = null
|
||||
var/obj/item/device/assembly/attached_device = null
|
||||
var/obj/item/assembly/attached_device = null
|
||||
var/mob/living/attacher = null
|
||||
var/valve_open = 0
|
||||
var/toggle = 1
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
|
||||
/obj/item/device/transfer_valve/Destroy()
|
||||
/obj/item/transfer_valve/Destroy()
|
||||
QDEL_NULL(tank_one)
|
||||
QDEL_NULL(tank_two)
|
||||
QDEL_NULL(attached_device)
|
||||
attacher = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/transfer_valve/IsAssemblyHolder()
|
||||
/obj/item/transfer_valve/IsAssemblyHolder()
|
||||
return 1
|
||||
|
||||
/obj/item/device/transfer_valve/attackby(obj/item/I, mob/user, params)
|
||||
/obj/item/transfer_valve/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/tank))
|
||||
if(tank_one && tank_two)
|
||||
to_chat(user, "<span class='warning'>There are already two tanks attached, remove one first.</span>")
|
||||
@@ -49,7 +49,7 @@
|
||||
SSnanoui.update_uis(src) // update all UIs attached to src
|
||||
//TODO: Have this take an assemblyholder
|
||||
else if(isassembly(I))
|
||||
var/obj/item/device/assembly/A = I
|
||||
var/obj/item/assembly/A = I
|
||||
if(A.secured)
|
||||
to_chat(user, "<span class='notice'>The device is secured.</span>")
|
||||
return
|
||||
@@ -70,25 +70,25 @@
|
||||
SSnanoui.update_uis(src) // update all UIs attached to src
|
||||
|
||||
|
||||
/obj/item/device/transfer_valve/HasProximity(atom/movable/AM)
|
||||
/obj/item/transfer_valve/HasProximity(atom/movable/AM)
|
||||
if(!attached_device)
|
||||
return
|
||||
attached_device.HasProximity(AM)
|
||||
|
||||
/obj/item/device/transfer_valve/hear_talk(mob/living/M, msg)
|
||||
/obj/item/transfer_valve/hear_talk(mob/living/M, msg)
|
||||
..()
|
||||
for(var/obj/O in contents)
|
||||
O.hear_talk(M, msg)
|
||||
|
||||
/obj/item/device/transfer_valve/hear_message(mob/living/M, msg)
|
||||
/obj/item/transfer_valve/hear_message(mob/living/M, msg)
|
||||
..()
|
||||
for(var/obj/O in contents)
|
||||
O.hear_message(M, msg)
|
||||
|
||||
/obj/item/device/transfer_valve/attack_self(mob/user)
|
||||
/obj/item/transfer_valve/attack_self(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
|
||||
/obj/item/transfer_valve/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
@@ -100,7 +100,7 @@
|
||||
// auto update every Master Controller tick
|
||||
//ui.set_auto_update(1)
|
||||
|
||||
/obj/item/device/transfer_valve/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
/obj/item/transfer_valve/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
|
||||
data["attachmentOne"] = tank_one ? tank_one.name : null
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/device/transfer_valve/Topic(href, href_list)
|
||||
/obj/item/transfer_valve/Topic(href, href_list)
|
||||
..()
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
@@ -145,14 +145,14 @@
|
||||
add_fingerprint(usr)
|
||||
return 1 // Returning 1 sends an update to attached UIs
|
||||
|
||||
/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D)
|
||||
/obj/item/transfer_valve/proc/process_activation(obj/item/D)
|
||||
if(toggle)
|
||||
toggle = 0
|
||||
toggle_valve()
|
||||
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
||||
toggle = 1
|
||||
|
||||
/obj/item/device/transfer_valve/update_icon()
|
||||
/obj/item/transfer_valve/update_icon()
|
||||
overlays.Cut()
|
||||
underlays = null
|
||||
|
||||
@@ -170,13 +170,13 @@
|
||||
if(attached_device)
|
||||
overlays += "device"
|
||||
|
||||
/obj/item/device/transfer_valve/proc/merge_gases()
|
||||
/obj/item/transfer_valve/proc/merge_gases()
|
||||
tank_two.air_contents.volume += tank_one.air_contents.volume
|
||||
var/datum/gas_mixture/temp
|
||||
temp = tank_one.air_contents.remove_ratio(1)
|
||||
tank_two.air_contents.merge(temp)
|
||||
|
||||
/obj/item/device/transfer_valve/proc/split_gases()
|
||||
/obj/item/transfer_valve/proc/split_gases()
|
||||
if(!valve_open || !tank_one || !tank_two)
|
||||
return
|
||||
var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
|
||||
@@ -190,7 +190,7 @@
|
||||
it explodes properly when it gets a signal (and it does).
|
||||
*/
|
||||
|
||||
/obj/item/device/transfer_valve/proc/toggle_valve()
|
||||
/obj/item/transfer_valve/proc/toggle_valve()
|
||||
if(!valve_open && tank_one && tank_two)
|
||||
valve_open = 1
|
||||
var/turf/bombturf = get_turf(src)
|
||||
|
||||
@@ -8,9 +8,10 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
|
||||
var/list/world_uplinks = list()
|
||||
|
||||
/obj/item/device/uplink
|
||||
/obj/item/uplink
|
||||
var/welcome // Welcoming menu message
|
||||
var/uses // Numbers of crystals
|
||||
var/hidden_crystals = 0
|
||||
var/list/ItemsCategory // List of categories with lists of items
|
||||
var/list/ItemsReference // List of references with an associated item
|
||||
var/list/nanoui_items // List of items for NanoUI use
|
||||
@@ -24,10 +25,10 @@ var/list/world_uplinks = list()
|
||||
var/job = null
|
||||
var/show_descriptions = 0
|
||||
|
||||
/obj/item/device/uplink/nano_host()
|
||||
/obj/item/uplink/nano_host()
|
||||
return loc
|
||||
|
||||
/obj/item/device/uplink/New()
|
||||
/obj/item/uplink/New()
|
||||
..()
|
||||
welcome = ticker.mode.uplink_welcome
|
||||
uses = ticker.mode.uplink_uses
|
||||
@@ -35,17 +36,17 @@ var/list/world_uplinks = list()
|
||||
|
||||
world_uplinks += src
|
||||
|
||||
/obj/item/device/uplink/Destroy()
|
||||
/obj/item/uplink/Destroy()
|
||||
world_uplinks -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/uplink/proc/generate_items(mob/user as mob)
|
||||
/obj/item/uplink/proc/generate_items(mob/user as mob)
|
||||
var/datum/nano_item_lists/IL = generate_item_lists(user)
|
||||
nanoui_items = IL.items_nano
|
||||
ItemsReference = IL.items_reference
|
||||
|
||||
// BS12 no longer use this menu but there are forks that do, hency why we keep it
|
||||
/obj/item/device/uplink/proc/generate_menu(mob/user as mob)
|
||||
/obj/item/uplink/proc/generate_menu(mob/user as mob)
|
||||
if(!job)
|
||||
job = user.mind.assigned_role
|
||||
|
||||
@@ -79,7 +80,7 @@ var/list/world_uplinks = list()
|
||||
/*
|
||||
Built the item lists for use with NanoUI
|
||||
*/
|
||||
/obj/item/device/uplink/proc/generate_item_lists(mob/user as mob)
|
||||
/obj/item/uplink/proc/generate_item_lists(mob/user as mob)
|
||||
if(!job)
|
||||
job = user.mind.assigned_role
|
||||
|
||||
@@ -101,7 +102,7 @@ var/list/world_uplinks = list()
|
||||
return result
|
||||
|
||||
//If 'random' was selected
|
||||
/obj/item/device/uplink/proc/chooseRandomItem()
|
||||
/obj/item/uplink/proc/chooseRandomItem()
|
||||
if(uses <= 0)
|
||||
return
|
||||
|
||||
@@ -112,7 +113,7 @@ var/list/world_uplinks = list()
|
||||
random_items += UI
|
||||
return pick(random_items)
|
||||
|
||||
/obj/item/device/uplink/Topic(href, href_list)
|
||||
/obj/item/uplink/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -125,7 +126,7 @@ var/list/world_uplinks = list()
|
||||
return buy(UI, UI ? UI.reference : "")
|
||||
return 0
|
||||
|
||||
/obj/item/device/uplink/proc/buy(var/datum/uplink_item/UI, var/reference)
|
||||
/obj/item/uplink/proc/buy(var/datum/uplink_item/UI, var/reference)
|
||||
if(!UI)
|
||||
return
|
||||
UI.buy(src,usr)
|
||||
@@ -153,24 +154,24 @@ var/list/world_uplinks = list()
|
||||
Then check if it's true, if true return. This will stop the normal menu appearing and will instead show the uplink menu.
|
||||
*/
|
||||
|
||||
/obj/item/device/uplink/hidden
|
||||
/obj/item/uplink/hidden
|
||||
name = "hidden uplink"
|
||||
desc = "There is something wrong if you're examining this."
|
||||
var/active = 0
|
||||
|
||||
// The hidden uplink MUST be inside an obj/item's contents.
|
||||
/obj/item/device/uplink/hidden/New()
|
||||
/obj/item/uplink/hidden/New()
|
||||
spawn(2)
|
||||
if(!istype(src.loc, /obj/item))
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated.
|
||||
/obj/item/device/uplink/hidden/proc/toggle()
|
||||
/obj/item/uplink/hidden/proc/toggle()
|
||||
active = !active
|
||||
|
||||
// Directly trigger the uplink. Turn on if it isn't already.
|
||||
/obj/item/device/uplink/hidden/proc/trigger(mob/user as mob)
|
||||
/obj/item/uplink/hidden/proc/trigger(mob/user as mob)
|
||||
if(!active)
|
||||
toggle()
|
||||
interact(user)
|
||||
@@ -178,7 +179,7 @@ var/list/world_uplinks = list()
|
||||
// Checks to see if the value meets the target. Like a frequency being a traitor_frequency, in order to unlock a headset.
|
||||
// If true, it accesses trigger() and returns 1. If it fails, it returns false. Use this to see if you need to close the
|
||||
// current item's menu.
|
||||
/obj/item/device/uplink/hidden/proc/check_trigger(mob/user as mob, var/value, var/target)
|
||||
/obj/item/uplink/hidden/proc/check_trigger(mob/user as mob, var/value, var/target)
|
||||
if(value == target)
|
||||
trigger(user)
|
||||
return 1
|
||||
@@ -187,7 +188,7 @@ var/list/world_uplinks = list()
|
||||
/*
|
||||
NANO UI FOR UPLINK WOOP WOOP
|
||||
*/
|
||||
/obj/item/device/uplink/hidden/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
|
||||
/obj/item/uplink/hidden/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
|
||||
var/title = "Remote Uplink"
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
@@ -198,7 +199,7 @@ var/list/world_uplinks = list()
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
|
||||
/obj/item/device/uplink/hidden/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state)
|
||||
/obj/item/uplink/hidden/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state)
|
||||
var/data[0]
|
||||
|
||||
data["welcome"] = welcome
|
||||
@@ -213,11 +214,11 @@ var/list/world_uplinks = list()
|
||||
return data
|
||||
|
||||
// Interaction code. Gathers a list of items purchasable from the paren't uplink and displays it. It also adds a lock button.
|
||||
/obj/item/device/uplink/hidden/interact(mob/user)
|
||||
/obj/item/uplink/hidden/interact(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
// The purchasing code.
|
||||
/obj/item/device/uplink/hidden/Topic(href, href_list)
|
||||
/obj/item/uplink/hidden/Topic(href, href_list)
|
||||
if(usr.stat || usr.restrained())
|
||||
return 1
|
||||
|
||||
@@ -231,6 +232,8 @@ var/list/world_uplinks = list()
|
||||
return 1
|
||||
else if(href_list["lock"])
|
||||
toggle()
|
||||
uses += hidden_crystals
|
||||
hidden_crystals = 0
|
||||
ui.close()
|
||||
return 1
|
||||
if(href_list["return"])
|
||||
@@ -249,7 +252,7 @@ var/list/world_uplinks = list()
|
||||
SSnanoui.update_uis(src)
|
||||
return 1
|
||||
|
||||
/obj/item/device/uplink/hidden/proc/update_nano_data(var/id)
|
||||
/obj/item/uplink/hidden/proc/update_nano_data(var/id)
|
||||
if(nanoui_menu == 1)
|
||||
var/permanentData[0]
|
||||
for(var/datum/data/record/L in sortRecord(data_core.general))
|
||||
@@ -285,7 +288,7 @@ var/list/world_uplinks = list()
|
||||
return 0
|
||||
|
||||
//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it)
|
||||
/obj/item/device/radio/uplink/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
/obj/item/radio/uplink/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/antag_spawner/borg_tele))
|
||||
var/obj/item/antag_spawner/borg_tele/S = W
|
||||
if(!S.used && !S.checking)
|
||||
@@ -301,25 +304,25 @@ var/list/world_uplinks = list()
|
||||
// Includes normal radio uplink, multitool uplink,
|
||||
// implant uplink (not the implant tool) and a preset headset uplink.
|
||||
|
||||
/obj/item/device/radio/uplink/New()
|
||||
/obj/item/radio/uplink/New()
|
||||
hidden_uplink = new(src)
|
||||
icon_state = "radio"
|
||||
|
||||
/obj/item/device/radio/uplink/attack_self(mob/user as mob)
|
||||
/obj/item/radio/uplink/attack_self(mob/user as mob)
|
||||
if(hidden_uplink)
|
||||
hidden_uplink.trigger(user)
|
||||
|
||||
/obj/item/device/multitool/uplink/New()
|
||||
/obj/item/multitool/uplink/New()
|
||||
hidden_uplink = new(src)
|
||||
|
||||
/obj/item/device/multitool/uplink/attack_self(mob/user as mob)
|
||||
/obj/item/multitool/uplink/attack_self(mob/user as mob)
|
||||
if(hidden_uplink)
|
||||
hidden_uplink.trigger(user)
|
||||
|
||||
/obj/item/device/radio/headset/uplink
|
||||
/obj/item/radio/headset/uplink
|
||||
traitor_frequency = 1445
|
||||
|
||||
/obj/item/device/radio/headset/uplink/New()
|
||||
/obj/item/radio/headset/uplink/New()
|
||||
..()
|
||||
hidden_uplink = new(src)
|
||||
hidden_uplink.uses = 20
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/hailer
|
||||
/obj/item/hailer
|
||||
name = "hailer"
|
||||
desc = "Used by obese officers to save their breath for running."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "voice0"
|
||||
item_state = "flashtool" //looks exactly like a flash (and nothing like a flashbang)
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
@@ -9,7 +10,7 @@
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
|
||||
/obj/item/device/hailer/attack_self(mob/living/carbon/user as mob)
|
||||
/obj/item/hailer/attack_self(mob/living/carbon/user as mob)
|
||||
if(spamcheck)
|
||||
return
|
||||
|
||||
@@ -24,7 +25,7 @@
|
||||
spawn(20)
|
||||
spamcheck = 0
|
||||
|
||||
/obj/item/device/hailer/emag_act(user as mob)
|
||||
/obj/item/hailer/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
emagged = 1
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
mount_reqs = list("simfloor", "nospace")
|
||||
|
||||
/obj/item/mounted/frame/intercom/do_build(turf/on_wall, mob/user)
|
||||
new /obj/item/device/radio/intercom(get_turf(src), get_dir(user, on_wall), 0)
|
||||
new /obj/item/radio/intercom(get_turf(src), get_dir(user, on_wall), 0)
|
||||
qdel(src)
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
|
||||
//Malf Picker
|
||||
/obj/item/device/malf_upgrade
|
||||
/obj/item/malf_upgrade
|
||||
name = "combat software upgrade"
|
||||
desc = "A highly illegal, highly dangerous upgrade for artificial intelligence units, granting them a variety of powers as well as the ability to hack APCs."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "datadisk3"
|
||||
|
||||
|
||||
/obj/item/device/malf_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user)
|
||||
/obj/item/malf_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user)
|
||||
if(!istype(AI))
|
||||
return
|
||||
if(AI.malf_picker)
|
||||
@@ -23,13 +23,13 @@
|
||||
|
||||
|
||||
//Lipreading
|
||||
/obj/item/device/surveillance_upgrade
|
||||
/obj/item/surveillance_upgrade
|
||||
name = "surveillance software upgrade"
|
||||
desc = "A software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "datadisk3"
|
||||
|
||||
/obj/item/device/surveillance_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user)
|
||||
/obj/item/surveillance_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user)
|
||||
if(!istype(AI))
|
||||
return
|
||||
if(AI.eyeobj)
|
||||
|
||||
@@ -73,8 +73,8 @@
|
||||
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
|
||||
icon_state = "head"
|
||||
part = list("head")
|
||||
var/obj/item/device/flash/flash1 = null
|
||||
var/obj/item/device/flash/flash2 = null
|
||||
var/obj/item/flash/flash1 = null
|
||||
var/obj/item/flash/flash2 = null
|
||||
|
||||
/obj/item/robot_parts/head/Destroy()
|
||||
QDEL_NULL(flash1)
|
||||
@@ -210,14 +210,14 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need to attach a flash to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
if(istype(W, /obj/item/multitool))
|
||||
if(check_completion())
|
||||
Interact(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The endoskeleton must be assembled before debugging can begin!</span>")
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/M = W
|
||||
if(istype(W, /obj/item/mmi))
|
||||
var/obj/item/mmi/M = W
|
||||
if(check_completion())
|
||||
if(!isturf(loc))
|
||||
to_chat(user, "<span class='warning'>You can't put [M] in, the frame has to be standing on the ground to be perfectly precise.</span>")
|
||||
@@ -341,7 +341,7 @@
|
||||
|
||||
var/mob/living/living_user = usr
|
||||
var/obj/item/item_in_hand = living_user.get_active_hand()
|
||||
if(!istype(item_in_hand, /obj/item/device/multitool))
|
||||
if(!istype(item_in_hand, /obj/item/multitool))
|
||||
to_chat(living_user, "<span class='warning'>You need a multitool!</span>")
|
||||
return
|
||||
|
||||
@@ -396,7 +396,7 @@
|
||||
|
||||
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/flash))
|
||||
if(istype(W, /obj/item/flash))
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
to_chat(user, "<span class='warning'>How do you propose to do that?</span>")
|
||||
return
|
||||
|
||||
@@ -10,19 +10,32 @@
|
||||
flags = NOBLUDGEON
|
||||
origin_tech = "materials=6;syndicate=1"
|
||||
|
||||
/obj/item/stack/telecrystal/attack(mob/target as mob, mob/user as mob)
|
||||
/obj/item/stack/telecrystal/attack(mob/target, mob/user)
|
||||
if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not.
|
||||
for(var/obj/item/implant/uplink/I in target)
|
||||
if(I && I.implanted)
|
||||
I.hidden_uplink.uses +=1
|
||||
use(1)
|
||||
to_chat(user, "<span class='notice'>You press the [src] onto yourself and charge your hidden uplink.</span>")
|
||||
if(I && I.imp_in)
|
||||
I.hidden_uplink.uses += amount
|
||||
use(amount)
|
||||
to_chat(user, "<span class='notice'>You press [src] onto yourself and charge your hidden uplink.</span>")
|
||||
|
||||
/obj/item/stack/telecrystal/afterattack(var/obj/item/I as obj, mob/user as mob, proximity)
|
||||
/obj/item/stack/telecrystal/afterattack(obj/item/I, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(I, /obj/item))
|
||||
if(I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up.
|
||||
I.hidden_uplink.uses +=1
|
||||
use(1)
|
||||
to_chat(user, "<span class='notice'>You slot the [src] into the [I] and charge its internal uplink.</span>")
|
||||
if(istype(I) && I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up.
|
||||
I.hidden_uplink.uses += amount
|
||||
use(amount)
|
||||
to_chat(user, "<span class='notice'>You slot [src] into [I] and charge its internal uplink.</span>")
|
||||
else if(istype(I, /obj/item/cartridge/frame))
|
||||
var/obj/item/cartridge/frame/cart = I
|
||||
if(!cart.charges)
|
||||
to_chat(user, "<span class='notice'>[cart] is out of charges, it's refusing to accept [src]</span>")
|
||||
return
|
||||
cart.telecrystals += amount
|
||||
use(amount)
|
||||
to_chat(user, "<span class='notice'>You slot [src] into [cart]. The next time it's used, it will also give telecrystals</span>")
|
||||
|
||||
/obj/item/stack/telecrystal/five
|
||||
amount = 5
|
||||
|
||||
/obj/item/stack/telecrystal/twenty
|
||||
amount = 20
|
||||
@@ -148,8 +148,8 @@ RCD
|
||||
locked = 0
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if(istype(I, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = I
|
||||
if(istype(I, /obj/item/pda))
|
||||
var/obj/item/pda/pda = I
|
||||
I = pda.id
|
||||
var/obj/item/card/id/ID = I
|
||||
if(istype(ID) && ID && check_access(ID))
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
//SKREEEEEEEEEEEE tool
|
||||
|
||||
/obj/item/device/flash/cyborg/alien
|
||||
/obj/item/flash/cyborg/alien
|
||||
name = "eye flash"
|
||||
desc = "Useful for taking pictures, making friends and flash-frying chips."
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
|
||||
@@ -90,7 +90,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
if(S.active)
|
||||
light("<span class='warning'>[user] swings their [W], barely missing their nose. They light their [name] in the process.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/device/assembly/igniter))
|
||||
else if(istype(W, /obj/item/assembly/igniter))
|
||||
light("<span class='notice'>[user] fiddles with [W], and manages to light their [name].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/gun/magic/wand/fireball))
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
toolspeed = 1
|
||||
var/atom/target = null
|
||||
var/image_overlay = null
|
||||
var/obj/item/device/assembly_holder/nadeassembly = null
|
||||
var/obj/item/assembly_holder/nadeassembly = null
|
||||
var/assemblyattacher
|
||||
|
||||
/obj/item/grenade/plastic/New()
|
||||
@@ -23,8 +23,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/grenade/plastic/attackby(obj/item/I, mob/user, params)
|
||||
if(!nadeassembly && istype(I, /obj/item/device/assembly_holder))
|
||||
var/obj/item/device/assembly_holder/A = I
|
||||
if(!nadeassembly && istype(I, /obj/item/assembly_holder))
|
||||
var/obj/item/assembly_holder/A = I
|
||||
if(!user.unEquip(I))
|
||||
return ..()
|
||||
nadeassembly = A
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/operating = 0//cooldown
|
||||
var/turf/previousturf = null
|
||||
var/obj/item/weldingtool/weldtool = null
|
||||
var/obj/item/device/assembly/igniter/igniter = null
|
||||
var/obj/item/assembly/igniter/igniter = null
|
||||
var/obj/item/tank/plasma/ptank = null
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
return
|
||||
|
||||
if(isigniter(W))
|
||||
var/obj/item/device/assembly/igniter/I = W
|
||||
var/obj/item/assembly/igniter/I = W
|
||||
if(I.secured) return
|
||||
if(igniter) return
|
||||
user.drop_item()
|
||||
@@ -111,7 +111,7 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/device/analyzer) && ptank)
|
||||
if(istype(W, /obj/item/analyzer) && ptank)
|
||||
atmosanalyzer_scan(ptank.air_contents, user)
|
||||
..()
|
||||
return
|
||||
@@ -158,7 +158,7 @@
|
||||
/obj/item/flamethrower/CheckParts(list/parts_list)
|
||||
..()
|
||||
weldtool = locate(/obj/item/weldingtool) in contents
|
||||
igniter = locate(/obj/item/device/assembly/igniter) in contents
|
||||
igniter = locate(/obj/item/assembly/igniter) in contents
|
||||
weldtool.status = 0
|
||||
igniter.secured = 0
|
||||
status = 1
|
||||
@@ -203,7 +203,7 @@
|
||||
weldtool = new /obj/item/weldingtool(src)
|
||||
weldtool.status = 0
|
||||
if(!igniter)
|
||||
igniter = new /obj/item/device/assembly/igniter(src)
|
||||
igniter = new /obj/item/assembly/igniter(src)
|
||||
igniter.secured = 0
|
||||
status = 1
|
||||
update_icon()
|
||||
|
||||
@@ -87,9 +87,9 @@
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
|
||||
/obj/item/device/paicard,
|
||||
/obj/item/device/instrument/violin,
|
||||
/obj/item/device/instrument/guitar,
|
||||
/obj/item/paicard,
|
||||
/obj/item/instrument/violin,
|
||||
/obj/item/instrument/guitar,
|
||||
/obj/item/storage/belt/utility/full,
|
||||
/obj/item/clothing/accessory/horrible,
|
||||
/obj/random/carp_plushie,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
var/list/beakers = list()
|
||||
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle)
|
||||
var/affected_area = 3
|
||||
var/obj/item/device/assembly_holder/nadeassembly = null
|
||||
var/obj/item/assembly_holder/nadeassembly = null
|
||||
var/label = null
|
||||
var/assemblyattacher
|
||||
var/ignition_temp = 10 // The amount of heat added to the reagents when this grenade goes off.
|
||||
@@ -45,7 +45,7 @@
|
||||
/obj/item/grenade/chem_grenade/proc/get_trigger()
|
||||
if(!nadeassembly) return null
|
||||
for(var/obj/O in list(nadeassembly.a_left, nadeassembly.a_right))
|
||||
if(!O || istype(O,/obj/item/device/assembly/igniter)) continue
|
||||
if(!O || istype(O,/obj/item/assembly/igniter)) continue
|
||||
return O
|
||||
return null
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = bomb_state
|
||||
update_overlays()
|
||||
var/obj/item/device/assembly/A = get_trigger()
|
||||
var/obj/item/assembly/A = get_trigger()
|
||||
if(stage != READY)
|
||||
name = "bomb casing[label]"
|
||||
else
|
||||
@@ -176,8 +176,8 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[I] is empty.</span>")
|
||||
|
||||
else if(stage == EMPTY && istype(I, /obj/item/device/assembly_holder))
|
||||
var/obj/item/device/assembly_holder/A = I
|
||||
else if(stage == EMPTY && istype(I, /obj/item/assembly_holder))
|
||||
var/obj/item/assembly_holder/A = I
|
||||
if(!A.secured)
|
||||
return
|
||||
if(isigniter(A.a_left) == isigniter(A.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
|
||||
@@ -297,9 +297,9 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/chem_grenade/proc/CreateDefaultTrigger(var/typekey)
|
||||
if(ispath(typekey,/obj/item/device/assembly))
|
||||
if(ispath(typekey,/obj/item/assembly))
|
||||
nadeassembly = new(src)
|
||||
nadeassembly.a_left = new /obj/item/device/assembly/igniter(nadeassembly)
|
||||
nadeassembly.a_left = new /obj/item/assembly/igniter(nadeassembly)
|
||||
nadeassembly.a_left.holder = nadeassembly
|
||||
nadeassembly.a_left.secured = 1
|
||||
nadeassembly.a_right = new typekey(nadeassembly)
|
||||
|
||||
@@ -119,15 +119,15 @@
|
||||
|
||||
/obj/item/grenade/chem_grenade/lube/remote/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
CreateDefaultTrigger(/obj/item/assembly/signaler)
|
||||
|
||||
/obj/item/grenade/chem_grenade/lube/prox/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
|
||||
|
||||
/obj/item/grenade/chem_grenade/lube/tripwire/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra)
|
||||
CreateDefaultTrigger(/obj/item/assembly/infra)
|
||||
|
||||
|
||||
// Basic explosion grenade
|
||||
@@ -149,15 +149,15 @@
|
||||
// Assembly Variants
|
||||
/obj/item/grenade/chem_grenade/explosion/remote/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
CreateDefaultTrigger(/obj/item/assembly/signaler)
|
||||
|
||||
/obj/item/grenade/chem_grenade/explosion/prox/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
|
||||
|
||||
/obj/item/grenade/chem_grenade/explosion/mine/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
|
||||
|
||||
|
||||
// Water + Potassium = Boom
|
||||
@@ -177,24 +177,24 @@
|
||||
|
||||
/obj/item/grenade/chem_grenade/waterpotassium/remote/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
CreateDefaultTrigger(/obj/item/assembly/signaler)
|
||||
|
||||
/obj/item/grenade/chem_grenade/waterpotassium/prox/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
|
||||
|
||||
|
||||
/obj/item/grenade/chem_grenade/waterpotassium/tripwire/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra)
|
||||
CreateDefaultTrigger(/obj/item/assembly/infra)
|
||||
|
||||
/obj/item/grenade/chem_grenade/waterpotassium/tripwire_armed/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra/armed)
|
||||
CreateDefaultTrigger(/obj/item/assembly/infra/armed)
|
||||
|
||||
/obj/item/grenade/chem_grenade/waterpotassium/tripwire_armed_stealth/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra/armed/stealth)
|
||||
CreateDefaultTrigger(/obj/item/assembly/infra/armed/stealth)
|
||||
|
||||
|
||||
|
||||
@@ -216,17 +216,17 @@
|
||||
/obj/item/grenade/chem_grenade/emp/remote
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
CreateDefaultTrigger(/obj/item/assembly/signaler)
|
||||
|
||||
/obj/item/grenade/chem_grenade/emp/prox
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
|
||||
|
||||
/obj/item/grenade/chem_grenade/emp/mine
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
|
||||
|
||||
// --------------------------------------
|
||||
// Dangerous slime core grenades
|
||||
@@ -249,17 +249,17 @@
|
||||
/obj/item/grenade/chem_grenade/large/bluespace/prox
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/bluespace/mine
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/bluespace/remote
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
CreateDefaultTrigger(/obj/item/assembly/signaler)
|
||||
*/
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/monster
|
||||
@@ -279,17 +279,17 @@
|
||||
/obj/item/grenade/chem_grenade/large/monster/prox
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/monster/mine
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/monster/remote
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
CreateDefaultTrigger(/obj/item/assembly/signaler)
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/feast
|
||||
payload_name = "silver slime"
|
||||
@@ -314,22 +314,22 @@
|
||||
New()
|
||||
..()
|
||||
new /obj/item/grenade/chem_grenade/explosion/remote(src)
|
||||
new /obj/item/device/multitool(src) // used to adjust the chemgrenade's signaller
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
|
||||
new /obj/item/assembly/signaler(src)
|
||||
return
|
||||
/obj/item/storage/box/syndie_kit/remoteemp
|
||||
name = "Remote EMP Kit"
|
||||
New()
|
||||
..()
|
||||
new /obj/item/grenade/chem_grenade/emp/remote(src)
|
||||
new /obj/item/device/multitool(src) // used to adjust the chemgrenade's signaller
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
|
||||
new /obj/item/assembly/signaler(src)
|
||||
return
|
||||
/obj/item/storage/box/syndie_kit/remotelube
|
||||
name = "Remote Lube Kit"
|
||||
New()
|
||||
..()
|
||||
new /obj/item/grenade/chem_grenade/lube(src)
|
||||
new /obj/item/device/multitool(src) // used to adjust the chemgrenade's signaller
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
|
||||
new /obj/item/assembly/signaler(src)
|
||||
return
|
||||
@@ -35,7 +35,7 @@
|
||||
var/mob/M = imp_in
|
||||
var/area/t = get_area(M)
|
||||
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(src)
|
||||
var/obj/item/radio/headset/a = new /obj/item/radio/headset(src)
|
||||
a.follow_target = M
|
||||
|
||||
switch(cause)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/armed = 0
|
||||
var/trap_damage = 20
|
||||
var/obj/item/grenade/iedcasing/IED = null
|
||||
var/obj/item/device/assembly/signaler/sig = null
|
||||
var/obj/item/assembly/signaler/sig = null
|
||||
|
||||
/obj/item/restraints/legcuffs/beartrap/New()
|
||||
..()
|
||||
@@ -58,7 +58,7 @@
|
||||
log_game("[key_name(user)] has rigged a beartrap with an IED.")
|
||||
to_chat(user, "<span class='notice'>You sneak [IED] underneath the pressure plate and connect the trigger wire.</span>")
|
||||
desc = "A trap used to catch bears and other legged creatures. <span class='warning'>There is an IED hooked up to it.</span>"
|
||||
if(istype(I, /obj/item/device/assembly/signaler))
|
||||
if(istype(I, /obj/item/assembly/signaler))
|
||||
if(IED)
|
||||
to_chat(user, "<span class='warning'>This beartrap already has an IED hooked up to it!</span>")
|
||||
return
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
user.put_in_hands(newSaber)
|
||||
else if(istype(W, /obj/item/device/multitool))
|
||||
else if(istype(W, /obj/item/multitool))
|
||||
if(hacked == 0)
|
||||
hacked = 1
|
||||
item_color = "rainbow"
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
|
||||
var/cleanspeed = 50 //slower than mop
|
||||
|
||||
|
||||
|
||||
/obj/item/soap/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
|
||||
@@ -29,28 +27,40 @@
|
||||
else if(target == user && user.a_intent == INTENT_GRAB && ishuman(target))
|
||||
var/mob/living/carbon/human/muncher = user
|
||||
if(muncher && muncher.get_species() == "Drask")
|
||||
to_chat(user, "You take a bite of the [src.name]. Delicious!")
|
||||
to_chat(user, "You take a bite of the [name]. Delicious!")
|
||||
playsound(user.loc, 'sound/items/eatfood.ogg', 50, 0)
|
||||
user.nutrition += 2
|
||||
else if(istype(target,/obj/effect/decal/cleanable))
|
||||
user.visible_message("<span class='warning'>[user] begins to scrub \the [target.name] out with [src].</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target) && target)
|
||||
if(do_after(user, cleanspeed, target = target) && target)
|
||||
to_chat(user, "<span class='notice'>You scrub \the [target.name] out.</span>")
|
||||
if(issimulatedturf(target.loc))
|
||||
clean_turf(target.loc)
|
||||
return
|
||||
qdel(target)
|
||||
else if(issimulatedturf(target))
|
||||
user.visible_message("<span class='warning'>[user] begins to clean \the [target.name] with [src].</span>")
|
||||
if(do_after(user, cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
clean_turf(target)
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to clean \the [target.name] with [src].</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
if(do_after(user, cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.clean_blood()
|
||||
if(istype(target, /turf/simulated))
|
||||
var/turf/simulated/T = target
|
||||
T.dirt = 0
|
||||
|
||||
/obj/item/soap/proc/clean_turf(turf/simulated/T)
|
||||
T.clean_blood()
|
||||
T.dirt = 0
|
||||
for(var/obj/effect/O in T)
|
||||
if(is_cleanable(O))
|
||||
qdel(O)
|
||||
|
||||
/obj/item/soap/attack(mob/target as mob, mob/user as mob)
|
||||
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == "mouth" )
|
||||
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>")
|
||||
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [name]!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -74,7 +84,7 @@
|
||||
to_chat(user, "<span class='notice'>You need to take that [target.name] off before 'cleaning' it.</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to smear [src] on \the [target.name].</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
if(do_after(user, cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You 'clean' \the [target.name].</span>")
|
||||
if(istype(target, /turf/simulated))
|
||||
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(target)
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
new /obj/item/FixOVein(src)
|
||||
new /obj/item/clothing/suit/straight_jacket(src)
|
||||
new /obj/item/clothing/mask/muzzle(src)
|
||||
new /obj/item/device/mmi/syndie(src)
|
||||
new /obj/item/mmi/syndie(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/surgery_fake //for maint spawns
|
||||
name = "surgery duffelbag"
|
||||
|
||||
@@ -53,11 +53,11 @@
|
||||
/obj/item/weldingtool,
|
||||
/obj/item/wirecutters,
|
||||
/obj/item/wrench,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/multitool,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/t_scanner,
|
||||
/obj/item/analyzer,
|
||||
/obj/item/taperoll/engineering,
|
||||
/obj/item/extinguisher/mini)
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/obj/item/storage/belt/utility/full/multitool/New()
|
||||
..()
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/multitool(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/belt/utility/atmostech/New()
|
||||
@@ -83,7 +83,7 @@
|
||||
new /obj/item/weldingtool(src)
|
||||
new /obj/item/crowbar(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/t_scanner(src)
|
||||
new /obj/item/extinguisher/mini(src)
|
||||
update_icon()
|
||||
|
||||
@@ -98,10 +98,10 @@
|
||||
new /obj/item/screwdriver/power(src)
|
||||
new /obj/item/crowbar/power(src)
|
||||
new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE))
|
||||
new /obj/item/extinguisher/mini(src)
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/analyzer(src)
|
||||
update_icon()
|
||||
//much roomier now that we've managed to remove two tools
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
item_state = "medical"
|
||||
use_item_overlays = 1
|
||||
can_hold = list(
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/healthanalyzer,
|
||||
/obj/item/dnainjector,
|
||||
/obj/item/reagent_containers/dropper,
|
||||
/obj/item/reagent_containers/glass/beaker,
|
||||
@@ -124,12 +124,12 @@
|
||||
/obj/item/storage/fancy/cigarettes,
|
||||
/obj/item/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/flashlight/pen,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/gloves/color/latex,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector,
|
||||
/obj/item/device/rad_laser,
|
||||
/obj/item/device/sensor_device,
|
||||
/obj/item/rad_laser,
|
||||
/obj/item/sensor_device,
|
||||
/obj/item/wrench/medical,
|
||||
)
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
item_state = "botany"
|
||||
use_item_overlays = 1
|
||||
can_hold = list(
|
||||
/obj/item/device/plant_analyzer,
|
||||
/obj/item/plant_analyzer,
|
||||
/obj/item/cultivator,
|
||||
/obj/item/hatchet,
|
||||
/obj/item/reagent_containers/glass/bottle,
|
||||
@@ -163,7 +163,7 @@
|
||||
/obj/item/lighter/zippo,
|
||||
/obj/item/storage/fancy/cigarettes,
|
||||
/obj/item/shovel/spade,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/flashlight/pen,
|
||||
/obj/item/seeds,
|
||||
/obj/item/wirecutters,
|
||||
/obj/item/wrench,
|
||||
@@ -183,7 +183,7 @@
|
||||
/obj/item/grenade/chem_grenade/teargas,
|
||||
/obj/item/reagent_containers/spray/pepper,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/flash,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_box,
|
||||
@@ -191,21 +191,21 @@
|
||||
/obj/item/kitchen/knife/combat,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/melee/classic_baton,
|
||||
/obj/item/device/flashlight/seclite,
|
||||
/obj/item/flashlight/seclite,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/melee/classic_baton/telescopic,
|
||||
/obj/item/restraints/legcuffs/bola)
|
||||
|
||||
/obj/item/storage/belt/security/sec/New()
|
||||
..()
|
||||
new /obj/item/device/flashlight/seclite(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/belt/security/response_team/New()
|
||||
..()
|
||||
new /obj/item/kitchen/knife/combat(src)
|
||||
new /obj/item/melee/baton/loaded(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/melee/classic_baton/telescopic(src)
|
||||
new /obj/item/grenade/flashbang(src)
|
||||
update_icon()
|
||||
@@ -218,17 +218,17 @@
|
||||
storage_slots = 6
|
||||
use_item_overlays = 1
|
||||
can_hold = list(
|
||||
"/obj/item/device/soulstone"
|
||||
"/obj/item/soulstone"
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/soulstone/full/New()
|
||||
..()
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/soulstone(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
new /obj/item/weldingtool/abductor(src)
|
||||
new /obj/item/crowbar/abductor(src)
|
||||
new /obj/item/wirecutters/abductor(src)
|
||||
new /obj/item/device/multitool/abductor(src)
|
||||
new /obj/item/multitool/abductor(src)
|
||||
new /obj/item/stack/cable_coil(src, 30, COLOR_WHITE)
|
||||
|
||||
/obj/item/storage/belt/military/assault
|
||||
@@ -284,8 +284,8 @@
|
||||
use_item_overlays = 1
|
||||
can_hold = list(
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
/obj/item/device/lightreplacer,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/lightreplacer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/spray,
|
||||
/obj/item/soap,
|
||||
/obj/item/holosign_creator
|
||||
@@ -293,7 +293,7 @@
|
||||
|
||||
/obj/item/storage/belt/janitor/full/New()
|
||||
..()
|
||||
new /obj/item/device/lightreplacer(src)
|
||||
new /obj/item/lightreplacer(src)
|
||||
new /obj/item/holosign_creator(src)
|
||||
new /obj/item/reagent_containers/spray(src)
|
||||
new /obj/item/soap(src)
|
||||
@@ -310,7 +310,7 @@
|
||||
max_w_class = WEIGHT_CLASS_TINY
|
||||
max_combined_w_class = 6
|
||||
storage_slots = 6
|
||||
can_hold = list(/obj/item/device/mobcapsule)
|
||||
can_hold = list(/obj/item/mobcapsule)
|
||||
|
||||
/obj/item/storage/belt/lazarus/New()
|
||||
..()
|
||||
@@ -593,7 +593,7 @@
|
||||
new /obj/item/weldingtool/hugetank(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/wrench(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/stack/cable_coil(src)
|
||||
|
||||
new /obj/item/restraints/handcuffs(src)
|
||||
@@ -622,8 +622,8 @@
|
||||
new /obj/item/weldingtool/hugetank(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/wrench(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/stack/cable_coil(src)
|
||||
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/device/healthanalyzer(src)
|
||||
new /obj/item/analyzer(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
@@ -256,12 +256,12 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/flash(src)
|
||||
|
||||
/obj/item/storage/box/teargas
|
||||
name = "box of tear gas grenades (WARNING)"
|
||||
@@ -358,12 +358,12 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/device/tape(src)
|
||||
new /obj/item/device/tape(src)
|
||||
new /obj/item/device/tape(src)
|
||||
new /obj/item/device/tape(src)
|
||||
new /obj/item/device/tape(src)
|
||||
new /obj/item/device/tape(src)
|
||||
new /obj/item/tape(src)
|
||||
new /obj/item/tape(src)
|
||||
new /obj/item/tape(src)
|
||||
new /obj/item/tape(src)
|
||||
new /obj/item/tape(src)
|
||||
new /obj/item/tape(src)
|
||||
|
||||
/obj/item/storage/box/rxglasses
|
||||
name = "prescription glasses"
|
||||
@@ -619,12 +619,12 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/device/assembly/mousetrap( src )
|
||||
new /obj/item/assembly/mousetrap( src )
|
||||
new /obj/item/assembly/mousetrap( src )
|
||||
new /obj/item/assembly/mousetrap( src )
|
||||
new /obj/item/assembly/mousetrap( src )
|
||||
new /obj/item/assembly/mousetrap( src )
|
||||
new /obj/item/assembly/mousetrap( src )
|
||||
|
||||
/obj/item/storage/box/pillbottles
|
||||
name = "box of pill bottles"
|
||||
@@ -838,10 +838,10 @@
|
||||
contents = list()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/emergency_oxygen/double/full(src)
|
||||
new /obj/item/device/flashlight/seclite(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
new /obj/item/kitchen/knife/combat(src)
|
||||
|
||||
new /obj/item/device/radio/centcom(src)
|
||||
new /obj/item/radio/centcom(src)
|
||||
new /obj/item/door_remote/omni(src)
|
||||
new /obj/item/implanter/death_alarm(src)
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src )
|
||||
new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src )
|
||||
new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
new /obj/item/healthanalyzer( src )
|
||||
new /obj/item/reagent_containers/hypospray/autoinjector( src )
|
||||
new /obj/item/reagent_containers/food/pill/salicylic( src )
|
||||
return
|
||||
@@ -59,7 +59,7 @@
|
||||
new /obj/item/reagent_containers/food/pill/salicylic( src )
|
||||
new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src )
|
||||
new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
new /obj/item/healthanalyzer( src )
|
||||
new /obj/item/reagent_containers/hypospray/autoinjector( src )
|
||||
return
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
new /obj/item/reagent_containers/food/pill/charcoal( src )
|
||||
new /obj/item/reagent_containers/food/pill/charcoal( src )
|
||||
new /obj/item/reagent_containers/food/pill/charcoal( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
new /obj/item/healthanalyzer( src )
|
||||
return
|
||||
|
||||
/obj/item/storage/firstaid/toxin/empty
|
||||
@@ -100,7 +100,7 @@
|
||||
new /obj/item/reagent_containers/food/pill/salbutamol( src )
|
||||
new /obj/item/reagent_containers/food/pill/salbutamol( src )
|
||||
new /obj/item/reagent_containers/food/pill/salbutamol( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
new /obj/item/healthanalyzer( src )
|
||||
return
|
||||
|
||||
/obj/item/storage/firstaid/o2/empty
|
||||
@@ -122,7 +122,7 @@
|
||||
new /obj/item/reagent_containers/food/pill/patch/styptic(src)
|
||||
new /obj/item/reagent_containers/food/pill/patch/styptic(src)
|
||||
new /obj/item/reagent_containers/food/pill/patch/styptic(src)
|
||||
new /obj/item/device/healthanalyzer(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
new /obj/item/reagent_containers/hypospray/autoinjector(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
return
|
||||
@@ -146,7 +146,7 @@
|
||||
new /obj/item/stack/medical/ointment/advanced(src)
|
||||
new /obj/item/stack/medical/ointment/advanced(src)
|
||||
new /obj/item/reagent_containers/hypospray/autoinjector(src)
|
||||
new /obj/item/device/healthanalyzer(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/adv/empty
|
||||
empty = 1
|
||||
@@ -245,7 +245,7 @@
|
||||
return
|
||||
|
||||
/obj/item/storage/pill_bottle/attackby(var/obj/item/I, mob/user as mob, params)
|
||||
if(istype(I, /obj/item/pen) || istype(I, /obj/item/device/flashlight/pen))
|
||||
if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen))
|
||||
var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text))
|
||||
if(length(tmp_label) > MAX_NAME_LEN)
|
||||
to_chat(user, "<span class='warning'>The label can be at most [MAX_NAME_LEN] characters long.</span>")
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/icon_broken = "lockbox+b"
|
||||
|
||||
/obj/item/storage/lockbox/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda))
|
||||
if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))
|
||||
if(broken)
|
||||
to_chat(user, "<span class='warning'>It appears to be broken.</span>")
|
||||
return
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
user.show_message("<span class='notice'>You [open ? "open" : "close"] the service panel.</span>", 1)
|
||||
return
|
||||
|
||||
if((istype(W, /obj/item/device/multitool)) && (open == 1) && (!l_hacking))
|
||||
if((istype(W, /obj/item/multitool)) && (open == 1) && (!l_hacking))
|
||||
user.show_message("<span class='danger'>Now attempting to reset internal memory, please hold.</span>", 1)
|
||||
l_hacking = 1
|
||||
if(do_after(usr, 100 * W.toolspeed, target = src))
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
new /obj/item/weldingtool/mini(src)
|
||||
new /obj/item/extinguisher/mini(src)
|
||||
if(prob(50))
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/flashlight(src)
|
||||
else
|
||||
new /obj/item/device/flashlight/flare(src)
|
||||
new /obj/item/device/radio(src)
|
||||
new /obj/item/flashlight/flare(src)
|
||||
new /obj/item/radio(src)
|
||||
|
||||
/obj/item/storage/toolbox/mechanical
|
||||
name = "mechanical toolbox"
|
||||
@@ -42,7 +42,7 @@
|
||||
new /obj/item/wrench(src)
|
||||
new /obj/item/weldingtool(src)
|
||||
new /obj/item/crowbar(src)
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/analyzer(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/greytide
|
||||
@@ -58,7 +58,7 @@
|
||||
var/pickedcolor = pick(COLOR_RED, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_PINK, COLOR_ORANGE, COLOR_CYAN, COLOR_WHITE)
|
||||
new /obj/item/screwdriver(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/t_scanner(src)
|
||||
new /obj/item/crowbar(src)
|
||||
new /obj/item/stack/cable_coil(src, 30, pickedcolor)
|
||||
new /obj/item/stack/cable_coil(src, 30, pickedcolor)
|
||||
@@ -83,7 +83,7 @@
|
||||
new /obj/item/weldingtool/largetank(src)
|
||||
new /obj/item/crowbar/red(src)
|
||||
new /obj/item/wirecutters(src, "red")
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
|
||||
/obj/item/storage/toolbox/drone
|
||||
@@ -100,7 +100,7 @@
|
||||
new /obj/item/crowbar(src)
|
||||
new /obj/item/stack/cable_coil(src, 30, pickedcolor)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/multitool(src)
|
||||
|
||||
/obj/item/storage/toolbox/brass
|
||||
name = "brass box"
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/storage/box/syndie_kit/emp(src)
|
||||
new /obj/item/device/camera_bug(src)
|
||||
new /obj/item/camera_bug(src)
|
||||
return
|
||||
|
||||
if("thief")
|
||||
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src)
|
||||
new /obj/item/device/chameleon(src)
|
||||
new /obj/item/chameleon(src)
|
||||
new /obj/item/clothing/gloves/color/black/thief(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
return
|
||||
@@ -23,14 +23,14 @@
|
||||
new /obj/item/gun/projectile/automatic/pistol(src)
|
||||
new /obj/item/suppressor(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm/hp(src)
|
||||
new /obj/item/device/encryptionkey/syndicate(src)
|
||||
new /obj/item/encryptionkey/syndicate(src)
|
||||
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
|
||||
new /obj/item/implanter/krav_maga(src)
|
||||
new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(src)
|
||||
return
|
||||
|
||||
if("sabotage")
|
||||
new /obj/item/device/powersink(src)
|
||||
new /obj/item/powersink(src)
|
||||
new /obj/item/grenade/syndieminibomb(src)
|
||||
new /obj/item/card/emag(src)
|
||||
new /obj/item/grenade/clusterbuster/n2o(src)
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
if("hacker")
|
||||
new /obj/item/aiModule/syndicate(src)
|
||||
new /obj/item/device/encryptionkey/binary(src)
|
||||
new /obj/item/encryptionkey/binary(src)
|
||||
new /obj/item/aiModule/toyAI(src)
|
||||
return
|
||||
|
||||
@@ -74,10 +74,10 @@
|
||||
new /obj/item/clothing/gloves/color/yellow/power(src)
|
||||
new /obj/item/pen/sleepy(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/device/flashlight/emp(src)
|
||||
new /obj/item/flashlight/emp(src)
|
||||
new /obj/item/clothing/shoes/syndigaloshes(src)
|
||||
new /obj/item/stamp/chameleon(src)
|
||||
new /obj/item/device/multitool/ai_detect(src)
|
||||
new /obj/item/multitool/ai_detect(src)
|
||||
return
|
||||
|
||||
/obj/item/storage/box/syndie_kit
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
/obj/item/stack/spacecash,
|
||||
/obj/item/card,
|
||||
/obj/item/clothing/mask/cigarette,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/flashlight/pen,
|
||||
/obj/item/seeds,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/toy/crayon,
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
stunforce = 5
|
||||
hitcost = 2000
|
||||
slot_flags = SLOT_BACK
|
||||
var/obj/item/device/assembly/igniter/sparkler = null
|
||||
var/obj/item/assembly/igniter/sparkler = null
|
||||
|
||||
/obj/item/melee/baton/cattleprod/New()
|
||||
..()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
var/selfdestruct = 0.0
|
||||
var/traitor_frequency = 0.0
|
||||
var/mob/currentUser = null
|
||||
var/obj/item/device/radio/origradio = null
|
||||
var/obj/item/radio/origradio = null
|
||||
flags = CONDUCT | ONBELT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
item_state = "radio"
|
||||
@@ -26,7 +26,7 @@
|
||||
var/uses = 4.0
|
||||
var/selfdestruct = 0.0
|
||||
var/traitor_frequency = 0.0
|
||||
var/obj/item/device/radio/origradio = null
|
||||
var/obj/item/radio/origradio = null
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "radio"
|
||||
|
||||
@@ -127,10 +127,10 @@
|
||||
if(istype(loc, /obj/item/assembly))
|
||||
icon = loc
|
||||
|
||||
if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
|
||||
if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1)
|
||||
atmosanalyzer_scan(air_contents, user)
|
||||
|
||||
if(istype(W, /obj/item/device/assembly_holder))
|
||||
if(istype(W, /obj/item/assembly_holder))
|
||||
bomb_assemble(W,user)
|
||||
|
||||
/obj/item/tank/attack_self(mob/user as mob)
|
||||
@@ -240,7 +240,7 @@
|
||||
|
||||
var/pressure = air_contents.return_pressure()
|
||||
if(pressure > TANK_FRAGMENT_PRESSURE)
|
||||
if(!istype(loc,/obj/item/device/transfer_valve))
|
||||
if(!istype(loc,/obj/item/transfer_valve))
|
||||
message_admins("Explosive tank rupture! last key to touch the tank was [fingerprintslast] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
||||
log_game("Explosive tank rupture! last key to touch the tank was [fingerprintslast] at [x], [y], [z]")
|
||||
// to_chat(world, "<span class='notice'>[x],[y] tank is exploding: [pressure] kPa</span>")
|
||||
@@ -255,7 +255,7 @@
|
||||
// to_chat(world, "<span class='notice'>Exploding Pressure: [pressure] kPa, intensity: [range]</span>")
|
||||
|
||||
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
|
||||
if(istype(loc,/obj/item/device/transfer_valve))
|
||||
if(istype(loc,/obj/item/transfer_valve))
|
||||
qdel(loc)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
@@ -59,7 +59,7 @@ Frequency:
|
||||
if(sr)
|
||||
temp += "<B>Located Beacons:</B><BR>"
|
||||
|
||||
for(var/obj/item/device/radio/beacon/W in beacons)
|
||||
for(var/obj/item/radio/beacon/W in beacons)
|
||||
if(W.frequency == frequency && !W.syndicate)
|
||||
if(W && W.z == z)
|
||||
var/turf/TB = get_turf(W)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Tools!
|
||||
* Note: Multitools are /obj/item/device
|
||||
* Note: Multitools are in devices
|
||||
*
|
||||
* Contains:
|
||||
* Wrench
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
|
||||
/obj/item/twohanded/dualsaber/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
if(istype(W, /obj/item/multitool))
|
||||
if(hacked == 0)
|
||||
hacked = 1
|
||||
to_chat(user, "<span class='warning'>2XRNBW_ENGAGE</span>")
|
||||
|
||||
@@ -115,7 +115,7 @@ obj/item/wirerod/attackby(obj/item/I, mob/user, params)
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(I, /obj/item/device/assembly/igniter) && !(I.flags & NODROP))
|
||||
else if(istype(I, /obj/item/assembly/igniter) && !(I.flags & NODROP))
|
||||
var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod
|
||||
|
||||
if(!remove_item_from_storage(user))
|
||||
|
||||
Reference in New Issue
Block a user