Merge branch 'master' into protRig

This commit is contained in:
Kashargul
2024-11-12 20:35:51 +01:00
committed by GitHub
438 changed files with 7322 additions and 4529 deletions
@@ -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."
+15 -2
View File
@@ -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
+438 -253
View File
@@ -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.")
+54
View File
@@ -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)
+21 -1
View File
@@ -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
+2 -2
View File
@@ -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,
+97 -11
View File
@@ -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()
+1 -1
View File
@@ -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)