Merge remote-tracking branch 'upstream/master' into kk-rings

This commit is contained in:
Killian
2024-11-10 15:12:24 +00:00
32 changed files with 444 additions and 137 deletions
+2 -2
View File
@@ -254,19 +254,19 @@
if (!(src.status))
if(user)
visible_message(span_notice(" [user] has deactivated [src]!"))
add_hiddenprint(user)
else
visible_message(span_notice(" [src] clicks and shuts down. "))
playsound(src, 'sound/items/Wirecutter.ogg', 100, 1)
icon_state = "[initial(icon_state)]1"
add_hiddenprint(user)
else
if(user)
visible_message(span_notice(" [user] has reactivated [src]!"))
add_hiddenprint(user)
else
visible_message(span_notice(" [src] clicks and reactivates itself. "))
playsound(src, 'sound/items/Wirecutter.ogg', 100, 1)
icon_state = initial(icon_state)
add_hiddenprint(user)
/obj/machinery/camera/take_damage(var/force, var/message)
//prob(25) gives an average of 3-4 hits
+67
View File
@@ -0,0 +1,67 @@
/obj/machinery/contraband_scanner
name = "contraband scanner"
gender = PLURAL
icon = 'icons/obj/atm_fieldgen.dmi'
icon_state = "arfg_off"
desc = "A simple scanner that analyzes those who pass over it, and sounds an alarm if it detects any items that are programmed into its contraband list."
anchored = TRUE
opacity = FALSE
density = FALSE
power_channel = EQUIP
use_power = USE_POWER_IDLE
idle_power_usage = 10
active_power_usage = 250
var/deep_scan = TRUE //check more than just their hands/pockets?
var/contraband_count = 0 //how many items have we detected? only one actually needs to be found to set off the alarm
var/area_lockdown = TRUE //do we set off the fire alarm for our area when triggered?
var/close_blastdoors = TRUE //close all blast doors in the area when triggered?
var/power_fields = TRUE //do we activate all ARFs when triggered? use w/ impassable fieldgens. requires area_lockdown = TRUE to do anything.
var/last_trigger //when were we last triggered? combined with the cooldown below for sanity reasons
var/cooldown = 15 SECONDS //minimum time between retriggers, so people can't spam trigger the scanner to be obnoxious
var/auto_cancel = TRUE //automatically cancel alarm states after a delay? same duration as the cooldown for sanity
var/trigger_message = "The contraband scanner has been tripped!"
var/trigger_sound = 'sound/machines/airalarm.ogg' //sound that plays when we're set off
var/list/contraband = list(/obj/item/melee,/obj/item/gun,/obj/item/material)
/obj/machinery/contraband_scanner/Crossed(mob/living/M as mob)
if(M.is_incorporeal())
return
if(isliving(M))
var/area/A = src.loc.loc
if(last_trigger > world.time - cooldown)
return
for(var/obj/O in M.contents)
if(is_type_in_list(O,contraband))
contraband_count++
if(deep_scan)
for(var/obj/O2 in O.contents) //one layer deep is fine for now I think
if(is_type_in_list(O2,contraband))
contraband_count++
if(contraband_count && last_trigger < world.time - cooldown)
visible_message(span_danger(trigger_message))
playsound(src, trigger_sound, 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS)
for(var/obj/machinery/contraband_scanner/CS in A)
CS.last_trigger = world.time //set everyone's trigger time at once, to cut down on spam
CS.contraband_count = 0 //clear all our contraband counts too
if(area_lockdown)
if(close_blastdoors)
for(var/obj/machinery/door/blast/B in A)
if(!B.density)
spawn(0)
B.close()
if(power_fields)
A.arfgs_activate()
if(auto_cancel)
spawn(cooldown)
if(close_blastdoors)
for(var/obj/machinery/door/blast/B in A)
if(B.density)
spawn(0)
B.open()
if(power_fields)
A.arfgs_deactivate()
..()
@@ -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)
@@ -258,4 +267,14 @@ var/global/list/image/splatter_cache=list()
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
@@ -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
@@ -572,21 +572,25 @@
/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
@@ -248,7 +248,7 @@
else
dat += span_warning("Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.")
dat += "<br>"
if(C.resistances.len)
if(LAZYLEN(C.resistances))
for (var/datum/disease/virus in C.GetViruses())
if(virus.visibility_flags & HIDDEN_SCANNER || virus.visibility_flags & HIDDEN_PANDEMIC)
continue
+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"
+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)
@@ -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)
+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()
@@ -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)
@@ -5,7 +5,7 @@
/obj/item/clothing/accessory/choker //A colorable, tagless choker
name = "plain choker"
slot_flags = SLOT_TIE | SLOT_OCLOTHING
desc = "A simple, plain choker. Or maybe it's a collar? Use in-hand to customize it."
desc = "A simple, plain choker. Or maybe it's a collar?"
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_override = 'icons/inventory/accessory/mob_vr.dmi'
icon_state = "choker_cst"
@@ -44,18 +44,6 @@
/obj/item/clothing/accessory/choker/dropped()
icon_override = icon_previous_override
/obj/item/clothing/accessory/choker/attack_self(mob/user as mob)
if(!customized)
var/design = tgui_input_list(user,"Descriptor?","Pick descriptor","Descriptor", list("plain","simple","ornate","elegant","opulent"))
var/material = tgui_input_list(user,"Material?","Pick material","Material", list("leather","velvet","lace","fabric","latex","plastic","metal","chain","silver","gold","platinum","steel","bead","ruby","sapphire","emerald","diamond"))
var/type = tgui_input_list(user,"Type?","Pick type","Type", list("choker","collar","necklace"))
name = "[design] [material] [type]"
desc = "A [type], made of [material]. It's rather [design]."
customized = 1
to_chat(usr,span_notice("[src] has now been customized."))
else
to_chat(usr,span_notice("[src] has already been customized!"))
/obj/item/clothing/accessory/collar
slot_flags = SLOT_TIE | SLOT_OCLOTHING
icon = 'icons/inventory/accessory/item_vr.dmi'
+32 -10
View File
@@ -415,7 +415,12 @@
/obj/item/stack/medical/advanced/ointment = 6,
/obj/item/stack/medical/splint = 4,
/obj/item/storage/pill_bottle/carbon = 2,
/obj/item/clothing/mask/chewable/candy/lolli = 15)
/obj/item/clothing/mask/chewable/candy/lolli = 15,
/obj/item/storage/box/khcrystal = 4,
/obj/item/backup_implanter = 3,
/obj/item/clothing/glasses/omnihud/med = 4,
/obj/item/glasses_kit = 1,
/obj/item/storage/quickdraw/syringe_case = 4)
contraband = list(/obj/item/reagent_containers/pill/tox = 3,
/obj/item/reagent_containers/pill/stox = 4,
/obj/item/reagent_containers/pill/antitox = 6)
@@ -448,7 +453,8 @@
products = list(/obj/item/stack/medical/bruise_pack = 2,
/obj/item/stack/medical/ointment = 2,
/obj/item/reagent_containers/hypospray/autoinjector = 4,
/obj/item/healthanalyzer = 1)
/obj/item/healthanalyzer = 1,
/obj/item/bodybag/cryobag = 2)
contraband = list(/obj/item/reagent_containers/syringe/antitoxin = 4,
/obj/item/reagent_containers/syringe/antiviral = 4,
/obj/item/reagent_containers/pill/tox = 1)
@@ -467,14 +473,19 @@
/obj/item/reagent_containers/syringe/antitoxin = 3,
/obj/item/stack/medical/bruise_pack = 3,
/obj/item/stack/medical/ointment =3,
/obj/item/healthanalyzer = 3)
/obj/item/healthanalyzer = 3,
/obj/item/bodybag/cryobag = 3)
contraband = list(/obj/item/reagent_containers/pill/tox = 3)
req_log_access = access_cmo
has_logs = 1
can_rotate = 0
/obj/machinery/vending/wallmed1/public
products = list(/obj/item/stack/medical/bruise_pack = 8,/obj/item/stack/medical/ointment = 8,/obj/item/reagent_containers/hypospray/autoinjector = 16,/obj/item/healthanalyzer = 4)
products = list(/obj/item/stack/medical/bruise_pack = 8,
/obj/item/stack/medical/ointment = 8,
/obj/item/reagent_containers/hypospray/autoinjector = 16,
/obj/item/healthanalyzer = 4,
/obj/item/bodybag/cryobag = 4)
/obj/machinery/vending/security
name = "SecTech"
@@ -488,9 +499,15 @@
/obj/item/flash = 5,
/obj/item/reagent_containers/food/snacks/donut/plain = 6,
/obj/item/reagent_containers/food/snacks/donut/plain/jelly = 6,
/obj/item/storage/box/evidence = 6)
/obj/item/storage/box/evidence = 6,
/obj/item/gun/energy/taser = 8,
/obj/item/gun/energy/stunrevolver = 4,
/obj/item/reagent_containers/spray/pepper = 6,
/obj/item/taperoll/police = 6,
/obj/item/clothing/glasses/omnihud/sec = 6)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,
/obj/item/storage/box/donut = 2)
/obj/item/storage/box/donut = 2,
/obj/item/implanter/compliance = 1)
req_log_access = access_armory
has_logs = 1
@@ -553,7 +570,9 @@
/obj/item/seeds/pumpkinseed = 3,
/obj/item/seeds/cherryseed = 3,
/obj/item/seeds/plastiseed = 3,
/obj/item/seeds/riceseed = 3)
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/shrinkshroom = 3,
/obj/item/seeds/megashroom = 3)
contraband = list(/obj/item/seeds/amanitamycelium = 2,
/obj/item/seeds/glowshroom = 2,
/obj/item/seeds/libertymycelium = 2,
@@ -652,7 +671,8 @@
/obj/item/flashlight/glowstick/red = 3,
/obj/item/flashlight/glowstick/blue = 3,
/obj/item/flashlight/glowstick/orange =3,
/obj/item/flashlight/glowstick/yellow = 3)
/obj/item/flashlight/glowstick/yellow = 3,
/obj/item/reagent_containers/spray/windowsealant = 5)
contraband = list(/obj/item/weldingtool/hugetank = 2,
/obj/item/clothing/gloves/fyellow = 2)
premium = list(/obj/item/clothing/gloves/heavy_engineer = 1) //VOREStation Edit - yellow gloves are common in engineering, let's make "premium" actually mean something
@@ -695,8 +715,10 @@
/obj/item/circuitboard/body_scanner,
/obj/item/circuitboard/medical_kiosk,
/obj/item/circuitboard/sleeper,
/obj/item/circuitboard/dna_analyzer)
contraband = list(/obj/item/cell/potato = 3)
/obj/item/circuitboard/dna_analyzer,
/obj/item/clothing/glasses/omnihud/eng = 6)
contraband = list(/obj/item/cell/potato = 3,
/obj/item/rms = 5)
premium = list(/obj/item/storage/belt/utility = 3)
product_records = list()
req_log_access = access_ce
@@ -1,41 +1,3 @@
//Tweaked existing vendors
/obj/machinery/vending/hydroseeds/Initialize()
. = ..()
products += list(/obj/item/seeds/shrinkshroom = 3,/obj/item/seeds/megashroom = 3)
/obj/machinery/vending/security/Initialize()
. = ..()
products += list(/obj/item/gun/energy/taser = 8,/obj/item/gun/energy/stunrevolver = 4,
/obj/item/reagent_containers/spray/pepper = 6,/obj/item/taperoll/police = 6,
/obj/item/clothing/glasses/omnihud/sec = 6)
contraband += list(/obj/item/implanter/compliance = 1)
/obj/machinery/vending/tool/Initialize()
. = ..()
products += list(/obj/item/reagent_containers/spray/windowsealant = 5)
/obj/machinery/vending/engivend/Initialize()
. = ..()
products += list(/obj/item/clothing/glasses/omnihud/eng = 6)
contraband += list(/obj/item/rms = 5)
/obj/machinery/vending/medical/Initialize()
. = ..()
products += list(/obj/item/storage/box/khcrystal = 4,/obj/item/backup_implanter = 3,
/obj/item/clothing/glasses/omnihud/med = 4, /obj/item/glasses_kit = 1, /obj/item/storage/quickdraw/syringe_case = 4)
/obj/machinery/vending/wallmed1/Initialize()
. = ..()
products += list(/obj/item/bodybag/cryobag = 2)
/obj/machinery/vending/wallmed2/Initialize()
. = ..()
products += list(/obj/item/bodybag/cryobag = 3)
/obj/machinery/vending/wallmed1/public/Initialize()
. = ..()
products += list(/obj/item/bodybag/cryobag = 4)
// Food Machines (for event/away maps)
//I want this not just as part of the zoo. ;v
+1 -1
View File
@@ -250,7 +250,7 @@ var/const/CE_STABLE_THRESHOLD = 0.5
B.data["viruses"] = list()
for(var/datum/disease/D in GetViruses())
if(D.spread_flags & SPECIAL || D.spread_flags & NON_CONTAGIOUS)
if(D.spread_flags & SPECIAL)
continue
B.data["viruses"] |= D.Copy()
@@ -445,10 +445,10 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
/obj/singularity/proc/smwave()
for(var/mob/living/M in view(10, src.loc))
if(prob(67))
to_chat(M, span_warning("You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."))
to_chat(M, span_warning("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."))
to_chat(M, span_notice("Miraculously, it fails to kill you."))
else
to_chat(M, span_danger("You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."))
to_chat(M, span_danger("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."))
to_chat(M, span_danger("You don't even have a moment to react as you are reduced to ashes by the intense radiation."))
M.dust()
SSradiation.radiate(src, rand(energy))
@@ -1,6 +1,7 @@
/obj/structure/reagent_dispensers
name = "Dispenser"
desc = "..."
description_info = "The input can be opened by Alt-clicking it, allowing you to pour reagents inside."
icon = 'icons/obj/chemical_tanks.dmi'
icon_state = "tank"
layer = TABLE_LAYER
@@ -16,6 +17,8 @@
var/amount_per_transfer_from_this = 10
var/possible_transfer_amounts = list(10,25,50,100)
var/open_top = FALSE
/obj/structure/reagent_dispensers/attackby(obj/item/W as obj, mob/user as mob)
return
@@ -79,6 +82,19 @@
/obj/structure/reagent_dispensers/blob_act()
qdel(src)
/obj/structure/reagent_dispensers/AltClick(mob/user)
if(!Adjacent(user))
return
if(flags & OPENCONTAINER)
to_chat(user, span_notice("You close the input on \the [src]"))
flags -= OPENCONTAINER
open_top = FALSE
else
to_chat(user, span_notice("You open the input on \the [src], allowing you to pour reagents in."))
flags |= OPENCONTAINER
open_top = TRUE
/*
* Tanks
*/
@@ -48,6 +48,9 @@
if(!istype(target))
return 0
if(target.open_top)
return 0
if(!target.reagents || !target.reagents.total_volume)
to_chat(user, span_notice("[target] is empty."))
return 1
+6 -6
View File
@@ -20,7 +20,7 @@
/datum/reagent/mutagen/mutagenvirusfood
name = "Mutagenic agar"
id = "mutagenvirusfood"
description = "mutates blood"
description = "Mutates viruses when mixed in blood. This one seems rather alright."
color = "#A3C00F"
/datum/reagent/mutagen/mutagenvirusfood/sugar
@@ -32,16 +32,16 @@
/datum/reagent/medicine/adranol/adranolvirusfood
name = "Virus rations"
id = "adranolvirusfood"
description = "mutates blood"
description = "Mutates viruses when mixed in blood. This one seems rather weak."
color = "#D18AA5"
/datum/reagent/phoron_dust/phoronvirusfood
/datum/reagent/toxin/phoron/phoronvirusfood
name = "Phoronic virus food"
id = "phoronvirusfood"
description = "mutates blood"
description = "Mutates viruses when mixed in blood. This one seems to be the strongest."
color = "#A69DA9"
/datum/reagent/phoron_dust/phoronvirusfood/weak
name = "Weakened phoronic virus food"
/datum/reagent/toxin/phoron/phoronvirusfood/weak
name = "Weakened phoronic virus food. This one seems to have been weakened, but still strong."
id = "weakphoronvirusfood"
color = "#CEC3C6"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 52 KiB

+23
View File
@@ -226,6 +226,29 @@
//////////////////////////////////////////////////////////////////////////////////////
#ifdef AWAY_MISSION_TEST
#include "../redgate/falls/falls.dmm"
#include "../redgate/abandonedisland.dmm"
#include "../redgate/cybercity.dmm"
#include "../redgate/darkadventure.dmm"
#include "../redgate/eggnogtown.dmm"
#include "../redgate/eggnogtownunderground.dmm"
#include "../redgate/facility.dmm"
#include "../redgate/fantasy_dungeon.dmm"
#include "../redgate/fantasy.dmm"
#include "../redgate/hotsprings.dmm"
#include "../redgate/innland.dmm"
#include "../redgate/islands_underwater.dmm"
#include "../redgate/islands.dmm"
#include "../redgate/jungle_underground.dmm"
#include "../redgate/jungle.dmm"
#include "../redgate/laserdome.dmm"
#include "../redgate/stardog.dmm"
#include "../redgate/teppiranch.dmm"
#include "../redgate/train_upper.dmm"
#include "../redgate/train.dmm"
#endif
/datum/map_template/common_lateload/redgate
name = "Redgate Submap"
desc = "Please do not use this."
+18 -10
View File
@@ -3641,10 +3641,8 @@
/turf/simulated/floor/water/digestive_enzymes,
/area/redgate/city/waterworks)
"eSM" = (
/obj/machinery/disease2/incubator,
/obj/machinery/light{
dir = 1
},
/obj/structure/table/standard,
/obj/item/book/manual/virology,
/turf/simulated/floor/tiled/white,
/area/redgate/city/science)
"eTR" = (
@@ -11034,6 +11032,13 @@
/obj/structure/undies_wardrobe,
/turf/simulated/floor/tiled/freezer,
/area/redgate/city/laundry)
"ozN" = (
/obj/machinery/light{
dir = 1
},
/obj/structure/prop/machine/disease_analyser,
/turf/simulated/floor/tiled/white,
/area/redgate/city/science)
"ozW" = (
/obj/machinery/light{
dir = 1
@@ -14361,8 +14366,8 @@
/turf/simulated/floor/tiled/neutral,
/area/redgate/city/house10)
"sLw" = (
/obj/machinery/computer/centrifuge,
/obj/machinery/light,
/obj/machinery/computer/pandemic,
/turf/simulated/floor/tiled/white,
/area/redgate/city/science)
"sLB" = (
@@ -17015,7 +17020,7 @@
/turf/simulated/floor/tiled/eris/dark/gray_platform,
/area/redgate/city/engine)
"wgN" = (
/obj/machinery/disease2/diseaseanalyser,
/obj/structure/prop/machine/centrifuge,
/turf/simulated/floor/tiled/white,
/area/redgate/city/science)
"wgO" = (
@@ -17388,7 +17393,10 @@
/turf/simulated/floor/tiled/steel_dirty,
/area/redgate/city/dodgypharmacy)
"wIw" = (
/obj/machinery/computer/diseasesplicer,
/obj/structure/reagent_dispensers/virusfood{
pixel_y = 29
},
/obj/structure/prop/machine/incubator,
/turf/simulated/floor/tiled/white,
/area/redgate/city/science)
"wIy" = (
@@ -23051,10 +23059,10 @@ lyJ
jNE
kfL
rdM
ozN
fpI
fpI
eSM
fpI
fpI
uEa
rdM
btI
kWt
+1 -1
View File
@@ -4090,7 +4090,7 @@
"XK" = (
/obj/effect/map_effect/perma_light/gateway{
light_color = "#fc8c03";
light_power = .5
light_power = 0.5
},
/turf/simulated/floor/wood,
/area/redgate/eggnogtown/bar)
+6 -22
View File
@@ -3246,10 +3246,6 @@
/obj/item/bone,
/turf/simulated/floor/grass,
/area/redgate/facility/cell27)
"eFo" = (
/obj/machinery/computer/centrifuge,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/cell20)
"eGK" = (
/turf/simulated/wall/tgmc/whitewall,
/area/redgate/facility/cell27)
@@ -4471,7 +4467,7 @@
/turf/simulated/floor/tiled/white,
/area/redgate/facility/cell2)
"gmR" = (
/obj/machinery/computer/centrifuge,
/obj/structure/prop/machine/disease_analyser,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"gmU" = (
@@ -4913,13 +4909,6 @@
/obj/random/forgotten_tram,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/nw)
"gQm" = (
/obj/machinery/disease2/isolator,
/obj/machinery/light{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"gQy" = (
/obj/effect/floor_decal/corner/black/border{
dir = 4
@@ -11648,7 +11637,7 @@
/turf/simulated/floor/tiled/white,
/area/redgate/facility/cell15)
"qsU" = (
/obj/machinery/disease2/diseaseanalyser,
/obj/structure/prop/machine/centrifuge,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"qtt" = (
@@ -11908,7 +11897,7 @@
/turf/simulated/floor/tiled/techfloor,
/area/redgate/facility/cell9)
"qMo" = (
/obj/machinery/disease2/incubator,
/obj/structure/closet/l3closet/virology,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"qNh" = (
@@ -11950,10 +11939,10 @@
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"qQL" = (
/obj/machinery/computer/diseasesplicer,
/obj/machinery/light{
dir = 1
},
/obj/machinery/computer/pandemic,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"qQY" = (
@@ -14775,12 +14764,7 @@
"uMq" = (
/obj/structure/closet/walllocker_double/science/east,
/obj/item/book/manual/virology,
/obj/item/antibody_scanner,
/obj/item/antibody_scanner,
/obj/item/reagent_containers/glass/beaker,
/obj/item/virusdish/random,
/obj/item/virusdish/random,
/obj/item/virusdish/random,
/turf/simulated/floor/tiled/white,
/area/redgate/facility/sw)
"uNl" = (
@@ -19788,7 +19772,7 @@ pLg
fPE
mzU
aOv
gQm
xRG
vrp
oWf
aOv
@@ -30193,7 +30177,7 @@ aKz
ehw
lnw
sCO
eFo
ehw
hgj
hgj
hgj
+2
View File
@@ -941,6 +941,7 @@
#include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\clawmachine.dm"
#include "code\game\machinery\cloning.dm"
#include "code\game\machinery\contraband_scanner.dm"
#include "code\game\machinery\cryo.dm"
#include "code\game\machinery\cryopod.dm"
#include "code\game\machinery\cryopod_vr.dm"
@@ -1291,6 +1292,7 @@
#include "code\game\objects\items\gunbox.dm"
#include "code\game\objects\items\gunbox_vr.dm"
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\lockpicks.dm"
#include "code\game\objects\items\magazine.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\pizza_voucher_vr.dm"