mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-26 21:49:11 +01:00
Merge branch 'master' into protRig
This commit is contained in:
@@ -19,7 +19,7 @@ var/global/list/image/splatter_cache=list()
|
||||
blood_DNA = list()
|
||||
var/basecolor="#A10808" // Color when wet.
|
||||
var/synthblood = 0
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/list/datum/disease/viruses = list()
|
||||
var/amount = 5
|
||||
generic_filth = TRUE
|
||||
persistent = FALSE
|
||||
@@ -112,6 +112,10 @@ var/global/list/image/splatter_cache=list()
|
||||
var/obj/structure/bed/chair/wheelchair/W = perp.buckled
|
||||
W.bloodiness = 4
|
||||
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
amount--
|
||||
|
||||
/obj/effect/decal/cleanable/blood/proc/dry()
|
||||
@@ -124,6 +128,11 @@ var/global/list/image/splatter_cache=list()
|
||||
..()
|
||||
if (amount && istype(user))
|
||||
add_fingerprint(user)
|
||||
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
user.ContractDisease(D)
|
||||
|
||||
if (user.gloves)
|
||||
return
|
||||
var/taken = rand(1,amount)
|
||||
@@ -242,7 +251,7 @@ var/global/list/image/splatter_cache=list()
|
||||
icon_state = "mucus"
|
||||
random_icon_states = list("mucus")
|
||||
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/list/datum/disease/viruses = list()
|
||||
var/dry = 0 // Keeps the lag down
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/Initialize()
|
||||
@@ -252,11 +261,20 @@ var/global/list/image/splatter_cache=list()
|
||||
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
|
||||
/obj/effect/decal/cleanable/mucus/mapped/Initialize()
|
||||
. = ..()
|
||||
virus2 |= new /datum/disease2/disease
|
||||
virus2[1].makerandom()
|
||||
viruses |= new /datum/disease/advance
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/mapped/Destroy()
|
||||
virus2.Cut()
|
||||
viruses.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/Crossed(mob/living/carbon/human/perp)
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
/obj/effect/decal/cleanable/vomit/Crossed(mob/living/carbon/human/perp)
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
#undef DRYING_TIME
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "vomit_1"
|
||||
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/list/datum/disease/viruses = list()
|
||||
|
||||
/obj/effect/decal/cleanable/tomato_smudge
|
||||
name = "tomato smudge"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/client/proc/spawn_tanktransferbomb()
|
||||
set category = "Debug"
|
||||
set category = "Debug.Game"
|
||||
set desc = "Spawn a tank transfer valve bomb"
|
||||
set name = "Instant TTV"
|
||||
|
||||
@@ -139,5 +139,3 @@
|
||||
new type(src.loc)
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
disrupt()
|
||||
..()
|
||||
|
||||
/obj/item/chameleon/attack_self()
|
||||
toggle()
|
||||
/obj/item/chameleon/attack_self(mob/user)
|
||||
toggle(user)
|
||||
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!active_dummy)
|
||||
if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear))
|
||||
@@ -42,30 +42,32 @@
|
||||
saved_icon_state = target.icon_state
|
||||
saved_overlays = target.overlays
|
||||
|
||||
/obj/item/chameleon/proc/toggle()
|
||||
/obj/item/chameleon/proc/toggle(mob/user)
|
||||
if(!can_use || !saved_item) return
|
||||
if(active_dummy)
|
||||
eject_all()
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
qdel(active_dummy)
|
||||
active_dummy = null
|
||||
to_chat(usr, span_notice("You deactivate the [src]."))
|
||||
to_chat(user, span_notice("You deactivate the [src]."))
|
||||
var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src))
|
||||
T.icon = 'icons/effects/effects.dmi'
|
||||
flick("emppulse",T)
|
||||
spawn(8) qdel(T)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), T), 0.8 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
var/obj/O = new saved_item(src)
|
||||
if(!O) return
|
||||
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc)
|
||||
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src)
|
||||
if(istype(user.loc, /obj/item/holder)) // This doesn't go well...
|
||||
return
|
||||
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(user.loc)
|
||||
C.activate(O, user, saved_icon, saved_icon_state, saved_overlays, src)
|
||||
qdel(O)
|
||||
to_chat(usr, span_notice("You activate the [src]."))
|
||||
to_chat(user, span_notice("You activate the [src]."))
|
||||
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
||||
T.icon = 'icons/effects/effects.dmi'
|
||||
flick("emppulse",T)
|
||||
spawn(8) qdel(T)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), T), 0.8 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/chameleon/proc/disrupt(var/delete_dummy = 1)
|
||||
if(active_dummy)
|
||||
@@ -78,7 +80,10 @@
|
||||
qdel(active_dummy)
|
||||
active_dummy = null
|
||||
can_use = 0
|
||||
spawn(50) can_use = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_use)), 5 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/chameleon/proc/allow_use()
|
||||
can_use = 1
|
||||
|
||||
/obj/item/chameleon/proc/eject_all()
|
||||
for(var/atom/movable/A in active_dummy)
|
||||
@@ -127,6 +132,9 @@
|
||||
..()
|
||||
master.disrupt()
|
||||
|
||||
/obj/effect/dummy/chameleon/proc/allow_move()
|
||||
can_move = 1
|
||||
|
||||
/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction)
|
||||
if(istype(loc, /turf/space)) return //No magical space movement!
|
||||
|
||||
@@ -134,15 +142,15 @@
|
||||
can_move = 0
|
||||
switch(user.bodytemperature)
|
||||
if(300 to INFINITY)
|
||||
spawn(10) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1 SECOND, TIMER_DELETE_ME)
|
||||
if(295 to 300)
|
||||
spawn(13) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1.3 SECONDS, TIMER_DELETE_ME)
|
||||
if(280 to 295)
|
||||
spawn(16) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1.6 SECONDS, TIMER_DELETE_ME)
|
||||
if(260 to 280)
|
||||
spawn(20) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 2 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
spawn(25) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 2.5 SECONDS, TIMER_DELETE_ME)
|
||||
step(src, direction)
|
||||
return
|
||||
|
||||
|
||||
@@ -279,11 +279,10 @@ var/global/list/obj/item/communicator/all_communicators = list()
|
||||
// Parameters: None
|
||||
// Description: Removes the ghost's address and nulls the exonet datum, to allow qdel()ing.
|
||||
/mob/observer/dead/Destroy()
|
||||
. = ..()
|
||||
if(exonet)
|
||||
exonet.remove_address()
|
||||
qdel_null(exonet)
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
// Proc: register_device()
|
||||
// Parameters: 1 (user - the person to use their name for)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
// Parameters: None
|
||||
// Description: Lets synths use their communicators without hands.
|
||||
/obj/item/communicator/integrated/verb/activate()
|
||||
set category = "Abilities.AI_IM"
|
||||
set category = "Abilities.AI"
|
||||
set name = "Use Communicator"
|
||||
set desc = "Utilizes your built-in communicator."
|
||||
set src in usr
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
// Parameters: None
|
||||
// Description: Allows a ghost to send a text message to a communicator.
|
||||
/mob/observer/dead/verb/text_communicator()
|
||||
set category = "Ghost"
|
||||
set category = "Ghost.Message"
|
||||
set name = "Text Communicator"
|
||||
set desc = "If there is a communicator available, send a text message to it."
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
// Parameters: None
|
||||
// Description: Lets ghosts review messages they've sent or received.
|
||||
/mob/observer/dead/verb/show_text_messages()
|
||||
set category = "Ghost"
|
||||
set category = "Ghost.Settings"
|
||||
set name = "Show Text Messages"
|
||||
set desc = "Allows you to see exonet text messages you've sent and received."
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@
|
||||
// Parameters: None
|
||||
// Description: Allows ghosts to call communicators, if they meet all the requirements.
|
||||
/mob/observer/dead/verb/join_as_voice()
|
||||
set category = "Ghost"
|
||||
set category = "Ghost.Message"
|
||||
set name = "Call Communicator"
|
||||
set desc = "If there is a communicator available, send a request to speak through it. This will reset your respawn timer, if someone picks up."
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/item/multitool/hacktool
|
||||
var/is_hacking = 0
|
||||
var/max_known_targets
|
||||
var/hackspeed = 1
|
||||
var/max_level = 4 //what's the max door security_level we can handle?
|
||||
var/hackspeed = 1 //time taken to hack: lower is faster
|
||||
var/max_level = 4 //what's the max door security_level we can handle? default is 1, med/eng/atmos are 1.5, sec/sci are 2, command is 3, vault is 5
|
||||
var/full_override = FALSE //can we override door bolts too? defaults to false for event/safety reasons
|
||||
|
||||
var/in_hack_mode = 0
|
||||
@@ -155,3 +155,16 @@
|
||||
if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets))
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
|
||||
/obj/item/multitool/hacktool/modified
|
||||
name = "modified multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. This ones seems a bit larger and heavier than the usual model, for some reason. Maybe it's an older version?"
|
||||
description_info = "You can use this on airlocks or APCs to try to hack them without cutting wires."
|
||||
icon_state = "multitool_modified"
|
||||
|
||||
/obj/item/multitool/hacktool/obvious
|
||||
name = "non-standard multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. This one doesn't look like the usual model at all!"
|
||||
description_info = "You can use this on airlocks or APCs to try to hack them without cutting wires."
|
||||
icon_state = "multitool_suspicious"
|
||||
in_hack_mode = 1 //start in hackmode
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
subspace_transmission = 1
|
||||
canhear_range = 0 // can't hear headsets from very far away
|
||||
slot_flags = SLOT_EARS
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi')
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi')
|
||||
|
||||
var/translate_binary = 0
|
||||
var/translate_hive = 0
|
||||
@@ -83,254 +84,6 @@
|
||||
/obj/item/radio/headset/tgui_state(mob/user)
|
||||
return GLOB.tgui_inventory_state
|
||||
|
||||
/obj/item/radio/headset/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/syndicate/alt
|
||||
icon_state = "syndie_headset"
|
||||
item_state = "headset"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/raider
|
||||
origin_tech = list(TECH_ILLEGAL = 2)
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/raider
|
||||
|
||||
/obj/item/radio/headset/raider/Initialize()
|
||||
. = ..()
|
||||
set_frequency(RAID_FREQ)
|
||||
|
||||
/obj/item/radio/headset/binary
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
ks1type = /obj/item/encryptionkey/binary
|
||||
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_sec/alt
|
||||
name = "security bowman headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_eng/alt
|
||||
name = "engineering bowman headset"
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
desc = "Made specifically for the roboticists who cannot decide between departments."
|
||||
icon_state = "rob_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_rob
|
||||
|
||||
/obj/item/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_med/alt
|
||||
name = "medical bowman headset"
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
desc = "A sciency headset. Like usual."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/headset_medsci
|
||||
name = "medical research radio headset"
|
||||
desc = "A headset that is a result of the mating between medical and science."
|
||||
icon_state = "med_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_medsci
|
||||
|
||||
/obj/item/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/headset_com/alt
|
||||
name = "command bowman headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
|
||||
/obj/item/radio/headset/heads/captain
|
||||
name = "site manager's headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/alt
|
||||
name = "site manager's bowman headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/sfr
|
||||
name = "SFR headset"
|
||||
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "\improper AI subspace transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ai_integrated
|
||||
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
|
||||
var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu.
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level)
|
||||
if (disabledAi)
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/radio/headset/heads/rd
|
||||
name = "research director's headset"
|
||||
desc = "Headset of the eccentric-in-chief."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/rd/alt
|
||||
name = "research director's bowman headset"
|
||||
desc = "Headset of the eccentric-in-chief."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/hos
|
||||
name = "head of security's headset"
|
||||
desc = "The headset of the hardass who protects your worthless lives."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/hos/alt
|
||||
name = "head of security's bowman headset"
|
||||
desc = "The headset of the hardass who protects your worthless lives."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/ce
|
||||
name = "chief engineer's headset"
|
||||
desc = "The headset of the clown who is in charge of the circus."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/ce/alt
|
||||
name = "chief engineer's bowman headset"
|
||||
desc = "The headset of the clown who is in charge of the circus."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/cmo
|
||||
name = "chief medical officer's headset"
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/cmo/alt
|
||||
name = "chief medical officer's bowman headset"
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/hop
|
||||
name = "head of personnel's headset"
|
||||
desc = "The headset of the poor fool who will one day be " + JOB_SITE_MANAGER + "."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/heads/hop/alt
|
||||
name = "head of personnel's bowman headset"
|
||||
desc = "The headset of the poor fool who will one day be " + JOB_SITE_MANAGER + "."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/headset_mine
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down."
|
||||
icon_state = "mine_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_cargo
|
||||
name = "supply radio headset"
|
||||
desc = "A headset used by the QM and their cronies."
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_cargo/alt
|
||||
name = "supply bowman headset"
|
||||
desc = "A bowman headset used by the QM and their cronies."
|
||||
icon_state = "cargo_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_service
|
||||
name = "service radio headset"
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
|
||||
icon_state = "srv_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/ert
|
||||
name = "emergency response team radio headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset"
|
||||
centComm = 1
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/ert/alt
|
||||
name = "emergency response team bowman headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset_alt"
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/omni //Only for the admin intercoms
|
||||
ks2type = /obj/item/encryptionkey/omni
|
||||
|
||||
/obj/item/radio/headset/ia
|
||||
name = "internal affair's headset"
|
||||
desc = "The headset of your worst enemy."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/mmi_radio
|
||||
name = "brain-integrated radio"
|
||||
desc = "MMIs and synthetic brains are often equipped with these."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
var/mmiowner = null
|
||||
var/radio_enabled = 1
|
||||
|
||||
/obj/item/radio/headset/mmi_radio/receive_range(freq, level)
|
||||
if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal))
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
@@ -361,15 +114,15 @@
|
||||
keyslot2 = null
|
||||
|
||||
recalculateChannels()
|
||||
to_chat(user, "You pop out the encryption keys in the headset!")
|
||||
to_chat(user, span_notice("You pop out the encryption keys in the headset!"))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
else
|
||||
to_chat(user, "This headset doesn't have any encryption keys! How useless...")
|
||||
to_chat(user, span_notice("This headset doesn't have any encryption keys! How useless..."))
|
||||
|
||||
if(istype(W, /obj/item/encryptionkey/))
|
||||
if(keyslot1 && keyslot2)
|
||||
to_chat(user, "The headset can't hold another key!")
|
||||
to_chat(user, span_notice("The headset can't hold another key!"))
|
||||
return
|
||||
|
||||
if(!keyslot1)
|
||||
@@ -387,7 +140,6 @@
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/item/radio/headset/recalculateChannels(var/setDescription = 0)
|
||||
src.channels = list()
|
||||
src.translate_binary = 0
|
||||
@@ -451,3 +203,436 @@
|
||||
radio_text += ", "
|
||||
|
||||
radio_desc = radio_text
|
||||
|
||||
/obj/item/radio/headset/mob_headset/receive_range(freq, level)
|
||||
if(ismob(src.loc))
|
||||
return ..(freq, level, 1)
|
||||
return -1
|
||||
|
||||
/obj/item/radio/headset/mob_headset/afterattack(var/atom/movable/target, mob/living/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target,/mob/living/simple_mob))
|
||||
var/mob/living/simple_mob/M = target
|
||||
if(!M.mob_radio)
|
||||
user.drop_item()
|
||||
forceMove(M)
|
||||
M.mob_radio = src
|
||||
return
|
||||
if(M.mob_radio)
|
||||
M.mob_radio.forceMove(M.loc)
|
||||
M.mob_radio = null
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/radio/headset/alt
|
||||
name = "bowman radio headset"
|
||||
desc = "A larger, sturdier radio headset. A bit bulky, but guaranteed to stay on no matter what."
|
||||
icon_state = "headset_alt"
|
||||
|
||||
/obj/item/radio/headset/earbud
|
||||
name = "radio earbud"
|
||||
desc = "A discreet radio earbud and low-profile mic. Simple and unobtrusive."
|
||||
icon_state = "headset_earbud"
|
||||
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
icon_state = "sec_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/alt/headset_sec
|
||||
name = "security bowman headset"
|
||||
icon_state = "sec_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_sec
|
||||
name = "security earbud"
|
||||
icon_state = "sec_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
icon_state = "eng_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/alt/headset_eng
|
||||
name = "engineering bowman headset"
|
||||
icon_state = "eng_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_eng
|
||||
name = "engineering earbud"
|
||||
icon_state = "eng_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
icon_state = "med_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/alt/headset_med
|
||||
name = "medical bowman headset"
|
||||
icon_state = "med_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_med
|
||||
name = "medical earbud"
|
||||
icon_state = "med_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/alt/headset_sci
|
||||
name = "science bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_sci
|
||||
name = "science earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/alt/headset_com
|
||||
name = "command bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_com
|
||||
name = "command earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/heads/captain
|
||||
name = "site manager's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/sfr
|
||||
name = "SFR headset"
|
||||
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
|
||||
icon_state = "com_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/alt/heads/captain
|
||||
name = "site manager's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/captain
|
||||
name = "site manager's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/rd
|
||||
name = "research director's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/alt/heads/rd
|
||||
name = "research director's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/rd
|
||||
name = "research director's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/hos
|
||||
name = "head of security's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/alt/heads/hos
|
||||
name = "head of security's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/hos
|
||||
name = "head of security's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/ce
|
||||
name = "chief engineer's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/alt/heads/ce
|
||||
name = "chief engineer's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/ce
|
||||
name = "chief engineer's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/cmo
|
||||
name = "chief medical officer's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/alt/heads/cmo
|
||||
name = "chief medical officer's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/cmo
|
||||
name = "chief medical officer's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/hop
|
||||
name = "head of personnel's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/alt/heads/hop
|
||||
name = "head of personnel's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/hop
|
||||
name = "head of personnel's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/miner
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down."
|
||||
icon_state = "mine_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/cargo
|
||||
name = "supply radio headset"
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/alt/cargo
|
||||
name = "supply bowman headset"
|
||||
icon_state = "cargo_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/earbud/cargo
|
||||
name = "supply earbud"
|
||||
icon_state = "cargo_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/qm
|
||||
name = "qm radio headset"
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/alt/qm
|
||||
name = "qm bowman headset"
|
||||
icon_state = "cargo_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/earbud/qm
|
||||
name = "qm earbud"
|
||||
icon_state = "cargo_earbud"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/service
|
||||
name = "service radio headset"
|
||||
icon_state = "srv_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/alt/service
|
||||
name = "service bowman headset"
|
||||
icon_state = "srv_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/earbud/service
|
||||
name = "service earbud"
|
||||
icon_state = "srv_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/ert
|
||||
name = "emergency response team radio headset"
|
||||
icon_state = "com_headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/alt/ert
|
||||
name = "emergency response team bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/ia
|
||||
name = "internal affairs headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/alt/ia
|
||||
name = "internal affairs bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/earbud/ia
|
||||
name = "internal affairs earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/centcom
|
||||
name = "centcom radio headset"
|
||||
icon_state = "cent_headset"
|
||||
item_state = "headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/alt/centcom
|
||||
name = "centcom bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/nanotrasen
|
||||
name = "\improper NT radio headset"
|
||||
icon_state = "nt_headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/alt/nanotrasen
|
||||
name = "\improper NT bowman headset"
|
||||
icon_state = "nt_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pathfinder
|
||||
name = "pathfinder's headset"
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/pathfinder
|
||||
|
||||
/obj/item/radio/headset/alt/pathfinder
|
||||
name = "pathfinder's bowman headset"
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pilot
|
||||
name = "pilot's headset"
|
||||
icon_state = "pilot_headset"
|
||||
adhoc_fallback = TRUE
|
||||
|
||||
/obj/item/radio/headset/alt/pilot
|
||||
name = "pilot's bowman headset"
|
||||
icon_state = "pilot_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/explorer
|
||||
name = "away team member's headset"
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/explorer
|
||||
|
||||
/obj/item/radio/headset/alt/explorer
|
||||
name = "away team's bowman headset"
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/sar
|
||||
name = "search and rescue headset"
|
||||
icon_state = "sar_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/sar
|
||||
|
||||
/obj/item/radio/headset/alt/sar
|
||||
name = "search and rescue bowman headset"
|
||||
icon_state = "sar_headset_alt"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/sar
|
||||
|
||||
/obj/item/radio/headset/talon
|
||||
name = "talon headset"
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
|
||||
/obj/item/radio/headset/alt/talon
|
||||
name = "talon bowman headset"
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
|
||||
/obj/item/radio/headset/earbud/talon
|
||||
name = "talon earbud"
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
|
||||
/obj/item/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
icon_state = "rob_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_rob
|
||||
|
||||
// Special Antag/Admin/Event/Other headsets
|
||||
|
||||
/obj/item/radio/headset/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_headset"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/alt/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_headset_alt"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/earbud/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_earbud"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/raider
|
||||
origin_tech = list(TECH_ILLEGAL = 2)
|
||||
icon_state = "syndie_headset"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/raider
|
||||
|
||||
/obj/item/radio/headset/raider/Initialize()
|
||||
. = ..()
|
||||
set_frequency(RAID_FREQ)
|
||||
|
||||
/obj/item/radio/headset/binary
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
ks1type = /obj/item/encryptionkey/binary
|
||||
|
||||
/obj/item/radio/headset/omni //Only for the admin intercoms
|
||||
ks2type = /obj/item/encryptionkey/omni
|
||||
|
||||
/obj/item/radio/headset/mmi_radio
|
||||
name = "brain-integrated radio"
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
var/mmiowner = null
|
||||
var/radio_enabled = 1
|
||||
|
||||
/obj/item/radio/headset/mmi_radio/receive_range(freq, level)
|
||||
if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal))
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans.
|
||||
name = "nonhuman radio receiver"
|
||||
desc = "An updated, self-adhesive modular intercom that requires no hands to operate or ears to hold, just stick it on. Takes encryption keys"
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "\improper AI subspace transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ai_integrated
|
||||
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
|
||||
var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu.
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level)
|
||||
if (disabledAi)
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
@@ -1,131 +0,0 @@
|
||||
/obj/item/radio/headset/centcom
|
||||
name = "centcom radio headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "cent_headset"
|
||||
item_state = "headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/centcom/alt
|
||||
name = "centcom bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/nanotrasen
|
||||
name = "\improper NT radio headset"
|
||||
desc = "The headset of a Nanotrasen corporate employee."
|
||||
icon_state = "nt_headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/nanotrasen/alt
|
||||
name = "\improper NT bowman headset"
|
||||
icon_state = "nt_headset_alt"
|
||||
|
||||
/obj/item/radio/headset
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi')
|
||||
|
||||
/obj/item/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans.
|
||||
name = "nonhuman radio receiver"
|
||||
desc = "An updated, self-adhesive modular intercom that requires no hands to operate or ears to hold, just stick it on. Takes encryption keys"
|
||||
|
||||
/obj/item/radio/headset/mob_headset/receive_range(freq, level)
|
||||
if(ismob(src.loc))
|
||||
return ..(freq, level, 1)
|
||||
return -1
|
||||
|
||||
/obj/item/radio/headset/mob_headset/afterattack(var/atom/movable/target, mob/living/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target,/mob/living/simple_mob))
|
||||
var/mob/living/simple_mob/M = target
|
||||
if(!M.mob_radio)
|
||||
user.drop_item()
|
||||
forceMove(M)
|
||||
M.mob_radio = src
|
||||
return
|
||||
if(M.mob_radio)
|
||||
M.mob_radio.forceMove(M.loc)
|
||||
M.mob_radio = null
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/radio/headset/headset_cargo
|
||||
desc = "A headset used by the QM's slaves."
|
||||
|
||||
/obj/item/radio/headset/headset_cargo/alt
|
||||
desc = "A bowman headset used by the QM's slaves."
|
||||
|
||||
/obj/item/radio/headset/headset_qm
|
||||
name = "qm radio headset"
|
||||
desc = "A headset used by the QM."
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/headset_qm/alt
|
||||
name = "qm bowman headset"
|
||||
desc = "A bowman headset used by the QM."
|
||||
icon_state = "cargo_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pathfinder
|
||||
name = "pathfinder's headset"
|
||||
desc = "Headset used by pathfinders for exploring. Access to the explorer and command channels."
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/pathfinder
|
||||
|
||||
/obj/item/radio/headset/pathfinder/alt
|
||||
name = "pathfinder's bowman headset"
|
||||
desc = "Bowman headset used by pathfinders for exploring. Access to the explorer and command channels."
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pilot
|
||||
name = "pilot's headset"
|
||||
desc = "A headset used by pilots."
|
||||
icon_state = "pilot_headset"
|
||||
adhoc_fallback = TRUE
|
||||
|
||||
/obj/item/radio/headset/pilot/alt
|
||||
name = "pilot's bowman headset"
|
||||
desc = "A bowman headset used by pilots."
|
||||
icon_state = "pilot_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/explorer
|
||||
name = "away team member's headset"
|
||||
desc = "Headset used by the away team for exploring. Access to the away team channel."
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/explorer
|
||||
|
||||
/obj/item/radio/headset/explorer/alt
|
||||
name = "away team's bowman headset"
|
||||
desc = "Bowman headset used by the away team for exploring. Access to the away team channel."
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/sar
|
||||
name = "fm radio headset"
|
||||
desc = "A headset for field medics."
|
||||
icon_state = "sar_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/sar
|
||||
|
||||
/obj/item/radio/headset/sar/alt
|
||||
name = "fm radio bowman headset"
|
||||
desc = "A bowman headset for field medics."
|
||||
icon_state = "sar_headset_alt"
|
||||
|
||||
/* //They're all volunteers now.
|
||||
/obj/item/radio/headset/volunteer
|
||||
name = "volunteer's headset"
|
||||
desc = "A headset used by volunteers to expedition teams, has access to the Away Team channel."
|
||||
icon_state = "pilot_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/explorer
|
||||
*/
|
||||
|
||||
/obj/item/radio/headset/talon
|
||||
name = "talon headset"
|
||||
desc = "A headset for communication between the crew of the ITV Talon."
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
@@ -97,8 +97,12 @@
|
||||
dat += span_bold("Genetic damage") + " - Utilize cryogenic pod with appropriate chemicals (i.e. Cryoxadone) and below 70 K, or give Rezadone.<br>"
|
||||
if(bone)
|
||||
dat += span_bold("Bone fracture") + " - Splint damaged area. Treat with bone repair surgery or Osteodaxon after treating brute damage.<br>"
|
||||
if(M.virus2.len)
|
||||
dat += span_bold("Viral infection") + " - Proceed with virology pathogen curing procedures or apply antiviral chemicals (i.e. Corophizine).<br>"
|
||||
if(M.viruses.len)
|
||||
for(var/datum/disease/D in M.GetViruses())
|
||||
if(D.visibility_flags & HIDDEN_SCANNER)
|
||||
continue
|
||||
else
|
||||
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacilin. Limit exposure to other personnel.<br>"
|
||||
if(robotparts)
|
||||
dat += span_bold("Robotic body parts") + " - Should not be repaired by medical personnel, refer to robotics if damaged."
|
||||
|
||||
|
||||
@@ -248,14 +248,14 @@
|
||||
else
|
||||
dat += span_warning("Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.")
|
||||
dat += "<br>"
|
||||
if(C.virus2.len)
|
||||
for (var/ID in C.virus2)
|
||||
if (ID in virusDB)
|
||||
var/datum/data/record/V = virusDB[ID]
|
||||
dat += span_warning("Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]")
|
||||
if(LAZYLEN(C.resistances))
|
||||
for (var/datum/disease/virus in C.GetViruses())
|
||||
if(virus.visibility_flags & HIDDEN_SCANNER || virus.visibility_flags & HIDDEN_PANDEMIC)
|
||||
continue
|
||||
if(virus.discovered)
|
||||
dat += span_warning("Warning: [virus.name] detected in subject's blood.")
|
||||
dat += "<br>"
|
||||
else
|
||||
dat += span_warning("Warning: Unknown pathogen detected in subject's blood.")
|
||||
dat += span_warning("Severity: [virus.severity]")
|
||||
dat += "<br>"
|
||||
if (M.getCloneLoss())
|
||||
dat += span_warning("Subject appears to have been imperfectly cloned.")
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
//For bypassing locked /obj/structure/simple_doors
|
||||
|
||||
/obj/item/lockpick
|
||||
name = "set of lockpicks"
|
||||
desc = "A set of picks and tension wrenches, ideal for picking old-style mechanical locks... not that any of those exist on most NT facilities these days. Still, it might be useful elsewhere?"
|
||||
icon = 'icons/obj/lockpicks.dmi'
|
||||
icon_state = "lockpicks"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/pick_type = "simple"
|
||||
var/pick_time = 10 SECONDS
|
||||
var/pick_verb = "pick"
|
||||
|
||||
/obj/item/lockpick/afterattack(atom/A, mob/user)
|
||||
if(!user.IsAdvancedToolUser()) //no lockpicking for monkeys
|
||||
return
|
||||
if(istype(A, /obj/structure/simple_door))
|
||||
var/obj/structure/simple_door/D = A
|
||||
if(!D.locked) //you can pick your nose, but you can't pick an unlocked door
|
||||
to_chat(user, span_notice("\The [D] isn't locked."))
|
||||
return
|
||||
else if(D.lock_type != pick_type) //make sure our types match
|
||||
to_chat(user, span_warning("\The [src] can't pick \the [D]. Another tool might work?"))
|
||||
return
|
||||
else if(!D.can_pick) //make sure we're actually allowed to bypass it at all
|
||||
to_chat(user, span_warning("\The [D] can't be [pick_verb]ed."))
|
||||
return
|
||||
else //finally, we can assume that they do match
|
||||
to_chat(user, span_notice("You start to [pick_verb] the lock on \the [D]..."))
|
||||
playsound(src, D.keysound,100, 1)
|
||||
if(do_after(user, pick_time * D.lock_difficulty))
|
||||
to_chat(user, span_notice("Success!"))
|
||||
D.locked = FALSE
|
||||
else if(istype(A,/mob/living/carbon/human)) //you can pick your friends, and you can pick your nose, but you can't pick your friend's nose
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(user.zone_sel.selecting == BP_HEAD)
|
||||
if(H == user)
|
||||
to_chat(user, span_notice("Your nose isn't locked. If you're feeling stuffy, maybe you should talk to a doctor..?"))
|
||||
else
|
||||
user.visible_message(span_notice("[user] tries to [pick_verb] [H]'s nose with \the [src]! They don't seem to be having much success."),span_notice("You try to [pick_verb] [H]'s nose. It doesn't seem to be working."))
|
||||
return
|
||||
|
||||
/obj/item/lockpick/pick_gun
|
||||
name = "pick gun"
|
||||
desc = "A more sophisticated and automated alternative to traditional lockpicking methods. Contains a dazzling array of tools in a simple-to-use housing: just press the face plate against the lock face and hold the trigger down until it goes click."
|
||||
icon_state = "pick_gun"
|
||||
pick_time = 3 SECONDS
|
||||
|
||||
/obj/item/lockpick/mag_sequencer
|
||||
name = "magnetic sequencer"
|
||||
desc = "A deceptively simple gadget that brute-forces magnetic locks using a small electromagnet. A predecessor to the cryptographic sequencer, a more complicated device that is considered contraband in most jurisdictions. Not that these aren't illegal either, mind you!"
|
||||
icon_state = "mag_sequencer"
|
||||
pick_type = "maglock"
|
||||
pick_time = 5 SECONDS
|
||||
pick_verb = "bypass"
|
||||
@@ -154,14 +154,6 @@
|
||||
build_path = /obj/machinery/computer/operating
|
||||
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
|
||||
|
||||
/obj/item/circuitboard/curefab
|
||||
name = T_BOARD("cure fabricator")
|
||||
build_path = /obj/machinery/computer/curer
|
||||
|
||||
/obj/item/circuitboard/splicer
|
||||
name = T_BOARD("disease splicer")
|
||||
build_path = /obj/machinery/computer/diseasesplicer
|
||||
|
||||
/obj/item/circuitboard/mining_shuttle
|
||||
name = T_BOARD("mining shuttle console")
|
||||
build_path = /obj/machinery/computer/shuttle_control/mining
|
||||
@@ -226,4 +218,4 @@
|
||||
/obj/item/circuitboard/stockexchange
|
||||
name = T_BOARD("stock exchange console")
|
||||
build_path = /obj/machinery/computer/stockexchange
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 1)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 1)
|
||||
|
||||
@@ -16,4 +16,24 @@
|
||||
else
|
||||
M.ClearTransform()
|
||||
M.update_transform()
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
// Do not ever just leave this laying about, it will go horribly wrong!
|
||||
/obj/item/squishhammer/dark
|
||||
name = "The Dark Short Stacker"
|
||||
desc = "Wield the power of this weapon with responsibility (God knows you won't)."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "dark_hammer"
|
||||
attack_verb = list("stacked")
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/squishhammer/dark/attack(mob/M as mob, mob/user as mob)
|
||||
..()
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
E.fracture() // Oof, ouch, owie
|
||||
var/turf/T = M.loc
|
||||
if(isturf(T))
|
||||
new /obj/effect/gibspawner/generic(T)
|
||||
|
||||
@@ -3,7 +3,7 @@ var/global/list/ashtray_cache = list()
|
||||
/obj/item/material/ashtray
|
||||
name = "ashtray"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "blank"
|
||||
icon_state = "ashtray"
|
||||
randpixel = 5
|
||||
force_divisor = 0.1
|
||||
thrown_force_divisor = 0.1
|
||||
@@ -16,6 +16,7 @@ var/global/list/ashtray_cache = list()
|
||||
if(!material)
|
||||
qdel(src)
|
||||
return
|
||||
icon_state = "blank"
|
||||
max_butts = round(material.hardness/5) //This is arbitrary but whatever.
|
||||
randpixel_xy()
|
||||
update_icon()
|
||||
|
||||
@@ -108,12 +108,12 @@
|
||||
if(M == user)
|
||||
if(!M.can_eat(loaded))
|
||||
return
|
||||
M.visible_message(span_bold("\The [user]") + "eats some of [loaded] with \the [src].")
|
||||
M.visible_message(span_bold("\The [user]") + " eats some of [loaded] with \the [src].")
|
||||
else
|
||||
user.visible_message(span_warning("\The [user] begins to feed \the [M]!"))
|
||||
if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS)))
|
||||
return
|
||||
M.visible_message(span_bold("\The [user]") + "feeds some of [loaded] to \the [M] with \the [src].")
|
||||
M.visible_message(span_bold("\The [user]") + " feeds some of [loaded] to \the [M] with \the [src].")
|
||||
playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1)
|
||||
loaded = null
|
||||
update_icon()
|
||||
|
||||
@@ -13,4 +13,42 @@
|
||||
sharp = TRUE
|
||||
edge = FALSE
|
||||
attack_verb = list("stabbed", "lunged at", "dextrously struck", "sliced", "lacerated", "impaled", "diced", "charioted")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/melee/hammer
|
||||
name = "claw hammer"
|
||||
desc = "A simple claw hammer for hitting things or people with, and the claw part probably does something too."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "claw_hammer"
|
||||
force = 15
|
||||
throwforce = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("smashed", "swung at", "pummelled", "nailed", "crushed", "bonked", "hammered", "cracked")
|
||||
defend_chance = 0
|
||||
|
||||
/obj/item/melee/hammer/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone, var/attack_modifier)
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(prob(50))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(hit_zone)
|
||||
affecting.fracture()
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/hammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
..()
|
||||
if(A)
|
||||
if(istype(A,/obj/structure/window))
|
||||
var/obj/structure/window/W = A
|
||||
if(prob(50))
|
||||
W.visible_message(span_warning("\The [W] shatters under the force of the impact!"))
|
||||
W.shatter()
|
||||
else if(istype(A,/obj/structure/barricade))
|
||||
var/obj/structure/barricade/B = A
|
||||
if(prob(50))
|
||||
B.visible_message(span_warning("\The [B] is broken apart with ease!"))
|
||||
B.dismantle()
|
||||
else if(istype(A,/obj/structure/grille))
|
||||
if(prob(50))
|
||||
A.visible_message(span_warning("\The [A] is smashed open!"))
|
||||
qdel(A)
|
||||
|
||||
@@ -453,7 +453,7 @@
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 12
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/reagent_containers/glass/beaker/vial/,/obj/item/virusdish/)
|
||||
can_hold = list(/obj/item/reagent_containers/glass/beaker/vial/)
|
||||
|
||||
// -----------------------------
|
||||
// Food Bag
|
||||
|
||||
@@ -244,7 +244,6 @@
|
||||
/obj/item/flashlight,
|
||||
/obj/item/cell/device,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/antibody_scanner, // VOREstation edit start
|
||||
/obj/item/sleevemate,
|
||||
/obj/item/mass_spectrometer,
|
||||
/obj/item/surgical,
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
|
||||
/obj/item/storage/box/syndie_kit/viral
|
||||
starts_with = list(
|
||||
/obj/item/virusdish/random = 3
|
||||
// /obj/item/virusdish/random = 3
|
||||
)
|
||||
|
||||
/obj/item/storage/secure/briefcase/rifle
|
||||
|
||||
@@ -223,8 +223,8 @@
|
||||
|
||||
/obj/random/sfr/item_to_spawn()
|
||||
return pick(prob(25);/obj/item/radio/headset/heads/captain/sfr,
|
||||
prob(25);/obj/item/radio/headset/headset_cargo/alt,
|
||||
prob(25);/obj/item/radio/headset/headset_com/alt,
|
||||
prob(25);/obj/item/radio/headset/alt/cargo,
|
||||
prob(25);/obj/item/radio/headset/alt/headset_com,
|
||||
prob(25);/obj/item/radio/headset)
|
||||
|
||||
// Mining Goodies
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/clothing/head/that = 2,
|
||||
/obj/item/radio/headset/headset_service = 2,
|
||||
/obj/item/radio/headset/service = 2,
|
||||
/obj/item/radio/headset/alt/service = 2,
|
||||
/obj/item/radio/headset/earbud/service = 2,
|
||||
/obj/item/clothing/head/pin/flower,
|
||||
/obj/item/clothing/head/pin/flower/pink,
|
||||
/obj/item/clothing/head/pin/flower/yellow,
|
||||
@@ -51,7 +53,9 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/sundress,
|
||||
/obj/item/clothing/under/waiter = 2,
|
||||
/obj/item/radio/headset/headset_service = 2,
|
||||
/obj/item/radio/headset/service = 2,
|
||||
/obj/item/radio/headset/alt/service = 2,
|
||||
/obj/item/radio/headset/earbud/service = 2,
|
||||
/obj/item/storage/box/mousetraps = 2,
|
||||
/obj/item/clothing/under/rank/chef,
|
||||
/obj/item/clothing/head/chefhat,
|
||||
@@ -69,7 +73,9 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/rank/janitor,
|
||||
/obj/item/clothing/under/dress/maid/janitor,
|
||||
/obj/item/radio/headset/headset_service,
|
||||
/obj/item/radio/headset/service,
|
||||
/obj/item/radio/headset/alt/service,
|
||||
/obj/item/radio/headset/earbud/service,
|
||||
/obj/item/cartridge/janitor,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/janitor,
|
||||
/obj/item/clothing/gloves/black,
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
/obj/item/clothing/shoes/boots/winter/explorer,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/radio/headset/explorer,
|
||||
/obj/item/radio/headset/explorer/alt,
|
||||
/obj/item/radio/headset/alt/explorer,
|
||||
/obj/item/cartridge/explorer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/gps/explorer,
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/clothing/shoes/boots/winter/explorer,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/radio/headset/pathfinder,
|
||||
/obj/item/radio/headset/pathfinder/alt,
|
||||
/obj/item/radio/headset/alt/pathfinder,
|
||||
/obj/item/cartridge/explorer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/gps/explorer,
|
||||
@@ -153,7 +153,7 @@
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar,
|
||||
/obj/item/clothing/shoes/boots/winter/explorer,
|
||||
/obj/item/radio/headset/sar,
|
||||
/obj/item/radio/headset/sar/alt,
|
||||
/obj/item/radio/headset/alt/sar,
|
||||
/obj/item/cartridge/sar,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/tank/emergency/oxygen/engi,
|
||||
@@ -201,7 +201,7 @@
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/gloves/fingerless,
|
||||
/obj/item/radio/headset/pilot,
|
||||
/obj/item/radio/headset/pilot/alt,
|
||||
/obj/item/radio/headset/alt/pilot,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/reagent_containers/food/snacks/liquidprotein,
|
||||
|
||||
@@ -11,8 +11,9 @@
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo,
|
||||
/obj/item/clothing/shoes/boots/winter/supply,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/radio/headset/headset_cargo,
|
||||
/obj/item/radio/headset/headset_cargo/alt,
|
||||
/obj/item/radio/headset/cargo,
|
||||
/obj/item/radio/headset/alt/cargo,
|
||||
/obj/item/radio/headset/earbud/cargo,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/fingerless,
|
||||
/obj/item/clothing/head/soft)
|
||||
@@ -37,8 +38,9 @@
|
||||
/obj/item/clothing/under/rank/cargo/jeans,
|
||||
/obj/item/clothing/under/rank/cargo/jeans/female,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/radio/headset/headset_qm, //VOREStation Edit,
|
||||
/obj/item/radio/headset/headset_qm/alt, //VOREStation Edit,
|
||||
/obj/item/radio/headset/qm,
|
||||
/obj/item/radio/headset/alt/qm,
|
||||
/obj/item/radio/headset/earbud/qm,
|
||||
/obj/item/clothing/under/rank/neo_qm,
|
||||
/obj/item/clothing/under/rank/neo_qm_skirt,
|
||||
/obj/item/clothing/under/rank/neo_qm_jacket,
|
||||
@@ -73,7 +75,7 @@
|
||||
closet_appearance = /decl/closet_appearance/secure_closet/mining
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/radio/headset/headset_mine,
|
||||
/obj/item/radio/headset/miner,
|
||||
/obj/item/clothing/under/rank/miner,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/shoes/black,
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/cartridge/ce,
|
||||
/obj/item/radio/headset/heads/ce,
|
||||
/obj/item/radio/headset/heads/ce/alt,
|
||||
/obj/item/radio/headset/alt/heads/ce,
|
||||
/obj/item/radio/headset/earbud/heads/ce,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined.
|
||||
@@ -92,7 +93,8 @@
|
||||
/obj/item/clothing/accessory/storage/brown_vest,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/radio/headset/headset_eng,
|
||||
/obj/item/radio/headset/headset_eng/alt,
|
||||
/obj/item/radio/headset/alt/headset_eng,
|
||||
/obj/item/radio/headset/earbud/headset_eng,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/glasses/meson,
|
||||
@@ -129,7 +131,8 @@
|
||||
/obj/item/extinguisher/atmo,
|
||||
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
|
||||
/obj/item/radio/headset/headset_eng,
|
||||
/obj/item/radio/headset/headset_eng/alt,
|
||||
/obj/item/radio/headset/alt/headset_eng,
|
||||
/obj/item/radio/headset/earbud/headset_eng,
|
||||
/obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/cartridge/atmos,
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
/obj/item/clothing/under/rank/hydroponics,
|
||||
/obj/item/clothing/gloves/botanic_leather,
|
||||
/obj/item/analyzer/plant_analyzer,
|
||||
/obj/item/radio/headset/headset_service,
|
||||
/obj/item/radio/headset/service,
|
||||
/obj/item/radio/headset/alt/service,
|
||||
/obj/item/radio/headset/earbud/service,
|
||||
/obj/item/clothing/head/greenbandana,
|
||||
/obj/item/shovel/spade,
|
||||
/obj/item/material/minihoe,
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/radio/headset/headset_med,
|
||||
/obj/item/radio/headset/headset_med/alt,
|
||||
/obj/item/radio/headset/alt/headset_med,
|
||||
/obj/item/radio/headset/earbud/headset_med,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt,
|
||||
/obj/item/clothing/shoes/boots/winter/medical,
|
||||
@@ -108,7 +109,9 @@
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/para,
|
||||
/obj/item/clothing/shoes/boots/winter/medical,
|
||||
/obj/item/radio/headset/headset_med/alt,
|
||||
/obj/item/radio/headset/headset_med,
|
||||
/obj/item/radio/headset/alt/headset_med,
|
||||
/obj/item/radio/headset/earbud/headset_med,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/storage/briefcase/inflatable,
|
||||
/obj/item/flashlight,
|
||||
@@ -143,7 +146,8 @@
|
||||
/obj/item/clothing/under/rank/neo_cmo_turtle_skirt,
|
||||
/obj/item/clothing/under/rank/neo_cmo_gorka,
|
||||
/obj/item/radio/headset/heads/cmo,
|
||||
/obj/item/radio/headset/heads/cmo/alt,
|
||||
/obj/item/radio/headset/alt/heads/cmo,
|
||||
/obj/item/radio/headset/earbud/heads/cmo,
|
||||
/obj/item/flash,
|
||||
/obj/item/reagent_containers/hypospray/vial,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
/obj/item/clothing/shoes/laceup/brown,
|
||||
/obj/item/clothing/gloves/sterile/latex,
|
||||
/obj/item/radio/headset/heads/rd,
|
||||
/obj/item/radio/headset/heads/rd/alt,
|
||||
/obj/item/radio/headset/alt/heads/rd,
|
||||
/obj/item/radio/headset/earbud/heads/rd,
|
||||
/obj/item/tank/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/flash,
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
/obj/item/cartridge/captain,
|
||||
/obj/item/storage/lockbox/medal,
|
||||
/obj/item/radio/headset/heads/captain,
|
||||
/obj/item/radio/headset/heads/captain/alt,
|
||||
/obj/item/radio/headset/alt/heads/captain,
|
||||
/obj/item/radio/headset/earbud/heads/captain,
|
||||
/obj/item/gun/energy/gun,
|
||||
/obj/item/melee/telebaton,
|
||||
/obj/item/flash,
|
||||
@@ -27,7 +28,8 @@
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/cartridge/hop,
|
||||
/obj/item/radio/headset/heads/hop,
|
||||
/obj/item/radio/headset/heads/hop/alt,
|
||||
/obj/item/radio/headset/alt/heads/hop,
|
||||
/obj/item/radio/headset/earbud/heads/hop,
|
||||
/obj/item/storage/box/ids = 2,
|
||||
/obj/item/gun/energy/gun/compact,
|
||||
/obj/item/storage/box/commandkeys,
|
||||
@@ -90,7 +92,8 @@
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/cartridge/hos,
|
||||
/obj/item/radio/headset/heads/hos,
|
||||
/obj/item/radio/headset/heads/hos/alt,
|
||||
/obj/item/radio/headset/alt/heads/hos,
|
||||
/obj/item/radio/headset/earbud/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/shield/riot,
|
||||
@@ -151,7 +154,8 @@
|
||||
/obj/item/clothing/under/rank/neo_sec_gorka,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/accessory/badge/holo/warden,
|
||||
@@ -189,7 +193,8 @@
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/storage/belt/security,
|
||||
/obj/item/flash,
|
||||
/obj/item/reagent_containers/spray/pepper,
|
||||
@@ -257,7 +262,8 @@
|
||||
/obj/item/storage/belt/detective,
|
||||
/obj/item/storage/box/evidence,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/clothing/suit/storage/vest/detective,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/accessory/holster/armpit,
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
/obj/item/clothing/head/helmet/HoS/hat/blue,
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/radio/headset/heads/hos,
|
||||
/obj/item/radio/headset/heads/hos/alt,
|
||||
/obj/item/radio/headset/alt/heads/hos,
|
||||
/obj/item/radio/headset/earbud/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/storage/belt/security,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
@@ -76,7 +77,8 @@
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/storage/belt/security,
|
||||
/obj/item/flash,
|
||||
/obj/item/reagent_containers/spray/pepper,
|
||||
@@ -122,7 +124,8 @@
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/cartridge/hos,
|
||||
/obj/item/radio/headset/heads/hos,
|
||||
/obj/item/radio/headset/heads/hos/alt,
|
||||
/obj/item/radio/headset/alt/heads/hos,
|
||||
/obj/item/radio/headset/earbud/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/shield/riot,
|
||||
@@ -169,7 +172,8 @@
|
||||
/obj/item/clothing/head/helmet/warden,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/accessory/badge/holo/warden,
|
||||
@@ -204,7 +208,8 @@
|
||||
/obj/item/cartridge/captain,
|
||||
/obj/item/storage/lockbox/medal,
|
||||
/obj/item/radio/headset/heads/captain,
|
||||
/obj/item/radio/headset/heads/captain/alt,
|
||||
/obj/item/radio/headset/alt/heads/captain,
|
||||
/obj/item/radio/headset/earbud/heads/captain,
|
||||
/obj/item/gunbox/captain,
|
||||
/obj/item/melee/telebaton,
|
||||
/obj/item/flash,
|
||||
|
||||
@@ -410,7 +410,7 @@
|
||||
/obj/item/clothing/under/rank/centcom,
|
||||
/obj/item/clothing/under/ert,
|
||||
/obj/item/clothing/under/syndicate/combat,
|
||||
/obj/item/radio/headset/ert/alt,
|
||||
/obj/item/radio/headset/alt/ert,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/clothing/shoes/boots/swat,
|
||||
/obj/item/clothing/gloves/swat,
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
closet_appearance = /decl/closet_appearance/tactical/alt //because ert lockers are red for some dumb reason
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/ert,
|
||||
/obj/item/radio/headset/ert/alt,
|
||||
/obj/item/radio/headset/ert,
|
||||
/obj/item/radio/headset/alt/ert,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/clothing/shoes/boots/swat,
|
||||
/obj/item/clothing/gloves/swat,
|
||||
/obj/item/clothing/mask/balaclava/tactical,
|
||||
/obj/item/clothing/mask/balaclava)
|
||||
|
||||
|
||||
//would you believe mercs have no official locker? well, now they do. basically just a rebranded ERT locker but hey, it's an option. -Killian
|
||||
/obj/structure/closet/wardrobe/merc
|
||||
name = "mercenary equipment"
|
||||
@@ -18,7 +19,9 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/tactical,
|
||||
/obj/item/clothing/under/syndicate/combat,
|
||||
/obj/item/radio/headset/syndicate/alt,
|
||||
/obj/item/radio/headset/syndicate,
|
||||
/obj/item/radio/headset/alt/syndicate,
|
||||
/obj/item/radio/headset/earbud/syndicate,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/clothing/shoes/boots/combat,
|
||||
/obj/item/clothing/gloves/combat,
|
||||
|
||||
@@ -556,9 +556,9 @@
|
||||
* This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
|
||||
* will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
|
||||
* in the 'closed, full of fluid' state, so you can put a body on it or whatever.
|
||||
*
|
||||
*
|
||||
* As an aghost you can also dragdrop something into it (you have to be ghosted next to it)
|
||||
*
|
||||
*
|
||||
* Possible 'state' options for change_state(state) are:
|
||||
* open: Open, no fluid or anything. At the end the contents are ejected.
|
||||
* closed: Closed, full of liquid
|
||||
@@ -582,7 +582,7 @@
|
||||
/obj/structure/prop/machine/nt_pod/Initialize(mapload)
|
||||
// Our non-map-preview state
|
||||
icon_state = "nt_pod"
|
||||
|
||||
|
||||
// Alpha mask to make sure things don't sneak out
|
||||
var/obj/effect/overlay/vis/mask = new
|
||||
mask.icon = icon
|
||||
@@ -607,7 +607,7 @@
|
||||
// Save old settings
|
||||
contents_vis_flags = AM.vis_flags
|
||||
contents_original_pixel_y = AM.pixel_y
|
||||
|
||||
|
||||
// Arrange
|
||||
AM.add_filter("podmask", 1, alpha_mask_filter(render_source = "nt_podmask[REF(src)]", flags = MASK_INVERSE))
|
||||
AM.pixel_y = 12
|
||||
@@ -616,7 +616,7 @@
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
buckle_mob(M, TRUE, FALSE)
|
||||
|
||||
|
||||
// TRAP THEM
|
||||
change_state("closed")
|
||||
|
||||
@@ -639,7 +639,7 @@
|
||||
return
|
||||
if(!user.client?.holder)
|
||||
return
|
||||
|
||||
|
||||
AM.forceMove(src)
|
||||
|
||||
/obj/structure/prop/machine/nt_pod/change_state(state)
|
||||
@@ -648,17 +648,17 @@
|
||||
if("open")
|
||||
cut_overlay("nt_pod_top_on")
|
||||
cut_overlay("nt_pod_under")
|
||||
|
||||
|
||||
// Fluid drains
|
||||
fluid.icon_state = "nothing"
|
||||
flick("nt_pod_emptying", fluid) // 8ds
|
||||
sleep(8)
|
||||
|
||||
|
||||
// Door opens
|
||||
door.icon_state = "nothing"
|
||||
flick("nt_pod_opening", door) // 9ds
|
||||
sleep(9)
|
||||
|
||||
|
||||
// GET OUT
|
||||
outside.layer = BELOW_MOB_LAYER
|
||||
if(contents.len)
|
||||
@@ -670,7 +670,7 @@
|
||||
cut_overlay("nt_pod_top_on")
|
||||
add_overlay("nt_pod_top_on")
|
||||
add_overlay("nt_pod_under")
|
||||
|
||||
|
||||
// Door closes
|
||||
door.icon_state = "nt_pod_glass"
|
||||
flick("nt_pod_closing", door) // 9ds
|
||||
@@ -683,4 +683,90 @@
|
||||
cut_overlay("nt_pod_panel")
|
||||
add_overlay("nt_pod_panel")
|
||||
if("panel_closed")
|
||||
cut_overlay("nt_pod_panel")
|
||||
cut_overlay("nt_pod_panel")
|
||||
|
||||
// Old Virology stuff
|
||||
|
||||
/obj/structure/prop/machine/centrifuge
|
||||
name = "centrifuge"
|
||||
desc = "Used to separate things with different weight. Spin 'em round, round, right round."
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "centrifuge"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/centrifuge/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "centrifuge_moving"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "centrifuge"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/prop/machine/incubator
|
||||
name = "incubator"
|
||||
desc = "Encourages the growth of diseases. This model comes with a dispenser system and a small radiation generator."
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "incubator"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/incubator/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "incubator_on"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "incubator"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/prop/machine/disease_analyser
|
||||
name = "disease analyser"
|
||||
desc = "Analyzes diseases to find out information about them!"
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "analyser"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/disease_analyser/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "analyser_"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "analyser"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/prop/machine/isolator
|
||||
name = "disease isolator"
|
||||
desc = "Used to isolate and identify diseases, allowing for comparison with a remote database."
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "isolator_in"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/isolator/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "isolator_"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "isolator_in"
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
|
||||
// Install
|
||||
if(W.has_tool_quality(TOOL_SCREWDRIVER))
|
||||
user.visible_message(span_info(anchored ? span_bold("\The [user]") + " begins unscrewing \the [src]." : span_bold("\The [user]") + "begins fasten \the [src]." ))
|
||||
user.visible_message(span_info((anchored ? (span_bold("\The [user]") + " begins unscrewing \the [src].") : (span_bold("\The [user]") + "begins fasten \the [src]."))))
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
if(do_after(user, 10, src))
|
||||
to_chat(user, (anchored ? span_notice("You have unfastened \the [src] from the floor.") : span_notice("You have fastened \the [src] to the floor.")))
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
|
||||
var/locked = FALSE //has the door been locked?
|
||||
var/lock_id = null //does the door have an associated key?
|
||||
var/lock_type = "simple" //string matched to "pick_type" on /obj/item/lockpick
|
||||
var/can_pick = TRUE //can it be picked/bypassed?
|
||||
var/lock_difficulty = 1 //multiplier to picking/bypassing time
|
||||
var/keysound = 'sound/items/toolbelt_equip.ogg'
|
||||
|
||||
/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
Reference in New Issue
Block a user