diff --git a/code/ATMOSPHERICS/_atmospherics_helpers.dm b/code/ATMOSPHERICS/_atmospherics_helpers.dm
index f85fa84b93..d4de419ad0 100644
--- a/code/ATMOSPHERICS/_atmospherics_helpers.dm
+++ b/code/ATMOSPHERICS/_atmospherics_helpers.dm
@@ -130,7 +130,7 @@
var/total_specific_power = 0 //the power required to remove one mole of filterable gas
for (var/g in filtering)
var/ratio = source.gas[g]/total_filterable_moles //this converts the specific power per mole of pure gas to specific power per mole of scrubbed gas
- total_specific_power = specific_power_gas[g]*ratio
+ total_specific_power += specific_power_gas[g]*ratio
//Figure out how much of each gas to filter
if (isnull(total_transfer_moles))
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 7237cccbca..9ae50b11af 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -85,6 +85,9 @@ obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/a
return node.pipe_color
/obj/machinery/atmospherics/process()
+ last_flow_rate = 0
+ last_power_draw = 0
+
build_network()
/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 43874a64d9..561a2bf7df 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -17,6 +17,7 @@
var/frequency = 1439
var/datum/radio_frequency/radio_connection
+ var/hibernate = 0 //Do we even process?
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
var/list/scrubbing_gas = list("carbon_dioxide")
@@ -126,8 +127,8 @@
/obj/machinery/atmospherics/unary/vent_scrubber/process()
..()
- last_power_draw = 0
- last_flow_rate = 0
+ if (hibernate)
+ return 1
if (!node)
use_power = 0
@@ -149,6 +150,12 @@
power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating)
+ if(scrubbing && power_draw < 0 && controller_iteration > 10) //99% of all scrubbers
+ //Fucking hibernate because you ain't doing shit.
+ hibernate = 1
+ spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly
+ hibernate = 0
+
if (power_draw >= 0)
last_power_draw = power_draw
use_power(power_draw)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 41bb3bef2d..e345847c86 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -393,9 +393,9 @@
occupant.ckey = null
//Make an announcement and log the person entering storage.
- control_computer.frozen_crew += "[occupant.real_name]"
+ control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.assigned_role] - [worldtime2text()]"
- announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
+ announce.autosay("[occupant.real_name], [occupant.mind.assigned_role] [on_store_message]", "[on_store_name]")
visible_message("\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.", 3)
// Delete the mob.
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index b947f3f710..26cae206e9 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -137,7 +137,7 @@
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
- src << "" + create_text_tag("pm_out_alt", "", src) + " to : [msg]"
+ src << "" + create_text_tag("pm_out_alt", "", src) + " to Admin IRC: [msg]"
log_admin("PM: [key_name(src)]->IRC: [msg]")
for(var/client/X in admins)
diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm
index eed1e40ab2..fda22b17f9 100644
--- a/code/modules/economy/EFTPOS.dm
+++ b/code/modules/economy/EFTPOS.dm
@@ -100,7 +100,7 @@
else
dat += "Lock in new transaction
"
- dat += "Transaction purpose: [transaction_purpose]
"
+ dat += "Transaction purpose: [transaction_purpose]
"
dat += "Value: $[transaction_amount]
"
dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
"
dat += "Change access code
"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 2874d16d39..c8d5651b29 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -670,6 +670,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.images -= ghostimage //remove ourself
mob/dead/observer/MayRespawn(var/feedback = 0)
+ if(!client || !mind)
+ return 0
+ if(mind.current && mind.current.stat != DEAD)
+ if(feedback)
+ src << "Your non-dead body prevent you from respawning."
+ return 0
if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
if(feedback)
src << "antagHUD restrictions prevent you from respawning."
diff --git a/html/changelogs/PsiOmegaDelta-MayRespawn.yml b/html/changelogs/PsiOmegaDelta-MayRespawn.yml
new file mode 100644
index 0000000000..eff6f0e298
--- /dev/null
+++ b/html/changelogs/PsiOmegaDelta-MayRespawn.yml
@@ -0,0 +1,5 @@
+author: PsiOmegaDelta
+delete-after: True
+
+changes:
+ - bugfix: "Astral projecting mobs, such as wizards or cultists, may no longer respawn as something else while their body lives."