diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm index 297685b06af..7d422677278 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm @@ -293,7 +293,8 @@ /turf/open/floor/carpet/blue, /area/ruin/smoking_room/room) "X" = ( -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /turf/open/floor/wood, /area/ruin/smoking_room/house) "Z" = ( diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index ef84c020255..1900de44f14 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1695,7 +1695,8 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/dangerous_research/medical) "vv" = ( -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /turf/open/floor/plating, /area/ruin/space/has_grav/dangerous_research/lab) "vz" = ( @@ -2728,7 +2729,8 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research/lab) "Jh" = ( -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /turf/open/floor/plating, /area/ruin/space/has_grav/dangerous_research/medical) "JA" = ( @@ -3265,7 +3267,8 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/dangerous_research/medical) "Qt" = ( -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /obj/effect/decal/cleanable/blood/splatter/over_window, /turf/open/floor/plating, /area/ruin/space/has_grav/dangerous_research/lab) diff --git a/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm b/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm index 6ee3692c959..fd4bf0a5ab1 100644 --- a/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm +++ b/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm @@ -270,7 +270,8 @@ /area/ruin) "Vj" = ( /obj/structure/grille, -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /obj/effect/decal/cleanable/blood/splatter/over_window, /turf/template_noop, /area/ruin) diff --git a/_maps/RandomRuins/SpaceRuins/waystation.dmm b/_maps/RandomRuins/SpaceRuins/waystation.dmm index 696e38df2de..d1dd7bd5b52 100644 --- a/_maps/RandomRuins/SpaceRuins/waystation.dmm +++ b/_maps/RandomRuins/SpaceRuins/waystation.dmm @@ -542,7 +542,8 @@ /area/ruin/space/has_grav/waystation/cargooffice) "jv" = ( /obj/structure/grille, -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /turf/open/floor/iron, /area/ruin/space/has_grav/waystation/cargooffice) "jy" = ( @@ -2578,7 +2579,8 @@ /area/ruin/space/has_grav/waystation/dorms) "SL" = ( /obj/structure/grille, -/obj/effect/spawner/structure/window/reinforced/damaged, +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/blood/splatter/over_window, /turf/open/floor/iron, diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm index 61f343a45ef..f0aa7009668 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm @@ -208,18 +208,6 @@ return open_machine() -/obj/effect/spawner/structure/window/reinforced/damaged - name = "damaged reinforced window spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile/damaged) - -/obj/structure/window/reinforced/fulltile/damaged - var/integrity_min_factor = 0.2 - var/integrity_max_factor = 0.8 - -/obj/structure/window/reinforced/fulltile/damaged/Initialize(mapload) - . = ..() - atom_integrity = rand(max_integrity * integrity_min_factor, max_integrity * integrity_max_factor) - /obj/item/petri_dish/oldstation name = "molly's biopsy" desc = "You can see a moldy piece of sandwich inside the dish. Maybe it helped to preserve the bacteria for that long." diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 1afff92ee8f..6415b4c2d7e 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -1137,3 +1137,85 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/turf/open/floor/floor = get_turf(src) floor.burn_tile() qdel(src) + +///Applies BROKEN flag to the first found machine on a tile +/obj/effect/mapping_helpers/broken_machine + name = "broken machine helper" + icon_state = "broken_machine" + layer = ABOVE_OBJ_LAYER + late = TRUE + +/obj/effect/mapping_helpers/broken_machine/Initialize(mapload) + . = ..() + if(!mapload) + log_mapping("[src] spawned outside of mapload!") + return INITIALIZE_HINT_QDEL + + var/obj/machinery/target = locate(/obj/machinery) in loc + if(isnull(target)) + var/area/target_area = get_area(target) + log_mapping("[src] failed to find a machine at [AREACOORD(src)] ([target_area.type]).") + else + payload(target) + + return INITIALIZE_HINT_LATELOAD + +/obj/effect/mapping_helpers/broken_machine/LateInitialize() + . = ..() + var/obj/machinery/target = locate(/obj/machinery) in loc + + if(isnull(target)) + qdel(src) + return + + target.update_appearance() + qdel(src) + +/obj/effect/mapping_helpers/broken_machine/proc/payload(obj/machinery/airalarm/target) + if(target.machine_stat & BROKEN) + var/area/area = get_area(target) + log_mapping("[src] at [AREACOORD(src)] [(area.type)] tried to break [target] but it's already broken!") + target.set_machine_stat(target.machine_stat | BROKEN) + +///Deals random damage to the first window found on a tile to appear cracked +/obj/effect/mapping_helpers/damaged_window + name = "damaged window helper" + icon_state = "damaged_window" + layer = ABOVE_OBJ_LAYER + late = TRUE + /// Minimum roll of integrity damage in percents + var/integrity_min_factor = 0.2 + /// Maximum roll of integrity damage in percents + var/integrity_max_factor = 0.8 + +/obj/effect/mapping_helpers/damaged_window/Initialize(mapload) + . = ..() + if(!mapload) + log_mapping("[src] spawned outside of mapload!") + return INITIALIZE_HINT_QDEL + + var/obj/structure/window/target = locate(/obj/structure/window) in loc + if(isnull(target)) + var/area/target_area = get_area(target) + log_mapping("[src] failed to find a window at [AREACOORD(src)] ([target_area.type]).") + else + payload(target) + + return INITIALIZE_HINT_LATELOAD + +/obj/effect/mapping_helpers/damaged_window/LateInitialize() + . = ..() + var/obj/structure/window/target = locate(/obj/structure/window) in loc + + if(isnull(target)) + qdel(src) + return + + target.update_appearance() + qdel(src) + +/obj/effect/mapping_helpers/damaged_window/proc/payload(obj/structure/window/target) + if(target.get_integrity() < target.max_integrity) + var/area/area = get_area(target) + log_mapping("[src] at [AREACOORD(src)] [(area.type)] tried to damage [target] but it's already damaged!") + target.take_damage(rand(target.max_integrity * integrity_min_factor, target.max_integrity * integrity_max_factor)) diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index ef06694acb9..32f37cfdad5 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/tools/UpdatePaths/Scripts/75132_damaged_windows.txt b/tools/UpdatePaths/Scripts/75132_damaged_windows.txt new file mode 100644 index 00000000000..f3a1b04225b --- /dev/null +++ b/tools/UpdatePaths/Scripts/75132_damaged_windows.txt @@ -0,0 +1 @@ +/obj/effect/spawner/structure/window/reinforced/damaged : /obj/effect/spawner/structure/window/reinforced{@OLD}, /obj/effect/mapping_helpers/damaged_window