Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into kitchen

This commit is contained in:
FalseIncarnate
2018-04-27 22:47:29 -04:00
559 changed files with 5141 additions and 5230 deletions
+8 -8
View File
@@ -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)
+11 -11
View File
@@ -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
+23 -22
View File
@@ -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
+29 -29
View File
@@ -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
+26 -26
View File
@@ -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)
+13 -13
View File
@@ -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'
+5 -4
View File
@@ -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
+13 -12
View File
@@ -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'
+15 -15
View File
@@ -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)
+8 -7
View File
@@ -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)
+12 -12
View File
@@ -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)
+60 -60
View File
@@ -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()
+39 -32
View File
@@ -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)
+32 -30
View File
@@ -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)
+30 -27
View File
@@ -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
+4 -3
View File
@@ -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)
+4 -4
View File
@@ -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)
+7 -7
View File
@@ -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
+24 -11
View File
@@ -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
+2 -2
View File
@@ -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'
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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"
+20 -10
View File
@@ -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"
+34 -34
View File
@@ -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,
+1 -1
View File
@@ -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 -1
View File
@@ -1,5 +1,5 @@
/* Tools!
* Note: Multitools are /obj/item/device
* Note: Multitools are in devices
*
* Contains:
* Wrench
+1 -1
View File
@@ -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>")
+1 -1
View File
@@ -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))