From f42c0b9b4ab862aef63dec7a7561b770f5a326c8 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sat, 11 Mar 2023 08:45:47 -0800 Subject: [PATCH] completely overhauls chemistry dispensers (#5132) Co-authored-by: silicons --- _maps/away_missions/140x140/snowfield.dmm | 2 +- _maps/away_missions/140x140/zoo.dmm | 2 +- .../mini_test/citadel_minitest-1.dmm | 2 +- _maps/map_files/rift/rift-02-underground2.dmm | 2 +- _maps/map_files/rift/rift-03-underground1.dmm | 2 +- _maps/map_files/rift/rift-04-surface1.dmm | 16 +- _maps/map_files/rift/rift-05-surface2.dmm | 4 +- _maps/map_files/rift/rift-06-surface3.dmm | 14 +- _maps/map_files/rift/rift-08-west_deep.dmm | 2 +- _maps/map_files/rift/rift-11-orbital.dmm | 6 +- _maps/map_files/tether/tether-01-surface1.dmm | 2 +- _maps/map_files/tether/tether-02-surface2.dmm | 6 +- _maps/map_files/tether/tether-03-surface3.dmm | 12 +- _maps/map_files/tether/tether-04-transit.dmm | 4 +- _maps/map_files/tether/tether-05-station1.dmm | 6 +- _maps/map_files/tether/tether-06-station2.dmm | 4 +- _maps/map_files/tether/tether_misc.dmm | 6 +- _maps/map_files/triumph/triumph-01-deck1.dmm | 2 +- _maps/map_files/triumph/triumph-02-deck2.dmm | 10 +- _maps/map_files/triumph/triumph-03-deck3.dmm | 2 +- _maps/map_files/triumph/triumph-04-deck4.dmm | 20 +- .../map_files/triumph/triumph-05-flagship.dmm | 12 +- _maps/map_levels/140x140/Class_M.dmm | 6 +- _maps/map_levels/140x140/lavaland.dmm | 4 +- _maps/map_levels/140x140/lavaland_dungeon.dmm | 2 +- _maps/map_levels/140x140/talon/talon1.dmm | 2 +- _maps/map_levels/140x140/talon/talon2.dmm | 6 +- _maps/map_levels/140x140/tradeport.dmm | 6 +- _maps/map_levels/140x140/virgo4_beach.dmm | 8 +- _maps/map_levels/192x192/Class_M.dmm | 6 +- _maps/map_levels/192x192/lavaland.dmm | 4 +- _maps/map_levels/192x192/miaphus_beach.dmm | 8 +- _maps/map_levels/192x192/tradeport.dmm | 6 +- _maps/rift-08-west_deep.dmm | 2 +- .../class_h/AuxiliaryResearchFacility.dmm | 6 +- .../level_specific/class_h/BunkerH.dmm | 4 +- .../level_specific/class_h/desertsaloon.dmm | 2 +- .../level_specific/class_h/highnoonH.dmm | 2 +- _maps/submaps/plains/Diner.dmm | 2 +- _maps/submaps/plains/Diner_vr.dmm | 2 +- _maps/templates/admin/dhael_centcom.dmm | 14 +- _maps/templates/admin/ert.dmm | 2 +- _maps/templates/admin/ert_base.dmm | 2 +- _maps/templates/admin/kk_mercship.dmm | 6 +- _maps/templates/admin/mercbase.dmm | 4 +- _maps/templates/admin/skipjack.dmm | 2 +- _maps/templates/admin/wizard.dmm | 2 +- _maps/templates/archive/tradeship.dmm | 2 +- _maps/templates/shelters/shelter_3.dmm | 4 +- .../shuttles/overmaps/generic/cruise_ship.dmm | 4 +- .../shuttles/overmaps/generic/cruiser.dmm | 8 +- .../shuttles/overmaps/generic/itglight.dmm | 4 +- citadel.dme | 29 +- code/__DEFINES/logging.dm | 2 + code/__DEFINES/misc/message_ranges.dm | 6 +- code/__DEFINES/procs/do_after.dm | 4 + code/__DEFINES/reagents/flags.dm | 11 + code/__HELPERS/_logging.dm | 6 + .../subsystem/processing/chemistry.dm | 24 +- code/game/atoms/defense.dm | 13 +- code/game/dna/dna_modifier.dm | 6 +- code/game/machinery/OpTable.dm | 4 - code/game/machinery/Sleeper.dm | 5 +- code/game/machinery/_machinery.dm | 6 +- code/game/machinery/adv_med.dm | 4 - code/game/machinery/air_alarm.dm | 4 +- code/game/machinery/atmoalter/canister.dm | 2 +- code/game/machinery/autolathe.dm | 1 - code/game/machinery/biogenerator.dm | 3 +- code/game/machinery/bioprinter.dm | 4 - code/game/machinery/bomb_tester.dm | 3 +- code/game/machinery/cell_charger.dm | 4 - code/game/machinery/cloning.dm | 3 +- code/game/machinery/computer/atmos_alert.dm | 10 +- code/game/machinery/cryo.dm | 2 +- code/game/machinery/cryopod.dm | 2 +- code/game/machinery/exonet_node.dm | 2 - code/game/machinery/jukebox.dm | 4 - code/game/machinery/mass_driver.dm | 4 - code/game/machinery/partslathe_vr.dm | 1 - code/game/machinery/pda_multicaster.dm | 6 +- code/game/machinery/pipe/pipelayer.dm | 1 - code/game/machinery/pointdefense.dm | 8 - code/game/machinery/recharger.dm | 4 - code/game/machinery/rechargestation.dm | 3 +- code/game/machinery/spaceheater.dm | 4 - code/game/machinery/telecomms/_telecomms.dm | 6 +- code/game/machinery/telecomms/broadcaster.dm | 4 - code/game/machinery/telecomms/bus.dm | 4 - code/game/machinery/telecomms/hub.dm | 4 - code/game/machinery/telecomms/processor.dm | 4 - code/game/machinery/telecomms/receiver.dm | 4 - code/game/machinery/telecomms/relay.dm | 4 - code/game/machinery/telecomms/server.dm | 4 - code/game/machinery/teleporter/pad.dm | 1 - code/game/machinery/teleporter/projector.dm | 1 - code/game/machinery/vitals_monitor.dm | 4 - code/game/machinery/vr_console.dm | 4 - code/game/machinery/washing_machine.dm | 4 - code/game/mecha/mech_bay.dm | 4 - code/game/mecha/mech_fabricator.dm | 2 - .../objects/items/devices/advnifrepair.dm | 6 +- code/game/objects/structures/watercloset.dm | 2 +- code/modules/admin/admin_investigate.dm | 46 - code/modules/admin/admin_verbs.dm | 1 - code/modules/admin/investigate.dm | 29 + .../binary_devices/algae_generator_vr.dm | 1 - .../binary_devices/binary_atmos_base.dm | 9 +- .../binary_devices/massive_gas_pump.dm | 1 - .../binary_devices/massive_heat_pump.dm | 1 - .../trinary_devices/trinary_base.dm | 12 +- .../machinery/components/unary/heat_source.dm | 4 - .../machinery/components/unary/unary_base.dm | 6 +- code/modules/detectivework/tools/rag.dm | 2 +- code/modules/economy/price_list.dm | 1043 +---------------- code/modules/events/supply_demand.dm | 4 +- code/modules/food/food/condiment.dm | 2 +- code/modules/food/food/snacks.dm | 4 +- .../food/kitchen/cooking_machines/fryer.dm | 2 +- code/modules/food/recipe_dump.dm | 4 +- code/modules/hydroponics/seed.dm | 2 +- .../subtypes/reagents.dm | 6 +- .../maps/misc_maps/lavaland/_lavaland.dm | 2 +- code/modules/materials/material_recipes.dm | 6 +- .../equipment_vendor.dm | 4 - .../silicon/robot/dogborg/dog_sleeper_vr.dm | 6 +- code/modules/overmap/disperser/disperser.dm | 7 - code/modules/paperwork/photocopier.dm | 4 - code/modules/power/breaker_box.dm | 1 - code/modules/power/fusion/core/_core.dm | 1 - .../fusion/fuel_assembly/fuel_compressor.dm | 4 - .../fusion/fuel_assembly/fuel_injector.dm | 1 - .../modules/power/fusion/gyrotron/gyrotron.dm | 1 - code/modules/power/port_gen.dm | 1 - code/modules/power/smes/smes_construction.dm | 2 +- code/modules/power/tesla/coil.dm | 2 - code/modules/power/turbine.dm | 2 - .../preference_setup/loadout/gear_tweaks.dm | 2 +- code/modules/reagents/chemistry/_readme.dm | 2 +- code/modules/reagents/chemistry/helpers.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 49 +- code/modules/reagents/chemistry/machinery.dm | 9 +- .../{chemical_reactions.dm => reaction.dm} | 8 +- code/modules/reagents/chemistry/reagent.dm | 20 +- .../reagents/chemistry/wiki_generation.dm | 60 + .../modules/reagents/machinery/chem_master.dm | 7 +- .../reagents/machinery/dispenser/_defines.dm | 8 - .../reagents/machinery/dispenser/cartridge.dm | 110 +- .../machinery/dispenser/cartridge_presets.dm | 203 ---- .../dispenser/cartridge_presets_vr.dm | 17 - .../machinery/dispenser/cartridge_spawn.dm | 13 - .../reagents/machinery/dispenser/dispenser.dm | 495 ++++++++ .../machinery/dispenser/dispenser2.dm | 194 --- .../machinery/dispenser/dispenser2_energy.dm | 62 - .../machinery/dispenser/dispenser_presets.dm | 205 ++-- .../dispenser/dispenser_presets_vr.dm | 73 -- .../machinery/dispenser/reagent_tank.dm | 487 -------- .../reagents/machinery/dispenser/supply.dm | 219 +--- .../machinery/dispenser/synthesizer.dm | 186 +++ .../reagents/machinery/reagent_dispenser.dm | 67 ++ .../machinery/reagent_dispenser/acid.dm | 12 + .../machinery/reagent_dispenser/beer.dm | 16 + .../machinery/reagent_dispenser/foam.dm | 10 + .../machinery/reagent_dispenser/fuel.dm | 129 ++ .../machinery/reagent_dispenser/helium.dm | 10 + .../machinery/reagent_dispenser/oil.dm | 34 + .../machinery/reagent_dispenser/pepper.dm | 12 + .../machinery/reagent_dispenser/virusfood.dm | 12 + .../machinery/reagent_dispenser/water.dm | 19 + .../reagent_dispenser/watercooler.dm | 138 +++ code/modules/reagents/reagent_containers.dm | 9 +- .../reagents/reagent_containers/borghydro.dm | 8 +- .../reagents/reagent_containers/cartridge.dm | 30 + .../reagents/reagent_containers/dropper.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 8 +- code/modules/research/circuitprinter.dm | 4 - .../designs/circuits/machines/chemistry.dm | 23 + code/modules/research/designs/misc.dm | 8 + code/modules/research/protolathe.dm | 4 - code/modules/research/rdconsole.dm | 2 +- code/modules/research/server.dm | 4 - code/modules/resleeving/machines.dm | 2 - code/modules/shieldgen/shield_diffuser.dm | 4 - code/modules/shieldgen/shield_generator.dm | 4 - code/modules/telesci/quantum_pad.dm | 1 - code/modules/telesci/telepad.dm | 1 - code/modules/virus2/effect.dm | 4 +- config/entries/lobby.txt | 1 + icons/items/misc/glue.dmi | Bin 0 -> 357 bytes icons/items/parts/reagent_synth.dmi | Bin 0 -> 455 bytes tgui/packages/common/collections.ts | 49 + .../{ProgressBar.js => ProgressBar.tsx} | 13 +- .../tgui/components/{Slider.js => Slider.tsx} | 23 +- ...sAlertConsole.js => AtmosAlertConsole.tsx} | 34 +- .../packages/tgui/interfaces/ChemDispenser.js | 170 --- .../tgui/interfaces/ChemDispenser.tsx | 244 ++++ .../tgui/interfaces/Mecha/MechStatPane.tsx | 4 +- .../tgui/interfaces/common/Reagents.tsx | 47 + 198 files changed, 2168 insertions(+), 3175 deletions(-) create mode 100644 code/__DEFINES/reagents/flags.dm delete mode 100644 code/modules/admin/admin_investigate.dm create mode 100644 code/modules/admin/investigate.dm rename code/modules/reagents/chemistry/{chemical_reactions.dm => reaction.dm} (98%) create mode 100644 code/modules/reagents/chemistry/wiki_generation.dm delete mode 100644 code/modules/reagents/machinery/dispenser/_defines.dm delete mode 100644 code/modules/reagents/machinery/dispenser/cartridge_presets.dm delete mode 100644 code/modules/reagents/machinery/dispenser/cartridge_presets_vr.dm delete mode 100644 code/modules/reagents/machinery/dispenser/cartridge_spawn.dm create mode 100644 code/modules/reagents/machinery/dispenser/dispenser.dm delete mode 100644 code/modules/reagents/machinery/dispenser/dispenser2.dm delete mode 100644 code/modules/reagents/machinery/dispenser/dispenser2_energy.dm delete mode 100644 code/modules/reagents/machinery/dispenser/dispenser_presets_vr.dm delete mode 100644 code/modules/reagents/machinery/dispenser/reagent_tank.dm create mode 100644 code/modules/reagents/machinery/dispenser/synthesizer.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/acid.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/beer.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/foam.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/fuel.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/helium.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/oil.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/pepper.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/virusfood.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/water.dm create mode 100644 code/modules/reagents/machinery/reagent_dispenser/watercooler.dm create mode 100644 code/modules/reagents/reagent_containers/cartridge.dm create mode 100644 code/modules/research/designs/circuits/machines/chemistry.dm create mode 100644 icons/items/misc/glue.dmi create mode 100644 icons/items/parts/reagent_synth.dmi rename tgui/packages/tgui/components/{ProgressBar.js => ProgressBar.tsx} (84%) rename tgui/packages/tgui/components/{Slider.js => Slider.tsx} (85%) rename tgui/packages/tgui/interfaces/{AtmosAlertConsole.js => AtmosAlertConsole.tsx} (54%) delete mode 100644 tgui/packages/tgui/interfaces/ChemDispenser.js create mode 100644 tgui/packages/tgui/interfaces/ChemDispenser.tsx create mode 100644 tgui/packages/tgui/interfaces/common/Reagents.tsx diff --git a/_maps/away_missions/140x140/snowfield.dmm b/_maps/away_missions/140x140/snowfield.dmm index ec4428d6cd9..c46478ef288 100644 --- a/_maps/away_missions/140x140/snowfield.dmm +++ b/_maps/away_missions/140x140/snowfield.dmm @@ -795,7 +795,7 @@ /area/awaymission/snowfield/base) "cg" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, diff --git a/_maps/away_missions/140x140/zoo.dmm b/_maps/away_missions/140x140/zoo.dmm index 58a7db06961..e1df005de35 100644 --- a/_maps/away_missions/140x140/zoo.dmm +++ b/_maps/away_missions/140x140/zoo.dmm @@ -657,7 +657,7 @@ /area/awaymission/zoo/tradeship) "cb" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/shuttle/floor/black, /area/awaymission/zoo/tradeship) "cc" = ( diff --git a/_maps/map_files/mini_test/citadel_minitest-1.dmm b/_maps/map_files/mini_test/citadel_minitest-1.dmm index d67df5cfdae..23ef41ee456 100644 --- a/_maps/map_files/mini_test/citadel_minitest-1.dmm +++ b/_maps/map_files/mini_test/citadel_minitest-1.dmm @@ -1009,7 +1009,7 @@ }, /area/tcommsat/chamber) "cp" = ( -/obj/machinery/pda_multicaster/prebuilt, +/obj/machinery/pda_multicaster, /turf/simulated/floor/tiled/dark{ initial_gas_mix = "n2=100;TEMP=80" }, diff --git a/_maps/map_files/rift/rift-02-underground2.dmm b/_maps/map_files/rift/rift-02-underground2.dmm index 75ed326b957..b6f4bad7f4f 100644 --- a/_maps/map_files/rift/rift-02-underground2.dmm +++ b/_maps/map_files/rift/rift-02-underground2.dmm @@ -10246,7 +10246,7 @@ /area/maintenance/lower/mining) "Ld" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /obj/effect/floor_decal/corner/white/diagonal, diff --git a/_maps/map_files/rift/rift-03-underground1.dmm b/_maps/map_files/rift/rift-03-underground1.dmm index a93642c4a25..ac4297dc4bd 100644 --- a/_maps/map_files/rift/rift-03-underground1.dmm +++ b/_maps/map_files/rift/rift-03-underground1.dmm @@ -9534,7 +9534,7 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "LE" = ( -/obj/machinery/pda_multicaster/prebuilt, +/obj/machinery/pda_multicaster, /turf/simulated/floor/tiled/dark, /area/tcommsat/chamber) "LF" = ( diff --git a/_maps/map_files/rift/rift-04-surface1.dmm b/_maps/map_files/rift/rift-04-surface1.dmm index 238148dd19f..24b6894d7de 100644 --- a/_maps/map_files/rift/rift-04-surface1.dmm +++ b/_maps/map_files/rift/rift-04-surface1.dmm @@ -4335,7 +4335,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/item/storage/box/glasses/meta{ pixel_x = -14 }, @@ -6836,7 +6836,7 @@ /turf/simulated/wall, /area/maintenance/engineering/pumpstation) "eFx" = ( -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/structure/table/woodentable, /turf/simulated/floor/reinforced, /area/maintenance/maint_bar) @@ -20930,7 +20930,7 @@ /area/maintenance/security/lower) "nzE" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 4 }, /turf/simulated/floor/wood, @@ -22650,7 +22650,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/surfaceone) "otX" = ( -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/structure/table/woodentable, /obj/item/stack/rods, /obj/item/stack/rods, @@ -31521,7 +31521,7 @@ /area/rift/surfacebase/outside/outside1) "ubH" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/machinery/light_construct/small{ dir = 1 }, @@ -33919,7 +33919,7 @@ /area/rnd/outpost/xenobiology/outpost_hallway) "vBD" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood, /area/maintenance/starboard) "vBV" = ( @@ -35005,7 +35005,7 @@ /area/quartermaster/garage) "wnB" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/plating, /area/maintenance/starboard) "wnK" = ( @@ -37254,7 +37254,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/outpost/xenobiology/outpost_decon) "xKh" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/structure/table/woodentable, /obj/structure/sign/poster{ pixel_y = 32 diff --git a/_maps/map_files/rift/rift-05-surface2.dmm b/_maps/map_files/rift/rift-05-surface2.dmm index eb2f61501dd..d831b27ba83 100644 --- a/_maps/map_files/rift/rift-05-surface2.dmm +++ b/_maps/map_files/rift/rift-05-surface2.dmm @@ -16512,7 +16512,7 @@ /area/security/hallway) "mfG" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/rift/station/public_garden/gantry) "mfM" = ( @@ -21781,7 +21781,7 @@ /area/medical/sleeper) "qjh" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/machinery/light{ dir = 1 }, diff --git a/_maps/map_files/rift/rift-06-surface3.dmm b/_maps/map_files/rift/rift-06-surface3.dmm index af44ba44967..d7667d6bf8f 100644 --- a/_maps/map_files/rift/rift-06-surface3.dmm +++ b/_maps/map_files/rift/rift-06-surface3.dmm @@ -7437,7 +7437,7 @@ /area/bridge/office) "aoC" = ( /obj/structure/table/wooden_reinforced, -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -15617,7 +15617,7 @@ "aFF" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ pixel_y = 4 }, /turf/simulated/floor/tiled/white, @@ -24002,7 +24002,7 @@ /area/ai_upload_foyer) "aXa" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/status_display{ pixel_y = 32 }, @@ -24370,7 +24370,7 @@ /area/maintenance/commandmaint) "aXJ" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_alc, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/tiled/steel_grid, /area/bridge/bunker) "aXK" = ( @@ -25640,7 +25640,7 @@ /area/crew_quarters/bar) "fxA" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ pixel_y = 7 }, /obj/effect/floor_decal/spline/plain, @@ -26133,7 +26133,7 @@ /area/maintenance/bar/lower) "qgY" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ pixel_y = 7 }, /obj/effect/floor_decal/spline/plain, @@ -26226,7 +26226,7 @@ /area/rift/surfacebase/outside/outside3) "tvp" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ pixel_y = 7 }, /obj/effect/floor_decal/spline/plain, diff --git a/_maps/map_files/rift/rift-08-west_deep.dmm b/_maps/map_files/rift/rift-08-west_deep.dmm index 19c0e5e9fc4..e39a56691cc 100644 --- a/_maps/map_files/rift/rift-08-west_deep.dmm +++ b/_maps/map_files/rift/rift-08-west_deep.dmm @@ -5228,7 +5228,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/wood, diff --git a/_maps/map_files/rift/rift-11-orbital.dmm b/_maps/map_files/rift/rift-11-orbital.dmm index c53869e23fb..e265d5d5993 100644 --- a/_maps/map_files/rift/rift-11-orbital.dmm +++ b/_maps/map_files/rift/rift-11-orbital.dmm @@ -5968,7 +5968,7 @@ /turf/simulated/floor/lino, /area/centcom/simulated/bar) "rT" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 8 }, /obj/structure/table/marble, @@ -5986,7 +5986,7 @@ /obj/machinery/camera/network/crescent{ dir = 1 }, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 1 }, /obj/structure/table/reinforced, @@ -5994,7 +5994,7 @@ /area/centcom/simulated/bar) "rX" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /turf/simulated/floor/lino, diff --git a/_maps/map_files/tether/tether-01-surface1.dmm b/_maps/map_files/tether/tether-01-surface1.dmm index dfe782748d2..f639f790ee5 100644 --- a/_maps/map_files/tether/tether-01-surface1.dmm +++ b/_maps/map_files/tether/tether-01-surface1.dmm @@ -18675,7 +18675,7 @@ /area/crew_quarters/visitor_dining) "aGy" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 8 }, /obj/machinery/floor_light/prebuilt{ diff --git a/_maps/map_files/tether/tether-02-surface2.dmm b/_maps/map_files/tether/tether-02-surface2.dmm index 808fb8af927..cc5778a9861 100644 --- a/_maps/map_files/tether/tether-02-surface2.dmm +++ b/_maps/map_files/tether/tether-02-surface2.dmm @@ -18931,7 +18931,7 @@ /area/bridge/meeting_room) "aIV" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /turf/simulated/floor/wood, @@ -22792,7 +22792,7 @@ /area/engineering/lower/breakroom) "aQW" = ( /obj/structure/table/glass, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -31440,7 +31440,7 @@ }, /area/tcommsat/chamber) "blc" = ( -/obj/machinery/pda_multicaster/prebuilt, +/obj/machinery/pda_multicaster, /turf/simulated/floor/tiled/dark{ initial_gas_mix = "n2=100;TEMP=80" }, diff --git a/_maps/map_files/tether/tether-03-surface3.dmm b/_maps/map_files/tether/tether-03-surface3.dmm index 42708c5af67..b5b1b1cc077 100644 --- a/_maps/map_files/tether/tether-03-surface3.dmm +++ b/_maps/map_files/tether/tether-03-surface3.dmm @@ -13710,7 +13710,7 @@ /area/vacant/vacant_shop) "axY" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/lino, @@ -30023,7 +30023,7 @@ /area/crew_quarters/bar) "bdu" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 8 }, /obj/machinery/light{ @@ -33083,7 +33083,7 @@ dir = 6 }, /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -34368,7 +34368,7 @@ name = "Kitchen Shutters" }, /obj/machinery/door/firedoor/glass, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /obj/effect/floor_decal/spline/plain{ @@ -40490,7 +40490,7 @@ /area/tether/surfacebase/security/hos) "sVw" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/shuttle/tourbus/general) "sWs" = ( @@ -41523,7 +41523,7 @@ /area/tether/surfacebase/security/upperhall) "vrU" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/machinery/light{ dir = 8 }, diff --git a/_maps/map_files/tether/tether-04-transit.dmm b/_maps/map_files/tether/tether-04-transit.dmm index 2898a4f79b4..ca370b81351 100644 --- a/_maps/map_files/tether/tether-04-transit.dmm +++ b/_maps/map_files/tether/tether-04-transit.dmm @@ -129,7 +129,7 @@ /area/maintenance/tether_midpoint) "nu" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/wood, @@ -626,7 +626,7 @@ /area/tether/elevator) "Xi" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 8 }, /turf/simulated/floor/wood, diff --git a/_maps/map_files/tether/tether-05-station1.dmm b/_maps/map_files/tether/tether-05-station1.dmm index c311c94e0ac..a2001739511 100644 --- a/_maps/map_files/tether/tether-05-station1.dmm +++ b/_maps/map_files/tether/tether-05-station1.dmm @@ -1648,7 +1648,7 @@ /obj/machinery/floor_light/prebuilt{ on = 1 }, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/hallway/station/atrium) "adN" = ( @@ -5825,7 +5825,7 @@ /obj/machinery/floor_light/prebuilt{ on = 1 }, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/wood, /area/hallway/station/atrium) "amH" = ( @@ -10048,7 +10048,7 @@ /area/engineering/break_room) "avL" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /obj/effect/floor_decal/corner/white/diagonal, diff --git a/_maps/map_files/tether/tether-06-station2.dmm b/_maps/map_files/tether/tether-06-station2.dmm index 1e02ad81108..2eb81d1388f 100644 --- a/_maps/map_files/tether/tether-06-station2.dmm +++ b/_maps/map_files/tether/tether-06-station2.dmm @@ -15056,7 +15056,7 @@ dir = 1 }, /obj/structure/table/wooden_reinforced, -/obj/machinery/chemical_dispenser/bar_alc{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ pixel_y = 10 }, /turf/simulated/floor/wood, @@ -21067,7 +21067,7 @@ /area/quartermaster/qm) "oYF" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/wood, /area/tether/station/visitorhallway/office) "oZR" = ( diff --git a/_maps/map_files/tether/tether_misc.dmm b/_maps/map_files/tether/tether_misc.dmm index 08968daa0a6..e77e5e2ee71 100644 --- a/_maps/map_files/tether/tether_misc.dmm +++ b/_maps/map_files/tether/tether_misc.dmm @@ -2486,7 +2486,7 @@ /area/centcom/simulated/medical) "mv" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/lino, /area/centcom/simulated/bar) "mF" = ( @@ -2744,7 +2744,7 @@ /turf/space/internal_edge/bottomright, /area/space) "qT" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 8 }, /obj/structure/table/marble, @@ -3670,7 +3670,7 @@ /area/centcom/simulated/restaurant) "Da" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/camera/network/crescent{ dir = 1 }, diff --git a/_maps/map_files/triumph/triumph-01-deck1.dmm b/_maps/map_files/triumph/triumph-01-deck1.dmm index e5c545545e8..b173b393bc7 100644 --- a/_maps/map_files/triumph/triumph-01-deck1.dmm +++ b/_maps/map_files/triumph/triumph-01-deck1.dmm @@ -8454,7 +8454,7 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/storage) "EV" = ( -/obj/machinery/pda_multicaster/prebuilt, +/obj/machinery/pda_multicaster, /turf/simulated/floor/tiled/dark{ initial_gas_mix = "n2=100;TEMP=80" }, diff --git a/_maps/map_files/triumph/triumph-02-deck2.dmm b/_maps/map_files/triumph/triumph-02-deck2.dmm index 77b302e5503..040dcefe640 100644 --- a/_maps/map_files/triumph/triumph-02-deck2.dmm +++ b/_maps/map_files/triumph/triumph-02-deck2.dmm @@ -1694,7 +1694,7 @@ /area/shuttle/belter) "fn" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -6934,7 +6934,7 @@ /obj/machinery/computer/security/telescreen{ pixel_x = 32 }, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ pixel_y = 8 }, /turf/simulated/floor/tiled/dark, @@ -10233,7 +10233,7 @@ dir = 4 }, /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/machinery/light{ dir = 1 }, @@ -14297,7 +14297,7 @@ dir = 4 }, /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/tiled/dark, /area/crew_quarters/bar) "RI" = ( @@ -14980,7 +14980,7 @@ pixel_y = 30 }, /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/tiled/dark, /area/crew_quarters/bar) "TB" = ( diff --git a/_maps/map_files/triumph/triumph-03-deck3.dmm b/_maps/map_files/triumph/triumph-03-deck3.dmm index 3c1162cb3a1..1f27a26a820 100644 --- a/_maps/map_files/triumph/triumph-03-deck3.dmm +++ b/_maps/map_files/triumph/triumph-03-deck3.dmm @@ -3319,7 +3319,7 @@ /area/medical/medbay4) "cTd" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/tiled/old_cargo/purple, /area/assembly/robotics) "cTv" = ( diff --git a/_maps/map_files/triumph/triumph-04-deck4.dmm b/_maps/map_files/triumph/triumph-04-deck4.dmm index b3716394ce2..e63fb490955 100644 --- a/_maps/map_files/triumph/triumph-04-deck4.dmm +++ b/_maps/map_files/triumph/triumph-04-deck4.dmm @@ -3108,7 +3108,7 @@ /area/hallway/secondary/civilian_hallway_mid) "ctm" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/wood, /area/maintenance/security/starboard) "ctv" = ( @@ -7658,7 +7658,7 @@ /area/security/warden) "fAN" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/wood, @@ -12656,7 +12656,7 @@ /area/security/brig) "jhL" = ( /obj/structure/table/steel, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/light{ dir = 4 }, @@ -15782,7 +15782,7 @@ /area/security/brig) "lxU" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/plating, /area/vacant/vacant_bar) "lxY" = ( @@ -20090,7 +20090,7 @@ /area/exploration/meeting) "oHO" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/light/small{ dir = 4 }, @@ -22163,7 +22163,7 @@ /area/crew_quarters/lounge) "qaR" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/machinery/alarm{ dir = 8; pixel_x = 24 @@ -23617,7 +23617,7 @@ /turf/simulated/floor/airless, /area/shuttle/civvie/cockpit) "qVj" = ( -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /obj/structure/table/woodentable, @@ -26605,7 +26605,7 @@ /area/hallway/secondary/docking_hallway) "sVx" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/bridge/meeting_room) "sVA" = ( @@ -30183,7 +30183,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/security_lockerroom) "vBD" = ( -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/structure/table/woodentable, /obj/machinery/light/small{ dir = 1 @@ -33783,7 +33783,7 @@ /area/security/lobby) "xXe" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/carpet/tealcarpet, /area/crew_quarters/sleep/CMO_quarters) "xXQ" = ( diff --git a/_maps/map_files/triumph/triumph-05-flagship.dmm b/_maps/map_files/triumph/triumph-05-flagship.dmm index 71f5256c852..ef52108e17c 100644 --- a/_maps/map_files/triumph/triumph-05-flagship.dmm +++ b/_maps/map_files/triumph/triumph-05-flagship.dmm @@ -2164,7 +2164,7 @@ /area/centcom/control) "dF" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/effect/floor_decal/corner/blue/diagonal{ dir = 4 }, @@ -7860,7 +7860,7 @@ /area/centcom/security) "oD" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/item/storage/box/glasses/square, /obj/effect/floor_decal/borderfloor{ dir = 9 @@ -9232,7 +9232,7 @@ /area/centcom/command) "rc" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/unsimulated/floor{ icon_state = "lino" }, @@ -13271,7 +13271,7 @@ /area/centcom/restaurant) "yM" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/machinery/camera/network/crescent, /turf/unsimulated/floor/steel{ icon = 'icons/turf/floors.dmi'; @@ -14254,7 +14254,7 @@ /area/centcom/bar) "Az" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/unsimulated/floor/steel{ icon = 'icons/turf/floors.dmi'; icon_state = "wood" @@ -14262,7 +14262,7 @@ /area/centcom/bar) "AA" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/unsimulated/floor/steel{ icon = 'icons/turf/floors.dmi'; icon_state = "wood" diff --git a/_maps/map_levels/140x140/Class_M.dmm b/_maps/map_levels/140x140/Class_M.dmm index 37b1cb520cf..bf7ff308aba 100644 --- a/_maps/map_levels/140x140/Class_M.dmm +++ b/_maps/map_levels/140x140/Class_M.dmm @@ -543,7 +543,7 @@ /area/class_m/inside) "na" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/structure/sign/double/barsign{ pixel_y = 32 }, @@ -821,7 +821,7 @@ /area/class_m/inside) "sk" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/light{ dir = 1 }, @@ -1761,7 +1761,7 @@ /area/class_m/inside) "MG" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood/classm, /area/class_m/inside) "MK" = ( diff --git a/_maps/map_levels/140x140/lavaland.dmm b/_maps/map_levels/140x140/lavaland.dmm index 64405ea57a4..145d7e4e0a8 100644 --- a/_maps/map_levels/140x140/lavaland.dmm +++ b/_maps/map_levels/140x140/lavaland.dmm @@ -182,7 +182,7 @@ /area/lavaland/central/base/common) "fh" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/effect/debris/cleanable/cobweb, /turf/simulated/floor/wood, /area/lavaland/central/base/common) @@ -451,7 +451,7 @@ /area/lavaland/central/base/common) "kq" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/lavaland/central/base/common) "kr" = ( diff --git a/_maps/map_levels/140x140/lavaland_dungeon.dmm b/_maps/map_levels/140x140/lavaland_dungeon.dmm index b78ceb54e81..18ce1ba21c1 100644 --- a/_maps/map_levels/140x140/lavaland_dungeon.dmm +++ b/_maps/map_levels/140x140/lavaland_dungeon.dmm @@ -582,7 +582,7 @@ /area/lavaland/dungeon/facility) "zq" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /obj/effect/floor_decal/spline/fancy{ diff --git a/_maps/map_levels/140x140/talon/talon1.dmm b/_maps/map_levels/140x140/talon/talon1.dmm index 67552a38691..f065c373b86 100644 --- a/_maps/map_levels/140x140/talon/talon1.dmm +++ b/_maps/map_levels/140x140/talon/talon1.dmm @@ -4753,7 +4753,7 @@ /area/talon/deckone/bridge_hallway) "Md" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "Mj" = ( diff --git a/_maps/map_levels/140x140/talon/talon2.dmm b/_maps/map_levels/140x140/talon/talon2.dmm index 5f075ca2259..ce5449f05b7 100644 --- a/_maps/map_levels/140x140/talon/talon2.dmm +++ b/_maps/map_levels/140x140/talon/talon2.dmm @@ -2567,7 +2567,7 @@ /area/talon/maintenance/decktwo_aft) "DQ" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1; req_access = "" }, @@ -2941,7 +2941,7 @@ /turf/simulated/floor/plating, /area/talon/maintenance/decktwo_aft) "Is" = ( -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /obj/structure/table/marble, @@ -3143,7 +3143,7 @@ /turf/simulated/wall/rshull, /area/talon/maintenance/decktwo_aft) "Kn" = ( -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 8 }, /obj/structure/table/marble, diff --git a/_maps/map_levels/140x140/tradeport.dmm b/_maps/map_levels/140x140/tradeport.dmm index 91f72d88ee8..db15f2ccf17 100644 --- a/_maps/map_levels/140x140/tradeport.dmm +++ b/_maps/map_levels/140x140/tradeport.dmm @@ -2469,7 +2469,7 @@ /area/tradeport/facility) "jB" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 1 }, /obj/effect/floor_decal/spline/plain, @@ -2477,7 +2477,7 @@ /area/tradeport/cafeteria) "jE" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/tiled/old_tile/gray, /area/shuttle/trade_ship/general) "jF" = ( @@ -11235,7 +11235,7 @@ /area/space) "QO" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /obj/machinery/light/small, diff --git a/_maps/map_levels/140x140/virgo4_beach.dmm b/_maps/map_levels/140x140/virgo4_beach.dmm index e8503c701c0..963d3ffae45 100644 --- a/_maps/map_levels/140x140/virgo4_beach.dmm +++ b/_maps/map_levels/140x140/virgo4_beach.dmm @@ -175,17 +175,17 @@ /area/tether_away/beach/resort/janibar) "aN" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/tether_away/beach/resort/janibar) "aO" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/wood, /area/tether_away/beach/resort/janibar) "aP" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood, /area/tether_away/beach/resort/janibar) "aQ" = ( @@ -787,7 +787,7 @@ /area/tether_away/beach/powershed) "mu" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/lino, diff --git a/_maps/map_levels/192x192/Class_M.dmm b/_maps/map_levels/192x192/Class_M.dmm index 00010161839..f0d2790d539 100644 --- a/_maps/map_levels/192x192/Class_M.dmm +++ b/_maps/map_levels/192x192/Class_M.dmm @@ -7,7 +7,7 @@ /area/class_m/outside) "aq" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood/classm, /area/class_m/inside) "aN" = ( @@ -292,7 +292,7 @@ /area/class_m/outside) "iQ" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/light{ dir = 1 }, @@ -988,7 +988,7 @@ /area/class_m/inside) "xX" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/structure/sign/double/barsign{ pixel_y = 32 }, diff --git a/_maps/map_levels/192x192/lavaland.dmm b/_maps/map_levels/192x192/lavaland.dmm index bf17122b9dc..6a5bfa1c936 100644 --- a/_maps/map_levels/192x192/lavaland.dmm +++ b/_maps/map_levels/192x192/lavaland.dmm @@ -1091,13 +1091,13 @@ /area/lavaland/central/base/common) "ui" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/effect/debris/cleanable/cobweb, /turf/simulated/floor/wood, /area/lavaland/central/base/common) "uk" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/lavaland/central/base/common) "ut" = ( diff --git a/_maps/map_levels/192x192/miaphus_beach.dmm b/_maps/map_levels/192x192/miaphus_beach.dmm index f2e815351e3..3df58bcd2ac 100644 --- a/_maps/map_levels/192x192/miaphus_beach.dmm +++ b/_maps/map_levels/192x192/miaphus_beach.dmm @@ -883,7 +883,7 @@ /area/tether_away/beach/resort/fishing) "fL" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/tiled/steel_dirty, /area/tether_away/beach/bunker/mess) "fO" = ( @@ -2451,7 +2451,7 @@ /area/tether_away/beach/aa) "td" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/tiled/steel_dirty, /area/tether_away/beach/bunker/mess) "tj" = ( @@ -3391,7 +3391,7 @@ /area/tether_away/beach/resort/bunk) "Ce" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 8 }, /turf/simulated/floor/tiled/old_tile/white, @@ -4994,7 +4994,7 @@ /area/tether_away/beach/desalinator) "QX" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/tiled/old_tile/white, diff --git a/_maps/map_levels/192x192/tradeport.dmm b/_maps/map_levels/192x192/tradeport.dmm index 95cfb0e9333..01f80e1c6f3 100644 --- a/_maps/map_levels/192x192/tradeport.dmm +++ b/_maps/map_levels/192x192/tradeport.dmm @@ -525,7 +525,7 @@ /area/tradeport/commhall) "cg" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/tiled/old_tile/gray, /area/shuttle/trade_ship/general) "ch" = ( @@ -9395,7 +9395,7 @@ /area/tradeport/cyndishow) "JW" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 1 }, /obj/effect/floor_decal/spline/plain, @@ -12938,7 +12938,7 @@ /area/shuttle/trade_ship/general) "XR" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /obj/machinery/light/small, diff --git a/_maps/rift-08-west_deep.dmm b/_maps/rift-08-west_deep.dmm index 6f7e3810e07..f097783361a 100644 --- a/_maps/rift-08-west_deep.dmm +++ b/_maps/rift-08-west_deep.dmm @@ -5228,7 +5228,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 8 }, /turf/simulated/floor/wood, diff --git a/_maps/submaps/level_specific/class_h/AuxiliaryResearchFacility.dmm b/_maps/submaps/level_specific/class_h/AuxiliaryResearchFacility.dmm index a40fbbaa84b..cb8809b6d06 100644 --- a/_maps/submaps/level_specific/class_h/AuxiliaryResearchFacility.dmm +++ b/_maps/submaps/level_specific/class_h/AuxiliaryResearchFacility.dmm @@ -136,7 +136,7 @@ /area/class_h/POIs/AuxiliaryResearchFacility) "cA" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/lino, /area/class_h/POIs/AuxiliaryResearchFacility) "cE" = ( @@ -431,7 +431,7 @@ /area/class_h/POIs/AuxiliaryResearchFacility) "jN" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/machinery/light{ dir = 4 }, @@ -2119,7 +2119,7 @@ /area/class_h/POIs/AuxiliaryResearchFacility) "Xw" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/lino, /area/class_h/POIs/AuxiliaryResearchFacility) "XD" = ( diff --git a/_maps/submaps/level_specific/class_h/BunkerH.dmm b/_maps/submaps/level_specific/class_h/BunkerH.dmm index 663f94a2b00..d8ebbf0045a 100644 --- a/_maps/submaps/level_specific/class_h/BunkerH.dmm +++ b/_maps/submaps/level_specific/class_h/BunkerH.dmm @@ -47,7 +47,7 @@ /area/class_h/POIs/vault) "cA" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /obj/effect/debris/cleanable/dirt, /obj/machinery/light{ dir = 1 @@ -622,7 +622,7 @@ /area/class_h/explored) "Vw" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/effect/debris/cleanable/dirt, /turf/simulated/floor/tiled, /area/class_h/POIs/vault) diff --git a/_maps/submaps/level_specific/class_h/desertsaloon.dmm b/_maps/submaps/level_specific/class_h/desertsaloon.dmm index b1a7df45523..f1370c50a51 100644 --- a/_maps/submaps/level_specific/class_h/desertsaloon.dmm +++ b/_maps/submaps/level_specific/class_h/desertsaloon.dmm @@ -8,7 +8,7 @@ /area/class_h/POIs/saloon) "bF" = ( /obj/structure/table/wooden_reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood/classh, /area/class_h/POIs/saloon) "cr" = ( diff --git a/_maps/submaps/level_specific/class_h/highnoonH.dmm b/_maps/submaps/level_specific/class_h/highnoonH.dmm index a5025cb5f29..2a4604b828d 100644 --- a/_maps/submaps/level_specific/class_h/highnoonH.dmm +++ b/_maps/submaps/level_specific/class_h/highnoonH.dmm @@ -121,7 +121,7 @@ /area/class_h/POIs/WW_Town) "ua" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood/classh, /area/class_h/POIs/WW_Town) "ug" = ( diff --git a/_maps/submaps/plains/Diner.dmm b/_maps/submaps/plains/Diner.dmm index f20bf5414f2..d37293b6c91 100644 --- a/_maps/submaps/plains/Diner.dmm +++ b/_maps/submaps/plains/Diner.dmm @@ -342,7 +342,7 @@ /area/submap/Diner) "be" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/tiled/white, /area/submap/Diner) "bf" = ( diff --git a/_maps/submaps/plains/Diner_vr.dmm b/_maps/submaps/plains/Diner_vr.dmm index c7a607ff7f9..67d63b084b6 100644 --- a/_maps/submaps/plains/Diner_vr.dmm +++ b/_maps/submaps/plains/Diner_vr.dmm @@ -354,7 +354,7 @@ /area/submap/Diner) "bh" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/tiled/white, /area/submap/Diner) "bi" = ( diff --git a/_maps/templates/admin/dhael_centcom.dmm b/_maps/templates/admin/dhael_centcom.dmm index a54f88be465..4b7cf3518b7 100644 --- a/_maps/templates/admin/dhael_centcom.dmm +++ b/_maps/templates/admin/dhael_centcom.dmm @@ -1419,7 +1419,7 @@ /area/centcom/control) "dF" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/effect/floor_decal/corner/blue/diagonal{ dir = 4 }, @@ -3235,7 +3235,7 @@ /area/centcom/evac) "iR" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/unsimulated/floor/steel{ icon = 'icons/turf/floors.dmi'; icon_state = "wood" @@ -5026,7 +5026,7 @@ /area/centcom/security) "oD" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/item/storage/box/glasses/square, /obj/effect/floor_decal/borderfloor{ dir = 9 @@ -6372,7 +6372,7 @@ /area/centcom/command) "rc" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/unsimulated/floor{ icon_state = "lino" }, @@ -11022,7 +11022,7 @@ /area/centcom/security) "HM" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /obj/machinery/camera/network/crescent, /turf/unsimulated/floor/steel{ icon = 'icons/turf/floors.dmi'; @@ -12069,7 +12069,7 @@ /area/centcom/specops) "LR" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/unsimulated/floor/steel{ icon = 'icons/turf/floors.dmi'; icon_state = "wood" @@ -14081,7 +14081,7 @@ /area/centcom/security) "TY" = ( /obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /turf/unsimulated/floor{ icon_state = "dark" }, diff --git a/_maps/templates/admin/ert.dmm b/_maps/templates/admin/ert.dmm index 89ad335924c..56205ffc420 100644 --- a/_maps/templates/admin/ert.dmm +++ b/_maps/templates/admin/ert.dmm @@ -3243,7 +3243,7 @@ /area/ship/ert/med) "yJ" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /obj/item/reagent_containers/glass/beaker/large, /obj/machinery/light, /turf/simulated/floor/tiled/techfloor, diff --git a/_maps/templates/admin/ert_base.dmm b/_maps/templates/admin/ert_base.dmm index 6e206b8d87b..8043163265a 100644 --- a/_maps/templates/admin/ert_base.dmm +++ b/_maps/templates/admin/ert_base.dmm @@ -248,7 +248,7 @@ /area/shuttle/specops/centcom) "aD" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /obj/item/reagent_containers/glass/beaker/large, /turf/simulated/shuttle/floor/black, /area/shuttle/specops/centcom) diff --git a/_maps/templates/admin/kk_mercship.dmm b/_maps/templates/admin/kk_mercship.dmm index 4964d01baf4..7871a4aac88 100644 --- a/_maps/templates/admin/kk_mercship.dmm +++ b/_maps/templates/admin/kk_mercship.dmm @@ -972,7 +972,7 @@ /turf/simulated/floor/tiled/white, /area/ship/manta/med) "eF" = ( -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /obj/structure/table/steel_reinforced, /obj/item/reagent_containers/glass/beaker/large, /obj/effect/floor_decal/techfloor{ @@ -5235,7 +5235,7 @@ /area/ship/manta/armoury_as) "zo" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full{ +/obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 1 }, /obj/effect/floor_decal/techfloor, @@ -7956,7 +7956,7 @@ /turf/simulated/wall/rshull, /area/ship/manta/radiator_port) "Or" = ( -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 4 }, /obj/structure/table/woodentable, diff --git a/_maps/templates/admin/mercbase.dmm b/_maps/templates/admin/mercbase.dmm index ec4d98f9142..73442a61c87 100644 --- a/_maps/templates/admin/mercbase.dmm +++ b/_maps/templates/admin/mercbase.dmm @@ -1116,7 +1116,7 @@ /area/antag/antag_base) "bN" = ( /obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/unsimulated/floor{ icon_state = "cult"; name = "plating" @@ -2394,7 +2394,7 @@ /area/antag/antag_base) "dS" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/unsimulated/floor{ icon_state = "white" }, diff --git a/_maps/templates/admin/skipjack.dmm b/_maps/templates/admin/skipjack.dmm index f8d798db7bb..b5cc4cb92a6 100644 --- a/_maps/templates/admin/skipjack.dmm +++ b/_maps/templates/admin/skipjack.dmm @@ -105,7 +105,7 @@ /area/skipjack_station) "aq" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/unsimulated/floor{ icon_state = "white" }, diff --git a/_maps/templates/admin/wizard.dmm b/_maps/templates/admin/wizard.dmm index 94ff13228cd..b5952d69bcf 100644 --- a/_maps/templates/admin/wizard.dmm +++ b/_maps/templates/admin/wizard.dmm @@ -13,7 +13,7 @@ }, /area/wizard_station) "ad" = ( -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/structure/table/marble, /turf/unsimulated/floor{ icon_state = "white" diff --git a/_maps/templates/archive/tradeship.dmm b/_maps/templates/archive/tradeship.dmm index 7e1f08e6699..011cbda60b6 100644 --- a/_maps/templates/archive/tradeship.dmm +++ b/_maps/templates/archive/tradeship.dmm @@ -291,7 +291,7 @@ /area/shuttle/trade) "aR" = ( /obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/shuttle/floor/black, /area/shuttle/trade) "aS" = ( diff --git a/_maps/templates/shelters/shelter_3.dmm b/_maps/templates/shelters/shelter_3.dmm index b392908adc2..6cbf727d46b 100644 --- a/_maps/templates/shelters/shelter_3.dmm +++ b/_maps/templates/shelters/shelter_3.dmm @@ -25,12 +25,12 @@ /area/survivalpod) "f" = ( /obj/structure/table/gamblingtable, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/shuttle/floor/voidcraft/dark, /area/survivalpod) "g" = ( /obj/structure/table/gamblingtable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /obj/machinery/light{ dir = 1 }, diff --git a/_maps/templates/shuttles/overmaps/generic/cruise_ship.dmm b/_maps/templates/shuttles/overmaps/generic/cruise_ship.dmm index 5326f50d4a1..25592f635c3 100644 --- a/_maps/templates/shuttles/overmaps/generic/cruise_ship.dmm +++ b/_maps/templates/shuttles/overmaps/generic/cruise_ship.dmm @@ -458,7 +458,7 @@ /area/shuttle/cruise_ship) "QK" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_coffee/full{ +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 4 }, /turf/simulated/floor/wood, @@ -574,7 +574,7 @@ /area/shuttle/cruise_ship) "YK" = ( /obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_alc/full{ +/obj/machinery/chemical_dispenser/catering/bar_alc{ dir = 4 }, /turf/simulated/floor/wood, diff --git a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm index 58e00fd1b77..6be130643e3 100644 --- a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm +++ b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm @@ -414,17 +414,17 @@ /area/mothership/breakroom) "aY" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/chemical_dispenser/catering/bar_alc, /turf/simulated/floor/wood, /area/mothership/breakroom) "aZ" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/wood, /area/mothership/breakroom) "ba" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/chemical_dispenser/catering/bar_coffee, /turf/simulated/floor/wood, /area/mothership/breakroom) "bb" = ( @@ -2613,7 +2613,7 @@ }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on, /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /turf/simulated/floor/tiled/white, /area/mothership/chemistry) "fN" = ( diff --git a/_maps/templates/shuttles/overmaps/generic/itglight.dmm b/_maps/templates/shuttles/overmaps/generic/itglight.dmm index 94d9201fd0f..0c7d61ca1ea 100644 --- a/_maps/templates/shuttles/overmaps/generic/itglight.dmm +++ b/_maps/templates/shuttles/overmaps/generic/itglight.dmm @@ -6432,7 +6432,7 @@ /turf/simulated/floor, /area/itglight/portengi) "RZ" = ( -/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/machinery/chemical_dispenser/biochemistry, /obj/structure/table/reinforced, /obj/machinery/light{ dir = 8 @@ -7451,7 +7451,7 @@ /area/itglight/showers) "Zd" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/catering/bar_soft, /turf/simulated/floor/tiled/eris/cafe, /area/itglight/kitchen) "Zf" = ( diff --git a/citadel.dme b/citadel.dme index 05d19913f9f..25000494952 100644 --- a/citadel.dme +++ b/citadel.dme @@ -225,6 +225,7 @@ #include "code\__DEFINES\radiation\insulation.dm" #include "code\__DEFINES\radiation\mobs.dm" #include "code\__DEFINES\radiation\simulation.dm" +#include "code\__DEFINES\reagents\flags.dm" #include "code\__DEFINES\rendering\alert.dm" #include "code\__DEFINES\rendering\ao.dm" #include "code\__DEFINES\rendering\atom_huds.dm" @@ -1775,7 +1776,6 @@ #include "code\modules\actionspeed\modifiers\base.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_attack_log.dm" -#include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_memo.dm" #include "code\modules\admin\admin_ranks.dm" #include "code\modules\admin\admin_secrets.dm" @@ -1788,6 +1788,7 @@ #include "code\modules\admin\create_object.dm" #include "code\modules\admin\create_turf.dm" #include "code\modules\admin\holder2.dm" +#include "code\modules\admin\investigate.dm" #include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\map_capture.dm" #include "code\modules\admin\NewBan.dm" @@ -3862,13 +3863,14 @@ #include "code\modules\reagents\reagent_containers.dm" #include "code\modules\reagents\Topical-Recipes.dm" #include "code\modules\reagents\chemistry\_readme.dm" -#include "code\modules\reagents\chemistry\chemical_reactions.dm" #include "code\modules\reagents\chemistry\colors.dm" #include "code\modules\reagents\chemistry\helpers.dm" #include "code\modules\reagents\chemistry\holder.dm" #include "code\modules\reagents\chemistry\logging.dm" #include "code\modules\reagents\chemistry\machinery.dm" #include "code\modules\reagents\chemistry\metabolism.dm" +#include "code\modules\reagents\chemistry\reaction.dm" +#include "code\modules\reagents\chemistry\wiki_generation.dm" #include "code\modules\reagents\chemistry\reagent.dm" #include "code\modules\reagents\chemistry\reagents\Chemistry-Reagents-Core.dm" #include "code\modules\reagents\chemistry\reagents\Chemistry-Reagents-Dispenser.dm" @@ -3883,20 +3885,26 @@ #include "code\modules\reagents\distilling\Distilling-Recipes.dm" #include "code\modules\reagents\distilling\distilling.dm" #include "code\modules\reagents\machinery\chem_master.dm" -#include "code\modules\reagents\machinery\dispenser\_defines.dm" +#include "code\modules\reagents\machinery\reagent_dispenser.dm" #include "code\modules\reagents\machinery\dispenser\cartridge.dm" -#include "code\modules\reagents\machinery\dispenser\cartridge_presets.dm" -#include "code\modules\reagents\machinery\dispenser\cartridge_presets_vr.dm" -#include "code\modules\reagents\machinery\dispenser\cartridge_spawn.dm" -#include "code\modules\reagents\machinery\dispenser\dispenser2.dm" -#include "code\modules\reagents\machinery\dispenser\dispenser2_energy.dm" +#include "code\modules\reagents\machinery\dispenser\dispenser.dm" #include "code\modules\reagents\machinery\dispenser\dispenser_presets.dm" -#include "code\modules\reagents\machinery\dispenser\dispenser_presets_vr.dm" -#include "code\modules\reagents\machinery\dispenser\reagent_tank.dm" #include "code\modules\reagents\machinery\dispenser\supply.dm" +#include "code\modules\reagents\machinery\dispenser\synthesizer.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\acid.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\beer.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\foam.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\fuel.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\helium.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\oil.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\pepper.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\virusfood.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\water.dm" +#include "code\modules\reagents\machinery\reagent_dispenser\watercooler.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\blood_pack_vr.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" +#include "code\modules\reagents\reagent_containers\cartridge.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\glass.dm" #include "code\modules\reagents\reagent_containers\hard_candy.dm" @@ -3963,6 +3971,7 @@ #include "code\modules\research\designs\circuits\disks.dm" #include "code\modules\research\designs\circuits\machine.dm" #include "code\modules\research\designs\circuits\computers\misc.dm" +#include "code\modules\research\designs\circuits\machines\chemistry.dm" #include "code\modules\research\designs\circuits\machines\misc.dm" #include "code\modules\resleeving\circuitboards.dm" #include "code\modules\resleeving\computers.dm" diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index 59a3bd350ff..4ebe5609ddf 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -17,6 +17,7 @@ GLOBAL_VAR(##gvar); #define INVESTIGATE_CIRCUIT "circuit" #define INVESTIGATE_PRESENTS "presents" #define INVESTIGATE_RADIATION "radiation" +#define INVESTIGATE_REAGENTS "reagents" #define INVESTIGATE_RECORDS "records" #define INVESTIGATE_SINGULO "singulo" #define INVESTIGATE_SUPERMATTER "supermatter" @@ -27,6 +28,7 @@ GLOBAL_VAR(##gvar); INVESTIGATE_CIRCUIT, \ INVESTIGATE_PRESENTS, \ INVESTIGATE_RADIATION, \ + INVESTIGATE_REAGENTS, \ INVESTIGATE_RECORDS, \ INVESTIGATE_SINGULO, \ INVESTIGATE_SUPERMATTER, \ diff --git a/code/__DEFINES/misc/message_ranges.dm b/code/__DEFINES/misc/message_ranges.dm index 434af54c848..ac904468230 100644 --- a/code/__DEFINES/misc/message_ranges.dm +++ b/code/__DEFINES/misc/message_ranges.dm @@ -6,6 +6,10 @@ #define MESSAGE_RANGE_COMBAT_LOUD 7 /// message range for most construction / deconstruction actions -#define MESSAGE_RANGE_CONSTRUCTION 5 +#define MESSAGE_RANGE_CONSTRUCTION 3 /// message range for most machine / structure configuration actions #define MESSAGE_RANGE_CONFIGURATION 3 +/// silent-ish inv ops like swapping beacons +#define MESSAGE_RANGE_INVENTORY_SOFT 3 +/// hard-ish inv ops like taking things out of backpacks +#define MESSAGE_RANGE_INVENTORY_HARD 7 diff --git a/code/__DEFINES/procs/do_after.dm b/code/__DEFINES/procs/do_after.dm index b6714e95754..6fb0882a5c2 100644 --- a/code/__DEFINES/procs/do_after.dm +++ b/code/__DEFINES/procs/do_after.dm @@ -52,3 +52,7 @@ #define INTERACTING_FOR_DO_AFTER "do_after" /// Dynaimc tool usage in progress #define INTERACTING_FOR_DYNAMIC_TOOL "dynamic_tools" +/// Generic 'something' in attack hand +#define INTERACTING_FOR_ATTACK_HAND "attack_hand" +/// Generic 'something' in alt click +#define INTERACTING_FOR_ALT_CLICK "alt_click" diff --git a/code/__DEFINES/reagents/flags.dm b/code/__DEFINES/reagents/flags.dm new file mode 100644 index 00000000000..5e8296150bf --- /dev/null +++ b/code/__DEFINES/reagents/flags.dm @@ -0,0 +1,11 @@ +//? flags for /datum/reagents/var/reagent_holder_flags + +// none yet + +//? flags for /datum/reagent/var/reagent_flags + +// none yet + +//? flags for /datum/chemical_reaction/var/chemical_reaction_flags + +// none yet diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 622fe7c6efd..501ab7a5f42 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -391,6 +391,12 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) else if(A.loc) return "(UNKNOWN (?, ?, ?))" +/proc/ref_name(atom/A) + return "[A] ([REF(A)])" + +/proc/ref_name_path(atom/A) + return "[A] ([REF(A)]) \[[A.type]\]" + /// VSTATION SPECIFIC LOGGING. /// /proc/log_debug(text) if (config_legacy.log_debug) diff --git a/code/controllers/subsystem/processing/chemistry.dm b/code/controllers/subsystem/processing/chemistry.dm index 7cc072d8505..d42a5d360a4 100644 --- a/code/controllers/subsystem/processing/chemistry.dm +++ b/code/controllers/subsystem/processing/chemistry.dm @@ -3,13 +3,17 @@ PROCESSING_SUBSYSTEM_DEF(chemistry) wait = 10 subsystem_flags = SS_BACKGROUND|SS_POST_FIRE_TIMING init_order = INIT_ORDER_CHEMISTRY + + /// id to instance dict of reagents + var/list/reagent_lookup = list() + var/list/chemical_reactions = list() var/list/chemical_reactions_by_reagent = list() - var/list/chemical_reagents = list() + /datum/controller/subsystem/processing/chemistry/Recover() chemical_reactions = SSchemistry.chemical_reactions - chemical_reagents = SSchemistry.chemical_reagents + reagent_lookup = SSchemistry.reagent_lookup // honestly hate that we have to do this but some things INITIALIZE_IMMEDIATE so uh fuck me I guess! /datum/controller/subsystem/processing/chemistry/PreInit(recovering) @@ -41,9 +45,19 @@ PROCESSING_SUBSYSTEM_DEF(chemistry) /// Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id /datum/controller/subsystem/processing/chemistry/proc/initialize_chemical_reagents() var/paths = typesof(/datum/reagent) - /datum/reagent - chemical_reagents = list() - for(var/path in paths) + reagent_lookup = list() + for(var/datum/reagent/path as anything in paths) + if(initial(path.abstract_type) == path) + continue var/datum/reagent/D = new path() if(!D.name) continue - chemical_reagents[D.id] = D + reagent_lookup[D.id] = D + +/** + * fetches the instance of a reagent + * + * do not edit the returned instance, it is global! + */ +/datum/controller/subsystem/processing/chemistry/proc/get_reagent(datum/reagent/id_or_path) + return reagent_lookup[ispath(id_or_path)? initial(id_or_path.id) : id_or_path] diff --git a/code/game/atoms/defense.dm b/code/game/atoms/defense.dm index 4a1a3534981..0d0a2057e77 100644 --- a/code/game/atoms/defense.dm +++ b/code/game/atoms/defense.dm @@ -34,7 +34,18 @@ * called to drop the products of deconstruction * * @params - * - method - how we were deconstructed + * * method - how we were deconstructed */ /atom/proc/drop_products(method) return + +/** + * called to move a product to a place + * + * @params + * * method - how we were deconstructed + * * dropping - movable in question + * * where - where to move to + */ +/atom/proc/drop_product(method, atom/movable/dropping, atom/where) + dropping.forceMove(where || drop_location()) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 601460a18d1..00ce70a3195 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -49,7 +49,7 @@ use_power = USE_POWER_IDLE idle_power_usage = 50 active_power_usage = 300 - interact_offline = TRUE + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON circuit = /obj/item/circuitboard/clonescanner var/locked = FALSE @@ -57,10 +57,6 @@ var/mob/living/carbon/occupant = null var/obj/item/reagent_containers/glass/beaker = null -/obj/machinery/dna_scannernew/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/dna_scannernew/relaymove(mob/user) if (user.stat) return diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 6826953537d..0a95097a387 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -15,10 +15,6 @@ var/strapped = FALSE var/obj/machinery/computer/operating/computer = null -/obj/machinery/optable/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/optable/Initialize(mapload) . = ..() for(var/direction in list(NORTH,EAST,SOUTH,WEST)) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 0668e89e52e..e5311057165 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -8,7 +8,7 @@ dir = 8 use_power = USE_POWER_IDLE idle_power_usage = 40 - interact_offline = TRUE + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON circuit = /obj/item/circuitboard/sleeper_console /obj/machinery/sleep_console/Initialize(mapload, newdir) @@ -106,7 +106,7 @@ else data["occupant"] = 0 if(S.beaker) - data["beaker"] = S.beaker.reagents.get_free_space() + data["beaker"] = S.beaker.reagents.available_volume() else data["beaker"] = -1 data["filtering"] = S.filtering @@ -182,7 +182,6 @@ /obj/machinery/sleeper/Initialize(mapload) . = ..() beaker = new /obj/item/reagent_containers/glass/beaker/large(src) - default_apply_parts() /obj/machinery/sleeper/Destroy() if(console) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 18efb2ccb86..63e2c1fd57b 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -139,8 +139,6 @@ var/clicksound ///Volume of interface sounds. var/clickvol = 40 - ///Can the machine be interacted with while de-powered. - var/interact_offline = FALSE var/obj/item/circuitboard/circuit = null ///If false, SSmachines. If true, SSfastprocess. var/speed_process = FALSE @@ -156,6 +154,7 @@ if(ispath(circuit)) circuit = new circuit(src) + default_apply_parts() if(!speed_process) START_MACHINE_PROCESSING(src) @@ -244,7 +243,7 @@ return (machine_stat & (NOPOWER | BROKEN | additional_flags)) /obj/machinery/CanUseTopic(mob/user) - if(!interact_offline && (machine_stat & (NOPOWER | BROKEN))) + if(!(interaction_flags_machine & INTERACT_MACHINE_OFFLINE) && (machine_stat & (NOPOWER | BROKEN))) return UI_CLOSE return ..() @@ -470,6 +469,7 @@ /obj/machinery/proc/dismantle() 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(!circuit) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 40b8308c7d2..811fed49874 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -15,10 +15,6 @@ light_color = "#00FF00" var/obj/machinery/body_scanconsole/console -/obj/machinery/bodyscanner/Initialize(mapload, newdir) - . = ..() - default_apply_parts() - /obj/machinery/bodyscanner/Destroy() if(console) console.scanner = null diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 17e95076ed4..b4b2d977a7e 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -664,7 +664,7 @@ GLOBAL_LIST_EMPTY(air_alarms) data["thresholds"] = thresholds return data -/obj/machinery/alarm/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) +/obj/machinery/alarm/ui_act(action, params, datum/tgui/ui) if(..()) return TRUE @@ -696,7 +696,7 @@ GLOBAL_LIST_EMPTY(air_alarms) // 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(state, /datum/ui_state/air_alarm_remote)) || (issilicon(usr) && aidisabled)) + if((locked && !issilicon(usr) && !istype(ui.state, /datum/ui_state/air_alarm_remote)) || (issilicon(usr) && aidisabled)) return var/device_id = params["id_tag"] diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index ff229296951..9a0d9c0aa36 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/atmos.dmi' icon_state = "yellow" density = 1 + interaction_flags_machine = INTERACT_MACHINE_OFFLINE var/health = 100.0 w_class = ITEMSIZE_HUGE @@ -37,7 +38,6 @@ var/temperature_resistance = 1000 + T0C volume = 1000 use_power = USE_POWER_OFF - interact_offline = 1 // Allows this to be used when not in powered area. var/update_flag = 0 /obj/machinery/portable_atmospherics/canister/nitrous_oxide diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index ab6ca90d674..9256845dabb 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -37,7 +37,6 @@ if(!autolathe_recipes) autolathe_recipes = new() wires = new(src) - default_apply_parts() /obj/machinery/autolathe/Destroy() QDEL_NULL(wires) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index f9ac2449007..8d31732f188 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -61,7 +61,6 @@ R.my_atom = src beaker = new /obj/item/reagent_containers/glass/bottle(src) - default_apply_parts() item_list = list() item_list["Food Items"] = list( @@ -216,7 +215,7 @@ if(cost > points) to_chat(usr, SPAN_DANGER("Insufficient biomass.")) return - var/amt_to_actually_dispense = round(min(beaker.reagents.get_free_space(), br.reagent_amt)) + var/amt_to_actually_dispense = round(min(beaker.reagents.available_volume(), br.reagent_amt)) if(amt_to_actually_dispense <= 0) to_chat(usr, SPAN_DANGER("The loaded beaker is full!")) return diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index e5e498d1215..f5b03542472 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -61,10 +61,6 @@ "Adrenal Valve Cluster" = list(/obj/item/organ/internal/heart/replicant/rage, 80) ) -/obj/machinery/organ_printer/Initialize(mapload, newdir) - . = ..() - default_apply_parts() - /obj/machinery/organ_printer/update_icon_state() . = ..() if(machine_stat & NOPOWER) diff --git a/code/game/machinery/bomb_tester.dm b/code/game/machinery/bomb_tester.dm index 8d9dbd58a2b..48d68ca5326 100644 --- a/code/game/machinery/bomb_tester.dm +++ b/code/game/machinery/bomb_tester.dm @@ -36,8 +36,7 @@ var/faketank_integrity /obj/machinery/bomb_tester/Initialize(mapload) - .=..() - default_apply_parts() + . = ..() faketank = new /obj/machinery/bomb_tester/Destroy() diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index eecab2e25ff..f631634ec3d 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -16,10 +16,6 @@ var/obj/item/cell/charging = null circuit = /obj/item/circuitboard/cell_charger -/obj/machinery/cell_charger/Initialize(mapload, newdir) - . = ..() - default_apply_parts() - /obj/machinery/cell_charger/update_icon() icon_state = "ccharger[charging ? 1 : 0]" diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 0a51789ea33..cf2de35d7fa 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -51,9 +51,8 @@ /// How many beakers can the machine hold? var/container_limit = 3 -/obj/machinery/clonepod/Initialize(mapload, newdir) +/obj/machinery/clonepod/Initialize(mapload) . = ..() - default_apply_parts() update_icon() /obj/machinery/clonepod/attack_ai(mob/user) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 3cd803d3e7a..921e28aebaa 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -22,14 +22,14 @@ var/global/list/minor_air_alarms = list() /obj/machinery/computer/atmos_alert/attack_hand(mob/user, list/params) ui_interact(user) -/obj/machinery/computer/atmos_alert/ui_interact(mob/user, datum/tgui/ui) +/obj/machinery/computer/atmos_alert/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "AtmosAlertConsole", name) ui.open() /obj/machinery/computer/atmos_alert/ui_data(mob/user) - var/list/data = list() + . = ..() var/list/major_alarms = list() var/list/minor_alarms = list() @@ -39,10 +39,8 @@ var/global/list/minor_air_alarms = list() for(var/datum/alarm/alarm in atmosphere_alarm.minor_alarms()) minor_alarms[++minor_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") - data["priority_alarms"] = major_alarms - data["minor_alarms"] = minor_alarms - - return data + .["priority_alarms"] = major_alarms + .["minor_alarms"] = minor_alarms /obj/machinery/computer/atmos_alert/update_icon() if(!(machine_stat & (NOPOWER|BROKEN))) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index ab1976aa188..22b551cc206 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -7,7 +7,7 @@ density = TRUE anchored = TRUE layer = UNDER_JUNK_LAYER - interact_offline = TRUE + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON var/on = FALSE use_power = USE_POWER_IDLE diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 9ade7477847..7eae65922e8 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -15,7 +15,7 @@ icon_state = "cellconsole" circuit = /obj/item/circuitboard/cryopodcontrol density = FALSE - interact_offline = TRUE + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON var/mode = null //Used for logging people entering cryosleep and important items they are carrying. diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm index af8ea1c7f25..b13157631a2 100644 --- a/code/game/machinery/exonet_node.dm +++ b/code/game/machinery/exonet_node.dm @@ -23,8 +23,6 @@ // Description: Adds components to the machine for deconstruction. Also refreshes the descrition. /obj/machinery/exonet_node/map/Initialize(mapload, newdir) . = ..() - - default_apply_parts() desc = "This machine is one of many, many nodes inside [GLOB.using_map.starsys_name]'s section of the Exonet, connecting the \ [GLOB.using_map.station_short] to the rest of the system, at least electronically." update_desc() diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 9b69dd593d8..109988acaaa 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -66,10 +66,6 @@ ) -/obj/machinery/media/jukebox/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/media/jukebox/Destroy() qdel(wires) wires = null diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 5eef2de8b04..6fa74842bee 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -15,10 +15,6 @@ var/id = 1 var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess. -/obj/machinery/mass_driver/Initialize(mapload, newdir) - . = ..() - default_apply_parts() - /obj/machinery/mass_driver/attackby(obj/item/I, mob/user) if(default_deconstruction_screwdriver(user, I)) return diff --git a/code/game/machinery/partslathe_vr.dm b/code/game/machinery/partslathe_vr.dm index 7d5f0d51a52..3f1041f8aa8 100644 --- a/code/game/machinery/partslathe_vr.dm +++ b/code/game/machinery/partslathe_vr.dm @@ -49,7 +49,6 @@ /obj/machinery/partslathe/Initialize(mapload) . = ..() - default_apply_parts() update_icon() update_recipe_list() diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm index 9d148f1f5d9..324fc042db0 100644 --- a/code/game/machinery/pda_multicaster.dm +++ b/code/game/machinery/pda_multicaster.dm @@ -24,14 +24,10 @@ "cargo" = new /obj/item/pda/multicaster/cargo(src), "civilian" = new /obj/item/pda/multicaster/civilian(src)) -/obj/machinery/pda_multicaster/prebuilt/Initialize(mapload, newdir) - . = ..() - default_apply_parts() - /obj/machinery/pda_multicaster/Destroy() for(var/atom/movable/AM in contents) qdel(AM) - ..() + return ..() /obj/machinery/pda_multicaster/update_icon() if(on) diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index d79559e975b..c7205346492 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -24,7 +24,6 @@ /obj/machinery/pipelayer/Initialize(mapload) . = ..() W = new(src) - default_apply_parts() update_icon() /obj/machinery/pipelayer/Destroy() diff --git a/code/game/machinery/pointdefense.dm b/code/game/machinery/pointdefense.dm index 1ffe17214cf..aea45a68569 100644 --- a/code/game/machinery/pointdefense.dm +++ b/code/game/machinery/pointdefense.dm @@ -27,10 +27,6 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) if(PC != src && PC.id_tag == id_tag) warning("Two [src] with the same id_tag of [id_tag]") id_tag = null - // TODO - Remove this bit once machines are converted to Initialize - if(ispath(circuit)) - circuit = new circuit(src) - default_apply_parts() /obj/machinery/pointdefense_control/get_description_interaction(mob/user) . = ..() @@ -140,10 +136,6 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) /obj/machinery/power/pointdefense/Initialize(mapload) . = ..() - // TODO - Remove this bit once machines are converted to Initialize - if(ispath(circuit)) - circuit = new circuit(src) - default_apply_parts() if(anchored) connect_to_network() update_icon() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 20229c70ea4..696eb07b9fd 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -18,10 +18,6 @@ var/base_power_draw = 20000 circuit = /obj/item/circuitboard/recharger -/obj/machinery/recharger/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/recharger/examine(mob/user) . = ..() . += "[charging ? "[charging]" : "Nothing"] is in [src]." diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index bacd14d2ec8..6ae3e591570 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -32,9 +32,8 @@ /// Power used per point of burn damage repaired. var/wire_power_use = 500 -/obj/machinery/recharge_station/Initialize(mapload, newdir) +/obj/machinery/recharge_station/Initialize(mapload) . = ..() - default_apply_parts() update_icon() /obj/machinery/recharge_station/proc/has_cell_power() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 734bf13ef2d..972999815f1 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -200,10 +200,6 @@ var/target_temp = T20C var/mode = MODE_IDLE -/obj/machinery/power/thermoregulator/Initialize(mapload) - .=..() - default_apply_parts() - /obj/machinery/power/thermoregulator/examine(mob/user) . = ..() . += "There is a small display that reads [target_temp]K." diff --git a/code/game/machinery/telecomms/_telecomms.dm b/code/game/machinery/telecomms/_telecomms.dm index 6b5dedd04b6..138aea71740 100644 --- a/code/game/machinery/telecomms/_telecomms.dm +++ b/code/game/machinery/telecomms/_telecomms.dm @@ -321,7 +321,7 @@ data["multitool"] = FALSE data["multitool_buffer"] = null - if(on || interact_offline) + if(on || (interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) data["id"] = id data["network"] = network data["autolinkers"] = !!LAZYLEN(autolinkers) @@ -505,7 +505,7 @@ return data /obj/machinery/telecomms/broadcaster - interact_offline = TRUE // because you can accidentally nuke power grids with these, need to be able to fix mistake + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON /obj/machinery/telecomms/broadcaster/Options_Act(action, params) if(..()) @@ -527,7 +527,7 @@ return data /obj/machinery/telecomms/receiver - interact_offline = TRUE // because you can accidentally nuke power grids with these, need to be able to fix mistake + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON /obj/machinery/telecomms/receiver/Options_Act(action, params) if(..()) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 709e15d77f1..5ee8c0d451a 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -29,10 +29,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept //Linked bluespace radios var/list/linked_radios_weakrefs = list() -/obj/machinery/telecomms/broadcaster/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/broadcaster/proc/link_radio(var/obj/item/radio/R) if(!istype(R)) return diff --git a/code/game/machinery/telecomms/bus.dm b/code/game/machinery/telecomms/bus.dm index 42de08a0c72..e74c6918eee 100644 --- a/code/game/machinery/telecomms/bus.dm +++ b/code/game/machinery/telecomms/bus.dm @@ -21,10 +21,6 @@ netspeed = 40 var/change_frequency = 0 -/obj/machinery/telecomms/bus/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/bus/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(is_freq_listening(signal)) diff --git a/code/game/machinery/telecomms/hub.dm b/code/game/machinery/telecomms/hub.dm index 6644fa720ee..29938d3675f 100644 --- a/code/game/machinery/telecomms/hub.dm +++ b/code/game/machinery/telecomms/hub.dm @@ -21,10 +21,6 @@ long_range_link = 1 netspeed = 40 -/obj/machinery/telecomms/hub/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(is_freq_listening(signal)) if(istype(machine_from, /obj/machinery/telecomms/receiver)) diff --git a/code/game/machinery/telecomms/processor.dm b/code/game/machinery/telecomms/processor.dm index d05509e1f47..72a1df40170 100644 --- a/code/game/machinery/telecomms/processor.dm +++ b/code/game/machinery/telecomms/processor.dm @@ -19,10 +19,6 @@ circuit = /obj/item/circuitboard/telecomms/processor var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals -/obj/machinery/telecomms/processor/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(is_freq_listening(signal)) diff --git a/code/game/machinery/telecomms/receiver.dm b/code/game/machinery/telecomms/receiver.dm index 83c7e7e6721..bbf4879bb8f 100644 --- a/code/game/machinery/telecomms/receiver.dm +++ b/code/game/machinery/telecomms/receiver.dm @@ -24,10 +24,6 @@ var/list/linked_radios_weakrefs = list() -/obj/machinery/telecomms/receiver/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/receiver/proc/link_radio(var/obj/item/radio/R) if(!istype(R)) return diff --git a/code/game/machinery/telecomms/relay.dm b/code/game/machinery/telecomms/relay.dm index 811435255c0..f70a20665bb 100644 --- a/code/game/machinery/telecomms/relay.dm +++ b/code/game/machinery/telecomms/relay.dm @@ -22,10 +22,6 @@ var/broadcasting = 1 var/receiving = 1 -/obj/machinery/telecomms/relay/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/relay/onTransitZ(old_z, new_z) . = ..() listening_level = z diff --git a/code/game/machinery/telecomms/server.dm b/code/game/machinery/telecomms/server.dm index 6bd63a05c3e..6dfe672a7ce 100644 --- a/code/game/machinery/telecomms/server.dm +++ b/code/game/machinery/telecomms/server.dm @@ -38,10 +38,6 @@ . = ..() server_radio = new() -/obj/machinery/telecomms/server/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(signal.data["message"]) diff --git a/code/game/machinery/teleporter/pad.dm b/code/game/machinery/teleporter/pad.dm index 41adee93bf2..5a577787407 100644 --- a/code/game/machinery/teleporter/pad.dm +++ b/code/game/machinery/teleporter/pad.dm @@ -14,7 +14,6 @@ /obj/machinery/tele_pad/Initialize(mapload) . = ..() - default_apply_parts() return INITIALIZE_HINT_LATELOAD /obj/machinery/tele_pad/LateInitialize() diff --git a/code/game/machinery/teleporter/projector.dm b/code/game/machinery/teleporter/projector.dm index 540c02c33f4..14876c9453d 100644 --- a/code/game/machinery/teleporter/projector.dm +++ b/code/game/machinery/teleporter/projector.dm @@ -15,7 +15,6 @@ /obj/machinery/tele_projector/Initialize(mapload) . = ..() - default_apply_parts() update_appearance() return INITIALIZE_HINT_LATELOAD diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index 2cea6297c4d..810469e3ea1 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -21,10 +21,6 @@ var/mob/living/carbon/human/victim var/beep = TRUE -/obj/machinery/vitals_monitor/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/vitals_monitor/Destroy() victim = null . = ..() diff --git a/code/game/machinery/vr_console.dm b/code/game/machinery/vr_console.dm index 87fffb55df0..c75339692c9 100644 --- a/code/game/machinery/vr_console.dm +++ b/code/game/machinery/vr_console.dm @@ -15,10 +15,6 @@ active_power_usage = 200 light_color = "#FF0000" -/obj/machinery/vr_sleeper/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/vr_sleeper/Initialize(mapload) . = ..() update_icon() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 6657fa5fd9f..5b821e3228c 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -25,10 +25,6 @@ /obj/item/clothing/head/helmet/space ) -/obj/machinery/washing_machine/Initialize(mapload, newdir) - . = ..() - default_apply_parts() - /obj/machinery/washing_machine/verb/start() set name = "Start Washing" set category = "Object" diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index c6b2ba4ebae..095694a6b8b 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -16,10 +16,6 @@ // /mob/living/silicon/robot/platform ) -/obj/machinery/mech_recharger/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/mech_recharger/Crossed(var/atom/movable/M) . = ..() if(charging == M) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 789ced6e2b3..d53db054ade 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -101,10 +101,8 @@ materials[Name] = 0 - default_apply_parts() files = new /datum/research(src) //Setup the research data holder. - /obj/machinery/mecha_part_fabricator/update_icon_state() . = ..() if(machine_stat & NOPOWER) diff --git a/code/game/objects/items/devices/advnifrepair.dm b/code/game/objects/items/devices/advnifrepair.dm index fb913878371..4bb37c56881 100644 --- a/code/game/objects/items/devices/advnifrepair.dm +++ b/code/game/objects/items/devices/advnifrepair.dm @@ -23,11 +23,11 @@ /obj/item/nifrepairer/attackby(obj/W, mob/user) if(istype(W,/obj/item/stack/nanopaste)) var/obj/item/stack/nanopaste/np = W - if(np.use(1) && supply.get_free_space() >= efficiency) + if(np.use(1) && supply.available_volume() >= efficiency) to_chat(user,"You convert some nanopaste into programmed nanites inside \the [src].") supply.add_reagent(id = "nifrepairnanites", amount = efficiency) update_icon() - else if(supply.get_free_space() < efficiency) + else if(supply.available_volume() < efficiency) to_chat(user,"\The [src] is too full. Empty it into a container first.") return @@ -45,7 +45,7 @@ to_chat(user,"[src] is empty. Feed it nanopaste.") return 1 - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) to_chat(user, "[target] is already full.") return 1 diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index fca42427453..f8f5e92bb8a 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -317,7 +317,7 @@ if(istype(L)) process_heat(L) wash_floor() - reagents.add_reagent("water", reagents.get_free_space()) + reagents.add_reagent("water", reagents.available_volume()) /obj/machinery/shower/proc/wash_floor() if(!ismist && is_washing) diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm deleted file mode 100644 index 4e2f354f3a5..00000000000 --- a/code/modules/admin/admin_investigate.dm +++ /dev/null @@ -1,46 +0,0 @@ -//By Carnwennan - -//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game. -//lists and variables are great. However, they have several major flaws: -//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches. -//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that -//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine! -#define INVESTIGATE_DIR "data/investigate/" - -//SYSTEM -/proc/investigate_subject2file(var/subject) - return file("[INVESTIGATE_DIR][subject].html") - -/hook/startup/proc/resetInvestigate() - investigate_reset() - return 1 - -/proc/investigate_reset() - if(fdel(INVESTIGATE_DIR)) return 1 - return 0 - -/atom/proc/investigate_log(message, subject) - if(!message) - return - var/F = investigate_subject2file(subject) - if(!F) return - F << "[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z]) || [src] [message]
" - -//ADMINVERBS -/client/proc/investigate_show() - set name = "Investigate" - set category = "Admin" - if(!holder) - return - - var/static/list/subjects = ALL_INVESTIGATE_SUBJECTS - var/subject = input(usr, "Choose a subject", "Investigate") as null|anything in subjects - - if(!(subject in subjects)) - to_chat(src, SPAN_DANGER("Invalid subject: [subject]")) - return - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ac1ef60f2bb..90e9cc5bcce 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -158,7 +158,6 @@ var/list/admin_verbs_spawn = list( /client/proc/respawn_character, /client/proc/spawn_character_mob, /client/proc/virus2_editor, - /client/proc/spawn_chemdisp_cartridge, /client/proc/map_template_load, /client/proc/map_template_upload, /client/proc/map_template_load_on_new_z diff --git a/code/modules/admin/investigate.dm b/code/modules/admin/investigate.dm new file mode 100644 index 00000000000..3aa90d8d682 --- /dev/null +++ b/code/modules/admin/investigate.dm @@ -0,0 +1,29 @@ +/proc/investigate_subject2file(subject) + return file("[GLOB.log_directory]/investigate/[subject].html") + +/atom/proc/investigate_log(message, subject) + if(!message) + return + var/F = investigate_subject2file(subject) + if(!F) + CRASH("invalid file / no file") + F << "[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z]) || [src] [message]
" + +//ADMINVERBS +/client/proc/investigate_show() + set name = "Investigate" + set category = "Admin" + if(!holder) + return + + var/static/list/subjects = ALL_INVESTIGATE_SUBJECTS + var/subject = input(usr, "Choose a subject", "Investigate") as null|anything in subjects + + if(!(subject in subjects)) + to_chat(src, SPAN_DANGER("Invalid subject: [subject]")) + return + var/F = investigate_subject2file(subject) + if(!F) + to_chat(src, "Error: admin_investigate: [F? F : "!!NO PATH - CHECK RUNTIMES!!"] is an invalid path or cannot be accessed.") + return + src << browse(F,"window=investigate[subject];size=800x300") 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 373250abc3a..68b7324e4d8 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 @@ -40,7 +40,6 @@ /obj/machinery/atmospherics/component/binary/algae_farm/Initialize(mapload) . = ..() desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - default_apply_parts() update_icon() var/list/overlays_to_add = list() // TODO - Make these in actual icon states so its not silly like this diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm index ed5d0d81f54..8cbb4cdb0ad 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm @@ -11,13 +11,10 @@ var/datum/pipe_network/network2 /obj/machinery/atmospherics/component/binary/Initialize(mapload) - . = ..() + air1 = new(200) + air2 = new(200) - air1 = new - air2 = new - - air1.volume = 200 - air2.volume = 200 + return ..() /obj/machinery/atmospherics/component/binary/init_dir() switch(dir) 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 def925098af..b08c894514b 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 @@ -38,7 +38,6 @@ air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 50//default is 200 L we give it 1000 L or 1m³ desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - default_apply_parts() update_icon() var/list/overlays_to_add = list() // TODO - Make these in actual icon states so its not silly like this 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 ee6f928cc44..ec470e3bc4e 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 @@ -41,7 +41,6 @@ air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 50//default is 200 L we give it 1000 L or 1m³ desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - default_apply_parts() update_icon() var/list/overlays_to_add = list() // TODO - Make these in actual icon states so its not silly like this diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm index dd051990510..ca882a302f7 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm @@ -18,15 +18,11 @@ var/datum/pipe_network/network3 /obj/machinery/atmospherics/component/trinary/Initialize(mapload) - . = ..() + air1 = new(200) + air2 = new(200) + air3 = new(200) - air1 = new - air2 = new - air3 = new - - air1.volume = 200 - air2.volume = 200 - air3.volume = 200 + return ..() /obj/machinery/atmospherics/component/trinary/init_dir() initialize_directions = get_initialize_directions_trinary(dir, mirrored, tee) diff --git a/code/modules/atmospherics/machinery/components/unary/heat_source.dm b/code/modules/atmospherics/machinery/components/unary/heat_source.dm index 6071bd5a89a..3e9a5aa563c 100644 --- a/code/modules/atmospherics/machinery/components/unary/heat_source.dm +++ b/code/modules/atmospherics/machinery/components/unary/heat_source.dm @@ -19,10 +19,6 @@ var/set_temperature = T20C //thermostat var/heating = 0 //mainly for icon updates -/obj/machinery/atmospherics/component/unary/heater/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/atmospherics/component/unary/heater/atmos_init() if(node) return diff --git a/code/modules/atmospherics/machinery/components/unary/unary_base.dm b/code/modules/atmospherics/machinery/components/unary/unary_base.dm index 7d6a8a3b521..6d95d6a9370 100644 --- a/code/modules/atmospherics/machinery/components/unary/unary_base.dm +++ b/code/modules/atmospherics/machinery/components/unary/unary_base.dm @@ -14,10 +14,8 @@ var/welded = 0 //defining this here for ventcrawl stuff /obj/machinery/atmospherics/component/unary/Initialize(mapload) - . = ..() - air_contents = new - - air_contents.volume = 200 + air_contents = new(200) + return ..() /obj/machinery/atmospherics/component/unary/init_dir() initialize_directions = dir diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 406c24ef05f..56046b2aeb7 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -152,7 +152,7 @@ return if(istype(A, /obj/structure/reagent_dispensers) || istype(A, /obj/item/reagent_containers/glass/bucket) || istype(A, /obj/structure/mopbucket)) - if(!reagents.get_free_space()) + if(!reagents.available_volume()) to_chat(user, "\The [src] is already soaked.") return diff --git a/code/modules/economy/price_list.dm b/code/modules/economy/price_list.dm index c70bf9f3de0..c92082d23ad 100644 --- a/code/modules/economy/price_list.dm +++ b/code/modules/economy/price_list.dm @@ -9,1047 +9,6 @@ return price_tag -//***************// -//---Beverages---// -//***************// - /datum/reagent/var/price_tag = null - -// Juices, soda and similar // - -/datum/reagent/water - price_tag = 2 - -/datum/reagent/drink/juice - price_tag = 2 - -/datum/reagent/toxin/poisonberryjuice - price_tag = 2 - -/datum/reagent/drink/milk - price_tag = 2 - -/datum/reagent/drink/soda - price_tag = 2 - -/datum/reagent/drink/doctor_delight - price_tag = 2 - -/datum/reagent/drink/nothing - price_tag = 2 - -/datum/reagent/drink/milkshake - price_tag = 2 - -/datum/reagent/drink/roy_rogers - price_tag = 2 - -/datum/reagent/drink/shirley_temple - price_tag = 2 - -/datum/reagent/drink/arnold_palmer - price_tag = 2 - -/datum/reagent/drink/collins_mix - price_tag = 2 - - -// Beer // - -/datum/reagent/ethanol/ale - price_tag = 2 - -/datum/reagent/ethanol/beer - price_tag = 2 - - -// Hot Drinks // - -/datum/reagent/drink/rewriter - price_tag = 3 - -/datum/reagent/drink/tea - price_tag = 3 - -/datum/reagent/drink/coffee - price_tag = 3 - -/datum/reagent/drink/hot_coco - price_tag = 3 - -/obj/item/reagent_containers/food/drinks/coffee - price_tag = 3 - -/obj/item/reagent_containers/food/drinks/tea - price_tag = 3 - -/obj/item/reagent_containers/food/drinks/h_chocolate - price_tag = 3 - -/obj/item/reagent_containers/food/drinks/cans/robustexpress - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/robustexpresslatte - price_tag = 1 - -// Spirituous liquors // - -/datum/reagent/ethanol/irish_cream - price_tag = 5 - -/datum/reagent/ethanol/absinthe - price_tag = 5 - -/datum/reagent/ethanol/bluecuracao - price_tag = 5 - -/datum/reagent/ethanol/deadrum - price_tag = 5 - -/datum/reagent/ethanol/gin - price_tag = 5 - -/datum/reagent/ethanol/coffee/kahlua - price_tag = 5 - -/datum/reagent/ethanol/melonliquor - price_tag = 5 - -/datum/reagent/ethanol/rum - price_tag = 5 - -/datum/reagent/ethanol/whiterum - price_tag = 5 - -/datum/reagent/ethanol/tequila - price_tag = 5 - -/datum/reagent/ethanol/thirteenloko - price_tag = 5 - -/datum/reagent/ethanol/vodka - price_tag = 5 - -/datum/reagent/ethanol/whiskey - price_tag = 5 - -/datum/reagent/ethanol/specialwhiskey - price_tag = 5 - -/datum/reagent/ethanol/patron - price_tag = 5 - -/datum/reagent/ethanol/goldschlager - price_tag = 5 - -/datum/reagent/ethanol/coffee/brave_bull // Not an original liquor in its own. But since it's a mix of purely Tequila - price_tag = 5 // and Kahlua, it's basically just another one and gets the same price. - - -// Wines // - -/datum/reagent/ethanol/wine - price_tag = 8 - -/datum/reagent/ethanol/cognac - price_tag = 8 - -/datum/reagent/ethanol/sake - price_tag = 8 - -/datum/reagent/ethanol/vermouth - price_tag = 8 - -/datum/reagent/ethanol/pwine - price_tag = 8 - - -// Cocktails // - -/datum/reagent/ethanol/acid_spit - price_tag = 4 - -/datum/reagent/ethanol/alliescocktail - price_tag = 4 - -/datum/reagent/ethanol/aloe - price_tag = 4 - -/datum/reagent/ethanol/amasec - price_tag = 4 - -/datum/reagent/ethanol/andalusia - price_tag = 4 - -/datum/reagent/ethanol/antifreeze - price_tag = 4 - -/datum/reagent/ethanol/atomicbomb - price_tag = 4 - -/datum/reagent/ethanol/coffee/b52 - price_tag = 4 - -/datum/reagent/ethanol/bahama_mama - price_tag = 4 - -/datum/reagent/ethanol/barefoot - price_tag = 4 - -/datum/reagent/ethanol/beepsky_smash - price_tag = 4 - -/datum/reagent/ethanol/bilk - price_tag = 4 - -/datum/reagent/ethanol/black_russian - price_tag = 4 - -/datum/reagent/ethanol/bloody_mary - price_tag = 4 - -/datum/reagent/ethanol/booger - price_tag = 4 - -/datum/reagent/ethanol/coffee/brave_bull - price_tag = 4 - -/datum/reagent/ethanol/changelingsting - price_tag = 4 - -/datum/reagent/ethanol/martini - price_tag = 4 - -/datum/reagent/ethanol/cuba_libre - price_tag = 4 - -/datum/reagent/ethanol/demonsblood - price_tag = 4 - -/datum/reagent/ethanol/devilskiss - price_tag = 4 - -/datum/reagent/ethanol/driestmartini - price_tag = 4 - -/datum/reagent/ethanol/ginfizz - price_tag = 4 - -/datum/reagent/ethanol/grog - price_tag = 4 - -/datum/reagent/ethanol/erikasurprise - price_tag = 4 - -/datum/reagent/ethanol/gargle_blaster - price_tag = 4 - -/datum/reagent/ethanol/gintonic - price_tag = 4 - -/datum/reagent/ethanol/hippies_delight - price_tag = 4 - -/datum/reagent/ethanol/iced_beer - price_tag = 4 - -/datum/reagent/ethanol/irishcarbomb - price_tag = 4 - -/datum/reagent/ethanol/coffee/irishcoffee - price_tag = 4 - -/datum/reagent/ethanol/longislandicedtea - price_tag = 4 - -/datum/reagent/ethanol/manhattan - price_tag = 4 - -/datum/reagent/ethanol/manhattan_proj - price_tag = 4 - -/datum/reagent/ethanol/manly_dorf - price_tag = 4 - -/datum/reagent/ethanol/margarita - price_tag = 4 - -/datum/reagent/ethanol/mead - price_tag = 4 - -/datum/reagent/ethanol/moonshine - price_tag = 4 - -/datum/reagent/ethanol/neurotoxin - price_tag = 4 - -/datum/reagent/ethanol/red_mead - price_tag = 4 - -/datum/reagent/ethanol/sbiten - price_tag = 4 - -/datum/reagent/ethanol/screwdrivercocktail - price_tag = 4 - -/datum/reagent/ethanol/silencer - price_tag = 4 - -/datum/reagent/ethanol/singulo - price_tag = 4 - -/datum/reagent/ethanol/snowwhite - price_tag = 4 - -/datum/reagent/ethanol/suidream - price_tag = 4 - -/datum/reagent/ethanol/syndicatebomb - price_tag = 4 - -/datum/reagent/ethanol/tequila_sunrise - price_tag = 4 - -/datum/reagent/ethanol/threemileisland - price_tag = 4 - -/datum/reagent/ethanol/toxins_special - price_tag = 4 - -/datum/reagent/ethanol/vodkamartini - price_tag = 4 - -/datum/reagent/ethanol/vodkatonic - price_tag = 4 - -/datum/reagent/ethanol/white_russian - price_tag = 4 - -/datum/reagent/ethanol/whiskey_cola - price_tag = 4 - -/datum/reagent/ethanol/whiskeysoda - price_tag = 4 - -/datum/reagent/ethanol/binmanbliss - price_tag = 4 - -/datum/reagent/ethanol/xanaducannon - price_tag = 4 - -/datum/reagent/ethanol/balloon - price_tag = 4 - -/datum/reagent/ethanol/coffee/elysiumfacepunch - price_tag = 4 - -/datum/reagent/ethanol/saketini - price_tag = 4 - -/datum/reagent/ethanol/tokyorose - price_tag = 4 - -/datum/reagent/ethanol/ginzamary - price_tag = 4 - -/datum/reagent/ethanol/tamagozake - price_tag = 4 - -/datum/reagent/ethanol/sakebomb - price_tag = 4 - -/datum/reagent/ethanol/erebusmoonrise - price_tag = 4 - -// The Cheap Shit // - -/datum/reagent/ethanol/hooch - price_tag = 2 - -/datum/reagent/ethanol/debugger - price_tag = 2 - -/datum/reagent/ethanol/spacersbrew - price_tag = 2 - -/datum/reagent/ethanol/natunabrandy - price_tag = 2 - -// Cocktails without alcohol // - -/datum/reagent/ethanol/bananahonk - price_tag = 3 - -// From the machine // - -/obj/item/reagent_containers/food/drinks/cans/cola - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/dr_gibb - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/starkist - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/waterbottle - price_tag = 2 - -/obj/item/reagent_containers/food/drinks/cans/space_up - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/iced_tea - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/grape_juice - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/gingerale - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/nicola - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/cola_coffee - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/cans/robustexpressiced - price_tag = 1 - -//***************// -//----Bottles----// -//***************// - -// Juices, soda and similar // - -/obj/item/reagent_containers/food/drinks/bottle/cola - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/space_up - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/orangejuice - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/applejuice - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/cream - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/tomatojuice - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/limejuice - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/small/sassafras - price_tag = 6 - -/obj/item/reagent_containers/food/drinks/bottle/small/sarsaparilla - price_tag = 6 - - -// Beer // - -/obj/item/reagent_containers/food/drinks/bottle/small/beer - price_tag = 3 - -/obj/item/reagent_containers/food/drinks/bottle/small/ale - price_tag = 3 - -/obj/item/reagent_containers/food/drinks/bottle/small/alcsassafras - price_tag = 3 - - -// Spirituous Liquors // - -/obj/item/reagent_containers/food/drinks/bottle/absinthe - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/bluecuracao - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/gin - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/kahlua - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/melonliquor - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/rum - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/tequila - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/vodka - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/whiskey - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/patron - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/goldschlager - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing - price_tag = 15 - -/obj/item/reagent_containers/food/drinks/bottle/grenadine - price_tag = 15 - - -// Wines // - -/obj/item/reagent_containers/food/drinks/bottle/wine - price_tag = 25 - -/obj/item/reagent_containers/food/drinks/bottle/cognac - price_tag = 25 - -/obj/item/reagent_containers/food/drinks/bottle/vermouth - price_tag = 25 - -/obj/item/reagent_containers/food/drinks/bottle/pwine - price_tag = 25 - -/obj/item/reagent_containers/food/drinks/bottle/sake - price_tag = 25 - -//***************// -//---Foodstuff---// -//***************// - -// Snacks // - -/obj/item/reagent_containers/food/snacks/candy - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sosjerky - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/unajerky - price_tag = 12 - -/obj/item/reagent_containers/food/snacks/cheesiehonkers - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/hotcheesiehonkers - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/tastybread - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/no_raisin - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/spacetwinkie - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/skrellsnacks - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/chips - price_tag = 1 - -/obj/item/reagent_containers/food/drinks/dry_ramen - price_tag = 5 - - -// Burger // - -/obj/item/reagent_containers/food/snacks/brainburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/ghostburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/human/burger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/cheeseburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/monkeyburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/fishburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/tofuburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/roburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/roburgerbig - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/xenoburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/clownburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/mimeburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/spellburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/jellyburger - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/bigbiteburger - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/superbiteburger - price_tag = 8 - - -// Sandwiches // - -/obj/item/reagent_containers/food/snacks/sandwich - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/toastedsandwich - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/grilledcheese - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/jellysandwich - price_tag = 3 - - -// Cookies and Candies // - -/obj/item/reagent_containers/food/snacks/cookie - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/chocolatebar - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/chocolateegg - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/candy_corn - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/donut - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/donut/chaos - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/popcorn - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/fortunecookie - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/candiedapple - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/chawanmushi - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/cracker - price_tag = 1 - - -// Full meals // - -/obj/item/reagent_containers/food/snacks/friedegg - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/tofurkey - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/carpmeat - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/fishfingers - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/omelette - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/berryclafoutis - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/waffles - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/eggplantparm - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/soylentgreen - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/soylenviridians - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/wingfangchu - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/kabob - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/monkeykabob - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/tofukabob - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/cubancarp - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/loadedbakedpotato - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/fries - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/spagetti - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/cheesyfries - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/enchiladas - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/taco - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/monkeysdelight - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/fishandchips - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/rofflewaffles - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/stew - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/stewedsoymeat - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/boiledspagetti - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/boiledrice - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/ricepudding - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/pastatomato - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/meatballspagetti - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/spesslaw - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/carrotfries - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/appletart - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/sliceable/pizza - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/margherita - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/slice/meatpizza - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/slice/mushroompizza - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/slice/vegetablepizza - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/ - - -// Baked Goods // - -/obj/item/reagent_containers/food/snacks/poppypretzel - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/baguette - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/jelliedtoast - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/twobread - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/sliceable/meatbread - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/meatbread - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/xenomeatbread - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/bananabread - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/bananabread - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/tofubread - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/tofubread - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/bread - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/bread - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/creamcheesebread - price_tag = 1 - - -// Soups // - -/obj/item/reagent_containers/food/snacks/meatballsoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/slimesoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/bloodsoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/clownstears - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/vegetablesoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/nettlesoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/mysterysoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/wishsoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/hotchili - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/coldchili - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/tomatosoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/milosoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/mushroomsoup - price_tag = 3 - -/obj/item/reagent_containers/food/snacks/beetsoup - price_tag = 3 - - -// Pies // - -/obj/item/reagent_containers/food/snacks/pie - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/meatpie - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/tofupie - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/plump_pie - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/xemeatpie - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/applepie - price_tag = 4 - -/obj/item/reagent_containers/food/snacks/cherrypie - price_tag = 4 - - -// Cakes // - -/obj/item/reagent_containers/food/snacks/sliceable/carrotcake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/carrotcake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/braincake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/braincake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/cheesecake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/cheesecake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/plaincake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/plaincake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/orangecake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/orangecake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/limecake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/limecake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/lemoncake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/lemoncake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/chocolatecake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/chocolatecake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/birthdaycake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/applecake - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/applecake - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie - price_tag = 5 - -/obj/item/reagent_containers/food/snacks/slice/pumpkinpie - price_tag = 1 - - -// Misc // - -/obj/item/reagent_containers/food/snacks/boiledegg - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/donkpocket - price_tag = 1 - -/obj/item/reagent_containers/food/snacks/sausage - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/muffin - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/tossedsalad - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/validsalad - price_tag = 2 - -/obj/item/reagent_containers/food/snacks/dionaroast - price_tag = 25 - -/obj/item/pizzabox/get_item_cost() - return get_item_cost(pizza) - - -//***************// -//----Smokes-----// -//***************// - -/obj/item/storage/fancy/cigarettes - price_tag = 15 - -/obj/item/storage/fancy/cigarettes/luckystars - price_tag = 17 - -/obj/item/storage/fancy/cigarettes/jerichos - price_tag = 22 - -/obj/item/storage/fancy/cigarettes/menthols - price_tag = 18 - -/obj/item/storage/fancy/cigar - price_tag = 27 - -/obj/item/storage/fancy/cigarettes/carcinomas - price_tag = 23 - -/obj/item/storage/fancy/cigarettes/professionals - price_tag = 25 - -/obj/item/storage/box/matches - price_tag = 1 - -/obj/item/flame/lighter - price_tag = 2 - -/obj/item/flame/lighter/zippo - price_tag = 5 - -//******************************// -//|IN THIS MOMENT I AM EUPHORIC|// -//******************************// - -/datum/reagent/ethanol/euphoria - price_tag = 30 +// todo: kill this shit with fire diff --git a/code/modules/events/supply_demand.dm b/code/modules/events/supply_demand.dm index b0454cfff01..ba0e9bbe588 100644 --- a/code/modules/events/supply_demand.dm +++ b/code/modules/events/supply_demand.dm @@ -282,7 +282,7 @@ var/list/medicineReagents = list() for(var/path in typesof(/datum/chemical_reaction) - /datum/chemical_reaction) var/datum/chemical_reaction/CR = path // Stupid casting required for reading - var/datum/reagent/R = SSchemistry.chemical_reagents[initial(CR.result)] + var/datum/reagent/R = SSchemistry.reagent_lookup[initial(CR.result)] if(R && R.scannable) medicineReagents += R for(var/i in 1 to differentTypes) @@ -296,7 +296,7 @@ var/list/drinkReagents = list() for(var/path in typesof(/datum/chemical_reaction) - /datum/chemical_reaction) var/datum/chemical_reaction/CR = path // Stupid casting required for reading - var/datum/reagent/R = SSchemistry.chemical_reagents[initial(CR.result)] + var/datum/reagent/R = SSchemistry.reagent_lookup[initial(CR.result)] if(istype(R, /datum/reagent/drink) || istype(R, /datum/reagent/ethanol)) drinkReagents += R for(var/i in 1 to differentTypes) diff --git a/code/modules/food/food/condiment.dm b/code/modules/food/food/condiment.dm index bfc0f25c0c2..025197733c4 100644 --- a/code/modules/food/food/condiment.dm +++ b/code/modules/food/food/condiment.dm @@ -41,7 +41,7 @@ to_chat(user, "There is no condiment left in \the [src].") return - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) to_chat(user, "You can't add more condiment to \the [target].") return diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 0d6f24bc8b9..6c86cf31fe4 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -4016,8 +4016,8 @@ END CITADEL CHANGE */ var/id = C.id //First make sure there's space for our batter - if (reagents.get_free_space() < req+5) - var/extra = req+5 - reagents.get_free_space() + if (reagents.available_volume() < req+5) + var/extra = req+5 - reagents.available_volume() reagents.maximum_volume += extra //Suck the coating out of the holder diff --git a/code/modules/food/kitchen/cooking_machines/fryer.dm b/code/modules/food/kitchen/cooking_machines/fryer.dm index 15715e67c9f..b3800673501 100644 --- a/code/modules/food/kitchen/cooking_machines/fryer.dm +++ b/code/modules/food/kitchen/cooking_machines/fryer.dm @@ -219,7 +219,7 @@ var/amount = 0 for (var/datum/reagent/R in I.reagents.reagent_list) if (istype(R, /datum/reagent/nutriment/triglyceride/oil)) - var/delta = oil.get_free_space() + var/delta = oil.available_volume() delta = min(delta, R.volume) oil.add_reagent(R.id, delta) I.reagents.remove_reagent(R.id, delta) diff --git a/code/modules/food/recipe_dump.dm b/code/modules/food/recipe_dump.dm index 799d158394a..a60f83e2900 100644 --- a/code/modules/food/recipe_dump.dm +++ b/code/modules/food/recipe_dump.dm @@ -68,14 +68,14 @@ //Reagents can be resolved to nicer names as well for(var/Rp in food_recipes) for(var/rid in food_recipes[Rp]["Reagents"]) - var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] + var/datum/reagent/Rd = SSchemistry.reagent_lookup[rid] var/R_name = Rd.name var/amt = food_recipes[Rp]["Reagents"][rid] food_recipes[Rp]["Reagents"] -= rid food_recipes[Rp]["Reagents"][R_name] = amt for(var/Rp in drink_recipes) for(var/rid in drink_recipes[Rp]["Reagents"]) - var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] + var/datum/reagent/Rd = SSchemistry.reagent_lookup[rid] var/R_name = Rd.name var/amt = drink_recipes[Rp]["Reagents"][rid] drink_recipes[Rp]["Reagents"] -= rid diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 2e61d6f5a71..47631d82ef6 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -440,7 +440,7 @@ for(var/x=1;x<=additional_chems;x++) - var/new_chem = pick(SSchemistry.chemical_reagents) + var/new_chem = pick(SSchemistry.reagent_lookup) if(new_chem in banned_chems) continue banned_chems += new_chem diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 0273315cd91..e926e2d245c 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -239,11 +239,11 @@ if(!source.is_open_container() || !target.is_open_container()) return if(direc) - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) return source.reagents.trans_to(target, transfer_amount) else - if(!source.reagents.get_free_space()) + if(!source.reagents.available_volume()) return target.reagents.trans_to(source, transfer_amount) activate_pin(2) @@ -607,7 +607,7 @@ return if(!source.is_open_container() || !target.is_open_container()) return - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) return for(var/datum/reagent/G in source.reagents.reagent_list) if (!direc) diff --git a/code/modules/maps/misc_maps/lavaland/_lavaland.dm b/code/modules/maps/misc_maps/lavaland/_lavaland.dm index 7850f86af41..bc6f74945d3 100644 --- a/code/modules/maps/misc_maps/lavaland/_lavaland.dm +++ b/code/modules/maps/misc_maps/lavaland/_lavaland.dm @@ -20,7 +20,7 @@ icon_state = "qpad-idle" anchored = 1 use_power = USE_POWER_IDLE - interact_offline = 0 + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_ALLOW_SILICON /obj/machinery/lavaland_entryportal/attack_hand(mob/user, list/params) if(istype(user, /mob/living/silicon/ai)) // lets not teleport AI cores diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 941d92fc8cb..a43b17b3d0b 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -144,9 +144,9 @@ recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("plastic bag", /obj/item/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("blood pack", /obj/item/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE) - recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE) // 500u - recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE) // 250u - recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE) // 100u + recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/reagent_containers/cartridge/dispenser/large, 5, on_floor=0, pass_stack_color = TRUE) // 500u + recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/reagent_containers/cartridge/dispenser/medium, 3, on_floor=0, pass_stack_color = TRUE) // 250u + recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/reagent_containers/cartridge/dispenser/small, 1, on_floor=0, pass_stack_color = TRUE) // 100u recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE) diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index 2637c92175c..16c47fb6948 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -102,10 +102,6 @@ src.equipment_path = path src.cost = cost -/obj/machinery/power/quantumpad/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/mineral/equipment_vendor/power_change() var/old_stat = machine_stat ..() 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 e4faba9cfd7..e51fcab651d 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 @@ -192,12 +192,12 @@ dat += "

Injector

" if(patient)// && patient.health > min_health) //Not necessary, leave the buttons on, but the feedback during injection will give more information. for(var/re in injection_chems) - var/datum/reagent/C = SSchemistry.chemical_reagents[re] + var/datum/reagent/C = SSchemistry.reagent_lookup[re] if(C) dat += "Inject [C.name]
" else for(var/re in injection_chems) - var/datum/reagent/C = SSchemistry.chemical_reagents[re] + var/datum/reagent/C = SSchemistry.reagent_lookup[re] if(C) dat += "Inject [C.name]
" @@ -402,7 +402,7 @@ patient.reagents.add_reagent(chem, inject_amount) drain(750) //-750 charge per injection var/units = round(patient.reagents.get_reagent_amount(chem)) - to_chat(hound, "Injecting [units] unit\s of [SSchemistry.chemical_reagents[chem]] into occupant.") //If they were immersed, the reagents wouldn't leave with them. + to_chat(hound, "Injecting [units] unit\s of [SSchemistry.reagent_lookup[chem]] into occupant.") //If they were immersed, the reagents wouldn't leave with them. //For if the dogborg's existing patient uh, doesn't make it. /obj/item/dogborg/sleeper/proc/update_patient() diff --git a/code/modules/overmap/disperser/disperser.dm b/code/modules/overmap/disperser/disperser.dm index a4e2de16964..f7ad59d769d 100644 --- a/code/modules/overmap/disperser/disperser.dm +++ b/code/modules/overmap/disperser/disperser.dm @@ -9,13 +9,6 @@ density = TRUE anchored = TRUE -/obj/machinery/disperser/Initialize(mapload) - . = ..() - // TODO - Remove this bit once machines are converted to Initialize - if(ispath(circuit)) - circuit = new circuit(src) - default_apply_parts() - /obj/machinery/disperser/examine(mob/user) . = ..() if(panel_open) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index f46e9b90440..61295f7ac73 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -19,10 +19,6 @@ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! var/copying = FALSE // Is the printer busy with something? Sanity check variable. -/obj/machinery/photocopier/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/photocopier/examine(mob/user) . = ..() if(Adjacent(user)) diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 23c5f37dfe0..cc968d6420e 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -32,7 +32,6 @@ /obj/machinery/power/breakerbox/Initialize(mapload) . = ..() wires = new(src) - default_apply_parts() /obj/machinery/power/breakerbox/activated icon_state = "bbox_on" diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index a5ed6b29d08..ceec7f8f01f 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -31,7 +31,6 @@ var/list/fusion_cores = list() /obj/machinery/power/fusion_core/Initialize(mapload) . = ..() fusion_cores += src - default_apply_parts() if(anchored) connect_to_network() diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm index dce19d3d0bf..14123922b5a 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm @@ -7,10 +7,6 @@ circuit = /obj/item/circuitboard/fusion_fuel_compressor -/obj/machinery/fusion_fuel_compressor/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/fusion_fuel_compressor/MouseDroppedOnLegacy(var/atom/movable/target, var/mob/user) if(user.incapacitated() || !user.Adjacent(src)) return diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 0cacea4cd23..00d137e7fa6 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -21,7 +21,6 @@ var/list/fuel_injectors = list() /obj/machinery/fusion_fuel_injector/Initialize(mapload) . = ..() fuel_injectors += src - default_apply_parts() /obj/machinery/fusion_fuel_injector/Destroy() if(cur_assembly) diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm index e1c3809c846..9ffd19e484a 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron.dm @@ -23,7 +23,6 @@ var/list/gyrotrons = list() /obj/machinery/power/emitter/gyrotron/Initialize(mapload) gyrotrons += src active_power_usage = mega_energy * 50000 - default_apply_parts() . = ..() /obj/machinery/power/emitter/gyrotron/Destroy() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 5bdd65663c7..113f9ea1571 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -526,7 +526,6 @@ . = ..() if(ispath(circuit)) circuit = new circuit(src) - default_apply_parts() connect_to_network() /obj/machinery/power/rtg/process() diff --git a/code/modules/power/smes/smes_construction.dm b/code/modules/power/smes/smes_construction.dm index fa4fffcf4fd..0a63f7c96cc 100644 --- a/code/modules/power/smes/smes_construction.dm +++ b/code/modules/power/smes/smes_construction.dm @@ -97,6 +97,7 @@ // Parameters: None // Description: Adds standard components for this SMES, and forces recalculation of properties. /obj/machinery/power/smes/buildable/Initialize(mapload, install_coils = TRUE) + . = ..() component_parts = list() component_parts += new /obj/item/stack/cable_coil(src,30) wires = new /datum/wires/smes(src) @@ -106,7 +107,6 @@ for(var/i = 1, i <= cur_coils, i++) component_parts += new /obj/item/smes_coil(src) recalc_coils() - return ..() // Proc: attack_hand() // Parameters: None diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 71da7e493e3..249354f75f1 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -24,7 +24,6 @@ /obj/machinery/power/tesla_coil/Initialize(mapload) . = ..() wires = new(src) - default_apply_parts() /obj/machinery/power/tesla_coil/Destroy() QDEL_NULL(wires) @@ -38,7 +37,6 @@ zap_cooldown -= (C.rating * 20) input_power_multiplier = power_multiplier - /obj/machinery/power/tesla_coil/update_icon() if(panel_open) icon_state = "coil_open[anchored]" diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 3f4daaac93b..e8d7410e77e 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -88,7 +88,6 @@ /obj/machinery/compressor/Initialize(mapload) . = ..() - default_apply_parts() gas_contained = new() inturf = get_step(src, dir) locate_machinery() @@ -195,7 +194,6 @@ /obj/machinery/power/turbine/Initialize(mapload) . = ..() - default_apply_parts() // The outlet is pointed at the direction of the turbine component outturf = get_step(src, dir) locate_machinery() diff --git a/code/modules/preferences/preference_setup/loadout/gear_tweaks.dm b/code/modules/preferences/preference_setup/loadout/gear_tweaks.dm index 77f96ac24f7..7923941a854 100644 --- a/code/modules/preferences/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/preferences/preference_setup/loadout/gear_tweaks.dm @@ -180,7 +180,7 @@ GLOBAL_DATUM_INIT(gear_tweak_free_matrix_recolor, /datum/gear_tweak/matrix_recol . = valid_reagents[pick(valid_reagents)] else . = valid_reagents[metadata] - I.reagents.add_reagent(., I.reagents.get_free_space()) + I.reagents.add_reagent(., I.reagents.available_volume()) //Custom name and desciption code //note to devs downstream: where 'gear_tweaks = list(gear_tweak_free_color_choice)' was used before for color selection diff --git a/code/modules/reagents/chemistry/_readme.dm b/code/modules/reagents/chemistry/_readme.dm index ac80472030c..5d07cb8b43d 100644 --- a/code/modules/reagents/chemistry/_readme.dm +++ b/code/modules/reagents/chemistry/_readme.dm @@ -39,7 +39,7 @@ About the Holder: Procs: - get_free_space() + available_volume() Returns the remaining free volume in the holder. get_master_reagent() diff --git a/code/modules/reagents/chemistry/helpers.dm b/code/modules/reagents/chemistry/helpers.dm index df4a4ec7166..3e57546ebb7 100644 --- a/code/modules/reagents/chemistry/helpers.dm +++ b/code/modules/reagents/chemistry/helpers.dm @@ -3,7 +3,7 @@ return FALSE if(!reagents) return FALSE - if(!reagents.get_free_space()) + if(!reagents.available_volume()) return FALSE return TRUE diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index daafd4fc95b..b87b0d4a5d6 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1,8 +1,15 @@ /datum/reagents + //? core + /// reagent holder flags - see [code/__DEFINES/reagents/flags.dm] + var/reagent_holder_flags = NONE + + ///? legacy / unsorted var/list/datum/reagent/reagent_list = list() var/total_volume = 0 var/maximum_volume = 100 + var/atom/my_atom = null + // todo: remove / refactor this var into reagent_holder_flags with proper defines, this was never ported properly. var/reagents_holder_flags /datum/reagents/New(max = 100, atom/A = null, new_flags = NONE) @@ -11,15 +18,15 @@ my_atom = A //I dislike having these here but map-objects are initialised before world/New() is called. >_> - if(!SSchemistry.chemical_reagents) + if(!SSchemistry.reagent_lookup) //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id var/paths = typesof(/datum/reagent) - /datum/reagent - SSchemistry.chemical_reagents = list() + SSchemistry.reagent_lookup = list() for(var/path in paths) var/datum/reagent/D = new path() if(!D.name) continue - SSchemistry.chemical_reagents[D.id] = D + SSchemistry.reagent_lookup[D.id] = D reagents_holder_flags = new_flags @@ -46,9 +53,6 @@ /* Internal procs */ -/datum/reagents/proc/get_free_space() // Returns free space. - return maximum_volume - total_volume - /datum/reagents/proc/get_master_reagent() // Returns reference to the reagent with the biggest volume. var/the_reagent = null var/the_volume = 0 @@ -125,11 +129,15 @@ /* Holder-to-chemical */ /datum/reagents/proc/add_reagent(id, amount, data = null, safety = 0) + if(ispath(id)) + var/datum/reagent/accessing = id + id = initial(accessing.id) + if(!isnum(amount) || amount <= 0) return 0 update_total() - amount = min(amount, get_free_space()) + amount = min(amount, available_volume()) for(var/datum/reagent/current in reagent_list) if(current.id == id) @@ -146,7 +154,7 @@ if(my_atom) my_atom.on_reagent_change() return 1 - var/datum/reagent/D = SSchemistry.chemical_reagents[id] + var/datum/reagent/D = SSchemistry.reagent_lookup[id] if(D) var/datum/reagent/R = new D.type() reagent_list += R @@ -271,7 +279,7 @@ if(!target || !istype(target)) return - amount = max(0, min(amount, total_volume, target.get_free_space() / multiplier)) + amount = max(0, min(amount, total_volume, target.available_volume() / multiplier)) if(!amount) return @@ -511,3 +519,26 @@ if(C.can_happen(src)) do_happen = TRUE return do_happen + +//? Queries - Whole + +/** + * returns volume remaining + */ +/datum/reagents/proc/available_volume() + return maximum_volume - total_volume + +//? UI + +/** + * data list for ReagentContents in /tgui/interfaces/common/Reagents.tsx + */ +/datum/reagents/proc/tgui_reagent_contents() + var/list/built = list() + for(var/datum/reagent/R as anything in reagent_list) + built[++built.len] = list( + "name" = R.name, + "amount" = R.volume, + "id" = R.id, + ) + return built diff --git a/code/modules/reagents/chemistry/machinery.dm b/code/modules/reagents/chemistry/machinery.dm index f6554395fc7..8f2f4185534 100644 --- a/code/modules/reagents/chemistry/machinery.dm +++ b/code/modules/reagents/chemistry/machinery.dm @@ -13,7 +13,8 @@ active_power_usage = 100 circuit = /obj/item/circuitboard/grinder var/inuse = 0 - var/obj/item/reagent_containers/beaker + /// beaker - set to path to start with a beaker. + var/obj/item/reagent_containers/beaker = /obj/item/reagent_containers/glass/beaker/large var/limit = 10 var/list/holdingitems = list() var/list/sheet_reagents = list( //have a number of reageents divisible by REAGENTS_PER_SHEET (default 20) unless you like decimals, @@ -37,10 +38,10 @@ var/static/radial_grind = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_grind") var/no_panel = FALSE -/obj/machinery/reagentgrinder/Initialize(mapload, newdir) +/obj/machinery/reagentgrinder/Initialize(mapload) . = ..() - beaker = new /obj/item/reagent_containers/glass/beaker/large(src) - default_apply_parts() + if(ispath(beaker)) + beaker = new beaker(src) /obj/machinery/reagentgrinder/examine(mob/user) . = ..() diff --git a/code/modules/reagents/chemistry/chemical_reactions.dm b/code/modules/reagents/chemistry/reaction.dm similarity index 98% rename from code/modules/reagents/chemistry/chemical_reactions.dm rename to code/modules/reagents/chemistry/reaction.dm index 04631be534e..231409e16d2 100644 --- a/code/modules/reagents/chemistry/chemical_reactions.dm +++ b/code/modules/reagents/chemistry/reaction.dm @@ -1,6 +1,12 @@ /datum/chemical_reaction + //? core + /// id - must be unique and in CamelCase. + var/id + /// reagent reaction flags - see [code/__DEFINES/reagents/flags.dm] + var/chemical_reaction_flags = NONE + + //? legacy / unsorted var/name = null - var/id = null var/result = null var/list/required_reagents = list() var/list/catalysts = list() diff --git a/code/modules/reagents/chemistry/reagent.dm b/code/modules/reagents/chemistry/reagent.dm index 9503fc498a4..d3ba6810349 100644 --- a/code/modules/reagents/chemistry/reagent.dm +++ b/code/modules/reagents/chemistry/reagent.dm @@ -9,8 +9,16 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /datum/reagent + abstract_type = /datum/reagent + + //? core + /// id - must be unique and in CamelCase. + var/id + /// reagent flags - see [code/__DEFINES/reagents/flags.dm] + var/reagent_flags = NONE + + //? legacy / unsorted var/name = "Reagent" - var/id = "reagent" var/description = "A non-descript chemical." var/taste_description = "bitterness" /// How this taste compares to others. Higher values means it is more noticable @@ -61,6 +69,16 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /// economic category of the reagent var/economic_category_reagent = ECONOMIC_CATEGORY_REAGENT_DEFAULT + //? wiki markup generation additional + /// override "name" + var/wiki_name + /// override "desc" + var/wiki_desc + /// wiki category - determines what table to put it into + var/wiki_category = "Miscellaneous" + /// forced sort ordering in its category - falls back to name otherwise. + var/wiki_sort = 0 + /datum/reagent/proc/remove_self(var/amount) // Shortcut if(holder) holder.remove_reagent(id, amount) diff --git a/code/modules/reagents/chemistry/wiki_generation.dm b/code/modules/reagents/chemistry/wiki_generation.dm new file mode 100644 index 00000000000..be664392d4c --- /dev/null +++ b/code/modules/reagents/chemistry/wiki_generation.dm @@ -0,0 +1,60 @@ +/proc/generate_wiki_markup_for_reagents() + var/list/built = list() + // gather + var/list/reagents_by_category = list() + var/list/recipes_by_id = list() + for(var/datum/chemical_reaction/reaction as anything in subtypesof(/datum/chemical_reaction)) + LAZYADD(recipes_by_id[reaction.result], new reaction) + for(var/datum/reagent/path as anything in subtypesof(/datum/reagent)) + if(initial(path.abstract_type) == path) + continue + // todo: skip flag? + LAZYADD(reagents_by_category[initial(path.wiki_category)], new path) + // todo: styling for tables + for(var/category in reagents_by_category) + tim_sort(reagents_by_category[category], /proc/cmp_reagents_wiki) + var/list/sub_built = list() + sub_built += {" + {| class="wikitable" style="margin: auto" + |+ [category] + |- + ! Name !! Desc !! Overdose / Addiction !! + "} + for(var/datum/reagent/R as anything in reagents_by_category[category]) + var/list/recipes = recipes_by_id[R.id] + if(!length(recipes)) + // todo: flag check + continue + // todo: recipes :agony: + var/overdose_text = R.overdose? "Overdose: [R.overdose]u" : "None" + var/recipes_text = "WIP" + sub_built += {" + |- + | [R.wiki_name || R.name] || [R.wiki_desc || R.description] || [overdose_text] || [recipes_text] + "} + // todo: handle recipes + built += "## [category]

[jointext(sub_built, "")]" + + return "
[jointext(built, "

")]
" + +/proc/browse_wiki_markup_for_reagents(mob/user = usr) + user << browse("Chemistry Wiki Generation[generate_wiki_markup_for_reagents()]", "window=chemwiki;display=1;size=600x600;can_close=1;can_resize=1;can_minimize=0;titlebar=1") + +/proc/cmp_reagents_wiki(datum/reagent/A, datum/reagent/B) + return (A.wiki_sort == B.wiki_sort)? (sorttext(B.name, A.name)) : (B.wiki_sort - A.wiki_sort) + +// for reference below + +/* + {| class="wikitable" style="margin:auto" + |+ Caption text + |- + ! Header text !! Header text !! Header text + |- + | Example || Example || Example + |- + | Example || Example || Example + |- + | Example || Example || Example +|} +*/ diff --git a/code/modules/reagents/machinery/chem_master.dm b/code/modules/reagents/machinery/chem_master.dm index b6c9b122cd2..4fdffd63d6a 100644 --- a/code/modules/reagents/machinery/chem_master.dm +++ b/code/modules/reagents/machinery/chem_master.dm @@ -61,10 +61,9 @@ name = "CondiMaster 3000" condi = TRUE -/obj/machinery/chem_master/Initialize(mapload, newdir) - . = ..() - create_reagents(1000) - default_apply_parts() +/obj/machinery/chem_master/Initialize(mapload) + create_reagents(1000) // refreshparts needs reagents + return ..() /obj/machinery/chem_master/Destroy() QDEL_NULL(beaker) diff --git a/code/modules/reagents/machinery/dispenser/_defines.dm b/code/modules/reagents/machinery/dispenser/_defines.dm deleted file mode 100644 index 3d6f13ddd56..00000000000 --- a/code/modules/reagents/machinery/dispenser/_defines.dm +++ /dev/null @@ -1,8 +0,0 @@ -#define CARTRIDGE_VOLUME_LARGE 1000 -#define CARTRIDGE_VOLUME_MEDIUM 500 -#define CARTRIDGE_VOLUME_SMALL 250 - -// Chemistry dispenser starts with 21 -// ERT dispenser starts with 28 -#define DISPENSER_MAX_CARTRIDGES 30 - diff --git a/code/modules/reagents/machinery/dispenser/cartridge.dm b/code/modules/reagents/machinery/dispenser/cartridge.dm index 920d1522a64..644ef5ffca6 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge.dm @@ -1,27 +1,37 @@ -/obj/item/reagent_containers/chem_disp_cartridge - name = "chemical dispenser cartridge" +/obj/item/reagent_containers/cartridge/dispenser + name = "dispenser cartridge" desc = "This goes in a chemical dispenser." icon_state = "cartridge" - - w_class = ITEMSIZE_NORMAL - - volume = CARTRIDGE_VOLUME_LARGE + w_class = WEIGHT_CLASS_NORMAL amount_per_transfer_from_this = 50 - // Large, but inaccurate. Use a chem dispenser or beaker for accuracy. possible_transfer_amounts = list(50, 100, 250, 500) - unacidable = 1 - var/spawn_reagent = null - var/label = "" + /// label - the dispenser sees this, not what's in us + var/label -/obj/item/reagent_containers/chem_disp_cartridge/Initialize(mapload) +/obj/item/reagent_containers/cartridge/dispenser/Initialize(mapload) . = ..() - if(spawn_reagent) - reagents.add_reagent(spawn_reagent, volume) - var/datum/reagent/R = SSchemistry.chemical_reagents[spawn_reagent] - setLabel(R.name) + set_label(label) -/obj/item/reagent_containers/chem_disp_cartridge/examine(mob/user) +/obj/item/reagent_containers/cartridge/dispenser/proc/set_label(new_label) + label = new_label + name = "[initial(name)] ([label])" + +/obj/item/reagent_containers/cartridge/dispenser/verb/set_label_verb() + set name = "Set Label" + set category = "Object" + set src in usr + + var/new_label = input(usr, "Enter a new label.", "Label Cartridge", label) as text|null + + if(isnull(new_label)) + return + + to_chat(usr, new_label? SPAN_NOTICE("You set the cartridge's label to '[new_label]'.") : SPAN_NOTICE("You erase the label on the cartridge.")) + + set_label(new_label) + +/obj/item/reagent_containers/cartridge/dispenser/examine(mob/user) . = ..() . += "It has a capacity of [volume] units." if(reagents.total_volume <= 0) @@ -31,68 +41,26 @@ if(!is_open_container()) . += "The cap is sealed." -/obj/item/reagent_containers/chem_disp_cartridge/verb/verb_set_label(L as text) - set name = "Set Cartridge Label" - set category = "Object" - set src in view(usr, 1) - - setLabel(L, usr) - -/obj/item/reagent_containers/chem_disp_cartridge/proc/setLabel(L, mob/user = null) - if(L) - if(user) - to_chat(user, "You set the label on \the [src] to '[L]'.") - - label = L - name = "[initial(name)] - '[L]'" - else - if(user) - to_chat(user, "You clear the label on \the [src].") - label = "" - name = initial(name) - -/obj/item/reagent_containers/chem_disp_cartridge/attack_self(mob/user) +/obj/item/reagent_containers/cartridge/dispenser/attack_self(mob/user) . = ..() if(.) return - ..() - if (is_open_container()) - to_chat(usr, "You put the cap on \the [src].") + if(is_open_container()) + to_chat(user, SPAN_NOTICE("You put the cap on \the [src].")) atom_flags ^= OPENCONTAINER else - to_chat(usr, "You take the cap off \the [src].") + to_chat(user, SPAN_NOTICE("You put the cap off of \the [src].")) atom_flags |= OPENCONTAINER -/obj/item/reagent_containers/chem_disp_cartridge/afterattack(obj/target, mob/user , flag) - if (!is_open_container() || !flag) - return - else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - target.add_fingerprint(user) +/obj/item/reagent_containers/cartridge/dispenser/large + name = "large dispenser cartridge" + volume = 1000 - if(!target.reagents.total_volume && target.reagents) - to_chat(user, "\The [target] is empty.") - return +/obj/item/reagent_containers/cartridge/dispenser/medium + name = "medium dispenser cartridge" + volume = 500 - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "\The [src] is full.") - return - - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - to_chat(user, "You fill \the [src] with [trans] units of the contents of \the [target].") - - else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. - - if(!reagents.total_volume) - to_chat(user, "\The [src] is empty.") - return - - if(target.reagents.total_volume >= target.reagents.maximum_volume) - to_chat(user, "\The [target] is full.") - return - - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) - to_chat(user, "You transfer [trans] units of the solution to \the [target].") - - else - return ..() +/obj/item/reagent_containers/cartridge/dispenser/small + name = "small dispenser cartridge" + volume = 250 diff --git a/code/modules/reagents/machinery/dispenser/cartridge_presets.dm b/code/modules/reagents/machinery/dispenser/cartridge_presets.dm deleted file mode 100644 index 50f747fd749..00000000000 --- a/code/modules/reagents/machinery/dispenser/cartridge_presets.dm +++ /dev/null @@ -1,203 +0,0 @@ -/obj/item/reagent_containers/chem_disp_cartridge -/obj/item/reagent_containers/chem_disp_cartridge/small - volume = CARTRIDGE_VOLUME_SMALL -/obj/item/reagent_containers/chem_disp_cartridge/medium - volume = CARTRIDGE_VOLUME_MEDIUM - -// Multiple -/obj/item/reagent_containers/chem_disp_cartridge/water - spawn_reagent = "water" -/obj/item/reagent_containers/chem_disp_cartridge/sugar - spawn_reagent = "sugar" - -// Chemistry -/obj/item/reagent_containers/chem_disp_cartridge/hydrogen - spawn_reagent = "hydrogen" -/obj/item/reagent_containers/chem_disp_cartridge/lithium - spawn_reagent = "lithium" -/obj/item/reagent_containers/chem_disp_cartridge/carbon - spawn_reagent = "carbon" -/obj/item/reagent_containers/chem_disp_cartridge/nitrogen - spawn_reagent = "nitrogen" -/obj/item/reagent_containers/chem_disp_cartridge/oxygen - spawn_reagent = "oxygen" -/obj/item/reagent_containers/chem_disp_cartridge/fluorine - spawn_reagent = "fluorine" -/obj/item/reagent_containers/chem_disp_cartridge/sodium - spawn_reagent = "sodium" -/obj/item/reagent_containers/chem_disp_cartridge/aluminum - spawn_reagent = "aluminum" -/obj/item/reagent_containers/chem_disp_cartridge/silicon - spawn_reagent = "silicon" -/obj/item/reagent_containers/chem_disp_cartridge/phosphorus - spawn_reagent = "phosphorus" -/obj/item/reagent_containers/chem_disp_cartridge/sulfur - spawn_reagent = "sulfur" -/obj/item/reagent_containers/chem_disp_cartridge/chlorine - spawn_reagent = "chlorine" -/obj/item/reagent_containers/chem_disp_cartridge/potassium - spawn_reagent = "potassium" -/obj/item/reagent_containers/chem_disp_cartridge/iron - spawn_reagent = "iron" -/obj/item/reagent_containers/chem_disp_cartridge/copper - spawn_reagent = "copper" -/obj/item/reagent_containers/chem_disp_cartridge/mercury - spawn_reagent = "mercury" -/obj/item/reagent_containers/chem_disp_cartridge/radium - spawn_reagent = "radium" -/obj/item/reagent_containers/chem_disp_cartridge/ethanol - spawn_reagent = "ethanol" -/obj/item/reagent_containers/chem_disp_cartridge/sacid - spawn_reagent = "sacid" -/obj/item/reagent_containers/chem_disp_cartridge/tungsten - spawn_reagent = "tungsten" -/obj/item/reagent_containers/chem_disp_cartridge/calcium - spawn_reagent = "calcium" - -// Bar, alcoholic -/obj/item/reagent_containers/chem_disp_cartridge/beer - spawn_reagent = "beer" -/obj/item/reagent_containers/chem_disp_cartridge/kahlua - spawn_reagent = "kahlua" -/obj/item/reagent_containers/chem_disp_cartridge/whiskey - spawn_reagent = "whiskey" -/obj/item/reagent_containers/chem_disp_cartridge/wine - spawn_reagent = "wine" -/obj/item/reagent_containers/chem_disp_cartridge/whitewine - spawn_reagent = "whitewine" -/obj/item/reagent_containers/chem_disp_cartridge/vodka - spawn_reagent = "vodka" -/obj/item/reagent_containers/chem_disp_cartridge/gin - spawn_reagent = "gin" -/obj/item/reagent_containers/chem_disp_cartridge/rum - spawn_reagent = "rum" -/obj/item/reagent_containers/chem_disp_cartridge/tequila - spawn_reagent = "tequila" -/obj/item/reagent_containers/chem_disp_cartridge/vermouth - spawn_reagent = "vermouth" -/obj/item/reagent_containers/chem_disp_cartridge/cognac - spawn_reagent = "cognac" -/obj/item/reagent_containers/chem_disp_cartridge/ale - spawn_reagent = "ale" -/obj/item/reagent_containers/chem_disp_cartridge/mead - spawn_reagent = "mead" -/obj/item/reagent_containers/chem_disp_cartridge/bitters - spawn_reagent = "bitters" -/obj/item/reagent_containers/chem_disp_cartridge/cider - spawn_reagent = "cider" -/obj/item/reagent_containers/chem_disp_cartridge/alcsassafras - spawn_reagent = "alcsassafras" - -// Bar, soft -/obj/item/reagent_containers/chem_disp_cartridge/ice - spawn_reagent = "ice" -/obj/item/reagent_containers/chem_disp_cartridge/tea - spawn_reagent = "tea" -/obj/item/reagent_containers/chem_disp_cartridge/icetea - spawn_reagent = "icetea" -/obj/item/reagent_containers/chem_disp_cartridge/cola - spawn_reagent = "cola" -/obj/item/reagent_containers/chem_disp_cartridge/smw - spawn_reagent = "spacemountainwind" -/obj/item/reagent_containers/chem_disp_cartridge/dr_gibb - spawn_reagent = "dr_gibb" -/obj/item/reagent_containers/chem_disp_cartridge/spaceup - spawn_reagent = "space_up" -/obj/item/reagent_containers/chem_disp_cartridge/tonic - spawn_reagent = "tonic" -/obj/item/reagent_containers/chem_disp_cartridge/sodawater - spawn_reagent = "sodawater" -/obj/item/reagent_containers/chem_disp_cartridge/lemon_lime - spawn_reagent = "lemon_lime" -/obj/item/reagent_containers/chem_disp_cartridge/orange - spawn_reagent = "orangejuice" -/obj/item/reagent_containers/chem_disp_cartridge/lime - spawn_reagent = "limejuice" -/obj/item/reagent_containers/chem_disp_cartridge/watermelon - spawn_reagent = "watermelonjuice" -/obj/item/reagent_containers/chem_disp_cartridge/lemon - spawn_reagent = "lemonjuice" -/obj/item/reagent_containers/chem_disp_cartridge/sarsaparilla - spawn_reagent = "sarsaparilla" -/obj/item/reagent_containers/chem_disp_cartridge/sassafras - spawn_reagent = "sassafras" - -// Bar, coffee -/obj/item/reagent_containers/chem_disp_cartridge/coffee - spawn_reagent = "coffee" -/obj/item/reagent_containers/chem_disp_cartridge/cafe_latte - spawn_reagent = "cafe_latte" -/obj/item/reagent_containers/chem_disp_cartridge/soy_latte - spawn_reagent = "soy_latte" -/obj/item/reagent_containers/chem_disp_cartridge/hot_coco - spawn_reagent = "hot_coco" -/obj/item/reagent_containers/chem_disp_cartridge/milk - spawn_reagent = "milk" -/obj/item/reagent_containers/chem_disp_cartridge/cream - spawn_reagent = "cream" -/obj/item/reagent_containers/chem_disp_cartridge/mint - spawn_reagent = "mint" -/obj/item/reagent_containers/chem_disp_cartridge/berry - spawn_reagent = "berryjuice" -// greentea spawn_reagent = "greentea" -// decaf spawn_reagent = "decaf" - -// ERT -/obj/item/reagent_containers/chem_disp_cartridge/inaprov - spawn_reagent = "inaprovaline" -/obj/item/reagent_containers/chem_disp_cartridge/ryetalyn - spawn_reagent = "ryetalyn" -/obj/item/reagent_containers/chem_disp_cartridge/paracetamol - spawn_reagent = "paracetamol" -/obj/item/reagent_containers/chem_disp_cartridge/tramadol - spawn_reagent = "tramadol" -/obj/item/reagent_containers/chem_disp_cartridge/oxycodone - spawn_reagent = "oxycodone" -/obj/item/reagent_containers/chem_disp_cartridge/sterilizine - spawn_reagent = "sterilizine" -/obj/item/reagent_containers/chem_disp_cartridge/leporazine - spawn_reagent = "leporazine" -/obj/item/reagent_containers/chem_disp_cartridge/kelotane - spawn_reagent = "kelotane" -/obj/item/reagent_containers/chem_disp_cartridge/dermaline - spawn_reagent = "dermaline" -/obj/item/reagent_containers/chem_disp_cartridge/dexalin - spawn_reagent = "dexalin" -/obj/item/reagent_containers/chem_disp_cartridge/dexalin/small - volume = CARTRIDGE_VOLUME_SMALL // For the medicine cartridge crate, so it's not too easy to get large amounts of dexalin -/obj/item/reagent_containers/chem_disp_cartridge/dexalin_p - spawn_reagent = "dexalinp" -/obj/item/reagent_containers/chem_disp_cartridge/tricord - spawn_reagent = "tricordrazine" -/obj/item/reagent_containers/chem_disp_cartridge/dylovene - spawn_reagent = "anti_toxin" -/obj/item/reagent_containers/chem_disp_cartridge/synaptizine - spawn_reagent = "synaptizine" -/obj/item/reagent_containers/chem_disp_cartridge/hyronalin - spawn_reagent = "hyronalin" -/obj/item/reagent_containers/chem_disp_cartridge/arithrazine - spawn_reagent = "arithrazine" -/obj/item/reagent_containers/chem_disp_cartridge/alkysine - spawn_reagent = "alkysine" -/obj/item/reagent_containers/chem_disp_cartridge/imidazoline - spawn_reagent = "imidazoline" -/obj/item/reagent_containers/chem_disp_cartridge/peridaxon - spawn_reagent = "peridaxon" -/obj/item/reagent_containers/chem_disp_cartridge/bicaridine - spawn_reagent = "bicaridine" -/obj/item/reagent_containers/chem_disp_cartridge/hyperzine - spawn_reagent = "hyperzine" -/obj/item/reagent_containers/chem_disp_cartridge/rezadone - spawn_reagent = "rezadone" -/obj/item/reagent_containers/chem_disp_cartridge/spaceacillin - spawn_reagent = "spaceacillin" -/obj/item/reagent_containers/chem_disp_cartridge/ethylredox - spawn_reagent = "ethylredoxrazine" -/obj/item/reagent_containers/chem_disp_cartridge/sleeptox - spawn_reagent = "stoxin" -/obj/item/reagent_containers/chem_disp_cartridge/chloral - spawn_reagent = "chloralhydrate" -/obj/item/reagent_containers/chem_disp_cartridge/cryoxadone - spawn_reagent = "cryoxadone" -/obj/item/reagent_containers/chem_disp_cartridge/clonexadone - spawn_reagent = "clonexadone" diff --git a/code/modules/reagents/machinery/dispenser/cartridge_presets_vr.dm b/code/modules/reagents/machinery/dispenser/cartridge_presets_vr.dm deleted file mode 100644 index d3dba6fad4e..00000000000 --- a/code/modules/reagents/machinery/dispenser/cartridge_presets_vr.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/reagent_containers/chem_disp_cartridge - //Xenoflora - ammonia spawn_reagent = "ammonia" - diethylamine spawn_reagent = "diethylamine" - plantbgone spawn_reagent = "plantbgone" - mutagen spawn_reagent = "mutagen" - - //Biochem - nutriment spawn_reagent = "nutriment" - protein spawn_reagent = "protein" - - //Special Ops - biomass spawn_reagent = "biomass" - carthatoline spawn_reagent = "carthatoline" - corophizine spawn_reagent = "corophizine" - myelamine spawn_reagent = "myelamine" - osteodaxon spawn_reagent = "osteodaxon" diff --git a/code/modules/reagents/machinery/dispenser/cartridge_spawn.dm b/code/modules/reagents/machinery/dispenser/cartridge_spawn.dm deleted file mode 100644 index 00287e83734..00000000000 --- a/code/modules/reagents/machinery/dispenser/cartridge_spawn.dm +++ /dev/null @@ -1,13 +0,0 @@ -/client/proc/spawn_chemdisp_cartridge(size in list("small", "medium", "large"), reagent in SSchemistry.chemical_reagents) - set name = "Spawn Chemical Dispenser Cartridge" - set category = "Admin" - - var/obj/item/reagent_containers/chem_disp_cartridge/C - switch(size) - if("small") C = new /obj/item/reagent_containers/chem_disp_cartridge/small(usr.loc) - if("medium") C = new /obj/item/reagent_containers/chem_disp_cartridge/medium(usr.loc) - if("large") C = new /obj/item/reagent_containers/chem_disp_cartridge(usr.loc) - C.reagents.add_reagent(reagent, C.volume) - var/datum/reagent/R = SSchemistry.chemical_reagents[reagent] - C.setLabel(R.name) - log_admin("[key_name(usr)] spawned a [size] reagent container containing [reagent] at ([usr.x],[usr.y],[usr.z])") diff --git a/code/modules/reagents/machinery/dispenser/dispenser.dm b/code/modules/reagents/machinery/dispenser/dispenser.dm new file mode 100644 index 00000000000..2aef77ecf0c --- /dev/null +++ b/code/modules/reagents/machinery/dispenser/dispenser.dm @@ -0,0 +1,495 @@ +/obj/item/circuitboard/machine/chemical_dispenser + name = T_BOARD("chemical dispenser") + build_path = /obj/machinery/chemical_dispenser + req_components = list( + /obj/item/stock_parts/capacitor = 2, + /obj/item/stock_parts/manipulator = 1, + /obj/item/cell = 1, + /obj/item/stock_parts/console_screen = 1, + ) + +#define MAX_MACROS 20 +#define MAX_MACRO_STEPS 50 + +/obj/machinery/chemical_dispenser + name = "chemical dispenser" + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "dispenser" + circuit = /obj/item/circuitboard/machine/chemical_dispenser + + use_power = USE_POWER_IDLE + idle_power_usage = 50 + anchored = TRUE + allow_unanchor = TRUE + allow_deconstruct = TRUE + + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OPEN_SILICON + + /// reagent synthesizers in us - set to list of typepaths to init on Initialize(). + var/list/obj/item/reagent_synth/synthesizers + /// synthesizers are swappable + var/synthesizers_swappable = TRUE + /// cartridges in us, usable for dispensing with. + var/list/obj/item/reagent_containers/cartridge/dispenser/cartridges + /// max cartridges + var/cartridges_max = 50 + /// our cell - this is in component_parts too. + // todo: component_parts supporting "use this and don't keep this in component_parts". + var/obj/item/cell/cell + /// initial cell type + var/cell_type = /obj/item/cell/high + /// recharge rate in KW + var/recharge_rate = 10 + /// inserted beaker / whatever + var/obj/item/reagent_containers/inserted + /// allow drinking glasses + var/allow_drinking = TRUE + /// current dispense amount + var/dispense_amount = 10 + /// max dispense amount - this is relatively important to prevent *easy* maxcaps. + var/dispense_amount_max = 60 + /// power in kilojoules per unit synthesized + var/kj_per_unit = 4 + /// is recharging active? + var/charging = TRUE + /// macros: list of list("name" = name, "index" = number, "data" = list("id" = amount, ...)) + // todo: macros utilizing cartridges + var/list/macros + /// awful code but lets us identify macros regardless of tgui sort order. + var/macro_index_next = 0 + +/obj/machinery/chemical_dispenser/Initialize(mapload) + . = ..() + // default_apply_parts runs in ..() + component_parts -= cell + if(cell) + qdel(cell) + if(cell_type) + cell = new cell_type(src) + component_parts |= cell + if(islist(synthesizers)) + var/list/created = list() + for(var/path in synthesizers) + if(!ispath(path, /obj/item/reagent_synth)) + if(istype(path, /obj/item/reagent_synth)) + created += path + continue + created += new path(src) + synthesizers = created + +/obj/machinery/chemical_dispenser/Destroy() + QDEL_LIST_NULL(cartridges) + QDEL_LIST_NULL(synthesizers) + if(inserted) + QDEL_NULL(inserted) + macros = null + if(cell) + QDEL_NULL(cell) + component_parts -= cell + return ..() + +/obj/machinery/chemical_dispenser/RefreshParts() + var/total_capacitor_rating = 0 + var/total_capacitors = 0 + for(var/obj/item/stock_parts/capacitor/cap in component_parts) + total_capacitors++ + total_capacitor_rating += cap.rating + recharge_rate = initial(recharge_rate) * (0.5 + (total_capacitor_rating / (total_capacitors || 1)) * 0.5) + var/total_manip_rating = 0 + var/total_manips = 0 + for(var/obj/item/stock_parts/manipulator/manip in component_parts) + total_manips++ + total_manip_rating += manip.rating + kj_per_unit = max(0, initial(kj_per_unit) - 0.25 * ((total_manip_rating / (total_manips || 1)) - 1)) + var/obj/item/cell/comp_cell = locate() in component_parts + cell = comp_cell + +/obj/machinery/chemical_dispenser/examine(mob/user) + . = ..() + . += "It has [length(cartridges)] cartridges installed, and has space for [cartridges_max - length(cartridges)] more." + +/obj/machinery/chemical_dispenser/process(delta_time) + // todo: rework power handling + if(machine_stat & NOPOWER) + return + if(!cell) + return + var/wanted = max(0, DYNAMIC_CELL_UNITS_TO_KW(cell.maxcharge - cell.charge, delta_time)) + if(!wanted) + return + // todo: this is shit, it doesn't update area power because our power code is primitive. + var/kw_used = use_power_oneoff(min(recharge_rate * delta_time, wanted)) + if(!kw_used) + return + cell.give(DYNAMIC_KW_TO_CELL_UNITS(kw_used, delta_time)) + SStgui.update_uis(src) + +/obj/machinery/chemical_dispenser/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemDispenser", name) + ui.open() + +/obj/machinery/chemical_dispenser/proc/ui_cartridge_data() + var/list/carts_built = list() + for(var/obj/item/reagent_containers/cartridge/dispenser/cart as anything in cartridges) + carts_built[++carts_built.len] = list( + "label" = cart.label, + "amount" = cart.reagents?.total_volume || 0, + ) + return carts_built + +/obj/machinery/chemical_dispenser/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state) + . = ..() + .["cartridges"] = ui_cartridge_data() + var/list/chems_built = list() + // gather + for(var/obj/item/reagent_synth/synth as anything in synthesizers) + for(var/id in synth.reagents_provided) + if(chems_built[id]) + continue + var/datum/reagent/R = SSchemistry.get_reagent(id) + if(!R) + continue + chems_built[id] = list( + "id" = id, + "name" = R.name, + ) + // build + var/list/chems_final = list() + for(var/id in chems_built) + chems_final += list(chems_built[id]) + .["reagents"] = chems_final + .["macros"] = macros || list() + .["macros_full"] = length(macros) >= MAX_MACROS + .["macros_max_steps"] = MAX_MACRO_STEPS + +/obj/machinery/chemical_dispenser/ui_data(mob/user) + . = ..() + .["amount"] = dispense_amount + .["amount_max"] = dispense_amount_max + .["has_cell"] = !!cell + .["cell_charge"] = cell?.charge + .["cell_capacity"] = cell?.maxcharge + .["panel_open"] = panel_open + .["has_beaker"] = !!inserted + .["beaker"] = inserted?.reagents? list( + "volume" = inserted.reagents.total_volume, + "capacity" = inserted.reagents.maximum_volume, + "data" = inserted.reagents.tgui_reagent_contents(), + ) : null + .["recharging"] = charging + .["recharge_rate"] = recharge_rate + +/obj/machinery/chemical_dispenser/ui_act(action, params) + . = ..() + if(.) + return + add_fingerprint(usr) + switch(action) + if("toggle_charge") + charging = !charging + return TRUE + if("reagent") + if(isnull(inserted?.reagents)) + return TRUE + var/id = params["id"] + if(!check_reagent_id(id)) + return TRUE + var/amount = round(dispense_amount) + if(!amount) + return TRUE + playsound(src, 'sound/machines/reagent_dispense.ogg', 25, 1) + var/wanted = clamp(amount, 0, inserted.reagents.maximum_volume - inserted.reagents.total_volume) + var/avail = min(wanted, cell.use(DYNAMIC_KJ_TO_CELL_UNITS(wanted * kj_per_unit))) + inserted.reagents.add_reagent(id, avail) + investigate_log("[key_name(usr)] dispensed [avail] of [id]", INVESTIGATE_REAGENTS) + return TRUE + if("cartridge") + if(isnull(inserted?.reagents)) + return TRUE + var/id = params["label"] + if(!id) + return TRUE + var/obj/item/reagent_containers/cartridge/dispenser/cart + for(cart as anything in cartridges) + if(cart.label == id) + break + if(cart?.label != id) + return TRUE + playsound(src, 'sound/machines/reagent_dispense.ogg', 25, 1) + cart.reagents.trans_to(inserted, dispense_amount) + push_ui_data(data = list("cartridges" = ui_cartridge_data())) + return TRUE + if("amount") + var/target = text2num(params["set"]) + if(isnull(target)) + return TRUE + target = round(target) + dispense_amount = clamp(target, 0, dispense_amount_max) + return TRUE + if("isolate") + var/id = params["id"] + if(isnull(id)) + return TRUE + investigate_log("[key_name(usr)] isolated [id]", INVESTIGATE_REAGENTS) + inserted?.reagents?.isolate_reagent(id) + return TRUE + if("purge") + var/id = params["id"] + if(isnull(id)) + return TRUE + var/amount = isnull(params["amount"])? INFINITY : round(text2num(params["amount"])) + if(!amount) + return TRUE + investigate_log("[key_name(usr)] purged[amount == INFINITY? "" : " [amount] of"] [id]", INVESTIGATE_REAGENTS) + inserted?.reagents?.remove_reagent(id, amount) + return TRUE + if("eject") + if(!inserted) + return TRUE + usr.grab_item_from_interacted_with(inserted, src) + usr.visible_action_feedback(SPAN_NOTICE("[usr] ejects [inserted] from [src]."), src, range = MESSAGE_RANGE_INVENTORY_SOFT) + investigate_log("[key_name(usr)] ejected [ref_name_path(inserted)]", INVESTIGATE_REAGENTS) + inserted = null + return TRUE + if("eject_cart") + if(!panel_open) + return TRUE + var/label = params["label"] + if(isnull(label)) + return TRUE + var/obj/item/reagent_containers/cartridge/dispenser/cart + for(cart as anything in cartridges) + if(cart.label == label) + break + if(cart?.label != label) + return TRUE + remove_cartridge(cart, usr) + usr.grab_item_from_interacted_with(cart, src) + usr.visible_action_feedback(SPAN_NOTICE("[usr] removes [cart] from [src]."), src, range = MESSAGE_RANGE_CONSTRUCTION) + update_static_data() + return TRUE + if("eject_cell") + if(!panel_open) + return TRUE + if(!cell) + return TRUE + usr.grab_item_from_interacted_with(cell, src) + usr.visible_action_feedback(SPAN_NOTICE("[usr] removes [cell] from [src]."), src, range = MESSAGE_RANGE_CONSTRUCTION) + component_parts -= cell + cell = null + return TRUE + if("macro") + var/index = text2num(params["index"]) + if(isnull(index) || (length(macros) < index)) + return TRUE + playsound(src, 'sound/machines/reagent_dispense.ogg') + var/list/the_list = macros[index]["data"] + if(!length(the_list)) + return TRUE + var/list/logstr = list() + for(var/id in the_list) + if(!check_reagent_id(id)) + logstr += "[id]: skipped" + break + var/amount = the_list[id] + amount = min(amount, dispense_amount_max) + if(!amount) + continue + var/wanted = min(inserted.reagents.available_volume(), amount) + if(!wanted) + logstr += "interrupt-nospace" + break + wanted = min(wanted, cell.use(DYNAMIC_KJ_TO_CELL_UNITS(wanted * kj_per_unit))) + if(!wanted) + logstr += "interrupt-nopower" + break + logstr += "[id]: [wanted]" + inserted.reagents.add_reagent(id, wanted) + investigate_log("[key_name(usr)] dispensed macro [jointext(logstr, ", ")]", INVESTIGATE_REAGENTS) + return TRUE + if("add_macro") + var/list/raw = params["data"] + var/name = params["name"] + if(isnull(name)) + name = input(usr, "Name this macro", "Chemical Macro", "Macro") as text|null + if(length(macros) > MAX_MACROS) + return TRUE + if(!length(raw) || !name) + return TRUE + var/list/built = list() + for(var/list/L as anything in raw) + built[L[1]] = max(0, round(text2num(L[2]))) + raw.len = min(raw.len, MAX_MACRO_STEPS) + LAZYINITLIST(macros) + macros[++macros.len] = list( + "name" = name, + "index" = ++macro_index_next, + "data" = built, + ) + update_static_data() + return TRUE + if("del_macro") + var/index = text2num(params["index"]) + if(isnull(index) || (length(macros) < index)) + return TRUE + macros.Cut(index, index + 1) + update_static_data() + return TRUE + +/obj/machinery/chemical_dispenser/attackby(obj/item/I, mob/living/user, params, clickchain_flags, damage_multiplier) + . = ..() + if(. & CLICKCHAIN_DO_NOT_PROPAGATE) + return + + if(panel_open) + if(istype(I, /obj/item/reagent_containers/cartridge/dispenser)) + var/obj/item/reagent_containers/cartridge/dispenser/cart = I + if(!cart.label) + user.action_feedback(SPAN_WARNING("[I] has no label!"), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + if(length(cartridges) >= cartridges_max) + user.action_feedback(SPAN_WARNING("[src] has no more room for cartridges."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + if(!user.attempt_insert_item_for_installation(I, src)) + user.action_feedback(SPAN_WARNING("[I] is stuck to your hand."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + if(!insert_cartridge(I)) + I.forceMove(drop_location()) + return CLICKCHAIN_DO_NOT_PROPAGATE + user.visible_action_feedback(SPAN_NOTICE("[user] inserts [I] into [src]."), src, range = MESSAGE_RANGE_CONSTRUCTION) + return CLICKCHAIN_DO_NOT_PROPAGATE + if(istype(I, /obj/item/reagent_synth)) + var/obj/item/reagent_synth/synth = I + if(synth.reagents_group) + for(var/obj/item/reagent_synth/other as anything in synthesizers) + if(other.reagents_group == synth.reagents_group) + user.action_feedback(SPAN_WARNING("[src] already has a synthesis module of this type."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + if(!user.attempt_insert_item_for_installation(I, src)) + user.action_feedback(SPAN_WARNING("[I] is stuck to your hand."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + synthesizers += synth + user.visible_action_feedback(SPAN_NOTICE("[user] inserts [I] into [src]."), src, range = MESSAGE_RANGE_CONSTRUCTION) + update_static_data() + return CLICKCHAIN_DO_NOT_PROPAGATE + if(istype(I, /obj/item/cell)) + if(cell) + user.action_feedback(SPAN_WARNING("[src] already has a cell."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + if(!user.attempt_insert_item_for_installation(I, src)) + user.action_feedback(SPAN_WARNING("[I] is stuck to your hand."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + cell = I + component_parts |= cell + user.visible_action_feedback(SPAN_NOTICE("[user] inserts [I] into [src]."), src, range = MESSAGE_RANGE_CONSTRUCTION) + return CLICKCHAIN_DO_NOT_PROPAGATE + + if(istype(I, /obj/item/reagent_containers)) + var/obj/item/reagent_containers/container = I + // trying to insert + if(!container.is_open_container()) + user.action_feedback(SPAN_WARNING("[I] can't be directly filled."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + // check + if(istype(container, /obj/item/reagent_containers/cartridge)) + // always fine + else if(istype(container, /obj/item/reagent_containers/food) && !allow_drinking) + user.action_feedback(SPAN_WARNING("[src] doesn't accept beakers."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + // insert + if(!user.transfer_item_to_loc(I, src)) + user.action_feedback(SPAN_WARNING("[I] is stuck to your hand."), src) + return CLICKCHAIN_DO_NOT_PROPAGATE + // process swap? + if(inserted) + investigate_log("[key_name(user)] ejected [ref_name_path(inserted)]", INVESTIGATE_REAGENTS) + user.visible_action_feedback(SPAN_NOTICE("[user] quickly swaps [src]'s [inserted] for [I]."), src, range = MESSAGE_RANGE_INVENTORY_SOFT) + user.put_in_hand_or_drop(inserted) + else + user.visible_action_feedback(SPAN_NOTICE("[user] inserts [I] into [src]."), src, range = MESSAGE_RANGE_INVENTORY_SOFT) + investigate_log("[key_name(user)] inserted [ref_name_path(I)]", INVESTIGATE_REAGENTS) + inserted = I + SStgui.update_uis(src) + return CLICKCHAIN_DO_NOT_PROPAGATE + +/obj/machinery/chemical_dispenser/proc/check_reagent_id(id) + for(var/obj/item/reagent_synth/synth as anything in synthesizers) + if(id in synth.reagents_provided) + return TRUE + return FALSE + +/obj/machinery/chemical_dispenser/proc/remove_cartridge(obj/item/reagent_containers/cartridge/dispenser/cart, atom/where = drop_location()) + ASSERT(cart in cartridges) + LAZYREMOVE(cartridges, cart) + cart.forceMove(where) + update_static_data() + +/obj/machinery/chemical_dispenser/proc/insert_cartridge(obj/item/reagent_containers/cartridge/dispenser/cart) + . = FALSE + ASSERT(cart.label) + for(var/obj/item/reagent_containers/cartridge/dispenser/other as anything in cartridges) + if(other.label == cart.label) + CRASH("collision on label.") + LAZYADD(cartridges, cart) + cart.forceMove(src) + update_static_data() + return TRUE + +/obj/machinery/chemical_dispenser/crowbar_act(obj/item/I, mob/user, flags, hint) + if(!allow_deconstruct || !panel_open) + return ..() + if(default_deconstruction_crowbar(user, I)) + user.visible_message(SPAN_NOTICE("[user] dismantles [src]."), range = MESSAGE_RANGE_CONSTRUCTION) + return TRUE + return ..() + +/obj/machinery/chemical_dispenser/screwdriver_act(obj/item/I, mob/user, flags, hint) + if(!allow_deconstruct) + return ..() + if(default_deconstruction_screwdriver(user, I)) + user.visible_message(SPAN_NOTICE("[user] [panel_open? "opens" : "closes"] the panel on [src]."), range = MESSAGE_RANGE_CONSTRUCTION) + return TRUE + return ..() + +/obj/machinery/chemical_dispenser/wrench_act(obj/item/I, mob/user, flags, hint) + if(!allow_unanchor) + return ..() + if(default_unfasten_wrench(user, I, 4 SECONDS)) + user.visible_message(SPAN_NOTICE("[user] [anchored? "fastens [src] to the ground" : "unfastens [src] from the ground"]."), range = MESSAGE_RANGE_CONSTRUCTION) + return TRUE + return ..() + +/obj/machinery/chemical_dispenser/dynamic_tool_functions(obj/item/I, mob/user) + . = list() + if(allow_unanchor) + .[TOOL_WRENCH] = anchored? "anchor" : "unanchor" + if(allow_deconstruct) + .[TOOL_SCREWDRIVER] = panel_open? "close panel" : "open panel" + if(panel_open) + .[TOOL_CROWBAR] = "deconstruct" + +/obj/machinery/chemical_dispenser/dynamic_tool_image(function, hint) + switch(function) + if(TOOL_WRENCH) + return anchored? dyntool_image_backward(TOOL_WRENCH) : dyntool_image_forward(TOOL_WRENCH) + if(TOOL_SCREWDRIVER) + return panel_open? dyntool_image_forward(TOOL_SCREWDRIVER) : dyntool_image_backward(TOOL_SCREWDRIVER) + return ..() + +/obj/machinery/chemical_dispenser/drop_products(method) + . = ..() + for(var/obj/item/I as anything in (synthesizers | cartridges)) + drop_product(method, I) + synthesizers = null + cartridges = null + if(inserted) + drop_product(method, inserted) + inserted = null + if(cell) + if(cell.loc == src) + drop_product(method, cell) + cell = null +/obj/machinery/chemical_dispenser/unanchored + anchored = FALSE diff --git a/code/modules/reagents/machinery/dispenser/dispenser2.dm b/code/modules/reagents/machinery/dispenser/dispenser2.dm deleted file mode 100644 index 6c39eab28ef..00000000000 --- a/code/modules/reagents/machinery/dispenser/dispenser2.dm +++ /dev/null @@ -1,194 +0,0 @@ -/obj/machinery/chemical_dispenser - name = "chemical dispenser" - icon = 'icons/obj/medical/chemical.dmi' - icon_state = "dispenser" - - var/list/spawn_cartridges = null // Set to a list of types to spawn one of each on New() - - var/list/cartridges = list() // Associative, label -> cartridge - var/obj/item/reagent_containers/container = null - - var/ui_title = "Chemical Dispenser" - - var/accept_drinking = 0 - var/amount = 30 - - use_power = USE_POWER_IDLE - idle_power_usage = 100 - anchored = 1 - -/obj/machinery/chemical_dispenser/Initialize(mapload) - . = ..() - if(spawn_cartridges) - for(var/type in spawn_cartridges) - add_cartridge(new type(src)) - -/obj/machinery/chemical_dispenser/examine(mob/user) - . = ..() - . += "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more." - -/obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/reagent_containers/chem_disp_cartridge/C, mob/user) - if(!istype(C)) - if(user) - to_chat(user, "\The [C] will not fit in \the [src]!") - return - - if(cartridges.len >= DISPENSER_MAX_CARTRIDGES) - if(user) - to_chat(user, "\The [src] does not have any slots open for \the [C] to fit into!") - return - - if(!C.label) - if(user) - to_chat(user, "\The [C] does not have a label!") - return - - if(cartridges[C.label]) - if(user) - to_chat(user, "\The [src] already contains a cartridge with that label!") - return - if(user && user.is_in_inventory(C)) - if(!user.attempt_insert_item_for_installation(C, src)) - return - to_chat(user, "You add \the [C] to \the [src].") - - cartridges[C.label] = C - cartridges = tim_sort(cartridges, /proc/cmp_text_asc) - SStgui.update_uis(src) - -/obj/machinery/chemical_dispenser/proc/remove_cartridge(label) - . = cartridges[label] - cartridges -= label - SStgui.update_uis(src) - -/obj/machinery/chemical_dispenser/attackby(obj/item/W, mob/user) - if(W.is_wrench()) - playsound(src, W.tool_sound, 50, 1) - to_chat(user, "You begin to [anchored ? "un" : ""]fasten \the [src].") - if (do_after(user, 20 * W.tool_speed)) - user.visible_message( - "\The [user] [anchored ? "un" : ""]fastens \the [src].", - "You have [anchored ? "un" : ""]fastened \the [src].", - "You hear a ratchet.") - anchored = !anchored - else - to_chat(user, "You decide not to [anchored ? "un" : ""]fasten \the [src].") - - else if(istype(W, /obj/item/reagent_containers/chem_disp_cartridge)) - add_cartridge(W, user) - - else if(W.is_screwdriver()) - var/label = input(user, "Which cartridge would you like to remove?", "Chemical Dispenser") as null|anything in cartridges - if(!label) return - var/obj/item/reagent_containers/chem_disp_cartridge/C = remove_cartridge(label) - if(C) - to_chat(user, "You remove \the [C] from \the [src].") - C.loc = loc - playsound(src, W.tool_sound, 50, 1) - - else if(istype(W, /obj/item/reagent_containers/glass) || istype(W, /obj/item/reagent_containers/food)) - if(container) - to_chat(user, "There is already \a [container] on \the [src]!") - return - - var/obj/item/reagent_containers/RC = W - - if(!accept_drinking && istype(RC,/obj/item/reagent_containers/food)) - to_chat(user, "This machine only accepts beakers!") - return - if(!RC.is_open_container()) - to_chat(user, "You don't see how \the [src] could dispense reagents into \the [RC].") - return - if(!user.attempt_insert_item_for_installation(RC, src)) - return - container = RC - to_chat(user, "You set \the [RC] on \the [src].") - SStgui.update_uis(src) // update all UIs attached to src - - else - return ..() - -/obj/machinery/chemical_dispenser/ui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ChemDispenser", ui_title) // 390, 655 - ui.open() - -/obj/machinery/chemical_dispenser/ui_data(mob/user) - var/data[0] - data["amount"] = amount - data["isBeakerLoaded"] = container ? 1 : 0 - data["glass"] = accept_drinking - - var/beakerContents[0] - if(container && container.reagents && container.reagents.reagent_list.len) - for(var/datum/reagent/R in container.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "id" = R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... - data["beakerContents"] = beakerContents - - if(container) - data["beakerCurrentVolume"] = container.reagents.total_volume - data["beakerMaxVolume"] = container.reagents.maximum_volume - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - - var/chemicals[0] - for(var/label in cartridges) - var/obj/item/reagent_containers/chem_disp_cartridge/C = cartridges[label] - chemicals.Add(list(list("title" = label, "id" = label, "amount" = C.reagents.total_volume))) // list in a list because Byond merges the first list... - data["chemicals"] = chemicals - return data - -/obj/machinery/chemical_dispenser/ui_act(action, params) - if(..()) - return TRUE - - . = TRUE - switch(action) - if("amount") - amount = clamp(round(text2num(params["amount"]), 1), 0, 120) // round to nearest 1 and clamp 0 - 120 - if("dispense") - var/label = params["reagent"] - if(cartridges[label] && container && container.is_open_container()) - var/obj/item/reagent_containers/chem_disp_cartridge/C = cartridges[label] - playsound(src, 'sound/machines/reagent_dispense.ogg', 25, 1) - C.reagents.trans_to(container, amount) - if("remove") - var/amount = text2num(params["amount"]) - if(!container || !amount) - return - var/datum/reagents/R = container.reagents - var/id = params["reagent"] - if(amount > 0) - R.remove_reagent(id, amount) - else if(amount == -1) // Isolate - R.isolate_reagent(id) - if("ejectBeaker") - if(!container) - return - if(!usr) - return - usr.grab_item_from_interacted_with(container, src) - container = null - else - return FALSE - - add_fingerprint(usr) - -/obj/machinery/chemical_dispenser/attack_ghost(mob/user) - . = ..() - if(machine_stat & BROKEN) - return - ui_interact(user) - -/obj/machinery/chemical_dispenser/attack_ai(mob/user) - attack_hand(user) - -/obj/machinery/chemical_dispenser/attack_hand(mob/user, list/params) - if(machine_stat & BROKEN) - return - ui_interact(user) - -/obj/machinery/chemical_dispenser/unanchored - anchored = FALSE diff --git a/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm b/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm deleted file mode 100644 index b34c80c44ec..00000000000 --- a/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm +++ /dev/null @@ -1,62 +0,0 @@ - -/obj/machinery/chemical_dispenser - var/_recharge_reagents = 1 - var/list/dispense_reagents = list() - var/process_tick = 0 - -/obj/machinery/chemical_dispenser/process(delta_time) - if(!_recharge_reagents) - return - if(machine_stat & (BROKEN|NOPOWER)) - return - . = 0 - for(var/id in dispense_reagents) - var/datum/reagent/R = SSchemistry.chemical_reagents[id] - if(!R) - stack_trace("[src] at [x],[y],[z] failed to find reagent '[id]'!") - dispense_reagents -= id - continue - var/obj/item/reagent_containers/chem_disp_cartridge/C = cartridges[R.name] - if(C && C.reagents.total_volume < C.reagents.maximum_volume) - var/to_restore = min(C.reagents.maximum_volume - C.reagents.total_volume, 1) - use_power(to_restore * 200) - C.reagents.add_reagent(id, to_restore) - . = 1 - if(.) - SStgui.update_uis(src) - -/obj/machinery/chemical_dispenser - dispense_reagents = list( - "hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", "sodium", - "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", - "copper", "mercury", "radium", "water", "ethanol", "sugar", "sacid", "tungsten" - ) - -/obj/machinery/chemical_dispenser/ert - dispense_reagents = list( - "inaprovaline", "ryetalyn", "paracetamol", "tramadol", "oxycodone", "sterilizine", "leporazine", - "kelotane", "dermaline", "dexalin", "dexalinp", "tricordrazine", "anti_toxin", "synaptizine", - "hyronalin", "arithrazine", "alkysine", "imidazoline", "peridaxon", "bicaridine", "hyperzine", - "rezadone", "spaceacillin", "ethylredoxrazine", "stoxin", "chloralhydrate", "cryoxadone", - "clonexadone" - ) - -/obj/machinery/chemical_dispenser/bar_soft - dispense_reagents = list( - "water", "ice", "coffee", "cream", "tea", "icetea", "cola", "spacemountainwind", "dr_gibb", "space_up", "tonic", - "sodawater", "lemon_lime", "sugar", "orangejuice", "limejuice", "watermelonjuice", "thirteenloko", "grapesoda", - "sarsaparilla", "sassafras" - ) - -/obj/machinery/chemical_dispenser/bar_alc - dispense_reagents = list( - "lemon_lime", "sugar", "orangejuice", "limejuice", "sodawater", "tonic", "beer", "kahlua", - "whiskey", "wine", "vodka", "cider", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "bitters", - "alcsassafras" - ) - -/obj/machinery/chemical_dispenser/bar_coffee - dispense_reagents = list( - "coffee", "cafe_latte", "soy_latte", "hot_coco", "milk", "cream", "tea", "ice", - "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint"//, "decaf" - ) diff --git a/code/modules/reagents/machinery/dispenser/dispenser_presets.dm b/code/modules/reagents/machinery/dispenser/dispenser_presets.dm index 95a0f09ffa4..aa081c9f799 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser_presets.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser_presets.dm @@ -1,160 +1,91 @@ /obj/machinery/chemical_dispenser/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/hydrogen, - /obj/item/reagent_containers/chem_disp_cartridge/lithium, - /obj/item/reagent_containers/chem_disp_cartridge/carbon, - /obj/item/reagent_containers/chem_disp_cartridge/nitrogen, - /obj/item/reagent_containers/chem_disp_cartridge/oxygen, - /obj/item/reagent_containers/chem_disp_cartridge/fluorine, - /obj/item/reagent_containers/chem_disp_cartridge/sodium, - /obj/item/reagent_containers/chem_disp_cartridge/aluminum, - /obj/item/reagent_containers/chem_disp_cartridge/silicon, - /obj/item/reagent_containers/chem_disp_cartridge/phosphorus, - /obj/item/reagent_containers/chem_disp_cartridge/sulfur, - /obj/item/reagent_containers/chem_disp_cartridge/chlorine, - /obj/item/reagent_containers/chem_disp_cartridge/potassium, - /obj/item/reagent_containers/chem_disp_cartridge/iron, - /obj/item/reagent_containers/chem_disp_cartridge/copper, - /obj/item/reagent_containers/chem_disp_cartridge/mercury, - /obj/item/reagent_containers/chem_disp_cartridge/radium, - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/ethanol, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/sacid, - /obj/item/reagent_containers/chem_disp_cartridge/tungsten, - /obj/item/reagent_containers/chem_disp_cartridge/calcium - ) + synthesizers = list( + /obj/item/reagent_synth/chemistry, + ) /obj/machinery/chemical_dispenser/full/unanchored anchored = FALSE -/obj/machinery/chemical_dispenser/ert - name = "medicine dispenser" - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/inaprov, - /obj/item/reagent_containers/chem_disp_cartridge/ryetalyn, - /obj/item/reagent_containers/chem_disp_cartridge/paracetamol, - /obj/item/reagent_containers/chem_disp_cartridge/tramadol, - /obj/item/reagent_containers/chem_disp_cartridge/oxycodone, - /obj/item/reagent_containers/chem_disp_cartridge/sterilizine, - /obj/item/reagent_containers/chem_disp_cartridge/leporazine, - /obj/item/reagent_containers/chem_disp_cartridge/kelotane, - /obj/item/reagent_containers/chem_disp_cartridge/dermaline, - /obj/item/reagent_containers/chem_disp_cartridge/dexalin, - /obj/item/reagent_containers/chem_disp_cartridge/dexalin_p, - /obj/item/reagent_containers/chem_disp_cartridge/tricord, - /obj/item/reagent_containers/chem_disp_cartridge/dylovene, - /obj/item/reagent_containers/chem_disp_cartridge/synaptizine, - /obj/item/reagent_containers/chem_disp_cartridge/hyronalin, - /obj/item/reagent_containers/chem_disp_cartridge/arithrazine, - /obj/item/reagent_containers/chem_disp_cartridge/alkysine, - /obj/item/reagent_containers/chem_disp_cartridge/imidazoline, - /obj/item/reagent_containers/chem_disp_cartridge/peridaxon, - /obj/item/reagent_containers/chem_disp_cartridge/bicaridine, - /obj/item/reagent_containers/chem_disp_cartridge/hyperzine, - /obj/item/reagent_containers/chem_disp_cartridge/rezadone, - /obj/item/reagent_containers/chem_disp_cartridge/spaceacillin, - /obj/item/reagent_containers/chem_disp_cartridge/ethylredox, - /obj/item/reagent_containers/chem_disp_cartridge/sleeptox, - /obj/item/reagent_containers/chem_disp_cartridge/chloral, - /obj/item/reagent_containers/chem_disp_cartridge/cryoxadone, - /obj/item/reagent_containers/chem_disp_cartridge/clonexadone - ) +/obj/machinery/chemical_dispenser/catering + abstract_type = /obj/machinery/chemical_dispenser/catering + allow_drinking = TRUE + synthesizers_swappable = FALSE -/obj/machinery/chemical_dispenser/bar_soft +/obj/item/circuitboard/machine/chemical_dispenser/soda + build_path = /obj/machinery/chemical_dispenser/catering/bar_soft + +/obj/machinery/chemical_dispenser/catering/bar_soft name = "soft drink dispenser" desc = "A soda machine." + circuit = /obj/item/circuitboard/machine/chemical_dispenser/soda icon_state = "soda_dispenser" - ui_title = "Soda Dispenser" - accept_drinking = 1 + synthesizers_swappable = FALSE + synthesizers = list( + /obj/item/reagent_synth/drink, + ) -/obj/machinery/chemical_dispenser/bar_soft/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/ice, - /obj/item/reagent_containers/chem_disp_cartridge/coffee, - /obj/item/reagent_containers/chem_disp_cartridge/cream, - /obj/item/reagent_containers/chem_disp_cartridge/tea, - /obj/item/reagent_containers/chem_disp_cartridge/icetea, - /obj/item/reagent_containers/chem_disp_cartridge/cola, - /obj/item/reagent_containers/chem_disp_cartridge/smw, - /obj/item/reagent_containers/chem_disp_cartridge/dr_gibb, - /obj/item/reagent_containers/chem_disp_cartridge/spaceup, - /obj/item/reagent_containers/chem_disp_cartridge/tonic, - /obj/item/reagent_containers/chem_disp_cartridge/sodawater, - /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/orange, - /obj/item/reagent_containers/chem_disp_cartridge/lime, - /obj/item/reagent_containers/chem_disp_cartridge/watermelon, - /obj/item/reagent_containers/chem_disp_cartridge/lemon, - /obj/item/reagent_containers/chem_disp_cartridge/sassafras, - /obj/item/reagent_containers/chem_disp_cartridge/sarsaparilla - ) - -/obj/machinery/chemical_dispenser/bar_soft/unanchored +/obj/machinery/chemical_dispenser/catering/bar_soft/unanchored anchored = FALSE -/obj/machinery/chemical_dispenser/bar_alc +/obj/item/circuitboard/machine/chemical_dispenser/booze + build_path = /obj/machinery/chemical_dispenser/catering/bar_alc + +/obj/machinery/chemical_dispenser/catering/bar_alc name = "booze dispenser" desc = "A beer machine. Like a soda machine, but more fun!" + circuit = /obj/item/circuitboard/machine/chemical_dispenser/booze icon_state = "booze_dispenser" - ui_title = "Booze Dispenser" - accept_drinking = 1 + synthesizers = list( + /obj/item/reagent_synth/bar, + ) -/obj/machinery/chemical_dispenser/bar_alc/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/orange, - /obj/item/reagent_containers/chem_disp_cartridge/lime, - /obj/item/reagent_containers/chem_disp_cartridge/sodawater, - /obj/item/reagent_containers/chem_disp_cartridge/tonic, - /obj/item/reagent_containers/chem_disp_cartridge/beer, - /obj/item/reagent_containers/chem_disp_cartridge/kahlua, - /obj/item/reagent_containers/chem_disp_cartridge/whiskey, - /obj/item/reagent_containers/chem_disp_cartridge/wine, - /obj/item/reagent_containers/chem_disp_cartridge/whitewine, - /obj/item/reagent_containers/chem_disp_cartridge/vodka, - /obj/item/reagent_containers/chem_disp_cartridge/gin, - /obj/item/reagent_containers/chem_disp_cartridge/rum, - /obj/item/reagent_containers/chem_disp_cartridge/tequila, - /obj/item/reagent_containers/chem_disp_cartridge/vermouth, - /obj/item/reagent_containers/chem_disp_cartridge/cognac, - /obj/item/reagent_containers/chem_disp_cartridge/cider, - /obj/item/reagent_containers/chem_disp_cartridge/ale, - /obj/item/reagent_containers/chem_disp_cartridge/mead, - /obj/item/reagent_containers/chem_disp_cartridge/alcsassafras - ) - -/obj/machinery/chemical_dispenser/bar_alc/unanchored +/obj/machinery/chemical_dispenser/catering/bar_alc/unanchored anchored = FALSE -/obj/machinery/chemical_dispenser/bar_coffee +/obj/item/circuitboard/machine/chemical_dispenser/cafe + build_path = /obj/machinery/chemical_dispenser/catering/bar_coffee + +/obj/machinery/chemical_dispenser/catering/bar_coffee name = "coffee dispenser" desc = "Driving crack dealers out of employment since 2280." icon_state = "coffee_dispenser" - ui_title = "Coffee Dispenser" - accept_drinking = 1 + circuit = /obj/item/circuitboard/machine/chemical_dispenser/cafe + synthesizers = list( + /obj/item/reagent_synth/cafe, + ) -/obj/machinery/chemical_dispenser/bar_coffee/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/coffee, - /obj/item/reagent_containers/chem_disp_cartridge/cafe_latte, - /obj/item/reagent_containers/chem_disp_cartridge/soy_latte, - /obj/item/reagent_containers/chem_disp_cartridge/hot_coco, - /obj/item/reagent_containers/chem_disp_cartridge/milk, - /obj/item/reagent_containers/chem_disp_cartridge/cream, - /obj/item/reagent_containers/chem_disp_cartridge/tea, - /obj/item/reagent_containers/chem_disp_cartridge/ice, - /obj/item/reagent_containers/chem_disp_cartridge/mint, - /obj/item/reagent_containers/chem_disp_cartridge/orange, - /obj/item/reagent_containers/chem_disp_cartridge/lemon, - /obj/item/reagent_containers/chem_disp_cartridge/lime, - /obj/item/reagent_containers/chem_disp_cartridge/berry, - // /obj/item/reagent_containers/chem_disp_cartridge/greentea, - // /obj/item/reagent_containers/chem_disp_cartridge/decaf - ) - -/obj/machinery/chemical_dispenser/bar_coffee/unanchored +/obj/machinery/chemical_dispenser/catering/bar_coffee/unanchored anchored = FALSE + +/obj/machinery/chemical_dispenser/xenoflora + name = "xenoflora chem dispenser" + synthesizers_swappable = FALSE + synthesizers = list( + /obj/item/reagent_synth/botanical, + ) + +/obj/machinery/chemical_dispenser/biochemistry + name = "bioproduct dispenser" + synthesizers_swappable = FALSE + synthesizers = list( + /obj/item/reagent_synth/bioproduct, + ) + +/obj/machinery/chemical_dispenser/ert + name = "medicine dispenser" + synthesizers_swappable = FALSE + synthesizers = list( + /obj/item/reagent_synth/medicine, + ) + +/obj/machinery/chemical_dispenser/ert/specialops + synthesizers = list( + /obj/item/reagent_synth/medicine, + /obj/item/reagent_synth/medicine_addon, + ) + +/obj/machinery/chemical_dispenser/ert/specialops/abductor + name = "chemical dispenser" + icon = 'icons/obj/abductor_vr.dmi' + icon_state = "dispenser_2way" + desc = "A mysterious machine which can fabricate many chemicals." diff --git a/code/modules/reagents/machinery/dispenser/dispenser_presets_vr.dm b/code/modules/reagents/machinery/dispenser/dispenser_presets_vr.dm deleted file mode 100644 index 57f62d50dc0..00000000000 --- a/code/modules/reagents/machinery/dispenser/dispenser_presets_vr.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/machinery/chemical_dispenser/xenoflora - name = "xenoflora chem dispenser" - ui_title = "Xenoflora Chemical Dispenser" - dispense_reagents = list( - "water", "sugar", "ethanol", "radium", "ammonia", "diethylamine", "plantbgone", "mutagen", "calcium" - ) - -/obj/machinery/chemical_dispenser/xenoflora/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/ethanol, - /obj/item/reagent_containers/chem_disp_cartridge/radium, - /obj/item/reagent_containers/chem_disp_cartridge/ammonia, - /obj/item/reagent_containers/chem_disp_cartridge/diethylamine, - /obj/item/reagent_containers/chem_disp_cartridge/plantbgone, - /obj/item/reagent_containers/chem_disp_cartridge/mutagen, - /obj/item/reagent_containers/chem_disp_cartridge/calcium - ) - -/obj/machinery/chemical_dispenser/biochemistry - name = "bioproduct dispenser" - ui_title = "Bioproduct Dispenser" - dispense_reagents = list( - "nutriment", "protein", "milk" - ) - -/obj/machinery/chemical_dispenser/biochemistry/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/nutriment, - /obj/item/reagent_containers/chem_disp_cartridge/protein, - /obj/item/reagent_containers/chem_disp_cartridge/milk - ) - -/obj/machinery/chemical_dispenser/ert/specialops - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/inaprov, - /obj/item/reagent_containers/chem_disp_cartridge/dylovene, - /obj/item/reagent_containers/chem_disp_cartridge/ryetalyn, - /obj/item/reagent_containers/chem_disp_cartridge/tramadol, - /obj/item/reagent_containers/chem_disp_cartridge/oxycodone, - /obj/item/reagent_containers/chem_disp_cartridge/sterilizine, - /obj/item/reagent_containers/chem_disp_cartridge/leporazine, - /obj/item/reagent_containers/chem_disp_cartridge/kelotane, - /obj/item/reagent_containers/chem_disp_cartridge/dermaline, - /obj/item/reagent_containers/chem_disp_cartridge/dexalin, - /obj/item/reagent_containers/chem_disp_cartridge/dexalin_p, - /obj/item/reagent_containers/chem_disp_cartridge/synaptizine, - /obj/item/reagent_containers/chem_disp_cartridge/hyronalin, - /obj/item/reagent_containers/chem_disp_cartridge/arithrazine, - /obj/item/reagent_containers/chem_disp_cartridge/alkysine, - /obj/item/reagent_containers/chem_disp_cartridge/imidazoline, - /obj/item/reagent_containers/chem_disp_cartridge/peridaxon, - /obj/item/reagent_containers/chem_disp_cartridge/bicaridine, - /obj/item/reagent_containers/chem_disp_cartridge/hyperzine, - /obj/item/reagent_containers/chem_disp_cartridge/rezadone, - /obj/item/reagent_containers/chem_disp_cartridge/spaceacillin, - /obj/item/reagent_containers/chem_disp_cartridge/ethylredox, - /obj/item/reagent_containers/chem_disp_cartridge/carthatoline, - /obj/item/reagent_containers/chem_disp_cartridge/corophizine, - /obj/item/reagent_containers/chem_disp_cartridge/myelamine, - /obj/item/reagent_containers/chem_disp_cartridge/osteodaxon, - /obj/item/reagent_containers/chem_disp_cartridge/biomass, - /obj/item/reagent_containers/chem_disp_cartridge/iron, - /obj/item/reagent_containers/chem_disp_cartridge/nutriment, - /obj/item/reagent_containers/chem_disp_cartridge/protein - ) - -/obj/machinery/chemical_dispenser/ert/specialops/abductor - name = "chemical dispenser" - icon = 'icons/obj/abductor_vr.dmi' - icon_state = "dispenser_2way" - desc = "A mysterious machine which can fabricate many chemicals." diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm deleted file mode 100644 index 495eac943bf..00000000000 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ /dev/null @@ -1,487 +0,0 @@ -/obj/structure/reagent_dispensers - name = "Dispenser" - desc = "..." - icon = 'icons/obj/objects.dmi' - icon_state = "watertank" - layer = TABLE_LAYER - density = 1 - anchored = 0 - pressure_resistance = 2*ONE_ATMOSPHERE - - // var/obj/item/hose_connector/input/active/InputSocket - // var/obj/item/hose_connector/output/active/OutputSocket - - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = list(10,25,50,100) - -/obj/structure/reagent_dispensers/attackby(obj/item/W as obj, mob/user as mob) - return - -/obj/structure/reagent_dispensers/Destroy() - // QDEL_NULL(InputSocket) - // QDEL_NULL(OutputSocket) - - ..() - -/obj/structure/reagent_dispensers/Initialize(mapload) - var/datum/reagents/R = new/datum/reagents(5000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - remove_obj_verb(src, /obj/structure/reagent_dispensers/verb/set_APTFT) - - // InputSocket = new(src) - // InputSocket.carrier = src - // OutputSocket = new(src) - // OutputSocket.carrier = src - - . = ..() - -/obj/structure/reagent_dispensers/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - . += "It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - . += "[R.volume] units of [R.name]" - else - . += "Nothing." - -/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts - if (N) - amount_per_transfer_from_this = N - -/obj/structure/reagent_dispensers/legacy_ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - new /obj/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/water(src.loc) - qdel(src) - return - else - return - -/obj/structure/reagent_dispensers/blob_act() - qdel(src) - - - -//Dispensers -/obj/structure/reagent_dispensers/watertank - name = "watertank" - desc = "A watertank." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "watertank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/watertank/Initialize(mapload) - . = ..() - reagents.add_reagent("water", 1000) - -/obj/structure/reagent_dispensers/watertank/high - name = "high-capacity water tank" - desc = "A highly-pressurized water tank made to hold vast amounts of water.." - icon_state = "watertank_high" - -/obj/structure/reagent_dispensers/watertank/high/Initialize(mapload) - . = ..() - reagents.add_reagent("water", 4000) - -/obj/structure/reagent_dispensers/fueltank - name = "fueltank" - desc = "A fueltank." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/obj/item/assembly_holder/rig = null - -/obj/structure/reagent_dispensers/fueltank/Initialize(mapload) - . = ..() - reagents.add_reagent("fuel",1000) - -/obj/structure/reagent_dispensers/fueltank/high - name = "high-capacity fuel tank" - desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." - icon_state = "weldtank_high" - -/obj/structure/reagent_dispensers/fueltank/high/Initialize(mapload) - . = ..() - reagents.add_reagent("fuel",4000) - -/obj/structure/reagent_dispensers/foam - name = "foamtank" - desc = "A foam tank." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "foamtank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/foam/Initialize(mapload) - . = ..() - reagents.add_reagent("firefoam",1000) - -/obj/structure/reagent_dispensers/fueltank/barrel - name = "hazardous barrel" - desc = "An open-topped barrel full of nasty-looking liquid." - icon_state = "barrel" - modded = TRUE - -/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/W as obj, mob/user as mob) - if (W.is_wrench()) //can't wrench it shut, it's always open - return - return ..() - -/obj/structure/reagent_dispensers/fueltank/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - if(modded) - . += "Fuel faucet is wrenched open, leaking the fuel!" - if(rig) - . += "There is some kind of device rigged to the tank." - -/obj/structure/reagent_dispensers/fueltank/attack_hand(mob/user, list/params) - if (rig) - usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") - if(do_after(usr, 20)) - usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") - rig.loc = get_turf(usr) - rig = null - cut_overlays() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (W.is_wrench()) - user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ - "You wrench [src]'s faucet [modded ? "closed" : "open"]") - modded = modded ? 0 : 1 - playsound(src, W.tool_sound, 75, 1) - if (modded) - message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") - log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") - leak_fuel(amount_per_transfer_from_this) - if (istype(W,/obj/item/assembly_holder)) - if (rig) - to_chat(user, "There is another device in the way.") - return ..() - user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") - if(do_after(user, 20)) - user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") - - var/obj/item/assembly_holder/H = W - if (istype(H.a_left,/obj/item/assembly/igniter) || istype(H.a_right,/obj/item/assembly/igniter)) - message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") - log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") - - if(!user.attempt_insert_item_for_installation(W, src)) - return - - rig = W - - var/icon/test = get_flat_icon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) - add_overlay(test) - - return ..() - - -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - if(istype(Proj.firer)) - message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") - log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") - - if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() - -/obj/structure/reagent_dispensers/fueltank/legacy_ex_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/blob_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/proc/explode() - if (reagents.total_volume > 500) - explosion(src.loc,1,2,4) - else if (reagents.total_volume > 100) - explosion(src.loc,0,1,3) - else if (reagents.total_volume > 50) - explosion(src.loc,-1,1,2) - if(src) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) - if (modded) - explode() - else if (temperature > T0C+500) - explode() - return ..() - -/obj/structure/reagent_dispensers/fueltank/Move() - if (..() && modded) - leak_fuel(amount_per_transfer_from_this/10.0) - -/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) - if (reagents.total_volume == 0) - return - - amount = min(amount, reagents.total_volume) - reagents.remove_reagent("fuel",amount) - new /obj/effect/debris/cleanable/liquid_fuel(src.loc, amount,1) - -/obj/structure/reagent_dispensers/peppertank - name = "Pepper Spray Refiller" - desc = "Refills pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 45 - -/obj/structure/reagent_dispensers/peppertank/Initialize(mapload) - . = ..() - reagents.add_reagent("condensedcapsaicin",1000) - - -/obj/structure/reagent_dispensers/water_cooler - name = "Water-Cooler" - desc = "A machine that dispenses water to drink." - amount_per_transfer_from_this = 5 - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - possible_transfer_amounts = null - anchored = TRUE - var/bottle = 0 - var/cups = 0 - var/cupholder = 0 - -/obj/structure/reagent_dispensers/water_cooler/full - bottle = 1 - cupholder = 1 - cups = 10 - -/obj/structure/reagent_dispensers/water_cooler/Initialize(mapload) - . = ..() - if(bottle) - reagents.add_reagent("water",120) - update_icon() - -/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - . = ..() - if(cupholder) - . += "There are [cups] cups in the cup dispenser." - -/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() - set name = "Rotate Cooler Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - setDir(turn(dir, 270)) - return 1 - -/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) - if(I.is_wrench()) - src.add_fingerprint(user) - if(bottle) - playsound(src, I.tool_sound, 50, 1) - if(do_after(user, 20) && bottle) - to_chat(user, "You unfasten the jug.") - var/obj/item/reagent_containers/glass/cooler_bottle/G = new /obj/item/reagent_containers/glass/cooler_bottle( src.loc ) - for(var/datum/reagent/R in reagents.reagent_list) - var/total_reagent = reagents.get_reagent_amount(R.id) - G.reagents.add_reagent(R.id, total_reagent) - reagents.clear_reagents() - bottle = 0 - update_icon() - else - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, 20 * I.tool_speed, src)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - playsound(src, I.tool_sound, 50, 1) - return - - if(I.is_screwdriver()) - if(cupholder) - playsound(src, I.tool_sound, 50, 1) - to_chat(user, "You take the cup dispenser off.") - new /obj/item/stack/material/plastic( src.loc ) - if(cups) - for(var/i = 0 to cups) - new /obj/item/reagent_containers/food/drinks/sillycup(src.loc) - cups = 0 - cupholder = 0 - update_icon() - return - if(!bottle && !cupholder) - playsound(src, I.tool_sound, 50, 1) - to_chat(user, "You start taking the water-cooler apart.") - if(do_after(user, 20 * I.tool_speed) && !bottle && !cupholder) - to_chat(user, "You take the water-cooler apart.") - new /obj/item/stack/material/plastic( src.loc, 4 ) - qdel(src) - return - - if(istype(I, /obj/item/reagent_containers/glass/cooler_bottle)) - src.add_fingerprint(user) - if(!bottle) - if(anchored) - var/obj/item/reagent_containers/glass/cooler_bottle/G = I - to_chat(user, "You start to screw the bottle onto the water-cooler.") - if(do_after(user, 20) && !bottle && anchored) - bottle = 1 - update_icon() - to_chat(user, "You screw the bottle onto the water-cooler!") - for(var/datum/reagent/R in G.reagents.reagent_list) - var/total_reagent = G.reagents.get_reagent_amount(R.id) - reagents.add_reagent(R.id, total_reagent) - qdel(G) - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a bottle there!") - return 1 - - if(istype(I, /obj/item/stack/material/plastic)) - if(!cupholder) - if(anchored) - var/obj/item/stack/material/plastic/P = I - src.add_fingerprint(user) - to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && !cupholder && anchored) - if (P.use(1)) - to_chat(user, "You attach a cup dispenser onto the water-cooler.") - cupholder = 1 - update_icon() - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a cup dispenser there!") - return - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user, list/params) - if(cups) - new /obj/item/reagent_containers/food/drinks/sillycup(src.loc) - cups-- - flick("[icon_state]-vend", src) - return - -/obj/structure/reagent_dispensers/water_cooler/update_icon() - icon_state = "water_cooler" - cut_overlays() - var/image/I - if(bottle) - I = image(icon, "water_cooler_bottle") - add_overlay(I) - return - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg." - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/beerkeg/Initialize(mapload) - . = ..() - reagents.add_reagent("beer",1000) - -/obj/structure/reagent_dispensers/beerkeg/fakenuke - name = "nuclear beer keg" - desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nuclearbomb0" - -/obj/structure/reagent_dispensers/virusfood - name = "Virus Food Dispenser" - desc = "A dispenser of virus food. Yum." - icon = 'icons/obj/objects.dmi' - icon_state = "virusfoodtank" - amount_per_transfer_from_this = 10 - anchored = TRUE - density = FALSE - -/obj/structure/reagent_dispensers/virusfood/Initialize(mapload) - . = ..() - reagents.add_reagent("virusfood", 1000) - -/obj/structure/reagent_dispensers/acid - name = "Sulphuric Acid Dispenser" - desc = "A dispenser of acid for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "acidtank" - amount_per_transfer_from_this = 10 - anchored = TRUE - density = FALSE - -/obj/structure/reagent_dispensers/acid/Initialize(mapload) - . = ..() - reagents.add_reagent("sacid", 1000) - -//Cooking oil refill tank -/obj/structure/reagent_dispensers/tallow - name = "tallow tank" - desc = "A fifty-litre tank of commercial-grade tallow, intended for use in large scale deep fryers. Store in a cool, dark place" - icon = 'icons/obj/objects.dmi' - icon_state = "oiltank" - amount_per_transfer_from_this = 120 - -/obj/structure/reagent_dispensers/tallow/Initialize(mapload) - . = ..() - reagents.add_reagent("tallow", 5000) - -/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - explode() - -/obj/structure/reagent_dispensers/cookingoil/legacy_ex_act() - explode() - -/obj/structure/reagent_dispensers/cookingoil/proc/explode() - reagents.splash_area(get_turf(src), 3) - visible_message(SPAN_DANGER("The [src] bursts open, spreading oil all over the area.")) - qdel(src) - -/obj/structure/reagent_dispensers/he3 - name = "fueltank" - desc = "A fueltank." - icon = 'icons/obj/objects.dmi' - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispenser/he3/Initialize(mapload) - ..() - reagents.add_reagent("helium3",1000) - -//Oil from Main. Seems like it could fit into Robotics as well as Surt stuff. -/obj/structure/reagent_dispensers/oil - name = "Oil Dispenser" - desc = "A dispenser of crude oil for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "oiltank" - amount_per_transfer_from_this = 10 - anchored = TRUE - -/obj/structure/reagent_dispensers/oil/Initialize(mapload) - . = ..() - reagents.add_reagent("oil", 1000) diff --git a/code/modules/reagents/machinery/dispenser/supply.dm b/code/modules/reagents/machinery/dispenser/supply.dm index 40372bc5abf..8844b0b582f 100644 --- a/code/modules/reagents/machinery/dispenser/supply.dm +++ b/code/modules/reagents/machinery/dispenser/supply.dm @@ -1,9 +1,9 @@ -/datum/supply_pack/chemistry_dispenser - name = "Reagent dispenser" +/datum/supply_pack/chemical_dispenser + name = "Reagent dispenser (Empty)" contains = list( /obj/machinery/chemical_dispenser/unanchored ) - cost = 25 + cost = 10 container_type = /obj/structure/largecrate container_name = "reagent dispenser crate" group = "Reagents" @@ -11,9 +11,9 @@ /datum/supply_pack/beer_dispenser name = "Booze dispenser" contains = list( - /obj/machinery/chemical_dispenser/bar_alc/unanchored + /obj/machinery/chemical_dispenser/catering/bar_alc/unanchored ) - cost = 25 + cost = 20 container_type = /obj/structure/largecrate container_name = "booze dispenser crate" group = "Reagents" @@ -21,218 +21,25 @@ /datum/supply_pack/soda_dispenser name = "Soda dispenser" contains = list( - /obj/machinery/chemical_dispenser/bar_soft/unanchored + /obj/machinery/chemical_dispenser/catering/bar_soft/unanchored ) - cost = 25 + cost = 20 container_type = /obj/structure/largecrate container_name = "soda dispenser crate" group = "Reagents" -/datum/supply_pack/reagents - name = "Chemistry dispenser refill" +/datum/supply_pack/reagent_synth_chemistry + name = "Reagent Synthesis Module - Chemistry" contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/hydrogen, - /obj/item/reagent_containers/chem_disp_cartridge/lithium, - /obj/item/reagent_containers/chem_disp_cartridge/carbon, - /obj/item/reagent_containers/chem_disp_cartridge/nitrogen, - /obj/item/reagent_containers/chem_disp_cartridge/oxygen, - /obj/item/reagent_containers/chem_disp_cartridge/fluorine, - /obj/item/reagent_containers/chem_disp_cartridge/sodium, - /obj/item/reagent_containers/chem_disp_cartridge/aluminum, - /obj/item/reagent_containers/chem_disp_cartridge/silicon, - /obj/item/reagent_containers/chem_disp_cartridge/phosphorus, - /obj/item/reagent_containers/chem_disp_cartridge/sulfur, - /obj/item/reagent_containers/chem_disp_cartridge/chlorine, - /obj/item/reagent_containers/chem_disp_cartridge/potassium, - /obj/item/reagent_containers/chem_disp_cartridge/iron, - /obj/item/reagent_containers/chem_disp_cartridge/copper, - /obj/item/reagent_containers/chem_disp_cartridge/mercury, - /obj/item/reagent_containers/chem_disp_cartridge/radium, - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/ethanol, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/sacid, - /obj/item/reagent_containers/chem_disp_cartridge/tungsten - ) - cost = 150 - container_type = /obj/structure/closet/crate/secure - container_name = "chemical crate" - access = list(ACCESS_MEDICAL_CHEMISTRY) - group = "Reagents" - -/datum/supply_pack/alcohol_reagents - name = "Bar alcoholic dispenser refill" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/beer, - /obj/item/reagent_containers/chem_disp_cartridge/kahlua, - /obj/item/reagent_containers/chem_disp_cartridge/whiskey, - /obj/item/reagent_containers/chem_disp_cartridge/wine, - /obj/item/reagent_containers/chem_disp_cartridge/whitewine, - /obj/item/reagent_containers/chem_disp_cartridge/vodka, - /obj/item/reagent_containers/chem_disp_cartridge/gin, - /obj/item/reagent_containers/chem_disp_cartridge/rum, - /obj/item/reagent_containers/chem_disp_cartridge/tequila, - /obj/item/reagent_containers/chem_disp_cartridge/vermouth, - /obj/item/reagent_containers/chem_disp_cartridge/cognac, - /obj/item/reagent_containers/chem_disp_cartridge/ale, - /obj/item/reagent_containers/chem_disp_cartridge/mead, - /obj/item/reagent_containers/chem_disp_cartridge/bitters - ) - cost = 50 - container_type = /obj/structure/closet/crate/secure - container_name = "alcoholic drinks crate" - access = list(ACCESS_GENERAL_BAR) - group = "Reagents" - -/datum/supply_pack/softdrink_reagents - name = "Bar soft drink dispenser refill" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/ice, - /obj/item/reagent_containers/chem_disp_cartridge/coffee, - /obj/item/reagent_containers/chem_disp_cartridge/cream, - /obj/item/reagent_containers/chem_disp_cartridge/tea, - /obj/item/reagent_containers/chem_disp_cartridge/icetea, - /obj/item/reagent_containers/chem_disp_cartridge/cola, - /obj/item/reagent_containers/chem_disp_cartridge/smw, - /obj/item/reagent_containers/chem_disp_cartridge/dr_gibb, - /obj/item/reagent_containers/chem_disp_cartridge/spaceup, - /obj/item/reagent_containers/chem_disp_cartridge/tonic, - /obj/item/reagent_containers/chem_disp_cartridge/sodawater, - /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/orange, - /obj/item/reagent_containers/chem_disp_cartridge/lime, - /obj/item/reagent_containers/chem_disp_cartridge/watermelon, - /obj/item/reagent_containers/chem_disp_cartridge/lemon - ) - cost = 50 - container_type = /obj/structure/closet/crate - container_name = "soft drinks crate" - group = "Reagents" - -/datum/supply_pack/coffee_reagents - name = "Coffee machine dispenser refill" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/coffee, - /obj/item/reagent_containers/chem_disp_cartridge/cafe_latte, - /obj/item/reagent_containers/chem_disp_cartridge/soy_latte, - /obj/item/reagent_containers/chem_disp_cartridge/hot_coco, - /obj/item/reagent_containers/chem_disp_cartridge/milk, - /obj/item/reagent_containers/chem_disp_cartridge/cream, - /obj/item/reagent_containers/chem_disp_cartridge/tea, - /obj/item/reagent_containers/chem_disp_cartridge/ice - ) - cost = 50 - container_type = /obj/structure/closet/crate - container_name = "coffee drinks crate" - group = "Reagents" + /obj/item/reagent_synth/chemistry, + ) /datum/supply_pack/dispenser_cartridges - name = "Empty dispenser cartridges" + name = "Large Chemical Dispenser Cartridges" contains = list( - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/reagent_containers/chem_disp_cartridge + /obj/item/reagent_containers/cartridge/dispenser/large = 10, ) cost = 15 container_type = /obj/structure/closet/crate container_name = "dispenser cartridge crate" group = "Reagents" - -#define SEC_PACK(_tname, _type, _name, _cname, _cost, _access)\ -/datum/supply_pack/dispenser_cartridges/_tname{\ - name = _name ;\ - container_name = _cname ;\ - container_type = /obj/structure/closet/crate/secure;\ - access = list( _access );\ - cost = _cost ;\ - contains = list( _type , _type );\ - group = "Reagent Cartridges"\ -}\ - -#define PACK(_tname, _type, _name, _cname, _cost)\ -/datum/supply_pack/dispenser_cartridges/_tname{\ - name = _name ;\ - container_name = _cname ;\ - container_type = /obj/structure/closet/crate;\ - cost = _cost ;\ - contains = list( _type , _type );\ - group = "Reagent Cartridges"\ -}\ - -// Chemistry-restricted (raw reagents excluding sugar/water) -// Datum path Contents type Supply pack name Container name Cost Container access -SEC_PACK(hydrogen, /obj/item/reagent_containers/chem_disp_cartridge/hydrogen, "Reagent refill - Hydrogen", "hydrogen reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(lithium, /obj/item/reagent_containers/chem_disp_cartridge/lithium, "Reagent refill - Lithium", "lithium reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(carbon, /obj/item/reagent_containers/chem_disp_cartridge/carbon, "Reagent refill - Carbon", "carbon reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(nitrogen, /obj/item/reagent_containers/chem_disp_cartridge/nitrogen, "Reagent refill - Nitrogen", "nitrogen reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(oxygen, /obj/item/reagent_containers/chem_disp_cartridge/oxygen, "Reagent refill - Oxygen", "oxygen reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(fluorine, /obj/item/reagent_containers/chem_disp_cartridge/fluorine, "Reagent refill - Fluorine", "fluorine reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(sodium, /obj/item/reagent_containers/chem_disp_cartridge/sodium, "Reagent refill - Sodium", "sodium reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(aluminium, /obj/item/reagent_containers/chem_disp_cartridge/aluminum, "Reagent refill - Aluminum", "aluminum reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(silicon, /obj/item/reagent_containers/chem_disp_cartridge/silicon, "Reagent refill - Silicon", "silicon reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(phosphorus,/obj/item/reagent_containers/chem_disp_cartridge/phosphorus, "Reagent refill - Phosphorus", "phosphorus reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(sulfur, /obj/item/reagent_containers/chem_disp_cartridge/sulfur, "Reagent refill - Sulfur", "sulfur reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(chlorine, /obj/item/reagent_containers/chem_disp_cartridge/chlorine, "Reagent refill - Chlorine", "chlorine reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(potassium, /obj/item/reagent_containers/chem_disp_cartridge/potassium, "Reagent refill - Potassium", "potassium reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(iron, /obj/item/reagent_containers/chem_disp_cartridge/iron, "Reagent refill - Iron", "iron reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(copper, /obj/item/reagent_containers/chem_disp_cartridge/copper, "Reagent refill - Copper", "copper reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(mercury, /obj/item/reagent_containers/chem_disp_cartridge/mercury, "Reagent refill - Mercury", "mercury reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(radium, /obj/item/reagent_containers/chem_disp_cartridge/radium, "Reagent refill - Radium", "radium reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(ethanol, /obj/item/reagent_containers/chem_disp_cartridge/ethanol, "Reagent refill - Ethanol", "ethanol reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(sacid, /obj/item/reagent_containers/chem_disp_cartridge/sacid, "Reagent refill - Sulfuric Acid", "sulfuric acid reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(tungsten, /obj/item/reagent_containers/chem_disp_cartridge/tungsten, "Reagent refill - Tungsten", "tungsten reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) -SEC_PACK(calcium, /obj/item/reagent_containers/chem_disp_cartridge/calcium, "Reagent refill - Calcium", "calcium reagent cartridge crate", 15, ACCESS_MEDICAL_CHEMISTRY) - -// Bar-restricted (alcoholic drinks) -// Datum path Contents type Supply pack name Container name Cost Container access -SEC_PACK(beer, /obj/item/reagent_containers/chem_disp_cartridge/beer, "Reagent refill - Beer", "beer reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(kahlua, /obj/item/reagent_containers/chem_disp_cartridge/kahlua, "Reagent refill - Kahlua", "kahlua reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(whiskey, /obj/item/reagent_containers/chem_disp_cartridge/whiskey, "Reagent refill - Whiskey", "whiskey reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(wine, /obj/item/reagent_containers/chem_disp_cartridge/wine, "Reagent refill - Wine", "wine reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(vodka, /obj/item/reagent_containers/chem_disp_cartridge/vodka, "Reagent refill - Vodka", "vodka reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(gin, /obj/item/reagent_containers/chem_disp_cartridge/gin, "Reagent refill - Gin", "gin reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(rum, /obj/item/reagent_containers/chem_disp_cartridge/rum, "Reagent refill - Rum", "rum reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(tequila, /obj/item/reagent_containers/chem_disp_cartridge/tequila, "Reagent refill - Tequila", "tequila reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(vermouth, /obj/item/reagent_containers/chem_disp_cartridge/vermouth, "Reagent refill - Vermouth", "vermouth reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(cognac, /obj/item/reagent_containers/chem_disp_cartridge/cognac, "Reagent refill - Cognac", "cognac reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(ale, /obj/item/reagent_containers/chem_disp_cartridge/ale, "Reagent refill - Ale", "ale reagent cartridge crate", 15, ACCESS_GENERAL_BAR) -SEC_PACK(mead, /obj/item/reagent_containers/chem_disp_cartridge/mead, "Reagent refill - Mead", "mead reagent cartridge crate", 15, ACCESS_GENERAL_BAR) - -// Unrestricted (water, sugar, non-alcoholic drinks) -// Datum path Contents type Supply pack name Container name Cost -PACK(water, /obj/item/reagent_containers/chem_disp_cartridge/water, "Reagent refill - Water", "water reagent cartridge crate", 15) -PACK(sugar, /obj/item/reagent_containers/chem_disp_cartridge/sugar, "Reagent refill - Sugar", "sugar reagent cartridge crate", 15) -PACK(ice, /obj/item/reagent_containers/chem_disp_cartridge/ice, "Reagent refill - Ice", "ice reagent cartridge crate", 15) -PACK(tea, /obj/item/reagent_containers/chem_disp_cartridge/tea, "Reagent refill - Tea", "tea reagent cartridge crate", 15) -PACK(icetea, /obj/item/reagent_containers/chem_disp_cartridge/icetea, "Reagent refill - Iced Tea", "iced tea reagent cartridge crate", 15) -PACK(cola, /obj/item/reagent_containers/chem_disp_cartridge/cola, "Reagent refill - Space Cola", "\improper Space Cola reagent cartridge crate", 15) -PACK(smw, /obj/item/reagent_containers/chem_disp_cartridge/smw, "Reagent refill - Space Mountain Wind", "\improper Space Mountain Wind reagent cartridge crate", 15) -PACK(dr_gibb, /obj/item/reagent_containers/chem_disp_cartridge/dr_gibb, "Reagent refill - Dr. Gibb", "\improper Dr. Gibb reagent cartridge crate", 15) -PACK(spaceup, /obj/item/reagent_containers/chem_disp_cartridge/spaceup, "Reagent refill - Space-Up", "\improper Space-Up reagent cartridge crate", 15) -PACK(tonic, /obj/item/reagent_containers/chem_disp_cartridge/tonic, "Reagent refill - Tonic Water", "tonic water reagent cartridge crate", 15) -PACK(sodawater, /obj/item/reagent_containers/chem_disp_cartridge/sodawater, "Reagent refill - Soda Water", "soda water reagent cartridge crate", 15) -PACK(lemon_lime, /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime, "Reagent refill - Lemon-Lime Juice", "lemon-lime juice reagent cartridge crate", 15) -PACK(orange, /obj/item/reagent_containers/chem_disp_cartridge/orange, "Reagent refill - Orange Juice", "orange juice reagent cartridge crate", 15) -PACK(lime, /obj/item/reagent_containers/chem_disp_cartridge/lime, "Reagent refill - Lime Juice", "lime juice reagent cartridge crate", 15) -PACK(lemon, /obj/item/reagent_containers/chem_disp_cartridge/lemon, "Reagent refill - Lemon Juice", "lemon juice reagent cartridge crate", 15) -PACK(watermelon, /obj/item/reagent_containers/chem_disp_cartridge/watermelon, "Reagent refill - Watermelon Juice", "watermelon juice reagent cartridge crate", 15) -PACK(coffee, /obj/item/reagent_containers/chem_disp_cartridge/coffee, "Reagent refill - Coffee", "coffee reagent cartridge crate", 15) -PACK(cafe_latte, /obj/item/reagent_containers/chem_disp_cartridge/cafe_latte, "Reagent refill - Cafe Latte", "cafe latte reagent cartridge crate", 15) -PACK(soy_latte, /obj/item/reagent_containers/chem_disp_cartridge/soy_latte, "Reagent refill - Soy Latte", "soy latte reagent cartridge crate", 15) -PACK(hot_coco, /obj/item/reagent_containers/chem_disp_cartridge/hot_coco, "Reagent refill - Hot Coco", "hot coco reagent cartridge crate", 15) -PACK(milk, /obj/item/reagent_containers/chem_disp_cartridge/milk, "Reagent refill - Milk", "milk reagent cartridge crate", 15) -PACK(cream, /obj/item/reagent_containers/chem_disp_cartridge/cream, "Reagent refill - Cream", "cream reagent cartridge crate", 15) - -/datum/silly_datum_to_block_byond_bug_2072419 - -#undef SEC_PACK -#undef PACK diff --git a/code/modules/reagents/machinery/dispenser/synthesizer.dm b/code/modules/reagents/machinery/dispenser/synthesizer.dm new file mode 100644 index 00000000000..1538696bfdd --- /dev/null +++ b/code/modules/reagents/machinery/dispenser/synthesizer.dm @@ -0,0 +1,186 @@ +/obj/item/reagent_synth + name = "reagent synthesis module" + desc = "Some kind of complex device used for synthesizing reagents." + worn_render_flags = WORN_RENDER_INHAND_NO_RENDER | WORN_RENDER_SLOT_NO_RENDER + icon = 'icons/items/parts/reagent_synth.dmi' + icon_state = "synth_prefab" + + /// type enum + var/reagents_group + /// reagents by typepath or id that we allow syntehsis of + var/list/reagents_provided + +/obj/item/reagent_synth/Initialize(mapload) + if(has_typelist(NAMEOF(src, reagents_provided))) + reagents_provided = get_typelist(NAMEOF(src, reagents_provided)) + else + reagents_provided = typelist(NAMEOF(src, reagents_provided), resolve_reagents_provided()) + return ..() + +/obj/item/reagent_synth/proc/resolve_reagents_provided() + + RETURN_TYPE(/list) + . = list() + for(var/thing in reagents_provided) + if(istext(thing)) + . += thing + else if(ispath(thing)) + var/datum/reagent/accessing = thing + . += initial(accessing.id) + +/obj/item/reagent_synth/chemistry + name = "reagent synthesis module (Chemistry)" + reagents_provided = list( + /datum/reagent/hydrogen, + /datum/reagent/lithium, + /datum/reagent/carbon, + /datum/reagent/nitrogen, + /datum/reagent/oxygen, + /datum/reagent/fluorine, + /datum/reagent/sodium, + /datum/reagent/aluminum, + /datum/reagent/silicon, + /datum/reagent/phosphorus, + /datum/reagent/iron, + /datum/reagent/copper, + /datum/reagent/mercury, + /datum/reagent/radium, + /datum/reagent/water, + /datum/reagent/ethanol, + /datum/reagent/sugar, + /datum/reagent/acid, + /datum/reagent/tungsten, + /datum/reagent/calcium, + ) + +/obj/item/reagent_synth/bar + name = "reagent synthesis module (Bar)" + reagents_provided = list( + /datum/reagent/drink/soda/lemon_lime, + /datum/reagent/sugar, + /datum/reagent/drink/juice/orange, + /datum/reagent/drink/juice/lime, + /datum/reagent/drink/soda/sodawater, + /datum/reagent/drink/soda/tonic, + /datum/reagent/ethanol/beer, + /datum/reagent/ethanol/coffee/kahlua, + /datum/reagent/ethanol/whiskey, + /datum/reagent/ethanol/wine, + /datum/reagent/ethanol/whitewine, + /datum/reagent/ethanol/vodka, + /datum/reagent/ethanol/gin, + /datum/reagent/ethanol/rum, + /datum/reagent/ethanol/tequila, + /datum/reagent/ethanol/vermouth, + /datum/reagent/ethanol/cognac, + /datum/reagent/ethanol/cider, + /datum/reagent/ethanol/ale, + /datum/reagent/ethanol/mead, + /datum/reagent/ethanol/alcsassafras + ) + +/obj/item/reagent_synth/cafe + name = "reagent synthesis module (Cafe)" + reagents_provided = list( + /datum/reagent/drink/coffee, + /datum/reagent/drink/coffee/cafe_latte, + /datum/reagent/drink/coffee/soy_latte, + /datum/reagent/drink/hot_coco, + /datum/reagent/drink/milk, + /datum/reagent/drink/milk/cream, + /datum/reagent/drink/tea, + /datum/reagent/drink/ice, + /datum/reagent/nutriment/mint, + /datum/reagent/drink/juice/orange, + /datum/reagent/drink/juice/lemon, + /datum/reagent/drink/juice/lime, + /datum/reagent/drink/juice/berry, + ) + +/obj/item/reagent_synth/drink + name = "reagent synthesis module (Soda)" + reagents_provided = list( + /datum/reagent/water, + /datum/reagent/drink/ice, + /datum/reagent/drink/coffee, + /datum/reagent/drink/milk/cream, + /datum/reagent/drink/tea, + /datum/reagent/drink/tea/icetea, + /datum/reagent/drink/soda, + /datum/reagent/drink/soda/spacemountainwind, + /datum/reagent/drink/soda/sodawater, + /datum/reagent/drink/soda/dr_gibb, + /datum/reagent/drink/soda/space_up, + /datum/reagent/drink/soda/tonic, + /datum/reagent/sugar, + /datum/reagent/drink/juice/orange, + /datum/reagent/drink/juice/watermelon, + /datum/reagent/drink/juice/lemon, + /datum/reagent/drink/soda/sassafras, + /datum/reagent/drink/soda/sarsaparilla, + ) + +/obj/item/reagent_synth/medicine + name = "reagent synthesis module (Medicine)" + reagents_provided = list( + /datum/reagent/inaprovaline, + /datum/reagent/ryetalyn, + /datum/reagent/paracetamol, + /datum/reagent/tramadol, + /datum/reagent/oxycodone, + /datum/reagent/sterilizine, + /datum/reagent/leporazine, + /datum/reagent/kelotane, + /datum/reagent/dermaline, + /datum/reagent/dexalin, + /datum/reagent/dexalinp, + /datum/reagent/tricordrazine, + /datum/reagent/dylovene, + /datum/reagent/synaptizine, + /datum/reagent/hyronalin, + /datum/reagent/arithrazine, + /datum/reagent/alkysine, + /datum/reagent/imidazoline, + /datum/reagent/peridaxon, + /datum/reagent/bicaridine, + /datum/reagent/hyperzine, + /datum/reagent/rezadone, + /datum/reagent/spaceacillin, + /datum/reagent/ethylredoxrazine, + /datum/reagent/soporific, + /datum/reagent/chloralhydrate, + /datum/reagent/cryoxadone, + /datum/reagent/clonexadone, + ) + +/obj/item/reagent_synth/medicine_addon + reagents_provided = list( + /datum/reagent/carthatoline, + /datum/reagent/corophizine, + /datum/reagent/myelamine, + /datum/reagent/osteodaxon, + /datum/reagent/nutriment/biomass, + /datum/reagent/iron, + /datum/reagent/nutriment, + /datum/reagent/nutriment/protein + ) + +/obj/item/reagent_synth/bioproduct + reagents_provided = list( + /datum/reagent/nutriment, + /datum/reagent/nutriment/protein, + /datum/reagent/drink/milk, + ) + +/obj/item/reagent_synth/botanical + reagents_provided = list( + /datum/reagent/water, + /datum/reagent/sugar, + /datum/reagent/ethanol, + /datum/reagent/radium, + /datum/reagent/mutagen, + /datum/reagent/ammonia, + /datum/reagent/diethylamine, + /datum/reagent/toxin/plantbgone, + /datum/reagent/calcium, + ) diff --git a/code/modules/reagents/machinery/reagent_dispenser.dm b/code/modules/reagents/machinery/reagent_dispenser.dm new file mode 100644 index 00000000000..18144d2a75d --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser.dm @@ -0,0 +1,67 @@ +/obj/structure/reagent_dispensers + name = "Dispenser" + desc = "..." + icon = 'icons/obj/objects.dmi' + icon_state = "watertank" + layer = TABLE_LAYER + density = 1 + anchored = 0 + pressure_resistance = 2 * ONE_ATMOSPHERE + + /// what this starts with - wiped on init + var/list/starting_reagents + /// max capacity + var/starting_capacity = 5000 + + var/amount_per_transfer_from_this = 10 + var/possible_transfer_amounts = list(10,25,50,100) + +/obj/structure/reagent_dispensers/attackby(obj/item/W as obj, mob/user as mob) + return + + +/obj/structure/reagent_dispensers/Initialize(mapload) + . = ..() + create_reagents(starting_capacity) + for(var/thing in starting_reagents) + reagents.add_reagent(thing, starting_reagents[thing]) + + if (!possible_transfer_amounts) + remove_obj_verb(src, /obj/structure/reagent_dispensers/verb/set_APTFT) + +/obj/structure/reagent_dispensers/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + . += "[R.volume] units of [R.name]" + else + . += "Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + if (N) + amount_per_transfer_from_this = N + +/obj/structure/reagent_dispensers/legacy_ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + new /obj/effect/water(src.loc) + qdel(src) + return + if(3.0) + if (prob(5)) + new /obj/effect/water(src.loc) + qdel(src) + return + +/obj/structure/reagent_dispensers/blob_act() + qdel(src) diff --git a/code/modules/reagents/machinery/reagent_dispenser/acid.dm b/code/modules/reagents/machinery/reagent_dispenser/acid.dm new file mode 100644 index 00000000000..f4e3e4b5191 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/acid.dm @@ -0,0 +1,12 @@ +/obj/structure/reagent_dispensers/acid + name = "Sulphuric Acid Dispenser" + desc = "A dispenser of acid for industrial processes." + icon = 'icons/obj/objects.dmi' + icon_state = "acidtank" + amount_per_transfer_from_this = 10 + anchored = TRUE + density = FALSE + starting_reagents = list( + /datum/reagent/acid = 1000, + ) + starting_capacity = 1000 diff --git a/code/modules/reagents/machinery/reagent_dispenser/beer.dm b/code/modules/reagents/machinery/reagent_dispenser/beer.dm new file mode 100644 index 00000000000..098edd8985b --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/beer.dm @@ -0,0 +1,16 @@ +/obj/structure/reagent_dispensers/beerkeg + name = "beer keg" + desc = "A beer keg." + icon = 'icons/obj/objects.dmi' + icon_state = "beertankTEMP" + amount_per_transfer_from_this = 10 + starting_reagents = list( + /datum/reagent/ethanol/beer = 1000, + ) + starting_capacity = 1000 + +/obj/structure/reagent_dispensers/beerkeg/fakenuke + name = "nuclear beer keg" + desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nuclearbomb0" diff --git a/code/modules/reagents/machinery/reagent_dispenser/foam.dm b/code/modules/reagents/machinery/reagent_dispenser/foam.dm new file mode 100644 index 00000000000..0e6cb142442 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/foam.dm @@ -0,0 +1,10 @@ +/obj/structure/reagent_dispensers/foam + name = "foamtank" + desc = "A foam tank." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "foamtank" + starting_reagents = list( + /datum/reagent/firefighting_foam = 1000, + ) + starting_capacity = 1000 + amount_per_transfer_from_this = 10 diff --git a/code/modules/reagents/machinery/reagent_dispenser/fuel.dm b/code/modules/reagents/machinery/reagent_dispenser/fuel.dm new file mode 100644 index 00000000000..16a8dcc0c80 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/fuel.dm @@ -0,0 +1,129 @@ +/obj/structure/reagent_dispensers/fueltank + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "weldtank" + starting_reagents = list( + /datum/reagent/fuel = 1000, + ) + starting_capacity = 1000 + amount_per_transfer_from_this = 10 + var/modded = 0 + var/obj/item/assembly_holder/rig = null + +/obj/structure/reagent_dispensers/fueltank/high + name = "high-capacity fuel tank" + desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." + icon_state = "weldtank_high" + starting_reagents = list( + /datum/reagent/water = 4000, + ) + starting_capacity = 4000 + +/obj/structure/reagent_dispensers/fueltank/barrel + name = "hazardous barrel" + desc = "An open-topped barrel full of nasty-looking liquid." + icon_state = "barrel" + modded = TRUE + +/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/W as obj, mob/user as mob) + if (W.is_wrench()) //can't wrench it shut, it's always open + return + return ..() + +/obj/structure/reagent_dispensers/fueltank/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + if(modded) + . += "Fuel faucet is wrenched open, leaking the fuel!" + if(rig) + . += "There is some kind of device rigged to the tank." + +/obj/structure/reagent_dispensers/fueltank/attack_hand() + if (rig) + usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") + if(do_after(usr, 20)) + usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") + rig.loc = get_turf(usr) + rig = null + cut_overlays() + +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + if (W.is_wrench()) + user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ + "You wrench [src]'s faucet [modded ? "closed" : "open"]") + modded = modded ? 0 : 1 + playsound(src, W.tool_sound, 75, 1) + if (modded) + message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") + log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") + leak_fuel(amount_per_transfer_from_this) + if (istype(W,/obj/item/assembly_holder)) + if (rig) + to_chat(user, "There is another device in the way.") + return ..() + user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") + if(do_after(user, 20)) + user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") + + var/obj/item/assembly_holder/H = W + if (istype(H.a_left,/obj/item/assembly/igniter) || istype(H.a_right,/obj/item/assembly/igniter)) + message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") + log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") + + if(!user.attempt_insert_item_for_installation(W, src)) + return + + rig = W + + var/icon/test = get_flat_icon(W) + test.Shift(NORTH,1) + test.Shift(EAST,6) + add_overlay(test) + + return ..() + +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + if(istype(Proj.firer)) + message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") + log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") + + if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) + explode() + +/obj/structure/reagent_dispensers/fueltank/legacy_ex_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/blob_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/proc/explode() + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else if (reagents.total_volume > 50) + explosion(src.loc,-1,1,2) + if(src) + qdel(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) + if (modded) + explode() + else if (temperature > T0C+500) + explode() + return ..() + +/obj/structure/reagent_dispensers/fueltank/Move() + if (..() && modded) + leak_fuel(amount_per_transfer_from_this/10.0) + +/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) + if (reagents.total_volume == 0) + return + + amount = min(amount, reagents.total_volume) + reagents.remove_reagent("fuel",amount) + new /obj/effect/debris/cleanable/liquid_fuel(src.loc, amount,1) diff --git a/code/modules/reagents/machinery/reagent_dispenser/helium.dm b/code/modules/reagents/machinery/reagent_dispenser/helium.dm new file mode 100644 index 00000000000..ca1398b9538 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/helium.dm @@ -0,0 +1,10 @@ +/obj/structure/reagent_dispensers/he3 + name = "helium tank" + desc = "A tank of helium-3. Wait, WHAT?" + icon = 'icons/obj/objects.dmi' + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + starting_reagents = list( + /datum/reagent/helium3 = 1000, + ) + starting_capacity = 1000 diff --git a/code/modules/reagents/machinery/reagent_dispenser/oil.dm b/code/modules/reagents/machinery/reagent_dispenser/oil.dm new file mode 100644 index 00000000000..71f673e4c33 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/oil.dm @@ -0,0 +1,34 @@ +/obj/structure/reagent_dispensers/oil + name = "Oil Dispenser" + desc = "A dispenser of crude oil for industrial processes." + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 10 + anchored = TRUE + starting_reagents = list( + /datum/reagent/crude_oil = 1000, + ) + starting_capacity = 1000 + +/obj/structure/reagent_dispensers/tallow + name = "tallow tank" + desc = "A fifty-litre tank of commercial-grade tallow, intended for use in large scale deep fryers. Store in a cool, dark place" + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 120 + starting_reagents = list( + /datum/reagent/nutriment/triglyceride/oil/tallow = 5000, + ) + starting_capacity = 5000 + +/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + explode() + +/obj/structure/reagent_dispensers/cookingoil/legacy_ex_act() + explode() + +/obj/structure/reagent_dispensers/cookingoil/proc/explode() + reagents.splash_area(get_turf(src), 3) + visible_message(SPAN_DANGER("The [src] bursts open, spreading oil all over the area.")) + qdel(src) diff --git a/code/modules/reagents/machinery/reagent_dispenser/pepper.dm b/code/modules/reagents/machinery/reagent_dispenser/pepper.dm new file mode 100644 index 00000000000..865d54a315f --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/pepper.dm @@ -0,0 +1,12 @@ +/obj/structure/reagent_dispensers/peppertank + name = "Pepper Spray Refiller" + desc = "Refills pepper spray canisters." + icon = 'icons/obj/objects.dmi' + icon_state = "peppertank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 45 + starting_reagents = list( + /datum/reagent/condensedcapsaicin = 1000, + ) + starting_capacity = 1000 diff --git a/code/modules/reagents/machinery/reagent_dispenser/virusfood.dm b/code/modules/reagents/machinery/reagent_dispenser/virusfood.dm new file mode 100644 index 00000000000..f38ce570634 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/virusfood.dm @@ -0,0 +1,12 @@ +/obj/structure/reagent_dispensers/virusfood + name = "Virus Food Dispenser" + desc = "A dispenser of virus food. Yum." + icon = 'icons/obj/objects.dmi' + icon_state = "virusfoodtank" + amount_per_transfer_from_this = 10 + anchored = TRUE + density = FALSE + starting_reagents = list( + /datum/reagent/nutriment/virus_food = 1000, + ) + starting_capacity = 1000 diff --git a/code/modules/reagents/machinery/reagent_dispenser/water.dm b/code/modules/reagents/machinery/reagent_dispenser/water.dm new file mode 100644 index 00000000000..b0c3b913b91 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/water.dm @@ -0,0 +1,19 @@ +/obj/structure/reagent_dispensers/watertank + name = "watertank" + desc = "A watertank." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "watertank" + starting_reagents = list( + /datum/reagent/water = 1000, + ) + starting_capacity = 1000 + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/watertank/high + name = "high-capacity water tank" + desc = "A highly-pressurized water tank made to hold vast amounts of water.." + icon_state = "watertank_high" + starting_reagents = list( + /datum/reagent/water = 5000, + ) + starting_capacity = 5000 diff --git a/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm b/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm new file mode 100644 index 00000000000..75dde8c7208 --- /dev/null +++ b/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm @@ -0,0 +1,138 @@ +/obj/structure/reagent_dispensers/water_cooler + name = "Water-Cooler" + desc = "A machine that dispenses water to drink." + amount_per_transfer_from_this = 5 + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler" + possible_transfer_amounts = null + anchored = TRUE + var/bottle = 0 + var/cups = 0 + var/cupholder = 0 + +/obj/structure/reagent_dispensers/water_cooler/full + bottle = 1 + cupholder = 1 + cups = 10 + +/obj/structure/reagent_dispensers/water_cooler/Initialize(mapload) + . = ..() + if(bottle) + reagents.add_reagent(/datum/reagent/water, 120) + update_icon() + +/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) + . = ..() + if(cupholder) + . += "There are [cups] cups in the cup dispenser." + +/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() + set name = "Rotate Cooler Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + setDir(turn(dir, 270)) + return 1 + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_wrench()) + src.add_fingerprint(user) + if(bottle) + playsound(src, I.tool_sound, 50, 1) + if(do_after(user, 20) && bottle) + to_chat(user, "You unfasten the jug.") + var/obj/item/reagent_containers/glass/cooler_bottle/G = new /obj/item/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + update_icon() + else + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20 * I.tool_speed, src)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + playsound(src, I.tool_sound, 50, 1) + return + + if(I.is_screwdriver()) + if(cupholder) + playsound(src, I.tool_sound, 50, 1) + to_chat(user, "You take the cup dispenser off.") + new /obj/item/stack/material/plastic( src.loc ) + if(cups) + for(var/i = 0 to cups) + new /obj/item/reagent_containers/food/drinks/sillycup(src.loc) + cups = 0 + cupholder = 0 + update_icon() + return + if(!bottle && !cupholder) + playsound(src, I.tool_sound, 50, 1) + to_chat(user, "You start taking the water-cooler apart.") + if(do_after(user, 20 * I.tool_speed) && !bottle && !cupholder) + to_chat(user, "You take the water-cooler apart.") + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/reagent_containers/glass/cooler_bottle)) + src.add_fingerprint(user) + if(!bottle) + if(anchored) + var/obj/item/reagent_containers/glass/cooler_bottle/G = I + to_chat(user, "You start to screw the bottle onto the water-cooler.") + if(do_after(user, 20) && !bottle && anchored) + bottle = 1 + update_icon() + to_chat(user, "You screw the bottle onto the water-cooler!") + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a bottle there!") + return 1 + + if(istype(I, /obj/item/stack/material/plastic)) + if(!cupholder) + if(anchored) + var/obj/item/stack/material/plastic/P = I + src.add_fingerprint(user) + to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && !cupholder && anchored) + if (P.use(1)) + to_chat(user, "You attach a cup dispenser onto the water-cooler.") + cupholder = 1 + update_icon() + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a cup dispenser there!") + return + +/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) + if(cups) + new /obj/item/reagent_containers/food/drinks/sillycup(src.loc) + cups-- + flick("[icon_state]-vend", src) + return + +/obj/structure/reagent_dispensers/water_cooler/update_icon() + icon_state = "water_cooler" + cut_overlays() + var/image/I + if(bottle) + I = image(icon, "water_cooler_bottle") + add_overlay(I) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index ff4325ad39d..7901aa80a2d 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -28,9 +28,6 @@ return return -/obj/item/reagent_containers/afterattack(obj/target, mob/user, flag) - return - /obj/item/reagent_containers/proc/reagentlist() // For attack logs if(reagents) return reagents.get_reagents() @@ -44,7 +41,7 @@ to_chat(user, "[target] is empty.") return 1 - if(reagents && !reagents.get_free_space()) + if(reagents && !reagents.available_volume()) to_chat(user, "[src] is full.") return 1 @@ -60,7 +57,7 @@ to_chat(user, "[src] is empty.") return 1 - if(target.reagents && !target.reagents.get_free_space()) + if(target.reagents && !target.reagents.available_volume()) to_chat(user, "[target] is full.") return 1 @@ -139,7 +136,7 @@ to_chat(user, "[src] is empty.") return 1 - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) to_chat(user, "[target] is full.") return 1 diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index ce1e448a6f0..5dc3f1ba057 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -39,7 +39,7 @@ for(var/T in reagent_ids) reagent_volumes[T] = volume - var/datum/reagent/R = SSchemistry.chemical_reagents[T] + var/datum/reagent/R = SSchemistry.reagent_lookup[T] reagent_names += R.name START_PROCESSING(SSobj, src) @@ -117,11 +117,11 @@ if(t) playsound(src, 'sound/effects/pop.ogg', 50, 0) mode = t - var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]] + var/datum/reagent/R = SSchemistry.reagent_lookup[reagent_ids[mode]] to_chat(usr, "Synthesizer is now producing '[R.name]'.") /obj/item/reagent_containers/borghypo/examine(mob/user) - var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]] + var/datum/reagent/R = SSchemistry.reagent_lookup[reagent_ids[mode]] . = ..() . += "It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left." @@ -192,7 +192,7 @@ to_chat(user, "[src] is out of this reagent, give it some time to refill.") return - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) to_chat(user, "[target] is full.") return diff --git a/code/modules/reagents/reagent_containers/cartridge.dm b/code/modules/reagents/reagent_containers/cartridge.dm new file mode 100644 index 00000000000..2beb2aaef65 --- /dev/null +++ b/code/modules/reagents/reagent_containers/cartridge.dm @@ -0,0 +1,30 @@ +/obj/item/reagent_containers/cartridge + /// prespawn with a reagent? + var/spawn_reagent + /// prespawn amount instead of max? + var/spawn_amount + +/obj/item/reagent_containers/cartridge/Initialize(mapload) + . = ..() + if(spawn_reagent) + reagents.add_reagent(spawn_reagent, spawn_amount || volume) + +/obj/item/reagent_containers/cartridge/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if (!is_open_container() || !proximity_flag) + return + + if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + + if(!reagents.total_volume) + to_chat(user, "\The [src] is empty.") + return + + if(target.reagents.total_volume >= target.reagents.maximum_volume) + to_chat(user, "\The [target] is full.") + return + + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + to_chat(user, "You transfer [trans] units of the solution to \the [target].") + return + else + return ..() diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index ffddea7d547..491bf949c33 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -27,7 +27,7 @@ if(reagents.total_volume) - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) to_chat(user, "[target] is full.") return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 31c58a4737b..3a8d6d96748 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -74,7 +74,7 @@ var/injtime = time // Calculated 'true' injection time (as added to by hardsuits and whatnot), 66% of this goes to warmup, then every 33% after injects 5u switch(mode) if(SYRINGE_DRAW) - if(!reagents.get_free_space()) + if(!reagents.available_volume()) to_chat(user, "The syringe is full.") mode = SYRINGE_INJECT return @@ -85,7 +85,7 @@ return if(istype(target, /mob/living/carbon)) - var/amount = reagents.get_free_space() + var/amount = reagents.available_volume() var/mob/living/carbon/T = target if(!T.dna) to_chat(user, "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).") @@ -146,7 +146,7 @@ update_icon() - if(!reagents.get_free_space()) + if(!reagents.available_volume()) mode = SYRINGE_INJECT update_icon() @@ -161,7 +161,7 @@ if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/storage/fancy/cigarettes)) to_chat(user, "You cannot directly fill this object.") return - if(!target.reagents.get_free_space()) + if(!target.reagents.available_volume()) to_chat(user, "[target] is full.") return diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 8825559ac60..04bac8ab1c0 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -51,10 +51,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). idle_power_usage = 30 active_power_usage = 2500 -/obj/machinery/r_n_d/circuit_imprinter/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/r_n_d/circuit_imprinter/process(delta_time) ..() if(machine_stat) diff --git a/code/modules/research/designs/circuits/machines/chemistry.dm b/code/modules/research/designs/circuits/machines/chemistry.dm new file mode 100644 index 00000000000..9545857bcf8 --- /dev/null +++ b/code/modules/research/designs/circuits/machines/chemistry.dm @@ -0,0 +1,23 @@ +/datum/design/circuit/machine/chemical_dispenser + name = "Chemical Dispenser" + build_path = /obj/item/circuitboard/machine/chemical_dispenser + id = "MachineChemicalDispenser" + req_tech = list(TECH_DATA = 3, TECH_BIO = 3, TECH_MATERIAL = 4) + +/datum/design/circuit/machine/soda_dispenser + name = "Drink Dispenser (Soda)" + build_path = /obj/item/circuitboard/machine/chemical_dispenser/soda + id = "MachineDrinkDispenserSoda" + req_tech = list(TECH_DATA = 3, TECH_BIO = 3, TECH_MATERIAL = 4) + +/datum/design/circuit/machine/booze_dispenser + name = "Drink Dispenser (Bar)" + build_path = /obj/item/circuitboard/machine/chemical_dispenser/booze + id = "MachineDrinkDispenserBooze" + req_tech = list(TECH_DATA = 3, TECH_BIO = 3, TECH_MATERIAL = 4) + +/datum/design/circuit/machine/cafe_dispenser + name = "Drink Dispenser (Cafe)" + build_path = /obj/item/circuitboard/machine/chemical_dispenser/cafe + id = "MachineDrinkDispenserCafe" + req_tech = list(TECH_DATA = 3, TECH_BIO = 3, TECH_MATERIAL = 4) diff --git a/code/modules/research/designs/misc.dm b/code/modules/research/designs/misc.dm index a559af8ae49..05fbcbce290 100644 --- a/code/modules/research/designs/misc.dm +++ b/code/modules/research/designs/misc.dm @@ -147,3 +147,11 @@ req_tech = list(TECH_BLUESPACE = 5, TECH_MATERIAL = 6) materials = list(MAT_PLASTIC = 5000, MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PHORON = 1500) build_path = /obj/item/storage/bag/trash/bluespace + +/datum/design/item/reagent_synth_chemistry + name = "Chemistry Synthesis Module" + desc = "A reagent synthesis module required for dispenser functionality" + id = "ReagentSynth" + req_tech = list(TECH_BLUESPACE = 5, TECH_MATERIAL = 6, TECH_BIO = 5) + materials = list(MAT_STEEL = 4000, MAT_GLASS = 2000, MAT_URANIUM = 500, MAT_GOLD = 500, MAT_SILVER = 500) + build_path = /obj/item/reagent_synth/chemistry diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index a2e3da6017f..6fdcfc9b68c 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -21,10 +21,6 @@ hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER) -/obj/machinery/r_n_d/protolathe/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/r_n_d/protolathe/process(delta_time) ..() if(machine_stat) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 94120753abf..1be1333f86f 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -70,7 +70,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, return return_name /obj/machinery/computer/rdconsole/proc/CallReagentName(var/ID) - var/datum/reagent/R = SSchemistry.chemical_reagents["[ID]"] + var/datum/reagent/R = SSchemistry.reagent_lookup["[ID]"] if(!R) return ID return R.name diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index e7455ff7ee1..284723f7ce7 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -18,10 +18,6 @@ req_access = list(ACCESS_SCIENCE_RD) //Only the R&D can change server settings. circuit = /obj/item/circuitboard/rdserver -/obj/machinery/r_n_d/server/Initialize(mapload) - . = ..() - default_apply_parts() - /obj/machinery/r_n_d/server/Destroy() griefProtection() ..() diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 4625967ce41..c8c26768da0 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -198,7 +198,6 @@ /obj/machinery/transhuman/synthprinter/Initialize(mapload) . = ..() - default_apply_parts() update_icon() /obj/machinery/transhuman/synthprinter/RefreshParts() @@ -418,7 +417,6 @@ /obj/machinery/transhuman/resleever/Initialize(mapload) . = ..() - default_apply_parts() update_icon() /obj/machinery/transhuman/resleever/RefreshParts() diff --git a/code/modules/shieldgen/shield_diffuser.dm b/code/modules/shieldgen/shield_diffuser.dm index 1cd44cceb38..a52ca181682 100644 --- a/code/modules/shieldgen/shield_diffuser.dm +++ b/code/modules/shieldgen/shield_diffuser.dm @@ -16,10 +16,6 @@ /obj/machinery/shield_diffuser/Initialize(mapload) . = ..() - // TODO - Remove this bit once machines are converted to Initialize - if(ispath(circuit)) - circuit = new circuit(src) - default_apply_parts() var/turf/T = get_turf(src) hide(!T.is_plating()) diff --git a/code/modules/shieldgen/shield_generator.dm b/code/modules/shieldgen/shield_generator.dm index a15aa5ccd3c..1c991f98941 100644 --- a/code/modules/shieldgen/shield_generator.dm +++ b/code/modules/shieldgen/shield_generator.dm @@ -54,10 +54,6 @@ . = ..() if(!wires) wires = new(src) - // TODO - Remove this bit once machines are converted to Initialize - if(ispath(circuit)) - circuit = new circuit(src) - default_apply_parts() connect_to_network() mode_list = list() diff --git a/code/modules/telesci/quantum_pad.dm b/code/modules/telesci/quantum_pad.dm index 24c18d548c2..3aabd75950b 100644 --- a/code/modules/telesci/quantum_pad.dm +++ b/code/modules/telesci/quantum_pad.dm @@ -22,7 +22,6 @@ /obj/machinery/power/quantumpad/Initialize(mapload) . = ..() - default_apply_parts() connect_to_network() if(map_pad_id) mapped_quantum_pads[map_pad_id] = src diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index f92dab1f7f9..ea246132d89 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -13,7 +13,6 @@ /obj/machinery/telepad/Initialize(mapload) . = ..() - default_apply_parts() update_icon() /obj/machinery/telepad/RefreshParts() diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 3010fd22399..aeed2bf5b1e 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -294,7 +294,7 @@ data = c_data else data = pick("bicaridine", "kelotane", "anti_toxin", "tricordrazine") - var/datum/reagent/R = SSchemistry.chemical_reagents[data] + var/datum/reagent/R = SSchemistry.reagent_lookup[data] name = "[initial(name)] ([initial(R.name)])" /datum/disease2/effect/improved_chem_synthesis/activate(var/mob/living/carbon/mob,var/multiplier) @@ -426,7 +426,7 @@ data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar", "tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine", "mindbreaker", "glucose") - var/datum/reagent/R = SSchemistry.chemical_reagents[data] + var/datum/reagent/R = SSchemistry.reagent_lookup[data] name = "[initial(name)] ([initial(R.name)])" /datum/disease2/effect/chem_synthesis/activate(var/mob/living/carbon/mob,var/multiplier) diff --git a/config/entries/lobby.txt b/config/entries/lobby.txt index 5b03ed47010..ff7c9f013ef 100644 --- a/config/entries/lobby.txt +++ b/config/entries/lobby.txt @@ -5,6 +5,7 @@ LOBBY_COUNTDOWN 120 ROUND_END_COUNTDOWN 180 ## How many seconds to wait before roundstart until starting the gamemode vote +## -1 to disable gamemode voting. LOBBY_GAMEMODE_VOTE_DELAY 60 ## Should we appear on the hub? diff --git a/icons/items/misc/glue.dmi b/icons/items/misc/glue.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d2b0770bf2c8b76358b52ea730c778e42fe96bba GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvxd5LK*8>L*%(P>;U#J!w9Q@|Z z8xIeUBS(&umX>Pi)ht-BVA93|qCl05B|(0{3=Yq3qyae@RUr{2E~&-IMVSR9nfZAP z3>9;N!wQN@zkdlX`1tjSmbb3fxija3H-s8oG=A_%=e&>RNrs}H-W?XkLB^Mjy%gp= znsj7Rh(fTY?Q)aQ&TeDX%_}5Mm_B*rqwRIZw{^o*(U`w62bM80NN7v$;9^R51G(7K z#W6%{)W##)nf6jW3i;txc4c-&yXL*r48iohc#CN>YQOAQLF3tMjL zuHCaohu4$g1bdgtVb+MtT2@+Cr-CN3p3>Ih;8>8&sHNc^-l$~2oAWkArLn88k58nr zWI>mSO5;q0{V7T;5=!Y!4h&8WrXnm7D_9wX9vU6`Fnj$%pko+3UHx3vIVCg!0K~z8 AA^-pY literal 0 HcmV?d00001 diff --git a/icons/items/parts/reagent_synth.dmi b/icons/items/parts/reagent_synth.dmi new file mode 100644 index 0000000000000000000000000000000000000000..565cbc96dcc74538fdcc472b83a0f6261a52f096 GIT binary patch literal 455 zcmV;&0XY7NP)q|*6fdp)m=2B7eYTzU}0*LjE2C# zz>JKH|NsBs;NSw&v+4i<00DGTPE!Ct=GbNc004e^R9JLGWpiV4X>fFDZ*Bkpc$`yK zaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBS zxH7LKBfg+0H7zkoiHkEOv#1y-Y{IuAPhuX7TiTwi&6joSCYA5yDfV>tBJ7#fR!+n#O#@=21)Z{FEYp@%~_jG~i)s6LFrG{Om#Y010^?F5guS z+@5dp1MCC$x8=dhU4{z#ylVa1tNpU?R6T90-2Z#MU&>CDN!i%*El>#5g*^|Yd7YlG x39@;|aU92yInLACzYfa-);?UPt?xL_7(d3g2Y#xB0{#F1002ovPDHLkV1h1%$+iFh literal 0 HcmV?d00001 diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index 5ab378070f0..ab1629ab3f2 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -310,3 +310,52 @@ export const binaryInsertWith = (getKey: (value: T) => U): return copy; }; }; + +/** + * splits an array into x arrays of max size divisor + * does not balance between the buckets + */ +export const arrayBucketFill = (arrIn: Array, amt: number): + Array> => { + let output = new Array>(); + if (amt <= 0) { + return output; + } + let left = arrIn.length; + let curr = 0; + while (left >= amt) { + output.push(arrIn.slice(curr, curr + amt)); + curr += amt; + left -= amt; + } + if (left > 0) { + output.push(arrIn.slice(curr)); + } + return output; +}; + +/** + * splits an array between x buckets evenly + */ +export const arrayBucketSplit = (arrIn: Array, amt: number): +Array> => { + let output = new Array>(); + if (amt <= 0) { + return output; + } + let want = Math.ceil(arrIn.length / amt); + if (want <= 0) { + return output; + } + let left = arrIn.length; + let curr = 0; + while (left >= want) { + output.push(arrIn.slice(curr, curr + want)); + curr += want; + left -= want; + } + if (left > 0) { + output.push(arrIn.slice(curr)); + } + return output; +}; diff --git a/tgui/packages/tgui/components/ProgressBar.js b/tgui/packages/tgui/components/ProgressBar.tsx similarity index 84% rename from tgui/packages/tgui/components/ProgressBar.js rename to tgui/packages/tgui/components/ProgressBar.tsx index cba65fd71f2..3a247021e10 100644 --- a/tgui/packages/tgui/components/ProgressBar.js +++ b/tgui/packages/tgui/components/ProgressBar.tsx @@ -6,10 +6,19 @@ import { clamp01, scale, keyOfMatchingRange, toFixed } from 'common/math'; import { classes, pureComponentHooks } from 'common/react'; -import { computeBoxClassName, computeBoxProps } from './Box'; +import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; import { CSS_COLORS } from '../constants'; -export const ProgressBar = props => { +interface ProgressBarProps extends BoxProps { + className?: string; + value: number; + minValue?: number; + maxValue?: number; + ranges?: Record; + color?: any; +} + +export const ProgressBar = (props: ProgressBarProps) => { const { className, value, diff --git a/tgui/packages/tgui/components/Slider.js b/tgui/packages/tgui/components/Slider.tsx similarity index 85% rename from tgui/packages/tgui/components/Slider.js rename to tgui/packages/tgui/components/Slider.tsx index 005e6c1f8f7..bd5315bd5f2 100644 --- a/tgui/packages/tgui/components/Slider.js +++ b/tgui/packages/tgui/components/Slider.tsx @@ -5,12 +5,29 @@ */ import { clamp01, keyOfMatchingRange, scale } from 'common/math'; -import { classes } from 'common/react'; -import { computeBoxClassName, computeBoxProps } from './Box'; +import { BooleanLike, classes } from 'common/react'; +import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; import { DraggableControl } from './DraggableControl'; import { NumberInput } from './NumberInput'; -export const Slider = props => { +interface SliderProps extends BoxProps { + animated?: BooleanLike; + color?: string; + value: number; + unit?: string; + minValue: number; + maxValue: number; + fillValue?: number; + ranges?: Record; + step?: number; + stepPixelSize?: number; + format?: (n: number) => number; + suppressFlicker?: number; + onChange?: Function; + onDrag?: Function; +} + +export const Slider = (props: SliderProps) => { // IE8: I don't want to support a yet another component on IE8. if (Byond.IS_LTE_IE8) { return ( diff --git a/tgui/packages/tgui/interfaces/AtmosAlertConsole.js b/tgui/packages/tgui/interfaces/AtmosAlertConsole.tsx similarity index 54% rename from tgui/packages/tgui/interfaces/AtmosAlertConsole.js rename to tgui/packages/tgui/interfaces/AtmosAlertConsole.tsx index f86bb9826ba..484a078c044 100644 --- a/tgui/packages/tgui/interfaces/AtmosAlertConsole.js +++ b/tgui/packages/tgui/interfaces/AtmosAlertConsole.tsx @@ -2,10 +2,18 @@ import { useBackend } from '../backend'; import { Button, Section } from '../components'; import { Window } from '../layouts'; +interface AtmosAlertConsoleData { + priority_alarms: Array; + minor_alarms: Array; +} + +interface AtmosAlert { + name: string; + ref: string; +} + export const AtmosAlertConsole = (props, context) => { - const { act, data } = useBackend(context); - const priorityAlerts = data.priority_alarms || []; - const minorAlerts = data.minor_alarms || []; + const { act, data } = useBackend(context); return ( {
    - {priorityAlerts.length === 0 && ( + {data.priority_alarms.length === 0 && (
  • No Priority Alerts
  • )} - {priorityAlerts.map(alert => ( -
  • + {data.priority_alarms.map(alert => ( +
  • ))} - {minorAlerts.length === 0 && ( + {data.minor_alarms.length === 0 && (
  • No Minor Alerts
  • )} - {minorAlerts.map(alert => ( -
  • + {data.minor_alarms.map(alert => ( +
  • ))}
diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.js b/tgui/packages/tgui/interfaces/ChemDispenser.js deleted file mode 100644 index 886bae80964..00000000000 --- a/tgui/packages/tgui/interfaces/ChemDispenser.js +++ /dev/null @@ -1,170 +0,0 @@ -import { Fragment } from 'inferno'; -import { useBackend } from "../backend"; -import { Box, Button, Flex, LabeledList, Slider, Section } from "../components"; -import { BeakerContents } from "../interfaces/common/BeakerContents"; -import { Window } from "../layouts"; - -const dispenseAmounts = [5, 10, 20, 30, 40, 60]; -const removeAmounts = [1, 5, 10]; - -export const ChemDispenser = (props, context) => { - return ( - - - - - - - - ); -}; - -const ChemDispenserSettings = (properties, context) => { - const { act, data } = useBackend(context); - const { - amount, - } = data; - return ( -
- - - - {dispenseAmounts.map((a, i) => ( - -
- ); -}; - -const ChemDispenserChemicals = (properties, context) => { - const { act, data } = useBackend(context); - const { - chemicals = [], - } = data; - const flexFillers = []; - for (let i = 0; i < (chemicals.length + 1) % 3; i++) { - flexFillers.push(true); - } - return ( -
- - {chemicals.map((c, i) => ( - -
- ); -}; - -const ChemDispenserBeaker = (properties, context) => { - const { act, data } = useBackend(context); - const { - isBeakerLoaded, - beakerCurrentVolume, - beakerMaxVolume, - beakerContents = [], - } = data; - return ( -
- {!!isBeakerLoaded && ( - - {beakerCurrentVolume} / {beakerMaxVolume} units - - )} -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.tsx b/tgui/packages/tgui/interfaces/ChemDispenser.tsx new file mode 100644 index 00000000000..5d1dba3ebe9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser.tsx @@ -0,0 +1,244 @@ +import { arrayBucketFill } from "common/collections"; +import { BooleanLike } from "common/react"; +import { useBackend, useSharedState } from "../backend"; +import { Button, LabeledList, NoticeBox, ProgressBar, Section, Slider, Stack } from "../components"; +import { Window } from "../layouts"; +import { ReagentContents, ReagentContentsData } from "./common/Reagents"; + +interface ReagentData { + name: string; + id: string; +} + +interface CartridgeData { + label: string; + amount: number; +} + +interface BeakerData { + volume: number; + capacity: BeakerData; + data: ReagentContentsData; +} + +interface ChemDispenserData { + cell_charge: number; + cell_capacity: number; + has_cell: BooleanLike; + cartridges: Array; + reagents: Array; + has_beaker: BooleanLike; + beaker: BeakerData; + panel_open: BooleanLike; + macros: Array; + amount: number; + amount_max: number; + recharging: BooleanLike; + recharge_rate: number; +} + +interface DispenserMacro { + name: string; + data: Array>; + index: number; +} + +export const ChemDispenser = (props, context) => { + const { act, data } = useBackend(context); + const [macro, setMacro] = useSharedState | undefined>(context, 'recording', undefined); + const isRecording = () => (macro !== undefined); + const recordReagent = (id: string, amount: number) => { + if (macro === undefined) { + return; + } + let appended = macro?.slice(); + if (appended.length && appended[appended.length - 1][0] === id) { + appended[appended.length - 1][1] += amount; + } + else { + appended?.push([id, amount]); + } + setMacro(appended); + }; + const finalizeMacro = (name?: string) => { + if (macro?.length) { + act("add_macro", { data: macro, name: name }); + } + setMacro(undefined); + }; + return ( + + +
+ + act('eject_cell')} /> + }> + + {data.has_cell ? ( + `${Math.round(data.cell_charge / data.cell_capacity * 100)}%` + ) : ( + "No Cell" + )} + + + act('toggle_charge')} /> + }> + {data.recharging? `Drawing ${data.recharge_rate}kW` : ``} + + +
+
+ + + act('amount', { set: val })} /> + + +
+
macro === undefined? setMacro(new Array<[string, number]>()) : finalizeMacro()} + icon={macro === undefined? "circle" : "square"} + color={macro === undefined? "good" : "bad"} /> + }> + + { + arrayBucketFill(data.macros.sort((a, b) => (a.name.localeCompare(b.name))), 4).map((arr) => ( + // yes, this is shitcode for key, but maybe it shouldn't be so damn PICKY + + + {arr.map((m) => ( + // ditto + + + +
+
+ + {arrayBucketFill(data.reagents.sort((a, b) => (a.name.localeCompare(b.name))), 4).map((reagentArray) => ( + + + {reagentArray.map((reagent) => ( + +
+
+ {data.cartridges.sort((a, b) => (a.label.localeCompare(b.label))).map((cart) => ( + + +
+ {macro !== undefined && ( +
+ { + macro.map((a) => `${a[0]}: ${a[1]}`).join(", ") + } +
+ )} +
act('eject')} /> + }> + {data.has_beaker? ( + ( + <> +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/Mecha/MechStatPane.tsx b/tgui/packages/tgui/interfaces/Mecha/MechStatPane.tsx index 7d8a26dfe93..6a4512af634 100644 --- a/tgui/packages/tgui/interfaces/Mecha/MechStatPane.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/MechStatPane.tsx @@ -56,7 +56,7 @@ export const MechStatPane = (props, context) => {
-