From 21679d960c39d4f5bbb6084b5793b7082df06950 Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Thu, 11 Dec 2025 18:25:48 -0600 Subject: [PATCH 1/7] Radiation Wave Insulation Adjustment Makes some adjustment to the way radiation waves spread through insulation. Previously as a radiation wave expanded, insulation (like walls, for example), did very little to stem the overall strength of the wave. With the change: Insulation blockers have a greater impact on the overall insulation effect, reducing the radiation wave intensity. Greater insulation values also have more impact than before. Only the best insulation is taken per tile, so it is not possible to stack insulation values. This change is done for sanity and to reduce computation. Insulating blockers were expanded and adjusted. Blast doors now have great insulation, for example. Additionally, if you open a door, it will have an impact on the overall radiation wave as the door no longer will act as insulation. Previously, doors and other obstacles that could open and closed always counted as an insulation blocker. --- code/__HELPERS/radiation.dm | 26 ++++++++ code/datums/radiation_wave.dm | 63 ++++++++++++------- code/game/machinery/doors/airlock.dm | 5 +- code/game/machinery/doors/door.dm | 4 +- code/game/machinery/doors/firedoor.dm | 6 ++ code/game/machinery/doors/poddoor.dm | 3 + code/game/machinery/doors/shutters.dm | 4 ++ code/game/machinery/doors/windowdoor.dm | 2 + code/game/objects/items/puzzle_pieces.dm | 2 + code/game/objects/structures/false_walls.dm | 2 + code/game/objects/structures/mineral_doors.dm | 5 +- code/modules/ruins/rockplanet_ruin_code.dm | 1 + 12 files changed, 96 insertions(+), 27 deletions(-) diff --git a/code/__HELPERS/radiation.dm b/code/__HELPERS/radiation.dm index d77add64e50..a7c04f11518 100644 --- a/code/__HELPERS/radiation.dm +++ b/code/__HELPERS/radiation.dm @@ -22,6 +22,32 @@ continue processing_list += thing.contents +//same as base but also returns a list of insulation values. +/proc/get_rad_insulation_contents(atom/location, datum/radiation_wave/src_wave, width = 1) + var/static/list/ignored_things = typecacheof(list( + /mob/dead, + /mob/camera, + /obj/effect, + /obj/docking_port, + /atom/movable/lighting_object, + /obj/projectile, + )) + var/list/processing_list = list(location) + var/best_insulation = RAD_NO_INSULATION + var/return_list = list() + while(processing_list.len) + var/atom/thing = processing_list[1] + processing_list -= thing + if(ignored_things[thing.type]) + continue + return_list += thing + if (!(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_WAVE_PASSING, src_wave, width) & COMPONENT_RAD_WAVE_HANDLED)) + best_insulation = min(thing.rad_insulation, best_insulation) + if((thing.flags_1 & RAD_PROTECT_CONTENTS_1) || (SEND_SIGNAL(thing, COMSIG_ATOM_RAD_PROBE) & COMPONENT_BLOCK_RADIATION)) + continue + processing_list += thing.contents + return list(return_list, best_insulation) + /proc/radiation_pulse(atom/source, intensity, range_modifier, log=FALSE, can_contaminate=TRUE) // fusion will never ever be balanced. god bless it intensity = min(intensity, INFINITY) diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 10e3b28e722..9f5828fb8fd 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -65,50 +65,67 @@ qdel(src) return - var/list/atoms = get_rad_atoms() + var/width = steps + var/cmove_dir = move_dir + if(cmove_dir == NORTH || cmove_dir == SOUTH) + width-- + width = 1+(2*width) + + var/list/atoms_and_insulation = get_rad_atoms(width) + var/list/atoms = atoms_and_insulation[1] if(radiate(atoms, FLOOR(min(strength,remaining_contam), 1))) //oof ow ouch remaining_contam = max(0,remaining_contam-((min(strength,remaining_contam)-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT)) - check_obstructions(atoms) // reduce our overall strength if there are radiation insulators -/datum/radiation_wave/proc/get_rad_atoms() + var/insulation_tally = atoms_and_insulation[2] + if(insulation_tally) + var/insulation_total = atoms_and_insulation[3] + var/average_insulation = insulation_total / insulation_tally + // Determines how much the width dilutes the obstacle's effect. + // Using the square root of width (width ** 0.5) prevents the obstacles from becoming irrelevant at long distances. + var/spread_factor = max(1, width ** 0.5) + + // The exponent calculates the effective "thickness" of the wall relative to the wave size. + var/obstacle_density = insulation_tally / spread_factor + + // Apply the reduction. + intensity *= (average_insulation ** obstacle_density) + +/datum/radiation_wave/proc/get_rad_atoms(width = 1) var/list/atoms = list() var/distance = steps var/cmove_dir = move_dir var/cmaster_turf = master_turf + var/insulation_total = 0 + var/insulation_tally = 0 if(cmove_dir == NORTH || cmove_dir == SOUTH) distance-- //otherwise corners overlap - atoms += get_rad_contents(cmaster_turf) + var/list/master_turf_contents = get_rad_insulation_contents(cmaster_turf, src, width) + atoms += master_turf_contents[1] + var/best_insulation = master_turf_contents[2] + if(best_insulation != RAD_NO_INSULATION) + insulation_total += best_insulation + insulation_tally++ var/turf/place + var/list/place_turf_contents for(var/dir in __dirs) //There should be just 2 dirs in here, left and right of the direction of movement place = cmaster_turf for(var/i in 1 to distance) place = get_step(place, dir) if(!is_valid_rad_turf(place)) break // the break here is important. if a rad wave was travelling parallel to a virtual z edge, and the loop didn't break, it could "clip through" - atoms += get_rad_contents(place) - - return atoms - -/datum/radiation_wave/proc/check_obstructions(list/atoms) - var/width = steps - var/cmove_dir = move_dir - if(cmove_dir == NORTH || cmove_dir == SOUTH) - width-- - width = 1+(2*width) - - for(var/k in 1 to atoms.len) - var/atom/thing = atoms[k] - if(!thing) - continue - if (SEND_SIGNAL(thing, COMSIG_ATOM_RAD_WAVE_PASSING, src, width) & COMPONENT_RAD_WAVE_HANDLED) - continue - if (thing.rad_insulation != RAD_NO_INSULATION) - intensity *= (1-((1-thing.rad_insulation)/width)) + place_turf_contents = get_rad_insulation_contents(place, src, width) + atoms += place_turf_contents[1] + best_insulation = place_turf_contents[2] + if(best_insulation != RAD_NO_INSULATION) + insulation_total += place_turf_contents[2] + insulation_tally++ + + return list(atoms, insulation_tally, insulation_total) /datum/radiation_wave/proc/radiate(list/atoms, strength) var/can_contam = strength >= RAD_MINIMUM_CONTAMINATION diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index f0337b15902..3704589b556 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -112,7 +112,8 @@ var/prying_so_hard = FALSE flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1 | HTML_USE_INITAL_ICON_1 - rad_insulation = RAD_MEDIUM_INSULATION + rad_insulation = RAD_MEDIUM_INSULATION //Generally start closed. + rad_insulation_closed = RAD_MEDIUM_INSULATION var/static/list/airlock_overlays = list() @@ -1285,6 +1286,7 @@ layer = OPEN_DOOR_LAYER update_icon(ALL, AIRLOCK_OPEN, TRUE) operating = FALSE + rad_insulation = RAD_NO_INSULATION if(delayed_close_requested) delayed_close_requested = FALSE addtimer(CALLBACK(src, PROC_REF(close)), 1) @@ -1340,6 +1342,7 @@ update_icon(ALL, AIRLOCK_CLOSED, 1) operating = FALSE delayed_close_requested = FALSE + rad_insulation = rad_insulation_closed if(safe) CheckForMobs() return TRUE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 4fee94c5c24..36810285f36 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -44,7 +44,7 @@ var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access var/safety_mode = FALSE ///Whether or not the airlock can be opened with bare hands while unpowered var/can_crush = TRUE /// Whether or not the door can crush mobs. - + var/rad_insulation_closed = RAD_NO_INSULATION /// How much rad_insulation it has when closed, so that it can be modified for closed/open state. /obj/machinery/door/examine(mob/user) . = ..() @@ -343,6 +343,7 @@ operating = FALSE air_update_turf(1) update_freelook_sight() + rad_insulation = RAD_NO_INSULATION if(autoclose) addtimer(CALLBACK(src, PROC_REF(close)), autoclose) return 1 @@ -360,6 +361,7 @@ return operating = TRUE + rad_insulation = rad_insulation_closed do_animate("closing") layer = closingLayer diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 3486cedd93d..a208815ffa6 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -26,6 +26,8 @@ armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN air_tight = TRUE + rad_insulation = RAD_NO_INSULATION //Generally start open. + rad_insulation_closed = RAD_MEDIUM_INSULATION //Same as airlocks. var/emergency_close_timer = 0 var/nextstate = null var/boltslocked = TRUE @@ -60,6 +62,7 @@ icon_state = "door_closed" opacity = TRUE density = TRUE + rad_insulation = RAD_MEDIUM_INSULATION //see also turf/AfterChange for adjacency shennanigans @@ -341,6 +344,7 @@ icon_state = "door_closed" opacity = TRUE density = TRUE + rad_insulation = RAD_MEDIUM_INSULATION /obj/machinery/door/firedoor/border_only/close() if(density) @@ -472,6 +476,7 @@ icon_state = "door_closed" opacity = TRUE density = TRUE + rad_insulation = RAD_MEDIUM_INSULATION /obj/machinery/door/firedoor/window name = "firelock window shutter" @@ -483,6 +488,7 @@ resistance_flags = 0 // not fireproof heat_proof = FALSE assemblytype = /obj/structure/firelock_frame/window + rad_insulation_closed = RAD_LIGHT_INSULATION //Not as good as firedoors. /obj/item/electronics/firelock name = "firelock circuitry" diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index dfe16fef601..b13c8f4e167 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -17,6 +17,8 @@ poddoor = TRUE assemblytype = /obj/structure/poddoor_assembly smoothing_groups = list(SMOOTH_GROUP_AIRLOCK) + rad_insulation = RAD_HEAVY_INSULATION + rad_insulation_closed = RAD_HEAVY_INSULATION var/open_sound = 'sound/machines/airlocks/blastdoor.ogg' var/close_sound = 'sound/machines/airlocks/blastdoor.ogg' @@ -96,6 +98,7 @@ icon_state = "open" density = FALSE opacity = FALSE + rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/ert name = "hardened blast door" diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 57efb72443e..9f4be1d58b3 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -12,6 +12,7 @@ icon_state = "open" density = FALSE opacity = FALSE + rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/shutters/indestructible name = "hardened shutters" @@ -21,6 +22,7 @@ icon_state = "open" density = FALSE opacity = FALSE + rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/gates gender = PLURAL @@ -32,6 +34,8 @@ close_sound = 'sound/machines/airlocks/gate.ogg' glass = TRUE opacity = FALSE + rad_insulation = RAD_NO_INSULATION //Offer no insulation. + rad_insulation_closed = RAD_NO_INSULATION /obj/machinery/door/poddoor/gates/indestructible name = "hardened gates" diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 588e2804f52..a9435f2f0bc 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -17,6 +17,8 @@ CanAtmosPass = ATMOS_PASS_PROC interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN set_dir_on_move = FALSE + rad_insulation = RAD_LIGHT_INSULATION + rad_insulation_closed = RAD_LIGHT_INSULATION var/obj/item/electronics/airlock/electronics = null var/reinf = 0 var/shards = 2 diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 5ac10eaadb1..1ebde410e66 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -152,6 +152,8 @@ glass = TRUE opacity = FALSE move_resist = MOVE_FORCE_OVERPOWERING + rad_insulation = RAD_NO_INSULATION //Offer no insulation. Redefining to make clear in case parent changes. + rad_insulation_closed = RAD_NO_INSULATION /obj/machinery/door/keycard/gates/do_animate(animation) switch(animation) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 87932e81553..ef71f1d9ba1 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -19,6 +19,7 @@ CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1 rad_insulation = RAD_MEDIUM_INSULATION + var/rad_insulation_closed = RAD_MEDIUM_INSULATION var/mineral = /obj/item/stack/sheet/metal var/mineral_amount = 2 var/walltype = /turf/closed/wall @@ -57,6 +58,7 @@ set_opacity(density) opening = FALSE update_appearance() + rad_insulation = density? rad_insulation_closed : RAD_NO_INSULATION air_update_turf(TRUE) /obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index d32d6520aae..ed8468ea8ac 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -15,7 +15,7 @@ CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1 rad_insulation = RAD_MEDIUM_INSULATION - + var/rad_insulation_closed = RAD_MEDIUM_INSULATION var/door_opened = FALSE //if it's open or not. var/isSwitchingStates = FALSE //don't try to change stats if we're already opening @@ -98,7 +98,7 @@ air_update_turf(TRUE) update_appearance() isSwitchingStates = FALSE - + rad_insulation = RAD_NO_INSULATION if(close_delay != -1) addtimer(CALLBACK(src, PROC_REF(Close)), close_delay) @@ -120,6 +120,7 @@ air_update_turf(TRUE) update_appearance() isSwitchingStates = FALSE + rad_insulation = rad_insulation_closed /obj/structure/mineral_door/update_icon_state() icon_state = "[initial(icon_state)][door_opened ? "open":""]" diff --git a/code/modules/ruins/rockplanet_ruin_code.dm b/code/modules/ruins/rockplanet_ruin_code.dm index 970265ab50e..504d11ee6d2 100644 --- a/code/modules/ruins/rockplanet_ruin_code.dm +++ b/code/modules/ruins/rockplanet_ruin_code.dm @@ -40,6 +40,7 @@ is_open = FALSE density = FALSE opacity = FALSE + rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/crusher/automatic/Initialize(mapload) . = ..() From 5dc3843b81f2c7b3702857cd1133e870a0f659be Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:37:29 -0600 Subject: [PATCH 2/7] Merge Fix Fixing merge problems with TMs. --- code/game/machinery/doors/firedoor.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index a208815ffa6..0fc426d102e 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -16,6 +16,8 @@ max_integrity = 300 resistance_flags = FIRE_PROOF heat_proof = TRUE + rad_insulation = RAD_NO_INSULATION //Generally start open. + rad_insulation_closed = RAD_MEDIUM_INSULATION //Same as airlocks. glass = TRUE sub_door = TRUE explosion_block = 1 @@ -26,8 +28,6 @@ armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN air_tight = TRUE - rad_insulation = RAD_NO_INSULATION //Generally start open. - rad_insulation_closed = RAD_MEDIUM_INSULATION //Same as airlocks. var/emergency_close_timer = 0 var/nextstate = null var/boltslocked = TRUE From 87836074cc347bd9d762700710d725a6bdef86fb Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Wed, 11 Mar 2026 19:33:46 -0500 Subject: [PATCH 3/7] Modularization Modularizes stuff, thanks to @Ossa88 for a lot of the original modularization work. --- code/__HELPERS/radiation.dm | 3 ++- code/datums/radiation_wave.dm | 2 ++ code/game/machinery/doors/airlock.dm | 7 +++---- code/game/machinery/doors/door.dm | 6 ++++-- code/game/objects/structures/false_walls.dm | 4 ++-- code/game/objects/structures/mineral_doors.dm | 6 +++--- code/game/objects/structures/window.dm | 6 +++--- .../code/game/machinery/doors/airlock.dm | 9 +++++++++ .../code/game/machinery/doors/firedoor.dm | 15 +++++++++++++++ .../code/game/machinery/doors/poddoor.dm | 6 ++++++ .../code/game/machinery/doors/shutters.dm | 9 +++++++++ .../code/game/machinery/doors/windowdoor.dm | 3 +++ .../code/game/objects/items/puzzle_pieces.dm | 3 +++ .../master_files/code/game/structures/window.dm | 8 ++++++++ .../code/modules/ruins/rockplanet_ruin_code.dm | 2 ++ modular_pentest/~pentest.dme | 7 +++++++ 16 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 modular_pentest/master_files/code/game/machinery/doors/airlock.dm create mode 100644 modular_pentest/master_files/code/game/machinery/doors/firedoor.dm create mode 100644 modular_pentest/master_files/code/game/machinery/doors/poddoor.dm create mode 100644 modular_pentest/master_files/code/game/machinery/doors/shutters.dm create mode 100644 modular_pentest/master_files/code/game/machinery/doors/windowdoor.dm create mode 100644 modular_pentest/master_files/code/game/structures/window.dm create mode 100644 modular_pentest/master_files/code/modules/ruins/rockplanet_ruin_code.dm diff --git a/code/__HELPERS/radiation.dm b/code/__HELPERS/radiation.dm index a7c04f11518..dfc578c1861 100644 --- a/code/__HELPERS/radiation.dm +++ b/code/__HELPERS/radiation.dm @@ -22,7 +22,7 @@ continue processing_list += thing.contents -//same as base but also returns a list of insulation values. +// PENTEST ADDITION - RADIATION REFACTOR START - same as base but also returns a list of insulation values. /proc/get_rad_insulation_contents(atom/location, datum/radiation_wave/src_wave, width = 1) var/static/list/ignored_things = typecacheof(list( /mob/dead, @@ -47,6 +47,7 @@ continue processing_list += thing.contents return list(return_list, best_insulation) +// PENTEST ADDITION - RADIATION REFACTOR END /proc/radiation_pulse(atom/source, intensity, range_modifier, log=FALSE, can_contaminate=TRUE) // fusion will never ever be balanced. god bless it diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 9f5828fb8fd..0921e6b361b 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -65,6 +65,7 @@ qdel(src) return + // PENTEST ADDITION - RADIATION REFACTOR - START var/width = steps var/cmove_dir = move_dir if(cmove_dir == NORTH || cmove_dir == SOUTH) @@ -126,6 +127,7 @@ insulation_tally++ return list(atoms, insulation_tally, insulation_total) +// PENTEST RADIATION REFACTOR - END /datum/radiation_wave/proc/radiate(list/atoms, strength) var/can_contam = strength >= RAD_MINIMUM_CONTAMINATION diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3704589b556..e6fd9c69d8d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -112,8 +112,7 @@ var/prying_so_hard = FALSE flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1 | HTML_USE_INITAL_ICON_1 - rad_insulation = RAD_MEDIUM_INSULATION //Generally start closed. - rad_insulation_closed = RAD_MEDIUM_INSULATION + rad_insulation = RAD_MEDIUM_INSULATION var/static/list/airlock_overlays = list() @@ -1286,7 +1285,7 @@ layer = OPEN_DOOR_LAYER update_icon(ALL, AIRLOCK_OPEN, TRUE) operating = FALSE - rad_insulation = RAD_NO_INSULATION + rad_insulation = RAD_NO_INSULATION // PENTEST ADDITION - RADIATION REFACTOR if(delayed_close_requested) delayed_close_requested = FALSE addtimer(CALLBACK(src, PROC_REF(close)), 1) @@ -1342,7 +1341,7 @@ update_icon(ALL, AIRLOCK_CLOSED, 1) operating = FALSE delayed_close_requested = FALSE - rad_insulation = rad_insulation_closed + rad_insulation = rad_insulation_closed // PENTEST ADDITION - RADIATION REFACTOR if(safe) CheckForMobs() return TRUE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index dc3998339f9..cc626469f65 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -44,7 +44,9 @@ var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access var/safety_mode = FALSE ///Whether or not the airlock can be opened with bare hands while unpowered var/can_crush = TRUE /// Whether or not the door can crush mobs. + // PENTEST ADDITION - RADIATION REFACTOR START var/rad_insulation_closed = RAD_NO_INSULATION /// How much rad_insulation it has when closed, so that it can be modified for closed/open state. + // PENTEST ADDITION - RADIATION REFACTOR END /obj/machinery/door/examine(mob/user) . = ..() @@ -343,7 +345,7 @@ operating = FALSE air_update_turf(1) update_freelook_sight() - rad_insulation = RAD_NO_INSULATION + rad_insulation = RAD_NO_INSULATION // PENTEST ADDITION - RADIATION REFACTOR if(autoclose) addtimer(CALLBACK(src, PROC_REF(close)), autoclose) return 1 @@ -361,7 +363,7 @@ return operating = TRUE - rad_insulation = rad_insulation_closed + rad_insulation = rad_insulation_closed // PENTEST ADDITION - RADIATION REFACTOR do_animate("closing") layer = closingLayer diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index ef71f1d9ba1..eb7b08fd73d 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -19,7 +19,7 @@ CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1 rad_insulation = RAD_MEDIUM_INSULATION - var/rad_insulation_closed = RAD_MEDIUM_INSULATION + var/rad_insulation_closed = RAD_MEDIUM_INSULATION // PENTEST ADDITION - RADIATION REFACTOR var/mineral = /obj/item/stack/sheet/metal var/mineral_amount = 2 var/walltype = /turf/closed/wall @@ -58,7 +58,7 @@ set_opacity(density) opening = FALSE update_appearance() - rad_insulation = density? rad_insulation_closed : RAD_NO_INSULATION + rad_insulation = density? rad_insulation_closed : RAD_NO_INSULATION // PENTEST ADDITION - RADIATION REFACTOR air_update_turf(TRUE) /obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index ed8468ea8ac..899effdbd0d 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -15,7 +15,7 @@ CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1 rad_insulation = RAD_MEDIUM_INSULATION - var/rad_insulation_closed = RAD_MEDIUM_INSULATION + var/rad_insulation_closed = RAD_MEDIUM_INSULATION // PENTEST ADDITION - RADIATION REFACTOR var/door_opened = FALSE //if it's open or not. var/isSwitchingStates = FALSE //don't try to change stats if we're already opening @@ -98,7 +98,7 @@ air_update_turf(TRUE) update_appearance() isSwitchingStates = FALSE - rad_insulation = RAD_NO_INSULATION + rad_insulation = RAD_NO_INSULATION // PENTEST ADDITION - RADIATION REFACTOR if(close_delay != -1) addtimer(CALLBACK(src, PROC_REF(Close)), close_delay) @@ -120,7 +120,7 @@ air_update_turf(TRUE) update_appearance() isSwitchingStates = FALSE - rad_insulation = rad_insulation_closed + rad_insulation = rad_insulation_closed // PENTEST ADDITION - RADIATION REFACTOR /obj/structure/mineral_door/update_icon_state() icon_state = "[initial(icon_state)][door_opened ? "open":""]" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 765e9bc1f91..cdd69e0f8a7 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -413,7 +413,7 @@ damage_deflection = 5 //WS Edit - Weakens R-Windows state = RWINDOW_SECURE glass_type = /obj/item/stack/sheet/rglass - rad_insulation = RAD_HEAVY_INSULATION + rad_insulation = RAD_MEDIUM_INSULATION // PENTEST EDIT - RADIATION REFACTOR receive_ricochet_chance_mod = 0.8 decon_time = 6 SECONDS @@ -514,7 +514,7 @@ max_integrity = 200 explosion_block = 1 glass_type = /obj/item/stack/sheet/plasmaglass - rad_insulation = RAD_NO_INSULATION + rad_insulation = RAD_LIGHT_INSULATION // PENTEST EDIT - RADIATION REFACTOR /obj/structure/window/plasma/spawnDebris(location) . = list() @@ -773,7 +773,7 @@ damage_deflection = 5 //WS Edit - Weakens R-Windows glass_type = /obj/item/stack/sheet/plastitaniumglass glass_amount = 2 - rad_insulation = RAD_HEAVY_INSULATION + rad_insulation = RAD_MEDIUM_INSULATION // PENTEST EDIT - RADIATION REFACTOR decon_time = 10 SECONDS /obj/structure/window/plasma/reinforced/plastitanium/unanchored diff --git a/modular_pentest/master_files/code/game/machinery/doors/airlock.dm b/modular_pentest/master_files/code/game/machinery/doors/airlock.dm new file mode 100644 index 00000000000..4b66aacbfd1 --- /dev/null +++ b/modular_pentest/master_files/code/game/machinery/doors/airlock.dm @@ -0,0 +1,9 @@ +/obj/machinery/door/airlock + rad_insulation = RAD_MEDIUM_INSULATION //Generally start closed. + rad_insulation_closed = RAD_MEDIUM_INSULATION + +/obj/machinery/door/airlock/open(forced=0) + rad_insulation = RAD_NO_INSULATION + +/obj/machinery/door/airlock/close(forced=0) + rad_insulation = rad_insulation_closed diff --git a/modular_pentest/master_files/code/game/machinery/doors/firedoor.dm b/modular_pentest/master_files/code/game/machinery/doors/firedoor.dm new file mode 100644 index 00000000000..c3fa1f10fe2 --- /dev/null +++ b/modular_pentest/master_files/code/game/machinery/doors/firedoor.dm @@ -0,0 +1,15 @@ +/obj/machinery/door/firedoor + rad_insulation = RAD_NO_INSULATION //Generally start open. + rad_insulation_closed = RAD_MEDIUM_INSULATION //Same as airlocks. + +/obj/machinery/door/firedoor/closed + rad_insulation = RAD_MEDIUM_INSULATION + +/obj/machinery/door/firedoor/border_only/closed + rad_insulation = RAD_MEDIUM_INSULATION + +/obj/machinery/door/firedoor/heavy/closed + rad_insulation = RAD_MEDIUM_INSULATION + +/obj/machinery/door/firedoor/window + rad_insulation_closed = RAD_LIGHT_INSULATION //Not as good as firedoors. diff --git a/modular_pentest/master_files/code/game/machinery/doors/poddoor.dm b/modular_pentest/master_files/code/game/machinery/doors/poddoor.dm new file mode 100644 index 00000000000..e10b17cdbf3 --- /dev/null +++ b/modular_pentest/master_files/code/game/machinery/doors/poddoor.dm @@ -0,0 +1,6 @@ +/obj/machinery/door/poddoor + rad_insulation = RAD_HEAVY_INSULATION + rad_insulation_closed = RAD_HEAVY_INSULATION + +/obj/machinery/door/poddoor/preopen + rad_insulation = RAD_NO_INSULATION diff --git a/modular_pentest/master_files/code/game/machinery/doors/shutters.dm b/modular_pentest/master_files/code/game/machinery/doors/shutters.dm new file mode 100644 index 00000000000..8722bfba21a --- /dev/null +++ b/modular_pentest/master_files/code/game/machinery/doors/shutters.dm @@ -0,0 +1,9 @@ +/obj/machinery/door/poddoor/shutters/preopen + rad_insulation = RAD_NO_INSULATION + +/obj/machinery/door/poddoor/shutters/indestructible/preopen + rad_insulation = RAD_NO_INSULATION + +/obj/machinery/door/poddoor/gates + rad_insulation = RAD_NO_INSULATION //Offer no insulation. + rad_insulation_closed = RAD_NO_INSULATION diff --git a/modular_pentest/master_files/code/game/machinery/doors/windowdoor.dm b/modular_pentest/master_files/code/game/machinery/doors/windowdoor.dm new file mode 100644 index 00000000000..f20bde9c200 --- /dev/null +++ b/modular_pentest/master_files/code/game/machinery/doors/windowdoor.dm @@ -0,0 +1,3 @@ +/obj/machinery/door/window + rad_insulation = RAD_LIGHT_INSULATION + rad_insulation_closed = RAD_LIGHT_INSULATION diff --git a/modular_pentest/master_files/code/game/objects/items/puzzle_pieces.dm b/modular_pentest/master_files/code/game/objects/items/puzzle_pieces.dm index c43c5476ca6..7cb222c4262 100644 --- a/modular_pentest/master_files/code/game/objects/items/puzzle_pieces.dm +++ b/modular_pentest/master_files/code/game/objects/items/puzzle_pieces.dm @@ -33,6 +33,9 @@ desc = "A key belonging to a once peaceful scholar, brought to death and ruin through means of violence by savage outsider." puzzle_id = "priestkey" +/obj/machinery/door/keycard/gates + rad_insulation = RAD_NO_INSULATION //Offer no insulation. Redefining to make clear in case parent changes. + rad_insulation_closed = RAD_NO_INSULATION /obj/machinery/door/keycard/gates/drakelair puzzle_id = "drakelairkey" diff --git a/modular_pentest/master_files/code/game/structures/window.dm b/modular_pentest/master_files/code/game/structures/window.dm new file mode 100644 index 00000000000..0d0b604df70 --- /dev/null +++ b/modular_pentest/master_files/code/game/structures/window.dm @@ -0,0 +1,8 @@ +/obj/structure/window/reinforced + rad_insulation = RAD_MEDIUM_INSULATION + +/obj/structure/window/plasma + rad_insulation = RAD_LIGHT_INSULATION + +/obj/structure/window/plasma/reinforced/plastitanium + rad_insulation = RAD_MEDIUM_INSULATION diff --git a/modular_pentest/master_files/code/modules/ruins/rockplanet_ruin_code.dm b/modular_pentest/master_files/code/modules/ruins/rockplanet_ruin_code.dm new file mode 100644 index 00000000000..3722d4c4a3a --- /dev/null +++ b/modular_pentest/master_files/code/modules/ruins/rockplanet_ruin_code.dm @@ -0,0 +1,2 @@ +/obj/machinery/door/poddoor/crusher/automatic/preopen + rad_insulation = RAD_NO_INSULATION diff --git a/modular_pentest/~pentest.dme b/modular_pentest/~pentest.dme index 92e00cda6de..c7fd2b3ba23 100644 --- a/modular_pentest/~pentest.dme +++ b/modular_pentest/~pentest.dme @@ -31,7 +31,13 @@ #include "master_files\code\game\atoms.dm" #include "master_files\code\game\pentest_proc.dm" #include "master_files\code\game\items\tools\weldingtool.dm" +#include "master_files\code\game\structures\window.dm" #include "master_files\code\game\machinery\computer\crew.dm" +#include "master_files\code\game\machinery\doors\airlock.dm" +#include "master_files\code\game\machinery\doors\firedoor.dm" +#include "master_files\code\game\machinery\doors\poddoor.dm" +#include "master_files\code\game\machinery\doors\shutters.dm" +#include "master_files\code\game\machinery\doors\windowdoor.dm" #include "master_files\code\game\mecha\mech_fabricator.dm" #include "master_files\code\game\mecha\equipment\tools\mech_fabricator.dm" #include "master_files\code\game\objects\AI_modules.dm" @@ -210,6 +216,7 @@ #include "master_files\code\modules\research\techweb\_techweb.dm" #include "master_files\code\modules\research\techweb\_techweb_node.dm" #include "master_files\code\modules\research\techweb\all_nodes.dm" +#include "master_files\code\modules\ruins\rockplanet_ruin_code.dm" #include "master_files\code\modules\ships\controlled_ship_datum.dm" #include "master_files\code\modules\spells\spell_types\aimed.dm" #include "master_files\code\modules\spells\spell_types\wizard.dm" From 30ff99fe75666b804dbafd8d70114b0bc7499b9b Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:19:29 -0500 Subject: [PATCH 4/7] Fixes Merge Conflict Looks like some lines were removed. --- modular_pentest/~pentest.dme | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modular_pentest/~pentest.dme b/modular_pentest/~pentest.dme index 26893baf661..93fb091b2d5 100644 --- a/modular_pentest/~pentest.dme +++ b/modular_pentest/~pentest.dme @@ -210,19 +210,6 @@ #include "master_files\code\modules\reagents\chemistry\recipes\others.dm" #include "master_files\code\modules\reagents\chemistry\recipes\toxins.dm" #include "master_files\code\modules\reagents\reagent_containers\bottle.dm" -#include "master_files\code\modules\research\bepis.dm" -#include "master_files\code\modules\research\experimentor.dm" -#include "master_files\code\modules\research\research_disk.dm" -#include "master_files\code\modules\research\designs\AI_module_designs.dm" -#include "master_files\code\modules\research\designs\biogenerator_designs.dm" -#include "master_files\code\modules\research\designs\comp_board_designs.dm" -#include "master_files\code\modules\research\designs\gygax.dm" -#include "master_files\code\modules\research\designs\machine_designs.dm" -#include "master_files\code\modules\research\designs\odysseus.dm" -#include "master_files\code\modules\research\designs\tool_designs.dm" -#include "master_files\code\modules\research\techweb\_techweb.dm" -#include "master_files\code\modules\research\techweb\_techweb_node.dm" -#include "master_files\code\modules\research\techweb\all_nodes.dm" #include "master_files\code\modules\ruins\rockplanet_ruin_code.dm" #include "master_files\code\modules\ships\controlled_ship_datum.dm" #include "master_files\code\modules\spells\spell_types\aimed.dm" From f4c2f461a2eb0086b1f289b7c1531975210d1cd9 Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:30:54 -0500 Subject: [PATCH 5/7] Modularization v2 I forgot to actually remove the changes to some individual files. --- code/game/machinery/doors/firedoor.dm | 5 ----- code/game/machinery/doors/poddoor.dm | 3 --- code/game/machinery/doors/shutters.dm | 4 ---- code/game/machinery/doors/windowdoor.dm | 2 -- code/game/objects/items/puzzle_pieces.dm | 2 -- code/modules/ruins/rockplanet_ruin_code.dm | 1 - 6 files changed, 17 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 0b55df5b60e..60d81778e95 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -16,8 +16,6 @@ max_integrity = 300 resistance_flags = FIRE_PROOF heat_proof = TRUE - rad_insulation = RAD_NO_INSULATION //Generally start open. - rad_insulation_closed = RAD_MEDIUM_INSULATION //Same as airlocks. glass = TRUE sub_door = TRUE explosion_block = 1 @@ -68,7 +66,6 @@ icon_state = "door_closed" opacity = TRUE density = TRUE - rad_insulation = RAD_MEDIUM_INSULATION //see also turf/AfterChange for adjacency shennanigans @@ -378,7 +375,6 @@ icon_state = "door_closed" opacity = TRUE density = TRUE - rad_insulation = RAD_MEDIUM_INSULATION /obj/machinery/door/firedoor/border_only/close() if(density) @@ -510,7 +506,6 @@ icon_state = "door_closed" opacity = TRUE density = TRUE - rad_insulation = RAD_MEDIUM_INSULATION /obj/machinery/door/firedoor/window name = "firelock window shutter" diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 6ca3f16600d..9d9b8fd0fbe 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -17,8 +17,6 @@ poddoor = TRUE assemblytype = /obj/structure/poddoor_assembly smoothing_groups = list(SMOOTH_GROUP_AIRLOCK) - rad_insulation = RAD_HEAVY_INSULATION - rad_insulation_closed = RAD_HEAVY_INSULATION var/open_sound = 'sound/machines/airlocks/blastdoor.ogg' var/close_sound = 'sound/machines/airlocks/blastdoor.ogg' @@ -99,7 +97,6 @@ icon_state = "open" density = FALSE opacity = FALSE - rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/ert name = "hardened blast door" diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 9f4be1d58b3..57efb72443e 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -12,7 +12,6 @@ icon_state = "open" density = FALSE opacity = FALSE - rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/shutters/indestructible name = "hardened shutters" @@ -22,7 +21,6 @@ icon_state = "open" density = FALSE opacity = FALSE - rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/gates gender = PLURAL @@ -34,8 +32,6 @@ close_sound = 'sound/machines/airlocks/gate.ogg' glass = TRUE opacity = FALSE - rad_insulation = RAD_NO_INSULATION //Offer no insulation. - rad_insulation_closed = RAD_NO_INSULATION /obj/machinery/door/poddoor/gates/indestructible name = "hardened gates" diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 6efb15c507a..acf8ba51d90 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -17,8 +17,6 @@ CanAtmosPass = ATMOS_PASS_PROC interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN set_dir_on_move = FALSE - rad_insulation = RAD_LIGHT_INSULATION - rad_insulation_closed = RAD_LIGHT_INSULATION var/obj/item/electronics/airlock/electronics = null var/reinf = 0 var/shards = 2 diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 1ebde410e66..5ac10eaadb1 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -152,8 +152,6 @@ glass = TRUE opacity = FALSE move_resist = MOVE_FORCE_OVERPOWERING - rad_insulation = RAD_NO_INSULATION //Offer no insulation. Redefining to make clear in case parent changes. - rad_insulation_closed = RAD_NO_INSULATION /obj/machinery/door/keycard/gates/do_animate(animation) switch(animation) diff --git a/code/modules/ruins/rockplanet_ruin_code.dm b/code/modules/ruins/rockplanet_ruin_code.dm index 504d11ee6d2..970265ab50e 100644 --- a/code/modules/ruins/rockplanet_ruin_code.dm +++ b/code/modules/ruins/rockplanet_ruin_code.dm @@ -40,7 +40,6 @@ is_open = FALSE density = FALSE opacity = FALSE - rad_insulation = RAD_NO_INSULATION /obj/machinery/door/poddoor/crusher/automatic/Initialize(mapload) . = ..() From 6faddd13ab42d0e8580bc8a0507ec09db48f7660 Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:36:01 -0500 Subject: [PATCH 6/7] Modularization 3.1 Reverting a few more lines I missed. --- code/game/machinery/doors/firedoor.dm | 1 - code/game/objects/structures/window.dm | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 60d81778e95..044cdf2ce86 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -517,7 +517,6 @@ resistance_flags = 0 // not fireproof heat_proof = FALSE assemblytype = /obj/structure/firelock_frame/window - rad_insulation_closed = RAD_LIGHT_INSULATION //Not as good as firedoors. /obj/item/electronics/firelock name = "firelock circuitry" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 18e5bf76220..b52373169d4 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -413,7 +413,7 @@ damage_deflection = 5 //WS Edit - Weakens R-Windows state = RWINDOW_SECURE glass_type = /obj/item/stack/sheet/rglass - rad_insulation = RAD_MEDIUM_INSULATION // PENTEST EDIT - RADIATION REFACTOR + rad_insulation = RAD_HEAVY_INSULATION receive_ricochet_chance_mod = 0.8 decon_time = 6 SECONDS @@ -514,7 +514,7 @@ max_integrity = 200 explosion_block = 1 glass_type = /obj/item/stack/sheet/plasmaglass - rad_insulation = RAD_LIGHT_INSULATION // PENTEST EDIT - RADIATION REFACTOR + rad_insulation = RAD_NO_INSULATION /obj/structure/window/plasma/spawnDebris(location) . = list() @@ -773,7 +773,7 @@ damage_deflection = 5 //WS Edit - Weakens R-Windows glass_type = /obj/item/stack/sheet/plastitaniumglass glass_amount = 2 - rad_insulation = RAD_MEDIUM_INSULATION // PENTEST EDIT - RADIATION REFACTOR + rad_insulation = RAD_HEAVY_INSULATION decon_time = 10 SECONDS /obj/structure/window/plasma/reinforced/plastitanium/unanchored From af28b89b284b0db31430caeb3c79b487dcea4044 Mon Sep 17 00:00:00 2001 From: forwardslashN <150570209+FslashN@users.noreply.github.com> Date: Wed, 11 Mar 2026 22:05:52 -0500 Subject: [PATCH 7/7] Modularization v3.2 Forgot to remove two lines. Oops. --- .../master_files/code/game/machinery/doors/airlock.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modular_pentest/master_files/code/game/machinery/doors/airlock.dm b/modular_pentest/master_files/code/game/machinery/doors/airlock.dm index 4b66aacbfd1..d351f92d8db 100644 --- a/modular_pentest/master_files/code/game/machinery/doors/airlock.dm +++ b/modular_pentest/master_files/code/game/machinery/doors/airlock.dm @@ -1,9 +1,3 @@ /obj/machinery/door/airlock rad_insulation = RAD_MEDIUM_INSULATION //Generally start closed. rad_insulation_closed = RAD_MEDIUM_INSULATION - -/obj/machinery/door/airlock/open(forced=0) - rad_insulation = RAD_NO_INSULATION - -/obj/machinery/door/airlock/close(forced=0) - rad_insulation = rad_insulation_closed