Kills off /obj/item/device (#6561)

This commit is contained in:
kevinz000
2018-04-29 22:06:58 -07:00
committed by Poojawa
parent ab3035a4ea
commit 3369c804b2
538 changed files with 6728 additions and 6707 deletions
+1 -1
View File
@@ -16,7 +16,7 @@
/datum/admins/proc/quick_create_object(mob/user)
var/static/list/create_object_forms = list(
/obj, /obj/structure, /obj/machinery, /obj/effect,
/obj/item, /obj/item/clothing, /obj/item/stack, /obj/item/device,
/obj/item, /obj/item/clothing, /obj/item/stack, /obj/item,
/obj/item/reagent_containers, /obj/item/gun)
var/path = input("Select the path of the object you wish to create.", "Path", /obj) in create_object_forms
+2 -2
View File
@@ -1804,7 +1804,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(!istype(H.ears, /obj/item/device/radio/headset))
if(!istype(H.ears, /obj/item/radio/headset))
to_chat(usr, "The person you are trying to contact is not wearing a headset.")
return
@@ -1823,7 +1823,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.")
return
if(!istype(H.ears, /obj/item/device/radio/headset))
if(!istype(H.ears, /obj/item/radio/headset))
to_chat(usr, "The person you are trying to contact is not wearing a headset.")
return
+5 -5
View File
@@ -308,7 +308,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
if(confirm != "Yes")
return 0
var/obj/item/device/paicard/card = new(T)
var/obj/item/paicard/card = new(T)
var/mob/living/silicon/pai/pai = new(card)
pai.name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text
pai.real_name = pai.name
@@ -357,7 +357,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
var/typename = "[type]"
var/static/list/TYPES_SHORTCUTS = list(
/obj/effect/decal/cleanable = "CLEANABLE",
/obj/item/device/radio/headset = "HEADSET",
/obj/item/radio/headset = "HEADSET",
/obj/item/clothing/head/helmet/space = "SPESSHELMET",
/obj/item/book/manual = "MANUAL",
/obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first
@@ -466,8 +466,8 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
id.update_label()
if(worn)
if(istype(worn, /obj/item/device/pda))
var/obj/item/device/pda/PDA = worn
if(istype(worn, /obj/item/pda))
var/obj/item/pda/PDA = worn
PDA.id = id
id.forceMove(PDA)
else if(istype(worn, /obj/item/storage/wallet))
@@ -626,7 +626,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
areas_with_LS.Add(A.type)
CHECK_TICK
for(var/obj/item/device/radio/intercom/I in GLOB.machines)
for(var/obj/item/radio/intercom/I in GLOB.machines)
var/area/A = get_area(I)
if(!A)
dat += "Skipped over [I] in invalid location, [I.loc].<br>"
+1 -1
View File
@@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
qdel(M)
if(intercom_range_display_status)
for(var/obj/item/device/radio/intercom/I in world)
for(var/obj/item/radio/intercom/I in world)
for(var/turf/T in orange(7,I))
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
if (!(F in view(7,I.loc)))
@@ -16,7 +16,7 @@
armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70)
actions_types = list(/datum/action/item_action/hands_free/activate)
allowed = list(
/obj/item/device/abductor,
/obj/item/abductor,
/obj/item/abductor_baton,
/obj/item/melee/baton,
/obj/item/gun/energy,
@@ -129,16 +129,16 @@
. = ..()
/obj/item/device/abductor
/obj/item/abductor
icon = 'icons/obj/abductor.dmi'
/obj/item/device/abductor/proc/AbductorCheck(user)
/obj/item/abductor/proc/AbductorCheck(user)
if(isabductor(user))
return TRUE
to_chat(user, "<span class='warning'>You can't figure how this works!</span>")
return FALSE
/obj/item/device/abductor/proc/ScientistCheck(user)
/obj/item/abductor/proc/ScientistCheck(user)
if(!AbductorCheck(user))
return FALSE
@@ -149,7 +149,7 @@
to_chat(user, "<span class='warning'>You're not trained to use this!</span>")
return FALSE
/obj/item/device/abductor/gizmo
/obj/item/abductor/gizmo
name = "science tool"
desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras."
icon_state = "gizmo_scan"
@@ -160,7 +160,7 @@
var/mob/living/marked = null
var/obj/machinery/abductor/console/console
/obj/item/device/abductor/gizmo/attack_self(mob/user)
/obj/item/abductor/gizmo/attack_self(mob/user)
if(!ScientistCheck(user))
return
if(!console)
@@ -175,7 +175,7 @@
icon_state = "gizmo_scan"
to_chat(user, "<span class='notice'>You switch the device to [mode==GIZMO_SCAN? "SCAN": "MARK"] MODE</span>")
/obj/item/device/abductor/gizmo/attack(mob/living/M, mob/user)
/obj/item/abductor/gizmo/attack(mob/living/M, mob/user)
if(!ScientistCheck(user))
return
if(!console)
@@ -189,7 +189,7 @@
mark(M, user)
/obj/item/device/abductor/gizmo/afterattack(atom/target, mob/living/user, flag, params)
/obj/item/abductor/gizmo/afterattack(atom/target, mob/living/user, flag, params)
if(flag)
return
if(!ScientistCheck(user))
@@ -204,12 +204,12 @@
if(GIZMO_MARK)
mark(target, user)
/obj/item/device/abductor/gizmo/proc/scan(atom/target, mob/living/user)
/obj/item/abductor/gizmo/proc/scan(atom/target, mob/living/user)
if(ishuman(target))
console.AddSnapshot(target)
to_chat(user, "<span class='notice'>You scan [target] and add them to the database.</span>")
/obj/item/device/abductor/gizmo/proc/mark(atom/target, mob/living/user)
/obj/item/abductor/gizmo/proc/mark(atom/target, mob/living/user)
if(marked == target)
to_chat(user, "<span class='warning'>This specimen is already marked!</span>")
return
@@ -222,7 +222,7 @@
else
prepare(target,user)
/obj/item/device/abductor/gizmo/proc/prepare(atom/target, mob/living/user)
/obj/item/abductor/gizmo/proc/prepare(atom/target, mob/living/user)
if(get_dist(target,user)>1)
to_chat(user, "<span class='warning'>You need to be next to the specimen to prepare it for transport!</span>")
return
@@ -231,13 +231,13 @@
marked = target
to_chat(user, "<span class='notice'>You finish preparing [target] for transport.</span>")
/obj/item/device/abductor/gizmo/Destroy()
/obj/item/abductor/gizmo/Destroy()
if(console)
console.gizmo = null
. = ..()
/obj/item/device/abductor/silencer
/obj/item/abductor/silencer
name = "abductor silencer"
desc = "A compact device used to shut down communications equipment."
icon_state = "silencer"
@@ -245,19 +245,19 @@
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
/obj/item/device/abductor/silencer/attack(mob/living/M, mob/user)
/obj/item/abductor/silencer/attack(mob/living/M, mob/user)
if(!AbductorCheck(user))
return
radio_off(M, user)
/obj/item/device/abductor/silencer/afterattack(atom/target, mob/living/user, flag, params)
/obj/item/abductor/silencer/afterattack(atom/target, mob/living/user, flag, params)
if(flag)
return
if(!AbductorCheck(user))
return
radio_off(target, user)
/obj/item/device/abductor/silencer/proc/radio_off(atom/target, mob/living/user)
/obj/item/abductor/silencer/proc/radio_off(atom/target, mob/living/user)
if( !(user in (viewers(7,target))) )
return
@@ -270,17 +270,17 @@
to_chat(user, "<span class='notice'>You silence [M]'s radio devices.</span>")
radio_off_mob(M)
/obj/item/device/abductor/silencer/proc/radio_off_mob(mob/living/carbon/human/M)
/obj/item/abductor/silencer/proc/radio_off_mob(mob/living/carbon/human/M)
var/list/all_items = M.GetAllContents()
for(var/obj/I in all_items)
if(istype(I, /obj/item/device/radio/))
var/obj/item/device/radio/r = I
if(istype(I, /obj/item/radio/))
var/obj/item/radio/r = I
r.listening = 0
if(!istype(I, /obj/item/device/radio/headset))
if(!istype(I, /obj/item/radio/headset))
r.broadcasting = 0 //goddamned headset hacks
/obj/item/device/abductor/mind_device
/obj/item/abductor/mind_device
name = "mental interface device"
desc = "A dual-mode tool for directly communicating with sentient brains. It can be used to send a direct message to a target, \
or to send a command to a test subject with a charged gland."
@@ -290,7 +290,7 @@
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
var/mode = MIND_DEVICE_MESSAGE
/obj/item/device/abductor/mind_device/attack_self(mob/user)
/obj/item/abductor/mind_device/attack_self(mob/user)
if(!ScientistCheck(user))
return
@@ -302,7 +302,7 @@
icon_state = "mind_device_message"
to_chat(user, "<span class='notice'>You switch the device to [mode==MIND_DEVICE_MESSAGE? "TRANSMISSION": "COMMAND"] MODE</span>")
/obj/item/device/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params)
/obj/item/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params)
if(!ScientistCheck(user))
return
@@ -312,7 +312,7 @@
if(MIND_DEVICE_MESSAGE)
mind_message(target, user)
/obj/item/device/abductor/mind_device/proc/mind_control(atom/target, mob/living/user)
/obj/item/abductor/mind_device/proc/mind_control(atom/target, mob/living/user)
if(iscarbon(target))
var/mob/living/carbon/C = target
var/obj/item/organ/heart/gland/G = C.getorganslot("heart")
@@ -345,7 +345,7 @@
G.mind_control(command, user)
to_chat(user, "<span class='notice'>You send the command to your target.</span>")
/obj/item/device/abductor/mind_device/proc/mind_message(atom/target, mob/living/user)
/obj/item/abductor/mind_device/proc/mind_message(atom/target, mob/living/user)
if(isliving(target))
var/mob/living/L = target
if(L.stat == DEAD)
@@ -362,7 +362,7 @@
log_talk(user,"[key_name(user)] sent an abductor mind message to [L]/[L.ckey]: '[message]'", LOGSAY)
/obj/item/device/firing_pin/abductor
/obj/item/firing_pin/abductor
name = "alien firing pin"
icon_state = "firing_pin_ayy"
desc = "This firing pin is slimy and warm; you can swear you feel it \
@@ -370,14 +370,14 @@
fail_message = "<span class='abductor'>\
Firing error, please contact Command.</span>"
/obj/item/device/firing_pin/abductor/pin_auth(mob/living/user)
/obj/item/firing_pin/abductor/pin_auth(mob/living/user)
. = isabductor(user)
/obj/item/gun/energy/alien
name = "alien pistol"
desc = "A complicated gun that fires bursts of high-intensity radiation."
ammo_type = list(/obj/item/ammo_casing/energy/declone)
pin = /obj/item/device/firing_pin/abductor
pin = /obj/item/firing_pin/abductor
icon_state = "alienpistol"
item_state = "alienpistol"
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
@@ -613,20 +613,20 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(BATON_PROBE)
to_chat(user, "<span class='warning'>The baton is in probing mode.</span>")
/obj/item/device/radio/headset/abductor
/obj/item/radio/headset/abductor
name = "alien headset"
desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows."
icon = 'icons/obj/abductor.dmi'
icon_state = "abductor_headset"
item_state = "abductor_headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/captain
keyslot2 = new /obj/item/encryptionkey/heads/captain
flags_2 = BANG_PROTECT_2
/obj/item/device/radio/headset/abductor/Initialize(mapload)
/obj/item/radio/headset/abductor/Initialize(mapload)
. = ..()
make_syndie()
/obj/item/device/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
return // Stops humans from disassembling abductor headsets.
return ..()
@@ -3,7 +3,7 @@
uniform = /obj/item/clothing/under/color/grey //they're greys gettit
shoes = /obj/item/clothing/shoes/combat
back = /obj/item/storage/backpack
ears = /obj/item/device/radio/headset/abductor
ears = /obj/item/radio/headset/abductor
/datum/outfit/abductor/proc/link_to_console(mob/living/carbon/human/H, team_number)
var/datum/antagonist/abductor/A = H.mind.has_antag_datum(/datum/antagonist/abductor)
@@ -21,7 +21,7 @@
var/obj/item/storage/backpack/B = locate() in H
if(B)
for(var/obj/item/device/abductor/gizmo/G in B.contents)
for(var/obj/item/abductor/gizmo/G in B.contents)
console.AddGizmo(G)
/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -39,14 +39,14 @@
backpack_contents = list(
/obj/item/gun/energy/alien = 1,
/obj/item/device/abductor/silencer = 1
/obj/item/abductor/silencer = 1
)
/datum/outfit/abductor/scientist
name = "Abductor Scientist"
backpack_contents = list(
/obj/item/device/abductor/gizmo = 1
/obj/item/abductor/gizmo = 1
)
/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -18,7 +18,7 @@
icon_state = "console"
density = TRUE
anchored = TRUE
var/obj/item/device/abductor/gizmo/gizmo
var/obj/item/abductor/gizmo/gizmo
var/obj/item/clothing/suit/armor/abductor/vest/vest
var/obj/machinery/abductor/experiment/experiment
var/obj/machinery/abductor/pad/pad
@@ -106,13 +106,13 @@
if("helmet")
Dispense(/obj/item/clothing/head/helmet/abductor)
if("silencer")
Dispense(/obj/item/device/abductor/silencer)
Dispense(/obj/item/abductor/silencer)
if("tool")
Dispense(/obj/item/device/abductor/gizmo)
Dispense(/obj/item/abductor/gizmo)
if("vest")
Dispense(/obj/item/clothing/suit/armor/abductor/vest)
if("mind_device")
Dispense(/obj/item/device/abductor/mind_device,cost=2)
Dispense(/obj/item/abductor/mind_device,cost=2)
updateUsrDialog()
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
@@ -181,7 +181,7 @@
return
disguises[entry.name] = entry
/obj/machinery/abductor/console/proc/AddGizmo(obj/item/device/abductor/gizmo/G)
/obj/machinery/abductor/console/proc/AddGizmo(obj/item/abductor/gizmo/G)
if(G == gizmo && G.console == src)
return FALSE
@@ -205,7 +205,7 @@
return TRUE
/obj/machinery/abductor/console/attackby(obj/O, mob/user, params)
if(istype(O, /obj/item/device/abductor/gizmo) && AddGizmo(O))
if(istype(O, /obj/item/abductor/gizmo) && AddGizmo(O))
to_chat(user, "<span class='notice'>You link the tool to the console.</span>")
else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest) && AddVest(O))
to_chat(user, "<span class='notice'>You link the vest to the console.</span>")
@@ -227,7 +227,7 @@
return 15
/obj/structure/blob/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/analyzer))
if(istype(I, /obj/item/analyzer))
user.changeNext_move(CLICK_CD_MELEE)
to_chat(user, "<b>The analyzer beeps once, then reports:</b><br>")
SEND_SOUND(user, sound('sound/machines/ping.ogg'))
@@ -446,7 +446,7 @@
icon_state = "lingspacesuit"
desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel."
flags_1 = STOPSPRESSUREDMAGE_1 | NODROP_1 | DROPDEL_1 //Not THICKMATERIAL_1 because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff)
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) //No armor at all.
/obj/item/clothing/suit/space/changeling/Initialize()
@@ -72,6 +72,6 @@
var/mob/living/L = AM
L.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
L.clear_fullscreen("flash", 5)
var/obj/item/device/transfer_valve/TTV = locate() in L.GetAllContents()
var/obj/item/transfer_valve/TTV = locate() in L.GetAllContents()
if(TTV)
to_chat(L, "<span class='userdanger'>The air resonates with the Ark's presence; your explosives will be significantly dampened here!</span>")
@@ -68,7 +68,7 @@
heat_protection = CHEST|GROIN|LEGS
resistance_flags = FIRE_PROOF | ACID_PROOF
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/device/mmi/posibrain/soul_vessel)
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel)
/obj/item/clothing/suit/armor/clockwork/Initialize()
. = ..()
@@ -1,5 +1,5 @@
//Soul vessel: An ancient positronic brain that serves only Ratvar.
/obj/item/device/mmi/posibrain/soul_vessel
/obj/item/mmi/posibrain/soul_vessel
name = "soul vessel"
desc = "A heavy brass cube, three inches to a side, with a single protruding cogwheel."
var/clockwork_desc = "A soul vessel, an ancient relic that can attract the souls of the damned or simply rip a mind from an unconscious or dead human.\n\
@@ -25,35 +25,35 @@
force_replace_ai_name = TRUE
overrides_aicore_laws = TRUE
/obj/item/device/mmi/posibrain/soul_vessel/Initialize()
/obj/item/mmi/posibrain/soul_vessel/Initialize()
. = ..()
radio.on = FALSE
laws = new /datum/ai_laws/ratvar()
braintype = picked_name
GLOB.all_clockwork_objects += src
/obj/item/device/mmi/posibrain/soul_vessel/Destroy()
/obj/item/mmi/posibrain/soul_vessel/Destroy()
GLOB.all_clockwork_objects -= src
return ..()
/obj/item/device/mmi/posibrain/soul_vessel/examine(mob/user)
/obj/item/mmi/posibrain/soul_vessel/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
..()
desc = initial(desc)
/obj/item/device/mmi/posibrain/soul_vessel/transfer_personality(mob/candidate)
/obj/item/mmi/posibrain/soul_vessel/transfer_personality(mob/candidate)
. = ..()
if(.)
add_servant_of_ratvar(brainmob, TRUE)
/obj/item/device/mmi/posibrain/soul_vessel/attack_self(mob/living/user)
/obj/item/mmi/posibrain/soul_vessel/attack_self(mob/living/user)
if(!is_servant_of_ratvar(user))
to_chat(user, "<span class='warning'>You fiddle around with [src], to no avail.</span>")
return FALSE
..()
/obj/item/device/mmi/posibrain/soul_vessel/attack(mob/living/target, mob/living/carbon/human/user)
/obj/item/mmi/posibrain/soul_vessel/attack(mob/living/target, mob/living/carbon/human/user)
if(!is_servant_of_ratvar(user) || !ishuman(target))
..()
return
+2 -2
View File
@@ -178,8 +178,8 @@
playsound(mobloc, 'sound/magic/exit_blood.ogg', 100, 1)
if(B.current != owner)
var/turf/final = pick(destinations)
if(istype(B.current.loc, /obj/item/device/soulstone))
var/obj/item/device/soulstone/S = B.current.loc
if(istype(B.current.loc, /obj/item/soulstone))
var/obj/item/soulstone/S = B.current.loc
S.release_shades(owner)
B.current.setDir(SOUTH)
new /obj/effect/temp_visual/cult/blood(final)
+10 -10
View File
@@ -189,12 +189,12 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.stat != CONSCIOUS)
var/obj/item/device/soulstone/SS = new /obj/item/device/soulstone(src)
var/obj/item/soulstone/SS = new /obj/item/soulstone(src)
SS.attack(H, user)
if(!LAZYLEN(SS.contents))
qdel(SS)
if(istype(target, /obj/structure/constructshell) && contents.len)
var/obj/item/device/soulstone/SS = contents[1]
var/obj/item/soulstone/SS = contents[1]
if(istype(SS))
SS.transfer_soul("CONSTRUCT",target,user)
qdel(SS)
@@ -484,14 +484,14 @@
color = "#333333"
list_reagents = list("unholywater" = 50)
/obj/item/device/shuttle_curse
/obj/item/shuttle_curse
name = "cursed orb"
desc = "You peer within this smokey orb and glimpse terrible fates befalling the escape shuttle."
icon = 'icons/obj/cult.dmi'
icon_state ="shuttlecurse"
var/global/curselimit = 0
/obj/item/device/shuttle_curse/attack_self(mob/living/user)
/obj/item/shuttle_curse/attack_self(mob/living/user)
if(!iscultist(user))
user.dropItemToGround(src, TRUE)
user.Knockdown(100)
@@ -538,28 +538,28 @@
priority_announce("[message]", "System Failure", 'sound/misc/notice1.ogg')
curselimit++
/obj/item/device/cult_shift
/obj/item/cult_shift
name = "veil shifter"
desc = "This relic instantly teleports you, and anything you're pulling, forward by a moderate distance."
icon = 'icons/obj/cult.dmi'
icon_state ="shifter"
var/uses = 4
/obj/item/device/cult_shift/examine(mob/user)
/obj/item/cult_shift/examine(mob/user)
..()
if(uses)
to_chat(user, "<span class='cult'>It has [uses] use\s remaining.</span>")
else
to_chat(user, "<span class='cult'>It seems drained.</span>")
/obj/item/device/cult_shift/proc/handle_teleport_grab(turf/T, mob/user)
/obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user)
var/mob/living/carbon/C = user
if(C.pulling)
var/atom/movable/pulled = C.pulling
pulled.forceMove(T)
. = pulled
/obj/item/device/cult_shift/attack_self(mob/user)
/obj/item/cult_shift/attack_self(mob/user)
if(!uses || !iscarbon(user))
to_chat(user, "<span class='warning'>\The [src] is dull and unmoving in your hands.</span>")
return
@@ -592,7 +592,7 @@
else
to_chat(C, "<span class='danger'>The veil cannot be torn here!</span>")
/obj/item/device/flashlight/flare/culttorch
/obj/item/flashlight/flare/culttorch
name = "void torch"
desc = "Used by veteran cultists to instantly transport items to their needful bretheren."
w_class = WEIGHT_CLASS_SMALL
@@ -605,7 +605,7 @@
on = TRUE
var/charges = 5
/obj/item/device/flashlight/flare/culttorch/afterattack(atom/movable/A, mob/user, proximity)
/obj/item/flashlight/flare/culttorch/afterattack(atom/movable/A, mob/user, proximity)
if(!proximity)
return
if(!iscultist(user))
@@ -258,10 +258,10 @@
if("Zealot's Blindfold")
pickedtype += /obj/item/clothing/glasses/hud/health/night/cultblind
if("Shuttle Curse")
pickedtype += /obj/item/device/shuttle_curse
pickedtype += /obj/item/shuttle_curse
if("Veil Walker Set")
pickedtype += /obj/item/device/cult_shift
pickedtype += /obj/item/device/flashlight/flare/culttorch
pickedtype += /obj/item/cult_shift
pickedtype += /obj/item/flashlight/flare/culttorch
if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
for(var/N in pickedtype)
+1 -1
View File
@@ -299,7 +299,7 @@ structure_check() searches for nearby cultist structures required for the invoca
else
to_chat(M, "<span class='cultlarge'>\"I accept this meager sacrifice.\"</span>")
var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src))
var/obj/item/soulstone/stone = new /obj/item/soulstone(get_turf(src))
if(sacrificial.mind && !sacrificial.suiciding)
stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul()
stone.transfer_soul("FORCE", sacrificial, usr)
@@ -47,7 +47,7 @@
for(var/obj/item/I in H.held_items)
qdel(I)
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), slot_l_store)
@@ -5,7 +5,7 @@
GLOBAL_LIST_EMPTY(jam_on_wardec)
/obj/item/device/nuclear_challenge
/obj/item/nuclear_challenge
name = "Declaration of War (Challenge Mode)"
icon_state = "gangtool-red"
item_state = "radio"
@@ -15,9 +15,9 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \
Must be used within five minutes, or your benefactors will lose interest."
var/declaring_war = FALSE
var/uplink_type = /obj/item/device/radio/uplink/nuclear
var/uplink_type = /obj/item/radio/uplink/nuclear
/obj/item/device/nuclear_challenge/attack_self(mob/living/user)
/obj/item/nuclear_challenge/attack_self(mob/living/user)
if(!check_allowed(user))
return
@@ -66,7 +66,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
qdel(src)
/obj/item/device/nuclear_challenge/proc/check_allowed(mob/living/user)
/obj/item/nuclear_challenge/proc/check_allowed(mob/living/user)
if(declaring_war)
to_chat(user, "You are already in the process of declaring war! Make your mind up.")
return FALSE
@@ -86,8 +86,8 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
return FALSE
return TRUE
/obj/item/device/nuclear_challenge/clownops
uplink_type = /obj/item/device/radio/uplink/clownop
/obj/item/nuclear_challenge/clownops
uplink_type = /obj/item/radio/uplink/clownop
#undef CHALLENGE_TELECRYSTALS
#undef CHALLENGE_TIME_LIMIT
@@ -112,7 +112,7 @@
/datum/antagonist/rev/head/proc/admin_take_flash(mob/admin)
var/list/L = owner.current.get_contents()
var/obj/item/device/assembly/flash/flash = locate() in L
var/obj/item/assembly/flash/flash = locate() in L
if (!flash)
to_chat(admin, "<span class='danger'>Deleting flash failed!</span>")
return
@@ -133,7 +133,7 @@
/datum/antagonist/rev/head/proc/admin_repair_flash(mob/admin)
var/list/L = owner.current.get_contents()
var/obj/item/device/assembly/flash/flash = locate() in L
var/obj/item/assembly/flash/flash = locate() in L
if (!flash)
to_chat(admin, "<span class='danger'>Repairing flash failed!</span>")
else
@@ -232,7 +232,7 @@
H.dna.remove_mutation(CLOWNMUT)
if(give_flash)
var/obj/item/device/assembly/flash/T = new(H)
var/obj/item/assembly/flash/T = new(H)
var/list/slots = list (
"backpack" = slot_in_backpack,
"left pocket" = slot_l_store,
+3 -3
View File
@@ -1,5 +1,5 @@
////Deactivated swarmer shell////
/obj/item/device/deactivated_swarmer
/obj/item/deactivated_swarmer
name = "deactivated swarmer"
desc = "A shell of swarmer that was completely powered down. It can no longer activate itself."
icon = 'icons/mob/swarmer.dmi'
@@ -45,7 +45,7 @@
user.visible_message("<span class='warning'>[usr.name] deactivates [src].</span>",
"<span class='notice'>After some fiddling, you find a way to disable [src]'s power source.</span>",
"<span class='italics'>You hear clicking.</span>")
new /obj/item/device/deactivated_swarmer(get_turf(src))
new /obj/item/deactivated_swarmer(get_turf(src))
qdel(src)
else
..()
@@ -399,7 +399,7 @@
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
return FALSE
/obj/item/device/deactivated_swarmer/IntegrateAmount()
/obj/item/deactivated_swarmer/IntegrateAmount()
return 50
/obj/machinery/hydroponics/soil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
@@ -138,7 +138,7 @@
/////////////////////////////////////////Necromantic Stone///////////////////
/obj/item/device/necromantic_stone
/obj/item/necromantic_stone
name = "necromantic stone"
desc = "A shard capable of resurrecting humans as skeleton thralls."
icon = 'icons/obj/wizard.dmi'
@@ -150,10 +150,10 @@
var/list/spooky_scaries = list()
var/unlimited = 0
/obj/item/device/necromantic_stone/unlimited
/obj/item/necromantic_stone/unlimited
unlimited = 1
/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
/obj/item/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
if(!istype(M))
return ..()
@@ -183,7 +183,7 @@
desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]"
/obj/item/device/necromantic_stone/proc/check_spooky()
/obj/item/necromantic_stone/proc/check_spooky()
if(unlimited) //no point, the list isn't used.
return
@@ -199,7 +199,7 @@
listclearnulls(spooky_scaries)
//Funny gimmick, skeletons always seem to wear roman/ancient armour
/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H)
/obj/item/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H)
for(var/obj/item/I in H)
H.dropItemToGround(I)
@@ -1,4 +1,4 @@
/obj/item/device/soulstone
/obj/item/soulstone
name = "soulstone shard"
icon = 'icons/obj/wizard.dmi'
icon_state = "soulstone"
@@ -14,7 +14,7 @@
var/old_shard = FALSE
var/spent = FALSE
/obj/item/device/soulstone/proc/was_used()
/obj/item/soulstone/proc/was_used()
if(old_shard)
spent = TRUE
name = "dull [name]"
@@ -22,20 +22,20 @@
the 'Soul Stone'. The shard lies still, dull and lifeless; \
whatever spark it once held long extinguished."
/obj/item/device/soulstone/anybody
/obj/item/soulstone/anybody
usability = 1
/obj/item/device/soulstone/anybody/chaplain
/obj/item/soulstone/anybody/chaplain
name = "mysterious old shard"
old_shard = TRUE
/obj/item/device/soulstone/pickup(mob/living/user)
/obj/item/soulstone/pickup(mob/living/user)
..()
if(!iscultist(user) && !iswizard(user) && !usability)
to_chat(user, "<span class='danger'>An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.</span>")
user.Dizzy(120)
/obj/item/device/soulstone/examine(mob/user)
/obj/item/soulstone/examine(mob/user)
..()
if(usability || iscultist(user) || iswizard(user) || isobserver(user))
if (old_shard)
@@ -46,14 +46,14 @@
if(spent)
to_chat(user, "<span class='cult'>This shard is spent; it is now just a creepy rock.</span>")
/obj/item/device/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle.
/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle.
for(var/mob/living/simple_animal/shade/A in src)
A.death()
return ..()
//////////////////////////////Capturing////////////////////////////////////////////////////////
/obj/item/device/soulstone/attack(mob/living/carbon/human/M, mob/living/user)
/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user)
if(!iscultist(user) && !iswizard(user) && !usability)
user.Unconscious(100)
to_chat(user, "<span class='userdanger'>Your body is wracked with debilitating pain!</span>")
@@ -71,7 +71,7 @@
///////////////////Options for using captured souls///////////////////////////////////////
/obj/item/device/soulstone/attack_self(mob/living/user)
/obj/item/soulstone/attack_self(mob/living/user)
if(!in_range(src, user))
return
if(!iscultist(user) && !iswizard(user) && !usability)
@@ -80,7 +80,7 @@
return
release_shades(user)
/obj/item/device/soulstone/proc/release_shades(mob/user)
/obj/item/soulstone/proc/release_shades(mob/user)
for(var/mob/living/simple_animal/shade/A in src)
A.status_flags &= ~GODMODE
A.canmove = 1
@@ -111,8 +111,8 @@
to_chat(user, "<span class='cult'>A <b>Juggernaut</b>, which is very hard to kill and can produce temporary walls, but is slow.</span>")
/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/device/soulstone))
var/obj/item/device/soulstone/SS = O
if(istype(O, /obj/item/soulstone))
var/obj/item/soulstone/SS = O
if(!iscultist(user) && !iswizard(user) && !SS.usability)
to_chat(user, "<span class='danger'>An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.</span>")
user.Dizzy(120)
@@ -125,7 +125,7 @@
////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
/obj/item/device/soulstone/proc/transfer_soul(choice as text, target, mob/user)
/obj/item/soulstone/proc/transfer_soul(choice as text, target, mob/user)
switch(choice)
if("FORCE")
if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul
@@ -233,7 +233,7 @@
newstruct.cancel_camera()
/obj/item/device/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/U, vic = 0)
/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/U, vic = 0)
new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
T.stop_sound_channel(CHANNEL_HEARTBEAT)
T.invisibility = INVISIBILITY_ABSTRACT
@@ -260,7 +260,7 @@
to_chat(U, "<span class='info'><b>Capture successful!</b>:</span> [T.real_name]'s soul has been ripped from their body and stored within the soul stone.")
/obj/item/device/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U)
/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U)
var/mob/dead/observer/chosen_ghost
for(var/mob/dead/observer/ghost in GLOB.player_list) //We put them back in their body
@@ -337,7 +337,7 @@
/datum/spellbook_entry/item/necrostone
name = "A Necromantic Stone"
desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command."
item_path = /obj/item/device/necromantic_stone
item_path = /obj/item/necromantic_stone
category = "Assistance"
/datum/spellbook_entry/item/wands
+18 -18
View File
@@ -4,7 +4,7 @@
#define WIRE_RADIO_RECEIVE (1<<3)
#define WIRE_RADIO_PULSE (1<<4)
/obj/item/device/assembly
/obj/item/assembly
name = "assembly"
desc = "A small electronic device that should never exist."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
@@ -18,28 +18,28 @@
var/secured = TRUE
var/list/attached_overlays = null
var/obj/item/device/assembly_holder/holder = null
var/obj/item/assembly_holder/holder = null
var/wire_type = WIRE_RECEIVE | WIRE_PULSE
var/attachable = FALSE // can this be attached to wires
var/datum/wires/connected = null
var/next_activate = 0 //When we're next allowed to activate - for spam control
/obj/item/device/assembly/get_part_rating()
/obj/item/assembly/get_part_rating()
return 1
/obj/item/device/assembly/proc/on_attach()
/obj/item/assembly/proc/on_attach()
/obj/item/device/assembly/proc/on_detach()
/obj/item/assembly/proc/on_detach()
/obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved
/obj/item/assembly/proc/holder_movement() //Called when the holder is moved
return
/obj/item/device/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc)
/obj/item/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc)
return "The trigger assembly looks broken!"
/obj/item/device/assembly/proc/is_secured(mob/user)
/obj/item/assembly/proc/is_secured(mob/user)
if(!secured)
to_chat(user, "<span class='warning'>The [name] is unsecured!</span>")
return FALSE
@@ -47,7 +47,7 @@
//Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
/obj/item/device/assembly/proc/pulsed(radio = 0)
/obj/item/assembly/proc/pulsed(radio = 0)
if(wire_type & WIRE_RECEIVE)
INVOKE_ASYNC(src, .proc/activate)
if(radio && (wire_type & WIRE_RADIO_RECEIVE))
@@ -56,7 +56,7 @@
//Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
/obj/item/device/assembly/proc/pulse(radio = 0)
/obj/item/assembly/proc/pulse(radio = 0)
if(connected && wire_type)
connected.pulse_assembly(src)
return TRUE
@@ -68,24 +68,24 @@
// What the device does when turned on
/obj/item/device/assembly/proc/activate()
/obj/item/assembly/proc/activate()
if(QDELETED(src) || !secured || (next_activate > world.time))
return FALSE
next_activate = world.time + 30
return TRUE
/obj/item/device/assembly/proc/toggle_secure()
/obj/item/assembly/proc/toggle_secure()
secured = !secured
update_icon()
return secured
/obj/item/device/assembly/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/attackby(obj/item/W, mob/user, params)
if(isassembly(W))
var/obj/item/device/assembly/A = W
var/obj/item/assembly/A = W
if((!A.secured) && (!secured))
holder = new/obj/item/device/assembly_holder(get_turf(src))
holder = new/obj/item/assembly_holder(get_turf(src))
holder.assemble(src,A,user)
to_chat(user, "<span class='notice'>You attach and secure \the [A] to \the [src]!</span>")
else
@@ -100,7 +100,7 @@
..()
/obj/item/device/assembly/examine(mob/user)
/obj/item/assembly/examine(mob/user)
..()
if(secured)
to_chat(user, "\The [src] is secured and ready to be used.")
@@ -108,12 +108,12 @@
to_chat(user, "\The [src] can be attached to other things.")
/obj/item/device/assembly/attack_self(mob/user)
/obj/item/assembly/attack_self(mob/user)
if(!user)
return FALSE
user.set_machine(src)
interact(user)
return TRUE
/obj/item/device/assembly/interact(mob/user)
/obj/item/assembly/interact(mob/user)
return ui_interact(user)
+12 -12
View File
@@ -1,4 +1,4 @@
/obj/item/device/onetankbomb
/obj/item/onetankbomb
name = "bomb"
icon = 'icons/obj/tank.dmi'
item_state = "assembly"
@@ -10,14 +10,14 @@
throw_range = 4
flags_1 = CONDUCT_1
var/status = FALSE //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank
/obj/item/device/onetankbomb/examine(mob/user)
/obj/item/onetankbomb/examine(mob/user)
bombtank.examine(user)
/obj/item/device/onetankbomb/update_icon()
/obj/item/onetankbomb/update_icon()
if(bombtank)
icon = bombtank.icon
icon_state = bombtank.icon_state
@@ -26,8 +26,8 @@
copy_overlays(bombassembly)
add_overlay("bomb_assembly")
/obj/item/device/onetankbomb/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/analyzer))
/obj/item/onetankbomb/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/analyzer))
bombtank.attackby(W, user)
return
if(istype(W, /obj/item/wrench) && !status) //This is basically bomb assembly code inverted. apparently it works.
@@ -54,12 +54,12 @@
add_fingerprint(user)
..()
/obj/item/device/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly
/obj/item/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly
bombassembly.attack_self(user, TRUE)
add_fingerprint(user)
return
/obj/item/device/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
/obj/item/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
visible_message("[icon2html(src, viewers(src))] *beep* *beep*", "*beep* *beep*")
sleep(10)
if(!src)
@@ -69,11 +69,11 @@
else
bombtank.release()
/obj/item/device/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
/obj/item/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
if(bombassembly)
bombassembly.Crossed(AM)
/obj/item/device/onetankbomb/on_found(mob/finder) //for mousetraps
/obj/item/onetankbomb/on_found(mob/finder) //for mousetraps
if(bombassembly)
bombassembly.on_found(finder)
@@ -81,7 +81,7 @@
// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ----------
//Bomb assembly proc. This turns assembly+tank into a bomb
/obj/item/tank/proc/bomb_assemble(obj/item/device/assembly_holder/assembly, mob/living/user)
/obj/item/tank/proc/bomb_assemble(obj/item/assembly_holder/assembly, mob/living/user)
//Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
if(isigniter(assembly.a_left) == isigniter(assembly.a_right))
return
@@ -94,7 +94,7 @@
to_chat(user, "<span class='warning'>[assembly] is stuck to your hand!</span>")
return
var/obj/item/device/onetankbomb/bomb = new
var/obj/item/onetankbomb/bomb = new
user.transferItemToLoc(src, bomb)
user.transferItemToLoc(assembly, bomb)
+13 -13
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/control
/obj/item/assembly/control
name = "blast door controller"
desc = "A small electronic device able to control a blast door remotely."
icon_state = "control"
@@ -7,12 +7,12 @@
var/can_change_id = 0
var/cooldown = 0//Door cooldowns
/obj/item/device/assembly/control/examine(mob/user)
/obj/item/assembly/control/examine(mob/user)
..()
if(id)
to_chat(user, "<span class='notice'>Its channel ID is '[id]'.</span>")
/obj/item/device/assembly/control/activate()
/obj/item/assembly/control/activate()
cooldown = 1
var/openclose
for(var/obj/machinery/door/poddoor/M in GLOB.machines)
@@ -24,7 +24,7 @@
cooldown = 0
/obj/item/device/assembly/control/airlock
/obj/item/assembly/control/airlock
name = "airlock controller"
desc = "A small electronic device able to control an airlock remotely."
id = "badmin" // Set it to null for MEGAFUN.
@@ -37,7 +37,7 @@
16= door safties (SAFE)
*/
/obj/item/device/assembly/control/airlock/activate()
/obj/item/assembly/control/airlock/activate()
cooldown = 1
var/doors_need_closing = FALSE
var/list/obj/machinery/door/airlock/open_or_close = list()
@@ -70,11 +70,11 @@
cooldown = 0
/obj/item/device/assembly/control/massdriver
/obj/item/assembly/control/massdriver
name = "mass driver controller"
desc = "A small electronic device able to control a mass driver."
/obj/item/device/assembly/control/massdriver/activate()
/obj/item/assembly/control/massdriver/activate()
cooldown = 1
for(var/obj/machinery/door/poddoor/M in GLOB.machines)
if (M.id == src.id)
@@ -96,11 +96,11 @@
cooldown = 0
/obj/item/device/assembly/control/igniter
/obj/item/assembly/control/igniter
name = "ignition controller"
desc = "A remote controller for a mounted igniter."
/obj/item/device/assembly/control/igniter/activate()
/obj/item/assembly/control/igniter/activate()
cooldown = 1
for(var/obj/machinery/sparker/M in GLOB.machines)
if (M.id == src.id)
@@ -116,11 +116,11 @@
cooldown = 0
/obj/item/device/assembly/control/flasher
/obj/item/assembly/control/flasher
name = "flasher controller"
desc = "A remote controller for a mounted flasher."
/obj/item/device/assembly/control/flasher/activate()
/obj/item/assembly/control/flasher/activate()
cooldown = 1
for(var/obj/machinery/flasher/M in GLOB.machines)
if(M.id == src.id)
@@ -130,11 +130,11 @@
cooldown = 0
/obj/item/device/assembly/control/crematorium
/obj/item/assembly/control/crematorium
name = "crematorium controller"
desc = "An evil-looking remote controller for a crematorium."
/obj/item/device/assembly/control/crematorium/activate()
/obj/item/assembly/control/crematorium/activate()
cooldown = 1
for (var/obj/structure/bodycontainer/crematorium/C in GLOB.crematoriums)
if (C.id == id)
+33 -32
View File
@@ -1,6 +1,7 @@
/obj/item/device/assembly/flash
/obj/item/assembly/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"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
@@ -15,7 +16,7 @@
var/cooldown = 0
var/last_trigger = 0 //Last time it was successfully triggered.
/obj/item/device/assembly/flash/suicide_act(mob/living/user)
/obj/item/assembly/flash/suicide_act(mob/living/user)
if (crit_fail)
user.visible_message("<span class='suicide'>[user] raises \the [src] up to [user.p_their()] eyes and activates it ... but its burnt out!</span>")
return SHAME
@@ -26,7 +27,7 @@
attack(user,user)
return FIRELOSS
/obj/item/device/assembly/flash/update_icon(flash = FALSE)
/obj/item/assembly/flash/update_icon(flash = FALSE)
cut_overlays()
attached_overlays = list()
if(crit_fail)
@@ -39,13 +40,13 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
/obj/item/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
flash_carbon(user, user, 15, 0)
return FALSE
return TRUE
/obj/item/device/assembly/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/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
if(!crit_fail)
crit_fail = TRUE
update_icon()
@@ -56,7 +57,7 @@
var/turf/T = get_turf(src)
T.visible_message("<span class='danger'>[src] burns out!</span>")
/obj/item/device/assembly/flash/proc/flash_recharge(interval = 10)
/obj/item/assembly/flash/proc/flash_recharge(interval = 10)
var/deciseconds_passed = world.time - last_used
for(var/seconds = deciseconds_passed / 10, seconds >= interval, seconds -= interval) //get 1 charge every interval
times_used--
@@ -68,7 +69,7 @@
return TRUE
//BYPASS CHECKS ALSO PREVENTS BURNOUT!
/obj/item/device/assembly/flash/proc/AOE_flash(bypass_checks = FALSE, range = 3, power = 5, targeted = FALSE, mob/user)
/obj/item/assembly/flash/proc/AOE_flash(bypass_checks = FALSE, range = 3, power = 5, targeted = FALSE, mob/user)
if(!bypass_checks && !try_use_flash())
return FALSE
var/list/mob/targets = get_flash_targets(get_turf(src), range, FALSE)
@@ -78,7 +79,7 @@
flash_carbon(C, user, power, targeted, TRUE)
return TRUE
/obj/item/device/assembly/flash/proc/get_flash_targets(atom/target_loc, range = 3, override_vision_checks = FALSE)
/obj/item/assembly/flash/proc/get_flash_targets(atom/target_loc, range = 3, override_vision_checks = FALSE)
if(!target_loc)
target_loc = loc
if(override_vision_checks)
@@ -88,7 +89,7 @@
else
return typecache_filter_list(target_loc.GetAllContents(), typecacheof(list(/mob/living)))
/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null)
/obj/item/assembly/flash/proc/try_use_flash(mob/user = null)
if(crit_fail || (world.time < last_trigger + cooldown))
return FALSE
last_trigger = world.time
@@ -100,7 +101,7 @@
return FALSE
return TRUE
/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE)
/obj/item/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE)
if(!istype(M))
return
add_logs(user, M, "[targeted? "flashed(targeted)" : "flashed(AOE)"]", src)
@@ -127,7 +128,7 @@
if(M.flash_act())
M.confused += power
/obj/item/device/assembly/flash/attack(mob/living/M, mob/user)
/obj/item/assembly/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
return FALSE
if(iscarbon(M))
@@ -145,26 +146,26 @@
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>", "<span class='warning'>You fail to blind [M] with the flash!</span>")
/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
/obj/item/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
if(holder)
return FALSE
if(!AOE_flash(FALSE, 3, 5, FALSE, user))
return FALSE
to_chat(user, "<span class='danger'>[src] emits a blinding light!</span>")
/obj/item/device/assembly/flash/emp_act(severity)
/obj/item/assembly/flash/emp_act(severity)
if(!try_use_flash())
return FALSE
AOE_flash()
burn_out()
. = ..()
/obj/item/device/assembly/flash/activate()//AOE flash on signal recieved
/obj/item/assembly/flash/activate()//AOE flash on signal recieved
if(!..())
return
AOE_flash()
/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/living/carbon/human/H, mob/user)
/obj/item/assembly/flash/proc/terrible_conversion_proc(mob/living/carbon/human/H, mob/user)
if(istype(H) && ishuman(user) && H.stat != DEAD)
if(user.mind)
var/datum/antagonist/rev/head/converter = user.mind.has_antag_datum(/datum/antagonist/rev/head)
@@ -182,43 +183,43 @@
to_chat(user, "<span class='warning'>This mind seems resistant to the flash!</span>")
/obj/item/device/assembly/flash/cyborg
/obj/item/assembly/flash/cyborg
/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user)
/obj/item/assembly/flash/cyborg/attack(mob/living/M, mob/user)
..()
new /obj/effect/temp_visual/borgflash(get_turf(src))
/obj/item/device/assembly/flash/cyborg/attack_self(mob/user)
/obj/item/assembly/flash/cyborg/attack_self(mob/user)
..()
new /obj/effect/temp_visual/borgflash(get_turf(src))
/obj/item/device/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params)
return
/obj/item/device/assembly/flash/memorizer
/obj/item/assembly/flash/memorizer
name = "memorizer"
desc = "If you see this, you're not likely to remember it any time soon."
icon = 'icons/obj/device.dmi'
icon_state = "memorizer"
item_state = "nullrod"
/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes
/obj/item/assembly/flash/handheld //this is now the regular pocket flashes
/obj/item/device/assembly/flash/armimplant
/obj/item/assembly/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/cyberimp/arm/flash/I = null
/obj/item/device/assembly/flash/armimplant/burn_out()
/obj/item/assembly/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 = TRUE
addtimer(CALLBACK(src, .proc/cooldown), flashcd * 2)
/obj/item/device/assembly/flash/armimplant/try_use_flash(mob/user = null)
/obj/item/assembly/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>")
@@ -230,10 +231,10 @@
return TRUE
/obj/item/device/assembly/flash/armimplant/proc/cooldown()
/obj/item/assembly/flash/armimplant/proc/cooldown()
overheat = FALSE
/obj/item/device/assembly/flash/shield
/obj/item/assembly/flash/shield
name = "strobe shield"
desc = "A shield with a built in, high intensity light capable of blinding and disorienting suspects. Takes regular handheld flashes as bulbs."
icon = 'icons/obj/items_and_weapons.dmi'
@@ -252,15 +253,15 @@
block_chance = 50
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
/obj/item/device/assembly/flash/shield/flash_recharge(interval=10)
/obj/item/assembly/flash/shield/flash_recharge(interval=10)
if(times_used >= 4)
burn_out()
return FALSE
return TRUE
/obj/item/device/assembly/flash/shield/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/device/assembly/flash/handheld))
var/obj/item/device/assembly/flash/handheld/flash = W
/obj/item/assembly/flash/shield/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/assembly/flash/handheld))
var/obj/item/assembly/flash/handheld/flash = W
if(flash.crit_fail)
to_chat(user, "No sense replacing it with a broken bulb.")
return
@@ -278,7 +279,7 @@
return
..()
/obj/item/device/assembly/flash/shield/update_icon(flash = FALSE)
/obj/item/assembly/flash/shield/update_icon(flash = FALSE)
icon_state = "flashshield"
item_state = "flashshield"
@@ -293,6 +294,6 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/flash/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/assembly/flash/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
activate()
return ..()
+10 -10
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/health
/obj/item/assembly/health
name = "health sensor"
desc = "Used for scanning and monitoring health."
icon_state = "health"
@@ -10,17 +10,17 @@
var/health_scan
var/alarm_health = 0
/obj/item/device/assembly/health/examine(mob/user)
/obj/item/assembly/health/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode.</span>")
/obj/item/device/assembly/health/activate()
/obj/item/assembly/health/activate()
if(!..())
return 0//Cooldown check
toggle_scan()
return 0
/obj/item/device/assembly/health/toggle_secure()
/obj/item/assembly/health/toggle_secure()
secured = !secured
if(secured && scanning)
START_PROCESSING(SSobj, src)
@@ -30,8 +30,8 @@
update_icon()
return secured
/obj/item/device/assembly/health/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/multitool))
/obj/item/assembly/health/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/multitool))
if(alarm_health == 0)
alarm_health = -90
user.show_message("You toggle [src] to \"detect death\" mode.")
@@ -42,7 +42,7 @@
else
return ..()
/obj/item/device/assembly/health/process()
/obj/item/assembly/health/process()
if(!scanning || !secured)
return
@@ -63,7 +63,7 @@
return
return
/obj/item/device/assembly/health/proc/toggle_scan()
/obj/item/assembly/health/proc/toggle_scan()
if(!secured)
return 0
scanning = !scanning
@@ -73,7 +73,7 @@
STOP_PROCESSING(SSobj, src)
return
/obj/item/device/assembly/health/ui_interact(mob/user as mob)//TODO: Change this to the wires thingy
/obj/item/assembly/health/ui_interact(mob/user as mob)//TODO: Change this to the wires thingy
. = ..()
if(!secured)
user.show_message("<span class='warning'>The [name] is unsecured!</span>")
@@ -84,7 +84,7 @@
user << browse(dat, "window=hscan")
onclose(user, "hscan")
/obj/item/device/assembly/health/Topic(href, href_list)
/obj/item/assembly/health/Topic(href, href_list)
..()
if(!ismob(usr))
return
+14 -14
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly_holder
/obj/item/assembly_holder
name = "Assembly"
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
@@ -11,21 +11,21 @@
throw_speed = 2
throw_range = 7
var/obj/item/device/assembly/a_left = null
var/obj/item/device/assembly/a_right = null
var/obj/item/assembly/a_left = null
var/obj/item/assembly/a_right = null
/obj/item/device/assembly_holder/IsAssemblyHolder()
/obj/item/assembly_holder/IsAssemblyHolder()
return 1
/obj/item/device/assembly_holder/proc/assemble(obj/item/device/assembly/A, obj/item/device/assembly/A2, mob/user)
/obj/item/assembly_holder/proc/assemble(obj/item/assembly/A, obj/item/assembly/A2, mob/user)
attach(A,user)
attach(A2,user)
name = "[A.name]-[A2.name] assembly"
update_icon()
SSblackbox.record_feedback("tally", "assembly_made", 1, "[initial(A.name)]-[initial(A2.name)]")
/obj/item/device/assembly_holder/proc/attach(obj/item/device/assembly/A, mob/user)
/obj/item/assembly_holder/proc/attach(obj/item/assembly/A, mob/user)
if(!A.remove_item_from_storage(src))
if(user)
user.transferItemToLoc(A, src)
@@ -38,7 +38,7 @@
else
a_right = A
/obj/item/device/assembly_holder/update_icon()
/obj/item/assembly_holder/update_icon()
cut_overlays()
if(a_left)
add_overlay("[a_left.icon_state]_left")
@@ -55,25 +55,25 @@
if(master)
master.update_icon()
/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj)
/obj/item/assembly_holder/Crossed(atom/movable/AM as mob|obj)
if(a_left)
a_left.Crossed(AM)
if(a_right)
a_right.Crossed(AM)
/obj/item/device/assembly_holder/on_found(mob/finder)
/obj/item/assembly_holder/on_found(mob/finder)
if(a_left)
a_left.on_found(finder)
if(a_right)
a_right.on_found(finder)
/obj/item/device/assembly_holder/Move()
/obj/item/assembly_holder/Move()
. = ..()
if(a_left && a_right)
a_left.holder_movement()
a_right.holder_movement()
/obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
/obj/item/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
. = ..()
if(.)
return
@@ -81,7 +81,7 @@
a_left.holder_movement()
a_right.holder_movement()
/obj/item/device/assembly_holder/attackby(obj/item/W, mob/user, params)
/obj/item/assembly_holder/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
var/turf/T = get_turf(src)
if(!T)
@@ -96,7 +96,7 @@
else
..()
/obj/item/device/assembly_holder/attack_self(mob/user)
/obj/item/assembly_holder/attack_self(mob/user)
src.add_fingerprint(user)
if(!a_left || !a_right)
to_chat(user, "<span class='danger'>Assembly part missing!</span>")
@@ -113,7 +113,7 @@
a_right.attack_self(user)
/obj/item/device/assembly_holder/proc/process_activation(obj/D, normal = 1, special = 1)
/obj/item/assembly_holder/proc/process_activation(obj/D, normal = 1, special = 1)
if(!D)
return 0
if((normal) && (a_right) && (a_left))
+7 -7
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/igniter
/obj/item/assembly/igniter
name = "igniter"
desc = "A small electronic device able to ignite combustible substances."
icon_state = "igniter"
@@ -6,22 +6,22 @@
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
heat = 1000
/obj/item/device/assembly/igniter/suicide_act(mob/living/carbon/user)
/obj/item/assembly/igniter/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] is trying to ignite [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.IgniteMob()
return FIRELOSS
/obj/item/device/assembly/igniter/New()
/obj/item/assembly/igniter/New()
..()
sparks.set_up(2, 0, src)
sparks.attach(src)
/obj/item/device/assembly/igniter/Destroy()
/obj/item/assembly/igniter/Destroy()
qdel(sparks)
sparks = null
. = ..()
/obj/item/device/assembly/igniter/activate()
/obj/item/assembly/igniter/activate()
if(!..())
return 0//Cooldown check
var/turf/location = get_turf(loc)
@@ -30,11 +30,11 @@
sparks.start()
return 1
/obj/item/device/assembly/igniter/attack_self(mob/user)
/obj/item/assembly/igniter/attack_self(mob/user)
activate()
add_fingerprint(user)
/obj/item/device/assembly/igniter/ignition_effect(atom/A, mob/user)
/obj/item/assembly/igniter/ignition_effect(atom/A, mob/user)
. = "<span class='notice'>[user] fiddles with [src], and manages to \
light [A].</span>"
activate()
+24 -24
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/infra
/obj/item/assembly/infra
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "infrared"
@@ -11,26 +11,26 @@
var/olddir = 0
var/datum/component/redirect/listener
/obj/item/device/assembly/infra/Initialize()
/obj/item/assembly/infra/Initialize()
. = ..()
beams = list()
START_PROCESSING(SSobj, src)
/obj/item/device/assembly/infra/Destroy()
/obj/item/assembly/infra/Destroy()
QDEL_LIST(beams)
return ..()
/obj/item/device/assembly/infra/describe()
/obj/item/assembly/infra/describe()
return "The infrared trigger is [on?"on":"off"]."
/obj/item/device/assembly/infra/activate()
/obj/item/assembly/infra/activate()
if(!..())
return 0//Cooldown check
on = !on
update_icon()
return 1
/obj/item/device/assembly/infra/toggle_secure()
/obj/item/assembly/infra/toggle_secure()
secured = !secured
if(secured)
START_PROCESSING(SSobj, src)
@@ -40,7 +40,7 @@
update_icon()
return secured
/obj/item/device/assembly/infra/update_icon()
/obj/item/assembly/infra/update_icon()
cut_overlays()
attached_overlays = list()
if(on)
@@ -51,15 +51,15 @@
holder.update_icon()
return
/obj/item/device/assembly/infra/dropped()
/obj/item/assembly/infra/dropped()
refreshBeam()
/obj/item/device/assembly/infra/process()
/obj/item/assembly/infra/process()
if(!on || !secured)
refreshBeam()
return
/obj/item/device/assembly/infra/proc/refreshBeam()
/obj/item/assembly/infra/proc/refreshBeam()
QDEL_LIST(beams)
if(throwing || !on || !secured || !(isturf(loc) || holder && isturf(holder.loc)))
return
@@ -83,33 +83,33 @@
_T = get_step(_T, _dir)
CHECK_TICK
/obj/item/device/assembly/infra/attack_hand()
/obj/item/assembly/infra/attack_hand()
. = ..()
refreshBeam()
/obj/item/device/assembly/infra/Moved()
/obj/item/assembly/infra/Moved()
var/t = dir
. = ..()
setDir(t)
/obj/item/device/assembly/infra/throw_at()
/obj/item/assembly/infra/throw_at()
. = ..()
olddir = dir
/obj/item/device/assembly/infra/throw_impact()
/obj/item/assembly/infra/throw_impact()
. = ..()
if(!olddir)
return
setDir(olddir)
olddir = null
/obj/item/device/assembly/infra/holder_movement()
/obj/item/assembly/infra/holder_movement()
if(!holder)
return 0
refreshBeam()
return 1
/obj/item/device/assembly/infra/proc/trigger_beam(atom/movable/AM, turf/location)
/obj/item/assembly/infra/proc/trigger_beam(atom/movable/AM, turf/location)
refreshBeam()
switchListener(location)
if(!secured || !on || next_activate > world.time)
@@ -118,16 +118,16 @@
audible_message("[icon2html(src, hearers(src))] *beep* *beep*", null, 3)
next_activate = world.time + 30
/obj/item/device/assembly/infra/proc/switchListener(turf/newloc)
/obj/item/assembly/infra/proc/switchListener(turf/newloc)
QDEL_NULL(listener)
listener = newloc.AddComponent(/datum/component/redirect, COMSIG_ATOM_EXITED, CALLBACK(src, .proc/check_exit))
/obj/item/device/assembly/infra/proc/check_exit(atom/movable/offender)
/obj/item/assembly/infra/proc/check_exit(atom/movable/offender)
if(offender && ((offender.flags_1 & ABSTRACT_1) || offender == src))
return
return refreshBeam()
/obj/item/device/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel
/obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel
. = ..()
if(is_secured(user))
user.set_machine(src)
@@ -138,7 +138,7 @@
onclose(user, "infra")
return
/obj/item/device/assembly/infra/Topic(href, href_list)
/obj/item/assembly/infra/Topic(href, href_list)
..()
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=infra")
@@ -157,7 +157,7 @@
if(usr)
attack_self(usr)
/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
/obj/item/assembly/infra/verb/rotate()//This could likely be better
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
@@ -167,14 +167,14 @@
setDir(turn(dir, -90))
/obj/item/device/assembly/infra/AltClick(mob/user)
/obj/item/assembly/infra/AltClick(mob/user)
..()
if(!user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
return
else
rotate()
/obj/item/device/assembly/infra/setDir()
/obj/item/assembly/infra/setDir()
. = ..()
refreshBeam()
@@ -184,7 +184,7 @@
name = "infrared beam"
icon = 'icons/obj/projectiles.dmi'
icon_state = "ibeam"
var/obj/item/device/assembly/infra/master
var/obj/item/assembly/infra/master
anchored = TRUE
density = FALSE
flags_1 = ABSTRACT_1
+12 -12
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/mousetrap
/obj/item/assembly/mousetrap
name = "mousetrap"
desc = "A handy little spring-loaded trap for catching pesty rodents."
icon_state = "mousetrap"
@@ -7,14 +7,14 @@
var/armed = 0
/obj/item/device/assembly/mousetrap/examine(mob/user)
/obj/item/assembly/mousetrap/examine(mob/user)
..()
if(armed)
to_chat(user, "The mousetrap is armed!")
else
to_chat(user, "The mousetrap is not armed.")
/obj/item/device/assembly/mousetrap/activate()
/obj/item/assembly/mousetrap/activate()
if(..())
armed = !armed
if(!armed)
@@ -27,10 +27,10 @@
if(usr)
playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
/obj/item/device/assembly/mousetrap/describe()
/obj/item/assembly/mousetrap/describe()
return "The pressure switch is [armed?"primed":"safe"]."
/obj/item/device/assembly/mousetrap/update_icon()
/obj/item/assembly/mousetrap/update_icon()
if(armed)
icon_state = "mousetraparmed"
else
@@ -38,7 +38,7 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/mousetrap/proc/triggered(mob/target, type = "feet")
/obj/item/assembly/mousetrap/proc/triggered(mob/target, type = "feet")
if(!armed)
return
var/obj/item/bodypart/affecting = null
@@ -72,7 +72,7 @@
pulse(0)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user)
/obj/item/assembly/mousetrap/attack_self(mob/living/carbon/human/user)
if(!armed)
to_chat(user, "<span class='notice'>You arm [src].</span>")
else
@@ -91,7 +91,7 @@
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user)
/obj/item/assembly/mousetrap/attack_hand(mob/living/carbon/human/user)
if(armed)
if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50))
var/which_hand = BODY_ZONE_PRECISE_L_HAND
@@ -104,7 +104,7 @@
return ..()
/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
/obj/item/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
if(armed)
if(ismob(AM))
var/mob/MM = AM
@@ -122,7 +122,7 @@
..()
/obj/item/device/assembly/mousetrap/on_found(mob/finder)
/obj/item/assembly/mousetrap/on_found(mob/finder)
if(armed)
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
@@ -131,13 +131,13 @@
return 0
/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
/obj/item/assembly/mousetrap/hitby(A as mob|obj)
if(!armed)
return ..()
visible_message("<span class='warning'>[src] is triggered by [A].</span>")
triggered(null)
/obj/item/device/assembly/mousetrap/armed
/obj/item/assembly/mousetrap/armed
icon_state = "mousetraparmed"
armed = 1
+15 -15
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/prox_sensor
/obj/item/assembly/prox_sensor
name = "proximity sensor"
desc = "Used for scanning and alerting when someone enters a certain proximity."
icon_state = "prox"
@@ -10,29 +10,29 @@
var/time = 10
var/sensitivity = 1
/obj/item/device/assembly/prox_sensor/proc/toggle_scan()
/obj/item/assembly/prox_sensor/proc/toggle_scan()
/obj/item/device/assembly/prox_sensor/proc/sense()
/obj/item/assembly/prox_sensor/proc/sense()
/obj/item/device/assembly/prox_sensor/Initialize()
/obj/item/assembly/prox_sensor/Initialize()
. = ..()
proximity_monitor = new(src, 0)
/obj/item/device/assembly/prox_sensor/describe()
/obj/item/assembly/prox_sensor/describe()
if(timing)
return "<span class='notice'>The proximity sensor is arming.</span>"
return "The proximity sensor is [scanning?"armed":"disarmed"]."
/obj/item/device/assembly/prox_sensor/activate()
/obj/item/assembly/prox_sensor/activate()
if(!..())
return 0//Cooldown check
timing = !timing
update_icon()
return 1
/obj/item/device/assembly/prox_sensor/toggle_secure()
/obj/item/assembly/prox_sensor/toggle_secure()
secured = !secured
if(!secured)
if(scanning)
@@ -45,13 +45,13 @@
return secured
/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
/obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/effect/beam))
return
sense()
/obj/item/device/assembly/prox_sensor/sense()
/obj/item/assembly/prox_sensor/sense()
if(!scanning || !secured || next_activate > world.time)
return 0
pulse(0)
@@ -59,7 +59,7 @@
next_activate = world.time + 30
/obj/item/device/assembly/prox_sensor/process()
/obj/item/assembly/prox_sensor/process()
if(timing)
time--
if(time <= 0)
@@ -67,20 +67,20 @@
toggle_scan(1)
time = initial(time)
/obj/item/device/assembly/prox_sensor/toggle_scan(scan)
/obj/item/assembly/prox_sensor/toggle_scan(scan)
if(!secured)
return 0
scanning = scan
proximity_monitor.SetRange(scanning ? sensitivity : 0)
update_icon()
/obj/item/device/assembly/prox_sensor/proc/sensitivity_change(value)
/obj/item/assembly/prox_sensor/proc/sensitivity_change(value)
var/sense = min(max(sensitivity + value, 0), 5)
sensitivity = sense
if(scanning && proximity_monitor.SetRange(sense))
sense()
/obj/item/device/assembly/prox_sensor/update_icon()
/obj/item/assembly/prox_sensor/update_icon()
cut_overlays()
attached_overlays = list()
if(timing)
@@ -93,7 +93,7 @@
holder.update_icon()
return
/obj/item/device/assembly/prox_sensor/ui_interact(mob/user)//TODO: Change this to the wires thingy
/obj/item/assembly/prox_sensor/ui_interact(mob/user)//TODO: Change this to the wires thingy
. = ..()
if(is_secured(user))
var/second = time % 60
@@ -108,7 +108,7 @@
return
/obj/item/device/assembly/prox_sensor/Topic(href, href_list)
/obj/item/assembly/prox_sensor/Topic(href, href_list)
..()
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=prox")
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "shock_kit"
var/obj/item/clothing/head/helmet/part1 = null
var/obj/item/device/electropack/part2 = null
var/obj/item/electropack/part2 = null
w_class = WEIGHT_CLASS_HUGE
flags_1 = CONDUCT_1
+24 -24
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/signaler
/obj/item/assembly/signaler
name = "remote signaling device"
desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another."
icon_state = "signaller"
@@ -15,40 +15,40 @@
var/datum/radio_frequency/radio_connection
var/suicider = null
/obj/item/device/assembly/signaler/suicide_act(mob/living/carbon/user)
/obj/item/assembly/signaler/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] eats \the [src]! If it is signaled, [user.p_they()] will die!</span>")
playsound(src, 'sound/items/eatfood.ogg', 50, 1)
user.transferItemToLoc(src, user, TRUE)
suicider = user
return MANUAL_SUICIDE
/obj/item/device/assembly/signaler/proc/manual_suicide(mob/living/carbon/user)
/obj/item/assembly/signaler/proc/manual_suicide(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user]'s \the [src] recieves a signal, killing them instantly!</span>")
user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something.
user.death(0)
/obj/item/device/assembly/signaler/New()
/obj/item/assembly/signaler/New()
..()
spawn(40)
set_frequency(frequency)
/obj/item/device/assembly/signaler/Destroy()
/obj/item/assembly/signaler/Destroy()
SSradio.remove_object(src,frequency)
return ..()
/obj/item/device/assembly/signaler/activate()
/obj/item/assembly/signaler/activate()
if(!..())//cooldown processing
return FALSE
signal()
return TRUE
/obj/item/device/assembly/signaler/update_icon()
/obj/item/assembly/signaler/update_icon()
if(holder)
holder.update_icon()
return
/obj/item/device/assembly/signaler/ui_interact(mob/user, flag1)
/obj/item/assembly/signaler/ui_interact(mob/user, flag1)
. = ..()
if(is_secured(user))
var/t1 = "-------"
@@ -77,7 +77,7 @@ Code:
return
/obj/item/device/assembly/signaler/Topic(href, href_list)
/obj/item/assembly/signaler/Topic(href, href_list)
..()
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
@@ -106,16 +106,16 @@ Code:
return
/obj/item/device/assembly/signaler/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params)
if(issignaler(W))
var/obj/item/device/assembly/signaler/signaler2 = W
var/obj/item/assembly/signaler/signaler2 = W
if(secured && signaler2.secured)
code = signaler2.code
frequency = signaler2.frequency
to_chat(user, "You transfer the frequency and code of \the [signaler2.name] to \the [name]")
..()
/obj/item/device/assembly/signaler/proc/signal()
/obj/item/assembly/signaler/proc/signal()
if(!radio_connection)
return
@@ -130,7 +130,7 @@ Code:
return
/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
/obj/item/assembly/signaler/receive_signal(datum/signal/signal)
if(!signal)
return 0
if(signal.data["code"] != code)
@@ -144,7 +144,7 @@ Code:
return
/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
/obj/item/assembly/signaler/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER)
@@ -153,27 +153,27 @@ Code:
// Embedded signaller used in grenade construction.
// It's necessary because the signaler doens't have an off state.
// Generated during grenade construction. -Sayu
/obj/item/device/assembly/signaler/reciever
/obj/item/assembly/signaler/reciever
var/on = FALSE
/obj/item/device/assembly/signaler/reciever/proc/toggle_safety()
/obj/item/assembly/signaler/reciever/proc/toggle_safety()
on = !on
/obj/item/device/assembly/signaler/reciever/activate()
/obj/item/assembly/signaler/reciever/activate()
toggle_safety()
return 1
/obj/item/device/assembly/signaler/reciever/describe()
/obj/item/assembly/signaler/reciever/describe()
return "The radio receiver is [on?"on":"off"]."
/obj/item/device/assembly/signaler/reciever/receive_signal(datum/signal/signal)
/obj/item/assembly/signaler/reciever/receive_signal(datum/signal/signal)
if(!on)
return
return ..(signal)
// Embedded signaller used in anomalies.
/obj/item/device/assembly/signaler/anomaly
/obj/item/assembly/signaler/anomaly
name = "anomaly core"
desc = "The neutralized core of an anomaly. It'd probably be valuable for research."
icon_state = "anomaly core"
@@ -181,7 +181,7 @@ Code:
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
/obj/item/device/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
/obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
if(!signal)
return 0
if(signal.data["code"] != code)
@@ -189,10 +189,10 @@ Code:
for(var/obj/effect/anomaly/A in get_turf(src))
A.anomalyNeutralize()
/obj/item/device/assembly/signaler/anomaly/attack_self()
/obj/item/assembly/signaler/anomaly/attack_self()
return
/obj/item/device/assembly/signaler/cyborg
/obj/item/assembly/signaler/cyborg
/obj/item/device/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
return
+13 -13
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/timer
/obj/item/assembly/timer
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
@@ -10,28 +10,28 @@
var/saved_time = 5
var/loop = 0
/obj/item/device/assembly/timer/suicide_act(mob/living/user)
/obj/item/assembly/timer/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] looks at the timer and decides [user.p_their()] fate! It looks like [user.p_theyre()] going to commit suicide!</span>")
activate()//doesnt rely on timer_end to prevent weird metas where one person can control the timer and therefore someone's life. (maybe that should be how it works...)
addtimer(CALLBACK(src, .proc/manual_suicide, user), time*10)//kill yourself once the time runs out
return MANUAL_SUICIDE
/obj/item/device/assembly/timer/proc/manual_suicide(mob/living/user)
/obj/item/assembly/timer/proc/manual_suicide(mob/living/user)
user.visible_message("<span class='suicide'>[user]'s time is up!</span>")
user.adjustOxyLoss(200)
user.death(0)
/obj/item/device/assembly/timer/New()
/obj/item/assembly/timer/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/device/assembly/timer/describe()
/obj/item/assembly/timer/describe()
if(timing)
return "The timer is counting down from [time]!"
return "The timer is set for [time] seconds."
/obj/item/device/assembly/timer/activate()
/obj/item/assembly/timer/activate()
if(!..())
return 0//Cooldown check
timing = !timing
@@ -39,7 +39,7 @@
return 1
/obj/item/device/assembly/timer/toggle_secure()
/obj/item/assembly/timer/toggle_secure()
secured = !secured
if(secured)
START_PROCESSING(SSobj, src)
@@ -50,7 +50,7 @@
return secured
/obj/item/device/assembly/timer/proc/timer_end()
/obj/item/assembly/timer/proc/timer_end()
if(!secured || next_activate > world.time)
return FALSE
pulse(0)
@@ -60,7 +60,7 @@
update_icon()
/obj/item/device/assembly/timer/process()
/obj/item/assembly/timer/process()
if(timing)
time--
if(time <= 0)
@@ -69,7 +69,7 @@
time = saved_time
/obj/item/device/assembly/timer/update_icon()
/obj/item/assembly/timer/update_icon()
cut_overlays()
attached_overlays = list()
if(timing)
@@ -79,7 +79,7 @@
holder.update_icon()
/obj/item/device/assembly/timer/ui_interact(mob/user)//TODO: Have this use the wires
/obj/item/assembly/timer/ui_interact(mob/user)//TODO: Have this use the wires
. = ..()
if(is_secured(user))
var/second = time % 60
@@ -93,7 +93,7 @@
popup.open()
/obj/item/device/assembly/timer/Topic(href, href_list)
/obj/item/assembly/timer/Topic(href, href_list)
..()
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=timer")
@@ -102,7 +102,7 @@
if(href_list["time"])
timing = text2num(href_list["time"])
if(timing && istype(holder, /obj/item/device/transfer_valve))
if(timing && istype(holder, /obj/item/transfer_valve))
var/timer_message = "[ADMIN_LOOKUPFLW(usr)] activated [src] attachment on [holder]."
message_admins(timer_message)
GLOB.bombers += timer_message
+10 -10
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/voice
/obj/item/assembly/voice
name = "voice analyzer"
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
icon_state = "voice"
@@ -16,11 +16,11 @@
"recognizer",
"voice sensor")
/obj/item/device/assembly/voice/examine(mob/user)
/obj/item/assembly/voice/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.</span>")
/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
/obj/item/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
if(speaker == src)
return
@@ -30,7 +30,7 @@
if(check_activation(speaker, raw_message))
addtimer(CALLBACK(src, .proc/pulse, 0), 10)
/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language)
/obj/item/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language)
switch(mode)
if(1)
recorded = raw_message
@@ -48,7 +48,7 @@
if(length(raw_message))
addtimer(CALLBACK(src, .proc/pulse, 0), 10)
/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message)
/obj/item/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message)
. = 0
switch(mode)
if(1)
@@ -64,8 +64,8 @@
if(length(raw_message))
. = 1
/obj/item/device/assembly/voice/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/multitool))
/obj/item/assembly/voice/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/multitool))
mode %= modes.len
mode++
to_chat(user, "You set [src] into a [modes[mode]] mode.")
@@ -74,18 +74,18 @@
else
return ..()
/obj/item/device/assembly/voice/activate()
/obj/item/assembly/voice/activate()
if(secured)
if(!holder)
listening = !listening
say("[listening ? "Now" : "No longer"] recording input.")
/obj/item/device/assembly/voice/attack_self(mob/user)
/obj/item/assembly/voice/attack_self(mob/user)
if(!user)
return 0
activate()
return 1
/obj/item/device/assembly/voice/toggle_secure()
/obj/item/assembly/voice/toggle_secure()
. = ..()
listening = 0
@@ -667,7 +667,7 @@
to_chat(user, "<span class='notice'>The wires have been [panel_open ? "exposed" : "unexposed"].</span>")
update_icon()
return
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))// trying to unlock the interface with an ID card
togglelock(user)
else if(panel_open && is_wire_tool(W))
wires.interact(user)
@@ -715,8 +715,8 @@
qdel(W)
return
if(istype(W, /obj/item/device/electroadaptive_pseudocircuit))
var/obj/item/device/electroadaptive_pseudocircuit/P = W
if(istype(W, /obj/item/electroadaptive_pseudocircuit))
var/obj/item/electroadaptive_pseudocircuit/P = W
if(!P.adapt_circuit(user, 25))
return
user.visible_message("<span class='notice'>[user] fabricates a circuit and places it into [src].</span>", \
@@ -27,8 +27,8 @@
var/obj/item/reagent_containers/glass/beaker = null
var/reagent_transfer = 0
var/obj/item/device/radio/radio
var/radio_key = /obj/item/device/encryptionkey/headset_med
var/obj/item/radio/radio
var/radio_key = /obj/item/encryptionkey/headset_med
var/radio_channel = "Medical"
var/running_anim = FALSE
@@ -20,7 +20,7 @@
..(intact)
/obj/machinery/atmospherics/components/unary/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/analyzer))
if(istype(W, /obj/item/analyzer))
atmosanalyzer_scan(airs[1], user)
else
return ..()
@@ -63,7 +63,7 @@
return parent.air.remove(amount)
/obj/machinery/atmospherics/pipe/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/analyzer))
if(istype(W, /obj/item/analyzer))
atmosanalyzer_scan(parent.air, user)
if(istype(W, /obj/item/pipe_meter))
var/obj/item/pipe_meter/meter = W
@@ -138,7 +138,7 @@
"<span class='notice'>You fasten [src] to the port.</span>", \
"<span class='italics'>You hear a ratchet.</span>")
update_icon()
else if(istype(W, /obj/item/device/analyzer) && Adjacent(user))
else if(istype(W, /obj/item/analyzer) && Adjacent(user))
atmosanalyzer_scan(air_contents, user)
else
return ..()
@@ -474,7 +474,7 @@
/datum/outfit/ctf
name = "CTF"
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf
toggle_helmet = FALSE // see the whites of their eyes
@@ -530,7 +530,7 @@
/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CTF_RED)
R.freqlock = TRUE
R.independent = TRUE
@@ -538,7 +538,7 @@
/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CTF_BLUE)
R.freqlock = TRUE
R.independent = TRUE
+4 -4
View File
@@ -182,7 +182,7 @@
H.equipOutfit(outfit)
if(disable_pda)
// We don't want corpse PDAs to show up in the messenger list.
var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H
var/obj/item/pda/PDA = locate(/obj/item/pda) in H
if(PDA)
PDA.toff = TRUE
if(disable_sensors)
@@ -312,7 +312,7 @@
/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
..()
// Remove radio and PDA so they wouldn't annoy station crew.
var/list/del_types = list(/obj/item/device/pda, /obj/item/device/radio/headset)
var/list/del_types = list(/obj/item/pda, /obj/item/radio/headset)
for(var/del_type in del_types)
var/obj/item/I = locate(del_type) in H
qdel(I)
@@ -410,7 +410,7 @@
/datum/outfit/nanotrasenbridgeofficercorpse
name = "Bridge Officer Corpse"
ears = /obj/item/device/radio/headset/heads/hop
ears = /obj/item/radio/headset/heads/hop
uniform = /obj/item/clothing/under/rank/centcom_officer
suit = /obj/item/clothing/suit/armor/bulletproof
shoes = /obj/item/clothing/shoes/sneakers/black
@@ -428,7 +428,7 @@
name = "Nanotrasen Private Security Commander"
uniform = /obj/item/clothing/under/rank/centcom_commander
suit = /obj/item/clothing/suit/armor/bulletproof
ears = /obj/item/device/radio/headset/heads/captain
ears = /obj/item/radio/headset/heads/captain
glasses = /obj/item/clothing/glasses/eyepatch
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
head = /obj/item/clothing/head/centhat
+2 -2
View File
@@ -159,8 +159,8 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
use_power(5000)
return
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W, mob/user, params)
if(istype(W, /obj/item/device/multitool))
/obj/machinery/gateway/centeraway/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/multitool))
if(calibrated)
to_chat(user, "\black The gate is already calibrated, there is no work for you to do here.")
return
@@ -529,7 +529,7 @@
/obj/item/gun/ballistic/automatic/c20r/unrestricted = 16,
/obj/item/gun/magic/wand/resurrection/inert = 15,
/obj/item/gun/magic/wand/resurrection = 10,
/obj/item/device/radio/uplink/old = 2,
/obj/item/radio/uplink/old = 2,
/obj/item/book/granter/spell/charge = 12,
/obj/item/grenade/clusterbuster/spawner_manhacks = 15,
/obj/item/book/granter/spell/fireball = 10,
@@ -601,7 +601,7 @@
name = "Syndicate Snow Operative"
uniform = /obj/item/clothing/under/syndicate/coldres
shoes = /obj/item/clothing/shoes/combat/coldres
ears = /obj/item/device/radio/headset/syndicate/alt
ears = /obj/item/radio/headset/syndicate/alt
r_pocket = /obj/item/gun/ballistic/automatic/pistol
id = /obj/item/card/id/syndicate
implants = list(/obj/item/implant/exile)
@@ -128,7 +128,7 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]")
l_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]"
l_set = 1
new /obj/item/gun/energy/mindflayer(src)
new /obj/item/device/soulstone(src)
new /obj/item/soulstone(src)
new /obj/item/clothing/suit/space/hardsuit/cult(src)
//new /obj/item/teleportation_scroll(src)
new /obj/item/stack/ore/diamond(src)
+3 -3
View File
@@ -1,4 +1,4 @@
/obj/item/device/export_scanner
/obj/item/export_scanner
name = "export scanner"
desc = "A device used to check objects against Nanotrasen exports database."
icon = 'icons/obj/device.dmi'
@@ -11,12 +11,12 @@
siemens_coefficient = 1
var/obj/machinery/computer/cargo/cargo_console = null
/obj/item/device/export_scanner/examine(user)
/obj/item/export_scanner/examine(user)
..()
if(!cargo_console)
to_chat(user, "<span class='notice'>[src] is not currently linked to a cargo console.</span>")
/obj/item/device/export_scanner/afterattack(obj/O, mob/user, proximity)
/obj/item/export_scanner/afterattack(obj/O, mob/user, proximity)
if(!istype(O) || !proximity)
return
+1 -1
View File
@@ -18,4 +18,4 @@
/datum/export/swarmer
cost = 2000
unit_name = "deactivated alien deconstruction drone"
export_types = list(/obj/item/device/deactivated_swarmer)
export_types = list(/obj/item/deactivated_swarmer)
+7 -7
View File
@@ -69,37 +69,37 @@
/datum/export/flashlight
cost = 5
unit_name = "flashlight"
export_types = list(/obj/item/device/flashlight)
export_types = list(/obj/item/flashlight)
include_subtypes = FALSE
/datum/export/flashlight/flare
cost = 2
unit_name = "flare"
export_types = list(/obj/item/device/flashlight/flare)
export_types = list(/obj/item/flashlight/flare)
/datum/export/flashlight/seclite
cost = 10
unit_name = "seclite"
export_types = list(/obj/item/device/flashlight/seclite)
export_types = list(/obj/item/flashlight/seclite)
// Analyzers and Scanners
/datum/export/analyzer
cost = 5
unit_name = "analyzer"
export_types = list(/obj/item/device/analyzer)
export_types = list(/obj/item/analyzer)
/datum/export/analyzer/t_scanner
cost = 10
unit_name = "t-ray scanner"
export_types = list(/obj/item/device/t_scanner)
export_types = list(/obj/item/t_scanner)
/datum/export/radio
cost = 5
unit_name = "radio"
export_types = list(/obj/item/device/radio)
exclude_types = list(/obj/item/device/radio/mech)
export_types = list(/obj/item/radio)
exclude_types = list(/obj/item/radio/mech)
// High-tech tools.
+5 -5
View File
@@ -62,7 +62,7 @@
/datum/export/weapon/flash
cost = 10
unit_name = "handheld flash"
export_types = list(/obj/item/device/assembly/flash)
export_types = list(/obj/item/assembly/flash)
include_subtypes = TRUE
/datum/export/weapon/handcuffs
@@ -103,7 +103,7 @@
/datum/export/weapon/immortality_talisman
cost = 10000
unit_name = "Immortality Talisman"
export_types = list(/obj/item/device/immortality_talisman)
export_types = list(/obj/item/immortality_talisman)
/datum/export/weapon/babel
cost = 10000
@@ -128,17 +128,17 @@
/datum/export/weapon/red //second half of telecube
cost = 5000
unit_name = "Red Cube"
export_types = list(/obj/item/device/warp_cube/red)
export_types = list(/obj/item/warp_cube/red)
/datum/export/weapon/blue //first half of telecube
cost = 5000
unit_name = "Blue Cube"
export_types = list(/obj/item/device/warp_cube)
export_types = list(/obj/item/warp_cube)
/datum/export/weapon/wisplantern //thermals on lavaland
cost = 10000
unit_name = "Wisp Lantern"
export_types = list(/obj/item/device/wisp_lantern)
export_types = list(/obj/item/wisp_lantern)
/datum/export/weapon/flight //if xenobiology ever reaches the point to get these without shuttle being called they deserve it
cost = 10000
+1 -1
View File
@@ -20,7 +20,7 @@
/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params)
if((istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda)) && allowed(user))
if((istype(W, /obj/item/card/id) || istype(W, /obj/item/pda)) && allowed(user))
locked = !locked
to_chat(user, "<span class='notice'>You [locked ? "lock" : "unlock"] the interface.</span>")
return
+72 -72
View File
@@ -97,8 +97,8 @@
/obj/item/clothing/suit/fire/firefighter,
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
/obj/item/device/flashlight,
/obj/item/device/flashlight,
/obj/item/flashlight,
/obj/item/flashlight,
/obj/item/tank/internals/oxygen/red,
/obj/item/tank/internals/oxygen/red,
/obj/item/extinguisher,
@@ -186,8 +186,8 @@
/obj/item/clothing/head/radiation,
/obj/item/clothing/suit/radiation,
/obj/item/clothing/suit/radiation,
/obj/item/device/geiger_counter,
/obj/item/device/geiger_counter,
/obj/item/geiger_counter,
/obj/item/geiger_counter,
/obj/item/reagent_containers/food/drinks/bottle/vodka,
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass)
@@ -265,10 +265,10 @@
name = "Forensics Crate"
desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials(tm). Contains a forensics scanner, six evidence bags, camera, tape recorder, white crayon, and of course, a fedora. Requires Security access to open."
cost = 2000
contains = list(/obj/item/device/detective_scanner,
contains = list(/obj/item/detective_scanner,
/obj/item/storage/box/evidence,
/obj/item/device/camera,
/obj/item/device/taperecorder,
/obj/item/camera,
/obj/item/taperecorder,
/obj/item/toy/crayon/white,
/obj/item/clothing/head/fedora/det_hat)
crate_name = "forensics crate"
@@ -654,16 +654,16 @@
name = "Antimatter Shielding Crate"
desc = "Contains ten Antimatter shields, somehow crammed into a crate."
cost = 2000
contains = list(/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container,
/obj/item/device/am_shielding_container) //10 shields: 3x3 containment and a core
contains = list(/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container) //10 shields: 3x3 containment and a core
crate_name = "antimatter shielding crate"
/datum/supply_pack/engineering/engine
@@ -803,11 +803,11 @@
special = TRUE
contains = list(
/obj/item/circuitboard/machine/dna_vault,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe
/obj/item/dna_probe,
/obj/item/dna_probe,
/obj/item/dna_probe,
/obj/item/dna_probe,
/obj/item/dna_probe
)
crate_name= "dna vault parts crate"
@@ -816,11 +816,11 @@
desc = "Contains five DNA probes for use in the DNA vault."
cost = 3000
special = TRUE
contains = list(/obj/item/device/dna_probe,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe,
/obj/item/device/dna_probe
contains = list(/obj/item/dna_probe,
/obj/item/dna_probe,
/obj/item/dna_probe,
/obj/item/dna_probe,
/obj/item/dna_probe
)
crate_name= "dna samplers crate"
@@ -1166,15 +1166,15 @@
contains = list(/obj/item/tank/internals/plasma,
/obj/item/tank/internals/plasma,
/obj/item/tank/internals/plasma,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/timer,
/obj/item/device/assembly/timer,
/obj/item/device/assembly/timer)
/obj/item/assembly/igniter,
/obj/item/assembly/igniter,
/obj/item/assembly/igniter,
/obj/item/assembly/prox_sensor,
/obj/item/assembly/prox_sensor,
/obj/item/assembly/prox_sensor,
/obj/item/assembly/timer,
/obj/item/assembly/timer,
/obj/item/assembly/timer)
crate_name = "plasma assembly crate"
crate_type = /obj/structure/closet/crate/secure/plasma
@@ -1183,9 +1183,9 @@
desc = "The tools you need to replace those finicky humans with a loyal robot army! Contains three proximity sensors, two high-powered cells, six flashes, and an electrical toolbox. Requires Robotics access to open."
cost = 1000
access = ACCESS_ROBOTICS
contains = list(/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/prox_sensor,
contains = list(/obj/item/assembly/prox_sensor,
/obj/item/assembly/prox_sensor,
/obj/item/assembly/prox_sensor,
/obj/item/storage/toolbox/electrical,
/obj/item/storage/box/flashes,
/obj/item/stock_parts/cell/high,
@@ -1209,11 +1209,11 @@
name = "Tablet Crate"
desc = "What's a computer? Contains five cargo tablets."
cost = 5000
contains = list(/obj/item/device/modular_computer/tablet/preset/cargo,
/obj/item/device/modular_computer/tablet/preset/cargo,
/obj/item/device/modular_computer/tablet/preset/cargo,
/obj/item/device/modular_computer/tablet/preset/cargo,
/obj/item/device/modular_computer/tablet/preset/cargo)
contains = list(/obj/item/modular_computer/tablet/preset/cargo,
/obj/item/modular_computer/tablet/preset/cargo,
/obj/item/modular_computer/tablet/preset/cargo,
/obj/item/modular_computer/tablet/preset/cargo,
/obj/item/modular_computer/tablet/preset/cargo)
crate_name = "tablet crate"
/datum/supply_pack/science/transfer_valves
@@ -1221,8 +1221,8 @@
desc = "The key ingredient for making a lot of people very angry very fast. Contains two tank transfer valves. Requires RD access to open."
cost = 6000
access = ACCESS_RD
contains = list(/obj/item/device/transfer_valve,
/obj/item/device/transfer_valve)
contains = list(/obj/item/transfer_valve,
/obj/item/transfer_valve)
crate_name = "tank transfer valves crate"
crate_type = /obj/structure/closet/crate/secure/science
dangerous = TRUE
@@ -1298,7 +1298,7 @@
/obj/item/reagent_containers/glass/bottle/ammonia,
/obj/item/hatchet,
/obj/item/cultivator,
/obj/item/device/plant_analyzer,
/obj/item/plant_analyzer,
/obj/item/clothing/gloves/botanic_leather,
/obj/item/clothing/suit/apron)
crate_name = "hydroponics crate"
@@ -1334,13 +1334,13 @@
/obj/item/reagent_containers/food/drinks/beer,
/obj/item/reagent_containers/food/drinks/beer,
/obj/item/reagent_containers/food/drinks/beer,
/obj/item/device/flashlight/glowstick,
/obj/item/device/flashlight/glowstick/red,
/obj/item/device/flashlight/glowstick/blue,
/obj/item/device/flashlight/glowstick/cyan,
/obj/item/device/flashlight/glowstick/orange,
/obj/item/device/flashlight/glowstick/yellow,
/obj/item/device/flashlight/glowstick/pink)
/obj/item/flashlight/glowstick,
/obj/item/flashlight/glowstick/red,
/obj/item/flashlight/glowstick/blue,
/obj/item/flashlight/glowstick/cyan,
/obj/item/flashlight/glowstick/orange,
/obj/item/flashlight/glowstick/yellow,
/obj/item/flashlight/glowstick/pink)
crate_name = "party equipment crate"
/datum/supply_pack/organic/pizza
@@ -1617,14 +1617,14 @@
desc = "Get your sad station movin' and groovin' with this fine collection! Contains nine different instruments!"
cost = 5000
crate_name = "Big band musical instruments collection"
contains = list(/obj/item/device/instrument/violin,
/obj/item/device/instrument/guitar,
/obj/item/device/instrument/glockenspiel,
/obj/item/device/instrument/accordion,
/obj/item/device/instrument/saxophone,
/obj/item/device/instrument/trombone,
/obj/item/device/instrument/recorder,
/obj/item/device/instrument/harmonica,
contains = list(/obj/item/instrument/violin,
/obj/item/instrument/guitar,
/obj/item/instrument/glockenspiel,
/obj/item/instrument/accordion,
/obj/item/instrument/saxophone,
/obj/item/instrument/trombone,
/obj/item/instrument/recorder,
/obj/item/instrument/harmonica,
/obj/structure/piano/unanchored)
/datum/supply_pack/misc/book_crate
@@ -1642,7 +1642,7 @@
desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureacratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced
cost = 1500
contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled,
/obj/item/device/camera_film,
/obj/item/camera_film,
/obj/item/hand_labeler,
/obj/item/hand_labeler_refill,
/obj/item/hand_labeler_refill,
@@ -1733,7 +1733,7 @@
desc = "i uh... im not really sure what this does. wanna buy it?"
cost = 5000
contraband = TRUE
contains = list(/obj/item/device/firing_pin/clown)
contains = list(/obj/item/firing_pin/clown)
// It's /technically/ a toy. For the clown, at least.
crate_name = "toy crate"
@@ -1844,8 +1844,8 @@
access = ACCESS_QM
contains = list(/obj/item/pickaxe/mini,
/obj/item/clothing/glasses/meson,
/obj/item/device/t_scanner/adv_mining_scanner/lesser,
/obj/item/device/radio/headset/headset_cargo/mining,
/obj/item/t_scanner/adv_mining_scanner/lesser,
/obj/item/radio/headset/headset_cargo/mining,
/obj/item/storage/bag/ore,
/obj/item/clothing/suit/hooded/explorer,
/obj/item/clothing/mask/gas/explorer)
@@ -1856,12 +1856,12 @@
name = "Toner Crate"
desc = "Spent too much ink printing butt pictures? Fret not, with these six toner refills, you'll be printing butts 'till the cows come home!'"
cost = 1000
contains = list(/obj/item/device/toner,
/obj/item/device/toner,
/obj/item/device/toner,
/obj/item/device/toner,
/obj/item/device/toner,
/obj/item/device/toner)
contains = list(/obj/item/toner,
/obj/item/toner,
/obj/item/toner,
/obj/item/toner,
/obj/item/toner,
/obj/item/toner)
crate_name = "toner crate"
/datum/supply_pack/misc/autodrobe
+12 -12
View File
@@ -420,7 +420,7 @@
ammo_type = list(/obj/item/ammo_casing/energy/chameleon)
clumsy_check = 0
item_flags = NONE
pin = /obj/item/device/firing_pin
pin = /obj/item/firing_pin
cell_type = /obj/item/stock_parts/cell/bluespace
var/datum/action/item_action/chameleon/change/chameleon_action
@@ -601,40 +601,40 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
/obj/item/device/radio/headset/chameleon
/obj/item/radio/headset/chameleon
name = "radio headset"
var/datum/action/item_action/chameleon/change/chameleon_action
/obj/item/device/radio/headset/chameleon/Initialize()
/obj/item/radio/headset/chameleon/Initialize()
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/device/radio/headset
chameleon_action.chameleon_type = /obj/item/radio/headset
chameleon_action.chameleon_name = "Headset"
chameleon_action.initialize_disguises()
/obj/item/device/radio/headset/chameleon/emp_act(severity)
/obj/item/radio/headset/chameleon/emp_act(severity)
chameleon_action.emp_randomise()
/obj/item/device/radio/headset/chameleon/broken/Initialize()
/obj/item/radio/headset/chameleon/broken/Initialize()
. = ..()
chameleon_action.emp_randomise(INFINITY)
/obj/item/device/pda/chameleon
/obj/item/pda/chameleon
name = "PDA"
var/datum/action/item_action/chameleon/change/chameleon_action
/obj/item/device/pda/chameleon/Initialize()
/obj/item/pda/chameleon/Initialize()
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/device/pda
chameleon_action.chameleon_type = /obj/item/pda
chameleon_action.chameleon_name = "PDA"
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/device/pda/heads, /obj/item/device/pda/ai, /obj/item/device/pda/ai/pai), only_root_path = TRUE)
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/pda/heads, /obj/item/pda/ai, /obj/item/pda/ai/pai), only_root_path = TRUE)
chameleon_action.initialize_disguises()
/obj/item/device/pda/chameleon/emp_act(severity)
/obj/item/pda/chameleon/emp_act(severity)
chameleon_action.emp_randomise()
/obj/item/device/pda/chameleon/broken/Initialize()
/obj/item/pda/chameleon/broken/Initialize()
. = ..()
chameleon_action.emp_randomise(INFINITY)
+1 -1
View File
@@ -20,7 +20,7 @@
var/active_sound = null
var/toggle_cooldown = null
var/cooldown = 0
var/obj/item/device/flashlight/F = null
var/obj/item/flashlight/F = null
var/can_flashlight = 0
var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
+4 -4
View File
@@ -22,7 +22,7 @@
/obj/item/clothing/head/helmet/sec/attackby(obj/item/I, mob/user, params)
if(issignaler(I))
var/obj/item/device/assembly/signaler/S = I
var/obj/item/assembly/signaler/S = I
if(F) //Has a flashlight. Player must remove it, else it will be lost forever.
to_chat(user, "<span class='warning'>The mounted flashlight is in the way, remove it first!</span>")
return
@@ -260,8 +260,8 @@
..()
/obj/item/clothing/head/helmet/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/flashlight/seclite))
var/obj/item/device/flashlight/seclite/S = I
if(istype(I, /obj/item/flashlight/seclite))
var/obj/item/flashlight/seclite/S = I
if(can_flashlight)
if(!F)
if(!user.transferItemToLoc(S, src))
@@ -280,7 +280,7 @@
if(istype(I, /obj/item/screwdriver))
if(F)
for(var/obj/item/device/flashlight/seclite/S in src)
for(var/obj/item/flashlight/seclite/S in src)
to_chat(user, "<span class='notice'>You unscrew the seclite from [src].</span>")
F = null
S.forceMove(user.drop_location())
+15 -15
View File
@@ -4,7 +4,7 @@
uniform = /obj/item/clothing/under/rank/centcom_officer
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent/alt
ears = /obj/item/radio/headset/headset_cent/alt
/datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
@@ -13,7 +13,7 @@
var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)
L.implant(H, null, 1)
var/obj/item/device/radio/R = H.ears
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
@@ -40,8 +40,8 @@
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/captain
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/captain
R.recalculateChannels()
/datum/outfit/ert/commander/alert
@@ -74,8 +74,8 @@
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/hos
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/hos
R.recalculateChannels()
/datum/outfit/ert/security/alert
@@ -110,8 +110,8 @@
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/cmo
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/cmo
R.recalculateChannels()
/datum/outfit/ert/medic/alert
@@ -146,8 +146,8 @@
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/ce
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/ce
R.recalculateChannels()
/datum/outfit/ert/engineer/alert
@@ -166,12 +166,12 @@
uniform = /obj/item/clothing/under/rank/centcom_officer
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/device/radio/headset/headset_cent
ears = /obj/item/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/sunglasses
belt = /obj/item/gun/energy/e_gun
l_pocket = /obj/item/pen
back = /obj/item/storage/backpack/satchel
r_pocket = /obj/item/device/pda/heads
r_pocket = /obj/item/pda/heads
l_hand = /obj/item/clipboard
id = /obj/item/card/id
@@ -179,7 +179,7 @@
if(visualsOnly)
return
var/obj/item/device/pda/heads/pda = H.r_store
var/obj/item/pda/heads/pda = H.r_store
pda.owner = H.real_name
pda.ownjob = "CentCom Official"
pda.update_label()
@@ -231,8 +231,8 @@
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/hop
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/hop
R.recalculateChannels()
/datum/outfit/ert/chaplain
+1 -1
View File
@@ -7,7 +7,7 @@
head = /obj/item/clothing/head/santa
back = /obj/item/storage/backpack/santabag
mask = /obj/item/clothing/mask/breath
r_pocket = /obj/item/device/flashlight
r_pocket = /obj/item/flashlight
gloves = /obj/item/clothing/gloves/color/red
belt = /obj/item/tank/internals/emergency_oxygen/double
id = /obj/item/card/id/gold
+17 -17
View File
@@ -62,7 +62,7 @@
shoes = /obj/item/clothing/shoes/sneakers/red
head = /obj/item/clothing/head/helmet/redtaghelm
gloves = /obj/item/clothing/gloves/color/red
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
suit = /obj/item/clothing/suit/redtag
back = /obj/item/storage/backpack
suit_store = /obj/item/gun/energy/laser/redtag
@@ -91,7 +91,7 @@
head = /obj/item/clothing/head/helmet/space/pirate/bandana
mask = /obj/item/clothing/mask/breath
suit_store = /obj/item/tank/internals/oxygen
ears = /obj/item/device/radio/headset/syndicate
ears = /obj/item/radio/headset/syndicate
id = /obj/item/card/id
/datum/outfit/pirate/space/captain
@@ -100,7 +100,7 @@
/datum/outfit/pirate/post_equip(mob/living/carbon/human/H)
H.faction |= "pirate"
var/obj/item/device/radio/R = H.ears
var/obj/item/radio/R = H.ears
if(R)
R.set_frequency(FREQ_SYNDICATE)
R.freqlock = TRUE
@@ -117,7 +117,7 @@
shoes = /obj/item/clothing/shoes/clown_shoes
gloves = /obj/item/clothing/gloves/color/black
mask = /obj/item/clothing/mask/gas/clown_hat
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
glasses = /obj/item/clothing/glasses/thermal/monocle
suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana
@@ -143,7 +143,7 @@
gloves = /obj/item/clothing/gloves/color/latex
mask = /obj/item/clothing/mask/surgical
head = /obj/item/clothing/head/welding
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
glasses = /obj/item/clothing/glasses/thermal/monocle
suit = /obj/item/clothing/suit/apron
l_pocket = /obj/item/kitchen/knife
@@ -163,12 +163,12 @@
uniform = /obj/item/clothing/under/suit_jacket
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
glasses = /obj/item/clothing/glasses/sunglasses
l_pocket = /obj/item/melee/transforming/energy/sword/saber
l_hand = /obj/item/storage/secure/briefcase
id = /obj/item/card/id/syndicate
belt = /obj/item/device/pda/heads
belt = /obj/item/pda/heads
/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
var/obj/item/clothing/under/U = H.w_uniform
@@ -188,7 +188,7 @@
sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE)
sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE)
var/obj/item/device/pda/heads/pda = H.belt
var/obj/item/pda/heads/pda = H.belt
pda.owner = H.real_name
pda.ownjob = "Reaper"
pda.update_label()
@@ -206,7 +206,7 @@
suit = /obj/item/clothing/suit/armor/bulletproof
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent/commander
ears = /obj/item/radio/headset/headset_cent/commander
glasses = /obj/item/clothing/glasses/eyepatch
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
head = /obj/item/clothing/head/centhat
@@ -236,7 +236,7 @@
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
glasses = /obj/item/clothing/glasses/thermal/eyepatch
ears = /obj/item/device/radio/headset/headset_cent/commander
ears = /obj/item/radio/headset/headset_cent/commander
mask = /obj/item/clothing/mask/cigarette/cigar/havana
head = /obj/item/clothing/head/helmet/space/beret
belt = /obj/item/gun/energy/pulse/pistol/m1911
@@ -256,7 +256,7 @@
W.registered_name = H.real_name
W.update_label()
var/obj/item/device/radio/headset/R = H.ears
var/obj/item/radio/headset/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
@@ -275,7 +275,7 @@
uniform = /obj/item/clothing/under/color/lightpurple
suit = /obj/item/clothing/suit/wizrobe
shoes = /obj/item/clothing/shoes/sandal/magic
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
head = /obj/item/clothing/head/wizard
r_pocket = /obj/item/teleportation_scroll
r_hand = /obj/item/spellbook
@@ -317,7 +317,7 @@
head = /obj/item/clothing/head/pirate/captain
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent
ears = /obj/item/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/thermal/eyepatch
suit = /obj/item/clothing/suit/pirate/captain
back = /obj/item/storage/backpack/satchel/leather
@@ -344,7 +344,7 @@
head = /obj/item/clothing/head/fedora
shoes = /obj/item/clothing/shoes/laceup
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/device/radio/headset
ears = /obj/item/radio/headset
glasses = /obj/item/clothing/glasses/sunglasses
r_hand = /obj/item/gun/ballistic/automatic/tommygun
id = /obj/item/card/id
@@ -382,20 +382,20 @@
belt = /obj/item/gun/ballistic/revolver/mateba
r_hand = /obj/item/gun/energy/pulse/loyalpin
id = /obj/item/card/id
ears = /obj/item/device/radio/headset/headset_cent/alt
ears = /obj/item/radio/headset/headset_cent/alt
backpack_contents = list(/obj/item/storage/box=1,\
/obj/item/ammo_box/a357=1,\
/obj/item/storage/firstaid/regular=1,\
/obj/item/storage/box/flashbangs=1,\
/obj/item/device/flashlight=1,\
/obj/item/flashlight=1,\
/obj/item/grenade/plastic/x4=1)
/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
@@ -32,7 +32,7 @@
permeability_coefficient = 0.02
flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
slowdown = 1
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+55 -54
View File
@@ -13,9 +13,10 @@
//Also, I should probably add in some kind of limiting mechanic but I really don't like having to refill this all the time, expecially as it will be NODROP_1.
//Apparently due to code limitations you have to detect mob movement with.. shoes.
//The object that handles the flying itself - FLIGHT PACK --------------------------------------------------------------------------------------
/obj/item/device/flightpack
/obj/item/flightpack
name = "flight pack"
desc = "An advanced back-worn system that has dual ion engines powerful enough to grant a humanoid flight. Contains an internal self-recharging high-current capacitor for short, powerful boosts."
icon = 'icons/obj/device.dmi'
icon_state = FLIGHTPACK_SPRITE_BASE
item_state = FLIGHTPACK_SPRITE_BASE
actions_types = list(/datum/action/item_action/flightpack/toggle_flight, /datum/action/item_action/flightpack/engage_boosters, /datum/action/item_action/flightpack/toggle_stabilizers, /datum/action/item_action/flightpack/change_power, /datum/action/item_action/flightpack/toggle_airbrake)
@@ -99,7 +100,7 @@
var/afterForceMove = FALSE
var/datum/component/mobhook
/obj/item/device/flightpack/proc/changeWearer(mob/changeto)
/obj/item/flightpack/proc/changeWearer(mob/changeto)
if(wearer)
LAZYREMOVE(wearer.user_movement_hooks, src)
wearer = null
@@ -111,7 +112,7 @@
cached_pull = changeto.pulling
mobhook = changeto.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED), CALLBACK(src, .proc/on_mob_move, changeto))
/obj/item/device/flightpack/Initialize()
/obj/item/flightpack/Initialize()
ion_trail = new
ion_trail.set_up(src)
START_PROCESSING(SSflightpacks, src)
@@ -120,7 +121,7 @@
update_icon()
..()
/obj/item/device/flightpack/full/Initialize()
/obj/item/flightpack/full/Initialize()
part_manip = new /obj/item/stock_parts/manipulator/pico(src)
part_scan = new /obj/item/stock_parts/scanning_module/phasic(src)
part_cap = new /obj/item/stock_parts/capacitor/super(src)
@@ -128,7 +129,7 @@
part_bin = new /obj/item/stock_parts/matter_bin/super(src)
..()
/obj/item/device/flightpack/proc/usermessage(message, span = "boldnotice", mob/mob_override = null)
/obj/item/flightpack/proc/usermessage(message, span = "boldnotice", mob/mob_override = null)
var/mob/targ = wearer
if(ismob(loc))
targ = loc
@@ -138,7 +139,7 @@
return
to_chat(targ, "[icon2html(src, targ)]<span class='[span]'>|[message]</span>")
/obj/item/device/flightpack/proc/sync_processing(datum/controller/subsystem/processing/flightpacks/FPS)
/obj/item/flightpack/proc/sync_processing(datum/controller/subsystem/processing/flightpacks/FPS)
processing_mode = FPS.flightsuit_processing
if(processing_mode == FLIGHTSUIT_PROCESSING_NONE)
momentum_x = 0
@@ -150,7 +151,7 @@
boost = FALSE
update_slowdown()
/obj/item/device/flightpack/proc/update_parts()
/obj/item/flightpack/proc/update_parts()
boost_chargerate = initial(boost_chargerate)
boost_drain = initial(boost_drain)
powersetting_high = initial(powersetting_high)
@@ -172,7 +173,7 @@
stabilizer_decay_amount = scan*3.5
airbrake_decay_amount = manip*8
/obj/item/device/flightpack/Destroy()
/obj/item/flightpack/Destroy()
if(suit)
delink_suit()
changeWearer()
@@ -187,7 +188,7 @@
STOP_PROCESSING(SSflightpacks, src)
. = ..()
/obj/item/device/flightpack/emp_act(severity)
/obj/item/flightpack/emp_act(severity)
var/damage = severity == 1 ? emp_strong_damage : emp_weak_damage
if(emp_damage <= (emp_disable_threshold * 1.5))
emp_damage += damage
@@ -195,7 +196,7 @@
return ..()
//Proc to change amount of momentum the wearer has, or dampen all momentum by a certain amount.
/obj/item/device/flightpack/proc/adjust_momentum(amountx, amounty, reduce_amount_total = 0)
/obj/item/flightpack/proc/adjust_momentum(amountx, amounty, reduce_amount_total = 0)
if(reduce_amount_total != 0)
if(momentum_x > 0)
momentum_x = CLAMP(momentum_x - reduce_amount_total, 0, momentum_max)
@@ -210,7 +211,7 @@
calculate_momentum_speed()
//The wearer has momentum left. Move them and take some away, while negating the momentum that moving the wearer would gain. Or force the wearer to lose control if they are incapacitated.
/obj/item/device/flightpack/proc/momentum_drift()
/obj/item/flightpack/proc/momentum_drift()
if(!flight || !wearer || (momentum_speed == 0))
return FALSE
else if(!wearer.canmove)
@@ -235,7 +236,7 @@
if(prob(emp_damage * 15))
step(wearer, pick(GLOB.alldirs))
/obj/item/device/flightpack/proc/on_mob_move(mob/mob, turf/oldLoc, dir, forced)
/obj/item/flightpack/proc/on_mob_move(mob/mob, turf/oldLoc, dir, forced)
if(forced)
if(cached_pull && istype(oldLoc) && (get_dist(oldLoc, loc) <= 1) && !oldLoc.density)
cached_pull.forceMove(oldLoc)
@@ -254,7 +255,7 @@
if(flight)
ion_trail.generate_effect()
/obj/item/device/flightpack/intercept_user_move(dir, mob, newLoc, oldLoc)
/obj/item/flightpack/intercept_user_move(dir, mob, newLoc, oldLoc)
if(!flight)
return
var/momentum_increment = momentum_gain
@@ -275,7 +276,7 @@
adjust_momentum(-momentum_increment, 0)
//Make the wearer lose some momentum.
/obj/item/device/flightpack/proc/momentum_decay()
/obj/item/flightpack/proc/momentum_decay()
var/amt = momentum_passive_loss
brake? (amt += airbrake_decay_amount) : 0
gravity? (amt += gravity_decay_amount) : 0
@@ -284,7 +285,7 @@
adjust_momentum(0, 0, amt)
//Check for gravity, air pressure, and whether this is still linked to a suit. Also, resync the flightpack/flight suit every minute.
/obj/item/device/flightpack/proc/check_conditions()
/obj/item/flightpack/proc/check_conditions()
if(flight && (!assembled || !wearer || (!suit && requires_suit)))
disable_flight(TRUE)
var/turf/T = get_turf(src)
@@ -302,7 +303,7 @@
usermessage("Warning: Sensor data is not being recieved from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning")
/obj/item/device/flightpack/process()
/obj/item/flightpack/process()
if(processing_mode == FLIGHTSUIT_PROCESSING_NONE)
return FALSE
check_conditions()
@@ -311,10 +312,10 @@
handle_boost()
handle_damage()
/obj/item/device/flightpack/proc/update_slowdown()
/obj/item/flightpack/proc/update_slowdown()
flight? (slowdown = slowdown_air) : (slowdown = slowdown_ground)
/obj/item/device/flightpack/proc/handle_damage()
/obj/item/flightpack/proc/handle_damage()
if(emp_damage)
emp_damage = CLAMP(emp_damage-emp_heal_amount, 0, emp_disable_threshold * 10)
if(emp_damage >= emp_disable_threshold)
@@ -332,7 +333,7 @@
if(flight)
disable_flight(TRUE)
/obj/item/device/flightpack/update_icon()
/obj/item/flightpack/update_icon()
if(!flight)
icon_state = "[FLIGHTPACK_SPRITE_BASE][FLIGHTPACK_SPRITE_OFF_APPEND]"
item_state = "[FLIGHTPACK_SPRITE_BASE][FLIGHTPACK_SPRITE_OFF_APPEND]"
@@ -347,7 +348,7 @@
wearer.update_inv_wear_suit()
wearer.update_inv_back()
/obj/item/device/flightpack/proc/handle_boost()
/obj/item/flightpack/proc/handle_boost()
if(boost)
boost_charge = CLAMP(boost_charge-boost_drain, 0, boost_maxcharge)
if(boost_charge < 1)
@@ -355,13 +356,13 @@
if(boost_charge < boost_maxcharge)
boost_charge = CLAMP(boost_charge+boost_chargerate, 0, boost_maxcharge)
/obj/item/device/flightpack/proc/cycle_power()
/obj/item/flightpack/proc/cycle_power()
powersetting < powersetting_high? (powersetting++) : (powersetting = 1)
momentum_gain = powersetting * 10
usermessage("Engine output set to [momentum_gain].")
momentum_drift_coeff = ((momentum_gain)*(drift_tolerance*1.1))/momentum_max
/obj/item/device/flightpack/proc/crash_damage(density, anchored, speed, victim_name)
/obj/item/flightpack/proc/crash_damage(density, anchored, speed, victim_name)
var/crashmessagesrc = "<span class='userdanger'>[wearer] violently crashes into [victim_name], "
var/userdamage = 10 - stabilizer * 3 - part_bin.rating - part_scan.rating * part_manip.rating + anchored * 2 + boost * 2 + speed * 2
if(userdamage > 0)
@@ -371,13 +372,13 @@
crashmessagesrc += "but luckily [wearer]'s impact was absorbed by their suit's stabilizers!</span>"
wearer.visible_message(crashmessagesrc)
/obj/item/device/flightpack/proc/userknockback(density, anchored, speed, dir)
/obj/item/flightpack/proc/userknockback(density, anchored, speed, dir)
dir = turn(dir, 180)
var/turf/target = get_edge_target_turf(get_turf(wearer), dir)
wearer.visible_message("[wearer] is knocked flying by the impact!")
wearer.throw_at(target, speed * 2 + density * 2 + anchored * 2, 2, wearer)
/obj/item/device/flightpack/proc/flight_impact(atom/impacted_atom, crashdir) //Yes, victim.
/obj/item/flightpack/proc/flight_impact(atom/impacted_atom, crashdir) //Yes, victim.
if(!flight || (impacted_atom == wearer) || crashing || (processing_mode == FLIGHTSUIT_PROCESSING_NONE))
return FALSE
crashing = TRUE
@@ -421,19 +422,19 @@
losecontrol(knockdown = FALSE, move = FALSE)
crashing = FALSE
/obj/item/device/flightpack/proc/door_pass(obj/structure/mineral_door/door)
/obj/item/flightpack/proc/door_pass(obj/structure/mineral_door/door)
INVOKE_ASYNC(door, /obj/structure/mineral_door.proc/Open)
var/turf/T = get_turf(door)
wearer.forceMove(T)
wearer.visible_message("<span class='boldnotice'>[wearer] rolls to their sides and slips past [door]!</span>")
/obj/item/device/flightpack/proc/crash_grille(obj/structure/grille/target)
/obj/item/flightpack/proc/crash_grille(obj/structure/grille/target)
target.hitby(wearer)
target.take_damage(60, BRUTE, "melee", 1)
if(wearer.Move(target.loc))
wearer.visible_message("<span class='warning'>[wearer] smashes straight past [target]!</span>")
/obj/item/device/flightpack/proc/airlock_pass(obj/machinery/door/A)
/obj/item/flightpack/proc/airlock_pass(obj/machinery/door/A)
var/nopass = FALSE
if(!A.density)
return TRUE
@@ -450,7 +451,7 @@
wearer.forceMove(target)
return !nopass
/obj/item/device/flightpack/proc/atom_impact(atom/movable/victim, power, direction)
/obj/item/flightpack/proc/atom_impact(atom/movable/victim, power, direction)
if(!victim)
return FALSE
if(!victim.anchored)
@@ -466,7 +467,7 @@
var/obj/O = victim
O.take_damage(power * 14)
/obj/item/device/flightpack/proc/losecontrol(knockdown = FALSE, move = TRUE)
/obj/item/flightpack/proc/losecontrol(knockdown = FALSE, move = TRUE)
usermessage("Warning: Control system not responding. Deactivating!", "boldwarning")
if(wearer)
wearer.visible_message("<span class='warning'>[wearer]'s flight suit abruptly shuts off and they lose control!</span>")
@@ -485,7 +486,7 @@
if(flight)
disable_flight(FALSE)
/obj/item/device/flightpack/proc/enable_flight(forced = FALSE)
/obj/item/flightpack/proc/enable_flight(forced = FALSE)
if(!forced)
if(disabled)
usermessage("Internal systems recalibrating. Unable to safely proceed.", "boldwarning")
@@ -505,7 +506,7 @@
update_icon()
ion_trail.start()
/obj/item/device/flightpack/proc/disable_flight(forced = FALSE)
/obj/item/flightpack/proc/disable_flight(forced = FALSE)
if(forced)
losecontrol(knockdown = TRUE)
return TRUE
@@ -536,23 +537,23 @@
addtimer(CALLBACK(src, .proc/enable_safe), 50)
return FALSE
/obj/item/device/flightpack/proc/enable_safe()
/obj/item/flightpack/proc/enable_safe()
if(override_safe)
override_safe = FALSE
/obj/item/device/flightpack/dropped(mob/wearer)
/obj/item/flightpack/dropped(mob/wearer)
changeWearer()
..()
/obj/item/device/flightpack/item_action_slot_check(slot)
/obj/item/flightpack/item_action_slot_check(slot)
if(slot == SLOT_BACK)
return TRUE
/obj/item/device/flightpack/equipped(mob/user, slot)
/obj/item/flightpack/equipped(mob/user, slot)
changeWearer(user)
..()
/obj/item/device/flightpack/proc/calculate_momentum_speed()
/obj/item/flightpack/proc/calculate_momentum_speed()
if(abs(momentum_x) >= (momentum_crash_coeff*momentum_max)) //Calculate X
momentum_speed_x = 3
else if(abs(momentum_x) >= (momentum_impact_coeff*momentum_max))
@@ -571,10 +572,10 @@
momentum_speed_y = 0
momentum_speed = max(momentum_speed_x, momentum_speed_y)
/obj/item/device/flightpack/item_action_slot_check(slot)
/obj/item/flightpack/item_action_slot_check(slot)
return slot == slot_back
/obj/item/device/flightpack/proc/enable_stabilizers()
/obj/item/flightpack/proc/enable_stabilizers()
if(requires_suit && suit && !suit.deployedshoes)
usermessage("Stabilizers requires flight shoes to be attached and deployed!", "boldwarning")
return FALSE
@@ -582,14 +583,14 @@
stabilizer = TRUE
return TRUE
/obj/item/device/flightpack/proc/disable_stabilizers()
/obj/item/flightpack/proc/disable_stabilizers()
if(wearer)
if(brake)
disable_airbrake()
usermessage("Deactivating stabilization controllers!", "boldwarning")
stabilizer = FALSE
/obj/item/device/flightpack/proc/activate_booster()
/obj/item/flightpack/proc/activate_booster()
if(!flight)
usermessage("Error: Engines offline!", "boldwarning")
return FALSE
@@ -601,13 +602,13 @@
update_slowdown()
update_icon()
/obj/item/device/flightpack/proc/deactivate_booster()
/obj/item/flightpack/proc/deactivate_booster()
usermessage("Boosters disengaged!")
boost = FALSE
update_slowdown()
update_icon()
/obj/item/device/flightpack/proc/enable_airbrake()
/obj/item/flightpack/proc/enable_airbrake()
if(wearer)
if(!stabilizer && !enable_stabilizers())
usermessage("Airbrake deployment: Stabilizer Errored.", "boldwarning")
@@ -616,13 +617,13 @@
brake = TRUE
update_slowdown()
/obj/item/device/flightpack/proc/disable_airbrake()
/obj/item/flightpack/proc/disable_airbrake()
if(wearer)
usermessage("Airbrakes retracted!", "boldwarning")
brake = FALSE
update_slowdown()
/obj/item/device/flightpack/proc/relink_suit(obj/item/clothing/suit/space/hardsuit/flightsuit/F)
/obj/item/flightpack/proc/relink_suit(obj/item/clothing/suit/space/hardsuit/flightsuit/F)
if(suit && suit == F)
return FALSE
else
@@ -633,13 +634,13 @@
else
suit = null
/obj/item/device/flightpack/proc/delink_suit()
/obj/item/flightpack/proc/delink_suit()
if(suit)
if(suit.pack && suit.pack == src)
suit.pack = null
suit = null
/obj/item/device/flightpack/attackby(obj/item/I, mob/user, params)
/obj/item/flightpack/attackby(obj/item/I, mob/user, params)
var/const/SuccessMessage = " has been successfully installed into systems."
var/changed = FALSE
if(istype(I, /obj/item/stock_parts))
@@ -689,13 +690,13 @@
return
/mob/living/carbon/get_flightpack()
var/obj/item/device/flightpack/F = back
var/obj/item/flightpack/F = back
if(istype(F))
return F
else
return FALSE
/obj/item/device/flightpack/proc/allow_thrust(amount)
/obj/item/flightpack/proc/allow_thrust(amount)
if(flight)
return TRUE
@@ -707,7 +708,7 @@
icon_state = "flightshoes"
item_state = "flightshoes_mob"
var/obj/item/clothing/suit/space/hardsuit/flightsuit/suit = null
var/obj/item/device/flightpack/pack = null
var/obj/item/flightpack/pack = null
var/mob/living/carbon/human/wearer = null
var/active = FALSE
permeability_coefficient = 0.01
@@ -764,7 +765,7 @@
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 30, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 100)
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
var/locked_strip_delay = 80
var/obj/item/device/flightpack/pack = null
var/obj/item/flightpack/pack = null
var/obj/item/clothing/shoes/flightshoes/shoes = null
var/mob/living/carbon/human/user = null
var/deployedpack = FALSE
@@ -950,7 +951,7 @@
/obj/item/clothing/suit/space/hardsuit/flightsuit/proc/makepack()
if(!pack)
pack = new /obj/item/device/flightpack/full(src)
pack = new /obj/item/flightpack/full(src)
pack.relink_suit(src)
/obj/item/clothing/suit/space/hardsuit/flightsuit/proc/makeshoes()
@@ -977,7 +978,7 @@
pack = null
usermessage("You detach the flightpack.")
/obj/item/clothing/suit/space/hardsuit/flightsuit/proc/attach_pack(obj/item/device/flightpack/F)
/obj/item/clothing/suit/space/hardsuit/flightsuit/proc/attach_pack(obj/item/flightpack/F)
F.forceMove(src)
pack = F
pack.relink_suit(src)
@@ -1037,8 +1038,8 @@
return FALSE
detach_shoes()
return TRUE
else if(istype(I, /obj/item/device/flightpack))
var/obj/item/device/flightpack/F = I
else if(istype(I, /obj/item/flightpack))
var/obj/item/flightpack/F = I
if(pack)
usermessage("[src] already has a flightpack installed!", "boldwarning")
return FALSE
+6 -6
View File
@@ -97,7 +97,7 @@
item_state = "eng_hardsuit"
max_integrity = 300
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75)
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
siemens_coefficient = 0
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
actions_types = list(/datum/action/item_action/toggle_helmet)
@@ -235,7 +235,7 @@
heat_protection = HEAD
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75)
brightness_on = 7
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
/obj/item/clothing/suit/space/hardsuit/mining
@@ -246,7 +246,7 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75)
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -437,7 +437,7 @@
name = "medical hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement."
item_state = "medical_hardsuit"
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/device/healthanalyzer, /obj/item/stack/medical)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical)
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
@@ -477,8 +477,8 @@
item_state = "hardsuit-rd"
resistance_flags = ACID_PROOF | FIRE_PROOF
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure.
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector,
/obj/item/hand_tele, /obj/item/device/aicard)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector,
/obj/item/hand_tele, /obj/item/aicard)
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd
@@ -93,7 +93,7 @@ Contains:
icon_state = "void"
item_state = "void"
desc = "An old, NASA CentCom branch designed, dark red space suit."
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/device/multitool)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool)
/obj/item/clothing/head/helmet/space/nasavoid/old
name = "Engineering Void Helmet"
@@ -107,7 +107,7 @@ Contains:
item_state = "void"
desc = "A CentCom engineering dark red space suit. Age has degraded the suit making is difficult to move around in."
slowdown = 4
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/device/multitool)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool)
//Space santa outfit suit
/obj/item/clothing/head/helmet/space/santahat
+2 -2
View File
@@ -16,7 +16,7 @@
icon_state = "hardsuit-nazi"
slowdown = 1
armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 20)
allowed = list(/obj/item/gun,/obj/item/device/flashlight,/obj/item/tank,/obj/item/melee/)
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/nazi
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
@@ -36,7 +36,7 @@
icon_state = "hardsuit-soviet"
slowdown = 1
armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 20)
allowed = list(/obj/item/gun,/obj/item/device/flashlight,/obj/item/tank,/obj/item/melee/)
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/soviet
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
+1 -1
View File
@@ -21,7 +21,7 @@
flags_1 = THICKMATERIAL_1
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 1
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray)
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
strip_delay = 70
+2 -2
View File
@@ -60,7 +60,7 @@
name = "goliath cloak"
icon_state = "goliath_cloak"
desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits."
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival)
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
body_parts_covered = CHEST|GROIN|ARMS
@@ -76,7 +76,7 @@
name = "drake armour"
icon_state = "dragon"
desc = "A suit of armour fashioned from the remains of an ash drake."
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear)
armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100)
hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+3 -3
View File
@@ -10,7 +10,7 @@
item_state = "apron"
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants)
allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants)
//Captain
/obj/item/clothing/suit/captunic
@@ -20,7 +20,7 @@
item_state = "bio_suit"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
//Chaplain
/obj/item/clothing/suit/hooded/chaplain_hoodie
@@ -115,7 +115,7 @@
icon_state = "hazard"
item_state = "hazard"
blood_overlay_type = "armor"
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/t_scanner, /obj/item/device/radio)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/radio)
resistance_flags = NONE
//Lawyer
+1 -1
View File
@@ -5,7 +5,7 @@
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman,/obj/item/hypospray) //CITADEL ADD, Hyposprays to laboats
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman,/obj/item/hypospray) //CITADEL ADD, Hyposprays to laboats
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50)
togglename = "buttons"
species_exception = list(/datum/species/golem)
+10 -10
View File
@@ -93,7 +93,7 @@
item_state = "syndicate-black-red"
desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = WEIGHT_CLASS_NORMAL
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
resistance_flags = NONE
@@ -355,7 +355,7 @@
desc = "Aviators not included."
icon_state = "bomberjacket"
item_state = "brownjsuit"
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/device/radio)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio)
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -367,7 +367,7 @@
item_state = "hostrench"
resistance_flags = NONE
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/radio)
/obj/item/clothing/suit/jacket/leather/overcoat
name = "leather overcoat"
@@ -397,7 +397,7 @@
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable."
icon_state = "militaryjacket"
item_state = "militaryjacket"
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/radio)
/obj/item/clothing/suit/jacket/letterman
name = "letterman jacket"
@@ -470,7 +470,7 @@
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
/obj/item/clothing/head/hooded/winterhood
name = "winter hood"
@@ -513,7 +513,7 @@
name = "medical winter coat"
icon_state = "coatmedical"
item_state = "coatmedical"
allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
@@ -524,7 +524,7 @@
name = "science winter coat"
icon_state = "coatscience"
item_state = "coatscience"
allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/science
@@ -536,7 +536,7 @@
icon_state = "coatengineer"
item_state = "coatengineer"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45)
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
/obj/item/clothing/head/hooded/winterhood/engineering
@@ -555,7 +555,7 @@
name = "hydroponics winter coat"
icon_state = "coathydro"
item_state = "coathydro"
allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro
/obj/item/clothing/head/hooded/winterhood/hydro
@@ -574,7 +574,7 @@
name = "mining winter coat"
icon_state = "coatminer"
item_state = "coatminer"
allowed = list(/obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/miner
+2 -2
View File
@@ -18,7 +18,7 @@
gas_transfer_coefficient = 0.9
permeability_coefficient = 0.5
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar)
slowdown = 1
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1
@@ -141,7 +141,7 @@
permeability_coefficient = 0.5
flags_1 = THICKMATERIAL_1
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/geiger_counter)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/geiger_counter)
slowdown = 1.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
strip_delay = 60
+3 -2
View File
@@ -614,6 +614,7 @@
/obj/item/clothing/under/plasmaman
name = "plasma envirosuit"
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
icon = 'icons/obj/device.dmi'
icon_state = "plasmaman"
item_state = "plasmaman"
item_color = "plasmaman"
@@ -648,7 +649,7 @@
/obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params)
..()
if (istype(E, /obj/item/device/extinguisher_refill))
if (istype(E, /obj/item/extinguisher_refill))
if (extinguishes_left == 5)
to_chat(user, "<span class='notice'>The inbuilt extinguisher is full.</span>")
return
@@ -660,7 +661,7 @@
return
return
/obj/item/device/extinguisher_refill
/obj/item/extinguisher_refill
name = "envirosuit extinguisher cartridge"
desc = "A cartridge loaded with a compressed extinguisher mix, used to refill the automatic extinguisher on plasma envirosuits."
icon_state = "plasmarefill"
+21 -21
View File
@@ -26,7 +26,7 @@
result = /obj/item/grenade/iedcasing
reqs = list(/datum/reagent/fuel = 50,
/obj/item/stack/cable_coil = 1,
/obj/item/device/assembly/igniter = 1,
/obj/item/assembly/igniter = 1,
/obj/item/reagent_containers/food/drinks/soda_cans = 1)
parts = list(/obj/item/reagent_containers/food/drinks/soda_cans = 1)
time = 15
@@ -46,9 +46,9 @@
/datum/crafting_recipe/strobeshield
name = "Strobe Shield"
result = /obj/item/device/assembly/flash/shield
result = /obj/item/assembly/flash/shield
reqs = list(/obj/item/wallframe/flasher = 1,
/obj/item/device/assembly/flash/handheld = 1,
/obj/item/assembly/flash/handheld = 1,
/obj/item/shield/riot = 1)
time = 40
category = CAT_WEAPONRY
@@ -69,7 +69,7 @@
result = /obj/item/melee/baton/cattleprod
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
/obj/item/stack/rods = 1,
/obj/item/device/assembly/igniter = 1)
/obj/item/assembly/igniter = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
@@ -79,7 +79,7 @@
result = /obj/item/melee/baton/cattleprod/teleprod
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
/obj/item/stack/rods = 1,
/obj/item/device/assembly/igniter = 1,
/obj/item/assembly/igniter = 1,
/obj/item/stack/ore/bluespace_crystal = 1)
time = 40
category = CAT_WEAPONRY
@@ -133,7 +133,7 @@
/obj/item/stack/cable_coil = 1,
/obj/item/gun/energy/e_gun/advtaser = 1,
/obj/item/stock_parts/cell = 1,
/obj/item/device/assembly/prox_sensor = 1)
/obj/item/assembly/prox_sensor = 1)
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER)
time = 60
category = CAT_ROBOT
@@ -141,10 +141,10 @@
/datum/crafting_recipe/secbot
name = "Secbot"
result = /mob/living/simple_animal/bot/secbot
reqs = list(/obj/item/device/assembly/signaler = 1,
reqs = list(/obj/item/assembly/signaler = 1,
/obj/item/clothing/head/helmet/sec = 1,
/obj/item/melee/baton = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/r_arm/robot = 1)
tools = list(TOOL_WELDER)
time = 60
@@ -154,7 +154,7 @@
name = "Cleanbot"
result = /mob/living/simple_animal/bot/cleanbot
reqs = list(/obj/item/reagent_containers/glass/bucket = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/r_arm/robot = 1)
time = 40
category = CAT_ROBOT
@@ -164,7 +164,7 @@
result = /mob/living/simple_animal/bot/floorbot
reqs = list(/obj/item/storage/toolbox/mechanical = 1,
/obj/item/stack/tile/plasteel = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/r_arm/robot = 1)
time = 40
category = CAT_ROBOT
@@ -172,9 +172,9 @@
/datum/crafting_recipe/medbot
name = "Medbot"
result = /mob/living/simple_animal/bot/medbot
reqs = list(/obj/item/device/healthanalyzer = 1,
reqs = list(/obj/item/healthanalyzer = 1,
/obj/item/storage/firstaid = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/r_arm/robot = 1)
time = 40
category = CAT_ROBOT
@@ -184,7 +184,7 @@
result = /mob/living/simple_animal/bot/honkbot
reqs = list(/obj/item/storage/box/clown = 1,
/obj/item/bodypart/r_arm/robot = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bikehorn/ = 1)
time = 40
category = CAT_ROBOT
@@ -204,9 +204,9 @@
name = "Flamethrower"
result = /obj/item/flamethrower
reqs = list(/obj/item/weldingtool = 1,
/obj/item/device/assembly/igniter = 1,
/obj/item/assembly/igniter = 1,
/obj/item/stack/rods = 1)
parts = list(/obj/item/device/assembly/igniter = 1,
parts = list(/obj/item/assembly/igniter = 1,
/obj/item/weldingtool = 1)
tools = list(TOOL_SCREWDRIVER)
time = 10
@@ -325,11 +325,11 @@
/datum/crafting_recipe/spooky_camera
name = "Camera Obscura"
result = /obj/item/device/camera/spooky
result = /obj/item/camera/spooky
time = 15
reqs = list(/obj/item/device/camera = 1,
reqs = list(/obj/item/camera = 1,
/datum/reagent/water/holywater = 10)
parts = list(/obj/item/device/camera = 1)
parts = list(/obj/item/camera = 1)
category = CAT_MISC
/datum/crafting_recipe/lizardhat
@@ -383,7 +383,7 @@
result = /obj/item/organ/eyes/robotic/flashlight
time = 10
reqs = list(
/obj/item/device/flashlight = 2,
/obj/item/flashlight = 2,
/obj/item/restraints/handcuffs/cable = 1
)
category = CAT_MISC
@@ -576,12 +576,12 @@
/datum/crafting_recipe/pressureplate
name = "Pressure Plate"
result = /obj/item/device/pressure_plate
result = /obj/item/pressure_plate
time = 5
reqs = list(/obj/item/stack/sheet/metal = 1,
/obj/item/stack/tile/plasteel = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/device/assembly/igniter = 1)
/obj/item/assembly/igniter = 1)
category = CAT_MISC
+12 -11
View File
@@ -2,9 +2,10 @@
// TODO: Split everything into easy to manage procs.
/obj/item/device/detective_scanner
/obj/item/detective_scanner
name = "forensic scanner"
desc = "Used to remotely scan objects and biomass for DNA and fingerprints. Can print a report of the findings."
icon = 'icons/obj/device.dmi'
icon_state = "forensicnew"
w_class = WEIGHT_CLASS_SMALL
item_state = "electronic"
@@ -22,11 +23,11 @@
name = "Display Forensic Scanner Results"
/datum/action/item_action/displayDetectiveScanResults/Trigger()
var/obj/item/device/detective_scanner/scanner = target
var/obj/item/detective_scanner/scanner = target
if(istype(scanner))
scanner.displayDetectiveScanResults(usr)
/obj/item/device/detective_scanner/attack_self(mob/user)
/obj/item/detective_scanner/attack_self(mob/user)
if(log.len && !scanning)
scanning = 1
to_chat(user, "<span class='notice'>Printing report, please wait...</span>")
@@ -34,10 +35,10 @@
else
to_chat(user, "<span class='notice'>The scanner has no logs or is in use.</span>")
/obj/item/device/detective_scanner/attack(mob/living/M, mob/user)
/obj/item/detective_scanner/attack(mob/living/M, mob/user)
return
/obj/item/device/detective_scanner/proc/PrintReport()
/obj/item/detective_scanner/proc/PrintReport()
// Create our paper
var/obj/item/paper/P = new(get_turf(src))
P.name = "paper- 'Scanner Report'"
@@ -56,11 +57,11 @@
log = list()
scanning = 0
/obj/item/device/detective_scanner/afterattack(atom/A, mob/user, params)
/obj/item/detective_scanner/afterattack(atom/A, mob/user, params)
scan(A, user)
return FALSE
/obj/item/device/detective_scanner/proc/scan(atom/A, mob/user)
/obj/item/detective_scanner/proc/scan(atom/A, mob/user)
set waitfor = 0
if(!scanning)
// Can remotely scan objects and mobs.
@@ -164,7 +165,7 @@
scanning = 0
return
/obj/item/device/detective_scanner/proc/add_log(msg, broadcast = 1)
/obj/item/detective_scanner/proc/add_log(msg, broadcast = 1)
if(scanning)
if(broadcast && ismob(loc))
var/mob/M = loc
@@ -175,8 +176,8 @@
/proc/get_timestamp()
return time2text(world.time + 432000, ":ss")
/obj/item/device/detective_scanner/AltClick(mob/living/user)
/obj/item/detective_scanner/AltClick(mob/living/user)
// Best way for checking if a player can use while not incapacitated, etc
if(!user.canUseTopic(src, be_close=TRUE))
return
@@ -189,7 +190,7 @@
to_chat(user, "<span class='notice'>The scanner logs are cleared.</span>")
log = list()
/obj/item/device/detective_scanner/proc/displayDetectiveScanResults(mob/living/user)
/obj/item/detective_scanner/proc/displayDetectiveScanResults(mob/living/user)
// No need for can-use checks since the action button should do proper checks
if(!LAZYLEN(log))
to_chat(user, "<span class='notice'>Cannot display logs, the scanner has no logs.</span>")
+3 -3
View File
@@ -94,13 +94,13 @@
density = TRUE
anchored = TRUE
var/active = FALSE
var/obj/item/device/gps/gps
var/obj/item/gps/gps
var/credits_stored = 0
var/siphon_per_tick = 5
/obj/machinery/shuttle_scrambler/Initialize(mapload)
. = ..()
gps = new/obj/item/device/gps/internal/pirate(src)
gps = new/obj/item/gps/internal/pirate(src)
gps.tracking = FALSE
update_icon()
@@ -174,7 +174,7 @@
QDEL_NULL(gps)
return ..()
/obj/item/device/gps/internal/pirate
/obj/item/gps/internal/pirate
gpstag = "Nautical Signal"
desc = "You can hear shanties over the static."
+9 -9
View File
@@ -276,7 +276,7 @@
..()
//DEBUG FIELD ITEM
/obj/item/device/multitool/field_debug
/obj/item/multitool/field_debug
name = "strange multitool"
desc = "Seems to project a colored field!"
var/list/field_params = list("field_shape" = FIELD_SHAPE_RADIUS_SQUARE, "current_range" = 5, "set_fieldturf_color" = "#aaffff", "set_edgeturf_color" = "#ffaaff")
@@ -285,22 +285,22 @@
var/datum/proximity_monitor/advanced/current = null
var/datum/component/mobhook
/obj/item/device/multitool/field_debug/Initialize()
/obj/item/multitool/field_debug/Initialize()
. = ..()
START_PROCESSING(SSobj, src)
/obj/item/device/multitool/field_debug/Destroy()
/obj/item/multitool/field_debug/Destroy()
STOP_PROCESSING(SSobj, src)
QDEL_NULL(current)
QDEL_NULL(mobhook)
return ..()
/obj/item/device/multitool/field_debug/proc/setup_debug_field()
/obj/item/multitool/field_debug/proc/setup_debug_field()
var/list/new_params = field_params.Copy()
new_params["host"] = src
current = make_field(field_type, new_params)
/obj/item/device/multitool/field_debug/attack_self(mob/user)
/obj/item/multitool/field_debug/attack_self(mob/user)
operating = !operating
to_chat(user, "You turn [src] [operating? "on":"off"].")
QDEL_NULL(mobhook)
@@ -310,15 +310,15 @@
else if(!operating)
QDEL_NULL(current)
/obj/item/device/multitool/field_debug/dropped()
/obj/item/multitool/field_debug/dropped()
. = ..()
QDEL_NULL(mobhook)
/obj/item/device/multitool/field_debug/proc/on_mob_move()
/obj/item/multitool/field_debug/proc/on_mob_move()
check_turf(get_turf(src))
/obj/item/device/multitool/field_debug/process()
/obj/item/multitool/field_debug/process()
check_turf(get_turf(src))
/obj/item/device/multitool/field_debug/proc/check_turf(turf/T)
/obj/item/multitool/field_debug/proc/check_turf(turf/T)
current.HandleMove()
+4 -4
View File
@@ -578,13 +578,13 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
/obj/item/cartridge/virus/syndicate, /obj/item/clothing/under/chameleon,\
/obj/item/clothing/shoes/chameleon/noslip, /obj/item/card/id/syndicate,\
/obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/card/emag, /obj/item/grenade/plastic/x4,\
/obj/item/chameleon, /obj/item/card/emag, /obj/item/grenade/plastic/x4,\
/obj/item/storage/toolbox/syndicate, /obj/item/aiModule,\
/obj/item/device/radio/headset/syndicate, /obj/item/grenade/plastic/c4,\
/obj/item/device/powersink, /obj/item/storage/box/syndie_kit,\
/obj/item/radio/headset/syndicate, /obj/item/grenade/plastic/c4,\
/obj/item/powersink, /obj/item/storage/box/syndie_kit,\
/obj/item/toy/syndicateballoon, /obj/item/gun/energy/laser/captain,\
/obj/item/hand_tele, /obj/item/construction/rcd, /obj/item/tank/jetpack,\
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
/obj/item/clothing/under/rank/captain, /obj/item/aicard,\
/obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/disk/nuclear,\
/obj/item/clothing/suit/space/nasavoid, /obj/item/tank)
@@ -41,7 +41,7 @@ God bless America.
/obj/item/crowbar,
/obj/item/wrench,
/obj/item/wirecutters,
/obj/item/device/multitool,
/obj/item/multitool,
/obj/item/weldingtool,
/obj/item/reagent_containers/glass,
/obj/item/reagent_containers/syringe,
@@ -344,12 +344,12 @@
/obj/machinery/smartfridge/extract/accept_check(obj/item/O)
if(istype(O, /obj/item/slime_extract))
return TRUE
if(istype(O, /obj/item/device/slime_scanner))
if(istype(O, /obj/item/slime_scanner))
return TRUE
return FALSE
/obj/machinery/smartfridge/extract/preloaded
initial_contents = list(/obj/item/device/slime_scanner = 2)
initial_contents = list(/obj/item/slime_scanner = 2)
// -----------------------------
// Chemistry Medical Smartfridge
+1 -1
View File
@@ -60,7 +60,7 @@
/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/device/plant_analyzer))
if (istype(O, /obj/item/plant_analyzer))
var/msg = "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.\n"
if(seed)
msg += seed.get_analyzer_text()
+1 -1
View File
@@ -68,7 +68,7 @@
var/obj/item/reagent_containers/food/snacks/grown/leaf = W
if(leaf.dry)
user.show_message("<span class='notice'>You wrap \the [W] around the log, turning it into a torch!</span>")
var/obj/item/device/flashlight/flare/torch/T = new /obj/item/device/flashlight/flare/torch(user.loc)
var/obj/item/flashlight/flare/torch/T = new /obj/item/flashlight/flare/torch(user.loc)
usr.dropItemToGround(W)
usr.put_in_active_hand(T)
qdel(leaf)
+1 -1
View File
@@ -34,7 +34,7 @@
/obj/item/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/device/plant_analyzer))
if (istype(O, /obj/item/plant_analyzer))
var/msg = "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>\n"
if(seed)
msg += seed.get_analyzer_text()
+1 -1
View File
@@ -1,5 +1,5 @@
// Plant analyzer
/obj/item/device/plant_analyzer
/obj/item/plant_analyzer
name = "plant analyzer"
desc = "A scanner used to evaluate a plant's various areas of growth."
icon = 'icons/obj/device.dmi'
+1 -1
View File
@@ -758,7 +758,7 @@
else
to_chat(user, "<span class='warning'>[src] already has seeds in it!</span>")
else if(istype(O, /obj/item/device/plant_analyzer))
else if(istype(O, /obj/item/plant_analyzer))
if(myseed)
to_chat(user, "*** <B>[myseed.plantname]</B> ***" )
to_chat(user, "- Plant Age: <span class='notice'>[age]</span>")
+1 -1
View File
@@ -311,7 +311,7 @@
return
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
if (istype(O, /obj/item/device/plant_analyzer))
if (istype(O, /obj/item/plant_analyzer))
to_chat(user, "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>")
var/text = get_analyzer_text()
if(text)
@@ -1,4 +1,4 @@
/obj/item/device/integrated_electronics/analyzer
/obj/item/integrated_electronics/analyzer
name = "circuit analyzer"
desc = "This tool can scan an assembly and generate code necessary to recreate it in a circuit printer."
icon = 'icons/obj/assemblies/electronic_tools.dmi'
@@ -6,8 +6,8 @@
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_SMALL
/obj/item/device/integrated_electronics/analyzer/afterattack(var/atom/A, var/mob/living/user)
if(istype(A, /obj/item/device/electronic_assembly))
/obj/item/integrated_electronics/analyzer/afterattack(var/atom/A, var/mob/living/user)
if(istype(A, /obj/item/electronic_assembly))
var/saved = "[A.name] analyzed! On circuit printers with cloning enabled, you may use the code below to clone the circuit:<br><br><code>[SScircuit.save_electronic_assembly(A)]</code>"
if(saved)
to_chat(user, "<span class='notice'>You scan [A].</span>")
@@ -1,7 +1,7 @@
#define IC_MAX_SIZE_BASE 25
#define IC_COMPLEXITY_BASE 75
/obj/item/device/electronic_assembly
/obj/item/electronic_assembly
name = "electronic assembly"
obj_flags = CAN_BE_HIT
desc = "It's a case, for building small electronics with."
@@ -54,17 +54,17 @@
COLOR_ASSEMBLY_PURPLE
)
/obj/item/device/electronic_assembly/examine(mob/user)
/obj/item/electronic_assembly/examine(mob/user)
. = ..()
if(can_anchor)
to_chat(user, "<span class='notice'>The anchoring bolts [anchored ? "are" : "can be"] <b>wrenched</b> in place and the maintainence panel [opened ? "can be" : "is"] <b>screwed</b> in place.</span>")
else
to_chat(user, "<span class='notice'>The maintainence panel [opened ? "can be" : "is"] <b>screwed</b> in place.</span>")
/obj/item/device/electronic_assembly/proc/check_interactivity(mob/user)
/obj/item/electronic_assembly/proc/check_interactivity(mob/user)
return user.canUseTopic(src, BE_CLOSE)
/obj/item/device/electronic_assembly/Collide(atom/AM)
/obj/item/electronic_assembly/Collide(atom/AM)
collw = AM
.=..()
if((istype(collw, /obj/machinery/door/airlock) || istype(collw, /obj/machinery/door/window)) && (!isnull(access_card)))
@@ -72,7 +72,7 @@
if(D.check_access(access_card))
D.open()
/obj/item/device/electronic_assembly/Initialize()
/obj/item/electronic_assembly/Initialize()
.=..()
START_PROCESSING(SScircuit, src)
materials[MAT_METAL] = round((max_complexity + max_components) / 4) * SScircuit.cost_multiplier
@@ -88,14 +88,14 @@
access_card = new /obj/item/card/id(src)
/obj/item/device/electronic_assembly/Destroy()
/obj/item/electronic_assembly/Destroy()
STOP_PROCESSING(SScircuit, src)
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
diag_hud.remove_from_hud(src)
QDEL_NULL(access_card)
return ..()
/obj/item/device/electronic_assembly/process()
/obj/item/electronic_assembly/process()
handle_idle_power()
check_pulling()
@@ -103,7 +103,7 @@
diag_hud_set_circuithealth()
diag_hud_set_circuitcell()
/obj/item/device/electronic_assembly/proc/handle_idle_power()
/obj/item/electronic_assembly/proc/handle_idle_power()
// First we generate power.
for(var/obj/item/integrated_circuit/passive/power/P in assembly_components)
P.make_energy()
@@ -115,10 +115,10 @@
if(!draw_power(IC.power_draw_idle))
IC.power_fail()
/obj/item/device/electronic_assembly/interact(mob/user)
/obj/item/electronic_assembly/interact(mob/user)
ui_interact(user)
/obj/item/device/electronic_assembly/ui_interact(mob/user)
/obj/item/electronic_assembly/ui_interact(mob/user)
. = ..()
if(!check_interactivity(user))
return
@@ -176,7 +176,7 @@
HTML += "</body></html>"
user << browse(HTML, "window=assembly-[REF(src)];size=655x350;border=1;can_resize=1;can_close=1;can_minimize=1")
/obj/item/device/electronic_assembly/Topic(href, href_list)
/obj/item/electronic_assembly/Topic(href, href_list)
if(..())
return 1
@@ -235,7 +235,7 @@
interact(usr) // To refresh the UI.
/obj/item/device/electronic_assembly/pickup(mob/living/user)
/obj/item/electronic_assembly/pickup(mob/living/user)
. = ..()
//update diagnostic hud when picked up, true is used to force the hud to be hidden
diag_hud_set_circuithealth(TRUE)
@@ -243,7 +243,7 @@
diag_hud_set_circuitstat(TRUE)
diag_hud_set_circuittracking(TRUE)
/obj/item/device/electronic_assembly/dropped(mob/user)
/obj/item/electronic_assembly/dropped(mob/user)
. = ..()
//update diagnostic hud when dropped
diag_hud_set_circuithealth()
@@ -251,7 +251,7 @@
diag_hud_set_circuitstat()
diag_hud_set_circuittracking()
/obj/item/device/electronic_assembly/proc/rename()
/obj/item/electronic_assembly/proc/rename()
var/mob/M = usr
if(!check_interactivity(M))
return
@@ -263,10 +263,10 @@
to_chat(M, "<span class='notice'>The machine now has a label reading '[input]'.</span>")
name = input
/obj/item/device/electronic_assembly/proc/can_move()
/obj/item/electronic_assembly/proc/can_move()
return FALSE
/obj/item/device/electronic_assembly/update_icon()
/obj/item/electronic_assembly/update_icon()
if(opened)
icon_state = initial(icon_state) + "-open"
else
@@ -278,7 +278,7 @@
detail_overlay.color = detail_color
add_overlay(detail_overlay)
/obj/item/device/electronic_assembly/examine(mob/user)
/obj/item/electronic_assembly/examine(mob/user)
..()
for(var/I in assembly_components)
var/obj/item/integrated_circuit/IC = I
@@ -286,14 +286,14 @@
if(opened)
interact(user)
/obj/item/device/electronic_assembly/proc/return_total_complexity()
/obj/item/electronic_assembly/proc/return_total_complexity()
. = 0
var/obj/item/integrated_circuit/part
for(var/p in assembly_components)
part = p
. += part.complexity
/obj/item/device/electronic_assembly/proc/return_total_size()
/obj/item/electronic_assembly/proc/return_total_size()
. = 0
var/obj/item/integrated_circuit/part
for(var/p in assembly_components)
@@ -301,7 +301,7 @@
. += part.size
// Returns true if the circuit made it inside.
/obj/item/device/electronic_assembly/proc/try_add_component(obj/item/integrated_circuit/IC, mob/user)
/obj/item/electronic_assembly/proc/try_add_component(obj/item/integrated_circuit/IC, mob/user)
if(!opened)
to_chat(user, "<span class='warning'>\The [src]'s hatch is closed, you can't put anything inside.</span>")
return FALSE
@@ -334,7 +334,7 @@
// Actually puts the circuit inside, doesn't perform any checks.
/obj/item/device/electronic_assembly/proc/add_component(obj/item/integrated_circuit/component)
/obj/item/electronic_assembly/proc/add_component(obj/item/integrated_circuit/component)
component.forceMove(get_object())
component.assembly = src
assembly_components |= component
@@ -350,7 +350,7 @@
diag_hud_set_circuittracking()
/obj/item/device/electronic_assembly/proc/try_remove_component(obj/item/integrated_circuit/IC, mob/user, silent)
/obj/item/electronic_assembly/proc/try_remove_component(obj/item/integrated_circuit/IC, mob/user, silent)
if(!opened)
if(!silent)
to_chat(user, "<span class='warning'>[src]'s hatch is closed, so you can't fiddle with the internal components.</span>")
@@ -370,7 +370,7 @@
return TRUE
// Actually removes the component, doesn't perform any checks.
/obj/item/device/electronic_assembly/proc/remove_component(obj/item/integrated_circuit/component)
/obj/item/electronic_assembly/proc/remove_component(obj/item/integrated_circuit/component)
component.disconnect_all()
component.forceMove(drop_location())
component.assembly = null
@@ -387,20 +387,20 @@
diag_hud_set_circuittracking()
/obj/item/device/electronic_assembly/afterattack(atom/target, mob/user, proximity)
/obj/item/electronic_assembly/afterattack(atom/target, mob/user, proximity)
for(var/obj/item/integrated_circuit/input/S in assembly_components)
if(S.sense(target,user,proximity))
visible_message("<span class='notice'> [user] waves [src] around [target].</span>")
/obj/item/device/electronic_assembly/screwdriver_act(mob/living/user, obj/item/I)
/obj/item/electronic_assembly/screwdriver_act(mob/living/user, obj/item/I)
I.play_tool_sound(src)
opened = !opened
to_chat(user, "<span class='notice'>You [opened ? "open" : "close"] the maintenance hatch of [src].</span>")
update_icon()
return TRUE
/obj/item/device/electronic_assembly/attackby(obj/item/I, mob/living/user)
/obj/item/electronic_assembly/attackby(obj/item/I, mob/living/user)
if(can_anchor && default_unfasten_wrench(user, I, 20))
return
if(istype(I, /obj/item/integrated_circuit))
@@ -413,7 +413,7 @@
for(var/obj/item/integrated_circuit/input/S in assembly_components)
S.attackby_react(I,user,user.a_intent)
return ..()
else if(istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/integrated_electronics/wirer) || istype(I, /obj/item/device/integrated_electronics/debugger))
else if(istype(I, /obj/item/multitool) || istype(I, /obj/item/integrated_electronics/wirer) || istype(I, /obj/item/integrated_electronics/debugger))
if(opened)
interact(user)
return TRUE
@@ -442,8 +442,8 @@
to_chat(user, "<span class='notice'>You slot \the [cell] inside \the [src]'s power supplier.</span>")
interact(user)
return TRUE
else if(istype(I, /obj/item/device/integrated_electronics/detailer))
var/obj/item/device/integrated_electronics/detailer/D = I
else if(istype(I, /obj/item/integrated_electronics/detailer))
var/obj/item/integrated_electronics/detailer/D = I
detail_color = D.detail_color
update_icon()
else
@@ -452,7 +452,7 @@
return ..()
/obj/item/device/electronic_assembly/attack_self(mob/user)
/obj/item/electronic_assembly/attack_self(mob/user)
if(!check_interactivity(user))
return
if(opened)
@@ -487,32 +487,32 @@
if(choice)
choice.ask_for_input(user)
/obj/item/device/electronic_assembly/emp_act(severity)
/obj/item/electronic_assembly/emp_act(severity)
..()
for(var/i in 1 to contents.len)
var/atom/movable/AM = contents[i]
AM.emp_act(severity)
// Returns true if power was successfully drawn.
/obj/item/device/electronic_assembly/proc/draw_power(amount)
/obj/item/electronic_assembly/proc/draw_power(amount)
if(battery && battery.use(amount * GLOB.CELLRATE))
return TRUE
return FALSE
// Ditto for giving.
/obj/item/device/electronic_assembly/proc/give_power(amount)
/obj/item/electronic_assembly/proc/give_power(amount)
if(battery && battery.give(amount * GLOB.CELLRATE))
return TRUE
return FALSE
/obj/item/device/electronic_assembly/Moved(oldLoc, dir)
/obj/item/electronic_assembly/Moved(oldLoc, dir)
for(var/I in assembly_components)
var/obj/item/integrated_circuit/IC = I
IC.ext_moved(oldLoc, dir)
if(light) //Update lighting objects (From light circuits).
update_light()
/obj/item/device/electronic_assembly/stop_pulling()
/obj/item/electronic_assembly/stop_pulling()
for(var/I in assembly_components)
var/obj/item/integrated_circuit/IC = I
IC.stop_pulling()
@@ -521,7 +521,7 @@
// Returns the object that is supposed to be used in attack messages, location checks, etc.
// Override in children for special behavior.
/obj/item/device/electronic_assembly/proc/get_object()
/obj/item/electronic_assembly/proc/get_object()
return src
// Returns the location to be used for dropping items.
@@ -535,46 +535,46 @@
return acting_object.drop_location()
/obj/item/device/electronic_assembly/attack_tk(mob/user)
/obj/item/electronic_assembly/attack_tk(mob/user)
if(anchored)
return
..()
/obj/item/device/electronic_assembly/attack_hand(mob/user)
/obj/item/electronic_assembly/attack_hand(mob/user)
if(anchored)
attack_self(user)
return
..()
/obj/item/device/electronic_assembly/default //The /default electronic_assemblys are to allow the introduction of the new naming scheme without breaking old saves.
/obj/item/electronic_assembly/default //The /default electronic_assemblys are to allow the introduction of the new naming scheme without breaking old saves.
name = "type-a electronic assembly"
/obj/item/device/electronic_assembly/calc
/obj/item/electronic_assembly/calc
name = "type-b electronic assembly"
icon_state = "setup_small_calc"
desc = "It's a case, for building small electronics with. This one resembles a pocket calculator."
/obj/item/device/electronic_assembly/clam
/obj/item/electronic_assembly/clam
name = "type-c electronic assembly"
icon_state = "setup_small_clam"
desc = "It's a case, for building small electronics with. This one has a clamshell design."
/obj/item/device/electronic_assembly/simple
/obj/item/electronic_assembly/simple
name = "type-d electronic assembly"
icon_state = "setup_small_simple"
desc = "It's a case, for building small electronics with. This one has a simple design."
/obj/item/device/electronic_assembly/hook
/obj/item/electronic_assembly/hook
name = "type-e electronic assembly"
icon_state = "setup_small_hook"
desc = "It's a case, for building small electronics with. This one looks like it has a belt clip, but it's purely decorative."
/obj/item/device/electronic_assembly/pda
/obj/item/electronic_assembly/pda
name = "type-f electronic assembly"
icon_state = "setup_small_pda"
desc = "It's a case, for building small electronics with. This one resembles a PDA."
/obj/item/device/electronic_assembly/medium
/obj/item/electronic_assembly/medium
name = "electronic mechanism"
icon_state = "setup_medium"
desc = "It's a case, for building medium-sized electronics with."
@@ -582,35 +582,35 @@
max_components = IC_MAX_SIZE_BASE * 2
max_complexity = IC_COMPLEXITY_BASE * 2
/obj/item/device/electronic_assembly/medium/default
/obj/item/electronic_assembly/medium/default
name = "type-a electronic mechanism"
/obj/item/device/electronic_assembly/medium/box
/obj/item/electronic_assembly/medium/box
name = "type-b electronic mechanism"
icon_state = "setup_medium_box"
desc = "It's a case, for building medium-sized electronics with. This one has a boxy design."
/obj/item/device/electronic_assembly/medium/clam
/obj/item/electronic_assembly/medium/clam
name = "type-c electronic mechanism"
icon_state = "setup_medium_clam"
desc = "It's a case, for building medium-sized electronics with. This one has a clamshell design."
/obj/item/device/electronic_assembly/medium/medical
/obj/item/electronic_assembly/medium/medical
name = "type-d electronic mechanism"
icon_state = "setup_medium_med"
desc = "It's a case, for building medium-sized electronics with. This one resembles some type of medical apparatus."
/obj/item/device/electronic_assembly/medium/gun
/obj/item/electronic_assembly/medium/gun
name = "type-e electronic mechanism"
icon_state = "setup_medium_gun"
desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, if you're feeling optimistic."
/obj/item/device/electronic_assembly/medium/radio
/obj/item/electronic_assembly/medium/radio
name = "type-f electronic mechanism"
icon_state = "setup_medium_radio"
desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio."
/obj/item/device/electronic_assembly/large
/obj/item/electronic_assembly/large
name = "electronic machine"
icon_state = "setup_large"
desc = "It's a case, for building large electronics with."
@@ -618,35 +618,35 @@
max_components = IC_MAX_SIZE_BASE * 4
max_complexity = IC_COMPLEXITY_BASE * 4
/obj/item/device/electronic_assembly/large/default
/obj/item/electronic_assembly/large/default
name = "type-a electronic machine"
/obj/item/device/electronic_assembly/large/scope
/obj/item/electronic_assembly/large/scope
name = "type-b electronic machine"
icon_state = "setup_large_scope"
desc = "It's a case, for building large electronics with. This one resembles an oscilloscope."
/obj/item/device/electronic_assembly/large/terminal
/obj/item/electronic_assembly/large/terminal
name = "type-c electronic machine"
icon_state = "setup_large_terminal"
desc = "It's a case, for building large electronics with. This one resembles a computer terminal."
/obj/item/device/electronic_assembly/large/arm
/obj/item/electronic_assembly/large/arm
name = "type-d electronic machine"
icon_state = "setup_large_arm"
desc = "It's a case, for building large electronics with. This one resembles a robotic arm."
/obj/item/device/electronic_assembly/large/tall
/obj/item/electronic_assembly/large/tall
name = "type-e electronic machine"
icon_state = "setup_large_tall"
desc = "It's a case, for building large electronics with. This one has a tall design."
/obj/item/device/electronic_assembly/large/industrial
/obj/item/electronic_assembly/large/industrial
name = "type-f electronic machine"
icon_state = "setup_large_industrial"
desc = "It's a case, for building large electronics with. This one resembles some kind of industrial machinery."
/obj/item/device/electronic_assembly/drone
/obj/item/electronic_assembly/drone
name = "electronic drone"
icon_state = "setup_drone"
desc = "It's a case, for building mobile electronics with."
@@ -656,38 +656,38 @@
allowed_circuit_action_flags = IC_ACTION_MOVEMENT | IC_ACTION_COMBAT | IC_ACTION_LONG_RANGE
can_anchor = FALSE
/obj/item/device/electronic_assembly/drone/can_move()
/obj/item/electronic_assembly/drone/can_move()
return TRUE
/obj/item/device/electronic_assembly/drone/default
/obj/item/electronic_assembly/drone/default
name = "type-a electronic drone"
/obj/item/device/electronic_assembly/drone/arms
/obj/item/electronic_assembly/drone/arms
name = "type-b electronic drone"
icon_state = "setup_drone_arms"
desc = "It's a case, for building mobile electronics with. This one is armed and dangerous."
/obj/item/device/electronic_assembly/drone/secbot
/obj/item/electronic_assembly/drone/secbot
name = "type-c electronic drone"
icon_state = "setup_drone_secbot"
desc = "It's a case, for building mobile electronics with. This one resembles a Securitron."
/obj/item/device/electronic_assembly/drone/medbot
/obj/item/electronic_assembly/drone/medbot
name = "type-d electronic drone"
icon_state = "setup_drone_medbot"
desc = "It's a case, for building mobile electronics with. This one resembles a Medibot."
/obj/item/device/electronic_assembly/drone/genbot
/obj/item/electronic_assembly/drone/genbot
name = "type-e electronic drone"
icon_state = "setup_drone_genbot"
desc = "It's a case, for building mobile electronics with. This one has a generic bot design."
/obj/item/device/electronic_assembly/drone/android
/obj/item/electronic_assembly/drone/android
name = "type-f electronic drone"
icon_state = "setup_drone_android"
desc = "It's a case, for building mobile electronics with. This one has a hominoid design."
/obj/item/device/electronic_assembly/wallmount
/obj/item/electronic_assembly/wallmount
name = "wall-mounted electronic assembly"
icon_state = "setup_wallmount_medium"
desc = "It's a case, for building medium-sized electronics with. It has a magnetized backing to allow it to stick to walls, but you'll still need to wrench the anchoring bolts in place to keep it on."
@@ -695,7 +695,7 @@
max_components = IC_MAX_SIZE_BASE * 2
max_complexity = IC_COMPLEXITY_BASE * 2
/obj/item/device/electronic_assembly/wallmount/heavy
/obj/item/electronic_assembly/wallmount/heavy
name = "heavy wall-mounted electronic assembly"
icon_state = "setup_wallmount_large"
desc = "It's a case, for building large electronics with. It has a magnetized backing to allow it to stick to walls, but you'll still need to wrench the anchoring bolts in place to keep it on."
@@ -703,7 +703,7 @@
max_components = IC_MAX_SIZE_BASE * 4
max_complexity = IC_COMPLEXITY_BASE * 4
/obj/item/device/electronic_assembly/wallmount/light
/obj/item/electronic_assembly/wallmount/light
name = "light wall-mounted electronic assembly"
icon_state = "setup_wallmount_small"
desc = "It's a case, for building small electronics with. It has a magnetized backing to allow it to stick to walls, but you'll still need to wrench the anchoring bolts in place to keep it on."
@@ -711,7 +711,7 @@
max_components = IC_MAX_SIZE_BASE
max_complexity = IC_COMPLEXITY_BASE
/obj/item/device/electronic_assembly/wallmount/proc/mount_assembly(turf/on_wall, mob/user) //Yeah, this is admittedly just an abridged and kitbashed version of the wallframe attach procs.
/obj/item/electronic_assembly/wallmount/proc/mount_assembly(turf/on_wall, mob/user) //Yeah, this is admittedly just an abridged and kitbashed version of the wallframe attach procs.
if(get_dist(on_wall,user)>1)
return
var/ndir = get_dir(on_wall, user)
@@ -1,4 +1,4 @@
/obj/item/device/integrated_electronics/debugger
/obj/item/integrated_electronics/debugger
name = "circuit debugger"
desc = "This small tool allows one working with custom machinery to directly set data to a specific pin, useful for writing \
settings to specific circuits, or for debugging purposes. It can also pulse activation pins."
@@ -9,7 +9,7 @@
var/data_to_write = null
var/accepting_refs = FALSE
/obj/item/device/integrated_electronics/debugger/attack_self(mob/user)
/obj/item/integrated_electronics/debugger/attack_self(mob/user)
var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref", "null")
if(!user.IsAdvancedToolUser())
return
@@ -36,7 +36,7 @@
data_to_write = null
to_chat(user, "<span class='notice'>You set \the [src]'s memory to absolutely nothing.</span>")
/obj/item/device/integrated_electronics/debugger/afterattack(atom/target, mob/living/user, proximity)
/obj/item/integrated_electronics/debugger/afterattack(atom/target, mob/living/user, proximity)
if(accepting_refs && proximity)
data_to_write = WEAKREF(target)
visible_message("<span class='notice'>[user] slides \a [src]'s over \the [target].</span>")
@@ -46,7 +46,7 @@
else
return ..()
/obj/item/device/integrated_electronics/debugger/proc/write_data(var/datum/integrated_io/io, mob/user)
/obj/item/integrated_electronics/debugger/proc/write_data(var/datum/integrated_io/io, mob/user)
if(io.io_type == DATA_CHANNEL)
io.write_data_to_pin(data_to_write)
var/data_to_show = data_to_write
@@ -1,4 +1,4 @@
/obj/item/device/integrated_electronics/detailer
/obj/item/integrated_electronics/detailer
name = "assembly detailer"
desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish."
icon = 'icons/obj/assemblies/electronic_tools.dmi'
@@ -27,17 +27,17 @@
"purple" = COLOR_ASSEMBLY_PURPLE
)
/obj/item/device/integrated_electronics/detailer/Initialize()
/obj/item/integrated_electronics/detailer/Initialize()
.=..()
update_icon()
/obj/item/device/integrated_electronics/detailer/update_icon()
/obj/item/integrated_electronics/detailer/update_icon()
cut_overlays()
var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/assemblies/electronic_tools.dmi', "detailer-color")
detail_overlay.color = detail_color
add_overlay(detail_overlay)
/obj/item/device/integrated_electronics/detailer/attack_self(mob/user)
/obj/item/integrated_electronics/detailer/attack_self(mob/user)
var/color_choice = input(user, "Select color.", "Assembly Detailer") as null|anything in color_list
if(!color_list[color_choice])
return
@@ -99,7 +99,7 @@
// Locates a pin in the assembly when given component number, pin type and pin number
// Components list can be supplied from the outside, for use in savefiles
/obj/item/device/electronic_assembly/proc/get_pin_ref(component_number, pin_type, pin_number, list/components)
/obj/item/electronic_assembly/proc/get_pin_ref(component_number, pin_type, pin_number, list/components)
if(!components)
components = assembly_components
@@ -112,7 +112,7 @@
// Same as get_pin_ref, but takes in a list of 3 parameters (same format as get_pin_parameters)
// and performs extra sanity checks on parameters list and index numbers
/obj/item/device/electronic_assembly/proc/get_pin_ref_list(list/parameters, list/components)
/obj/item/electronic_assembly/proc/get_pin_ref_list(list/parameters, list/components)
if(!components)
components = assembly_components
@@ -5,7 +5,7 @@
icon_state = "template"
w_class = WEIGHT_CLASS_TINY
materials = list() // To be filled later
var/obj/item/device/electronic_assembly/assembly // Reference to the assembly holding this circuit, if any.
var/obj/item/electronic_assembly/assembly // Reference to the assembly holding this circuit, if any.
var/extended_desc
var/list/inputs = list()
var/list/inputs_default = list()// Assoc list which will fill a pin with data upon creation. e.g. "2" = 0 will set input pin 2 to equal 0 instead of null.
@@ -255,14 +255,14 @@ a creative player the means to solve many problems. Circuits are held inside an
if(href_list["link"])
linked = locate(href_list["link"]) in pin.linked
if(istype(held_item, /obj/item/device/integrated_electronics) || istype(held_item, /obj/item/device/multitool))
if(istype(held_item, /obj/item/integrated_electronics) || istype(held_item, /obj/item/multitool))
pin.handle_wire(linked, held_item, href_list["act"], usr)
else
to_chat(usr, "<span class='warning'>You can't do a whole lot without the proper tools.</span>")
if(href_list["scan"])
if(istype(held_item, /obj/item/device/integrated_electronics/debugger))
var/obj/item/device/integrated_electronics/debugger/D = held_item
if(istype(held_item, /obj/item/integrated_electronics/debugger))
var/obj/item/integrated_electronics/debugger/D = held_item
if(D.accepting_refs)
D.afterattack(src, usr, TRUE)
else
@@ -105,8 +105,8 @@ D [1]/ ||
push_data()
/datum/integrated_io/proc/handle_wire(datum/integrated_io/linked_pin, obj/item/tool, action, mob/living/user)
if(istype(tool, /obj/item/device/multitool))
var/obj/item/device/multitool/multitool = tool
if(istype(tool, /obj/item/multitool))
var/obj/item/multitool/multitool = tool
switch(action)
if("wire")
multitool.wire(src, user)
@@ -119,15 +119,15 @@ D [1]/ ||
ask_for_pin_data(user)
return TRUE
else if(istype(tool, /obj/item/device/integrated_electronics/wirer))
var/obj/item/device/integrated_electronics/wirer/wirer = tool
else if(istype(tool, /obj/item/integrated_electronics/wirer))
var/obj/item/integrated_electronics/wirer/wirer = tool
if(linked_pin)
wirer.wire(linked_pin, user)
else
wirer.wire(src, user)
else if(istype(tool, /obj/item/device/integrated_electronics/debugger))
var/obj/item/device/integrated_electronics/debugger/debugger = tool
else if(istype(tool, /obj/item/integrated_electronics/debugger))
var/obj/item/integrated_electronics/debugger/debugger = tool
debugger.write_data(src, user)
return TRUE
@@ -1,6 +1,6 @@
#define MAX_CIRCUIT_CLONE_TIME 3 MINUTES //circuit slow-clones can only take up this amount of time to complete
/obj/item/device/integrated_circuit_printer
/obj/item/integrated_circuit_printer
name = "integrated circuit printer"
desc = "A portable(ish) machine made to print tiny modular circuitry out of metal."
icon = 'icons/obj/assemblies/electronic_tools.dmi'
@@ -16,30 +16,30 @@
var/recycling = FALSE // If an assembly is being emptied into this printer
var/list/program // Currently loaded save, in form of list
/obj/item/device/integrated_circuit_printer/proc/check_interactivity(mob/user)
/obj/item/integrated_circuit_printer/proc/check_interactivity(mob/user)
return user.canUseTopic(src, BE_CLOSE)
/obj/item/device/integrated_circuit_printer/upgraded
/obj/item/integrated_circuit_printer/upgraded
upgraded = TRUE
can_clone = TRUE
fast_clone = TRUE
/obj/item/device/integrated_circuit_printer/debug //translation: "integrated_circuit_printer/local_server"
/obj/item/integrated_circuit_printer/debug //translation: "integrated_circuit_printer/local_server"
name = "debug circuit printer"
debug = TRUE
upgraded = TRUE
can_clone = TRUE
w_class = WEIGHT_CLASS_TINY
/obj/item/device/integrated_circuit_printer/Initialize()
/obj/item/integrated_circuit_printer/Initialize()
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/device/electronic_assembly))
AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly))
/obj/item/device/integrated_circuit_printer/Destroy()
/obj/item/integrated_circuit_printer/Destroy()
STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/item/device/integrated_circuit_printer/process()
/obj/item/integrated_circuit_printer/process()
if(!cloning)
STOP_PROCESSING(SSprocessing, src)
if(world.time >= clone_countdown || fast_clone)
@@ -50,7 +50,7 @@
cloning = FALSE
STOP_PROCESSING(SSprocessing, src)
/obj/item/device/integrated_circuit_printer/attackby(obj/item/O, mob/user)
/obj/item/integrated_circuit_printer/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/disk/integrated_circuit/upgrade/advanced))
if(upgraded)
to_chat(user, "<span class='warning'>[src] already has this upgrade. </span>")
@@ -69,8 +69,8 @@
interact(user)
return TRUE
if(istype(O, /obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/EA = O //microtransactions not included
if(istype(O, /obj/item/electronic_assembly))
var/obj/item/electronic_assembly/EA = O //microtransactions not included
if(EA.assembly_components.len)
if(recycling)
return
@@ -109,10 +109,10 @@
return ..()
/obj/item/device/integrated_circuit_printer/attack_self(mob/user)
/obj/item/integrated_circuit_printer/attack_self(mob/user)
interact(user)
/obj/item/device/integrated_circuit_printer/interact(mob/user)
/obj/item/integrated_circuit_printer/interact(mob/user)
if(isnull(current_category))
current_category = SScircuit.circuit_fabricator_recipe_list[1]
@@ -170,7 +170,7 @@
user << browse(HTML, "window=integrated_printer;size=600x500;border=1;can_resize=1;can_close=1;can_minimize=1")
/obj/item/device/integrated_circuit_printer/Topic(href, href_list)
/obj/item/integrated_circuit_printer/Topic(href, href_list)
if(!check_interactivity(usr))
return
if(..())
@@ -186,8 +186,8 @@
return TRUE
var/cost = 400
if(ispath(build_type, /obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/E = SScircuit.cached_assemblies[build_type]
if(ispath(build_type, /obj/item/electronic_assembly))
var/obj/item/electronic_assembly/E = SScircuit.cached_assemblies[build_type]
cost = E.materials[MAT_METAL]
else if(ispath(build_type, /obj/item/integrated_circuit))
var/obj/item/integrated_circuit/IC = SScircuit.cached_components[build_type]
@@ -204,8 +204,8 @@
var/obj/item/built = new build_type(drop_location())
usr.put_in_hands(built)
if(istype(built, /obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/E = built
if(istype(built, /obj/item/electronic_assembly))
var/obj/item/electronic_assembly/E = built
E.opened = TRUE
E.update_icon()
//reupdate diagnostic hud because it was put_in_hands() and not pickup()'ed
@@ -115,7 +115,7 @@
// Saves type and modified name (if any) to a list
// The list is converted to JSON down the line.
/obj/item/device/electronic_assembly/proc/save()
/obj/item/electronic_assembly/proc/save()
var/list/assembly_params = list()
// Save initial name used for differentiating assemblies
@@ -138,7 +138,7 @@
// Verifies a list of assembly parameters
// Returns null on success, error name on failure
/obj/item/device/electronic_assembly/proc/verify_save(list/assembly_params)
/obj/item/electronic_assembly/proc/verify_save(list/assembly_params)
// Validate name and color
if(assembly_params["name"] && !reject_bad_name(assembly_params["name"], TRUE))
return "Bad assembly name."
@@ -147,7 +147,7 @@
// Loads assembly parameters from a list
// Doesn't verify any of the parameters it loads, this is the job of verify_save()
/obj/item/device/electronic_assembly/proc/load(list/assembly_params)
/obj/item/electronic_assembly/proc/load(list/assembly_params)
// Load modified name, if any.
if(assembly_params["name"])
name = assembly_params["name"]
@@ -165,7 +165,7 @@
// Attempts to save an assembly into a save file format.
// Returns null if assembly is not complete enough to be saved.
/datum/controller/subsystem/processing/circuit/proc/save_electronic_assembly(obj/item/device/electronic_assembly/assembly)
/datum/controller/subsystem/processing/circuit/proc/save_electronic_assembly(obj/item/electronic_assembly/assembly)
// No components? Don't even try to save it.
if(!length(assembly.assembly_components))
return
@@ -241,7 +241,7 @@
// Validate type, get a temporary component
var/assembly_path = all_assemblies[assembly_params["type"]]
var/obj/item/device/electronic_assembly/assembly = cached_assemblies[assembly_path]
var/obj/item/electronic_assembly/assembly = cached_assemblies[assembly_path]
if(!assembly)
return "Invalid assembly type."
@@ -335,8 +335,8 @@
// Block 1. Assembly.
var/list/assembly_params = blocks["assembly"]
var/obj/item/device/electronic_assembly/assembly_path = all_assemblies[assembly_params["type"]]
var/obj/item/device/electronic_assembly/assembly = new assembly_path(null)
var/obj/item/electronic_assembly/assembly_path = all_assemblies[assembly_params["type"]]
var/obj/item/electronic_assembly/assembly = new assembly_path(null)
assembly.load(assembly_params)
@@ -3,7 +3,7 @@
#define UNWIRE "unwire"
#define UNWIRING "unwiring"
/obj/item/device/integrated_electronics/wirer
/obj/item/integrated_electronics/wirer
name = "circuit wirer"
desc = "It's a small wiring tool, with a wire roll, electric soldering iron, wire cutter, and more in one package. \
The wires used are generally useful for small electronics, such as circuitboards and breadboards, as opposed to larger wires \
@@ -15,10 +15,10 @@
var/datum/integrated_io/selected_io = null
var/mode = WIRE
/obj/item/device/integrated_electronics/wirer/update_icon()
/obj/item/integrated_electronics/wirer/update_icon()
icon_state = "wirer-[mode]"
/obj/item/device/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user)
/obj/item/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user)
if(!io.holder.assembly)
to_chat(user, "<span class='warning'>\The [io.holder] needs to be secured inside an assembly first.</span>")
return
@@ -76,7 +76,7 @@
[io.name] are not connected.</span>")
return
/obj/item/device/integrated_electronics/wirer/attack_self(mob/user)
/obj/item/integrated_electronics/wirer/attack_self(mob/user)
switch(mode)
if(WIRE)
mode = UNWIRE
+5 -5
View File
@@ -34,9 +34,9 @@ Captain
jobtype = /datum/job/captain
id = /obj/item/card/id/gold
belt = /obj/item/device/pda/captain
belt = /obj/item/pda/captain
glasses = /obj/item/clothing/glasses/sunglasses
ears = /obj/item/device/radio/headset/heads/captain/alt
ears = /obj/item/radio/headset/heads/captain/alt
gloves = /obj/item/clothing/gloves/color/captain
uniform = /obj/item/clothing/under/rank/captain
suit = /obj/item/clothing/suit/armor/vest/capcarapace
@@ -93,10 +93,10 @@ Head of Personnel
jobtype = /datum/job/hop
id = /obj/item/card/id/silver
belt = /obj/item/device/pda/heads/hop
ears = /obj/item/device/radio/headset/heads/hop
belt = /obj/item/pda/heads/hop
ears = /obj/item/radio/headset/heads/hop
uniform = /obj/item/clothing/under/rank/head_of_personnel
shoes = /obj/item/clothing/shoes/sneakers/brown
head = /obj/item/clothing/head/hopcap
backpack_contents = list(/obj/item/storage/box/ids=1,\
/obj/item/melee/classic_baton/telescopic=1, /obj/item/device/modular_computer/tablet/preset/advanced = 1)
/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
+19 -19
View File
@@ -22,8 +22,8 @@ Quartermaster
name = "Quartermaster"
jobtype = /datum/job/qm
belt = /obj/item/device/pda/quartermaster
ears = /obj/item/device/radio/headset/headset_cargo
belt = /obj/item/pda/quartermaster
ears = /obj/item/radio/headset/headset_cargo
uniform = /obj/item/clothing/under/rank/cargo
shoes = /obj/item/clothing/shoes/sneakers/brown
glasses = /obj/item/clothing/glasses/sunglasses
@@ -53,10 +53,10 @@ Cargo Technician
name = "Cargo Technician"
jobtype = /datum/job/cargo_tech
belt = /obj/item/device/pda/cargo
ears = /obj/item/device/radio/headset/headset_cargo
belt = /obj/item/pda/cargo
ears = /obj/item/radio/headset/headset_cargo
uniform = /obj/item/clothing/under/rank/cargotech
l_hand = /obj/item/device/export_scanner
l_hand = /obj/item/export_scanner
/*
Shaft Miner
@@ -82,13 +82,13 @@ Shaft Miner
name = "Shaft Miner (Lavaland)"
jobtype = /datum/job/mining
belt = /obj/item/device/pda/shaftminer
ears = /obj/item/device/radio/headset/headset_cargo/mining
belt = /obj/item/pda/shaftminer
ears = /obj/item/radio/headset/headset_cargo/mining
shoes = /obj/item/clothing/shoes/workboots/mining
gloves = /obj/item/clothing/gloves/color/black
uniform = /obj/item/clothing/under/rank/miner/lavaland
l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival
r_pocket = /obj/item/device/flashlight/seclite
r_pocket = /obj/item/flashlight/seclite
backpack_contents = list(
/obj/item/storage/bag/ore=1,\
/obj/item/kitchen/knife/combat/survival=1,\
@@ -116,7 +116,7 @@ Shaft Miner
/obj/item/storage/bag/ore=1,
/obj/item/kitchen/knife/combat/survival=1,
/obj/item/mining_voucher=1,
/obj/item/device/t_scanner/adv_mining_scanner/lesser=1,
/obj/item/t_scanner/adv_mining_scanner/lesser=1,
/obj/item/gun/energy/kinetic_accelerator=1,\
/obj/item/stack/marker_beacon/ten=1)
@@ -163,8 +163,8 @@ Bartender
jobtype = /datum/job/bartender
glasses = /obj/item/clothing/glasses/sunglasses/reagent
belt = /obj/item/device/pda/bar
ears = /obj/item/device/radio/headset/headset_srv
belt = /obj/item/pda/bar
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/bartender
suit = /obj/item/clothing/suit/armor/vest
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
@@ -195,8 +195,8 @@ Cook
name = "Cook"
jobtype = /datum/job/cook
belt = /obj/item/device/pda/cook
ears = /obj/item/device/radio/headset/headset_srv
belt = /obj/item/pda/cook
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/chef
suit = /obj/item/clothing/suit/toggle/chef
head = /obj/item/clothing/head/chefhat
@@ -252,12 +252,12 @@ Botanist
name = "Botanist"
jobtype = /datum/job/hydro
belt = /obj/item/device/pda/botanist
ears = /obj/item/device/radio/headset/headset_srv
belt = /obj/item/pda/botanist
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/hydroponics
suit = /obj/item/clothing/suit/apron
gloves =/obj/item/clothing/gloves/botanic_leather
suit_store = /obj/item/device/plant_analyzer
suit_store = /obj/item/plant_analyzer
backpack = /obj/item/storage/backpack/botany
satchel = /obj/item/storage/backpack/satchel/hyd
@@ -288,7 +288,7 @@ Janitor
name = "Janitor"
jobtype = /datum/job/janitor
belt = /obj/item/device/pda/janitor
ears = /obj/item/device/radio/headset/headset_srv
belt = /obj/item/pda/janitor
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/janitor
backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1)
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
+8 -8
View File
@@ -25,7 +25,7 @@ Clown
name = "Clown"
jobtype = /datum/job/clown
belt = /obj/item/device/pda/clown
belt = /obj/item/pda/clown
uniform = /obj/item/clothing/under/rank/clown
shoes = /obj/item/clothing/shoes/clown_shoes
mask = /obj/item/clothing/mask/gas/clown_hat
@@ -34,7 +34,7 @@ Clown
/obj/item/stamp/clown = 1,
/obj/item/reagent_containers/spray/waterflower = 1,
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
/obj/item/device/instrument/bikehorn = 1,
/obj/item/instrument/bikehorn = 1,
)
implants = list(/obj/item/implant/sad_trombone)
@@ -87,7 +87,7 @@ Mime
name = "Mime"
jobtype = /datum/job/mime
belt = /obj/item/device/pda/mime
belt = /obj/item/pda/mime
uniform = /obj/item/clothing/under/rank/mime
mask = /obj/item/clothing/mask/gas/mime
gloves = /obj/item/clothing/gloves/color/white
@@ -135,11 +135,11 @@ Curator
name = "Curator"
jobtype = /datum/job/curator
belt = /obj/item/device/pda/curator
belt = /obj/item/pda/curator
uniform = /obj/item/clothing/under/rank/curator
l_hand = /obj/item/storage/bag/books
r_pocket = /obj/item/key/displaycase
l_pocket = /obj/item/device/laser_pointer
l_pocket = /obj/item/laser_pointer
//CITADEL EDIT removes runtimes from this pocket protector
backpack_contents = list(
/obj/item/melee/curator_whip = 1,
@@ -181,13 +181,13 @@ Lawyer
name = "Lawyer"
jobtype = /datum/job/lawyer
belt = /obj/item/device/pda/lawyer
ears = /obj/item/device/radio/headset/headset_sec
belt = /obj/item/pda/lawyer
ears = /obj/item/radio/headset/headset_sec
uniform = /obj/item/clothing/under/lawyer/bluesuit
suit = /obj/item/clothing/suit/toggle/lawyer
shoes = /obj/item/clothing/shoes/laceup
l_hand = /obj/item/storage/briefcase/lawyer
l_pocket = /obj/item/device/laser_pointer
l_pocket = /obj/item/laser_pointer
r_pocket = /obj/item/clothing/accessory/lawyers_badge
@@ -88,8 +88,8 @@ Chaplain
name = "Chaplain"
jobtype = /datum/job/chaplain
belt = /obj/item/device/pda/chaplain
belt = /obj/item/pda/chaplain
uniform = /obj/item/clothing/under/rank/chaplain
backpack_contents = list(/obj/item/device/camera/spooky = 1)
backpack_contents = list(/obj/item/camera/spooky = 1)
backpack = /obj/item/storage/backpack/cultpack
satchel = /obj/item/storage/backpack/cultpack
+11 -11
View File
@@ -36,13 +36,13 @@ Chief Engineer
id = /obj/item/card/id/silver
belt = /obj/item/storage/belt/utility/chief/full
l_pocket = /obj/item/device/pda/heads/ce
ears = /obj/item/device/radio/headset/heads/ce
l_pocket = /obj/item/pda/heads/ce
ears = /obj/item/radio/headset/heads/ce
uniform = /obj/item/clothing/under/rank/chief_engineer
shoes = /obj/item/clothing/shoes/sneakers/brown
head = /obj/item/clothing/head/hardhat/white
gloves = /obj/item/clothing/gloves/color/black/ce
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/device/modular_computer/tablet/preset/advanced=1)
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
backpack = /obj/item/storage/backpack/industrial
satchel = /obj/item/storage/backpack/satchel/eng
@@ -91,19 +91,19 @@ Station Engineer
jobtype = /datum/job/engineer
belt = /obj/item/storage/belt/utility/full/engi
l_pocket = /obj/item/device/pda/engineering
ears = /obj/item/device/radio/headset/headset_eng
l_pocket = /obj/item/pda/engineering
ears = /obj/item/radio/headset/headset_eng
uniform = /obj/item/clothing/under/rank/engineer
shoes = /obj/item/clothing/shoes/workboots
head = /obj/item/clothing/head/hardhat
r_pocket = /obj/item/device/t_scanner
r_pocket = /obj/item/t_scanner
backpack = /obj/item/storage/backpack/industrial
satchel = /obj/item/storage/backpack/satchel/eng
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
box = /obj/item/storage/box/engineer
pda_slot = slot_l_store
backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1)
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
/datum/outfit/job/engineer/gloved
name = "Station Engineer (Gloves)"
@@ -147,17 +147,17 @@ Atmospheric Technician
jobtype = /datum/job/atmos
belt = /obj/item/storage/belt/utility/atmostech
l_pocket = /obj/item/device/pda/atmos
ears = /obj/item/device/radio/headset/headset_eng
l_pocket = /obj/item/pda/atmos
ears = /obj/item/radio/headset/headset_eng
uniform = /obj/item/clothing/under/rank/atmospheric_technician
r_pocket = /obj/item/device/analyzer
r_pocket = /obj/item/analyzer
backpack = /obj/item/storage/backpack/industrial
satchel = /obj/item/storage/backpack/satchel/eng
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
box = /obj/item/storage/box/engineer
pda_slot = slot_l_store
backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1)
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
/datum/outfit/job/atmos/rig
name = "Atmospheric Technician (Hardsuit)"
+3 -3
View File
@@ -141,8 +141,8 @@
uniform = /obj/item/clothing/under/color/grey
id = /obj/item/card/id
ears = /obj/item/device/radio/headset
belt = /obj/item/device/pda
ears = /obj/item/radio/headset
belt = /obj/item/pda
back = /obj/item/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
@@ -193,7 +193,7 @@
C.update_label()
H.sec_hud_set_ID()
var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot)
var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
if(istype(PDA))
PDA.owner = H.real_name
PDA.ownjob = J.title

Some files were not shown because too many files have changed in this diff Show More