From dd2e201d4ade7da0a3654915dbdf32853300d19a Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:18:13 -0700 Subject: [PATCH] [MDB IGNORE] engineering 1/4: dynamic / procedural gases, XGM touchups (#5674) Co-authored-by: VM_USER Co-authored-by: silicons --- citadel.dme | 44 +- code/__DEFINES/atmospherics/constants.dm | 8 - code/__DEFINES/atmospherics/flags.dm | 13 - code/__DEFINES/atmospherics/gases/flags.dm | 29 + .../atmospherics/gases/generation.dm | 21 + code/__DEFINES/atmospherics/gases/groups.dm | 33 + code/__DEFINES/atmospherics/gases/ids.dm | 49 + code/__DEFINES/atmospherics/gases/reagents.dm | 6 + code/__DEFINES/atmospherics/gases/visuals.dm | 8 + code/__DEFINES/atmospherics/helpers.dm | 2 +- code/__DEFINES/atmospherics/machinery.dm | 64 ++ .../__DEFINES/atmospherics/machinery/alarm.dm | 38 + .../atmospherics/machinery/scrubber.dm | 5 + code/__DEFINES/atmospherics/machinery/vent.dm | 13 + code/__DEFINES/machinery.dm | 29 - code/__DEFINES/procs/do_after.dm | 2 + code/__HELPERS/unsorted.dm | 2 +- code/controllers/subsystem/air.dm | 38 +- code/controllers/subsystem/plants.dm | 4 +- code/controllers/verbs.dm | 9 +- .../crafting/recipes/recipes_misc.dm | 2 +- code/datums/wires/alarm.dm | 10 +- code/game/area/area.dm | 60 +- code/game/gamemodes/objective.dm | 2 +- .../technomancer/spells/oxygenate.dm | 4 +- code/game/machinery/_machinery.dm | 69 +- .../game/machinery/_machinery_construction.dm | 103 +++ code/game/machinery/air_alarm.dm | 865 ------------------ code/game/machinery/atmo_control.dm | 8 +- code/game/machinery/atmoalter/scrubber.dm | 279 ------ code/game/machinery/bomb_tester.dm | 2 +- code/game/machinery/computer/atmos_alert.dm | 2 +- code/game/machinery/cryo.dm | 11 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/firedoor.dm | 6 +- code/game/machinery/doors/phoronlocks.dm | 9 +- code/game/machinery/pipe/pipe_recipes.dm | 3 +- code/game/machinery/spaceheater.dm | 2 +- code/game/machinery/vending.dm | 2 +- code/game/mecha/equipment/tools/generator.dm | 4 +- code/game/mecha/mecha.dm | 2 +- code/game/objects/effects/mines.dm | 6 +- .../objects/effects/spawners/bombspawner.dm | 6 +- code/game/objects/effects/zone_divider.dm | 2 +- code/game/objects/items/blueprints.dm | 2 +- .../game/objects/items/circuitboards/frame.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 8 +- .../items/devices/communicator/helper.dm | 8 +- code/game/objects/items/scanners/atmos.dm | 60 ++ .../objects/items/scanners/biology.dm} | 12 +- .../scanners.dm => scanners/health.dm} | 249 +---- code/game/objects/items/scanners/plant.dm | 146 +++ code/game/objects/items/scanners/reagent.dm | 52 ++ code/game/objects/items/scanners/slime.dm | 44 + .../objects/items/scanners/spectrometer.dm | 64 ++ code/game/objects/items/storage/belt.dm | 8 +- code/game/objects/items/storage/toolbox.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 10 +- .../objects/items/weapons/tanks/jetpack.dm | 10 +- .../objects/items/weapons/tanks/tank_types.dm | 42 +- .../game/objects/items/weapons/tanks/tanks.dm | 61 +- code/game/objects/mob_spawner.dm | 16 +- code/game/objects/objs.dm | 13 +- code/game/objects/random/maintenance.dm | 2 +- code/game/objects/random/misc.dm | 2 +- code/game/objects/structures/bonfire.dm | 4 +- .../crates_lockers/closets/coffin.dm | 2 +- .../crates_lockers/closets/secure/cargo.dm | 2 +- .../closets/secure/hydroponics.dm | 2 +- code/game/objects/structures/loot_piles.dm | 2 +- code/game/objects/structures/mineral_bath.dm | 2 +- code/game/objects/structures/transit_tubes.dm | 2 +- code/game/objects/structures/watercloset.dm | 2 +- code/game/turfs/simulated/floors/water.dm | 12 +- code/game/turfs/simulated/wall_attacks.dm | 4 +- code/modules/admin/callproc/callproc.dm | 4 +- code/modules/admin/verbs/debug.dm | 10 +- code/modules/admin/verbs/diagnostics.dm | 22 +- .../asset_cache/assets/legacy_nanoui.dm | 1 - .../atmospherics/atmosphere/_atmosphere.dm | 100 -- .../atmospherics/atmosphere/atmosphere.dm | 117 +++ .../atmospherics/environmental/public.dm | 3 + .../atmospherics/environmental/turf.dm | 2 +- .../atmospherics/environmental/zas/_docs.dm | 2 +- .../environmental/zas/connection.dm | 12 +- .../environmental/zas/connection_manager.dm | 2 +- .../environmental/zas/controller.dm | 3 - .../atmospherics/environmental/zas/debug.dm | 4 +- .../atmospherics/environmental/zas/edge.dm | 20 +- .../atmospherics/environmental/zas/fire.dm | 8 +- .../atmospherics/environmental/zas/phoron.dm | 8 +- .../atmospherics/environmental/zas/turf.dm | 6 +- .../atmospherics/environmental/zas/zone.dm | 12 +- code/modules/atmospherics/gasmixtures/flow.dm | 357 ++++++++ .../atmospherics/gasmixtures/gas_data.dm | 270 ++++++ .../gasmixtures/gas_generation.dm | 103 +++ .../atmospherics/gasmixtures/gas_mixture.dm | 180 +++- .../atmospherics/gasmixtures/gas_types.dm | 492 +--------- .../gasmixtures/gas_types/core.dm | 82 ++ .../gasmixtures/gas_types_hardcoded.dm | 201 ++++ .../atmospherics/gasmixtures/reactions.dm | 14 +- .../gasmixtures/transfer_helpers.dm | 2 +- .../machinery/_atmospherics_helpers.dm | 120 +-- .../atmospherics/machinery/air_alarm.dm | 782 ++++++++++++++++ .../atmospherics/machinery/analyzer_hooks.dm | 19 +- .../binary_devices/algae_generator_vr.dm | 24 +- .../components/binary_devices/circulator.dm | 1 + .../components/binary_devices/dp_vent_pump.dm | 8 +- .../components/binary_devices/heat_pump.dm | 3 +- .../binary_devices/massive_gas_pump.dm | 16 +- .../binary_devices/massive_heat_pump.dm | 7 +- .../components/binary_devices/passive_gate.dm | 6 +- .../components/binary_devices/pump.dm | 10 +- .../machinery/components/component.dm | 145 +++ .../components/omni_devices/_omni_extras.dm | 10 +- .../components/omni_devices/filter.dm | 7 +- .../components/omni_devices/mixer.dm | 4 +- .../components/omni_devices/omni_base.dm | 4 +- .../components/trinary_devices/filter.dm | 209 ++--- .../components/trinary_devices/mixer.dm | 6 +- .../trinary_devices/molar_filter.dm | 111 +++ .../machinery/components/unary/cold_sink.dm | 12 +- .../components/unary/heat_exchanger.dm | 6 +- .../machinery/components/unary/heat_source.dm | 12 +- .../components/unary/outlet_injector.dm | 6 +- .../components/unary/oxygen_generator.dm | 7 +- .../unary/retro_pump_and_scrubber.dm | 72 -- .../machinery/components/unary/vent_pump.dm | 754 ++++++++------- .../components/unary/vent_scrubber.dm | 411 ++++++--- .../atmospherics/machinery/machinery.dm | 32 +- .../atmospherics/machinery}/meter.dm | 0 .../atmospherics/machinery/pipes/tank.dm | 20 +- .../portable}/area_atmos_computer.dm | 6 +- .../machinery/portable}/canister.dm | 56 +- .../portable}/portable_atmospherics.dm | 170 ++-- .../machinery/portable/powered.dm | 85 ++ .../atmospherics/machinery/portable}/pump.dm | 25 +- .../machinery/portable/scrubber.dm | 205 +++++ .../atmospherics/machinery}/zvent.dm | 2 + code/modules/cargo/supplypacks/hydroponics.dm | 2 +- code/modules/cargo/supplypacks/misc.dm | 2 +- code/modules/cargo/supplypacks/supply.dm | 2 +- code/modules/clothing/masks/gasmask.dm | 7 +- .../modules/clothing/spacesuits/void/event.dm | 2 +- code/modules/clothing/suits/aliens/tajara.dm | 2 +- code/modules/clothing/suits/hooded.dm | 8 +- code/modules/clothing/suits/jobs.dm | 6 +- code/modules/clothing/suits/labcoat.dm | 2 +- code/modules/clothing/suits/oricon.dm | 2 +- code/modules/events/atmos_leak.dm | 8 +- code/modules/events/supply_demand.dm | 4 +- code/modules/gamemaster/actions/atmos_leak.dm | 8 +- code/modules/hardsuits/suits/combat.dm | 2 +- code/modules/hardsuits/suits/ert.dm | 2 +- code/modules/hardsuits/suits/pmc.dm | 2 +- .../modules/hydroponics/beekeeping/beehive.dm | 2 +- code/modules/hydroponics/seed.dm | 4 +- code/modules/hydroponics/trays/tray_tools.dm | 150 +-- .../integrated_electronics/subtypes/input.dm | 16 +- .../job_types/station/service/botanist.dm | 2 +- .../network_builder/power_cable.dm | 66 +- code/modules/maps/_shim/away_spawner.dm | 16 +- .../geothermal_vent/geothermal_vent.dm | 17 +- code/modules/maps/overmap/planets/_virgo3b.dm | 17 +- code/modules/maps/overmap/planets/virgo2.dm | 18 +- .../modules/maps/overmap/space/debrisfield.dm | 6 +- .../modules/maps/overmap/space/talon/talon.dm | 2 +- code/modules/maps/weather/classd.dm | 13 +- code/modules/maps/weather/classg.dm | 18 +- code/modules/maps/weather/classh.dm | 17 +- code/modules/maps/weather/classm.dm | 16 +- code/modules/maps/weather/classp.dm | 17 +- code/modules/maps/weather/lavaland.dm | 19 +- code/modules/maps/weather/rift_lythios-43c.dm | 15 +- .../engineering_points_vendor.dm | 4 +- code/modules/mob/living/bot/farmbot.dm | 4 +- .../mob/living/carbon/alien/larva/life.dm | 2 +- code/modules/mob/living/carbon/breathe.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 28 +- code/modules/mob/living/defense.dm | 2 +- .../pai/software_modules/atmosphere_sensor.dm | 2 +- .../silicon/robot/dogborg/dog_modules_vr.dm | 2 +- .../silicon/robot/dogborg/dog_sleeper_vr.dm | 2 +- .../silicon/robot/robot_modules/event.dm | 2 +- .../robot/robot_modules/station/drone.dm | 2 +- .../robot_modules/station/engineering.dm | 4 +- .../robot/robot_modules/station/service.dm | 4 +- code/modules/mob/living/simple_mob/life.dm | 16 +- .../subtypes/animal/space/mouse_army.dm | 4 +- .../subtypes/slime/xenobio/subtypes.dm | 2 +- .../subtypes/vore/solargrub_larva.dm | 2 +- code/modules/mob/observer/dead/dead.dm | 13 +- .../modules/overmap/legacy/overmap_shuttle.dm | 4 +- code/modules/power/fission/engine.dm | 16 +- code/modules/power/fusion/core/core_field.dm | 12 +- code/modules/power/port_gen.dm | 2 +- code/modules/power/singularity/collector.dm | 12 +- .../particle_accelerator/particle_smasher.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 6 +- code/modules/reagents/Misc-Recipes.dm | 4 +- .../reagents/Chemistry-Reagents-Toxins.dm | 6 +- .../modules/reagents/distilling/distilling.dm | 7 +- code/modules/research/designs/bio_devices.dm | 2 +- code/modules/research/designs/engineering.dm | 4 +- code/modules/resleeving/infomorph.dm | 2 +- code/modules/resleeving/infomorph_software.dm | 2 +- code/modules/shuttles/shuttles_web.dm | 8 +- code/modules/species/outsider/scori.dm | 4 +- code/modules/species/outsider/vox.dm | 4 +- code/modules/species/species.dm | 14 +- code/modules/species/station/alraune.dm | 12 +- code/modules/species/station/phoronoids.dm | 6 +- .../species/station/standard/zaddat.dm | 2 +- code/modules/species/station/xenochimera.dm | 38 +- .../species/xenomorphs/alien_species.dm | 2 +- code/modules/surgery/external_repair.dm | 2 +- code/modules/tgui/modules/atmos_control.dm | 8 +- .../tgui/modules/supermatter_monitor.dm | 10 +- code/modules/unit_tests/_unit_tests.dm | 1 + .../unit_tests/atmospherics/_atmospherics.dm | 1 + code/modules/unit_tests/atmospherics/gases.dm | 17 + code/modules/unit_tests/map_tests.dm | 4 +- code/modules/unit_tests/quick_swap_sanity.dm | 2 +- code/modules/vore/eating/living_vr.dm | 4 +- .../modules/vore/fluffstuff/custom_clothes.dm | 2 +- .../xenoarcheaology/artifacts/artifact.dm | 8 +- .../xenoarcheaology/artifacts/replicator.dm | 2 +- .../modules/xenoarcheaology/effects/gasco2.dm | 4 +- .../xenoarcheaology/effects/gasnitro.dm | 4 +- .../modules/xenoarcheaology/effects/gasoxy.dm | 4 +- .../xenoarcheaology/effects/gasphoron.dm | 4 +- .../xenoarcheaology/effects/gassleeping.dm | 4 +- code/modules/xenoarcheaology/misc.dm | 4 +- code/modules/xenobio/items/extracts.dm | 4 +- icons/effects/atmospherics.dmi | Bin 19408 -> 0 bytes .../components/trinary/molar_filter.dmi | Bin 0 -> 1828 bytes icons/modules/atmospherics/gas.dmi | Bin 0 -> 21114 bytes icons/obj/pipe-item.dmi | Bin 29150 -> 30500 bytes maps/away_missions/140x140/snow_outpost.dmm | 6 +- maps/away_missions/140x140/snowfield.dmm | 2 +- .../archive/blackmarketpackers.dmm | 2 +- maps/away_missions/archive/example.dmm | 2 +- .../archive/stationCollision.dmm | 2 +- maps/euthenia/levels/deck1.dmm | 136 +-- maps/euthenia/levels/deck2.dmm | 160 ++-- maps/euthenia/levels/deck3.dmm | 157 ++-- maps/euthenia/levels/deck4.dmm | 48 +- maps/euthenia/levels/deck5.dmm | 2 +- maps/generic/misc.dm | 4 +- maps/map_levels/140x140/talon/talon1.dmm | 46 +- maps/map_levels/140x140/talon/talon2.dmm | 46 +- maps/minitest/levels/minitest.dmm | 30 +- maps/rift/levels/rift-01-underground3.dmm | 2 +- maps/rift/levels/rift-02-underground2.dmm | 134 +-- maps/rift/levels/rift-03-underground1.dmm | 102 +-- maps/rift/levels/rift-04-surface1.dmm | 248 ++--- maps/rift/levels/rift-05-surface2.dmm | 188 ++-- maps/rift/levels/rift-06-surface3.dmm | 124 +-- maps/rift/levels/rift-08-west_deep.dmm | 18 +- maps/rift/levels/rift-09-west_caves.dmm | 8 +- maps/rift/levels/rift-10-west_plains.dmm | 69 +- maps/sectors/frozen_140/levels/frozen_140.dmm | 10 +- maps/sectors/frozen_192/levels/frozen_192.dmm | 10 +- maps/sectors/gaia_140/levels/gaia_140.dmm | 8 +- maps/sectors/gaia_192/levels/gaia_192.dmm | 16 +- .../lavaland_140/levels/lavaland_140.dmm | 32 +- .../lavaland_192/levels/lavaland_192.dmm | 32 +- .../miaphus_192/levels/miaphus_192_beach.dmm | 4 +- .../piratebase_192/levels/piratebase_192.dmm | 48 +- .../tradeport_140/levels/tradeport_140.dmm | 106 +-- .../tradeport_192/levels/tradeport_192.dmm | 106 +-- .../virgo4_140/levels/virgo4_140_beach.dmm | 4 +- .../wasteland_140/levels/wasteland_140.dmm | 8 +- .../wasteland_192/levels/wasteland_192.dmm | 8 +- .../level_specific/debrisfield/clownship.dmm | 12 +- .../debrisfield/ship_sci_overrun.dmm | 4 +- .../debrisfield_vr/gecko_cr_wreck.dmm | 20 +- .../debrisfield_vr/mackerel_lc_wreck.dmm | 6 +- .../debrisfield_vr/salamander_wreck.dmm | 12 +- .../debrisfield_vr/ship_sci_overrun.dmm | 4 +- .../debrisfield_vr/tinycarrier.dmm | 10 +- .../level_specific/lavaland/botany.dmm | 4 +- .../level_specific/virgo2/DJOutpost1.dmm | 2 +- maps/submaps/wilderness/DJOutpost1.dmm | 2 +- maps/submaps/wilderness/DJOutpost3.dmm | 2 +- maps/submaps/wilderness/DJOutpost4.dmm | 2 +- maps/templates/admin/dhael_centcom.dmm | 2 +- maps/templates/admin/ert.dmm | 48 +- maps/templates/admin/killhouse2.dmm | 4 +- maps/templates/admin/kk_mercship.dmm | 56 +- .../shuttles/overmaps/generic/bearcat.dmm | 48 +- .../shuttles/overmaps/generic/cruise_ship.dmm | 2 +- .../shuttles/overmaps/generic/cruiser.dmm | 109 ++- .../shuttles/overmaps/generic/curashuttle.dmm | 4 +- .../shuttles/overmaps/generic/gecko_cr.dmm | 20 +- .../shuttles/overmaps/generic/gecko_sh.dmm | 14 +- .../shuttles/overmaps/generic/itglight.dmm | 54 +- .../shuttles/overmaps/generic/mackerel_hc.dmm | 6 +- .../overmaps/generic/mackerel_hc_skel.dmm | 6 +- .../shuttles/overmaps/generic/mackerel_lc.dmm | 6 +- .../shuttles/overmaps/generic/mackerel_sh.dmm | 6 +- .../overmaps/generic/mercenarybase.dmm | 32 +- .../shuttles/overmaps/generic/mercship.dmm | 34 +- .../shuttles/overmaps/generic/salamander.dmm | 12 +- .../shuttles/overmaps/generic/vespa.dmm | 84 +- maps/tether/engines/rust.dmm | 12 +- maps/tether/engines/singulo.dmm | 6 +- maps/tether/engines/sme.dmm | 10 +- maps/tether/engines/tesla.dmm | 6 +- maps/tether/levels/midpoint.dmm | 4 +- maps/tether/levels/mining.dmm | 12 +- maps/tether/levels/station1.dmm | 174 ++-- maps/tether/levels/station2.dmm | 162 ++-- maps/tether/levels/surface1.dmm | 339 ++++--- maps/tether/levels/surface2.dmm | 270 +++--- maps/tether/levels/surface3.dmm | 268 +++--- maps/triumph/engines/burn.dmm | 8 +- maps/triumph/engines/fission.dmm | 6 +- maps/triumph/engines/rust.dmm | 10 +- maps/triumph/engines/sme.dmm | 8 +- maps/triumph/levels/deck1.dmm | 111 ++- maps/triumph/levels/deck2.dmm | 150 +-- maps/triumph/levels/deck3.dmm | 240 ++--- maps/triumph/levels/deck4.dmm | 236 ++--- maps/triumph/levels/flagship.dmm | 2 +- nano/templates/air_alarm.tmpl | 220 ----- tgui/docs/component-reference.md | 2 + tgui/packages/common/math.ts | 26 + tgui/packages/tgui/components/Button.tsx | 5 +- tgui/packages/tgui/components/Collapsible.tsx | 46 +- tgui/packages/tgui/components/Component.tsx | 2 +- tgui/packages/tgui/components/LabeledList.tsx | 7 +- tgui/packages/tgui/interfaces/ATM.tsx | 8 +- tgui/packages/tgui/interfaces/AirAlarm.js | 323 ------- .../tgui/interfaces/AtmosControlConsole.tsx | 178 ---- tgui/packages/tgui/interfaces/AtmosFilter.tsx | 81 -- .../interfaces/{common => }/AtmosHandbook.tsx | 44 +- tgui/packages/tgui/interfaces/GasAnalyzer.tsx | 40 - .../tgui/interfaces/Hypertorus/Controls.js | 207 ----- .../tgui/interfaces/Hypertorus/Gases.js | 175 ---- .../tgui/interfaces/Hypertorus/Parameters.js | 149 --- .../tgui/interfaces/Hypertorus/Recipes.js | 222 ----- .../interfaces/Hypertorus/Temperatures.js | 252 ----- .../tgui/interfaces/Hypertorus/helpers.js | 23 - .../tgui/interfaces/Hypertorus/index.js | 103 --- tgui/packages/tgui/interfaces/JoinMenu.tsx | 11 +- .../tgui/interfaces/NtosGasAnalyzer.tsx | 12 - .../tgui/interfaces/PortableScrubber.js | 31 - .../packages/tgui/interfaces/common/Atmos.tsx | 198 ++++ .../tgui/interfaces/common/AtmosControls.js | 169 ---- .../tgui/interfaces/common/AtmosMachine.tsx | 105 +++ .../tgui/interfaces/common/AtmosPortable.tsx | 108 +++ .../tgui/interfaces/machines/AirAlarm.tsx | 500 ++++++++++ .../machines/AtmosPortableScrubber.tsx | 54 ++ .../machines/AtmosTrinaryFilter.tsx | 56 ++ .../machines/AtmosTrinaryMolarFilter.tsx | 73 ++ .../interfaces/machines/AtmosVentPump.tsx | 151 +++ .../interfaces/machines/AtmosVentScrubber.tsx | 107 +++ .../tgui/styles/components/Collapsible.scss | 27 + .../tgui/styles/interfaces/Hypertorus.scss | 158 ---- tgui/packages/tgui/styles/main.scss | 1 - 361 files changed, 8908 insertions(+), 8541 deletions(-) delete mode 100644 code/__DEFINES/atmospherics/flags.dm create mode 100644 code/__DEFINES/atmospherics/gases/flags.dm create mode 100644 code/__DEFINES/atmospherics/gases/generation.dm create mode 100644 code/__DEFINES/atmospherics/gases/groups.dm create mode 100644 code/__DEFINES/atmospherics/gases/ids.dm create mode 100644 code/__DEFINES/atmospherics/gases/reagents.dm create mode 100644 code/__DEFINES/atmospherics/gases/visuals.dm create mode 100644 code/__DEFINES/atmospherics/machinery.dm create mode 100644 code/__DEFINES/atmospherics/machinery/alarm.dm create mode 100644 code/__DEFINES/atmospherics/machinery/scrubber.dm create mode 100644 code/__DEFINES/atmospherics/machinery/vent.dm create mode 100644 code/game/machinery/_machinery_construction.dm delete mode 100644 code/game/machinery/air_alarm.dm delete mode 100644 code/game/machinery/atmoalter/scrubber.dm create mode 100644 code/game/objects/items/scanners/atmos.dm rename code/{modules/xenobio2/tools/xeno_trait_scanner.dm => game/objects/items/scanners/biology.dm} (94%) rename code/game/objects/items/{devices/scanners.dm => scanners/health.dm} (65%) create mode 100644 code/game/objects/items/scanners/plant.dm create mode 100644 code/game/objects/items/scanners/reagent.dm create mode 100644 code/game/objects/items/scanners/slime.dm create mode 100644 code/game/objects/items/scanners/spectrometer.dm delete mode 100644 code/modules/atmospherics/atmosphere/_atmosphere.dm create mode 100644 code/modules/atmospherics/atmosphere/atmosphere.dm create mode 100644 code/modules/atmospherics/gasmixtures/flow.dm create mode 100644 code/modules/atmospherics/gasmixtures/gas_data.dm create mode 100644 code/modules/atmospherics/gasmixtures/gas_generation.dm create mode 100644 code/modules/atmospherics/gasmixtures/gas_types/core.dm create mode 100644 code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm create mode 100644 code/modules/atmospherics/machinery/air_alarm.dm create mode 100644 code/modules/atmospherics/machinery/components/component.dm create mode 100644 code/modules/atmospherics/machinery/components/trinary_devices/molar_filter.dm delete mode 100644 code/modules/atmospherics/machinery/components/unary/retro_pump_and_scrubber.dm rename code/{game/machinery/atmoalter => modules/atmospherics/machinery}/meter.dm (100%) rename code/{game/machinery/atmoalter => modules/atmospherics/machinery/portable}/area_atmos_computer.dm (97%) rename code/{game/machinery/atmoalter => modules/atmospherics/machinery/portable}/canister.dm (89%) rename code/{game/machinery/atmoalter => modules/atmospherics/machinery/portable}/portable_atmospherics.dm (60%) create mode 100644 code/modules/atmospherics/machinery/portable/powered.dm rename code/{game/machinery/atmoalter => modules/atmospherics/machinery/portable}/pump.dm (94%) create mode 100644 code/modules/atmospherics/machinery/portable/scrubber.dm rename code/{game/machinery/atmoalter => modules/atmospherics/machinery}/zvent.dm (96%) create mode 100644 code/modules/unit_tests/atmospherics/_atmospherics.dm create mode 100644 code/modules/unit_tests/atmospherics/gases.dm delete mode 100644 icons/effects/atmospherics.dmi create mode 100644 icons/modules/atmospherics/components/trinary/molar_filter.dmi create mode 100644 icons/modules/atmospherics/gas.dmi delete mode 100644 nano/templates/air_alarm.tmpl delete mode 100644 tgui/packages/tgui/interfaces/AirAlarm.js delete mode 100644 tgui/packages/tgui/interfaces/AtmosControlConsole.tsx delete mode 100644 tgui/packages/tgui/interfaces/AtmosFilter.tsx rename tgui/packages/tgui/interfaces/{common => }/AtmosHandbook.tsx (87%) delete mode 100644 tgui/packages/tgui/interfaces/GasAnalyzer.tsx delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/Controls.js delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/Gases.js delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/Parameters.js delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/Recipes.js delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/Temperatures.js delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/helpers.js delete mode 100644 tgui/packages/tgui/interfaces/Hypertorus/index.js delete mode 100644 tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx delete mode 100644 tgui/packages/tgui/interfaces/PortableScrubber.js create mode 100644 tgui/packages/tgui/interfaces/common/Atmos.tsx delete mode 100644 tgui/packages/tgui/interfaces/common/AtmosControls.js create mode 100644 tgui/packages/tgui/interfaces/common/AtmosMachine.tsx create mode 100644 tgui/packages/tgui/interfaces/common/AtmosPortable.tsx create mode 100644 tgui/packages/tgui/interfaces/machines/AirAlarm.tsx create mode 100644 tgui/packages/tgui/interfaces/machines/AtmosPortableScrubber.tsx create mode 100644 tgui/packages/tgui/interfaces/machines/AtmosTrinaryFilter.tsx create mode 100644 tgui/packages/tgui/interfaces/machines/AtmosTrinaryMolarFilter.tsx create mode 100644 tgui/packages/tgui/interfaces/machines/AtmosVentPump.tsx create mode 100644 tgui/packages/tgui/interfaces/machines/AtmosVentScrubber.tsx delete mode 100644 tgui/packages/tgui/styles/interfaces/Hypertorus.scss diff --git a/citadel.dme b/citadel.dme index 9ba994101ae..303ee5f6c75 100644 --- a/citadel.dme +++ b/citadel.dme @@ -117,11 +117,20 @@ #include "code\__DEFINES\atmospherics\atmospheres.dm" #include "code\__DEFINES\atmospherics\constants.dm" #include "code\__DEFINES\atmospherics\environmental.dm" -#include "code\__DEFINES\atmospherics\flags.dm" #include "code\__DEFINES\atmospherics\gas_strings.dm" #include "code\__DEFINES\atmospherics\gasmixtures.dm" #include "code\__DEFINES\atmospherics\helpers.dm" +#include "code\__DEFINES\atmospherics\machinery.dm" #include "code\__DEFINES\atmospherics\pipes.dm" +#include "code\__DEFINES\atmospherics\gases\flags.dm" +#include "code\__DEFINES\atmospherics\gases\generation.dm" +#include "code\__DEFINES\atmospherics\gases\groups.dm" +#include "code\__DEFINES\atmospherics\gases\ids.dm" +#include "code\__DEFINES\atmospherics\gases\reagents.dm" +#include "code\__DEFINES\atmospherics\gases\visuals.dm" +#include "code\__DEFINES\atmospherics\machinery\alarm.dm" +#include "code\__DEFINES\atmospherics\machinery\scrubber.dm" +#include "code\__DEFINES\atmospherics\machinery\vent.dm" #include "code\__DEFINES\cargo\supply.dm" #include "code\__DEFINES\client\player_flags.dm" #include "code\__DEFINES\client\playtime.dm" @@ -1114,10 +1123,10 @@ #include "code\game\legacy_html_uis\menus.dm" #include "code\game\machinery\_frame.dm" #include "code\game\machinery\_machinery.dm" +#include "code\game\machinery\_machinery_construction.dm" #include "code\game\machinery\_machinery_power.dm" #include "code\game\machinery\adv_med.dm" #include "code\game\machinery\ai_slipper.dm" -#include "code\game\machinery\air_alarm.dm" #include "code\game\machinery\atm_ret_field.dm" #include "code\game\machinery\atmo_control.dm" #include "code\game\machinery\beacon.dm" @@ -1180,12 +1189,6 @@ #include "code\game\machinery\wall_frames.dm" #include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\wishgranter.dm" -#include "code\game\machinery\atmoalter\area_atmos_computer.dm" -#include "code\game\machinery\atmoalter\canister.dm" -#include "code\game\machinery\atmoalter\meter.dm" -#include "code\game\machinery\atmoalter\portable_atmospherics.dm" -#include "code\game\machinery\atmoalter\pump.dm" -#include "code\game\machinery\atmoalter\scrubber.dm" #include "code\game\machinery\camera\camera.dm" #include "code\game\machinery\camera\camera_assembly.dm" #include "code\game\machinery\camera\motion.dm" @@ -1536,7 +1539,6 @@ #include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\powersink.dm" -#include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\scanners_vr.dm" #include "code\game\objects\items\devices\spy_bug.dm" #include "code\game\objects\items\devices\suit_cooling.dm" @@ -1580,6 +1582,12 @@ #include "code\game\objects\items\robot\robot_items.dm" #include "code\game\objects\items\robot\robot_parts.dm" #include "code\game\objects\items\robot\robot_upgrades.dm" +#include "code\game\objects\items\scanners\atmos.dm" +#include "code\game\objects\items\scanners\health.dm" +#include "code\game\objects\items\scanners\plant.dm" +#include "code\game\objects\items\scanners\reagent.dm" +#include "code\game\objects\items\scanners\slime.dm" +#include "code\game\objects\items\scanners\spectrometer.dm" #include "code\game\objects\items\stacks\fifty_spawner.dm" #include "code\game\objects\items\stacks\marker_beacons.dm" #include "code\game\objects\items\stacks\matter_synth.dm" @@ -2142,7 +2150,7 @@ #include "code\modules\asset_cache\assets\debug\fucky_wucky.dm" #include "code\modules\asset_cache\transports\asset_transport.dm" #include "code\modules\asset_cache\transports\webroot_transport.dm" -#include "code\modules\atmospherics\atmosphere\_atmosphere.dm" +#include "code\modules\atmospherics\atmosphere\atmosphere.dm" #include "code\modules\atmospherics\atmosphere\planet.dm" #include "code\modules\atmospherics\environmental\atom.dm" #include "code\modules\atmospherics\environmental\public.dm" @@ -2160,18 +2168,26 @@ #include "code\modules\atmospherics\environmental\zas\turf.dm" #include "code\modules\atmospherics\environmental\zas\variable_settings.dm" #include "code\modules\atmospherics\environmental\zas\zone.dm" +#include "code\modules\atmospherics\gasmixtures\flow.dm" +#include "code\modules\atmospherics\gasmixtures\gas_data.dm" +#include "code\modules\atmospherics\gasmixtures\gas_generation.dm" #include "code\modules\atmospherics\gasmixtures\gas_mixture.dm" #include "code\modules\atmospherics\gasmixtures\gas_types.dm" +#include "code\modules\atmospherics\gasmixtures\gas_types_hardcoded.dm" #include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm" #include "code\modules\atmospherics\gasmixtures\reactions.dm" #include "code\modules\atmospherics\gasmixtures\transfer_helpers.dm" +#include "code\modules\atmospherics\gasmixtures\gas_types\core.dm" #include "code\modules\atmospherics\machinery\_atmos_setup.dm" #include "code\modules\atmospherics\machinery\_atmospherics_helpers.dm" +#include "code\modules\atmospherics\machinery\air_alarm.dm" #include "code\modules\atmospherics\machinery\analyzer_hooks.dm" #include "code\modules\atmospherics\machinery\datum_pipe_network.dm" #include "code\modules\atmospherics\machinery\datum_pipeline.dm" #include "code\modules\atmospherics\machinery\machinery.dm" #include "code\modules\atmospherics\machinery\mainspipe.dm" +#include "code\modules\atmospherics\machinery\meter.dm" +#include "code\modules\atmospherics\machinery\components\component.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\algae_generator_vr.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\binary_atmos_base.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\circulator.dm" @@ -2190,6 +2206,7 @@ #include "code\modules\atmospherics\machinery\components\omni_devices\omni_base.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm" +#include "code\modules\atmospherics\machinery\components\trinary_devices\molar_filter.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_base.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\tvalve.dm" #include "code\modules\atmospherics\machinery\components\unary\cold_sink.dm" @@ -2199,7 +2216,6 @@ #include "code\modules\atmospherics\machinery\components\unary\outlet_injector.dm" #include "code\modules\atmospherics\machinery\components\unary\oxygen_generator.dm" #include "code\modules\atmospherics\machinery\components\unary\portables_connector.dm" -#include "code\modules\atmospherics\machinery\components\unary\retro_pump_and_scrubber.dm" #include "code\modules\atmospherics\machinery\components\unary\unary_base.dm" #include "code\modules\atmospherics\machinery\components\unary\vent_pump.dm" #include "code\modules\atmospherics\machinery\components\unary\vent_scrubber.dm" @@ -2212,6 +2228,12 @@ #include "code\modules\atmospherics\machinery\pipes\tank.dm" #include "code\modules\atmospherics\machinery\pipes\universal.dm" #include "code\modules\atmospherics\machinery\pipes\vent.dm" +#include "code\modules\atmospherics\machinery\portable\area_atmos_computer.dm" +#include "code\modules\atmospherics\machinery\portable\canister.dm" +#include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm" +#include "code\modules\atmospherics\machinery\portable\powered.dm" +#include "code\modules\atmospherics\machinery\portable\pump.dm" +#include "code\modules\atmospherics\machinery\portable\scrubber.dm" #include "code\modules\automata\__automata.dm" #include "code\modules\automata\_wave.dm" #include "code\modules\automata\explosion.dm" diff --git a/code/__DEFINES/atmospherics/constants.dm b/code/__DEFINES/atmospherics/constants.dm index 1633b1de39d..f2b2a2c7a5d 100644 --- a/code/__DEFINES/atmospherics/constants.dm +++ b/code/__DEFINES/atmospherics/constants.dm @@ -1,11 +1,3 @@ -// Gas moles -/// Moles in a tile after which gases are visible. -#define MOLES_GAS_VISIBLE 0.25 -/// moles_visible * FACTOR_GAS_VISIBLE_MAX = Moles after which gas is at maximum visibility. -#define FACTOR_GAS_VISIBLE_MAX 20 -/// Mole step for alpha updates. This means alpha can update at 0.25, 0.5, 0.75, and so on. -#define MOLES_GAS_VISIBLE_STEP 0.25 - /// Volume, in liters, of a single tile. Y'KNOW WHY THIS IS A CONSTANT? WELL FOR ONE, initial_gas_mix IS MOLES, NOT PERCENTAGES OR PRESSURES. IF YOU TOUCH THIS, YOU BREAK *EVERYTHING*. DON'T TOUCH THIS. /// Exceptions can be made if you're a big boy who knows how this clusterfuck of a ZAS/LINDA hybrid works and have good reason to touch this. #define CELL_VOLUME 2500 diff --git a/code/__DEFINES/atmospherics/flags.dm b/code/__DEFINES/atmospherics/flags.dm deleted file mode 100644 index ee5e62a362a..00000000000 --- a/code/__DEFINES/atmospherics/flags.dm +++ /dev/null @@ -1,13 +0,0 @@ -// /datum/gas/gas_flags flags -/// Is this gas a viable combustion fuel? Ported from XGM variable oxidizer-oxidant combustion system. -#define GAS_FLAG_FUEL (1<<0) -/// Is this gas a viable combustion oxidizer? Ported from XGM variable oxidizer-oxidant combustion system. -#define GAS_FLAG_OXIDIZER (1<<1) -/// Is this gas able to contaminate things like clothing? ZAS phoron contaminent memes. -#define GAS_FLAG_CONTAMINANT (1<<2) -/// Is this gas a valid R-UST fusion fuel? Has NOTHING to do with tg fusion! -#define GAS_FLAG_FUSION_FUEL (1<<3) - -// /turf/var/air_flags flags -/// If this is there, the turf will apply graphics even if air status isn't AIR_STATUS_NORMAL. Otherwise, the turf will have no gas graphics, ever. -#define AIR_FLAG_FORCE_VISUAL (1<<0) diff --git a/code/__DEFINES/atmospherics/gases/flags.dm b/code/__DEFINES/atmospherics/gases/flags.dm new file mode 100644 index 00000000000..a9588f4f451 --- /dev/null +++ b/code/__DEFINES/atmospherics/gases/flags.dm @@ -0,0 +1,29 @@ +//! flags +// /datum/gas/gas_flags flags +/// Is this gas a viable combustion fuel? Ported from XGM variable oxidizer-oxidant combustion system. +#define GAS_FLAG_FUEL (1<<0) +/// Is this gas a viable combustion oxidizer? Ported from XGM variable oxidizer-oxidant combustion system. +#define GAS_FLAG_OXIDIZER (1<<1) +/// Is this gas able to contaminate things like clothing? ZAS phoron contaminent memes. +#define GAS_FLAG_CONTAMINANT (1<<2) +/// Is this gas a valid R-UST fusion fuel? Has NOTHING to do with tg fusion! +#define GAS_FLAG_FUSION_FUEL (1<<3) +/// gas is unknown/alien +#define GAS_FLAG_UNKNOWN (1<<4) +/// gas is core gas, always render & on main filter options. implies [GAS_FLAG_FILTERABLE]. +#define GAS_FLAG_CORE (1<<5) +/// gas is common enough to be filtered by machinery without spectrometry/grouping +#define GAS_FLAG_FILTERABLE (1<<6) +/// gas is highly dangerous, mostly used to know when to *loudly* log as opposed to just log +#define GAS_FLAG_DANGEROUS (1<<7) + +DEFINE_BITFIELD(gas_flags, list( + BITFIELD(GAS_FLAG_FUEL), + BITFIELD(GAS_FLAG_OXIDIZER), + BITFIELD(GAS_FLAG_CONTAMINANT), + BITFIELD(GAS_FLAG_FUSION_FUEL), + BITFIELD(GAS_FLAG_UNKNOWN), + BITFIELD(GAS_FLAG_CORE), + BITFIELD(GAS_FLAG_FILTERABLE), + BITFIELD(GAS_FLAG_DANGEROUS), +)) diff --git a/code/__DEFINES/atmospherics/gases/generation.dm b/code/__DEFINES/atmospherics/gases/generation.dm new file mode 100644 index 00000000000..3b378114e39 --- /dev/null +++ b/code/__DEFINES/atmospherics/gases/generation.dm @@ -0,0 +1,21 @@ +//* Collisions + +/// collision threshold for molar mass on generated gasses +#define GAS_COLLISION_THRESHOLD_MOLAR_MASS 0.09 +/// factor used because rand() doesn't do decimals. +#define GAS_COLLISION_FACTOR_MOLAR_MASS (1 / GAS_COLLISION_THRESHOLD_MOLAR_MASS) + +//* Danger flags + +/// allow oxidizer +#define PROCEDURAL_GAS_ALLOW_OXIDIZER (1<<0) +/// allow fuel +#define PROCEDURAL_GAS_ALLOW_FUEL (1<<1) +/// can be both oxidizer and fuel. !!DANGEROUS!! +#define PROCEDURAL_GAS_ALLOW_UNARY_BURNMIX (1<<2) + +DEFINE_BITFIELD(procedural_gas_flags, list( + BITFIELD(PROCEDURAL_GAS_ALLOW_OXIDIZER), + BITFIELD(PROCEDURAL_GAS_ALLOW_FUEL), + BITFIELD(PROCEDURAL_GAS_ALLOW_UNARY_BURNMIX), +)) diff --git a/code/__DEFINES/atmospherics/gases/groups.dm b/code/__DEFINES/atmospherics/gases/groups.dm new file mode 100644 index 00000000000..697398b08b2 --- /dev/null +++ b/code/__DEFINES/atmospherics/gases/groups.dm @@ -0,0 +1,33 @@ +//! groups +/// Should always and only include gasses that are directly selectable on interfaces. +/// Anything not in here should be in one or more of the other groups. +/// Anything in this group should have the CORE and FILTERABLE flag +/// This should not be a lot of gases! Air alarms, amongst other things, genreate lists for these gases. +#define GAS_GROUP_CORE (1<<0) +/// Should include all non-core gasses. +/// Shows up on misc lists. +#define GAS_GROUP_OTHER (1<<1) +/// Unknown / generated gases +#define GAS_GROUP_UNKNOWN (1<<2) +/// chemicals +#define GAS_GROUP_REAGENT (1<<3) + +/// Total gas groups +#define GAS_GROUP_COUNT 4 + +DEFINE_BITFIELD(gas_groups, list( + BITFIELD(GAS_GROUP_CORE), + BITFIELD(GAS_GROUP_OTHER), + BITFIELD(GAS_GROUP_UNKNOWN), + BITFIELD(GAS_GROUP_REAGENT), +)) + +GLOBAL_REAL_LIST(gas_group_names) = list( + "Core", + "Other", + "Unknown", + "Reagents", +) + +#define GAS_GROUPS_FILTERABLE (GAS_GROUP_UNKNOWN | GAS_GROUP_REAGENT | GAS_GROUP_OTHER) +#define GAS_GROUPS_ALL (GAS_GROUP_CORE | GAS_GROUP_UNKNOWN | GAS_GROUP_OTHER | GAS_GROUP_REAGENT) diff --git a/code/__DEFINES/atmospherics/gases/ids.dm b/code/__DEFINES/atmospherics/gases/ids.dm new file mode 100644 index 00000000000..6e710b4f8da --- /dev/null +++ b/code/__DEFINES/atmospherics/gases/ids.dm @@ -0,0 +1,49 @@ +/** + * !! THESE PREFIXES ARE RESERVED. !! + * !! No touchies. !! + * !! They're used for randomgen !! + * !! and we don't want collisions.!! + * ?? These can be changed a will, ?? + * ?? as they will probably never ?? + * ?? be directly mapped in. ?? + */ +/// prefix reserved for dynamic chemgas later +#define GAS_ID_PREFIX_REAGENTS "r_" +/// random generated gas +#define GAS_ID_PREFIX_PROCGEN "x_" + +/** + * !! Hardcoded Gas IDs !! + * ?? Naming convention: ?? + * ?? Use chemical formula if based off ?? + * ?? of a real gas, otherwise make ?? + * ?? something that doesn't collide ?? + * ?? with the dynamic prefixes that ?? + * ?? makes sense like "fuel", "phoron". ?? + * !! These may not be changed at will. !! + * !! Maps can contain them sometimes, !! + * !! so changing them will break things !! + */ +#define GAS_ID_OXYGEN "o2" +#define GAS_ID_NITROGEN "n2" +#define GAS_ID_CARBON_DIOXIDE "co2" +#define GAS_ID_PHORON "phoron" +#define GAS_ID_VOLATILE_FUEL "fuel" +#define GAS_ID_NITROUS_OXIDE "n2o" +#define GAS_ID_HELIUM "he" +#define GAS_ID_CARBON_MONOXIDE "co" +#define GAS_ID_METHYL_BROMIDE "ch3br" +#define GAS_ID_NITROGEN_DIOXIDE "no2" +#define GAS_ID_NITRIC_OXIDE "no" +#define GAS_ID_METHANE "ch4" +#define GAS_ID_ARGON "ar" +#define GAS_ID_KRYPTON "kr" +#define GAS_ID_NEON "ne" +#define GAS_ID_AMMONIA "nh3" +#define GAS_ID_XENON "xe" +#define GAS_ID_CHLORINE "cl2" +#define GAS_ID_SULFUR_DIOXIDE "so2" +#define GAS_ID_HYDROGEN "hydrogen" +#define GAS_ID_DEUTERIUM "deuterium" +#define GAS_ID_TRITIUM "tritium" +#define GAS_ID_VIMUR "vimur" diff --git a/code/__DEFINES/atmospherics/gases/reagents.dm b/code/__DEFINES/atmospherics/gases/reagents.dm new file mode 100644 index 00000000000..2b6b0574f0b --- /dev/null +++ b/code/__DEFINES/atmospherics/gases/reagents.dm @@ -0,0 +1,6 @@ +//! reagent list indices +#define GAS_REAGENT_LIST_ID 1 +#define GAS_REAGENT_LIST_AMOUNT 2 +#define GAS_REAGENT_LIST_THRESHOLD 3 +#define GAS_REAGENT_LIST_FACTOR 4 +#define GAS_REAGENT_LIST_MAX 5 diff --git a/code/__DEFINES/atmospherics/gases/visuals.dm b/code/__DEFINES/atmospherics/gases/visuals.dm new file mode 100644 index 00000000000..fe19270ddb4 --- /dev/null +++ b/code/__DEFINES/atmospherics/gases/visuals.dm @@ -0,0 +1,8 @@ +//! visuals list defines +#define GAS_VISUAL_INDEX_STATE 1 +#define GAS_VISUAL_INDEX_THRESHOLD 2 +#define GAS_VISUAL_INDEX_FACTOR 3 + +//! caching system +/// levels of alpha to make +#define GAS_VISUAL_STEP_MAX 20 diff --git a/code/__DEFINES/atmospherics/helpers.dm b/code/__DEFINES/atmospherics/helpers.dm index 5b015180a43..4ca34abec2d 100644 --- a/code/__DEFINES/atmospherics/helpers.dm +++ b/code/__DEFINES/atmospherics/helpers.dm @@ -1,7 +1,7 @@ //! gasmixtures #define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity()) /// Atmospherics quantization define. -#define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that +#define QUANTIZE(variable) (round(variable,0.00001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */ /// Writes the total moles of cached gases gaslist to out_var. Use this to spare a proccall in performance critical areas. diff --git a/code/__DEFINES/atmospherics/machinery.dm b/code/__DEFINES/atmospherics/machinery.dm new file mode 100644 index 00000000000..f15b3053b36 --- /dev/null +++ b/code/__DEFINES/atmospherics/machinery.dm @@ -0,0 +1,64 @@ +//* Balancing - Efficiency *// + +/// Global power efficiency of pumps - enforced by transfer helpers, not the machine! +#define ATMOS_ABSTRACT_PUMP_EFFICIENCY 2.5 +/// Global power efficiency of scrubbing - enforced by transfer helpers, not the machine! +#define ATMOS_ABSTRACT_SCRUB_EFFICIENCY 2.5 +/// Global power efficiency of filtering - enforced by transfer helpers, not the machine! +#define ATMOS_ABSTRACT_FILTER_EFFICIENCY 2.5 + +//* /obj/machinery/atmospherics/component atmos_component_ui_flags + +/// allow toggling power +#define ATMOS_COMPONENT_UI_TOGGLE_POWER (1<<0) +/// allow setting power. implies SEE_POWER. +#define ATMOS_COMPONENT_UI_SET_POWER (1<<1) +/// render power usage +#define ATMOS_COMPONENT_UI_SEE_POWER (1<<2) + +DEFINE_BITFIELD(atmos_component_ui_flags, list( + BITFIELD(ATMOS_COMPONENT_UI_TOGGLE_POWER), + BITFIELD(ATMOS_COMPONENT_UI_SET_POWER), + BITFIELD(ATMOS_COMPONENT_UI_SEE_POWER), +)) + +//* /obj/machinery/portable_atmospherics atmos_portable_ui_flags + +/// view flow +#define ATMOS_PORTABLE_UI_SEE_FLOW (1<<0) +/// toggle on/off +#define ATMOS_PORTABLE_UI_TOGGLE_POWER (1<<1) +/// adjust flow. implies SEE_FLOW. +#define ATMOS_PORTABLE_UI_SET_FLOW (1<<2) +/// adjust power. implies SEE_POWER. +#define ATMOS_PORTABLE_UI_SET_POWER (1<<3) +/// see power +#define ATMOS_PORTABLE_UI_SEE_POWER (1<<4) + +DEFINE_BITFIELD(atmos_portable_ui_flags, list( + BITFIELD(ATMOS_PORTABLE_UI_SEE_FLOW), + BITFIELD(ATMOS_PORTABLE_UI_TOGGLE_POWER), + BITFIELD(ATMOS_PORTABLE_UI_SET_FLOW), + BITFIELD(ATMOS_PORTABLE_UI_SET_POWER), + BITFIELD(ATMOS_PORTABLE_UI_SEE_POWER), +)) + +//! legacy + +// Will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance. +#define MINIMUM_MOLES_TO_PUMP 0.00001 +#define MINIMUM_MOLES_TO_FILTER 0.00001 +#define MINIMUM_MOLES_TO_SCRUB 0.00001 +// fire sparking +#define MINIMUM_MOLES_TO_SPARK 0.015 + +// 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. +/// Liters. +#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 diff --git a/code/__DEFINES/atmospherics/machinery/alarm.dm b/code/__DEFINES/atmospherics/machinery/alarm.dm new file mode 100644 index 00000000000..6edd4ef3d2f --- /dev/null +++ b/code/__DEFINES/atmospherics/machinery/alarm.dm @@ -0,0 +1,38 @@ +//* air alarm mode +/// Everything off +#define AIR_ALARM_MODE_OFF "off" +/// vents on, scrubbers scrub +#define AIR_ALARM_MODE_SCRUB "scrub" +/// vents on, scrubbers siphon +#define AIR_ALARM_MODE_REPLACE "replace" +/// vents off, scrubbers siphon +#define AIR_ALARM_MODE_SIPHON "siphon" +/// siphon and then switch to scrub +#define AIR_ALARM_MODE_CYCLE "cycle" +/// panic siphon - rapidly siphon all air out of room +#define AIR_ALARM_MODE_PANIC "panic" +/// contaminated - high power scrub +#define AIR_ALARM_MODE_CONTAMINATED "contaminated" +/// vents on, scrubbers off +#define AIR_ALARM_MODE_FILL "fill" + +//* air alarm danger state +#define AIR_ALARM_RAISE_OKAY 0 +#define AIR_ALARM_RAISE_WARNING 1 +#define AIR_ALARM_RAISE_DANGER 2 + +//* air alarm TLV operatoins +#define AIR_ALARM_TLV_DANGER_LOW 1 +#define AIR_ALARM_TLV_WARNING_LOW 2 +#define AIR_ALARM_TLV_WARNING_HIGH 3 +#define AIR_ALARM_TLV_DANGER_HIGH 4 + +#define AIR_ALARM_TLV_INDEX_MIN 1 +#define AIR_ALARM_TLV_INDEX_MAX 4 + +#define AIR_ALARM_MAKE_TLV(mindanger, minwarning, maxwarning, maxdanger) list(mindanger, minwarning, maxwarning, maxdanger) +#define AIR_ALARM_TEST_TLV(val, list) ( \ + ((val < list[AIR_ALARM_TLV_DANGER_LOW]) || (val > list[AIR_ALARM_TLV_DANGER_HIGH]))? \ + AIR_ALARM_RAISE_DANGER : ((val < list[AIR_ALARM_TLV_WARNING_LOW] || val > list[AIR_ALARM_TLV_WARNING_HIGH])? \ + AIR_ALARM_RAISE_WARNING : AIR_ALARM_RAISE_OKAY) \ + ) diff --git a/code/__DEFINES/atmospherics/machinery/scrubber.dm b/code/__DEFINES/atmospherics/machinery/scrubber.dm new file mode 100644 index 00000000000..de83d9a536a --- /dev/null +++ b/code/__DEFINES/atmospherics/machinery/scrubber.dm @@ -0,0 +1,5 @@ +//* Scrubber default enums - these must be on SSair! +#define SCRUBBER_DEFAULT_STATION "station" + +/// max ids scrubbers can scrub at once +#define SCRUBBER_MAX_GAS_IDS 10 diff --git a/code/__DEFINES/atmospherics/machinery/vent.dm b/code/__DEFINES/atmospherics/machinery/vent.dm new file mode 100644 index 00000000000..94a98a6597e --- /dev/null +++ b/code/__DEFINES/atmospherics/machinery/vent.dm @@ -0,0 +1,13 @@ +/// check to make sure external gas pressure doesn't drop below (pump in) +/// or rise above (pump out) a certain pressure +#define ATMOS_VENT_CHECK_EXTERNAL (1<<0) +/// check to make sure internal gas pressure doesn't drop below (pump out) +/// or rise above (pump in) a certain pressure +#define ATMOS_VENT_CHECK_INTERNAL (1<<1) +/// all bits in check bitfield +#define ATMOS_VENT_CHECKS (ATMOS_VENT_CHECK_EXTERNAL | ATMOS_VENT_CHECK_INTERNAL) + +#define ATMOS_VENT_DIRECTION_SIPHON 0 +#define ATMOS_VENT_DIRECTION_RELEASE 1 + +#define ATMOS_VENT_MAX_PRESSURE_LIMIT (ONE_ATMOSPHERE * 500) diff --git a/code/__DEFINES/machinery.dm b/code/__DEFINES/machinery.dm index 97c31383a26..87eea72002c 100644 --- a/code/__DEFINES/machinery.dm +++ b/code/__DEFINES/machinery.dm @@ -135,35 +135,6 @@ var/list/restricted_camera_networks = list(NETWORK_ERT,NETWORK_MERCENARY,"Secret #define STAGE_FIVE 9 #define STAGE_SUPER 11 -/** - *! Atmospherics Machinery. - */ -/// L/s. This can be used to balance how fast a room is siphoned. Anything higher than CELL_VOLUME has no effect. -#define MAX_SIPHON_FLOWRATE 2500 -/// L/s. Max flow rate when scrubbing from a turf. -#define MAX_SCRUBBER_FLOWRATE 200 -// 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. -#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 MINIMUM_MOLES_TO_PUMP 0.01 -#define MINIMUM_MOLES_TO_FILTER 0.01 -// fire sparking -#define MINIMUM_MOLES_TO_SPARK 0.015 - -// 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. -/// Liters. -#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 // These are used by supermatter and supermatter monitor program, mostly for UI updating purposes. Higher should always be worse! /// Unknown status, shouldn't happen but just in case. #define SUPERMATTER_ERROR -1 diff --git a/code/__DEFINES/procs/do_after.dm b/code/__DEFINES/procs/do_after.dm index 24d4fd21fd5..e517c8c53c2 100644 --- a/code/__DEFINES/procs/do_after.dm +++ b/code/__DEFINES/procs/do_after.dm @@ -54,3 +54,5 @@ #define INTERACTING_FOR_RESIST "resist" /// Climbing a structure #define INTERACTING_FOR_CLIMB "climb" +/// Construct/deconstruct +#define INTERACTING_FOR_CONSTRUCTION "construction" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 4d121bd82ed..749a21bd200 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1080,7 +1080,7 @@ * TODO - Fix this ancient list of wall items. Preferably make it dynamically populated. ~Leshana */ var/list/WALLITEMS = list( - /obj/machinery/power/apc, /obj/machinery/alarm, /obj/item/radio/intercom, /obj/structure/frame, + /obj/machinery/power/apc, /obj/machinery/air_alarm, /obj/item/radio/intercom, /obj/structure/frame, /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank, /obj/machinery/status_display, /obj/machinery/requests_console, /obj/machinery/light_switch, /obj/structure/sign, /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/button/remote, diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 8caf16342e5..871fb553600 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -19,6 +19,10 @@ SUBSYSTEM_DEF(air) var/list/generated_atmospheres /// cached lists of unpacked gas-strings var/list/cached_strings + /// scrubber defaults + var/list/scrubber_defaults = list( + SCRUBBER_DEFAULT_STATION = list(/datum/gas/carbon_dioxide, /datum/gas/phoron), + ) var/cost_turfs = 0 var/cost_edges = 0 @@ -57,7 +61,20 @@ SUBSYSTEM_DEF(air) return ..() + " [msg.Join()]" /datum/controller/subsystem/air/PreInit(recovering) - air_master = src + // resolve scrubber defaults + for(var/key in scrubber_defaults) + var/list/values = scrubber_defaults[key] + if(isnull(values)) + scrubber_defaults -= key + stack_trace("invalid default [key] in scrubber_defaults") + continue + for(var/i in 1 to length(values)) + if(ispath(values[i])) + var/datum/gas/casted = values[i] + if(!ispath(casted, /datum/gas)) + stack_trace("invalid path [casted] in scrubber_defaults") + casted = /datum/gas/oxygen + values[i] = initial(casted.id) /datum/controller/subsystem/air/Preload(recovering) cached_strings = list() @@ -132,7 +149,7 @@ SUBSYSTEM_DEF(air) INTERNAL_PROCESS_STEP(SSAIR_HOTSPOTS, FALSE, process_active_hotspots, cost_hotspots, SSAIR_ZONES) INTERNAL_PROCESS_STEP(SSAIR_ZONES, FALSE, process_zones_to_update, cost_zones, SSAIR_DONE) - // Okay, we're done! Woo! Got thru a whole air_master cycle! + // Okay, we're done! Woo! Got thru a whole SSair cycle! if(LAZYLEN(currentrun) != 0) stack_trace("Currentrun not empty after processing cycle when it should be. [english_list(currentrun.Copy(1, min(currentrun.len, 5)))]") currentrun = null @@ -320,11 +337,14 @@ SUBSYSTEM_DEF(air) if(initial(A.abstract_type) == T) continue A = new T + // register normal id generated_atmospheres[A.id] = A + // register type too - for faster lookup + generated_atmospheres[A.type] = A /** * parses a gas string - * returns list(gas list, temp) + * returns list(gas list, temp); gas list is cached, make sure to copy it!!! * * @params * - gas_string - gas string @@ -353,17 +373,11 @@ SUBSYSTEM_DEF(air) /datum/controller/subsystem/air/proc/unpack_gas_string(gas_string) var/list/built = new /list(2) var/list/unpacked = params2list(gas_string) - var/list/gases = list() built[2] = text2num(unpacked["TEMP"]) // null allowed unpacked -= "TEMP" - // convert id to path - // todo: remove when we convert gas to ids and not paths why did we ever make it paths aough - for(var/i in 1 to length(unpacked)) - var/id = unpacked[i] - var/amount = text2num(unpacked[id]) - var/path = GLOB.meta_gas_id_lookup[id] - gases[path] = amount - built[1] = gases + for(var/id in unpacked) + unpacked[id] = text2num(unpacked[id]) + built[1] = unpacked return built #undef SSAIR_TURFS diff --git a/code/controllers/subsystem/plants.dm b/code/controllers/subsystem/plants.dm index a4c5c5bba92..403eb196781 100644 --- a/code/controllers/subsystem/plants.dm +++ b/code/controllers/subsystem/plants.dm @@ -111,8 +111,8 @@ SUBSYSTEM_DEF(plants) if(survive_on_station) if(seed.consume_gasses) - seed.consume_gasses[/datum/gas/phoron] = null - seed.consume_gasses[/datum/gas/carbon_dioxide] = null + seed.consume_gasses[GAS_ID_PHORON] = null + seed.consume_gasses[GAS_ID_CARBON_DIOXIDE] = null if(seed.chems && !isnull(seed.chems["pacid"])) seed.chems["pacid"] = null //Eating through the hull will make these plants completely inviable, albeit very dangerous. seed.chems -= null //Setting to null does not actually remove the entry, which is weird. diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 03ab864a634..2d9c11c27ee 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -79,9 +79,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) if(!holder) return var/list/options = list() - options["MC"] = Master - options["Failsafe"] = Failsafe - options["Configuration"] = config + options["MC"] = global.Master + options["Failsafe"] = global.Failsafe + options["Global Variables"] = global.GLOB + options["Configuration"] = global.config + options["Gas Data"] = global.gas_data options["Legacy Configuration"] = config_legacy for(var/i in Master.subsystems) var/datum/controller/subsystem/S = i @@ -97,7 +99,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) options[strtype] = S //Goon PS stuff, and other yet-to-be-subsystem things. - options["LEGACY: air_master"] = air_master options["LEGACY: radio_controller"] = radio_controller options["LEGACY: paiController"] = paiController options["LEGACY: GLOB.cameranet"] = GLOB.cameranet diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 11138052b04..bcf6f22c232 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -397,7 +397,7 @@ reqs = list(/obj/item/stock_parts/subspace/amplifier = 1, /obj/item/stack/cable_coil = 15, /obj/item/radio = 1, - /obj/item/analyzer = 1) + /obj/item/atmos_analyzer = 1) subcategory = CAT_MISCELLANEOUS category = CAT_MISCELLANEOUS diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index d90463e2c59..a84752f0482 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -1,5 +1,5 @@ /datum/wires/alarm - holder_type = /obj/machinery/alarm + holder_type = /obj/machinery/air_alarm wire_count = 5 proper_name = "Air alarm" @@ -12,20 +12,20 @@ /datum/wires/alarm/interactable(mob/user) - var/obj/machinery/alarm/A = holder + var/obj/machinery/air_alarm/A = holder if(A.panel_open) return TRUE return FALSE /datum/wires/alarm/get_status() - var/obj/machinery/alarm/A = holder + var/obj/machinery/air_alarm/A = holder . = ..() . += "The Air Alarm is [A.locked ? "locked." : "unlocked."]" . += "The Air Alarm is [(A.shorted || (A.machine_stat & (NOPOWER|BROKEN))) ? "offline." : "working properly!"]" . += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]." /datum/wires/alarm/on_cut(wire, mend) - var/obj/machinery/alarm/A = holder + var/obj/machinery/air_alarm/A = holder switch(wire) if(WIRE_IDSCAN) if(!mend) @@ -51,7 +51,7 @@ ..() /datum/wires/alarm/on_pulse(wire) - var/obj/machinery/alarm/A = holder + var/obj/machinery/air_alarm/A = holder switch(wire) if(WIRE_IDSCAN) A.locked = !A.locked diff --git a/code/game/area/area.dm b/code/game/area/area.dm index 17cfdbec1ca..d0329eb5e68 100644 --- a/code/game/area/area.dm +++ b/code/game/area/area.dm @@ -33,6 +33,14 @@ //? tracking lists for machinery /// holopads - lazyinit'd var/list/obj/machinery/holopad/holopads + /// vents + var/list/obj/machinery/atmospherics/component/unary/vent_pump/vent_pumps + /// next vent id + var/vent_pump_next = 1 + /// scrubbers + var/list/obj/machinery/atmospherics/component/unary/vent_scrubber/vent_scrubbers + /// next scrubber id + var/vent_scrubber_next = 1 //? unsorted var/fire = null @@ -261,14 +269,14 @@ if (danger_level == 0) atmosphere_alarm.clearAlarm(src, alarm_source) else - var/obj/machinery/alarm/atmosalarm = alarm_source //maybe other things can trigger these, who knows + var/obj/machinery/air_alarm/atmosalarm = alarm_source //maybe other things can trigger these, who knows if(istype(atmosalarm)) atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level, hidden = atmosalarm.alarms_hidden) else atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level) //Check all the alarms before lowering atmosalm. Raising is perfectly fine. - for (var/obj/machinery/alarm/AA as anything in GLOB.air_alarms) + for (var/obj/machinery/air_alarm/AA as anything in GLOB.air_alarms) if(AA.loc?.loc != src) continue if (!(AA.machine_stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level) @@ -280,7 +288,7 @@ if (danger_level < 1 || danger_level >= 2) firedoors_update() - for (var/obj/machinery/alarm/AA in src) + for (var/obj/machinery/air_alarm/AA in src) AA.update_icon() return 1 @@ -672,3 +680,49 @@ var/list/ghostteleportlocs = list() ghostteleportlocs = tim_sort(ghostteleportlocs, GLOBAL_PROC_REF(cmp_text_asc), TRUE) return 1 + +//* Atmospherics + +/area/proc/register_scrubber(obj/machinery/atmospherics/component/unary/vent_scrubber/instance) + LAZYADD(vent_scrubbers, instance) + instance.name = "\improper [name] Vent Scrubber #[vent_scrubber_next++]" + +/area/proc/unregister_scrubber(obj/machinery/atmospherics/component/unary/vent_scrubber/instance) + LAZYREMOVE(vent_scrubbers, instance) + instance.name = "\improper Vent Scrubber" + +/area/proc/register_vent(obj/machinery/atmospherics/component/unary/vent_pump/instance) + LAZYADD(vent_pumps, instance) + instance.name = "\improper [name] Vent Pump #[vent_pump_next++]" + +/area/proc/unregister_vent(obj/machinery/atmospherics/component/unary/vent_pump/instance) + LAZYREMOVE(vent_pumps, instance) + instance.name = "\improper Vent Pump" + +// todo: this should unregister first, probably, incase anyone makes registration non-repeatable + +/area/proc/reregister_atmos_machinery() + reregister_atmos_vents() + reregister_atmos_scrubbers() + +/area/proc/reregister_atmos_vents() + vent_pump_next = 0 + var/list/old = vent_pumps.Copy() + for(var/obj/machinery/atmospherics/component/unary/vent_pump/instance in old) + register_vent(instance) + +/area/proc/reregister_atmos_scrubbers() + vent_scrubber_next = 0 + var/list/old = vent_scrubbers.Copy() + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/instance in old) + register_scrubber(instance) + +/area/proc/vent_pump_by_id(id) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in vent_pumps) + if(pump.id_tag == id) + return pump + +/area/proc/vent_scrubber_by_id(id) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in vent_scrubbers) + if(scrubber.id_tag == id) + return scrubber diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index fd167f19fc3..a40b745449c 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -510,7 +510,7 @@ var/global/list/all_objectives = list() for(var/obj/item/I in all_items) //Check for phoron tanks if(istype(I, steal_target)) - found_amount += (target_name=="28 moles of phoron (full tank)" ? (I:air_contents:gas[/datum/gas/phoron]) : (I:amount)) + found_amount += (target_name=="28 moles of phoron (full tank)" ? (I:air_contents:gas[GAS_ID_PHORON]) : (I:amount)) return found_amount>=target_amount if("50 coins (in bag)") diff --git a/code/game/gamemodes/technomancer/spells/oxygenate.dm b/code/game/gamemodes/technomancer/spells/oxygenate.dm index 416bbedfd50..3b79fb9846f 100644 --- a/code/game/gamemodes/technomancer/spells/oxygenate.dm +++ b/code/game/gamemodes/technomancer/spells/oxygenate.dm @@ -27,7 +27,7 @@ else if(isturf(hit_atom)) var/turf/T = hit_atom if(pay_energy(1500)) - T.assume_gas(/datum/gas/oxygen, 200) - T.assume_gas(/datum/gas/nitrogen, 800) + T.assume_gas(GAS_ID_OXYGEN, 200) + T.assume_gas(GAS_ID_NITROGEN, 800) playsound(src.loc, 'sound/effects/spray.ogg', 50, 1, -3) adjust_instability(10) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 2e7021f1042..f3d9a4160ee 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -108,6 +108,8 @@ // todo: anchored / unanchored should be replaced by movement force someday, how to handle that? //* Construction / Deconstruction + /// allow default part replacement. null for disallowed, number for time. + var/default_part_replacement = 0 /// Can be constructed / deconstructed by players by default. null for off, number for time needed. Panel must be open. // todo: proc for allow / disallow, refactor var/default_deconstruct @@ -116,8 +118,12 @@ /// Can be anchored / unanchored by players without deconstructing by default with a wrench. null for off, number for time needed. // todo: proc for allow / disallow, refactor, unify with can_be_unanchored var/default_unanchor - /// allow default part replacement. null for disallowed, number for time. - var/default_part_replacement = 0 + /// tool used for deconstruction + var/tool_deconstruct = TOOL_CROWBAR + /// tool used for panel open + var/tool_panel = TOOL_SCREWDRIVER + /// tool used for unanchor + var/tool_unanchor = TOOL_WRENCH /// default icon state overlay for panel open var/panel_icon_state /// is the maintenance panel open? @@ -195,50 +201,6 @@ qdel(A) return ..() -/obj/machinery/screwdriver_act(obj/item/I, mob/user, flags, hint) - if(!isnull(default_panel)) - default_deconstruction_screwdriver(user, I) - return TRUE - return ..() - -/obj/machinery/crowbar_act(obj/item/I, mob/user, flags, hint) - if(!isnull(default_deconstruct)) - default_deconstruction_crowbar(user, I) - return TRUE - return ..() - -/obj/machinery/wrench_act(obj/item/I, mob/user, flags, hint) - if(!isnull(default_unanchor)) - default_unfasten_wrench(user, I, default_unanchor) - return TRUE - return ..() - -/obj/machinery/dynamic_tool_functions(obj/item/I, mob/user) - . = ..() - if(!isnull(default_unanchor)) - COERCE_OPTIONS_LIST_IN(.[TOOL_WRENCH]) - .[TOOL_WRENCH] += anchored? "unfasten" : "fasten" - if(!isnull(default_deconstruct) && panel_open) - COERCE_OPTIONS_LIST_IN(.[TOOL_CROWBAR]) - .[TOOL_CROWBAR] += "deconstruct" - if(!isnull(default_panel)) - COERCE_OPTIONS_LIST_IN(.[TOOL_SCREWDRIVER]) - .[TOOL_SCREWDRIVER] += panel_open? "close panel" : "open panel" - -/obj/machinery/dynamic_tool_image(function, hint) - . = ..() - switch(hint) - if("unfasten") - return dyntool_image_backward(TOOL_WRENCH) - if("fasten") - return dyntool_image_forward(TOOL_WRENCH) - if("deconstruct") - return dyntool_image_backward(TOOL_CROWBAR) - if("open panel") - return dyntool_image_backward(TOOL_SCREWDRIVER) - if("close panel") - return dyntool_image_forward(TOOL_SCREWDRIVER) - /obj/machinery/process(delta_time)//If you dont use process or power why are you here return PROCESS_KILL @@ -267,6 +229,10 @@ if(panel_open && panel_icon_state) . += panel_icon_state +/obj/machinery/proc/set_panel_open(panel_opened) + panel_open = panel_opened + update_appearance() + /obj/machinery/legacy_ex_act(severity) switch(severity) if(1.0) @@ -472,6 +438,12 @@ RefreshParts() return 1 +// todo: refactor +/obj/machinery/set_anchored(anchorvalue) + . = ..() + power_change() + update_appearance() + // Default behavior for wrenching down machines. Supports both delay and instant modes. /obj/machinery/proc/default_unfasten_wrench(var/mob/user, var/obj/item/W, var/time = 0) if(!W.is_wrench()) @@ -494,8 +466,6 @@ return TRUE /obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/C) - - if(!C.is_crowbar()) return 0 if(!panel_open) @@ -549,8 +519,9 @@ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) drop_products(ATOM_DECONSTRUCT_DISASSEMBLED) on_deconstruction() - // If it doesn't have a circuit board, don't create a frame. Return a smack instead. BONK! + // If it doesn't have a circuit board, don't create a frame, instead just break. if(!circuit) + qdel(src) return 0 var/obj/structure/frame/A = new /obj/structure/frame(src.loc) var/obj/item/circuitboard/M = circuit diff --git a/code/game/machinery/_machinery_construction.dm b/code/game/machinery/_machinery_construction.dm new file mode 100644 index 00000000000..b2e8dc5afae --- /dev/null +++ b/code/game/machinery/_machinery_construction.dm @@ -0,0 +1,103 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/obj/machinery/dynamic_tool_functions(obj/item/I, mob/user) + . = list() + if(tool_deconstruct && !isnull(default_deconstruct) && panel_open) + LAZYADD(.[tool_panel], "deconstruct") + if(tool_unanchor && !isnull(default_unanchor)) + LAZYADD(.[tool_panel], anchored? "unanchor" : "anchor") + if(tool_panel && !isnull(default_panel)) + LAZYADD(.[tool_panel], panel_open? "close panel" : "open panel") + return merge_double_lazy_assoc_list(., ..()) + +/obj/machinery/dynamic_tool_image(function, hint) + switch(hint) + if("anchor", "close panel") + return dyntool_image_backward(function) + if("unanchor", "open panel", "deconstruct") + return dyntool_image_backward(function) + return ..() + +/obj/machinery/tool_act(obj/item/I, mob/user, function, flags, hint) + if(INTERACTING_WITH_FOR(user, src, INTERACTING_FOR_CONSTRUCTION)) + return CLICKCHAIN_DO_NOT_PROPAGATE + START_INTERACTING_WITH(user, src, INTERACTING_FOR_CONSTRUCTION) + if(function == tool_deconstruct && !isnull(default_deconstruct)) + if(default_deconstruction_dismantle(I, user, flags = flags)) + . = CLICKCHAIN_DID_SOMETHING | CLICKCHAIN_DO_NOT_PROPAGATE + . = CLICKCHAIN_DO_NOT_PROPAGATE + else if(function == tool_unanchor && !isnull(default_unanchor)) + if(default_deconstruction_anchor(I, user, flags = flags)) + . = CLICKCHAIN_DID_SOMETHING | CLICKCHAIN_DO_NOT_PROPAGATE + . = CLICKCHAIN_DO_NOT_PROPAGATE + else if(function == tool_panel && !isnull(default_panel)) + if(default_deconstruction_panel(I, user, flags = flags)) + . = CLICKCHAIN_DID_SOMETHING | CLICKCHAIN_DO_NOT_PROPAGATE + . = CLICKCHAIN_DO_NOT_PROPAGATE + STOP_INTERACTING_WITH(user, src,INTERACTING_FOR_CONSTRUCTION) + if(isnull(.)) + return ..() + +// todo: better verb/message support +/obj/machinery/proc/default_deconstruction_panel(obj/item/tool, mob/user, speed_mult = 1, flags) + var/needed_time = default_panel * speed_mult * (isnull(tool)? 1 : tool.tool_speed) + if(needed_time) + user.visible_action_feedback( + target = src, + soft_range = MESSAGE_RANGE_CONSTRUCTION, + visible_soft = SPAN_WARNING("[user] starts to [panel_open? "close" : "open"] [src]'s maintenance panel."), + audible_soft = SPAN_WARNING("You hear something being (un)fastened."), + ) + if(!use_tool(tool_panel, tool, user, flags, needed_time)) + return FALSE + user.visible_action_feedback( + target = src, + soft_range = MESSAGE_RANGE_CONSTRUCTION, + visible_soft = SPAN_WARNING("[user] [panel_open? "closes" : "opens"] [src]'s maintenance panel."), + audible_soft = SPAN_WARNING("You hear something being (un)fastened."), + ) + set_panel_open(!panel_open) + return TRUE + +// todo: better verb/message support +/obj/machinery/proc/default_deconstruction_dismantle(obj/item/tool, mob/user, speed_mult = 1, flags) + var/needed_time = default_deconstruct * speed_mult * (isnull(tool)? 1 : tool.tool_speed) + if(needed_time) + user.visible_action_feedback( + target = src, + soft_range = MESSAGE_RANGE_CONSTRUCTION, + visible_soft = SPAN_WARNING("[user] starts to dismantle [src]."), + audible_soft = SPAN_WARNING("You hear a series of small parts being removed from something."), + ) + if(!use_tool(tool_deconstruct, tool, user, flags, needed_time)) + return FALSE + user.visible_action_feedback( + target = src, + soft_range = MESSAGE_RANGE_CONSTRUCTION, + visible_soft = SPAN_WARNING("[user] dismantles [src]."), + audible_soft = SPAN_WARNING("You hear something getting dismantled."), + ) + dismantle() + return TRUE + +// todo: better verb/message support +/obj/machinery/proc/default_deconstruction_anchor(obj/item/tool, mob/user, speed_mult = 1, flags) + var/needed_time = default_unanchor * speed_mult * (isnull(tool)? 1 : tool.tool_speed) + if(needed_time) + user.visible_action_feedback( + target = src, + soft_range = MESSAGE_RANGE_CONSTRUCTION, + visible_soft = SPAN_WARNING("[user] starts to [anchored? "unbolt" : "bolt"] [src] [anchored? "from" : "to"] the floor."), + audible_soft = SPAN_WARNING("You hear something heavy being (un)fastened."), + ) + if(!use_tool(tool_unanchor, tool, user, flags, needed_time)) + return FALSE + user.visible_action_feedback( + target = src, + soft_range = MESSAGE_RANGE_CONSTRUCTION, + visible_soft = SPAN_WARNING("[user] [anchored? "bolts" : "unbolts"] [src] [anchored? "to" : "from"] from the floor."), + audible_soft = SPAN_WARNING("You hear something heavy being (un)fastened."), + ) + set_anchored(!anchored) + return TRUE diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm deleted file mode 100644 index 0f238880a4f..00000000000 --- a/code/game/machinery/air_alarm.dm +++ /dev/null @@ -1,865 +0,0 @@ -GLOBAL_LIST_EMPTY(air_alarms) - -#define DECLARE_TLV_VALUES var/red_min; var/yel_min; var/yel_max; var/red_max; var/tlv_comparitor; -#define LOAD_TLV_VALUES(x, y) red_min = x[1]; yel_min = x[2]; yel_max = x[3]; red_max = x[4]; tlv_comparitor = y; -#define TEST_TLV_VALUES (((tlv_comparitor >= red_max && red_max > 0) || tlv_comparitor <= red_min) ? 2 : ((tlv_comparitor >= yel_max && yel_max > 0) || tlv_comparitor <= yel_min) ? 1 : 0) - -#define AALARM_MODE_SCRUBBING 1 -///like scrubbing, but faster. -#define AALARM_MODE_REPLACEMENT 2 -///constantly sucks all air -#define AALARM_MODE_PANIC 3 -///sucks off all air, then refill and switches to scrubbing -#define AALARM_MODE_CYCLE 4 -///emergency fill -#define AALARM_MODE_FILL 5 -///Shuts it all down. -#define AALARM_MODE_OFF 6 -#define AALARM_SCREEN_MAIN 1 -#define AALARM_SCREEN_VENT 2 -#define AALARM_SCREEN_SCRUB 3 -#define AALARM_SCREEN_MODE 4 -#define AALARM_SCREEN_SENSORS 5 - -#define AALARM_REPORT_TIMEOUT 100 - -#define MAX_TEMPERATURE 90 -#define MIN_TEMPERATURE -40 - -//all air alarms in area are connected via magic -/area - var/obj/machinery/alarm/master_air_alarm - var/list/air_vent_names = list() - var/list/air_scrub_names = list() - var/list/air_vent_info = list() - var/list/air_scrub_info = list() - -/obj/machinery/alarm - name = "alarm" - desc = "Used to control various station atmospheric systems. The light indicates the current air status of the area." - icon = 'icons/obj/monitors.dmi' - icon_state = "alarm0" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 80 - active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. - power_channel = ENVIRON - req_one_access = list(ACCESS_ENGINEERING_ATMOS, ACCESS_ENGINEERING_ENGINE) - clicksound = "button" - clickvol = 30 - //blocks_emissive = NONE - light_power = 0.25 - var/alarm_id = null - ///Whether to use automatic breach detection or not - var/breach_detection = TRUE - var/frequency = 1439 - //var/skipprocess = 0 //Experimenting - var/alarm_frequency = 1437 - var/remote_control = FALSE - var/rcon_setting = RCON_AUTO - var/rcon_time = 0 - var/locked = TRUE - ///If it's been screwdrivered open. - panel_open = FALSE - var/aidisabled = FALSE - var/shorted = FALSE - circuit = /obj/item/circuitboard/airalarm - //armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 90, ACID = 30) - - var/datum/wires/alarm/wires - - var/mode = AALARM_MODE_SCRUBBING - var/screen = AALARM_SCREEN_MAIN - var/area_uid - var/area/alarm_area - - var/target_temperature = T20C - var/regulating_temperature = 0 - - var/datum/radio_frequency/radio_connection - - /// Keys are things like temperature and certain gasses. Values are lists, which contain, in order: - /// red warning minimum value, yellow warning minimum value, yellow warning maximum value, red warning maximum value - var/list/TLV = list() - var/list/trace_gas = list("nitrous_oxide", "volatile_fuel") //list of other gases that this air alarm is able to detect - - var/danger_level = 0 - var/pressure_dangerlevel = 0 - - var/report_danger_level = 1 - ///If the alarms from this machine are visible on consoles - var/alarms_hidden = FALSE - -/obj/machinery/alarm/nobreach - breach_detection = 0 - -/obj/machinery/alarm/monitor - report_danger_level = 0 - breach_detection = 0 - -/obj/machinery/alarm/alarms_hidden - alarms_hidden = TRUE - -/obj/machinery/alarm/angled -// icon = 'icons/obj/wall_machines_angled.dmi' - -/obj/machinery/alarm/angled/hidden - alarms_hidden = TRUE - -/obj/machinery/alarm/angled/offset_airalarm() - pixel_x = (dir & 3) ? 0 : (dir == 4 ? -21 : 21) - pixel_y = (dir & 3) ? (dir == 1 ? -18 : 20) : 0 - -/obj/machinery/alarm/server/Initialize(mapload) - . = ..() - req_access = list(ACCESS_SCIENCE_RD, ACCESS_ENGINEERING_ATMOS, ACCESS_ENGINEERING_ENGINE) - TLV[/datum/gas/oxygen] = list(16, 19, 135, 140) // Partial pressure, kpa - TLV[/datum/gas/carbon_dioxide] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa - TLV[/datum/gas/phoron] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa - TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa - TLV["pressure"] = list(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE * 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20) /* kpa */ - TLV["temperature"] = list(T0C - 26, T0C, T0C + 40, T0C + 66) // K - setDir(dir) - -/obj/machinery/alarm/Initialize(mapload) - . = ..() - GLOB.air_alarms += src - if(!pixel_x && !pixel_y) - offset_airalarm() - first_run() - -/obj/machinery/alarm/Destroy() - GLOB.air_alarms -= src - unregister_radio(src, frequency) - qdel(wires) - wires = null - if(alarm_area && alarm_area.master_air_alarm == src) - alarm_area.master_air_alarm = null - elect_master(exclude_self = TRUE) - return ..() - -/obj/machinery/alarm/proc/offset_airalarm() - pixel_x = (dir & 3) ? 0 : (dir == 4 ? -26 : 26) - pixel_y = (dir & 3) ? (dir == 1 ? -26 : 26) : 0 - -/obj/machinery/alarm/proc/first_run() - alarm_area = get_area(src) - area_uid = "\ref[alarm_area]" - if(name == "alarm") - name = "[alarm_area.name] Air Alarm" - - if(!wires) - wires = new(src) - - // breathable air according to human/Life() - TLV["oxygen"] = list(16, 19, 135, 140) // Partial pressure, kpa - TLV["nitrogen"] = list(0, 0, 135, 140) // Partial pressure, kpa - TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa - TLV["phoron"] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa - TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa - TLV["pressure"] = list(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE * 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20) /* kpa */ - TLV["temperature"] = list(T0C - 26, T0C, T0C + 40, T0C + 66) // K - - update_icon() - -/obj/machinery/alarm/Initialize(mapload) - . = ..() - set_frequency(frequency) - if(!master_is_operating()) - elect_master() - -/obj/machinery/alarm/process(delta_time) - if((machine_stat & (NOPOWER|BROKEN)) || shorted) - return - - var/turf/simulated/location = src.loc - if(!istype(location)) return//returns if loc is not simulated - - var/datum/gas_mixture/environment = location.return_air() - - //Handle temperature adjustment here. - handle_heating_cooling(environment) - - var/old_level = danger_level - var/old_pressurelevel = pressure_dangerlevel - danger_level = overall_danger_level(environment) - - if(old_level != danger_level) - apply_danger_level(danger_level) - - if(old_pressurelevel != pressure_dangerlevel) - if(breach_detected()) - mode = AALARM_MODE_OFF - apply_mode() - - if(mode == AALARM_MODE_CYCLE && environment.return_pressure() < ONE_ATMOSPHERE * 0.05) - mode = AALARM_MODE_FILL - apply_mode() - - //atmos computer remote control stuff - switch(rcon_setting) - if(RCON_NO) - remote_control = 0 - if(RCON_AUTO) - if(danger_level == 2) - remote_control = 1 - else - remote_control = 0 - if(RCON_YES) - remote_control = 1 - - return - -/obj/machinery/alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment) - DECLARE_TLV_VALUES - LOAD_TLV_VALUES(TLV["temperature"], target_temperature) - if(!regulating_temperature) - //check for when we should start adjusting temperature - if(!TEST_TLV_VALUES && abs(environment.temperature - target_temperature) > 2.0 && environment.return_pressure() >= 1) - update_use_power(USE_POWER_ACTIVE) - regulating_temperature = 1 - audible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ - "You hear a click and a faint electronic hum.") - playsound(src, 'sound/machines/click.ogg', 50, 1) - else - //check for when we should stop adjusting temperature - if(TEST_TLV_VALUES || abs(environment.temperature - target_temperature) <= 0.5 || environment.return_pressure() < 1) - update_use_power(USE_POWER_IDLE) - regulating_temperature = 0 - audible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ - "You hear a click as a faint electronic humming stops.") - playsound(src, 'sound/machines/click.ogg', 50, 1) - - if(regulating_temperature) - if(target_temperature > T0C + MAX_TEMPERATURE) - target_temperature = T0C + MAX_TEMPERATURE - - if(target_temperature < T0C + MIN_TEMPERATURE) - target_temperature = T0C + MIN_TEMPERATURE - - var/datum/gas_mixture/gas - gas = environment.remove(0.25 * environment.total_moles) - if(gas) - - if(gas.temperature <= target_temperature) //gas heating - var/energy_used = min(gas.get_thermal_energy_change(target_temperature) , active_power_usage) - - gas.adjust_thermal_energy(energy_used) - //use_power(energy_used, ENVIRON) //handle by update_use_power instead - else //gas cooling - var/heat_transfer = min(abs(gas.get_thermal_energy_change(target_temperature)), active_power_usage) - - //Assume the heat is being pumped into the hull which is fixed at 20 C - //none of this is really proper thermodynamics but whatever - - var/cop = gas.temperature / T20C //coefficient of performance -> power used = heat_transfer/cop - - heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power - - heat_transfer = -gas.adjust_thermal_energy(-heat_transfer) //get the actual heat transfer - - //use_power(heat_transfer / cop, ENVIRON) //handle by update_use_power instead - - environment.merge(gas) - -/obj/machinery/alarm/proc/overall_danger_level(var/datum/gas_mixture/environment) - var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature/environment.volume - var/environment_pressure = environment.return_pressure() - - var/other_moles = 0 - for(var/g in trace_gas) - other_moles += environment.gas[g] //this is only going to be used in a partial pressure calc, so we don't need to worry about group_multiplier here. - - DECLARE_TLV_VALUES - LOAD_TLV_VALUES(TLV["pressure"], environment_pressure) - pressure_dangerlevel = TEST_TLV_VALUES // not local because it's used in process() - LOAD_TLV_VALUES(TLV["oxygen"], environment.gas[/datum/gas/oxygen]*partial_pressure) - var/oxygen_dangerlevel = TEST_TLV_VALUES - LOAD_TLV_VALUES(TLV["carbon dioxide"], environment.gas[/datum/gas/carbon_dioxide]*partial_pressure) - var/co2_dangerlevel = TEST_TLV_VALUES - LOAD_TLV_VALUES(TLV["phoron"], environment.gas[/datum/gas/phoron]*partial_pressure) - var/phoron_dangerlevel = TEST_TLV_VALUES - LOAD_TLV_VALUES(TLV["temperature"], environment.temperature) - var/temperature_dangerlevel = TEST_TLV_VALUES - LOAD_TLV_VALUES(TLV["other"], other_moles*partial_pressure) - var/other_dangerlevel = TEST_TLV_VALUES - - return max( - pressure_dangerlevel, - oxygen_dangerlevel, - co2_dangerlevel, - phoron_dangerlevel, - other_dangerlevel, - temperature_dangerlevel - ) - -/// Returns whether this air alarm thinks there is a breach, given the sensors that are available to it. -/obj/machinery/alarm/proc/breach_detected() - var/turf/simulated/location = src.loc - - if(!istype(location)) - return FALSE - - if(!breach_detection) - return FALSE - - var/datum/gas_mixture/environment = location.return_air() - var/environment_pressure = environment.return_pressure() - var/pressure_levels = TLV["pressure"] - - if(environment_pressure <= pressure_levels[1]) // Low pressures - if(!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE)) - return TRUE - return FALSE - -/obj/machinery/alarm/proc/master_is_operating() - return alarm_area && alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.machine_stat & (NOPOWER | BROKEN)) - -/obj/machinery/alarm/proc/elect_master(exclude_self = FALSE) - for(var/obj/machinery/alarm/AA in alarm_area) - if(exclude_self && AA == src) - continue - if(!(AA.machine_stat & (NOPOWER|BROKEN))) - alarm_area.master_air_alarm = AA - return TRUE - return FALSE - -/obj/machinery/alarm/setDir(ndir) - . = ..() - base_pixel_x = 0 - base_pixel_y = 0 - var/turf/T = get_step(get_turf(src), turn(dir, 180)) - if(istype(T) && T.density) - switch(dir) - if(NORTH) - base_pixel_y = -21 - if(SOUTH) - base_pixel_y = 21 - if(WEST) - base_pixel_x = 21 - if(EAST) - base_pixel_x = -21 - reset_pixel_offsets() - -/obj/machinery/alarm/update_icon() - cut_overlays() - - if(panel_open) - icon_state = "alarmx" - set_light(0) - //set_light_on(FALSE) - return - if((machine_stat & (NOPOWER|BROKEN)) || shorted) - icon_state = "alarmp" - set_light(0) - //set_light_on(FALSE) - return - - var/icon_level = danger_level - if(alarm_area?.atmosalm) - icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow - - var/new_color = null - switch(icon_level) - if(0) - icon_state = "alarm0" - //add_overlay(mutable_appearance(icon, "alarm_ov0")) - //add_overlay(emissive_appearance(icon, "alarm_ov0")) - new_color = "#03A728" - if(1) - icon_state = "alarm2" //yes, alarm2 is yellow alarm - //add_overlay(mutable_appearance(icon, "alarm_ov2")) - //add_overlay(emissive_appearance(icon, "alarm_ov2")) - new_color = "#EC8B2F" - if(2) - icon_state = "alarm1" - //add_overlay(mutable_appearance(icon, "alarm_ov1")) - //add_overlay(emissive_appearance(icon, "alarm_ov1")) - new_color = "#DA0205" - - set_light(l_range = 2, l_power = 0.25, l_color = new_color) - //set_light_on(TRUE) - -/obj/machinery/alarm/receive_signal(datum/signal/signal) - if(machine_stat & (NOPOWER|BROKEN)) - return - if(alarm_area.master_air_alarm != src) - if(master_is_operating()) - return - elect_master() - if(alarm_area.master_air_alarm != src) - return - if(!signal || signal.encryption) - return - var/id_tag = signal.data["tag"] - if(!id_tag) - return - if(signal.data["area"] != area_uid) - return - if(signal.data["sigtype"] != "status") - return - - var/dev_type = signal.data["device"] - if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names)) - register_env_machine(id_tag, dev_type) - if(dev_type == "AScr") - alarm_area.air_scrub_info[id_tag] = signal.data - else if(dev_type == "AVP") - alarm_area.air_vent_info[id_tag] = signal.data - SStgui.update_uis(src) - -/obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type) - var/new_name - if(device_type == "AVP") - new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]" - alarm_area.air_vent_names[m_id] = new_name - else if(device_type == "AScr") - new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]" - alarm_area.air_scrub_names[m_id] = new_name - else - return - spawn(10) - send_signal(m_id, list("init" = new_name)) - -/obj/machinery/alarm/proc/refresh_all() - for(var/id_tag in alarm_area.air_vent_names) - var/list/I = alarm_area.air_vent_info[id_tag] - if(I && I["timestamp"] + AALARM_REPORT_TIMEOUT / 2 > world.time) - continue - send_signal(id_tag, list("status")) - for(var/id_tag in alarm_area.air_scrub_names) - var/list/I = alarm_area.air_scrub_info[id_tag] - if(I && I["timestamp"] + AALARM_REPORT_TIMEOUT / 2 > world.time) - continue - send_signal(id_tag, list("status")) - -/obj/machinery/alarm/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) - -/obj/machinery/alarm/proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = TRANSMISSION_RADIO //radio signal - signal.source = src - - signal.data = command - signal.data["tag"] = target - signal.data["sigtype"] = "command" - - radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) -// TO_WORLD("Signal [command] Broadcasted to [target]") - - return 1 - -/obj/machinery/alarm/proc/apply_mode() - //propagate mode to other air alarms in the area - //TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area - for(var/obj/machinery/alarm/AA in alarm_area) - AA.mode = mode - - switch(mode) - if(AALARM_MODE_SCRUBBING) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "scrubbing"= 1, "panic_siphon"= 0)) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default")) - - if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("power"= 1, "panic_siphon"= 1)) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("power"= 0)) - - if(AALARM_MODE_REPLACEMENT) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("power"= 1, "panic_siphon"= 1)) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default")) - - if(AALARM_MODE_FILL) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("power"= 0)) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default")) - - if(AALARM_MODE_OFF) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("power"= 0)) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("power"= 0)) - -/obj/machinery/alarm/proc/apply_danger_level(var/new_danger_level) - if(report_danger_level && alarm_area.atmosalert(new_danger_level, src)) - post_alert(new_danger_level) - - update_icon() - -/obj/machinery/alarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) - if(!frequency) - return - - var/datum/signal/alert_signal = new - alert_signal.source = src - alert_signal.transmission_method = TRANSMISSION_RADIO - alert_signal.data["zone"] = alarm_area.name - alert_signal.data["type"] = "Atmospheric" - - if(alert_level==2) - alert_signal.data["alert"] = "severe" - else if(alert_level==1) - alert_signal.data["alert"] = "minor" - else if(alert_level==0) - alert_signal.data["alert"] = "clear" - - frequency.post_signal(src, alert_signal) - -/obj/machinery/alarm/attack_ai(mob/user) - ui_interact(user) - -/obj/machinery/alarm/attack_hand(mob/user, list/params) - . = ..() - if(.) - return - return interact(user) - -/obj/machinery/alarm/interact(mob/user) - ui_interact(user) - wires.Interact(user) - -/obj/machinery/alarm/ui_status(mob/user) - if(isAI(user) && aidisabled) - to_chat(user, "AI control has been disabled.") - else if(!shorted) - return ..() - return UI_CLOSE - -/obj/machinery/alarm/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AirAlarm", name, parent_ui) - if(state) - ui.set_state(state) - ui.open() - -/obj/machinery/alarm/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) - var/list/data = list( - "locked" = locked, - "siliconUser" = issilicon(user), - "remoteUser" = !!ui.parent_ui, - "danger_level" = danger_level, - "target_temperature" = "[target_temperature - T0C]C", - "rcon" = rcon_setting, - ) - - var/area/A = get_area(src) - data["atmos_alarm"] = A?.atmosalm - data["fire_alarm"] = A?.fire - - var/turf/T = get_turf(src) - var/datum/gas_mixture/environment = T.return_air() - - var/list/list/environment_data = list() - data["environment_data"] = environment_data - - DECLARE_TLV_VALUES - - var/pressure = environment.return_pressure() - LOAD_TLV_VALUES(TLV["pressure"], pressure) - environment_data.Add(list(list( - "name" = "Pressure", - "value" = pressure, - "unit" = "kPa", - "danger_level" = TEST_TLV_VALUES - ))) - - var/temperature = environment.temperature - LOAD_TLV_VALUES(TLV["temperature"], temperature) - environment_data.Add(list(list( - "name" = "Temperature", - "value" = temperature, - "unit" = "K ([round(temperature - T0C, 0.1)]C)", - "danger_level" = TEST_TLV_VALUES - ))) - - var/total_moles = environment.total_moles - var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume - for(var/gas_id in environment.gas) - if(!(gas_id in TLV)) - continue - LOAD_TLV_VALUES(TLV[gas_id], environment.gas[gas_id] * partial_pressure) - environment_data.Add(list(list( - "name" = gas_id, - "value" = environment.gas[gas_id] / total_moles * 100, - "unit" = "%", - "danger_level" = TEST_TLV_VALUES - ))) - - if(!locked || issilicon(user) || data["remoteUser"]) - var/list/list/vents = list() - data["vents"] = vents - for(var/id_tag in A.air_vent_names) - var/long_name = A.air_vent_names[id_tag] - var/list/info = A.air_vent_info[id_tag] - if(!info) - continue - vents.Add(list(list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "checks" = info["checks"], - "excheck" = info["checks"]&1, - "incheck" = info["checks"]&2, - "direction" = info["direction"], - "external" = info["external"], - "internal" = info["internal"], - "extdefault"= (info["external"] == ONE_ATMOSPHERE), - "intdefault"= (info["internal"] == 0), - ))) - - - var/list/list/scrubbers = list() - data["scrubbers"] = scrubbers - for(var/id_tag in alarm_area.air_scrub_names) - var/long_name = alarm_area.air_scrub_names[id_tag] - var/list/info = alarm_area.air_scrub_info[id_tag] - if(!info) - continue - scrubbers += list(list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "scrubbing" = info["scrubbing"], - "panic" = info["panic"], - "filters" = list( - list("name" = "Oxygen", "command" = "o2_scrub", "val" = info["filter_o2"]), - list("name" = "Nitrogen", "command" = "n2_scrub", "val" = info["filter_n2"]), - list("name" = "Carbon Dioxide", "command" = "co2_scrub","val" = info["filter_co2"]), - list("name" = "Toxin" , "command" = "tox_scrub","val" = info["filter_phoron"]), - list("name" = "Nitrous Oxide", "command" = "n2o_scrub","val" = info["filter_n2o"]), - list("name" = "Fuel", "command" = "fuel_scrub","val" = info["filter_fuel"]) - ) - )) - data["scrubbers"] = scrubbers - - data["mode"] = mode - - var/list/list/modes = list() - data["modes"] = modes - modes[++modes.len] = list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0) - modes[++modes.len] = list("name" = "Replace Air - Siphons out air while replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 0) - modes[++modes.len] = list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1) - modes[++modes.len] = list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_CYCLE, "selected" = mode == AALARM_MODE_CYCLE, "danger" = 1) - modes[++modes.len] = list("name" = "Fill - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FILL, "selected" = mode == AALARM_MODE_FILL, "danger" = 0) - modes[++modes.len] = list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0) - - var/list/selected - var/list/thresholds = list() - - var/list/gas_names = list("oxygen", "carbon dioxide", "phoron", "other") - for(var/g in gas_names) - thresholds[++thresholds.len] = list("name" = g, "settings" = list()) - selected = TLV[g] - for(var/i = 1, i <= 4, i++) - thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = i, "selected" = selected[i])) - - selected = TLV["pressure"] - thresholds[++thresholds.len] = list("name" = "Pressure", "settings" = list()) - for(var/i = 1, i <= 4, i++) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = i, "selected" = selected[i])) - - selected = TLV["temperature"] - thresholds[++thresholds.len] = list("name" = "Temperature", "settings" = list()) - for(var/i = 1, i <= 4, i++) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = i, "selected" = selected[i])) - - data["thresholds"] = thresholds - return data - -/obj/machinery/alarm/ui_act(action, params, datum/tgui/ui) - if(..()) - return TRUE - - if(action == "rcon") - var/attempted_rcon_setting = text2num(params["rcon"]) - - switch(attempted_rcon_setting) - if(RCON_NO) - rcon_setting = RCON_NO - if(RCON_AUTO) - rcon_setting = RCON_AUTO - if(RCON_YES) - rcon_setting = RCON_YES - return TRUE - - if(action == "temperature") - var/list/selected = TLV["temperature"] - var/max_temperature = min(selected[3] - T0C, MAX_TEMPERATURE) - var/min_temperature = max(selected[2] - T0C, MIN_TEMPERATURE) - var/input_temperature = tgui_input_number(usr, "What temperature would you like the system to mantain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", (target_temperature - T0C), max_temperature, min_temperature) - if(isnum(input_temperature)) - if(input_temperature > max_temperature || input_temperature < min_temperature) - to_chat(usr, "Temperature must be between [min_temperature]C and [max_temperature]C") - else - target_temperature = input_temperature + T0C - return TRUE - - // Account for remote users here. - // Yes, this is kinda snowflaky; however, I would argue it would be far more snowflakey - // to include "custom hrefs" and all the other bullshit that nano states have just for the - // like, two UIs, that want remote access to other UIs. - if((locked && !issilicon(usr) && !istype(ui.state, /datum/ui_state/air_alarm_remote)) || (issilicon(usr) && aidisabled)) - return - - var/device_id = params["id_tag"] - switch(action) - if("lock") - if(issilicon(usr) && !wires.is_cut(WIRE_IDSCAN)) - locked = !locked - . = TRUE - if( "power", - "o2_scrub", - "n2_scrub", - "co2_scrub", - "tox_scrub", - "n2o_scrub", - "fuel_scrub", - "panic_siphon", - "scrubbing", - "direction") - send_signal(device_id, list("[action]" = text2num(params["val"])), usr) - . = TRUE - if("excheck") - send_signal(device_id, list("checks" = text2num(params["val"])^1), usr) - . = TRUE - if("incheck") - send_signal(device_id, list("checks" = text2num(params["val"])^2), usr) - . = TRUE - if("set_external_pressure", "set_internal_pressure") - var/target = params["value"] - if(!isnull(target)) - send_signal(device_id, list("[action]" = target), usr) - . = TRUE - if("reset_external_pressure") - send_signal(device_id, list("reset_external_pressure"), usr) - . = TRUE - if("reset_internal_pressure") - send_signal(device_id, list("reset_internal_pressure"), usr) - . = TRUE - if("threshold") - var/env = params["env"] - - var/name = params["var"] - var/value = input(usr, "New [name] for [env]:", name, TLV[env][name]) as num|null - if(!isnull(value) && !..()) - if(value < 0) - TLV[env][name] = -1 - else - TLV[env][name] = round(value, 0.01) - clamp_tlv_values(env, name) - // investigate_log(" treshold value for [env]:[name] was set to [value] by [key_name(usr)]",INVESTIGATE_ATMOS) - . = TRUE - if("mode") - mode = text2num(params["mode"]) - // investigate_log("was turned to [get_mode_name(mode)] mode by [key_name(usr)]",INVESTIGATE_ATMOS) - apply_mode(usr) - . = TRUE - if("alarm") - if(alarm_area.atmosalert(2, src)) - apply_danger_level(2) - . = TRUE - if("reset") - atmos_reset() - . = TRUE - update_icon() - -// This big ol' mess just ensures that TLV always makes sense. If you set the max value below the min value, -// it'll automatically update all the other values to keep it sane. -/obj/machinery/alarm/proc/clamp_tlv_values(env, changed_threshold) - var/list/selected = TLV[env] - switch(changed_threshold) - if(1) - if(selected[1] > selected[2]) - selected[2] = selected[1] - if(selected[1] > selected[3]) - selected[3] = selected[1] - if(selected[1] > selected[4]) - selected[4] = selected[1] - if(2) - if(selected[1] > selected[2]) - selected[1] = selected[2] - if(selected[2] > selected[3]) - selected[3] = selected[2] - if(selected[2] > selected[4]) - selected[4] = selected[2] - if(3) - if(selected[1] > selected[3]) - selected[1] = selected[3] - if(selected[2] > selected[3]) - selected[2] = selected[3] - if(selected[3] > selected[4]) - selected[4] = selected[3] - if(4) - if(selected[1] > selected[4]) - selected[1] = selected[4] - if(selected[2] > selected[4]) - selected[2] = selected[4] - if(selected[3] > selected[4]) - selected[3] = selected[4] - - - - -/obj/machinery/alarm/proc/atmos_reset() - if(alarm_area.atmosalert(0, src)) - apply_danger_level(0) - update_icon() - -/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) - add_fingerprint(user) - if(alarm_deconstruction_screwdriver(user, W)) - return - if(alarm_deconstruction_wirecutters(user, W)) - return - - if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))// trying to unlock the interface with an ID card - togglelock() - return ..() - -/obj/machinery/alarm/verb/togglelock(mob/user as mob) - if(machine_stat & (NOPOWER|BROKEN)) - to_chat(user, "It does nothing.") - return - else - if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) - locked = !locked - to_chat(user, SPAN_NOTICE("You [locked ? "lock" : "unlock"] the Air Alarm interface.")) - else - to_chat(user, SPAN_BOLDWARNING("Access denied.")) - return - -/obj/machinery/alarm/AltClick() - ..() - togglelock() - -/obj/machinery/alarm/power_change() - ..() - spawn(rand(0,15)) - update_icon() -/obj/machinery/alarm/freezer - target_temperature = T0C - 13.15 // Chilly freezer room - -/obj/machinery/alarm/freezer/first_run() - . = ..() - - TLV["temperature"] = list(T0C - 40, T0C - 20, T0C + 40, T0C + 66) // K, Lower Temperature for Freezer Air Alarms (This is because TLV is hardcoded to be generated on first_run, and therefore the only way to modify this without changing TLV generation) - -#undef LOAD_TLV_VALUES -#undef TEST_TLV_VALUES -#undef DECLARE_TLV_VALUES diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index d6231dd100b..8a232b6d316 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -41,13 +41,13 @@ var/total_moles = air_sample.total_moles if(total_moles > 0) if(output&4) - signal.data["oxygen"] = round(100*air_sample.gas[/datum/gas/oxygen]/total_moles,0.1) + signal.data["oxygen"] = round(100*air_sample.gas[GAS_ID_OXYGEN]/total_moles,0.1) if(output&8) - signal.data["phoron"] = round(100*air_sample.gas[/datum/gas/phoron]/total_moles,0.1) + signal.data["phoron"] = round(100*air_sample.gas[GAS_ID_PHORON]/total_moles,0.1) if(output&16) - signal.data["nitrogen"] = round(100*air_sample.gas[/datum/gas/nitrogen]/total_moles,0.1) + signal.data["nitrogen"] = round(100*air_sample.gas[GAS_ID_NITROGEN]/total_moles,0.1) if(output&32) - signal.data["carbon_dioxide"] = round(100*air_sample.gas[/datum/gas/carbon_dioxide]/total_moles,0.1) + signal.data["carbon_dioxide"] = round(100*air_sample.gas[GAS_ID_CARBON_DIOXIDE]/total_moles,0.1) else signal.data["oxygen"] = 0 signal.data["phoron"] = 0 diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm deleted file mode 100644 index 16dd175f9c6..00000000000 --- a/code/game/machinery/atmoalter/scrubber.dm +++ /dev/null @@ -1,279 +0,0 @@ -/obj/machinery/portable_atmospherics/powered/scrubber - name = "Portable Air Scrubber" - - icon = 'icons/obj/atmos.dmi' - icon_state = "pscrubber:0" - density = 1 - w_class = ITEMSIZE_NORMAL - - var/on = 0 - var/volume_rate = 800 - - volume = 750 - - power_rating = 7500 //7500 W ~ 10 HP - power_losses = 150 - - var/minrate = 0 - var/maxrate = 10 * ONE_ATMOSPHERE - - var/list/scrubbing_gas = list(/datum/gas/carbon_dioxide, /datum/gas/volatile_fuel, /datum/gas/phoron, /datum/gas/nitrous_oxide, - /datum/gas/helium, /datum/gas/carbon_monoxide, /datum/gas/methyl_bromide, /datum/gas/nitrodioxide, /datum/gas/nitricoxide, - /datum/gas/methane, /datum/gas/argon, /datum/gas/krypton, /datum/gas/neon, /datum/gas/ammonia, /datum/gas/xenon, /datum/gas/chlorine, - /datum/gas/sulfur_dioxide, /datum/gas/hydrogen) - -/obj/machinery/portable_atmospherics/powered/scrubber/Initialize(mapload) - . = ..() - for(var/i in scrubbing_gas) - if(!ispath(i)) - scrubbing_gas -= i - var/path = gas_id2path(i) - if(!path) - stack_trace("Invalid gas id [i]") - else - scrubbing_gas += path - cell = new/obj/item/cell/apc(src) - -/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) - if(machine_stat & (BROKEN|NOPOWER)) - ..(severity) - return - - if(prob(50/severity)) - on = !on - update_icon() - - ..(severity) - -/obj/machinery/portable_atmospherics/powered/scrubber/update_icon_state() - . = ..() - if(on && cell && cell.charge) - icon_state = "pscrubber:1" - else - icon_state = "pscrubber:0" - -/obj/machinery/portable_atmospherics/powered/scrubber/update_overlays() - . = ..() - if(holding) - . += "scrubber-open" - - if(connected_port) - . += "scrubber-connector" - -/obj/machinery/portable_atmospherics/powered/scrubber/process(delta_time) - ..() - - var/power_draw = -1 - - if(on && cell && cell.charge) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles - - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - power_draw = max(power_draw, power_losses) - cell.use_scaled(DYNAMIC_W_TO_CELL_UNITS(power_draw, 1)) - last_power_draw = power_draw - - update_connected_network() - - //ran out of charge - if (!cell.charge) - power_change() - update_icon() - - //src.update_icon() - src.updateDialog() - -/obj/machinery/portable_atmospherics/powered/scrubber/return_air() - return air_contents - -/obj/machinery/portable_atmospherics/powered/scrubber/attack_ai(var/mob/user) - src.add_hiddenprint(user) - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/powered/scrubber/attack_ghost(var/mob/user) - . = ..() - return src.attack_hand(user) - -/obj/machinery/portable_atmospherics/powered/scrubber/attack_hand(mob/user, list/params) - ui_interact(user) - -/obj/machinery/portable_atmospherics/powered/scrubber/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortableScrubber", name) - ui.open() - -/obj/machinery/portable_atmospherics/powered/scrubber/ui_data(mob/user) - var/list/data = list() - - data["on"] = on ? 1 : 0 - data["connected"] = connected_port ? 1 : 0 - data["pressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) - data["rate"] = round(volume_rate) - data["minrate"] = round(minrate) - data["maxrate"] = round(maxrate) - data["powerDraw"] = round(last_power_draw) - data["cellCharge"] = cell ? cell.charge : 0 - data["cellMaxCharge"] = cell ? cell.maxcharge : 1 - - if(holding) - data["holding"] = list() - data["holding"]["name"] = holding.name - data["holding"]["pressure"] = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0) - else - data["holding"] = null - - return data - -/obj/machinery/portable_atmospherics/powered/scrubber/ui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("power") - on = !on - . = TRUE - if("eject") - if(holding) - holding.loc = loc - holding = null - . = TRUE - if("volume_adj") - volume_rate = clamp(text2num(params["vol"]), minrate, maxrate) - . = TRUE - - update_icon() - -//Huge scrubber -/obj/machinery/portable_atmospherics/powered/scrubber/huge - name = "Huge Air Scrubber" - icon = 'icons/obj/atmos_vr.dmi' - icon_state = "scrubber:0" - anchored = TRUE - volume = 500000 - volume_rate = 7000 - - use_power = USE_POWER_IDLE - idle_power_usage = 50 //internal circuitry, friction losses and stuff - active_power_usage = 1000 // Blowers running - power_rating = 100000 //100 kW ~ 135 HP - - var/global/gid = 1 - var/id = 0 - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/Initialize(mapload) - . = ..() - cell = null - - id = gid - gid++ - - name = "[name] (ID [id])" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attack_hand(mob/user, list/params) - to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.") - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon() - cut_overlays() - - if(on && !(machine_stat & (NOPOWER|BROKEN))) - icon_state = "scrubber:1" - else - icon_state = "scrubber:0" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/power_change() - var/old_stat = machine_stat - ..() - if (old_stat != machine_stat) - update_icon() - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/process(delta_time) - if(!anchored || (machine_stat & (NOPOWER|BROKEN))) - on = 0 - last_flow_rate = 0 - last_power_draw = 0 - update_icon() - var/new_use_power = 1 + on - if(new_use_power != use_power) - update_use_power(new_use_power) - if(!on) - return - - var/power_draw = -1 - - var/datum/gas_mixture/environment = loc.return_air() - - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles - - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, active_power_usage) - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - use_power(power_draw) - update_connected_network() - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(I.is_wrench()) - if(on) - to_chat(user, "Turn \the [src] off first!") - return - - anchored = !anchored - playsound(src.loc, I.tool_sound, 50, 1) - to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") - - return - - //doesn't use power cells - if(istype(I, /obj/item/cell)) - return - if(I.is_screwdriver()) - return - - //doesn't hold tanks - if(istype(I, /obj/item/tank)) - return - - ..() - - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary - name = "Stationary Air Scrubber" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(I.is_wrench()) - to_chat(user, "The bolts are too tight for you to unscrew!") - return - - ..() - -// Tether tram air scrubbers for keeping arrivals clean - they work even with no area power -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram - name = "\improper Tram Air Scrubber" - icon_state = "scrubber:1" - on = TRUE - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram/powered() - return TRUE // Always be powered - -// Triumph shuttle air scrubbers for keeping arrivals clean - they work even with no area power -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/shuttle - name = "\improper Shuttle Air Scrubber" - icon_state = "scrubber:1" - on = TRUE - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/shuttle/powered() - return TRUE // Always be powered diff --git a/code/game/machinery/bomb_tester.dm b/code/game/machinery/bomb_tester.dm index 48d68ca5326..4d042530955 100644 --- a/code/game/machinery/bomb_tester.dm +++ b/code/game/machinery/bomb_tester.dm @@ -370,7 +370,7 @@ if(G.total_moles) results += "
Temperature: [round(G.temperature-T0C)]°C" for(var/mix in G.gas) - results += "
[GLOB.meta_gas_names[mix]]: [round((G.gas[mix] / G.total_moles) * 100)]%" + results += "
[global.gas_data.names[mix]]: [round((G.gas[mix] / G.total_moles) * 100)]%" return results diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 153bf06d024..3a54262c390 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -67,7 +67,7 @@ var/global/list/minor_air_alarms = list() var/datum/alarm/alarm = locate(params["ref"]) in atmosphere_alarm.alarms if(alarm) for(var/datum/alarm_source/alarm_source in alarm.sources) - var/obj/machinery/alarm/air_alarm = alarm_source.source + var/obj/machinery/air_alarm/air_alarm = alarm_source.source if(istype(air_alarm)) // I have to leave a note here: // Once upon a time, this called air_alarm.Topic() with a custom topic state diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index bea8fe774fe..b574db38987 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -9,7 +9,6 @@ layer = UNDER_JUNK_LAYER interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON - var/on = FALSE use_power = USE_POWER_IDLE idle_power_usage = 20 active_power_usage = 200 @@ -25,8 +24,6 @@ var/image/fluid /obj/machinery/atmospherics/component/unary/cryo_cell/Initialize(mapload) - . = ..() - icon = 'icons/obj/medical/cryogenics_split.dmi' icon_state = "base" initialize_directions = dir @@ -43,6 +40,10 @@ fluid.layer = MOB_LAYER+0.1 //Below glass, above mob add_overlay(tank) + + . = ..() + + // todo: duped, components update icon on init right? update_icon() /obj/machinery/atmospherics/component/unary/cryo_cell/Destroy() @@ -205,8 +206,6 @@ qdel(grab) put_mob(M) - return - /obj/machinery/atmospherics/component/unary/cryo_cell/MouseDroppedOnLegacy(mob/target, mob/user) //Allows borgs to put people into cryo without external assistance if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target)) return @@ -233,7 +232,7 @@ if(occupant.bodytemperature < T0C) occupant.afflict_sleeping(20 * max(5, (1/occupant.bodytemperature)*2000)) occupant.afflict_unconscious(20 * max(5, (1/occupant.bodytemperature)*3000)) - if(air_contents.gas[/datum/gas/oxygen] > 2) + if(air_contents.gas[GAS_ID_OXYGEN] > 2) if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) else occupant.adjustOxyLoss(-1) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c29ec0c2b6c..fbb196b55be 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -319,7 +319,7 @@ GLOBAL_REAL_VAR(airlock_typecache) = typecacheof(list( /obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature) for(var/turf/simulated/floor/target_tile in range(2,loc)) - target_tile.assume_gas(/datum/gas/phoron, 35, 400+T0C) + target_tile.assume_gas(GAS_ID_PHORON, 35, 400+T0C) spawn (0) target_tile.hotspot_expose(temperature, 400) for(var/turf/simulated/wall/W in range(3,src)) W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d6b3e404015..6a9520fe006 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -550,15 +550,15 @@ GLOBAL_LIST_INIT(firelock_align_types, typecacheof(list( update_nearby_tiles(need_rebuild) - if(!air_master) return 0 + if(!SSair) return 0 var/turf/simulated/source = loc var/turf/simulated/destination = get_step(source,dir) update_heat_protection(loc) - if(istype(source)) air_master.tiles_to_update += source - if(istype(destination)) air_master.tiles_to_update += destination + if(istype(source)) SSair.tiles_to_update += source + if(istype(destination)) SSair.tiles_to_update += destination return 1 */ diff --git a/code/game/machinery/doors/phoronlocks.dm b/code/game/machinery/doors/phoronlocks.dm index 134fb916d9c..28400e95cb2 100644 --- a/code/game/machinery/doors/phoronlocks.dm +++ b/code/game/machinery/doors/phoronlocks.dm @@ -23,7 +23,7 @@ if(on) var/datum/gas_mixture/air_sample = return_air() var/pressure = round(air_sample.return_pressure(), 0.1) - var/phoron = (/datum/gas/phoron in air_sample.gas) ? round(air_sample.gas[/datum/gas/phoron], 0.1) : 0 + var/phoron = (GAS_ID_PHORON in air_sample.gas) ? round(air_sample.gas[GAS_ID_PHORON], 0.1) : 0 if(abs(pressure - previousPressure) > 0.1 || previousPressure == null || abs(phoron - previousPhoron) > 0.1 || previousPhoron == null) var/datum/signal/signal = new @@ -92,8 +92,8 @@ return 1 /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/phoronlock //Special scrubber with bonus inbuilt heater - volume_rate = 40000 active_power_usage = 2000 + efficiency_multiplier = 4 var/target_temp = T20C var/heating_power = 150000 @@ -113,11 +113,6 @@ removed.adjust_thermal_energy(clamp(heat_transfer,-heating_power,heating_power)) env.merge(removed) - var/transfer_moles = min(1, volume_rate/env.volume)*env.total_moles - for(var/i=1 to 3) //Scrubs 4 times as fast - scrub_gas(src, scrubbing_gas, env, air_contents, transfer_moles, active_power_usage) - - // // PHORON LOCK CONTROLLER // diff --git a/code/game/machinery/pipe/pipe_recipes.dm b/code/game/machinery/pipe/pipe_recipes.dm index 59399a2e206..8556ba5e2d9 100644 --- a/code/game/machinery/pipe/pipe_recipes.dm +++ b/code/game/machinery/pipe/pipe_recipes.dm @@ -30,7 +30,8 @@ GLOBAL_LIST_INIT(atmos_pipe_recipes, list( new /datum/pipe_info/pipe("Heat Pump", /obj/machinery/atmospherics/component/binary/heat_pump, TRUE), //new /datum/pipe_info/pipe("Automatic Shutoff Valve",/obj/machinery/atmospherics/valve/shutoff, TRUE), new /datum/pipe_info/pipe("Scrubber", /obj/machinery/atmospherics/component/unary/vent_scrubber, TRUE), - new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/component/trinary/atmos_filter, TRUE), + new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/component/trinary/filter, TRUE), + new /datum/pipe_info/pipe("Gas Molar Filter", /obj/machinery/atmospherics/component/trinary/molar_filter, TRUE), new /datum/pipe_info/pipe("Gas Mixer", /obj/machinery/atmospherics/component/trinary/mixer, TRUE), new /datum/pipe_info/pipe("Gas Mixer 'T'", /obj/machinery/atmospherics/component/trinary/mixer/t_mixer, TRUE), new /datum/pipe_info/pipe("Omni Gas Mixer", /obj/machinery/atmospherics/component/quaternary/mixer, TRUE), diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 972f5dd7edc..7383b5c06e9 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -327,7 +327,7 @@ env.merge(removed) var/turf/T = get_turf(src) new /obj/effect/debris/cleanable/liquid_fuel(T, 5) - T.assume_gas(/datum/gas/volatile_fuel, 5, T20C) + T.assume_gas(GAS_ID_VOLATILE_FUEL, 5, T20C) T.hotspot_expose(700,400) var/datum/effect_system/spark_spread/s = new s.set_up(5, 0, T) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 0df4c120f5f..9f60d0376cb 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1287,7 +1287,7 @@ /obj/item/weldingtool = 3, /obj/item/tool/wirecutters = 5, /obj/item/tool/wrench = 5, - /obj/item/analyzer = 5, + /obj/item/atmos_analyzer = 5, /obj/item/t_scanner = 5, /obj/item/tool/screwdriver = 5, /obj/item/flashlight/glowstick = 3, diff --git a/code/game/mecha/equipment/tools/generator.dm b/code/game/mecha/equipment/tools/generator.dm index 389d945d75b..3bb5fe69bca 100644 --- a/code/game/mecha/equipment/tools/generator.dm +++ b/code/game/mecha/equipment/tools/generator.dm @@ -96,11 +96,11 @@ return var/datum/gas_mixture/GM = new if(prob(10)) - T.assume_gas(/datum/gas/phoron, 100, 1500+T0C) + T.assume_gas(GAS_ID_PHORON, 100, 1500+T0C) T.visible_message("The [src] suddenly disgorges a cloud of heated phoron.") destroy() else - T.assume_gas(/datum/gas/phoron, 5, istype(T) ? T.air.temperature : T20C) + T.assume_gas(GAS_ID_PHORON, 5, istype(T) ? T.air.temperature : T20C) T.visible_message("The [src] suddenly disgorges a cloud of phoron.") T.assume_air(GM) return diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 90f9ff9c4d6..04dbf514158 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -408,7 +408,7 @@ cabin_air = new cabin_air.temperature = T20C cabin_air.volume = 200 - cabin_air.adjust_multi(/datum/gas/oxygen, O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature), /datum/gas/nitrogen, N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)) + cabin_air.adjust_multi(GAS_ID_OXYGEN, O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature), GAS_ID_NITROGEN, N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)) return cabin_air /obj/mecha/proc/add_radio() diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index f4868b547b2..88e0f990487 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -108,7 +108,7 @@ triggered = 1 for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) - target.assume_gas(/datum/gas/chlorine, 30) + target.assume_gas(GAS_ID_CHLORINE, 30) visible_message("\The [src.name] detonates!") spawn(0) qdel(src) @@ -120,7 +120,7 @@ triggered = 1 for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) - target.assume_gas(/datum/gas/nitrous_oxide, 30) + target.assume_gas(GAS_ID_NITROUS_OXIDE, 30) visible_message("\The [src.name] detonates!") spawn(0) qdel(src) @@ -132,7 +132,7 @@ triggered = 1 for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) - target.assume_gas(/datum/gas/phoron, 30) + target.assume_gas(GAS_ID_PHORON, 30) target.hotspot_expose(1000, CELL_VOLUME) visible_message("\The [src.name] detonates!") spawn(0) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 212c00f13b8..4fde689a64f 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -173,14 +173,14 @@ OT.master = V PT.valve_welded = 1 - PT.air_contents.gas[/datum/gas/phoron] = phoron_amt - PT.air_contents.gas[/datum/gas/carbon_dioxide] = carbon_amt + PT.air_contents.gas[GAS_ID_PHORON] = phoron_amt + PT.air_contents.gas[GAS_ID_CARBON_DIOXIDE] = carbon_amt PT.air_contents.total_moles = phoron_amt + carbon_amt PT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 PT.air_contents.update_values() OT.valve_welded = 1 - OT.air_contents.gas[/datum/gas/oxygen] = oxygen_amt + OT.air_contents.gas[GAS_ID_OXYGEN] = oxygen_amt OT.air_contents.total_moles = oxygen_amt OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 OT.air_contents.update_values() diff --git a/code/game/objects/effects/zone_divider.dm b/code/game/objects/effects/zone_divider.dm index a179ef2c265..946b6cf8933 100644 --- a/code/game/objects/effects/zone_divider.dm +++ b/code/game/objects/effects/zone_divider.dm @@ -12,7 +12,7 @@ // Special case to prevent us from being part of a zone during the first air master tick. // We must merge ourselves into a zone on next tick. This will cause a bit of lag on // startup, but it can't really be helped you know? - if(air_master.current_cycle == 0) + if(SSair.current_cycle == 0) if(!isturf(loc)) return SSticker.OnRoundstart(CALLBACK(loc, TYPE_PROC_REF(/turf, queue_zone_update))) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 9f8a9b958a9..2051c966690 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -223,7 +223,7 @@ if (!oldtitle) // or replacetext goes to infinite loop return - for(var/obj/machinery/alarm/M in A) + for(var/obj/machinery/air_alarm/M in A) M.name = replacetext(M.name,oldtitle,title) for(var/obj/machinery/power/apc/M in A) M.name = replacetext(M.name,oldtitle,title) diff --git a/code/game/objects/items/circuitboards/frame.dm b/code/game/objects/items/circuitboards/frame.dm index 7d31d2ebb93..62e8713c407 100644 --- a/code/game/objects/items/circuitboards/frame.dm +++ b/code/game/objects/items/circuitboards/frame.dm @@ -52,7 +52,7 @@ /obj/item/circuitboard/airalarm name = T_BOARD("air alarm") - build_path = /obj/machinery/alarm + build_path = /obj/machinery/air_alarm board_type = new /datum/frame/frame_types/air_alarm materials = list(MAT_STEEL = 50, MAT_GLASS = 50) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index c73f5e2ea55..e643bfba9b5 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1572,10 +1572,10 @@ GLOBAL_LIST_EMPTY(PDAs) var/pressure = environment.return_pressure() var/total_moles = environment.total_moles if (total_moles) - var/o2_level = environment.gas[/datum/gas/oxygen]/total_moles - var/n2_level = environment.gas[/datum/gas/nitrogen]/total_moles - var/co2_level = environment.gas[/datum/gas/carbon_dioxide]/total_moles - var/phoron_level = environment.gas[/datum/gas/phoron]/total_moles + var/o2_level = environment.gas[GAS_ID_OXYGEN]/total_moles + var/n2_level = environment.gas[GAS_ID_NITROGEN]/total_moles + var/co2_level = environment.gas[GAS_ID_CARBON_DIOXIDE]/total_moles + var/phoron_level = environment.gas[GAS_ID_PHORON]/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) // entry is what the element is describing diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm index b0508f8b2f2..ca06ce4b36b 100644 --- a/code/game/objects/items/devices/communicator/helper.dm +++ b/code/game/objects/items/devices/communicator/helper.dm @@ -6,10 +6,10 @@ var/pressure = environment.return_pressure() var/total_moles = environment.total_moles if (total_moles) - var/o2_level = environment.gas[/datum/gas/oxygen]/total_moles - var/n2_level = environment.gas[/datum/gas/nitrogen]/total_moles - var/co2_level = environment.gas[/datum/gas/carbon_dioxide]/total_moles - var/phoron_level = environment.gas[/datum/gas/phoron]/total_moles + var/o2_level = environment.gas[GAS_ID_OXYGEN]/total_moles + var/n2_level = environment.gas[GAS_ID_NITROGEN]/total_moles + var/co2_level = environment.gas[GAS_ID_CARBON_DIOXIDE]/total_moles + var/phoron_level = environment.gas[GAS_ID_PHORON]/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) // Label is what the entry is describing diff --git a/code/game/objects/items/scanners/atmos.dm b/code/game/objects/items/scanners/atmos.dm new file mode 100644 index 00000000000..a36d8978f62 --- /dev/null +++ b/code/game/objects/items/scanners/atmos.dm @@ -0,0 +1,60 @@ +/obj/item/atmos_analyzer + name = "analyzer" + desc = "A hand-held environmental scanner which reports current gas levels." + icon = 'icons/obj/device.dmi' + icon_state = "atmos" + item_state = "analyzer" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_BELT + throw_force = 5 + throw_speed = 4 + throw_range = 20 + materials = list(MAT_STEEL = 30, MAT_GLASS = 20) + origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) + +/obj/item/atmos_analyzer/apidean + name = "\improper Apidean analyzer" + desc = "This analyzer has a strange, soft exterior and seems to faintly breathe." + icon_state = "apidae-analyzer" + +/obj/item/atmos_analyzer/longrange + name = "long-range analyzer" + desc = "A hand-held environmental scanner which reports current gas levels. This one uses bluespace technology." + icon = 'icons/obj/device.dmi' + icon_state = "atmos" + item_state = "analyzer" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_BELT + throw_force = 5 + throw_speed = 4 + throw_range = 20 + materials = list(MAT_STEEL = 30, MAT_GLASS = 20) + origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) + +/obj/item/atmos_analyzer/atmosanalyze(var/mob/user) + var/air = user.return_air() + if (!air) + return + + return atmosanalyzer_scan(src, air, user) + +/obj/item/atmos_analyzer/attack_self(mob/user) + . = ..() + if(.) + return + + analyze_gases(src, user) + return + +/obj/item/atmos_analyzer/afterattack(atom/target, mob/user, clickchain_flags, list/params) + if(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY) + if(istype(target, /obj/item/tank)) // don't double post what atmosanalyzer_scan returns + return + analyze_gases(target, user) + return + +/obj/item/atmos_analyzer/longrange/afterattack(atom/target, mob/user, clickchain_flags, list/params) + if(istype(target, /obj/item/tank)) // don't double post what atmosanalyzer_scan returns + return + analyze_gases(target, user) + return diff --git a/code/modules/xenobio2/tools/xeno_trait_scanner.dm b/code/game/objects/items/scanners/biology.dm similarity index 94% rename from code/modules/xenobio2/tools/xeno_trait_scanner.dm rename to code/game/objects/items/scanners/biology.dm index d1fbfd80461..1baffbd71d8 100644 --- a/code/modules/xenobio2/tools/xeno_trait_scanner.dm +++ b/code/game/objects/items/scanners/biology.dm @@ -1,10 +1,10 @@ -/obj/item/analyzer/xeno_analyzer +/obj/item/biology_analyzer name = "exotic biological analyzer" desc = "A device to investigate the genetic data of a biological target." var/form_title var/last_data -/obj/item/analyzer/xeno_analyzer/proc/print_report_verb() +/obj/item/biology_analyzer/proc/print_report_verb() set name = "Print Plant Report" set category = "Object" set src = usr @@ -13,13 +13,13 @@ return print_report(usr) -/obj/item/analyzer/xeno_analyzer/Topic(href, href_list) +/obj/item/biology_analyzer/Topic(href, href_list) if(..()) return if(href_list["print"]) print_report(usr) -/obj/item/analyzer/xeno_analyzer/proc/print_report(var/mob/living/user) +/obj/item/biology_analyzer/proc/print_report(var/mob/living/user) if(!last_data) to_chat(user, "There is no scan data to print.") return @@ -31,14 +31,14 @@ user.visible_message("\The [src] spits out a piece of paper.") return -/obj/item/analyzer/xeno_analyzer/attack_self(mob/user) +/obj/item/biology_analyzer/attack_self(mob/user) . = ..() if(.) return print_report(user) return 0 -/obj/item/analyzer/xeno_analyzer/afterattack(atom/target, mob/user, clickchain_flags, list/params) +/obj/item/biology_analyzer/afterattack(atom/target, mob/user, clickchain_flags, list/params) if(!flag) return var/datum/xeno/traits/trait_info diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/scanners/health.dm similarity index 65% rename from code/game/objects/items/devices/scanners.dm rename to code/game/objects/items/scanners/health.dm index 7cd3bb4c9ac..2a5c6f53109 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/scanners/health.dm @@ -1,16 +1,3 @@ -/// Past this many seconds, defib is useless. -#define DEFIB_TIME_LIMIT (10 MINUTES) -/* -CONTAINS: -T-RAY -DETECTIVE SCANNER -HEALTH ANALYZER -GAS ANALYZER - Analyzes atmosphere, container -MASS SPECTROMETER -REAGENT SCANNER -HALOGEN COUNTER - Radcount on mobs -*/ - /obj/item/healthanalyzer name = "health analyzer" desc = "A hand-held body scanner able to distinguish vital signs of the subject." @@ -91,8 +78,7 @@ HALOGEN COUNTER - Radcount on mobs if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & STATUS_FAKEDEATH))) dat += SPAN_NOTICE("\nTime of Death: [worldtime2stationtime(M.timeofdeath)]") var/tdelta = round(world.time - M.timeofdeath) - if(tdelta < (DEFIB_TIME_LIMIT * 10)) - dat += SPAN_BOLDNOTICE("\nSubject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!") + dat += SPAN_BOLDNOTICE("\nSubject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!") if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) @@ -334,236 +320,3 @@ HALOGEN COUNTER - Radcount on mobs advscan = 3 origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8) icon_state = "health3" - -/obj/item/analyzer - name = "analyzer" - desc = "A hand-held environmental scanner which reports current gas levels." - icon = 'icons/obj/device.dmi' - icon_state = "atmos" - item_state = "analyzer" - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_BELT - throw_force = 5 - throw_speed = 4 - throw_range = 20 - - materials = list(MAT_STEEL = 30, MAT_GLASS = 20) - - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - -/obj/item/analyzer/apidean - name = "\improper Apidean analyzer" - desc = "This analyzer has a strange, soft exterior and seems to faintly breathe." - icon_state = "apidae-analyzer" - -/obj/item/analyzer/longrange - name = "long-range analyzer" - desc = "A hand-held environmental scanner which reports current gas levels. This one uses bluespace technology." - icon = 'icons/obj/device.dmi' - icon_state = "atmos" - item_state = "analyzer" - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_BELT - throw_force = 5 - throw_speed = 4 - throw_range = 20 - materials = list(MAT_STEEL = 30, MAT_GLASS = 20) - origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) - -/obj/item/analyzer/atmosanalyze(var/mob/user) - var/air = user.return_air() - if (!air) - return - - return atmosanalyzer_scan(src, air, user) - -/obj/item/analyzer/attack_self(mob/user) - . = ..() - if(.) - return - if (user.stat) - return - if (!(ishuman(user) || SSticker) && SSticker.mode.name != "monkey") - to_chat(usr, "You don't have the dexterity to do this!") - return - - analyze_gases(src, user) - return - -/obj/item/analyzer/afterattack(atom/target, mob/user, clickchain_flags, list/params) - if(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY) - if(istype(target, /obj/item/tank)) // don't double post what atmosanalyzer_scan returns - return - analyze_gases(target, user) - return - -/obj/item/analyzer/longrange/afterattack(atom/target, mob/user, clickchain_flags, list/params) - if(istype(target, /obj/item/tank)) // don't double post what atmosanalyzer_scan returns - return - analyze_gases(target, user) - return - -/obj/item/mass_spectrometer - name = "mass spectrometer" - desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." - icon = 'icons/obj/device.dmi' - icon_state = "spectrometer" - w_class = ITEMSIZE_SMALL - atom_flags = OPENCONTAINER - slot_flags = SLOT_BELT - throw_force = 5 - throw_speed = 4 - throw_range = 20 - - materials = list(MAT_STEEL = 30, MAT_GLASS = 20) - - origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - var/details = 0 - var/recent_fail = 0 - -/obj/item/mass_spectrometer/Initialize(mapload) - . = ..() - var/datum/reagents/R = new/datum/reagents(5) - reagents = R - R.my_atom = src - -/obj/item/mass_spectrometer/on_reagent_change() - if(reagents.total_volume) - icon_state = initial(icon_state) + "_s" - else - icon_state = initial(icon_state) - -/obj/item/mass_spectrometer/attack_self(mob/user) - . = ..() - if(.) - return - if (user.stat) - return - if (!(ishuman(user) || SSticker) && SSticker.mode.name != "monkey") - to_chat(user, "You don't have the dexterity to do this!") - return - if(reagents.total_volume) - var/list/blood_traces = list() - for(var/datum/reagent/R in reagents.reagent_list) - if(R.id != "blood") - reagents.clear_reagents() - to_chat(user, "The sample was contaminated! Please insert another sample") - return - else - blood_traces = params2list(R.data["trace_chem"]) - break - var/dat = "Trace Chemicals Found: " - for(var/R in blood_traces) - if(details) - dat += "[R] ([blood_traces[R]] units) " - else - dat += "[R] " - to_chat(user, "[dat]") - reagents.clear_reagents() - return - -/obj/item/mass_spectrometer/adv - name = "advanced mass spectrometer" - icon_state = "adv_spectrometer" - details = 1 - origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) - -/obj/item/reagent_scanner - name = "reagent scanner" - desc = "A hand-held reagent scanner which identifies chemical agents." - icon = 'icons/obj/device.dmi' - icon_state = "spectrometer" - item_state = "analyzer" - w_class = ITEMSIZE_SMALL - slot_flags = SLOT_BELT - throw_force = 5 - throw_speed = 4 - throw_range = 20 - materials = list(MAT_STEEL = 30, MAT_GLASS = 20) - - origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - var/details = 0 - var/recent_fail = 0 - -/obj/item/reagent_scanner/afterattack(atom/target, mob/user, clickchain_flags, list/params) - if(!(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY) || user.stat || !istype(target)) - return - if(!istype(user)) - return - - if(!isnull(target.reagents)) - if(!(target.atom_flags & OPENCONTAINER)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors. - to_chat(user, SPAN_WARNING( "\The [target] is sealed, and cannot be scanned by \the [src] until unsealed.")) - return - - var/dat = "" - if(target.reagents.reagent_list.len > 0) - var/one_percent = target.reagents.total_volume / 100 - for (var/datum/reagent/R in target.reagents.reagent_list) - dat += "\n \t " + SPAN_NOTICE("[R][details ? ": [R.volume / one_percent]%" : ""]") - if(dat) - to_chat(user, SPAN_NOTICE("Chemicals found: [dat]")) - else - to_chat(user, SPAN_NOTICE("No active chemical agents found in [target].")) - else - to_chat(user, SPAN_NOTICE("No significant chemical agents found in [target].")) - - return - -/obj/item/reagent_scanner/apidean - name = "\improper Apidean taster" - desc = "This reagent scanner appears to be an artificially created lifeform. Often used by Apidaen guards to test food and drinks during diplomatic meetings." - icon_state = "apidae-reagent" - -/obj/item/reagent_scanner/adv - name = "advanced reagent scanner" - icon_state = "adv_spectrometer" - details = 1 - origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) - -/obj/item/slime_scanner - name = "slime scanner" - icon_state = "xenobio" - item_state = "xenobio" - icon = 'icons/obj/device.dmi' - origin_tech = list(TECH_BIO = 1) - w_class = ITEMSIZE_SMALL - throw_force = 0 - throw_speed = 3 - throw_range = 7 - materials = list(MAT_STEEL = 30, MAT_GLASS = 20) - -/obj/item/slime_scanner/attack_mob(mob/target, mob/user, clickchain_flags, list/params, mult, target_zone, intent) - . = CLICKCHAIN_DO_NOT_PROPAGATE - if(!istype(target, /mob/living/simple_mob/slime/xenobio)) - to_chat(user, "This device can only scan lab-grown slimes!") - return - var/mob/living/simple_mob/slime/xenobio/S = target - user.show_message("Slime scan results:
[S.slime_color] [S.is_adult ? "adult" : "baby"] slime
Health: [S.health]
Mutation Probability: [S.mutation_chance]") - - var/list/mutations = list() - for(var/potential_color in S.slime_mutation) - var/mob/living/simple_mob/slime/xenobio/slime = potential_color - mutations.Add(initial(slime.slime_color)) - user.show_message("Potental to mutate into [english_list(mutations)] colors.
Extract potential: [S.cores]
Nutrition: [S.nutrition]/[S.get_max_nutrition()]") - - if (S.nutrition < S.get_starve_nutrition()) - user.show_message("Warning: Subject is starving!") - else if (S.nutrition < S.get_hunger_nutrition()) - user.show_message("Warning: Subject is hungry.") - user.show_message("Electric change strength: [S.power_charge]") - - if(S.has_AI()) - var/datum/ai_holder/simple_mob/xenobio_slime/AI = S.ai_holder - if(AI.resentment) - user.show_message("Warning: Subject is harboring resentment.") - if(AI.rabid) - user.show_message("Subject is enraged and extremely dangerous!") - if(S.harmless) - user.show_message("Subject has been pacified.") - if(S.unity) - user.show_message("Subject is friendly to other slime colors.") - - user.show_message("Growth progress: [S.amount_grown]/10") - -#undef DEFIB_TIME_LIMIT diff --git a/code/game/objects/items/scanners/plant.dm b/code/game/objects/items/scanners/plant.dm new file mode 100644 index 00000000000..31eb5b14caf --- /dev/null +++ b/code/game/objects/items/scanners/plant.dm @@ -0,0 +1,146 @@ +/obj/item/plant_analyzer + name = "plant analyzer" + icon = 'icons/obj/device.dmi' + icon_state = "hydro" + item_state = "analyzer" + var/datum/seed/last_seed + var/list/last_reagents + +/obj/item/plant_analyzer/attack_self(mob/user) + . = ..() + if(.) + return + ui_interact(user) + +/obj/item/plant_analyzer/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PlantAnalyzer", name) + ui.open() + +/obj/item/plant_analyzer/ui_state(mob/user, datum/tgui_module/module) + return GLOB.inventory_state + +/obj/item/plant_analyzer/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + var/list/data = ..() + + var/datum/seed/grown_seed = locate(last_seed) + if(!istype(grown_seed)) + return list("no_seed" = TRUE) + + data["no_seed"] = FALSE + data["seed"] = grown_seed.get_tgui_analyzer_data(user) + data["reagents"] = last_reagents + + return data + +/obj/item/plant_analyzer/ui_act(action, list/params, datum/tgui/ui) + if(..()) + return TRUE + + switch(action) + if("print") + print_report(usr) + return TRUE + if("close") + last_seed = null + last_reagents = null + return TRUE + +/obj/item/plant_analyzer/afterattack(atom/target, mob/user, clickchain_flags, list/params) + if(!(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY)) + return + + var/datum/seed/grown_seed + var/datum/reagents/grown_reagents + if(istype(target,/obj/structure/table)) + return ..() + else if(istype(target,/obj/item/reagent_containers/food/snacks/grown)) + + var/obj/item/reagent_containers/food/snacks/grown/G = target + grown_seed = SSplants.seeds[G.plantname] + grown_reagents = G.reagents + + else if(istype(target,/obj/item/grown)) + + var/obj/item/grown/G = target + grown_seed = SSplants.seeds[G.plantname] + grown_reagents = G.reagents + + else if(istype(target,/obj/item/seeds)) + + var/obj/item/seeds/S = target + grown_seed = S.seed + + else if(istype(target,/obj/machinery/portable_atmospherics/hydroponics)) + + var/obj/machinery/portable_atmospherics/hydroponics/H = target + if(H.frozen == 1) + to_chat(user, "Disable the cryogenic freezing first!") + return + grown_seed = H.seed + grown_reagents = H.reagents + + if(!grown_seed) + to_chat(user, "[src] can tell you nothing about \the [target].") + return + + last_seed = REF(grown_seed) + + user.visible_message("[user] runs the scanner over \the [target].") + + last_reagents = list() + if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len) + for(var/datum/reagent/R in grown_reagents.reagent_list) + last_reagents.Add(list(list( + "name" = R.name, + "volume" = grown_reagents.get_reagent_amount(R.id), + ))) + + ui_interact(user) + +/obj/item/plant_analyzer/proc/print_report_verb() + set name = "Print Plant Report" + set category = "Object" + set src = usr + + if(usr.stat || usr.restrained() || usr.lying) + return + print_report(usr) + +/obj/item/plant_analyzer/proc/print_report(var/mob/living/user) + var/datum/seed/grown_seed = locate(last_seed) + if(!istype(grown_seed)) + to_chat(user, SPAN_WARNING("There is no scan data to print.")) + return + + var/form_title = "[grown_seed.seed_name] (#[grown_seed.uid])" + var/dat = "

Plant data for [form_title]

" + dat += "

General Data

" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "
Endurance[grown_seed.get_trait(TRAIT_ENDURANCE)]
Yield[grown_seed.get_trait(TRAIT_YIELD)]
Maturation time[grown_seed.get_trait(TRAIT_MATURATION)]
Production time[grown_seed.get_trait(TRAIT_PRODUCTION)]
Potency[grown_seed.get_trait(TRAIT_POTENCY)]
" + + if(LAZYLEN(last_reagents)) + dat += "

Reagent Data

" + dat += "
This sample contains: " + for(var/i in 1 to LAZYLEN(last_reagents)) + dat += "
- [last_reagents[i]["name"]], [last_reagents[i]["volume"]] unit(s)" + + dat += "

Other Data

" + + var/list/ui_data = grown_seed.get_tgui_analyzer_data() + + dat += jointext(ui_data["trait_info"], "
\n") + + var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) + P.name = "paper - [form_title]" + P.info = "[dat]" + if(istype(user,/mob/living/carbon/human)) + user.put_in_hands(P) + user.visible_message("\The [src] spits out a piece of paper.") + return diff --git a/code/game/objects/items/scanners/reagent.dm b/code/game/objects/items/scanners/reagent.dm new file mode 100644 index 00000000000..d7cc88fd368 --- /dev/null +++ b/code/game/objects/items/scanners/reagent.dm @@ -0,0 +1,52 @@ +/obj/item/reagent_scanner + name = "reagent scanner" + desc = "A hand-held reagent scanner which identifies chemical agents." + icon = 'icons/obj/device.dmi' + icon_state = "spectrometer" + item_state = "analyzer" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_BELT + throw_force = 5 + throw_speed = 4 + throw_range = 20 + materials = list(MAT_STEEL = 30, MAT_GLASS = 20) + + origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) + var/details = 0 + var/recent_fail = 0 + +/obj/item/reagent_scanner/afterattack(atom/target, mob/user, clickchain_flags, list/params) + if(!(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY) || user.stat || !istype(target)) + return + if(!istype(user)) + return + + if(!isnull(target.reagents)) + if(!(target.atom_flags & OPENCONTAINER)) // The idea is that the scanner has to touch the reagents somehow. This is done to prevent cheesing unidentified autoinjectors. + to_chat(user, SPAN_WARNING( "\The [target] is sealed, and cannot be scanned by \the [src] until unsealed.")) + return + + var/dat = "" + if(target.reagents.reagent_list.len > 0) + var/one_percent = target.reagents.total_volume / 100 + for (var/datum/reagent/R in target.reagents.reagent_list) + dat += "\n \t " + SPAN_NOTICE("[R][details ? ": [R.volume / one_percent]%" : ""]") + if(dat) + to_chat(user, SPAN_NOTICE("Chemicals found: [dat]")) + else + to_chat(user, SPAN_NOTICE("No active chemical agents found in [target].")) + else + to_chat(user, SPAN_NOTICE("No significant chemical agents found in [target].")) + + return + +/obj/item/reagent_scanner/apidean + name = "\improper Apidean taster" + desc = "This reagent scanner appears to be an artificially created lifeform. Often used by Apidaen guards to test food and drinks during diplomatic meetings." + icon_state = "apidae-reagent" + +/obj/item/reagent_scanner/adv + name = "advanced reagent scanner" + icon_state = "adv_spectrometer" + details = 1 + origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) diff --git a/code/game/objects/items/scanners/slime.dm b/code/game/objects/items/scanners/slime.dm new file mode 100644 index 00000000000..a7e992c5d77 --- /dev/null +++ b/code/game/objects/items/scanners/slime.dm @@ -0,0 +1,44 @@ +/obj/item/slime_scanner + name = "slime scanner" + icon_state = "xenobio" + item_state = "xenobio" + icon = 'icons/obj/device.dmi' + origin_tech = list(TECH_BIO = 1) + w_class = ITEMSIZE_SMALL + throw_force = 0 + throw_speed = 3 + throw_range = 7 + materials = list(MAT_STEEL = 30, MAT_GLASS = 20) + +/obj/item/slime_scanner/attack_mob(mob/target, mob/user, clickchain_flags, list/params, mult, target_zone, intent) + . = CLICKCHAIN_DO_NOT_PROPAGATE + if(!istype(target, /mob/living/simple_mob/slime/xenobio)) + to_chat(user, "This device can only scan lab-grown slimes!") + return + var/mob/living/simple_mob/slime/xenobio/S = target + user.show_message("Slime scan results:
[S.slime_color] [S.is_adult ? "adult" : "baby"] slime
Health: [S.health]
Mutation Probability: [S.mutation_chance]") + + var/list/mutations = list() + for(var/potential_color in S.slime_mutation) + var/mob/living/simple_mob/slime/xenobio/slime = potential_color + mutations.Add(initial(slime.slime_color)) + user.show_message("Potental to mutate into [english_list(mutations)] colors.
Extract potential: [S.cores]
Nutrition: [S.nutrition]/[S.get_max_nutrition()]") + + if (S.nutrition < S.get_starve_nutrition()) + user.show_message("Warning: Subject is starving!") + else if (S.nutrition < S.get_hunger_nutrition()) + user.show_message("Warning: Subject is hungry.") + user.show_message("Electric change strength: [S.power_charge]") + + if(S.has_AI()) + var/datum/ai_holder/simple_mob/xenobio_slime/AI = S.ai_holder + if(AI.resentment) + user.show_message("Warning: Subject is harboring resentment.") + if(AI.rabid) + user.show_message("Subject is enraged and extremely dangerous!") + if(S.harmless) + user.show_message("Subject has been pacified.") + if(S.unity) + user.show_message("Subject is friendly to other slime colors.") + + user.show_message("Growth progress: [S.amount_grown]/10") diff --git a/code/game/objects/items/scanners/spectrometer.dm b/code/game/objects/items/scanners/spectrometer.dm new file mode 100644 index 00000000000..a68230336b4 --- /dev/null +++ b/code/game/objects/items/scanners/spectrometer.dm @@ -0,0 +1,64 @@ +/obj/item/mass_spectrometer + name = "mass spectrometer" + desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." + icon = 'icons/obj/device.dmi' + icon_state = "spectrometer" + w_class = ITEMSIZE_SMALL + atom_flags = OPENCONTAINER + slot_flags = SLOT_BELT + throw_force = 5 + throw_speed = 4 + throw_range = 20 + + materials = list(MAT_STEEL = 30, MAT_GLASS = 20) + + origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) + var/details = 0 + var/recent_fail = 0 + +/obj/item/mass_spectrometer/Initialize(mapload) + . = ..() + var/datum/reagents/R = new/datum/reagents(5) + reagents = R + R.my_atom = src + +/obj/item/mass_spectrometer/on_reagent_change() + if(reagents.total_volume) + icon_state = initial(icon_state) + "_s" + else + icon_state = initial(icon_state) + +/obj/item/mass_spectrometer/attack_self(mob/user) + . = ..() + if(.) + return + if (user.stat) + return + if (!(ishuman(user) || SSticker) && SSticker.mode.name != "monkey") + to_chat(user, "You don't have the dexterity to do this!") + return + if(reagents.total_volume) + var/list/blood_traces = list() + for(var/datum/reagent/R in reagents.reagent_list) + if(R.id != "blood") + reagents.clear_reagents() + to_chat(user, "The sample was contaminated! Please insert another sample") + return + else + blood_traces = params2list(R.data["trace_chem"]) + break + var/dat = "Trace Chemicals Found: " + for(var/R in blood_traces) + if(details) + dat += "[R] ([blood_traces[R]] units) " + else + dat += "[R] " + to_chat(user, "[dat]") + reagents.clear_reagents() + return + +/obj/item/mass_spectrometer/adv + name = "advanced mass spectrometer" + icon_state = "adv_spectrometer" + details = 1 + origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 4f117583b35..797e5003d41 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -60,7 +60,7 @@ /obj/item/cell/device, /obj/item/stack/cable_coil, /obj/item/t_scanner, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/clothing/glasses, /obj/item/clothing/gloves, /obj/item/pda, @@ -70,7 +70,7 @@ /obj/item/robotanalyzer, /obj/item/material/minihoe, /obj/item/material/knife/machete/hatchet, - /obj/item/analyzer/plant_analyzer, + /obj/item/plant_analyzer, /obj/item/extinguisher/mini, /obj/item/duct_tape_roll, /obj/item/switchtool, @@ -111,7 +111,7 @@ /obj/item/multitool, /obj/item/stack/cable_coil/random_belt, /obj/item/extinguisher/mini, - /obj/item/analyzer/longrange + /obj/item/atmos_analyzer/longrange ) /obj/item/storage/belt/medical @@ -254,7 +254,7 @@ /obj/item/multitool, /obj/item/stack/cable_coil, /obj/item/t_scanner, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/flashlight, /obj/item/cell/device, /obj/item/cell/device/weapon, diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 67ee29af7b3..0d454fc3708 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -41,7 +41,7 @@ /obj/item/tool/wrench, /obj/item/weldingtool, /obj/item/tool/crowbar, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/tool/wirecutters ) @@ -89,7 +89,7 @@ /obj/item/tool/crowbar/power, /obj/item/multitool, /obj/item/stack/cable_coil/random_belt, - /obj/item/analyzer + /obj/item/atmos_analyzer ) /obj/item/storage/toolbox/gold_fake // used in crafting diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index b6c572d7eb8..f5a809aa4f8 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -115,8 +115,8 @@ update_icon() return - if(istype(W, /obj/item/analyzer)) - var/obj/item/analyzer/A = W + if(istype(W, /obj/item/atmos_analyzer)) + var/obj/item/atmos_analyzer/A = W A.analyze_gases(src, user) return ..() @@ -147,7 +147,7 @@ usr.set_machine(src) if(href_list["light"]) if(!ptank) return - if(ptank.air_contents.gas[/datum/gas/phoron] < 1) return + if(ptank.air_contents.gas[GAS_ID_PHORON] < 1) return if(!status) return lit = !lit if(lit) @@ -196,8 +196,8 @@ //Transfer 5% of current tank air contents to turf var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.02*(throw_amount/100)) //air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is stupid and I could probably make it work without fucking it up like this, but there you have it. -- TLE - new/obj/effect/debris/cleanable/liquid_fuel/flamethrower_fuel(target,air_transfer.gas[/datum/gas/phoron],get_dir(loc,target)) - air_transfer.gas[/datum/gas/phoron] = 0 + new/obj/effect/debris/cleanable/liquid_fuel/flamethrower_fuel(target,air_transfer.gas[GAS_ID_PHORON],get_dir(loc,target)) + air_transfer.gas[GAS_ID_PHORON] = 0 target.assume_air(air_transfer) //Burn it based on transfered gas //target.hotspot_expose(part4.air_contents.temperature*2,300) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index c4148c3e00e..30b0f1485c5 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -67,7 +67,7 @@ var/datum/gas_mixture/G = air_contents.remove(num) - var/allgases = G.gas[/datum/gas/carbon_dioxide] + G.gas[/datum/gas/nitrogen] + G.gas[/datum/gas/oxygen] + G.gas[/datum/gas/phoron] + var/allgases = G.gas[GAS_ID_CARBON_DIOXIDE] + G.gas[GAS_ID_NITROGEN] + G.gas[GAS_ID_OXYGEN] + G.gas[GAS_ID_PHORON] if(allgases >= 0.005) return 1 @@ -85,7 +85,7 @@ /obj/item/tank/jetpack/void/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/oxygen, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_OXYGEN, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/jetpack/oxygen name = "jetpack (oxygen)" @@ -95,7 +95,7 @@ /obj/item/tank/jetpack/oxygen/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/oxygen, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_OXYGEN, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/jetpack/carbondioxide name = "jetpack (carbon dioxide)" @@ -106,7 +106,7 @@ /obj/item/tank/jetpack/carbondioxide/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/carbon_dioxide, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_CARBON_DIOXIDE, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/jetpack/hardsuit name = "jetpack" @@ -129,7 +129,7 @@ var/datum/gas_mixture/G = pressure_vessel.air_contents.remove(num) - var/allgases = G.gas[/datum/gas/carbon_dioxide] + G.gas[/datum/gas/nitrogen] + G.gas[/datum/gas/oxygen] + G.gas[/datum/gas/phoron] + var/allgases = G.gas[GAS_ID_CARBON_DIOXIDE] + G.gas[GAS_ID_NITROGEN] + G.gas[GAS_ID_OXYGEN] + G.gas[GAS_ID_PHORON] if(allgases >= 0.005) return 1 qdel(G) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 441465c7d4a..f99bcf9611a 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -21,11 +21,11 @@ /obj/item/tank/oxygen/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/oxygen, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_OXYGEN, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/oxygen/examine(mob/user, dist) . = ..() - if(air_contents.gas[/datum/gas/oxygen] < 10) + if(air_contents.gas[GAS_ID_OXYGEN] < 10) . += "The meter on the [src] indicates you are almost out of oxygen!" /obj/item/tank/oxygen/yellow @@ -50,8 +50,8 @@ /obj/item/tank/anesthetic/Initialize(mapload) . = ..() - air_contents.gas[/datum/gas/oxygen] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - air_contents.gas[/datum/gas/nitrous_oxide] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.gas[GAS_ID_OXYGEN] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + air_contents.gas[GAS_ID_NITROUS_OXIDE] = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD air_contents.update_values() /* @@ -65,14 +65,14 @@ /obj/item/tank/air/examine(mob/user, dist) . = ..() - if(air_contents.gas[/datum/gas/oxygen] < 1 && loc==user) + if(air_contents.gas[GAS_ID_OXYGEN] < 1 && loc==user) . += "The meter on the [src.name] indicates you are almost out of air!" //user.playsound('sound/effects/alert.ogg') /obj/item/tank/air/Initialize(mapload) . = ..() - src.air_contents.adjust_multi(/datum/gas/oxygen, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, /datum/gas/nitrogen, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) + src.air_contents.adjust_multi(GAS_ID_OXYGEN, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, GAS_ID_NITROGEN, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) /* * Phoron @@ -87,7 +87,7 @@ /obj/item/tank/phoron/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/phoron, (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_PHORON, (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/vox //Can't be a child of phoron or the gas amount gets screwey. name = "phoron tank" @@ -101,7 +101,7 @@ /obj/item/tank/vox/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/phoron, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_PHORON, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/phoron/pressurized name = "fuel can" @@ -111,7 +111,7 @@ /obj/item/tank/phoron/pressurized/Initialize(mapload) . = ..() adjust_scale(0.8) - air_contents.adjust_gas(/datum/gas/phoron, (7*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_PHORON, (7*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/phoron/double name = "double emergency phoron tank" @@ -125,7 +125,7 @@ /obj/item/tank/emergency/phoron/double/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/phoron, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_PHORON, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /* * Emergency Oxygen @@ -153,11 +153,11 @@ /obj/item/tank/emergency/oxygen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/oxygen, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_OXYGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/oxygen/examine(mob/user, dist) . = ..() - if(air_contents.gas[/datum/gas/oxygen] < 0.2 && loc==user) + if(air_contents.gas[GAS_ID_OXYGEN] < 0.2 && loc==user) . += "The meter on the [src.name] indicates you are almost out of air!" //user.playsound('sound/effects/alert.ogg') @@ -186,7 +186,7 @@ /obj/item/tank/stasis/oxygen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/oxygen, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_OXYGEN, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/nitrogen name = "emergency nitrogen tank" @@ -198,7 +198,7 @@ /obj/item/tank/emergency/nitrogen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/nitrogen, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_NITROGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/nitrogen/double name = "double emergency nitrogen tank" @@ -219,7 +219,7 @@ /obj/item/tank/emergency/phoron/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/phoron, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_PHORON, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/phoron/double name = "double emergency phoron tank" @@ -241,10 +241,10 @@ /obj/item/tank/nitrogen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/nitrogen, (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_NITROGEN, (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/nitrogen/examine(mob/user, dist) - if(air_contents.gas[/datum/gas/nitrogen] < 10) + if(air_contents.gas[GAS_ID_NITROGEN] < 10) . += "The meter on \the [src] indicates you are almost out of nitrogen!" /obj/item/tank/stasis/nitro_cryo // Synthmorph bags need to have initial pressure within safe bounds for human atmospheric pressure, but low temperature to stop unwanted degredation. @@ -256,7 +256,7 @@ /obj/item/tank/stasis/nitro_cryo/Initialize(mapload) . = ..() - src.air_contents.adjust_gas_temp(/datum/gas/nitrogen, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*TN60C), TN60C) + src.air_contents.adjust_gas_temp(GAS_ID_NITROGEN, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*TN60C), TN60C) //co2 /obj/item/tank/carbon_dioxide @@ -270,7 +270,7 @@ /obj/item/tank/carbon_dioxide/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/carbon_dioxide, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.adjust_gas(GAS_ID_CARBON_DIOXIDE, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/carbon_dioxide name = "emergency CO2 tank" @@ -283,9 +283,9 @@ /obj/item/tank/emergency/carbon_dioxide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/carbon_dioxide, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_CARBON_DIOXIDE, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/emergency/carbon_dioxide/examine(mob/user, dist) - if(air_contents.gas[/datum/gas/carbon_dioxide] < 0.2 && loc==user) + if(air_contents.gas[GAS_ID_CARBON_DIOXIDE] < 0.2 && loc==user) . += "The meter on the [src.name] indicates you are almost out of air!" // user.playsound('sound/effects/alert.ogg') diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 792dd885b53..7b8e2af04db 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -115,8 +115,8 @@ var/list/global/tank_gauge_cache = list() if (istype(loc, /obj/item/assembly)) icon = loc - if ((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) - var/obj/item/analyzer/A = W + if ((istype(W, /obj/item/atmos_analyzer)) && get_dist(user, src) <= 1) + var/obj/item/atmos_analyzer/A = W A.analyze_gases(src, user) else if (istype(W,/obj/item/latexballon)) var/obj/item/latexballon/LB = W @@ -360,6 +360,16 @@ var/list/global/tank_gauge_cache = list() update_gauge() check_status() +/** + * Encodes data for AtmosTank in tgui/interfaces/common/Atmos.tsx + */ +/obj/item/tank/proc/tgui_tank_data() + return list( + "name" = name, + "pressure" = air_contents?.return_pressure(), + "volume" = air_contents.volume, + "pressureLimit" = TANK_IDEAL_PRESSURE, + ) /obj/item/tank/proc/add_bomb_overlay() cut_overlays() @@ -373,7 +383,6 @@ var/list/global/tank_gauge_cache = list() overlays_to_add += test add_overlay(overlays_to_add) - /obj/item/tank/proc/update_gauge() var/gauge_pressure = 0 if(air_contents) @@ -393,7 +402,6 @@ var/list/global/tank_gauge_cache = list() tank_gauge_cache[indicator] = image(icon, indicator) add_overlay(tank_gauge_cache[indicator]) - /obj/item/tank/proc/check_status() //Handle exploding, leaking, and rupturing of the tank @@ -401,8 +409,6 @@ var/list/global/tank_gauge_cache = list() return 0 var/pressure = air_contents.return_pressure() - - if(pressure > TANK_FRAGMENT_PRESSURE) if(integrity <= 7) if(!istype(src.loc,/obj/item/transfer_valve)) @@ -444,15 +450,11 @@ var/list/global/tank_gauge_cache = list() var/obj/item/transfer_valve/TTV = loc TTV.remove_tank(src) qdel(TTV) - - if(src) qdel(src) - else integrity -=7 - else if(pressure > TANK_RUPTURE_PRESSURE) #ifdef FIREDBG log_debug(SPAN_DEBUGWARNING("[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]")) @@ -480,8 +482,6 @@ var/list/global/tank_gauge_cache = list() if(istype(loc, /obj/item/transfer_valve)) var/obj/item/transfer_valve/TTV = loc TTV.remove_tank(src) - - qdel(src) else @@ -491,7 +491,6 @@ var/list/global/tank_gauge_cache = list() else integrity-= 5 - else if(pressure > TANK_LEAK_PRESSURE || air_contents.temperature - T0C > failure_temp) if((integrity <= 17 || src.leaking) && !valve_welded) @@ -527,20 +526,6 @@ var/list/global/tank_gauge_cache = list() if(integrity == max_integrity) leaking = 0 -///////////////////////////////// -///Prewelded tanks -///////////////////////////////// - -/obj/item/tank/phoron/welded - valve_welded = 1 -/obj/item/tank/oxygen/welded - valve_welded = 1 - - -///////////////////////////////// -///Onetankbombs (added as actual items) -///////////////////////////////// - /obj/item/tank/proc/onetankbomb(fill = 1) var/phoron_amt = 4 + rand(4) var/oxygen_amt = 6 + rand(8) @@ -553,8 +538,8 @@ var/list/global/tank_gauge_cache = list() oxygen_amt = 4.5 - air_contents.gas[/datum/gas/phoron] = phoron_amt - air_contents.gas[/datum/gas/oxygen] = oxygen_amt + air_contents.gas[GAS_ID_PHORON] = phoron_amt + air_contents.gas[GAS_ID_OXYGEN] = oxygen_amt air_contents.update_values() valve_welded = 1 air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE-1 @@ -569,31 +554,35 @@ var/list/global/tank_gauge_cache = list() add_overlay("bomb_assembly") +/obj/item/tank/oxygen/welded + valve_welded = TRUE + +/obj/item/tank/phoron/welded + valve_welded = TRUE /obj/item/tank/phoron/onetankbomb/Initialize(mapload) . = ..() - src.onetankbomb() + onetankbomb() /obj/item/tank/oxygen/onetankbomb/Initialize(mapload) . = ..() - src.onetankbomb() - + onetankbomb() /obj/item/tank/phoron/onetankbomb/full/Initialize(mapload) . = ..() - src.onetankbomb(2) + onetankbomb(2) /obj/item/tank/oxygen/onetankbomb/full/Initialize(mapload) . = ..() - src.onetankbomb(2) + onetankbomb(2) /obj/item/tank/phoron/onetankbomb/small/Initialize(mapload) . = ..() - src.onetankbomb(0) + onetankbomb(0) /obj/item/tank/oxygen/onetankbomb/small/Initialize(mapload) . = ..() - src.onetankbomb(0) + onetankbomb(0) ///////////////////////////////// ///Pulled from rewritten bomb.dm diff --git a/code/game/objects/mob_spawner.dm b/code/game/objects/mob_spawner.dm index a995fc9782b..a54ea4b6467 100644 --- a/code/game/objects/mob_spawner.dm +++ b/code/game/objects/mob_spawner.dm @@ -311,14 +311,14 @@ It also makes it so a ghost wont know where all the goodies/mobs are. my_mob.maxbodytemp = env.temperature * 1.2 var/list/gaslist = env.gas - my_mob.min_oxy = gaslist[/datum/gas/oxygen] * 0.8 - my_mob.min_tox = gaslist[/datum/gas/phoron] * 0.8 - my_mob.min_n2 = gaslist[/datum/gas/nitrogen] * 0.8 - my_mob.min_co2 = gaslist[/datum/gas/carbon_dioxide] * 0.8 - my_mob.max_oxy = gaslist[/datum/gas/oxygen] * 1.2 - my_mob.max_tox = gaslist[/datum/gas/phoron] * 1.2 - my_mob.max_n2 = gaslist[/datum/gas/nitrogen] * 1.2 - my_mob.max_co2 = gaslist[/datum/gas/carbon_dioxide] * 1.2 + my_mob.min_oxy = gaslist[GAS_ID_OXYGEN] * 0.8 + my_mob.min_tox = gaslist[GAS_ID_PHORON] * 0.8 + my_mob.min_n2 = gaslist[GAS_ID_NITROGEN] * 0.8 + my_mob.min_co2 = gaslist[GAS_ID_CARBON_DIOXIDE] * 0.8 + my_mob.max_oxy = gaslist[GAS_ID_OXYGEN] * 1.2 + my_mob.max_tox = gaslist[GAS_ID_PHORON] * 1.2 + my_mob.max_n2 = gaslist[GAS_ID_NITROGEN] * 1.2 + my_mob.max_co2 = gaslist[GAS_ID_CARBON_DIOXIDE] * 1.2 return else STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 623b05d1d00..5368abb6e74 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -284,7 +284,10 @@ return FALSE if(INTERACTING_WITH_FOR(climber, src, INTERACTING_FOR_CLIMB)) return FALSE - climber.visible_action_feedback(SPAN_WARNING("[climber] starts climbing onto \the [src]!"), src, MESSAGE_RANGE_COMBAT_LOUD) + climber.visible_action_feedback( + target = src, + visible_hard = SPAN_WARNING("[climber] starts climbing onto \the [src]!"), + hard_range = MESSAGE_RANGE_COMBAT_LOUD) START_INTERACTING_WITH(climber, src, INTERACTING_FOR_CLIMB) LAZYDISTINCTADD(climbing, climber) . = do_after(climber, climb_delay * delay_mod, src, mobility_flags = MOBILITY_CAN_MOVE | MOBILITY_CAN_STAND | MOBILITY_IS_STANDING) @@ -383,6 +386,14 @@ H.update_health() */ +//* Hiding / Underfloor + +/obj/proc/is_hidden_underfloor() + return FALSE + +/obj/proc/should_hide_underfloor() + return FALSE + //? Materials /obj/get_materials() diff --git a/code/game/objects/random/maintenance.dm b/code/game/objects/random/maintenance.dm index 9d61e47a88a..653ccb086ff 100644 --- a/code/game/objects/random/maintenance.dm +++ b/code/game/objects/random/maintenance.dm @@ -253,7 +253,7 @@ something, make sure it's not in one of the other lists.*/ /obj/random/maintenance/research/item_to_spawn() return pick(prob(320);/obj/random/maintenance/clean, - prob(3);/obj/item/analyzer/plant_analyzer, + prob(3);/obj/item/plant_analyzer, prob(1);/obj/item/flash/synthetic, prob(2);/obj/item/bucket_sensor, prob(1);/obj/item/cell/device/weapon, diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index df25ba1d495..209bdb33033 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -66,7 +66,7 @@ /obj/random/technology_scanner/item_to_spawn() return pick(prob(5);/obj/item/t_scanner, prob(2);/obj/item/radio, - prob(5);/obj/item/analyzer) + prob(5);/obj/item/atmos_analyzer) /obj/random/powercell name = "random powercell" diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index 7e7348d8d3c..57c26df5a4d 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -164,7 +164,7 @@ /obj/structure/bonfire/proc/check_oxygen() var/datum/gas_mixture/G = loc.return_air() - if(G.gas[/datum/gas/oxygen] < 1) + if(G.gas[GAS_ID_OXYGEN] < 1) return FALSE return TRUE @@ -343,7 +343,7 @@ /obj/structure/fireplace/proc/check_oxygen() var/datum/gas_mixture/G = loc.return_air() - if(G.gas[/datum/gas/oxygen] < 1) + if(G.gas[GAS_ID_OXYGEN] < 1) return FALSE return TRUE diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 137afd18b4d..9c61d1531ef 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -159,7 +159,7 @@ return PROJECTILE_CONTINUE // It's a hole in the ground, doesn't usually stop or even care about bullets /obj/structure/closet/grave/return_air_for_internal_lifeform(var/mob/living/L) - var/gasid = /datum/gas/carbon_dioxide + var/gasid = GAS_ID_CARBON_DIOXIDE if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.species && H.species.exhale_type) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 2f2e133086a..c9b9b6f2215 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -74,7 +74,7 @@ /obj/item/clothing/under/rank/miner, /obj/item/clothing/gloves/black, /obj/item/clothing/shoes/black, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/storage/bag/ore, /obj/item/flashlight/lantern, /obj/item/shovel, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index c790c32d9df..bb399f300e2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -7,7 +7,7 @@ /obj/item/storage/bag/plants, /obj/item/clothing/under/rank/hydroponics, /obj/item/clothing/under/rank/hydroponics/skirt_pleated, - /obj/item/analyzer/plant_analyzer, + /obj/item/plant_analyzer, /obj/item/radio/headset/headset_service, /obj/item/clothing/head/greenbandana, /obj/item/material/minihoe, diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index a658e7da47f..f54e21d8868 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -386,7 +386,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/circuitboard/rcon_console, /obj/item/smes_coil, /obj/item/cartridge/engineering, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/healthanalyzer, /obj/item/robotanalyzer, /obj/item/lightreplacer, diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm index d144f338c42..bf572a66f10 100644 --- a/code/game/objects/structures/mineral_bath.dm +++ b/code/game/objects/structures/mineral_bath.dm @@ -14,7 +14,7 @@ /obj/structure/adherent_bath/return_air() var/datum/gas_mixture/venus = new(CELL_VOLUME) - venus.adjust_multi(/datum/gas/nitrogen, MOLES_N2STANDARD, /datum/gas/oxygen, MOLES_O2STANDARD) + venus.adjust_multi(GAS_ID_NITROGEN, MOLES_N2STANDARD, GAS_ID_OXYGEN, MOLES_O2STANDARD) venus.temperature = 490 return venus diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index f224e710a44..e7998b36dfd 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -83,7 +83,7 @@ /obj/structure/transit_tube_pod/Initialize(mapload) . = ..() - air_contents.adjust_multi(/datum/gas/oxygen, MOLES_O2STANDARD * 2, /datum/gas/nitrogen, MOLES_N2STANDARD) + air_contents.adjust_multi(GAS_ID_OXYGEN, MOLES_O2STANDARD * 2, GAS_ID_NITROGEN, MOLES_N2STANDARD) air_contents.temperature = T20C // Give auto tubes time to align before trying to start moving diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index cf5c8f936b3..f78a8630925 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -189,7 +189,7 @@ soundloop.stop() /obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob) - if(I.type == /obj/item/analyzer) + if(I.type == /obj/item/atmos_analyzer) to_chat(user, "The water temperature seems to be [watertemp].") if(I.is_wrench()) var/newtemp = input(user, "What setting would you like to set the temperature valve to?", "Water Temperature Valve") in temperature_settings diff --git a/code/game/turfs/simulated/floors/water.dm b/code/game/turfs/simulated/floors/water.dm index 7a1d800b084..1b816d2ea43 100644 --- a/code/game/turfs/simulated/floors/water.dm +++ b/code/game/turfs/simulated/floors/water.dm @@ -52,11 +52,11 @@ var/datum/gas_mixture/water_breath = new() var/datum/gas_mixture/above_air = return_air() var/amount = 300 - water_breath.adjust_gas(/datum/gas/oxygen, amount) // Assuming water breathes just extract the oxygen directly from the water. + water_breath.adjust_gas(GAS_ID_OXYGEN, amount) // Assuming water breathes just extract the oxygen directly from the water. water_breath.temperature = above_air.temperature return return_air() else - var/gasid = /datum/gas/carbon_dioxide + var/gasid = GAS_ID_CARBON_DIOXIDE if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.species && H.species.exhale_type) @@ -241,11 +241,11 @@ var/list/shoreline_icon_cache = list() var/datum/gas_mixture/water_breath = new() var/datum/gas_mixture/above_air = return_air() var/amount = 300 - water_breath.adjust_gas(/datum/gas/oxygen, amount) // Assuming water breathes just extract the oxygen directly from the water. + water_breath.adjust_gas(GAS_ID_OXYGEN, amount) // Assuming water breathes just extract the oxygen directly from the water. water_breath.temperature = above_air.temperature return water_breath else - var/gasid = /datum/gas/carbon_dioxide + var/gasid = GAS_ID_CARBON_DIOXIDE if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.species && H.species.exhale_type) @@ -351,11 +351,11 @@ var/list/shoreline_icon_cache = list() var/datum/gas_mixture/water_breath = new() var/datum/gas_mixture/above_air = return_air() var/amount = 300 - water_breath.adjust_gas(/datum/gas/oxygen, amount) // Assuming water breathes just extract the oxygen directly from the water. + water_breath.adjust_gas(GAS_ID_OXYGEN, amount) // Assuming water breathes just extract the oxygen directly from the water. water_breath.temperature = above_air.temperature return water_breath else - var/gasid = /datum/gas/carbon_dioxide + var/gasid = GAS_ID_CARBON_DIOXIDE if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.species && H.species.exhale_type) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 53bd8b60c8b..9ef269692f1 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -47,12 +47,12 @@ // "turf in loc" on a turf // you for real? /* - if(!air_master) + if(!SSair) return for(var/turf/simulated/turf in loc) update_thermal(turf) - air_master.mark_for_update(turf) + SSair.mark_for_update(turf) */ /turf/simulated/wall/proc/update_thermal(var/turf/simulated/source) diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 54c792c1863..4fd283abc8c 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -185,6 +185,8 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) retval += named_args return retval +// todo: rework all of vv and proccall yet again because this is shit formatting + /client/proc/get_callproc_returnval(returnval,procname) . = "" if(islist(returnval)) @@ -195,7 +197,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) if(istext(assoc_check) && (returnedlist[assoc_check] != null)) . += "[procname] returned an associative list:" for(var/key in returnedlist) - . += "\n[key] = [returnedlist[key]]" + . += "\n[key] = [islist(returnedlist[key])? json_encode(returnedlist[key]) : returnedlist[key]]" else . += "[procname] returned a list:" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 3e8227a231f..27fe22e0f1c 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -377,7 +377,7 @@ if(A && !(A.type in areas_with_APC)) areas_with_APC.Add(A.type) - for(var/obj/machinery/alarm/alarm in GLOB.machines) + for(var/obj/machinery/air_alarm/alarm in GLOB.machines) var/area/A = get_area(alarm) if(A && !(A.type in areas_with_air_alarm)) areas_with_air_alarm.Add(A.type) @@ -512,7 +512,7 @@ if(!Rad.P) var/obj/item/tank/phoron/Phoron = new/obj/item/tank/phoron(Rad) /// supercooled so we don't just maxcap the engine lol - Phoron.air_contents.adjust_gas_temp(/datum/gas/phoron, 350, 25) + Phoron.air_contents.adjust_gas_temp(GAS_ID_PHORON, 350, 25) Phoron.forceMove(Rad) Rad.P = Phoron @@ -550,7 +550,7 @@ var/obj/item/tank/phoron/Phoron = new/obj/item/tank/phoron(Rad) - Phoron.air_contents.gas[/datum/gas/phoron] = 29.1154 //This is a full tank if you filled it from a canister + Phoron.air_contents.gas[GAS_ID_PHORON] = 29.1154 //This is a full tank if you filled it from a canister Rad.P = Phoron Phoron.loc = Rad @@ -563,7 +563,7 @@ var/obj/machinery/atmospherics/component/binary/pump/Pump = M if(Pump.name == "Engine Feed" && response == "Setup Completely") found_the_pump = 1 - Pump.air2.gas[/datum/gas/nitrogen] = 3750 //The contents of 2 canisters. + Pump.air2.gas[GAS_ID_NITROGEN] = 3750 //The contents of 2 canisters. Pump.air2.temperature = 50 Pump.air2.update_values() Pump.update_use_power(USE_POWER_IDLE) @@ -591,7 +591,7 @@ if(!found_the_pump && response == "Setup Completely") to_chat(src, "Unable to locate air supply to fill up with coolant, adding some coolant around the supermatter") var/turf/simulated/T = SM.loc - T.zone.air.gas[/datum/gas/nitrogen] += 450 + T.zone.air.gas[GAS_ID_NITROGEN] += 450 T.zone.air.temperature = 50 T.zone.air.update_values() diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index ec9e9c69f57..60deacb97fe 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -2,12 +2,12 @@ set category = "Debug" set name = "Show Air Report" - if(!air_master) - alert(usr,"air_master not found.","Air Report") + if(!SSair) + alert(usr,"SSair not found.","Air Report") return - var/active_groups = air_master.active_zones - var/inactive_groups = air_master.zones.len - active_groups + var/active_groups = SSair.active_zones + var/inactive_groups = SSair.zones.len - active_groups var/hotspots = 0 for(var/atom/movable/fire/hotspot in world) @@ -15,7 +15,7 @@ var/active_on_main_station = 0 var/inactive_on_main_station = 0 - for(var/datum/zas_zone/zone in air_master.zones) + for(var/datum/zas_zone/zone in SSair.zones) var/turf/simulated/turf = locate() in zone.contents if(turf && (turf.z in (LEGACY_MAP_DATUM).station_levels)) if(zone.needs_update) @@ -25,8 +25,8 @@ var/output = {"AIR SYSTEMS REPORT
General Processing Data
- Cycle: [air_master.current_cycle]
- Groups: [air_master.zones.len]
+ Cycle: [SSair.current_cycle]
+ Groups: [SSair.zones.len]
---- Active: [active_groups]
---- Inactive: [inactive_groups]

---- Active on station: [active_on_main_station]
@@ -36,7 +36,7 @@ Hotspot Processing: [hotspots]

Geometry Processing Data
- Tile Update: [air_master.tiles_to_update.len]
+ Tile Update: [SSair.tiles_to_update.len]
"} usr << browse(output,"window=airreport") @@ -127,11 +127,11 @@ to_chat(src, "Only administrators may use this command.") return - if(!air_master) + if(!SSair) to_chat(usr, "Cannot find air_system") return var/datum/air_group/dead_groups = list() - for(var/datum/air_group/group in air_master.air_groups) + for(var/datum/air_group/group in SSair.air_groups) if (!group.group_processing) dead_groups += group var/datum/air_group/dest_group = pick(dead_groups) @@ -149,7 +149,7 @@ to_chat(src, "Only administrators may use this command.") return - if(!air_master) + if(!SSair) to_chat(usr, "Cannot find air_system") return diff --git a/code/modules/asset_cache/assets/legacy_nanoui.dm b/code/modules/asset_cache/assets/legacy_nanoui.dm index b3207b1ea63..029e468fac4 100644 --- a/code/modules/asset_cache/assets/legacy_nanoui.dm +++ b/code/modules/asset_cache/assets/legacy_nanoui.dm @@ -6,7 +6,6 @@ "nano/css/", "nano/images/", "nano/images/status_icons/", - "nano/images/modular_computers/", "nano/templates/", "nano/js/", "nano/js/libraries/", diff --git a/code/modules/atmospherics/atmosphere/_atmosphere.dm b/code/modules/atmospherics/atmosphere/_atmosphere.dm deleted file mode 100644 index abcbc650df5..00000000000 --- a/code/modules/atmospherics/atmosphere/_atmosphere.dm +++ /dev/null @@ -1,100 +0,0 @@ -/datum/atmosphere - /// Don't initialize abstract datums. - abstract_type = /datum/atmosphere - - /// Gas string. Do not modify directly. Generated by [generate_gas_string()] - var/gas_string - /// Unique ID. MUST be different for every atmosphere! Defaults to typepath. - var/id - // todo: allow id to be set but still allow typepath lookup - - /// A list of gases to always have. Associative gas datum typepath:mols - var/list/base_gases - /// A list of allowed gases. Associative gas datum typepath:mols. Is randomized on generation. - var/list/normal_gases - /// A list of allowed gases that can only be picked once. Associative gas datum typepath:mols. Is randomized on generation. - var/list/restricted_gases - /// Chance per iteration to take from restricted gases - var/restricted_chance = 10 - - /// Pressure to fill base_gases to, if it isn't there. For lazy coders who don't want to pv=nrt. - var/base_target_pressure - /// Minimum pressure in kPa this atmosphere can be - var/minimum_pressure - /// Maximum pressure in kPa this atmosphere can be - var/maximum_pressure - - /// Minimum temperature this atmosphere can be - var/minimum_temp - /// Maximum temperature this atmosphere can be - var/maximum_temp - -/datum/atmosphere/New() - if(!id) - id = type - generate_gas_string() - -/datum/atmosphere/proc/generate_gas_string() - var/target_pressure = max(base_target_pressure, rand(minimum_pressure, maximum_pressure)) - var/pressure_scalar = target_pressure / maximum_pressure - - // First let's set up the gasmix and base gases for this template - // We make the string from a gasmix in this proc because gases need to calculate their pressure - var/datum/gas_mixture/gasmix = new - gasmix.volume = CELL_VOLUME - var/list/gaslist = gasmix.gas - gasmix.temperature = rand(minimum_temp, maximum_temp) - for(var/gaspath in base_gases) - gaslist[gaspath] = base_gases[gaspath] - - // Make sure base gases are at target pressure if it isn't already - if(gasmix.return_pressure() < base_target_pressure) - // yeah you screwed up, redo the whole thing. - // screw lazy coders - var/moles = (base_target_pressure * CELL_VOLUME) / (R_IDEAL_GAS_EQUATION * gasmix.temperature) - gaslist.Cut() - var/total_moles_base - TOTAL_MOLES(base_gases, total_moles_base) - for(var/i in base_gases) - var/amount = base_gases[i] - var/ratio = amount / total_moles_base - var/actual = moles * ratio - gaslist[i] = actual - - // Now let the random choices begin - if(length(normal_gases) && length(restricted_gases)) - var/datum/gas/gastype - var/amount - var/safety = 254 - while(gasmix.return_pressure() < target_pressure) - if(!safety--) - stack_trace("[type] ran out of safety in its while loop in generate_gas_string. Something has gone horribly wrong!") - break - if(!prob(restricted_chance)) - gastype = pick(normal_gases) - amount = normal_gases[gastype] - else - gastype = pick(restricted_gases) - amount = restricted_gases[gastype] - if(gaslist[gastype]) - continue - - amount *= rand(50, 200) / 100 // Randomly modifes the amount from half to double the base for some variety - amount *= pressure_scalar // If we pick a really small target pressure we want roughly the same mix but less of it all - amount = CEILING(amount, 0.01) - - gaslist[gastype] += amount - - if(gastype) - // That last one put us over the limit, remove some of it - while(gasmix.return_pressure() > target_pressure) - gaslist[gastype] -= gaslist[gastype] * 0.01 - gaslist[gastype] = FLOOR(gaslist[gastype], 0.01) - GAS_GARBAGE_COLLECT(gasmix.gas) - - // Now finally lets make that string - var/list/gas_string_builder = list() - for(var/i in gaslist) - gas_string_builder += "[GLOB.meta_gas_ids[i]]=[gaslist[i]]" - gas_string_builder += "TEMP=[gasmix.temperature]" - gas_string = gas_string_builder.Join(";") diff --git a/code/modules/atmospherics/atmosphere/atmosphere.dm b/code/modules/atmospherics/atmosphere/atmosphere.dm new file mode 100644 index 00000000000..6949fcec349 --- /dev/null +++ b/code/modules/atmospherics/atmosphere/atmosphere.dm @@ -0,0 +1,117 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/** + * system for both + * 1. bundling together gas string defines so they're not hardcoded gas strings + * 2. pregenerating random atmosphers + * + * generation process: + * 0. target pressure and temperature are determined + * 1. base is expanded to base_pressure + * 2. procedurally generate gases with random vars + * if there's no random, use base gases. + */ +/datum/atmosphere + /// don't initialize abstract datums. + abstract_type = /datum/atmosphere + /// generated gas string. do not modify. + var/gas_string + /// unique id. defaults to typepath. + var/id + + /// target volume, incase we want to generate for something that isn't a tile, this lets you set it. + var/volume = CELL_VOLUME + + var/pressure_gaussian = FALSE + var/pressure_center + var/pressure_deviation + var/pressure_low + var/pressure_high + + var/temperature_gaussian = FALSE + var/temperature_center + var/temperature_deviation + var/temperature_low + var/temperature_high + + /// base gases. gas id or typepath to ratio. + var/list/base = list() + /// target pressure to fill base to; if null, and base isn't empty, we fill the whole thing! + var/base_pressure + + // todo: random_markov and have key = list(other key = probability) + /// key: gasid, typepath, or random_procedural key to probability. + var/list/random = list() + /// nominal random steps: the target moles per step is determined by this. actual steps may vary. + /// higher = more uniform, lower = more rough + /// 0 = single pick + var/random_nominal_steps = 10 + /// random procedural gases to throw into the mix. + /// key = typepath. + /// this will override gas lookup, so be careful not to use a real gasid. + var/list/random_procedural = list() + +/datum/atmosphere/New() + if(!id) + id = "[type]" + generate() + +/datum/atmosphere/proc/generate() + // generate wanted pressure/temperature + var/target_pressure = pressure_gaussian? gaussian(pressure_center, pressure_deviation) : (rand(pressure_low * 100, pressure_high * 100) * 0.01) + var/target_temperature = temperature_gaussian? gaussian(temperature_center, temperature_deviation) : (rand(temperature_low * 100, temperature_high * 100) * 0.01) + + // init tracking + var/list/target_gases = list() + var/total_moles = 0 + var/target_moles = (target_pressure * volume) / (R_IDEAL_GAS_EQUATION * target_temperature) + + // generate base + var/total_base = 0 + for(var/i in 1 to length(base)) + var/what = base[i] + var/ratio = base[what] + if(ispath(what, /datum/gas)) + var/datum/gas/casted = what + what = initial(casted.id) + base[i] = what + base[what] = ratio + total_base += ratio + + var/moles_base = ((isnull(base_pressure)? (length(base)? target_pressure : 0) : base_pressure) * volume) / (R_IDEAL_GAS_EQUATION * target_temperature) + var/ratio_base = moles_base / total_base + if(ratio_base) + for(var/what in base) + var/amount = ratio_base * base[what] + total_moles += amount + target_gases[what] = amount + + // check if we have enough + if(total_moles >= target_moles) + gas_string = get_gas_string(target_gases, target_temperature) + return + + // generate rest + var/moles_per_step = (target_moles - total_moles) / random_nominal_steps + // safety + for(var/i in 1 to 200) + if(total_moles >= target_moles) + break + var/left = target_moles - total_moles + var/moles_this_step = min(rand(75, 125) * 0.01 * moles_per_step, left) + // todo: markov chain support by just having pickweight on key = list + var/key = pickweight(random) + if(random_procedural[key]) + if(ispath(random_procedural[key])) + var/datum/procedural_gas/generated = new random_procedural[key] + generated.instance() + generated.generate() + generated.register() + random_procedural[key] = generated + key = random_procedural[key] + target_gases[key] += moles_this_step + total_moles += moles_this_step + + gas_string = get_gas_string(target_gases, target_temperature) + diff --git a/code/modules/atmospherics/environmental/public.dm b/code/modules/atmospherics/environmental/public.dm index ec8171bb6a2..b24155c3047 100644 --- a/code/modules/atmospherics/environmental/public.dm +++ b/code/modules/atmospherics/environmental/public.dm @@ -1,3 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + // when writing atmos machinery, prefer using these procs // this lets us somewhat separate API from implemenetation of the environmental module. // a lot of things are on atom instead, since stuff like breathing should work with inside, say, bluespace bodybags. diff --git a/code/modules/atmospherics/environmental/turf.dm b/code/modules/atmospherics/environmental/turf.dm index 794fbd34778..c2696fc55d3 100644 --- a/code/modules/atmospherics/environmental/turf.dm +++ b/code/modules/atmospherics/environmental/turf.dm @@ -112,7 +112,7 @@ RETURN_TYPE(/datum/gas_mixture) if(zone) if(!zone.invalid) - air_master.mark_zone_update(zone) + SSair.mark_zone_update(zone) return zone.air else c_copy_air() diff --git a/code/modules/atmospherics/environmental/zas/_docs.dm b/code/modules/atmospherics/environmental/zas/_docs.dm index e61f16195ba..75a3f34e101 100644 --- a/code/modules/atmospherics/environmental/zas/_docs.dm +++ b/code/modules/atmospherics/environmental/zas/_docs.dm @@ -15,7 +15,7 @@ Every air tick: Important Functions: -air_master.mark_for_update(turf) +SSair.mark_for_update(turf) When stuff happens, call this. It works on everything. You basically don't need to worry about any other functions besides CanPass(). diff --git a/code/modules/atmospherics/environmental/zas/connection.dm b/code/modules/atmospherics/environmental/zas/connection.dm index 09f59bd9995..4a3b53e21c4 100644 --- a/code/modules/atmospherics/environmental/zas/connection.dm +++ b/code/modules/atmospherics/environmental/zas/connection.dm @@ -5,7 +5,7 @@ /* Overview: - Connections are made between turfs by air_master.connect(). They represent a single point where two zones converge. + Connections are made between turfs by SSair.connect(). They represent a single point where two zones converge. Class Vars: A - Always a simulated turf. @@ -60,18 +60,18 @@ Class Procs: /datum/zas_connection/New(turf/simulated/A, turf/simulated/B) #ifdef ZAS_ASSERTIONS ASSERT(A.has_valid_zone()) - //ASSERT(air_master.has_valid_zone(B)) + //ASSERT(SSair.has_valid_zone(B)) #endif src.A = A src.B = B zoneA = A.zone if(!istype(B)) mark_space() - edge = air_master.get_edge(A.zone,B) + edge = SSair.get_edge(A.zone,B) edge.add_connection(src) else zoneB = B.zone - edge = air_master.get_edge(A.zone,B.zone) + edge = SSair.get_edge(A.zone,B.zone) edge.add_connection(src) /datum/zas_connection/proc/mark_direct() @@ -132,7 +132,7 @@ Class Procs: return else edge.remove_connection(src) - edge = air_master.get_edge(A.zone, B) + edge = SSair.get_edge(A.zone, B) edge.add_connection(src) zoneA = A.zone @@ -154,7 +154,7 @@ Class Procs: //to_chat(world, "Zones changed, \...") if(A.zone && B.zone) edge.remove_connection(src) - edge = air_master.get_edge(A.zone, B.zone) + edge = SSair.get_edge(A.zone, B.zone) edge.add_connection(src) zoneA = A.zone zoneB = B.zone diff --git a/code/modules/atmospherics/environmental/zas/connection_manager.dm b/code/modules/atmospherics/environmental/zas/connection_manager.dm index 8efe6fd4b0a..59a72066e07 100644 --- a/code/modules/atmospherics/environmental/zas/connection_manager.dm +++ b/code/modules/atmospherics/environmental/zas/connection_manager.dm @@ -16,7 +16,7 @@ Class Procs: Preferable to accessing the connection directly because it checks validity. place(datum/zas_connection/c, d) - Called by air_master.connect(). Sets the connection in the specified direction to c. + Called by SSair.connect(). Sets the connection in the specified direction to c. update_all() Called after turf/update_air_properties(). Updates the validity of all connections on this turf. diff --git a/code/modules/atmospherics/environmental/zas/controller.dm b/code/modules/atmospherics/environmental/zas/controller.dm index 2664cf6dbcd..1e2c42d5f13 100644 --- a/code/modules/atmospherics/environmental/zas/controller.dm +++ b/code/modules/atmospherics/environmental/zas/controller.dm @@ -1,6 +1,3 @@ -var/datum/controller/subsystem/air/air_master - -var/tick_multiplier = 2 /* diff --git a/code/modules/atmospherics/environmental/zas/debug.dm b/code/modules/atmospherics/environmental/zas/debug.dm index 68c034c2027..634652c27fb 100644 --- a/code/modules/atmospherics/environmental/zas/debug.dm +++ b/code/modules/atmospherics/environmental/zas/debug.dm @@ -31,12 +31,12 @@ var/image/mark = image('icons/testing/Zone.dmi', icon_state = "mark") /* if(!check_rights(R_DEBUG)) return - var/result = air_master.Tick() + var/result = SSair.Tick() if(result) to_chat(src, "Successfully Processed.") else - to_chat(src, "Failed to process! ([air_master.tick_progress])") + to_chat(src, "Failed to process! ([SSair.tick_progress])") */ /client/proc/Zone_Info(turf/T as null|turf) diff --git a/code/modules/atmospherics/environmental/zas/edge.dm b/code/modules/atmospherics/environmental/zas/edge.dm index 932106c028a..deea312b03d 100644 --- a/code/modules/atmospherics/environmental/zas/edge.dm +++ b/code/modules/atmospherics/environmental/zas/edge.dm @@ -2,7 +2,7 @@ Overview: These are what handle gas transfers between zones and into space. - They are found in a zone's edges list and in air_master.edges. + They are found in a zone's edges list and in SSair.edges. Each edge updates every air tick due to their role in gas transfer. They come in two flavors, /datum/zas_edge/zone and /datum/zas_edge/unsimulated. As the type names might suggest, they handle inter-zone and spacelike connections respectively. @@ -83,7 +83,7 @@ Class Procs: /datum/zas_edge/proc/contains_zone(datum/zas_zone/Z) /datum/zas_edge/proc/erase() - air_master.remove_edge(src) + SSair.remove_edge(src) //to_chat(world, "[type] Erased.") /datum/zas_edge/proc/tick() @@ -178,19 +178,19 @@ Class Procs: if(equiv) if(direct) erase() - air_master.merge(A, B) + SSair.merge(A, B) return else A.air.equalize(B.air) - air_master.mark_edge_sleeping(src) + SSair.mark_edge_sleeping(src) - air_master.mark_zone_update(A) - air_master.mark_zone_update(B) + SSair.mark_zone_update(A) + SSair.mark_zone_update(B) /datum/zas_edge/zone/recheck() // Edges with only one side being vacuum need processing no matter how close. if(!A.air.compare(B.air, vacuum_exception = 1)) - air_master.mark_edge_active(src) + SSair.mark_edge_active(src) //Helper proc to get connections for a zone. /datum/zas_edge/zone/proc/get_connected_zone(datum/zas_zone/from) @@ -242,16 +242,16 @@ Class Procs: if(equiv) A.air.copy_from(air) - air_master.mark_edge_sleeping(src) + SSair.mark_edge_sleeping(src) - air_master.mark_zone_update(A) + SSair.mark_zone_update(A) /datum/zas_edge/unsimulated/recheck() // Edges with only one side being vacuum need processing no matter how close. // Note: This handles the glaring flaw of a room holding pressure while exposed to space, but // does not specially handle the less common case of a simulated room exposed to an unsimulated pressurized turf. if(!A.air.compare(air, vacuum_exception = 1)) - air_master.mark_edge_active(src) + SSair.mark_edge_active(src) /proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //This implements a simplistic version of the Stefan-Boltzmann law. diff --git a/code/modules/atmospherics/environmental/zas/fire.dm b/code/modules/atmospherics/environmental/zas/fire.dm index bd194af2e59..24ecfae6475 100644 --- a/code/modules/atmospherics/environmental/zas/fire.dm +++ b/code/modules/atmospherics/environmental/zas/fire.dm @@ -61,7 +61,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin fuel_objs.Cut() if(!fire_tiles.len) - air_master.active_fire_zones.Remove(src) + SSair.active_fire_zones.Remove(src) /datum/zas_zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0) if(!fuel_objs.len) @@ -99,7 +99,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin return 1 fire = new(src, fl) - air_master.active_fire_zones |= zone + SSair.active_fire_zones |= zone var/obj/effect/debris/cleanable/liquid_fuel/fuel = locate() in src zone.fire_tiles |= src @@ -136,7 +136,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin set_light(3, 1, color) firelevel = fl - air_master.active_hotspots.Add(src) + SSair.active_hotspots.Add(src) /atom/movable/fire/Destroy() RemoveFire() @@ -150,7 +150,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin T.fire = null else stack_trace("Mismatching fire on [T] [COORD(T)]") - air_master.active_hotspots.Remove(src) + SSair.active_hotspots.Remove(src) /atom/movable/fire/process(delta_time) . = 1 diff --git a/code/modules/atmospherics/environmental/zas/phoron.dm b/code/modules/atmospherics/environmental/zas/phoron.dm index 2fc1d8d7f21..894038af9bc 100644 --- a/code/modules/atmospherics/environmental/zas/phoron.dm +++ b/code/modules/atmospherics/environmental/zas/phoron.dm @@ -63,7 +63,7 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') return //Burn skin if exposed. - if(skin_burns && (species.breath_type != /datum/gas/phoron)) + if(skin_burns && (species.breath_type != GAS_ID_PHORON)) if(!pl_head_protected() || !pl_suit_protected()) burn_skin(0.75) if(prob(20)) @@ -71,7 +71,7 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') update_health() //Burn eyes if exposed. - if(eye_burns && species.breath_type && (species.breath_type != /datum/gas/phoron)) + if(eye_burns && species.breath_type && (species.breath_type != GAS_ID_PHORON)) var/burn_eyes = 1 //Check for protective glasses @@ -95,7 +95,7 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') burn_eyes() //Genetic Corruption - if(genetic_corruption && (species.breath_type != /datum/gas/phoron)) + if(genetic_corruption && (species.breath_type != GAS_ID_PHORON)) if(rand(1,10000) < genetic_corruption) randmutb(src) to_chat(src, "High levels of toxins cause you to spontaneously mutate!") @@ -161,6 +161,6 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') if(!env) return for(var/g in env.gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_CONTAMINANT && env.gas[g] > GLOB.meta_gas_visibility[g] + 1) + if(global.gas_data.flags[g] & GAS_FLAG_CONTAMINANT && env.gas[g] > 1) I.contaminate() break diff --git a/code/modules/atmospherics/environmental/zas/turf.dm b/code/modules/atmospherics/environmental/zas/turf.dm index e9e25fe0ffe..be51633d6a9 100644 --- a/code/modules/atmospherics/environmental/zas/turf.dm +++ b/code/modules/atmospherics/environmental/zas/turf.dm @@ -40,7 +40,7 @@ if(r_block == ATMOS_PASS_AIR_BLOCKED) continue - air_master.connect(potential, src, min(block, r_block), d) + SSair.connect(potential, src, min(block, r_block), d) //* credit to kapu/daedalus dock for some of the code below*// @@ -215,7 +215,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST) to_chat(world, "Connecting to [sim.zone]") #endif - air_master.connect(src, potential, min(them_to_us, us_to_them), d) + SSair.connect(src, potential, min(them_to_us, us_to_them), d) #ifdef ZAS_DEBUG_GRAPHICS else if(zas_verbose) @@ -245,7 +245,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST) //At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug. for(var/turf/T as anything in postponed) - air_master.connect(src, T, postponed[T], postponed_dirs[T]) + SSair.connect(src, T, postponed[T], postponed_dirs[T]) /turf/proc/post_update_air_properties() connections?.update_all() diff --git a/code/modules/atmospherics/environmental/zas/zone.dm b/code/modules/atmospherics/environmental/zas/zone.dm index 51b58779da7..09e0de0c4e4 100644 --- a/code/modules/atmospherics/environmental/zas/zone.dm +++ b/code/modules/atmospherics/environmental/zas/zone.dm @@ -53,7 +53,7 @@ Class Procs: var/atom/movable/zas_graphics/renderer_one_for_all /datum/zas_zone/New() - air_master.add_zone(src) + SSair.add_zone(src) air.temperature = TCMB air.group_multiplier = 1 air.volume = CELL_VOLUME @@ -72,7 +72,7 @@ Class Procs: if(T.fire) var/obj/effect/debris/cleanable/liquid_fuel/fuel = locate() in T fire_tiles += T - air_master.active_fire_zones |= src + SSair.active_fire_zones |= src if(fuel) fuel_objs += fuel if(renderer_one_for_all && T.allow_gas_overlays && !T.outdoors) @@ -128,7 +128,7 @@ Class Procs: /datum/zas_zone/proc/c_invalidate() invalid = 1 - air_master.remove_zone(src) + SSair.remove_zone(src) #ifdef ZAS_DEBUG_GRAPHICS for(var/turf/simulated/T in contents) T.dbg(invalid_zone) @@ -154,7 +154,7 @@ Class Procs: /datum/zas_zone/proc/tick() CACHE_VSC_PROP(atmos_vsc, /atmos/fire/firelevel_multiplier, firelevel_multiplier) - if(air.temperature >= PHORON_FLASHPOINT && !(src in air_master.active_fire_zones) && air.check_combustability() && contents.len) + if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && air.check_combustability() && contents.len) var/turf/T = pick(contents) if(istype(T)) T.create_fire(firelevel_multiplier) @@ -184,9 +184,9 @@ Class Procs: /datum/zas_zone/proc/dbg_data(mob/M) to_chat(M, name) for(var/g in air.gas) - to_chat(M, "[GLOB.meta_gas_names[g]]: [air.gas[g]]") + to_chat(M, "[global.gas_data.names[g]]: [air.gas[g]]") to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]�K ([air.temperature - T0C]�C)") - to_chat(M, "O2 per N2: [(air.gas[/datum/gas/nitrogen] ? air.gas[/datum/gas/oxygen]/air.gas[/datum/gas/nitrogen] : "N/A")] Moles: [air.total_moles]") + to_chat(M, "O2 per N2: [(air.gas[GAS_ID_NITROGEN] ? air.gas[GAS_ID_OXYGEN]/air.gas[GAS_ID_NITROGEN] : "N/A")] Moles: [air.total_moles]") to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])") //to_chat(M, "Unsimulated: [unsimulated_contents.len]") //to_chat(M, "Edges: [edges.len]") diff --git a/code/modules/atmospherics/gasmixtures/flow.dm b/code/modules/atmospherics/gasmixtures/flow.dm new file mode 100644 index 00000000000..b0d626ea1bc --- /dev/null +++ b/code/modules/atmospherics/gasmixtures/flow.dm @@ -0,0 +1,357 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/** + * @params + * * source - mixture to pump from + * * sink - mixture to pump into + * * limit_moles - if set, only pump this many moles of gas at most + * * limit_power - power limit in joules + */ +/proc/xgm_pump_gas(datum/gas_mixture/source, datum/gas_mixture/sink, limit_moles, limit_power) + // not enough to pump + if(source.total_moles < MINIMUM_MOLES_TO_PUMP) + return 0 + + var/specific_power = calculate_specific_power(source, sink) / ATMOS_ABSTRACT_PUMP_EFFICIENCY + limit_moles = isnull(limit_moles)? source.total_moles : min(limit_moles, source.total_moles) + if(!isnull(limit_power) && (specific_power > 0)) + limit_moles = min(limit_moles, limit_power / specific_power) + + if(limit_moles < MINIMUM_MOLES_TO_PUMP) + return + + sink.merge(source.remove(limit_moles)) + + return specific_power * limit_moles + +/** + * @params + * * source - mixture to scrub + * * sink - mixture to scrub into + * * gas_ids - list of gas ids to scrub + * * gas_groups - list of gas groups to scrub + * * limit_moles - if set, only scrubs this many moles of gas at most + * * limit_power - power limit in joules + * + * @return power draw + */ +/proc/xgm_scrub_gas(datum/gas_mixture/source, datum/gas_mixture/sink, list/gas_ids, gas_groups, limit_moles, limit_power) + // not enough to scrub + if(source.total_moles < MINIMUM_MOLES_TO_SCRUB) + return 0 + + // get actually existing gas + var/list/filtered_ids + if(gas_groups) + filtered_ids = list() + // sigh; iterate through source + for(var/id in source.gas) + if(global.gas_data.groups[id] & gas_groups) + filtered_ids += id + // then get the explicitly filtered ones if needed + if(length(gas_ids)) + filtered_ids |= (source.gas & gas_ids) + else if(length(gas_ids)) + filtered_ids = gas_ids & source.gas + + // gather + var/total_filterable_moles = 0 + var/total_specific_power = 0 + for(var/id in filtered_ids) + if(source.gas[id] < MINIMUM_MOLES_TO_SCRUB) + continue + total_filterable_moles += source.gas[id] + total_specific_power += calculate_specific_power_gas(id, source, sink) + total_specific_power /= ATMOS_ABSTRACT_SCRUB_EFFICIENCY + + // limit by both moles and power + limit_moles = isnull(limit_moles)? total_filterable_moles : min(limit_moles, total_filterable_moles) + if(!isnull(limit_power) && (total_specific_power > 0)) + limit_moles = min(limit_moles, limit_power / total_specific_power) + + // can't transfer enough + if(limit_moles < MINIMUM_MOLES_TO_SCRUB) + return 0 + + // unlike in the other procs, ratio here is the amount we can filter vs the amount there is to filter + var/ratio = limit_moles / total_filterable_moles + + // do the actual scrubbing + for(var/id in filtered_ids) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + sink.adjust_gas_temp(id, transfer, source.temperature, FALSE) + + // update values + source.update_values() + sink.update_values() + + // return power used in J + return limit_moles * total_specific_power + +/** + * @params + * * source - mixture to scrub + * * sink - mixture to scrub into + * * gas_ids - list of gas ids to scrub + * * gas_groups - list of gas groups to scrub + * * limit_flow - if set, only scrubs this many liters of gas at most from source. this does *NOT* respect group multiplier. + * * limit_power - power limit in joules + * * mole_boost - ignore limit_flow to filter atleast this many moles. This is so it doesn't take too long to scrub. + * + * @return power draw + */ +/proc/xgm_scrub_gas_volume(datum/gas_mixture/source, datum/gas_mixture/sink, list/gas_ids, gas_groups, limit_flow, limit_power, mole_boost) + // not enough to scrub + if(source.total_moles < MINIMUM_MOLES_TO_SCRUB) + return 0 + + // get actually existing gas + var/list/filtered_ids + if(gas_groups) + filtered_ids = list() + // sigh; iterate through source + for(var/id in source.gas) + if(global.gas_data.groups[id] & gas_groups) + filtered_ids += id + // then get the explicitly filtered ones if needed + if(length(gas_ids)) + filtered_ids |= (source.gas & gas_ids) + else if(length(gas_ids)) + filtered_ids = gas_ids & source.gas + + // gather + var/total_filterable_moles = 0 + var/total_specific_power = 0 + for(var/id in filtered_ids) + if(source.gas[id] < MINIMUM_MOLES_TO_SCRUB) + continue + total_filterable_moles += source.gas[id] + total_specific_power += calculate_specific_power_gas(id, source, sink) + total_specific_power /= ATMOS_ABSTRACT_SCRUB_EFFICIENCY + + // limit by both moles and power + var/limit_moles = isnull(limit_flow)? total_filterable_moles : min(max(mole_boost, total_filterable_moles * (limit_flow / source.volume)), total_filterable_moles) + if(!isnull(limit_power) && (total_specific_power > 0)) + limit_moles = min(limit_moles, limit_power / total_specific_power) + + // can't transfer enough + if(limit_moles < MINIMUM_MOLES_TO_SCRUB) + return 0 + + // unlike in the other procs, ratio here is the amount we can filter vs the amount there is to filter + var/ratio = limit_moles / total_filterable_moles + + // do the actual scrubbing + for(var/id in filtered_ids) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + sink.adjust_gas_temp(id, transfer, source.temperature, FALSE) + + // update values + source.update_values() + sink.update_values() + + // return power used in J + return limit_moles * total_specific_power + +/** + * @params + * * source - mixture to filter + * * sink - mixture to send unfiltered gas into + * * divert - mixture to send filtered gas into + * * to_filter - what to filter, either a gas id or a set of gas groups. + * * limit_moles - if set, only scrubs this many moles of gas at most + * * limit_power - power limit in joules + * + * @return power draw + */ +/proc/xgm_filter_gas(datum/gas_mixture/source, datum/gas_mixture/sink, datum/gas_mixture/divert, to_filter, limit_moles, limit_power) + // not enough to filter + if(source.total_moles < MINIMUM_MOLES_TO_FILTER) + return 0 + + // gather - faster than scrub + var/filterable_moles = 0 + var/list/filter_ids + if(isnum(to_filter)) + // groups + filter_ids = list() + for(var/id in source.gas) + if(global.gas_data.groups[id] & to_filter) + filterable_moles += source.gas[id] + filter_ids += id + if(!length(filter_ids)) + // not there + return xgm_pump_gas(source, sink, limit_moles, limit_power) + else + // ids + if(!(source.gas[to_filter])) + // not there + return xgm_pump_gas(source, sink, limit_moles, limit_power) + filter_ids = list(to_filter) + filterable_moles = source.gas[to_filter] + + // calculate work per mole moved through filter, diverting as necessary + var/total_specific_power = 0 + var/list/not_filtered = source.gas - filter_ids + for(var/id in not_filtered) + total_specific_power += calculate_specific_power_gas(id, source, sink) * source.gas[id] / source.total_moles + for(var/id in filter_ids) + total_specific_power += calculate_specific_power_gas(id, source, divert) * source.gas[id] / source.total_moles + total_specific_power /= ATMOS_ABSTRACT_FILTER_EFFICIENCY + + // limit + limit_moles = isnull(limit_moles)? source.total_moles : min(limit_moles, source.total_moles) + if(!isnull(limit_power) && (total_specific_power > 0)) + limit_moles = min(limit_moles, limit_power / total_specific_power) + + var/ratio = limit_moles / source.total_moles + + // not enough to filter + if(limit_moles < MINIMUM_MOLES_TO_FILTER) + return 0 + + // transfer + for(var/id in filter_ids) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + divert.adjust_gas_temp(id, transfer, source.temperature, FALSE) + for(var/id in not_filtered) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + sink.adjust_gas_temp(id, transfer, source.temperature, FALSE) + + // update values + source.update_values() + sink.update_values() + divert.update_values() + + // return power used in J + return limit_moles * total_specific_power + +/** + * @params + * * source - mixture to filter + * * sink - mixture to send unfiltered gas into + * * filtering - gas ids associated to mixtures to send them to. + * * limit_moles - if set, only scrubs this many moles of gas at most + * * limit_power - power limit in joules + * + * @return power draw + */ +/proc/xgm_multi_filter_gas_specific(datum/gas_mixture/source, datum/gas_mixture/sink, list/filtering, limit_moles, limit_power) + // not enough to filter + if(source.total_moles < MINIMUM_MOLES_TO_FILTER) + return 0 + + // nothing to filter + if(!length(filtering)) + return xgm_pump_gas(source, sink, limit_moles, limit_power) + + // gather - faster than scrub + var/filterable_moles = 0 + var/total_specific_power = 0 + var/list/not_filtered = source.gas - filtering + for(var/id in filtering) + filterable_moles[id] += source.gas[id] + total_specific_power += calculate_specific_power_gas(id, source, filtering[id]) * source.gas[id] / source.total_moles + for(var/id in not_filtered) + total_specific_power += calculate_specific_power_gas(id, source, sink) * source.gas[id] / source.total_moles + total_specific_power /= ATMOS_ABSTRACT_FILTER_EFFICIENCY + + // limit + limit_moles = isnull(limit_moles)? source.total_moles : min(limit_moles, source.total_moles) + if(!isnull(limit_power) && (total_specific_power > 0)) + limit_moles = min(limit_moles, limit_power / total_specific_power) + + var/ratio = limit_moles / source.total_moles + + // not enough to filter + if(limit_moles < MINIMUM_MOLES_TO_FILTER) + return 0 + + // transfer + for(var/id in filtering) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + var/datum/gas_mixture/divert = filtering[id] + // update immediately, we don't have overlap most of the time. + divert.adjust_gas_temp(id, transfer, source.temperature, TRUE) + for(var/id in not_filtered) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + sink.adjust_gas_temp(id, transfer, source.temperature, FALSE) + + // update values + source.update_values() + sink.update_values() + + // return power used in J + return limit_moles * total_specific_power + +/** + * @params + * * source - mixture to filter + * * sink - mixture to send unfiltered gas into + * * divert - mixture to send filtered gas into; this is anything with molar mass between lower and upper, inclusive + * * lower - lower bound of target in kg/mol + * * upper - upper bound of target in kg/mol + * * limit_moles - if set, only scrubs this many moles of gas at most + * * limit_power - power limit in joules + * + * @return power draw + */ +/proc/xgm_molar_filter_gas(datum/gas_mixture/source, datum/gas_mixture/sink, datum/gas_mixture/divert, lower, upper, limit_moles, limit_power) + // not enough to filter + if(source.total_moles < MINIMUM_MOLES_TO_FILTER) + return 0 + + // gather - faster than scrub + var/filterable_moles = 0 + var/list/filter_ids = list() + for(var/id in source.gas) + var/mass = global.gas_data.molar_masses[id] + if(lower > mass || upper < mass) + continue + filterable_moles += source.gas[id] + filter_ids += id + + // calculate work per mole moved through filter, diverting as necessary + var/total_specific_power = 0 + var/list/not_filtered = source.gas - filter_ids + for(var/id in not_filtered) + total_specific_power += calculate_specific_power_gas(id, source, sink) * source.gas[id] / source.total_moles + for(var/id in filter_ids) + total_specific_power += calculate_specific_power_gas(id, source, divert) * source.gas[id] / source.total_moles + total_specific_power /= ATMOS_ABSTRACT_FILTER_EFFICIENCY + + // limit + limit_moles = isnull(limit_moles)? source.total_moles : min(limit_moles, source.total_moles) + if(!isnull(limit_power) && (total_specific_power > 0)) + limit_moles = min(limit_moles, limit_power / total_specific_power) + + var/ratio = limit_moles / source.total_moles + + // not enough to filter + if(limit_moles < MINIMUM_MOLES_TO_FILTER) + return 0 + + // transfer + for(var/id in filter_ids) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + divert.adjust_gas_temp(id, transfer, source.temperature, FALSE) + for(var/id in not_filtered) + var/transfer = source.gas[id] * ratio + source.adjust_gas(id, -transfer, FALSE) + sink.adjust_gas_temp(id, transfer, source.temperature, FALSE) + + // update values + source.update_values() + sink.update_values() + divert.update_values() + + // return power used in J + return limit_moles * total_specific_power diff --git a/code/modules/atmospherics/gasmixtures/gas_data.dm b/code/modules/atmospherics/gasmixtures/gas_data.dm new file mode 100644 index 00000000000..41b92f3391d --- /dev/null +++ b/code/modules/atmospherics/gasmixtures/gas_data.dm @@ -0,0 +1,270 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +GLOBAL_REAL(gas_data, /datum/gas_data) = new + +/proc/__recreate_gas_data() + if(!isnull(global.gas_data)) + qdel(global.gas_data) + global.gas_data = new + +/** + * master datum holding all atmospherics gas data + * all lists should be accessed directly for speed + * all lists are keyed by id + */ +/datum/gas_data + //* gas data - intrinsics + /// ids; associative list to the instantiated datum + var/list/gases = list() + /// names + var/list/names = list() + /// flags + var/list/flags = list() + /// groups + var/list/groups = list() + + //* gas data - physics + /// specific heat + var/list/specific_heats = list() + /// molar masses + var/list/molar_masses = list() + + //* gas data - reagents + /// reagents: id = (reagentid, base amount, minimum moles, mole factor, max amount) + /// this is a sparse lookup, not all gases are in here. + var/list/reagents = list() + + //* gas data - visuals + /// visuals: id = (state, threshold, factor) + var/list/visuals = list() + /// visuals cache + var/list/visual_images = list() + + //* gas data - reactions + var/list/rarities = list() + + //* gas data - "fluff" + var/list/default_tlvs = list() + + //* cache lists + /// list of lists of gas ids by flag + var/list/gas_by_flag = list() + /// list of lists of gas ids by group + var/list/gas_by_group = list() + /// list of gas ids in core + var/list/gas_ids_core = list() + + //* static caches + /// list of non core group names that are filterable + var/list/gas_group_names_filterable = list() + /// gas group name to group + var/list/gas_group_by_name = list() + + //* global data + /// next random gas id + var/static/next_procedural_gas_id = 0 + +/datum/gas_data/New() + rebuild_static_caches() + build_hardcoded() + +/datum/gas_data/proc/rebuild_caches() + rebuild_static_caches() + names = list() + flags = list() + groups = list() + specific_heats = list() + molar_masses = list() + reagents = list() + visuals = list() + visual_images = list() + rarities = list() + default_tlvs = list() + gas_by_flag = list() + gas_by_group = list() + gas_ids_core = list() + if(!islist(gases)) + gases = list() + for(var/i in 1 to length(gases)) + var/id = gases[i] + var/datum/gas/G = gases[id] + if(!G) + gases -= id + continue + if(id != G.id) + gases[i] = G.id + gases[G.id] = G + _register_gas(G) + +/datum/gas_data/proc/rebuild_static_caches() + gas_group_names_filterable = list() + gas_group_by_name = list() + for(var/i in 1 to length(gas_group_names)) + var/group = 1 << i + if(group == GAS_GROUP_CORE) + continue + if(!(group & GAS_GROUPS_FILTERABLE)) + continue + var/name = gas_group_names[i] + gas_group_names_filterable += name + gas_group_by_name[name] = group + +/datum/gas_data/proc/build_hardcoded() + for(var/path in subtypesof(/datum/gas)) + var/datum/gas/G = new path + register_gas(G) + +/datum/gas_data/proc/register_gas(datum/gas/G) + ASSERT(G.id) + ASSERT(!gases[G.id]) + _register_gas(G) + +/datum/gas_data/proc/_register_gas(datum/gas/G) + //? intrinsics + gases[G.id] = G + names[G.id] = G.name + if(groups[G.id]) + var/old_group = groups[G.id] + LAZYREMOVE(gas_by_group[old_group], G.id) + groups[G.id] = G.gas_groups + if(G.gas_groups & GAS_GROUP_CORE) + gas_ids_core += G.id + if(!((G.gas_flags & (GAS_FLAG_CORE | GAS_FLAG_FILTERABLE)) == (GAS_FLAG_CORE | GAS_FLAG_FILTERABLE))) + stack_trace("[G.id] didn't have core/filterable flags even though it was marked as core group. Adding the flags...") + G.gas_flags |= (GAS_FLAG_CORE | GAS_FLAG_FILTERABLE) + else if(!(G.gas_groups & GAS_GROUPS_FILTERABLE)) + stack_trace("[G.id] didn't have a filterable gas group. This is probably a bad thing. Adding filterable flag...") + G.gas_flags |= (GAS_FLAG_FILTERABLE) + if(flags[G.id]) + var/old_flags = flags[G.id] + for(var/bit in bitfield2list(old_flags)) + LAZYREMOVE(gas_by_flag["[bit]"], G.id) + flags[G.id] = G.gas_flags + //? physics + specific_heats[G.id] = G.specific_heat + molar_masses[G.id] = G.molar_mass + //? reagents + if(G.gas_reagent_id) + reagents[G.id] = list( + G.gas_reagent_id, + G.gas_reagent_amount, + G.gas_reagent_threshold, + G.gas_reagent_factor, + G.gas_reagent_max + ) + else + reagents -= G.id + //? visuals + if(!G.visual_overlay) + visuals -= G.id + visual_images -= G.id + else + visuals[G.id] = list( + G.visual_overlay, + G.visual_threshold, + G.visual_factor + ) + visual_images[G.id] = new /list(GAS_VISUAL_STEP_MAX) + for(var/i in 1 to GAS_VISUAL_STEP_MAX) + var/image/I = image('icons/modules/atmospherics/gas.dmi', icon_state = G.visual_overlay, layer = FLOAT_LAYER + i) + I.plane = FLOAT_PLANE + I.alpha = i * (255 / GAS_VISUAL_STEP_MAX) + I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + I.color = G.visual_color + I.appearance_flags = RESET_TRANSFORM | RESET_COLOR | RESET_ALPHA | KEEP_APART + visual_images[G.id][i] = I + //? reactions + rarities[G.id] = G.rarity + //? fluff + default_tlvs[G.id] = G.default_tlv + //? rebuild cheap cache lists + //* gas groups + for(var/group in bitfield2list(G.gas_groups)) + LAZYDISTINCTADD(gas_by_group["[group]"], G.id) + //* gas flags + for(var/bit in bitfield2list(G.gas_flags)) + LAZYDISTINCTADD(gas_by_flag["[bit]"], G.id) + +/** + * tgui gas context + * + * generates data for tgui/interfaces/Atmos.tsx: + * * GasContext + * * FullGasContext + * + * @params + * * ids - gas ids; defaults to all. + * * full - for FullGasContext? Usually not needed. + */ +/datum/gas_data/proc/tgui_gas_context(list/ids, full = FALSE) + . = list() + var/list/gases = list() + .["gases"] = gases + var/list/core_ids = list() + .["coreGases"] = core_ids + var/list/filterable_ids = list() + .["filterableGases"] = filterable_ids + var/filterableGroups = GAS_GROUPS_FILTERABLE + .["groupNames"] = global.gas_group_names + for(var/id in (ids || src.gases)) + var/datum/gas/instance = src.gases[id] + if(isnull(instance)) + continue + var/list/assembled = list( + "id" = instance.id, + "name" = instance.name, + "flags" = instance.gas_flags, + "groups" = instance.gas_groups, + "specificHeat" = instance.specific_heat, + "molarMass" = instance.molar_mass, + ) + if(instance.gas_flags & GAS_FLAG_CORE) + core_ids |= instance.id + if(instance.gas_flags & GAS_FLAG_FILTERABLE) + filterable_ids += instance.id + gases[instance.id] = assembled + .["filterableGroups"] = filterableGroups + +/** + * gets tgui gas context for all non-unknown gasses + */ +/datum/gas_data/proc/tgui_known_gas_context(full = FALSE) + . = list() + for(var/id in flags) + if(flags[id] & GAS_FLAG_UNKNOWN) + continue + . += id + return tgui_gas_context(., full) + +/** + * checks if a gas group or set of gas groups is filterable + * + * returns all or none + */ +/datum/gas_data/proc/gas_groups_all_filterable(group_flag) + return ((group_flag & GAS_GROUPS_FILTERABLE) == group_flag)? group_flag : NONE + +/** + * checks if a gas group or set of gas groups is filterable + * + * returns filterable groups + */ +/datum/gas_data/proc/gas_groups_filterable(group_flag) + return (group_flag & GAS_GROUPS_FILTERABLE) + +/** + * checks if a gas id is specifically filterable + */ +/datum/gas_data/proc/gas_id_filterable(gas_id) + return flags[gas_id] & (GAS_FLAG_FILTERABLE | GAS_FLAG_CORE) + +/** + * check if a procedural gas is not conflicting with any other gas + */ +/datum/gas_data/proc/procedural_gas_conflicts(datum/procedural_gas/instance) + . = FALSE + for(var/id in gases) + var/datum/gas/gas = gases[id] + if(abs(gas.molar_mass - instance.molar_mass) <= GAS_COLLISION_THRESHOLD_MOLAR_MASS) + return TRUE diff --git a/code/modules/atmospherics/gasmixtures/gas_generation.dm b/code/modules/atmospherics/gasmixtures/gas_generation.dm new file mode 100644 index 00000000000..3ce74318a5e --- /dev/null +++ b/code/modules/atmospherics/gasmixtures/gas_generation.dm @@ -0,0 +1,103 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/proc/generate_procedural_gas(path, list/arguments) + var/datum/procedural_gas/instance = new path(arglist(arguments)) + if(!instance.instance()) + return + if(!instance.generate()) + return + if(!instance.register()) + return + return instance + +/** + * datums used to procedurally generate gas + */ +/datum/procedural_gas + /// id to use + var/id + /// numerical id - used internally + var/number + /// name + var/name + /// gas flags + var/gas_flags = NONE + /// gas groups + var/gas_groups = NONE + /// specific heat + var/specific_heat = 1 + /// molar mass + var/molar_mass = 1 + + // todo: reagents + // todo: reagents + // todo: reagents + + /// gas generation flags + var/procedural_gas_flags = NONE + +/datum/procedural_gas/New(procedural_gas_flags) + src.procedural_gas_flags = procedural_gas_flags + +/datum/procedural_gas/proc/instance() + RETURN_TYPE(/datum/gas) + number = ++global.gas_data.next_procedural_gas_id + id = "[GAS_ID_PREFIX_PROCGEN][number]" + +/datum/procedural_gas/proc/generate() + . = FALSE + CRASH("not implemented") + +/datum/procedural_gas/proc/register() + var/datum/gas/gas = new + gas.id = id + gas.name = name + gas.gas_flags = gas_flags + gas.gas_groups = gas_groups + gas.specific_heat = specific_heat + gas.molar_mass = molar_mass + +/datum/procedural_gas/proc/round_stable_random_name() + // todo: this is not round stable. we'd need db/whatever for that, deal with this when we do repository systems + persistence + return "unkw#[number]" + +/** + * standard random + */ +/datum/procedural_gas/random + var/oxidizer_chance = 30 + var/fuel_chance = 15 + var/unary_burnmix_chance = 25 + + // todo: molar mass vars + // todo: specific heat vars + +/datum/procedural_gas/random/generate() + name = round_stable_random_name() + gas_flags = GAS_FLAG_UNKNOWN + gas_groups = GAS_GROUP_UNKNOWN + + if(prob(oxidizer_chance) && (procedural_gas_flags & PROCEDURAL_GAS_ALLOW_OXIDIZER)) + gas_flags |= GAS_FLAG_OXIDIZER + if(prob(unary_burnmix_chance) && (procedural_gas_flags & PROCEDURAL_GAS_ALLOW_UNARY_BURNMIX)) + gas_flags |= GAS_FLAG_FUEL + else if(prob(fuel_chance) && (procedural_gas_flags & PROCEDURAL_GAS_ALLOW_FUEL)) + gas_flags |= GAS_FLAG_FUEL + if(prob(unary_burnmix_chance) && (procedural_gas_flags & PROCEDURAL_GAS_ALLOW_UNARY_BURNMIX)) + gas_flags |= GAS_FLAG_OXIDIZER + + // todo: optimize this shit + for(var/i in 1 to 1000) + var/potential = rand(1.5 * GAS_COLLISION_FACTOR_MOLAR_MASS, 550 * GAS_COLLISION_FACTOR_MOLAR_MASS) / GAS_COLLISION_FACTOR_MOLAR_MASS + var/success = TRUE + for(var/id in global.gas_data.molar_masses) + var/mass = global.gas_data.molar_masses[id] + if(abs(mass - potential) <= GAS_COLLISION_THRESHOLD_MOLAR_MASS) + success = FALSE + break + if(success) + molar_mass = potential + break + + specific_heat = rand(3 * 10, 300 * 10) / 10 diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index 5d1dbd49bee..643e387e9ab 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -1,19 +1,18 @@ /datum/gas_mixture - //Associative list of gas moles. - //Gases with 0 moles are not tracked and are pruned by update_values() + /// Associative list of gas moles. + /// Gases with 0 moles are not tracked and are pruned by update_values() var/list/gas - //Temperature in Kelvin of this gas mix. + /// Temperature in Kelvin of this gas mix. var/temperature = 0 - - //Sum of all the gas moles in this mix. Updated by update_values() - // DO NOT USE - Planned to be phased out. Use TOTAL_MOLES(). - var/total_moles = 0 - //Volume of this mix. + /// Volume of this mix. var/volume = CELL_VOLUME - //Size of the group this gas_mixture is representing. 1 for singletons. + + /// Sum of all the gas moles in this mix. Updated by update_values() + var/total_moles = 0 + /// Size of the group this gas_mixture is representing. 1 for singletons. var/group_multiplier = 1 - //List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() + /// List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() var/list/graphic /datum/gas_mixture/New(vol = CELL_VOLUME) @@ -40,7 +39,7 @@ return var/self_heat_capacity = heat_capacity() - var/giver_heat_capacity = GLOB.meta_gas_specific_heats[gasid] * moles + var/giver_heat_capacity = global.gas_data.specific_heats[gasid] * moles var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity if(combined_heat_capacity != 0) @@ -96,7 +95,6 @@ update_values() - // Used to equalize the mixture between two zones before sleeping an edge. /datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer) var/our_heatcap = heat_capacity() @@ -133,7 +131,7 @@ /datum/gas_mixture/proc/heat_capacity() . = 0 for(var/g in gas) - . += GLOB.meta_gas_specific_heats[g] * gas[g] + . += global.gas_data.specific_heats[g] * gas[g] . *= group_multiplier /** @@ -196,8 +194,8 @@ return SPECIFIC_ENTROPY_VACUUM //that gas isn't here //group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure) - var/molar_mass = GLOB.meta_gas_molar_mass[gasid] - var/specific_heat = GLOB.meta_gas_specific_heats[gasid] + var/molar_mass = global.gas_data.molar_masses[gasid] * 0.001 + var/specific_heat = global.gas_data.specific_heats[gasid] return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * temperature)) * (molar_mass*specific_heat*temperature)**(2/3) + 1 ) + 15 ) //alternative, simpler equation @@ -266,13 +264,13 @@ var/sum = 0 for(var/g in gas) - if(GLOB.meta_gas_flags[g] & flag) + if(global.gas_data.flags[g] & flag) sum += gas[g] var/datum/gas_mixture/removed = new for(var/g in gas) - if(GLOB.meta_gas_flags[g] & flag) + if(global.gas_data.flags[g] & flag) removed.gas[g] = QUANTIZE((gas[g] / sum) * amount) gas[g] -= removed.gas[g] / group_multiplier @@ -282,13 +280,6 @@ return removed -//Returns the amount of gas that has the given flag, in moles -/datum/gas_mixture/proc/get_by_flag(flag) - . = 0 - for(var/g in gas) - if(GLOB.meta_gas_flags[g] & flag) - . += gas[g] - //Copies gas and temperature from another gas_mixture. /datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample) gas = sample.gas.Copy() @@ -352,14 +343,16 @@ /datum/gas_mixture/proc/get_turf_graphics() . = list() var/list/gases = src.gas - var/list/no_overlay_typecache = GLOB.meta_gas_typecache_no_overlays + var/list/visual_cache = global.gas_data.visuals + var/list/overlay_cache = global.gas_data.visual_images for(var/id in gases) - if(no_overlay_typecache[id]) + if(!visual_cache[id]) continue + var/list/v = visual_cache[id] var/moles = gases[id] - var/list/gas_overlays = GLOB.meta_gas_overlays[id] - if(gas_overlays && moles > GLOB.meta_gas_visibility[id]) - . += gas_overlays[min(FACTOR_GAS_VISIBLE_MAX, CEILING(moles / MOLES_GAS_VISIBLE_STEP, 1))] + if(moles < v[GAS_VISUAL_INDEX_THRESHOLD]) + continue + . += overlay_cache[id][min(round(moles * v[GAS_VISUAL_INDEX_FACTOR]) + 1, GAS_VISUAL_STEP_MAX)] return length(.)? . : null //Equalizes a list of gas mixtures. Used for pipe networks. @@ -450,20 +443,42 @@ update_values() return 1 +/** + * get mass in kilograms + */ /datum/gas_mixture/proc/get_mass() for(var/g in gas) - . += gas[g] * GLOB.meta_gas_molar_mass[g] * group_multiplier + . += gas[g] * global.gas_data.molar_masses[g] * group_multiplier + . *= 0.001 // todo: sort above +//* Getters - -//! Getters //Returns the pressure of the gas mix. Only accurate if there have been no gas modifications since update_values() has been called. /datum/gas_mixture/proc/return_pressure() return (total_moles * R_IDEAL_GAS_EQUATION * temperature) / volume -//! Gas Strings +/** + * amount of gas of given group + */ +/datum/gas_mixture/proc/moles_by_group(group) + . = 0 + for(var/id in gas) + if(global.gas_data.groups[id] & group) + . += gas[id] + +/** + * amount of gas of given flag + */ +/datum/gas_mixture/proc/moles_by_flag(flag) + . = 0 + for(var/id in gas) + if(global.gas_data.flags[id] & flag) + . += gas[id] + +//* Gas Strings + /** * Copies from a specially formatted gas string, taking on its gas values as our own as well as their temperature. * if the gas string does not specify temperature, it'll remain unchanged. @@ -491,11 +506,24 @@ qdel(temp) return TRUE -//! Tile Operations +/** + * Get our gas string + */ +/datum/gas_mixture/proc/get_gas_string() + return "[list2params(gas)][length(gas)? ";TEMP=[temperature]" : ""]" + +/** + * Get gas string of given list of gas at a given temperature + */ +/proc/get_gas_string(list/gas, temperature) + if(!length(gas)) + return "TEMP=[TCMB]" + return "[list2params(gas)];TEMP=[temperature]" + +//* Tile Operations + /** * get the equivalent of a single tile of this gas mixture - * - * TODO: remove group_multiplier, change to tiles_represented */ /datum/gas_mixture/proc/copy_single_tile() RETURN_TYPE(/datum/gas_mixture) @@ -504,7 +532,83 @@ GM.group_multiplier = 1 return GM -//! Sharing; usually used for environmental systems. +//* Scanning + +/datum/gas_mixture/proc/chat_analyzer_scan(group_together, molar_masses, exact) + RETURN_TYPE(/list) + . = list() + update_values() + if(!total_moles) + . += SPAN_WARNING("Pressure: 0 kPa") + return + var/pressure = return_pressure() + . += SPAN_NOTICE("Pressure: [round(pressure, 0.001)] kPa") + . += SPAN_NOTICE("Temperature: [round(temperature, 0.001)]°K ([round(temperature - T0C, 0.001)]°C)") + var/reagents = 0 + var/other = 0 + var/unknown = 0 + var/list/trace_reagent_masses = list() + var/list/trace_other_masses = list() + var/list/trace_unknown_masses = list() + for(var/id in gas) + var/groups = global.gas_data.groups[id] + if((groups & GAS_GROUP_REAGENT) && (group_together & GAS_GROUP_REAGENT)) + reagents += gas[id] + trace_reagent_masses += id + else if((groups & GAS_GROUP_OTHER) && (group_together & GAS_GROUP_OTHER)) + other += gas[id] + trace_other_masses += id + else if((groups & GAS_GROUP_UNKNOWN) && (group_together & GAS_GROUP_UNKNOWN)) + unknown += gas[id] + trace_unknown_masses += id + else + . += SPAN_NOTICE("[global.gas_data.names[id]]: [exact? "[QUANTIZE(gas[id])] mol @ " : ""][round(gas[id] / total_moles * 100, 0.01)]%[molar_masses? " ([global.gas_data.molar_masses[id]] g/mol)" : ""]") + if(reagents) + . += SPAN_NOTICE("Reagents: [exact? "[QUANTIZE(reagents)] mol @ " : ""][round(reagents / total_moles * 100, 0.01)]%") + if(molar_masses) + for(var/id in trace_reagent_masses) + . += SPAN_NOTICE("[FOURSPACES] - [global.gas_data.names[id]] ([global.gas_data.molar_masses[id]] g/mol)") + if(other) + . += SPAN_NOTICE("Other: [exact? "[QUANTIZE(other)] mol @ " : ""][round(other / total_moles * 100, 0.01)]%") + if(molar_masses) + for(var/id in trace_other_masses) + . += SPAN_NOTICE("[FOURSPACES] - [global.gas_data.names[id]] ([global.gas_data.molar_masses[id]] g/mol)") + if(unknown) + . += SPAN_NOTICE("Unknown: [exact? "[QUANTIZE(unknown)] mol @ " : ""][round(unknown / total_moles * 100, 0.01)]%") + if(molar_masses) + for(var/id in trace_unknown_masses) + . += SPAN_NOTICE("[FOURSPACES] - [global.gas_data.names[id]] ([global.gas_data.molar_masses[id]] g/mol)") + + +/datum/gas_mixture/proc/tgui_analyzer_scan(group_together, molar_masses) + . = list() + var/pressure = return_pressure() + .["moles"] = total_moles + .["pressure"] = pressure + .["temperature"] = temperature + var/list/gases = list() + .["gases"] = gases + var/list/masses = list() + .["masses"] = masses + var/list/names = list() + .["names"] = names + .["showMoles"] = molar_masses + for(var/id in gas) + var/groups = global.gas_data.groups[id] + names[id] = global.gas_data.names[id] + if((groups & GAS_GROUP_REAGENT) && (group_together & GAS_GROUP_REAGENT)) + gases["Reagents"] += gas[id] + else if((groups & GAS_GROUP_OTHER) && (group_together & GAS_GROUP_OTHER)) + gases["Other"] += gas[id] + else if((groups & GAS_GROUP_UNKNOWN) && (group_together & GAS_GROUP_UNKNOWN)) + gases["Unknown"] += gas[id] + else + gases[id] += gas[id] + if(molar_masses) + masses[id] = global.gas_data.molar_masses[id] + +//* Sharing; usually used for environmental systems. + /** * Default share gas implementation - shares with another gas_mixture non-canonically * based on connecting tiles. Is just a wrapper to use a lookup table. @@ -626,7 +730,7 @@ var/their_capacity = 0 for(var/id in gases) // in the same loop, we'll calculate their total capacity, at the same time expanding their moles to the true value - their_capacity += GLOB.meta_gas_specific_heats[id] * gases[id] * group_multiplier + their_capacity += global.gas_data.specific_heats[id] * gases[id] * group_multiplier gases[id] *= group_multiplier for(var/id in our_gas) diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 6fcd175161f..df2afc86664 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -1,457 +1,59 @@ -/// List of gases that can't react amongst themselves. KEEP THIS UP TO DATE! -GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide))) +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// -/** - * Converts a gas ID to typepath - */ -/proc/gas_id2path(id) - return GLOB.meta_gas_id_lookup[id] - -//Unomos - global list inits for all of the meta gas lists. -//This setup allows procs to only look at one list instead of trying to dig around in lists-within-lists -GLOBAL_LIST_INIT(meta_gas_specific_heats, meta_gas_heat_list()) -GLOBAL_LIST_INIT(meta_gas_names, meta_gas_name_list()) -GLOBAL_LIST_INIT(meta_gas_visibility, meta_gas_visibility_list()) -GLOBAL_LIST_INIT(meta_gas_overlays, meta_gas_overlay_list()) -GLOBAL_LIST_INIT(meta_gas_dangers, meta_gas_danger_list()) -GLOBAL_LIST_INIT(meta_gas_ids, meta_gas_id_list()) -GLOBAL_LIST_INIT(meta_gas_fusions, meta_gas_fusion_list()) -/// Gas ID to typepath conversion lookup for optimal speed. -GLOBAL_LIST_INIT(meta_gas_id_lookup, meta_gas_id_lookup_list()) -/// Gas flags by gas -GLOBAL_LIST_INIT(meta_gas_flags, meta_gas_flag_list()) -/// Gases by gas flag -GLOBAL_LIST_INIT(meta_gas_by_flag, meta_gas_by_flag_list()) -/// Gas molar mass by gas -GLOBAL_LIST_INIT(meta_gas_molar_mass, meta_gas_molar_mass_list()) -/// Typecache of gases with no overlays -GLOBAL_LIST_INIT(meta_gas_typecache_no_overlays, meta_gas_typecache_no_overlays_list()) -/// The reagents gases give mobs when breathed -GLOBAL_LIST_INIT(meta_gas_reagent_id, meta_gas_reagent_id_list()) -/// The amount of the reagents gases give mobs -GLOBAL_LIST_INIT(meta_gas_reagent_amount, meta_gas_reagent_amount_list()) - - -/proc/meta_gas_heat_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.specific_heat) - -/proc/meta_gas_name_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.name) - -/proc/meta_gas_visibility_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.moles_visible) - -/proc/meta_gas_overlay_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = 0 //gotta make sure if(GLOB.meta_gas_overlays[gaspath]) doesn't break - if(initial(gas.moles_visible) != null) - .[gas_path] = new /list(FACTOR_GAS_VISIBLE_MAX) - for(var/i in 1 to FACTOR_GAS_VISIBLE_MAX) - var/image/I = image('icons/effects/atmospherics.dmi', icon_state = initial(gas.gas_overlay), layer = FLOAT_LAYER + i) - I.plane = FLOAT_PLANE - I.alpha = i * 255 / FACTOR_GAS_VISIBLE_MAX - I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - I.appearance_flags = RESET_TRANSFORM | RESET_COLOR | RESET_ALPHA | KEEP_APART - .[gas_path][i] = I - -/proc/meta_gas_danger_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.dangerous) - -/proc/meta_gas_id_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.id) - -/proc/meta_gas_fusion_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.fusion_power) - -/proc/meta_gas_id_lookup_list() - var/list/gases = subtypesof(/datum/gas) - . = list() - for(var/gas_path in gases) - var/datum/gas/gas = gas_path - .[initial(gas.id)] = gas_path - -/proc/meta_gas_flag_list() - . = subtypesof(/datum/gas) - for(var/gas_path in .) - var/datum/gas/gas = gas_path - .[gas_path] = initial(gas.gas_flags) - -/proc/meta_gas_by_flag_list() - . = list() - // slightly more tricky - var/list/gases = subtypesof(/datum/gas) - // for each gas - for(var/gas_path in gases) - var/datum/gas/gas = gas_path - // cache flags - var/gas_flags = initial(gas.gas_flags) - // for each bitfield - for(var/i in GLOB.bitflags) - // if we have it - if(gas_flags & i) - // add to list - LAZYADD(.["[i]"], gas_path) - -/proc/meta_gas_molar_mass_list() - . = list() - var/list/gases = subtypesof(/datum/gas) - for(var/gas_path in gases) - var/datum/gas/G = gas_path - .[gas_path] = initial(G.molar_mass) - -/proc/meta_gas_typecache_no_overlays_list() - . = list() - for(var/gastype in subtypesof(/datum/gas)) - var/datum/gas/gasvar = gastype - if (!initial(gasvar.gas_overlay)) - .[gastype] = TRUE - -/proc/meta_gas_reagent_id_list() - . = list() - for(var/gastype in subtypesof(/datum/gas)) - var/datum/gas/gasvar = gastype - if(initial(gasvar.gas_reagent_id)) - .[gastype] = initial(gasvar.gas_reagent_id) - -/proc/meta_gas_reagent_amount_list() - . = list() - for(var/gastype in subtypesof(/datum/gas)) - var/datum/gas/gasvar = gastype - if(initial(gasvar.gas_reagent_amount)) - .[gastype] = initial(gasvar.gas_reagent_amount) -// Visual overlay -/* -/obj/effect/overlay/gas - icon = 'icons/effects/atmospherics.dmi' - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - anchored = TRUE // should only appear in vis_contents, but to be safe - layer = FLY_LAYER - appearance_flags = TILE_BOUND - vis_flags = NONE - -/obj/effect/overlay/gas/New(state, alph) - . = ..() - icon_state = state - alpha = alph -*/ - -/*||||||||||||||/----------\||||||||||||||*\ -||||||||||||||||[GAS DATUMS]|||||||||||||||| -||||||||||||||||\__________/|||||||||||||||| -||||These should never be instantiated. |||| -||||They exist only to make it easier |||| -||||to add a new gas. They are accessed |||| -||||only by meta_gas_list(). |||| -\*||||||||||||||||||||||||||||||||||||||||*/ /datum/gas + //* Intrinsics /// Text ID for things like gas strings. THIS SHOULD NEVER, EVER, BE CHANGED! Pick one and stick with it. Change this and EVERYTHING breaks. The typepath, infact, is more mutable than this! var/id = "" - /// Specific heat in J/(mol*K) - var/specific_heat = 0 /// Textual name var/name = "Unnamed Gas" - /// icon_state in icons/effects/atmospherics.dmi - var/gas_overlay = "" - /// How many moles is required to make this gas visible - var/moles_visible - /// Is this gas considered dangerous? Used by canister and admin logging in general. - var/dangerous = FALSE + /// Gas flags. See [code/__DEFINES/atmospherics/flags.dm] + var/gas_flags = GAS_FLAG_FILTERABLE + /// gas group - flag + var/gas_groups = GAS_GROUP_OTHER + + //* physics + /// Specific heat in J/(mol*K). + /// For chemicals that exist in real life this is the specific heat value under constant volume. + var/specific_heat = 1 + /// Molar mass in kg/mol + var/molar_mass = 1 + + //* reagents + /// reagent id to apply + var/gas_reagent_id + /// reagent amount to add to someone breathing it at minimum moles + var/gas_reagent_amount = 0 + /// minimum moles to affect + var/gas_reagent_threshold = 0 + /// reagent amount to additionally add per mole + var/gas_reagent_factor = 0 + /// reagent amount to not exceed in them + var/gas_reagent_max = 10 + /// reserved for chemgas - how many moles of this gas corrospond to 1 unit; should always be inverse of reagent's side of this lookup + var/gas_reagent_moles = 0.1 + + //* visuals + // todo: visual cache gen should be a proc on /datum/gas so we can do custom colors + /// visual overlay color if any + var/visual_color + /// icon_state in icons/modules/atmospherics/gas.dmi; invisible if null + var/visual_overlay + /// minimum moles to see gas + var/visual_threshold = 0.25 + /// index addition per mole for cache list + var/visual_factor = 1 + + //* reactions /// Fusion is not yet implemented : How much the gas accelerates a fusion reaction var/fusion_power = 0 /// Relative rarity compared to other gases, used when setting up the reactions list. var/rarity = 0 - /// Molar mass in kg/mol - var/molar_mass = 0 - /// Gas flags. See [code/__DEFINES/atmospherics/flags.dm] - var/gas_flags - var/gas_reagent_id //What is the ID of the reagent we want to apply - var/gas_reagent_amount = 0//How much of the reagent is applied - //For a gas that makes up 21% of the atmos you need to be above 1.39, for it to instill any reagents, for lower percentages the number needs to be higher,and viceversa + //* fluff + /// default TLV values for air alarms in format of list(danger low, warning low, warning high, danger high) + /// null to have air alarms ignore this gas entirely + var/list/default_tlv -/datum/gas/oxygen - id = "o2" - name = "Oxygen" - specific_heat = 20 - molar_mass = 0.032 - gas_flags = GAS_FLAG_OXIDIZER - -/datum/gas/nitrogen - id = "n2" - name = "Nitrogen" - specific_heat = 20 - molar_mass = 0.028 - -/datum/gas/carbon_dioxide - id = "co2" - name = "Carbon Dioxide" - specific_heat = 30 - molar_mass = 0.044 - -/datum/gas/phoron - id = "phoron" - name = "Phoron" - //Note that this has a significant impact on TTV yield. - //Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure. - specific_heat = 200 // J/(mol*K) - - //Hypothetical group 14 (same as carbon), period 8 element. - //Using multiplicity rule, it's atomic number is 162 - //and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is: - molar_mass = 0.405 // kg/mol - - gas_overlay = "phoron" - - moles_visible = 0.7 - - gas_flags = GAS_FLAG_FUEL | GAS_FLAG_FUSION_FUEL | GAS_FLAG_CONTAMINANT - -/datum/gas/volatile_fuel - id = "volatile_fuel" - name = "Volatile Fuel" - specific_heat = 253 // J/(mol*K) C8H18 gasoline. Isobaric, but good enough. - molar_mass = 0.114 // kg/mol. same. - - gas_flags = GAS_FLAG_FUEL - -/datum/gas/nitrous_oxide - id = "n2o" - name = "Nitrous Oxide" - specific_heat = 40 - molar_mass = 0.044 - - gas_overlay = "nitrous_oxide" - moles_visible = 1 - - gas_flags = GAS_FLAG_OXIDIZER - -//The following is partially stolen from Nebula -//I am not rewriting our handling of air for this, at least for now. -/datum/gas/helium - id = "helium" - name = "Helium" - specific_heat = 80 - molar_mass = 0.004 - - gas_flags = GAS_FLAG_FUSION_FUEL - -/datum/gas/carbon_monoxide - id = "carbon monoxide" - name = "Carbon Monoxide" - //lore_text = "A highly poisonous gas." - specific_heat = 30 - molar_mass = 0.028 - - //gas_symbol_html = "CO" - //gas_symbol = "CO" - //taste_description = "stale air" - //metabolism = 0.05 // As with helium. - -/datum/gas/methyl_bromide - id = "methyl bromide" - name = "Methyl Bromide" - //lore_text = "A once-popular fumigant and weedkiller." - specific_heat = 42.59 - molar_mass = 0.095 - //gas_symbol_html = "CH3Br" - //gas_symbol = "CH3Br" - //taste_description = "pestkiller" - /*vapor_products = list( - /singleton/material/gas/methyl_bromide = 1 - ) - value = 0.25*/ - -/datum/gas/nitrodioxide - id = "nitrogen dioxide" - name = "Nitrogen Dioxide" - //color = "#ca6409" - specific_heat = 37 - molar_mass = 0.054 - gas_flags = GAS_FLAG_OXIDIZER - //gas_symbol_html = "NO2" - //gas_symbol = "NO2" - -/datum/gas/nitricoxide - id = "nitric oxide" - name = "Nitric Oxide" - specific_heat = 10 - molar_mass = 0.030 - gas_flags = GAS_FLAG_OXIDIZER - //gas_symbol_html = "NO" - //gas_symbol = "NO" - -/datum/gas/methane - id = "methane" - name = "Methane" - specific_heat = 30 - molar_mass = 0.016 - gas_flags = GAS_FLAG_FUEL - //gas_symbol_html = "CH4" - //gas_symbol = "CH4" - -/datum/gas/argon - id = "argon" - name = "Argon" - //lore_text = "Just when you need it, all of your supplies argon." - specific_heat = 10 - molar_mass = 0.018 - //gas_symbol_html = "Ar" - //gas_symbol = "Ar" - //value = 0.25 - -// If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix. -/datum/gas/krypton - id = "krypton" - name = "Krypton" - specific_heat = 5 - molar_mass = 0.036 - //gas_symbol_html = "Kr" - //gas_symbol = "Kr" - //value = 0.25 - -/datum/gas/neon - id = "neon" - name = "Neon" - specific_heat = 20 - molar_mass = 0.01 - //gas_symbol_html = "Ne" - //gas_symbol = "Ne" - //value = 0.25 - -/datum/gas/ammonia - id = "Ammonia" - name = "ammonia" - specific_heat = 20 - molar_mass = 0.017 - //gas_symbol_html = "NH3" - //gas_symbol = "NH3" - //metabolism = 0.05 // So that low dosages have a chance to build up in the body. - //taste_description = "mordant" - //taste_mult = 2 - //lore_text = "A caustic substance commonly used in fertilizer or household cleaners." - //color = "#404030" - //metabolism = REM * 0.5 - //overdose = 5 - -/datum/gas/xenon - id = "Xenon" - name = "xenon" - specific_heat = 3 - molar_mass = 0.054 - //gas_symbol_html = "Xe" - //gas_symbol = "Xe" - //value = 0.25 - -/datum/gas/chlorine - id = "chlorine" - name = "Chlorine" - //color = "#c5f72d" - //gas_overlay_limit = 0.5 - specific_heat = 5 - molar_mass = 0.017 - gas_flags = GAS_FLAG_CONTAMINANT - /*gas_symbol_html = "Cl" - gas_symbol = "Cl" - taste_description = "bleach" - metabolism = REM - heating_point = null - heating_products = null - toxicity = 15*/ - gas_overlay = "chlorine" - moles_visible = 1 - - gas_reagent_id = "sacid" - gas_reagent_amount = 10 - - -/datum/gas/sulfur_dioxide - id = "sulfur dioxide" - name = "Sulfur Dioxide" - specific_heat = 30 - molar_mass = 0.044 - /*gas_symbol_html = "SO2" - gas_symbol = "SO2" - dissolves_into = list( - /singleton/material/solid/sulfur = 0.5, - /singleton/material/gas/oxygen = 0.5 - )*/ - -/datum/gas/hydrogen - id = "hydrogen" - name = "Hydrogen" - //lore_text = "A colorless, flammable gas." - //flags = MAT_FLAG_FUSION_FUEL - //wall_name = "bulkhead" - //construction_difficulty = MAT_VALUE_HARD_DIY - specific_heat = 100 - molar_mass = 0.002 - gas_flags = GAS_FLAG_FUEL | GAS_FLAG_FUSION_FUEL - /*burn_product = /singleton/material/liquid/water - gas_symbol_html = "H2" - gas_symbol = "H2" - dissolves_into = list( - /singleton/material/liquid/fuel/hydrazine = 1 - ) - value = 0.4*/ - -/datum/gas/hydrogen/tritium - id = "tritium" - name = "Tritium" - /*lore_text = "A radioactive isotope of hydrogen. Useful as a fusion reactor fuel material." - mechanics_text = "Tritium is useable as a fuel in some forms of portable generator. It can also be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It fuses hotter than deuterium but is correspondingly more unstable." - color = "#777777" - stack_origin_tech = "{'materials':5}" - value = 0.45 - gas_symbol_html = "T" - gas_symbol = "T"*/ - -/datum/gas/hydrogen/deuterium - id = "Deuterium" - name = "Deuterium" - /*lore_text = "One of the two stable isotopes of hydrogen; also known as heavy hydrogen. Useful as a chemically synthesised fusion reactor fuel material." - mechanics_text = "Deuterium can be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It is the most 'basic' fusion fuel." - flags = MAT_FLAG_FUSION_FUEL | MAT_FLAG_FISSIBLE - color = "#999999" - stack_origin_tech = "{'materials':3}" - gas_symbol_html = "D" - gas_symbol = "D" - value = 0.5 - - neutron_interactions = list( - INTERACTION_ABSORPTION = 1250 - ) - absorption_products = list( - /singleton/material/gas/hydrogen/tritium = 1 - ) - neutron_absorption = 5 - neutron_cross_section = 3*/ - -//Special gas type that are very powerful and shouldnt be avaiable in large portions -/datum/gas/vimur - id = "vimur" - name = "Vimur" - specific_heat = 500 // J/(mol*K) //250% the heat capacity of phoron - molar_mass = 0.054 // Standard Mass of xenon - - gas_overlay = "vimur" - moles_visible = 0.1 + // todo: combustion enthalpies / oxidizer powers + // todo: combustion product gases diff --git a/code/modules/atmospherics/gasmixtures/gas_types/core.dm b/code/modules/atmospherics/gasmixtures/gas_types/core.dm new file mode 100644 index 00000000000..747573b9f9c --- /dev/null +++ b/code/modules/atmospherics/gasmixtures/gas_types/core.dm @@ -0,0 +1,82 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/datum/gas/oxygen + id = GAS_ID_OXYGEN + name = "O2" + + specific_heat = 21 + molar_mass = 32 + gas_flags = GAS_FLAG_OXIDIZER | GAS_FLAG_FILTERABLE | GAS_FLAG_CORE + gas_groups = GAS_GROUP_CORE + + default_tlv = list(16, 19, 70, 100) + +/datum/gas/nitrogen + id = GAS_ID_NITROGEN + name = "N2" + + specific_heat = 20.8 + molar_mass = 28 + gas_flags = GAS_FLAG_FILTERABLE | GAS_FLAG_CORE + gas_groups = GAS_GROUP_CORE + + default_tlv = list(0, 0, 135, 140) + +/datum/gas/carbon_dioxide + id = GAS_ID_CARBON_DIOXIDE + name = "CO2" + + specific_heat = 28.82 + molar_mass = 44 + gas_flags = GAS_FLAG_FILTERABLE | GAS_FLAG_CORE + gas_groups = GAS_GROUP_CORE + + default_tlv = list(0, 0, 5, 10) + +/datum/gas/nitrous_oxide + id = GAS_ID_NITROUS_OXIDE + name = "N2O" + + visual_overlay = "nitrous_oxide" + visual_threshold = 1 + + specific_heat = 30.36 + molar_mass = 44 + gas_flags = GAS_FLAG_OXIDIZER | GAS_FLAG_FILTERABLE | GAS_FLAG_CORE + gas_groups = GAS_GROUP_CORE + + default_tlv = list(0, 0, 3, 7) + +/datum/gas/hydrogen + id = GAS_ID_HYDROGEN + name = "H2" + + specific_heat = 20.32 + molar_mass = 2 + gas_flags = GAS_FLAG_FUEL | GAS_FLAG_FUSION_FUEL | GAS_FLAG_FILTERABLE | GAS_FLAG_CORE + gas_groups = GAS_GROUP_CORE + + default_tlv = list(0, 0, 0.25, 1) + +/datum/gas/phoron + id = GAS_ID_PHORON + name = "PHR" + + visual_overlay = "phoron" + visual_threshold = 0.7 + + // Hypothetical group 14, period 8 element + // Atomic number 162 + // Neutron/Proton ratio 1.5 + molar_mass = 405 + // wonder scifi carbon-group element + // we're going to assume it's a polyatomic gas + // infact while we're at it why not just assume it's some + // weird magic element that naturally forms complex structures like + // carbon nanotubes or something lol i'm sure that'll justify this value + specific_heat = 207.52 + gas_flags = GAS_FLAG_FUEL | GAS_FLAG_FUSION_FUEL | GAS_FLAG_CONTAMINANT | GAS_FLAG_FILTERABLE | GAS_FLAG_CORE + gas_groups = GAS_GROUP_CORE + + default_tlv = list(0, 0, 0, 0.5) diff --git a/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm b/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm new file mode 100644 index 00000000000..f456bf42360 --- /dev/null +++ b/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm @@ -0,0 +1,201 @@ +// todo: eithre rename or remove this and overhaul its uses, fucks sakes. +/datum/gas/volatile_fuel + id = GAS_ID_VOLATILE_FUEL + name = "Volatile Fuel" + specific_heat = 253 // J/(mol*K) C8H18 gasoline. Isobaric, but good enough. + molar_mass = 1000 * 0.114 // kg/mol. same. + + gas_flags = GAS_FLAG_FUEL + +//The following is partially stolen from Nebula +//I am not rewriting our handling of air for this, at least for now. +/datum/gas/helium + id = GAS_ID_HELIUM + name = "Helium" + specific_heat = 80 + molar_mass = 1000 * 0.004 + + gas_flags = GAS_FLAG_FUSION_FUEL + +/datum/gas/carbon_monoxide + id = GAS_ID_CARBON_MONOXIDE + name = "Carbon Monoxide" + //lore_text = "A highly poisonous gas." + specific_heat = 30 + molar_mass = 1000 * 0.028 + + //gas_symbol_html = "CO" + //gas_symbol = "CO" + //taste_description = "stale air" + //metabolism = 0.05 // As with helium. + +/datum/gas/methyl_bromide + id = GAS_ID_METHYL_BROMIDE + name = "Methyl Bromide" + //lore_text = "A once-popular fumigant and weedkiller." + specific_heat = 42.59 + molar_mass = 1000 * 0.095 + //gas_symbol_html = "CH3Br" + //gas_symbol = "CH3Br" + //taste_description = "pestkiller" + /*vapor_products = list( + /singleton/material/gas/methyl_bromide = 1 + ) + value = 0.25*/ + +/datum/gas/nitrodioxide + id = GAS_ID_NITROGEN_DIOXIDE + name = "Nitrogen Dioxide" + //color = "#ca6409" + specific_heat = 37 + molar_mass = 1000 * 0.054 + gas_flags = GAS_FLAG_OXIDIZER + //gas_symbol_html = "NO2" + //gas_symbol = "NO2" + +/datum/gas/nitricoxide + id = GAS_ID_NITRIC_OXIDE + name = "Nitric Oxide" + specific_heat = 10 + molar_mass = 1000 * 0.030 + gas_flags = GAS_FLAG_OXIDIZER + //gas_symbol_html = "NO" + //gas_symbol = "NO" + +/datum/gas/methane + id = GAS_ID_METHANE + name = "Methane" + specific_heat = 30 + molar_mass = 1000 * 0.016 + gas_flags = GAS_FLAG_FUEL + //gas_symbol_html = "CH4" + //gas_symbol = "CH4" + +/datum/gas/argon + id = GAS_ID_ARGON + name = "Argon" + //lore_text = "Just when you need it, all of your supplies argon." + specific_heat = 10 + molar_mass = 1000 * 0.018 + //gas_symbol_html = "Ar" + //gas_symbol = "Ar" + //value = 0.25 + +// If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix. +/datum/gas/krypton + id = GAS_ID_KRYPTON + name = "Krypton" + specific_heat = 5 + molar_mass = 1000 * 0.036 + //gas_symbol_html = "Kr" + //gas_symbol = "Kr" + //value = 0.25 + +/datum/gas/neon + id = GAS_ID_NEON + name = "Neon" + specific_heat = 20 + molar_mass = 1000 * 0.01 + //gas_symbol_html = "Ne" + //gas_symbol = "Ne" + //value = 0.25 + +/datum/gas/ammonia + id = GAS_ID_AMMONIA + name = "Ammonia" + specific_heat = 20 + molar_mass = 1000 * 0.017 + //gas_symbol_html = "NH3" + //gas_symbol = "NH3" + //metabolism = 0.05 // So that low dosages have a chance to build up in the body. + //taste_description = "mordant" + //taste_mult = 2 + //lore_text = "A caustic substance commonly used in fertilizer or household cleaners." + //color = "#404030" + //metabolism = REM * 0.5 + //overdose = 5 + +/datum/gas/xenon + id = GAS_ID_XENON + name = "Xenon" + specific_heat = 3 + molar_mass = 1000 * 0.054 + //gas_symbol_html = "Xe" + //gas_symbol = "Xe" + //value = 0.25 + +/datum/gas/chlorine + id = GAS_ID_CHLORINE + name = "Chlorine" + //color = "#c5f72d" + //visual_overlay_limit = 0.5 + specific_heat = 5 + molar_mass = 1000 * 0.017 + gas_flags = GAS_FLAG_CONTAMINANT + /*gas_symbol_html = "Cl" + gas_symbol = "Cl" + taste_description = "bleach" + metabolism = REM + heating_point = null + heating_products = null + toxicity = 15*/ + visual_overlay = "chlorine" + visual_threshold = 1 + + gas_reagent_id = "sacid" + gas_reagent_amount = 10 + + +/datum/gas/sulfur_dioxide + id = GAS_ID_SULFUR_DIOXIDE + name = "Sulfur Dioxide" + specific_heat = 30 + molar_mass = 1000 * 0.044 + /*gas_symbol_html = "SO2" + gas_symbol = "SO2" + dissolves_into = list( + /singleton/material/solid/sulfur = 0.5, + /singleton/material/gas/oxygen = 0.5 + )*/ + +/datum/gas/tritium + id = GAS_ID_TRITIUM + name = "Tritium" + /*lore_text = "A radioactive isotope of hydrogen. Useful as a fusion reactor fuel material." + mechanics_text = "Tritium is useable as a fuel in some forms of portable generator. It can also be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It fuses hotter than deuterium but is correspondingly more unstable." + color = "#777777" + stack_origin_tech = "{'materials':5}" + value = 0.45 + gas_symbol_html = "T" + gas_symbol = "T"*/ + +/datum/gas/deuterium + id = GAS_ID_DEUTERIUM + name = "Deuterium" + /*lore_text = "One of the two stable isotopes of hydrogen; also known as heavy hydrogen. Useful as a chemically synthesised fusion reactor fuel material." + mechanics_text = "Deuterium can be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It is the most 'basic' fusion fuel." + flags = MAT_FLAG_FUSION_FUEL | MAT_FLAG_FISSIBLE + color = "#999999" + stack_origin_tech = "{'materials':3}" + gas_symbol_html = "D" + gas_symbol = "D" + value = 0.5 + + neutron_interactions = list( + INTERACTION_ABSORPTION = 1250 + ) + absorption_products = list( + /singleton/material/gas/hydrogen/tritium = 1 + ) + neutron_absorption = 5 + neutron_cross_section = 3*/ + +//Special gas type that are very powerful and shouldnt be avaiable in large portions +/datum/gas/vimur + id = GAS_ID_VIMUR + name = "Vimur" + specific_heat = 500 // J/(mol*K) //250% the heat capacity of phoron + molar_mass = 1000 * 0.054 // Standard Mass of xenon + + visual_overlay = "vimur" + visual_threshold = 0.1 diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index a3d47caf12c..963b4d2646c 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -18,9 +18,9 @@ //*** Get the fuel and oxidizer amounts for(var/g in gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_FUEL) + if(global.gas_data.flags[g] & GAS_FLAG_FUEL) gas_fuel += gas[g] - if(GLOB.meta_gas_flags[g] & GAS_FLAG_OXIDIZER) + if(global.gas_data.flags[g] & GAS_FLAG_OXIDIZER) total_oxidizers += gas[g] gas_fuel *= group_multiplier total_oxidizers *= group_multiplier @@ -85,7 +85,7 @@ //remove_by_flag() and adjust_gas() handle the group_multiplier for us. remove_by_flag(GAS_FLAG_OXIDIZER, used_oxidizers) remove_by_flag(GAS_FLAG_FUEL, used_gas_fuel) - adjust_gas(/datum/gas/carbon_dioxide, used_oxidizers) + adjust_gas(GAS_ID_CARBON_DIOXIDE, used_oxidizers) if(zone) zone.remove_liquidfuel(used_liquid_fuel, !check_combustability()) @@ -104,7 +104,7 @@ /datum/gas_mixture/proc/check_recombustability(list/fuel_objs) . = 0 for(var/g in gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_OXIDIZER && gas[g] >= 0.1) + if(global.gas_data.flags[g] & GAS_FLAG_OXIDIZER && gas[g] >= 0.1) . = 1 break @@ -116,7 +116,7 @@ . = 0 for(var/g in gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_FUEL && gas[g] >= 0.1) + if(global.gas_data.flags[g] & GAS_FLAG_FUEL && gas[g] >= 0.1) . = 1 break @@ -124,7 +124,7 @@ . = 0 CACHE_VSC_PROP(atmos_vsc, /atmos/fire/consumption_rate, fire_consumption_rate) for(var/g in gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_OXIDIZER && QUANTIZE(gas[g] * fire_consumption_rate) >= 0.1) + if(global.gas_data.flags[g] & GAS_FLAG_OXIDIZER && QUANTIZE(gas[g] * fire_consumption_rate) >= 0.1) . = 1 break @@ -136,7 +136,7 @@ . = 0 for(var/g in gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_FUEL && (QUANTIZE(gas[g] * fire_consumption_rate) >= max(0.005, MINIMUM_MOLES_TO_SPARK))) + if(global.gas_data.flags[g] & GAS_FLAG_FUEL && (QUANTIZE(gas[g] * fire_consumption_rate) >= max(0.005, MINIMUM_MOLES_TO_SPARK))) . = 1 break diff --git a/code/modules/atmospherics/gasmixtures/transfer_helpers.dm b/code/modules/atmospherics/gasmixtures/transfer_helpers.dm index 0a8699805bd..f88a407cd5f 100644 --- a/code/modules/atmospherics/gasmixtures/transfer_helpers.dm +++ b/code/modules/atmospherics/gasmixtures/transfer_helpers.dm @@ -1,5 +1,5 @@ // // Helpers for machine transfer, taking into account power draws, max pressures, max volumes, etc. -// // All of these also, if provided with machine parameter, set the machine's last_power_draw and last_transfer_rate. +// // All of these also, if provided with machine parameter, set the machine's last_power_draw_legacy and last_transfer_rate. // /** // * Gas pumping proc diff --git a/code/modules/atmospherics/machinery/_atmospherics_helpers.dm b/code/modules/atmospherics/machinery/_atmospherics_helpers.dm index b01a070b0e7..4f4fbdb81ba 100644 --- a/code/modules/atmospherics/machinery/_atmospherics_helpers.dm +++ b/code/modules/atmospherics/machinery/_atmospherics_helpers.dm @@ -8,9 +8,7 @@ */ -/obj/machinery/atmospherics/var/last_flow_rate = 0 -/obj/machinery/atmospherics/var/last_power_draw = 0 -/obj/machinery/portable_atmospherics/var/last_flow_rate = 0 +/obj/machinery/portable_atmospherics/var/last_flow_rate_legacy = 0 /obj/machinery/atmospherics/var/debug = 0 @@ -35,7 +33,7 @@ transfer_moles = min(source.total_moles, transfer_moles) //Calculate the amount of energy required and limit transfer_moles based on available power - var/specific_power = calculate_specific_power(source, sink)/ATMOS_PUMP_EFFICIENCY //this has to be calculated before we modify any gas mixtures + var/specific_power = calculate_specific_power(source, sink)/ATMOS_ABSTRACT_PUMP_EFFICIENCY //this has to be calculated before we modify any gas mixtures if (!isnull(available_power) && specific_power > 0)//specific_power > 0 means we need to use power to move moles, otherwise we can get away with just letting it flow passive transfer_moles = min(transfer_moles, available_power / specific_power) @@ -45,7 +43,7 @@ //Update flow rate meter if (istype(M, /obj/machinery/atmospherics)) var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + A.last_flow_rate_legacy = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here if (A.debug) A.visible_message("[A]: power avaiable to move gases: [available_power] W") @@ -56,7 +54,7 @@ if (istype(M, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + P.last_flow_rate_legacy = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here var/datum/gas_mixture/removed = source.remove(transfer_moles) if (!removed) //Just in case @@ -87,13 +85,13 @@ //Update flow rate meter if (istype(M, /obj/machinery/atmospherics)) var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + A.last_flow_rate_legacy = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here if (A.debug) A.visible_message("[A]: moles transferred = [transfer_moles] mol") if (istype(M, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + P.last_flow_rate_legacy = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here var/datum/gas_mixture/removed = source.remove(transfer_moles) if(!removed) //Just in case @@ -108,7 +106,7 @@ //total_transfer_moles - Limits the amount of moles to scrub. The actual amount of gas scrubbed may also be limited by available_power, if given. //available_power - the maximum amount of power that may be used when scrubbing gas. If null then the scrubbing is not limited by power. /proc/scrub_gas(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null) - if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing + if (source.total_moles < MINIMUM_MOLES_TO_SCRUB) //if we cant transfer enough gas just stop to avoid further processing return -1 filtering = filtering & source.gas //only filter gasses that are actually there. DO NOT USE &= @@ -117,14 +115,14 @@ var/total_filterable_moles = 0 //the total amount of filterable gas var/list/specific_power_gas = list() //the power required to remove one mole of pure gas, for each gas type for (var/g in filtering) - if (source.gas[g] < MINIMUM_MOLES_TO_FILTER) + if (source.gas[g] < MINIMUM_MOLES_TO_SCRUB) continue - var/specific_power = calculate_specific_power_gas(g, source, sink)/ATMOS_FILTER_EFFICIENCY + var/specific_power = calculate_specific_power_gas(g, source, sink)/ATMOS_ABSTRACT_SCRUB_EFFICIENCY specific_power_gas[g] = specific_power total_filterable_moles += source.gas[g] - if (total_filterable_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing + if (total_filterable_moles < MINIMUM_MOLES_TO_SCRUB) //if we cant transfer enough gas just stop to avoid further processing return -1 //now that we know the total amount of filterable gas, we can calculate the amount of power needed to scrub one mole of gas @@ -143,16 +141,16 @@ if (!isnull(available_power) && total_specific_power > 0) total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power) - if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing + if (total_transfer_moles < MINIMUM_MOLES_TO_SCRUB) //if we cant transfer enough gas just stop to avoid further processing return -1 //Update flow rate var if (istype(M, /obj/machinery/atmospherics)) var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + A.last_flow_rate_legacy = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here if (istype(M, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + P.last_flow_rate_legacy = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here var/power_draw = 0 for (var/g in filtering) @@ -172,81 +170,6 @@ return power_draw -//Generalized gas filtering proc. -//Filtering is a bit different from scrubbing. Instead of selectively moving the targeted gas types from one gas mix to another, filtering splits -//the input gas into two outputs: one that contains /only/ the targeted gas types, and another that completely clean of the targeted gas types. -//filtering - A list of gasids to be filtered. These gasses get moved to sink_filtered, while the other gasses get moved to sink_clean. -//total_transfer_moles - Limits the amount of moles to input. The actual amount of gas filtered may also be limited by available_power, if given. -//available_power - the maximum amount of power that may be used when filtering gas. If null then the filtering is not limited by power. -/proc/filter_gas(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_filtered, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null) - if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - filtering = filtering & source.gas //only filter gasses that are actually there. DO NOT USE &= - - var/total_specific_power = 0 //the power required to remove one mole of input gas - var/total_filterable_moles = 0 //the total amount of filterable gas - var/total_unfilterable_moles = 0 //the total amount of non-filterable gas - var/list/specific_power_gas = list() //the power required to remove one mole of pure gas, for each gas type - for (var/g in source.gas) - if (source.gas[g] < MINIMUM_MOLES_TO_FILTER) - continue - - if (g in filtering) - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_FILTER_EFFICIENCY - total_filterable_moles += source.gas[g] - else - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_FILTER_EFFICIENCY - total_unfilterable_moles += source.gas[g] - - var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power += specific_power_gas[g]*ratio - - //Figure out how much of each gas to filter - if (isnull(total_transfer_moles)) - total_transfer_moles = source.total_moles - else - total_transfer_moles = min(total_transfer_moles, source.total_moles) - - //limit transfer_moles based on available power - if (!isnull(available_power) && total_specific_power > 0) - total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power) - - if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //Update flow rate var - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - var/datum/gas_mixture/removed = source.remove(total_transfer_moles) - if (!removed) //Just in case - return -1 - - var/filtered_power_used = 0 //power used to move filterable gas to sink_filtered - var/unfiltered_power_used = 0 //power used to move unfilterable gas to sink_clean - for (var/g in removed.gas) - var/power_used = specific_power_gas[g]*removed.gas[g] - - if (g in filtering) - //use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop. - sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=0) - removed.adjust_gas(g, -removed.gas[g], update=0) - filtered_power_used += power_used - else - unfiltered_power_used += power_used - - sink_filtered.update_values() - removed.update_values() - - sink_clean.merge(removed) - - return filtered_power_used + unfiltered_power_used - //For omni devices. Instead filtering is an associative list mapping gasids to gas mixtures. //I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call update_values() as much) //filter_gas can be removed and replaced with this proc if need be. @@ -266,10 +189,10 @@ if (g in filtering) var/datum/gas_mixture/sink_filtered = filtering[g] - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_FILTER_EFFICIENCY + specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_ABSTRACT_FILTER_EFFICIENCY total_filterable_moles += source.gas[g] else - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_FILTER_EFFICIENCY + specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_ABSTRACT_FILTER_EFFICIENCY total_unfilterable_moles += source.gas[g] var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix @@ -291,10 +214,10 @@ //Update Flow Rate var if (istype(M, /obj/machinery/atmospherics)) var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + A.last_flow_rate_legacy = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here if (istype(M, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here + P.last_flow_rate_legacy = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here var/datum/gas_mixture/removed = source.remove(total_transfer_moles) if (!removed) //Just in case @@ -349,7 +272,7 @@ if (isnull(total_mixing_moles) || total_mixing_moles > this_mixing_moles) total_mixing_moles = this_mixing_moles - source_specific_power[source] = calculate_specific_power(source, sink)*mix_ratio/ATMOS_FILTER_EFFICIENCY + source_specific_power[source] = calculate_specific_power(source, sink)*mix_ratio/ATMOS_ABSTRACT_FILTER_EFFICIENCY total_specific_power += source_specific_power[source] total_input_volume += source.volume total_input_moles += source.total_moles @@ -372,10 +295,10 @@ //Update flow rate var if (istype(M, /obj/machinery/atmospherics)) var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here + A.last_flow_rate_legacy = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here if (istype(M, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here + P.last_flow_rate_legacy = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here var/total_power_draw = 0 for (var/datum/gas_mixture/source in mix_sources) @@ -411,7 +334,8 @@ return specific_power -//Calculates the amount of power needed to move one mole of a certain gas from source to sink. +// Calculates the amount of power needed to move one mole of a certain gas from source to sink. +// returns wattage /proc/calculate_specific_power_gas(var/gasid, datum/gas_mixture/source, datum/gas_mixture/sink) //Calculate the amount of energy required var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature diff --git a/code/modules/atmospherics/machinery/air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm.dm new file mode 100644 index 00000000000..a8bb4940f57 --- /dev/null +++ b/code/modules/atmospherics/machinery/air_alarm.dm @@ -0,0 +1,782 @@ +GLOBAL_LIST_EMPTY(air_alarms) + +#define DECLARE_TLV_VALUES var/red_min; var/yel_min; var/yel_max; var/red_max; var/tlv_comparitor; +#define LOAD_TLV_VALUES(x, y) red_min = x[1]; yel_min = x[2]; yel_max = x[3]; red_max = x[4]; tlv_comparitor = y; +#define TEST_TLV_VALUES (((tlv_comparitor >= red_max && red_max > 0) || tlv_comparitor <= red_min) ? AIR_ALARM_RAISE_DANGER : ((tlv_comparitor >= yel_max && yel_max > 0) || tlv_comparitor <= yel_min) ? AIR_ALARM_RAISE_WARNING : AIR_ALARM_RAISE_OKAY) + +#define MAX_TEMPERATURE 90 +#define MIN_TEMPERATURE -40 + +//all air alarms in area are connected via magic +/area + var/obj/machinery/air_alarm/master_air_alarm + +/obj/machinery/air_alarm + name = "alarm" + desc = "Used to control various station atmospheric systems. The light indicates the current air status of the area." + icon = 'icons/obj/monitors.dmi' + icon_state = "alarm0" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + anchored = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 80 + active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. + power_channel = ENVIRON + req_one_access = list(ACCESS_ENGINEERING_ATMOS, ACCESS_ENGINEERING_ENGINE) + clicksound = "button" + clickvol = 30 + //blocks_emissive = NONE + light_power = 0.25 + + /// The area we're registered to + var/area/registered_area + /// keys are gas group names + /// values are TLV lists + var/list/tlv_groups = list() + /// keys are gas ids + /// values are TLV lists + var/list/tlv_ids = list() + /// pressure tlv list + var/list/tlv_pressure + /// temperature tlv list + var/list/tlv_temperature + /// mode + var/mode = AIR_ALARM_MODE_SCRUB + + var/alarm_id = null + ///Whether to use automatic breach detection or not + var/breach_detection = TRUE + var/frequency = 1439 + //var/skipprocess = 0 //Experimenting + var/alarm_frequency = 1437 + var/remote_control = FALSE + var/rcon_setting = RCON_AUTO + var/rcon_time = 0 + var/locked = TRUE + ///If it's been screwdrivered open. + panel_open = FALSE + var/aidisabled = FALSE + var/shorted = FALSE + circuit = /obj/item/circuitboard/airalarm + //armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 90, ACID = 30) + + var/datum/wires/alarm/wires + + var/area_uid + var/area/alarm_area + + var/target_temperature = T20C + var/regulating_temperature = 0 + + var/datum/radio_frequency/radio_connection + + var/danger_level = 0 + var/pressure_dangerlevel = 0 + + var/report_danger_level = 1 + ///If the alarms from this machine are visible on consoles + var/alarms_hidden = FALSE + +/obj/machinery/air_alarm/Initialize(mapload) + . = ..() + GLOB.air_alarms += src + if(!pixel_x && !pixel_y) + offset_airalarm() + first_run() + set_frequency(frequency) + if(!master_is_operating()) + elect_master() + +/obj/machinery/air_alarm/Destroy() + GLOB.air_alarms -= src + unregister_radio(src, frequency) + qdel(wires) + wires = null + if(alarm_area && alarm_area.master_air_alarm == src) + alarm_area.master_air_alarm = null + elect_master(exclude_self = TRUE) + return ..() + +/obj/machinery/air_alarm/proc/offset_airalarm() + pixel_x = (dir & 3) ? 0 : (dir == 4 ? -26 : 26) + pixel_y = (dir & 3) ? (dir == 1 ? -26 : 26) : 0 + +/obj/machinery/air_alarm/proc/first_run() + alarm_area = get_area(src) + registered_area = alarm_area + area_uid = "\ref[alarm_area]" + if(name == "alarm") + name = "[alarm_area.name] Air Alarm" + + if(!wires) + wires = new(src) + + update_icon() + create_tlv() + +/obj/machinery/air_alarm/proc/create_tlv() + if(isnull(tlv_pressure)) + tlv_pressure = AIR_ALARM_MAKE_TLV(0.7 * ONE_ATMOSPHERE, 0.9 * ONE_ATMOSPHERE, 1.1 * ONE_ATMOSPHERE, 1.3 * ONE_ATMOSPHERE) + if(isnull(tlv_temperature)) + tlv_temperature = AIR_ALARM_MAKE_TLV(T0C - 26, T0C, T0C + 35, T0C + 60) + for(var/id in global.gas_data.gas_ids_core) + var/list/default = global.gas_data.default_tlvs[id] + if(isnull(default)) + continue + if(!isnull(tlv_ids[id])) + continue + tlv_ids[id] = default + for(var/group in global.gas_data.gas_group_names_filterable) + if(!isnull(tlv_groups[group])) + continue + tlv_groups[group] = AIR_ALARM_MAKE_TLV(0, 0, 0.5, 1) + +/obj/machinery/air_alarm/process(delta_time) + if((machine_stat & (NOPOWER|BROKEN)) || shorted) + return + + var/turf/simulated/location = src.loc + if(!istype(location)) return//returns if loc is not simulated + + var/datum/gas_mixture/environment = location.return_air() + + //Handle temperature adjustment here. + handle_heating_cooling(environment) + + var/old_level = danger_level + var/old_pressurelevel = pressure_dangerlevel + danger_level = overall_danger_level(environment) + + if(old_level != danger_level) + apply_danger_level(danger_level) + + if(old_pressurelevel != pressure_dangerlevel) + if(breach_detected()) + mode = AIR_ALARM_MODE_OFF + apply_mode() + + if(mode == AIR_ALARM_MODE_CYCLE && environment.return_pressure() < ONE_ATMOSPHERE * 0.05) + mode = AIR_ALARM_MODE_FILL + apply_mode() + + //atmos computer remote control stuff + switch(rcon_setting) + if(RCON_NO) + remote_control = 0 + if(RCON_AUTO) + if(danger_level == 2) + remote_control = 1 + else + remote_control = 0 + if(RCON_YES) + remote_control = 1 + + return + +/obj/machinery/air_alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment) + var/list/tlv = tlv_temperature + var/this_is_fine = AIR_ALARM_TEST_TLV(target_temperature, tlv) + if(!regulating_temperature) + //check for when we should start adjusting temperature + if((this_is_fine == AIR_ALARM_RAISE_OKAY) && abs(environment.temperature - target_temperature) > 2.0 && environment.return_pressure() >= 1) + update_use_power(USE_POWER_ACTIVE) + regulating_temperature = 1 + audible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ + "You hear a click and a faint electronic hum.") + playsound(src, 'sound/machines/click.ogg', 50, 1) + else + //check for when we should stop adjusting temperature + if((this_is_fine != AIR_ALARM_RAISE_OKAY) || abs(environment.temperature - target_temperature) <= 0.5 || environment.return_pressure() < 1) + update_use_power(USE_POWER_IDLE) + regulating_temperature = 0 + audible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ + "You hear a click as a faint electronic humming stops.") + playsound(src, 'sound/machines/click.ogg', 50, 1) + + if(regulating_temperature) + if(target_temperature > T0C + MAX_TEMPERATURE) + target_temperature = T0C + MAX_TEMPERATURE + + if(target_temperature < T0C + MIN_TEMPERATURE) + target_temperature = T0C + MIN_TEMPERATURE + + var/datum/gas_mixture/gas + gas = environment.remove(0.25 * environment.total_moles) + if(gas) + + if(gas.temperature <= target_temperature) //gas heating + var/energy_used = min(gas.get_thermal_energy_change(target_temperature) , active_power_usage) + + gas.adjust_thermal_energy(energy_used) + //use_power(energy_used, ENVIRON) //handle by update_use_power instead + else //gas cooling + var/heat_transfer = min(abs(gas.get_thermal_energy_change(target_temperature)), active_power_usage) + + //Assume the heat is being pumped into the hull which is fixed at 20 C + //none of this is really proper thermodynamics but whatever + + var/cop = gas.temperature / T20C //coefficient of performance -> power used = heat_transfer/cop + + heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power + + heat_transfer = -gas.adjust_thermal_energy(-heat_transfer) //get the actual heat transfer + + //use_power(heat_transfer / cop, ENVIRON) //handle by update_use_power instead + + environment.merge(gas) + +/obj/machinery/air_alarm/proc/overall_danger_level(datum/gas_mixture/environment) + var/environment_pressure = environment.return_pressure() + var/partial_pressure_factor = (R_IDEAL_GAS_EQUATION * environment.temperature) / environment.volume + + var/dangerlevel = AIR_ALARM_TEST_TLV(environment_pressure, tlv_pressure) + if(dangerlevel >= AIR_ALARM_RAISE_DANGER) + return dangerlevel + dangerlevel = max(dangerlevel, AIR_ALARM_TEST_TLV(environment.temperature, tlv_temperature)) + if(dangerlevel >= AIR_ALARM_RAISE_DANGER) + return dangerlevel + + // todo: would be faster to iterate once and store the groups we care about... + + for(var/id in tlv_ids) + var/list/tlv = tlv_ids[id] + var/partial = environment.gas[id] * partial_pressure_factor + dangerlevel = max(dangerlevel, AIR_ALARM_TEST_TLV(partial, tlv)) + if(dangerlevel >= AIR_ALARM_RAISE_DANGER) + return dangerlevel + + for(var/name in tlv_groups) + var/list/tlv = tlv_groups[name] + var/partial = environment.moles_by_group(global.gas_data.gas_group_by_name[name]) * partial_pressure_factor + dangerlevel = max(dangerlevel, AIR_ALARM_TEST_TLV(partial, tlv)) + if(dangerlevel >= AIR_ALARM_RAISE_DANGER) + return dangerlevel + + return dangerlevel + +/// Returns whether this air alarm thinks there is a breach, given the sensors that are available to it. +/obj/machinery/air_alarm/proc/breach_detected() + var/turf/simulated/location = src.loc + + if(!istype(location)) + return FALSE + + if(!breach_detection) + return FALSE + + var/datum/gas_mixture/environment = location.return_air() + var/environment_pressure = environment.return_pressure() + var/list/pressure_levels = tlv_pressure + + if(environment_pressure <= pressure_levels[1]) // Low pressures + switch(mode) + if(AIR_ALARM_MODE_CYCLE) + return FALSE + if(AIR_ALARM_MODE_PANIC) + return FALSE + if(AIR_ALARM_MODE_SIPHON) + return FALSE + if(AIR_ALARM_MODE_REPLACE) + return FALSE + return TRUE + return FALSE + +/obj/machinery/air_alarm/proc/master_is_operating() + return alarm_area && alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.machine_stat & (NOPOWER | BROKEN)) + +/obj/machinery/air_alarm/proc/elect_master(exclude_self = FALSE) + for(var/obj/machinery/air_alarm/AA in alarm_area) + if(exclude_self && AA == src) + continue + if(!(AA.machine_stat & (NOPOWER|BROKEN))) + alarm_area.master_air_alarm = AA + return TRUE + return FALSE + +/obj/machinery/air_alarm/setDir(ndir) + . = ..() + base_pixel_x = 0 + base_pixel_y = 0 + var/turf/T = get_step(get_turf(src), turn(dir, 180)) + if(istype(T) && T.density) + switch(dir) + if(NORTH) + base_pixel_y = -21 + if(SOUTH) + base_pixel_y = 21 + if(WEST) + base_pixel_x = 21 + if(EAST) + base_pixel_x = -21 + reset_pixel_offsets() + +/obj/machinery/air_alarm/update_icon() + cut_overlays() + + if(panel_open) + icon_state = "alarmx" + set_light(0) + //set_light_on(FALSE) + return + if((machine_stat & (NOPOWER|BROKEN)) || shorted) + icon_state = "alarmp" + set_light(0) + //set_light_on(FALSE) + return + + var/icon_level = danger_level + if(alarm_area?.atmosalm) + icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow + + var/new_color = null + switch(icon_level) + if(0) + icon_state = "alarm0" + //add_overlay(mutable_appearance(icon, "alarm_ov0")) + //add_overlay(emissive_appearance(icon, "alarm_ov0")) + new_color = "#03A728" + if(1) + icon_state = "alarm2" //yes, alarm2 is yellow alarm + //add_overlay(mutable_appearance(icon, "alarm_ov2")) + //add_overlay(emissive_appearance(icon, "alarm_ov2")) + new_color = "#EC8B2F" + if(2) + icon_state = "alarm1" + //add_overlay(mutable_appearance(icon, "alarm_ov1")) + //add_overlay(emissive_appearance(icon, "alarm_ov1")) + new_color = "#DA0205" + + set_light(l_range = 2, l_power = 0.25, l_color = new_color) + //set_light_on(TRUE) + +/obj/machinery/air_alarm/receive_signal(datum/signal/signal) + if(machine_stat & (NOPOWER|BROKEN)) + return + if(alarm_area.master_air_alarm != src) + if(master_is_operating()) + return + elect_master() + if(alarm_area.master_air_alarm != src) + return + if(!signal || signal.encryption) + return + var/id_tag = signal.data["tag"] + if(!id_tag) + return + if(signal.data["area"] != area_uid) + return + if(signal.data["sigtype"] != "status") + return + + SStgui.update_uis(src) + +/obj/machinery/air_alarm/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) + +/obj/machinery/air_alarm/proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = TRANSMISSION_RADIO //radio signal + signal.source = src + + signal.data = command + signal.data["tag"] = target + signal.data["sigtype"] = "command" + + radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) +// TO_WORLD("Signal [command] Broadcasted to [target]") + + return 1 + +/obj/machinery/air_alarm/proc/apply_mode(mode) + // set our mode + src.mode = mode + // legacy: propagate mode to other air alarms in the area + //TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area + for(var/obj/machinery/air_alarm/AA in alarm_area) + AA.mode = mode + + switch(mode) + if(AIR_ALARM_MODE_OFF) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE, "power" = FALSE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = FALSE)) + if(AIR_ALARM_MODE_SCRUB) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE, "power" = TRUE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = TRUE)) + if(AIR_ALARM_MODE_REPLACE) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE, "power" = TRUE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = TRUE, "siphon" = TRUE)) + if(AIR_ALARM_MODE_SIPHON, AIR_ALARM_MODE_CYCLE) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE, "power" = FALSE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = TRUE, "siphon" = TRUE)) + if(AIR_ALARM_MODE_PANIC) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE, "power" = FALSE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = TRUE, "siphon" = TRUE, "expand" = TRUE)) + if(AIR_ALARM_MODE_CONTAMINATED) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = TRUE, "expand" = TRUE)) + if(AIR_ALARM_MODE_FILL) + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + if(!pump.controllable_from_alarm || !pump.environmental) + continue + send_signal(pump.id_tag, list("hard_reset" = TRUE)) + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + if(!scrubber.controllable_from_alarm || !scrubber.environmental) + continue + send_signal(scrubber.id_tag, list("hard_reset" = TRUE, "power" = FALSE)) + +/obj/machinery/air_alarm/proc/apply_danger_level(var/new_danger_level) + if(report_danger_level && alarm_area.atmosalert(new_danger_level, src)) + post_alert(new_danger_level) + + update_icon() + +/obj/machinery/air_alarm/proc/post_alert(alert_level) + var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) + if(!frequency) + return + + var/datum/signal/alert_signal = new + alert_signal.source = src + alert_signal.transmission_method = TRANSMISSION_RADIO + alert_signal.data["zone"] = alarm_area.name + alert_signal.data["type"] = "Atmospheric" + + if(alert_level==2) + alert_signal.data["alert"] = "severe" + else if(alert_level==1) + alert_signal.data["alert"] = "minor" + else if(alert_level==0) + alert_signal.data["alert"] = "clear" + + frequency.post_signal(src, alert_signal) + +/obj/machinery/air_alarm/attack_ai(mob/user) + ui_interact(user) + +/obj/machinery/air_alarm/attack_hand(mob/user, list/params) + . = ..() + if(.) + return + return interact(user) + +/obj/machinery/air_alarm/interact(mob/user) + ui_interact(user) + wires.Interact(user) + +/obj/machinery/air_alarm/ui_status(mob/user) + if(isAI(user) && aidisabled) + to_chat(user, "AI control has been disabled.") + else if(!shorted) + return ..() + return UI_CLOSE + +/obj/machinery/air_alarm/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AirAlarm", name, parent_ui) + if(state) + ui.set_state(state) + ui.open() + +/obj/machinery/air_alarm/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + var/datum/gas_mixture/environment = loc.return_air() + .["environment"] = environment.tgui_analyzer_scan(GAS_GROUP_REAGENT | GAS_GROUP_UNKNOWN) + // todo: static data with event hooks for updates for these two + var/list/vents = list() + var/list/scrubbers = list() + for(var/obj/machinery/atmospherics/component/unary/vent_pump/pump as anything in registered_area.vent_pumps) + var/list/returned = pump.ui_vent_data() + returned["name"] = pump.name + vents[pump.id_tag] = returned + for(var/obj/machinery/atmospherics/component/unary/vent_scrubber/scrubber as anything in registered_area.vent_scrubbers) + var/list/returned = scrubber.ui_scrubber_data() + returned["name"] = scrubber.name + scrubbers[scrubber.id_tag] = returned + .["vents"] = vents + .["scrubbers"] = scrubbers + .["mode"] = mode + + //! legacy below + var/list/data = list( + "locked" = locked, + "siliconUser" = issilicon(user), + "remoteUser" = !!ui?.parent_ui, + "danger_level" = danger_level, + "target_temperature" = "[target_temperature - T0C]C", + "rcon" = rcon_setting, + ) + var/area/A = get_area(src) + data["atmos_alarm"] = A?.atmosalm + data["fire_alarm"] = A?.fire + . += data + //! end + +/obj/machinery/air_alarm/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["gasContext"] = global.gas_data.tgui_gas_context() + .["gasTLV"] = tlv_ids + .["groupTLV"] = tlv_groups + .["pressureTLV"] = tlv_pressure + .["temperatureTLV"] = tlv_temperature + +/obj/machinery/air_alarm/proc/push_ui_tlv() + var/list/data = list() + data["gasTLV"] = tlv_ids + data["groupTLV"] = tlv_groups + data["pressureTLV"] = tlv_pressure + data["temperatureTLV"] = tlv_temperature + push_ui_data(data = data) + +/obj/machinery/air_alarm/ui_act(action, params, datum/tgui/ui) + . = ..() + if(.) + return + + // unlocked actions + switch(action) + if("rcon") + //! warning: legacy + var/attempted_rcon_setting = text2num(params["rcon"]) + switch(attempted_rcon_setting) + if(RCON_NO) + rcon_setting = RCON_NO + if(RCON_AUTO) + rcon_setting = RCON_AUTO + if(RCON_YES) + rcon_setting = RCON_YES + return TRUE + if("temperature") + //! warning: legacy + var/list/selected = tlv_temperature + var/max_temperature = min(selected[3] - T0C, MAX_TEMPERATURE) + var/min_temperature = max(selected[2] - T0C, MIN_TEMPERATURE) + var/input_temperature = tgui_input_number(usr, "What temperature would you like the system to mantain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", (target_temperature - T0C), max_temperature, min_temperature) + if(isnum(input_temperature)) + if(input_temperature > max_temperature || input_temperature < min_temperature) + to_chat(usr, "Temperature must be between [min_temperature]C and [max_temperature]C") + else + target_temperature = input_temperature + T0C + return TRUE + + // Account for remote users here. + // Yes, this is kinda snowflaky; however, I would argue it would be far more snowflakey + // to include "custom hrefs" and all the other bullshit that nano states have just for the + // like, two UIs, that want remote access to other UIs. + //! warning: legacy + if((locked && !issilicon(usr) && !istype(ui.state, /datum/ui_state/air_alarm_remote)) || (issilicon(usr) && aidisabled)) + return + + // locked actions + switch(action) + if("vent") + var/id = params["id"] + var/obj/machinery/atmospherics/component/unary/vent_pump/machine = registered_area.vent_pump_by_id(id) + if(isnull(machine) || !machine.controllable_from_alarm) + return TRUE + var/command = params["command"] + var/target = params["target"] + switch(command) + if("direction") + send_signal(id, list("direction" = !machine.pump_direction)) + if("internalPressure") + send_signal(id, list("set_internal_pressure" = text2num(target))) + if("externalPressure") + send_signal(id, list("set_external_pressure" = text2num(target))) + if("internalToggle") + send_signal(id, list("checks_toggle" = ATMOS_VENT_CHECK_INTERNAL)) + if("externalToggle") + send_signal(id, list("checks_toggle" = ATMOS_VENT_CHECK_EXTERNAL)) + if("power") + send_signal(id, list("power" = !machine.use_power)) + return TRUE + if("scrubber") + var/id = params["id"] + var/obj/machinery/atmospherics/component/unary/vent_scrubber/machine = registered_area.vent_scrubber_by_id(id) + if(isnull(machine) || !machine.controllable_from_alarm) + return TRUE + var/command = params["command"] + var/target = params["target"] + switch(command) + if("siphon") + send_signal(id, list("siphon" = !machine.siphoning)) + if("gasID") + send_signal(id, list("scrub_ids_toggle" = list(target))) + if("gasGroup") + send_signal(id, list("scrub_groups_toggle" = text2num(target))) + if("highPower") + send_signal(id, list("expand" = !machine.expanded)) + if("power") + send_signal(id, list("power" = !machine.use_power)) + return TRUE + if("mode") + var/mode = params["mode"] + apply_mode(mode) + return TRUE + if("tlv") + var/entry = params["entry"] + var/index = text2num(params["index"]) + 1 + if((index < AIR_ALARM_TLV_INDEX_MIN) || (index > AIR_ALARM_TLV_INDEX_MAX)) + return TRUE + var/val = clamp(0, text2num(params["val"]), 1000000) + var/list/target + switch(entry) + if("pressure") + target = tlv_pressure + if("temperature") + target = tlv_temperature + else + var/group = global.gas_data.gas_group_by_name[entry] + if(group) + target = tlv_groups[entry] + else + target = tlv_ids[entry] + if(isnull(target)) + return TRUE + target[index] = val + clamp_tlv_list(target, index) + push_ui_tlv() + return TRUE + if("alarm") + //! warning: legacy + if(alarm_area.atmosalert(2, src)) + apply_danger_level(2) + return TRUE + if("reset") + //! warning: legacy + atmos_reset() + return TRUE + if("lock") + //! warning: legacy + if(issilicon(usr) && !wires.is_cut(WIRE_IDSCAN)) + locked = !locked + return TRUE + +/** + * clamps tlv to be sensical + * + * source_indx is the one the user / or something else is changing; rest will be updated to make sense with it. + */ +/obj/machinery/air_alarm/proc/clamp_tlv_list(list/tlv, source_index) + for(var/i in AIR_ALARM_TLV_INDEX_MIN to (source_index - 1)) + if(tlv[i] > tlv[source_index]) + tlv[i] = tlv[source_index] + for(var/i in (source_index + 1) to AIR_ALARM_TLV_INDEX_MAX) + if(tlv[i] < tlv[source_index]) + tlv[i] = tlv[source_index] + +/obj/machinery/air_alarm/proc/atmos_reset() + if(alarm_area.atmosalert(0, src)) + apply_danger_level(0) + update_icon() + +/obj/machinery/air_alarm/attackby(obj/item/W as obj, mob/user as mob) + add_fingerprint(user) + if(alarm_deconstruction_screwdriver(user, W)) + return + if(alarm_deconstruction_wirecutters(user, W)) + return + + if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))// trying to unlock the interface with an ID card + togglelock() + return ..() + +/obj/machinery/air_alarm/verb/togglelock(mob/user as mob) + if(machine_stat & (NOPOWER|BROKEN)) + to_chat(user, "It does nothing.") + return + else + if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) + locked = !locked + to_chat(user, SPAN_NOTICE("You [locked ? "lock" : "unlock"] the Air Alarm interface.")) + else + to_chat(user, SPAN_BOLDWARNING("Access denied.")) + return + +/obj/machinery/air_alarm/AltClick() + ..() + togglelock() + +/obj/machinery/air_alarm/power_change() + ..() + spawn(rand(0,15)) + update_icon() + +#undef LOAD_TLV_VALUES +#undef TEST_TLV_VALUES +#undef DECLARE_TLV_VALUES + +/obj/machinery/air_alarm/alarms_hidden + alarms_hidden = TRUE + +/obj/machinery/air_alarm/angled +// icon = 'icons/obj/wall_machines_angled.dmi' + +/obj/machinery/air_alarm/angled/hidden + alarms_hidden = TRUE + +/obj/machinery/air_alarm/angled/offset_airalarm() + pixel_x = (dir & 3) ? 0 : (dir == 4 ? -21 : 21) + pixel_y = (dir & 3) ? (dir == 1 ? -18 : 20) : 0 + +/obj/machinery/air_alarm/freezer + target_temperature = T0C - 13.15 // Chilly freezer room + +/obj/machinery/air_alarm/freezer/create_tlv() + if(isnull(tlv_temperature)) + tlv_temperature = list(T0C - 40, T0C - 20, T0C + 40, T0C + 60) + return ..() + +/obj/machinery/air_alarm/monitor + report_danger_level = 0 + breach_detection = 0 + +/obj/machinery/air_alarm/nobreach + breach_detection = 0 + +/obj/machinery/air_alarm/server/Initialize(mapload) + . = ..() + req_access = list(ACCESS_SCIENCE_RD, ACCESS_ENGINEERING_ATMOS, ACCESS_ENGINEERING_ENGINE) + setDir(dir) diff --git a/code/modules/atmospherics/machinery/analyzer_hooks.dm b/code/modules/atmospherics/machinery/analyzer_hooks.dm index 303e80dcc8a..9dd52d52b0f 100644 --- a/code/modules/atmospherics/machinery/analyzer_hooks.dm +++ b/code/modules/atmospherics/machinery/analyzer_hooks.dm @@ -25,20 +25,7 @@ return 0 /proc/atmosanalyzer_scan(var/atom/target, var/datum/gas_mixture/mixture, var/mob/user) - var/list/results = list() - - if (mixture && mixture.total_moles > 0) - var/pressure = mixture.return_pressure() - var/total_moles = mixture.total_moles - results += "Pressure: [QUANTIZE(pressure)] kPa" - for(var/mix in mixture.gas) - results += "[GLOB.meta_gas_names[mix]]: [QUANTIZE((mixture.gas[mix] / total_moles) * 100)]%" - results += "Temperature: [QUANTIZE(mixture.temperature-T0C)]°C" - results += "Total Moles: [QUANTIZE(total_moles)]" - else - results += "\The [target] is empty!" - - return results + return mixture.chat_analyzer_scan(GAS_GROUP_UNKNOWN, TRUE, TRUE) /turf/atmosanalyze(var/mob/user) return atmosanalyzer_scan(src, src.air, user) @@ -66,10 +53,12 @@ /obj/machinery/atmospherics/component/unary/atmosanalyze(var/mob/user) return atmosanalyzer_scan(src, src.air_contents, user) +// todo: components should allow each end to be analyzed separately. + /obj/machinery/atmospherics/component/binary/atmosanalyze(var/mob/user) return atmosanalyzer_scan(src, src.air1, user) -/obj/machinery/atmospherics/component/trinary/atmos_filter/atmosanalyze(var/mob/user) +/obj/machinery/atmospherics/component/trinary/filter/atmosanalyze(var/mob/user) return atmosanalyzer_scan(src, src.air1, user) /obj/machinery/atmospherics/component/trinary/mixer/atmosanalyze(var/mob/user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/algae_generator_vr.dm b/code/modules/atmospherics/machinery/components/binary_devices/algae_generator_vr.dm index 8cb2ad900c3..5edb1466299 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/algae_generator_vr.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/algae_generator_vr.dm @@ -31,8 +31,8 @@ var/ui_error = null // For error messages to show up in nano ui. var/datum/gas_mixture/internal = new() - var/const/input_gas = /datum/gas/carbon_dioxide - var/const/output_gas = /datum/gas/oxygen + var/const/input_gas = GAS_ID_CARBON_DIOXIDE + var/const/output_gas = GAS_ID_OXYGEN /obj/machinery/atmospherics/component/binary/algae_farm/filled stored_material = list(MATERIAL_ALGAE = 10000, MATERIAL_CARBON = 0) @@ -63,12 +63,12 @@ ui_error = null update_icon() if(use_power == USE_POWER_IDLE) - last_power_draw = idle_power_usage + last_power_draw_legacy = idle_power_usage else - last_power_draw = 0 + last_power_draw_legacy = 0 return 0 - last_power_draw = active_power_usage + last_power_draw_legacy = active_power_usage // STEP 1 - Check material resources if(stored_material[MATERIAL_ALGAE] < algae_per_mole) @@ -89,19 +89,19 @@ network1.update = 1 if (power_draw > 0) use_power(power_draw) - last_power_draw += power_draw + last_power_draw_legacy += power_draw // STEP 3 - Convert CO2 to O2 (Note: We know our internal group multipier is 1, so just be cool) var/co2_moles = internal.gas[input_gas] if(co2_moles < MINIMUM_MOLES_TO_FILTER) - ui_error = "Insufficient [GLOB.meta_gas_names[input_gas]] to process." + ui_error = "Insufficient [global.gas_data.names[input_gas]] to process." update_icon() return // STEP 4 - Consume the resources var/converted_moles = min(co2_moles, moles_per_tick) use_power(converted_moles * power_per_mole) - last_power_draw += converted_moles * power_per_mole + last_power_draw_legacy += converted_moles * power_per_mole stored_material[MATERIAL_ALGAE] -= converted_moles * algae_per_mole stored_material[MATERIAL_CARBON] += converted_moles * carbon_per_mole @@ -187,8 +187,8 @@ "max" = storage_capacity[M], "percent" = (stored_material[M] / storage_capacity[M] * 100)) data["materials"] = materials_ui - data["last_flow_rate"] = last_flow_rate - data["last_power_draw"] = last_power_draw + data["last_flow_rate"] = last_flow_rate_legacy + data["last_power_draw"] = last_power_draw_legacy data["inputDir"] = dir2text(global.reverse_dir[dir]) data["outputDir"] = dir2text(dir) data["usePower"] = use_power @@ -197,13 +197,13 @@ if(air1 && network1 && node1) data["input"] = list( "pressure" = air1.return_pressure(), - "name" = GLOB.meta_gas_names[input_gas], + "name" = global.gas_data.names[input_gas], "percent" = air1.total_moles > 0 ? round((air1.gas[input_gas] / air1.total_moles) * 100) : 0, "moles" = round(air1.gas[input_gas], 0.01)) if(air2 && network2 && node2) data["output"] = list( "pressure" = air2.return_pressure(), - "name" = GLOB.meta_gas_names[output_gas], + "name" = global.gas_data.names[output_gas], "percent" = air2.total_moles ? round((air2.gas[output_gas] / air2.total_moles) * 100) : 0, "moles" = round(air2.gas[output_gas], 0.01)) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 8c2fc6e5750..b74f9b7643d 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -15,6 +15,7 @@ depth_level = 12 anchored = FALSE pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF + default_deconstruct = null var/kinetic_efficiency = 0.04 //combined kinetic and kinetic-to-electric efficiency var/volume_ratio = 0.2 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 bb0da270d2f..d48486f4f72 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 @@ -107,8 +107,8 @@ /obj/machinery/atmospherics/component/binary/dp_vent_pump/process(delta_time) ..() - last_power_draw = 0 - last_flow_rate = 0 + last_power_draw_legacy = 0 + last_flow_rate_legacy = 0 if(machine_stat & (NOPOWER|BROKEN) || !use_power) return 0 @@ -140,7 +140,7 @@ network2.update = 1 if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) return 1 @@ -201,7 +201,7 @@ /obj/machinery/atmospherics/component/binary/dp_vent_pump/examine(mob/user, dist) . = ..() - . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" + . += "A small gauge in the corner reads [round(last_flow_rate_legacy, 0.1)] L/s; [round(last_power_draw_legacy)] W" /obj/machinery/atmospherics/component/unary/vent_pump/power_change() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/heat_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/heat_pump.dm index 7a78442ca03..8e01b7cee05 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/heat_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/heat_pump.dm @@ -32,7 +32,6 @@ var/lowest_temp = TCMB var/max_temp = 99999999//Need to bottle it somewhere, the sun's core has 15 million kelvin - var/on = 0 var/efficiency = 0 /obj/machinery/atmospherics/component/binary/heat_pump/CtrlClick(mob/user) @@ -150,7 +149,7 @@ var/power_draw = abs(energy_transfered/performance_factor) air2.adjust_thermal_energy(-air1.adjust_thermal_energy(-energy_transfered*efficiency))//only adds the energy actually removed from air one to air two(- infront of air1 because energy was removed) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) if(network1) network1.update = 1 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/massive_gas_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/massive_gas_pump.dm index 99a478cd435..0dc4032904c 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/massive_gas_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/massive_gas_pump.dm @@ -58,22 +58,22 @@ build_network()//built networks if we are missing them network1?.update = 1 network2?.update = 1 - last_flow_rate = last_power_draw = 0 + last_flow_rate_legacy = last_power_draw_legacy = 0 return if((machine_stat & (NOPOWER|BROKEN)) || !use_power) - last_flow_rate = last_power_draw = 0 + last_flow_rate_legacy = last_power_draw_legacy = 0 return if(!power_machine || !power_machine.powernet) if(!power_machine || !power_machine.connect_to_network())//returns 0 if it fails to find a - last_flow_rate = last_power_draw = 0 + last_flow_rate_legacy = last_power_draw_legacy = 0 return//make sure we are connected to a powernet power_rating = power_machine.surplus() * 1000 //update power rateing to what ever is avaiable power_rating = clamp(power_rating, 0, power_level) if(power_rating <= 0) - last_flow_rate = last_power_draw = 0 + last_flow_rate_legacy = last_power_draw_legacy = 0 return//no point in continuing if we dont have any power var/power_draw = -1 @@ -85,7 +85,7 @@ power_draw = pump_gas(src, air1, air2, transfer_moles, power_rating) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw power_machine.draw_power(power_draw * 0.001) if(network1) @@ -112,7 +112,7 @@ if(inoperable() || !anchored || !power_machine.powernet) icon_state = "pump" else if(use_power) - switch(last_power_draw) + switch(last_power_draw_legacy) if(1 to (1 MEGAWATTS)) icon_state = "pump_1" if((1 MEGAWATTS) to (10 MEGAWATTS)) @@ -140,8 +140,8 @@ "pressure_set" = round(target_pressure*100), "max_pressure" = max_pressure_setting, "power_level" = power_level, - "last_flow_rate" = round(last_flow_rate*10), - "last_power_draw" = round(last_power_draw), + "last_flow_rate" = round(last_flow_rate_legacy*10), + "last_power_draw" = round(last_power_draw_legacy), "max_power_draw" = MAX_POWER_FOR_MASSIVE, ) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/massive_heat_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/massive_heat_pump.dm index f60a58d9cb5..b689c6986e2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/massive_heat_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/massive_heat_pump.dm @@ -29,7 +29,6 @@ var/obj/machinery/power/powersupply/power_machine //for funky massive power machines //if its not null the machine attempts to draw from the grid the power machinery is connected to //see examples in the file "code\modules\atmospherics\components\binary_devices\massive_heat_pump.dm" - var/on = 0 var/efficiency = 0 /obj/machinery/atmospherics/component/binary/massive_heat_pump/Initialize(mapload) @@ -94,7 +93,7 @@ air2.adjust_thermal_energy(-air1.adjust_thermal_energy(-energy_transfered*efficiency))//only adds the energy actually removed from air one to air two(- infront of air1 because energy was removed) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw power_machine.draw_power(power_draw * 0.001) if(network1) @@ -146,7 +145,7 @@ if(inoperable() || !anchored || !power_machine.powernet) icon_state = "pump" else if(use_power) - switch(last_power_draw) + switch(last_power_draw_legacy) if(1 to (1 MEGAWATTS)) icon_state = "heat_1" if((1 MEGAWATTS) to (10 MEGAWATTS)) @@ -177,7 +176,7 @@ "power_level" = power_level, "current_temp" = air2.temperature, "sink_temp" = air1.temperature, - "last_power_draw" = round(last_power_draw), + "last_power_draw" = round(last_power_draw_legacy), "max_power_draw" = MAX_POWER_FOR_MASSIVE, "efficiency" = efficiency, ) 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 f4f88bd898c..5582317ccee 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -54,7 +54,7 @@ /obj/machinery/atmospherics/component/binary/passive_gate/process(delta_time) ..() - last_flow_rate = 0 + last_flow_rate_legacy = 0 if(!unlocked) return 0 @@ -94,7 +94,7 @@ if(network2) network2.update = 1 - if (last_flow_rate) + if (last_flow_rate_legacy) flowing = 1 update_icon() @@ -197,7 +197,7 @@ "output_pressure" = round(air2.return_pressure()*100), "regulate_mode" = regulate_mode, "set_flow_rate" = round(set_flow_rate*10), - "last_flow_rate" = round(last_flow_rate*10), + "last_flow_rate" = round(last_flow_rate_legacy*10), ) return data diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 930198c712f..f9742e64dad 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -120,8 +120,8 @@ Thus, the two variables affect pump operation are set in New(): update_underlays() /obj/machinery/atmospherics/component/binary/pump/process(delta_time) - last_power_draw = 0 - last_flow_rate = 0 + last_power_draw_legacy = 0 + last_flow_rate_legacy = 0 if((machine_stat & (NOPOWER|BROKEN)) || !use_power) return @@ -135,7 +135,7 @@ Thus, the two variables affect pump operation are set in New(): power_draw = pump_gas(src, air1, air2, transfer_moles, power_rating) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) if(network1) @@ -190,8 +190,8 @@ Thus, the two variables affect pump operation are set in New(): "on" = use_power, "pressure_set" = round(target_pressure*100), "max_pressure" = max_pressure_setting, - "last_flow_rate" = round(last_flow_rate*10), - "last_power_draw" = round(last_power_draw), + "last_flow_rate" = round(last_flow_rate_legacy*10), + "last_power_draw" = round(last_power_draw_legacy), "max_power_draw" = power_rating, ) diff --git a/code/modules/atmospherics/machinery/components/component.dm b/code/modules/atmospherics/machinery/components/component.dm new file mode 100644 index 00000000000..e2ffac8c168 --- /dev/null +++ b/code/modules/atmospherics/machinery/components/component.dm @@ -0,0 +1,145 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/obj/machinery/atmospherics/component + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OFFLINE_SILICON + default_deconstruct = 4 SECONDS + tool_deconstruct = TOOL_WRENCH + default_unanchor = null + tool_unanchor = null + default_panel = null + tool_panel = null + + /// allow multitool "hijacking" even if this is controlled by something else + /// set to non-null for delay, 0 for instant. + var/default_multitool_hijack = null + /// allow access normally + var/default_access_interface = FALSE + /// need tile pried to access or to be above tile + var/interface_require_exposed = FALSE + /// need tiled pried to access or to be above tile + var/hijack_require_exposed = FALSE + /// tgui interface ID - set to non-null to use new atmospherics UI system + // todo: convert all atmos machinery to new system + var/tgui_interface + /// allowed default ui controls + var/atmos_component_ui_flags = NONE + + /// efficiency multiplier + var/efficiency_multiplier = 1 + + /// are we on? + var/on = FALSE + /// maximum power limit in watts + var/power_maximum = 7500 + /// power setting configured in watts + var/power_setting + /// current power usage in watts + var/power_current = 0 + + //! legacy below + /// legacy power limit in watts + var/power_rating = 7500 + +/obj/machinery/atmospherics/component/Initialize(mapload, newdir) + . = ..() + if(isnull(power_setting)) + power_setting = power_maximum + //! LEGACY IF STATEMENT + // tgui_interface being set usually means we got refactored, and therefore we can be relied on to have + // proper on/off behavior, as opposed to the old "use power idle vs off" behavior." + if(tgui_interface) + set_on(on) + +/obj/machinery/atmospherics/component/proc/set_power(watts) + power_setting = watts + +/obj/machinery/atmospherics/component/proc/set_on(enabled) + on = enabled + if(enabled) + update_use_power(USE_POWER_IDLE) + else + update_use_power(USE_POWER_OFF) + update_icon() + +/obj/machinery/atmospherics/component/process(delta_time) + power_current = 0 + // todo: don't need this after pipenet rework + build_network() + +// todo: use a special state to handle multitool hijacking + +// /obj/machinery/atmospherics/component/ui_state(mob/user, datum/tgui_module/module) +// return GLOB.default_state + +/obj/machinery/atmospherics/component/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["powerRating"] = power_maximum + .["controlFlags"] = atmos_component_ui_flags + +/obj/machinery/atmospherics/component/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(!tgui_interface) + return + .["on"] = on + .["powerSetting"] = power_setting + .["powerUsage"] = power_current + +/obj/machinery/atmospherics/component/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return + if(!tgui_interface) + return + switch(action) + if("togglePower") + if(!(atmos_component_ui_flags & ATMOS_COMPONENT_UI_TOGGLE_POWER)) + return TRUE + set_on(!on) + return TRUE + if("setPowerDraw") + if(!(atmos_component_ui_flags & ATMOS_COMPONENT_UI_SET_POWER)) + return TRUE + var/watts = text2num(params["target"]) + set_power(watts) + return TRUE + +/obj/machinery/atmospherics/component/interact(mob/user) + // todo: interact needs a refactor; doing it like this stops fingerprints from applying. + if(!allowed(user)) + user.action_feedback(SPAN_WARNING("Access denied."), src) + return FALSE + if(!default_access_interface) + return FALSE + // todo: refactor silicon interaction + if(interface_require_exposed && is_hidden_underfloor() && !issilicon(user)) + return FALSE + return ..() + +/obj/machinery/atmospherics/component/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + if(!tgui_interface) + return ..() + + ui = SStgui.try_update_ui(user, src, ui) + if(isnull(ui)) + ui = new(user, src, tgui_interface) + ui.open() + +/obj/machinery/atmospherics/component/multitool_act(obj/item/I, mob/user, flags, hint) + . = ..() + if(.) + return + if(isnull(default_multitool_hijack)) + return FALSE + if(hijack_require_exposed && is_hidden_underfloor()) + user.action_feedback(SPAN_WARNING("You can't reach the controls of [src] while it's covered by flooring."), src) + return TRUE + user.visible_action_feedback( + target = src, + hard_range = MESSAGE_RANGE_CONFIGURATION, + visible_hard = SPAN_WARNING("[user] starts tinkering with [src] using their [I]!"), + ) + if(!do_after(user, default_multitool_hijack, src, mobility_flags = MOBILITY_CAN_USE)) + return TRUE + ui_interact(user) + return TRUE diff --git a/code/modules/atmospherics/machinery/components/omni_devices/_omni_extras.dm b/code/modules/atmospherics/machinery/components/omni_devices/_omni_extras.dm index 14117e2dd98..d567e6a1e29 100644 --- a/code/modules/atmospherics/machinery/components/omni_devices/_omni_extras.dm +++ b/code/modules/atmospherics/machinery/components/omni_devices/_omni_extras.dm @@ -96,14 +96,14 @@ /proc/mode_to_gasid(var/mode) switch(mode) if(ATM_O2) - return /datum/gas/oxygen + return GAS_ID_OXYGEN if(ATM_N2) - return /datum/gas/nitrogen + return GAS_ID_NITROGEN if(ATM_CO2) - return /datum/gas/carbon_dioxide + return GAS_ID_CARBON_DIOXIDE if(ATM_P) - return /datum/gas/phoron + return GAS_ID_PHORON if(ATM_N2O) - return /datum/gas/nitrous_oxide + return GAS_ID_NITROUS_OXIDE else return null diff --git a/code/modules/atmospherics/machinery/components/omni_devices/filter.dm b/code/modules/atmospherics/machinery/components/omni_devices/filter.dm index 715f26a7fcd..09ec71b720c 100644 --- a/code/modules/atmospherics/machinery/components/omni_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/omni_devices/filter.dm @@ -1,6 +1,9 @@ //-------------------------------------------- // Gas filter - omni variant //-------------------------------------------- + +// todo: refactor omni, and add gas group support for filters. + /obj/machinery/atmospherics/component/quaternary/atmos_filter name = "omni gas filter" icon_state = "map_filter" @@ -73,7 +76,7 @@ power_draw = filter_gas_multi(src, filtering_outputs, input_air, output_air, transfer_moles, power_rating) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) if(input.network) @@ -128,7 +131,7 @@ data["ports"] = portData if(output) data["set_flow_rate"] = round(set_flow_rate*10) //because nanoui can't handle rounded decimals. - data["last_flow_rate"] = round(last_flow_rate*10) + data["last_flow_rate"] = round(last_flow_rate_legacy*10) return data diff --git a/code/modules/atmospherics/machinery/components/omni_devices/mixer.dm b/code/modules/atmospherics/machinery/components/omni_devices/mixer.dm index 11e0e7789ed..ee481208f05 100644 --- a/code/modules/atmospherics/machinery/components/omni_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/omni_devices/mixer.dm @@ -112,7 +112,7 @@ power_draw = mix_gas(src, mixing_inputs, output.air, transfer_moles, power_rating) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) for(var/datum/omni_port/P in inputs) @@ -159,7 +159,7 @@ data["ports"] = portData if(output) data["set_flow_rate"] = round(set_flow_rate*10) //because nanoui can't handle rounded decimals. - data["last_flow_rate"] = round(last_flow_rate*10) + data["last_flow_rate"] = round(last_flow_rate_legacy*10) return data diff --git a/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm b/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm index 3d61ae0adf2..c628bd8994e 100644 --- a/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm +++ b/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm @@ -61,8 +61,8 @@ return /obj/machinery/atmospherics/component/quaternary/process(delta_time) - last_power_draw = 0 - last_flow_rate = 0 + last_power_draw_legacy = 0 + last_flow_rate_legacy = 0 if(error_check()) update_use_power(USE_POWER_OFF) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 049bdbbf189..cd89e667103 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -1,188 +1,105 @@ -/obj/machinery/atmospherics/component/trinary/atmos_filter +/obj/machinery/atmospherics/component/trinary/filter + name = "gas filter" icon = 'icons/atmos/filter.dmi' icon_state = "map" + density = FALSE construction_type = /obj/item/pipe/trinary/flippable pipe_state = "filter" - density = 0 level = 1 - name = "Gas filter" - use_power = USE_POWER_IDLE - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 7500 //This also doubles as a measure of how powerful the filter is, in Watts. 7500 W ~ 10 HP + idle_power_usage = 150 + power_maximum = 7500 - var/temp = null // -- TLE + tgui_interface = "AtmosTrinaryFilter" + default_access_interface = TRUE + atmos_component_ui_flags = ATMOS_COMPONENT_UI_TOGGLE_POWER - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_FILTER + /// target gas id, or groups; can be type on init. + var/filtering + // todo: put flow rate at component level + /// flow rate in L + var/flow_setting = ATMOS_DEFAULT_VOLUME_FILTER + /// current flow rate in L + var/flow_current = 0 - /* - Filter types: - -1: Nothing - 0: Phoron: Phoron, Oxygen Agent B - 1: Oxygen: Oxygen ONLY - 2: Nitrogen: Nitrogen ONLY - 3: Carbon Dioxide: Carbon Dioxide ONLY - 4: Sleeping Agent (N2O) - */ - var/filter_type = -1 - var/list/filtered_out = list() - - - var/frequency = 0 - var/datum/radio_frequency/radio_connection - -/obj/machinery/atmospherics/component/trinary/atmos_filter/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/atmospherics/component/trinary/atmos_filter/Initialize(mapload) +/obj/machinery/atmospherics/component/trinary/filter/Initialize(mapload) . = ..() - switch(filter_type) - if(0) //removing hydrocarbons - filtered_out += /datum/gas/phoron - filtered_out += /datum/gas/volatile_fuel - if(1) //removing O2 - filtered_out += /datum/gas/oxygen - if(2) //removing N2 - filtered_out += /datum/gas/nitrogen - if(3) //removing CO2 - filtered_out += /datum/gas/carbon_dioxide - if(4)//removing N2O - filtered_out += /datum/gas/nitrous_oxide - air1.volume = ATMOS_DEFAULT_VOLUME_FILTER air2.volume = ATMOS_DEFAULT_VOLUME_FILTER air3.volume = ATMOS_DEFAULT_VOLUME_FILTER + if(ispath(filtering)) + var/datum/gas/casted = filtering + filtering = initial(casted.id) -/obj/machinery/atmospherics/component/trinary/atmos_filter/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/component/trinary/atmos_filter/update_icon() +/obj/machinery/atmospherics/component/trinary/filter/update_icon_state() if(mirrored) icon_state = "m" else icon_state = "" - - if(!powered()) + if(!powered() || !on) icon_state += "off" else if(node2 && node3 && node1) - icon_state += use_power ? "on" : "off" + icon_state += on ? "on" : "off" else icon_state += "off" - update_use_power(USE_POWER_OFF) + return ..() -/obj/machinery/atmospherics/component/trinary/atmos_filter/process(delta_time) +/obj/machinery/atmospherics/component/trinary/filter/process(delta_time) ..() - last_power_draw = 0 - last_flow_rate = 0 - - if((machine_stat & (NOPOWER|BROKEN)) || !use_power) + if(!on || inoperable()) return - //Figure out the amount of moles to transfer - var/transfer_moles = (set_flow_rate/air1.volume)*air1.total_moles + var/old_mols = air1.total_moles + var/transfer_mols = (flow_setting / air1.volume) * old_mols - var/power_draw = -1 - if (transfer_moles > MINIMUM_MOLES_TO_FILTER) - power_draw = filter_gas(src, filtered_out, air1, air2, air3, transfer_moles, power_rating) + if(transfer_mols > MINIMUM_MOLES_TO_FILTER) + power_current = xgm_filter_gas(air1, air3, air2, filtering, transfer_mols, power_setting * efficiency_multiplier) / efficiency_multiplier + flow_current = (1 - air1.total_moles / old_mols) * air1.volume - if(network2) - network2.update = 1 + // todo: better API for this + network1?.update = TRUE + network2?.update = TRUE + network3?.update = TRUE - if(network3) - network3.update = 1 + if(power_current) + use_power(power_current) + // switch to watts instead of joules by dividing out tick time + power_current /= delta_time - if(network1) - network1.update = 1 +/obj/machinery/atmospherics/component/trinary/filter/proc/set_rate(liters) + flow_setting = clamp(liters, 0, air1.volume) - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - - return 1 - -/obj/machinery/atmospherics/component/trinary/atmos_filter/Initialize(mapload) +/obj/machinery/atmospherics/component/trinary/filter/ui_data(mob/user) . = ..() - if(frequency) - set_frequency(frequency) + .["filtering"] = filtering + .["maxRate"] = air1.volume + .["rate"] = flow_setting -/obj/machinery/atmospherics/component/trinary/atmos_filter/attack_hand(mob/user, list/params) - if(..()) +/obj/machinery/atmospherics/component/trinary/filter/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["atmosContext"] = global.gas_data.tgui_gas_context() + +/obj/machinery/atmospherics/component/trinary/filter/ui_act(action, params) + . = ..() + if(.) return - if(!src.allowed(user)) - to_chat(user, SPAN_WARNING("Access denied.")) - return - ui_interact(user) - -/obj/machinery/atmospherics/component/trinary/atmos_filter/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AtmosFilter", name) - ui.open() - -/obj/machinery/atmospherics/component/trinary/atmos_filter/ui_data(mob/user) - var/list/data = list() - - data["on"] = use_power - data["rate"] = set_flow_rate - data["max_rate"] = air1.volume - data["last_flow_rate"] = round(last_flow_rate, 0.1) - - data["filter_types"] = list() - data["filter_types"] += list(list("name" = "Nothing", "f_type" = -1, "selected" = filter_type == -1)) - data["filter_types"] += list(list("name" = "Phoron", "f_type" = 0, "selected" = filter_type == 0)) - data["filter_types"] += list(list("name" = "Oxygen", "f_type" = 1, "selected" = filter_type == 1)) - data["filter_types"] += list(list("name" = "Nitrogen", "f_type" = 2, "selected" = filter_type == 2)) - data["filter_types"] += list(list("name" = "Carbon Dioxide", "f_type" = 3, "selected" = filter_type == 3)) - data["filter_types"] += list(list("name" = "Nitrous Oxide", "f_type" = 4, "selected" = filter_type == 4)) - - return data - -/obj/machinery/atmospherics/component/trinary/atmos_filter/ui_act(action, params) - if(..()) - return TRUE - switch(action) - if("power") - update_use_power(!use_power) - if("rate") - var/rate = params["rate"] - if(rate == "max") - rate = air1.volume - . = TRUE - else if(text2num(rate) != null) - rate = text2num(rate) - . = TRUE - if(.) - set_flow_rate = clamp(rate, 0, air1.volume) if("filter") - . = TRUE - filter_type = text2num(params["filterset"]) - filtered_out.len = 0 //no need to create new lists unnecessarily - switch(filter_type) - if(0) //removing hydrocarbons - filtered_out += /datum/gas/phoron - filtered_out += /datum/gas/volatile_fuel - if(1) //removing O2 - filtered_out += /datum/gas/oxygen - if(2) //removing N2 - filtered_out += /datum/gas/nitrogen - if(3) //removing CO2 - filtered_out += /datum/gas/carbon_dioxide - if(4)//removing N2O - filtered_out += /datum/gas/nitrous_oxide + var/target = params["target"] + if(!(isnum(target)? global.gas_data.gas_groups_filterable(target) : global.gas_data.gas_id_filterable(target))) + return TRUE + filtering = target + return TRUE + if("rate") + var/liters = params["rate"] + if(isnull(liters)) + return FALSE + set_rate(liters) + return TRUE - update_icon() - -// -// Mirrored Orientation - Flips the output dir to opposite side from normal. -// -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter +/obj/machinery/atmospherics/component/trinary/filter/mirrored icon_state = "mmap" dir = SOUTH initialize_directions = SOUTH|NORTH|EAST diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index c535d6d7789..c0f8e340a36 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -49,8 +49,8 @@ /obj/machinery/atmospherics/component/trinary/mixer/process(delta_time) ..() - last_power_draw = 0 - last_flow_rate = 0 + last_power_draw_legacy = 0 + last_flow_rate_legacy = 0 if((machine_stat & (NOPOWER|BROKEN)) || !use_power) return @@ -72,7 +72,7 @@ network3.update = 1 if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) return 1 diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/molar_filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/molar_filter.dm new file mode 100644 index 00000000000..fd7bafa66c4 --- /dev/null +++ b/code/modules/atmospherics/machinery/components/trinary_devices/molar_filter.dm @@ -0,0 +1,111 @@ +/obj/machinery/atmospherics/component/trinary/molar_filter + name = "molar filter" + desc = "A prototype filter that filters gases based on their molar mass." + icon = 'icons/modules/atmospherics/components/trinary/molar_filter.dmi' + base_icon_state = "molar" + icon_state = "molar-map" + density = FALSE + construction_type = /obj/item/pipe/trinary/flippable + pipe_state = "filter" + level = 1 + + use_power = USE_POWER_IDLE + idle_power_usage = 150 + power_maximum = 7500 + + tgui_interface = "AtmosTrinaryMolarFilter" + default_access_interface = TRUE + atmos_component_ui_flags = ATMOS_COMPONENT_UI_TOGGLE_POWER + + /// inverted mode + var/invert = FALSE + /// lower molar bound + var/mass_lower = 0 + /// upper molar bound + var/mass_upper = 10000 + // todo: put flow rate at component level + /// flow rate in L + var/flow_setting = ATMOS_DEFAULT_VOLUME_FILTER + /// current flow rate in L + var/flow_current = 0 + +/obj/machinery/atmospherics/component/trinary/molar_filter/Initialize(mapload) + . = ..() + air1.volume = ATMOS_DEFAULT_VOLUME_FILTER + air2.volume = ATMOS_DEFAULT_VOLUME_FILTER + air3.volume = ATMOS_DEFAULT_VOLUME_FILTER + +/obj/machinery/atmospherics/component/trinary/molar_filter/update_icon_state() + var/is_on = on && powered() && (node1 && node2 && node3) + icon_state = "[base_icon_state][mirrored? "-f" : ""][(is_on? "-on" : "")]" + return ..() + +/obj/machinery/atmospherics/component/trinary/molar_filter/process(delta_time) + ..() + + if(!on || inoperable()) + return + + var/old_mols = air1.total_moles + var/transfer_mols = (flow_setting / air1.volume) * old_mols + + if(transfer_mols > MINIMUM_MOLES_TO_FILTER) + if(invert) + power_current = xgm_molar_filter_gas(air1, air2, air3, mass_lower, mass_upper, transfer_mols, power_setting * efficiency_multiplier) / efficiency_multiplier + else + power_current = xgm_molar_filter_gas(air1, air3, air2, mass_lower, mass_upper, transfer_mols, power_setting * efficiency_multiplier) / efficiency_multiplier + flow_current = (1 - air1.total_moles / old_mols) * air1.volume + + // todo: better API for this + network1?.update = TRUE + network2?.update = TRUE + network3?.update = TRUE + + if(power_current) + use_power(power_current) + // switch to watts instead of joules by dividing out tick time + power_current /= delta_time + +/obj/machinery/atmospherics/component/trinary/molar_filter/proc/set_rate(liters) + flow_setting = clamp(liters, 0, air1.volume) + +/obj/machinery/atmospherics/component/trinary/molar_filter/ui_data(mob/user) + . = ..() + .["lower"] = mass_lower + .["upper"] = mass_upper + .["invert"] = invert + .["maxRate"] = air1.volume + .["rate"] = flow_setting + +/obj/machinery/atmospherics/component/trinary/molar_filter/ui_act(action, params) + . = ..() + if(.) + return + switch(action) + if("lower") + var/target = params["target"] + target = clamp(text2num(target), 0, INFINITY) + mass_lower = target + mass_upper = max(mass_upper, mass_lower) + return TRUE + if("upper") + var/target = params["target"] + target = clamp(text2num(target), 0, INFINITY) + mass_upper = target + mass_lower = min(mass_lower, mass_upper) + return TRUE + if("invert") + invert = !invert + return TRUE + if("rate") + var/liters = params["rate"] + if(isnull(liters)) + return FALSE + set_rate(liters) + return TRUE + +/obj/machinery/atmospherics/component/trinary/molar_filter/mirrored + dir = SOUTH + initialize_directions = SOUTH|NORTH|EAST + mirrored = TRUE + icon_state = "molar-f-map" diff --git a/code/modules/atmospherics/machinery/components/unary/cold_sink.dm b/code/modules/atmospherics/machinery/components/unary/cold_sink.dm index 85709a23073..96f17418729 100644 --- a/code/modules/atmospherics/machinery/components/unary/cold_sink.dm +++ b/code/modules/atmospherics/machinery/components/unary/cold_sink.dm @@ -14,7 +14,7 @@ var/internal_volume = 600 // L var/max_power_rating = 20000 // Power rating when the usage is turned up to 100 - var/power_setting = 100 + var/power_setting_legacy = 100 var/set_temperature = T20C // Thermostat var/cooling = 0 @@ -77,7 +77,7 @@ data["minGasTemperature"] = 0 data["maxGasTemperature"] = round(T20C+500) data["targetGasTemperature"] = round(set_temperature) - data["powerSetting"] = power_setting + data["powerSetting"] = power_setting_legacy var/temp_class = "good" if(air_contents.temperature > (T0C - 20)) @@ -155,11 +155,11 @@ max_power_rating = initial(max_power_rating) * cap_rating / 2 //more powerful heatsink_temperature = initial(heatsink_temperature) / ((manip_rating + bin_rating) / 2) //more efficient air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating - set_power_level(power_setting) + set_power_level(power_setting_legacy) -/obj/machinery/atmospherics/component/unary/freezer/proc/set_power_level(var/new_power_setting) - power_setting = new_power_setting - power_rating = max_power_rating * (power_setting/100) +/obj/machinery/atmospherics/component/unary/freezer/proc/set_power_level(var/new_power_setting_legacy) + power_setting_legacy = new_power_setting_legacy + power_rating = max_power_rating * (power_setting_legacy/100) /obj/machinery/atmospherics/component/unary/freezer/attackby(var/obj/item/O as obj, var/mob/user as mob) if(default_deconstruction_screwdriver(user, O)) diff --git a/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm index d307391bcfe..e21a782c5cb 100644 --- a/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm @@ -33,11 +33,11 @@ if(!partner) return 0 - if(!air_master || air_master.current_cycle <= update_cycle) + if(!SSair || SSair.current_cycle <= update_cycle) return 0 - update_cycle = air_master.current_cycle - partner.update_cycle = air_master.current_cycle + update_cycle = SSair.current_cycle + partner.update_cycle = SSair.current_cycle var/air_heat_capacity = air_contents.heat_capacity() var/other_air_heat_capacity = partner.air_contents.heat_capacity() diff --git a/code/modules/atmospherics/machinery/components/unary/heat_source.dm b/code/modules/atmospherics/machinery/components/unary/heat_source.dm index c2a16315e36..4e37184dbdc 100644 --- a/code/modules/atmospherics/machinery/components/unary/heat_source.dm +++ b/code/modules/atmospherics/machinery/components/unary/heat_source.dm @@ -14,7 +14,7 @@ var/internal_volume = 600 //L var/max_power_rating = 20000 //power rating when the usage is turned up to 100 - var/power_setting = 100 + var/power_setting_legacy = 100 var/set_temperature = T20C //thermostat var/heating = 0 //mainly for icon updates @@ -91,7 +91,7 @@ data["minGasTemperature"] = 0 data["maxGasTemperature"] = round(max_temperature) data["targetGasTemperature"] = round(set_temperature) - data["powerSetting"] = power_setting + data["powerSetting"] = power_setting_legacy var/temp_class = "average" if(air_contents.temperature > (T20C+40)) @@ -134,11 +134,11 @@ max_power_rating = initial(max_power_rating) * cap_rating / 2 max_temperature = max(initial(max_temperature) - T20C, 0) * ((bin_rating * 4 + cap_rating) / 5) + T20C air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating - set_power_level(power_setting) + set_power_level(power_setting_legacy) -/obj/machinery/atmospherics/component/unary/heater/proc/set_power_level(var/new_power_setting) - power_setting = new_power_setting - power_rating = max_power_rating * (power_setting/100) +/obj/machinery/atmospherics/component/unary/heater/proc/set_power_level(var/new_power_setting_legacy) + power_setting_legacy = new_power_setting_legacy + power_rating = max_power_rating * (power_setting_legacy/100) /obj/machinery/atmospherics/component/unary/heater/attackby(var/obj/item/O as obj, var/mob/user as mob) if(default_deconstruction_screwdriver(user, O)) diff --git a/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm index 0773434506f..4314a1d5a4d 100644 --- a/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm @@ -55,8 +55,8 @@ /obj/machinery/atmospherics/component/unary/outlet_injector/process(delta_time) ..() - last_power_draw = 0 - last_flow_rate = 0 + last_power_draw_legacy = 0 + last_flow_rate_legacy = 0 if((machine_stat & (NOPOWER|BROKEN)) || !use_power) return @@ -69,7 +69,7 @@ power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) if (power_draw >= 0) - last_power_draw = power_draw + last_power_draw_legacy = power_draw use_power(power_draw) if(network) diff --git a/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm b/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm index 82e6e2bf538..d47883ae893 100644 --- a/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm +++ b/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm @@ -9,8 +9,6 @@ dir = SOUTH initialize_directions = SOUTH - var/on = 0 - var/oxygen_content = 10 /obj/machinery/atmospherics/component/unary/oxygen_generator/update_icon() @@ -18,11 +16,8 @@ icon_state = "intact_[on?("on"):("off")]" else icon_state = "exposed_off" - on = 0 - return - /obj/machinery/atmospherics/component/unary/oxygen_generator/New() ..() air_contents.volume = 50 @@ -40,7 +35,7 @@ var/added_oxygen = oxygen_content - total_moles air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) - air_contents.adjust_gas(/datum/gas/oxygen, added_oxygen) + air_contents.adjust_gas(GAS_ID_OXYGEN, added_oxygen) if(network) network.update = 1 diff --git a/code/modules/atmospherics/machinery/components/unary/retro_pump_and_scrubber.dm b/code/modules/atmospherics/machinery/components/unary/retro_pump_and_scrubber.dm deleted file mode 100644 index 2fd98e972dc..00000000000 --- a/code/modules/atmospherics/machinery/components/unary/retro_pump_and_scrubber.dm +++ /dev/null @@ -1,72 +0,0 @@ -//// Retro Styles of vents and scrubbers/// -/// -/// Vents first - -/obj/machinery/atmospherics/component/unary/vent_pump/retro - icon_state = "map_vent" - -/obj/machinery/atmospherics/component/unary/vent_pump/retro/on - use_power = USE_POWER_IDLE - icon_state = "map_vent_out" - -/obj/machinery/atmospherics/component/unary/vent_pump/retro/on/welded - welded = 1 - -/obj/machinery/atmospherics/component/unary/vent_pump/retro/update_icon(safety = 0) - if(!check_icon_cache()) - return - - cut_overlays() - - var/vent_icon = "vent" - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - vent_icon += "h" - - if(welded) - vent_icon += "retro_weld" - else if(!use_power || !node || (machine_stat & (NOPOWER|BROKEN))) - vent_icon += "retro_off" - else - vent_icon += "[pump_direction ? "retro_out" : "retro_in"]" - - add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) - - -////////////////////// -/// Scrubbers now //// - -/obj/machinery/atmospherics/component/unary/vent_scrubber/retro - icon_state = "map_scrubber_off" /// Will get replaced on mapload - -/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/on - use_power = USE_POWER_IDLE - icon_state = "map_scrubber_on" - -/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/on/welded - welded = 1 - -/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/update_icon(safety = 0) - if(!check_icon_cache()) - return - - cut_overlays() - - var/scrubber_icon = "scrubber" - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - if(welded) - scrubber_icon += "retro_weld" - else if(!powered()) - scrubber_icon += "retro_off" - else - scrubber_icon += "[use_power ? "[scrubbing ? "retro_on" : "retro_in"]" : "retro_off"]" - - add_overlay(icon_manager.get_atmos_icon("device", , , scrubber_icon)) diff --git a/code/modules/atmospherics/machinery/components/unary/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary/vent_pump.dm index b35f3ce2170..086b243e4b8 100644 --- a/code/modules/atmospherics/machinery/components/unary/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary/vent_pump.dm @@ -1,49 +1,58 @@ #define DEFAULT_PRESSURE_DELTA 10000 -#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE -#define INTERNAL_PRESSURE_BOUND 0 -#define PRESSURE_CHECKS 1 - -#define PRESSURE_CHECK_EXTERNAL 1 -#define PRESSURE_CHECK_INTERNAL 2 - +// todo: better interface logging /obj/machinery/atmospherics/component/unary/vent_pump + name = "Air Vent" + desc = "Has a valve and pump attached to it" icon = 'icons/atmos/vent_pump.dmi' icon_state = "map_vent" pipe_state = "uvent" - - name = "Air Vent" - desc = "Has a valve and pump attached to it" - use_power = USE_POWER_OFF idle_power_usage = 150 //internal circuitry, friction losses and stuff power_rating = 30000 connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY //connects to regular and supply pipes - var/area/initial_loc + hijack_require_exposed = TRUE + default_multitool_hijack = TRUE + tgui_interface = "AtmosVentPump" + atmos_component_ui_flags = NONE + level = 1 + + /// registered area + var/area/registered_area + /// auto name by area + var/name_from_area = TRUE + /// show on area + var/controllable_from_alarm = TRUE + /// cares about siphoning/filling/alarm modes + var/environmental = TRUE + + /// pump direction + var/pump_direction + /// default pump direction + var/pump_direction_default = ATMOS_VENT_DIRECTION_RELEASE + /// external pressure limit + var/external_pressure_bound = ONE_ATMOSPHERE + /// external pressure limit default + var/external_pressure_bound_default = ONE_ATMOSPHERE + /// internal pressure limit + var/internal_pressure_bound = 0 + /// internal pressure limit default + var/internal_pressure_bound_default = 0 + /// pressure checks flag + var/pressure_checks + /// default pressure checks + var/pressure_checks_default = ATMOS_VENT_CHECK_EXTERNAL + var/area_uid var/id_tag = null - var/hibernate = 0 //Do we even process? - var/pump_direction = 1 //0 = siphoning, 1 = releasing - - var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound = INTERNAL_PRESSURE_BOUND - - var/pressure_checks = PRESSURE_CHECKS - //1: Do not pass external_pressure_bound - //2: Do not pass internal_pressure_bound - //3: Do not pass either - - // Used when handling incoming radio signals requesting default settings - var/external_pressure_bound_default = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound_default = INTERNAL_PRESSURE_BOUND - var/pressure_checks_default = PRESSURE_CHECKS - var/frequency = 1439 var/datum/radio_frequency/radio_connection + var/hibernate = 0 //Do we even process? + var/radio_filter_out var/radio_filter_in @@ -51,8 +60,357 @@ var/datum/looping_sound/air_pump/soundloop */ +/obj/machinery/atmospherics/component/unary/vent_pump/Initialize(mapload) + . = ..() + if(isnull(external_pressure_bound)) + external_pressure_bound = external_pressure_bound_default + if(isnull(internal_pressure_bound)) + internal_pressure_bound = internal_pressure_bound_default + if(isnull(pressure_checks)) + pressure_checks = pressure_checks_default + if(isnull(pump_direction)) + pump_direction = pump_direction_default + /* + soundloop = new(list(src), FALSE) + */ + air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + + icon = null + registered_area = get_area(loc) + area_uid = registered_area.uid + registered_area?.register_vent(src) + if (!id_tag) + assign_uid() + id_tag = num2text(uid) + +/obj/machinery/atmospherics/component/unary/vent_pump/Destroy() + unregister_radio(src, frequency) + registered_area?.unregister_vent(src) + //QDEL_NULL(soundloop) + return ..() + +/obj/machinery/atmospherics/component/unary/vent_pump/update_icon(safety = 0) + if(!check_icon_cache()) + return + + cut_overlays() + + var/vent_icon = "vent" + + var/turf/T = get_turf(src) + if(!istype(T)) + return + + if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + vent_icon += "h" + + if(welded) + vent_icon += "weld" + else if(!on || !node || (machine_stat & (NOPOWER|BROKEN))) + vent_icon += "off" + else + vent_icon += "[pump_direction ? "out" : "in"]" + + add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) + +/obj/machinery/atmospherics/component/unary/vent_pump/update_underlays() + if(..()) + underlays.Cut() + var/turf/T = get_turf(src) + if(!istype(T)) + return + if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + return + else + if(node) + add_underlay(T, node, dir, node.icon_connect_type) + else + add_underlay(T,, dir) + +/obj/machinery/atmospherics/component/unary/vent_pump/hide() + update_icon() + update_underlays() + +/obj/machinery/atmospherics/component/unary/vent_pump/proc/can_pump() + if(machine_stat & (NOPOWER|BROKEN)) + //soundloop.stop() + return 0 + if(!on) + //soundloop.stop() + return 0 + if(welded) + //soundloop.stop() + return 0 + //soundloop.start() + return 1 + +/obj/machinery/atmospherics/component/unary/vent_pump/process(delta_time) + ..() + if (hibernate) + return 1 + if(!node) + set_on(FALSE) + if(!can_pump()) + return 0 + + var/datum/gas_mixture/environment = return_air() + + var/power_draw = -1 + + //Figure out the target pressure difference + var/pressure_delta = get_pressure_delta(environment) + //src.visible_message("DEBUG >>> [src]: pressure_delta = [pressure_delta]") + + if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) + if(pump_direction) //internal -> external + var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) + power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) + else //external -> internal + var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) + + //limit flow rate from turfs + transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here + power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) + + + if (power_draw >= 0) + last_power_draw_legacy = power_draw + use_power(power_draw) + if(network) + network.update = 1 + + return 1 + +/obj/machinery/atmospherics/component/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) + var/pressure_delta = DEFAULT_PRESSURE_DELTA + var/environment_pressure = environment.return_pressure() + + if(pump_direction) //internal -> external + if(pressure_checks & ATMOS_VENT_CHECK_EXTERNAL) + pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here + if(pressure_checks & ATMOS_VENT_CHECK_INTERNAL) + pressure_delta = min(pressure_delta, air_contents.return_pressure() - internal_pressure_bound) //decreasing the pressure here + else //external -> internal + if(pressure_checks & ATMOS_VENT_CHECK_EXTERNAL) + pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here + if(pressure_checks & ATMOS_VENT_CHECK_INTERNAL) + pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.return_pressure()) //increasing the pressure here + + return pressure_delta + +/obj/machinery/atmospherics/component/unary/vent_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "area" = src.area_uid, + "tag" = src.id_tag, + "device" = "AVP", + "power" = on, + "direction" = pump_direction?("release"):("siphon"), + "checks" = pressure_checks, + "internal" = internal_pressure_bound, + "external" = external_pressure_bound, + "timestamp" = world.time, + "sigtype" = "status", + "power_draw" = last_power_draw_legacy, + "flow_rate" = last_flow_rate_legacy, + ) + + radio_connection.post_signal(src, signal, radio_filter_out) + + return 1 + +/obj/machinery/atmospherics/component/unary/vent_pump/atmos_init() + ..() + + //some vents work his own special way + radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null + if(frequency) + radio_connection = register_radio(src, frequency, frequency, radio_filter_in) + src.broadcast_status() + +/obj/machinery/atmospherics/component/unary/vent_pump/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weldingtool)) + var/obj/item/weldingtool/WT = W + if (WT.remove_fuel(0,user)) + to_chat(user, "Now welding the vent.") + if(do_after(user, 20 * WT.tool_speed)) + if(!src || !WT.isOn()) return + playsound(src.loc, WT.tool_sound, 50, 1) + if(!welded) + user.visible_message("\The [user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") + welded = 1 + update_icon() + else + user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") + welded = 0 + update_icon() + else + to_chat(user, "The welding tool needs to be on to start this task.") + else + to_chat(user, "You need more welding fuel to complete this task.") + return 1 + else + ..() + +/obj/machinery/atmospherics/component/unary/vent_pump/examine(mob/user, dist) + . = ..() + . += "A small gauge in the corner reads [round(last_flow_rate_legacy, 0.1)] L/s; [round(last_power_draw_legacy)] W" + if(welded) + . += "It seems welded shut." + +/obj/machinery/atmospherics/component/unary/vent_pump/power_change() + var/old_stat = machine_stat + ..() + if(old_stat != machine_stat) + update_icon() + +/obj/machinery/atmospherics/component/unary/vent_pump/attackby(obj/item/W, mob/user) + if (!W.is_wrench()) + return ..() + if (!(machine_stat & NOPOWER) && on) + to_chat(user, "You cannot unwrench \the [src], turn it off first.") + return 1 + var/turf/T = src.loc + if (node && node.level==1 && isturf(T) && !T.is_plating()) + to_chat(user, "You must remove the plating first.") + return 1 + if(unsafe_pressure()) + to_chat(user, "You feel a gust of air blowing in your face as you try to unwrench [src]. Maybe you should reconsider..") + add_fingerprint(user) + playsound(src, W.tool_sound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.tool_speed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() + +/** + * Encodes UI data for AtmosVentState in tgui/interfaces/machines/AtmosVent.tsx + */ +/obj/machinery/atmospherics/component/unary/vent_pump/proc/ui_vent_data() + return list( + "pressureChecks" = pressure_checks, + "internalPressure" = internal_pressure_bound, + "externalPressure" = external_pressure_bound, + "power" = on, + "siphon" = !pump_direction, + ) + +/obj/machinery/atmospherics/component/unary/vent_pump/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!isnull(ui)) + return + ui = new(user, src, "AtmosVentPump") + ui.open() + +/obj/machinery/atmospherics/component/unary/vent_pump/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["state"] = ui_vent_data() + .["name"] = name + +/obj/machinery/atmospherics/component/unary/vent_pump/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return + var/target = params["target"] + switch(action) + if("toggle") + set_on(!on) + return TRUE + if("intPressure") + internal_pressure_bound = target == "default"? internal_pressure_bound_default : clamp(text2num(target), 0, ATMOS_VENT_MAX_PRESSURE_LIMIT) + return TRUE + if("extPressure") + external_pressure_bound = target == "default"? external_pressure_bound_default : clamp(text2num(target), 0, ATMOS_VENT_MAX_PRESSURE_LIMIT) + return TRUE + if("intCheck") + pressure_checks ^= ATMOS_VENT_CHECK_INTERNAL + return TRUE + if("extCheck") + pressure_checks ^= ATMOS_VENT_CHECK_EXTERNAL + return TRUE + if("siphon") + //! warning: legacy + pump_direction = !pump_direction + update_icon() + return TRUE + +//* Signal Handling - Check / Application order is in order of these comments. +/// environmental: void. set to ignore the signal if we're not an environmental vent. +/// hard_reset: resets everything to default. +/// power: 0 | 1. sets us to be on/off. overrides power_toggle. +/// power_toggle: void. toggles us on/off. +/// checks: bitfield | "default". sets our checks to that. overrides checks_toggle. +/// checks_toggle: bitfield. toggles those checks. +/// direction: enum | "default". sets direction to that +/// direction_toggle: void. toggles direction. +/// set_internal_pressure: number | "default". sets internal pressure. overrides adjust_internal_pressure. +/// adjust_internal_pressure: number. adjusts internal pressure. +/// set_external_pressure: number | "default". sets external pressure. overrides adjust_external_pressure. +/// adjust_external_pressure: number. adjusts external pressure. + +/obj/machinery/atmospherics/component/unary/vent_pump/receive_signal(datum/signal/signal) + if(machine_stat & (NOPOWER|BROKEN)) + return + + hibernate = 0 + + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 + + if(!isnull(signal.data["environmental"]) && environmental) + return FALSE + + if(!isnull(signal.data["hard_reset"])) + pressure_checks = pressure_checks_default + pump_direction = pump_direction_default + internal_pressure_bound = internal_pressure_bound_default + external_pressure_bound = external_pressure_bound_default + if(!isnull(signal.data["power"])) + set_on(!!text2num(signal.data["power"])) + else if(!isnull(signal.data["power_toggle"])) + set_on(!on) + if(!isnull(signal.data["checks"])) + pressure_checks = (signal.data["checks"] == "default")? pressure_checks_default : (text2num(signal.data) & ATMOS_VENT_CHECKS) + else if(!isnull(signal.data["checks_toggle"])) + pressure_checks ^= (text2num(signal.data["checks_toggle"]) & ATMOS_VENT_CHECKS) + if(!isnull(signal.data["direction"])) + pump_direction = signal.data["direction"] == "default"? pump_direction_default : clamp(text2num(signal.data["direction"]), 0, 1) + else if(!isnull(signal.data["direction_toggle"])) + pump_direction = !pump_direction + if(!isnull(signal.data["set_internal_pressure"])) + internal_pressure_bound = signal.data["set_internal_presure"] == "default"? internal_pressure_bound_default : clamp(text2num(signal.data["set_internal_pressure"]), 0, ATMOS_VENT_MAX_PRESSURE_LIMIT) + else if(!isnull(signal.data["adjust_internal_pressure"])) + internal_pressure_bound = clamp(internal_pressure_bound + text2num(signal.data["set_internal_pressure"]), 0, ATMOS_VENT_MAX_PRESSURE_LIMIT) + if(!isnull(signal.data["set_external_pressure"])) + external_pressure_bound = signal.data["set_external_presure"] == "default"? external_pressure_bound_default : clamp(text2num(signal.data["set_external_pressure"]), 0, ATMOS_VENT_MAX_PRESSURE_LIMIT) + else if(!isnull(signal.data["adjust_external_pressure"])) + external_pressure_bound = clamp(external_pressure_bound + text2num(signal.data["set_external_pressure"]), 0, ATMOS_VENT_MAX_PRESSURE_LIMIT) + + //! legacy below + if(signal.data["status"] != null) + spawn(2) + broadcast_status() + return //do not update_icon + + //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + spawn(2) + broadcast_status() + update_icon() + +//* Subtypes + /obj/machinery/atmospherics/component/unary/vent_pump/on - use_power = USE_POWER_IDLE + on = TRUE icon_state = "map_vent_out" /obj/machinery/atmospherics/component/unary/vent_pump/on/welded @@ -67,16 +425,16 @@ pump_direction = 0 /obj/machinery/atmospherics/component/unary/vent_pump/siphon/on - use_power = USE_POWER_IDLE + on = TRUE icon_state = "map_vent_in" /obj/machinery/atmospherics/component/unary/vent_pump/positive // For some reason was buried in tether_things.dm -Bloop - use_power = USE_POWER_IDLE + on = TRUE icon_state = "map_vent_out" external_pressure_bound = ONE_ATMOSPHERE * 1.1 /obj/machinery/atmospherics/component/unary/vent_pump/siphon/on/atmos - use_power = USE_POWER_IDLE + on = TRUE icon_state = "map_vent_in" external_pressure_bound = 0 external_pressure_bound_default = 0 @@ -85,31 +443,6 @@ pressure_checks = 2 pressure_checks_default = 2 -/obj/machinery/atmospherics/component/unary/vent_pump/Initialize(mapload) - . = ..() - /* - soundloop = new(list(src), FALSE) - */ - -/obj/machinery/atmospherics/component/unary/vent_pump/Initialize(mapload) - . = ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP - - icon = null - initial_loc = get_area(loc) - area_uid = initial_loc.uid - if (!id_tag) - assign_uid() - id_tag = num2text(uid) - -/obj/machinery/atmospherics/component/unary/vent_pump/Destroy() - unregister_radio(src, frequency) - if(initial_loc) - initial_loc.air_vent_info -= id_tag - initial_loc.air_vent_names -= id_tag - //QDEL_NULL(soundloop) - return ..() - /obj/machinery/atmospherics/component/unary/vent_pump/high_volume name = "Large Air Vent" power_channel = EQUIP @@ -144,7 +477,17 @@ . = ..() air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector -/obj/machinery/atmospherics/component/unary/vent_pump/update_icon(safety = 0) +/obj/machinery/atmospherics/component/unary/vent_pump/retro + icon_state = "map_vent" + +/obj/machinery/atmospherics/component/unary/vent_pump/retro/on + on = TRUE + icon_state = "map_vent_out" + +/obj/machinery/atmospherics/component/unary/vent_pump/retro/on/welded + welded = 1 + +/obj/machinery/atmospherics/component/unary/vent_pump/retro/update_icon(safety = 0) if(!check_icon_cache()) return @@ -160,301 +503,12 @@ vent_icon += "h" if(welded) - vent_icon += "weld" + vent_icon += "retro_weld" else if(!use_power || !node || (machine_stat & (NOPOWER|BROKEN))) - vent_icon += "off" + vent_icon += "retro_off" else - vent_icon += "[pump_direction ? "out" : "in"]" + vent_icon += "[pump_direction ? "retro_out" : "retro_in"]" add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon)) -/obj/machinery/atmospherics/component/unary/vent_pump/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - return - else - if(node) - add_underlay(T, node, dir, node.icon_connect_type) - else - add_underlay(T,, dir) - -/obj/machinery/atmospherics/component/unary/vent_pump/hide() - update_icon() - update_underlays() - -/obj/machinery/atmospherics/component/unary/vent_pump/proc/can_pump() - if(machine_stat & (NOPOWER|BROKEN)) - //soundloop.stop() - return 0 - if(!use_power) - //soundloop.stop() - return 0 - if(welded) - //soundloop.stop() - return 0 - //soundloop.start() - return 1 - -/obj/machinery/atmospherics/component/unary/vent_pump/process(delta_time) - ..() - - if (hibernate) - return 1 - - if (!node) - update_use_power(USE_POWER_OFF) - if(!can_pump()) - return 0 - - var/datum/gas_mixture/environment = return_air() - - var/power_draw = -1 - - //Figure out the target pressure difference - var/pressure_delta = get_pressure_delta(environment) - //src.visible_message("DEBUG >>> [src]: pressure_delta = [pressure_delta]") - - if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) - if(pump_direction) //internal -> external - var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - else //external -> internal - var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) - - //limit flow rate from turfs - transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/component/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) - var/pressure_delta = DEFAULT_PRESSURE_DELTA - var/environment_pressure = environment.return_pressure() - - if(pump_direction) //internal -> external - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) - pressure_delta = min(pressure_delta, air_contents.return_pressure() - internal_pressure_bound) //decreasing the pressure here - else //external -> internal - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) - pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.return_pressure()) //increasing the pressure here - - return pressure_delta - -/obj/machinery/atmospherics/component/unary/vent_pump/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "area" = src.area_uid, - "tag" = src.id_tag, - "device" = "AVP", - "power" = use_power, - "direction" = pump_direction?("release"):("siphon"), - "checks" = pressure_checks, - "internal" = internal_pressure_bound, - "external" = external_pressure_bound, - "timestamp" = world.time, - "sigtype" = "status", - "power_draw" = last_power_draw, - "flow_rate" = last_flow_rate, - ) - - if(!initial_loc.air_vent_names[id_tag]) - var/new_name = "[initial_loc.name] Vent Pump #[initial_loc.air_vent_names.len+1]" - initial_loc.air_vent_names[id_tag] = new_name - src.name = new_name - initial_loc.air_vent_info[id_tag] = signal.data - - radio_connection.post_signal(src, signal, radio_filter_out) - - return 1 - - -/obj/machinery/atmospherics/component/unary/vent_pump/atmos_init() - ..() - - //some vents work his own special way - radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null - if(frequency) - radio_connection = register_radio(src, frequency, frequency, radio_filter_in) - src.broadcast_status() - -/obj/machinery/atmospherics/component/unary/vent_pump/receive_signal(datum/signal/signal) - if(machine_stat & (NOPOWER|BROKEN)) - return - - hibernate = 0 - - //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/component/unary/vent_pump/receive_signal([signal.debug_print()])") - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 - - if(signal.data["purge"] != null) - pressure_checks &= ~1 - pump_direction = 0 - - if(signal.data["stabalize"] != null) - pressure_checks |= 1 - pump_direction = 1 - - if(signal.data["power"] != null) - update_use_power(text2num(signal.data["power"])) - - if(signal.data["power_toggle"] != null) - update_use_power(!use_power) - - if(signal.data["checks"] != null) - if (signal.data["checks"] == "default") - pressure_checks = pressure_checks_default - else - pressure_checks = text2num(signal.data["checks"]) - - if(signal.data["checks_toggle"] != null) - pressure_checks = (pressure_checks?0:3) - - if(signal.data["direction"] != null) - pump_direction = text2num(signal.data["direction"]) - - if(signal.data["set_internal_pressure"] != null) - if (signal.data["set_internal_pressure"] == "default") - internal_pressure_bound = internal_pressure_bound_default - else - internal_pressure_bound = between( - 0, - text2num(signal.data["set_internal_pressure"]), - ONE_ATMOSPHERE*50 - ) - - if(signal.data["set_external_pressure"] != null) - if (signal.data["set_external_pressure"] == "default") - external_pressure_bound = external_pressure_bound_default - else - external_pressure_bound = between( - 0, - text2num(signal.data["set_external_pressure"]), - ONE_ATMOSPHERE*50 - ) - - if(signal.data["adjust_internal_pressure"] != null) - internal_pressure_bound = between( - 0, - internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), - ONE_ATMOSPHERE*50 - ) - - if(signal.data["adjust_external_pressure"] != null) - - - external_pressure_bound = between( - 0, - external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), - ONE_ATMOSPHERE*50 - ) - - if("reset_external_pressure" in signal.data) - external_pressure_bound = ONE_ATMOSPHERE - - if("reset_internal_pressure" in signal.data) - internal_pressure_bound = 0 - - if(signal.data["init"] != null) - name = signal.data["init"] - return - - if(signal.data["status"] != null) - spawn(2) - broadcast_status() - return //do not update_icon - - //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() - update_icon() - return - -/obj/machinery/atmospherics/component/unary/vent_pump/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if (WT.remove_fuel(0,user)) - to_chat(user, "Now welding the vent.") - if(do_after(user, 20 * WT.tool_speed)) - if(!src || !WT.isOn()) return - playsound(src.loc, WT.tool_sound, 50, 1) - if(!welded) - user.visible_message("\The [user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") - welded = 1 - update_icon() - else - user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") - welded = 0 - update_icon() - else - to_chat(user, "The welding tool needs to be on to start this task.") - else - to_chat(user, "You need more welding fuel to complete this task.") - return 1 - else - ..() - -/obj/machinery/atmospherics/component/unary/vent_pump/examine(mob/user, dist) - . = ..() - . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" - if(welded) - . += "It seems welded shut." - -/obj/machinery/atmospherics/component/unary/vent_pump/power_change() - var/old_stat = machine_stat - ..() - if(old_stat != machine_stat) - update_icon() - -/obj/machinery/atmospherics/component/unary/vent_pump/attackby(obj/item/W, mob/user) - if (!W.is_wrench()) - return ..() - if (!(machine_stat & NOPOWER) && use_power) - to_chat(user, "You cannot unwrench \the [src], turn it off first.") - return 1 - var/turf/T = src.loc - if (node && node.level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - if(unsafe_pressure()) - to_chat(user, "You feel a gust of air blowing in your face as you try to unwrench [src]. Maybe you should reconsider..") - add_fingerprint(user) - playsound(src, W.tool_sound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40 * W.tool_speed)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - deconstruct() - #undef DEFAULT_PRESSURE_DELTA - -#undef EXTERNAL_PRESSURE_BOUND -#undef INTERNAL_PRESSURE_BOUND -#undef PRESSURE_CHECKS - -#undef PRESSURE_CHECK_EXTERNAL -#undef PRESSURE_CHECK_INTERNAL diff --git a/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm index a715ca559ba..da062da22b7 100644 --- a/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm @@ -1,11 +1,11 @@ +// todo: better interface logging /obj/machinery/atmospherics/component/unary/vent_scrubber + name = "Air Scrubber" + desc = "Has a valve and pump attached to it" icon = 'icons/atmos/vent_scrubber.dmi' icon_state = "map_scrubber_off" pipe_state = "scrubber" - name = "Air Scrubber" - desc = "Has a valve and pump attached to it" - use_power = USE_POWER_OFF idle_power_usage = 150 //internal circuitry, friction losses and stuff power_rating = 7500 //7500 W ~ 10 HP @@ -13,56 +13,89 @@ level = 1 - var/area/initial_loc + hijack_require_exposed = TRUE + default_multitool_hijack = TRUE + tgui_interface = "AtmosVentScrubber" + atmos_component_ui_flags = NONE + + /// registered area + var/area/registered_area + /// auto name by area + var/name_from_area = TRUE + /// show on area + var/controllable_from_alarm = TRUE + /// cares about siphoning/filling/alarm modes + var/environmental = TRUE + + /// filter ids. both scrub_ids and scrub_groups must be set to not automatically use default. + var/list/scrub_ids + /// filter groups. both scrub_ids and scrub_groups must be set to not automatically use default. + var/list/scrub_groups + /// filter defaults - either an enum for SCRUBBER_DEFAULT_* or a list of ids and groups. + var/scrub_default = SCRUBBER_DEFAULT_STATION + /// siphoning? + var/siphoning + /// siphoning default + var/siphoning_default = FALSE + /// high power? + var/expanded + /// high power default + var/expanded_default = FALSE + + /// default scrub volume + var/scrub_volume = 2500 + /// additional power when expanded + var/expanded_power = 7500 + /// additional volume when expanded + var/expanded_scrub = 1250 + /// mole boost + var/scrub_boost = 50 + + var/area_uid var/id_tag = null + var/frequency = 1439 var/datum/radio_frequency/radio_connection var/hibernate = 0 //Do we even process? - var/scrubbing = 1 //0 = siphoning, 1 = scrubbing - var/list/scrubbing_gas = list(/datum/gas/carbon_dioxide, /datum/gas/phoron) - var/panic = 0 //is this scrubber panicked? - - var/area_uid var/radio_filter_out var/radio_filter_in -/obj/machinery/atmospherics/component/unary/vent_scrubber/on - use_power = USE_POWER_IDLE - icon_state = "map_scrubber_on" - -/obj/machinery/atmospherics/component/unary/vent_scrubber/on/welded - welded = 1 - - /obj/machinery/atmospherics/component/unary/vent_scrubber/Initialize(mapload) . = ..() + if(isnull(siphoning)) + siphoning = siphoning_default + if(isnull(expanded)) + expanded = expanded_default + if(isnull(scrub_ids) || isnull(scrub_groups)) + reset_scrubbing_to_default() air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER - for(var/i in scrubbing_gas) - if(!ispath(i)) - scrubbing_gas -= i - var/path = gas_id2path(i) - if(!path) - stack_trace("Invalid gasid [i]") - else - scrubbing_gas += path - icon = null - initial_loc = get_area(loc) - area_uid = initial_loc.uid + registered_area = get_area(loc) + area_uid = registered_area.uid + registered_area?.register_scrubber(src) if (!id_tag) assign_uid() id_tag = num2text(uid) /obj/machinery/atmospherics/component/unary/vent_scrubber/Destroy() unregister_radio(src, frequency) - if(initial_loc) - initial_loc.air_scrub_info -= id_tag - initial_loc.air_scrub_names -= id_tag + registered_area?.unregister_scrubber(src) return ..() +/obj/machinery/atmospherics/component/unary/vent_scrubber/proc/reset_scrubbing_to_default() + scrub_ids = list() + scrub_groups = NONE + var/list/default = SSair.scrubber_defaults[scrub_default] + if(isnull(default)) + return + for(var/key in default) + if(istext(key)) + scrub_ids += key + else if(isnum(key)) + scrub_groups |= key /obj/machinery/atmospherics/component/unary/vent_scrubber/update_icon(safety = 0) if(!check_icon_cache()) @@ -81,7 +114,7 @@ else if(!powered()) scrubber_icon += "off" else - scrubber_icon += "[use_power ? "[scrubbing ? "on" : "in"]" : "off"]" + scrubber_icon += "[on ? "[siphoning ? "in" : "on"]" : "off"]" add_overlay(icon_manager.get_atmos_icon("device", , , scrubber_icon)) @@ -116,22 +149,16 @@ "tag" = id_tag, "device" = "AScr", "timestamp" = world.time, - "power" = use_power, - "scrubbing" = scrubbing, - "panic" = panic, - "filter_o2" = (/datum/gas/oxygen in scrubbing_gas), - "filter_n2" = (/datum/gas/nitrogen in scrubbing_gas), - "filter_co2" = (/datum/gas/carbon_dioxide in scrubbing_gas), - "filter_phoron" = (/datum/gas/phoron in scrubbing_gas), - "filter_n2o" = (/datum/gas/nitrous_oxide in scrubbing_gas), - "filter_fuel" = (/datum/gas/volatile_fuel in scrubbing_gas), - "sigtype" = "status" + "power" = on, + "scrubbing" = !siphoning, // legacy + "siphoning" = siphoning, + "expanded" = expanded, + "panic" = siphoning, // legacy + "scrub_ids" = scrub_ids, + "scrub_groups" = scrub_groups, + "sigtype" = "status", ) - if(!initial_loc.air_scrub_names[id_tag]) - var/new_name = "[initial_loc.name] Air Scrubber #[initial_loc.air_scrub_names.len+1]" - initial_loc.air_scrub_names[id_tag] = new_name - src.name = new_name - initial_loc.air_scrub_info[id_tag] = signal.data + radio_connection.post_signal(src, signal, radio_filter_out) return 1 @@ -148,7 +175,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/proc/can_scrub() if(machine_stat & (NOPOWER|BROKEN)) return 0 - if(!use_power) + if(!on) return 0 if(welded) return 0 @@ -160,31 +187,23 @@ if (hibernate) return 1 - if (!node) - update_use_power(USE_POWER_OFF) - //broadcast_status() + set_on(FALSE) if(!can_scrub()) return 0 var/datum/gas_mixture/environment = loc.return_air() + var/using_power = expanded? expanded_power + power_rating : power_rating - var/power_draw = -1 - if(scrubbing) - //limit flow rate from turfs - var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SCRUBBER_FLOWRATE/environment.volume) //group_multiplier gets divided out here + if(siphoning) + power_current = xgm_pump_gas(environment, air_contents, limit_power = using_power) + else + var/using_volume = expanded? expanded_scrub + scrub_volume : scrub_volume + power_current = xgm_scrub_gas_volume(environment, air_contents, scrub_ids, scrub_groups, using_volume, using_power, scrub_boost) - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) - else //Just siphon all air - //limit flow rate from turfs - var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SIPHON_FLOWRATE/environment.volume) //group_multiplier gets divided out here - - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - - - if (power_draw >= 0) - last_power_draw = power_draw - use_power(power_draw) + if (power_current >= 0) + last_power_draw_legacy = power_current + use_power(power_current) if(network) network.update = 1 @@ -195,90 +214,6 @@ update_icon() update_underlays() -/obj/machinery/atmospherics/component/unary/vent_scrubber/receive_signal(datum/signal/signal) - if(machine_stat & (NOPOWER|BROKEN)) - return - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 - - if(signal.data["power"] != null) - update_use_power(text2num(signal.data["power"])) - if(signal.data["power_toggle"] != null) - update_use_power(!use_power) - - if(signal.data["panic_siphon"]) //must be before if("scrubbing" thing - panic = text2num(signal.data["panic_siphon"]) - if(panic) - update_use_power(USE_POWER_IDLE) - scrubbing = 0 - else - scrubbing = 1 - if(signal.data["toggle_panic_siphon"] != null) - panic = !panic - if(panic) - update_use_power(USE_POWER_IDLE) - scrubbing = 0 - else - scrubbing = 1 - - if(signal.data["scrubbing"] != null) - scrubbing = text2num(signal.data["scrubbing"]) - if(scrubbing) - panic = 0 - if(signal.data["toggle_scrubbing"]) - scrubbing = !scrubbing - if(scrubbing) - panic = 0 - - var/list/toggle = list() - - if(!isnull(signal.data["o2_scrub"]) && text2num(signal.data["o2_scrub"]) != (/datum/gas/oxygen in scrubbing_gas)) - toggle += /datum/gas/oxygen - else if(signal.data["toggle_o2_scrub"]) - toggle += /datum/gas/oxygen - - if(!isnull(signal.data["n2_scrub"]) && text2num(signal.data["n2_scrub"]) != (/datum/gas/nitrogen in scrubbing_gas)) - toggle += /datum/gas/nitrogen - else if(signal.data["toggle_n2_scrub"]) - toggle += /datum/gas/nitrogen - - if(!isnull(signal.data["co2_scrub"]) && text2num(signal.data["co2_scrub"]) != (/datum/gas/carbon_dioxide in scrubbing_gas)) - toggle += /datum/gas/carbon_dioxide - else if(signal.data["toggle_co2_scrub"]) - toggle += /datum/gas/carbon_dioxide - - if(!isnull(signal.data["tox_scrub"]) && text2num(signal.data["tox_scrub"]) != (/datum/gas/phoron in scrubbing_gas)) - toggle += /datum/gas/phoron - else if(signal.data["toggle_tox_scrub"]) - toggle += /datum/gas/phoron - - if(!isnull(signal.data["n2o_scrub"]) && text2num(signal.data["n2o_scrub"]) != (/datum/gas/nitrous_oxide in scrubbing_gas)) - toggle += /datum/gas/nitrous_oxide - else if(signal.data["toggle_n2o_scrub"]) - toggle += /datum/gas/nitrous_oxide - - if(!isnull(signal.data["fuel_scrub"]) && text2num(signal.data["fuel_scrub"]) != (/datum/gas/volatile_fuel in scrubbing_gas)) - toggle += /datum/gas/volatile_fuel - else if(signal.data["toggle_fuel_scrub"]) - toggle += /datum/gas/volatile_fuel - - scrubbing_gas ^= toggle - - if(signal.data["init"] != null) - name = signal.data["init"] - return - - if(signal.data["status"] != null) - spawn(2) - broadcast_status() - return //do not update_icon - -// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() - update_icon() - return - /obj/machinery/atmospherics/component/unary/vent_scrubber/power_change() var/old_stat = machine_stat ..() @@ -288,7 +223,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/attackby(var/obj/item/W as obj, var/mob/user as mob) if (!W.is_wrench()) return ..() - if (!(machine_stat & NOPOWER) && use_power) + if (!(machine_stat & NOPOWER) && on) to_chat(user, "You cannot unwrench \the [src], turn it off first.") return 1 var/turf/T = src.loc @@ -309,7 +244,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/examine(mob/user, dist) . = ..() - . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" + . += "A small gauge in the corner reads [round(last_flow_rate_legacy, 0.1)] L/s; [round(last_power_draw_legacy)] W" if(welded) . += "It seems welded shut." @@ -338,3 +273,175 @@ return 1 else ..() + +/** + * encodes data for AtmosScrubberControl interface component + */ +/obj/machinery/atmospherics/component/unary/vent_scrubber/proc/ui_scrubber_data() + return list( + "siphon" = siphoning, + "expand" = expanded, + "scrubIDs" = scrub_ids, + "scrubGroups" = scrub_groups, + "power" = on, + ) + +/obj/machinery/atmospherics/component/unary/vent_scrubber/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return + var/target = params["target"] + switch(action) + if("power") + set_on(!on) + return TRUE + if("expand") + //! warning: legacy + expanded = !expanded + update_icon() + return TRUE + if("siphon") + //! warning: legacy + siphoning = !siphoning + update_icon() + return TRUE + if("id") + if(!global.gas_data.gas_id_filterable(target)) + return TRUE + scrub_ids ^= target + return TRUE + if("group") + // the << 0 gets rid of any floating points incase someone somehow puts in a non bitfield + target = (text2num(target) << 0) + if(!global.gas_data.gas_groups_all_filterable(target)) + return TRUE + scrub_groups ^= target + return TRUE + +/obj/machinery/atmospherics/component/unary/vent_scrubber/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["state"] = ui_scrubber_data() + +/obj/machinery/atmospherics/component/unary/vent_scrubber/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["gasContext"] = global.gas_data.tgui_gas_context() + .["name"] = name + +//* Signal Handling - Order of application is same as these comments. +/// environmental: void. set to ignore the signal if we're not an environmental vent. +/// hard_reset: resets everything to default. +/// power: 0 | 1. sets us to be on/off. overrides power_toggle. +/// power_toggle: void. toggles us on/off. +/// siphon: 0 | 1 | "default". sets if we're siphoning. overrides siphon_toggle. +/// siphon_toggle: void. toggles siphoning on/off. +/// expand: 0 | 1 | "default". sets if we're expanded / high powered mode. overrides expand_toggle. +/// expand_toggle: void. sets if we're in high powered mode. +/// scrub_reset: resets scrubbing to default. +/// scrub_ids: list[string]. sets scrub ids. overrides scrub_ids_toggle. +/// scrub_ids_toggle: list[string]. toggles scrubbing gas ids. +/// scrub_groups: bitfield. sets groups to scrub. overrides scrub_groups_toggle. +/// scrub_groups_toggle: bitfield. toggles scrubbing these groups. + +/obj/machinery/atmospherics/component/unary/vent_scrubber/receive_signal(datum/signal/signal) + if(machine_stat & (NOPOWER|BROKEN)) + return + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 + + if(!isnull(signal.data["environmental"]) && environmental) + return FALSE + + if(!isnull(signal.data["hard_reset"])) + expanded = expanded_default + siphoning = siphoning_default + reset_scrubbing_to_default() + if(!isnull(signal.data["power"])) + set_on(!!text2num(signal.data["power"])) + else if(!isnull(signal.data["power_toggle"])) + set_on(!on) + if(!isnull(signal.data["siphon"])) + siphoning = signal.data["siphon"] == "default"? siphoning_default : !!text2num(signal.data["siphon"]) + else if(!isnull(signal.data["siphon_toggle"])) + siphoning = !siphoning + if(!isnull(signal.data["expand"])) + expanded = signal.data["expand"] == "default"? expanded_default : !!text2num(signal.data["expand"]) + else if(!isnull(signal.data["expand_toggle"])) + expanded = !expanded + if(!isnull(signal.data["scrub_reset"])) + reset_scrubbing_to_default() + if(!isnull(signal.data["scrub_ids"])) + var/list/target_ids = signal.data["scrub_ids"] + if(islist(target_ids)) + if(target_ids.len > SCRUBBER_MAX_GAS_IDS) + target_ids.len = SCRUBBER_MAX_GAS_IDS + for(var/key in target_ids) + if(!global.gas_data.gas_id_filterable(key)) + target_ids -= key + scrub_ids = target_ids + else if(!isnull(signal.data["scrub_ids_toggle"])) + var/list/target_ids = signal.data["scrub_ids_toggle"] + if(islist(target_ids)) + if(target_ids.len > SCRUBBER_MAX_GAS_IDS * 2) + target_ids.len = SCRUBBER_MAX_GAS_IDS * 2 + for(var/key in target_ids) + if(!global.gas_data.gas_id_filterable(key)) + target_ids -= key + scrub_ids ^= target_ids + if(scrub_ids.len > SCRUBBER_MAX_GAS_IDS) + scrub_ids.len = SCRUBBER_MAX_GAS_IDS + if(!isnull(signal.data["scrub_groups"])) + scrub_groups = (GAS_GROUPS_FILTERABLE & (text2num(signal.data["scrub_groups"]))) + else if(!isnull(signal.data["scrub_groups_toggle"])) + scrub_groups ^= (GAS_GROUPS_FILTERABLE & (text2num(signal.data["scrub_groups_toggle"]))) + + //! legacy below + + if(signal.data["status"] != null) + spawn(2) + broadcast_status() + return //do not update_icon + +// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + spawn(2) + broadcast_status() + update_icon() + +//* Subtypes + +/obj/machinery/atmospherics/component/unary/vent_scrubber/on + on = TRUE + icon_state = "map_scrubber_on" + +/obj/machinery/atmospherics/component/unary/vent_scrubber/on/welded + welded = 1 + +/obj/machinery/atmospherics/component/unary/vent_scrubber/retro + icon_state = "map_scrubber_off" /// Will get replaced on mapload + +/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/on + on = TRUE + icon_state = "map_scrubber_on" + +/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/on/welded + welded = 1 + +/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/update_icon(safety = 0) + if(!check_icon_cache()) + return + + cut_overlays() + + var/scrubber_icon = "scrubber" + + var/turf/T = get_turf(src) + if(!istype(T)) + return + + if(welded) + scrubber_icon += "retro_weld" + else if(!powered()) + scrubber_icon += "retro_off" + else + scrubber_icon += "[use_power ? "[siphoning ? "retro_in" : "retro_on"]" : "retro_off"]" + + add_overlay(icon_manager.get_atmos_icon("device", , , scrubber_icon)) diff --git a/code/modules/atmospherics/machinery/machinery.dm b/code/modules/atmospherics/machinery/machinery.dm index dfe8bf9a638..0526cc978f1 100644 --- a/code/modules/atmospherics/machinery/machinery.dm +++ b/code/modules/atmospherics/machinery/machinery.dm @@ -25,8 +25,6 @@ Pipelines + Other Objects -> Pipe network ///The color of the pipe var/pipe_color - ///The maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts - var/power_rating ///The flags of the pipe/component (PIPING_ALL_LAYER | PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY | PIPING_CARDINAL_AUTONORMALIZE) var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY ///What pipe layer can this connect to. @@ -48,6 +46,9 @@ Pipelines + Other Objects -> Pipe network var/obj/machinery/atmospherics/node1 var/obj/machinery/atmospherics/node2 + var/last_flow_rate_legacy = 0 + var/last_power_draw_legacy = 0 + /obj/machinery/atmospherics/Initialize(mapload, newdir) . = ..() if(!icon_manager) @@ -91,8 +92,8 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/check_connectable(obj/machinery/atmospherics/target) return (src.connect_types & target.connect_types) -/obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) - if(istype(A, /obj/item/pipe_painter)) +/obj/machinery/atmospherics/attackby(obj/item/I, mob/living/user, list/params, clickchain_flags, damage_multiplier) + if(istype(I, /obj/item/pipe_painter)) return ..() @@ -131,8 +132,8 @@ Pipelines + Other Objects -> Pipe network return node.pipe_color /obj/machinery/atmospherics/process(delta_time) - last_flow_rate = 0 - last_power_draw = 0 + last_flow_rate_legacy = 0 + last_power_draw_legacy = 0 build_network() @@ -164,9 +165,6 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) -/obj/machinery/atmospherics/update_icon() - return null - /obj/machinery/atmospherics/proc/unsafe_pressure() var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() @@ -241,3 +239,19 @@ Pipelines + Other Objects -> Pipe network layer = PIPE_LAYER else reset_plane_and_layer() + +// todo: refactor + +/obj/machinery/atmospherics/is_hidden_underfloor() + var/turf/T = loc + return istype(T) && (level == 1) && !T.is_plating() + +/obj/machinery/atmospherics/should_hide_underfloor() + return level == 1 + +/** + * currently unimplemented + * call when our internal settings change to push changes to relevant uis. + */ +/obj/machinery/atmospherics/proc/ui_settings_updated() + // todo: implement diff --git a/code/game/machinery/atmoalter/meter.dm b/code/modules/atmospherics/machinery/meter.dm similarity index 100% rename from code/game/machinery/atmoalter/meter.dm rename to code/modules/atmospherics/machinery/meter.dm diff --git a/code/modules/atmospherics/machinery/pipes/tank.dm b/code/modules/atmospherics/machinery/pipes/tank.dm index 36891d524bc..928e23754e5 100644 --- a/code/modules/atmospherics/machinery/pipes/tank.dm +++ b/code/modules/atmospherics/machinery/pipes/tank.dm @@ -71,8 +71,8 @@ if(istype(W, /obj/item/pipe_painter)) return - if(istype(W, /obj/item/analyzer) && in_range(user, src)) - var/obj/item/analyzer/A = W + if(istype(W, /obj/item/atmos_analyzer) && in_range(user, src)) + var/obj/item/atmos_analyzer/A = W A.analyze_gases(src, user) /obj/machinery/atmospherics/pipe/tank/air @@ -84,8 +84,8 @@ air_temporary.volume = volume air_temporary.temperature = T20C - air_temporary.adjust_multi(/datum/gas/oxygen, (start_pressure*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature), \ - /datum/gas/nitrogen,(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_multi(GAS_ID_OXYGEN, (start_pressure*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature), \ + GAS_ID_NITROGEN,(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "air" @@ -99,7 +99,7 @@ air_temporary.volume = volume air_temporary.temperature = T20C - air_temporary.adjust_gas(/datum/gas/oxygen, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_gas(GAS_ID_OXYGEN, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "o2" @@ -113,7 +113,7 @@ air_temporary.volume = volume air_temporary.temperature = T20C - air_temporary.adjust_gas(/datum/gas/nitrogen, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_gas(GAS_ID_NITROGEN, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "n2" @@ -127,7 +127,7 @@ air_temporary.volume = volume air_temporary.temperature = T20C - air_temporary.adjust_gas(/datum/gas/carbon_dioxide, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_gas(GAS_ID_CARBON_DIOXIDE, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "co2" @@ -142,7 +142,7 @@ air_temporary.volume = volume air_temporary.temperature = T20C - air_temporary.adjust_gas(/datum/gas/phoron, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_gas(GAS_ID_PHORON, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "phoron" @@ -156,7 +156,7 @@ air_temporary.volume = volume air_temporary.temperature = T0C - air_temporary.adjust_gas(/datum/gas/nitrous_oxide, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_gas(GAS_ID_NITROUS_OXIDE, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "n2o" @@ -171,7 +171,7 @@ air_temporary.volume = volume air_temporary.temperature = T20C - air_temporary.adjust_gas(/datum/gas/chlorine, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) + air_temporary.adjust_gas(GAS_ID_CHLORINE, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)) . = ..() icon_state = "hazard" diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/modules/atmospherics/machinery/portable/area_atmos_computer.dm similarity index 97% rename from code/game/machinery/atmoalter/area_atmos_computer.dm rename to code/modules/atmospherics/machinery/portable/area_atmos_computer.dm index ab76632a49e..e4ea08ae3da 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/modules/atmospherics/machinery/portable/area_atmos_computer.dm @@ -1,3 +1,5 @@ +// todo: wrong folder? + /obj/machinery/computer/area_atmos name = "Area Air Control" desc = "A computer used to control the stationary scrubbers and pumps in the area." @@ -44,8 +46,8 @@ "name" = scrubber.name, "on" = scrubber.on, "pressure" = scrubber.air_contents.return_pressure(), - "flow_rate" = scrubber.last_flow_rate, - "load" = scrubber.last_power_draw, + "flow_rate" = scrubber.last_flow_rate_legacy, + "load" = scrubber.last_power_draw_legacy, "area" = get_area(scrubber), ))) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm similarity index 89% rename from code/game/machinery/atmoalter/canister.dm rename to code/modules/atmospherics/machinery/portable/canister.dm index 402cc3c211e..5aa036fced3 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -292,7 +292,7 @@ update_flag ..() /obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!W.is_wrench() && !istype(W, /obj/item/tank) && !istype(W, /obj/item/analyzer) && !istype(W, /obj/item/pda)) + if(!W.is_wrench() && !istype(W, /obj/item/tank) && !istype(W, /obj/item/atmos_analyzer) && !istype(W, /obj/item/pda)) visible_message(SPAN_WARNING("\The [user] hits \the [src] with \a [W]!")) src.health -= W.damage_force healthcheck() @@ -439,109 +439,109 @@ update_flag /obj/machinery/portable_atmospherics/canister/phoron/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/phoron, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_PHORON, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/oxygen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/oxygen, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_OXYGEN, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/oxygen/prechilled/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/oxygen, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_OXYGEN, MolesForPressure()) src.air_contents.temperature = 80 src.update_icon() /obj/machinery/portable_atmospherics/canister/nitrous_oxide/Initialize(mapload) . = ..() - air_contents.adjust_gas(/datum/gas/nitrous_oxide, MolesForPressure()) + air_contents.adjust_gas(GAS_ID_NITROUS_OXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/helium/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/helium, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_HELIUM, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/carbon_monoxide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/carbon_monoxide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_CARBON_MONOXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/methyl_bromide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/methyl_bromide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_METHYL_BROMIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/nitrodioxide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/nitrodioxide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_NITROGEN_DIOXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/nitricoxide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/nitricoxide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_NITRIC_OXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/methane/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/methane, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_METHANE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/argon/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/argon, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_ARGON, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/krypton/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/krypton, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_KRYPTON, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/neon/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/neon, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_NEON, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/ammonia/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/ammonia, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_AMMONIA, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/xenon/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/xenon, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_XENON, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/chlorine/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/chlorine, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_CHLORINE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/sulfur_dioxide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/sulfur_dioxide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_SULFUR_DIOXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/hydrogen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/hydrogen, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_HYDROGEN, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/tritium/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/hydrogen/tritium, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_TRITIUM, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/deuterium/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/hydrogen/deuterium, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_DEUTERIUM, MolesForPressure()) src.update_icon() //Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 /obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/Initialize(mapload) . = ..() - air_contents.gas[/datum/gas/nitrous_oxide] = 9*4000 + air_contents.gas[GAS_ID_NITROUS_OXIDE] = 9*4000 return INITIALIZE_HINT_LATELOAD /obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/LateInitialize() @@ -555,35 +555,35 @@ update_flag /obj/machinery/portable_atmospherics/canister/nitrogen/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/nitrogen, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_NITROGEN, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/carbon_dioxide/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/carbon_dioxide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_CARBON_DIOXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/air/Initialize(mapload) . = ..() var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi(/datum/gas/oxygen, air_mix[/datum/gas/oxygen], /datum/gas/nitrogen, air_mix[/datum/gas/nitrogen]) + src.air_contents.adjust_multi(GAS_ID_OXYGEN, air_mix[GAS_ID_OXYGEN], GAS_ID_NITROGEN, air_mix[GAS_ID_NITROGEN]) src.update_icon() //R-UST port // Special types used for engine setup admin verb, they contain double amount of that of normal canister. /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/nitrogen, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_NITROGEN, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/carbon_dioxide, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_CARBON_DIOXIDE, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/phoron/engine_setup/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/phoron, MolesForPressure()) + src.air_contents.adjust_gas(GAS_ID_PHORON, MolesForPressure()) src.update_icon() /obj/machinery/portable_atmospherics/canister/take_damage(var/damage) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm similarity index 60% rename from code/game/machinery/atmoalter/portable_atmospherics.dm rename to code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 763ace9a7e7..499241555ca 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -2,9 +2,32 @@ name = "atmoalter" use_power = USE_POWER_OFF layer = OBJ_LAYER // These are mobile, best not be under everything. + interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OFFLINE + + /// allow multitool "hijacking" even if this is controlled by something else + /// set to non-null for delay. + var/default_multitool_hijack = null + /// allow access normally + var/default_access_interface = FALSE + /// tgui interface + var/tgui_interface + /// ui flags + var/atmos_portable_ui_flags = NONE + + /// on right now + var/on = FALSE + /// current flow, liters + var/flow_current = 0 + /// flow maximum + var/flow_maximum = 1000 + /// flow setting + var/flow_setting + + var/datum/gas_mixture/air_contents = new var/obj/machinery/atmospherics/portables_connector/connected_port + // todo: tweak this; not all portables can / should necessarily be able to hold tanks. var/obj/item/tank/holding var/volume = 0 @@ -16,6 +39,8 @@ /obj/machinery/portable_atmospherics/Initialize(mapload) . = ..() + if(isnull(flow_setting)) + flow_setting = flow_maximum air_contents.volume = volume air_contents.temperature = T20C @@ -26,26 +51,94 @@ /obj/machinery/portable_atmospherics/Initialize(mapload) . = ..() - spawn() - var/obj/machinery/atmospherics/portables_connector/port = locate() in loc - if(port) - connect(port) - update_icon() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/portable_atmospherics/LateInitialize() + var/obj/machinery/atmospherics/portables_connector/port = locate() in loc + if(port) + connect(port) + update_icon() + return ..() /obj/machinery/portable_atmospherics/process(delta_time) + flow_current = 0 + if(!connected_port) //only react when pipe_network will ont it do it for you //Allow for reactions air_contents.react() else update_icon() +/obj/machinery/portable_atmospherics/interact(mob/user) + if(!default_access_interface) + user.action_feedback(SPAN_WARNING("You can't directly interact with [src]. Use an area atmospherics control computer, if there is one."), src) + return FALSE + ui_interact(user) + return TRUE + +/obj/machinery/portable_atmospherics/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + if(!tgui_interface) + return ..() + + ui = SStgui.try_update_ui(user, src, ui) + if(isnull(ui)) + ui = new(user, src, tgui_interface) + +/obj/machinery/portable_atmospherics/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["controlFlags"] = atmos_portable_ui_flags + .["useCharge"] = FALSE + .["flowMax"] = flow_maximum + +/obj/machinery/portable_atmospherics/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["flow"] = flow_current + .["on"] = on + .["tank"] = holding?.tgui_tank_data() + +/obj/machinery/portable_atmospherics/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return + switch(action) + if("togglePower") + if(!(atmos_portable_ui_flags & ATMOS_PORTABLE_UI_TOGGLE_POWER)) + return TRUE + set_on(!on) + return TRUE + if("setFlow") + var/amt = params["value"] + if(!isnum(amt)) + return TRUE + if(!(atmos_portable_ui_flags & ATMOS_PORTABLE_UI_SET_FLOW)) + return TRUE + set_flow(amt) + return TRUE + if("eject") + if(isnull(holding)) + return TRUE + usr.action_feedback(SPAN_NOTICE("You remove [holding] from [src]."), src) + usr.grab_item_from_interacted_with(holding, src) + holding = null + return TRUE + +/obj/machinery/portable_atmospherics/proc/set_on(enabled) + on = enabled + update_icon() + +/obj/machinery/portable_atmospherics/proc/set_flow(liters) + flow_setting = clamp(liters, 0, flow_maximum) + +/obj/machinery/portable_atmospherics/return_air() + return air_contents + /obj/machinery/portable_atmospherics/blob_act() qdel(src) /obj/machinery/portable_atmospherics/proc/StandardAirMix() return list( - /datum/gas/oxygen = O2STANDARD * MolesForPressure(), - /datum/gas/nitrogen = N2STANDARD * MolesForPressure()) + GAS_ID_OXYGEN = O2STANDARD * MolesForPressure(), + GAS_ID_NITROGEN = N2STANDARD * MolesForPressure()) /obj/machinery/portable_atmospherics/proc/MolesForPressure(var/target_pressure = start_pressure) return (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature) @@ -97,13 +190,13 @@ if (network) network.update = 1 -/obj/machinery/portable_atmospherics/attackby(var/obj/item/W as obj, var/mob/user as mob) - if ((istype(W, /obj/item/tank) && !( src.destroyed ))) +/obj/machinery/portable_atmospherics/attackby(obj/item/I, mob/living/user, list/params, clickchain_flags, damage_multiplier) + if ((istype(I, /obj/item/tank) && !( src.destroyed ))) if (holding && (user.a_intent != INTENT_GRAB)) return - if(!user.attempt_insert_item_for_installation(W, src)) + if(!user.attempt_insert_item_for_installation(I, src)) return - var/obj/item/tank/T = W + var/obj/item/tank/T = I if(holding) user.grab_item_from_interacted_with(holding, src) to_chat(user, SPAN_NOTICE("You quickly swap the tanks with the quick release valve.")) @@ -111,12 +204,12 @@ update_icon() return - else if (W.is_wrench()) + else if (I.is_wrench()) if(connected_port) disconnect() to_chat(user, "You disconnect \the [src] from the port.") update_icon() - playsound(src, W.tool_sound, 50, 1) + playsound(src, I.tool_sound, 50, 1) return else var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc @@ -124,7 +217,7 @@ if(connect(possible_port)) to_chat(user, "You connect \the [src] to the port.") update_icon() - playsound(src, W.tool_sound, 50, 1) + playsound(src, I.tool_sound, 50, 1) return else to_chat(user, "\The [src] failed to connect to the port.") @@ -133,8 +226,8 @@ to_chat(user, "Nothing happens.") return - else if ((istype(W, /obj/item/analyzer)) && Adjacent(user)) - var/obj/item/analyzer/A = W + else if ((istype(I, /obj/item/atmos_analyzer)) && Adjacent(user)) + var/obj/item/atmos_analyzer/A = I A.analyze_gases(src, user) /obj/machinery/portable_atmospherics/MouseDroppedOnLegacy(mob/living/carbon/O, mob/user as mob) @@ -165,51 +258,6 @@ if (get_turf(user) == get_turf(src)) usr.visible_message("[user] climbs onto \the [src]!") -/obj/machinery/portable_atmospherics/powered - var/power_rating - var/power_losses - var/last_power_draw = 0 - var/obj/item/cell/cell - var/use_cell = TRUE - var/removeable_cell = TRUE - -/obj/machinery/portable_atmospherics/powered/powered() - if(use_power) //using area power - return ..() - if(cell && cell.charge) - return 1 - return 0 - -/obj/machinery/portable_atmospherics/powered/attackby(obj/item/I, mob/user) - if(use_cell && istype(I, /obj/item/cell)) - if(cell) - to_chat(user, "There is already a power cell installed.") - return - if(!user.attempt_insert_item_for_installation(I, src)) - return - - var/obj/item/cell/C = I - - C.add_fingerprint(user) - cell = C - user.visible_message("[user] opens the panel on [src] and inserts [C].", "You open the panel on [src] and insert [C].") - power_change() - return - - if(I.is_screwdriver() && removeable_cell) - if(!cell) - to_chat(user, "There is no power cell installed.") - return - - user.visible_message("[user] opens the panel on [src] and removes [cell].", "You open the panel on [src] and remove [cell].") - playsound(src, I.tool_sound, 50, 1) - cell.add_fingerprint(user) - cell.forceMove(drop_location()) - cell = null - power_change() - return - ..() - /obj/machinery/portable_atmospherics/proc/log_open() if(air_contents.gas.len == 0) return diff --git a/code/modules/atmospherics/machinery/portable/powered.dm b/code/modules/atmospherics/machinery/portable/powered.dm new file mode 100644 index 00000000000..e7a83f75bbd --- /dev/null +++ b/code/modules/atmospherics/machinery/portable/powered.dm @@ -0,0 +1,85 @@ +/obj/machinery/portable_atmospherics/powered + /// power rating in watts + var/power_maximum = 7500 + /// power setting in watts + var/power_setting + /// power usage current + var/power_current = 0 + + /// efficiency multiplier + var/efficiency_multiplier = 1 + + var/last_power_draw_legacy = 0 + var/obj/item/cell/cell + var/use_cell = TRUE + var/removeable_cell = TRUE + +/obj/machinery/portable_atmospherics/powered/Initialize(mapload) + . = ..() + if(isnull(power_setting)) + power_setting = power_maximum + +/obj/machinery/portable_atmospherics/powered/process(delta_time) + ..() + power_current = 0 + +/obj/machinery/portable_atmospherics/powered/powered() + if(use_power) //using area power + return ..() + if(cell && cell.charge) + return 1 + return 0 + +/obj/machinery/portable_atmospherics/powered/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["useCharge"] = TRUE + .["maxCharge"] = isnull(cell)? cell.maxcharge : 0 + .["powerRating"] = power_maximum + .["useCell"] = use_cell + +/obj/machinery/portable_atmospherics/powered/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["charge"] = isnull(cell)? cell.charge : 0 + if(atmos_portable_ui_flags & (ATMOS_PORTABLE_UI_SEE_POWER | ATMOS_PORTABLE_UI_SET_POWER)) + .["powerCurrent"] = power_current + .["hasCell"] = !isnull(cell) + +/obj/machinery/portable_atmospherics/powered/attackby(obj/item/I, mob/living/user, list/params, clickchain_flags, damage_multiplier) + if(use_cell && istype(I, /obj/item/cell)) + if(cell) + to_chat(user, "There is already a power cell installed.") + return + if(!user.attempt_insert_item_for_installation(I, src)) + return + + var/obj/item/cell/C = I + + C.add_fingerprint(user) + cell = C + user.visible_message("[user] opens the panel on [src] and inserts [C].", "You open the panel on [src] and insert [C].") + power_change() + update_static_data() + return + + if(I.is_screwdriver() && removeable_cell) + if(!cell) + to_chat(user, "There is no power cell installed.") + return + + user.visible_message("[user] opens the panel on [src] and removes [cell].", "You open the panel on [src] and remove [cell].") + playsound(src, I.tool_sound, 50, 1) + cell.add_fingerprint(user) + cell.forceMove(drop_location()) + cell = null + power_change() + update_static_data() + return + ..() + +/obj/machinery/portable_atmospherics/powered/use_power(amount, chan, dt) + if(!use_cell) + return ..() + . = cell.use(DYNAMIC_W_TO_CELL_UNITS(amount, dt)) + if(!cell.charge) + power_change() + update_icon() diff --git a/code/game/machinery/atmoalter/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm similarity index 94% rename from code/game/machinery/atmoalter/pump.dm rename to code/modules/atmospherics/machinery/portable/pump.dm index 4b1f0faca85..1ae3d3bca5a 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -1,12 +1,10 @@ /obj/machinery/portable_atmospherics/powered/pump name = "portable air pump" - icon = 'icons/obj/atmos.dmi' icon_state = "psiphon:0" density = 1 w_class = ITEMSIZE_NORMAL - var/on = 0 var/direction_out = 0 //0 = siphoning, 1 = releasing var/target_pressure = ONE_ATMOSPHERE @@ -15,8 +13,7 @@ volume = 1000 - power_rating = 7500 //7500 W ~ 10 HP - power_losses = 150 + var/power_rating = 7500 //7500 W ~ 10 HP /obj/machinery/portable_atmospherics/powered/pump/filled start_pressure = 90 * ONE_ATMOSPHERE @@ -25,9 +22,6 @@ . = ..() cell = new/obj/item/cell/apc(src) - var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi(/datum/gas/oxygen, air_mix[/datum/gas/oxygen], /datum/gas/nitrogen, air_mix[/datum/gas/nitrogen]) - /obj/machinery/portable_atmospherics/powered/pump/update_icon() cut_overlays() var/list/overlays_to_add = list() @@ -85,12 +79,11 @@ power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 + last_flow_rate_legacy = 0 + last_power_draw_legacy = 0 else - power_draw = max(power_draw, power_losses) cell.use_scaled(DYNAMIC_W_TO_CELL_UNITS(power_draw, 1)) - last_power_draw = power_draw + last_power_draw_legacy = power_draw update_connected_network() @@ -136,7 +129,7 @@ data["max_pressure"] = round(pressuremax) - data["powerDraw"] = round(last_power_draw) + data["powerDraw"] = round(last_power_draw_legacy) data["cellCharge"] = cell ? cell.charge : 0 data["cellMaxCharge"] = cell ? cell.maxcharge : 1 @@ -228,8 +221,8 @@ /obj/machinery/portable_atmospherics/powered/pump/huge/process(delta_time) if(!anchored || (machine_stat & (NOPOWER|BROKEN))) on = 0 - last_flow_rate = 0 - last_power_draw = 0 + last_flow_rate_legacy = 0 + last_power_draw_legacy = 0 update_icon() var/new_use_power = 1 + on if(new_use_power != use_power) @@ -262,8 +255,8 @@ power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 + last_flow_rate_legacy = 0 + last_power_draw_legacy = 0 else use_power(power_draw) update_connected_network() diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm new file mode 100644 index 00000000000..7a6eb429664 --- /dev/null +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -0,0 +1,205 @@ +/obj/machinery/portable_atmospherics/powered/scrubber + name = "portable air scrubber" + icon = 'icons/obj/atmos.dmi' + icon_state = "pscrubber:0" + density = TRUE + w_class = ITEMSIZE_NORMAL + + atmos_portable_ui_flags = ATMOS_PORTABLE_UI_TOGGLE_POWER | ATMOS_PORTABLE_UI_SEE_POWER | ATMOS_PORTABLE_UI_SEE_FLOW + power_maximum = 7500 + flow_maximum = 5000 + + volume = 1000 + + /// scrubbing ids + var/list/scrubbing_ids + /// scrubbing groups + var/scrubbing_groups + /// molar rate current + var/transfer_current = 0 + /// minimum moles to scrub per tick (if enough power) even if flow is not enough + var/scrub_mole_boost = 50 + +/obj/machinery/portable_atmospherics/powered/scrubber/Initialize(mapload) + . = ..() + cell = new /obj/item/cell/apc(src) + +//! LEGACY BELOW + +/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) + if(machine_stat & (BROKEN|NOPOWER)) + ..(severity) + return + + if(prob(50/severity)) + on = !on + update_icon() + + ..(severity) + +/obj/machinery/portable_atmospherics/powered/scrubber/update_icon_state() + . = ..() + if(on && cell && cell.charge) + icon_state = "pscrubber:1" + else + icon_state = "pscrubber:0" + +/obj/machinery/portable_atmospherics/powered/scrubber/update_overlays() + . = ..() + if(holding) + . += "scrubber-open" + + if(connected_port) + . += "scrubber-connector" + +//! LEGACY ABOVE + +/obj/machinery/portable_atmospherics/powered/scrubber/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["atmosContext"] = global.gas_data.tgui_gas_context() + .["scrubbingIds"] = scrubbing_ids + .["scrubbingGroups"] = scrubbing_groups + +/obj/machinery/portable_atmospherics/powered/scrubber/ui_data(mob/user) + . = ..() + .["moleRate"] = transfer_current + +/obj/machinery/portable_atmospherics/powered/scrubber/ui_act(action, params) + . = ..() + if(.) + return + + switch(action) + if("scrubID") + var/target = params["target"] + if(!istext(target)) + return FALSE + if(!global.gas_data.gas_id_filterable(target)) + return FALSE + if(target in scrubbing_ids) + scrubbing_ids -= target + else + scrubbing_ids += target + push_ui_data(data = list("scrubbingIds" = scrubbing_ids)) + return TRUE + if("scrubGroup") + var/target = params["target"] + if(!isnum(target)) + return FALSE + if(!global.gas_data.gas_groups_filterable(target)) + return FALSE + scrubbing_groups ^= target + push_ui_data(data = list("scrubbingGroups" = scrubbing_groups)) + return TRUE + +/obj/machinery/portable_atmospherics/powered/scrubber/process(delta_time) + ..() + + if(on && cell?.charge) + var/datum/gas_mixture/scrubbing = isnull(holding)? loc.return_air() : holding.air_contents + var/old_mols = scrubbing.total_moles + // todo: compensate for delta_time, right now this is not stable and will go faster/slower based on SSair tick rate. + power_current = xgm_scrub_gas_volume(scrubbing, air_contents, scrubbing_ids, scrubbing_groups, flow_setting / scrubbing.group_multiplier, power_setting * efficiency_multiplier, scrub_mole_boost) / efficiency_multiplier + transfer_current = (old_mols - scrubbing.total_moles) / delta_time + update_connected_network() + + if(power_current) + use_power(power_current, dt = delta_time) + +//Huge scrubber +/obj/machinery/portable_atmospherics/powered/scrubber/huge + name = "Huge Air Scrubber" + icon = 'icons/obj/atmos_vr.dmi' + icon_state = "scrubber:0" + anchored = TRUE + // just 1 million because no way to offload. yet. + volume = 1000000 + flow_maximum = 50000 + use_cell = FALSE + + use_power = USE_POWER_IDLE + idle_power_usage = 50 //internal circuitry, friction losses and stuff + active_power_usage = 1000 // Blowers running + power_maximum = 100000 //100 kW ~ 135 HP + + var/global/gid = 1 + var/id = 0 + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/Initialize(mapload) + . = ..() + cell = null + + id = gid + gid++ + + name = "[name] (ID [id])" + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/attack_hand(mob/user, list/params) + to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.") + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon() + cut_overlays() + + if(on && !(machine_stat & (NOPOWER|BROKEN))) + icon_state = "scrubber:1" + else + icon_state = "scrubber:0" + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/power_change() + var/old_stat = machine_stat + ..() + if (old_stat != machine_stat) + update_icon() + + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(I.is_wrench()) + if(on) + to_chat(user, "Turn \the [src] off first!") + return + + anchored = !anchored + playsound(src.loc, I.tool_sound, 50, 1) + to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") + + return + + //doesn't use power cells + if(istype(I, /obj/item/cell)) + return + if(I.is_screwdriver()) + return + + //doesn't hold tanks + if(istype(I, /obj/item/tank)) + return + + ..() + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary + name = "Stationary Air Scrubber" + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(I.is_wrench()) + to_chat(user, "The bolts are too tight for you to unscrew!") + return + + ..() + +// Tether tram air scrubbers for keeping arrivals clean - they work even with no area power +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram + name = "\improper Tram Air Scrubber" + icon_state = "scrubber:1" + on = TRUE + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram/powered() + return TRUE // Always be powered + +// Triumph shuttle air scrubbers for keeping arrivals clean - they work even with no area power +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/shuttle + name = "\improper Shuttle Air Scrubber" + icon_state = "scrubber:1" + on = TRUE + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/shuttle/powered() + return TRUE // Always be powered diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/modules/atmospherics/machinery/zvent.dm similarity index 96% rename from code/game/machinery/atmoalter/zvent.dm rename to code/modules/atmospherics/machinery/zvent.dm index 0857757e7c9..2c22dbe9e65 100644 --- a/code/game/machinery/atmoalter/zvent.dm +++ b/code/modules/atmospherics/machinery/zvent.dm @@ -1,3 +1,5 @@ +// todo: this is in the wrong folder + /obj/machinery/zvent name = "Interfloor Air Transfer System" diff --git a/code/modules/cargo/supplypacks/hydroponics.dm b/code/modules/cargo/supplypacks/hydroponics.dm index 9788fd40238..7c3ceea420a 100644 --- a/code/modules/cargo/supplypacks/hydroponics.dm +++ b/code/modules/cargo/supplypacks/hydroponics.dm @@ -56,7 +56,7 @@ /obj/item/reagent_containers/glass/bottle/ammonia = 2, /obj/item/material/knife/machete/hatchet, /obj/item/material/minihoe, - /obj/item/analyzer/plant_analyzer, + /obj/item/plant_analyzer, /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/suit/storage/apron, /obj/item/material/minihoe, diff --git a/code/modules/cargo/supplypacks/misc.dm b/code/modules/cargo/supplypacks/misc.dm index ebb5de441e8..b051d957c6f 100644 --- a/code/modules/cargo/supplypacks/misc.dm +++ b/code/modules/cargo/supplypacks/misc.dm @@ -302,7 +302,7 @@ contains = list( /obj/fiftyspawner/wax = 2, /obj/item/healthanalyzer/apidean = 1, - /obj/item/analyzer/apidean = 1, + /obj/item/atmos_analyzer/apidean = 1, /obj/item/reagent_scanner/apidean = 1, /mob/living/bot/medibot/apidean = 1, /obj/item/reagent_containers/food/drinks/bottle/ambrosia_mead = 2, diff --git a/code/modules/cargo/supplypacks/supply.dm b/code/modules/cargo/supplypacks/supply.dm index ea67dbe749f..f6ffa2e7119 100644 --- a/code/modules/cargo/supplypacks/supply.dm +++ b/code/modules/cargo/supplypacks/supply.dm @@ -102,7 +102,7 @@ /obj/item/clothing/under/rank/miner, /obj/item/clothing/gloves/black, /obj/item/clothing/shoes/black, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/storage/bag/ore, /obj/item/flashlight/lantern, /obj/item/shovel, diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 3aae23b9922..31240d01e16 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -12,7 +12,7 @@ siemens_coefficient = 0.9 armor_type = /datum/armor/mask/gas var/gas_filter_strength = 1 //For gas mask filters - var/list/filtered_gases = list(/datum/gas/phoron, /datum/gas/nitrous_oxide) + var/list/filtered_gases = list(GAS_ID_PHORON, GAS_ID_NITROUS_OXIDE) /obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air) var/datum/gas_mixture/gas_filtered = new @@ -107,7 +107,7 @@ atom_flags = PHORONGUARD clothing_flags = BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS species_restricted = list(SPECIES_VOX) - filtered_gases = list(/datum/gas/oxygen, /datum/gas/nitrous_oxide) + filtered_gases = list(GAS_ID_OXYGEN, GAS_ID_NITROUS_OXIDE) var/mask_open = FALSE // Controls if the Vox can eat through this mask action_button_name = "Toggle Feeding Port" @@ -127,7 +127,6 @@ if(.) return feeding_port(user) - ..() /obj/item/clothing/mask/gas/zaddat name = "Zaddat Veil" @@ -136,8 +135,8 @@ item_state = "vax_mask" //body_cover_flags = 0 species_restricted = list(SPECIES_ZADDAT) + filtered_gases = list(GAS_ID_PHORON, GAS_ID_NITROUS_OXIDE, GAS_ID_NITROGEN) inv_hide_flags = HIDEEARS //semi-transparent - filtered_gases = list(/datum/gas/phoron, /datum/gas/nitrous_oxide, /datum/gas/nitrogen) /obj/item/clothing/mask/gas/opaque name = "Opaque Mask" diff --git a/code/modules/clothing/spacesuits/void/event.dm b/code/modules/clothing/spacesuits/void/event.dm index fcfbc95dd36..7524e74fa5f 100644 --- a/code/modules/clothing/spacesuits/void/event.dm +++ b/code/modules/clothing/spacesuits/void/event.dm @@ -248,7 +248,7 @@ /obj/item/measuring_tape, /obj/item/reagent_scanner, /obj/item/robotanalyzer, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/cataloguer, /obj/item/universal_translator, /obj/item/tool/crowbar, diff --git a/code/modules/clothing/suits/aliens/tajara.dm b/code/modules/clothing/suits/aliens/tajara.dm index 379ed1cca5f..e86caf3513b 100644 --- a/code/modules/clothing/suits/aliens/tajara.dm +++ b/code/modules/clothing/suits/aliens/tajara.dm @@ -43,7 +43,7 @@ blood_overlay_type = "coat" body_cover_flags = UPPER_TORSO|ARMS inv_hide_flags = HIDEHOLSTER - allowed = list(/obj/item/analyzer,/obj/item/stack/medical,/obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) + allowed = list(/obj/item/atmos_analyzer,/obj/item/stack/medical,/obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) armor_type = /datum/armor/suit/labcoat /obj/item/clothing/suit/storage/toggle/tajaran/coat/wool diff --git a/code/modules/clothing/suits/hooded.dm b/code/modules/clothing/suits/hooded.dm index b0e05f03b9e..c50a1548aae 100644 --- a/code/modules/clothing/suits/hooded.dm +++ b/code/modules/clothing/suits/hooded.dm @@ -196,7 +196,7 @@ armor_type = /datum/armor/medical/coat hoodtype = /obj/item/clothing/head/hood/winter/medical allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/tank/emergency/oxygen, /obj/item/storage/fancy/cigarettes, - /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/analyzer,/obj/item/stack/medical, + /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/atmos_analyzer,/obj/item/stack/medical, /obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle) @@ -239,7 +239,7 @@ armor_type = /datum/armor/science/coat hoodtype = /obj/item/clothing/head/hood/winter/science allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/tank/emergency/oxygen, /obj/item/storage/fancy/cigarettes, - /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/analyzer,/obj/item/stack/medical, + /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/atmos_analyzer,/obj/item/stack/medical, /obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle) @@ -264,7 +264,7 @@ armor_type = /datum/armor/engineering/coat hoodtype = /obj/item/clothing/head/hood/winter/engineering allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/tank/emergency/oxygen, /obj/item/storage/fancy/cigarettes, - /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/analyzer, /obj/item/flashlight, + /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/atmos_analyzer, /obj/item/flashlight, /obj/item/multitool, /obj/item/pipe_painter, /obj/item/radio, /obj/item/t_scanner, /obj/item/tool/crowbar, /obj/item/tool/screwdriver, /obj/item/weldingtool, /obj/item/tool/wirecutters, /obj/item/tool/wrench, /obj/item/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/barrier_tape_roll/engineering, /obj/item/rcd, /obj/item/pipe_dispenser) @@ -290,7 +290,7 @@ hoodtype = /obj/item/clothing/head/hood/winter/hydro allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/tank/emergency/oxygen, /obj/item/storage/fancy/cigarettes, /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/reagent_containers/spray/plantbgone, - /obj/item/analyzer/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/material/minihoe) + /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/material/minihoe) /obj/item/clothing/suit/storage/hooded/wintercoat/cargo name = "cargo winter coat" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 1387735860e..a70a3195cdd 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -10,7 +10,7 @@ item_state_slots = list(SLOT_ID_RIGHT_HAND = "overalls", SLOT_ID_LEFT_HAND = "overalls") blood_overlay_type = "armor" body_cover_flags = 0 - allowed = list (/obj/item/reagent_containers/spray/plantbgone, /obj/item/analyzer/plant_analyzer, /obj/item/seeds, + allowed = list (/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/material/minihoe) /obj/item/clothing/suit/storage/apron/white @@ -176,7 +176,7 @@ desc = "A high-visibility vest used in work zones." icon_state = "hazard" blood_overlay_type = "armor" - allowed = list (/obj/item/analyzer, /obj/item/flashlight, /obj/item/multitool, /obj/item/pipe_painter, /obj/item/radio, /obj/item/t_scanner, + allowed = list (/obj/item/atmos_analyzer, /obj/item/flashlight, /obj/item/multitool, /obj/item/pipe_painter, /obj/item/radio, /obj/item/t_scanner, /obj/item/tool/crowbar, /obj/item/tool/screwdriver, /obj/item/weldingtool, /obj/item/tool/wirecutters, /obj/item/tool/wrench, /obj/item/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/barrier_tape_roll/engineering) body_cover_flags = UPPER_TORSO @@ -285,7 +285,7 @@ armor_type = /datum/armor/medical/coat/field_medic valid_accessory_slots = (ACCESSORY_SLOT_INSIGNIA) allowed = list (/obj/item/gun,/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/tank/emergency/oxygen, /obj/item/storage/fancy/cigarettes, - /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/analyzer,/obj/item/stack/medical, + /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask, /obj/item/suit_cooling_unit, /obj/item/atmos_analyzer,/obj/item/stack/medical, /obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 02e1fc86a8a..53c0abab1e9 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -7,7 +7,7 @@ blood_overlay_type = "coat" body_cover_flags = UPPER_TORSO|ARMS inv_hide_flags = HIDEHOLSTER - allowed = list(/obj/item/analyzer,/obj/item/stack/medical,/obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) + allowed = list(/obj/item/atmos_analyzer,/obj/item/stack/medical,/obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) armor_type = /datum/armor/suit/labcoat worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL diff --git a/code/modules/clothing/suits/oricon.dm b/code/modules/clothing/suits/oricon.dm index 399a6e98075..fa77da88b1c 100644 --- a/code/modules/clothing/suits/oricon.dm +++ b/code/modules/clothing/suits/oricon.dm @@ -11,7 +11,7 @@ armor_type = /datum/armor/none siemens_coefficient = 0.9 inv_hide_flags = HIDEHOLSTER - allowed = list(/obj/item/tank/emergency/oxygen,/obj/item/flashlight,/obj/item/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/storage/fancy/cigarettes,/obj/item/flame/lighter,/obj/item/tape_recorder,/obj/item/analyzer,/obj/item/radio,/obj/item/barrier_tape_roll) + allowed = list(/obj/item/tank/emergency/oxygen,/obj/item/flashlight,/obj/item/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/storage/fancy/cigarettes,/obj/item/flame/lighter,/obj/item/tape_recorder,/obj/item/atmos_analyzer,/obj/item/radio,/obj/item/barrier_tape_roll) /obj/item/clothing/suit/storage/service/sysguard name = "\improper SysGuard jacket" diff --git a/code/modules/events/atmos_leak.dm b/code/modules/events/atmos_leak.dm index 59bf63b2c1d..ef5d6a2b04f 100644 --- a/code/modules/events/atmos_leak.dm +++ b/code/modules/events/atmos_leak.dm @@ -21,11 +21,11 @@ // Decide which area will be targeted! /datum/event/atmos_leak/setup() - var/gas_choices = list(/datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide) // Annoying + var/gas_choices = list(GAS_ID_CARBON_DIOXIDE, GAS_ID_NITROUS_OXIDE) // Annoying if(severity >= EVENT_LEVEL_MODERATE) - gas_choices += /datum/gas/phoron // Dangerous + gas_choices += GAS_ID_PHORON // Dangerous // if(severity >= EVENT_LEVEL_MAJOR) - // gas_choices += /datum/gas/volatile_fuel // Dangerous and no default atmos setup! + // gas_choices += GAS_ID_VOLATILE_FUEL // Dangerous and no default atmos setup! gas_type = pick(gas_choices) var/list/area/grand_list_of_areas = get_station_areas(excluded) @@ -54,7 +54,7 @@ return /datum/event/atmos_leak/announce() - command_announcement.Announce("Warning, hazardous [GLOB.meta_gas_names[gas_type]] gas leak detected in \the [target_area], evacuate the area and contain the damage!", "Hazard Alert") + command_announcement.Announce("Warning, hazardous [global.gas_data.names[gas_type]] gas leak detected in \the [target_area], evacuate the area and contain the damage!", "Hazard Alert") /datum/event/atmos_leak/start() // Okay, time to actually put the gas in the room! diff --git a/code/modules/events/supply_demand.dm b/code/modules/events/supply_demand.dm index aaad6d47c47..3e830155852 100644 --- a/code/modules/events/supply_demand.dm +++ b/code/modules/events/supply_demand.dm @@ -230,7 +230,7 @@ var/total_moles = mixture.total_moles var desc = "Canister filled to [round(pressure,0.1)] kPa with gas mixture:\n" for(var/gas in mixture.gas) - desc += "
- [GLOB.meta_gas_names[gas]]: [round((mixture.gas[gas] / total_moles) * 100)]%\n" + desc += "
- [global.gas_data.names[gas]]: [round((mixture.gas[gas] / total_moles) * 100)]%\n" return desc /datum/supply_demand_order/gas/match_item(var/obj/machinery/portable_atmospherics/canister) @@ -322,7 +322,7 @@ /datum/event/supply_demand/proc/choose_atmos_items(var/differentTypes) var/datum/gas_mixture/mixture = new mixture.temperature = T20C - var/unpickedTypes = gas_data.gases.Copy() + var/unpickedTypes = global.gas_data.gases.Copy() unpickedTypes -= "volatile_fuel" // Don't do that one for(var/i in 1 to differentTypes) var/gasId = pick(unpickedTypes) diff --git a/code/modules/gamemaster/actions/atmos_leak.dm b/code/modules/gamemaster/actions/atmos_leak.dm index 63f7546fc04..59dd4422cd1 100644 --- a/code/modules/gamemaster/actions/atmos_leak.dm +++ b/code/modules/gamemaster/actions/atmos_leak.dm @@ -22,11 +22,11 @@ EVENT_LEVEL_MAJOR = 3 ) - var/gas_choices = list(/datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide) // Annoying + var/gas_choices = list(GAS_ID_CARBON_DIOXIDE, GAS_ID_NITROUS_OXIDE) // Annoying if(severity >= EVENT_LEVEL_MODERATE) - gas_choices += /datum/gas/phoron // Dangerous + gas_choices += GAS_ID_PHORON // Dangerous if(severity >= EVENT_LEVEL_MAJOR) - gas_choices += /datum/gas/volatile_fuel // Dangerous and no default atmos setup! + gas_choices += GAS_ID_VOLATILE_FUEL // Dangerous and no default atmos setup! gas_type = pick(gas_choices) var/list/area/grand_list_of_areas = get_station_areas(excluded) @@ -55,7 +55,7 @@ /datum/gm_action/atmos_leak/announce() if(target_area) - command_announcement.Announce("Warning, hazardous [GLOB.meta_gas_names[gas_type]] gas leak detected in \the [target_area], evacuate the area.", "Hazard Alert") + command_announcement.Announce("Warning, hazardous [global.gas_data.names[gas_type]] gas leak detected in \the [target_area], evacuate the area.", "Hazard Alert") /datum/gm_action/atmos_leak/start() if(!target_turf) diff --git a/code/modules/hardsuits/suits/combat.dm b/code/modules/hardsuits/suits/combat.dm index 4e65120d7b9..6f0dcf4db3f 100644 --- a/code/modules/hardsuits/suits/combat.dm +++ b/code/modules/hardsuits/suits/combat.dm @@ -80,7 +80,7 @@ /obj/item/tool, /obj/item/multitool, /obj/item/radio, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/storage/briefcase/inflatable, /obj/item/melee/baton, /obj/item/gun, diff --git a/code/modules/hardsuits/suits/ert.dm b/code/modules/hardsuits/suits/ert.dm index a2ec96dd72b..5673f15fd00 100644 --- a/code/modules/hardsuits/suits/ert.dm +++ b/code/modules/hardsuits/suits/ert.dm @@ -35,7 +35,7 @@ /obj/item/tool/wrench, /obj/item/multitool, /obj/item/radio, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/storage/briefcase/inflatable, /obj/item/melee/baton, /obj/item/gun, diff --git a/code/modules/hardsuits/suits/pmc.dm b/code/modules/hardsuits/suits/pmc.dm index 4d28da9118b..df6f2242f75 100644 --- a/code/modules/hardsuits/suits/pmc.dm +++ b/code/modules/hardsuits/suits/pmc.dm @@ -33,7 +33,7 @@ /obj/item/tool/wrench, /obj/item/multitool, /obj/item/radio, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/storage/briefcase/inflatable, /obj/item/melee/baton, /obj/item/gun, diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index a70359683fe..2ad9e7ca486 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -98,7 +98,7 @@ B.fill() update_icon() return - else if(istype(I, /obj/item/analyzer/plant_analyzer)) + else if(istype(I, /obj/item/plant_analyzer)) to_chat(user, "Scan result of \the [src]...") to_chat(user, "Beehive is [bee_count ? "[round(bee_count)]% full" : "empty"].[bee_count > 90 ? " Colony is ready to split." : ""]") if(frames) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 1553cfa6920..67aac64879b 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -417,12 +417,12 @@ if(prob(5)) consume_gasses = list() - var/gas = pick(/datum/gas/oxygen,/datum/gas/nitrogen,/datum/gas/phoron,/datum/gas/carbon_dioxide) + var/gas = pick(GAS_ID_OXYGEN,GAS_ID_NITROGEN,GAS_ID_PHORON,GAS_ID_CARBON_DIOXIDE) consume_gasses[gas] = rand(3,9) if(prob(5)) exude_gasses = list() - var/gas = pick(/datum/gas/oxygen,/datum/gas/nitrogen,/datum/gas/phoron,/datum/gas/carbon_dioxide) + var/gas = pick(GAS_ID_OXYGEN,GAS_ID_NITROGEN,GAS_ID_PHORON,GAS_ID_CARBON_DIOXIDE) exude_gasses[gas] = rand(3,9) chems = list() diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 4bb1cc6b0c8..b940411fd9e 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -17,152 +17,6 @@ item_state = "hedget" damage_force = 7 //One point extra than standard wire cutters. -/obj/item/analyzer/plant_analyzer - name = "plant analyzer" - icon = 'icons/obj/device.dmi' - icon_state = "hydro" - item_state = "analyzer" - var/datum/seed/last_seed - var/list/last_reagents - -/obj/item/analyzer/plant_analyzer/attack_self(mob/user) - . = ..() - if(.) - return - ui_interact(user) - -/obj/item/analyzer/plant_analyzer/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PlantAnalyzer", name) - ui.open() - -/obj/item/analyzer/plant_analyzer/ui_state(mob/user, datum/tgui_module/module) - return GLOB.inventory_state - -/obj/item/analyzer/plant_analyzer/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state) - var/list/data = ..() - - var/datum/seed/grown_seed = locate(last_seed) - if(!istype(grown_seed)) - return list("no_seed" = TRUE) - - data["no_seed"] = FALSE - data["seed"] = grown_seed.get_tgui_analyzer_data(user) - data["reagents"] = last_reagents - - return data - -/obj/item/analyzer/plant_analyzer/ui_act(action, list/params, datum/tgui/ui) - if(..()) - return TRUE - - switch(action) - if("print") - print_report(usr) - return TRUE - if("close") - last_seed = null - last_reagents = null - return TRUE - -/obj/item/analyzer/plant_analyzer/afterattack(atom/target, mob/user, clickchain_flags, list/params) - if(!(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY)) - return - - var/datum/seed/grown_seed - var/datum/reagents/grown_reagents - if(istype(target,/obj/structure/table)) - return ..() - else if(istype(target,/obj/item/reagent_containers/food/snacks/grown)) - - var/obj/item/reagent_containers/food/snacks/grown/G = target - grown_seed = SSplants.seeds[G.plantname] - grown_reagents = G.reagents - - else if(istype(target,/obj/item/grown)) - - var/obj/item/grown/G = target - grown_seed = SSplants.seeds[G.plantname] - grown_reagents = G.reagents - - else if(istype(target,/obj/item/seeds)) - - var/obj/item/seeds/S = target - grown_seed = S.seed - - else if(istype(target,/obj/machinery/portable_atmospherics/hydroponics)) - - var/obj/machinery/portable_atmospherics/hydroponics/H = target - if(H.frozen == 1) - to_chat(user, "Disable the cryogenic freezing first!") - return - grown_seed = H.seed - grown_reagents = H.reagents - - if(!grown_seed) - to_chat(user, "[src] can tell you nothing about \the [target].") - return - - last_seed = REF(grown_seed) - - user.visible_message("[user] runs the scanner over \the [target].") - - last_reagents = list() - if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len) - for(var/datum/reagent/R in grown_reagents.reagent_list) - last_reagents.Add(list(list( - "name" = R.name, - "volume" = grown_reagents.get_reagent_amount(R.id), - ))) - - ui_interact(user) - -/obj/item/analyzer/plant_analyzer/proc/print_report_verb() - set name = "Print Plant Report" - set category = "Object" - set src = usr - - if(usr.stat || usr.restrained() || usr.lying) - return - print_report(usr) - -/obj/item/analyzer/plant_analyzer/proc/print_report(var/mob/living/user) - var/datum/seed/grown_seed = locate(last_seed) - if(!istype(grown_seed)) - to_chat(user, SPAN_WARNING("There is no scan data to print.")) - return - - var/form_title = "[grown_seed.seed_name] (#[grown_seed.uid])" - var/dat = "

Plant data for [form_title]

" - dat += "

General Data

" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
Endurance[grown_seed.get_trait(TRAIT_ENDURANCE)]
Yield[grown_seed.get_trait(TRAIT_YIELD)]
Maturation time[grown_seed.get_trait(TRAIT_MATURATION)]
Production time[grown_seed.get_trait(TRAIT_PRODUCTION)]
Potency[grown_seed.get_trait(TRAIT_POTENCY)]
" - - if(LAZYLEN(last_reagents)) - dat += "

Reagent Data

" - dat += "
This sample contains: " - for(var/i in 1 to LAZYLEN(last_reagents)) - dat += "
- [last_reagents[i]["name"]], [last_reagents[i]["volume"]] unit(s)" - - dat += "

Other Data

" - - var/list/ui_data = grown_seed.get_tgui_analyzer_data() - - dat += jointext(ui_data["trait_info"], "
\n") - - var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) - P.name = "paper - [form_title]" - P.info = "[dat]" - if(istype(user,/mob/living/carbon/human)) - user.put_in_hands(P) - user.visible_message("\The [src] spits out a piece of paper.") - return /datum/seed/proc/get_tgui_analyzer_data(mob/user) var/list/data = list() @@ -285,7 +139,7 @@ amount = "large amounts of " else if(exude_gasses[gas] < 5) amount = "small amounts of " - data["trait_info"] += "It will release [amount][GLOB.meta_gas_names[gas]] into the environment." + data["trait_info"] += "It will release [amount][global.gas_data.names[gas]] into the environment." if(consume_gasses && consume_gasses.len) for(var/gas in consume_gasses) @@ -294,6 +148,6 @@ amount = "large amounts of " else if(consume_gasses[gas] < 5) amount = "small amounts of " - data["trait_info"] += "It will consume [amount][GLOB.meta_gas_names[gas]] from the environment." + data["trait_info"] += "It will consume [amount][global.gas_data.names[gas]] from the environment." return data diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 12b86b0c35a..28608eb0ca9 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -1468,10 +1468,10 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple var/total_moles = environment.total_moles if (total_moles) - var/o2_level = environment.gas[/datum/gas/oxygen]/total_moles - var/n2_level = environment.gas[/datum/gas/nitrogen]/total_moles - var/co2_level = environment.gas[/datum/gas/carbon_dioxide]/total_moles - var/phoron_level = environment.gas[/datum/gas/phoron]/total_moles + var/o2_level = environment.gas[GAS_ID_OXYGEN]/total_moles + var/n2_level = environment.gas[GAS_ID_NITROGEN]/total_moles + var/co2_level = environment.gas[GAS_ID_CARBON_DIOXIDE]/total_moles + var/phoron_level = environment.gas[GAS_ID_PHORON]/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) set_pin_data(IC_OUTPUT, 1, pressure) set_pin_data(IC_OUTPUT, 2, round(environment.temperature-T0C,0.1)) @@ -1576,7 +1576,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple var/total_moles = environment.total_moles if (total_moles) - var/o2_level = environment.gas[/datum/gas/oxygen]/total_moles + var/o2_level = environment.gas[GAS_ID_OXYGEN]/total_moles set_pin_data(IC_OUTPUT, 1, round(o2_level*100,0.1)) else set_pin_data(IC_OUTPUT, 1, 0) @@ -1607,7 +1607,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple var/total_moles = environment.total_moles if (total_moles) - var/co2_level = environment.gas[/datum/gas/carbon_dioxide]/total_moles + var/co2_level = environment.gas[GAS_ID_CARBON_DIOXIDE]/total_moles set_pin_data(IC_OUTPUT, 1, round(co2_level*100,0.1)) else set_pin_data(IC_OUTPUT, 1, 0) @@ -1638,7 +1638,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple var/total_moles = environment.total_moles if (total_moles) - var/n2_level = environment.gas[/datum/gas/nitrogen]/total_moles + var/n2_level = environment.gas[GAS_ID_NITROGEN]/total_moles set_pin_data(IC_OUTPUT, 1, round(n2_level*100,0.1)) else set_pin_data(IC_OUTPUT, 1, 0) @@ -1669,7 +1669,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple var/total_moles = environment.total_moles if (total_moles) - var/phoron_level = environment.gas[/datum/gas/phoron]/total_moles + var/phoron_level = environment.gas[GAS_ID_PHORON]/total_moles set_pin_data(IC_OUTPUT, 1, round(phoron_level*100,0.1)) else set_pin_data(IC_OUTPUT, 1, 0) diff --git a/code/modules/jobs/job_types/station/service/botanist.dm b/code/modules/jobs/job_types/station/service/botanist.dm index 25b4381a00f..568aa45b2e7 100644 --- a/code/modules/jobs/job_types/station/service/botanist.dm +++ b/code/modules/jobs/job_types/station/service/botanist.dm @@ -35,7 +35,7 @@ uniform = /obj/item/clothing/under/rank/hydroponics suit = /obj/item/clothing/suit/storage/apron - suit_store = /obj/item/analyzer/plant_analyzer + suit_store = /obj/item/plant_analyzer gloves = /obj/item/clothing/gloves/botanic_leather backpack = /obj/item/storage/backpack/hydroponics diff --git a/code/modules/mapping/map_helpers/network_builder/power_cable.dm b/code/modules/mapping/map_helpers/network_builder/power_cable.dm index 1e6a93cb89b..a87b59ba7bc 100644 --- a/code/modules/mapping/map_helpers/network_builder/power_cable.dm +++ b/code/modules/mapping/map_helpers/network_builder/power_cable.dm @@ -68,41 +68,41 @@ icon_state = "powerlinebuilderauto" knot = KNOT_AUTO -#define WORK_HARDER_NOT_SMARTER \ - WORK_SMARTER_NOT_HARDER("Red", COLOR_RED) \ - WORK_SMARTER_NOT_HARDER("White", COLOR_WHITE) \ - WORK_SMARTER_NOT_HARDER("Silver", COLOR_SILVER) \ - WORK_SMARTER_NOT_HARDER("Gray", COLOR_GRAY) \ - WORK_SMARTER_NOT_HARDER("Black", COLOR_BLACK) \ - WORK_SMARTER_NOT_HARDER("Maroon", COLOR_MAROON) \ - WORK_SMARTER_NOT_HARDER("Yellow", COLOR_YELLOW) \ - WORK_SMARTER_NOT_HARDER("Olive", COLOR_OLIVE) \ - WORK_SMARTER_NOT_HARDER("Lime", COLOR_LIME) \ - WORK_SMARTER_NOT_HARDER("Green", COLOR_GREEN) \ - WORK_SMARTER_NOT_HARDER("Cyan", COLOR_CYAN) \ - WORK_SMARTER_NOT_HARDER("Teal", COLOR_TEAL) \ - WORK_SMARTER_NOT_HARDER("Blue", COLOR_BLUE) \ - WORK_SMARTER_NOT_HARDER("Navy", COLOR_NAVY) \ - WORK_SMARTER_NOT_HARDER("Pink", COLOR_PINK) \ - WORK_SMARTER_NOT_HARDER("Purple", COLOR_PURPLE) \ - WORK_SMARTER_NOT_HARDER("Orange", COLOR_ORANGE) \ - WORK_SMARTER_NOT_HARDER("Beige", COLOR_BEIGE) \ - WORK_SMARTER_NOT_HARDER("Brown", COLOR_BROWN) - -#define WORK_SMARTER_NOT_HARDER(c, v) \ -/obj/map_helper/network_builder/power_cable{ \ - color = v; \ - cable_color = c; \ -} \ -/obj/map_helper/network_builder/power_cable/auto{ \ - color = v; \ - cable_color = c; \ -} \ -/obj/map_helper/network_builder/power_cable/knot{ \ - color = v; \ - cable_color = c; \ +#define WORK_SMARTER_NOT_HARDER(c, v, p) \ +/obj/map_helper/network_builder/power_cable/##p{ \ + color = v; \ + cable_color = c; \ +} \ +/obj/map_helper/network_builder/power_cable/##p/auto{ \ + color = v; \ + cable_color = c; \ +} \ +/obj/map_helper/network_builder/power_cable/##p/knot{ \ + color = v; \ + cable_color = c; \ } +#define WORK_HARDER_NOT_SMARTER \ + WORK_SMARTER_NOT_HARDER("Red", COLOR_RED, red) \ + WORK_SMARTER_NOT_HARDER("White", COLOR_WHITE, white) \ + WORK_SMARTER_NOT_HARDER("Silver", COLOR_SILVER, silver) \ + WORK_SMARTER_NOT_HARDER("Gray", COLOR_GRAY, gray) \ + WORK_SMARTER_NOT_HARDER("Black", COLOR_BLACK, black) \ + WORK_SMARTER_NOT_HARDER("Maroon", COLOR_MAROON, maroon) \ + WORK_SMARTER_NOT_HARDER("Yellow", COLOR_YELLOW, yellow) \ + WORK_SMARTER_NOT_HARDER("Olive", COLOR_OLIVE, olive) \ + WORK_SMARTER_NOT_HARDER("Lime", COLOR_LIME, lime) \ + WORK_SMARTER_NOT_HARDER("Green", COLOR_GREEN, green) \ + WORK_SMARTER_NOT_HARDER("Cyan", COLOR_CYAN, cyan) \ + WORK_SMARTER_NOT_HARDER("Teal", COLOR_TEAL, teal) \ + WORK_SMARTER_NOT_HARDER("Blue", COLOR_BLUE, blue) \ + WORK_SMARTER_NOT_HARDER("Navy", COLOR_NAVY, navy) \ + WORK_SMARTER_NOT_HARDER("Pink", COLOR_PINK, pink) \ + WORK_SMARTER_NOT_HARDER("Purple", COLOR_PURPLE, purple) \ + WORK_SMARTER_NOT_HARDER("Orange", COLOR_ORANGE, orange) \ + WORK_SMARTER_NOT_HARDER("Beige", COLOR_BEIGE, beige) \ + WORK_SMARTER_NOT_HARDER("Brown", COLOR_BROWN, brown) + WORK_HARDER_NOT_SMARTER // LMAO! #undef WORK_HARDER_NOT_SMARTER diff --git a/code/modules/maps/_shim/away_spawner.dm b/code/modules/maps/_shim/away_spawner.dm index d4d349007fb..beff6090453 100644 --- a/code/modules/maps/_shim/away_spawner.dm +++ b/code/modules/maps/_shim/away_spawner.dm @@ -71,21 +71,21 @@ For now this is still usable but bad. var/list/gaslist = env.gas if(my_mob.min_oxy) - my_mob.min_oxy = gaslist[/datum/gas/oxygen] * 0.8 + my_mob.min_oxy = gaslist[GAS_ID_OXYGEN] * 0.8 if(my_mob.min_tox) - my_mob.min_tox = gaslist[/datum/gas/phoron] * 0.8 + my_mob.min_tox = gaslist[GAS_ID_PHORON] * 0.8 if(my_mob.min_n2) - my_mob.min_n2 = gaslist[/datum/gas/nitrogen] * 0.8 + my_mob.min_n2 = gaslist[GAS_ID_NITROGEN] * 0.8 if(my_mob.min_co2) - my_mob.min_co2 = gaslist[/datum/gas/carbon_dioxide] * 0.8 + my_mob.min_co2 = gaslist[GAS_ID_CARBON_DIOXIDE] * 0.8 if(my_mob.max_oxy) - my_mob.max_oxy = gaslist[/datum/gas/oxygen] * 1.2 + my_mob.max_oxy = gaslist[GAS_ID_OXYGEN] * 1.2 if(my_mob.max_tox) - my_mob.max_tox = gaslist[/datum/gas/phoron] * 1.2 + my_mob.max_tox = gaslist[GAS_ID_PHORON] * 1.2 if(my_mob.max_n2) - my_mob.max_n2 = gaslist[/datum/gas/nitrogen] * 1.2 + my_mob.max_n2 = gaslist[GAS_ID_NITROGEN] * 1.2 if(my_mob.max_co2) - my_mob.max_co2 = gaslist[/datum/gas/carbon_dioxide] * 1.2 + my_mob.max_co2 = gaslist[GAS_ID_CARBON_DIOXIDE] * 1.2 return else STOP_PROCESSING(SSobj, src) diff --git a/code/modules/maps/misc_maps/geothermal_vent/geothermal_vent.dm b/code/modules/maps/misc_maps/geothermal_vent/geothermal_vent.dm index b4814c8c454..5b097ab6a7d 100644 --- a/code/modules/maps/misc_maps/geothermal_vent/geothermal_vent.dm +++ b/code/modules/maps/misc_maps/geothermal_vent/geothermal_vent.dm @@ -2,16 +2,15 @@ #define GEOTHERMAL_TEMP 2473.15 /datum/atmosphere/geothermal_vent - base_gases = list( - /datum/gas/carbon_dioxide = 0.5, - /datum/gas/sulfur_dioxide = 0.34, - /datum/gas/carbon_monoxide = 0.16, + base = list( + /datum/gas/carbon_dioxide = 0.5, + /datum/gas/sulfur_dioxide = 0.34, + /datum/gas/carbon_monoxide = 0.16, ) - base_target_pressure = 376.9 - minimum_pressure = 376.9 - maximum_pressure = 376.9 - minimum_temp = GEOTHERMAL_TEMP - 10 - maximum_temp = GEOTHERMAL_TEMP + 10 + pressure_high = 376.9 + pressure_low = 376.9 + temperature_low = GEOTHERMAL_TEMP - 10 + temperature_high = GEOTHERMAL_TEMP + 10 //Turfmakers #define GEOTHERMAL_SET_ATMOS initial_gas_mix = ATMOSPHERE_ID_GEOTHERMAL diff --git a/code/modules/maps/overmap/planets/_virgo3b.dm b/code/modules/maps/overmap/planets/_virgo3b.dm index f52e42652fa..8cb4e6cac89 100644 --- a/code/modules/maps/overmap/planets/_virgo3b.dm +++ b/code/modules/maps/overmap/planets/_virgo3b.dm @@ -1,15 +1,14 @@ /datum/atmosphere/planet/virgo3b - base_gases = list( - /datum/gas/nitrogen = 0.16, - /datum/gas/phoron = 0.72, - /datum/gas/carbon_dioxide = 0.12 + base = list( + /datum/gas/nitrogen = 0.16, + /datum/gas/phoron = 0.72, + /datum/gas/carbon_dioxide = 0.12, ) - base_target_pressure = 82.4 - minimum_pressure = 82.4 - maximum_pressure = 82.4 - minimum_temp = 234 - maximum_temp = 234 + pressure_low = 82.4 + pressure_high = 82.4 + temperature_low = 234 + temperature_high = 234 /obj/overmap/entity/visitable/sector/virgo3b name = "Virgo 3B" diff --git a/code/modules/maps/overmap/planets/virgo2.dm b/code/modules/maps/overmap/planets/virgo2.dm index 17e197a3898..8ae65454434 100644 --- a/code/modules/maps/overmap/planets/virgo2.dm +++ b/code/modules/maps/overmap/planets/virgo2.dm @@ -1,16 +1,14 @@ // V2 doesnt actually have its own weather so this is gonna be here for now /datum/atmosphere/planet/virgo2 - base_gases = list( - /datum/gas/nitrogen = 0.10, - /datum/gas/oxygen = 0.03, - /datum/gas/carbon_dioxide = 0.87 + base = list( + /datum/gas/nitrogen = 0.10, + /datum/gas/oxygen = 0.03, + /datum/gas/carbon_dioxide = 0.87, ) - base_target_pressure = 312.1 - minimum_pressure = 312.1 - maximum_pressure = 312.1 - minimum_temp = 612 - maximum_temp = 612 - + pressure_low = 312.1 + pressure_high = 312.1 + temperature_low = 612 + temperature_high = 612 /obj/overmap/entity/visitable/sector/virgo2 name = "Virgo 2" diff --git a/code/modules/maps/overmap/space/debrisfield.dm b/code/modules/maps/overmap/space/debrisfield.dm index 5125abede3e..26d8cafe8f7 100644 --- a/code/modules/maps/overmap/space/debrisfield.dm +++ b/code/modules/maps/overmap/space/debrisfield.dm @@ -194,11 +194,7 @@ A.name = "[newname] [initial(A.name)]" if(A.apc) A.apc.name = "[A.name] APC" - A.air_vent_names = list() - A.air_scrub_names = list() - A.air_vent_info = list() - A.air_scrub_info = list() - for(var/obj/machinery/alarm/AA in A) + for(var/obj/machinery/air_alarm/AA in A) AA.name = "[A.name] Air Alarm" /obj/machinery/computer/shuttle_control/explore/tinycarrier diff --git a/code/modules/maps/overmap/space/talon/talon.dm b/code/modules/maps/overmap/space/talon/talon.dm index c8b57c4e871..562cac66e18 100644 --- a/code/modules/maps/overmap/space/talon/talon.dm +++ b/code/modules/maps/overmap/space/talon/talon.dm @@ -180,7 +180,7 @@ Once in open space, consider disabling nonessential power-consuming electronics /obj/machinery/power/apc/talon/hyper cell_type = /obj/item/cell/hyper -/obj/machinery/alarm/talon +/obj/machinery/air_alarm/talon req_access = list() req_one_access = list(ACCESS_FACTION_TALON) alarms_hidden = 1 diff --git a/code/modules/maps/weather/classd.dm b/code/modules/maps/weather/classd.dm index ababd1e40bf..034b72843f6 100644 --- a/code/modules/maps/weather/classd.dm +++ b/code/modules/maps/weather/classd.dm @@ -1,12 +1,11 @@ /datum/atmosphere/planet/classd - base_gases = list( - /datum/gas/nitrogen = 0.01 + base = list( + /datum/gas/nitrogen = 0.01, ) - base_target_pressure = 0.1 - minimum_pressure = 0.1 - maximum_pressure = 0.5 - minimum_temp = 203 - maximum_temp = 203 + pressure_low = 0.1 + pressure_high = 0.5 + temperature_low = 203 + temperature_high = 203 /datum/time/classd diff --git a/code/modules/maps/weather/classg.dm b/code/modules/maps/weather/classg.dm index 3275434f958..546fded001a 100644 --- a/code/modules/maps/weather/classg.dm +++ b/code/modules/maps/weather/classg.dm @@ -1,15 +1,13 @@ /datum/atmosphere/planet/classg - base_gases = list( - /datum/gas/oxygen = 10, - /datum/gas/nitrogen = 10, - /datum/gas/phoron = 80 + base = list( + /datum/gas/oxygen = 10, + /datum/gas/nitrogen = 10, + /datum/gas/phoron = 80, ) - base_target_pressure = 110.1 - minimum_pressure = 110.1 - maximum_pressure = 110.1 - minimum_temp = 293.3 - maximum_temp = 307.3 - + pressure_low = 110.1 + pressure_high = 110.1 + temperature_low = 293.3 + temperature_high = 307.3 /datum/time/classg seconds_in_day = 3 HOURS diff --git a/code/modules/maps/weather/classh.dm b/code/modules/maps/weather/classh.dm index a1f01bb3760..45ad69f0df8 100644 --- a/code/modules/maps/weather/classh.dm +++ b/code/modules/maps/weather/classh.dm @@ -1,14 +1,13 @@ /datum/atmosphere/planet/classh - base_gases = list( - /datum/gas/oxygen = 0.24, - /datum/gas/nitrogen = 0.72, - /datum/gas/carbon_dioxide = 0.04 + base = list( + /datum/gas/oxygen = 0.24, + /datum/gas/nitrogen = 0.72, + /datum/gas/carbon_dioxide = 0.04, ) - base_target_pressure = 110.1 - minimum_pressure = 110.1 - maximum_pressure = 110.1 - minimum_temp = 317.3 //Barely enough to avoid baking Teshari - maximum_temp = 317.3 + pressure_low = 110.1 + pressure_high = 110.1 + temperature_low = 317.3 //Barely enough to avoid baking Teshari + temperature_high = 317.3 /datum/time/classh diff --git a/code/modules/maps/weather/classm.dm b/code/modules/maps/weather/classm.dm index f964b9ee0e8..894626d29d4 100644 --- a/code/modules/maps/weather/classm.dm +++ b/code/modules/maps/weather/classm.dm @@ -1,14 +1,12 @@ /datum/atmosphere/planet/classm - base_gases = list( - /datum/gas/oxygen = 0.22, - /datum/gas/nitrogen = 0.78 + base = list( + /datum/gas/oxygen = 0.22, + /datum/gas/nitrogen = 0.78, ) - base_target_pressure = 110.1 - minimum_pressure = 110.1 - maximum_pressure = 110.1 - minimum_temp = 293.3 - maximum_temp = 307.3 - + pressure_low = 110.1 + pressure_high = 110.1 + temperature_low = 293.3 + temperature_high = 307.3 /datum/time/classm seconds_in_day = 10 HOURS diff --git a/code/modules/maps/weather/classp.dm b/code/modules/maps/weather/classp.dm index 4b6a180d78b..c744f3a55c0 100644 --- a/code/modules/maps/weather/classp.dm +++ b/code/modules/maps/weather/classp.dm @@ -1,15 +1,12 @@ /datum/atmosphere/planet/classp - base_gases = list( - /datum/gas/oxygen = 0.23, - /datum/gas/nitrogen = 0.77 + base = list( + /datum/gas/oxygen = 0.23, + /datum/gas/nitrogen = 0.77, ) - base_target_pressure = 100.1 - minimum_pressure = 100.1 - maximum_pressure = 100.1 - minimum_temp = 225.3 - maximum_temp = 230.3 - - + pressure_low = 100.1 + pressure_high = 100.1 + temperature_low = 225.3 + temperature_high = 230.3 /datum/time/classp seconds_in_day = 2 HOURS diff --git a/code/modules/maps/weather/lavaland.dm b/code/modules/maps/weather/lavaland.dm index 1393621c102..f1d3b825856 100644 --- a/code/modules/maps/weather/lavaland.dm +++ b/code/modules/maps/weather/lavaland.dm @@ -1,16 +1,13 @@ /datum/atmosphere/planet/lavaland - base_gases = list( - /datum/gas/oxygen = 0.14, - /datum/gas/nitrogen = 0.20, - /datum/gas/carbon_dioxide = 0.66 + base = list( + /datum/gas/oxygen = 0.14, + /datum/gas/nitrogen = 0.20, + /datum/gas/carbon_dioxide = 0.66, ) - base_target_pressure = 35.1 - minimum_pressure = 32.1 - maximum_pressure = 37.1 - minimum_temp = 310.3 - maximum_temp = 350.1 - - + pressure_low = 32.1 + pressure_high = 37.1 + temperature_low = 310.3 + temperature_high = 350.1 /datum/time/lavaland seconds_in_day = 2 HOURS diff --git a/code/modules/maps/weather/rift_lythios-43c.dm b/code/modules/maps/weather/rift_lythios-43c.dm index 0ac79beb9d7..607e0d7d82a 100644 --- a/code/modules/maps/weather/rift_lythios-43c.dm +++ b/code/modules/maps/weather/rift_lythios-43c.dm @@ -1,13 +1,12 @@ /datum/atmosphere/planet/lythios43c - base_gases = list( - /datum/gas/nitrogen = 0.66, - /datum/gas/oxygen = 0.34 + base = list( + /datum/gas/nitrogen = 0.66, + /datum/gas/oxygen = 0.34, ) - base_target_pressure = 76.9 - minimum_pressure = 76.9 - maximum_pressure = 76.9 - minimum_temp = 220.14 - maximum_temp = 241.72 + pressure_low = 76.9 + pressure_high = 76.9 + temperature_low = 220.14 + temperature_high = 241.72 /datum/time/lythios43c seconds_in_day = 10 HOURS diff --git a/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm b/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm index 3454b9e52af..9cccb526086 100644 --- a/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm @@ -41,7 +41,7 @@ new /datum/data/mining_equipment("Power Tool - Experimental Welder", /obj/item/weldingtool/experimental, 80), new /datum/data/mining_equipment("Power Tool - Upgraded T-Ray Scanner", /obj/item/t_scanner/upgraded, 80), new /datum/data/mining_equipment("Power Tool - Advanced T-Ray Scanner", /obj/item/t_scanner/advanced, 80), - new /datum/data/mining_equipment("Power Tool - Long Range Atmosphere scanner", /obj/item/analyzer/longrange, 80), + new /datum/data/mining_equipment("Power Tool - Long Range Atmosphere scanner", /obj/item/atmos_analyzer/longrange, 80), //new /datum/data/mining_equipment("Power Tool - Holofan Projector", /obj/item/holosign_creator/combifan, 80), new /datum/data/mining_equipment("Superior Welding Goggles", /obj/item/clothing/glasses/welding/superior, 50), @@ -140,7 +140,7 @@ /obj/item/tank/vimur/Initialize(mapload) . = ..() - src.air_contents.adjust_gas(/datum/gas/vimur, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + src.air_contents.adjust_gas(GAS_ID_VIMUR, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) return . /obj/item/engineering_voucher diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index c4de4f76bbc..611b14d17bc 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -276,7 +276,7 @@ new /obj/item/material/minihoe(Tsec) new /obj/item/reagent_containers/glass/bucket(Tsec) new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/analyzer/plant_analyzer(Tsec) + new /obj/item/plant_analyzer(Tsec) if(tank) tank.loc = Tsec @@ -367,7 +367,7 @@ /obj/item/farmbot_arm_assembly/attackby(obj/item/W as obj, mob/user as mob) ..() - if((istype(W, /obj/item/analyzer/plant_analyzer)) && (build_step == 0)) + if((istype(W, /obj/item/plant_analyzer)) && (build_step == 0)) if(!user.attempt_consume_item_for_construction(W)) return build_step++ diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 4503efab081..1d71145ef89 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -5,7 +5,7 @@ if(!environment) return var/turf/T = get_turf(src) - if(environment.gas[/datum/gas/phoron] > 0 || (T && locate(/obj/effect/alien/weeds) in T.contents)) + if(environment.gas[GAS_ID_PHORON] > 0 || (T && locate(/obj/effect/alien/weeds) in T.contents)) update_progression() adjustBruteLoss(-1) adjustFireLoss(-1) diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index 9c75e40b34b..5e7ead6578f 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -2,7 +2,7 @@ //Start of a breath chain, calls breathe() /mob/living/carbon/handle_breathing() - if(air_master.current_cycle%4==2 || failed_last_breath || (health < config_legacy.health_threshold_crit)) //First, resolve location and get a breath + if(SSair.current_cycle%4==2 || failed_last_breath || (health < config_legacy.health_threshold_crit)) //First, resolve location and get a breath breathe() /mob/living/carbon/proc/breathe() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f330fb27366..c2c38c36c98 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -475,13 +475,13 @@ if(species.breath_type) breath_type = species.breath_type else - breath_type = /datum/gas/oxygen + breath_type = GAS_ID_OXYGEN inhaling = breath.gas[breath_type] if(species.poison_type) poison_type = species.poison_type else - poison_type = /datum/gas/phoron + poison_type = GAS_ID_PHORON poison = breath.gas[poison_type] if(species.exhale_type) @@ -559,8 +559,8 @@ phoron_alert = 0 // If there's some other shit in the air lets deal with it here. - if(breath.gas[/datum/gas/nitrous_oxide]) - var/SA_pp = (breath.gas[/datum/gas/nitrous_oxide] / breath.total_moles) * breath_pressure + if(breath.gas[GAS_ID_NITROUS_OXIDE]) + var/SA_pp = (breath.gas[GAS_ID_NITROUS_OXIDE] / breath.total_moles) * breath_pressure // Enough to make us paralysed for a bit if(SA_pp > SA_para_min) @@ -576,19 +576,23 @@ else if(SA_pp > 0.15) if(prob(20)) spawn(0) emote(pick("giggle", "laugh")) - breath.adjust_gas(/datum/gas/nitrous_oxide, -breath.gas[/datum/gas/nitrous_oxide]/6, update = 0) //update after + breath.adjust_gas(GAS_ID_NITROUS_OXIDE, -breath.gas[GAS_ID_NITROUS_OXIDE]/6, update = 0) //update after - for(var/gasname in breath.gas) //datum/gas/ - //var/datum/gas/gas = gasname + for(var/gasname in breath.gas) if(gasname == breath_type) continue - if(!GLOB.meta_gas_reagent_id[gasname]) + var/list/reagent_gas_data = global.gas_data.reagents[gasname] + if(!reagent_gas_data) continue + if(breath.gas[gasname] < reagent_gas_data[GAS_REAGENT_LIST_THRESHOLD]) + return // Little bit of sanity so we aren't trying to add 0.0000000001 units of CO2, and so we don't end up with 99999 units of CO2. - var/reagent_amount = breath.gas[gasname] * 10 * gas_to_process_ratio * GLOB.meta_gas_reagent_amount[gasname] //10 is for the u per gas mol, ratio is defined further up where we have the lungs for checks + var/reagent_id = reagent_gas_data[GAS_REAGENT_LIST_ID] + var/reagent_amount = (breath.gas[gasname] * reagent_gas_data[GAS_REAGENT_LIST_FACTOR] + reagent_gas_data[GAS_REAGENT_LIST_AMOUNT]) * gas_to_process_ratio + reagent_amount = min(reagent_amount, reagent_gas_data[GAS_REAGENT_LIST_MAX] - reagents.get_reagent_amount(reagent_id)) if(reagent_amount < 0.05) continue - reagents.add_reagent(GLOB.meta_gas_reagent_id[gasname], reagent_amount) + reagents.add_reagent(reagent_id, reagent_amount) breath.adjust_gas(gasname, -breath.gas[gasname], update = 0) //update after // Were we able to breathe? @@ -708,7 +712,7 @@ //Check for contaminants before anything else because we don't want to skip it. for(var/g in environment.gas) - if(GLOB.meta_gas_flags[g] & GAS_FLAG_CONTAMINANT && environment.gas[g] > GLOB.meta_gas_visibility[g] + 1) + if(global.gas_data.flags[g] & GAS_FLAG_CONTAMINANT && environment.gas[g] > 1) pl_effects() break @@ -1603,7 +1607,7 @@ stomach_contents.Remove(M) qdel(M) continue - if(air_master.current_cycle%3==1) + if(SSair.current_cycle%3==1) if(!(M.status_flags & STATUS_GODMODE)) M.adjustBruteLoss(5) nutrition += 10 diff --git a/code/modules/mob/living/defense.dm b/code/modules/mob/living/defense.dm index 199b93f03a3..97711ee2a8c 100644 --- a/code/modules/mob/living/defense.dm +++ b/code/modules/mob/living/defense.dm @@ -404,7 +404,7 @@ return 1 var/datum/gas_mixture/G = loc?.return_air() // Check if we're standing in an oxygenless environment - if(!G || (G.gas[/datum/gas/oxygen] < 1)) + if(!G || (G.gas[GAS_ID_OXYGEN] < 1)) ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire return 1 diff --git a/code/modules/mob/living/silicon/pai/software_modules/atmosphere_sensor.dm b/code/modules/mob/living/silicon/pai/software_modules/atmosphere_sensor.dm index dc6840d6653..f59258b9c0e 100644 --- a/code/modules/mob/living/silicon/pai/software_modules/atmosphere_sensor.dm +++ b/code/modules/mob/living/silicon/pai/software_modules/atmosphere_sensor.dm @@ -26,7 +26,7 @@ var/gases[0] for(var/g in env.gas) var/gas[0] - gas["name"] = GLOB.meta_gas_names[g] + gas["name"] = global.gas_data.names[g] gas["percent"] = round((env.gas[g] / t_moles) * 100) gases[++gases.len] = gas data["gas"] = gases diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 5ad0d841270..592dad83d96 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -84,7 +84,7 @@ to_chat(user, "Pressure: [round(pressure,0.1)] kPa") if(total_moles) for(var/g in environment.gas) - to_chat(user, "[GLOB.meta_gas_names[g]]: [round((environment.gas[g] / total_moles) * 100)]%") + to_chat(user, "[global.gas_data.names[g]]: [round((environment.gas[g] / total_moles) * 100)]%") to_chat(user, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)") /obj/item/dogborg/boop_module/afterattack(atom/target, mob/user, clickchain_flags, list/params) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index cdc94e169f2..60c78dbc91c 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -514,7 +514,7 @@ 'sound/vore/digest12.ogg') playsound(hound, churnsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) //If the timing is right, and there are items to be touched - if(air_master.current_cycle%3==1 && length(touchable_items)) + if(SSair.current_cycle%3==1 && length(touchable_items)) //Burn all the mobs or add them to the exclusion list var/volume = 0 diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm index 2ddae454fb0..3bbbdec23cf 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -67,7 +67,7 @@ // For growing flowers /obj/item/material/minihoe, /obj/item/material/knife/machete/hatchet, - /obj/item/analyzer/plant_analyzer, + /obj/item/plant_analyzer, /obj/item/storage/bag/plants, /obj/item/robot_harvester, diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station/drone.dm b/code/modules/mob/living/silicon/robot/robot_modules/station/drone.dm index 31760d807fa..1cc4b4f395f 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station/drone.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station/drone.dm @@ -24,7 +24,7 @@ /obj/item/pipe_painter, /obj/item/floor_painter, /obj/item/t_scanner, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/inflatable_dispenser/robot, /obj/item/barrier_tape_roll/engineering, /obj/item/pipe_dispenser diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station/engineering.dm b/code/modules/mob/living/silicon/robot/robot_modules/station/engineering.dm index 03f4facb0ec..364d122aa2a 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station/engineering.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station/engineering.dm @@ -88,7 +88,7 @@ /obj/item/tool/wirecutters/cyborg, /obj/item/multitool, /obj/item/t_scanner, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/barrier_tape_roll/engineering, /obj/item/gripper, /obj/item/gripper/circuit, @@ -162,7 +162,7 @@ /obj/item/multitool, /obj/item/t_scanner, /obj/item/rcd/electric/mounted/borg, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/barrier_tape_roll/engineering, /obj/item/inflatable_dispenser/robot, /obj/item/pickaxe/plasmacutter, diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station/service.dm b/code/modules/mob/living/silicon/robot/robot_modules/station/service.dm index da9dfa861e5..a26142e3434 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station/service.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station/service.dm @@ -109,7 +109,7 @@ src.modules += new /obj/item/reagent_containers/glass/bucket(src) src.modules += new /obj/item/material/minihoe(src) src.modules += new /obj/item/material/knife/machete/hatchet(src) - src.modules += new /obj/item/analyzer/plant_analyzer(src) + src.modules += new /obj/item/plant_analyzer(src) src.modules += new /obj/item/storage/bag/plants(src) src.modules += new /obj/item/robot_harvester(src) src.modules += new /obj/item/material/knife(src) @@ -305,7 +305,7 @@ /obj/item/reagent_containers/glass/bucket, /obj/item/material/minihoe, /obj/item/material/knife/machete/hatchet, - /obj/item/analyzer/plant_analyzer, + /obj/item/plant_analyzer, /obj/item/storage/bag/dogborg, /obj/item/robot_harvester, /obj/item/material/knife, diff --git a/code/modules/mob/living/simple_mob/life.dm b/code/modules/mob/living/simple_mob/life.dm index 7e895df6f7c..565252fa879 100644 --- a/code/modules/mob/living/simple_mob/life.dm +++ b/code/modules/mob/living/simple_mob/life.dm @@ -93,28 +93,28 @@ bodytemperature += ((Environment.temperature - bodytemperature) / 5) if(min_oxy) - if(Environment.gas[/datum/gas/oxygen] < min_oxy) + if(Environment.gas[GAS_ID_OXYGEN] < min_oxy) atmos_unsuitable = 1 if(max_oxy) - if(Environment.gas[/datum/gas/oxygen] > max_oxy) + if(Environment.gas[GAS_ID_OXYGEN] > max_oxy) atmos_unsuitable = 1 if(min_tox) - if(Environment.gas[/datum/gas/phoron] < min_tox) + if(Environment.gas[GAS_ID_PHORON] < min_tox) atmos_unsuitable = 2 if(max_tox) - if(Environment.gas[/datum/gas/phoron] > max_tox) + if(Environment.gas[GAS_ID_PHORON] > max_tox) atmos_unsuitable = 2 if(min_n2) - if(Environment.gas[/datum/gas/nitrogen] < min_n2) + if(Environment.gas[GAS_ID_NITROGEN] < min_n2) atmos_unsuitable = 1 if(max_n2) - if(Environment.gas[/datum/gas/nitrogen] > max_n2) + if(Environment.gas[GAS_ID_NITROGEN] > max_n2) atmos_unsuitable = 1 if(min_co2) - if(Environment.gas[/datum/gas/carbon_dioxide] < min_co2) + if(Environment.gas[GAS_ID_CARBON_DIOXIDE] < min_co2) atmos_unsuitable = 1 if(max_co2) - if(Environment.gas[/datum/gas/carbon_dioxide] > max_co2) + if(Environment.gas[GAS_ID_CARBON_DIOXIDE] > max_co2) atmos_unsuitable = 1 //Atmos effect diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm index f79a459dfb8..f3ffbce3f6d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm @@ -233,10 +233,10 @@ return var/datum/gas_mixture/GM = new if(prob(10)) - T.assume_gas(/datum/gas/phoron, 100, 1500+T0C) + T.assume_gas(GAS_ID_PHORON, 100, 1500+T0C) T.visible_message("\The [src]'s tank vents a cloud of heated gas!") else - T.assume_gas(/datum/gas/phoron, 5, istype(T) ? T.air.temperature : T20C) + T.assume_gas(GAS_ID_PHORON, 5, istype(T) ? T.air.temperature : T20C) visible_message("\The [src]'s tank ruptures!") T.assume_air(GM) return diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm index e879fa3b0f4..1aa984f4e01 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm @@ -180,7 +180,7 @@ /mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite() visible_message(SPAN_CRITICAL("\The [src] erupts in an inferno!")) for(var/turf/simulated/target_turf in get_ignition_turfs(25, 2)) - target_turf.assume_gas(/datum/gas/phoron, 30, 1500+T0C) + target_turf.assume_gas(GAS_ID_PHORON, 30, 1500+T0C) spawn(0) target_turf.hotspot_expose(1500+T0C, 400) qdel(src) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm index 94897831a70..387a8c5df44 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm @@ -95,7 +95,7 @@ var/global/list/grub_machine_overlays = list() if(istype(loc, /obj/machinery)) // to anyone who sees me on git blame, i'm not responsible for this shit code ~silicons - if(machine_effect && (air_master.current_cycle % 30)) + if(machine_effect && (SSair.current_cycle % 30)) for(var/mob/M in GLOB.player_list) SEND_IMAGE(M, machine_effect) if(prob(10)) diff --git a/code/modules/mob/observer/dead/dead.dm b/code/modules/mob/observer/dead/dead.dm index 5d51c0a34eb..c2fa4371a2e 100644 --- a/code/modules/mob/observer/dead/dead.dm +++ b/code/modules/mob/observer/dead/dead.dm @@ -447,19 +447,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/datum/gas_mixture/environment = usr.loc.return_air() - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles - to_chat(src, "Results:") - if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(src, "Pressure: [round(pressure,0.1)] kPa") - else - to_chat(src, "Pressure: [round(pressure,0.1)] kPa") - if(total_moles) - for(var/g in environment.gas) - to_chat(src, "[GLOB.meta_gas_names[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)") - to_chat(src, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)") - to_chat(src, "Heat Capacity: [round(environment.heat_capacity(),0.1)]") + to_chat(src, jointext(environment.chat_analyzer_scan(NONE, TRUE, TRUE), "
")) /mob/observer/dead/verb/become_mouse() set name = "Become mouse" diff --git a/code/modules/overmap/legacy/overmap_shuttle.dm b/code/modules/overmap/legacy/overmap_shuttle.dm index 8cb609c9f2d..19c6f1649f0 100644 --- a/code/modules/overmap/legacy/overmap_shuttle.dm +++ b/code/modules/overmap/legacy/overmap_shuttle.dm @@ -91,13 +91,13 @@ return 0 //can't launch if you have no fuel TANKS in the ports var/total_flammable_gas_moles = 0 for(var/obj/item/tank/FT in fuel_tanks) - total_flammable_gas_moles += FT.air_contents.get_by_flag(GAS_FLAG_FUEL) + total_flammable_gas_moles += FT.air_contents.moles_by_flag(GAS_FLAG_FUEL) if(total_flammable_gas_moles < fuel_consumption) //not enough fuel return 0 // We are going to succeed if we got to here, so start consuming that fuel var/fuel_to_consume = fuel_consumption for(var/obj/item/tank/FT in fuel_tanks) //loop through tanks, consume their fuel one by one - var/fuel_available = FT.air_contents.get_by_flag(GAS_FLAG_FUEL) + var/fuel_available = FT.air_contents.moles_by_flag(GAS_FLAG_FUEL) if(!fuel_available) // Didn't even have fuel. continue if(fuel_available >= fuel_to_consume) diff --git a/code/modules/power/fission/engine.dm b/code/modules/power/fission/engine.dm index fe2fcc958ea..72625349539 100644 --- a/code/modules/power/fission/engine.dm +++ b/code/modules/power/fission/engine.dm @@ -544,14 +544,14 @@ I'm commenting this out until I have time to make this less stupid. my_mob.maxbodytemp = env.temperature * 1.2 var/list/gaslist = env.gas - my_mob.min_oxy = gaslist[/datum/gas/oxygen] * 0.8 - my_mob.min_tox = gaslist[/datum/gas/phoron] * 0.8 - my_mob.min_n2 = gaslist[/datum/gas/nitrogen] * 0.8 - my_mob.min_co2 = gaslist[/datum/gas/carbon_dioxide] * 0.8 - my_mob.max_oxy = gaslist[/datum/gas/oxygen] * 1.2 - my_mob.max_tox = gaslist[/datum/gas/phoron] * 1.2 - my_mob.max_n2 = gaslist[/datum/gas/nitrogen] * 1.2 - my_mob.max_co2 = gaslist[/datum/gas/carbon_dioxide] * 1.2 + my_mob.min_oxy = gaslist[GAS_ID_OXYGEN] * 0.8 + my_mob.min_tox = gaslist[GAS_ID_PHORON] * 0.8 + my_mob.min_n2 = gaslist[GAS_ID_NITROGEN] * 0.8 + my_mob.min_co2 = gaslist[GAS_ID_CARBON_DIOXIDE] * 0.8 + my_mob.max_oxy = gaslist[GAS_ID_OXYGEN] * 1.2 + my_mob.max_tox = gaslist[GAS_ID_PHORON] * 1.2 + my_mob.max_n2 = gaslist[GAS_ID_NITROGEN] * 1.2 + my_mob.max_co2 = gaslist[GAS_ID_CARBON_DIOXIDE] * 1.2 return else STOP_PROCESSING(SSobj, src) diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm index 2df45b17c43..35daf97aa66 100644 --- a/code/modules/power/fusion/core/core_field.dm +++ b/code/modules/power/fusion/core/core_field.dm @@ -306,8 +306,8 @@ GLOBAL_VAR_INIT(max_fusion_air_heat, INFINITY) var/turf/T = get_turf(src) if(istype(T)) var/datum/gas_mixture/plasma = new - plasma.adjust_gas(/datum/gas/oxygen, (size*100), 0) - plasma.adjust_gas(/datum/gas/phoron, (size*100), 0) + plasma.adjust_gas(GAS_ID_OXYGEN, (size*100), 0) + plasma.adjust_gas(GAS_ID_PHORON, (size*100), 0) plasma.temperature = (plasma_temperature/2) plasma.update_values() T.assume_air(plasma) @@ -616,8 +616,8 @@ GLOBAL_VAR_INIT(max_fusion_air_heat, INFINITY) var/turf/TT = get_turf(pick(turfs_in_range)) if(istype(TT)) var/datum/gas_mixture/plasma = new - plasma.adjust_gas(/datum/gas/oxygen, (size*100), 0) - plasma.adjust_gas(/datum/gas/phoron, (size*100), 0) + plasma.adjust_gas(GAS_ID_OXYGEN, (size*100), 0) + plasma.adjust_gas(GAS_ID_PHORON, (size*100), 0) plasma.temperature = (plasma_temperature/2) plasma.update_values() TT.assume_air(plasma) @@ -632,8 +632,8 @@ GLOBAL_VAR_INIT(max_fusion_air_heat, INFINITY) var/turf/TT = get_turf(owned_core) if(istype(TT)) var/datum/gas_mixture/plasma = new - plasma.adjust_gas(/datum/gas/oxygen, (size*100), 0) - plasma.adjust_gas(/datum/gas/phoron, (size*100), 0) + plasma.adjust_gas(GAS_ID_OXYGEN, (size*100), 0) + plasma.adjust_gas(GAS_ID_PHORON, (size*100), 0) plasma.temperature = (plasma_temperature/2) plasma.update_values() TT.assume_air(plasma) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 2dc86b78f65..a3a1db992f0 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -256,7 +256,7 @@ var/phoron = (sheets+sheet_left)*20 var/datum/gas_mixture/environment = loc.return_air() if (environment) - environment.adjust_gas_temp(/datum/gas/phoron, phoron/10, temperature + T0C) + environment.adjust_gas_temp(GAS_ID_PHORON, phoron/10, temperature + T0C) sheets = 0 sheet_left = 0 diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index c8b4588d35b..1f42f4c4e5f 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -45,13 +45,14 @@ AddComponent(/datum/component/radiation_listener) rad_insulation = active? rad_insulation_active : rad_insulation_inactive + /obj/machinery/power/rad_collector/attack_hand(mob/user, list/params) if(anchored) if(!src.locked) toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ "You turn the [src.name] [active? "on":"off"].") - investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gas[/datum/gas/phoron]/0.29)]%":"It is empty"].","singulo") + investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gas[GAS_ID_PHORON]/0.29)]%":"It is empty"].","singulo") else to_chat(user, "The controls are locked!") @@ -130,10 +131,10 @@ . = ..() var/power_produced = max(0, (strength - flat_loss) * efficiency) var/gas_needed = power_produced * gas_usage_factor - if(!power_produced || !P?.air_contents.gas[/datum/gas/phoron]) + if(!power_produced || !P?.air_contents.gas[GAS_ID_PHORON]) return - P.air_contents.adjust_gas(/datum/gas/phoron, -gas_needed) - if(!P.air_contents.gas[/datum/gas/phoron]) + P.air_contents.adjust_gas(GAS_ID_PHORON, -gas_needed) + if(!P.air_contents.gas[GAS_ID_PHORON]) investigate_log("ran out of gas", INVESTIGATE_SINGULO) eject() stored_power += power_produced @@ -159,9 +160,6 @@ add_overlay(overlays_to_add) - return - - /obj/machinery/power/rad_collector/proc/toggle_power() active = !active rad_insulation = active? rad_insulation_active : rad_insulation_inactive diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm index bdc43fa3bec..b9436c253a5 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm @@ -44,7 +44,7 @@ . += "\the [I]" /obj/machinery/particle_smasher/attackby(obj/item/W as obj, mob/user as mob) - if(W.type == /obj/item/analyzer) + if(W.type == /obj/item/atmos_analyzer) to_chat(user, "\The [src] reads an energy level of [energy].") else if(istype(W, /obj/item/stack/material) && !target) var/obj/item/stack/material/M = W diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 603185d1877..f0888dbe926 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -318,7 +318,7 @@ damage = max( damage + min( ( (removed.temperature - CRITICAL_TEMPERATURE) / 150 ), damage_inc_limit ) , 0 ) //Ok, 100% oxygen atmosphere = best reaction //Maxes out at 100% oxygen pressure - oxygen = max(min((removed.gas[/datum/gas/oxygen] - (removed.gas[/datum/gas/nitrogen] * NITROGEN_SLOWING_FACTOR)) / removed.total_moles, 1), 0) + oxygen = max(min((removed.gas[GAS_ID_OXYGEN] - (removed.gas[GAS_ID_NITROGEN] * NITROGEN_SLOWING_FACTOR)) / removed.total_moles, 1), 0) //calculate power gain for oxygen reaction var/temp_factor @@ -342,8 +342,8 @@ //Release reaction gasses var/heat_capacity = removed.heat_capacity() - removed.adjust_multi(/datum/gas/phoron, max(device_energy / PHORON_RELEASE_MODIFIER, 0), \ - /datum/gas/oxygen, max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)) + removed.adjust_multi(GAS_ID_PHORON, max(device_energy / PHORON_RELEASE_MODIFIER, 0), \ + GAS_ID_OXYGEN, max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)) var/thermal_power = THERMAL_RELEASE_MODIFIER * device_energy if (debug) diff --git a/code/modules/reagents/Misc-Recipes.dm b/code/modules/reagents/Misc-Recipes.dm index 00ef4ef36e4..f2803a05921 100644 --- a/code/modules/reagents/Misc-Recipes.dm +++ b/code/modules/reagents/Misc-Recipes.dm @@ -422,7 +422,7 @@ /datum/chemical_reaction/napalm/on_reaction(datum/reagents/holder, created_volume) var/turf/location = get_turf(holder.my_atom.loc) for(var/turf/simulated/floor/target_tile in range(0,location)) - target_tile.assume_gas(/datum/gas/volatile_fuel, created_volume, 400+T0C) + target_tile.assume_gas(GAS_ID_VOLATILE_FUEL, created_volume, 400+T0C) spawn (0) target_tile.hotspot_expose(700, 400) holder.del_reagent("napalm") return @@ -986,7 +986,7 @@ sleep(50) var/turf/location = get_turf(holder.my_atom.loc) for(var/turf/simulated/floor/target_tile in range(0,location)) - target_tile.assume_gas(/datum/gas/phoron, 25, 1400) + target_tile.assume_gas(GAS_ID_PHORON, 25, 1400) spawn (0) target_tile.hotspot_expose(700, 400) diff --git a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm index e62ae5d11b8..465d2bbff39 100644 --- a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm @@ -95,9 +95,9 @@ /datum/reagent/toxin/hydrophoron/touch_turf(turf/simulated/T) if(!istype(T)) return - T.assume_gas(/datum/gas/phoron, CEILING(volume/2, 1), T20C) + T.assume_gas(GAS_ID_PHORON, CEILING(volume/2, 1), T20C) for(var/turf/simulated/floor/target_tile in range(0,T)) - target_tile.assume_gas(/datum/gas/phoron, volume/2, 400+T0C) + target_tile.assume_gas(GAS_ID_PHORON, volume/2, 400+T0C) spawn (0) target_tile.hotspot_expose(700, 400) remove_self(volume) @@ -154,7 +154,7 @@ /datum/reagent/toxin/phoron/touch_turf(turf/simulated/T, amount) if(!istype(T)) return - T.assume_gas(/datum/gas/volatile_fuel, amount, T20C) + T.assume_gas(GAS_ID_VOLATILE_FUEL, amount, T20C) remove_self(amount) /datum/reagent/toxin/cyanide //Fast and Lethal diff --git a/code/modules/reagents/distilling/distilling.dm b/code/modules/reagents/distilling/distilling.dm index 043015b3c93..bfce4bbdc5c 100644 --- a/code/modules/reagents/distilling/distilling.dm +++ b/code/modules/reagents/distilling/distilling.dm @@ -12,10 +12,7 @@ icon_state = "distiller" var/base_state // The string var used in update icon for overlays, either set manually or initialized. - power_rating = 3000 - power_losses = 240 - - var/on = FALSE + var/power_rating = 3000 var/target_temp = T20C @@ -210,7 +207,7 @@ update_icon() /obj/machinery/portable_atmospherics/powered/reagent_distillery/use_power(var/amount, var/chan = -1) - last_power_draw = amount + last_power_draw_legacy = amount if(use_cell && cell && cell.charge) var/needed = DYNAMIC_W_TO_CELL_UNITS(amount, 1) needed -= cell.use(needed) diff --git a/code/modules/research/designs/bio_devices.dm b/code/modules/research/designs/bio_devices.dm index 71222e7cc0f..e74527188e6 100644 --- a/code/modules/research/designs/bio_devices.dm +++ b/code/modules/research/designs/bio_devices.dm @@ -51,7 +51,7 @@ id = "plant_analyzer" req_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) materials = list(MAT_STEEL = 500, MAT_GLASS = 500) - build_path = /obj/item/analyzer/plant_analyzer + build_path = /obj/item/plant_analyzer /datum/design/science/biotech/nif design_name = "nanite implant framework" diff --git a/code/modules/research/designs/engineering.dm b/code/modules/research/designs/engineering.dm index 9e12c9495cc..5b8c37a5ca2 100644 --- a/code/modules/research/designs/engineering.dm +++ b/code/modules/research/designs/engineering.dm @@ -72,7 +72,7 @@ id = "atmosanalyzer" req_tech = list(TECH_ENGINEERING = 2) materials = list(MAT_STEEL = 200, MAT_GLASS = 100) - build_path = /obj/item/analyzer + build_path = /obj/item/atmos_analyzer /datum/design/science/engineering/atmosanalyzerlongrange design_name = "Long Range Atmospheric Analyzer" @@ -80,4 +80,4 @@ id = "atmosanalyzerlr" req_tech = list(TECH_ENGINEERING = 4) materials = list(MAT_STEEL = 300, MAT_GLASS = 300) - build_path = /obj/item/analyzer/longrange + build_path = /obj/item/atmos_analyzer/longrange diff --git a/code/modules/resleeving/infomorph.dm b/code/modules/resleeving/infomorph.dm index 02c840ceb87..95f05fc7a3c 100644 --- a/code/modules/resleeving/infomorph.dm +++ b/code/modules/resleeving/infomorph.dm @@ -581,7 +581,7 @@ var/global/list/default_infomorph_software = list() to_chat(src, "Communication circuit reinitialized. Speech and messaging functionality restored.") //Only every so often - if(air_master.current_cycle%30 == 1) + if(SSair.current_cycle%30 == 1) SStranscore.m_backup(mind) if(health <= 0) diff --git a/code/modules/resleeving/infomorph_software.dm b/code/modules/resleeving/infomorph_software.dm index 8dc7cc9dde7..ba927afbd52 100644 --- a/code/modules/resleeving/infomorph_software.dm +++ b/code/modules/resleeving/infomorph_software.dm @@ -265,7 +265,7 @@ var/gases[0] for(var/g in env.gas) var/gas[0] - gas["name"] = GLOB.meta_gas_names[g] + gas["name"] = global.gas_data.names[g] gas["percent"] = round((env.gas[g] / t_moles) * 100) gases[++gases.len] = gas data["gas"] = gases diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm index b51afe5e5da..a72fc239b5d 100644 --- a/code/modules/shuttles/shuttles_web.dm +++ b/code/modules/shuttles/shuttles_web.dm @@ -457,10 +457,10 @@ var/total_moles = environment.total_moles if(total_moles) - var/o2_level = environment.gas[/datum/gas/oxygen]/total_moles - var/n2_level = environment.gas[/datum/gas/nitrogen]/total_moles - var/co2_level = environment.gas[/datum/gas/carbon_dioxide]/total_moles - var/phoron_level = environment.gas[/datum/gas/phoron]/total_moles + var/o2_level = environment.gas[GAS_ID_OXYGEN]/total_moles + var/n2_level = environment.gas[GAS_ID_NITROGEN]/total_moles + var/co2_level = environment.gas[GAS_ID_CARBON_DIOXIDE]/total_moles + var/phoron_level = environment.gas[GAS_ID_PHORON]/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) aircontents = list(\ "pressure" = "[round(pressure,0.1)]",\ diff --git a/code/modules/species/outsider/scori.dm b/code/modules/species/outsider/scori.dm index 7cc586cacc1..ec470984e74 100644 --- a/code/modules/species/outsider/scori.dm +++ b/code/modules/species/outsider/scori.dm @@ -48,8 +48,8 @@ siemens_coefficient = 1.5 //Adapted to Surt's hot, thin atmosphere. - breath_type = /datum/gas/carbon_dioxide - exhale_type = /datum/gas/oxygen + breath_type = GAS_ID_CARBON_DIOXIDE + exhale_type = GAS_ID_OXYGEN heat_discomfort_level = T0C+20 diff --git a/code/modules/species/outsider/vox.dm b/code/modules/species/outsider/vox.dm index 99b7ba6805f..3a5938eabc5 100644 --- a/code/modules/species/outsider/vox.dm +++ b/code/modules/species/outsider/vox.dm @@ -52,8 +52,8 @@ gluttonous = 0 - breath_type = /datum/gas/phoron - poison_type = /datum/gas/oxygen + breath_type = GAS_ID_PHORON + poison_type = GAS_ID_OXYGEN siemens_coefficient = 0.2 species_flags = NO_SCAN | CONTAMINATION_IMMUNE diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index fa74ba845f6..f24a8524d32 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -347,11 +347,11 @@ //? Breath /// Non-oxygen gas breathed, if any. - var/breath_type = /datum/gas/oxygen + var/breath_type = GAS_ID_OXYGEN /// Poisonous air. - var/poison_type = /datum/gas/phoron + var/poison_type = GAS_ID_PHORON /// Exhaled gas type. - var/exhale_type = /datum/gas/carbon_dioxide + var/exhale_type = GAS_ID_CARBON_DIOXIDE /// Species will try to stabilize at this temperature. (also affects temperature processing) var/body_temperature = 310.15 @@ -567,10 +567,10 @@ return sanitizeName(name, MAX_NAME_LEN) GLOBAL_LIST_INIT(species_oxygen_tank_by_gas, list( - /datum/gas/oxygen = /obj/item/tank/emergency/oxygen, - /datum/gas/nitrogen = /obj/item/tank/emergency/nitrogen, - /datum/gas/phoron = /obj/item/tank/emergency/phoron, - /datum/gas/carbon_dioxide = /obj/item/tank/emergency/carbon_dioxide + GAS_ID_OXYGEN = /obj/item/tank/emergency/oxygen, + GAS_ID_NITROGEN = /obj/item/tank/emergency/nitrogen, + GAS_ID_PHORON = /obj/item/tank/emergency/phoron, + GAS_ID_CARBON_DIOXIDE = /obj/item/tank/emergency/carbon_dioxide )) /datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 0,var/comprehensive = 0) diff --git a/code/modules/species/station/alraune.dm b/code/modules/species/station/alraune.dm index e5fb540f804..067e8bf91d9 100644 --- a/code/modules/species/station/alraune.dm +++ b/code/modules/species/station/alraune.dm @@ -35,9 +35,9 @@ selects_bodytype = TRUE body_temperature = T20C - breath_type = /datum/gas/carbon_dioxide - poison_type = /datum/gas/phoron - exhale_type = /datum/gas/oxygen + breath_type = GAS_ID_CARBON_DIOXIDE + poison_type = GAS_ID_PHORON + exhale_type = GAS_ID_OXYGEN // Heat and cold resistances are 20 degrees broader on the level 1 range, level 2 is default, level 3 is much weaker, halfway between L2 and normal L3. // Essentially, they can tolerate a broader range of comfortable temperatures, but suffer more at extremes. @@ -257,8 +257,8 @@ H.phoron_alert = 0 // If there's some other shit in the air lets deal with it here. - if(breath.gas[/datum/gas/nitrous_oxide]) - var/SA_pp = (breath.gas[/datum/gas/nitrous_oxide] / breath.total_moles) * breath_pressure + if(breath.gas[GAS_ID_NITROUS_OXIDE]) + var/SA_pp = (breath.gas[GAS_ID_NITROUS_OXIDE] / breath.total_moles) * breath_pressure // Enough to make us paralysed for a bit if(SA_pp > SA_para_min) @@ -274,7 +274,7 @@ else if(SA_pp > 0.15) if(prob(20)) spawn(0) H.emote(pick("giggle", "laugh")) - breath.adjust_gas(/datum/gas/nitrous_oxide, -breath.gas[/datum/gas/nitrous_oxide]/6, update = 0) //update after + breath.adjust_gas(GAS_ID_NITROUS_OXIDE, -breath.gas[GAS_ID_NITROUS_OXIDE]/6, update = 0) //update after // Were we able to breathe? if (failed_inhale || failed_exhale) diff --git a/code/modules/species/station/phoronoids.dm b/code/modules/species/station/phoronoids.dm index 5f032de0d26..063610f61a5 100644 --- a/code/modules/species/station/phoronoids.dm +++ b/code/modules/species/station/phoronoids.dm @@ -46,8 +46,8 @@ flash_mod = 2 chemOD_mod = 1 // turns out this is just damage - breath_type = /datum/gas/phoron - poison_type = /datum/gas/oxygen + breath_type = GAS_ID_PHORON + poison_type = GAS_ID_OXYGEN siemens_coefficient = 1 speech_bubble_appearance = "phoron" @@ -90,7 +90,7 @@ /// In case they're ever set on fire while wearing a spacesuit, we don't want the message that they're reacting with the atmosphere. var/enviroment_bad = FALSE - if(environment.gas[/datum/gas/oxygen] > 0.5) + if(environment.gas[GAS_ID_OXYGEN] > 0.5) // Now any airtight spessuit works for them. Which means exploration voidsuits work. :O if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space) && H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) return diff --git a/code/modules/species/station/standard/zaddat.dm b/code/modules/species/station/standard/zaddat.dm index 73d08fdc347..d8ee4426176 100644 --- a/code/modules/species/station/standard/zaddat.dm +++ b/code/modules/species/station/standard/zaddat.dm @@ -50,7 +50,7 @@ warning_low_pressure = 300 // Low pressure warning. hazard_low_pressure = 220 // Dangerously low pressure. safe_pressure = 400 - poison_type = /datum/gas/nitrogen // technically it's a partial pressure thing but IDK if we can emulate that + poison_type = GAS_ID_NITROGEN // technically it's a partial pressure thing but IDK if we can emulate that genders = list(FEMALE, PLURAL) //females are polyp-producing, infertile females and males are nigh-identical diff --git a/code/modules/species/station/xenochimera.dm b/code/modules/species/station/xenochimera.dm index 88107cedd63..28c9b08365e 100644 --- a/code/modules/species/station/xenochimera.dm +++ b/code/modules/species/station/xenochimera.dm @@ -37,9 +37,9 @@ catalogue_data = list(/datum/category_item/catalogue/fauna/xenochimera) //rarity_value = 4 - breath_type = /datum/gas/oxygen - poison_type = /datum/gas/phoron - exhale_type = /datum/gas/carbon_dioxide + breath_type = GAS_ID_OXYGEN + poison_type = GAS_ID_PHORON + exhale_type = GAS_ID_CARBON_DIOXIDE hazard_high_pressure = HAZARD_HIGH_PRESSURE warning_high_pressure = WARNING_HIGH_PRESSURE @@ -421,10 +421,10 @@ set category = "Abilities" var/list/gas_choices = list( - "oxygen" = /datum/gas/oxygen, - "phoron" = /datum/gas/phoron, - "nitrogen" = /datum/gas/nitrogen, - "carbon dioxide" = /datum/gas/carbon_dioxide + "oxygen" = GAS_ID_OXYGEN, + "phoron" = GAS_ID_PHORON, + "nitrogen" = GAS_ID_NITROGEN, + "carbon dioxide" = GAS_ID_CARBON_DIOXIDE ) var/choice if(target && target != src) @@ -443,20 +443,20 @@ target.visible_message("[src] begins to burrow their digits into [target], slithering down their throat!", "You feel an extremely uncomfortable slithering sensation going through your throat and into your chest...") if(do_after(src,15 SECONDS)) switch(resp_biomorph) - if(/datum/gas/oxygen) - target.species.breath_type = /datum/gas/oxygen - target.species.poison_type = /datum/gas/phoron - target.species.exhale_type = /datum/gas/carbon_dioxide - if(/datum/gas/phoron) - target.species.breath_type = /datum/gas/phoron + if(GAS_ID_OXYGEN) + target.species.breath_type = GAS_ID_OXYGEN + target.species.poison_type = GAS_ID_PHORON + target.species.exhale_type = GAS_ID_CARBON_DIOXIDE + if(GAS_ID_PHORON) + target.species.breath_type = GAS_ID_PHORON target.species.poison_type = null - target.species.exhale_type = /datum/gas/nitrogen - if(/datum/gas/nitrogen) - target.species.breath_type = /datum/gas/nitrogen + target.species.exhale_type = GAS_ID_NITROGEN + if(GAS_ID_NITROGEN) + target.species.breath_type = GAS_ID_NITROGEN target.species.poison_type = null - if(/datum/gas/carbon_dioxide) - target.species.breath_type = /datum/gas/carbon_dioxide - target.species.exhale_type = /datum/gas/oxygen + if(GAS_ID_CARBON_DIOXIDE) + target.species.breath_type = GAS_ID_CARBON_DIOXIDE + target.species.exhale_type = GAS_ID_OXYGEN if(target == src) to_chat("It is done.") else diff --git a/code/modules/species/xenomorphs/alien_species.dm b/code/modules/species/xenomorphs/alien_species.dm index 20b21f2e7cc..d3995d105e4 100644 --- a/code/modules/species/xenomorphs/alien_species.dm +++ b/code/modules/species/xenomorphs/alien_species.dm @@ -120,7 +120,7 @@ var/datum/gas_mixture/environment = T.return_air() if(!environment) return - if(environment.gas[/datum/gas/phoron] > 0 || locate(/obj/effect/alien/weeds) in T) + if(environment.gas[GAS_ID_PHORON] > 0 || locate(/obj/effect/alien/weeds) in T) if(!regenerate(H)) var/obj/item/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name[O_PLASMA] P.stored_plasma += weeds_plasma_rate diff --git a/code/modules/surgery/external_repair.dm b/code/modules/surgery/external_repair.dm index b1f89070018..21ead186371 100644 --- a/code/modules/surgery/external_repair.dm +++ b/code/modules/surgery/external_repair.dm @@ -32,7 +32,7 @@ /datum/surgery_step/repairflesh/scan_injury allowed_tools = list( /obj/item/healthanalyzer = 100, - /obj/item/analyzer = 10 + /obj/item/atmos_analyzer = 10 ) priority = 2 diff --git a/code/modules/tgui/modules/atmos_control.dm b/code/modules/tgui/modules/atmos_control.dm index a788e5996b3..8ad661055a3 100644 --- a/code/modules/tgui/modules/atmos_control.dm +++ b/code/modules/tgui/modules/atmos_control.dm @@ -12,7 +12,7 @@ access.req_one_access = req_one_access if(monitored_alarm_ids) - for(var/obj/machinery/alarm/alarm in GLOB.machines) + for(var/obj/machinery/air_alarm/alarm in GLOB.machines) if(alarm.alarm_id && (alarm.alarm_id in monitored_alarm_ids)) monitored_alarms += alarm // machines may not yet be ordered at this point @@ -25,7 +25,7 @@ switch(action) if("alarm") if(ui_ref) - var/obj/machinery/alarm/alarm = locate(params["alarm"]) in (monitored_alarms.len ? monitored_alarms : GLOB.machines) + var/obj/machinery/air_alarm/alarm = locate(params["alarm"]) in (monitored_alarms.len ? monitored_alarms : GLOB.machines) if(alarm) var/datum/ui_state/TS = generate_state(alarm) alarm.ui_interact(usr, parent_ui = ui_ref, state = TS) @@ -53,7 +53,7 @@ // TODO: Move these to a cache, similar to cameras var/alarms[0] - for(var/obj/machinery/alarm/alarm in (monitored_alarms.len ? monitored_alarms : GLOB.machines)) + for(var/obj/machinery/air_alarm/alarm in (monitored_alarms.len ? monitored_alarms : GLOB.machines)) if(!monitored_alarms.len && alarm.alarms_hidden) continue if(!(alarm.z in map_levels)) @@ -88,7 +88,7 @@ /datum/ui_state/air_alarm_remote var/datum/tgui_module_old/atmos_control/atmos_control = null - var/obj/machinery/alarm/air_alarm = null + var/obj/machinery/air_alarm/air_alarm = null /datum/ui_state/air_alarm_remote/can_use_topic(src_object, mob/user) if(!atmos_control.ui_ref) diff --git a/code/modules/tgui/modules/supermatter_monitor.dm b/code/modules/tgui/modules/supermatter_monitor.dm index e9ab0b9e6ef..43df17079fa 100644 --- a/code/modules/tgui/modules/supermatter_monitor.dm +++ b/code/modules/tgui/modules/supermatter_monitor.dm @@ -59,11 +59,11 @@ data["SM_History"] = active.history //data["SM_EPR"] = active.get_epr() if(air.total_moles) - data["SM_gas_O2"] = round(100*air.gas[/datum/gas/oxygen]/air.total_moles,0.01) - data["SM_gas_CO2"] = round(100*air.gas[/datum/gas/carbon_dioxide]/air.total_moles,0.01) - data["SM_gas_N2"] = round(100*air.gas[/datum/gas/nitrogen]/air.total_moles,0.01) - data["SM_gas_PH"] = round(100*air.gas[/datum/gas/phoron]/air.total_moles,0.01) - data["SM_gas_N2O"] = round(100*air.gas["/datum/gas/nitrous_oxide"]/air.total_moles,0.01) + data["SM_gas_O2"] = round(100*air.gas[GAS_ID_OXYGEN]/air.total_moles,0.01) + data["SM_gas_CO2"] = round(100*air.gas[GAS_ID_CARBON_DIOXIDE]/air.total_moles,0.01) + data["SM_gas_N2"] = round(100*air.gas[GAS_ID_NITROGEN]/air.total_moles,0.01) + data["SM_gas_PH"] = round(100*air.gas[GAS_ID_PHORON]/air.total_moles,0.01) + data["SM_gas_N2O"] = round(100*air.gas["GAS_ID_NITROUS_OXIDE"]/air.total_moles,0.01) else data["SM_gas_O2"] = 0 data["SM_gas_CO2"] = 0 diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index fbe4b2310cc..8415f5450fd 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -74,6 +74,7 @@ /// A trait source when adding traits through unit tests #define TRAIT_SOURCE_UNIT_TESTS "unit_tests" +#include "atmospherics/_atmospherics.dm" #include "core/_core.dm" #include "datum/_datum.dm" #include "elements/_elements.dm" diff --git a/code/modules/unit_tests/atmospherics/_atmospherics.dm b/code/modules/unit_tests/atmospherics/_atmospherics.dm new file mode 100644 index 00000000000..5ef0a76d402 --- /dev/null +++ b/code/modules/unit_tests/atmospherics/_atmospherics.dm @@ -0,0 +1 @@ +#include "gases.dm" diff --git a/code/modules/unit_tests/atmospherics/gases.dm b/code/modules/unit_tests/atmospherics/gases.dm new file mode 100644 index 00000000000..ab1ea95927b --- /dev/null +++ b/code/modules/unit_tests/atmospherics/gases.dm @@ -0,0 +1,17 @@ +// empty for now + +/datum/unit_test/hardcoded_gas_sanity/Run() + for(var/datum/gas/path as anything in subtypesof(/datum/gas)) + if(initial(path.abstract_type) == path) + continue + var/groups = initial(path.gas_groups) + var/flags = initial(path.gas_flags) + if(groups & GAS_GROUP_CORE) + if((flags & (GAS_FLAG_CORE | GAS_FLAG_FILTERABLE)) != (GAS_FLAG_CORE | GAS_FLAG_FILTERABLE)) + Fail("[path] didn't have either core or filterable flags even though it was a core group.") + else if(!groups) + Fail("[path] has no gas groups.") + else if(!(groups & GAS_GROUPS_FILTERABLE) && !(flags & GAS_FLAG_FILTERABLE)) + Fail("[path] is not scrubbable through any means; this is bad.") + // else if((groups & GAS_GROUP_UNKNOWN) && (flags & GAS_FLAG_FILTERABLE)) + // Fail("[path] is unknown/alien but filterable, why is it unknown if it is filterable?") diff --git a/code/modules/unit_tests/map_tests.dm b/code/modules/unit_tests/map_tests.dm index aa5fb271bbd..113c5647a6c 100644 --- a/code/modules/unit_tests/map_tests.dm +++ b/code/modules/unit_tests/map_tests.dm @@ -90,10 +90,10 @@ /datum/unit_test/active_edges/Run() - var/active_edges = air_master.active_edges.len + var/active_edges = SSair.active_edges.len var/list/edge_log = list() if(active_edges) - for(var/datum/zas_edge/E in air_master.active_edges) + for(var/datum/zas_edge/E in SSair.active_edges) edge_log += "Active Edge [E] ([E.type])" for(var/turf/T in E.connecting_turfs) edge_log += "+--- Connecting Turf [T] @ [T.x], [T.y], [T.z]" diff --git a/code/modules/unit_tests/quick_swap_sanity.dm b/code/modules/unit_tests/quick_swap_sanity.dm index 85e73f9b6ae..bd6047755f4 100644 --- a/code/modules/unit_tests/quick_swap_sanity.dm +++ b/code/modules/unit_tests/quick_swap_sanity.dm @@ -6,7 +6,7 @@ var/obj/item/coat = allocate(/obj/item/clothing/suit/hooded/wintercoat/medical) TEST_ASSERT(human.equip_to_slot_if_possible(coat, ITEM_SLOT_OCLOTHING), "Couldn't equip winter coat") - var/obj/item/analyzer = allocate(/obj/item/healthanalyzer) + var/obj/item/atmos_analyzer = allocate(/obj/item/healthanalyzer) TEST_ASSERT(human.equip_to_slot_if_possible(analyzer, ITEM_SLOT_SUITSTORE), "Couldn't equip health analyzer") // Then, have them quick swap between the coat and a space suit diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 85f8d57ec24..ffc8afec599 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -532,8 +532,8 @@ /datum/gas_mixture/belly_air/New() . = ..() gas = list( - /datum/gas/oxygen = 21, - /datum/gas/nitrogen = 79) + GAS_ID_OXYGEN = 21, + GAS_ID_NITROGEN = 79) // Procs for micros stuffed into boots and the like to escape from them /mob/living/proc/escape_clothes(obj/item/clothing/C) diff --git a/code/modules/vore/fluffstuff/custom_clothes.dm b/code/modules/vore/fluffstuff/custom_clothes.dm index a389f69ab41..1d7fbc241c4 100644 --- a/code/modules/vore/fluffstuff/custom_clothes.dm +++ b/code/modules/vore/fluffstuff/custom_clothes.dm @@ -338,7 +338,7 @@ body_cover_flags = UPPER_TORSO|LOWER_TORSO|ARMS permeability_coefficient = 0.50 allowed = list( - /obj/item/flashlight, /obj/item/analyzer, + /obj/item/flashlight, /obj/item/atmos_analyzer, /obj/item/radio, /obj/item/tank/emergency/oxygen, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe, diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 28fba6a0455..b29df379625 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -93,13 +93,13 @@ else if(env.temperature > 375) trigger_hot = 1 - if(env.gas[/datum/gas/phoron] >= 2) + if(env.gas[GAS_ID_PHORON] >= 2) trigger_phoron = 1 - if(env.gas[/datum/gas/oxygen] >= 2) + if(env.gas[GAS_ID_OXYGEN] >= 2) trigger_oxy = 1 - if(env.gas[/datum/gas/carbon_dioxide] >= 2) + if(env.gas[GAS_ID_CARBON_DIOXIDE] >= 2) trigger_co2 = 1 - if(env.gas[/datum/gas/nitrogen] >= 2) + if(env.gas[GAS_ID_NITROGEN] >= 2) trigger_nitro = 1 //COLD ACTIVATION diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index cb00da1b1a4..057630e05b2 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -29,7 +29,7 @@ /obj/structure/closet/acloset, /mob/living/simple_mob/mechanical/viscerator, /mob/living/simple_mob/mechanical/hivebot, - /obj/item/analyzer, + /obj/item/atmos_analyzer, /obj/item/camera, /obj/item/flash, /obj/item/flashlight, diff --git a/code/modules/xenoarcheaology/effects/gasco2.dm b/code/modules/xenoarcheaology/effects/gasco2.dm index f006759d0c1..d24e653ae91 100644 --- a/code/modules/xenoarcheaology/effects/gasco2.dm +++ b/code/modules/xenoarcheaology/effects/gasco2.dm @@ -10,10 +10,10 @@ if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/carbon_dioxide, rand(2, 15)) + holder_loc.assume_gas(GAS_ID_CARBON_DIOXIDE, rand(2, 15)) /datum/artifact_effect/gasco2/DoEffectAura() if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/carbon_dioxide, pick(0, 0, 0.1, rand())) + holder_loc.assume_gas(GAS_ID_CARBON_DIOXIDE, pick(0, 0, 0.1, rand())) diff --git a/code/modules/xenoarcheaology/effects/gasnitro.dm b/code/modules/xenoarcheaology/effects/gasnitro.dm index 285a9f8a6a9..4cd7b0af20a 100644 --- a/code/modules/xenoarcheaology/effects/gasnitro.dm +++ b/code/modules/xenoarcheaology/effects/gasnitro.dm @@ -10,10 +10,10 @@ if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/nitrogen, rand(2, 15)) + holder_loc.assume_gas(GAS_ID_NITROGEN, rand(2, 15)) /datum/artifact_effect/gasnitro/DoEffectAura() if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/nitrogen, pick(0, 0, 0.1, rand())) + holder_loc.assume_gas(GAS_ID_NITROGEN, pick(0, 0, 0.1, rand())) diff --git a/code/modules/xenoarcheaology/effects/gasoxy.dm b/code/modules/xenoarcheaology/effects/gasoxy.dm index 488ffd68ce7..71ab3bd0231 100644 --- a/code/modules/xenoarcheaology/effects/gasoxy.dm +++ b/code/modules/xenoarcheaology/effects/gasoxy.dm @@ -10,10 +10,10 @@ if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/oxygen, rand(2, 15)) + holder_loc.assume_gas(GAS_ID_OXYGEN, rand(2, 15)) /datum/artifact_effect/gasoxy/DoEffectAura() if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/oxygen, pick(0, 0, 0.1, rand())) + holder_loc.assume_gas(GAS_ID_OXYGEN, pick(0, 0, 0.1, rand())) diff --git a/code/modules/xenoarcheaology/effects/gasphoron.dm b/code/modules/xenoarcheaology/effects/gasphoron.dm index 2dbe0775feb..8a6dfe11b94 100644 --- a/code/modules/xenoarcheaology/effects/gasphoron.dm +++ b/code/modules/xenoarcheaology/effects/gasphoron.dm @@ -10,10 +10,10 @@ if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/phoron, rand(2, 15)) + holder_loc.assume_gas(GAS_ID_PHORON, rand(2, 15)) /datum/artifact_effect/gasphoron/DoEffectAura() if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/phoron, pick(0, 0, 0.1, rand())) + holder_loc.assume_gas(GAS_ID_PHORON, pick(0, 0, 0.1, rand())) diff --git a/code/modules/xenoarcheaology/effects/gassleeping.dm b/code/modules/xenoarcheaology/effects/gassleeping.dm index 6043bc72dc2..e86b9fc2d62 100644 --- a/code/modules/xenoarcheaology/effects/gassleeping.dm +++ b/code/modules/xenoarcheaology/effects/gassleeping.dm @@ -10,10 +10,10 @@ if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/nitrous_oxide, rand(2, 15)) + holder_loc.assume_gas(GAS_ID_NITROUS_OXIDE, rand(2, 15)) /datum/artifact_effect/gassleeping/DoEffectAura() if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) - holder_loc.assume_gas(/datum/gas/nitrous_oxide, pick(0, 0, 0.1, rand())) + holder_loc.assume_gas(GAS_ID_NITROUS_OXIDE, pick(0, 0, 0.1, rand())) diff --git a/code/modules/xenoarcheaology/misc.dm b/code/modules/xenoarcheaology/misc.dm index cf32e87aa1c..f4597cd4e79 100644 --- a/code/modules/xenoarcheaology/misc.dm +++ b/code/modules/xenoarcheaology/misc.dm @@ -90,8 +90,8 @@ /obj/item/paper_bin, /obj/item/hand_labeler) -/obj/machinery/alarm/isolation +/obj/machinery/air_alarm/isolation req_one_access = list(ACCESS_SCIENCE_MAIN, ACCESS_ENGINEERING_ATMOS, ACCESS_ENGINEERING_ENGINE) -/obj/machinery/alarm/monitor/isolation +/obj/machinery/air_alarm/monitor/isolation req_one_access = list(ACCESS_SCIENCE_MAIN, ACCESS_ENGINEERING_ATMOS, ACCESS_ENGINEERING_ENGINE) diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm index 347e5f99c6c..4bb9a90e313 100644 --- a/code/modules/xenobio/items/extracts.dm +++ b/code/modules/xenobio/items/extracts.dm @@ -331,8 +331,8 @@ return for(var/turf/simulated/target_turf in view(2, T)) - target_turf.assume_gas(/datum/gas/volatile_fuel, 33, 1500+T0C) - target_turf.assume_gas(/datum/gas/oxygen, 66, 1500+T0C) + target_turf.assume_gas(GAS_ID_VOLATILE_FUEL, 33, 1500+T0C) + target_turf.assume_gas(GAS_ID_OXYGEN, 66, 1500+T0C) spawn(0) target_turf.hotspot_expose(1500+T0C, 400) diff --git a/icons/effects/atmospherics.dmi b/icons/effects/atmospherics.dmi deleted file mode 100644 index b13848277c3fda12e6b194a5159f71313c233a0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19408 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 H=9%;#Y=K%~ literal 0 HcmV?d00001 diff --git a/icons/modules/atmospherics/gas.dmi b/icons/modules/atmospherics/gas.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e272053fd4edada848ab6b55f60f8c7a84d236df GIT binary patch literal 21114 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 literal 0 HcmV?d00001 diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi index 073aed84224fc0d1a2819290b8b4302a2c3ab53d..c29f8abbe3d9638abda4f4e8cad536fffc5af92e 100644 GIT binary patch literal 30500 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 z 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�fPSCZJH{)=4**X0X(n1)`gyUicu32b0i5=qCd+g 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 z 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 K>F1h`;r|bU>1VY7 diff --git a/maps/away_missions/140x140/snow_outpost.dmm b/maps/away_missions/140x140/snow_outpost.dmm index a76c17ff038..19d4becb94a 100644 --- a/maps/away_missions/140x140/snow_outpost.dmm +++ b/maps/away_missions/140x140/snow_outpost.dmm @@ -511,7 +511,7 @@ icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; - use_power = 1 + on = 1 }, /turf/simulated/floor/tiled/white, /area/awaymission/snow_outpost/powered) @@ -553,7 +553,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/tiled/white, /area/awaymission/snow_outpost/powered) @@ -2596,7 +2596,7 @@ icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; - use_power = 1 + on = 1 }, /obj/item/stack/material/phoron, /obj/machinery/light/flicker{ diff --git a/maps/away_missions/140x140/snowfield.dmm b/maps/away_missions/140x140/snowfield.dmm index c721218f3d5..137a2fda538 100644 --- a/maps/away_missions/140x140/snowfield.dmm +++ b/maps/away_missions/140x140/snowfield.dmm @@ -644,7 +644,7 @@ "bL" = ( /obj/structure/table/glass, /obj/item/duct_tape_roll, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /turf/simulated/floor/tiled/white, /area/awaymission/snowfield/base) "bM" = ( diff --git a/maps/away_missions/archive/blackmarketpackers.dmm b/maps/away_missions/archive/blackmarketpackers.dmm index bf2237e3626..524ef777073 100644 --- a/maps/away_missions/archive/blackmarketpackers.dmm +++ b/maps/away_missions/archive/blackmarketpackers.dmm @@ -561,7 +561,7 @@ /area/awaymission/BMPship1) "cr" = ( /obj/structure/closet/crate, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/item/spacecash/c10, /turf/simulated/floor/tiled/dark, /area/awaymission/BMPship1) diff --git a/maps/away_missions/archive/example.dmm b/maps/away_missions/archive/example.dmm index ff1813a7832..3f90555f7b3 100644 --- a/maps/away_missions/archive/example.dmm +++ b/maps/away_missions/archive/example.dmm @@ -483,7 +483,7 @@ /area/awaymission/example) "bX" = ( /obj/structure/table/standard, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /turf/simulated/floor, /area/awaymission/example) "bY" = ( diff --git a/maps/away_missions/archive/stationCollision.dmm b/maps/away_missions/archive/stationCollision.dmm index c601894b97c..c2049d0fac8 100644 --- a/maps/away_missions/archive/stationCollision.dmm +++ b/maps/away_missions/archive/stationCollision.dmm @@ -1272,7 +1272,7 @@ /area/awaymission/research) "fC" = ( /obj/structure/table/standard, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/item/mass_spectrometer{ pixel_x = 5; pixel_y = 5 diff --git a/maps/euthenia/levels/deck1.dmm b/maps/euthenia/levels/deck1.dmm index c87f9d0887a..849ccc84d71 100644 --- a/maps/euthenia/levels/deck1.dmm +++ b/maps/euthenia/levels/deck1.dmm @@ -353,7 +353,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "alI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -616,7 +616,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -948,7 +948,7 @@ name = "Distribution Loop" }, /obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1586,7 +1586,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "bee" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1762,7 +1762,7 @@ /turf/simulated/floor/plating, /area/security/security_lockerroom) "blA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -1930,9 +1930,9 @@ /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/gloves/botanic_leather, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /obj/item/tool/wirecutters/clippers/trimmers, /obj/item/material/knife/machete/hatchet, @@ -2151,7 +2151,7 @@ /turf/simulated/floor/tiled/techfloor, /area/space) "bvV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2415,7 +2415,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/iaa/officecommon) "bDZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -2915,7 +2915,7 @@ /turf/simulated/wall/r_wall, /area/maintenance/solars) "bXc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -3097,7 +3097,7 @@ /obj/machinery/photocopier/faxmachine{ department = "Internal Affairs" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -3185,7 +3185,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/space) "cgf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3470,7 +3470,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay) "cob" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -4096,7 +4096,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -4759,7 +4759,7 @@ pixel_x = 2; pixel_y = 2 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -5249,7 +5249,7 @@ /turf/simulated/floor/carpet/blucarpet, /area/crew_quarters/fitness) "dMT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5727,7 +5727,7 @@ /area/medical/surgery) "efQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6441,7 +6441,7 @@ /turf/simulated/floor/tiled/techmaint, /area/space) "eDe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -6592,7 +6592,7 @@ pixel_x = -1; pixel_y = -2 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorblack{ @@ -8162,7 +8162,7 @@ /turf/simulated/floor/wood, /area/maintenance/deck_one/aft/port) "fMC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /obj/machinery/door/airlock/glass/security{ @@ -8588,7 +8588,7 @@ /area/crew_quarters/sleep/Dorm_5) "gaV" = ( /obj/structure/closet/wardrobe/red, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -8685,7 +8685,7 @@ /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora_storage) "gdY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10089,7 +10089,7 @@ /turf/simulated/floor/tiled/techfloor, /area/space) "heY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -10241,7 +10241,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/research/researchdivision) "hmu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10700,7 +10700,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -10984,7 +10984,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/xenobiology/xenoflora_storage) "hSg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -11473,7 +11473,7 @@ "iho" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -11851,7 +11851,7 @@ /turf/simulated/floor/carpet/oracarpet, /area/crew_quarters/sleep/Dorm_6) "ivE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/civilian, @@ -12852,7 +12852,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/bar) "jec" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/dark, @@ -13273,7 +13273,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/sleep/Dorm_9) "jwr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13449,7 +13449,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/solars) "jFc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13527,7 +13527,7 @@ /turf/simulated/open, /area/crew_quarters/bar) "jIx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -14040,7 +14040,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/xenobiology/xenoflora_storage) "keG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/steel_reinforced, @@ -14269,7 +14269,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/iaa/officea) "kmJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14494,7 +14494,7 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "kuM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14647,7 +14647,7 @@ /obj/item/clothing/head/helmet/combat, /obj/effect/floor_decal/corner/black/full, /obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -14940,7 +14940,7 @@ /turf/simulated/floor/tiled/white, /area/space) "kML" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15151,7 +15151,7 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/solars) "kSQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15616,7 +15616,7 @@ }, /obj/item/tool/screwdriver, /obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/paleblue{ @@ -15811,7 +15811,7 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/deck_one/starboard) "lrU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16118,7 +16118,7 @@ "lGz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -16725,7 +16725,7 @@ /obj/structure/bed/chair/shuttle{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16962,7 +16962,7 @@ /obj/effect/floor_decal/corner/blue{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /obj/structure/table/steel_reinforced, @@ -17420,7 +17420,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/briefingroom) "mKk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -18338,7 +18338,7 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 28 }, /obj/structure/bed/chair/wheelchair, @@ -19119,7 +19119,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/computer/med_data/laptop, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -19884,7 +19884,7 @@ /turf/simulated/floor/tiled/techfloor, /area/space) "oBo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -20500,7 +20500,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -21511,7 +21511,7 @@ /turf/simulated/floor/carpet/oracarpet, /area/crew_quarters/heads/chief) "pVi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -22797,7 +22797,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/xenobiology/xenoflora_storage) "rcm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -23534,7 +23534,7 @@ dir = 9 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -24130,7 +24130,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_3) "sgb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -24386,7 +24386,7 @@ /turf/simulated/floor/crystal, /area/space) "srh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -24641,7 +24641,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/recreation_area) "sAi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ @@ -24753,7 +24753,7 @@ /obj/machinery/camera/network/security{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -25379,7 +25379,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fore) "tfj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -25704,7 +25704,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -25815,7 +25815,7 @@ /turf/simulated/floor/plating, /area/medical/medbay_emt_bay) "txc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -26785,7 +26785,7 @@ /obj/item/storage/box/syringes{ pixel_y = -4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -26897,7 +26897,7 @@ /turf/simulated/floor/tiled, /area/medical/surgery) "umS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -26916,7 +26916,7 @@ /area/security/armoury) "unh" = ( /obj/machinery/papershredder, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -27033,7 +27033,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -27181,7 +27181,7 @@ /turf/simulated/floor/lino, /area/security/detectives_office) "uwA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -28380,7 +28380,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/central_one) "vqz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -28686,7 +28686,7 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "vDT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -28955,7 +28955,7 @@ /turf/simulated/floor/tiled/dark, /area/space) "vNb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -29606,7 +29606,7 @@ }, /area/holodeck/alphadeck) "wip" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/euthenia/levels/deck2.dmm b/maps/euthenia/levels/deck2.dmm index 7f370d75684..75bd5f8d238 100644 --- a/maps/euthenia/levels/deck2.dmm +++ b/maps/euthenia/levels/deck2.dmm @@ -714,7 +714,7 @@ /obj/machinery/ai_status_display{ pixel_x = 32 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -748,7 +748,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/sleep/cryo) "aBM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1270,7 +1270,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/rdoffice) "aRR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -1980,7 +1980,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2282,7 +2282,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/service) "bAd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2389,7 +2389,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airless, /area/engineering/atmos/processing) @@ -2860,7 +2860,7 @@ /turf/simulated/floor/tiled/techmaint, /area/space) "cgh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3138,7 +3138,7 @@ /turf/simulated/floor/reinforced, /area/space) "cqV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -3319,7 +3319,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_10) "czZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3947,7 +3947,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/green{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -4345,8 +4345,8 @@ /turf/simulated/floor/wood, /area/hallway/primary/central_two) "dqQ" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ - filter_type = 3 +/obj/machinery/atmospherics/component/trinary/filter{ + filtering = "co2" }, /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -4884,7 +4884,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -5004,7 +5004,7 @@ /area/hydroponics) "dQl" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -5353,7 +5353,7 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/warehouse) "edS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -5750,7 +5750,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/space) "epo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -6300,7 +6300,7 @@ /turf/simulated/open, /area/quartermaster/hallway) "ePu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -6667,7 +6667,7 @@ /turf/simulated/floor/plating, /area/engineering/atmos) "fiq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -7139,7 +7139,7 @@ /turf/simulated/open, /area/maintenance/deck_two/forward/starboard) "fzk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7193,7 +7193,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -7357,7 +7357,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/engineering/atmos/gas_storage) @@ -7562,7 +7562,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/xenobiology/xenoflora_storage) "fPo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7625,7 +7625,7 @@ /turf/simulated/wall, /area/maintenance/atmospheric_substation/civilian) "fTc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -7857,7 +7857,7 @@ "gdF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -8178,7 +8178,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "gpR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8706,8 +8706,8 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics) "gOt" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ - filter_type = 4 +/obj/machinery/atmospherics/component/trinary/filter{ + filtering = "n2o" }, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/gas_storage) @@ -9000,7 +9000,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/medical) "heX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -9040,7 +9040,7 @@ /turf/simulated/floor/tiled, /area/rnd/rdoffice) "hfM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -9057,7 +9057,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_gas) "hgT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9609,7 +9609,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/storage) "hGb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10298,7 +10298,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/gas_storage) "ill" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10377,7 +10377,7 @@ /area/maintenance/deck_two/forward/port) "ioh" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -11030,9 +11030,9 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/deck_two) "iRH" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ dir = 1; - filter_type = 1 + filtering = "o2" }, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/gas_storage) @@ -11747,10 +11747,10 @@ "jvf" = ( /obj/machinery/atmospherics/component/unary/vent_pump{ icon_state = "map_vent_out"; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -12142,7 +12142,7 @@ /turf/simulated/floor/tiled/techfloor, /area/space) "jJI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -13356,7 +13356,7 @@ /turf/simulated/floor/plating, /area/crew_quarters/bar) "kBZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -13692,7 +13692,7 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -13711,7 +13711,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/carbon_dioxide, /area/engineering/atmos/gas_storage) @@ -14115,7 +14115,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/nitrogen, /area/engineering/atmos/gas_storage) @@ -14314,7 +14314,7 @@ dir = 4 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -14485,7 +14485,7 @@ /turf/simulated/floor/tiled/techmaint, /area/space) "lsF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14555,7 +14555,7 @@ /area/medical/patient_d) "lvT" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -15808,7 +15808,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/research/researchdivision) "mpS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -15930,7 +15930,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/security) "mtm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15938,7 +15938,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "mty" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -16867,7 +16867,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/service) "nng" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17047,7 +17047,7 @@ /turf/simulated/floor/reinforced/nitrogen, /area/engineering/atmos/gas_storage) "nur" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -17180,7 +17180,7 @@ /turf/simulated/floor/carpet/blucarpet, /area/crew_quarters/fitness) "nBb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -18349,7 +18349,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_3) "ozt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -18901,7 +18901,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -19634,7 +19634,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/gas_storage) "puW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -20176,7 +20176,7 @@ /turf/simulated/floor/outdoors/grass/heavy/interior, /area/rnd/research/researchdivision) "pPG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -21190,7 +21190,7 @@ /area/crew_quarters/sleep/Dorm_8) "qIW" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -21333,7 +21333,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -21844,9 +21844,9 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/space) "rfk" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 8; - filter_type = 0 + filtering = "phoron" }, /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -22284,7 +22284,7 @@ /turf/simulated/floor/wood, /area/medical/patient_wing) "ruJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -23157,7 +23157,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/gas_storage) "siB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -23204,7 +23204,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/sleep/Dorm_1) "skc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -23536,7 +23536,7 @@ dir = 4 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -23597,10 +23597,10 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -23962,7 +23962,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "sOU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/civilian, @@ -24134,7 +24134,7 @@ /obj/structure/bed/chair/shuttle{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -24730,7 +24730,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/phoron, /area/engineering/atmos/gas_storage) @@ -24759,7 +24759,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/oxygen, /area/engineering/atmos/gas_storage) @@ -25654,7 +25654,7 @@ dir = 8 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -26667,7 +26667,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics) "uQP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -28001,7 +28001,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/n20, /area/engineering/atmos/gas_storage) @@ -29761,9 +29761,9 @@ /turf/simulated/floor/plating, /area/space) "wVg" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ dir = 1; - filter_type = 2 + filtering = "n2" }, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/gas_storage) @@ -29774,7 +29774,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_gas) "wVm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -30399,7 +30399,7 @@ /turf/simulated/open, /area/maintenance/deck_two/aft/port) "xrj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ @@ -30702,7 +30702,7 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/deck_two/aft/starboard) "xCn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -30780,7 +30780,7 @@ /area/crew_quarters/sleep/Dorm_11) "xEx" = ( /obj/machinery/disposal, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -31274,7 +31274,7 @@ /turf/simulated/floor/tiled, /area/maintenance/tool_storage) "xXe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -31642,7 +31642,7 @@ "ylF" = ( /obj/item/coin/silver, /obj/item/coin/silver, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, diff --git a/maps/euthenia/levels/deck3.dmm b/maps/euthenia/levels/deck3.dmm index eca9917703e..394bb4de1a3 100644 --- a/maps/euthenia/levels/deck3.dmm +++ b/maps/euthenia/levels/deck3.dmm @@ -217,7 +217,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 4 }, -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "xenopenvent"; pixel_y = 24 }, @@ -376,7 +376,7 @@ /turf/simulated/floor/wood, /area/security/brig) "auu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -405,7 +405,7 @@ /turf/simulated/floor/outdoors/dirt, /area/hydroponics/garden) "auX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/steel_grid, @@ -636,7 +636,7 @@ /area/maintenance/deck_three/aft) "aCd" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1224,7 +1224,7 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide{ start_pressure = 8500 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -2789,7 +2789,7 @@ /turf/simulated/floor/tiled/white, /area/medical/virologyaccess) "cxm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/landmark/spawnpoint/latejoin/station/cryogenics, @@ -3332,7 +3332,7 @@ /turf/simulated/floor/tiled/monotile, /area/rnd/xenobiology) "cZH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel, @@ -3748,7 +3748,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3894,7 +3894,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/blue{ @@ -4017,7 +4017,7 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/excursion/general) "dIU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -4238,7 +4238,7 @@ /turf/simulated/floor/tiled, /area/rnd/xenobiology) "dSC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -4348,8 +4348,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /obj/effect/floor_decal/grass_edge{ dir = 4 @@ -4466,7 +4466,7 @@ /turf/simulated/floor/tiled, /area/engineering/engine_monitoring) "eew" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/outdoors/grass/heavy/interior, @@ -4555,14 +4555,14 @@ /turf/simulated/floor/tiled/techfloor, /area/space) "eiv" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/scale, /turf/simulated/floor/tiled/white, /area/medical/psych_ward) "ejt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5077,7 +5077,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /obj/structure/cable/green{ @@ -5436,7 +5436,7 @@ /obj/effect/floor_decal/corner/green{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6102,7 +6102,7 @@ /area/rnd/anomaly_lab) "fzv" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -6227,7 +6227,7 @@ /turf/simulated/floor/tiled/monotile, /area/tether/exploration) "fDs" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6339,7 +6339,7 @@ /obj/structure/table/woodentable, /obj/item/towel/random, /obj/item/towel/random, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22; target_temperature = 312.15 @@ -7450,7 +7450,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled, @@ -8210,7 +8210,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/beige/full{ @@ -8290,7 +8290,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -8377,7 +8377,7 @@ /obj/item/folder/red{ pixel_y = 3 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -8554,7 +8554,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled, @@ -8773,7 +8773,7 @@ /area/shuttle/excursion/cargo) "hFy" = ( /obj/machinery/atmospherics/portables_connector, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9036,7 +9036,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /obj/machinery/camera/network/research{ network = list("Xenobiology"); @@ -9528,7 +9528,7 @@ /turf/simulated/floor/plating, /area/tcommsat/entrance) "inU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/bed/chair/office/dark{ @@ -9746,7 +9746,7 @@ /turf/simulated/floor/reinforced/airless, /area/engineering/engine_eva) "iux" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_two"; dir = 8; pixel_x = 22 @@ -9966,7 +9966,7 @@ /turf/simulated/floor/plating, /area/maintenance/library) "iDG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -10789,7 +10789,7 @@ /area/hallway/primary/central_three) "jpj" = ( /obj/machinery/vending/loadout/uniform, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -10826,7 +10826,7 @@ }, /obj/structure/table/standard, /obj/item/flashlight/lamp, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -10953,7 +10953,7 @@ /turf/simulated/floor/wood, /area/tether/exploration/pathfinder_office) "jxG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel, @@ -11367,7 +11367,7 @@ /turf/simulated/floor/plating, /area/quartermaster/warehouse) "jMT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -11625,7 +11625,7 @@ /turf/simulated/floor/tiled/white, /area/medical/virologyaccess) "jYA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -12121,7 +12121,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12506,7 +12506,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid, /area/rnd/xenobiology) @@ -12596,7 +12596,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -13475,7 +13475,7 @@ /turf/simulated/floor/bluegrid, /area/ai) "lvH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -13921,7 +13921,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -14435,7 +14435,7 @@ /turf/simulated/floor/tiled/techmaint, /area/security/prison) "mmv" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14928,8 +14928,7 @@ dir = 8 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8; - scrubbing_gas = list(/datum/gas/carbon_dioxide) + dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/tcommsat/entrance) @@ -15255,7 +15254,7 @@ /turf/simulated/wall/r_wall, /area/engineering/engine_eva) "mTJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/freezer{ @@ -15832,7 +15831,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/red{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16492,7 +16491,7 @@ pixel_x = 13; pixel_y = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -16630,7 +16629,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled, @@ -17232,7 +17231,7 @@ pixel_x = 13; pixel_y = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -17485,7 +17484,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17510,7 +17509,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17613,7 +17612,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/theatre) "oVG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -18269,7 +18268,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -18628,7 +18627,7 @@ /turf/simulated/floor/tiled, /area/rnd/xenobiology) "pMw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19005,7 +19004,7 @@ /turf/simulated/floor/carpet, /area/medical/psych_ward) "qlI" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_one"; dir = 8; pixel_x = 22 @@ -19377,7 +19376,7 @@ /turf/simulated/floor/tiled/techfloor, /area/medical/morgue) "qCe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -19847,7 +19846,7 @@ /turf/simulated/floor/plating, /area/security/brig) "qYm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/vending/loadout/costume, @@ -19981,7 +19980,7 @@ /turf/simulated/floor/tiled, /area/medical/psych_ward) "rdT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -20422,7 +20421,7 @@ /obj/structure/bed/chair/shuttle{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -20534,7 +20533,7 @@ /obj/structure/curtain/open/shower{ anchored = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -21233,7 +21232,7 @@ /obj/item/folder/red{ pixel_y = 3 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -22156,7 +22155,7 @@ /turf/simulated/wall/r_wall, /area/rnd/rdoffice) "sVg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -22795,7 +22794,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -22805,7 +22804,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics/surgeryroom1) "tAI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -22906,7 +22905,7 @@ "tIp" = ( /obj/structure/table/woodentable, /obj/machinery/recharger, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -22985,7 +22984,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hydroponics/garden) "tNc" = ( -/obj/machinery/alarm/server{ +/obj/machinery/air_alarm/server{ dir = 4; pixel_x = -21 }, @@ -23535,7 +23534,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -23879,7 +23878,7 @@ /turf/simulated/wall/r_wall, /area/rnd/test_area) "uve" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/item/clothing/suit/straight_jacket, @@ -24465,7 +24464,7 @@ /obj/effect/floor_decal/corner/blue{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -24784,7 +24783,7 @@ /turf/simulated/wall, /area/maintenance/library) "vll" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/bluegrid, @@ -24863,7 +24862,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/pool) "vqs" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -24907,7 +24906,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/blue{ @@ -25062,7 +25061,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -25655,7 +25654,7 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide{ start_pressure = 8500 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -26146,7 +26145,7 @@ /area/hallway/primary/central_three) "wzh" = ( /obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -26215,7 +26214,7 @@ icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -26518,7 +26517,7 @@ /turf/simulated/floor/wood, /area/space) "wOw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -27020,7 +27019,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorwhite{ @@ -27752,7 +27751,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorwhite{ diff --git a/maps/euthenia/levels/deck4.dmm b/maps/euthenia/levels/deck4.dmm index c5893214cc7..61f081b3584 100644 --- a/maps/euthenia/levels/deck4.dmm +++ b/maps/euthenia/levels/deck4.dmm @@ -98,7 +98,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -231,7 +231,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/deck_four/aft/port) "bR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -621,7 +621,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled, @@ -915,7 +915,7 @@ /turf/simulated/floor/tiled/monotile, /area/gateway) "gP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1273,7 +1273,7 @@ /turf/simulated/floor/plating, /area/rnd/outpost/maintenance) "jp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -1766,7 +1766,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1929,7 +1929,7 @@ /turf/simulated/shuttle/wall/voidcraft, /area/maintenance/deck_four/aft/port) "od" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/bluegrid, @@ -2089,7 +2089,7 @@ /turf/simulated/floor/tiled, /area/gateway/prep_room) "pn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -2455,7 +2455,7 @@ /turf/simulated/shuttle/wall/voidcraft/hard_corner, /area/space) "rd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -2522,7 +2522,7 @@ /turf/simulated/floor/plating, /area/library) "rE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -2843,7 +2843,7 @@ /turf/simulated/wall/r_wall, /area/maintenance/deck_four/aft/port) "ua" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -3194,7 +3194,7 @@ /turf/simulated/floor/tiled/monotile, /area/rnd/outpost/underground) "wU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -3233,7 +3233,7 @@ /turf/simulated/floor/tiled, /area/rnd/research/testingrange) "xq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -4141,7 +4141,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ai) "Ee" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -4299,7 +4299,7 @@ /turf/simulated/floor/plating, /area/ai_upload) "Fp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -5139,7 +5139,7 @@ /area/space) "Ld" = ( /obj/structure/table/rack/shelf, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/reinforced, @@ -5218,7 +5218,7 @@ /area/gateway/prep_room) "Ma" = ( /obj/structure/table/rack/shelf, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/reinforced, @@ -5337,7 +5337,7 @@ /area/space) "Nh" = ( /obj/structure/filingcabinet, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/reinforced, @@ -6109,7 +6109,7 @@ desc = "A large cabinet with drawers. They seem to be ominously empty."; name = "Classified Science Records" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6143,7 +6143,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/maintenance/deck_four/aft/port) "SF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -6230,7 +6230,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/library/study) "Tg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6343,7 +6343,7 @@ /turf/simulated/open, /area/space) "TY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6770,7 +6770,7 @@ /turf/simulated/floor/plating, /area/space) "WP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet/hydrant{ @@ -7241,7 +7241,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, diff --git a/maps/euthenia/levels/deck5.dmm b/maps/euthenia/levels/deck5.dmm index 1b7e0331aa5..6a7a3efd9fe 100644 --- a/maps/euthenia/levels/deck5.dmm +++ b/maps/euthenia/levels/deck5.dmm @@ -807,7 +807,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, diff --git a/maps/generic/misc.dm b/maps/generic/misc.dm index 84ea1f48da5..d9a98415fe8 100644 --- a/maps/generic/misc.dm +++ b/maps/generic/misc.dm @@ -147,7 +147,7 @@ layer = ABOVE_WINDOW_LAYER /obj/machinery/airlock_sensor layer = ABOVE_WINDOW_LAYER -/obj/machinery/alarm +/obj/machinery/air_alarm layer = ABOVE_WINDOW_LAYER /obj/machinery/button layer = ABOVE_WINDOW_LAYER @@ -202,7 +202,7 @@ layer = ABOVE_WINDOW_LAYER /obj/machinery/airlock_sensor layer = ABOVE_WINDOW_LAYER -/obj/machinery/alarm +/obj/machinery/air_alarm layer = ABOVE_WINDOW_LAYER /obj/machinery/button layer = ABOVE_WINDOW_LAYER diff --git a/maps/map_levels/140x140/talon/talon1.dmm b/maps/map_levels/140x140/talon/talon1.dmm index 4fb2fe6c1ea..91ca7b015cb 100644 --- a/maps/map_levels/140x140/talon/talon1.dmm +++ b/maps/map_levels/140x140/talon/talon1.dmm @@ -264,7 +264,7 @@ /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "cB" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -352,7 +352,7 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -692,7 +692,7 @@ /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "gj" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/outline/red, @@ -814,7 +814,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -863,7 +863,7 @@ /obj/item/spaceflare, /obj/item/storage/box/flashshells/large, /obj/item/gun/ballistic/shotgun/flare, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -1241,7 +1241,7 @@ /turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "kJ" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -1343,7 +1343,7 @@ /area/talon/deckone/central_hallway) "lv" = ( /obj/structure/catwalk, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -1396,7 +1396,7 @@ /area/talon/deckone/central_hallway) "ms" = ( /obj/structure/catwalk, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -1442,7 +1442,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -1848,7 +1848,7 @@ /turf/simulated/wall/rshull, /area/talon/maintenance/deckone_starboard_aft_wing) "qf" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -1864,7 +1864,7 @@ /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "qi" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/tiled/eris/dark/monofloor, @@ -2086,7 +2086,7 @@ /turf/simulated/floor/tiled/eris/steel/gray_perforated, /area/talon/deckone/workroom) "rX" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/outline/red, @@ -2289,7 +2289,7 @@ /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ dir = 8 }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -2775,7 +2775,7 @@ dir = 1; icon_state = "1-2" }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -2826,7 +2826,7 @@ /obj/machinery/atmospherics/pipe/zpipe/up/supply{ dir = 4 }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -3159,7 +3159,7 @@ pixel_y = -8 }, /obj/item/surgical/bioregen, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -3191,7 +3191,7 @@ }, /obj/structure/table/standard, /obj/machinery/photocopier/faxmachine/talon, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -3676,7 +3676,7 @@ /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "DX" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -3806,7 +3806,7 @@ /obj/item/stack/marker_beacon/thirty, /obj/item/pipe_dispenser, /obj/item/inducer/syndicate, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/tiled/eris/dark/brown_platform, @@ -4127,7 +4127,7 @@ /obj/item/tank/jetpack/carbondioxide, /obj/item/tank/jetpack/carbondioxide, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -4157,7 +4157,7 @@ /obj/structure/table/standard, /obj/item/paper_bin, /obj/item/pen, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -5005,7 +5005,7 @@ dir = 1; icon_state = "1-2" }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -6045,7 +6045,7 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, diff --git a/maps/map_levels/140x140/talon/talon2.dmm b/maps/map_levels/140x140/talon/talon2.dmm index 55d6cf2cfc6..b819ded272b 100644 --- a/maps/map_levels/140x140/talon/talon2.dmm +++ b/maps/map_levels/140x140/talon/talon2.dmm @@ -868,7 +868,7 @@ /turf/simulated/floor/wood, /area/talon/decktwo/med_room) "ku" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 23 }, @@ -979,7 +979,7 @@ /area/talon/decktwo/vault) "lv" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -999,7 +999,7 @@ /turf/simulated/floor/wood, /area/talon/decktwo/bar) "lP" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -1147,7 +1147,7 @@ /turf/simulated/wall, /area/talon/maintenance/decktwo_starboard) "nD" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 1; pixel_y = -22 }, @@ -1182,7 +1182,7 @@ /turf/simulated/floor/hull/airless, /area/talon/maintenance/decktwo_solars) "nU" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -22 }, @@ -1296,7 +1296,7 @@ dir = 8 }, /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 23 }, @@ -1654,7 +1654,7 @@ pixel_y = 32; starts_with = list(/obj/item/clothing/suit/fire/firefighter = 2, /obj/item/clothing/mask/gas = 2, /obj/item/flashlight = 2, /obj/item/tank/oxygen/red = 2, /obj/item/extinguisher = 2, /obj/item/clothing/head/hardhat/red = 2) }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -22 }, @@ -1757,7 +1757,7 @@ /obj/item/stolenpackageplus, /obj/item/stolenpackageplus, /obj/item/stolenpackageplus, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /obj/machinery/light{ @@ -1826,7 +1826,7 @@ /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) "vK" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -2132,7 +2132,7 @@ /area/talon/maintenance/decktwo_solars) "zt" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -2406,7 +2406,7 @@ /turf/simulated/floor/tiled/techfloor, /area/talon/decktwo/lifeboat) "Cu" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -2461,7 +2461,7 @@ /turf/simulated/floor/wood, /area/talon/decktwo/eng_room) "Dk" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -2746,7 +2746,7 @@ /turf/simulated/floor/plating, /area/talon/maintenance/decktwo_aft) "FN" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 22 }, @@ -2917,7 +2917,7 @@ /turf/simulated/floor/wood, /area/talon/decktwo/med_room) "Ik" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -2934,7 +2934,7 @@ /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) "Ir" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /obj/structure/catwalk, @@ -3130,7 +3130,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/talon/decktwo/pilot_room) "Kh" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -3318,7 +3318,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -3501,7 +3501,7 @@ /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) "NO" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -3746,7 +3746,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ pixel_y = 22 }, /obj/structure/catwalk, @@ -3796,7 +3796,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/talon/decktwo/lifeboat) "RN" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -22 }, @@ -3973,7 +3973,7 @@ /turf/simulated/floor/hull/airless, /area/talon/maintenance/decktwo_solars) "TY" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, @@ -4285,14 +4285,14 @@ /turf/simulated/floor/carpet, /area/talon/decktwo/pilot_room) "XA" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 8; pixel_x = 23 }, /turf/simulated/floor/carpet, /area/talon/decktwo/eng_room) "XD" = ( -/obj/machinery/alarm/talon{ +/obj/machinery/air_alarm/talon{ dir = 4; pixel_x = -23 }, diff --git a/maps/minitest/levels/minitest.dmm b/maps/minitest/levels/minitest.dmm index 7dd44ea2f67..32a3b8806a9 100644 --- a/maps/minitest/levels/minitest.dmm +++ b/maps/minitest/levels/minitest.dmm @@ -40,7 +40,7 @@ /turf/simulated/floor/tiled/dark, /area/tcommsat/computer) "ag" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -484,7 +484,7 @@ frequency = 1379; icon_state = "map_vent_out"; id_tag = "toxins_pump"; - use_power = 1 + on = 1 }, /obj/structure/lattice, /turf/space, @@ -611,7 +611,7 @@ }, /area/tcommsat/chamber) "bq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -25; pixel_y = 0 @@ -950,7 +950,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; icon_state = "alarm0"; pixel_x = 24 @@ -1030,7 +1030,7 @@ external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; - use_power = 1; + on = 1; pressure_checks = 0; pressure_checks_default = 0 }, @@ -1059,7 +1059,7 @@ initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; - use_power = 1; + on = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0 @@ -1215,7 +1215,7 @@ /turf/simulated/floor/tiled, /area/medical/medbay) "cQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -1486,7 +1486,7 @@ /turf/simulated/floor/tiled, /area/medical/medbay2) "dB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -1594,7 +1594,7 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/civilian_hallway_aft) "dM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1864,7 +1864,7 @@ /turf/simulated/floor/tiled, /area/medical/medbay) "ev" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2024,7 +2024,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/bar) "eR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2146,7 +2146,7 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/civilian_hallway_fore) "ff" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -25; pixel_y = 0 @@ -2156,7 +2156,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fore) "fg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; icon_state = "alarm0"; pixel_x = 24 @@ -2456,7 +2456,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "fO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -2588,7 +2588,7 @@ /turf/simulated/floor/tiled, /area/bridge) "gg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, diff --git a/maps/rift/levels/rift-01-underground3.dmm b/maps/rift/levels/rift-01-underground3.dmm index 6a1ba22b1bd..e7de9ee33e8 100644 --- a/maps/rift/levels/rift-01-underground3.dmm +++ b/maps/rift/levels/rift-01-underground3.dmm @@ -72,7 +72,7 @@ /turf/simulated/floor/outdoors/safeice/lythios43c/indoors, /area/rift/surfacebase/underground/under1) "et" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, diff --git a/maps/rift/levels/rift-02-underground2.dmm b/maps/rift/levels/rift-02-underground2.dmm index 6c44cdf4ff0..6d31e99b1ef 100644 --- a/maps/rift/levels/rift-02-underground2.dmm +++ b/maps/rift/levels/rift-02-underground2.dmm @@ -170,7 +170,7 @@ /turf/simulated/floor, /area/engineering/engine_smes) "aC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -375,7 +375,7 @@ "bd" = ( /obj/structure/catwalk, /obj/effect/floor_decal/industrial/danger, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -773,7 +773,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -916,7 +916,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -1294,7 +1294,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -1459,7 +1459,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -1539,7 +1539,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -2096,7 +2096,7 @@ "ge" = ( /obj/effect/floor_decal/borderfloor, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -2145,7 +2145,7 @@ "gk" = ( /obj/effect/floor_decal/borderfloor, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -2277,7 +2277,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -2322,7 +2322,7 @@ /obj/effect/floor_decal/techfloor{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -2381,7 +2381,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; name = "unlocked air alarm"; pixel_y = 24; @@ -2568,7 +2568,7 @@ /area/rnd/secure_storage/critical) "hr" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -3107,7 +3107,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -3129,7 +3129,7 @@ id_tag = "cooling_out"; initialize_directions = 4; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/nitrogen{ initial_gas_mix = "n2=82.1472;TEMP=293.15" @@ -3198,7 +3198,7 @@ /area/engineering/hallway) "js" = ( /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -3287,7 +3287,7 @@ /obj/effect/floor_decal/techfloor{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -3493,7 +3493,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -3579,7 +3579,7 @@ /turf/simulated/floor/plating, /area/maintenance/atmos) "kg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -3860,7 +3860,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/black{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -3972,7 +3972,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -4063,7 +4063,7 @@ /turf/simulated/floor, /area/engineering/engine_room) "lB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -4156,7 +4156,7 @@ /obj/structure/closet/radiation, /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -4270,7 +4270,7 @@ /turf/simulated/floor/tiled/steel, /area/hallway/primary/undertwo) "me" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -4773,7 +4773,7 @@ dir = 4; req_one_access = list(18,47) }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -5100,7 +5100,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -6771,7 +6771,7 @@ /area/chapel/main) "tk" = ( /obj/structure/table/rack/shelf, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/reinforced, @@ -7230,7 +7230,7 @@ /area/maintenance/lower/mining) "uU" = ( /obj/machinery/suit_cycler/engineering, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -7339,7 +7339,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -7446,7 +7446,7 @@ /area/chapel/main) "vU" = ( /obj/structure/filingcabinet, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/reinforced, @@ -7819,7 +7819,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled, @@ -8009,7 +8009,7 @@ /turf/simulated/floor/plating, /area/maintenance/research/xenobio) "xO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -8357,7 +8357,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/secure_storage/lower) "zp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -8517,7 +8517,7 @@ /obj/item/clothing/mask/breath, /obj/item/mining_scanner, /obj/item/tank/oxygen, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/rack/shelf, @@ -8611,7 +8611,7 @@ /area/engineering/hallway) "AF" = ( /obj/structure/bed/chair/comfy/beige, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/carpet, @@ -8669,7 +8669,7 @@ /turf/simulated/floor/wood, /area/chapel/observation) "AU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -8808,7 +8808,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -8923,7 +8923,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -9033,7 +9033,7 @@ /area/quartermaster/miningdock) "Cq" = ( /obj/landmark/spawnpoint/job/station_engineer, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9080,7 +9080,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/locker_room) "CK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9109,7 +9109,7 @@ /obj/machinery/computer/rcon{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9403,7 +9403,7 @@ /area/quartermaster/miningdock) "DR" = ( /obj/machinery/computer/atmos_alert, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -9542,7 +9542,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -9669,7 +9669,7 @@ /area/chapel/office) "ES" = ( /obj/machinery/vending/engivend, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -10089,7 +10089,7 @@ desc = "A large cabinet with drawers. They seem to be ominously empty."; name = "Classified Science Records" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -10099,7 +10099,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -10155,7 +10155,7 @@ /turf/simulated/floor/tiled, /area/rnd/secure_storage/lower) "GO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -10308,7 +10308,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/mining) "HA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -10400,7 +10400,7 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/workshop) "HW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10440,7 +10440,7 @@ /area/rnd/secure_storage/lower) "Ie" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10816,7 +10816,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/belterdock/refinery) "JD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10960,7 +10960,7 @@ /turf/simulated/floor/tiled, /area/engineering/foyer) "Kf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -11383,7 +11383,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -11531,7 +11531,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12175,7 +12175,7 @@ /obj/item/geiger_counter, /obj/item/geiger_counter, /obj/structure/table/steel_reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -12195,7 +12195,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/foyer) "OX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12257,7 +12257,7 @@ /area/chapel/chapel_morgue) "Pi" = ( /obj/effect/floor_decal/borderfloor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -12401,7 +12401,7 @@ /obj/item/nullrod{ pixel_x = -4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -12584,7 +12584,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/atmos/hallway) "QB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12909,7 +12909,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -13012,7 +13012,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13083,7 +13083,7 @@ /turf/simulated/floor/tiled/steel, /area/quartermaster/miningdock) "SY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -13719,7 +13719,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/chapel/chapel_morgue) "Vy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -13783,7 +13783,7 @@ /turf/simulated/floor/plating, /area/maintenance/chapel) "VJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14667,7 +14667,7 @@ pixel_x = -11; pixel_y = -5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -14680,7 +14680,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/photocopier, @@ -14820,7 +14820,7 @@ /area/rnd/secure_storage/critical/records) "ZT" = ( /obj/structure/table/bench/padded, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/rift/levels/rift-03-underground1.dmm b/maps/rift/levels/rift-03-underground1.dmm index ec3b4cf4593..59609cac134 100644 --- a/maps/rift/levels/rift-03-underground1.dmm +++ b/maps/rift/levels/rift-03-underground1.dmm @@ -16,7 +16,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/phoron, /area/engineering/atmos) @@ -285,7 +285,7 @@ /area/maintenance/engineering/upper) "aO" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -456,7 +456,7 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -631,7 +631,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -787,7 +787,7 @@ sensors = list("n2_sensor"="Tank") }, /obj/structure/window/reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1268,7 +1268,7 @@ /turf/simulated/floor/tiled/steel, /area/hallway/primary/underone) "cR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -1391,7 +1391,7 @@ /turf/simulated/floor/concrete/rng/lythios43c, /area/rift/station/fighter_bay/transport_tunnel) "dd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -2463,7 +2463,7 @@ "gb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/blue, /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2896,7 +2896,7 @@ /area/maintenance/engineering) "hx" = ( /obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -2937,7 +2937,7 @@ /turf/simulated/floor/tiled/techfloor, /area/station/protean_nanite_room) "hJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -3080,7 +3080,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -3609,7 +3609,7 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "ka" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -4199,7 +4199,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -4431,7 +4431,7 @@ /area/crew_quarters/pool) "nj" = ( /obj/effect/alien/weeds, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -4654,7 +4654,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/oxygen, /area/engineering/atmos) @@ -4777,7 +4777,7 @@ /obj/machinery/door/window/southleft{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -5402,7 +5402,7 @@ /area/engineering/atmos/hallway) "qY" = ( /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -5508,7 +5508,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airless, /area/engineering/atmos) @@ -5618,7 +5618,7 @@ /turf/simulated/floor/plating, /area/maintenance/public_bunker) "rG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -5660,7 +5660,7 @@ /turf/simulated/floor/tiled/steel, /area/rift/station/stairs_two) "rO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -6057,7 +6057,7 @@ dir = 8 }, /obj/random/trash_pile, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6520,7 +6520,7 @@ /turf/simulated/floor/tiled/kafel_full/blue, /area/crew_quarters/pool) "va" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6652,7 +6652,7 @@ /obj/item/clothing/suit/storage/snowsuit/science, /obj/item/clothing/suit/storage/snowsuit/science, /obj/item/clothing/suit/storage/snowsuit/science, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/white, @@ -6807,7 +6807,7 @@ /turf/simulated/floor/tiled, /area/maintenance/elevator) "vU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -6877,7 +6877,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled, @@ -7000,7 +7000,7 @@ internal_pressure_bound_default = 4000; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -7064,7 +7064,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/n20, /area/engineering/atmos) @@ -8892,7 +8892,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/rift/station/fighter_bay/hangar) "De" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/monotile, @@ -9175,7 +9175,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/carbon_dioxide, /area/engineering/atmos) @@ -9261,7 +9261,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/underone) "ED" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -9310,7 +9310,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -9492,7 +9492,7 @@ icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -9698,7 +9698,7 @@ /area/rnd/secure_storage/upper) "FY" = ( /obj/effect/floor_decal/borderfloor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -9912,7 +9912,7 @@ /area/maintenance/engineering) "GE" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9957,7 +9957,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/underone) "GN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -10337,7 +10337,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -10668,7 +10668,7 @@ /obj/structure/bed/chair/sofa/purp/left{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -11284,7 +11284,7 @@ dir = 4 }, /obj/item/flashlight/lantern, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -11642,7 +11642,7 @@ /turf/simulated/floor/plating, /area/storage/tech) "MJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12086,8 +12086,8 @@ /obj/item/reagent_scanner, /obj/item/healthanalyzer, /obj/item/geiger_counter, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer, +/obj/item/plant_analyzer, +/obj/item/atmos_analyzer, /obj/item/t_scanner, /obj/machinery/camera/network/engineering{ dir = 8 @@ -12544,7 +12544,7 @@ /turf/simulated/floor/outdoors/snow/lythios43c, /area/rift/surfacebase/underground/under1) "PC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12666,7 +12666,7 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "PZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/kafel_full/blue, @@ -12980,7 +12980,7 @@ /turf/simulated/floor/tiled/steel, /area/hallway/primary/underone) "Rl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -14360,7 +14360,7 @@ /obj/item/flash, /obj/item/flash, /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -14830,7 +14830,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/nitrogen, /area/engineering/atmos) @@ -14842,7 +14842,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14864,7 +14864,7 @@ dir = 8 }, /obj/machinery/disposal, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14906,7 +14906,7 @@ /turf/simulated/floor/reinforced, /area/rnd/secure_storage/upper) "YN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -15023,7 +15023,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos) "Zc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -15119,7 +15119,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/engineering/atmos) diff --git a/maps/rift/levels/rift-04-surface1.dmm b/maps/rift/levels/rift-04-surface1.dmm index 511c0b2c286..878b655446d 100644 --- a/maps/rift/levels/rift-04-surface1.dmm +++ b/maps/rift/levels/rift-04-surface1.dmm @@ -90,7 +90,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /turf/simulated/floor/plating, @@ -774,7 +774,7 @@ /obj/item/storage/belt/utility, /obj/item/storage/belt/utility, /obj/item/t_scanner, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/item/clothing/gloves/fyellow, /obj/item/flashlight, /obj/machinery/light, @@ -1183,7 +1183,7 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -1402,7 +1402,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/garage) "bcL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -1416,7 +1416,7 @@ /area/hallway/primary/surfaceone) "bcN" = ( /obj/structure/table/standard, -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ pixel_y = 26 }, /obj/machinery/atmospherics/component/unary/outlet_injector{ @@ -1621,7 +1621,7 @@ "bjd" = ( /obj/machinery/floodlight, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1658,7 +1658,7 @@ /area/tether/surfacebase/funny/clownoffice) "bkd" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /turf/simulated/floor/plating, @@ -1766,7 +1766,7 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "bmT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -1990,7 +1990,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -2588,7 +2588,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -2610,7 +2610,7 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -2632,7 +2632,7 @@ "bOt" = ( /obj/structure/flora/pottedplant/minitree, /obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -2852,7 +2852,7 @@ /obj/item/packageWrap, /obj/item/packageWrap, /obj/item/destTagger, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -3052,7 +3052,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -3242,7 +3242,7 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -3306,7 +3306,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3413,7 +3413,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -4230,7 +4230,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -4409,7 +4409,7 @@ /obj/random/maintenance, /obj/random/maintenance, /obj/random/maintenance/clean, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -4874,7 +4874,7 @@ /obj/item/duct_tape_roll, /obj/item/storage/toolbox/mechanical, /obj/item/t_scanner, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/item/stack/cable_coil, /obj/item/flashlight/maglight, /obj/random/toolbox, @@ -5976,7 +5976,7 @@ /obj/effect/floor_decal/corner/brown/bordercorner2{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -7420,7 +7420,7 @@ /turf/simulated/floor/tiled/dark, /area/medical/psych/psych_2) "eJm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -7612,7 +7612,7 @@ /turf/simulated/floor/plating, /area/crew_quarters/medbreak) "eUk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -7623,7 +7623,7 @@ /obj/structure/bed/chair/wood{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7995,7 +7995,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -8499,7 +8499,7 @@ /obj/item/assembly/igniter, /obj/item/assembly/igniter, /obj/item/assembly/igniter, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -8935,7 +8935,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ @@ -9013,7 +9013,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -9392,7 +9392,7 @@ /area/quartermaster/qm) "gim" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -9821,7 +9821,7 @@ "gwx" = ( /obj/structure/bed/padded, /obj/item/bedsheet/medical, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -9955,7 +9955,7 @@ "gEv" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/brown/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -10652,7 +10652,7 @@ /obj/effect/floor_decal/corner/beige/bordercorner2{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/white, @@ -10719,7 +10719,7 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -10761,7 +10761,7 @@ "gZL" = ( /obj/structure/barricade/cutout/clown, /obj/effect/floor_decal/rust, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -10855,7 +10855,7 @@ /obj/effect/floor_decal/corner/green/border{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -10882,7 +10882,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -10931,7 +10931,7 @@ name = "obscure table" }, /obj/random/action_figure, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -11126,7 +11126,7 @@ /turf/simulated/floor/tiled/steel, /area/security/prison) "hip" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -11381,7 +11381,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -11453,7 +11453,7 @@ /area/maintenance/maint_bar) "hqU" = ( /obj/effect/floor_decal/industrial/loading, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -11927,7 +11927,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -13067,7 +13067,7 @@ /obj/structure/cable/green{ icon_state = "1-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -13894,7 +13894,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14780,7 +14780,7 @@ dir = 1 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -14898,8 +14898,8 @@ /obj/structure/table/woodentable, /obj/item/storage/bag/plants, /obj/item/storage/bag/plants, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/material/minihoe, /obj/item/material/minihoe, /turf/simulated/floor/tiled/steel, @@ -15222,7 +15222,7 @@ /turf/simulated/floor/tiled/white, /area/medical/psych) "jEg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -15383,7 +15383,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16189,7 +16189,7 @@ /turf/simulated/floor/wood, /area/rnd/outpost/xenobiology/outpost_office) "kjM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -16915,9 +16915,9 @@ /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/gloves/botanic_leather, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /obj/item/tool/wirecutters/clippers/trimmers, /obj/item/material/knife/machete/hatchet, @@ -17392,7 +17392,7 @@ }, /obj/machinery/camera/network/medbay, /obj/structure/table/glass, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/item/paper_bin, @@ -17487,7 +17487,7 @@ /area/maintenance/research/lower) "kVL" = ( /obj/effect/floor_decal/borderfloor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -18395,7 +18395,7 @@ /obj/item/storage/box/syringes{ pixel_y = -4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -18768,7 +18768,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19203,7 +19203,7 @@ /turf/simulated/floor/tiled/monowhite, /area/security/forensics) "mdL" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ pixel_y = 26 }, /obj/structure/table/standard, @@ -19763,7 +19763,7 @@ /obj/structure/bed/chair/wood{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/effect/floor_decal/borderfloor{ @@ -19971,7 +19971,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -20566,7 +20566,7 @@ /obj/effect/floor_decal/corner/beige/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/white, @@ -20635,7 +20635,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -21137,7 +21137,7 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -21192,7 +21192,7 @@ dir = 10 }, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -22022,7 +22022,7 @@ dir = 1 }, /obj/structure/closet/emcloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -22451,7 +22451,7 @@ "nUJ" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -22652,7 +22652,7 @@ /obj/effect/floor_decal/corner/mauve/border, /obj/effect/floor_decal/borderfloor/corner2, /obj/effect/floor_decal/corner/mauve/bordercorner2, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -23000,7 +23000,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -23453,7 +23453,7 @@ /obj/effect/floor_decal/industrial/danger{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -23856,7 +23856,7 @@ /obj/item/clothing/suit/space/anomaly, /obj/item/clothing/mask/breath, /obj/item/clothing/head/helmet/space/anomaly, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -23942,7 +23942,7 @@ /turf/simulated/floor/tiled/techmaint, /area/rnd/tankstorage) "oOb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -24410,7 +24410,7 @@ /obj/effect/floor_decal/industrial/loading{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -24559,7 +24559,7 @@ "pcB" = ( /obj/structure/bed/padded, /obj/item/bedsheet/medical, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -24940,7 +24940,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -25095,7 +25095,7 @@ /area/maintenance/cargo) "ptg" = ( /obj/machinery/atmospherics/component/unary/vent_pump/high_volume, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /turf/simulated/floor/plating, @@ -25325,7 +25325,7 @@ /turf/simulated/floor/tiled/steel, /area/hallway/primary/surfaceone) "pzE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -25518,7 +25518,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled, @@ -25752,7 +25752,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -25831,7 +25831,7 @@ /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/brown/border, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -25895,7 +25895,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump{ dir = 8; icon_state = "map_vent_out"; - use_power = 1 + on = 1 }, /obj/structure/window/reinforced{ dir = 1 @@ -26414,7 +26414,7 @@ internal_pressure_bound_default = 4000; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /obj/machinery/door/window/southleft{ dir = 1; @@ -26585,7 +26585,7 @@ /turf/simulated/open, /area/turbolift/rhammerhead/midpoint) "qro" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -26802,7 +26802,7 @@ /turf/simulated/floor/tiled/steel, /area/rnd/hallway) "qwN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -26863,7 +26863,7 @@ /turf/simulated/floor/tiled/steel, /area/rift/trade_shop) "qAu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -27043,7 +27043,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -27410,7 +27410,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) "qTZ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -27424,7 +27424,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -27599,7 +27599,7 @@ dir = 8 }, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -27982,7 +27982,7 @@ /obj/effect/floor_decal/industrial/warning/dust{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -28362,7 +28362,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -28591,7 +28591,7 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "rHl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -28780,7 +28780,7 @@ /obj/item/surgical/scalpel, /obj/item/surgical/cautery, /obj/item/autopsy_scanner, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -29655,7 +29655,7 @@ /obj/effect/floor_decal/corner/pink/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -29738,7 +29738,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -29872,7 +29872,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/computer/med_data/laptop, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -30934,7 +30934,7 @@ /turf/simulated/floor/tiled/steel, /area/rnd/xenobiology/xenoflora) "sXn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -31507,7 +31507,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -32406,7 +32406,7 @@ /area/library) "tQY" = ( /obj/structure/closet/emcloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -32834,7 +32834,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/delivery) "uct" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -33192,7 +33192,7 @@ "unB" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/brown/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -33339,7 +33339,7 @@ /area/rnd/outpost/xenobiology/outpost_main) "uqq" = ( /obj/structure/table/standard, -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ dir = 1; pixel_y = -26 }, @@ -33491,7 +33491,7 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -33575,7 +33575,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay_emt_bay) "uvA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -33917,7 +33917,7 @@ /turf/simulated/floor/tiled/steel, /area/rift/stairwell/primary/surfaceone) "uDC" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ dir = 1; pixel_y = -26 }, @@ -34122,7 +34122,7 @@ /turf/simulated/floor/plating, /area/medical/virologymaint) "uLP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -34260,7 +34260,7 @@ dir = 4 }, /obj/structure/closet/firecloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -34808,7 +34808,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) "vja" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -35257,7 +35257,7 @@ /turf/simulated/floor/tiled/steel, /area/rnd/tankstorage) "vBt" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ pixel_y = 26 }, /turf/simulated/floor/outdoors/grass/heavy/interior, @@ -35452,7 +35452,7 @@ use_power = 1; volume_rate = 700 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -35460,7 +35460,7 @@ /turf/simulated/floor/tiled, /area/medical/virology) "vLh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/structure/undies_wardrobe, @@ -35896,7 +35896,7 @@ dir = 4 }, /obj/effect/floor_decal/rust, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -36000,7 +36000,7 @@ /turf/simulated/floor/tiled/techmaint, /area/rift/surfaceeva/aa/surface_south) "waZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -36063,7 +36063,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) "wdp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -36166,7 +36166,7 @@ /obj/machinery/camera/network/medbay{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -36665,7 +36665,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -37616,7 +37616,7 @@ /turf/simulated/floor/plating, /area/maintenance/research/lower) "xaz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -37636,7 +37636,7 @@ /turf/simulated/floor/outdoors/grass/heavy/interior, /area/rift/station/public_garden) "xbi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -37796,7 +37796,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_eva) "xcX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_pump/on, @@ -38076,7 +38076,7 @@ name = "Powernet Sensor - Med Subgrid"; name_tag = "Med Subgrid" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -38493,7 +38493,7 @@ /obj/structure/cable/green{ icon_state = "0-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -38661,7 +38661,7 @@ /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -38960,7 +38960,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -39001,7 +39001,7 @@ /obj/item/duct_tape_roll, /obj/item/multitool, /obj/item/t_scanner, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/item/stack/cable_coil, /obj/item/clothing/gloves/fyellow, /obj/random/toolbox, @@ -39029,7 +39029,7 @@ /area/tether/surfacebase/funny/mimeoffice) "xQb" = ( /obj/effect/floor_decal/spline/plain, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -39102,7 +39102,7 @@ /area/quartermaster/garage) "xRD" = ( /obj/structure/janitorialcart, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, diff --git a/maps/rift/levels/rift-05-surface2.dmm b/maps/rift/levels/rift-05-surface2.dmm index e2b1d1b66b9..fba8b95f837 100644 --- a/maps/rift/levels/rift-05-surface2.dmm +++ b/maps/rift/levels/rift-05-surface2.dmm @@ -589,7 +589,7 @@ }, /obj/structure/table/reinforced, /obj/item/paper_bin, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -609,7 +609,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -653,7 +653,7 @@ /area/crew_quarters/sleep) "axQ" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -1347,7 +1347,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "aVr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -1384,7 +1384,7 @@ /turf/simulated/floor/tiled/steel, /area/rift/trade_shop/loading) "aWP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -1894,7 +1894,7 @@ /area/assembly/robotics) "bfe" = ( /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -1955,7 +1955,7 @@ dir = 10 }, /obj/structure/closet/secure_closet/medical2, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -2410,7 +2410,7 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/steel, @@ -2852,7 +2852,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -3387,7 +3387,7 @@ /turf/simulated/floor/tiled/steel, /area/assembly/robotics) "cbV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 1; pixel_y = -22 @@ -3441,7 +3441,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3487,7 +3487,7 @@ /obj/effect/floor_decal/corner/paleblue{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -5552,7 +5552,7 @@ /area/medical/surgery_hallway) "dzC" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -5912,7 +5912,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6736,7 +6736,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/dormitory) "elb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -6781,7 +6781,7 @@ /area/medical/medbay_primary_storage) "emu" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -7371,7 +7371,7 @@ /obj/item/gun/energy/gun, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/camera/network/security, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/dark, @@ -8056,7 +8056,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -8390,7 +8390,7 @@ "foH" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -8629,7 +8629,7 @@ "fzG" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -9034,7 +9034,7 @@ /area/security/range) "fOd" = ( /obj/machinery/recharge_station, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9909,7 +9909,7 @@ /obj/effect/floor_decal/corner/paleblue{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -10503,7 +10503,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -10661,7 +10661,7 @@ pixel_x = -25; req_access = list(55) }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -10727,7 +10727,7 @@ /turf/simulated/floor/tiled/steel, /area/holodeck_control) "gMc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /obj/machinery/light{ @@ -10784,7 +10784,7 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -11799,7 +11799,7 @@ pixel_x = 3; pixel_y = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -12307,7 +12307,7 @@ /obj/machinery/computer/aifixer{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -12359,7 +12359,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -12513,7 +12513,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -12556,7 +12556,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_slimepens) "hUC" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "slime_pens"; dir = 4; pixel_x = -22 @@ -12573,7 +12573,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -13814,7 +13814,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -15592,7 +15592,7 @@ "jUi" = ( /obj/machinery/optable, /obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -15632,7 +15632,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -15916,7 +15916,7 @@ /obj/structure/closet/secure_closet/guncabinet{ anchored = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -16018,7 +16018,7 @@ pixel_y = -2 }, /obj/effect/floor_decal/borderfloorblack/full, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16086,7 +16086,7 @@ /obj/effect/floor_decal/corner/lightgrey/bordercorner2{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -17039,7 +17039,7 @@ /turf/simulated/floor/tiled/steel, /area/crew_quarters/heads/hor) "kMj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -17800,7 +17800,7 @@ /obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/half, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -18286,7 +18286,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -18311,7 +18311,7 @@ "lxu" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -19113,7 +19113,7 @@ /area/medical/reception) "lUe" = ( /obj/structure/table/standard, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -19332,7 +19332,7 @@ /area/maintenance/asmaint2) "maU" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -20527,7 +20527,7 @@ /turf/simulated/floor/tiled/steel, /area/crew_quarters/sleep) "mGL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -20851,7 +20851,7 @@ "mRB" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/purple/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -21365,7 +21365,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -21908,7 +21908,7 @@ /turf/simulated/floor/tiled, /area/security/briefing_room) "nAo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -21946,7 +21946,7 @@ alpha = 255; dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -22104,7 +22104,7 @@ "nHA" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/purple/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -23787,7 +23787,7 @@ /obj/machinery/camera/network/civilian{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -24019,7 +24019,7 @@ /obj/effect/floor_decal/corner_techfloor_grid/full{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -24103,7 +24103,7 @@ /area/crew_quarters/sleep/Dorm_5) "oWE" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -24439,7 +24439,7 @@ /area/security/hammerhead_bay) "pfD" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -25399,7 +25399,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -25676,7 +25676,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "pZT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -26458,7 +26458,7 @@ "qxJ" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/floor_decal/rust, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -26602,7 +26602,7 @@ /area/rnd/workshop) "qBv" = ( /obj/machinery/scale, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -26715,7 +26715,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -26737,7 +26737,7 @@ /turf/simulated/floor/water/deep/pool, /area/crew_quarters/pool) "qHW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -26767,7 +26767,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -26980,7 +26980,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -27030,7 +27030,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -27087,7 +27087,7 @@ /turf/simulated/floor/tiled/dark, /area/security/lobby) "qSY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -27482,7 +27482,7 @@ }, /obj/machinery/papershredder, /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -27704,7 +27704,7 @@ }, /obj/item/hand_labeler, /obj/item/pen, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -28027,7 +28027,7 @@ /turf/simulated/floor/reinforced, /area/security/hammerhead_bay) "rrL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -28286,7 +28286,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -28385,7 +28385,7 @@ /obj/effect/floor_decal/corner/lightgrey{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -28842,7 +28842,7 @@ pixel_y = -8; req_access = list(55) }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -29350,7 +29350,7 @@ /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ scrub_id = "xeno_phoron_pen_scrubbers" }, -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "slime_pens"; dir = 1; pixel_y = -22 @@ -30084,7 +30084,7 @@ /area/hallway/primary/surfacetwo) "sLL" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -30322,7 +30322,7 @@ dir = 4 }, /obj/structure/bed/chair/wood, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -30422,7 +30422,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -31323,7 +31323,7 @@ /area/maintenance/dormitory) "tCA" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -31341,7 +31341,7 @@ "tDr" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -31804,7 +31804,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 1; pixel_y = -22 @@ -32151,7 +32151,7 @@ /obj/item/tank/oxygen, /obj/item/suit_cooling_unit, /obj/item/tank/jetpack/oxygen, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -32953,7 +32953,7 @@ dir = 8; pixel_x = -24 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -32984,7 +32984,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -32995,7 +32995,7 @@ /area/rift/trade_shop/loading) "uNX" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -33075,7 +33075,7 @@ /turf/simulated/floor/reinforced, /area/security/hammerhead_bay) "uRh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -33470,7 +33470,7 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, /obj/effect/mist, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /obj/machinery/camera/network/civilian, @@ -34767,7 +34767,7 @@ "vSi" = ( /obj/structure/table/rack/shelf/steel, /obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /obj/machinery/light{ @@ -35081,7 +35081,7 @@ /obj/machinery/door/firedoor/glass{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -35304,7 +35304,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -35962,7 +35962,7 @@ /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -36463,7 +36463,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "xdl" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -36524,7 +36524,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/security_lockerroom) "xfF" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "slime_pens"; dir = 8; pixel_x = 22 @@ -36758,7 +36758,7 @@ pixel_x = 2; pixel_y = 2 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -37372,7 +37372,7 @@ /turf/simulated/floor/tiled/white, /area/medical/resleeving) "xII" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -37492,7 +37492,7 @@ name = "Station Intercom (General)"; pixel_y = 21 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /obj/machinery/computer/security/xenobio, @@ -37957,7 +37957,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/surfacetwo) "xXj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -38487,7 +38487,7 @@ desc = "A small wall mounted cabinet designed to hold a fire extinguisher. "; pixel_y = -32 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, diff --git a/maps/rift/levels/rift-06-surface3.dmm b/maps/rift/levels/rift-06-surface3.dmm index 042cf237ba0..936b2d0d76e 100644 --- a/maps/rift/levels/rift-06-surface3.dmm +++ b/maps/rift/levels/rift-06-surface3.dmm @@ -790,7 +790,7 @@ /obj/effect/floor_decal/techfloor{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -831,8 +831,8 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/material/minihoe, /obj/item/material/minihoe, /obj/effect/floor_decal/borderfloor, @@ -917,7 +917,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/exploration/excursion_dock) "acY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -1166,7 +1166,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -1609,7 +1609,7 @@ /obj/machinery/computer/ship/navigation/telescreen{ pixel_x = -32 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/carpet/tealcarpet, @@ -1951,7 +1951,7 @@ /obj/effect/floor_decal/corner/blue/bordercorner2{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -2114,7 +2114,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -2130,7 +2130,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -2327,7 +2327,7 @@ /turf/simulated/floor/tiled/dark, /area/exploration/showers) "ahl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -2387,7 +2387,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "ahu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -2404,7 +2404,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -2792,7 +2792,7 @@ /turf/simulated/floor/reinforced/lythios43c, /area/rift/surfacebase/outside/outside3) "aiC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -3369,7 +3369,7 @@ /turf/simulated/floor/tiled/steel, /area/exploration) "ajV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -3587,7 +3587,7 @@ "ako" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/beige/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -3875,7 +3875,7 @@ /turf/simulated/floor/tiled/techfloor/grid/lythios43c, /area/shuttle/excursion/general) "akY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -4773,14 +4773,14 @@ }, /obj/item/storage/toolbox/mechanical, /obj/item/tank/phoron, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/excursion/cockpit) "anx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -5758,7 +5758,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "aqi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -5887,7 +5887,7 @@ /obj/machinery/seed_storage/garden, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lime/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -6557,7 +6557,7 @@ /obj/machinery/computer/ship/navigation/telescreen{ pixel_x = 32 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/carpet/tealcarpet, @@ -6620,7 +6620,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -6689,7 +6689,7 @@ /turf/simulated/floor/tiled, /area/exploration/explorer_prep) "asz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -7647,7 +7647,7 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -7852,7 +7852,7 @@ /obj/effect/floor_decal/borderfloorblack/corner2{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -7996,7 +7996,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/hop) "avX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -8855,7 +8855,7 @@ /obj/structure/bed/chair{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -8966,7 +8966,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -9646,7 +9646,7 @@ /turf/simulated/shuttle/wall/voidcraft/green, /area/shuttle/civvie/general) "aAn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -10249,7 +10249,7 @@ /obj/effect/floor_decal/borderfloorblack/corner2{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -10619,7 +10619,7 @@ /turf/simulated/floor/lythios43c/indoors, /area/maintenance/commandmaint) "aDt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -11290,7 +11290,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "aFx" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -11317,7 +11317,7 @@ name = "AI Upload turret control"; pixel_x = 30 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /obj/effect/floor_decal/techfloor{ @@ -11472,7 +11472,7 @@ dir = 10 }, /obj/landmark/spawnpoint/job/explorer, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -11910,7 +11910,7 @@ /obj/effect/floor_decal/corner/lightgrey{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -12078,7 +12078,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -13389,7 +13389,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -13916,7 +13916,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "aMI" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -24 }, @@ -14612,7 +14612,7 @@ "aOJ" = ( /obj/machinery/computer/robotics, /obj/structure/table/reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -14646,7 +14646,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -14767,7 +14767,7 @@ /obj/machinery/computer/ship/navigation/telescreen{ pixel_y = -32 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -16182,7 +16182,7 @@ /turf/simulated/floor/tiled/steel, /area/teleporter/departing) "aSV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -16794,7 +16794,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16873,7 +16873,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/exploration/explorer_prep) "aUU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17140,7 +17140,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -17929,7 +17929,7 @@ /turf/simulated/floor/tiled/old_tile/green, /area/shuttle/civvie/general) "aYa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -18249,7 +18249,7 @@ dir = 5 }, /obj/effect/floor_decal/corner/paleblue, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -18323,7 +18323,7 @@ /area/rift/surfacebase/outside/outside3) "aZk" = ( /obj/structure/table/bench/standard, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -18364,7 +18364,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -18558,7 +18558,7 @@ dir = 4; pixel_x = 32 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -18618,7 +18618,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -18802,7 +18802,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = " "; pixel_y = 24 }, @@ -19656,7 +19656,7 @@ pixel_y = 32 }, /obj/machinery/vending/giftvendor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -19704,7 +19704,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19828,7 +19828,7 @@ /obj/item/storage/fancy/candle_box, /obj/item/storage/fancy/whitecandle_box, /obj/item/storage/fancy/blackcandle_box, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19934,7 +19934,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "eIi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -20043,7 +20043,7 @@ /obj/random/tech_supply, /obj/structure/table/steel, /obj/random/maintenance/engineering, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -21331,7 +21331,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -21373,7 +21373,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 24 }, /obj/machinery/light{ @@ -22009,7 +22009,7 @@ pixel_x = 3; pixel_y = 2 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -24648,7 +24648,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -25471,7 +25471,7 @@ /area/bridge/bridge_hallway) "tyY" = ( /obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, diff --git a/maps/rift/levels/rift-08-west_deep.dmm b/maps/rift/levels/rift-08-west_deep.dmm index 72ffea94e6a..1da386cc19d 100644 --- a/maps/rift/levels/rift-08-west_deep.dmm +++ b/maps/rift/levels/rift-08-west_deep.dmm @@ -1958,7 +1958,7 @@ /area/gateway/prep_room) "rb" = ( /obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2558,7 +2558,7 @@ /turf/simulated/floor/outdoors/gravsnow/lythios43c/indoors, /area/rift/surfacebase/outside/west_deep) "xf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -2662,7 +2662,7 @@ /turf/simulated/floor/tiled/techfloor, /area/gateway) "yp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -2894,7 +2894,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel_grid, @@ -2968,7 +2968,7 @@ /turf/simulated/mineral/ignore_cavegen/lythios43c, /area/rift/surfacebase/outside/west_deep) "AW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -3816,7 +3816,7 @@ /turf/simulated/floor/wood, /area/outpost/mining_main/outpost/recreation) "In" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet/hydrant{ @@ -4271,7 +4271,7 @@ /turf/simulated/floor/tiled/dark, /area/gateway/prep_room) "Mo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -4374,7 +4374,7 @@ /area/gateway/prep_room) "Nq" = ( /obj/structure/table/reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -5514,7 +5514,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ diff --git a/maps/rift/levels/rift-09-west_caves.dmm b/maps/rift/levels/rift-09-west_caves.dmm index 3ea098b022d..fd460571e3f 100644 --- a/maps/rift/levels/rift-09-west_caves.dmm +++ b/maps/rift/levels/rift-09-west_caves.dmm @@ -950,7 +950,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -1794,7 +1794,7 @@ /turf/simulated/floor/tiled/steel_dirty/lythios43c/indoors, /area/rift/facility/interior/underground1) "vn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -2657,7 +2657,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/outpost/mining_main/outpost/storage) "Eq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2825,7 +2825,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/rift/levels/rift-10-west_plains.dmm b/maps/rift/levels/rift-10-west_plains.dmm index a1f6a4f5458..898408b7538 100644 --- a/maps/rift/levels/rift-10-west_plains.dmm +++ b/maps/rift/levels/rift-10-west_plains.dmm @@ -976,7 +976,7 @@ dir = 1 }, /obj/structure/table/standard, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/machinery/camera/network/research_outpost{ dir = 1 }, @@ -1085,7 +1085,7 @@ dir = 8 }, /obj/machinery/meter, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1166,7 +1166,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/anomaly_lab) "fw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -1374,7 +1374,7 @@ /area/rift/facility/interior/surface) "gq" = ( /obj/machinery/atmospherics/portables_connector, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -2078,7 +2078,7 @@ /obj/effect/floor_decal/corner/yellow/bordercorner{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -3345,7 +3345,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost) "pv" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -3502,7 +3502,7 @@ /obj/item/storage/excavation, /obj/item/stack/flag/yellow, /obj/item/pickaxe, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -3927,7 +3927,7 @@ pixel_x = 6; pixel_y = 26 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -4050,7 +4050,7 @@ /turf/simulated/floor/outdoors/snow/lythios43c/indoors, /area/rift/surfacebase/outside/west) "sH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -4192,7 +4192,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -4293,7 +4293,7 @@ /turf/simulated/wall/r_wall, /area/rift/facility/exterior) "tB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/steeldecal/steel_decals5, @@ -4425,7 +4425,7 @@ /area/rnd/outpost/anomaly_lab) "ug" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/tiled, @@ -4650,7 +4650,7 @@ name = "Powernet Sensor - Science Outpost Subgrid"; name_tag = "Science Outpost Subgrid" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -4740,7 +4740,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -5557,7 +5557,7 @@ /area/rnd/outpost/anomaly_lab/analysis) "yY" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -5587,7 +5587,7 @@ /obj/machinery/camera/network/research_outpost{ dir = 8 }, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /turf/simulated/floor/tiled/white, /area/rnd/outpost/heating) "zc" = ( @@ -5950,7 +5950,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -6456,7 +6456,7 @@ /turf/simulated/floor, /area/construction/solarscontrol) "DH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -6698,9 +6698,8 @@ /turf/simulated/wall, /area/rnd/outpost/mixing) "Fe" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ - filter_type = 4; - filtered_out = list("nitrous_oxide") +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ + filtering = /datum/gas/nitrous_oxide }, /turf/simulated/floor, /area/rnd/outpost/atmos) @@ -6708,7 +6707,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -6944,7 +6943,7 @@ /turf/simulated/floor/outdoors/snow/lythios43c, /area/rift/facility/exterior) "Gi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel_dirty, @@ -7314,7 +7313,7 @@ /turf/simulated/open, /area/outpost/mining_main/outpost/airlock/one) "HM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -8042,7 +8041,7 @@ /turf/simulated/wall/r_wall, /area/rnd/outpost/chamber) "KY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/purple{ @@ -8607,7 +8606,7 @@ /turf/simulated/floor, /area/rnd/outpost/atmos) "NV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -8724,7 +8723,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -8970,9 +8969,8 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/anomaly_lab) "PB" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ - filter_type = 0; - filtered_out = list("phoron") +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ + filtering = /datum/gas/phoron }, /turf/simulated/floor, /area/rnd/outpost/atmos) @@ -9794,7 +9792,7 @@ "Tu" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/purple/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -10462,9 +10460,8 @@ /turf/simulated/floor/tiled/white, /area/rnd/outpost/heating) "WP" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ - filter_type = 3; - filtered_out = list("carbon_dioxide") +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ + filtering = /datum/gas/carbon_dioxide }, /turf/simulated/floor, /area/rnd/outpost/atmos) @@ -10814,7 +10811,7 @@ /turf/simulated/floor/tiled/steel/lythios43c, /area/rift/facility/interior/elevator) "Ys" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 4; name = "High Power Gas filter"; power_rating = 15000; @@ -11138,7 +11135,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, diff --git a/maps/sectors/frozen_140/levels/frozen_140.dmm b/maps/sectors/frozen_140/levels/frozen_140.dmm index 1a1c94e3726..d3ff1f11f47 100644 --- a/maps/sectors/frozen_140/levels/frozen_140.dmm +++ b/maps/sectors/frozen_140/levels/frozen_140.dmm @@ -345,7 +345,7 @@ /turf/simulated/floor/outdoors/snow/classp/no_tree, /area/class_p/unexplored) "oa" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /obj/structure/blob/normal, @@ -359,7 +359,7 @@ /turf/simulated/floor/outdoors/shelfice/classp, /area/class_p/unexplored) "oe" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/old_tile/blue/classp{ @@ -433,7 +433,7 @@ /turf/simulated/floor/classp, /area/class_p/facility) "ss" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /obj/structure/barricade, @@ -753,7 +753,7 @@ }, /area/class_p/facility) "IK" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /obj/structure/blob/normal, @@ -1031,7 +1031,7 @@ }, /area/class_p/facility) "XK" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/classp, diff --git a/maps/sectors/frozen_192/levels/frozen_192.dmm b/maps/sectors/frozen_192/levels/frozen_192.dmm index 4677e775509..85c9258182d 100644 --- a/maps/sectors/frozen_192/levels/frozen_192.dmm +++ b/maps/sectors/frozen_192/levels/frozen_192.dmm @@ -170,7 +170,7 @@ }, /area/class_p/unexplored) "iq" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/classp, @@ -631,7 +631,7 @@ /turf/simulated/floor/classp, /area/class_p/unexplored) "FU" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /obj/structure/barricade, @@ -710,7 +710,7 @@ /turf/simulated/floor/classp, /area/class_p/unexplored) "Ku" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /obj/structure/blob/normal, @@ -942,7 +942,7 @@ }, /area/class_p/unexplored) "VV" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/old_tile/blue/classp{ @@ -981,7 +981,7 @@ }, /area/class_p/unexplored) "Xi" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /obj/structure/blob/normal, diff --git a/maps/sectors/gaia_140/levels/gaia_140.dmm b/maps/sectors/gaia_140/levels/gaia_140.dmm index 61b79f2af8d..19ea29192a0 100644 --- a/maps/sectors/gaia_140/levels/gaia_140.dmm +++ b/maps/sectors/gaia_140/levels/gaia_140.dmm @@ -227,8 +227,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/outdoors/grass/classm, /area/class_m/outside) @@ -1468,8 +1468,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/outdoors/grass/classm, /area/class_m/outside) diff --git a/maps/sectors/gaia_192/levels/gaia_192.dmm b/maps/sectors/gaia_192/levels/gaia_192.dmm index 043142bbff7..dd62c4bd730 100644 --- a/maps/sectors/gaia_192/levels/gaia_192.dmm +++ b/maps/sectors/gaia_192/levels/gaia_192.dmm @@ -867,8 +867,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/outdoors/grass/classm, /area/class_m/outside) @@ -951,8 +951,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/outdoors/grass/classm, /area/class_m/outside) @@ -4312,8 +4312,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/tiled/classm, /area/class_m/inside) @@ -8655,8 +8655,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/tiled/classm, /area/class_m/inside) diff --git a/maps/sectors/lavaland_140/levels/lavaland_140.dmm b/maps/sectors/lavaland_140/levels/lavaland_140.dmm index fc1fca17883..ee617f4cee4 100644 --- a/maps/sectors/lavaland_140/levels/lavaland_140.dmm +++ b/maps/sectors/lavaland_140/levels/lavaland_140.dmm @@ -25,7 +25,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -89,7 +89,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -208,7 +208,7 @@ /obj/structure/bed/chair{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -337,7 +337,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -414,7 +414,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -937,7 +937,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -1115,7 +1115,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -1166,7 +1166,7 @@ /turf/simulated/floor/tiled, /area/lavaland/central/base/common) "ws" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1326,7 +1326,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1375,7 +1375,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/lavaland/central/base/common) @@ -1495,7 +1495,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -1661,7 +1661,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -1757,7 +1757,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1872,7 +1872,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1999,7 +1999,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -2474,7 +2474,7 @@ /area/lavaland/central/base/common) "VY" = ( /obj/structure/closet/crate/bin, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, diff --git a/maps/sectors/lavaland_192/levels/lavaland_192.dmm b/maps/sectors/lavaland_192/levels/lavaland_192.dmm index 57e19c8eed5..69d379ab853 100644 --- a/maps/sectors/lavaland_192/levels/lavaland_192.dmm +++ b/maps/sectors/lavaland_192/levels/lavaland_192.dmm @@ -369,7 +369,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -543,7 +543,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -897,7 +897,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/lavaland/central/base/common) @@ -994,7 +994,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -1076,7 +1076,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -1142,7 +1142,7 @@ /area/lavaland/central/base/common) "uE" = ( /obj/structure/closet/crate/bin, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1321,7 +1321,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -1625,7 +1625,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1712,7 +1712,7 @@ /obj/structure/bed/chair{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -1823,7 +1823,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -1944,7 +1944,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -1978,7 +1978,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/lavaland/central/base/common) "Qs" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -2176,7 +2176,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(48) }, @@ -2202,7 +2202,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) @@ -2241,7 +2241,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(48) @@ -2520,7 +2520,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23; req_one_access = list(48) diff --git a/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm b/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm index 575fd067f8e..51b2d18cf85 100644 --- a/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm +++ b/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm @@ -4272,8 +4272,8 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/material/minihoe, /obj/item/material/minihoe, /obj/item/material/knife/machete/hatchet, diff --git a/maps/sectors/piratebase_192/levels/piratebase_192.dmm b/maps/sectors/piratebase_192/levels/piratebase_192.dmm index c3d2ecd16b2..d1e7c9e30dc 100644 --- a/maps/sectors/piratebase_192/levels/piratebase_192.dmm +++ b/maps/sectors/piratebase_192/levels/piratebase_192.dmm @@ -258,7 +258,7 @@ /turf/simulated/floor/tiled/steel_dirty, /area/piratebase/bunks) "cs" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(168) @@ -612,7 +612,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28; req_one_access = list(168) @@ -759,7 +759,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -864,7 +864,7 @@ /area/piratebase/mining) "ii" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -1096,7 +1096,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -1121,7 +1121,7 @@ /turf/simulated/floor/tiled/steel_dirty/silver, /area/piratebase/bunks) "kq" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -1239,7 +1239,7 @@ /area/space) "ly" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -1387,7 +1387,7 @@ icon_state = "4-8" }, /obj/effect/floor_decal/rust, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -1744,7 +1744,7 @@ /turf/simulated/floor/tiled/steel_dirty/silver, /area/piratebase/atmospherics) "pG" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -2199,7 +2199,7 @@ /turf/simulated/floor/tiled/steel_dirty/silver, /area/piratebase/halls) "tS" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -2228,7 +2228,7 @@ /turf/simulated/floor/wood, /area/piratebase/captain) "uC" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -2339,7 +2339,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -2580,7 +2580,7 @@ /area/piratebase/power) "yh" = ( /obj/effect/floor_decal/rust, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27; req_one_access = list(168) @@ -3038,7 +3038,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -3581,7 +3581,7 @@ /turf/simulated/floor, /area/shuttle/pirate/deck) "GF" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -3727,7 +3727,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28; req_one_access = list(168) @@ -3893,7 +3893,7 @@ /turf/simulated/floor/tiled/steel_dirty, /area/piratebase/bunks) "Ix" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -4109,7 +4109,7 @@ /turf/simulated/floor/plating, /area/piratebase/halls) "Lo" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -4410,7 +4410,7 @@ /area/piratebase/bunks) "NX" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -4816,7 +4816,7 @@ /area/piratebase/mining) "Rg" = ( /obj/effect/floor_decal/rust, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -5134,7 +5134,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) @@ -5214,7 +5214,7 @@ /area/piratebase/bunks) "Vn" = ( /obj/structure/bed/roller, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(168) }, @@ -5538,7 +5538,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/piratebase/atmospherics) @@ -5623,7 +5623,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -30; req_one_access = list(168) diff --git a/maps/sectors/tradeport_140/levels/tradeport_140.dmm b/maps/sectors/tradeport_140/levels/tradeport_140.dmm index 4314c25047d..f8cabc42e39 100644 --- a/maps/sectors/tradeport_140/levels/tradeport_140.dmm +++ b/maps/sectors/tradeport_140/levels/tradeport_140.dmm @@ -47,7 +47,7 @@ /turf/simulated/floor/reinforced, /area/tradeport/pads) "ah" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -521,7 +521,7 @@ /area/tradeport) "bZ" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -756,7 +756,7 @@ /area/tradeport) "cM" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -1139,7 +1139,7 @@ /area/tradeport/safarizoo) "ea" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -1776,7 +1776,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -1834,7 +1834,7 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -2178,7 +2178,7 @@ /turf/simulated/floor/tiled/old_cargo/red, /area/shuttle/trade_ship/general) "io" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -2187,7 +2187,7 @@ /turf/simulated/floor, /area/tradeport/pads) "iu" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -2404,7 +2404,7 @@ /turf/simulated/floor/wood, /area/tradeport/cyndishow) "jd" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -2485,7 +2485,7 @@ /obj/item/soap/deluxe, /obj/item/soap/deluxe, /obj/item/soap/deluxe, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -2665,7 +2665,7 @@ /turf/simulated/floor/plating, /area/tradeport) "jV" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -23; req_one_access = list(160) @@ -2713,7 +2713,7 @@ /obj/item/towel{ color = "#0000FF" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -2835,7 +2835,7 @@ /turf/simulated/floor/tiled/old_cargo/red, /area/shuttle/trade_ship/general) "kK" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -3013,7 +3013,7 @@ /turf/simulated/floor/tiled/hydro, /area/tradeport/cyndishow) "ls" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -3096,7 +3096,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -3411,7 +3411,7 @@ /turf/simulated/floor/tiled/neutral, /area/tradeport/commons) "mT" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -3419,7 +3419,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/cockpit) "mU" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -3884,7 +3884,7 @@ pixel_y = 8 }, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -3988,7 +3988,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/cockpit) "oN" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -4773,7 +4773,7 @@ /turf/simulated/floor/wood, /area/tradeport/commons) "rI" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -4787,7 +4787,7 @@ /obj/structure/mirror{ pixel_x = -29 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -5106,7 +5106,7 @@ req_access = list(160) }, /obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -5157,7 +5157,7 @@ /turf/simulated/shuttle/floor/white, /area/tradeport/commons) "ta" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -5408,7 +5408,7 @@ "tV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -5516,7 +5516,7 @@ /turf/simulated/floor/tiled/old_tile/white, /area/tradeport) "uu" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -5765,7 +5765,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -6315,7 +6315,7 @@ dir = 8; pixel_x = -25 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -6757,7 +6757,7 @@ /turf/simulated/floor/tiled/techmaint, /area/tradeport/engineering) "yx" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -7265,7 +7265,7 @@ /turf/simulated/floor/wood, /area/tradeport/commons) "Au" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -7484,7 +7484,7 @@ /area/tradeport/cyndishow) "BF" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -7805,7 +7805,7 @@ /turf/simulated/floor/tiled/old_tile/yellow, /area/tradeport/safari) "CQ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -7822,7 +7822,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -8209,7 +8209,7 @@ /turf/simulated/floor/tiled/old_tile/blue, /area/tradeport) "Ez" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -8453,7 +8453,7 @@ dir = 1 }, /obj/structure/table/bench/wooden, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -8598,7 +8598,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -8633,7 +8633,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/general) "Gs" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -8812,7 +8812,7 @@ /turf/simulated/floor/plating, /area/tradeport/atmospherics) "Hq" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -9015,7 +9015,7 @@ /turf/simulated/floor/wood, /area/tradeport/cyndi) "It" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -9298,7 +9298,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -9544,7 +9544,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -9747,7 +9747,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -10137,7 +10137,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -10419,7 +10419,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -10773,7 +10773,7 @@ /turf/simulated/floor/plating, /area/tradeport/expansion) "OP" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -11656,7 +11656,7 @@ /turf/simulated/floor/tiled/old_tile/yellow, /area/tradeport/safari) "Sk" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -11841,7 +11841,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -12137,7 +12137,7 @@ /turf/simulated/floor/tiled/hydro, /area/tradeport/cyndishow) "TX" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -12783,7 +12783,7 @@ /turf/simulated/floor/airless, /area/tradeport/expansion) "WA" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -12815,7 +12815,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -13396,7 +13396,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/tradeport/atmospherics) @@ -13454,7 +13454,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/tradeport/dock) "YW" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -13531,7 +13531,7 @@ /turf/simulated/floor/tiled/neutral, /area/tradeport) "Zl" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -13594,7 +13594,7 @@ /area/tradeport/cafeteria) "Zx" = ( /obj/structure/bed/chair, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, diff --git a/maps/sectors/tradeport_192/levels/tradeport_192.dmm b/maps/sectors/tradeport_192/levels/tradeport_192.dmm index d186eabb1e1..5a564e578e1 100644 --- a/maps/sectors/tradeport_192/levels/tradeport_192.dmm +++ b/maps/sectors/tradeport_192/levels/tradeport_192.dmm @@ -171,7 +171,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -766,7 +766,7 @@ /turf/simulated/floor/tiled/old_cargo/red, /area/shuttle/trade_ship/general) "cW" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -1025,7 +1025,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -1104,7 +1104,7 @@ /turf/simulated/floor/wood, /area/tradeport/safarizoo) "ej" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -1123,7 +1123,7 @@ /turf/simulated/floor/airless, /area/shuttle/trade_ship/general) "em" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -2026,7 +2026,7 @@ /turf/simulated/floor/tiled/steel, /area/tradeport) "hT" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -2495,7 +2495,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -2716,7 +2716,7 @@ /turf/simulated/floor/wood, /area/tradeport/cyndi) "kc" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -2881,7 +2881,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -2920,7 +2920,7 @@ /turf/simulated/floor/tiled/white, /area/tradeport/facility) "kS" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -3189,7 +3189,7 @@ /turf/simulated/floor, /area/tradeport/pads) "lM" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -23; req_one_access = list(160) @@ -3426,7 +3426,7 @@ /area/tradeport/cyndishow) "mK" = ( /obj/structure/table/woodentable, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -3515,7 +3515,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/tradeport/dock) "na" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -3654,7 +3654,7 @@ /obj/item/soap/deluxe, /obj/item/soap/deluxe, /obj/item/soap/deluxe, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -3704,7 +3704,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -3712,7 +3712,7 @@ /turf/simulated/floor/tiled/neutral, /area/tradeport/facility) "nV" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -4188,7 +4188,7 @@ /turf/simulated/floor/wood, /area/shuttle/trade_ship/general) "qd" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -4475,7 +4475,7 @@ /turf/simulated/floor/tiled/hydro, /area/tradeport/cyndishow) "re" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -4595,7 +4595,7 @@ /turf/simulated/floor/wmarble, /area/tradeport/cafeteria) "ry" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -4648,7 +4648,7 @@ dir = 8; pixel_x = -25 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -4786,7 +4786,7 @@ /area/tradeport/safarizoo) "sB" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -4882,7 +4882,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -5491,7 +5491,7 @@ /area/tradeport/dock) "vj" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -6223,7 +6223,7 @@ /turf/simulated/floor/plating, /area/tradeport/facility) "xD" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -6796,7 +6796,7 @@ /turf/simulated/floor/grass, /area/tradeport) "zM" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -7293,7 +7293,7 @@ /turf/simulated/floor/tiled/old_tile/purple, /area/tradeport) "BG" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -7304,7 +7304,7 @@ /turf/simulated/floor/tiled/old_cargo/red, /area/shuttle/trade_ship/general) "BH" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -7470,7 +7470,7 @@ /turf/simulated/floor/plating, /area/tradeport/cyndishow) "Ch" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -7488,7 +7488,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -7686,7 +7686,7 @@ /obj/item/towel{ color = "#0000FF" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -7694,7 +7694,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/cockpit) "Df" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -7777,7 +7777,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -7933,7 +7933,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -8360,7 +8360,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/tradeport/dock) "FA" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -8401,7 +8401,7 @@ dir = 1 }, /obj/structure/table/bench/wooden, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -8429,7 +8429,7 @@ /turf/simulated/shuttle/wall/voidcraft, /area/shuttle/trade_ship/general) "FQ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -8485,7 +8485,7 @@ /turf/simulated/floor/tiled/old_tile/red, /area/tradeport) "FY" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -8517,7 +8517,7 @@ /turf/simulated/floor/tiled/steel, /area/tradeport) "Gg" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 23; req_one_access = list(160) @@ -8638,7 +8638,7 @@ req_access = list(160) }, /obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -8712,7 +8712,7 @@ /area/tradeport/commons) "GP" = ( /obj/structure/bed/chair, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -10679,7 +10679,7 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -10911,7 +10911,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -10982,7 +10982,7 @@ /area/tradeport/commons) "Pv" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -11025,7 +11025,7 @@ "PC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -22; req_one_access = list(160) @@ -11156,7 +11156,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/tradeport/commons) "Qg" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 22; req_one_access = list(160) @@ -11296,7 +11296,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -11988,7 +11988,7 @@ /obj/structure/mirror{ pixel_x = -29 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -12717,7 +12717,7 @@ pixel_y = 8 }, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -12857,7 +12857,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/tradeport/cyndishow) "WT" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -13023,7 +13023,7 @@ /turf/simulated/floor/tiled/old_cargo/red, /area/shuttle/trade_ship/general) "XH" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 22; req_one_access = list(160) }, @@ -13438,7 +13438,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/tradeport/atmospherics) @@ -13452,7 +13452,7 @@ /turf/simulated/floor/tiled/old_tile/beige, /area/tradeport/safari) "Zb" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) @@ -13502,7 +13502,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -22; req_one_access = list(160) diff --git a/maps/sectors/virgo4_140/levels/virgo4_140_beach.dmm b/maps/sectors/virgo4_140/levels/virgo4_140_beach.dmm index 86619dafd99..82e50fff624 100644 --- a/maps/sectors/virgo4_140/levels/virgo4_140_beach.dmm +++ b/maps/sectors/virgo4_140/levels/virgo4_140_beach.dmm @@ -1317,8 +1317,8 @@ /obj/random/drinkbottle, /obj/structure/closet, /obj/item/reagent_containers/glass/bucket, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/reagent_containers/food/condiment/small/peppermill{ pixel_x = 3 }, diff --git a/maps/sectors/wasteland_140/levels/wasteland_140.dmm b/maps/sectors/wasteland_140/levels/wasteland_140.dmm index f84a0433312..878402424ba 100644 --- a/maps/sectors/wasteland_140/levels/wasteland_140.dmm +++ b/maps/sectors/wasteland_140/levels/wasteland_140.dmm @@ -673,7 +673,7 @@ /turf/simulated/floor/outdoors/classd, /area/class_d/explored) "tW" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28 }, @@ -1451,7 +1451,7 @@ /turf/simulated/mineral/classd, /area/class_d/wildcat_mining_base/exterior_power) "Pg" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 28 }, /obj/structure/bed{ @@ -1560,7 +1560,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 28 }, /obj/effect/floor_decal/rust, @@ -1655,7 +1655,7 @@ /turf/simulated/floor/classd, /area/class_d/wildcat_mining_base/exterior_power) "Wz" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 28 }, /obj/effect/floor_decal/corner_kafel/yellow/diagonal, diff --git a/maps/sectors/wasteland_192/levels/wasteland_192.dmm b/maps/sectors/wasteland_192/levels/wasteland_192.dmm index 0d3898be53d..07d51d5c410 100644 --- a/maps/sectors/wasteland_192/levels/wasteland_192.dmm +++ b/maps/sectors/wasteland_192/levels/wasteland_192.dmm @@ -183,7 +183,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 28 }, /obj/effect/floor_decal/rust, @@ -515,7 +515,7 @@ /turf/simulated/floor/tiled/classd/indoors, /area/class_d/wildcat_mining_base/interior/main_room) "rZ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 28 }, /obj/effect/floor_decal/corner_kafel/yellow/diagonal, @@ -950,7 +950,7 @@ /turf/simulated/floor/outdoors/classd, /area/class_d/wildcat_mining_base/exterior_power) "EF" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 28 }, /obj/structure/bed{ @@ -1353,7 +1353,7 @@ /turf/simulated/floor/tiled/classd/indoors, /area/class_d/wildcat_mining_base/interior/bathroom) "Ot" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28 }, diff --git a/maps/submaps/level_specific/debrisfield/clownship.dmm b/maps/submaps/level_specific/debrisfield/clownship.dmm index c5c44a72147..e8d09732a90 100644 --- a/maps/submaps/level_specific/debrisfield/clownship.dmm +++ b/maps/submaps/level_specific/debrisfield/clownship.dmm @@ -562,7 +562,7 @@ /turf/simulated/shuttle/floor/yellow/airless, /area/submap/debrisfiled_vr/clownshuttle/atmos) "BG" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28 }, @@ -685,7 +685,7 @@ /turf/simulated/floor/bluegrid, /area/submap/debrisfiled_vr/clownshuttle/engine) "HT" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -28 }, @@ -697,7 +697,7 @@ dir = 4; pixel_x = -29 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -28 }, @@ -830,7 +830,7 @@ /turf/simulated/shuttle/floor/yellow/airless, /area/submap/debrisfiled_vr/clownshuttle/bunk) "PL" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28 }, @@ -877,7 +877,7 @@ /turf/simulated/shuttle/floor/yellow/airless, /area/submap/debrisfiled_vr/clownshuttle/atmos) "RR" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 28 }, @@ -955,7 +955,7 @@ dir = 4; pixel_x = 29 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -28 }, diff --git a/maps/submaps/level_specific/debrisfield/ship_sci_overrun.dmm b/maps/submaps/level_specific/debrisfield/ship_sci_overrun.dmm index 49d0ef2c131..b0cea28f11b 100644 --- a/maps/submaps/level_specific/debrisfield/ship_sci_overrun.dmm +++ b/maps/submaps/level_specific/debrisfield/ship_sci_overrun.dmm @@ -69,8 +69,8 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /turf/simulated/floor/tiled/white/airless, /area/space/debrisfield/scioverrun) "aq" = ( diff --git a/maps/submaps/level_specific/debrisfield_vr/gecko_cr_wreck.dmm b/maps/submaps/level_specific/debrisfield_vr/gecko_cr_wreck.dmm index a5ff4db0118..3d919787d05 100644 --- a/maps/submaps/level_specific/debrisfield_vr/gecko_cr_wreck.dmm +++ b/maps/submaps/level_specific/debrisfield_vr/gecko_cr_wreck.dmm @@ -49,7 +49,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -78,7 +78,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/outline/grey, @@ -607,7 +607,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_cockpit_wreck) "lY" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/airless, @@ -1025,7 +1025,7 @@ }, /obj/structure/bed/pod, /obj/item/bedsheet/blue, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -1347,7 +1347,7 @@ /area/shuttle/gecko_cr_cockpit_wreck) "BN" = ( /obj/machinery/light/small, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -1789,7 +1789,7 @@ /area/shuttle/gecko_cr_cockpit_wreck) "JV" = ( /obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2259,7 +2259,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_cockpit_wreck) "Qu" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2518,7 +2518,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2737,7 +2737,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -2823,7 +2823,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/button/remote/blast_door{ diff --git a/maps/submaps/level_specific/debrisfield_vr/mackerel_lc_wreck.dmm b/maps/submaps/level_specific/debrisfield_vr/mackerel_lc_wreck.dmm index 2a4ec6b00b4..582d630398c 100644 --- a/maps/submaps/level_specific/debrisfield_vr/mackerel_lc_wreck.dmm +++ b/maps/submaps/level_specific/debrisfield_vr/mackerel_lc_wreck.dmm @@ -144,7 +144,7 @@ /area/shuttle/mackerel_lc_wreck) "mf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -499,7 +499,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -739,7 +739,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, diff --git a/maps/submaps/level_specific/debrisfield_vr/salamander_wreck.dmm b/maps/submaps/level_specific/debrisfield_vr/salamander_wreck.dmm index 11adcfbf71f..3c6eeb06da4 100644 --- a/maps/submaps/level_specific/debrisfield_vr/salamander_wreck.dmm +++ b/maps/submaps/level_specific/debrisfield_vr/salamander_wreck.dmm @@ -96,7 +96,7 @@ /area/shuttle/salamander_wreck) "bN" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light/flicker{ @@ -254,7 +254,7 @@ /turf/simulated/floor/airless, /area/shuttle/salamander_wreck_engineering) "eB" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -764,7 +764,7 @@ /obj/structure/handrail{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -1195,7 +1195,7 @@ "vi" = ( /obj/structure/table/steel, /obj/machinery/microwave, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1633,7 +1633,7 @@ "RO" = ( /obj/structure/bed/pod, /obj/item/bedsheet/blue, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1865,7 +1865,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light_switch{ diff --git a/maps/submaps/level_specific/debrisfield_vr/ship_sci_overrun.dmm b/maps/submaps/level_specific/debrisfield_vr/ship_sci_overrun.dmm index f12a5109d84..067fbbc185c 100644 --- a/maps/submaps/level_specific/debrisfield_vr/ship_sci_overrun.dmm +++ b/maps/submaps/level_specific/debrisfield_vr/ship_sci_overrun.dmm @@ -134,8 +134,8 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /turf/simulated/floor/tiled/white/airless, /area/submap/debrisfield_vr/sci_overrun) "aC" = ( diff --git a/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm b/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm index a5ed1f41e59..5744ec1e2d4 100644 --- a/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm +++ b/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm @@ -212,7 +212,7 @@ }, /area/submap/debrisfield_vr/tinyshuttle/bridge) "ay" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 24; req_one_access = list() @@ -658,7 +658,7 @@ /obj/effect/floor_decal/corner/brown{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -24 }, @@ -846,7 +846,7 @@ "bB" = ( /obj/structure/table/rack/steel, /obj/item/storage/toolbox/mechanical{ - starts_with = list(/obj/item/tool/screwdriver,/obj/item/tool/wrench,/obj/item/tool/crowbar,/obj/item/analyzer,/obj/item/tool/wirecutters) + starts_with = list(/obj/item/tool/screwdriver,/obj/item/tool/wrench,/obj/item/tool/crowbar,/obj/item/atmos_analyzer,/obj/item/tool/wirecutters) }, /obj/item/t_scanner, /obj/effect/floor_decal/corner/orange{ @@ -984,7 +984,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/submap/debrisfield_vr/tinyshuttle/engine) "bO" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 24; req_one_access = list() @@ -1126,7 +1126,7 @@ /obj/machinery/atmospherics/component/binary/pump/fuel{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -24 }, diff --git a/maps/submaps/level_specific/lavaland/botany.dmm b/maps/submaps/level_specific/lavaland/botany.dmm index 6ccb8abce77..69849e2911c 100644 --- a/maps/submaps/level_specific/lavaland/botany.dmm +++ b/maps/submaps/level_specific/lavaland/botany.dmm @@ -105,8 +105,8 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /turf/simulated/floor/tiled/lavaland, /area/lavaland/idleruins) "Y" = ( diff --git a/maps/submaps/level_specific/virgo2/DJOutpost1.dmm b/maps/submaps/level_specific/virgo2/DJOutpost1.dmm index 06ae1332c5c..07feb5696e1 100644 --- a/maps/submaps/level_specific/virgo2/DJOutpost1.dmm +++ b/maps/submaps/level_specific/virgo2/DJOutpost1.dmm @@ -236,7 +236,7 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/material/minihoe, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/random_multi/single_item/sfr_headset, /turf/simulated/floor/wood, /area/submap/virgo2/DJOutpost1) diff --git a/maps/submaps/wilderness/DJOutpost1.dmm b/maps/submaps/wilderness/DJOutpost1.dmm index c6f542f267b..3c149118572 100644 --- a/maps/submaps/wilderness/DJOutpost1.dmm +++ b/maps/submaps/wilderness/DJOutpost1.dmm @@ -244,7 +244,7 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/material/minihoe, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/random_multi/single_item/sfr_headset, /turf/simulated/floor/wood, /area/submap/DJOutpost1) diff --git a/maps/submaps/wilderness/DJOutpost3.dmm b/maps/submaps/wilderness/DJOutpost3.dmm index da7716f9dee..3eeb87f97df 100644 --- a/maps/submaps/wilderness/DJOutpost3.dmm +++ b/maps/submaps/wilderness/DJOutpost3.dmm @@ -242,7 +242,7 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/material/minihoe, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/random_multi/single_item/sfr_headset, /turf/simulated/floor/tiled/techfloor, /area/submap/DJOutpost1) diff --git a/maps/submaps/wilderness/DJOutpost4.dmm b/maps/submaps/wilderness/DJOutpost4.dmm index e1267cc72d0..5e7fd67a01f 100644 --- a/maps/submaps/wilderness/DJOutpost4.dmm +++ b/maps/submaps/wilderness/DJOutpost4.dmm @@ -290,7 +290,7 @@ /obj/item/material/knife/machete/hatchet, /obj/item/reagent_containers/glass/bucket, /obj/item/material/minihoe, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/random_multi/single_item/sfr_headset, /turf/simulated/floor/tiled/techfloor, /area/submap/DJOutpost1) diff --git a/maps/templates/admin/dhael_centcom.dmm b/maps/templates/admin/dhael_centcom.dmm index ae6823e2773..c8c33e00326 100644 --- a/maps/templates/admin/dhael_centcom.dmm +++ b/maps/templates/admin/dhael_centcom.dmm @@ -12415,7 +12415,7 @@ "NE" = ( /obj/structure/table/reinforced, /obj/item/material/minihoe, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, diff --git a/maps/templates/admin/ert.dmm b/maps/templates/admin/ert.dmm index 4b98d531e7c..2921ab899cb 100644 --- a/maps/templates/admin/ert.dmm +++ b/maps/templates/admin/ert.dmm @@ -96,7 +96,7 @@ /area/ship/ert/med_surg) "aD" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -889,7 +889,7 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -987,7 +987,7 @@ /turf/simulated/floor/tiled/techmaint, /area/ship/ert/dock_star) "iy" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -1320,7 +1320,7 @@ /turf/simulated/floor/tiled/techmaint, /area/ship/ert/dock_port) "lO" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -1337,7 +1337,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -1778,13 +1778,13 @@ /turf/simulated/wall/shull, /area/ship/ert/hangar) "oj" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techmaint, /area/ship/ert/hallways_aft) "ok" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -1909,7 +1909,7 @@ /obj/item/clothing/accessory/storage/white_vest, /obj/item/clothing/accessory/storage/white_vest, /obj/item/clothing/accessory/storage/white_vest, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2088,7 +2088,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2210,7 +2210,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/recharge_station, @@ -2247,7 +2247,7 @@ /area/ship/ert/eng_storage) "qQ" = ( /obj/machinery/mech_recharger, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2493,7 +2493,7 @@ /obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/accessory/storage/black_vest, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2999,7 +2999,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/outline/grey, @@ -3066,7 +3066,7 @@ /area/ship/ert/eng_storage) "xG" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light_switch{ @@ -3337,7 +3337,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -3506,7 +3506,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/ert/bridge) "AZ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -4534,7 +4534,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -4780,7 +4780,7 @@ "JZ" = ( /obj/structure/table/rack/steel, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -5732,7 +5732,7 @@ /turf/simulated/floor/plating, /area/ship/ert/eng_storage) "PG" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -5776,7 +5776,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/wood, @@ -5785,7 +5785,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techmaint, @@ -6149,7 +6149,7 @@ /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/hypospray, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/outline, @@ -6261,7 +6261,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/porta_turret/industrial/teleport_defense, @@ -6572,7 +6572,7 @@ /turf/simulated/wall/rshull, /area/ship/ert/eng_storage) "XH" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, diff --git a/maps/templates/admin/killhouse2.dmm b/maps/templates/admin/killhouse2.dmm index 56c63ecdebe..ea290e330dd 100644 --- a/maps/templates/admin/killhouse2.dmm +++ b/maps/templates/admin/killhouse2.dmm @@ -1609,7 +1609,7 @@ /obj/effect/floor_decal/corner/paleblue{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, @@ -1947,7 +1947,7 @@ dir = 10 }, /obj/structure/closet/secure_closet/medical2, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ desc = null; pixel_y = 24 }, diff --git a/maps/templates/admin/kk_mercship.dmm b/maps/templates/admin/kk_mercship.dmm index d97b3e90274..6493ee7fda4 100644 --- a/maps/templates/admin/kk_mercship.dmm +++ b/maps/templates/admin/kk_mercship.dmm @@ -62,7 +62,7 @@ name = "Merc APC - West"; pixel_x = -24 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -141,7 +141,7 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/plating, @@ -337,7 +337,7 @@ /obj/effect/floor_decal/techfloor{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -689,7 +689,7 @@ /obj/effect/floor_decal/techfloor{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -903,7 +903,7 @@ name = "Syndicate-Spawn" }, /obj/item/bedsheet/hos, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -2460,7 +2460,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2873,7 +2873,7 @@ /obj/structure/flora/pottedplant{ icon_state = "plant-10" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -3047,7 +3047,7 @@ /obj/effect/floor_decal/techfloor{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -3319,7 +3319,7 @@ /obj/effect/floor_decal/techfloor{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -3352,7 +3352,7 @@ /turf/simulated/wall/rshull, /area/ship/manta/radiator_star) "qH" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -3362,7 +3362,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/manta/hallways_aft) "qJ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -3770,7 +3770,7 @@ /turf/simulated/floor/tiled/white, /area/ship/manta/med) "th" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/techfloor{ @@ -3783,7 +3783,7 @@ /obj/effect/floor_decal/techfloor{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -4123,7 +4123,7 @@ /obj/effect/floor_decal/techfloor{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -4187,7 +4187,7 @@ /obj/effect/floor_decal/techfloor{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -5759,7 +5759,7 @@ /obj/effect/floor_decal/techfloor{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -5992,7 +5992,7 @@ /obj/effect/floor_decal/techfloor{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light{ @@ -6271,7 +6271,7 @@ /obj/structure/fuel_port{ pixel_y = -29 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -6336,7 +6336,7 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -7071,7 +7071,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -7154,7 +7154,7 @@ /area/ship/manta/bridge) "Kd" = ( /obj/structure/dogbed, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light{ @@ -7364,7 +7364,7 @@ /obj/effect/floor_decal/techfloor{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -7791,7 +7791,7 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -8074,7 +8074,7 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -8702,7 +8702,7 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 6 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/plating, @@ -8981,7 +8981,7 @@ name = "Syndicate-Spawn" }, /obj/item/bedsheet/hos, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -9140,7 +9140,7 @@ /obj/effect/floor_decal/techfloor{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -9426,7 +9426,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/structure/cable/orange{ diff --git a/maps/templates/shuttles/overmaps/generic/bearcat.dmm b/maps/templates/shuttles/overmaps/generic/bearcat.dmm index 499cb75fa20..b6a9dc9b655 100644 --- a/maps/templates/shuttles/overmaps/generic/bearcat.dmm +++ b/maps/templates/shuttles/overmaps/generic/bearcat.dmm @@ -58,7 +58,7 @@ /area/shuttle/bearcat/command) "ak" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -201,7 +201,7 @@ /obj/machinery/light_switch{ pixel_y = 25 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -224,7 +224,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -289,7 +289,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -677,7 +677,7 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/bearcat/dock_port) "bN" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -712,7 +712,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/bearcat/dock_central) "bV" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -848,7 +848,7 @@ /obj/structure/sink{ pixel_y = 18 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -867,7 +867,7 @@ /area/shuttle/bearcat/crew_corridors) "cp" = ( /obj/machinery/vending/snack, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -924,7 +924,7 @@ /area/shuttle/bearcat/crew_dorms) "cw" = ( /obj/structure/closet, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1368,7 +1368,7 @@ /area/shuttle/bearcat/crew_corridors) "dD" = ( /obj/effect/debris/cleanable/dirt, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -1477,7 +1477,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -1685,7 +1685,7 @@ "eq" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1835,7 +1835,7 @@ /obj/structure/handrail{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1999,7 +1999,7 @@ }, /obj/item/storage/toolbox/mechanical, /obj/item/clothing/head/welding, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/machinery/light_switch{ pixel_x = -25 }, @@ -2037,7 +2037,7 @@ /obj/item/clothing/shoes/magboots, /obj/item/clothing/suit/space/void/refurb/engineering, /obj/item/clothing/head/helmet/space/void/refurb/engineering, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -2132,7 +2132,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/bearcat/crew_wash) "fx" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light/small{ @@ -2166,7 +2166,7 @@ /obj/item/storage/box/lights/bulbs, /obj/item/storage/box/lights/mixed, /obj/structure/cable, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2419,7 +2419,7 @@ /obj/structure/handrail{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2443,7 +2443,7 @@ icon_state = "4-8" }, /obj/structure/closet/secure_closet/engineering_electrical, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light/small{ @@ -2467,7 +2467,7 @@ /area/shuttle/bearcat/maintenance_atmos) "gm" = ( /obj/machinery/atmospherics/portables_connector, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/outline/blue, @@ -2751,7 +2751,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2823,7 +2823,7 @@ icon_state = "1-4" }, /obj/machinery/power/apc/alarms_hidden/south_bump, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -3171,7 +3171,7 @@ /turf/simulated/floor/airless, /area/shuttle/bearcat/dock_port) "Ea" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -3225,7 +3225,7 @@ /turf/simulated/floor/plating, /area/shuttle/bearcat/maintenance_engine_pod_port) "Ik" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, diff --git a/maps/templates/shuttles/overmaps/generic/cruise_ship.dmm b/maps/templates/shuttles/overmaps/generic/cruise_ship.dmm index e66a6c2c4a9..b4c5cec30d8 100644 --- a/maps/templates/shuttles/overmaps/generic/cruise_ship.dmm +++ b/maps/templates/shuttles/overmaps/generic/cruise_ship.dmm @@ -78,7 +78,7 @@ /turf/simulated/floor/gold, /area/shuttle/cruise_ship) "kv" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27 }, diff --git a/maps/templates/shuttles/overmaps/generic/cruiser.dmm b/maps/templates/shuttles/overmaps/generic/cruiser.dmm index c0e5f073257..c63619fbec9 100644 --- a/maps/templates/shuttles/overmaps/generic/cruiser.dmm +++ b/maps/templates/shuttles/overmaps/generic/cruiser.dmm @@ -152,7 +152,7 @@ /turf/simulated/floor/carpet/blue, /area/mothership/breakroom) "as" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -590,7 +590,7 @@ /obj/item/reagent_containers/food/condiment/small/saltshaker{ pixel_x = -3 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -863,7 +863,7 @@ "ce" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -876,7 +876,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/mothership/hydroponics) "cf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -978,7 +978,7 @@ /obj/item/tank/oxygen, /obj/item/clothing/shoes/magboots, /obj/item/clothing/mask/breath, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/rack/shelf/steel, @@ -1023,7 +1023,7 @@ /obj/fiftyspawner/steel, /obj/fiftyspawner/steel, /obj/fiftyspawner/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel_grid, @@ -1532,7 +1532,7 @@ /turf/simulated/floor/tiled/white, /area/mothership/bathroom1) "du" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -1597,7 +1597,7 @@ /turf/simulated/floor/tiled/techmaint, /area/mothership/hallway) "dD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -1623,7 +1623,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/mothership/bathroom2) "dH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -1734,7 +1734,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -1928,7 +1928,7 @@ /obj/structure/bed/chair/office/dark{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -2071,7 +2071,7 @@ dir = 1 }, /obj/machinery/light/small, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -2109,7 +2109,7 @@ /obj/item/cell/device/weapon, /obj/item/cell/device/weapon, /obj/item/cell/device/weapon, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2160,7 +2160,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -2198,7 +2198,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -2222,7 +2222,7 @@ /area/mothership/surgery) "eW" = ( /obj/structure/medical_stand, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ @@ -2428,7 +2428,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/mothership/vault) "fx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22; target_temperature = 274.15 }, @@ -2480,7 +2480,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2684,7 +2684,7 @@ pixel_x = 6; pixel_y = -2 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2745,7 +2745,7 @@ /obj/item/tool/screwdriver, /obj/item/storage/box/pillbottles, /obj/item/storage/box/pillbottles, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -3389,7 +3389,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light/small{ @@ -3475,7 +3475,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light/small{ @@ -3685,7 +3685,7 @@ /turf/simulated/floor/tiled/white, /area/mothership/treatment) "is" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3784,7 +3784,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/mothership/processing) "iE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -3831,7 +3831,7 @@ /turf/simulated/floor/tiled/techfloor, /area/mothership/morgue) "iL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/steel_reinforced, @@ -3974,7 +3974,7 @@ /area/mothership/resleeving) "iZ" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -4049,7 +4049,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -4290,7 +4290,7 @@ /turf/simulated/floor/tiled/techfloor, /area/mothership/morgue) "jN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/steel_reinforced, @@ -4399,7 +4399,7 @@ /area/mothership/warden) "jV" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -4681,7 +4681,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -4883,7 +4883,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -4970,7 +4970,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6335,7 +6335,7 @@ /obj/structure/table/steel_reinforced, /obj/item/robotanalyzer, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6459,7 +6459,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/mothership/armory) "ob" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6538,7 +6538,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/mothership/bridge) "oj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6627,7 +6627,7 @@ /turf/simulated/floor/tiled/techmaint, /area/mothership/hallway) "ox" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -6813,7 +6813,7 @@ /area/mothership/robotics) "oQ" = ( /obj/machinery/mech_recharger, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6887,7 +6887,7 @@ /obj/structure/bed/chair/comfy/black{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -7319,7 +7319,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/mothership/telecomms2) "pW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -7463,7 +7463,7 @@ /turf/simulated/floor/tiled/techmaint, /area/mothership/telecomms2) "qr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -7613,7 +7613,7 @@ /area/mothership/cryotube) "qZ" = ( /obj/machinery/cryopod, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -7648,7 +7648,7 @@ /obj/structure/cable/cyan{ icon_state = "1-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -7902,26 +7902,23 @@ /turf/simulated/floor/tiled/steel_grid, /area/mothership/engineering) "rP" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 4; - filter_type = 0; - filtered_out = list("phoron") + filtering = "phoron" }, /turf/simulated/floor/tiled/steel_grid, /area/mothership/engineering) "rQ" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 4; - filter_type = 3; - filtered_out = list("carbon_dioxide") + filtering = "co2" }, /turf/simulated/floor/tiled/steel_grid, /area/mothership/engineering) "rR" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 4; - filter_type = 4; - filtered_out = list("sleeping_agent") + filtering = "n2o" }, /turf/simulated/floor/tiled/steel_grid, /area/mothership/engineering) @@ -8613,7 +8610,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -8661,7 +8658,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8985,7 +8982,7 @@ /turf/simulated/floor/tiled/techmaint, /area/mothership/hallway) "JJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -9042,7 +9039,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -9235,7 +9232,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/templates/shuttles/overmaps/generic/curashuttle.dmm b/maps/templates/shuttles/overmaps/generic/curashuttle.dmm index 0188933d185..4d9b5410c1f 100644 --- a/maps/templates/shuttles/overmaps/generic/curashuttle.dmm +++ b/maps/templates/shuttles/overmaps/generic/curashuttle.dmm @@ -599,7 +599,7 @@ /area/shuttle/curabitur/curashuttle/med) "bi" = ( /obj/machinery/suit_cycler/medical, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /obj/machinery/firealarm{ @@ -1274,7 +1274,7 @@ /area/shuttle/curabitur/curashuttle/hangar) "cB" = ( /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -32 }, diff --git a/maps/templates/shuttles/overmaps/generic/gecko_cr.dmm b/maps/templates/shuttles/overmaps/generic/gecko_cr.dmm index d29469ce5a4..64211b8cf16 100644 --- a/maps/templates/shuttles/overmaps/generic/gecko_cr.dmm +++ b/maps/templates/shuttles/overmaps/generic/gecko_cr.dmm @@ -47,7 +47,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -76,7 +76,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/outline/grey, @@ -599,7 +599,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light{ @@ -1014,7 +1014,7 @@ }, /obj/structure/bed/pod, /obj/item/bedsheet/blue, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light{ @@ -1398,7 +1398,7 @@ /area/shuttle/gecko_cr_cockpit) "BN" = ( /obj/machinery/light/small, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -1889,7 +1889,7 @@ /area/shuttle/gecko_cr_cockpit) "JV" = ( /obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2331,7 +2331,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_cockpit) "Qu" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2595,7 +2595,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2818,7 +2818,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -2896,7 +2896,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/button/remote/blast_door{ diff --git a/maps/templates/shuttles/overmaps/generic/gecko_sh.dmm b/maps/templates/shuttles/overmaps/generic/gecko_sh.dmm index d0aed684bb7..c00bb4618c1 100644 --- a/maps/templates/shuttles/overmaps/generic/gecko_sh.dmm +++ b/maps/templates/shuttles/overmaps/generic/gecko_sh.dmm @@ -19,7 +19,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh_cockpit) "aK" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -74,7 +74,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -94,7 +94,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/outline/grey, @@ -170,7 +170,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/techfloor, @@ -1344,7 +1344,7 @@ /area/shuttle/gecko_sh_engineering) "BN" = ( /obj/machinery/light/small, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -2133,7 +2133,7 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "Qu" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2529,7 +2529,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, diff --git a/maps/templates/shuttles/overmaps/generic/itglight.dmm b/maps/templates/shuttles/overmaps/generic/itglight.dmm index 872707ed77c..bd10dbd0c4e 100644 --- a/maps/templates/shuttles/overmaps/generic/itglight.dmm +++ b/maps/templates/shuttles/overmaps/generic/itglight.dmm @@ -20,7 +20,7 @@ /obj/structure/bed/chair/bay/chair/padded/red/bignest{ name = "large dog bed" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -1077,7 +1077,7 @@ "gX" = ( /obj/structure/bed/chair/sofa/brown/left, /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1149,7 +1149,7 @@ /obj/structure/bed/chair/bay/chair/padded/brown{ dir = 8 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1508,7 +1508,7 @@ /area/itglight/starboardhighsec) "jE" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -1810,8 +1810,8 @@ /obj/structure/closet, /obj/item/robot_parts/l_arm, /obj/item/reagent_containers/glass/bucket, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/reagent_containers/food/condiment/small/peppermill{ pixel_x = 3 }, @@ -1907,7 +1907,7 @@ /turf/simulated/floor/tiled/eris/steel/gray_platform, /area/itglight/starboardhighsec) "mL" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -2520,7 +2520,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -3133,7 +3133,7 @@ /turf/simulated/floor/tiled/eris/steel/gray_platform, /area/itglight/starboardhighsec) "wS" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -3590,7 +3590,7 @@ /turf/simulated/floor/airless, /area/itglight/portengi) "Aa" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/monotile, @@ -3645,7 +3645,7 @@ /obj/structure/cable/pink{ icon_state = "1-4" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -3784,7 +3784,7 @@ /obj/structure/cable/pink{ icon_state = "1-4" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -3901,7 +3901,7 @@ /obj/structure/cable/pink{ icon_state = "1-4" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -4208,7 +4208,7 @@ /turf/simulated/floor/airless, /area/itglight/shuttlebay) "Eg" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -26 }, @@ -4244,7 +4244,7 @@ /obj/structure/cable/pink{ icon_state = "1-4" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -4419,7 +4419,7 @@ "Fc" = ( /obj/machinery/atmospherics/portables_connector, /obj/effect/floor_decal/industrial/outline, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor, @@ -5432,7 +5432,7 @@ /turf/simulated/floor/tiled/eris/steel/brown_platform, /area/itglight/common) "Mh" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/carpet, @@ -5490,7 +5490,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/eris/steel/brown_platform, @@ -5931,7 +5931,7 @@ /turf/simulated/floor, /area/itglight/kitchen) "OX" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor, @@ -6015,7 +6015,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/eris/white/techfloor_grid, @@ -6035,7 +6035,7 @@ /obj/item/bedsheet/brown, /obj/structure/curtain/black, /obj/structure/bed/padded, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -6501,7 +6501,7 @@ dir = 1 }, /obj/item/radio, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -6572,7 +6572,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/white, @@ -6752,7 +6752,7 @@ /obj/random/soap, /obj/random/soap, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/white, @@ -7400,7 +7400,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/itglight/portengi) "Zm" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/eris/cafe, @@ -7482,7 +7482,7 @@ /turf/simulated/wall/shull, /area/itglight/portcargo) "ZO" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/structure/closet/crate/bin{ @@ -7519,7 +7519,7 @@ /obj/structure/cable/pink{ icon_state = "4-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /turf/simulated/floor/tiled/eris/steel/brown_platform, diff --git a/maps/templates/shuttles/overmaps/generic/mackerel_hc.dmm b/maps/templates/shuttles/overmaps/generic/mackerel_hc.dmm index d3e2d042ddb..0e989ae641d 100644 --- a/maps/templates/shuttles/overmaps/generic/mackerel_hc.dmm +++ b/maps/templates/shuttles/overmaps/generic/mackerel_hc.dmm @@ -101,7 +101,7 @@ "gU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -184,7 +184,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -383,7 +383,7 @@ /obj/structure/fuel_port{ pixel_y = 26 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, diff --git a/maps/templates/shuttles/overmaps/generic/mackerel_hc_skel.dmm b/maps/templates/shuttles/overmaps/generic/mackerel_hc_skel.dmm index 259545bf4b8..c7adc3dd5ee 100644 --- a/maps/templates/shuttles/overmaps/generic/mackerel_hc_skel.dmm +++ b/maps/templates/shuttles/overmaps/generic/mackerel_hc_skel.dmm @@ -152,7 +152,7 @@ "gU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -492,7 +492,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -956,7 +956,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, diff --git a/maps/templates/shuttles/overmaps/generic/mackerel_lc.dmm b/maps/templates/shuttles/overmaps/generic/mackerel_lc.dmm index 3000f53f779..a854ec53bc7 100644 --- a/maps/templates/shuttles/overmaps/generic/mackerel_lc.dmm +++ b/maps/templates/shuttles/overmaps/generic/mackerel_lc.dmm @@ -161,7 +161,7 @@ "mf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -454,7 +454,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -653,7 +653,7 @@ /obj/structure/fuel_port{ pixel_y = 26 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, diff --git a/maps/templates/shuttles/overmaps/generic/mackerel_sh.dmm b/maps/templates/shuttles/overmaps/generic/mackerel_sh.dmm index 065180e53bb..7211465bfe7 100644 --- a/maps/templates/shuttles/overmaps/generic/mackerel_sh.dmm +++ b/maps/templates/shuttles/overmaps/generic/mackerel_sh.dmm @@ -164,7 +164,7 @@ "mf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -477,7 +477,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -710,7 +710,7 @@ /obj/structure/fuel_port{ pixel_y = 26 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, diff --git a/maps/templates/shuttles/overmaps/generic/mercenarybase.dmm b/maps/templates/shuttles/overmaps/generic/mercenarybase.dmm index ebeb0a520db..182bc628b83 100644 --- a/maps/templates/shuttles/overmaps/generic/mercenarybase.dmm +++ b/maps/templates/shuttles/overmaps/generic/mercenarybase.dmm @@ -155,7 +155,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -314,7 +314,7 @@ /turf/simulated/floor, /area/mercbase/atmos) "fY" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -378,7 +378,7 @@ /area/mercbase/fuel) "gq" = ( /obj/machinery/computer/operating, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -450,7 +450,7 @@ /turf/simulated/floor, /area/mercbase/atmos) "gD" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -1145,7 +1145,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2041,7 +2041,7 @@ /turf/simulated/floor/tiled/dark, /area/mercbase/hall) "kG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2229,7 +2229,7 @@ /obj/structure/closet/secure_closet/chemical{ req_access = list(150) }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -2256,28 +2256,28 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, /turf/simulated/floor/tiled/dark, /area/mercbase/medical) "lE" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, /turf/simulated/floor/tiled/dark, /area/mercbase/engineering) "lF" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, /turf/simulated/floor/tiled/dark, /area/mercbase/hall) "lG" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2288,7 +2288,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2298,7 +2298,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 5 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2407,7 +2407,7 @@ /turf/simulated/floor/tiled/dark, /area/mercbase/eqroom) "lT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2672,7 +2672,7 @@ /turf/simulated/floor/tiled/dark, /area/mercbase/dock) "mQ" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -2874,7 +2874,7 @@ /turf/simulated/floor/tiled/dark, /area/mercbase/roid) "np" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 24 }, /turf/simulated/floor/tiled/dark, diff --git a/maps/templates/shuttles/overmaps/generic/mercship.dmm b/maps/templates/shuttles/overmaps/generic/mercship.dmm index 2ed8b2cb54b..3eddf80a15f 100644 --- a/maps/templates/shuttles/overmaps/generic/mercship.dmm +++ b/maps/templates/shuttles/overmaps/generic/mercship.dmm @@ -113,7 +113,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 8; pixel_x = 25; @@ -374,7 +374,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/dark, @@ -894,7 +894,7 @@ dir = 1 }, /obj/item/storage/secure/briefcase, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/dark, @@ -949,7 +949,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -1772,7 +1772,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -2306,7 +2306,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -2350,7 +2350,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -2609,7 +2609,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 8; pixel_x = 25; @@ -2898,7 +2898,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/white, @@ -3016,7 +3016,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/white, @@ -3082,7 +3082,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/dark, @@ -3094,7 +3094,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/dark, @@ -3122,7 +3122,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -3180,7 +3180,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -3201,7 +3201,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -3217,7 +3217,7 @@ dir = 5 }, /obj/effect/floor_decal/borderfloorblack, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -3673,7 +3673,7 @@ dir = 8 }, /obj/effect/floor_decal/borderfloorblack, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; diff --git a/maps/templates/shuttles/overmaps/generic/salamander.dmm b/maps/templates/shuttles/overmaps/generic/salamander.dmm index 6ddc3e3ea8b..66cbdf79bb2 100644 --- a/maps/templates/shuttles/overmaps/generic/salamander.dmm +++ b/maps/templates/shuttles/overmaps/generic/salamander.dmm @@ -97,7 +97,7 @@ /area/shuttle/salamander) "bN" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light{ @@ -242,7 +242,7 @@ /turf/simulated/floor/plating, /area/shuttle/salamander_engineering) "eB" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -738,7 +738,7 @@ /obj/structure/handrail{ dir = 1 }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -26 }, @@ -1189,7 +1189,7 @@ "vi" = ( /obj/structure/table/steel, /obj/machinery/microwave, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1618,7 +1618,7 @@ "RO" = ( /obj/structure/bed/pod, /obj/item/bedsheet/blue, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 26 }, @@ -1843,7 +1843,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ pixel_y = 26 }, /obj/machinery/light_switch{ diff --git a/maps/templates/shuttles/overmaps/generic/vespa.dmm b/maps/templates/shuttles/overmaps/generic/vespa.dmm index 10e9e26a5b5..f623b0edf13 100644 --- a/maps/templates/shuttles/overmaps/generic/vespa.dmm +++ b/maps/templates/shuttles/overmaps/generic/vespa.dmm @@ -83,7 +83,7 @@ /turf/simulated/floor, /area/ship/expe/engines) "ap" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -371,7 +371,7 @@ /turf/simulated/floor, /area/ship/expe/maintenancerim) "bl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -631,7 +631,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/northairlock) "bO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -767,7 +767,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/northairlock) "co" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -842,7 +842,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/hangarcontrol) "cy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -873,7 +873,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/maintenancerim) "cC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -894,7 +894,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin1) "cF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -915,7 +915,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin2) "cI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -935,7 +935,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin3) "cL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -955,7 +955,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin4) "cO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -976,7 +976,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin5) "cR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -997,7 +997,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin6) "cU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -1017,7 +1017,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin7) "cX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -1037,7 +1037,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/cabin8) "da" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -1117,7 +1117,7 @@ /turf/simulated/floor, /area/ship/expe/maintenance1) "dk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -2002,7 +2002,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/corridor4) "fB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -2057,7 +2057,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/corridor4) "fH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -2079,7 +2079,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/bridge) "fK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -3125,7 +3125,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -3222,7 +3222,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -3761,7 +3761,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/seceq) "iI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -3776,7 +3776,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/seceq) "iJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -3878,7 +3878,7 @@ /turf/simulated/floor/tiled/white, /area/ship/expe/medicalchem) "iR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -4039,7 +4039,7 @@ /area/ship/expe/medicaleq) "jg" = ( /obj/structure/table/reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -4766,7 +4766,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/engineeringpower) "kJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -5236,7 +5236,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/engineeringequipment) "lL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -5636,7 +5636,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -25 }, @@ -5934,7 +5934,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/engineeringpower) "mY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -25 }, @@ -6930,7 +6930,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/seclobby2) "oZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -7330,7 +7330,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/expedition) "pQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -7376,7 +7376,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/hangar) "pU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -7774,7 +7774,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/captqua) "qK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8218,7 +8218,7 @@ /turf/simulated/floor, /area/ship/expe/sm) "rQ" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ dir = 4 }, /obj/structure/cable{ @@ -8499,7 +8499,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/seclobby) "sw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8576,7 +8576,7 @@ /turf/simulated/floor/tiled/white, /area/ship/expe/medical) "sC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8654,7 +8654,7 @@ /turf/simulated/floor/tiled/white, /area/ship/expe/medicalsur) "sH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8698,7 +8698,7 @@ /turf/simulated/floor/tiled/white, /area/ship/expe/medical1) "sK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8921,7 +8921,7 @@ /turf/simulated/wall/rpshull, /area/ship/expe/seccells) "tz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -25 }, @@ -9126,7 +9126,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -10040,7 +10040,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -10494,7 +10494,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ship/expe/southairlock) "xI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -10544,7 +10544,7 @@ /turf/simulated/floor, /area/ship/expe/engines) "xZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, diff --git a/maps/tether/engines/rust.dmm b/maps/tether/engines/rust.dmm index e87d45b3afb..9bb00473cdb 100644 --- a/maps/tether/engines/rust.dmm +++ b/maps/tether/engines/rust.dmm @@ -228,7 +228,7 @@ /turf/simulated/floor, /area/engineering/engine_room) "aM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -275,7 +275,7 @@ "aT" = ( /obj/machinery/atmospherics/component/unary/vent_pump/high_volume{ pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced, /area/engineering/engine_room) @@ -318,7 +318,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/high_volume{ dir = 4; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced, /area/engineering/engine_room) @@ -330,7 +330,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/high_volume{ dir = 8; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced, /area/engineering/engine_room) @@ -1145,7 +1145,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1190,7 +1190,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, diff --git a/maps/tether/engines/singulo.dmm b/maps/tether/engines/singulo.dmm index 14f89739192..8bef8a935df 100644 --- a/maps/tether/engines/singulo.dmm +++ b/maps/tether/engines/singulo.dmm @@ -92,7 +92,7 @@ /turf/simulated/floor, /area/engineering/engine_gas) "aq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1033,7 +1033,7 @@ /turf/simulated/floor/tiled, /area/submap/pa_room) "bY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -1246,7 +1246,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, diff --git a/maps/tether/engines/sme.dmm b/maps/tether/engines/sme.dmm index bf0bc974cca..583b662350c 100644 --- a/maps/tether/engines/sme.dmm +++ b/maps/tether/engines/sme.dmm @@ -239,7 +239,7 @@ id_tag = "cooling_out"; initialize_directions = 4; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/nitrogen{ initial_gas_mix = "n2=82.1472;TEMP=293.15" @@ -634,7 +634,7 @@ /turf/simulated/floor, /area/engineering/engine_room) "bw" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ dir = 1; use_power = 0 }, @@ -916,7 +916,7 @@ /turf/simulated/floor, /area/engineering/engine_room) "cd" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 1; use_power = 0 }, @@ -1361,7 +1361,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1398,7 +1398,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, diff --git a/maps/tether/engines/tesla.dmm b/maps/tether/engines/tesla.dmm index 0a1e59e1cd1..7eaf0709753 100644 --- a/maps/tether/engines/tesla.dmm +++ b/maps/tether/engines/tesla.dmm @@ -92,7 +92,7 @@ /turf/simulated/floor, /area/engineering/engine_gas) "aq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1006,7 +1006,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/submap/pa_room) "bY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -1208,7 +1208,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, diff --git a/maps/tether/levels/midpoint.dmm b/maps/tether/levels/midpoint.dmm index 365fd586595..405d0466913 100644 --- a/maps/tether/levels/midpoint.dmm +++ b/maps/tether/levels/midpoint.dmm @@ -281,7 +281,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/midpoint) "yF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 26 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -370,7 +370,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 26 }, /turf/simulated/floor/plating, diff --git a/maps/tether/levels/mining.dmm b/maps/tether/levels/mining.dmm index 108c6176da8..90114f5a3dc 100644 --- a/maps/tether/levels/mining.dmm +++ b/maps/tether/levels/mining.dmm @@ -315,7 +315,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/washing_machine, @@ -451,7 +451,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -483,7 +483,7 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/secondary_gear_storage) "lC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_pump/on, @@ -493,7 +493,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/outpost/mining_main/drill_equipment) "lT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 1; pixel_y = -22 @@ -540,7 +540,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/mine/explored) "nn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 1; pixel_y = -22 @@ -1429,7 +1429,7 @@ name = "Large Waste Vent"; pressure_checks = 2; pressure_checks_default = 2; - use_power = 1 + on = 1 }, /turf/simulated/floor/virgo3b, /area/outpost/mining_main/maintenance) diff --git a/maps/tether/levels/station1.dmm b/maps/tether/levels/station1.dmm index 62afaadf25c..2dd53b83ddd 100644 --- a/maps/tether/levels/station1.dmm +++ b/maps/tether/levels/station1.dmm @@ -481,7 +481,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -543,7 +543,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/secondary) "bc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -744,7 +744,7 @@ /obj/fiftyspawner/glass, /obj/fiftyspawner/glass, /obj/fiftyspawner/glass, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1035,7 +1035,7 @@ /obj/item/camera_assembly, /obj/item/camera_assembly, /obj/item/camera_assembly, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1085,7 +1085,7 @@ "cd" = ( /obj/effect/floor_decal/techfloor, /obj/effect/floor_decal/techfloor/hole, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2319,7 +2319,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) "ev" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -2527,7 +2527,7 @@ /turf/simulated/floor/plating, /area/maintenance/station/eng_lower) "eO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -2578,7 +2578,7 @@ /turf/simulated/floor/plating, /area/engineering/gravity_lobby) "eS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -2985,7 +2985,7 @@ pixel_x = 28 }, /obj/structure/cable/green, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3072,7 +3072,7 @@ dir = 1; pixel_y = -24 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -3772,7 +3772,7 @@ /turf/simulated/floor, /area/engineering/engine_monitoring) "hs" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -4171,7 +4171,7 @@ /turf/simulated/floor/wood, /area/engineering/break_room) "ih" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -4585,7 +4585,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "jc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/landmark/spawnpoint/latejoin/station/cryogenics, @@ -4690,7 +4690,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -4829,7 +4829,7 @@ /obj/machinery/camera/network/engine{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -5303,7 +5303,7 @@ /turf/simulated/floor, /area/constructionsite) "kr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -5492,7 +5492,7 @@ /obj/landmark{ name = "lightsout" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -5649,7 +5649,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/sleep/engi_wash) "kZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6171,7 +6171,7 @@ dir = 9 }, /obj/structure/flora/pottedplant/subterranean, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -6302,7 +6302,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ai_upload) "mq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -6417,7 +6417,7 @@ /turf/simulated/floor, /area/constructionsite) "mA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6860,7 +6860,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/secondary) "ny" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -7256,7 +7256,7 @@ /obj/effect/floor_decal/techfloor{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -7590,7 +7590,7 @@ dir = 1 }, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -7658,7 +7658,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals_central6{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/vehicle_old/train/engine, @@ -8146,7 +8146,7 @@ id = "dist_aux_meter"; name = "Distribution Loop" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8738,7 +8738,7 @@ /turf/simulated/floor, /area/vacant/vacant_restaurant_lower) "ri" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -9184,7 +9184,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -9403,7 +9403,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9514,7 +9514,7 @@ /turf/simulated/floor/bluegrid, /area/ai_upload) "sL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -9726,7 +9726,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/engine_smes) "ti" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9823,7 +9823,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -9990,7 +9990,7 @@ "tP" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/yellow/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 1; pixel_y = -22 @@ -10069,7 +10069,7 @@ /obj/effect/floor_decal/techfloor{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -11244,7 +11244,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "wu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -11781,7 +11781,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12361,7 +12361,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -12934,7 +12934,7 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "zT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -13063,7 +13063,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13084,7 +13084,7 @@ pixel_y = -32 }, /obj/structure/cable/green, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13409,7 +13409,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13595,7 +13595,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "Bi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -13705,7 +13705,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -14086,7 +14086,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "Cf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -14283,7 +14283,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "Cx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -14465,7 +14465,7 @@ /area/hallway/station/atrium) "CS" = ( /obj/structure/closet/secure_closet/brig, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -14725,7 +14725,7 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "Dt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15122,7 +15122,7 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -16108,7 +16108,7 @@ dir = 4 }, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -16255,7 +16255,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -16320,7 +16320,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "Gt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -16588,7 +16588,7 @@ /turf/simulated/floor/plating, /area/hallway/station/docks) "GX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -16695,7 +16695,7 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "Hh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17080,7 +17080,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -17111,7 +17111,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/foyer) "Ic" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -17176,7 +17176,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/backup) "In" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -17634,7 +17634,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -17839,7 +17839,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -18016,7 +18016,7 @@ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/disposalpipe/junction{ @@ -18205,7 +18205,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -18376,7 +18376,7 @@ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ @@ -18407,7 +18407,7 @@ /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "KA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -18629,7 +18629,7 @@ icon_state = "0-8" }, /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -18854,7 +18854,7 @@ /turf/simulated/floor/plating, /area/security/checkpoint/science) "Lr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -19020,7 +19020,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "LM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19132,7 +19132,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 8; pixel_x = 25; @@ -19163,7 +19163,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -19335,7 +19335,7 @@ }, /obj/item/storage/box/glasses/square, /obj/effect/floor_decal/corner/white/diagonal, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -19742,7 +19742,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -19988,7 +19988,7 @@ /area/engineering/storage) "NR" = ( /obj/structure/table/reinforced, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -20691,7 +20691,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -21021,7 +21021,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on, /obj/structure/table/standard, /obj/random/soap, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -21410,7 +21410,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "QF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -22874,7 +22874,7 @@ /obj/structure/table/glass, /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -23019,7 +23019,7 @@ icon_state = "1-8" }, /obj/structure/table/rack/shelf, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 8; pixel_x = 25; @@ -23495,7 +23495,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "UI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/rack{ @@ -24439,7 +24439,7 @@ name = "AI Upload turret control"; pixel_y = 30 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -24753,7 +24753,7 @@ /turf/simulated/floor, /area/vacant/vacant_restaurant_lower) "Xo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -24779,14 +24779,14 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, /turf/simulated/floor, /area/maintenance/station/eng_lower) "Xt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -25503,7 +25503,7 @@ /turf/simulated/floor/wood, /area/bridge/meeting_room) "YO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25521,7 +25521,7 @@ /turf/simulated/floor/tiled/eris/dark/violetcorener, /area/shuttle/securiship/general) "YR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/flora/pottedplant, @@ -25532,7 +25532,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -25817,7 +25817,7 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -25902,7 +25902,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/secondary) "ZD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -26015,7 +26015,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -26106,7 +26106,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, diff --git a/maps/tether/levels/station2.dmm b/maps/tether/levels/station2.dmm index 509ff376115..aa5f57e19a4 100644 --- a/maps/tether/levels/station2.dmm +++ b/maps/tether/levels/station2.dmm @@ -330,7 +330,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -628,7 +628,7 @@ /turf/simulated/floor/plating, /area/quartermaster/belterdock/refinery) "bm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1425,7 +1425,7 @@ dir = 10 }, /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1555,7 +1555,7 @@ /turf/simulated/floor, /area/maintenance/station/cargo) "dh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -1975,7 +1975,7 @@ /obj/item/clothing/mask/breath, /obj/item/clothing/head/helmet/space/void/mining, /obj/item/mining_scanner, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/outline/yellow, @@ -1989,7 +1989,7 @@ /area/tether/exploration) "eg" = ( /obj/structure/closet/crate, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2294,7 +2294,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -2492,7 +2492,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -3721,7 +3721,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/excursion/general) "hK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/brown/border{ @@ -4248,7 +4248,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6109,7 +6109,7 @@ /area/maintenance/station/cargo) "ms" = ( /obj/machinery/computer/security/mining, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/wood, @@ -6533,7 +6533,7 @@ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -6985,7 +6985,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -7239,7 +7239,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/starboard) "oK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7293,7 +7293,7 @@ /obj/item/flash, /obj/item/flash, /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -7494,7 +7494,7 @@ /turf/simulated/floor/airless, /area/quartermaster/belterdock) "pj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -8123,7 +8123,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8458,7 +8458,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "rd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/portable_atmospherics/powered/scrubber, @@ -8496,7 +8496,7 @@ pixel_x = 13; pixel_y = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -8721,7 +8721,7 @@ /area/tether/station/visitorhallway/lounge) "rD" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/rust, @@ -8959,7 +8959,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -9258,7 +9258,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9367,7 +9367,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/starboard) "sQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -9622,7 +9622,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -9961,7 +9961,7 @@ /obj/effect/floor_decal/corner/yellow/bordercorner2{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -10420,7 +10420,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10597,7 +10597,7 @@ /turf/simulated/floor, /area/maintenance/station/eng_upper) "vk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -11325,7 +11325,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/starboard) "wy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -11382,7 +11382,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -11510,7 +11510,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -11872,7 +11872,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/storage) "xH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -12283,7 +12283,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/tether/exploration) "yx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -12310,7 +12310,7 @@ /turf/simulated/floor/tiled, /area/engineering/foyer_mezzenine) "yA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -12336,7 +12336,7 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/excursion/cargo) "yD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -12394,7 +12394,7 @@ /obj/effect/floor_decal/corner/yellow/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -12668,7 +12668,7 @@ /obj/vehicle_old/train/trolley{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12731,7 +12731,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "zu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12843,7 +12843,7 @@ /area/shuttle/mining_outpost/shuttle) "zG" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -12894,7 +12894,7 @@ dir = 10 }, /obj/structure/disposalpipe/junction/yjunction, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/catwalk, @@ -13021,7 +13021,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/exploration) "Ae" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -13277,7 +13277,7 @@ /area/tether/station/public_meeting_room) "AJ" = ( /obj/random/trash, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -13341,7 +13341,7 @@ "AO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13366,7 +13366,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -13437,7 +13437,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/bluegrid, @@ -13870,7 +13870,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "BN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14157,7 +14157,7 @@ /area/quartermaster/storage) "Cq" = ( /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -14230,8 +14230,8 @@ /obj/item/reagent_scanner, /obj/item/healthanalyzer, /obj/item/geiger_counter, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer, +/obj/item/plant_analyzer, +/obj/item/atmos_analyzer, /obj/item/t_scanner, /turf/simulated/floor/plating, /area/storage/tech) @@ -14510,7 +14510,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -14604,7 +14604,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -14621,7 +14621,7 @@ /turf/simulated/floor/wood, /area/hallway/station/port) "Dl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -15275,7 +15275,7 @@ /turf/simulated/floor/wood, /area/tether/station/burial) "EA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15435,7 +15435,7 @@ /turf/simulated/floor/plating, /area/shuttle/excursion/general) "EO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -15782,7 +15782,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "FA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15811,7 +15811,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "FE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -15979,7 +15979,7 @@ /turf/simulated/open, /area/tether/station/stairs_two) "Gc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16120,7 +16120,7 @@ /turf/simulated/floor/tiled, /area/hallway/station/port) "Gr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17059,7 +17059,7 @@ /turf/simulated/wall/r_wall, /area/engineering/foyer_mezzenine) "Io" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17335,7 +17335,7 @@ /area/tether/exploration) "IV" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -17842,7 +17842,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -18318,7 +18318,7 @@ /turf/simulated/wall/r_wall, /area/ai) "KV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -18866,7 +18866,7 @@ /turf/simulated/wall/r_wall, /area/tether/exploration/pathfinder_office) "LX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -18976,7 +18976,7 @@ /turf/simulated/floor, /area/maintenance/station/eng_upper) "Mj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/bed/chair/comfy/beige, @@ -19435,7 +19435,7 @@ /area/quartermaster/warehouse) "Nf" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -19461,7 +19461,7 @@ /turf/simulated/floor/plating, /area/quartermaster/foyer) "Nh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -19731,7 +19731,7 @@ /area/vacant/vacant_restaurant_upper) "NI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -19744,7 +19744,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/tether/station/visitorhallway/office) "NK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -20473,7 +20473,7 @@ /obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/tether, @@ -20587,7 +20587,7 @@ /area/hallway/station/port) "Pu" = ( /obj/structure/closet/coffin, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -20726,7 +20726,7 @@ /turf/simulated/floor/tiled/white, /area/maintenance/station/eng_upper) "PI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -20966,7 +20966,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -21440,7 +21440,7 @@ /turf/simulated/wall/r_wall, /area/maintenance/station/eng_upper) "Rh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -21492,7 +21492,7 @@ /obj/structure/bed/chair/office/light{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -22910,7 +22910,7 @@ dir = 1; icon_state = "pipe-c" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -23038,7 +23038,7 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "Ux" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -23069,7 +23069,7 @@ /turf/simulated/floor/plating, /area/quartermaster/storage) "UA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -23118,7 +23118,7 @@ /obj/structure/table/rack, /obj/item/suit_cooling_unit, /obj/item/suit_cooling_unit, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -23674,7 +23674,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -24694,7 +24694,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/carpet/bcarpet, @@ -24992,7 +24992,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "Yk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -25886,7 +25886,7 @@ dir = 1 }, /obj/machinery/mineral/equipment_vendor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/tether/levels/surface1.dmm b/maps/tether/levels/surface1.dmm index ea3f44db86e..c23ff1b172a 100644 --- a/maps/tether/levels/surface1.dmm +++ b/maps/tether/levels/surface1.dmm @@ -14,7 +14,7 @@ dir = 10 }, /obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor/corner{ @@ -164,7 +164,7 @@ /turf/simulated/floor, /area/rnd/outpost/storage) "aeO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -598,7 +598,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1153,9 +1153,8 @@ /turf/simulated/floor/plating, /area/maintenance/lower/research) "aDk" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ - filter_type = 0; - filtered_out = list("phoron") +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ + filtering = "phoron" }, /turf/simulated/floor, /area/rnd/outpost/atmos) @@ -1345,7 +1344,7 @@ /turf/simulated/floor/tiled, /area/rnd/testingroom) "aHI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 23 }, /obj/effect/floor_decal/borderfloor{ @@ -1521,7 +1520,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2023,7 +2022,7 @@ /turf/simulated/wall/r_wall, /area/storage/surface_eva) "baS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -2781,7 +2780,7 @@ "bxv" = ( /obj/machinery/space_heater, /obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -3079,7 +3078,7 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -3576,7 +3575,7 @@ "bTx" = ( /obj/structure/closet/l3closet/virology, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -4071,7 +4070,7 @@ /turf/simulated/floor/tiled, /area/rnd/hallway) "chk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -4373,7 +4372,7 @@ /obj/item/clothing/suit/space/void/medical/emt, /obj/item/clothing/mask/breath, /obj/item/clothing/head/helmet/space/void/medical/emt, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -24 }, @@ -4461,7 +4460,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/public_garden_maintenance) "crA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -4955,7 +4954,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/brig/bathroom) "cEo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -5492,7 +5491,7 @@ name = "plastic table frame" }, /obj/item/inflatable/door, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/carpet/gaycarpet, @@ -5581,7 +5580,7 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6404,7 +6403,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost) "dqG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -6755,9 +6754,8 @@ /turf/simulated/floor, /area/rnd/outpost/atmos) "dAQ" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ - filter_type = 3; - filtered_out = list("carbon_dioxide") +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ + filtering = "co2" }, /turf/simulated/floor, /area/rnd/outpost/atmos) @@ -7018,7 +7016,7 @@ /turf/simulated/floor/tiled/monofloor, /area/tether/surfacebase/surface_one_hall) "dGL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -7165,7 +7163,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -7941,7 +7939,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/processing) "ehl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7976,7 +7974,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/lowernorthhall) "eif" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8043,7 +8041,7 @@ name = "Powernet Sensor - Science Outpost Subgrid"; name_tag = "Science Outpost Subgrid" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -8157,7 +8155,7 @@ /obj/structure/toilet{ pixel_y = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -8234,7 +8232,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/solars) "epp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -8307,7 +8305,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/cargostore) "erH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -8430,7 +8428,7 @@ /area/tether/surfacebase/medical/lowerhall) "eyh" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/tiled, @@ -9144,7 +9142,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -9847,7 +9845,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/breakroom) "flN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9921,7 +9919,7 @@ name = "Powernet Sensor - SurfMed Subgrid"; name_tag = "SurfMed Subgrid" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -10153,7 +10151,7 @@ /area/rnd/outpost/mixing) "frp" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -10536,7 +10534,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/maintDorm2) "fDz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel_dirty, @@ -10690,7 +10688,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "fHk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/steeldecal/steel_decals5, @@ -10943,7 +10941,7 @@ /obj/structure/toilet{ pixel_y = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -11206,7 +11204,7 @@ /turf/simulated/floor/tiled/steel_dirty, /area/tether/surfacebase/cargostore/warehouse) "fTt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -11438,7 +11436,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/orange{ @@ -11686,9 +11684,8 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/atmos/gas_storage) "gfu" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter/m_filter{ - filter_type = 4; - filtered_out = list("nitrous_oxide") +/obj/machinery/atmospherics/component/trinary/filter/mirrored{ + filtering = "n2o" }, /turf/simulated/floor, /area/rnd/outpost/atmos) @@ -13011,7 +13008,7 @@ /turf/simulated/floor/reinforced, /area/rnd/testingroom) "gKr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/disposalpipe/segment{ @@ -13230,7 +13227,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/anomaly_lab) "gQm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -13756,7 +13753,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/outpost/anomaly_lab/analysis) "hiV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13795,7 +13792,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/outpost/mixing) "hli" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -13975,7 +13972,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/locker) "hox" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14176,7 +14173,7 @@ /turf/simulated/floor/tiled/steel_dirty, /area/rnd/outpost/storage) "hsl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15115,7 +15112,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15168,7 +15165,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15437,7 +15434,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_6) "hZG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15515,7 +15512,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15540,7 +15537,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) "idY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16525,7 +16522,7 @@ dir = 1 }, /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -16595,7 +16592,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -16769,7 +16766,7 @@ /turf/simulated/floor/tiled/techfloor/grid/virgo3b, /area/tether/surfacebase/outside/outside1) "iKA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17212,7 +17209,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -17573,7 +17570,7 @@ /area/tether/surfacebase/cargostore) "jfv" = ( /obj/structure/reagent_dispensers/watertank, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -17804,7 +17801,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/medical/paramed) "jpj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -18308,7 +18305,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos) "jEb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -18327,7 +18324,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -18684,7 +18681,7 @@ /area/tether/surfacebase/surface_one_hall) "jOR" = ( /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -19315,7 +19312,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -19530,7 +19527,7 @@ /obj/structure/toilet{ pixel_y = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -19707,7 +19704,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -19772,7 +19769,7 @@ dir = 1 }, /obj/structure/table/standard, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /obj/machinery/camera/network/research_outpost{ dir = 1 }, @@ -20200,7 +20197,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 23 }, /turf/simulated/floor/tiled, @@ -20231,7 +20228,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/xenoflora) "kHy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -20325,7 +20322,7 @@ external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; - use_power = 1 + on = 1 }, /obj/structure/sign/signnew/biohazard{ pixel_y = -32 @@ -20378,7 +20375,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -21076,7 +21073,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 8; pixel_x = 25; @@ -21741,7 +21738,7 @@ /obj/effect/floor_decal/rust, /obj/item/toy/bouquet/fake, /obj/item/reagent_containers/spray/waterflower, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/plating, @@ -21782,7 +21779,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lowerhall) "lwd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -21944,7 +21941,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -22350,7 +22347,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -22369,7 +22366,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -22388,7 +22385,7 @@ "lQN" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/purple/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -22775,7 +22772,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -22802,7 +22799,7 @@ /obj/item/radio/off, /obj/item/radio/off, /obj/item/radio/off, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -22980,7 +22977,7 @@ /area/medical/virology) "mga" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/rust, @@ -23100,7 +23097,7 @@ /turf/simulated/wall/r_wall, /area/crew_quarters/sleep/Dorm_5) "mkH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -23596,7 +23593,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -23667,7 +23664,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/outpost/testing_lab) "myk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -23773,7 +23770,7 @@ /area/crew_quarters/sleep/maintDorm2) "mAh" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -23792,7 +23789,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/item/towel/random, @@ -24077,7 +24074,7 @@ /obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -24227,7 +24224,7 @@ /obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -24324,7 +24321,7 @@ /area/tether/surfacebase/security/brig) "mMO" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -24601,7 +24598,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -24609,7 +24606,7 @@ /turf/simulated/floor/plating, /area/storage/surface_eva) "mVV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -24685,7 +24682,7 @@ dir = 1; icon_state = "pipe-c" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -24758,7 +24755,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/visitor_lodging) "mXX" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter{ +/obj/machinery/atmospherics/component/trinary/filter{ dir = 4; name = "High Power Gas filter"; power_rating = 15000; @@ -24869,7 +24866,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/brig) "ncq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -25307,7 +25304,7 @@ /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "noF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25684,7 +25681,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25739,7 +25736,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -26290,7 +26287,7 @@ /turf/simulated/mineral, /area/maintenance/lower/mining_eva) "nTk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/bench/steel, @@ -26607,7 +26604,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -26746,7 +26743,7 @@ /area/tether/surfacebase/medical/paramed) "ogn" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -26997,7 +26994,7 @@ /turf/simulated/wall, /area/tether/surfacebase/tunnel) "onO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -27029,7 +27026,7 @@ /obj/item/storage/excavation, /obj/item/stack/flag/yellow, /obj/item/pickaxe, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -27078,7 +27075,7 @@ /turf/simulated/floor/tiled, /area/rnd/hallway) "opX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -27186,7 +27183,7 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -27544,7 +27541,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/outpost/anomaly_lab/analysis) "oJD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/steel_dirty, @@ -28402,7 +28399,7 @@ /area/tether/surfacebase/tram) "pgm" = ( /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -29391,7 +29388,7 @@ /obj/effect/floor_decal/corner/brown{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -29620,7 +29617,7 @@ "pJV" = ( /obj/machinery/floodlight, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -30015,7 +30012,7 @@ /turf/simulated/floor/plating, /area/engineering/atmos/processing) "pXd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -30075,7 +30072,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/outpost/mixing) "pYi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -30142,7 +30139,7 @@ /obj/machinery/camera/network/research_outpost{ dir = 8 }, -/obj/item/analyzer, +/obj/item/atmos_analyzer, /turf/simulated/floor/tiled/white, /area/rnd/outpost/heating) "pZm" = ( @@ -30237,7 +30234,7 @@ /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "qbr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -30268,7 +30265,7 @@ /area/rnd/outpost/breakroom) "qcl" = ( /obj/structure/flora/ausbushes/ppflowers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/grass, @@ -30294,7 +30291,7 @@ /turf/simulated/floor/plating, /area/rnd/testingroom) "qdD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/disposal, @@ -30566,7 +30563,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/solars) "qnT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -30719,7 +30716,7 @@ dir = 6 }, /obj/structure/closet/crate, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -31308,7 +31305,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -31763,7 +31760,7 @@ /area/rnd/outpost/atmos) "qQU" = ( /obj/machinery/sleep_console, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -31849,7 +31846,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -31984,7 +31981,7 @@ dir = 8 }, /obj/machinery/meter, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -32669,7 +32666,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/tunnel) "rqv" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -32699,7 +32696,7 @@ /area/rnd/outpost/heating) "rrJ" = ( /obj/machinery/atmospherics/portables_connector, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -32734,7 +32731,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -33147,7 +33144,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -33620,7 +33617,7 @@ "rPZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -33770,7 +33767,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -34055,7 +34052,7 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/lowernortheva) "sbh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -34527,7 +34524,7 @@ /turf/simulated/floor/tiled, /area/hallway/lower/first_west) "snl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -34559,7 +34556,7 @@ /obj/structure/cable/orange{ icon_state = "2-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -35150,7 +35147,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/cargostore) "sDy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -35333,7 +35330,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/catwalk, @@ -36010,7 +36007,7 @@ /area/rnd/outpost/atmos) "taQ" = ( /obj/machinery/computer/centrifuge, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorwhite{ @@ -36292,7 +36289,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -36410,14 +36407,14 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/lowerhall) "tro" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/purple{ @@ -36564,7 +36561,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos) "tyg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -36791,7 +36788,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -36851,7 +36848,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -36927,7 +36924,7 @@ dir = 1 }, /obj/effect/floor_decal/borderfloor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -37155,7 +37152,7 @@ /area/engineering/atmos) "tNz" = ( /obj/effect/floor_decal/industrial/warning/dust, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -37356,7 +37353,7 @@ /obj/structure/toilet{ pixel_y = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -37392,7 +37389,7 @@ /area/tether/surfacebase/security/brig/storage) "tUh" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -37951,7 +37948,7 @@ /obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -38289,7 +38286,7 @@ on = 1 }, /obj/item/reagent_containers/glass/rag, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -38485,7 +38482,7 @@ /turf/simulated/floor/tiled, /area/rnd/testingroom) "uzB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -40024,7 +40021,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/cargostore) "vrp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -40260,7 +40257,7 @@ /area/crew_quarters/visitor_laundry) "vze" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -40531,7 +40528,7 @@ /turf/simulated/floor/virgo3b, /area/tether/outpost/solars_outside) "vFA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/power/apc{ @@ -40939,7 +40936,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/atmos) "vMM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -41218,7 +41215,7 @@ /area/rnd/hallway) "vSR" = ( /obj/structure/bed/chair/bar_stool, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/carpet/bcarpet, @@ -41392,7 +41389,7 @@ /obj/structure/bed/chair{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -41493,7 +41490,7 @@ dir = 10 }, /obj/machinery/floodlight, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -41693,7 +41690,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/visitor_laundry) "wgp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -41746,7 +41743,7 @@ }, /obj/structure/table/steel, /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -42052,7 +42049,7 @@ /obj/effect/floor_decal/corner/grey/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -42090,7 +42087,7 @@ icon_state = "2-4" }, /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/power/apc{ @@ -42216,7 +42213,7 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/lightgrey/border{ @@ -42768,7 +42765,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/lowernortheva) "wJB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light/small{ @@ -42789,7 +42786,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -43291,7 +43288,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/outside/outside1) "wXy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -43356,7 +43353,7 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -43683,7 +43680,7 @@ pixel_x = 6; pixel_y = 26 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -43694,7 +43691,7 @@ /area/rnd/outpost/anomaly_lab) "xjo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -43983,7 +43980,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -44607,7 +44604,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -44619,14 +44616,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/anomaly_lab/analysis) "xIN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -44642,7 +44639,7 @@ /area/tether/outpost/solars_outside) "xJe" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -44801,7 +44798,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -45054,14 +45051,14 @@ /obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "ybG" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable{ diff --git a/maps/tether/levels/surface2.dmm b/maps/tether/levels/surface2.dmm index 3ae93d8afa7..90282845e92 100644 --- a/maps/tether/levels/surface2.dmm +++ b/maps/tether/levels/surface2.dmm @@ -722,7 +722,7 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/machinery/recharge_station, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -916,7 +916,7 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/east_stairs_two) "aGG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -1016,7 +1016,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1525,7 +1525,7 @@ /area/maintenance/lower/south) "beP" = ( /obj/effect/floor_decal/rust, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1918,7 +1918,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/armory) "brO" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "slime_pens"; dir = 8; pixel_x = 22 @@ -1995,7 +1995,7 @@ /turf/simulated/floor/wood, /area/maintenance/lower/atmos) "btW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2616,7 +2616,7 @@ /area/maintenance/lower/north) "bTU" = ( /obj/structure/table/glass, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -3644,7 +3644,7 @@ /obj/item/stock_parts/subspace/ansible, /obj/item/stock_parts/subspace/ansible, /obj/item/stock_parts/subspace/ansible, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -3843,7 +3843,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -4596,7 +4596,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -4705,7 +4705,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -5316,7 +5316,7 @@ dir = 4 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -5564,7 +5564,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/evidence) "dZg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -5646,7 +5646,7 @@ /turf/simulated/floor/water/deep/indoors, /area/tether/surfacebase/fish_farm) "edL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6030,7 +6030,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -6301,7 +6301,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -6818,7 +6818,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_two_hall) "eRG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -6931,7 +6931,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/breakroom) "eWF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -7635,7 +7635,7 @@ /area/maintenance/lower/south) "fyD" = ( /obj/structure/lattice, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/open, @@ -7665,10 +7665,10 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -8843,7 +8843,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/centralhall) "glB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -8920,7 +8920,7 @@ dir = 1 }, /obj/structure/closet/secure_closet/atmos_personal, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -9436,7 +9436,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/atmos) "gBv" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -9560,7 +9560,7 @@ /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ scrub_id = "xeno_phoron_pen_scrubbers" }, -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "slime_pens"; dir = 1; pixel_y = -22 @@ -9980,7 +9980,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -10028,7 +10028,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ @@ -10269,7 +10269,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -11009,7 +11009,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/evastorage) "hLa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -11373,7 +11373,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "hVr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/railing, @@ -11756,7 +11756,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/bridge_hallway) "imW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -12251,7 +12251,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -12332,7 +12332,7 @@ pixel_y = -8; req_access = list(55) }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -12372,7 +12372,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -12594,7 +12594,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12608,7 +12608,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/old_tram) "iKR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12939,7 +12939,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_x = 3; pixel_y = -28 @@ -12971,7 +12971,7 @@ /obj/effect/floor_decal/corner/yellow/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13001,7 +13001,7 @@ /obj/structure/sign/nosmoking_1{ pixel_x = -32 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 28 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ @@ -13154,7 +13154,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -13391,7 +13391,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/centralhall) "joP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -13460,7 +13460,7 @@ dir = 8 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -13658,7 +13658,7 @@ dir = 4 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -13728,7 +13728,7 @@ /area/maintenance/lower/atmos) "jAo" = ( /obj/structure/table/glass, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -13763,7 +13763,7 @@ "jAL" = ( /obj/effect/floor_decal/techfloor, /obj/effect/floor_decal/techfloor/hole/right, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -14694,7 +14694,7 @@ dir = 1 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techmaint, @@ -14867,7 +14867,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/rnd) "kvB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -14925,7 +14925,7 @@ /obj/effect/floor_decal/corner/purple{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -15452,14 +15452,14 @@ /area/maintenance/lower/atmos) "kTQ" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, /turf/simulated/open, /area/engineering/atmos) "kUc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -15656,7 +15656,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15694,7 +15694,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/atmos) "lbj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -15716,7 +15716,7 @@ /area/tether/surfacebase/medical/centralhall) "lbl" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -15805,7 +15805,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor, @@ -15886,7 +15886,7 @@ /obj/item/stack/cable_coil/pink, /obj/item/stack/cable_coil/pink, /obj/item/stack/cable_coil/pink, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16011,7 +16011,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16093,7 +16093,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -16138,7 +16138,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16166,7 +16166,7 @@ /turf/simulated/floor/plating, /area/tether/surfacebase/reading_room) "lxt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -16405,7 +16405,7 @@ /turf/simulated/floor/plating, /area/tether/surfacebase/emergency_storage/atmos) "lGe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16434,7 +16434,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -16459,7 +16459,7 @@ /turf/simulated/floor/tiled, /area/rnd/rdoffice) "lHZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/catwalk, @@ -16594,7 +16594,7 @@ /turf/simulated/floor/tiled/dark, /area/maintenance/lower/south) "lOh" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "slime_pens"; dir = 4; pixel_x = -22 @@ -17027,7 +17027,7 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/atmos) "meI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -17393,7 +17393,7 @@ dir = 8; layer = 2.6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -17442,7 +17442,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ breach_detection = 0; dir = 1; pixel_y = -22 @@ -17474,7 +17474,7 @@ pixel_x = -25; req_access = list(55) }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -35 }, @@ -17603,7 +17603,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -17623,7 +17623,7 @@ name = "Station Intercom (General)"; pixel_y = 21 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /obj/machinery/computer/security/xenobio, @@ -17996,7 +17996,7 @@ /obj/structure/closet{ name = "Evidence Closet" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -18136,7 +18136,7 @@ /obj/machinery/vending/wallmed1{ pixel_x = 30 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/standard, @@ -18369,7 +18369,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -18495,7 +18495,7 @@ /turf/simulated/floor/carpet, /area/tether/surfacebase/medical/cmo) "nfc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/disposalpipe/segment{ @@ -18590,7 +18590,7 @@ /obj/effect/floor_decal/corner/paleblue/bordercorner2{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -18799,7 +18799,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on, /obj/structure/table/standard, /obj/random/soap, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -18861,7 +18861,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techmaint, @@ -19039,7 +19039,7 @@ /turf/simulated/floor/wood, /area/rnd/breakroom) "nvq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -19155,7 +19155,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -19701,7 +19701,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/middlehall) "nWU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -19968,7 +19968,7 @@ /turf/simulated/floor/tiled, /area/engineering/lower/atmos_lockers) "ofl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -20330,7 +20330,7 @@ icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -20909,7 +20909,7 @@ "oRe" = ( /obj/effect/floor_decal/industrial/outline, /obj/structure/closet/wardrobe/robotics_black, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -21050,7 +21050,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -21276,7 +21276,7 @@ "pel" = ( /obj/machinery/washing_machine, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -21484,7 +21484,7 @@ }, /area/tcommsat/chamber) "poo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 28 }, @@ -21661,7 +21661,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -21785,7 +21785,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/bathroom) "pzC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -22413,7 +22413,7 @@ /turf/simulated/floor/tiled/techfloor, /area/chapel/main) "pXi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -22805,7 +22805,7 @@ /area/janitor) "qmG" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -22978,7 +22978,7 @@ /area/maintenance/asmaint2) "qsf" = ( /obj/structure/railing, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -23010,7 +23010,7 @@ /turf/simulated/floor/reinforced, /area/rnd/outpost/xenobiology/outpost_slimepens) "qtq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -23050,7 +23050,7 @@ /area/tether/surfacebase/medical/centralstairwell) "qut" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -23268,7 +23268,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_two) "qDL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner_techfloor_grid{ @@ -23342,7 +23342,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos) "qFQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -23428,7 +23428,7 @@ /area/maintenance/lower/atmos) "qLl" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -23439,7 +23439,7 @@ dir = 4 }, /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -23551,7 +23551,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/security/detective) "qNZ" = ( -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /turf/simulated/mineral/floor/virgo3b, /area/tether/surfacebase/outside/outside2) "qOo" = ( @@ -23562,7 +23562,7 @@ /turf/simulated/open, /area/tether/surfacebase/surface_two_hall) "qOy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -23616,7 +23616,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/middlehall) "qQc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -23643,7 +23643,7 @@ pixel_x = -1; pixel_y = -2 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorblack{ @@ -24113,7 +24113,7 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/surface_two_hall) "rkP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -24958,10 +24958,10 @@ "rUA" = ( /obj/machinery/atmospherics/component/unary/vent_pump{ icon_state = "map_vent_out"; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ - initial_gas_mix = "nitrogen=500;TEMP=80"; + initial_gas_mix = "n2=500;TEMP=80"; name = "Server Base" }, /area/server) @@ -25220,7 +25220,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/middlehall) "seT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -25368,7 +25368,7 @@ dir = 1 }, /obj/effect/floor_decal/rust/steel_decals_rusted2, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/railing, @@ -25727,7 +25727,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/old_tram) "sss" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25806,7 +25806,7 @@ /area/maintenance/lower/north) "sve" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -26067,7 +26067,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/north) "sCG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -26076,7 +26076,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/bar) "sCV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -26894,7 +26894,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/steeldecal/steel_decals4, @@ -27377,7 +27377,7 @@ /obj/effect/floor_decal/corner_techfloor_grid/full{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -27416,7 +27416,7 @@ /turf/simulated/floor/plating, /area/maintenance/commandmaint) "tJL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/carpet, @@ -27896,7 +27896,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/atmos) "uhO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -28 }, @@ -28178,7 +28178,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/atmos) "uva" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/item/bananapeel, @@ -28403,7 +28403,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -28667,7 +28667,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/centralhall) "uGH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -28805,7 +28805,7 @@ "uOu" = ( /obj/structure/catwalk, /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -29282,7 +29282,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -29426,7 +29426,7 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -29596,7 +29596,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/south) "vpQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -29754,7 +29754,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/mining) "vuJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -29933,7 +29933,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/centralhall) "vCg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -30077,7 +30077,7 @@ /obj/effect/floor_decal/corner/paleblue/bordercorner2{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -30165,7 +30165,7 @@ /obj/structure/table/standard, /obj/item/hand_tele, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -30600,7 +30600,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on, /obj/structure/table/standard, /obj/random/soap, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -30716,7 +30716,7 @@ /turf/simulated/floor/plating, /area/maintenance/lower/public_garden_maintenance/upper) "whe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -30989,7 +30989,7 @@ /turf/simulated/floor/tiled, /area/janitor) "wtE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -31080,7 +31080,7 @@ "wvN" = ( /obj/structure/table/steel, /obj/random/medical/lite, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -32115,7 +32115,7 @@ /obj/effect/floor_decal/corner/yellow/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -32324,7 +32324,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining) "xpn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -32775,7 +32775,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/security/detective) "xHt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -32952,7 +32952,7 @@ }, /area/tcommsat/chamber) "xMO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -33387,7 +33387,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/monitoring) "yaX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -33470,7 +33470,7 @@ /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/open, @@ -33592,7 +33592,7 @@ /area/tether/surfacebase/north_stairs_two) "yjH" = ( /obj/structure/table/glass, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, diff --git a/maps/tether/levels/surface3.dmm b/maps/tether/levels/surface3.dmm index 0e30b3a38bb..2dba3b7fdbe 100644 --- a/maps/tether/levels/surface3.dmm +++ b/maps/tether/levels/surface3.dmm @@ -882,7 +882,7 @@ /area/tether/surfacebase/security/iaa) "atO" = ( /mob/living/simple_mob/animal/passive/cow, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1299,7 +1299,7 @@ /turf/simulated/floor/grass, /area/hydroponics) "aFp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -1657,7 +1657,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1930,7 +1930,7 @@ req_access = list(); req_one_access = list(5) }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /obj/effect/floor_decal/corner/paleblue{ @@ -2644,7 +2644,7 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_hallway) "bpU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3308,7 +3308,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "bFm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 28 }, /obj/machinery/atmospherics/component/unary/vent_pump/on, @@ -3724,7 +3724,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -4646,8 +4646,8 @@ /obj/structure/table/woodentable, /obj/item/material/minihoe, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 8 }, @@ -4902,7 +4902,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/tourbus/general) "czU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22; target_temperature = 312.15 @@ -5027,7 +5027,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lobby) "cCP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -5141,7 +5141,7 @@ "cFC" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -5222,7 +5222,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/chemistry) "cKh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -5485,7 +5485,7 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) "cVM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/effect/floor_decal/borderfloorblack{ @@ -6129,7 +6129,7 @@ /turf/simulated/floor/tiled, /area/rnd/research) "dqC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -6218,7 +6218,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -6293,7 +6293,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/briefingroom) "dwk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7034,7 +7034,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "dRa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -8075,7 +8075,7 @@ }, /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -8326,7 +8326,7 @@ /area/crew_quarters/bar) "eEd" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8599,7 +8599,7 @@ /turf/simulated/open/virgo3b, /area/tether/surfacebase/outside/outside3) "eMd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25; target_temperature = 270 @@ -8607,7 +8607,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/uppersouthstairwell) "eMD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -8649,7 +8649,7 @@ /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "eNU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -8843,7 +8843,7 @@ /obj/effect/floor_decal/industrial/danger{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -9761,7 +9761,7 @@ /obj/structure/bed/chair/wood{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9804,7 +9804,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -9877,7 +9877,7 @@ /obj/structure/bed/chair/bay/chair{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -10099,7 +10099,7 @@ /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/drinkbottle, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -11087,7 +11087,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "gjP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -11123,7 +11123,7 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/security/hos) "glf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -11164,7 +11164,7 @@ /obj/item/folder/red, /obj/item/folder/blue, /obj/item/pen, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -11484,14 +11484,14 @@ pixel_y = -24 }, /obj/structure/cable/orange, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/topairlock) "gvI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -11592,7 +11592,7 @@ /turf/simulated/floor/tiled, /area/rnd/staircase/thirdfloor) "gxn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/woodentable, @@ -11613,8 +11613,8 @@ /obj/effect/floor_decal/corner/lime/full{ dir = 1 }, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/material/minihoe, /obj/item/material/minihoe, /turf/simulated/floor/tiled, @@ -12277,7 +12277,7 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/surface_three_hall) "gUM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -13018,7 +13018,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/chemistry) "htH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -13456,7 +13456,7 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -13495,7 +13495,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/research/testingrange) "hLT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -13627,7 +13627,7 @@ /turf/simulated/floor/tiled/techmaint, /area/crew_quarters/barrestroom) "hPW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -28 }, @@ -13714,7 +13714,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13868,7 +13868,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13891,7 +13891,7 @@ /obj/effect/floor_decal/borderfloorwhite{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 28 }, /obj/effect/floor_decal/corner/orange/border{ @@ -14206,7 +14206,7 @@ /obj/effect/floor_decal/corner/mauve/bordercorner2{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14402,7 +14402,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -14552,7 +14552,7 @@ dir = 4 }, /obj/structure/closet/firecloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -14798,7 +14798,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/upperhall) "iwu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/tiled, @@ -14815,7 +14815,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -14971,7 +14971,7 @@ dir = 1 }, /obj/machinery/light, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15141,7 +15141,7 @@ /area/tether/surfacebase/surface_three_hall) "iHG" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15172,7 +15172,7 @@ pixel_y = 4 }, /obj/item/storage/box/masks, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15983,7 +15983,7 @@ pixel_y = 26 }, /obj/machinery/vending/loadout/accessory, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -16030,7 +16030,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -17145,7 +17145,7 @@ icon_state = "1-2" }, /obj/effect/floor_decal/steeldecal/steel_decals6, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -17857,7 +17857,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -18009,7 +18009,7 @@ /area/tether/surfacebase/security/hos) "kqq" = ( /obj/structure/kitchenspike, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -18408,7 +18408,7 @@ /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/tether/surfacebase/outside/outside3) "kFH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet, @@ -18916,7 +18916,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_main) "kZj" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -19263,7 +19263,7 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/security/hos) "liW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -19368,7 +19368,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/panic_shelter) "lmG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/grass, @@ -20436,7 +20436,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_three) "lUD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -20554,7 +20554,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -21123,7 +21123,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) "mqP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -21301,7 +21301,7 @@ dir = 1 }, /obj/structure/closet/firecloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -21389,7 +21389,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -22420,7 +22420,7 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -22474,7 +22474,7 @@ dir = 4; pixel_x = 11 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -23248,7 +23248,7 @@ /obj/item/roller{ pixel_y = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -23641,7 +23641,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -23742,7 +23742,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "nJl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -24724,7 +24724,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics) "okn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -24766,7 +24766,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -25448,7 +25448,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -25861,7 +25861,7 @@ /turf/simulated/floor/bluegrid, /area/rnd/robotics/mechbay) "oRr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -26020,7 +26020,7 @@ /turf/simulated/wall, /area/tether/surfacebase/shuttle_pad) "oVJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /turf/simulated/floor/tiled, @@ -26029,7 +26029,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -26189,7 +26189,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -26317,7 +26317,7 @@ pixel_y = 2 }, /obj/item/healthanalyzer, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 32 }, /obj/item/surgical/bioregen, @@ -26348,7 +26348,7 @@ /area/rnd/xenobiology/xenoflora) "pek" = ( /obj/structure/bed/chair, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/carpet/blue, @@ -26987,7 +26987,7 @@ "ptc" = ( /obj/item/bedsheet/captain, /obj/structure/bed/padded, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -27153,7 +27153,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -27487,7 +27487,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -28817,7 +28817,7 @@ /turf/simulated/floor/plating, /area/rnd/outpost/xenobiology/outpost_hallway) "qty" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25; target_temperature = 270 @@ -29376,7 +29376,7 @@ /obj/machinery/photocopier/faxmachine{ department = "Internal Affairs" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -29480,7 +29480,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -29575,7 +29575,7 @@ /turf/simulated/open/virgo3b, /area/tether/surfacebase/outside/outside3) "qUf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -29825,7 +29825,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "rcn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -30033,7 +30033,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -30231,7 +30231,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/tourbus/general) "roN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -30478,7 +30478,7 @@ /obj/machinery/vending/coffee{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -30994,7 +30994,7 @@ "rOz" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -24 }, @@ -31519,7 +31519,7 @@ /area/triumph/surfacebase/sauna) "sbl" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -31616,7 +31616,7 @@ /obj/structure/cable/green{ icon_state = "1-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -31711,7 +31711,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) "shK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 28 }, @@ -31777,7 +31777,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_x = 30; pixel_y = -22 @@ -32090,7 +32090,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "ssc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -32266,7 +32266,7 @@ /obj/structure/disposalpipe/segment, /obj/structure/table/steel, /obj/item/storage/bag/circuits/basic, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -32736,7 +32736,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -32750,7 +32750,7 @@ /obj/item/surgical/scalpel, /obj/item/surgical/cautery, /obj/item/autopsy_scanner, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -33165,7 +33165,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) "sZZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -33630,7 +33630,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) "tpC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ @@ -33664,7 +33664,7 @@ /turf/simulated/floor/grass, /area/hydroponics) "tqA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 28 }, @@ -33790,7 +33790,7 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/outside/outside3) "tvl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 28 }, /turf/simulated/floor/tiled, @@ -33850,7 +33850,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -33870,7 +33870,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/briefingroom) "txz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -33895,7 +33895,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) "txP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 30 }, /turf/simulated/floor/tiled/steel_grid, @@ -34270,7 +34270,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -34508,7 +34508,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics) "tPc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 28 }, @@ -34828,7 +34828,7 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "tWt" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/disposalpipe/segment{ @@ -35236,7 +35236,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "ugQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "pen_nine"; breach_detection = 0; dir = 1; @@ -35524,7 +35524,7 @@ /area/tether/surfacebase/security/briefingroom) "unZ" = ( /obj/random/junk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -35796,7 +35796,7 @@ /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -36101,7 +36101,7 @@ "uCB" = ( /obj/structure/table/steel, /obj/machinery/recharger, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -36307,7 +36307,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -36351,7 +36351,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 32 }, /obj/machinery/camera/network/medbay{ @@ -36535,7 +36535,7 @@ /turf/simulated/open/virgo3b, /area/tether/surfacebase/outside/outside3) "uQn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -36585,7 +36585,7 @@ /obj/effect/floor_decal/techfloor{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -37180,7 +37180,7 @@ /obj/effect/floor_decal/corner/red{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -37253,7 +37253,7 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/lobby) "vnr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -37649,7 +37649,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -37714,7 +37714,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/iaa/officea) "vEE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /obj/effect/floor_decal/borderfloor{ @@ -37770,7 +37770,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 25 }, /obj/item/tool/wrench, @@ -38047,7 +38047,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -38381,7 +38381,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -40464,7 +40464,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "xcn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 20 }, /obj/effect/floor_decal/borderfloorblack{ @@ -40501,7 +40501,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -41069,7 +41069,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "xuK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -41136,7 +41136,7 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; @@ -41643,7 +41643,7 @@ name = "north bump"; pixel_y = 28 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -41651,7 +41651,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/bar) "xIK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -42179,7 +42179,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "xVK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -42253,7 +42253,7 @@ /area/hydroponics) "xXz" = ( /obj/machinery/papershredder, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -42467,7 +42467,7 @@ /turf/simulated/floor/plating, /area/tether/surfacebase/medical/surgery1) "yeM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, diff --git a/maps/triumph/engines/burn.dmm b/maps/triumph/engines/burn.dmm index d85344952ae..829ab3a5913 100644 --- a/maps/triumph/engines/burn.dmm +++ b/maps/triumph/engines/burn.dmm @@ -288,7 +288,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/engine_room) "jD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -422,7 +422,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "pF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1099,7 +1099,7 @@ /turf/simulated/floor/reinforced/airless, /area/engineering/engine_room) "Qm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/window/reinforced{ @@ -1273,7 +1273,7 @@ /area/engineering/engine_room) "UK" = ( /obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/visible/green{ diff --git a/maps/triumph/engines/fission.dmm b/maps/triumph/engines/fission.dmm index e477013b775..1dd958b5f87 100644 --- a/maps/triumph/engines/fission.dmm +++ b/maps/triumph/engines/fission.dmm @@ -23,7 +23,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "ad" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -494,7 +494,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techmaint, @@ -739,7 +739,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /obj/machinery/light/small{ dir = 8 diff --git a/maps/triumph/engines/rust.dmm b/maps/triumph/engines/rust.dmm index e8795297c64..0e13e984d9e 100644 --- a/maps/triumph/engines/rust.dmm +++ b/maps/triumph/engines/rust.dmm @@ -306,7 +306,7 @@ frequency = 1438; id_tag = "cooling_out"; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced, /area/engineering/engine_room) @@ -350,7 +350,7 @@ /turf/simulated/floor/reinforced, /area/engineering/engine_room) "eD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/visible/green{ @@ -629,7 +629,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "oV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1102,7 +1102,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "OF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1214,7 +1214,7 @@ frequency = 1438; id_tag = "cooling_out"; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced, /area/engineering/engine_room) diff --git a/maps/triumph/engines/sme.dmm b/maps/triumph/engines/sme.dmm index dcb2adc1a57..f827e010d3c 100644 --- a/maps/triumph/engines/sme.dmm +++ b/maps/triumph/engines/sme.dmm @@ -128,7 +128,7 @@ /turf/simulated/floor, /area/engineering/engine_room) "gC" = ( -/obj/machinery/atmospherics/component/trinary/atmos_filter, +/obj/machinery/atmospherics/component/trinary/filter, /turf/simulated/floor/plating, /area/engineering/engine_room) "hh" = ( @@ -492,7 +492,7 @@ id_tag = "cooling_out"; initialize_directions = 4; pump_direction = 0; - use_power = 1 + on = 1 }, /obj/effect/floor_decal/industrial/warning/cee{ dir = 8 @@ -1086,7 +1086,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -1420,7 +1420,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "YK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/triumph/levels/deck1.dmm b/maps/triumph/levels/deck1.dmm index 31060cd94b2..5d2f248e3b6 100644 --- a/maps/triumph/levels/deck1.dmm +++ b/maps/triumph/levels/deck1.dmm @@ -46,7 +46,7 @@ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -551,7 +551,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/oxygen, /area/engineering/atmos/gas_storage) @@ -584,7 +584,7 @@ /turf/simulated/floor/plating, /area/maintenance/engi_engine) "bH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -1395,7 +1395,7 @@ pixel_x = 6; pixel_y = 8 }, -/obj/item/analyzer{ +/obj/item/atmos_analyzer{ pixel_x = -5; pixel_y = 8 }, @@ -1481,7 +1481,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/phoron, /area/engineering/atmos/gas_storage) @@ -1569,7 +1569,7 @@ /turf/simulated/floor/carpet/blucarpet, /area/engineering/break_room) "fi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -1833,7 +1833,7 @@ icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -2179,7 +2179,7 @@ "hi" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2586,7 +2586,7 @@ /obj/item/flash, /obj/item/flash, /obj/structure/table/steel, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -2668,7 +2668,7 @@ /turf/simulated/floor/plating, /area/maintenance/trash_pit) "iO" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2956,7 +2956,7 @@ /turf/simulated/floor/tiled/white, /area/engineering/foyer_mezzenine) "jP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/freezer{ @@ -3620,7 +3620,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -4582,7 +4582,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -4757,7 +4757,7 @@ /turf/simulated/floor/airless/ceiling, /area/engineering/portnacelle) "qp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -5293,7 +5293,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/atmos) "rU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -5411,7 +5411,7 @@ "sk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5585,7 +5585,7 @@ /area/engineering/atmos/gas_storage) "sS" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -5609,8 +5609,7 @@ dir = 8 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8; - scrubbing_gas = list(/datum/gas/carbon_dioxide) + dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/tcommsat/computer) @@ -5935,7 +5934,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway/lower) "tP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -6015,7 +6014,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -6254,7 +6253,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -6516,7 +6515,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6805,7 +6804,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/n20, /area/engineering/atmos/gas_storage) @@ -6978,7 +6977,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=100;TEMP=80"; @@ -7101,7 +7100,7 @@ }, /area/tcommsat/chamber) "xU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -7332,7 +7331,7 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "yM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor/orange{ @@ -7463,7 +7462,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/atmos) "zi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -7679,7 +7678,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8020,7 +8019,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/power/apc{ @@ -8181,7 +8180,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/locker_room) "BG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, @@ -8374,7 +8373,7 @@ /turf/simulated/floor/plating, /area/station/stairs_one) "Co" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -9304,7 +9303,7 @@ /turf/simulated/floor/tiled/steel_dirty, /area/engineering/atmos/storage) "Fu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -9506,7 +9505,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/atmos/storage) "Gd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -9715,8 +9714,7 @@ /area/engineering/foyer_mezzenine) "GS" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8; - scrubbing_gas = list(/datum/gas/carbon_dioxide) + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 6 @@ -9862,7 +9860,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -9953,10 +9951,10 @@ dir = 8; layer = 2.9 }, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/healthanalyzer, -/obj/item/analyzer, -/obj/item/analyzer, +/obj/item/atmos_analyzer, +/obj/item/atmos_analyzer, /obj/machinery/light/small{ dir = 1 }, @@ -10268,7 +10266,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -11163,7 +11161,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/airmix, /area/engineering/atmos/gas_storage) @@ -11181,7 +11179,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/atmos) "LL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -11446,7 +11444,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/storage) "MK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -11858,7 +11856,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/carbon_dioxide, /area/engineering/atmos/gas_storage) @@ -11906,7 +11904,7 @@ /turf/simulated/floor/plating, /area/maintenance/engi_engine) "On" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12715,7 +12713,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/reinforced/nitrogen, /area/engineering/atmos/gas_storage) @@ -12766,8 +12764,7 @@ /area/engineering/atmos) "Rf" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8; - scrubbing_gas = list(/datum/gas/carbon_dioxide) + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 @@ -13704,7 +13701,7 @@ /area/crew_quarters/heads/chief) "Un" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -14015,7 +14012,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -14215,7 +14212,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway/lower) "VX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -14385,7 +14382,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -14480,7 +14477,7 @@ /turf/simulated/floor/tiled, /area/engineering/hallway/lower) "WM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor/orange{ @@ -14673,7 +14670,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15320,7 +15317,7 @@ /turf/simulated/floor/plating, /area/tcommsat/entrance) "Zx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -15454,7 +15451,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/atmos) "ZP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, diff --git a/maps/triumph/levels/deck2.dmm b/maps/triumph/levels/deck2.dmm index 29261a186cd..84d913e9bef 100644 --- a/maps/triumph/levels/deck2.dmm +++ b/maps/triumph/levels/deck2.dmm @@ -146,7 +146,7 @@ /obj/structure/table/standard, /obj/item/coin/silver, /obj/item/coin/silver, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -436,7 +436,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/freezer) "bi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -762,7 +762,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "cc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -951,7 +951,7 @@ pixel_x = -4; pixel_y = 12 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ @@ -963,7 +963,7 @@ /turf/simulated/floor/lino, /area/crew_quarters/coffee_shop) "cD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable/green{ @@ -1006,7 +1006,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/catwalk, @@ -1409,7 +1409,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/starboard) "dU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -1521,7 +1521,7 @@ /turf/simulated/floor/plating, /area/maintenance/bar/lower) "ek" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1562,7 +1562,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/port) "eq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -1885,7 +1885,7 @@ /turf/simulated/floor/carpet/purcarpet, /area/crew_quarters/sleep/Dorm_8) "ft" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -1926,7 +1926,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_5) "fy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -1934,7 +1934,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_10) "fz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -2308,7 +2308,7 @@ /turf/simulated/floor/plating, /area/maintenance/bar/lower) "gN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -2357,7 +2357,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2576,7 +2576,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -2640,7 +2640,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/port) "hR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -2757,7 +2757,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_5) "io" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -3036,7 +3036,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/starboard) "iZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/vending/loadout/costume, @@ -3371,7 +3371,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -3525,7 +3525,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) "kB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3600,7 +3600,7 @@ /turf/simulated/floor/tiled, /area/triumph/surfacebase/mining_main/refinery) "kL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3681,7 +3681,7 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3864,7 +3864,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "lD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -3932,7 +3932,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 27 }, /turf/simulated/floor/tiled, @@ -4553,7 +4553,7 @@ desc = "There's a tag on this pengiun that says Skipper. You're not even sure where the chef found them."; name = "Skipper" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -4702,7 +4702,7 @@ /turf/simulated/floor/plating, /area/maintenance/bar/lower) "oq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -5903,7 +5903,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "rN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_pump/on, @@ -5915,7 +5915,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) "rP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5943,7 +5943,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/bar) "rT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -6004,7 +6004,7 @@ /turf/simulated/floor/airless, /area/space) "sd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -6153,7 +6153,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/foyer) "sA" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6665,7 +6665,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) "ue" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -6753,7 +6753,7 @@ /turf/simulated/floor/wood, /area/quartermaster/foyer) "up" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -7691,7 +7691,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7903,7 +7903,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/disposalpipe/segment{ @@ -7961,7 +7961,7 @@ /turf/simulated/floor/tiled/white, /area/station/stairs_two) "xy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -8087,7 +8087,7 @@ /turf/simulated/floor/crystal, /area/station/stairs_two) "xR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8172,7 +8172,7 @@ /turf/simulated/floor/plating, /area/maintenance/dormitory) "yi" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8194,7 +8194,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -8911,7 +8911,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/lounge/kitchen_freezer) "Ac" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -8990,7 +8990,7 @@ /turf/simulated/floor/carpet/purcarpet, /area/crew_quarters/sleep/Dorm_5) "An" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -9007,7 +9007,7 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "Ap" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable{ @@ -9267,7 +9267,7 @@ /turf/simulated/floor/plating, /area/triumph/surfacebase/bar_backroom) "Bg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10204,7 +10204,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "Eo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/appliance/cooker/oven, @@ -10369,7 +10369,7 @@ /turf/simulated/floor/airless/ceiling, /area/space) "EN" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10669,7 +10669,7 @@ /turf/simulated/floor/tiled, /area/triumph/surfacebase/mining_main/storage) "FK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -10962,7 +10962,7 @@ /turf/simulated/floor/plating, /area/maintenance/dormitory) "GI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/bed/chair/comfy/black, @@ -11278,7 +11278,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) "HF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -11519,7 +11519,7 @@ /turf/simulated/floor/tiled, /area/triumph/surfacebase/mining_main/storage) "Iw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/wall/prepainted/cargo, @@ -11585,7 +11585,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/port) "II" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -11849,7 +11849,7 @@ "Jz" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -12165,7 +12165,7 @@ /turf/simulated/floor/wood, /area/triumph/surfacebase/bar_backroom) "Kq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/civilian, @@ -12349,7 +12349,7 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "KR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -12369,7 +12369,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/freezer) "KV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/civilian, @@ -12771,7 +12771,7 @@ "Mk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13194,7 +13194,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) "Nw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -13202,7 +13202,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "Nx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -13317,7 +13317,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "NS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet/jcloset, @@ -13791,7 +13791,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/bar) "Pm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -14122,7 +14122,7 @@ /turf/simulated/floor/airless, /area/space) "Qk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14283,7 +14283,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/bar) "QS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -14295,7 +14295,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_1) "QU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/ore_box, @@ -14632,7 +14632,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/disposalpipe/segment{ @@ -14672,7 +14672,7 @@ name = "Distribution Loop" }, /obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -14943,7 +14943,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/bar) "SJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15128,7 +15128,7 @@ /turf/simulated/floor/plating, /area/hydroponics) "Tl" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -15251,7 +15251,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/fancyblack, @@ -15383,7 +15383,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/port) "Ue" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15429,7 +15429,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "Um" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -15652,7 +15652,7 @@ /turf/simulated/floor/carpet/purcarpet, /area/crew_quarters/coffee_shop) "UR" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15710,7 +15710,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/lounge/kitchen_freezer) "UY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/cable{ @@ -15995,7 +15995,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/showers) "VQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16219,7 +16219,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) "Wy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -16451,7 +16451,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/warehouse) "Xk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -17220,7 +17220,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/showers) "ZI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, diff --git a/maps/triumph/levels/deck3.dmm b/maps/triumph/levels/deck3.dmm index bada889d3b6..ab9a0919425 100644 --- a/maps/triumph/levels/deck3.dmm +++ b/maps/triumph/levels/deck3.dmm @@ -253,7 +253,7 @@ dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals_central6, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -552,7 +552,7 @@ /turf/simulated/floor/tiled/white, /area/medical/psych_ward) "azy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -1060,7 +1060,7 @@ /turf/simulated/floor/tiled/white, /area/medical/psych_ward) "aTQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -1159,7 +1159,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/workshop) "aZk" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet, @@ -1575,7 +1575,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1630,7 +1630,7 @@ }, /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/blue/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2014,7 +2014,7 @@ /area/rnd/hallway) "bOw" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -2052,7 +2052,7 @@ /turf/simulated/floor/airless, /area/rnd/test_area) "bQa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2204,7 +2204,7 @@ /turf/simulated/floor/wood, /area/medical/medbay4) "bXJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -2372,7 +2372,7 @@ "ccN" = ( /obj/machinery/atmospherics/component/unary/vent_pump{ icon_state = "map_vent_out"; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid{ initial_gas_mix = "n2=500;TEMP=80"; @@ -2647,7 +2647,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2755,7 +2755,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -2869,7 +2869,7 @@ /turf/simulated/floor/tiled, /area/rnd/test_area) "cyP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -3520,7 +3520,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -3756,7 +3756,7 @@ /turf/simulated/floor/tiled, /area/rnd/test_area) "djF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3881,7 +3881,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorwhite{ @@ -4048,7 +4048,7 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide{ start_pressure = 8500 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -4164,7 +4164,7 @@ /turf/simulated/floor/tiled/white, /area/medical/exam_room/exam_1) "dEU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet/emcloset, @@ -4194,7 +4194,7 @@ /turf/simulated/floor/tiled, /area/rnd/research_foyer_auxiliary) "dFm" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_one"; dir = 8; pixel_x = 22 @@ -4287,7 +4287,7 @@ /turf/simulated/wall/prepainted/medical, /area/medical/surgery) "dIx" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -4336,7 +4336,7 @@ /area/medical/morgue) "dKT" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -4631,7 +4631,7 @@ /turf/simulated/shuttle/wall/voidcraft/blue, /area/shuttle/emt/general) "dUp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/vending/coffee, @@ -4657,7 +4657,7 @@ /area/rnd/breakroom) "dXW" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/closet/secure_closet/medical3{ @@ -5330,7 +5330,7 @@ /obj/effect/floor_decal/techfloor{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5415,7 +5415,7 @@ /obj/effect/floor_decal/industrial/danger{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -5496,7 +5496,7 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/xenobiology/xenoflora_storage) "eLe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/computer/crew, @@ -5540,7 +5540,7 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5932,7 +5932,7 @@ /obj/effect/floor_decal/industrial/warning/dust{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -6006,7 +6006,7 @@ /turf/simulated/floor/tiled, /area/rnd/research_foyer_auxiliary) "fcw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -6193,7 +6193,7 @@ /turf/simulated/wall/prepainted/science, /area/rnd/xenobiology/xenoflora_storage) "fmp" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -6308,7 +6308,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/emt/general) "frz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -6747,7 +6747,7 @@ /area/hallway/primary/port) "fJj" = ( /obj/machinery/optable, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -6851,7 +6851,7 @@ /area/assembly/robotics) "fNX" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -7397,7 +7397,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak/surgery) "gkq" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/organ_printer/flesh, @@ -7733,7 +7733,7 @@ /turf/simulated/floor/plating, /area/medical/chemistry) "gxm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -8017,7 +8017,7 @@ /turf/simulated/floor/airless, /area/space) "gMn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -8200,7 +8200,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -8503,7 +8503,7 @@ /turf/simulated/floor/tiled, /area/rnd/rdoffice) "hjT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8810,7 +8810,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/beige/full{ @@ -9530,7 +9530,7 @@ /turf/simulated/floor/tiled/old_cargo/purple, /area/assembly/robotics/surgery) "hUa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -10001,7 +10001,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/blue{ @@ -10512,7 +10512,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /obj/structure/window/reinforced, /turf/simulated/floor/bluegrid{ @@ -10602,7 +10602,7 @@ /obj/item/defib_kit/loaded{ pixel_y = 3 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -10839,7 +10839,7 @@ /turf/simulated/floor/tiled, /area/rnd/research_foyer_auxiliary) "iUD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -10964,7 +10964,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "iXI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -11142,7 +11142,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/port) "jgb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -11194,7 +11194,7 @@ /area/medical/patient_wing) "jin" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -11842,7 +11842,7 @@ /turf/simulated/floor/tiled/white, /area/medical/virologyisolation) "jFD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -11880,7 +11880,7 @@ /obj/effect/floor_decal/corner/blue{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -11898,7 +11898,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -12225,7 +12225,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/port) "jYw" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_two"; dir = 8; pixel_x = 22 @@ -12368,7 +12368,7 @@ /turf/simulated/floor/tiled, /area/medical/sleeper) "kfs" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -12430,7 +12430,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/research_restroom) "kjr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -12754,7 +12754,7 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "kzM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/techfloor{ @@ -12777,7 +12777,7 @@ /turf/simulated/floor/airless, /area/rnd/xenobiology/xenoflora/lab_atmos) "kBS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -12828,7 +12828,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -13152,7 +13152,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -13191,7 +13191,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -13440,7 +13440,7 @@ /turf/simulated/floor/tiled, /area/triumph/station/stairs_three) "lcH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -13550,7 +13550,7 @@ /turf/simulated/floor/plating, /area/maintenance/medbay/aft) "ljT" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -13636,7 +13636,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay4) "log" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/item/clothing/suit/straight_jacket, @@ -13868,7 +13868,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -14189,7 +14189,7 @@ /turf/simulated/floor/carpet/blue, /area/crew_quarters/medbreak/surgery) "lIJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -14638,7 +14638,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/emt/general) "mgX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -14793,7 +14793,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14883,7 +14883,7 @@ /area/rnd/research_foyer_auxiliary) "mts" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/black, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -14938,7 +14938,7 @@ /area/maintenance/fpmaint2) "mwF" = ( /obj/machinery/door/firedoor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -14997,7 +14997,7 @@ /area/medical/psych_ward) "mzm" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -15174,7 +15174,7 @@ /turf/simulated/floor/grass, /area/medical/psych_ward) "mGe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -15323,7 +15323,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/red{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -15493,7 +15493,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/techfloor, @@ -15709,7 +15709,7 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "nbe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -15980,7 +15980,7 @@ /turf/simulated/floor/tiled, /area/holodeck_control) "npY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/research, @@ -16249,7 +16249,7 @@ /turf/simulated/floor/plating, /area/rnd/test_area) "nBw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16599,7 +16599,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16819,7 +16819,7 @@ /turf/simulated/floor/plating, /area/rnd/misc_lab) "nYo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/reinforced, @@ -17832,7 +17832,7 @@ /area/medical/surgeryprep) "oOE" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -18170,7 +18170,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 4 }, -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "xenopenvent"; pixel_y = 24 }, @@ -18337,7 +18337,7 @@ /area/rnd/xenobiology) "pgV" = ( /obj/machinery/computer/rdconsole/robotics, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -19946,7 +19946,7 @@ /turf/simulated/floor/carpet/tealcarpet, /area/medical/patient_a) "qrK" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -20440,7 +20440,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/corner/blue{ @@ -20731,7 +20731,7 @@ "qSo" = ( /obj/machinery/iv_drip, /obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -20874,7 +20874,7 @@ /turf/simulated/floor/tiled/white, /area/medical/chemistry) "qYG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -21133,7 +21133,7 @@ /turf/simulated/floor/tiled, /area/rnd/storage) "rfH" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/steel_reinforced, @@ -21155,7 +21155,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/item/storage/box/botanydisk, @@ -21345,7 +21345,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "rsn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -21459,7 +21459,7 @@ /obj/structure/flora/pottedplant{ icon_state = "plant-10" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -22640,7 +22640,7 @@ /area/medical/medbay4) "syC" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/white, @@ -23119,7 +23119,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -23467,9 +23467,9 @@ /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/gloves/botanic_leather, /obj/item/clothing/gloves/botanic_leather, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /obj/item/tool/wirecutters/clippers/trimmers, /obj/item/material/knife/machete/hatchet, @@ -23499,7 +23499,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay4) "thZ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -23755,7 +23755,7 @@ /turf/simulated/floor/plating, /area/maintenance/research) "tut" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_two"; dir = 8; pixel_x = 22 @@ -23816,7 +23816,7 @@ /area/rnd/storage) "tys" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -24074,7 +24074,7 @@ /turf/simulated/floor/tiled, /area/medical/reception) "tIG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/bed/chair/office/dark{ @@ -24339,7 +24339,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -24842,7 +24842,7 @@ "ukZ" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/blue/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -24925,7 +24925,7 @@ dir = 4 }, /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -25101,7 +25101,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "uxG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25210,7 +25210,7 @@ /obj/item/folder/red{ pixel_y = 3 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -25596,7 +25596,7 @@ /turf/simulated/floor/tiled, /area/rnd/reception_desk) "uWQ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25620,7 +25620,7 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "uXW" = ( -/obj/machinery/alarm/monitor/isolation{ +/obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_one"; dir = 8; pixel_x = 22 @@ -25746,7 +25746,7 @@ /turf/simulated/floor/plating, /area/maintenance/medbay/fore) "vdg" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -26028,7 +26028,7 @@ /turf/simulated/floor/tiled, /area/medical/medbay_primary_storage) "vrn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -26880,7 +26880,7 @@ /turf/simulated/floor/tiled/white, /area/medical/exam_room/exam_1) "waa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -26993,7 +26993,7 @@ /obj/effect/floor_decal/borderfloorwhite{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -27142,14 +27142,14 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "wgC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, /turf/simulated/floor/tiled, /area/medical/resleeving) "wgF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -27474,7 +27474,7 @@ /turf/simulated/floor/tiled/white, /area/medical/psych_ward) "wzf" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -28093,7 +28093,7 @@ pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; - use_power = 1 + on = 1 }, /turf/simulated/floor/bluegrid, /area/rnd/xenobiology) @@ -28153,7 +28153,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloorwhite{ @@ -28570,7 +28570,7 @@ "xvK" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light/small, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -28891,7 +28891,7 @@ /area/rnd/anomaly_lab/containment_one) "xID" = ( /obj/machinery/papershredder, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -28965,7 +28965,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgeryprep) "xLu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -29177,7 +29177,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/medical) "xUb" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -29284,7 +29284,7 @@ /turf/simulated/floor/tiled, /area/teleporter/departing) "xYz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -29302,8 +29302,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /obj/structure/catwalk, /turf/simulated/floor/plating, @@ -29445,7 +29445,7 @@ /turf/simulated/floor/tiled, /area/rnd/hallway) "yjy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, diff --git a/maps/triumph/levels/deck4.dmm b/maps/triumph/levels/deck4.dmm index 6b13172895a..7c5114140f5 100644 --- a/maps/triumph/levels/deck4.dmm +++ b/maps/triumph/levels/deck4.dmm @@ -397,7 +397,7 @@ /area/hydroponics/garden) "aqH" = ( /obj/random/maintenance/security, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -25 }, @@ -728,7 +728,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -740,7 +740,7 @@ /obj/item/book/manual/standard_operating_procedure, /obj/item/book/manual/command_guide, /obj/item/book/manual/standard_operating_procedure, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/carpet, @@ -777,7 +777,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -847,7 +847,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -1149,7 +1149,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "aKC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -1906,7 +1906,7 @@ /area/shuttle/courser/cockpit) "bnc" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23 }, @@ -1996,7 +1996,7 @@ }, /obj/effect/floor_decal/steeldecal/steel_decals5, /obj/machinery/light/small, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -2467,8 +2467,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/grass, /area/hydroponics/garden) @@ -2559,7 +2559,7 @@ /obj/machinery/camera/network/security{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -2778,7 +2778,7 @@ /area/lawoffice) "bSd" = ( /obj/effect/floor_decal/techfloor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3027,7 +3027,7 @@ }, /obj/item/clothing/under/swimsuit/stripper/cowbikini, /obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -3177,7 +3177,7 @@ dir = 9 }, /obj/structure/closet/lawcloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/power/apc{ @@ -3506,7 +3506,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3665,7 +3665,7 @@ /obj/structure/toilet{ pixel_y = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3683,7 +3683,7 @@ "cCd" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -3850,7 +3850,7 @@ /obj/machinery/door/window/northleft{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled, @@ -3943,7 +3943,7 @@ "cPP" = ( /obj/structure/table/steel, /obj/item/storage/box/donut, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -4044,7 +4044,7 @@ /turf/simulated/floor/tiled/dark, /area/security/brig) "cTV" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -4349,7 +4349,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals9{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -4560,8 +4560,8 @@ /obj/item/material/minihoe, /obj/item/shovel/spade, /obj/item/shovel/spade, -/obj/item/analyzer/plant_analyzer, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, /obj/item/tool/wirecutters/clippers/trimmers, /turf/simulated/floor/grass, /area/hydroponics/garden) @@ -4974,7 +4974,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/outline, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -5231,7 +5231,7 @@ /turf/simulated/floor/grass, /area/hydroponics/garden) "dvz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -5289,7 +5289,7 @@ /area/hydroponics/garden) "dyP" = ( /obj/machinery/light, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23 }, @@ -5307,7 +5307,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "dzM" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -5873,7 +5873,7 @@ /area/library) "dRO" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -6290,7 +6290,7 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/civilian_hallway_mid) "eeY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -6583,7 +6583,7 @@ /turf/simulated/floor/grass, /area/hydroponics/garden) "evm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -6854,7 +6854,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "eCd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -7433,7 +7433,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration/excursion_dock) "eUo" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7775,7 +7775,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/steeldecal/steel_decals9, @@ -7785,7 +7785,7 @@ /turf/simulated/floor/tiled, /area/security/lobby) "fjs" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -7894,7 +7894,7 @@ /turf/simulated/floor/tiled, /area/shuttle/excursion/general) "fmh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8361,7 +8361,7 @@ /turf/simulated/floor/wood, /area/hallway/secondary/docking_hallway) "fBI" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -8635,7 +8635,7 @@ /turf/simulated/floor/tiled/old_tile/red, /area/maintenance/security/starboard) "fNW" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -9013,7 +9013,7 @@ /area/security/nuke_storage) "fZF" = ( /obj/structure/catwalk, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10054,7 +10054,7 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/docking_hallway) "gLP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/monotile, @@ -10434,7 +10434,7 @@ "gYT" = ( /obj/structure/table/woodentable, /obj/machinery/recharger, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -10750,7 +10750,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/lobby) "hik" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -10965,7 +10965,7 @@ /turf/simulated/floor/plating, /area/maintenance/chapel) "hoc" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -11168,7 +11168,7 @@ "hvx" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/red/border, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -11769,7 +11769,7 @@ /obj/structure/cable/green{ icon_state = "0-4" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -12104,7 +12104,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "ihG" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -12259,7 +12259,7 @@ /area/security/brig) "ilO" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -12665,7 +12665,7 @@ /turf/simulated/floor/wood, /area/triumph/surfacebase/sauna) "izz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22; target_temperature = 312.15 @@ -13015,7 +13015,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -13214,7 +13214,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/lobby) "iTu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -13646,7 +13646,7 @@ /turf/simulated/floor/tiled, /area/maintenance/tool_storage) "jkE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -14274,7 +14274,7 @@ pixel_x = -3; pixel_y = 7 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -14285,7 +14285,7 @@ "jIp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; frequency = 1441; pixel_x = -23 @@ -14443,7 +14443,7 @@ /area/exploration/excursion_dock) "jMN" = ( /obj/structure/closet/l3closet/security, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -15326,7 +15326,7 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/prison/cell_block) "kot" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/lino, @@ -15429,7 +15429,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "ksB" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -15700,7 +15700,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "kBX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/light{ @@ -15748,7 +15748,7 @@ /turf/simulated/floor/tiled, /area/exploration/explorer_prep) "kEh" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -16426,7 +16426,7 @@ /turf/simulated/floor/tiled, /area/triumph/surfacebase/sauna) "kXy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16448,7 +16448,7 @@ "kXH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -16984,7 +16984,7 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "lus" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17020,7 +17020,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/excursion/general) "lwn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -17046,7 +17046,7 @@ /turf/simulated/floor/tiled/techfloor, /area/security/lobby) "lyU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -17269,7 +17269,7 @@ /turf/simulated/floor/wood, /area/security/breakroom) "lIw" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/structure/table/wooden_reinforced, @@ -17444,7 +17444,7 @@ /turf/simulated/floor/plating, /area/shuttle/excursion/cargo) "lOX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/wood, @@ -17519,7 +17519,7 @@ /turf/simulated/floor/tiled/old_cargo/white, /area/security/forensics) "lQC" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17672,7 +17672,7 @@ /turf/simulated/floor/plating, /area/exploration/explorer_prep) "lYL" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -17780,7 +17780,7 @@ /area/exploration/courser_dock) "mcY" = ( /obj/structure/table/reinforced, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 27 }, @@ -17878,7 +17878,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -18059,7 +18059,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/sleep/CE_quarters) "mme" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/effect/floor_decal/borderfloor{ @@ -19209,7 +19209,7 @@ /turf/simulated/floor/tiled/techmaint, /area/security/prison) "nfJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19757,7 +19757,7 @@ /turf/simulated/floor/bluegrid, /area/ai) "nBa" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -19991,7 +19991,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/hop) "nHX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -20007,7 +20007,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/old_cargo/white, @@ -20279,7 +20279,7 @@ /turf/simulated/wall/prepainted, /area/vacant/vacant_bar) "nRe" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -20309,7 +20309,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/aft) "nRY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/random/junk, @@ -21256,7 +21256,7 @@ /obj/effect/floor_decal/techfloor{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -21422,7 +21422,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "oHz" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -21835,7 +21835,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/exploration) "oVm" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -21922,7 +21922,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "oYJ" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22; target_temperature = 275.15 @@ -21951,7 +21951,7 @@ /turf/simulated/floor/plating, /area/maintenance/substation/command) "oZE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/floodlight, @@ -22255,7 +22255,7 @@ /area/maintenance/security/starboard) "plb" = ( /obj/structure/closet/firecloset, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -22330,7 +22330,7 @@ /area/security/eva) "pnx" = ( /obj/structure/closet/wardrobe/red, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -23177,7 +23177,7 @@ /turf/simulated/floor/tiled/dark, /area/security/riot_control) "pNr" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -23559,7 +23559,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -23686,7 +23686,7 @@ /area/maintenance/chapel) "qhj" = ( /obj/machinery/media/jukebox, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -23737,7 +23737,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -24177,7 +24177,7 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/civilian_hallway_mid) "qzP" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -24265,7 +24265,7 @@ /obj/effect/floor_decal/industrial/danger{ dir = 9 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -25020,7 +25020,7 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "rdn" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -25033,7 +25033,7 @@ /turf/simulated/floor/tiled, /area/exploration/explorer_prep) "rdF" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -25498,7 +25498,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/hallway) "rwD" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -26541,7 +26541,7 @@ /area/triumph/surfacebase/tram) "sfh" = ( /obj/structure/table/reinforced, -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 8; pixel_x = 27 }, @@ -26857,7 +26857,7 @@ /obj/effect/floor_decal/techfloor/orange{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ frequency = 1441; pixel_y = 22 }, @@ -27429,7 +27429,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 22 }, @@ -27712,7 +27712,7 @@ /turf/simulated/floor/grass, /area/hydroponics/garden) "teS" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -27738,7 +27738,7 @@ /area/gateway/prep_room) "tfY" = ( /obj/effect/floor_decal/techfloor, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -27915,7 +27915,7 @@ /obj/effect/floor_decal/corner/blue/bordercorner2{ dir = 10 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -28335,7 +28335,7 @@ "tCW" = ( /obj/structure/table/woodentable, /obj/machinery/chemical_dispenser/catering/bar_alc, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -28898,7 +28898,7 @@ /turf/simulated/floor/tiled/old_cargo/red, /area/security/security_processing) "tWE" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 25 }, @@ -29615,7 +29615,7 @@ /turf/simulated/floor/plating, /area/crew_quarters/heads/hos) "utu" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -29927,7 +29927,7 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/docking_hallway) "uCX" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -30055,7 +30055,7 @@ /turf/simulated/floor/wood, /area/library) "uFy" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -23 }, @@ -30223,7 +30223,7 @@ /turf/simulated/floor/carpet/tealcarpet, /area/shuttle/civvie/general) "uJU" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/plating, @@ -31117,7 +31117,7 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/dark, @@ -31618,7 +31618,7 @@ /area/security/lobby) "vMW" = ( /obj/machinery/light/small, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -31732,7 +31732,7 @@ /turf/simulated/wall/prepainted, /area/triumph/station/stairs_four) "vRP" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 4; pixel_x = -27 }, @@ -32108,7 +32108,7 @@ /turf/simulated/floor/plating, /area/maintenance/security/starboard) "wbx" = ( -/obj/machinery/alarm/alarms_hidden{ +/obj/machinery/air_alarm/alarms_hidden{ dir = 1; pixel_y = -23 }, @@ -32118,7 +32118,7 @@ /obj/machinery/camera/network/civilian{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -32886,7 +32886,7 @@ /obj/effect/floor_decal/corner/beige/border{ dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -33003,7 +33003,7 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -33231,7 +33231,7 @@ /obj/effect/floor_decal/techfloor{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -33247,7 +33247,7 @@ /obj/effect/floor_decal/techfloor/hole/right{ dir = 4 }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 8; pixel_x = 24 }, @@ -33440,7 +33440,7 @@ "xdJ" = ( /obj/structure/table/reinforced, /obj/machinery/microscope, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /turf/simulated/floor/tiled/old_cargo/white, @@ -33716,7 +33716,7 @@ }, /obj/effect/floor_decal/corner/black/full, /obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -33906,7 +33906,7 @@ /turf/simulated/floor/wood, /area/library) "xoY" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -33917,7 +33917,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "xpv" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 4; pixel_x = -22 }, @@ -34165,7 +34165,7 @@ /turf/simulated/floor/plating, /area/maintenance/chapel) "xxd" = ( -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ dir = 1; pixel_y = -22 }, @@ -34752,7 +34752,7 @@ /obj/structure/closet{ name = "Evidence Closet" }, -/obj/machinery/alarm{ +/obj/machinery/air_alarm{ pixel_y = 22 }, /obj/machinery/camera/network/security, diff --git a/maps/triumph/levels/flagship.dmm b/maps/triumph/levels/flagship.dmm index 09b8e056837..d29bb54bbe4 100644 --- a/maps/triumph/levels/flagship.dmm +++ b/maps/triumph/levels/flagship.dmm @@ -10372,7 +10372,7 @@ "Is" = ( /obj/structure/table/reinforced, /obj/item/material/minihoe, -/obj/item/analyzer/plant_analyzer, +/obj/item/plant_analyzer, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl deleted file mode 100644 index b239536d670..00000000000 --- a/nano/templates/air_alarm.tmpl +++ /dev/null @@ -1,220 +0,0 @@ - -

Air Status

-{{if data.has_environment}} - {{for data.environment}} - {{:value.name}}: - {{if value.danger_level == 2}} - - {{else value.danger_level == 1}} - - {{else}} - - {{/if}} - {{:helper.fixed(value.value, 1)}} - {{:value.unit}}
- {{/for}} - Local Status: {{if data.total_danger == 2}} - DANGER: Internals Required - {{else data.total_danger == 1}} - Caution - {{else}} - Optimal - {{/if}} -
- Area Status: {{if data.atmos_alarm}}Atmosphere alert in area{{else data.fire_alarm}}Fire alarm in area{{else}}No alerts{{/if}} -{{else}} - Warning: Cannot obtain air sample for analysis. -{{/if}} -
- - - - - - - - - - - - - -
-
-

Remote Control

-
-

Thermostat

-
-
-
-
- {{:helper.link('Off', null, { 'rcon' : 1}, data.remote_connection && !data.remote_access ? (data.rcon == 1 ? 'yellowButton' : 'disabled') : null, data.rcon == 1 ? 'selected' : null)}} - {{:helper.link('Auto', null, { 'rcon' : 2}, data.remote_connection && !data.remote_access ? (data.rcon == 2 ? 'yellowButton' : 'disabled') : null, data.rcon == 2 ? 'selected' : null)}} - {{:helper.link('On', null, { 'rcon' : 3}, data.remote_connection && !data.remote_access ? (data.rcon == 3 ? 'yellowButton' : 'disabled') : null, data.rcon == 3 ? 'selected' : null)}} -
-
-
- {{:helper.link(data.target_temperature, null, { 'temperature' : 1})}} -
-
-{{if (data.locked && !data.remote_connection) || (data.remote_connection && ! data.remote_access)}} - {{if data.remote_connection}} - (Current remote control settings and alarm status restricts access.) - {{else}} - (Swipe ID card to unlock interface.) - {{/if}} -{{else}} - {{if data.screen != 1}} -
{{:helper.link('Main Menu', null, { 'screen' : 1})}}
- {{/if}} - {{if data.screen == 1}} -
- {{if data.atmos_alarm}} - {{:helper.link('Reset - Area Atmospheric Alarm', null, { 'atmos_reset' : 1})}} - {{else}} - {{:helper.link('Activate - Area Atmospheric Alarm', null, { 'atmos_alarm' : 1})}} - {{/if}} -
-
-
- {{:helper.link('Scrubbers Control', null, { 'screen' : 3})}} -
-
- {{:helper.link('Vents Control', null, { 'screen' : 2})}} -
-
- {{:helper.link('Set Environmental Mode', null, { 'screen' : 4})}} -
-
- {{:helper.link('Sensor Settings', null, { 'screen' : 5})}} -
-
- {{if data.mode==3}} - {{:helper.link('PANIC SIPHON ACTIVE - Turn siphoning off', null, { 'mode' : 1}, null, 'redButton')}} - {{else}} - {{:helper.link('ACTIVATE PANIC SIPHON IN AREA', null, { 'mode' : 3}, null, 'yellowButton')}} - {{/if}} - {{else data.screen == 2}} - {{for data.vents}} -
- {{:value.long_name}}
-
-
- Operating: -
-
- {{:helper.link(value.power ? 'On' : 'Off', null, { 'id_tag' : value.id_tag, 'command' : 'power', 'val' : value.power ? 0 : 1}, null, value.power ? null : 'redButton')}} -
-
-
-
- Operation Mode: -
-
- {{:helper.link(value.direction == "siphon" ? 'Siphoning' : 'Pressurizing', null, { 'id_tag' : value.id_tag, 'command' : 'direction', 'val' : value.direction == "siphon" ? 1 : 0}, null, value.direction == "siphon" ? 'redButton' : null)}} -
-
-
-
- Pressure Checks: -
-
- {{:helper.link('External', null, { 'id_tag' : value.id_tag, 'command' : 'checks', 'val' : value.checks^1}, null, value.checks&1 ? 'selected' : null)}} - {{:helper.link('Internal', null, { 'id_tag' : value.id_tag, 'command' : 'checks', 'val' : value.checks^2}, null, value.checks&2 ? 'selected' : null)}} -
-
-
-
- External Pressure Bound: -
-
- {{:helper.link(helper.fixed(value.external,2), null, { 'id_tag' : value.id_tag, 'command' : 'set_external_pressure'})}} - {{:helper.link('Reset', null, { 'id_tag' : value.id_tag, 'command' : 'reset_external_pressure'})}} -
-
-
- {{empty}} - No vents connected. - {{/for}} - {{else data.screen == 3}} - {{for data.scrubbers}} -
- {{:value.long_name}}
-
-
- Operating: -
-
- {{:helper.link(value.power ? 'On' : 'Off', null, { 'id_tag' : value.id_tag, 'command' : 'power', 'val' : value.power ? 0 : 1}, null, value.power ? null : 'redButton')}} -
-
-
-
- Operation Mode: -
-
- {{:helper.link(value.scrubbing ? 'Scrubbing' : 'Siphoning', null, { 'id_tag' : value.id_tag, 'command' : 'scrubbing', 'val' : value.scrubbing ? 0 : 1}, null, value.scrubbing ? null : 'redButton')}} -
-
-
-
- Filters: -
-
- {{for value.filters :filterValue:filterIndex}} - {{:helper.link(filterValue.name, null, { 'id_tag' : value.id_tag, 'command' : filterValue.command, 'val' : filterValue.val ? 0 : 1}, null, filterValue.val ? 'selected' : null)}} - {{/for}} -
-
-
- {{empty}} - No scrubbers connected. - {{/for}} - {{else data.screen == 4}} -

Environmental Modes

- {{for data.modes}} -
- {{:helper.link(value.name, null, { 'mode' : value.mode }, null, value.selected ? (value.danger ? 'redButton' : 'selected') : null)}} -
- {{/for}} - {{else data.screen == 5}} -

Alarm Threshold

- Partial pressure for gases. - - - - - {{for data.thresholds}} - - - {{for value.settings :settingsValue:settingsIndex}} - - {{/for}} - - {{/for}} -
min2min1max1max2
{{:value.name}} - {{:helper.link(settingsValue.selected >= 0 ? helper.fixed(settingsValue.selected, 2) : "Off", null, { 'command' : 'set_threshold', 'env' : settingsValue.env, 'var' : settingsValue.val })}} -
- {{/if}} -{{/if}} diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 61ce829a88c..14647182d63 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -327,6 +327,8 @@ toggle, closed by default. - `title: string` - Text to display on the button for collapsing - `color: string` - Color of the button; see [Button](#button) - `buttons: any` - Buttons or other content to render inline with the button +- `more: boolean` - Makes this collapsible render its button on the right, with fixed size. + This effectively makes it a Box with a button to display its children. ### `ColorBox` diff --git a/tgui/packages/common/math.ts b/tgui/packages/common/math.ts index 97e6b60b2ed..4c2104ce057 100644 --- a/tgui/packages/common/math.ts +++ b/tgui/packages/common/math.ts @@ -98,3 +98,29 @@ export const numberOfDecimalDigits = value => { } return 0; }; + +/** + * Get array of bits from a bitfield + */ +export const bitfieldToBits = (field: number) => { + let got: number[] = []; + for (let bit = 0; bit < 24; bit++) { + if (field & (1< { + let got: number[] = []; + for (let bit = 0; bit < limit; bit++) { + if (field & (1< { color={iconColor} rotation={iconRotation} spin={iconSpin} + {...props.iconProps} /> )} {content} @@ -135,6 +137,7 @@ export const Button = (props: ButtonProps) => { color={iconColor} rotation={iconRotation} spin={iconSpin} + {...props.iconProps} /> )} diff --git a/tgui/packages/tgui/components/Collapsible.tsx b/tgui/packages/tgui/components/Collapsible.tsx index 91f411e65c5..41003faf9ac 100644 --- a/tgui/packages/tgui/components/Collapsible.tsx +++ b/tgui/packages/tgui/components/Collapsible.tsx @@ -7,14 +7,18 @@ import { BooleanLike } from 'common/react'; import { Component, InfernoNode } from 'inferno'; import { Box, BoxProps } from './Box'; -import { Button } from './Button'; +import { Button, ButtonProps } from './Button'; +import { ComponentProps } from './Component'; -interface CollapsibleProps extends BoxProps { +interface CollapsibleProps extends ComponentProps{ buttons?: InfernoNode; color?: string; title?: string | InfernoNode; open?: BooleanLike; captureKeys?: BooleanLike; + more?: InfernoNode; + boxProps?: BoxProps; + headerProps?: ButtonProps; } interface CollapsibleState { @@ -44,8 +48,40 @@ export class Collapsible extends Component { buttons, ...rest } = props; - return ( - + return props.more? ( + +
+
+ {props.more} +
+
+
+ +
+ {buttons && ( +
+ {buttons} +
+ )} +
+
+ {open && ( +
+ {children} +
+ )} +
+ ): ( +
@@ -55,7 +91,7 @@ export class Collapsible extends Component { color={color} icon={open ? 'chevron-down' : 'chevron-right'} onClick={() => this.setState({ open: !open })} - {...rest}> + {...props.headerProps}> {title}
diff --git a/tgui/packages/tgui/components/Component.tsx b/tgui/packages/tgui/components/Component.tsx index dd1c90b1436..d6fb54551a9 100644 --- a/tgui/packages/tgui/components/Component.tsx +++ b/tgui/packages/tgui/components/Component.tsx @@ -8,5 +8,5 @@ import { InfernoNode } from "inferno"; export type ComponentProps = { - chlidren?: InfernoNode; + children?: InfernoNode; } diff --git a/tgui/packages/tgui/components/LabeledList.tsx b/tgui/packages/tgui/components/LabeledList.tsx index 938dc9c1d0c..d81a25a4218 100644 --- a/tgui/packages/tgui/components/LabeledList.tsx +++ b/tgui/packages/tgui/components/LabeledList.tsx @@ -7,11 +7,12 @@ import { BooleanLike, classes, pureComponentHooks } from 'common/react'; import { InfernoNode } from 'inferno'; import { Box, unit } from './Box'; +import { ComponentProps } from './Component'; import { Divider } from './Divider'; -type LabeledListProps = { - children?: any; -}; +interface LabeledListProps extends ComponentProps { + +} export const LabeledList = (props: LabeledListProps) => { const { children } = props; diff --git a/tgui/packages/tgui/interfaces/ATM.tsx b/tgui/packages/tgui/interfaces/ATM.tsx index 7b0333db858..98d9845b3fd 100644 --- a/tgui/packages/tgui/interfaces/ATM.tsx +++ b/tgui/packages/tgui/interfaces/ATM.tsx @@ -176,7 +176,7 @@ const ATMElement = (props, context) => { - + { - + { Object.entries(data.transaction_log).map(([numString, logEntry]) => { @@ -234,7 +234,7 @@ const ATMElement = (props, context) => { - + setTransferTarget(value)} /> @@ -249,7 +249,7 @@ const ATMElement = (props, context) => { - + setWithdrawAmount(value)} /> diff --git a/tgui/packages/tgui/interfaces/AirAlarm.js b/tgui/packages/tgui/interfaces/AirAlarm.js deleted file mode 100644 index 9a0183f91cd..00000000000 --- a/tgui/packages/tgui/interfaces/AirAlarm.js +++ /dev/null @@ -1,323 +0,0 @@ -import { toFixed } from 'common/math'; -import { Fragment } from 'inferno'; -import { useBackend, useLocalState } from '../backend'; -import { Box, Button, LabeledList, Section } from '../components'; -import { getGasLabel, getGasColor } from '../constants'; -import { Window } from '../layouts'; -import { Scrubber, Vent } from './common/AtmosControls'; -import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; - -export const AirAlarm = (props, context) => { - const { act, data } = useBackend(context); - const locked = data.locked && !data.siliconUser && !data.remoteUser; - return ( - - - - - - {!locked && ( - - )} - - - ); -}; - -const AirAlarmStatus = (props, context) => { - const { data } = useBackend(context); - const entries = (data.environment_data || []) - .filter(entry => entry.value >= 0.01); - const dangerMap = { - 0: { - color: 'good', - localStatusText: 'Optimal', - }, - 1: { - color: 'average', - localStatusText: 'Caution', - }, - 2: { - color: 'bad', - localStatusText: 'Danger (Internals Required)', - }, - }; - const localStatus = dangerMap[data.danger_level] || dangerMap[0]; - return ( -
- - {entries.length > 0 && ( - <> - {entries.map(entry => { - const status = dangerMap[entry.danger_level] || dangerMap[0]; - return ( - - {toFixed(entry.value, 2)}{entry.unit} - - ); - })} - - {localStatus.localStatusText} - - - {data.atmos_alarm && 'Atmosphere Alarm' - || data.fire_alarm && 'Fire Alarm' - || 'Nominal'} - - - ) || ( - - Cannot obtain air sample for analysis. - - )} - {!!data.emagged && ( - - Safety measures offline. Device may exhibit abnormal behavior. - - )} - -
- ); -}; - -const AirAlarmUnlockedControl = (props, context) => { - const { act, data } = useBackend(context); - const { - target_temperature, - rcon, - } = data; - return ( -
- - -
- ); -}; - -const AIR_ALARM_ROUTES = { - home: { - title: 'Air Controls', - component: () => AirAlarmControlHome, - }, - vents: { - title: 'Vent Controls', - component: () => AirAlarmControlVents, - }, - scrubbers: { - title: 'Scrubber Controls', - component: () => AirAlarmControlScrubbers, - }, - modes: { - title: 'Operating Mode', - component: () => AirAlarmControlModes, - }, - thresholds: { - title: 'Alarm Thresholds', - component: () => AirAlarmControlThresholds, - }, -}; - -const AirAlarmControl = (props, context) => { - const [screen, setScreen] = useLocalState(context, 'screen'); - const route = AIR_ALARM_ROUTES[screen] || AIR_ALARM_ROUTES.home; - const Component = route.component(); - return ( -
setScreen()} /> - )}> - -
- ); -}; - - -// Home screen -// -------------------------------------------------------- - -const AirAlarmControlHome = (props, context) => { - const { act, data } = useBackend(context); - const [screen, setScreen] = useLocalState(context, 'screen'); - const { - mode, - atmos_alarm, - } = data; - return ( - <> -
- - - - - - - - - - {thresholds.map(threshold => ( - - - {threshold.settings.map(setting => ( - - ))} - - ))} - -
- min2min1max1max2
- - {getGasLabel(threshold.name)} - - -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx b/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx deleted file mode 100644 index 3322705d090..00000000000 --- a/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import { useBackend, useLocalState } from '../backend'; -import { - Box, - Button, - LabeledList, - NumberInput, - Dropdown, - Section, - Stack, -} from '../components'; -import { Window } from '../layouts'; -import { - AtmosHandbookContent, - atmosHandbookHooks, -} from './common/AtmosHandbook'; -import { Gasmix, GasmixParser } from './common/GasmixParser'; - -type Chamber = { - id: string; - name: string; - gasmix?: Gasmix; - input_info?: { active: boolean; amount: number }; - output_info?: { active: boolean; amount: number }; -}; - -export const AtmosControlConsole = (props, context) => { - const { act, data } = useBackend<{ - chambers: Chamber[]; - maxInput: number; - maxOutput: number; - reconnecting: boolean; - control: boolean; - }>(context); - const chambers = data.chambers || []; - const [chamberId, setChamberId] = useLocalState( - context, - 'chamberId', - chambers[0]?.id - ); - const selectedChamber - = chambers.length === 1 - ? chambers[0] - : chambers.find((chamber) => chamber.id === chamberId); - const [setActiveGasId, setActiveReactionId] = atmosHandbookHooks(context); - return ( - - - {chambers.length > 1 && ( -
- chamber.name)} - selected={selectedChamber?.name} - onSelected={(value) => - setChamberId( - chambers.find((chamber) => chamber.name === value)?.id - || chambers[0].id)} - /> -
- )} -
act('reconnect')} - />) - }> - {!!selectedChamber && !!selectedChamber.gasmix ? ( - - ) : ( - {'No Sensors Detected!'} - )} -
- {!!selectedChamber && !!data.control && ( -
- - - {selectedChamber.input_info ? ( - - -
- )} - -
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/AtmosFilter.tsx b/tgui/packages/tgui/interfaces/AtmosFilter.tsx deleted file mode 100644 index 591a21496b3..00000000000 --- a/tgui/packages/tgui/interfaces/AtmosFilter.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { BooleanLike } from '../../common/react'; -import { useBackend } from '../backend'; -import { Button, LabeledList, NumberInput, Section } from '../components'; -import { Window } from '../layouts'; - -type Data = { - filter_types: Filter[]; - on: BooleanLike; - rate: number; - max_rate: number; -}; - -type Filter = { - f_type: number; - selected: BooleanLike; - name: string; - gas_id: number; -}; - -export const AtmosFilter = (props, context) => { - const { act, data } = useBackend(context); - const { filter_types = [], on, rate, max_rate } = data; - - return ( - - -
- - -
-
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx b/tgui/packages/tgui/interfaces/AtmosHandbook.tsx similarity index 87% rename from tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx rename to tgui/packages/tgui/interfaces/AtmosHandbook.tsx index a423fae5078..14acb864ed6 100644 --- a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx +++ b/tgui/packages/tgui/interfaces/AtmosHandbook.tsx @@ -1,5 +1,42 @@ +// todo: this here is a reminder that we need a popup atmos guide that you can pull up. + +import { Modal, Section } from "../components"; +import { FullGasContext } from "./common/Atmos"; + +interface AtmosGuideProps { + // gas context to pull from - must be full + gasContext: FullGasContext + // should we render as a section or modal? true for section. + embedded?: boolean; +} + +export const AtmosGuide = (props: AtmosGuideProps) => { + return props.embedded? ( +
+ +
+ ) : ( + + + + ); +}; + +const AtmosGuideInternal = (props: AtmosGuideProps) => { + // make the linter shut up + const { gasContext, embedded } = props; + // --- + + return ( + <> + Unimplemented + + ); +}; + +/* import { InfernoNode } from 'inferno'; -import { useBackend, useLocalState } from '../../backend'; +import { useBackend, useLocalState } from '../backend'; import { Box, Button, @@ -9,7 +46,8 @@ import { Section, Stack, Tooltip, -} from '../../components'; +} from '../components'; +*/ /** * This describes something that influences a particular reaction @@ -21,6 +59,7 @@ import { * desc = 'Influences the burn rate and consumption ratio.' */ +/* type Factor = { factor_id?: string; factor_type: 'gas' | 'misc'; @@ -242,3 +281,4 @@ export const atmosHandbookHooks = (context) => { ); return [setActiveGasId, setActiveReactionId]; }; +*/ diff --git a/tgui/packages/tgui/interfaces/GasAnalyzer.tsx b/tgui/packages/tgui/interfaces/GasAnalyzer.tsx deleted file mode 100644 index 96695edc2c5..00000000000 --- a/tgui/packages/tgui/interfaces/GasAnalyzer.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useBackend } from '../backend'; -import { GasmixParser } from './common/GasmixParser'; -import type { Gasmix } from './common/GasmixParser'; -import { - AtmosHandbookContent, - atmosHandbookHooks, -} from './common/AtmosHandbook'; -import { Window } from '../layouts'; -import { Section } from '../components'; - -export const GasAnalyzerContent = (props, context) => { - const { act, data } = useBackend<{ gasmixes: Gasmix[] }>(context); - const { gasmixes } = data; - const [setActiveGasId, setActiveReactionId] = atmosHandbookHooks(context); - return ( - <> - {gasmixes.map((gasmix) => ( -
- -
- ))} - - - ); -}; - -export const GasAnalyzer = (props, context) => { - return ( - - - - - - ); -}; - \ No newline at end of file diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Controls.js b/tgui/packages/tgui/interfaces/Hypertorus/Controls.js deleted file mode 100644 index 210dc379183..00000000000 --- a/tgui/packages/tgui/interfaces/Hypertorus/Controls.js +++ /dev/null @@ -1,207 +0,0 @@ -import { useBackend } from '../../backend'; -import { Box, Button, Icon, Knob, LabeledControls, LabeledList, NumberInput, Section, Tooltip } from '../../components'; -import { getGasLabel } from '../../constants'; -import { HelpDummy, HoverHelp } from './helpers'; - -/* - * This module holds user interactable controls. Some may be good candidates - * for generalizing and refactoring. - */ - -const ComboKnob = (props, context) => { - const { - color=false, - defaultValue, - icon, - flipIcon, - help, - minValue, - maxValue, - parameter, - step=5, - value, - ...rest - } = props; - - const { act, data } = useBackend(context); - - const iconProps = {}; - if (flipIcon) { - iconProps.rotation = 180; - } - - const icon_element = icon && (); - - return ( - - {help - ? ({icon_element}) - : icon_element} - act(parameter, { [parameter]: v })} - {...rest} - /> -