From 175f25de454955dfa4904756f351af125bcd263c Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 12:26:14 +0100 Subject: [PATCH 1/7] Adds a heatpump that works between utility pipe and environment --- citadel.dme | 1 + .../machinery/doors/airlock/phoronlocks.dm | 5 +- .../airlock_controllers.dm | 1 + .../embedded_controller/airlock_program.dm | 12 ++ .../embedded_controller/mapping_helpers.dm | 6 + .../components/unary/env_heat_pump.dm | 137 ++++++++++++++++++ icons/mapping/helpers/mapping_helpers.dmi | Bin 8445 -> 8694 bytes icons/misc/map_helpers.dmi | Bin 916 -> 967 bytes icons/obj/atmos.dmi | Bin 29861 -> 31860 bytes maps/minitest/levels/minitest.dmm | 59 ++++++-- 10 files changed, 204 insertions(+), 17 deletions(-) create mode 100644 code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm diff --git a/citadel.dme b/citadel.dme index c9414d382aa..b20c92b8f10 100644 --- a/citadel.dme +++ b/citadel.dme @@ -2278,6 +2278,7 @@ #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_base.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\tvalve.dm" #include "code\modules\atmospherics\machinery\components\unary\cold_sink.dm" +#include "code\modules\atmospherics\machinery\components\unary\env_heat_pump.dm" #include "code\modules\atmospherics\machinery\components\unary\generator_input.dm" #include "code\modules\atmospherics\machinery\components\unary\heat_exchanger.dm" #include "code\modules\atmospherics\machinery\components\unary\heat_source.dm" diff --git a/code/game/machinery/doors/airlock/phoronlocks.dm b/code/game/machinery/doors/airlock/phoronlocks.dm index 54fe5e4b894..9592ffaac46 100644 --- a/code/game/machinery/doors/airlock/phoronlocks.dm +++ b/code/game/machinery/doors/airlock/phoronlocks.dm @@ -191,7 +191,7 @@ signalPump(tag_airpump, 1, 1, memory["target_pressure"]) // And pressurizng to offset losses memory["processing"] = TRUE else if(fuzzy_smaller_check(memory["chamber_sensor_temperature"], memory["target_temperature"])) - signalScrubber(tag_scrubber, 1)//the scrubbers also work as heats because fuck making sense + signalTemperatureAdjuster(tag_temperature_adjuster, 1, memory["target_temperature"]) memory["processing"] = TRUE else if(fuzzy_smaller_check(memory["chamber_sensor_pressure"], memory["internal_sensor_pressure"])) signalScrubber(tag_scrubber, 0) // stop cleaning @@ -200,10 +200,12 @@ else // both phoron and pressure levels are acceptable toggleDoor(memory["interior_status"],tag_interior_door, 1, "open") signalScrubber(tag_scrubber, 0) + signalTemperatureAdjuster(tag_temperature_adjuster, 0, memory["target_temperature"]) signalPump(tag_airpump, 0, 1, memory["external_sensor_pressure"])//Turn the pump off state = STATE_OPEN_IN memory["processing"] = FALSE if(STATE_CYCLING_OUT) + signalTemperatureAdjuster(tag_temperature_adjuster, 0, memory["target_temperature"]) if(memory["interior_status"]["state"] == "open") toggleDoor(memory["interior_status"],tag_interior_door, 1, "close") else if((memory["chamber_sensor_pressure"] - memory["external_sensor_pressure"]) > 1 ) @@ -231,4 +233,5 @@ /datum/computer/file/embedded_program/airlock/phoron/stop_everything() . = ..() signalScrubber(tag_scrubber, 0)//Turn off scrubbers + signalTemperatureAdjuster(tag_temperature_adjuster, 0, memory["target_temperature"]) diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index ea11d0b0637..63672033537 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -11,6 +11,7 @@ var/tag_interior_sensor var/tag_airlock_mech_sensor var/tag_shuttle_mech_sensor + var/tag_temperature_adjuster var/tag_secure = 0 var/list/dummy_terminals = list() var/cycle_to_external_air = 0 diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index d572b578462..0cb48577196 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -13,6 +13,7 @@ var/tag_interior_sensor var/tag_airlock_mech_sensor var/tag_shuttle_mech_sensor + var/tag_temperature_adjuster var/state = STATE_CLOSED @@ -42,6 +43,7 @@ tag_interior_sensor = controller.tag_interior_sensor || "[id_tag]_interior_sensor" tag_airlock_mech_sensor = controller.tag_airlock_mech_sensor? controller.tag_airlock_mech_sensor : "[id_tag]_airlock_mech" tag_shuttle_mech_sensor = controller.tag_shuttle_mech_sensor? controller.tag_shuttle_mech_sensor : "[id_tag]_shuttle_mech" + tag_temperature_adjuster = controller.tag_temperature_adjuster? controller.tag_temperature_adjuster : "[id_tag]_chamber_temperature" memory["secure"] = controller.tag_secure spawn(10) @@ -209,6 +211,16 @@ ) post_signal(signal) +/datum/computer/file/embedded_program/airlock/proc/signalTemperatureAdjuster(var/tag, var/power, var/temperature) + var/datum/signal/signal = new + signal.data = list( + "tag" = tag, + "sigtype" = "command", + "power" = "[power]", + "target_temperature" = "[temperature]", + ) + post_signal(signal) + /datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(command, sensor) var/datum/signal/signal = new signal.data["tag"] = sensor diff --git a/code/game/machinery/embedded_controller/mapping_helpers.dm b/code/game/machinery/embedded_controller/mapping_helpers.dm index 147ceddafb3..54a74c2636d 100644 --- a/code/game/machinery/embedded_controller/mapping_helpers.dm +++ b/code/game/machinery/embedded_controller/mapping_helpers.dm @@ -133,6 +133,12 @@ Any frequency works, it's self-setting, but it seems like people have decided 13 icon_state = "pumpdout" tag_addon = "_pump_out_external" +/obj/map_helper/airlock/atmos/chamber_temperature_adjuster + name = "chamber temperature adjuster" + icon_state = "temp" + tag_addon = "_chamber_temperature" + my_device_type = /obj/machinery/atmospherics/component/unary/env_heat_pump + /* Sensors - did you know they function as buttons? You don't also need a button. diff --git a/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm b/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm new file mode 100644 index 00000000000..494028131b3 --- /dev/null +++ b/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm @@ -0,0 +1,137 @@ + + + + +/obj/machinery/atmospherics/component/unary/env_heat_pump + name = "Room heat exchanger" + icon = 'icons/obj/atmos.dmi' + icon_state = "env_heat_pump" + density = 1 + anchored = 1 + use_power = USE_POWER_OFF + idle_power_usage = 5 // 5 Watts for thermostat related circuitry + pipe_flags = PIPING_ONE_PER_TURF + connect_types = CONNECT_TYPE_AUX + var/env_temp + + var/frequency = 1439 + var/datum/radio_frequency/radio_connection + var/id_tag + + power_rating = 30000 // standard for machinery (including normal pumps) is 7500, heatpumps have 15000 + + var/target_temp = T20C + efficiency_multiplier = 1.5 //Bigger device probably works a bit better than the small cramped one + +/obj/machinery/atmospherics/component/unary/env_heat_pump/Initialize(mapload) + . = ..() + START_MACHINE_PROCESSING(src) + if(frequency) + var/radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null + radio_connection = register_radio(src, frequency, frequency, radio_filter_in) + src.broadcast_status() + +/obj/machinery/atmospherics/component/unary/env_heat_pump/Destroy() + . = ..() + STOP_MACHINE_PROCESSING(src) + +/obj/machinery/atmospherics/component/unary/env_heat_pump/update_icon() + . = ..() + if(use_power) + if(env_temp > target_temp+0.001)//We dont work on such minor + icon_state = "env_heat_pump_cool" + else if(env_temp < target_temp-0.001) + icon_state = "env_heat_pump_heat" + else + if(use_power > 1) + icon_state = "env_heat_pump_on" + else + icon_state = "env_heat_pump" + else + icon_state = "env_heat_pump" + +/obj/machinery/atmospherics/component/unary/env_heat_pump/process(delta_time) + . = ..() + update_icon() + if((machine_stat & (NOPOWER|BROKEN)) || !use_power) + use_power = USE_POWER_OFF //We cant operate so we might as well turn off + return + + var/datum/gas_mixture/env = return_air() + + if(!air_contents || !env || !istype(env)) + use_power = USE_POWER_OFF //We cant operate so we might as well turn off + return + + //If there is no air_contents or env the temperature is assumed 0 Kelvin which allows for + if((air_contents.temperature < 1) || (env.temperature < 1)) + use_power = USE_POWER_OFF //We cant operate so we might as well turn off + return + + env_temp = env.temperature + + //Now we are at the point where we need to actively pump + var/efficiency = get_thermal_efficiency(air_contents, env) * efficiency_multiplier + CACHE_VSC_PROP(atmos_vsc, /atmos/heatpump/performance_factor, performance_factor) + + var/actual_performance_factor = performance_factor*efficiency + + var/max_energy_transfer = actual_performance_factor*power_rating + + if(abs(env.temperature - target_temp) < 0.001) // don't want wild swings and too much power use + use_power = USE_POWER_IDLE //We cant operate so we might as well turn off + return + //only adds the energy actually removed from air one to air two(- infront of air_contents because energy was removed) + var/energy_transfered = -air_contents.adjust_thermal_energy(-clamp(env.get_thermal_energy_change(target_temp),-max_energy_transfer,max_energy_transfer)) + energy_transfered=abs(env.adjust_thermal_energy(energy_transfered)) + var/power_draw = abs(energy_transfered/actual_performance_factor) + if (power_draw >= 0) + last_power_draw_legacy = power_draw + use_power(power_draw) + network?.update = 1 + +/obj/machinery/atmospherics/component/unary/env_heat_pump/proc/get_thermal_efficiency(var/datum/gas_mixture/air1, var/datum/gas_mixture/air2) + if((target_temp < air2.temperature)) + return clamp((air2.temperature / air1.temperature), 0, 1) + else if((target_temp > air2.temperature)) + return clamp((air1.temperature / air2.temperature), 0, 1) + + +/obj/machinery/atmospherics/component/unary/env_heat_pump/receive_signal(datum/signal/signal, receive_method, receive_param) + if(machine_stat & (NOPOWER|BROKEN)) + return + + if(!isnull(signal.data["power"])) + if(text2num(signal.data["power"]) == 0) + use_power = USE_POWER_OFF + else + use_power = USE_POWER_ACTIVE + if(!isnull(signal.data["target_temperature"])) + target_temp = text2num(signal.data["target_temperature"]) + spawn(2) + broadcast_status() + if(signal.data["status"] == null) + update_icon() + + +/obj/machinery/atmospherics/component/unary/env_heat_pump/proc/broadcast_status() + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "device" = "EHP", + "power" = use_power, + "target_temp" = target_temp, + "timestamp" = world.time, + "sigtype" = "status", + "power_draw" = last_power_draw_legacy, + "flow_rate" = last_flow_rate_legacy, + ) + + radio_connection.post_signal(src, signal, null) + + return 1 diff --git a/icons/mapping/helpers/mapping_helpers.dmi b/icons/mapping/helpers/mapping_helpers.dmi index 7667a2e2144f3fa650ee55d5560022003de9e836..f05b32ca11182e8535848ce5ace19b36cbca09f9 100644 GIT binary patch literal 8694 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 b+3v}VPBR{XHa%WoRtBglYAMvpS%>`}gD5JR literal 8445 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 KsYbyj{Qm&AnRN*O diff --git a/icons/misc/map_helpers.dmi b/icons/misc/map_helpers.dmi index 6d1d0c0c166d12782ea28133f47128119bea5922..858ddacda32fb25b23d047f131e4ed376f7badca 100644 GIT binary patch delta 958 zcmV;v13~b&JG=qp00001bW%=J06^y0W&i*HxO!ArbVOxyV{&P5bZKvH004NLjnc6S!Y~j9 z;5m7U(5^*ntD}pwNC*24m7FHfHX(P_*EgwxIFw}j555aOQ|XA1N~(Puy!2z<;k&ZKteW69aw4HJB`GKAIyULA|7F3R5y!i;*} z+Wcc?p(GbY1e1*-X^cxK7FbHL;80I?gebL3LcM@wLci6e6db{ScU0YA+maoaEqhT{!fYXV=>0n}cyffi^)E|4SlAE5w6 z(k1{34B1{TuKpwsxU)V&1OX7v)6=j{-;z23mtRpo&wUO&o2d2L2Y6W`V3|7sYjnW$ z0?g*Z(hpcS2l@fQg=GY=hTj1IEWeBa*02o&fGrT8>3;#;gPdPy*`@#*h12(xU{}#* z0D2BCDZk9`vt&~MJBgF^@qxFqWK#gkg~=J?4Ls!|fY=1Uvk_Lb-dSs1_Mor{fY*b` zSZnalMgXyks7MuQ^58A5m|lU{WmJTkIOSbW9+Y+&6`?A_1F)cRH$X7GcMVaA0C-<_ z16bSu2Y){eQE39~Mdb#tbpVZu0Kf&xJ%HEF01_1@Ef;ok1Epo-ZgvJ~^kZg04Edm^-j+>k8e*pmR&_y>l*&Og< z%1u*j2>_`NB``mb>fs$A)WjVRz{4BhHC3ZKfPdTfKnLg^IKK;klBw;1FZLkR!#jZA z^I$X=hO=?J9&~B6%IbAqk=kiAg>D<#X{Fbx08Ae1ysdTH763NeK@afE4*>iKU^oiH z=iuS{{h==^dM?#-N>PX)Ku=;GT&sZE6qjy6X>d(P8OLk~fOM3#KB6X*+R3zZ#$i14(rR23A;5&OVE_;| zw);L2JivG82Ed&P0j8E6ijMolp+kobJvX=>;roLyJLmr&bO7wu@w=yYi{Bp%0sevq g*zvmo|9QXv1Kz_bYtN!7ssI2007*qoM6N<$g7RRlUH||9 delta 907 zcmV;619bey2b2ep7k^*`0{{R3Csb#80000LP)t-sz`(%&Gyl5)x{d&j{{S;V073u% z|146p000000d!JMQvg8b*k%9#0JM5kSad{Xb7OL8aCB*JZU6vyoQ=}K3c@f92H(aho2!$cF6T-eJ;c3+-B(PG8@43gTh3w?FWu38W=E_kWjRWZiY3PjD#B%uejE z+f(wA+>21O4J88PL-SwD8`pLhdto|yb@ z&)LTS00M1EM1Mh4ScUDF(Q(@_42JCu6l(%sn*r2bvw;>!L@tm6_8*}DNk}3{ixd^7 zSD#_~;rE%JAb#Y02qfxz!V%XtpMX)7~27p zcc2~MTo{i4Cigx7pv#ZP0Fw*D0f0}$zw|)IV6Lw&uYWZ_XW{%q3hbKI2|(|Ii`18S z?{ZoLlAYLF3=2NGoYsJ(7J4uS4XwfeP+9@fYNRV#1ZyqK9z5&PoQr7l>m(w><+?RuU`K!e(u-m8x;GI-QmJ!B&6xAMLDma!Dt4QMFXk zi36{a(`%JZ0dG=SLzT_|4A7>f;u@-S764o-FjVP#0LVLb5r!(w7HwpIINdT*ZTD&d(z*&YbMJ9{G2HO{s%(e)Ti-l0CodVnA$EfsLEF6u^I>PCcFf+gf78Va+FTiK2*#o4+@S4w646q)s`}u*k h{m&1y-ShduU(LG=WNZR5spz;ai1Qo;DtiZf_l3 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 delta 9917 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 diff --git a/maps/minitest/levels/minitest.dmm b/maps/minitest/levels/minitest.dmm index 5e41954533e..3a7640c6f85 100644 --- a/maps/minitest/levels/minitest.dmm +++ b/maps/minitest/levels/minitest.dmm @@ -2960,6 +2960,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "lH" = ( @@ -2976,6 +2979,13 @@ /obj/machinery/meter, /turf/simulated/floor/tiled, /area/medical/medbay) +"lU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 9 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled, +/area/medical/medbay) "lX" = ( /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 9 @@ -2983,6 +2993,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 5 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "nY" = ( @@ -3117,6 +3130,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "tU" = ( @@ -3129,12 +3145,12 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, /obj/structure/cable/green{ icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "vl" = ( @@ -3205,6 +3221,10 @@ }, /turf/simulated/floor/tiled, /area/medical/medbay) +"wV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled, +/area/medical/medbay) "xb" = ( /obj/machinery/door/airlock/glass_external, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -3241,9 +3261,6 @@ /turf/simulated/floor/tiled, /area/storage/surface_eva/external) "yy" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/phoronlock{ - on = 1 - }, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "yO" = ( @@ -3268,6 +3285,12 @@ "Bg" = ( /turf/simulated/wall, /area/storage/surface_eva/external) +"BT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/medical/medbay) "BU" = ( /obj/structure/railing, /obj/machinery/embedded_controller/radio/airlock/phoron{ @@ -3372,6 +3395,13 @@ icon_state = "icerock-dark" }, /area/space) +"ID" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/medical/medbay) "Jn" = ( /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/phoronlock{ frequency = 1379; @@ -3419,6 +3449,8 @@ /area/shuttle/webdemo) "Ms" = ( /obj/structure/railing, +/obj/map_helper/airlock/atmos/chamber_temperature_adjuster, +/obj/machinery/atmospherics/component/unary/env_heat_pump, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "ML" = ( @@ -3460,11 +3492,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/phoronlock{ - frequency = 1379; - on = 1; - scrub_id = "central_airlock_scrubber" - }, /obj/structure/sign/signnew/cryogenics{ pixel_y = 32 }, @@ -6905,7 +6932,7 @@ NX du rJ lQ -sc +ID JJ cF aa @@ -7007,7 +7034,7 @@ cM du Ro St -cM +BT el cF aa @@ -7107,9 +7134,9 @@ cM cM cM du -cM -cM -cM +rJ +wV +lU el cF aa From 304bb7ad4d91c95e4494289368434d0f405ccd52 Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 13:11:46 +0100 Subject: [PATCH 2/7] Add the signal tag filter --- .../machinery/components/unary/env_heat_pump.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm b/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm index 494028131b3..c6ad8406dcc 100644 --- a/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm @@ -101,11 +101,14 @@ if(machine_stat & (NOPOWER|BROKEN)) return + if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) + return 0 + if(!isnull(signal.data["power"])) - if(text2num(signal.data["power"]) == 0) - use_power = USE_POWER_OFF - else + if(text2num(signal.data["power"]) != 0) use_power = USE_POWER_ACTIVE + else + use_power = USE_POWER_OFF if(!isnull(signal.data["target_temperature"])) target_temp = text2num(signal.data["target_temperature"]) spawn(2) From 8177e72291e4f99f8c37a7b5253e7b2b626f742f Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 13:27:11 +0100 Subject: [PATCH 3/7] moves the temp maphelper sprite up a bit --- icons/misc/map_helpers.dmi | Bin 1771 -> 1035 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/misc/map_helpers.dmi b/icons/misc/map_helpers.dmi index c9aa5902e2ed4e406a575920287059c1c39b3676..983bff78d58af2777da66ed9f8afb2794071a1dd 100644 GIT binary patch delta 1025 zcmV+c1pfQ$4T}hn7=Hu<0000n5PbLm000V=-0C=2@(!mabFboFZ z^Y#=AT!|6TqZb1)9ONCqRksA#vKD=P2bvfUWV`)MzOG%iRDYc7OVf(#+VCeh)MgSV zaoFuSdud6^7iGbj0{u|*DUdn>ACrVLsU7;5b9QZy>p*0IHj#*J=`L73ILOpGD z{xLIClnWwhjEk7Lu$Y;PLp|C7g4E8VjY2YFztzPoIDmi2pz2`=A4L#x0lc}n@3%*$ zqHe48hrI#T^?$EM*^-og0008lNklc50YHU=yk{6X$+ZihG7AKFoNQ3ee7lp&c+f2igJFh2aQbwEqVHbo=2LV64BrECd^YC(b4sOc)40Kyi4xEkq>2EiBuvj>4K z0C7K1+8E6rGXaDhWF^&+6q2`mNB;=I4zrTziE56z_aL;xtR%WJT|hU~umG%y2nAW0 z0Q9`D0DlYz0O+qED@B04tSkVt4Ukz$0Qd%B4Ct|EfXGUuTrKR@1}j&MyVYrx>j!)N z;eXUstmK>>=_YC^XGab^`<&j3>=^LwE2}TE695ggXsNjRB0C8HE*0pD>^}h@@7P7? zi)>b~klpUQ3R=d#tZL~#{eViHTHbtt?|&!PnH2_Fx0Kd8=1{lP^_P-SXr3X$9P+tqQEvx_y)kpyAgL{OAe&DmP zwXI|ou7d`JE3rin*3?g(I`vqREvmL<$tGFdG-aEvZre&sK+?_wg55T@%K*z}8QFgU zfPcYm8`*h)*lnwK-+55=0Q=fzaBC(@0ojgkeS+Ueo*yGna64% zfM3eRbL3VrWhd8MIrH$1{FMGg!vNd!c|tx&91uG;cz|)=l!loBHn6aG0JQ*@sb&w5 z62sSgtzv-Xfa>!DsrvH+sYgFQ_z@iqN_u@-gsK;YlwGQ}DK$<(if3oq%FNc`S_y#9 z)((2WBd-Hg=Y#>c0P3eQk%juXP^<%G*5iGV!j-7F-_-#^DX4tKi2!_R!+o>#{U8F^ v16w!%0Nb?>0E|18DSp9_I?o4AoodiGQe;cqb#Xp$00000NkvXXu0mjf(;wMh delta 1767 zcmVfFDZ*Bkpc$|&W!4AS8 z3+odcxf`7@V8eohcMUZd-yt-u= z)<@=|>FV&qUMH`wJnT8mg#Z8r=}AOERCwC$T|rJGF%axQbLJ(Y5l^cj8AHLYlO*bg8w@U8vG~v#d5z_dL^2$QB_)gQ6C^gxjB3SHSH8nY{c4e4 z!~#s2*?&1K!D%?rw%b~-6Vb(cx`Nbo+wavRKdS|pqs-KnVB2kf%s_ph%~@$vNX+1u zmY>Z6#LVQ>mcX1%p@XXbT`UPo$xju9^tyL?PcPBRQzSUjihT)i&B`%l#ID(;<)@57 zdc}y{VLu$tM0X5AjL{ew&BE@mA9l2_BH7_`w7ATD ztX!AHh>e0`@1^di^xQ8sLlx?jnFEnZ@wR*WWN{NQRTOeXKvjh2jzaoY2dY&Pa7Q84 z5H+B=F0cU4UH1!$mfhgbopHkheO%p;E5q> z%YX8_T22Q`uLnpazr*ox*+3Ww0sxZ1-XJ0-nPnViQQZ{Gt|sYsYDB zy_+MDa2Yh4_>R)4DQt|j@&LQ_vv(ud3j{R^h9yDL$17xURt z&iovqX+Jh2a@O6Itht-|*>Zp@q|}Q*ClLVnIT>| z&QxSKOuGD3)+prnE=s~s53rnifX!huJfEMvRw*=UxuZL}zqzN;FtGF%rgZsJm!;5U z!?!FU3|uI3Ela2hUN}-OOCW%7U^^HD06+i$1OPw)00aO)000C4KmY&)06+i$1OPw) z00aO)000C4KmedIjMfCAQdckma(^68Ub1}A1VHC5_y8B3vtq!}xvPYHID!9RHbXLh z#+**AK|Z2@Kn3M!o3cdt2m^t(31Dm868d)>C@o)f9$?I@`kqgtpH7W2?0H@fbFROkGJVh01DFWl>JXA@u=TdAV=Yhg9zLb|`M?PT+VTPB#Of`g)qkgkc?n?a zP%)=-SWM$4j?Q7Rjhon?+cz^UohLih#a+ge@EC>fPsS-8v>;w|GAJzFx|@{66*Il~^xx!puA9O1Hho z7%_c;M|wyiKeW%X9u}ibT!}b*Vpy6|J_s;D2_++&RPsRp;Slcw+}_@b{{DypgaZTs z0RRvH0096H000315C9N`#V3N$AVM$!&>%uE0ni`;&pZ!*JG5 zcocxMegX-gX1+Q5ZKr^3r-ETMDh~toneVE(*WUvg^Z~Fu2(|#a^QWJN@f{2`-$#d# zN(ta9hc*>I_I~W?U=V=vSH-G>p>(FAr-NHZP*rfry7<(40n&>?`%vX`oll>dn#Igr zKonr6WJ9}h*;=^j_h17m3jh}XGAploGW^Nt;NQ>a(;ib>Vrvef|6)Fwj!(WLRIh}ZHgY5tS002ov JPDHLkV1lOkIPCxc From ce1e9337f5f1983004bb05a5d8f39d3a0811d4ed Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 14:26:26 +0100 Subject: [PATCH 4/7] actual implements the environment heatpump into airlock radio systems --- .../components/unary/env_heat_pump.dm | 3 + maps/minitest/levels/minitest.dmm | 83 ++++++------------- 2 files changed, 29 insertions(+), 57 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm b/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm index c6ad8406dcc..464ae92e327 100644 --- a/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary/env_heat_pump.dm @@ -26,6 +26,9 @@ /obj/machinery/atmospherics/component/unary/env_heat_pump/Initialize(mapload) . = ..() START_MACHINE_PROCESSING(src) + +/obj/machinery/atmospherics/component/unary/env_heat_pump/atmos_init() + . = ..() if(frequency) var/radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null radio_connection = register_radio(src, frequency, frequency, radio_filter_in) diff --git a/maps/minitest/levels/minitest.dmm b/maps/minitest/levels/minitest.dmm index 0af595f6eb7..5cf5be51a79 100644 --- a/maps/minitest/levels/minitest.dmm +++ b/maps/minitest/levels/minitest.dmm @@ -2922,10 +2922,14 @@ "iw" = ( /obj/structure/railing, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 5 +/obj/machinery/atmospherics/component/unary/vent_scrubber, +/obj/map_helper/airlock/atmos/scrubber, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/signnew/cryogenics{ + pixel_y = 32 }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "kU" = ( @@ -2973,15 +2977,13 @@ /obj/machinery/atmospherics/pipe/tank/phoron, /turf/simulated/floor/tiled, /area/medical/medbay) -"og" = ( -/turf/simulated/floor/plating, -/area/rift/surfaceeva/airlock/main) "oO" = ( /turf/simulated/floor/tiled/steel_grid/lythios43c, /area/space) "pr" = ( /obj/structure/railing, -/obj/structure/grille, +/obj/machinery/atmospherics/component/unary/vent_pump/high_volume, +/obj/map_helper/airlock/atmos/chamber_pump, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "pz" = ( @@ -3025,15 +3027,15 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, /obj/structure/cable/green{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "ql" = ( @@ -3160,23 +3162,15 @@ /obj/structure/railing{ dir = 1 }, -/obj/machinery/space_heater, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "wy" = ( /obj/structure/railing{ dir = 1 }, -/obj/machinery/atmospherics/component/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1379; - id_tag = "central_airlock_pump" - }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/map_helper/airlock/atmos/chamber_pump, /obj/structure/cable/green, /obj/machinery/power/apc/west_mount, -/obj/machinery/space_heater, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "wN" = ( @@ -3241,14 +3235,7 @@ /obj/structure/railing{ dir = 1 }, -/obj/machinery/atmospherics/component/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1379; - id_tag = "central_airlock_pump" - }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/map_helper/airlock/atmos/chamber_pump, -/obj/machinery/space_heater, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "yN" = ( @@ -3264,8 +3251,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 10 }, -/obj/map_helper/airlock/atmos/scrubber, -/obj/machinery/atmospherics/component/unary/vent_scrubber, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "yO" = ( @@ -3279,17 +3265,6 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/shuttle/floor/voidcraft/external/light, /area/shuttle/overmapdemo) -"zg" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/sign/signnew/cryogenics{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/component/unary/env_heat_pump, -/obj/map_helper/airlock/atmos/chamber_temperature_adjuster, -/turf/simulated/floor/plating, -/area/rift/surfaceeva/airlock/main) "zX" = ( /obj/structure/bed/chair{ dir = 1 @@ -3323,11 +3298,9 @@ pixel_x = 24; pixel_y = 6 }, -/obj/structure/grille, /obj/map_helper/airlock/sensor/chamber_sensor, -/obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 10 - }, +/obj/machinery/atmospherics/component/unary/env_heat_pump, +/obj/map_helper/airlock/atmos/chamber_temperature_adjuster, /turf/simulated/floor/plating, /area/rift/surfaceeva/airlock/main) "BW" = ( @@ -3373,8 +3346,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/map_helper/airlock/atmos/scrubber, -/obj/machinery/atmospherics/component/unary/vent_scrubber, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "Dm" = ( @@ -3533,7 +3505,9 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "LJ" = ( @@ -3557,9 +3531,6 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 6 }, @@ -3569,16 +3540,13 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, /obj/structure/cable/green{ icon_state = "1-4"; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, /turf/simulated/floor/tiled/steel_grid, /area/rift/surfaceeva/airlock/main) "ML" = ( @@ -3699,6 +3667,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/component/unary/env_heat_pump, +/obj/map_helper/airlock/atmos/chamber_temperature_adjuster, /turf/simulated/floor/tiled, /area/storage/surface_eva/external) "RZ" = ( @@ -6649,7 +6618,7 @@ vl Bg Ps lH -og +lH pr Cs Mz @@ -6751,7 +6720,7 @@ Qy mI Ps lH -zg +lH iw yN LC @@ -6853,7 +6822,7 @@ Lo Tj Ps lH -og +lH BU Ez qj From 21a74fa99750beb206227f6ca4b46cb28bed2e11 Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 14:27:53 +0100 Subject: [PATCH 5/7] temporary hack so I dont have to remap every atlas and tether airlock in this PR --- code/game/machinery/embedded_controller/airlock_program.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index f26f191b69d..0c7fb29c195 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -212,6 +212,7 @@ post_signal(signal) /datum/computer/file/embedded_program/airlock/proc/signalTemperatureAdjuster(var/tag, var/power, var/temperature) + signalScrubber(tag_scrubber, power)//Temporary hack so mapping changes arent part of this PR var/datum/signal/signal = new signal.data = list( "tag" = tag, From 674ff0dd92fc4fb39552580dd4819b291eed0be6 Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 15:15:00 +0100 Subject: [PATCH 6/7] makes scrubbers universal airlock devices, not just frost/phoronlock --- code/game/machinery/doors/airlock/phoronlocks.dm | 8 ++------ .../game/machinery/embedded_controller/airlock_program.dm | 2 ++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/doors/airlock/phoronlocks.dm b/code/game/machinery/doors/airlock/phoronlocks.dm index 9592ffaac46..8542f254b40 100644 --- a/code/game/machinery/doors/airlock/phoronlocks.dm +++ b/code/game/machinery/doors/airlock/phoronlocks.dm @@ -124,8 +124,8 @@ //Handles the control of airlocks -/datum/computer/file/embedded_program/airlock/phoron - var/tag_scrubber +//datum/computer/file/embedded_program/airlock/phoron + /datum/computer/file/embedded_program/airlock/phoron/New(var/obj/machinery/embedded_controller/M) ..(M) @@ -140,10 +140,6 @@ memory["target_phoron"] = 0.1 memory["secure"] = 1 - if (istype(M, /obj/machinery/embedded_controller/radio/airlock/phoron)) //if our controller is an airlock controller than we can auto-init our tags - var/obj/machinery/embedded_controller/radio/airlock/phoron/controller = M - tag_scrubber = controller.tag_scrubber ? controller.tag_scrubber : "[id_tag]_scrubber" - /datum/computer/file/embedded_program/airlock/phoron/receive_signal(datum/signal/signal, receive_method, receive_param) var/receive_tag = signal.data["tag"] if(!receive_tag) return diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 0c7fb29c195..1c971c26465 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -13,6 +13,7 @@ var/tag_interior_sensor var/tag_airlock_mech_sensor var/tag_shuttle_mech_sensor + var/tag_scrubber var/tag_temperature_adjuster var/state = STATE_CLOSED @@ -43,6 +44,7 @@ tag_interior_sensor = controller.tag_interior_sensor || "[id_tag]_interior_sensor" tag_airlock_mech_sensor = controller.tag_airlock_mech_sensor? controller.tag_airlock_mech_sensor : "[id_tag]_airlock_mech" tag_shuttle_mech_sensor = controller.tag_shuttle_mech_sensor? controller.tag_shuttle_mech_sensor : "[id_tag]_shuttle_mech" + tag_scrubber = controller.tag_scrubber ? controller.tag_scrubber : "[id_tag]_scrubber" tag_temperature_adjuster = controller.tag_temperature_adjuster? controller.tag_temperature_adjuster : "[id_tag]_chamber_temperature" memory["secure"] = controller.tag_secure From 6176322d39da27c60b0b2e65a5ea91a3b0e1e184 Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Thu, 25 Jan 2024 15:17:37 +0100 Subject: [PATCH 7/7] and copies the var on controllers as well --- code/game/machinery/doors/airlock/phoronlocks.dm | 1 - code/game/machinery/embedded_controller/airlock_controllers.dm | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/doors/airlock/phoronlocks.dm b/code/game/machinery/doors/airlock/phoronlocks.dm index 8542f254b40..8d476e5ad14 100644 --- a/code/game/machinery/doors/airlock/phoronlocks.dm +++ b/code/game/machinery/doors/airlock/phoronlocks.dm @@ -105,7 +105,6 @@ /obj/machinery/embedded_controller/radio/airlock/phoron name = "Phoron Lock Controller" valid_actions = list("cycle_ext", "cycle_int", "force_ext", "force_int", "abort", "secure") - var/tag_scrubber /obj/machinery/embedded_controller/radio/airlock/phoron/ui_data(mob/user, datum/tgui/ui) . = list( diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index e82e3f1c007..a02ebf8320f 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -11,6 +11,7 @@ var/tag_interior_sensor var/tag_airlock_mech_sensor var/tag_shuttle_mech_sensor + var/tag_scrubber var/tag_temperature_adjuster var/tag_secure = 0 var/list/dummy_terminals = list()