From 34d47b8580a65ee9bf149f8db6208b0a14701902 Mon Sep 17 00:00:00 2001 From: atermonera Date: Sat, 19 Jan 2019 16:45:46 -0800 Subject: [PATCH] Stasis bags don't murder patients --- code/game/objects/items/bodybag.dm | 4 +- .../objects/items/weapons/tanks/tank_types.dm | 51 +++++++++++-------- .../game/objects/items/weapons/tanks/tanks.dm | 2 +- .../structures/crates_lockers/closets.dm | 6 ++- html/changelogs/Ater - stasisbags.yml | 5 ++ 5 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 html/changelogs/Ater - stasisbags.yml diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index f79ac478b2..600ed118dc 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -144,8 +144,8 @@ var/stasis_level = 3 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1) var/obj/item/weapon/reagent_containers/syringe/syringe -/obj/structure/closet/body_bag/cryobag/New() - tank = new /obj/item/weapon/tank/emergency/oxygen/double(null) //It's in nullspace to prevent ejection when the bag is opened. +/obj/structure/closet/body_bag/cryobag/Initialize() + tank = new /obj/item/weapon/tank/stasis/oxygen(null) //It's in nullspace to prevent ejection when the bag is opened. ..() /obj/structure/closet/body_bag/cryobag/Destroy() diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 08e725cb8e..4aa6986d16 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -16,14 +16,14 @@ icon_state = "oxygen" distribute_pressure = ONE_ATMOSPHERE*O2STANDARD -/obj/item/weapon/tank/oxygen/New() - ..() - air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - return +/obj/item/weapon/tank/oxygen/Initialize() + ..() + air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + return /obj/item/weapon/tank/oxygen/examine(mob/user) if(..(user, 0) && air_contents.gas["oxygen"] < 10) - user << text("The meter on \the [src] indicates you are almost out of oxygen!") + to_chat(user, text("The meter on \the [src] indicates you are almost out of oxygen!")) //playsound(usr, 'sound/effects/alert.ogg', 50, 1) /obj/item/weapon/tank/oxygen/yellow @@ -42,7 +42,7 @@ desc = "A tank with an N2O/O2 gas mix." icon_state = "anesthetic" -/obj/item/weapon/tank/anesthetic/New() +/obj/item/weapon/tank/anesthetic/Initialize() ..() air_contents.gas["oxygen"] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD @@ -61,10 +61,10 @@ /obj/item/weapon/tank/air/examine(mob/user) if(..(user, 0) && air_contents.gas["oxygen"] < 1 && loc==user) - user << "The meter on the [src.name] indicates you are almost out of air!" + to_chat(user, "The meter on the [src.name] indicates you are almost out of air!") user << sound('sound/effects/alert.ogg') -/obj/item/weapon/tank/air/New() +/obj/item/weapon/tank/air/Initialize() ..() src.air_contents.adjust_multi("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, "nitrogen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) @@ -82,7 +82,7 @@ flags = CONDUCT slot_flags = null //they have no straps! -/obj/item/weapon/tank/phoron/New() +/obj/item/weapon/tank/phoron/Initialize() ..() src.air_contents.adjust_gas("phoron", (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) @@ -109,7 +109,7 @@ distribute_pressure = ONE_ATMOSPHERE*O2STANDARD slot_flags = SLOT_BACK //these ones have straps! -/obj/item/weapon/tank/vox/New() +/obj/item/weapon/tank/vox/Initialize() ..() air_contents.adjust_gas("phoron", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) @@ -137,15 +137,14 @@ icon_state = "emergency" gauge_icon = "indicator_emergency" -/obj/item/weapon/tank/emergency/oxygen/New() - ..() - src.air_contents.adjust_gas("oxygen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - - return +/obj/item/weapon/tank/emergency/oxygen/Initialize() + ..() + src.air_contents.adjust_gas("oxygen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + return /obj/item/weapon/tank/emergency/oxygen/examine(mob/user) if(..(user, 0) && air_contents.gas["oxygen"] < 0.2 && loc==user) - user << text("The meter on the [src.name] indicates you are almost out of air!") + to_chat(user, text("The meter on the [src.name] indicates you are almost out of air!")) user << sound('sound/effects/alert.ogg') /obj/item/weapon/tank/emergency/oxygen/engi @@ -159,13 +158,25 @@ gauge_icon = "indicator_emergency_double" volume = 10 +/obj/item/weapon/tank/stasis/oxygen // Stasis bags need to have initial pressure within safe bounds for human atmospheric pressure (NOT breath pressure) + name = "stasis oxygen tank" + desc = "Oxygen tank included in most stasis bag designs." + icon_state = "emergency_double" + gauge_icon = "indicator_emergency_double" + volume = 10 + +/obj/item/weapon/tank/stasis/oxygen/Initialize() + ..() + src.air_contents.adjust_gas("oxygen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + return + /obj/item/weapon/tank/emergency/nitrogen name = "emergency nitrogen tank" desc = "An emergency air tank hastily painted red." icon_state = "emergency_nitro" gauge_icon = "indicator_emergency" -/obj/item/weapon/tank/emergency/nitrogen/New() +/obj/item/weapon/tank/emergency/nitrogen/Initialize() ..() src.air_contents.adjust_gas("nitrogen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) @@ -181,7 +192,7 @@ icon_state = "emergency_nitro" gauge_icon = "indicator_emergency" -/obj/item/weapon/tank/emergency/phoron/New() +/obj/item/weapon/tank/emergency/phoron/Initialize() ..() src.air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) @@ -200,7 +211,7 @@ icon_state = "oxygen_fr" distribute_pressure = ONE_ATMOSPHERE*O2STANDARD -/obj/item/weapon/tank/nitrogen/New() +/obj/item/weapon/tank/nitrogen/Initialize() ..() src.air_contents.adjust_gas("nitrogen", (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) @@ -208,5 +219,5 @@ /obj/item/weapon/tank/nitrogen/examine(mob/user) if(..(user, 0) && air_contents.gas["nitrogen"] < 10) - user << text("The meter on \the [src] indicates you are almost out of nitrogen!") + to_chat(user, text("The meter on \the [src] indicates you are almost out of nitrogen!")) //playsound(user, 'sound/effects/alert.ogg', 50, 1) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 33c284c8d3..aa3c747d5d 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -58,7 +58,7 @@ var/list/global/tank_gauge_cache = list() src.proxyassembly = proxy -/obj/item/weapon/tank/New() +/obj/item/weapon/tank/Initialize() ..() src.init_proxy() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 1a6c495e38..99bd8c8957 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -113,7 +113,8 @@ src.icon_state = src.icon_opened src.opened = 1 playsound(src.loc, open_sound, 15, 1, -3) - density = !density + if(initial(density)) + density = !density return 1 /obj/structure/closet/proc/close() @@ -137,7 +138,8 @@ src.opened = 0 playsound(src.loc, close_sound, 15, 1, -3) - density = !density + if(initial(density)) + density = !density return 1 //Cham Projector Exception diff --git a/html/changelogs/Ater - stasisbags.yml b/html/changelogs/Ater - stasisbags.yml new file mode 100644 index 0000000000..11023943e9 --- /dev/null +++ b/html/changelogs/Ater - stasisbags.yml @@ -0,0 +1,5 @@ +author: Atermonera +delete-after: True +changes: + - bugfix: "Stasis bags don't squish organics with high pressure when organics try to seek shelter from flesh wounds." + - tweak: "Body- and stasis bags can be tread upon when open."