diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm
index 131eb8d8be..ace4cd5670 100644
--- a/code/ATMOSPHERICS/pipes.dm
+++ b/code/ATMOSPHERICS/pipes.dm
@@ -1130,7 +1130,7 @@ obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/u
var/datum/gas_mixture/int_air = return_air()
var/datum/gas_mixture/env_air = loc.return_air()
if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
- user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
+ user << "You cannot unwrench [src], it is too exerted due to internal pressure."
add_fingerprint(user)
return 1
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm
index 1d92062e25..c7387254d4 100644
--- a/code/ZAS/ZAS_Zones.dm
+++ b/code/ZAS/ZAS_Zones.dm
@@ -27,12 +27,6 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs
var/interactions_with_unsim = 0
var/progress = "nothing"
-
-/datum/gas_mixture/zone
- Del()
- CRASH("Something tried to delete a zone's air!")
- . = ..()
-
//CREATION AND DELETION
/zone/New(turf/start)
. = ..()
@@ -53,7 +47,7 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs
//Generate the gas_mixture for use in txhis zone by using the average of the gases
//defined at startup.
//Changed to try and find the source of the error.
- air = new /datum/gas_mixture/zone()
+ air = new
air.group_multiplier = contents.len
for(var/turf/simulated/T in contents)
if(!T.air)
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 6695fe4402..f69b2a35e3 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -100,6 +100,7 @@
return
if( !fire )
fire = 1
+ master.fire = 1 //used for firedoor checks
updateicon()
mouse_opacity = 0
for(var/obj/machinery/door/firedoor/D in all_doors)
@@ -122,6 +123,7 @@
/area/proc/firereset()
if (fire)
fire = 0
+ master.fire = 0 //used for firedoor checks
mouse_opacity = 0
updateicon()
for(var/obj/machinery/door/firedoor/D in all_doors)
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index 84360efe58..d7b4b1f96c 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -51,9 +51,9 @@
B.name = "Toolbox Manifesto"
if("homosexuality")
B.name = "Guys Gone Wild"
- if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
- B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
- H.setBrainLoss(100) // starts off retarded as fuck
+ //if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
+ // B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
+ // H.setBrainLoss(100) // starts off retarded as fuck
if("science")
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
else
@@ -152,4 +152,4 @@
ticker.Bible_deity_name = B.deity_name
feedback_set_details("religion_deity","[new_deity]")
feedback_set_details("religion_book","[new_book_style]")
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 95a6ec439b..2330ebcb74 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -67,7 +67,7 @@ var/global/datum/controller/occupations/job_master
proc/FreeRole(var/rank) //making additional slot on the fly
var/datum/job/job = GetJob(rank)
- if(job && job.current_positions >= job.total_positions)
+ if(job && job.current_positions >= job.total_positions && job.total_positions != -1)
job.total_positions++
return 1
return 0
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 47ebf869d7..3fd77b8b34 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -88,11 +88,11 @@
user << "Access denied."
return
- var/area/A = get_area(src)
- ASSERT(istype(A))
- if(A.master)
- A = A.master
- var/alarmed = A.air_doors_activated || A.fire
+ var/alarmed = 0
+
+ for(var/area/A in areas_added) //Checks if there are fire alarms in any areas associated with that firedoor
+ if(A.fire || A.air_doors_activated)
+ alarmed = 1
var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[src.name] as being your own fault, and you will be held accountable under the law." : ""]",\
"\The [src]", "Yes, [density ? "open" : "close"]", "No")
@@ -114,9 +114,13 @@
if(needs_to_close)
spawn(50)
+ alarmed = 0
+ for(var/area/A in areas_added) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle
+ if(A.fire || A.air_doors_activated)
+ alarmed = 1
if(alarmed)
nextstate = CLOSED
-
+ close()
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
add_fingerprint(user)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index eb59003ace..0a9dc69bac 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -153,7 +153,7 @@
if(I.type == /obj/item/device/analyzer)
user << "The water temperature seems to be [watertemp]."
if(istype(I, /obj/item/weapon/wrench))
- user << "You begin to adjust the temperature valve with the [I]."
+ user << "You begin to adjust the temperature valve with \the [I]."
if(do_after(user, 50))
switch(watertemp)
if("normal")
@@ -162,7 +162,7 @@
watertemp = "boiling"
if("boiling")
watertemp = "normal"
- user.visible_message("[user] adjusts the shower with the [I].", "You adjust the shower with the [I].")
+ user.visible_message("[user] adjusts the shower with \the [I].", "You adjust the shower with \the [I].")
add_fingerprint(user)
/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
@@ -354,7 +354,7 @@
if (istype(O, /obj/item/weapon/reagent_containers))
var/obj/item/weapon/reagent_containers/RG = O
RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
- user.visible_message("\blue [user] fills the [RG] using \the [src].","\blue You fill the [RG] using \the [src].")
+ user.visible_message("\blue [user] fills \the [RG] using \the [src].","\blue You fill \the [RG] using \the [src].")
return
else if (istype(O, /obj/item/weapon/melee/baton))
diff --git a/code/global.dm b/code/global.dm
index 68d1fe6aee..9fb6de1ce7 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -90,6 +90,7 @@ var/datum/engine_eject/engine_eject_control = null
var/host = null
var/aliens_allowed = 0
var/ooc_allowed = 1
+var/dsay_allowed = 1
var/dooc_allowed = 1
var/traitor_scaling = 1
//var/goonsay_allowed = 0
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index b0a62bcef2..3a5c7c2393 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -696,7 +696,7 @@ var/global/floorIsLava = 0
/datum/admins/proc/toggleooc()
set category = "Server"
- set desc="Toggle dis bitch"
+ set desc="Globally Toggles OOC"
set name="Toggle OOC"
ooc_allowed = !( ooc_allowed )
if (ooc_allowed)
@@ -707,6 +707,20 @@ var/global/floorIsLava = 0
message_admins("[key_name_admin(usr)] toggled OOC.", 1)
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/toggledsay()
+ set category = "Server"
+ set desc="Globally Toggles DSAY"
+ set name="Toggle DSAY"
+ dsay_allowed = !( dsay_allowed )
+ if (dsay_allowed)
+ world << "Deadchat has been globally enabled!"
+ else
+ world << "Deadchat has been globally disabled!"
+ log_admin("[key_name(usr)] toggled deadchat.")
+ message_admins("[key_name_admin(usr)] toggled deadchat.", 1)
+ feedback_add_details("admin_verb","TDSAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc
+
/datum/admins/proc/toggleoocdead()
set category = "Server"
set desc="Toggle dis bitch"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 49d0b60424..664b70bcff 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -55,6 +55,7 @@ var/list/admin_verbs_admin = list(
/client/proc/secrets,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
+ /datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
/datum/admins/proc/PlayerNotes,
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 05411337bc..2ea4ffcc61 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -179,7 +179,7 @@
//Atmospherics Rig (BS12)
/obj/item/clothing/head/helmet/space/rig/atmos
- desc = "A special helmet designed for work in a hazardou, low pressure environments. Has reduced radiation shielding and protective plating to allow for greater mobility."
+ desc = "A special helmet designed for work in a hazardous, low pressure environments. Has reduced radiation shielding and protective plating to allow for greater mobility."
name = "atmospherics hardsuit helmet"
icon_state = "rig0-atmos"
item_state = "atmos_helm"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index ad75be05ad..98f6e91e12 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -513,6 +513,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "Spawning as a mouse is currently disabled."
return
+ var/mob/dead/observer/M = usr
+ if(config.antag_hud_restricted && M.has_enabled_antagHUD == 1)
+ src << "antagHUD restrictions prevent you from spawning in as a mouse."
+ return
+
var/timedifference = world.time - client.time_died_as_mouse
if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
var/timedifference_text
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index 8a9f2a3b90..e2125ada66 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -57,6 +57,12 @@
src << "\red You have deadchat muted."
return
+ if(!src.client.holder)
+ if(!dsay_allowed)
+ src << "\red Deadchat is globally muted"
+ return
+
+
var/input
if(!message)
input = copytext(sanitize(input(src, "Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN)
diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm
index e26f2df722..d26de1f9a9 100644
--- a/code/modules/mob/living/carbon/monkey/diona.dm
+++ b/code/modules/mob/living/carbon/monkey/diona.dm
@@ -119,7 +119,7 @@
set desc = "Grow to a more complex form."
if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist)
- src << alert("You are currently not whitelisted to play an adult Diona.")
+ src << alert("You are currently not whitelisted to play as a full diona.")
return 0
if(donors.len < 5)
@@ -190,4 +190,4 @@
universal_speak = 1
src << "\green You feel your awareness expand, and realize you know how to speak with the creatures around you."
else
- src << "\green The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind."
\ No newline at end of file
+ src << "\green The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind."
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 325bff53f5..1e23637b56 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -124,11 +124,11 @@
/obj/item/broken_device
name = "broken component"
- icon = 'icons/robot_component.dmi'
+ icon = 'icons/obj/robot_component.dmi'
icon_state = "broken"
/obj/item/robot_parts/robot_component
- icon = 'icons/robot_component.dmi'
+ icon = 'icons/obj/robot_component.dmi'
icon_state = "working"
construction_time = 200
construction_cost = list("metal"=5000)
@@ -214,4 +214,4 @@
if(H.emagged && prob(5))
user.show_message("\red \t ERROR: INTERNAL SYSTEMS COMPROMISED",1)
src.add_fingerprint(user)
- return
+ return
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 3965c2c020..63ea3485bb 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -37,6 +37,11 @@
usr << "\red Speech is currently admin-disabled."
return
+ if(!src.client.holder)
+ if(!dsay_allowed)
+ src << "\red Deadchat is globally muted"
+ return
+
if(client && !(client.prefs.toggles & CHAT_DEAD))
usr << "\red You have deadchat muted."
return
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 885947f90d..2ff0125b7e 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -32,7 +32,7 @@ var/global/list/rad_collectors = list()
P.air_contents.toxins = 0
eject()
else
- P.air_contents.toxins -= 0.001*drainratio
+ P.air_contents.adjust(tx = -0.001*drainratio)
return
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 776e07e42c..b54c87c78f 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -43,7 +43,7 @@
/obj/machinery/chem_dispenser/process()
- if(recharged < 0)
+ if(recharged <= 0)
recharge()
recharged = 15
else
@@ -68,7 +68,7 @@
options[/obj/item/stack/sheet/mineral/gold] = "Wire a golden filament to fix it."
options[/obj/item/stack/sheet/plasteel] = "Surround the outside with a plasteel cover to fix it."
options[/obj/item/stack/sheet/rglass] = "Insert a pane of reinforced glass to fix it."
-
+ stat |= BROKEN
while(amount > 0)
amount -= 1
@@ -104,13 +104,12 @@
*
* @return nothing
*/
-/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
- if(stat & (BROKEN|NOPOWER)) return
- if(user.stat || user.restrained()) return
-
+/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main")
if(broken_requirements.len)
user << "[src] is broken. [broken_requirements[broken_requirements[1]]]"
return
+ if(stat & (BROKEN|NOPOWER)) return
+ if(user.stat || user.restrained()) return
// this is the data which will be sent to the ui
var/data[0]
@@ -194,6 +193,8 @@
else
user.drop_item()
del(B)
+ if(broken_requirements.len==0)
+ stat ^= BROKEN
return
if(src.beaker)
user << "Something is already loaded into the machine."
diff --git a/icons/robot_component.dmi b/icons/robot_component.dmi
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm
index 1d3efb00f7..abb33728a5 100644
--- a/maps/tgstation2.dmm
+++ b/maps/tgstation2.dmm
@@ -9129,7 +9129,7 @@
"dtC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
"dtD" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/lattice,/turf/space,/area)
"dtE" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/machinery/camera{c_tag = "Research Outpost Mass Spectrometry"; dir = 8; network = list("Research","SS13")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/research_outpost/spectro)
-"dtF" = (/obj/machinery/chem_dispenser{broken_on_spawn = 1; energy = 0; recharged = 5000},/obj/item/weapon/paper{info = "Until I can get one of the repair crews in from Orion to look at it, no-one is to touch this thing.
And when I find out who thought it would be a good idea to do that with the emitter from the lab, you're finished here!"; name = "Out of Order"},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample)
+"dtF" = (/obj/machinery/chem_dispenser,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample)
"dtG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample)
"dtH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample)
"dtI" = (/obj/machinery/light/small{dir = 4},/obj/machinery/power/apc{dir = 4; name = "Sample Preparation APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample)