Kills off /obj/item/device (#6561)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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?
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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."
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,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'
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user