diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 8a1bae5e68..b52dc158e4 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -1,18 +1,22 @@
/obj/machinery/atmospherics/components/unary/thermomachine
- name = "thermomachine"
- desc = "Heats or cools gas in connected pipes."
icon = 'icons/obj/atmospherics/components/thermomachine.dmi'
icon_state = "freezer"
- var/icon_state_off = "freezer"
- var/icon_state_on = "freezer_1"
- var/icon_state_open = "freezer-o"
+
+ name = "thermomachine"
+ desc = "Heats or cools gas in connected pipes."
+
density = TRUE
max_integrity = 300
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
layer = OBJ_LAYER
circuit = /obj/item/circuitboard/machine/thermomachine
+
pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
+ var/icon_state_off = "freezer"
+ var/icon_state_on = "freezer_1"
+ var/icon_state_open = "freezer-o"
+
var/min_temperature = 0
var/max_temperature = 0
var/target_temperature = T20C
@@ -45,6 +49,13 @@
if(showpipe)
add_overlay(getpipeimage(icon, "scrub_cap", initialize_directions))
+/obj/machinery/atmospherics/components/unary/thermomachine/examine(mob/user)
+ . = ..()
+ . += "The thermostat is set to [target_temperature]K ([(T0C-target_temperature)*-1]C)."
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Efficiency [(heat_capacity/5000)*100]%."
+ . += "Temperature range [min_temperature]K - [max_temperature]K ([(T0C-min_temperature)*-1]C - [(T0C-max_temperature)*-1]C)."
+
/obj/machinery/atmospherics/components/unary/thermomachine/process_atmos()
..()
if(!on || !nodes[1])
@@ -155,6 +166,16 @@
update_icon()
+/obj/machinery/atmospherics/components/unary/thermomachine/CtrlClick(mob/living/user)
+ var/area/A = get_area(src)
+ var/turf/T = get_turf(src)
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
+ return
+ on = !on
+ update_icon()
+ investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
+ message_admins("[src.name] was turned [on ? "on" : "off"] [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
+
/obj/machinery/atmospherics/components/unary/thermomachine/freezer
name = "freezer"
icon_state = "freezer"
@@ -174,6 +195,13 @@
if(target_temperature == initial(target_temperature))
target_temperature = min_temperature
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom
+ name = "cold room freezer"
+
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize()
+ . = ..()
+ target_temperature = T0C-80
+
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/RefreshParts()
..()
var/L
@@ -181,6 +209,15 @@
L += M.rating
min_temperature = max(T0C - (initial(min_temperature) + L * 15), TCMB) //73.15K with T1 stock parts
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/AltClick(mob/living/user)
+ var/area/A = get_area(src)
+ var/turf/T = get_turf(src)
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
+ return
+ target_temperature = min_temperature
+ investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
+ message_admins("[src.name] was minimized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
+
/obj/machinery/atmospherics/components/unary/thermomachine/heater
name = "heater"
icon_state = "heater"
@@ -201,3 +238,12 @@
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
L += M.rating
max_temperature = T20C + (initial(max_temperature) * L) //573.15K with T1 stock parts
+
+/obj/machinery/atmospherics/components/unary/thermomachine/heater/AltClick(mob/living/user)
+ var/area/A = get_area(src)
+ var/turf/T = get_turf(src)
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
+ return
+ target_temperature = max_temperature
+ investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
+ message_admins("[src.name] was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")