diff --git a/_build_dependencies.sh b/_build_dependencies.sh
index b33548a58a..835e8f81c2 100644
--- a/_build_dependencies.sh
+++ b/_build_dependencies.sh
@@ -8,6 +8,6 @@ export PHP_VERSION=5.6
# Byond Major
export BYOND_MAJOR=513
# Byond Minor
-export BYOND_MINOR=1526
+export BYOND_MINOR=1528
# Macro Count
export MACRO_COUNT=4
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm
index e627fcbb46..f95948868d 100644
--- a/code/ATMOSPHERICS/pipes/pipe_base.dm
+++ b/code/ATMOSPHERICS/pipes/pipe_base.dm
@@ -128,7 +128,7 @@
return 1
playsound(src, W.usesound, 50, 1)
to_chat(user, "You begin to unfasten \the [src]...")
- if (do_after(user, 40 * W.toolspeed))
+ if (do_after(user, 10 * W.toolspeed))
user.visible_message( \
"\The [user] unfastens \the [src].", \
"You have unfastened \the [src].", \
diff --git a/code/__defines/hoses.dm b/code/__defines/hoses.dm
new file mode 100644
index 0000000000..2a7bd4d803
--- /dev/null
+++ b/code/__defines/hoses.dm
@@ -0,0 +1,3 @@
+#define HOSE_INPUT "Input"// Only pull liquid.
+#define HOSE_OUTPUT "Output"// Only push liquid.
+#define HOSE_NEUTRAL "Neutral"// Equalize liquids, not super efficient, can waste reagents due to rounding.
\ No newline at end of file
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 6303554a8e..bf9483bc91 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -462,3 +462,16 @@ GLOBAL_LIST_EMPTY(##LIST_NAME);\
#define FONT_HUGE(X) "[X]"
#define FONT_GIANT(X) "[X]"
+
+#define VOLUME_CHANNEL_MASTER "Master"
+#define VOLUME_CHANNEL_AMBIENCE "Ambience"
+#define VOLUME_CHANNEL_ALARMS "Alarms"
+#define VOLUME_CHANNEL_VORE "Vore"
+
+// Make sure you update this or clients won't be able to adjust the channel
+GLOBAL_LIST_INIT(all_volume_channels, list(
+ VOLUME_CHANNEL_MASTER,
+ VOLUME_CHANNEL_AMBIENCE,
+ VOLUME_CHANNEL_ALARMS,
+ VOLUME_CHANNEL_VORE,
+))
\ No newline at end of file
diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index da9220b3af..ca0e186ac9 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -214,6 +214,13 @@
#define O_AUG_SPINE "spinal augment"
#define O_AUG_PELVIC "pelvic augment"
+// FBP components.
+
+#define O_PUMP "hydraulic hub"
+#define O_CYCLER "reagent cycler"
+#define O_HEATSINK "thermal regulator"
+#define O_DIAGNOSTIC "diagnostic controller"
+
// Non-Standard organs
#define O_MOUTH "mouth"
#define O_CELL "cell"
diff --git a/code/_global_vars/lists/misc.dm b/code/_global_vars/lists/misc.dm
index adec2bf824..e02c99290c 100644
--- a/code/_global_vars/lists/misc.dm
+++ b/code/_global_vars/lists/misc.dm
@@ -2,4 +2,7 @@ GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u"))
GLOBAL_LIST_EMPTY(meteor_list)
/// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc.
-GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
\ No newline at end of file
+GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
+
+// Reference list for disposal sort junctions. Filled up by sorting junction's New()
+GLOBAL_LIST_EMPTY(tagger_locations)
\ No newline at end of file
diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
index d54635081d..371f35b051 100644
--- a/code/_helpers/global_lists.dm
+++ b/code/_helpers/global_lists.dm
@@ -9,6 +9,7 @@ var/global/list/ai_list = list() //List of all AIs, including clientless
var/global/list/living_mob_list = list() //List of all alive mobs, including clientless. Excludes /mob/new_player
var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless. Excludes /mob/new_player
var/global/list/listening_objects = list() //List of all objects which care about receiving messages (communicators, radios, etc)
+var/global/list/cleanbot_reserved_turfs = list() //List of all turfs currently targeted by some cleanbot
var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time
var/global/list/landmarks_list = list() //list of all landmarks created
diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm
index 1b028e117b..02a8806089 100644
--- a/code/_helpers/text.dm
+++ b/code/_helpers/text.dm
@@ -453,4 +453,36 @@ proc/TextPreview(var/string,var/len=40)
. += .(rest)
-#define gender2text(gender) capitalize(gender)
\ No newline at end of file
+#define gender2text(gender) capitalize(gender)
+
+/// Used to get a properly sanitized input, of max_length
+/// no_trim is self explanatory but it prevents the input from being trimed if you intend to parse newlines or whitespace.
+/proc/stripped_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE)
+ var/name = input(user, message, title, default) as text|null
+
+ if(no_trim)
+ return copytext(html_encode(name), 1, max_length)
+ else
+ return trim(html_encode(name), max_length) //trim is "outside" because html_encode can expand single symbols into multiple symbols (such as turning < into <)
+
+// Used to get a properly sanitized multiline input, of max_length
+/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE)
+ var/name = input(user, message, title, default) as message|null
+ if(no_trim)
+ return copytext(html_encode(name), 1, max_length)
+ else
+ return trim(html_encode(name), max_length)
+
+//Adds 'char' ahead of 'text' until there are 'count' characters total
+/proc/add_leading(text, count, char = " ")
+ text = "[text]"
+ var/charcount = count - length_char(text)
+ var/list/chars_to_add[max(charcount + 1, 0)]
+ return jointext(chars_to_add, char) + text
+
+//Adds 'char' behind 'text' until there are 'count' characters total
+/proc/add_trailing(text, count, char = " ")
+ text = "[text]"
+ var/charcount = count - length_char(text)
+ var/list/chars_to_add[max(charcount + 1, 0)]
+ return text + jointext(chars_to_add, char)
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index afed5b2c54..98f6023e7d 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -51,6 +51,9 @@
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
return 1
+ if(modifiers["shift"] && modifiers["middle"])
+ ShiftMiddleClickOn(A)
+ return 1
if(modifiers["middle"])
MiddleClickOn(A)
return 1
@@ -111,12 +114,11 @@
trigger_aiming(TARGET_CAN_CLICK)
return 1
- // VOREStation Addition Start: inbelly item interaction
+ // VOREStation Addition Start: inbelly interaction
if(isbelly(loc) && (loc == A.loc))
if(W)
- var/resolved = W.resolve_attackby(A,src)
- if(!resolved && A && W)
- W.afterattack(A, src, 1, params) // 1: clicking something Adjacent
+ to_chat(src, "The firm confines prevent that kind of dexterity!") //Only hand-based interactions in bellies
+ return
else
if(ismob(A)) // No instant mob attacking
setClickCooldown(get_attack_speed())
@@ -230,6 +232,15 @@
return
*/
+/*
+ Shift middle click
+ Used for pointing.
+*/
+
+/mob/proc/ShiftMiddleClickOn(atom/A)
+ pointed(A)
+ return
+
/*
Shift click
For most mobs, examine.
@@ -271,12 +282,15 @@
/atom/proc/AltClick(var/mob/user)
var/turf/T = get_turf(src)
if(T && user.TurfAdjacent(T))
- if(user.listed_turf == T)
- user.listed_turf = null
- else
- user.listed_turf = T
- user.client.statpanel = "Turf"
+ user.ToggleTurfTab(T)
return 1
+
+/mob/proc/ToggleTurfTab(var/turf/T)
+ if(listed_turf == T)
+ listed_turf = null
+ else
+ listed_turf = T
+ client.statpanel = "Turf"
/mob/proc/TurfAdjacent(var/turf/T)
return T.AdjacentQuick(src)
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index ab56dc6032..d63d49e8d7 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -9,7 +9,7 @@
/mob/living/silicon/robot/ClickOn(var/atom/A, var/params)
if(!checkClickCooldown())
return
-
+
setClickCooldown(1)
if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
@@ -20,6 +20,9 @@
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
return
+ if(modifiers["shift"] && modifiers["middle"])
+ ShiftMiddleClickOn(A)
+ return
if(modifiers["middle"])
MiddleClickOn(A)
return
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index 485df1de41..c2a8a62ea8 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -33,6 +33,15 @@
return
if(!checkClickCooldown()) return
setClickCooldown(4)
+ var/list/modifiers = params2list(params)
+ if(modifiers["shift"])
+ examinate(A)
+ return
+ if(modifiers["alt"]) // alt and alt-gr (rightalt)
+ var/turf/T = get_turf(A)
+ if(T && TurfAdjacent(T))
+ ToggleTurfTab(T)
+ return
// You are responsible for checking config.ghost_interaction when you override this function
// Not all of them require checking, see below
A.attack_ghost(src)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index f3aa8b3bf9..3488626f23 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -237,7 +237,8 @@ var/list/gamemode_cache = list()
var/static/dooc_allowed = 1
var/static/dsay_allowed = 1
- var/persistence_enabled = 1
+ var/persistence_disabled = FALSE
+ var/persistence_ignore_mapload = FALSE
var/allow_byond_links = 0
var/allow_discord_links = 0
@@ -583,8 +584,11 @@ var/list/gamemode_cache = list()
if("protect_roles_from_antagonist")
config.protect_roles_from_antagonist = 1
- if ("persistence_enabled")
- config.persistence_enabled = 1
+ if("persistence_disabled")
+ config.persistence_disabled = TRUE // Previously this forcibly set persistence enabled in the saves.
+
+ if("persistence_ignore_mapload")
+ config.persistence_ignore_mapload = TRUE
if ("probability")
var/prob_pos = findtext(value, " ")
diff --git a/code/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm
index 49f3d601fe..c2724c2d60 100644
--- a/code/controllers/subsystems/persistence.dm
+++ b/code/controllers/subsystems/persistence.dm
@@ -19,7 +19,7 @@ SUBSYSTEM_DEF(persistence)
/datum/controller/subsystem/persistence/proc/track_value(var/atom/value, var/track_type)
- if(config.persistence_enabled == 0) //if the config is not set to persistent nothing will save or load.
+ if(config.persistence_disabled) //if the config is set to persistence disabled, nothing will save or load.
return
var/turf/T = get_turf(value)
diff --git a/code/datums/autolathe/general.dm b/code/datums/autolathe/general.dm
index 844b208430..665aa55f24 100644
--- a/code/datums/autolathe/general.dm
+++ b/code/datums/autolathe/general.dm
@@ -6,38 +6,49 @@
name = "water-cooler bottle"
path =/obj/item/weapon/reagent_containers/glass/cooler_bottle
-/datum/category_item/autolathe/general/drinkingglass_square
+/datum/category_item/autolathe/general/drinkingglass
+ is_stack = TRUE
+
+/datum/category_item/autolathe/general/drinkingglass/square
name = "half-pint glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/square
-/datum/category_item/autolathe/general/drinkingglass_rocks
+/datum/category_item/autolathe/general/drinkingglass/rocks
name = "rocks glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
-/datum/category_item/autolathe/general/drinkingglass_shake
+/datum/category_item/autolathe/general/drinkingglass/shake
name = "milkshake glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/shake
-/datum/category_item/autolathe/general/drinkingglass_cocktail
+/datum/category_item/autolathe/general/drinkingglass/cocktail
name = "cocktail glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
-/datum/category_item/autolathe/general/drinkingglass_shot
+/datum/category_item/autolathe/general/drinkingglass/shot
name = "shot glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/shot
-/datum/category_item/autolathe/general/drinkingglass_pint
+/datum/category_item/autolathe/general/drinkingglass/pint
name = "pint glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/pint
-/datum/category_item/autolathe/general/drinkingglass_mug
+/datum/category_item/autolathe/general/drinkingglass/mug
name = "glass mug"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/mug
-/datum/category_item/autolathe/general/drinkingglass_wine
+/datum/category_item/autolathe/general/drinkingglass/wine
name = "wine glass"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/wine
+/datum/category_item/autolathe/general/drinkingglass/metaglass
+ name = "metamorphic glass"
+ path =/obj/item/weapon/reagent_containers/food/drinks/metaglass
+
+/datum/category_item/autolathe/general/drinkingglass/metaglass/metapint
+ name = "metamorphic pint glass"
+ path =/obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint
+
/datum/category_item/autolathe/general/flashlight
name = "flashlight"
path =/obj/item/device/flashlight
diff --git a/code/datums/autolathe/general_vr.dm b/code/datums/autolathe/general_vr.dm
index e1fb7ad46f..5702a7ed49 100644
--- a/code/datums/autolathe/general_vr.dm
+++ b/code/datums/autolathe/general_vr.dm
@@ -2,40 +2,11 @@
name = "Holo-collar"
path =/obj/item/clothing/accessory/collar/holo
-/datum/category_item/autolathe/general/drinkingglass_square
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_rocks
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_shake
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_cocktail
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_shot
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_pint
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_mug
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_wine
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/metaglass
- name = "metamorphic glass"
- path =/obj/item/weapon/reagent_containers/food/drinks/metaglass
- is_stack = TRUE
-
-/datum/category_item/autolathe/general/drinkingglass_carafe
+/datum/category_item/autolathe/general/drinkingglass/carafe
name = "glass carafe"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/carafe
-/datum/category_item/autolathe/general/drinkingglass_pitcher
+/datum/category_item/autolathe/general/drinkingglass/pitcher
name = "plastic pitcher"
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher
\ No newline at end of file
diff --git a/code/datums/autolathe/tools.dm b/code/datums/autolathe/tools.dm
index d0aa2aa196..9e9a87ea71 100644
--- a/code/datums/autolathe/tools.dm
+++ b/code/datums/autolathe/tools.dm
@@ -42,3 +42,15 @@
/datum/category_item/autolathe/tools/welder_industrial
name = "industrial welding tool"
path =/obj/item/weapon/weldingtool/largetank
+
+/datum/category_item/autolathe/tools/spraybottle
+ name = "spray bottle"
+ path = /obj/item/weapon/reagent_containers/spray
+ resources = list(MAT_PLASTIC = 2000)
+
+/datum/category_item/autolathe/tools/spraynozzle
+ name = "spray nozzle"
+ path = /obj/item/weapon/reagent_containers/spray
+ resources = list(MAT_PLASTIC = 5000, DEFAULT_WALL_MATERIAL = 2000)
+ hidden = 1
+ man_rating = 2
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index a35abf8c37..fc4e696702 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -6,6 +6,7 @@
var/icon/base_icon = null
var/icon
var/icon_state = "" //icon state of the main segments of the beam
+ var/beam_color = null // Color of the beam segments
var/max_distance = 0
var/endtime = 0
var/sleep_time = 3
@@ -15,7 +16,7 @@
var/static_beam = 0
var/beam_type = /obj/effect/ebeam //must be subtype
-/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3)
+/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3,new_beam_color = null)
endtime = world.time+time
origin = beam_origin
origin_oldloc = get_turf(origin)
@@ -28,6 +29,8 @@
base_icon = new(beam_icon,beam_icon_state)
icon = beam_icon
icon_state = beam_icon_state
+ if(new_beam_color)
+ beam_color = new_beam_color
beam_type = btype
/datum/beam/proc/Start()
@@ -68,9 +71,12 @@
var/matrix/rot_matrix = matrix()
rot_matrix.Turn(Angle)
+ var/turf/T_target = get_turf(target) //Turfs are referenced instead of the objects directly so that beams will link between 2 objects inside other objects.
+ var/turf/T_origin = get_turf(origin)
+
//Translation vector for origin and target
- var/DX = (32*target.x+target.pixel_x)-(32*origin.x+origin.pixel_x)
- var/DY = (32*target.y+target.pixel_y)-(32*origin.y+origin.pixel_y)
+ var/DX = (32*T_target.x+target.pixel_x)-(32*T_origin.x+origin.pixel_x)
+ var/DY = (32*T_target.y+target.pixel_y)-(32*T_origin.y+origin.pixel_y)
var/N = 0
var/length = round(sqrt((DX)**2+(DY)**2)) //hypotenuse of the triangle formed by target and origin's displacement
@@ -78,6 +84,10 @@
if(QDELETED(src) || finished)
break
var/obj/effect/ebeam/X = new beam_type(origin_oldloc)
+
+ if(beam_color)
+ X.color = beam_color
+
X.owner = src
elements |= X
@@ -184,8 +194,8 @@
-/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3)
- var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time)
+/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3,beam_color = null)
+ var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time,beam_color)
spawn(0)
newbeam.Start()
return newbeam
diff --git a/code/datums/supplypacks/hospitality.dm b/code/datums/supplypacks/hospitality.dm
index 2c9bbbce51..c776317ffa 100644
--- a/code/datums/supplypacks/hospitality.dm
+++ b/code/datums/supplypacks/hospitality.dm
@@ -38,6 +38,7 @@
/obj/item/weapon/storage/box/glasses/shot,
/obj/item/weapon/storage/box/glasses/mug,
/obj/item/weapon/storage/box/glasses/meta,
+ /obj/item/weapon/storage/box/glasses/meta/metapint,
/obj/item/weapon/reagent_containers/food/drinks/shaker,
/obj/item/weapon/storage/box/glass_extras/straws,
/obj/item/weapon/storage/box/glass_extras/sticks
@@ -57,13 +58,13 @@
group = "Hospitality"
/datum/supply_pack/randomised/hospitality/pizza
- num_contained = 5
contains = list(
- /obj/item/pizzabox/margherita,
- /obj/item/pizzabox/mushroom,
- /obj/item/pizzabox/meat,
- /obj/item/pizzabox/vegetable,
- /obj/item/pizzabox/pineapple
+ /obj/random/pizzabox,
+ /obj/random/pizzabox,
+ /obj/random/pizzabox,
+ /obj/random/pizzabox,
+ /obj/random/pizzabox,
+ /obj/item/weapon/material/knife/plastic
)
name = "Surprise pack of five pizzas"
cost = 15
diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm
index 3edcbed200..1307b8f985 100644
--- a/code/datums/supplypacks/medical.dm
+++ b/code/datums/supplypacks/medical.dm
@@ -29,21 +29,21 @@
name = "BloodPack crate"
contains = list(/obj/item/weapon/storage/box/bloodpacks = 3)
cost = 10
- containertype = /obj/structure/closet/crate/nanocare
+ containertype = /obj/structure/closet/crate/nanomed
containername = "BloodPack crate"
/datum/supply_pack/med/bodybag
name = "Body bag crate"
contains = list(/obj/item/weapon/storage/box/bodybags = 3)
cost = 10
- containertype = /obj/structure/closet/crate/nanocare
+ containertype = /obj/structure/closet/crate/nanomed
containername = "Body bag crate"
/datum/supply_pack/med/cryobag
name = "Stasis bag crate"
contains = list(/obj/item/bodybag/cryobag = 3)
cost = 40
- containertype = /obj/structure/closet/crate/nanocare
+ containertype = /obj/structure/closet/crate/nanomed
containername = "Stasis bag crate"
/datum/supply_pack/med/surgery
@@ -109,7 +109,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3
)
cost = 10
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Medical surplus equipment"
access = access_medical
@@ -133,7 +133,7 @@
/obj/item/weapon/reagent_containers/syringe
)
cost = 50
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Chief medical officer equipment"
access = access_cmo
@@ -156,7 +156,7 @@
/obj/item/weapon/reagent_containers/syringe
)
cost = 20
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Medical Doctor equipment"
access = access_medical_equip
@@ -179,7 +179,7 @@
/obj/item/weapon/reagent_containers/syringe
)
cost = 20
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Chemist equipment"
access = access_chemistry
@@ -207,7 +207,7 @@
/obj/item/clothing/accessory/storage/white_vest
)
cost = 20
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Paramedic equipment"
access = access_medical_equip
@@ -226,7 +226,7 @@
/obj/item/weapon/cartridge/medical
)
cost = 20
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Psychiatrist equipment"
access = access_psychiatrist
@@ -247,7 +247,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 10
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Medical scrubs crate"
access = access_medical_equip
@@ -291,7 +291,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 10
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Medical uniform crate"
access = access_medical_equip
@@ -309,7 +309,7 @@
/obj/item/weapon/storage/box/gloves
)
cost = 50
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Medical biohazard equipment"
access = access_medical_equip
diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm
index db46de1e04..0aa29b7b9c 100644
--- a/code/datums/supplypacks/misc.dm
+++ b/code/datums/supplypacks/misc.dm
@@ -189,3 +189,12 @@
cost = 40
containertype = /obj/structure/closet/crate/zenghu
containername = "emergency rations"
+
+/datum/supply_pack/misc/reagentpump
+ name = "Machine - Pump"
+ contains = list(
+ /obj/machinery/pump = 1
+ )
+ cost = 60
+ containertype = /obj/structure/closet/crate/large/xion
+ containername = "pump crate"
diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm
index e9fa3f2d99..9414d6201d 100644
--- a/code/datums/supplypacks/supply.dm
+++ b/code/datums/supplypacks/supply.dm
@@ -39,7 +39,7 @@
/obj/item/clothing/head/soft/purple,
/obj/item/weapon/storage/belt/janitor,
/obj/item/clothing/shoes/galoshes,
- /obj/item/weapon/caution = 4,
+ /obj/item/clothing/suit/caution = 4,
/obj/item/weapon/storage/bag/trash,
/obj/item/device/lightreplacer,
/obj/item/weapon/reagent_containers/spray/cleaner,
diff --git a/code/datums/supplypacks/voidsuits.dm b/code/datums/supplypacks/voidsuits.dm
index b48f259cb6..90acd6661d 100644
--- a/code/datums/supplypacks/voidsuits.dm
+++ b/code/datums/supplypacks/voidsuits.dm
@@ -129,7 +129,7 @@
/obj/item/weapon/tank/oxygen = 2
)
cost = 45
- containertype = /obj/structure/closet/crate/secure/nanocare
+ containertype = /obj/structure/closet/crate/secure/nanomed
containername = "Medical Biohazard voidsuit crate"
access = access_medical_equip
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 39a5e142e0..a90104de19 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -110,28 +110,6 @@
item_state = "gift"
w_class = ITEMSIZE_LARGE
-/obj/item/weapon/caution
- desc = "Caution! Wet Floor!"
- name = "wet floor sign"
- icon = 'icons/obj/janitor.dmi'
- icon_state = "caution"
- force = 1.0
- throwforce = 3.0
- throw_speed = 1
- throw_range = 5
- w_class = ITEMSIZE_SMALL
- attack_verb = list("warned", "cautioned", "smashed")
-
-/obj/item/weapon/caution/cone
- desc = "This cone is trying to warn you of something!"
- name = "warning cone"
- icon_state = "cone"
-
-/obj/item/weapon/caution/cone/candy
- desc = "This cone is trying to warn you of something! It has been painted to look like candy corn."
- name = "candy cone"
- icon_state = "candycone"
-
/*/obj/item/weapon/syndicate_uplink
name = "station bounced radio"
desc = "Remain silent about this..."
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 0a851bed0b..554ab4d9b6 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1746,7 +1746,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
temp_closet.locked = 0
temp_closet.icon_state = "closed_unlocked"
for(var/obj/machinery/door_timer/temp_timer in src)
- temp_timer.releasetime = 1
+ temp_timer.timer_duration = 1
..()
/area/security/prison
@@ -1758,7 +1758,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
temp_closet.locked = 0
temp_closet.icon_state = "closed_unlocked"
for(var/obj/machinery/door_timer/temp_timer in src)
- temp_timer.releasetime = 1
+ temp_timer.timer_duration = 1
..()
/area/security/warden
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index e69ce8cfed..04075fe825 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -377,8 +377,11 @@ var/list/mob/living/forced_ambiance_list = new
/area/proc/play_ambience(var/mob/living/L, initial = TRUE)
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
- if(!(L && L.is_preference_enabled(/datum/client_preference/play_ambiance))) return
-
+ if(!(L && L.is_preference_enabled(/datum/client_preference/play_ambiance)))
+ return
+
+ var/volume_mod = L.get_preference_volume_channel(VOLUME_CHANNEL_AMBIENCE)
+
// If we previously were in an area with force-played ambiance, stop it.
if((L in forced_ambiance_list) && initial)
L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
@@ -392,6 +395,7 @@ var/list/mob/living/forced_ambiance_list = new
var/sound/chosen_ambiance = pick(forced_ambience)
if(!istype(chosen_ambiance))
chosen_ambiance = sound(chosen_ambiance, repeat = 1, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE_FORCED)
+ chosen_ambiance.volume *= volume_mod
L << chosen_ambiance
else
L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
@@ -399,7 +403,7 @@ var/list/mob/living/forced_ambiance_list = new
var/ambience_odds = L?.client.prefs.ambience_chance
if(prob(ambience_odds) && (world.time >= L.client.time_last_ambience_played + 1 MINUTE))
var/sound = pick(ambience)
- L << sound(sound, repeat = 0, wait = 0, volume = 50, channel = CHANNEL_AMBIENCE)
+ L << sound(sound, repeat = 0, wait = 0, volume = 50 * volume_mod, channel = CHANNEL_AMBIENCE)
L.client.time_last_ambience_played = world.time
/area/proc/gravitychange(var/gravitystate = 0)
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 083a90fc09..0136314d58 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -196,7 +196,7 @@ var/hadevent = 0
spawn(0) temp_glassairlock.prison_open()
for (var/obj/machinery/door_timer/temp_timer in A)
- temp_timer.releasetime = 1
+ temp_timer.timer_duration = 1
sleep(150)
command_announcement.Announce("Gr3y.T1d3 virus detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert")
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index b1ca510f1c..38f3a3448b 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -81,7 +81,7 @@
spawn_positions = 2
supervisors = "the Head of Security"
selection_color = "#601C1C"
- access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
+ access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks, access_brig) //Vorestation edit - access_brig
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
economic_modifier = 5
minimal_player_age = 3
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 7faf1115fe..0b7c96e08a 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -281,7 +281,7 @@ update_flag
/obj/machinery/portable_atmospherics/canister/tgui_data(mob/user)
var/list/data = list()
- data["canLabel"] = can_label ? 1 : 0
+ data["can_relabel"] = can_label ? 1 : 0
data["connected"] = connected_port ? 1 : 0
data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
data["releasePressure"] = round(release_pressure ? release_pressure : 0)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index f775bed4c3..f3c930fe78 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -442,7 +442,7 @@
\n
"}
- dat += text("Search Records
", src)
- dat += text("New Record
", src)
- dat += {"
-
| Records: | -
|---|
| Name | -ID | -Rank | -Fingerprints | -Criminal Status | -
|---|---|---|---|---|
| [] | ", background, src, R, R.fields["name"]) - dat += text("[] | ", R.fields["id"]) - dat += text("[] | ", R.fields["rank"]) - dat += text("[] | ", R.fields["fingerprint"]) - dat += text("[] |
| \
- Name: [active1.fields["name"]] \ - ID: [active1.fields["id"]] \n \ - Entity Classification: [active1.fields["brain_type"]] \n \ - Sex: [active1.fields["sex"]] \n \ - Age: [active1.fields["age"]] \n \ - Rank: [active1.fields["rank"]] \n \ - Fingerprint: [active1.fields["fingerprint"]] \n \ - Physical Status: [active1.fields["p_stat"]] \n \ - Mental Status: [active1.fields["m_stat"]] | \
- Photo: \ -
|
| Search Results for '[]': | ", tempname) - dat += {" -
|---|
| Name | -ID | -Rank | -Fingerprints | -Criminal Status | -
|---|---|---|---|---|
| [] | ", background, src, R, R.fields["name"]) - dat += text("[] | ", R.fields["id"]) - dat += text("[] | ", R.fields["rank"]) - dat += text("[] | ", R.fields["fingerprint"]) - dat += text("[] |