From cd13fa6379567646dec3987a2c351cc95aea01df Mon Sep 17 00:00:00 2001
From: Helg2 <93882977+Helg2@users.noreply.github.com>
Date: Wed, 17 Jul 2024 18:08:01 +0300
Subject: [PATCH] Deletes a bunch of unused atmos stuff and code. (#18)
* Update atmospherics.dm
* hmm
* Update area.dm
* Update species.dm
* hmm
* Update fire_alarm.dm
* Update MaintMode.tsx
* hm
* space flag + DEFINES
* Update debuffs.dm
* pressure icon
* Delete generic_old.dmi
* Update generic.dmi
* toxin_icon
* Update _mecha.dm
Signed-off-by: Helg2 <93882977+Helg2@users.noreply.github.com>
* 123
* Revert "123"
This reverts commit bdb4b9afbbc16ea85600e91e6a9954a7ae60fcc1.
---------
Signed-off-by: Helg2 <93882977+Helg2@users.noreply.github.com>
---
_maps/map_files/Arachne/TGS_Arachne.dmm | 13 +-
.../Pillar_of_Spring/TGS_Pillar_of_Spring.dmm | 22 +-
_maps/map_files/Sulaco/TGS_Sulaco.dmm | 23 +-
_maps/map_files/Theseus/TGS_Theseus.dmm | 18 +-
_maps/map_files/deltastation/deltastation.dmm | 4 +-
code/__DEFINES/atmospherics.dm | 56 +--
code/__DEFINES/dcs/signals.dm | 1 -
code/__DEFINES/equipment.dm | 2 -
code/__DEFINES/mecha.dm | 6 +-
code/__DEFINES/objects.dm | 26 --
code/_globalvars/bitfields.dm | 1 -
code/_onclick/hud/hud.dm | 4 -
code/_onclick/hud/human.dm | 14 -
code/datums/keybinding/mecha.dm | 7 -
code/datums/status_effects/debuffs.dm | 5 +
code/game/area/area.dm | 64 ---
code/game/area/general.dm | 1 -
code/game/atoms.dm | 25 --
.../objects/items/circuitboards/computer.dm | 10 -
code/game/objects/items/tanks/jetpack.dm | 5 -
code/game/objects/items/tanks/tank_types.dm | 58 ---
code/game/objects/items/tanks/tanks.dm | 67 ---
code/game/objects/machinery/OpTable.dm | 2 +-
.../machinery/computer/general_air_control.dm | 423 ------------------
code/game/objects/machinery/fire_alarm.dm | 13 +-
.../components/binary_devices/dp_vent_pump.dm | 30 +-
.../components/binary_devices/passive_gate.dm | 10 -
.../components/binary_devices/pump.dm | 11 +-
.../components/binary_devices/valve.dm | 2 -
.../components/binary_devices/volume_pump.dm | 10 +-
.../components/trinary_devices/filter.dm | 10 +-
.../components/trinary_devices/mixer.dm | 31 +-
.../components/unary_devices/vent_pump.dm | 7 -
.../machinery/pipes/heat_exchange/he_pipes.dm | 2 -
.../machinery/pipes/heat_exchange/junction.dm | 12 +-
code/modules/clothing/head/hardhat.dm | 4 +-
.../modules/clothing/spacesuits/spacesuits.dm | 4 +-
.../spacesuits/standard_space_suits.dm | 3 +-
code/modules/clothing/suits/armor.dm | 2 +-
code/modules/clothing/suits/utility.dm | 1 -
code/modules/cm_preds/yaut_mask.dm | 2 +-
code/modules/codex/entries/clothing_codex.dm | 3 -
code/modules/hydroponics/vines.dm | 16 -
code/modules/mob/living/brain/life.dm | 28 --
code/modules/mob/living/carbon/human/human.dm | 12 +-
code/modules/mob/living/carbon/human/life.dm | 1 -
.../carbon/human/life/handle_environment.dm | 49 --
.../human/life/handle_regular_hud_updates.dm | 10 -
.../living/carbon/human/life/life_helpers.dm | 40 --
.../mob/living/carbon/human/species.dm | 8 -
.../mob/living/carbon/xenomorph/life.dm | 14 -
code/modules/mob/living/living.dm | 7 -
code/modules/vehicles/mecha/_mecha.dm | 20 +-
code/modules/vehicles/mecha/combat/gygax.dm | 2 -
.../modules/vehicles/mecha/combat/marauder.dm | 1 -
code/modules/vehicles/mecha/combat/phazon.dm | 1 -
.../vehicles/mecha/combat/savannah_ivanov.dm | 1 -
.../mecha/equipment/tools/other_tools.dm | 1 -
code/modules/vehicles/mecha/mecha_actions.dm | 23 -
.../vehicles/mecha/mecha_control_console.dm | 2 -
code/modules/vehicles/mecha/mecha_damage.dm | 22 +-
code/modules/vehicles/mecha/mecha_defense.dm | 4 -
code/modules/vehicles/mecha/mecha_movement.dm | 12 -
code/modules/vehicles/mecha/mecha_ui.dm | 37 --
code/modules/vehicles/mecha/working/ripley.dm | 5 +-
icons/mob/screen/generic.dmi | Bin 125848 -> 113084 bytes
icons/mob/screen/generic_old.dmi | Bin 26488 -> 0 bytes
.../tgui/interfaces/Mecha/MaintMode.tsx | 12 -
.../tgui/interfaces/Mecha/MechStatPane.tsx | 66 +--
tgui/packages/tgui/interfaces/Mecha/data.ts | 17 -
70 files changed, 56 insertions(+), 1369 deletions(-)
delete mode 100644 icons/mob/screen/generic_old.dmi
diff --git a/_maps/map_files/Arachne/TGS_Arachne.dmm b/_maps/map_files/Arachne/TGS_Arachne.dmm
index 1ebe4152ea9..ef0e2bf67fe 100644
--- a/_maps/map_files/Arachne/TGS_Arachne.dmm
+++ b/_maps/map_files/Arachne/TGS_Arachne.dmm
@@ -8540,9 +8540,7 @@
/area/mainship/medical/lower_medical)
"hot" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- name = "Oxygen Supply Console";
- output_tag = "oxyvent";
- sensors = list("oxy_sensor"="Tank")
+ name = "Oxygen Supply Console"
},
/turf/open/floor/mainship/floor,
/area/mainship/engineering/starboard_atmos)
@@ -20993,10 +20991,7 @@
/area/mainship/squads/general)
"rrK" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- input_tag = "mix_in";
- name = "Mixed Air Control";
- output_tag = "mix_out";
- sensors = list("mix_sensor"="Tank")
+ name = "Mixed Air Control"
},
/turf/open/floor/mainship/floor,
/area/mainship/engineering/starboard_atmos)
@@ -26876,9 +26871,7 @@
/area/mainship/command/corporateliaison)
"wzb" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- name = "Nitrogen Control Console";
- output_tag = "nit_out";
- sensors = list("nit_sensor"="Tank")
+ name = "Nitrogen Control Console"
},
/turf/open/floor/mainship/floor,
/area/mainship/engineering/starboard_atmos)
diff --git a/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm b/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm
index a4fb1492145..309d2fa5d40 100644
--- a/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm
+++ b/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm
@@ -11793,10 +11793,7 @@
/area/mainship/command/self_destruct)
"oYv" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- frequency = 1443;
- name = "Lower Nitrogen Control Console";
- output_tag = "nit_lower_out";
- sensors = list("nit_sensor"="Tank")
+ name = "Lower Nitrogen Control Console"
},
/turf/open/floor/mainship/mono,
/area/mainship/engineering/port_atmos)
@@ -14821,10 +14818,7 @@
/area/mainship/medical/chemistry)
"sGA" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- frequency = 1443;
- name = "Lower Oxygen Supply Console";
- output_tag = "oxygen_lower_out";
- sensors = list("oxy_sensor"="Tank")
+ name = "Lower Oxygen Supply Console"
},
/turf/open/floor/mainship/mono,
/area/mainship/engineering/port_atmos)
@@ -15132,11 +15126,7 @@
/area/mainship/living/grunt_rnr)
"tfK" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- frequency = 1443;
- input_tag = "mix_lower_in";
- name = "Lower Mixed Air Control";
- output_tag = "mix_lower_out";
- sensors = list("mix_sensor"="Tank")
+ name = "Lower Mixed Air Control"
},
/obj/machinery/light/mainship{
dir = 1
@@ -18223,11 +18213,7 @@
/area/mainship/hallways/stern_hallway)
"wUx" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- frequency = 1443;
- input_tag = "waste_lower_in";
- name = "Lower Deck Waste Tank Control";
- output_tag = "waste_lower_out";
- sensors = list("waste_sensor"="Tank")
+ name = "Lower Deck Waste Tank Control"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{
dir = 1
diff --git a/_maps/map_files/Sulaco/TGS_Sulaco.dmm b/_maps/map_files/Sulaco/TGS_Sulaco.dmm
index 5248e738dd2..ec8ca33333c 100644
--- a/_maps/map_files/Sulaco/TGS_Sulaco.dmm
+++ b/_maps/map_files/Sulaco/TGS_Sulaco.dmm
@@ -1567,10 +1567,7 @@
/area/sulaco/engineering/atmos)
"afZ" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- input_tag = "waste_in";
- name = "Waste Tank Control";
- output_tag = "waste_out";
- sensors = list("waste_sensor"="Tank")
+ name = "Waste Tank Control"
},
/turf/open/floor/prison/yellow{
dir = 4
@@ -1666,9 +1663,7 @@
dir = 1
},
/obj/machinery/computer/general_air_control/large_tank_control{
- name = "Oxygen Supply Console";
- output_tag = "oxyvent";
- sensors = list("oxy_sensor"="Tank")
+ name = "Oxygen Supply Console"
},
/turf/open/floor/prison/yellow{
dir = 1
@@ -1728,10 +1723,7 @@
/area/sulaco/engineering/atmos)
"aih" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- input_tag = "mix_in";
- name = "Mixed Air Control";
- output_tag = "mix_out";
- sensors = list("mix_sensor"="Tank")
+ name = "Mixed Air Control"
},
/obj/machinery/light/mainship{
dir = 1
@@ -1742,9 +1734,7 @@
/area/sulaco/engineering/atmos)
"aii" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- name = "Nitrogen Control Console";
- output_tag = "nit_out";
- sensors = list("nit_sensor"="Tank")
+ name = "Nitrogen Control Console"
},
/turf/open/floor/prison/yellow{
dir = 1
@@ -4296,10 +4286,7 @@
/area/sulaco/engineering/engine_monitoring)
"awf" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- input_tag = "cooling_in";
- name = "Core Cooling";
- output_tag = "cooling_out";
- sensors = list("core_sensor"="Tank")
+ name = "Core Cooling"
},
/turf/open/floor/prison/darkyellow/corner,
/area/sulaco/engineering/engine_monitoring)
diff --git a/_maps/map_files/Theseus/TGS_Theseus.dmm b/_maps/map_files/Theseus/TGS_Theseus.dmm
index 9565f85be1b..20fa789152b 100644
--- a/_maps/map_files/Theseus/TGS_Theseus.dmm
+++ b/_maps/map_files/Theseus/TGS_Theseus.dmm
@@ -440,10 +440,7 @@
/area/mainship/hull/starboard_hull)
"abK" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- input_tag = "waste_lower_in";
- name = "Lower Deck Waste Tank Control";
- output_tag = "waste_lower_out";
- sensors = list("waste_sensor"="Tank")
+ name = "Lower Deck Waste Tank Control"
},
/turf/open/floor/mainship/orange,
/area/mainship/hull/starboard_hull)
@@ -716,9 +713,7 @@
"acF" = (
/obj/machinery/air_alarm,
/obj/machinery/computer/general_air_control/large_tank_control{
- name = "Lower Oxygen Supply Console";
- output_tag = "oxygen_lower_out";
- sensors = list("oxy_sensor"="Tank")
+ name = "Lower Oxygen Supply Console"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{
dir = 4
@@ -732,9 +727,7 @@
dir = 1
},
/obj/machinery/computer/general_air_control/large_tank_control{
- name = "Lower Nitrogen Control Console";
- output_tag = "nit_lower_out";
- sensors = list("nit_sensor"="Tank")
+ name = "Lower Nitrogen Control Console"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{
dir = 4
@@ -754,10 +747,7 @@
/area/mainship/hull/port_hull)
"acJ" = (
/obj/machinery/computer/general_air_control/large_tank_control{
- input_tag = "mix_lower_in";
- name = "Lower Mixed Air Control";
- output_tag = "mix_lower_out";
- sensors = list("mix_sensor"="Tank")
+ name = "Lower Mixed Air Control"
},
/turf/open/floor/mainship/orange{
dir = 5
diff --git a/_maps/map_files/deltastation/deltastation.dmm b/_maps/map_files/deltastation/deltastation.dmm
index 0e90c5fbff0..3fa843c866e 100644
--- a/_maps/map_files/deltastation/deltastation.dmm
+++ b/_maps/map_files/deltastation/deltastation.dmm
@@ -95001,7 +95001,7 @@
/turf/closed/wall,
/area/deltastation/maintenance/port)
"tpg" = (
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{
+/obj/machinery/atmospherics/components/trinary/mixer/airmix{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
@@ -102328,7 +102328,7 @@
/area/deltastation/cargo/sorting)
"uMn" = (
/obj/effect/turf_decal/tile/transparent/neutral/fourcorners,
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse,
+/obj/machinery/atmospherics/components/trinary/mixer/airmix,
/obj/effect/turf_decal/warning_stripes/box/empty,
/turf/open/floor/iron,
/area/deltastation/engineering/atmos)
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index fb243c58a20..8d6fa9723ed 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -1,11 +1,4 @@
-
-// Pressure limits.
-#define HAZARD_HIGH_PRESSURE 550 //This determins at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant)
-#define WARNING_HIGH_PRESSURE 325 //This determins when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE)
-#define WARNING_LOW_PRESSURE 50 //This is when the gray low pressure icon is displayed. (it is 2.5 * HAZARD_LOW_PRESSURE)
-#define HAZARD_LOW_PRESSURE 20 //This is when the black ultra-low pressure icon is displayed. (This one is set as a constant)
-
-#define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 //This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount.
+#define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 //This is used in reagents that affect body temperature. Temperature damage is multiplied by this amount.
#define BODYTEMP_NORMAL 310.15 //The natural temperature for a body
#define BODYTEMP_AUTORECOVERY_DIVISOR 20 //This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive.
@@ -23,64 +16,17 @@
#define BODYTEMP_COLD_DAMAGE_LIMIT_TWO 240.15
#define BODYTEMP_COLD_DAMAGE_LIMIT_THREE 120.15
-#define PRESSURE_DAMAGE_COEFFICIENT 4 ///The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
-#define MAX_HIGH_PRESSURE_DAMAGE 4 ///Maximum amount of damage someone can take from being in a too-high pressure area
-#define LOW_PRESSURE_DAMAGE 2 ///The amounb of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
-
-
-#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
-#define ONE_ATMOSPHERE 101.325 //kPa
-#define IDEAL_GAS_ENTROPY_CONSTANT 1164 //(mol^3 * s^3) / (kg^3 * L). Equal to (4*pi/(avrogadro's number * planck's constant)^2)^(3/2) / (avrogadro's number * 1000 Liters per m^3).
-
-
-#define CELL_VOLUME 2500 //liters in a cell
-#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
-
-#define O2STANDARD 0.21
-#define N2STANDARD 0.79
-
-
-#define MIN_TOXIN_DAMAGE 1 //This and MAX_TOXIN_DAMAGE are for when a mob breathes poisonous air
-#define MAX_TOXIN_DAMAGE 10 //This and MIN_TOXIN_DAMAGE are for when a mob breathes poisonous air
-
-#define SPEED_OF_LIGHT 3e8 //not exact but hey!
-#define SPEED_OF_LIGHT_SQ 9e+16
-#define FIRE_DAMAGE_MODIFIER 0.0215 //Higher values result in more external fire damage to the skin (default 0.0215)
-#define AIR_DAMAGE_MODIFIER 2.025 //More means less damage from hot air scalding lungs, less = more damage. (default 2.025)
-
#define T0C 273.15 // 0degC
#define T20C 293.15 // 20degC
#define TCMB 2.7 // -270.3degC
#define ICE_COLONY_TEMPERATURE 255.15 //-18degC
-#define GAS_TYPE_AIR "air"
-#define GAS_TYPE_OXYGEN "oxygen"
-#define GAS_TYPE_NITROGEN "nitrogen"
-#define GAS_TYPE_N2O "anesthetic"
-#define GAS_TYPE_PHORON "phoron"
-#define GAS_TYPE_CO2 "carbon dioxyde"
-
-#define RADIATION_SPEED_COEFFICIENT 0.1
-
-//PIPES
-//Atmos pipe limits
-#define MAX_OUTPUT_PRESSURE 4500 // (kPa) What pressure pumps and powered equipment max out at.
-#define MAX_TRANSFER_RATE 200 // (L/s) Maximum speed powered equipment can work at.
-
//used for device_type vars
#define UNARY 1
#define BINARY 2
#define TRINARY 3
#define QUATERNARY 4
-
-//HEAT TRANSFER COEFFICIENTS
-//Must be between 0 and 1. Values closer to 1 equalize temperature faster
-//Should not exceed 0.4 else strange heat flow occur
-#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0
-#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4
-#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 //a hack for now
-
//MULTIPIPES
//IF YOU EVER CHANGE THESE CHANGE SPRITES TO MATCH.
#define PIPING_LAYER_MIN 1
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 6594625647e..5631aa5e166 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -731,7 +731,6 @@
#define COMSIG_KB_SELFHARM "keybind_selfharm"
// mecha keybinds
-#define COMSIG_MECHABILITY_TOGGLE_INTERNALS "mechability_toggle_internals"
#define COMSIG_MECHABILITY_TOGGLE_STRAFE "mechability_toggle_strafe"
#define COMSIG_MECHABILITY_VIEW_STATS "mechability_view_stats"
#define COMSIG_MECHABILITY_SMOKE "mechability_smoke"
diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm
index 7e5d2380779..250d7559763 100644
--- a/code/__DEFINES/equipment.dm
+++ b/code/__DEFINES/equipment.dm
@@ -126,9 +126,7 @@
//HELMET AND MASK======================================================================================
//SUITS AND HELMETS====================================================================================
-//To successfully stop taking all pressure damage you must have both a suit and head item with this flag.
#define BLOCKSHARPOBJ (1<<6) //From /tg: prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
-#define NOPRESSUREDMAGE (1<<7) //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage.
#define NOQUICKEQUIP (1<<8) // Prevents the item from being handled via quick-equip hotkeys. Can still manipulate the inventory and be inserted into the slot from the hand, however.
diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm
index f2195ed8b59..36bd0cbff24 100644
--- a/code/__DEFINES/mecha.dm
+++ b/code/__DEFINES/mecha.dm
@@ -1,8 +1,6 @@
#define MECHA_INT_FIRE (1<<0)
-#define MECHA_INT_TEMP_CONTROL (1<<1)
-#define MECHA_INT_SHORT_CIRCUIT (1<<2)
-#define MECHA_INT_TANK_BREACH (1<<3)
-#define MECHA_INT_CONTROL_LOST (1<<4)
+#define MECHA_INT_SHORT_CIRCUIT (1<<1)
+#define MECHA_INT_CONTROL_LOST (1<<2)
#define ADDING_ACCESS_POSSIBLE (1<<0)
#define ADDING_MAINT_ACCESS_POSSIBLE (1<<1)
diff --git a/code/__DEFINES/objects.dm b/code/__DEFINES/objects.dm
index 2a6fcbce56a..4bc5005b230 100644
--- a/code/__DEFINES/objects.dm
+++ b/code/__DEFINES/objects.dm
@@ -1,27 +1,6 @@
// Doors!
#define DOOR_CRUSH_DAMAGE 10
-/*
- Atmos Machinery
-*/
-#define MAX_SIPHON_FLOWRATE 2500 //L/s This can be used to balance how fast a room is siphoned. Anything higher than CELL_VOLUME has no effect.
-#define MAX_SCRUBBER_FLOWRATE 200 //L/s Max flow rate when scrubbing from a turf.
-
-//These balance how easy or hard it is to create huge pressure gradients with pumps and filters. Lower values means it takes longer to create large pressures differences.
-//Has no effect on pumping gasses from high pressure to low, only from low to high. Must be between 0 and 1.
-#define ATMOS_PUMP_EFFICIENCY 2.5
-#define ATMOS_FILTER_EFFICIENCY 2.5
-
-//will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance.
-#define MINUMUM_MOLES_TO_PUMP 0.01
-#define MINUMUM_MOLES_TO_FILTER 0.1
-
-//The flow rate/effectiveness of various atmos devices is limited by their internal volume, so for many atmos devices these will control maximum flow rates in L/s
-#define ATMOS_DEFAULT_VOLUME_PUMP 200 //L
-#define ATMOS_DEFAULT_VOLUME_FILTER 200 //L
-#define ATMOS_DEFAULT_VOLUME_MIXER 200 //L
-#define ATMOS_DEFAULT_VOLUME_PIPE 70 //L
-
// bitflags for machine stat variable
#define BROKEN (1<<0)
#define NOPOWER (1<<1)
@@ -56,7 +35,6 @@ GLOBAL_LIST_INIT(restricted_camera_networks, list( //Those networks can only be
"NUKE"
))
-
// Diagonal movement for movable atoms
#define FIRST_DIAG_STEP 1
#define SECOND_DIAG_STEP 2
@@ -68,14 +46,12 @@ GLOBAL_LIST_INIT(restricted_camera_networks, list( //Those networks can only be
#define SHUTTLE_COOLING_FACTOR_RECHARGE 0.5
#define SHUTTLE_FUEL_ENHANCE_FACTOR_TRAVEL 0.75
-
//sharp item defines
#define IS_NOT_SHARP_ITEM 0
#define IS_SHARP_ITEM_SIMPLE 1 //not easily usable to cut or slice. e.g. shard, wirecutters, spear
#define IS_SHARP_ITEM_ACCURATE 2 //knife, scalpel
#define IS_SHARP_ITEM_BIG 3 //fireaxe, hatchet, energy sword
-
//pry capable item defines
#define IS_PRY_CAPABLE_SIMPLE 1
#define IS_PRY_CAPABLE_CROWBAR 2 //actual crowbar
@@ -152,13 +128,11 @@ GLOBAL_LIST_INIT(restricted_camera_networks, list( //Those networks can only be
#define SCOPE_RAIL_MINI 0.2
#define SCOPE_RAIL_SNIPER 0.5
-
//Hypospray
#define HYPOSPRAY_INJECT_MODE_DRAW 0
#define HYPOSPRAY_INJECT_MODE_INJECT 1
-
//Lighter
#define LIGHTER_LUMINOSITY 2
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 9902c088eaf..01168c7f697 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -208,7 +208,6 @@ GLOBAL_LIST_INIT(bitfields, list(
"COVERMOUTH" = COVERMOUTH,
"BLOCKGASEFFECT" = BLOCKGASEFFECT,
"BLOCKSHARPOBJ" = BLOCKSHARPOBJ,
- "NOPRESSUREDMAGE" = NOPRESSUREDMAGE,
"NOQUICKEQUIP" = NOQUICKEQUIP
),
"flags_armor_features" = list(
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index e0137729ebe..47c134ebf35 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -40,8 +40,6 @@
var/atom/movable/screen/throw_icon
var/atom/movable/screen/rest_icon
var/atom/movable/screen/oxygen_icon
- var/atom/movable/screen/pressure_icon
- var/atom/movable/screen/toxin_icon
var/atom/movable/screen/healths
var/atom/movable/screen/stamina_hud/staminas
var/atom/movable/screen/fire_icon
@@ -119,8 +117,6 @@
pull_icon = null
throw_icon = null
oxygen_icon = null
- pressure_icon = null
- toxin_icon = null
healths = null
staminas = null
fire_icon = null
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 3f7de749958..ce706a95f75 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -146,12 +146,6 @@
oxygen_icon = new /atom/movable/screen/oxygen()
infodisplay += oxygen_icon
- toxin_icon = new /atom/movable/screen()
- toxin_icon.icon_state = "tox0"
- toxin_icon.name = "toxin"
- toxin_icon.screen_loc = ui_toxin
- infodisplay += toxin_icon
-
fire_icon = new /atom/movable/screen/fire()
infodisplay += fire_icon
@@ -161,18 +155,10 @@
staminas = new
infodisplay += staminas
- if(hud_data.has_pressure)
- pressure_icon = new /atom/movable/screen()
- pressure_icon.icon_state = "pressure0"
- pressure_icon.name = "pressure"
- pressure_icon.screen_loc = ui_pressure
- infodisplay += pressure_icon
-
if(hud_data.has_bodytemp)
bodytemp_icon = new /atom/movable/screen/bodytemp()
infodisplay += bodytemp_icon
-
if(hud_data.has_nutrition)
nutrition_icon = new /atom/movable/screen()
nutrition_icon.icon_state = "nutrition0"
diff --git a/code/datums/keybinding/mecha.dm b/code/datums/keybinding/mecha.dm
index 566b70d8ca4..571da375c91 100644
--- a/code/datums/keybinding/mecha.dm
+++ b/code/datums/keybinding/mecha.dm
@@ -2,13 +2,6 @@
category = CATEGORY_MECHA
weight = WEIGHT_MOB
-/datum/keybinding/mecha/mech_toggle_internals
- name = "mech_toggle_internals"
- full_name = "Toggle Internals"
- description = "Toggle the internal ventilation on your mecha"
- keybind_signal = COMSIG_MECHABILITY_TOGGLE_INTERNALS
- hotkey_keys = list("I")
-
/datum/keybinding/mecha/mech_toggle_strafe
name = "mech_toggle_strafe"
full_name = "Toggle Strafe"
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 4a024481fd6..2b91f168c1e 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -443,6 +443,7 @@
/datum/status_effect/spacefreeze
id = "spacefreeze"
+ alert_type = /atom/movable/screen/alert/status_effect/spacefreeze
/datum/status_effect/spacefreeze/on_creation(mob/living/new_owner)
. = ..()
@@ -451,6 +452,10 @@
/datum/status_effect/spacefreeze/tick()
owner.adjustFireLoss(40)
+/atom/movable/screen/alert/status_effect/spacefreeze
+ name = "Spacefreeze"
+ desc = "The space is freezing you to death!"
+
/datum/status_effect/spacefreeze/light
id = "spacefreeze_light"
diff --git a/code/game/area/area.dm b/code/game/area/area.dm
index 78637fd5e7b..523665a9b27 100644
--- a/code/game/area/area.dm
+++ b/code/game/area/area.dm
@@ -32,8 +32,6 @@
var/poweralm = TRUE
var/lightswitch = TRUE
- var/gas_type = GAS_TYPE_AIR
- var/pressure = ONE_ATMOSPHERE
var/temperature = T20C
var/parallax_movedir = 0
@@ -70,7 +68,6 @@
GLOB.areas_by_type[type] = src
return ..()
-
/area/Initialize(mapload, ...)
icon_state = "" //Used to reset the icon overlay, I assume.
layer = AREAS_LAYER
@@ -87,36 +84,28 @@
if(!static_lighting)
blend_mode = BLEND_MULTIPLY
-
reg_in_areas_in_z()
-
update_base_lighting()
-
return INITIALIZE_HINT_LATELOAD
-
/area/LateInitialize()
power_change() // all machines set to current power level, also updates icon
-
/area/Destroy()
if(GLOB.areas_by_type[type] == src)
GLOB.areas_by_type[type] = null
STOP_PROCESSING(SSobj, src)
return ..()
-
/area/Entered(atom/movable/arrived, atom/old_loc)
set waitfor = FALSE
SEND_SIGNAL(src, COMSIG_AREA_ENTERED, arrived, old_loc)
SEND_SIGNAL(arrived, COMSIG_ENTER_AREA, src, old_loc,) //The atom that enters the area
-
/area/Exited(atom/movable/leaver, direction)
SEND_SIGNAL(src, COMSIG_AREA_EXITED, leaver, direction)
SEND_SIGNAL(leaver, COMSIG_EXIT_AREA, src, direction) //The atom that exits the area
-
/area/proc/reg_in_areas_in_z()
if(!length(contents))
return
@@ -136,13 +125,10 @@
areas_in_z["[z]"] = list()
areas_in_z["[z]"] += src
-
-
// A hook so areas can modify the incoming args
/area/proc/PlaceOnTopReact(list/new_baseturfs, turf/fake_turf_type, flags)
return flags
-
/area/proc/poweralert(state, obj/source)
if(state == poweralm)
return
@@ -158,29 +144,6 @@
else
SA.triggerAlarm("Power", src, null, source)
-
-/area/proc/atmosalert(danger_level)
- if(danger_level != atmosalm)
- if (danger_level < 1 && atmosalm >= 1)
- //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise
- air_doors_open()
-
- if (danger_level < 2 && atmosalm >= 2)
- for(var/obj/machinery/computer/station_alert/a in GLOB.machines)
- a.cancelAlarm("Atmosphere", src, src)
-
- if (danger_level >= 2 && atmosalm < 2)
- var/list/cameras = list()
- for(var/obj/machinery/computer/station_alert/a in GLOB.machines)
- a.triggerAlarm("Atmosphere", src, cameras, src)
- air_doors_close()
-
- atmosalm = danger_level
-
- return TRUE
- return FALSE
-
-
/area/proc/air_doors_close()
for(var/obj/machinery/door/firedoor/E in all_fire_doors)
if(E.blocked)
@@ -191,7 +154,6 @@
else if(!E.density)
E.close()
-
/area/proc/air_doors_open()
for(var/obj/machinery/door/firedoor/E in all_fire_doors)
if(E.blocked)
@@ -202,7 +164,6 @@
else if(E.density)
E.open()
-
/area/proc/firealert()
if(name == "Space") //no fire alarms in space
return
@@ -220,7 +181,6 @@
for (var/obj/machinery/computer/station_alert/a in GLOB.machines)
a.triggerAlarm("Fire", src, cameras, src)
-
/area/proc/firereset()
if(flags_alarm_state & ALARM_WARNING_FIRE)
flags_alarm_state &= ~ALARM_WARNING_FIRE
@@ -237,7 +197,6 @@
for(var/obj/machinery/computer/station_alert/a in GLOB.machines)
a.cancelAlarm("Fire", src, src)
-
/area/update_icon()
var/I //More important == bottom. Fire normally takes priority over everything.
if(flags_alarm_state && (!requires_power || power_environ)) //It either doesn't require power or the environment is powered. And there is an alarm.
@@ -249,7 +208,6 @@
if(icon_state != I) icon_state = I //If the icon state changed, change it. Otherwise do nothing.
-
/area/proc/powered(chan)
if(!requires_power)
return TRUE
@@ -264,16 +222,13 @@
return power_light
if(ENVIRON)
return power_environ
-
return FALSE
-
/area/proc/power_change()
for(var/obj/machinery/M in src)
M.power_change()
update_icon()
-
/area/proc/usage(chan)
var/used = 0
switch(chan)
@@ -287,13 +242,11 @@
used += used_light + used_equip + used_environ
return used
-
/area/proc/clear_usage()
used_equip = 0
used_light = 0
used_environ = 0
-
/area/proc/use_power(amount, chan)
switch(chan)
if(EQUIP)
@@ -302,20 +255,3 @@
used_light += amount
if(ENVIRON)
used_environ += amount
-
-
-
-/area/return_air()
- return list(gas_type, temperature, pressure)
-
-
-/area/return_pressure()
- return pressure
-
-
-/area/return_temperature()
- return temperature
-
-
-/area/return_gas()
- return gas_type
diff --git a/code/game/area/general.dm b/code/game/area/general.dm
index 51f7079f488..61fa5ed9343 100644
--- a/code/game/area/general.dm
+++ b/code/game/area/general.dm
@@ -9,7 +9,6 @@
power_environ = 0
ambience = list('sound/ambience/ambispace.ogg')
temperature = TCMB
- pressure = 0
flags_area = NO_DROPPOD
///What type of debuff do we apply when someone enters this area?
var/debuff_type = /datum/status_effect/spacefreeze
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index eb59ecc9272..49375d5c8f6 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -148,31 +148,6 @@ directive is properly returned.
//===========================================================================
-
-
-//atmos procs
-
-//returns the atmos info relevant to the object (gas type, temperature, and pressure)
-/atom/proc/return_air()
- if(loc)
- return loc.return_air()
- else
- return null
-
-
-/atom/proc/return_pressure()
- if(loc)
- return loc.return_pressure()
-
-/atom/proc/return_temperature()
- if(loc)
- return loc.return_temperature()
-
-//returns the gas mix type
-/atom/proc/return_gas()
- if(loc)
- return loc.return_gas()
-
///returns if we can melt an object, but also the speed at which it happens. 1 just means we melt it. 0,5 means we need a higher strength acid. higher than 1 just makes it melt faster
/atom/proc/dissolvability(acid_strength)
return 1
diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm
index 65e8a0371e7..be0f0725207 100644
--- a/code/game/objects/items/circuitboards/computer.dm
+++ b/code/game/objects/items/circuitboards/computer.dm
@@ -116,16 +116,6 @@
name = "Circuit board (Injector Control)"
build_path = /obj/machinery/computer/general_air_control/fuel_injection
-/obj/item/circuitboard/computer/air_management/construct(obj/machinery/computer/general_air_control/C)
- if (..(C))
- C.frequency = frequency
-
-/obj/item/circuitboard/computer/air_management/decon(obj/machinery/computer/general_air_control/C)
- if (..(C))
- frequency = C.frequency
-
-
-
/obj/item/circuitboard/computer/atmos_alert
name = "Circuit board (Atmospheric Alert)"
build_path = /obj/machinery/computer/atmos_alert
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index d56171a2805..65d792d8d29 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -8,8 +8,6 @@
slot_r_hand_str = 'icons/mob/inhands/equipment/backpacks_right.dmi',
)
item_state = "jetpack"
- distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
-
/obj/item/tank/jetpack/void
name = "Void Jetpack (Oxygen)"
@@ -17,17 +15,14 @@
icon_state = "jetpack-void"
item_state = "jetpack-void"
-
/obj/item/tank/jetpack/oxygen
name = "Jetpack (Oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
-
/obj/item/tank/jetpack/carbondioxide
name = "Jetpack (Carbon Dioxide)"
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
- distribute_pressure = 0
icon_state = "jetpack-black"
item_state = "jetpack-black"
diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm
index 0a4db04a316..b8eb53c97fe 100644
--- a/code/game/objects/items/tanks/tank_types.dm
+++ b/code/game/objects/items/tanks/tank_types.dm
@@ -1,23 +1,7 @@
-/* Types of tanks!
-* Contains:
-* Oxygen
-* Anesthetic
-* Air
-* Phoron
-* Emergency Oxygen
-*/
-
-/*
-* Oxygen
-*/
/obj/item/tank/oxygen
name = "oxygen tank"
desc = "A tank of oxygen."
icon_state = "oxygen"
- distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
- gas_type = GAS_TYPE_OXYGEN
-
-
/obj/item/tank/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
@@ -27,30 +11,17 @@
desc = "A tank of oxygen, this one is red."
icon_state = "oxygen_fr"
-
-/*
-* Anesthetic
-*/
/obj/item/tank/anesthetic
name = "anesthetic tank"
desc = "A tank with an N2O/O2 gas mix."
icon_state = "anesthetic"
item_state = "anesthetic"
- gas_type = GAS_TYPE_N2O
-
-/*
-* Air
-*/
/obj/item/tank/air
name = "air tank"
desc = "Mixed anyone?"
icon_state = "oxygen"
-
-/*
-* Phoron
-*/
/obj/item/tank/phoron
name = "phoron tank"
desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable."
@@ -58,11 +29,6 @@
flags_atom = CONDUCT
flags_equip_slot = NONE //they have no straps!
-
-
-/*
-* Emergency Oxygen
-*/
/obj/item/tank/emergency_oxygen
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
@@ -71,40 +37,16 @@
flags_equip_slot = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_TINY
force = 4
- distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
- volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
- gas_type = GAS_TYPE_OXYGEN
- pressure = 3*ONE_ATMOSPHERE
- pressure_full = 3*ONE_ATMOSPHERE
-
-
-/obj/item/tank/emergency_oxygen/examine(mob/user)
- . = ..()
- if(pressure < 50 && loc==user)
- . += span_danger("The meter on [src] indicates you are almost out of air!")
- SEND_SOUND(user, sound('sound/effects/alert.ogg'))
/obj/item/tank/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
- volume = 6
- pressure = 5*ONE_ATMOSPHERE
- pressure_full = 5*ONE_ATMOSPHERE
/obj/item/tank/emergency_oxygen/double
name = "double emergency oxygen tank"
icon_state = "emergency_double"
- volume = 10
- pressure = 5*ONE_ATMOSPHERE
- pressure_full = 5*ONE_ATMOSPHERE
-/*
-* Nitrogen
-*/
/obj/item/tank/nitrogen
name = "nitrogen tank"
desc = "A tank of nitrogen."
icon_state = "oxygen_fr"
- distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
- gas_type = GAS_TYPE_NITROGEN
-
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index 695bf1fbb03..4ac64b89e62 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -1,6 +1,3 @@
-#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
-#define TANK_DEFAULT_RELEASE_PRESSURE 24
-
/obj/item/tank
name = "tank"
icon = 'icons/obj/items/tank.dmi'
@@ -11,71 +8,7 @@
flags_atom = CONDUCT
flags_equip_slot = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_NORMAL
-
- var/pressure_full = ONE_ATMOSPHERE*4
-
- var/pressure = ONE_ATMOSPHERE*4
- var/gas_type = GAS_TYPE_AIR
- var/temperature = T20C
-
force = 5
throwforce = 10
throw_speed = 1
throw_range = 4
-
- var/distribute_pressure = ONE_ATMOSPHERE
- var/integrity = 3
- var/volume = 70
- var/manipulated_by = null //Used by _onclick/hud/screen_objects.dm internals to determine if someone has messed with our tank or not.
- //If they have and we haven't scanned it with the PDA or gas analyzer then we might just breath whatever they put in it.
-
-/obj/item/tank/examine(mob/user)
- . = ..()
- if(!in_range(src, user))
- return
- var/celsius_temperature = temperature-T0C
- var/descriptive
- switch(celsius_temperature)
- if (-280 to 20)
- descriptive = "cold"
- if(20 to 40)
- descriptive = "room temperature"
- if(40 to 80)
- descriptive = "lukewarm"
- if(80 to 100)
- descriptive = "warm"
- if(100 to 300)
- descriptive = "hot"
- else
- descriptive = "furiously hot"
-
- . += span_notice("\The [icon2html(src, user)][src] feels [descriptive], the gauge reads [return_pressure()] kPa.")
-
-
-/obj/item/tank/attackby(obj/item/I, mob/user, params)
- . = ..()
-
- if((istype(I, /obj/item/tool/analyzer)) && get_dist(user, src) <= 1)
- visible_message(span_warning("[user] has used [I] on [icon2html(src, user)] [src]"))
-
- manipulated_by = user.real_name //This person is aware of the contents of the tank.
-
- to_chat(user, span_notice("Results of analysis of [icon2html(src, user)]"))
- if(pressure > 0)
- to_chat(user, span_notice("Pressure: [round(pressure, 0.1)] kPa"))
- to_chat(user, span_notice("[gas_type]: 100%"))
- to_chat(user, span_notice("Temperature: [round(temperature - T0C)]°C"))
- else
- to_chat(user, span_notice("Tank is empty!"))
-
-/obj/item/tank/return_air()
- return list(gas_type, temperature, distribute_pressure)
-
-/obj/item/tank/return_pressure()
- return pressure
-
-/obj/item/tank/return_temperature()
- return temperature
-
-/obj/item/tank/return_gas()
- return gas_type
diff --git a/code/game/objects/machinery/OpTable.dm b/code/game/objects/machinery/OpTable.dm
index 70495335f30..58f9d14902a 100644
--- a/code/game/objects/machinery/OpTable.dm
+++ b/code/game/objects/machinery/OpTable.dm
@@ -47,7 +47,7 @@
if(get_dist(user, src) > 2 && !isobserver(user))
return
if(anes_tank)
- . += span_information("It has an [anes_tank] connected with the gauge showing [round(anes_tank.pressure,0.1)] kPa.")
+ . += span_information("It has an [anes_tank].")
/obj/machinery/optable/attack_hand(mob/living/user)
. = ..()
diff --git a/code/game/objects/machinery/computer/general_air_control.dm b/code/game/objects/machinery/computer/general_air_control.dm
index b9838984f3a..e3fad262edc 100644
--- a/code/game/objects/machinery/computer/general_air_control.dm
+++ b/code/game/objects/machinery/computer/general_air_control.dm
@@ -2,439 +2,16 @@
icon_state = "computer"
screen_overlay = "tank"
broken_icon = "computer_blue_broken"
- var/frequency = 1439
- var/list/sensors = list()
-
- var/list/sensor_information = list()
- var/datum/radio_frequency/radio_connection
circuit = /obj/item/circuitboard/computer/air_management
-
-/obj/machinery/computer/general_air_control/Initialize(mapload)
- . = ..()
- set_frequency(frequency)
-
-
-/obj/machinery/computer/general_air_control/Destroy()
- if(radio_connection)
- SSradio.remove_object(src, frequency)
- radio_connection = null
- return ..()
-
-
-/obj/machinery/computer/general_air_control/interact(mob/user)
- . = ..()
- if(.)
- return
-
- var/datum/browser/popup = new(user, "computer")
- popup.set_content(return_text())
- popup.open()
-
-
-/obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal)
- if(!signal)
- return
-
- var/id_tag = signal.data["tag"]
- if(!id_tag || !sensors.Find(id_tag)) return
-
- sensor_information[id_tag] = signal.data
-
-/obj/machinery/computer/general_air_control/proc/return_text()
- var/sensor_data
- if(length(sensors))
- for(var/id_tag in sensors)
- var/long_name = sensors[id_tag]
- var/list/data = sensor_information[id_tag]
- var/sensor_part = "[long_name]:
"
-
- if(data)
- if(data["pressure"])
- sensor_part += " Pressure: [data["pressure"]] kPa
"
- if(data["temperature"])
- sensor_part += " Temperature: [data["temperature"]] K
"
- if(data["oxygen"]||data["phoron"]||data["nitrogen"]||data["carbon_dioxide"])
- sensor_part += " Gas Composition :"
- if(data["oxygen"])
- sensor_part += "[data["oxygen"]]% O2; "
- if(data["nitrogen"])
- sensor_part += "[data["nitrogen"]]% N; "
- if(data["carbon_dioxide"])
- sensor_part += "[data["carbon_dioxide"]]% CO2; "
- if(data["phoron"])
- sensor_part += "[data["phoron"]]% TX; "
- sensor_part += "
"
-
- else
- sensor_part = "[long_name] can not be found!
"
-
- sensor_data += sensor_part
-
- else
- sensor_data = "No sensors connected."
-
- var/output = {"[name]
-Sensor Data:
[sensor_data]"}
-
- return output
-
-/obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency)
- SSradio.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
-
-
/obj/machinery/computer/general_air_control/large_tank_control
- frequency = 1441
- var/input_tag
- var/output_tag
-
- var/list/input_info
- var/list/output_info
-
- var/input_flow_setting = 200
- var/pressure_setting = ONE_ATMOSPHERE * 45
circuit = /obj/item/circuitboard/computer/air_management/tank_control
-
-/obj/machinery/computer/general_air_control/large_tank_control/return_text()
- var/output = ..()
- //if(signal.data)
- // input_info = signal.data // Attempting to fix intake control -- TLE
-
- output += "Tank Control System
"
- if(input_info)
- var/power = (input_info["power"])
- var/volume_rate = round(input_info["volume_rate"], 0.1)
- output += "Input: [power?("Injecting"):("On Hold")] Refresh
Flow Rate Limit: [volume_rate] L/s
"
- output += "Command: Toggle Power Set Flow Rate
"
-
- else
- output += "ERROR: Can not find input port Search
"
-
- output += "Flow Rate Limit: - - - - [round(input_flow_setting, 0.1)] L/s + + + +
"
-
- output += "
"
-
- if(output_info)
- var/power = (output_info["power"])
- var/output_pressure = output_info["internal"]
- output += {"Output: [power?("Open"):("On Hold")] Refresh
-Max Output Pressure: [output_pressure] kPa
"}
- output += "Command: Toggle Power Set Pressure
"
-
- else
- output += "ERROR: Can not find output port Search
"
-
- output += "Max Output Pressure Set: - - - - [pressure_setting] kPa + + + +
"
-
- return output
-
-/obj/machinery/computer/general_air_control/large_tank_control/receive_signal(datum/signal/signal)
- if(!signal)
- return
-
- var/id_tag = signal.data["tag"]
-
- if(input_tag == id_tag)
- input_info = signal.data
- else if(output_tag == id_tag)
- output_info = signal.data
- else
- ..(signal)
-
-/obj/machinery/computer/general_air_control/large_tank_control/Topic(href, href_list)
- . = ..()
- if(.)
- return
-
- if(href_list["adj_pressure"])
- var/change = text2num(href_list["adj_pressure"])
- pressure_setting = between(0, pressure_setting + change, 50*ONE_ATMOSPHERE)
- INVOKE_NEXT_TICK(src, PROC_REF(updateUsrDialog))
- return
-
- if(href_list["adj_input_flow_rate"])
- var/change = text2num(href_list["adj_input_flow_rate"])
- input_flow_setting = between(0, input_flow_setting + change, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors
- INVOKE_NEXT_TICK(src, PROC_REF(updateUsrDialog))
- return
-
- if(!radio_connection)
- return 0
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
- if(href_list["in_refresh_status"])
- input_info = null
- signal.data = list ("tag" = input_tag, "status" = 1)
-
- if(href_list["in_toggle_injector"])
- input_info = null
- signal.data = list ("tag" = input_tag, "power_toggle" = 1)
-
- if(href_list["in_set_flowrate"])
- input_info = null
- signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]")
-
- if(href_list["out_refresh_status"])
- output_info = null
- signal.data = list ("tag" = output_tag, "status" = 1)
-
- if(href_list["out_toggle_power"])
- output_info = null
- signal.data = list ("tag" = output_tag, "power_toggle" = 1)
-
- if(href_list["out_set_pressure"])
- output_info = null
- signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]")
-
- signal.data["sigtype"]="command"
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
- addtimer(CALLBACK(src, PROC_REF(updateUsrDialog)), 5)
-
/obj/machinery/computer/general_air_control/supermatter_core
- frequency = 1438
- var/input_tag
- var/output_tag
-
- var/list/input_info
- var/list/output_info
-
- var/input_flow_setting = 700
- var/pressure_setting = 100
circuit = /obj/item/circuitboard/computer/air_management/supermatter_core
-
-/obj/machinery/computer/general_air_control/supermatter_core/return_text()
- var/output = ..()
- //if(signal.data)
- // input_info = signal.data // Attempting to fix intake control -- TLE
-
- output += "Core Cooling Control System
"
- if(input_info)
- var/power = (input_info["power"])
- var/volume_rate = round(input_info["volume_rate"], 0.1)
- output += "Coolant Input: [power?("Injecting"):("On Hold")] Refresh
Flow Rate Limit: [volume_rate] L/s
"
- output += "Command: Toggle Power Set Flow Rate
"
-
- else
- output += "ERROR: Can not find input port Search
"
-
- output += "Flow Rate Limit: - - - - [round(input_flow_setting, 0.1)] L/s + + + +
"
-
- output += "
"
-
- if(output_info)
- var/power = (output_info["power"])
- var/pressure_limit = output_info["external"]
- output += {"Core Outpump: [power?("Open"):("On Hold")] Refresh
-Min Core Pressure: [pressure_limit] kPa
"}
- output += "Command: Toggle Power Set Pressure
"
-
- else
- output += "ERROR: Can not find output port Search
"
-
- output += "Min Core Pressure Set: - - - - [pressure_setting] kPa + + + +
"
-
- return output
-
-/obj/machinery/computer/general_air_control/supermatter_core/receive_signal(datum/signal/signal)
- if(!signal)
- return
-
- var/id_tag = signal.data["tag"]
-
- if(input_tag == id_tag)
- input_info = signal.data
- else if(output_tag == id_tag)
- output_info = signal.data
- else
- ..(signal)
-
-/obj/machinery/computer/general_air_control/supermatter_core/Topic(href, href_list)
- . = ..()
- if(.)
- return
-
- if(href_list["adj_pressure"])
- var/change = text2num(href_list["adj_pressure"])
- pressure_setting = between(0, pressure_setting + change, 10*ONE_ATMOSPHERE)
- INVOKE_NEXT_TICK(src, PROC_REF(updateUsrDialog))
- return
-
- if(href_list["adj_input_flow_rate"])
- var/change = text2num(href_list["adj_input_flow_rate"])
- input_flow_setting = between(0, input_flow_setting + change, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors
- INVOKE_NEXT_TICK(src, PROC_REF(updateUsrDialog))
- return
-
- if(!radio_connection)
- return 0
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
- if(href_list["in_refresh_status"])
- input_info = null
- signal.data = list ("tag" = input_tag, "status" = 1)
-
- if(href_list["in_toggle_injector"])
- input_info = null
- signal.data = list ("tag" = input_tag, "power_toggle" = 1)
-
- if(href_list["in_set_flowrate"])
- input_info = null
- signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]")
-
- if(href_list["out_refresh_status"])
- output_info = null
- signal.data = list ("tag" = output_tag, "status" = 1)
-
- if(href_list["out_toggle_power"])
- output_info = null
- signal.data = list ("tag" = output_tag, "power_toggle" = 1)
-
- if(href_list["out_set_pressure"])
- output_info = null
- signal.data = list ("tag" = output_tag, "set_external_pressure" = "[pressure_setting]", "checks" = 1)
-
- signal.data["sigtype"]="command"
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
- addtimer(CALLBACK(src, PROC_REF(updateUsrDialog)), 5)
-
/obj/machinery/computer/general_air_control/fuel_injection
icon = 'icons/obj/machines/computer.dmi'
icon_state = "computer_small"
screen_overlay = "atmos"
-
- var/device_tag
- var/list/device_info
-
- var/automation = 0
-
- var/cutoff_temperature = 2000
- var/on_temperature = 1200
circuit = /obj/item/circuitboard/computer/air_management/injector_control
-
-/obj/machinery/computer/general_air_control/fuel_injection/process()
- if(automation)
- if(!radio_connection)
- return 0
-
- var/injecting = 0
- for(var/id_tag in sensor_information)
- var/list/data = sensor_information[id_tag]
- if(data["temperature"])
- if(data["temperature"] >= cutoff_temperature)
- injecting = 0
- break
- if(data["temperature"] <= on_temperature)
- injecting = 1
-
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
-
- signal.data = list(
- "tag" = device_tag,
- "power" = injecting,
- "sigtype"="command"
- )
-
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
- ..()
-
-/obj/machinery/computer/general_air_control/fuel_injection/return_text()
- var/output = ..()
-
- output += "Fuel Injection System
"
- if(device_info)
- var/power = device_info["power"]
- var/volume_rate = device_info["volume_rate"]
- output += {"Status: [power?("Injecting"):("On Hold")] Refresh
-Rate: [volume_rate] L/sec
"}
-
- if(automation)
- output += "Automated Fuel Injection: Engaged
"
- output += "Injector Controls Locked Out
"
- else
- output += "Automated Fuel Injection: Disengaged
"
- output += "Injector: Toggle Power Inject (1 Cycle)
"
-
- else
- output += "ERROR: Can not find device Search
"
-
- return output
-
-/obj/machinery/computer/general_air_control/fuel_injection/receive_signal(datum/signal/signal)
- if(!signal)
- return
-
- var/id_tag = signal.data["tag"]
-
- if(device_tag == id_tag)
- device_info = signal.data
- else
- ..(signal)
-
-/obj/machinery/computer/general_air_control/fuel_injection/Topic(href, href_list)
- . = ..()
- if(.)
- return
-
- if(href_list["refresh_status"])
- device_info = null
- if(!radio_connection)
- return 0
-
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
- signal.data = list(
- "tag" = device_tag,
- "status" = 1,
- "sigtype"="command"
- )
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
- if(href_list["toggle_automation"])
- automation = !automation
-
- if(href_list["toggle_injector"])
- device_info = null
- if(!radio_connection)
- return 0
-
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
- signal.data = list(
- "tag" = device_tag,
- "power_toggle" = 1,
- "sigtype"="command"
- )
-
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
- if(href_list["injection"])
- if(!radio_connection)
- return 0
-
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
- signal.data = list(
- "tag" = device_tag,
- "inject" = 1,
- "sigtype"="command"
- )
-
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
-
-
-
diff --git a/code/game/objects/machinery/fire_alarm.dm b/code/game/objects/machinery/fire_alarm.dm
index 23d03243cb0..fa7853975fd 100644
--- a/code/game/objects/machinery/fire_alarm.dm
+++ b/code/game/objects/machinery/fire_alarm.dm
@@ -1,9 +1,3 @@
-
-
-
-/*
-FIRE ALARM
-*/
/obj/machinery/firealarm
name = "fire alarm"
desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever."
@@ -155,7 +149,6 @@ FIRE ALARM
playsound(loc, 'sound/items/ratchet.ogg', 25, 1)
qdel(src)
-
/obj/machinery/firealarm/can_interact(mob/user)
. = ..()
if(!.)
@@ -166,7 +159,6 @@ FIRE ALARM
return TRUE
-
/obj/machinery/firealarm/interact(mob/user)
. = ..()
if(.)
@@ -192,7 +184,6 @@ FIRE ALARM
popup.set_content(dat)
popup.open()
-
/obj/machinery/firealarm/Topic(href, href_list)
. = ..()
if(.)
@@ -215,7 +206,6 @@ FIRE ALARM
updateUsrDialog()
-
/obj/machinery/firealarm/proc/reset()
if (!working)
return
@@ -229,5 +219,4 @@ FIRE ALARM
var/area/A = get_area(src)
A?.firealert()
update_icon()
- //playsound(src.loc, 'sound/ambience/signal.ogg', 50, 0)
-
+ playsound(src.loc, 'sound/ambience/signal.ogg', 50, 0)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
index 1634830a889..7ff09d9af18 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
@@ -1,33 +1,12 @@
//Acts like a normal vent, but has an input AND output.
-
-#define EXT_BOUND 1
-#define INPUT_MIN 2
-#define OUTPUT_MAX 4
-
/obj/machinery/atmospherics/components/binary/dp_vent_pump
- icon = 'icons/obj/atmospherics/components/unary_devices.dmi' //We reuse the normal vent icons!
- icon_state = "dpvent_map-2"
-
- //node2 is output port
- //node1 is input port
-
name = "dual-port air vent"
desc = "Has a valve and pump attached to it. There are two ports."
-
+ icon = 'icons/obj/atmospherics/components/unary_devices.dmi' //We reuse the normal vent icons!
+ icon_state = "dpvent_map-2"
level = 1
- var/frequency = 0
- var/id = null
- var/datum/radio_frequency/radio_connection
-
var/pump_direction = 1 //0 = siphoning, 1 = releasing
- var/pressure_checks = EXT_BOUND
-
- //EXT_BOUND: Do not pass external_pressure_bound
- //INPUT_MIN: Do not pass input_pressure_min
- //OUTPUT_MAX: Do not pass output_pressure_max
-
-
/obj/machinery/atmospherics/components/binary/dp_vent_pump/update_icon_nopipes()
cut_overlays()
if(showpipe)
@@ -39,7 +18,6 @@
else
icon_state = pump_direction ? "vent_out" : "vent_in"
-
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume
name = "large dual-port air vent"
@@ -84,7 +62,3 @@
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer3
piping_layer = 3
icon_state = "dpvent_map_on-3"
-
-#undef EXT_BOUND
-#undef INPUT_MIN
-#undef OUTPUT_MAX
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 077ffeebe4e..9c41bd2d766 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -1,24 +1,15 @@
/*
-
Passive gate is similar to the regular pump except:
* It doesn't require power
* Can not transfer low pressure to higher pressure (so it's more like a valve where you can control the flow)
-
*/
/obj/machinery/atmospherics/components/binary/passive_gate
icon_state = "passgate_map-2"
-
name = "passive gate"
desc = "A one-way air valve that does not require power."
-
can_unwrench = FALSE
shift_underlay_only = FALSE
-
- var/target_pressure = ONE_ATMOSPHERE
-
- var/id = null
-
construction_type = /obj/item/pipe/directional
pipe_state = "passivegate"
@@ -34,7 +25,6 @@ Passive gate is similar to the regular pump except:
to_chat(user, span_warning("You cannot unwrench [src], turn it off first!"))
return FALSE
-
/obj/machinery/atmospherics/components/binary/passive_gate/layer1
piping_layer = 1
icon_state = "passgate_map-1"
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index c0ea1c08e25..b8ce3bf6ed1 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -10,22 +10,15 @@
// Higher quantities of this cause more air to be perfected later
// but overall network volume is also increased as this increases...
-/obj/machinery/atmospherics/components/binary/pump
- icon_state = "pump_map-2"
+/obj/machinery/atmospherics/components/binary/pumpv
name = "gas pump"
desc = "A pump that moves gas by pressure."
-
+ icon_state = "pump_map-2"
can_unwrench = FALSE
shift_underlay_only = FALSE
-
- var/target_pressure = ONE_ATMOSPHERE
-
- var/id = null
-
construction_type = /obj/item/pipe/directional
pipe_state = "pump"
-
/obj/machinery/atmospherics/components/binary/pump/update_icon_nopipes()
icon_state = (on && is_operational()) ? "pump_on" : "pump_off"
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index e4fea3493e3..43a46328874 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -12,8 +12,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
shift_underlay_only = FALSE
pipe_flags = PIPING_CARDINAL_AUTONORMALIZE
- var/id = null
-
var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes()
construction_type = /obj/item/pipe/binary
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index ab98e9f121c..1fa5edc6a39 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -11,25 +11,17 @@
// but overall network volume is also increased as this increases...
/obj/machinery/atmospherics/components/binary/volume_pump
- icon_state = "volpump_map-2"
name = "volumetric gas pump"
desc = "A pump that moves gas by volume."
-
+ icon_state = "volpump_map-2"
can_unwrench = FALSE
shift_underlay_only = FALSE
-
- var/transfer_rate = MAX_TRANSFER_RATE
-
- var/id = null
-
construction_type = /obj/item/pipe/directional
pipe_state = "volumepump"
-
/obj/machinery/atmospherics/components/binary/volume_pump/update_icon_nopipes()
icon_state = on && is_operational() ? "volpump_on" : "volpump_off"
-
/obj/machinery/atmospherics/components/binary/volume_pump/can_unwrench(mob/user)
. = ..()
if(. && on && is_operational())
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index bccd5715e07..1849bb10057 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -1,19 +1,13 @@
/obj/machinery/atmospherics/components/trinary/filter
- icon_state = "filter_off"
- density = FALSE
-
name = "gas filter"
desc = "Very useful for filtering gasses."
-
+ icon_state = "filter_off"
+ density = FALSE
can_unwrench = FALSE
-
- var/target_pressure = ONE_ATMOSPHERE
var/filter_type = null
-
construction_type = /obj/item/pipe/trinary/flippable
pipe_state = "filter"
-
/obj/machinery/atmospherics/components/trinary/filter/update_icon()
cut_overlays()
for(var/direction in GLOB.cardinals)
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index f186d0c429f..c91183501b8 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -1,21 +1,12 @@
/obj/machinery/atmospherics/components/trinary/mixer
- icon_state = "mixer_off"
- density = FALSE
-
name = "gas mixer"
desc = "Very useful for mixing gasses."
-
+ icon_state = "mixer_off"
+ density = FALSE
can_unwrench = FALSE
-
- var/target_pressure = ONE_ATMOSPHERE
- var/node1_concentration = 0.5
- var/node2_concentration = 0.5
-
construction_type = /obj/item/pipe/trinary/flippable
pipe_state = "mixer"
- //node 3 is the outlet, nodes 1 & 2 are intakes
-
/obj/machinery/atmospherics/components/trinary/mixer/update_icon()
cut_overlays()
for(var/direction in GLOB.cardinals)
@@ -43,10 +34,6 @@
if(machine_stat != old_stat)
update_icon()
-/obj/machinery/atmospherics/components/trinary/mixer/proc/adjust_node1_value(delta)
- node1_concentration = round(max(0, min(1, node1_concentration + delta)), 0.01)
- node2_concentration = 1 - node1_concentration
-
/obj/machinery/atmospherics/components/trinary/mixer/can_unwrench(mob/user)
. = ..()
if(. && on && is_operational())
@@ -58,6 +45,7 @@
/obj/machinery/atmospherics/components/trinary/mixer/layer1
piping_layer = 1
icon_state = "mixer_off_map-1"
+
/obj/machinery/atmospherics/components/trinary/mixer/layer3
piping_layer = 3
icon_state = "mixer_off_map-3"
@@ -69,6 +57,7 @@
/obj/machinery/atmospherics/components/trinary/mixer/on/layer1
piping_layer = 1
icon_state = "mixer_on_map-1"
+
/obj/machinery/atmospherics/components/trinary/mixer/on/layer3
piping_layer = 3
icon_state = "mixer_on_map-3"
@@ -80,6 +69,7 @@
/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer1
piping_layer = 1
icon_state = "mixer_off_f_map-1"
+
/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer3
piping_layer = 3
icon_state = "mixer_off_f_map-3"
@@ -98,19 +88,8 @@
/obj/machinery/atmospherics/components/trinary/mixer/airmix //For standard airmix to distro
name = "air mixer"
icon_state = "mixer_on"
- node1_concentration = N2STANDARD
- node2_concentration = O2STANDARD
- target_pressure = MAX_OUTPUT_PRESSURE
on = TRUE
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse
- node1_concentration = O2STANDARD
- node2_concentration = N2STANDARD
-
/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped
icon_state = "mixer_on_f"
flipped = TRUE
-
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped/inverse
- node1_concentration = O2STANDARD
- node2_concentration = N2STANDARD
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index 9ca5192ecdb..e9f2af43baa 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -21,11 +21,6 @@
var/pump_direction = RELEASING
var/pressure_checks = EXT_BOUND
- var/external_pressure_bound = ONE_ATMOSPHERE
- var/internal_pressure_bound = 0
- // EXT_BOUND: Do not pass external_pressure_bound
- // INT_BOUND: Do not pass internal_pressure_bound
- // NO_BOUND: Do not pass either
var/radio_filter_out
var/radio_filter_in
@@ -209,8 +204,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/siphon
pump_direction = SIPHONING
pressure_checks = INT_BOUND
- internal_pressure_bound = 4000
- external_pressure_bound = 0
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on
on = TRUE
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index 649d10eca6b..f34d67ec400 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -1,7 +1,5 @@
/obj/machinery/atmospherics/pipe/heat_exchanging
level = 2
- var/minimum_temperature_difference = 20
- var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
color = "#404040"
buckle_lying = -1
var/icon_temperature = T20C //stop small changes in temperature causing icon refresh
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm
index f9f6c980260..daf2c643273 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm
@@ -1,17 +1,10 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/junction
- icon = 'icons/obj/atmospherics/pipes/he-junction.dmi'
- icon_state = "pipe11-2"
-
name = "junction"
desc = "A one meter junction that connects regular and heat-exchanging pipe."
-
- minimum_temperature_difference = 300
- thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
-
+ icon = 'icons/obj/atmospherics/pipes/he-junction.dmi'
+ icon_state = "pipe11-2"
dir = SOUTH
-
device_type = BINARY
-
construction_type = /obj/item/pipe/directional
pipe_state = "junction"
@@ -35,7 +28,6 @@
update_layer()
update_alpha()
-
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1
piping_layer = 1
icon_state = "pipe11-1"
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 859d238dc30..15d0da6b33c 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -57,14 +57,14 @@
icon_state = "hardhat0_red"
hardhat_color = "red"
name = "firefighter helmet"
- flags_inventory = NOPRESSUREDMAGE|BLOCKSHARPOBJ
+ flags_inventory = BLOCKSHARPOBJ
flags_heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/head/hardhat/white
icon_state = "hardhat0_white"
hardhat_color = "white"
- flags_inventory = NOPRESSUREDMAGE|BLOCKSHARPOBJ
+ flags_inventory = BLOCKSHARPOBJ
flags_heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index 491b26213d4..dce93f2961d 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -9,7 +9,7 @@
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
permeability_coefficient = 0.01
soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 0, ACID = 0)
- flags_inventory = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|BLOCKSHARPOBJ
+ flags_inventory = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ
flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR
flags_armor_protection = HEAD|FACE|EYES
flags_cold_protection = HEAD
@@ -30,7 +30,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/suit_cooling_unit)
slowdown = 3
soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 0, ACID = 0)
- flags_inventory = BLOCKSHARPOBJ|NOPRESSUREDMAGE
+ flags_inventory = BLOCKSHARPOBJ
flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
diff --git a/code/modules/clothing/spacesuits/standard_space_suits.dm b/code/modules/clothing/spacesuits/standard_space_suits.dm
index 0680ae66ec9..f1d5e9fbb23 100644
--- a/code/modules/clothing/spacesuits/standard_space_suits.dm
+++ b/code/modules/clothing/spacesuits/standard_space_suits.dm
@@ -30,7 +30,6 @@
allowed = list(/obj/item/tank/emergency_oxygen, /obj/item/flashlight,/obj/item/weapon/gun, /obj/item/ammo_magazine, /obj/item/weapon/baton,/obj/item/restraints/handcuffs)
slowdown = 1.5
soft_armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, FIRE = 25, ACID = 25)
- flags_inventory = NOPRESSUREDMAGE
flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
@@ -41,7 +40,7 @@
name = "Santa's hat"
desc = "Ho ho ho. Merrry X-mas!"
icon_state = "santahat"
- flags_inventory = NOPRESSUREDMAGE|BLOCKSHARPOBJ
+ flags_inventory = BLOCKSHARPOBJ
flags_inv_hide = HIDEEYES
flags_armor_protection = HEAD
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index d90038f4cae..7c0abecdf96 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -115,7 +115,7 @@
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/baton,/obj/item/restraints/handcuffs,/obj/item/tank/emergency_oxygen)
slowdown = 1
soft_armor = list(MELEE = 50, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, FIRE = 25, ACID = 25)
- flags_inventory = BLOCKSHARPOBJ|NOPRESSUREDMAGE
+ flags_inventory = BLOCKSHARPOBJ
flags_item = SYNTH_RESTRICTED
flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index bd218054515..1072298cff5 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -22,7 +22,6 @@
flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/tool/extinguisher)
slowdown = 1
- flags_inventory = NOPRESSUREDMAGE
flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags_heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
diff --git a/code/modules/cm_preds/yaut_mask.dm b/code/modules/cm_preds/yaut_mask.dm
index 8d601de1a23..973fab99cac 100644
--- a/code/modules/cm_preds/yaut_mask.dm
+++ b/code/modules/cm_preds/yaut_mask.dm
@@ -21,7 +21,7 @@
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
flags_armor_protection = HEAD|FACE|EYES
flags_cold_protection = HEAD
- flags_inventory = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|BLOCKGASEFFECT|BLOCKSHARPOBJ
+ flags_inventory = COVEREYES|COVERMOUTH|BLOCKGASEFFECT|BLOCKSHARPOBJ
flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDELOWHAIR
eye_protection = 2
flags_item = ITEM_PREDATOR
diff --git a/code/modules/codex/entries/clothing_codex.dm b/code/modules/codex/entries/clothing_codex.dm
index 1ac214c36f9..1806c28a60f 100644
--- a/code/modules/codex/entries/clothing_codex.dm
+++ b/code/modules/codex/entries/clothing_codex.dm
@@ -74,9 +74,6 @@ GLOBAL_LIST_INIT(string_equip_flags, list("suit slot" = ITEM_SLOT_OCLOTHING,
if(accuracy_mod)
armor_strings += "
This will alter your shooting accuracy by up to [accuracy_mod]% when worn."
- if(flags_inventory & NOPRESSUREDMAGE)
- armor_strings += "Wearing this will protect you from the vacuum of space."
-
if(flags_inventory & BLOCKSHARPOBJ)
armor_strings += "The material is exceptionally thick."
diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm
index 4e386ae156d..60991891c9d 100644
--- a/code/modules/hydroponics/vines.dm
+++ b/code/modules/hydroponics/vines.dm
@@ -221,22 +221,6 @@
if(prob(30))
age++
- var/turf/T = loc
- if(!loc)
- return
-
- var/pressure = T.return_pressure()
- var/temperature = T.return_temperature()
-
- if(pressure < seed.lowkpa_tolerance || pressure > seed.highkpa_tolerance)
- die()
- return
-
- if(abs(temperature - seed.ideal_heat) > seed.heat_tolerance)
- die()
- return
-
-
/obj/effect/plantsegment/flamer_fire_act(burnlevel)
qdel(src)
diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm
index a4b53483e94..ec65a88273e 100644
--- a/code/modules/mob/living/brain/life.dm
+++ b/code/modules/mob/living/brain/life.dm
@@ -3,9 +3,6 @@
set background = 1
..()
- //Handle temperature/pressure differences between body and environment
- handle_environment()
-
/mob/living/brain/blur_eyes()
return
@@ -15,31 +12,6 @@
/mob/living/brain/set_blurriness()
return
-/mob/living/brain/proc/handle_environment()
- if(!loc)
- return
-
- var/env_temperature = loc.return_temperature()
-
- if((env_temperature > (T0C + 50)) || (env_temperature < (T0C + 10)))
- handle_temperature_damage(HEAD, env_temperature)
-
-
-
-/mob/living/brain/proc/handle_temperature_damage(body_part, exposed_temperature)
- if(status_flags & GODMODE)
- return
-
- if(exposed_temperature > bodytemperature)
- var/discomfort = min( abs(exposed_temperature - bodytemperature)/100, 1.0)
- adjustFireLoss(20.0*discomfort)
-
- else
- var/discomfort = min( abs(exposed_temperature - bodytemperature)/100, 1.0)
- adjustFireLoss(5.0*discomfort)
-
-
-
/mob/living/brain/handle_organs()
. = ..()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index d2d8ffcfcae..0513732522d 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -67,14 +67,9 @@
hud_set_order()
//and display them
add_to_all_mob_huds()
-/*
- GLOB.huds[DATA_HUD_BASIC].add_hud_to(src)
- GLOB.huds[DATA_HUD_XENO_HEART].add_to_hud(src)
-*/
-//RUTGMC EDIT ADDITION BEGIN - Preds
+
var/datum/atom_hud/hud_to_add = GLOB.huds[DATA_HUD_BASIC]
hud_to_add.add_hud_to(src)
-//RUTGMC EDIT ADDITION END
/mob/living/carbon/human/register_init_signals()
. = ..()
@@ -102,11 +97,6 @@
if(eta_status)
. += "Evacuation in: [eta_status]"
- if(internal)
- . += "Internal Atmosphere Info [internal.name]"
- . += "Tank Pressure [internal.pressure]"
- . += "Distribution Pressure [internal.distribute_pressure]"
-
if(assigned_squad)
if(assigned_squad.primary_objective)
. += "Primary Objective: [assigned_squad.primary_objective]"
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index d8c90a1d109..806e5468d6c 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -3,7 +3,6 @@
fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
-
//update the current life tick, can be used to e.g. only do something every 4 ticks
life_tick++
diff --git a/code/modules/mob/living/carbon/human/life/handle_environment.dm b/code/modules/mob/living/carbon/human/life/handle_environment.dm
index 18e84cc2710..6124b4c427a 100644
--- a/code/modules/mob/living/carbon/human/life/handle_environment.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_environment.dm
@@ -1,34 +1,8 @@
//Refer to life.dm for caller
-
/mob/living/carbon/human/proc/handle_environment()
if(!loc)
return
- //Moved pressure calculations here for use in skip-processing check.
- var/pressure = loc.return_pressure()
- var/adjusted_pressure = calculate_affecting_pressure(pressure)
- var/loc_temp = loc.return_temperature()
-
- if(!isspaceturf(get_turf(src))) //Space is not meant to change your body temperature.
-
- if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1)
- pressure_alert = 0
- return //Temperatures are within normal ranges, fuck all this processing. ~Ccomp
-
- //Body temperature adjusts depending on surrounding atmosphere based on your thermal protection
- var/temp_adj = 0
- if(loc_temp < bodytemperature) //Place is colder than we are
- var/thermal_protection = get_flags_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
- if(thermal_protection < 1)
- temp_adj = (1 - thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR) //This will be negative
-
- else if (loc_temp > bodytemperature) //Place is hotter than we are
- var/thermal_protection = get_flags_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to.
- if(thermal_protection < 1)
- temp_adj = (1 - thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR)
-
- adjust_bodytemperature(temp_adj, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX)
-
//+/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(bodytemperature > species.heat_level_1)
//Body temperature is too hot.
@@ -57,26 +31,3 @@
take_overall_damage(COLD_DAMAGE_LEVEL_2, BURN)
else if(bodytemperature < species.cold_level_1)
take_overall_damage(COLD_DAMAGE_LEVEL_1, BURN)
-
-
-
- //Account for massive pressure differences. Done by Polymorph
- //Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense!
- if(status_flags & GODMODE)
- return 1 //Godmode
-
- if(adjusted_pressure >= species.hazard_high_pressure)
- var/pressure_damage = min(((adjusted_pressure / species.hazard_high_pressure) - 1) * PRESSURE_DAMAGE_COEFFICIENT, MAX_HIGH_PRESSURE_DAMAGE)
- take_overall_damage(pressure_damage)
- pressure_alert = 2
- else if(adjusted_pressure >= species.warning_high_pressure)
- pressure_alert = 1
- else if(adjusted_pressure >= species.warning_low_pressure)
- pressure_alert = 0
- else if(adjusted_pressure >= species.hazard_low_pressure)
- pressure_alert = -1
- else
- take_overall_damage(LOW_PRESSURE_DAMAGE)
- if(getOxyLoss() < 55) //11 OxyLoss per 4 ticks when wearing internals; unconsciousness in 16 ticks, roughly half a minute
- adjustOxyLoss(4) //16 OxyLoss per 4 ticks when no internals present; unconsciousness in 13 ticks, roughly twenty seconds
- pressure_alert = -2
diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
index 6fe5999cf82..743da349465 100644
--- a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
@@ -17,8 +17,6 @@
return
if(hud_used.nutrition_icon)
hud_used.nutrition_icon.icon_state = "nutrition1"
- if(hud_used.toxin_icon)
- hud_used.toxin_icon.icon_state = "tox0"
if(hud_used.oxygen_icon)
hud_used.oxygen_icon.icon_state = "oxy0"
if(hud_used.fire_icon)
@@ -113,14 +111,6 @@
else
hud_used.nutrition_icon.icon_state = "nutrition4"
- if(hud_used.pressure_icon)
- hud_used.pressure_icon.icon_state = "pressure[pressure_alert]"
-
- if(hud_used.toxin_icon)
- if(hal_screwyhud == 4)
- hud_used.toxin_icon.icon_state = "tox1"
- else
- hud_used.toxin_icon.icon_state = "tox0"
if(hud_used.oxygen_icon)
if(hal_screwyhud == 3 || oxygen_alert)
hud_used.oxygen_icon.icon_state = "oxy1"
diff --git a/code/modules/mob/living/carbon/human/life/life_helpers.dm b/code/modules/mob/living/carbon/human/life/life_helpers.dm
index e67bd115cb2..1ec708427fe 100644
--- a/code/modules/mob/living/carbon/human/life/life_helpers.dm
+++ b/code/modules/mob/living/carbon/human/life/life_helpers.dm
@@ -6,46 +6,6 @@
* Mostly for procs that are not called in the direct Life() loop, except for exact functionality matches (handle_breath, breathe, get_breath_from_internal for example)
*/
-//Calculate how vulnerable the human is to under- and overpressure.
-//Returns 0 (equals 0 %) if sealed in an undamaged suit, 1 if unprotected (equals 100%).
-//Suitdamage can modifiy this in 10% steps.
-/mob/living/carbon/human/proc/get_pressure_weakness()
-
- var/pressure_adjustment_coefficient = 1 // Assume no protection at first.
-
- if(wear_suit && (wear_suit.flags_inventory & NOPRESSUREDMAGE) && head && (head.flags_inventory & NOPRESSUREDMAGE)) //Complete set of pressure-proof suit worn, assume fully sealed.
- pressure_adjustment_coefficient = 0
-
- pressure_adjustment_coefficient = min(1, max(pressure_adjustment_coefficient, 0)) //So it isn't less than 0 or larger than 1.
- return pressure_adjustment_coefficient
-
-//Calculate how much of the enviroment pressure-difference affects the human.
-/mob/living/carbon/human/calculate_affecting_pressure(pressure)
- var/pressure_difference
-
- //First get the absolute pressure difference.
- if(pressure < ONE_ATMOSPHERE) //We are in an underpressure.
- pressure_difference = ONE_ATMOSPHERE - pressure
-
- else //We are in an overpressure or standard atmosphere.
- pressure_difference = pressure - ONE_ATMOSPHERE
-
- if(pressure_difference < 5) //If the difference is small, don't bother calculating the fraction.
- pressure_difference = 0
-
- else
- //Otherwise calculate how much of that absolute pressure difference affects us, can be 0 to 1 (equals 0% to 100%).
- //This is our relative difference.
- pressure_difference *= get_pressure_weakness()
-
- //The difference is always positive to avoid extra calculations.
- //Apply the relative difference on a standard atmosphere to get the final result.
- //The return value will be the adjusted_pressure of the human that is the basis of pressure warnings and damage.
- if(pressure < ONE_ATMOSPHERE)
- return ONE_ATMOSPHERE - pressure_difference
- else
- return ONE_ATMOSPHERE + pressure_difference
-
/mob/living/carbon/human/proc/stabilize_body_temperature()
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 76a5714a1c7..088d6eb9f0a 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -51,10 +51,6 @@
var/death_sound
var/death_message = "seizes up and falls limp, their eyes dead and lifeless..."
- var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
- var/poison_type = "phoron" // Poisonous air.
- var/exhale_type = "carbon_dioxide" // Exhaled gas type.
-
/// new maxHealth [/mob/living/carbon/human/var/maxHealth] of the human mob once species is applied
var/total_health = 100
var/max_stamina = 50
@@ -71,10 +67,6 @@
var/reagent_tag //Used for metabolizing reagents.
var/darksight = 2
- var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
- var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
- var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
- var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
var/brute_mod = null // Physical damage reduction/malus.
var/burn_mod = null // Burn damage reduction/malus.
diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm
index 97c20ec92e5..90baa08b845 100644
--- a/code/modules/mob/living/carbon/xenomorph/life.dm
+++ b/code/modules/mob/living/carbon/xenomorph/life.dm
@@ -266,20 +266,6 @@
else
hud_used.alien_plasma_display.icon_state = "power_display_0"
-/mob/living/carbon/xenomorph/proc/handle_environment() //unused while atmos is not on
- var/env_temperature = loc.return_temperature()
- if(!(xeno_caste.caste_flags & CASTE_FIRE_IMMUNE))
- if(env_temperature > (T0C + 66))
- apply_damage(((env_temperature - (T0C + 66) ) * 0.2), BURN, blocked = FIRE)
- updatehealth() //unused while atmos is off
- if(hud_used?.fire_icon)
- hud_used.fire_icon.icon_state = "fire2"
- if(prob(20))
- to_chat(src, span_warning("We feel a searing heat!"))
- else
- if(hud_used?.fire_icon)
- hud_used.fire_icon.icon_state = "fire0"
-
/mob/living/carbon/xenomorph/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index af09465c5c4..3193e7d039e 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -123,13 +123,6 @@
hard_armor = null
soft_armor = null
-
-//This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually
-//affects them once clothing is factored in. ~Errorage
-/mob/living/proc/calculate_affecting_pressure(pressure)
- return
-
-
/mob/proc/get_contents()
return
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index 0883f6de7c3..affd94ef163 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -73,22 +73,10 @@
///Whether or not the mech destroys walls by running into it.
var/bumpsmash = FALSE
- ///////////ATMOS
- ///Whether we are currrently drawing from the internal tank
- var/use_internal_tank = FALSE
- ///The setting of the valve on the internal tank
- var/internal_tank_valve = ONE_ATMOSPHERE
- ///The internal air tank obj of the mech
- var/obj/machinery/portable_atmospherics/canister/air/internal_tank
- ///The connected air port, if we have one
- var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port
-
///Special version of the radio, which is unsellable
var/obj/item/radio/mech/radio
var/list/trackers = list()
- var/max_temperature = 25000
-
///Bitflags for internal damage
var/internal_damage = NONE
/// damage amount above which we can take internal damages
@@ -96,7 +84,7 @@
/// % chance for internal damage to occur
var/internal_damage_probability = 20
/// list of possibly dealt internal damage for this mech type
- var/possible_int_damage = MECHA_INT_FIRE|MECHA_INT_TEMP_CONTROL|MECHA_INT_TANK_BREACH|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT
+ var/possible_int_damage = MECHA_INT_FIRE|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT
/// damage threshold above which we take component damage
var/component_damage_threshold = 10
@@ -197,8 +185,6 @@
/obj/vehicle/sealed/mecha/Initialize(mapload)
. = ..()
ui_view = new(null, src)
- if(enclosed)
- internal_tank = new (src)
RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(play_stepsound))
spark_system.set_up(2, 0, src)
@@ -256,7 +242,6 @@
QDEL_NULL(cell)
QDEL_NULL(scanmod)
QDEL_NULL(capacitor)
- QDEL_NULL(internal_tank)
QDEL_NULL(spark_system)
QDEL_NULL(smoke_system)
QDEL_NULL(ui_view)
@@ -364,7 +349,6 @@
/obj/vehicle/sealed/mecha/generate_actions()
initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject)
- initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals, VEHICLE_CONTROL_SETTINGS)
initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, VEHICLE_CONTROL_SETTINGS)
initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats, VEHICLE_CONTROL_SETTINGS)
initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/strafe, VEHICLE_CONTROL_DRIVE)
@@ -429,7 +413,7 @@
for(var/occupante in occupants)
. += "You can see [occupante] inside."
-//processing internal damage, temperature, air regulation, alert updates, lights power use.
+//processing internal damage, alert updates, lights power use.
/obj/vehicle/sealed/mecha/process(delta_time)
if(internal_damage)
if(internal_damage & MECHA_INT_FIRE)
diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm
index e3599e6ba81..c07753f1253 100644
--- a/code/modules/vehicles/mecha/combat/gygax.dm
+++ b/code/modules/vehicles/mecha/combat/gygax.dm
@@ -8,7 +8,6 @@
dir_in = 1 //Facing North.
max_integrity = 250
soft_armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, FIRE = 100, ACID = 100)
- max_temperature = 25000
leg_overload_coeff = 80
force = 25
wreckage = /obj/structure/mecha_wreckage/gygax
@@ -67,7 +66,6 @@
base_icon_state = "darkgygax"
max_integrity = 300
soft_armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, FIRE = 100, ACID = 100)
- max_temperature = 35000
leg_overload_coeff = 70
force = 30
operation_req_access = list()
diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm
index d99985f7537..5cfd2b4ab21 100644
--- a/code/modules/vehicles/mecha/combat/marauder.dm
+++ b/code/modules/vehicles/mecha/combat/marauder.dm
@@ -6,7 +6,6 @@
move_delay = 5
max_integrity = 500
soft_armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, FIRE = 100, ACID = 100)
- max_temperature = 60000
wreckage = /obj/structure/mecha_wreckage/marauder
mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_HEADLIGHTS
mech_type = EXOSUIT_MODULE_COMBAT
diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm
index 0fb45ce1d06..11d560bdeb5 100644
--- a/code/modules/vehicles/mecha/combat/phazon.dm
+++ b/code/modules/vehicles/mecha/combat/phazon.dm
@@ -8,7 +8,6 @@
step_energy_drain = 3
max_integrity = 200
soft_armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, FIRE = 100, ACID = 100)
- max_temperature = 25000
wreckage = /obj/structure/mecha_wreckage/phazon
mech_type = EXOSUIT_MODULE_PHAZON
force = 15
diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
index 12678f2bf50..1df73bcf698 100644
--- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
+++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
@@ -24,7 +24,6 @@
move_delay = 3
max_integrity = 450 //really tanky, like damn
soft_armor = list(MELEE = 45, BULLET = 40, LASER = 30, ENERGY = 30, BOMB = 40, BIO = 0, FIRE = 100, ACID = 100)
- max_temperature = 30000
wreckage = /obj/structure/mecha_wreckage/savannah_ivanov
max_occupants = 2
max_equip_by_category = list(
diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
index 81e2d39142b..01b7facdef3 100644
--- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
@@ -55,7 +55,6 @@
var/health_boost = 0.5
///overlay to show on the mech
var/image/droid_overlay
- var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH)
/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy()
STOP_PROCESSING(SSobj, src)
diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm
index 8b791b96f0d..0d4465ef1c9 100644
--- a/code/modules/vehicles/mecha/mecha_actions.dm
+++ b/code/modules/vehicles/mecha/mecha_actions.dm
@@ -26,29 +26,6 @@
return
chassis.resisted_against(owner)
-/datum/action/vehicle/sealed/mecha/mech_toggle_internals
- name = "Toggle Internal Airtank Usage"
- action_icon_state = "mech_internals_off"
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_MECHABILITY_TOGGLE_INTERNALS,
- )
-
-/datum/action/vehicle/sealed/mecha/mech_toggle_internals/action_activate(trigger_flags)
- if(!owner || !chassis || !(owner in chassis.occupants))
- return
-
- if(!chassis.internal_tank) //Just in case.
- chassis.use_internal_tank = FALSE
- chassis.balloon_alert(owner, "no tank available!")
- chassis.log_message("Switch to internal tank failed. No tank available.", LOG_MECHA)
- return
-
- chassis.use_internal_tank = !chassis.use_internal_tank
- action_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]"
- chassis.balloon_alert(owner, "taking air from [chassis.use_internal_tank ? "internal airtank" : "environment"]")
- chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].", LOG_MECHA)
- update_button_icon()
-
/datum/action/vehicle/sealed/mecha/mech_toggle_lights
name = "Toggle Lights"
action_icon_state = "mech_lights_off"
diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm
index c7f14ac4ee0..9411b19df3b 100644
--- a/code/modules/vehicles/mecha/mecha_control_console.dm
+++ b/code/modules/vehicles/mecha/mecha_control_console.dm
@@ -30,7 +30,6 @@
name = M.name,
integrity = round((M.obj_integrity / M.max_integrity) * 100),
charge = M.cell ? round(M.cell.percent()) : null,
- airtank = M.internal_tank ? M.return_pressure() : null,
pilot = M.return_drivers(),
location = get_area_name(M, TRUE),
emp_recharging = MT.recharging,
@@ -97,7 +96,6 @@
var/answer = {"Name: [chassis.name]
Integrity: [round((chassis.obj_integrity/chassis.max_integrity * 100), 0.01)]%
Cell Charge: [isnull(cell_charge) ? "Not Found":"[chassis.cell.percent()]%"]
- Airtank: [chassis.internal_tank ? "[round(chassis.return_pressure(), 0.01)]" : "Not Equipped"] kPa
Pilot: [chassis.return_drivers() || "None"]
Location: [get_area_name(chassis, TRUE) || "Unknown"]"}
if(istype(chassis, /obj/vehicle/sealed/mecha/working/ripley))
diff --git a/code/modules/vehicles/mecha/mecha_damage.dm b/code/modules/vehicles/mecha/mecha_damage.dm
index 9e80596f94a..1bfbbf5b128 100644
--- a/code/modules/vehicles/mecha/mecha_damage.dm
+++ b/code/modules/vehicles/mecha/mecha_damage.dm
@@ -50,10 +50,6 @@
switch(flag)
if(MECHA_INT_FIRE)
return "activating internal fire supression..."
- if(MECHA_INT_TEMP_CONTROL)
- return "resetting temperature module..."
- if(MECHA_INT_TANK_BREACH)
- return "activating tank sealant..."
if(MECHA_INT_CONTROL_LOST)
return "recalibrating coordination system..."
@@ -62,10 +58,6 @@
switch(flag)
if(MECHA_INT_FIRE)
return "internal fire supressed"
- if(MECHA_INT_TEMP_CONTROL)
- return "temperature chip reactivated"
- if(MECHA_INT_TANK_BREACH)
- return "air tank sealed"
if(MECHA_INT_CONTROL_LOST)
return "coordination re-established"
@@ -74,10 +66,6 @@
switch(flag)
if(MECHA_INT_FIRE)
return "fire supression canceled"
- if(MECHA_INT_TEMP_CONTROL)
- return "reset aborted"
- if(MECHA_INT_TANK_BREACH)
- return "sealant deactivated"
if(MECHA_INT_CONTROL_LOST)
return "recalibration failed"
@@ -88,13 +76,7 @@
diag_hud_set_mechstat()
/obj/vehicle/sealed/mecha/proc/clear_internal_damage(int_dam_flag)
- if(internal_damage & int_dam_flag)
- switch(int_dam_flag)
- if(MECHA_INT_TEMP_CONTROL)
- to_chat(occupants, "[icon2html(src, occupants)][span_boldnotice("Life support system reactivated.")]")
- if(MECHA_INT_FIRE)
- to_chat(occupants, "[icon2html(src, occupants)][span_boldnotice("Internal fire extinguished.")]")
- if(MECHA_INT_TANK_BREACH)
- to_chat(occupants, "[icon2html(src, occupants)][span_boldnotice("Damaged internal tank has been sealed.")]")
+ if(internal_damage & int_dam_flag && int_dam_flag == MECHA_INT_FIRE)
+ to_chat(occupants, "[icon2html(src, occupants)][span_boldnotice("Internal fire extinguished.")]")
internal_damage &= ~int_dam_flag
diag_hud_set_mechstat()
diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm
index f0897273284..3ea27f466e8 100644
--- a/code/modules/vehicles/mecha/mecha_defense.dm
+++ b/code/modules/vehicles/mecha/mecha_defense.dm
@@ -266,12 +266,8 @@
cell.charge = cell.maxcharge
if(internal_damage & MECHA_INT_FIRE)
clear_internal_damage(MECHA_INT_FIRE)
- if(internal_damage & MECHA_INT_TEMP_CONTROL)
- clear_internal_damage(MECHA_INT_TEMP_CONTROL)
if(internal_damage & MECHA_INT_SHORT_CIRCUIT)
clear_internal_damage(MECHA_INT_SHORT_CIRCUIT)
- if(internal_damage & MECHA_INT_TANK_BREACH)
- clear_internal_damage(MECHA_INT_TANK_BREACH)
if(internal_damage & MECHA_INT_CONTROL_LOST)
clear_internal_damage(MECHA_INT_CONTROL_LOST)
diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm
index d2f2e03730c..c81f635be83 100644
--- a/code/modules/vehicles/mecha/mecha_movement.dm
+++ b/code/modules/vehicles/mecha/mecha_movement.dm
@@ -11,13 +11,6 @@
return
playsound(src, stepsound, 40, TRUE)
-///Disconnects air tank- air port connection on mecha move
-/obj/vehicle/sealed/mecha/proc/disconnect_air()
- SIGNAL_HANDLER
- if(internal_tank.disconnect()) // Something moved us and broke connection
- to_chat(occupants, "[icon2html(src, occupants)][span_warning("Air port connection has been severed!")]")
- log_message("Lost connection to gas port.", LOG_MECHA)
-
/obj/vehicle/sealed/mecha/relaymove(mob/living/user, direction)
. = TRUE
if(!canmove || !(user in return_drivers()))
@@ -32,11 +25,6 @@
return FALSE
if(!direction)
return FALSE
- if(internal_tank?.connected_port)
- if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE))
- to_chat(occupants, "[icon2html(src, occupants)][span_warning("Unable to move while connected to the air system port!")]")
- TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS)
- return FALSE
if(construction_state)
if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE))
to_chat(occupants, "[icon2html(src, occupants)][span_danger("Maintenance protocols in effect.")]")
diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm
index c3b44719b83..5b5fe0276cb 100644
--- a/code/modules/vehicles/mecha/mecha_ui.dm
+++ b/code/modules/vehicles/mecha/mecha_ui.dm
@@ -56,7 +56,6 @@
/obj/vehicle/sealed/mecha/ui_static_data(mob/user)
var/list/data = list()
- data["cabin_dangerous_highpressure"] = WARNING_HIGH_PRESSURE
data["mineral_material_amount"] = MINERAL_MATERIAL_AMOUNT
//map of relevant flags to check tgui side, not every flag needs to be here
data["mechflag_keys"] = list(
@@ -67,8 +66,6 @@
)
data["internal_damage_keys"] = list(
"MECHA_INT_FIRE" = MECHA_INT_FIRE,
- "MECHA_INT_TEMP_CONTROL" = MECHA_INT_TEMP_CONTROL,
- "MECHA_INT_TANK_BREACH" = MECHA_INT_TANK_BREACH,
"MECHA_INT_CONTROL_LOST" = MECHA_INT_CONTROL_LOST,
)
data["mech_electronics"] = list(
@@ -84,7 +81,6 @@
if(!isoperator)
data["name"] = name
data["mecha_flags"] = mecha_flags
- data["internal_tank_valve"] = internal_tank_valve
data["cell"] = cell?.name
data["scanning"] = scanmod?.name
data["capacitor"] = capacitor?.name
@@ -113,13 +109,6 @@
data["power_max"] = cell?.maxcharge
data["mecha_flags"] = mecha_flags
data["internal_damage"] = internal_damage
- data["airtank_present"] = !!internal_tank
- data["air_source"] = use_internal_tank ? "Internal Airtank" : "Environment"
- data["airtank_pressure"] = null
- data["airtank_temp"] = return_temperature()
- data["port_connected"] = internal_tank?.connected_port ? TRUE : FALSE
- data["cabin_pressure"] = round(return_pressure(), 0.01)
- data["cabin_temp"] = return_temperature()
data["dna_lock"] = dna_lock
data["weapons_safety"] = weapons_safety
data["mech_view"] = ui_view.assigned_map
@@ -233,12 +222,6 @@
return
capacitor.forceMove(get_turf(src))
capacitor = null
- if("set_pressure")
- var/new_pressure = tgui_input_number(usr, "Enter new pressure", "Cabin pressure change", internal_tank_valve)
- if(isnull(new_pressure) || !construction_state)
- return
- internal_tank_valve = new_pressure
- to_chat(usr, span_notice("The internal pressure valve has been set to [internal_tank_valve]kPa."))
if("add_req_access")
if(!(mecha_flags & ADDING_ACCESS_POSSIBLE))
return
@@ -283,26 +266,6 @@
if("view_dna")
tgui_alert(usr, "Enzymes detected: " + dna_lock)
return FALSE
- if("toggle_airsource")
- if(!internal_tank)
- return
- use_internal_tank = !use_internal_tank
- balloon_alert(usr, "taking air from [use_internal_tank ? "internal airtank" : "environment"]")
- log_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].", LOG_MECHA)
- if("toggle_port")
- if(internal_tank.connected_port)
- if(internal_tank.disconnect())
- to_chat(occupants, "[icon2html(src, occupants)][span_notice("Disconnected from the air system port.")]")
- log_message("Disconnected from gas port.", LOG_MECHA)
- return TRUE
- to_chat(occupants, "[icon2html(src, occupants)][span_warning("Unable to disconnect from the air system port!")]")
- return
- var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate() in loc
- if(internal_tank.connect(new_port = possible_port))
- to_chat(occupants, "[icon2html(src, occupants)][span_notice("Connected to the air system port.")]")
- log_message("Connected to gas port.", LOG_MECHA)
- return TRUE
- to_chat(occupants, "[icon2html(src, occupants)][span_warning("Unable to connect with air system port!")]")
if("toggle_maintenance")
if(construction_state)
to_chat(occupants, "[icon2html(src, occupants)][span_danger("Maintenance protocols in effect")]")
diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm
index bf790f3a372..80034939c35 100644
--- a/code/modules/vehicles/mecha/working/ripley.dm
+++ b/code/modules/vehicles/mecha/working/ripley.dm
@@ -5,7 +5,6 @@
base_icon_state = "ripley"
silicon_icon_state = "ripley-empty"
move_delay = 1.5 //Move speed, lower is faster.
- max_temperature = 20000
max_integrity = 200
ui_x = 1200
lights_power = 7
@@ -64,9 +63,8 @@
fast_pressure_step_in = 2 //step_in while in low pressure conditions
slow_pressure_step_in = 4 //step_in while in normal pressure conditions
move_delay = 4
- max_temperature = 30000
max_integrity = 250
- possible_int_damage = MECHA_INT_FIRE|MECHA_INT_TEMP_CONTROL|MECHA_INT_TANK_BREACH|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT
+ possible_int_damage = MECHA_INT_FIRE|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT
soft_armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, FIRE = 100, ACID = 100)
wreckage = /obj/structure/mecha_wreckage/ripley/mk2
enclosed = TRUE
@@ -75,7 +73,6 @@
/obj/vehicle/sealed/mecha/working/ripley/mk2/generate_actions()
initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject)
- initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals)
initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights)
initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats)
initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/strafe)
diff --git a/icons/mob/screen/generic.dmi b/icons/mob/screen/generic.dmi
index b00497932d8054421caf9a1c5ebd6d1d30765cab..561ee7bec6a8951c543d06cf8c95154b1f17ca3b 100644
GIT binary patch
literal 113084
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