Damaged window and broken machine helpers (#75132)

## About The Pull Request

Added a helper that makes it possible to spawn broken machines without
var-editing.

Removed the damaged reinforced window spawner and added a general
damaged window helper working on any first window found on a tile.

<img width="787" alt="2"
src="https://user-images.githubusercontent.com/3625094/235808169-c6143606-52e8-4bb7-bab4-e7ce3d359eb2.PNG">

<img width="787" alt="1"
src="https://user-images.githubusercontent.com/3625094/235808160-688f56eb-269a-4019-8c1c-2819cc3a4432.PNG">

## Why It's Good For The Game

Less var edits, better tools for mappers, more immersive ruins.

## Changelog

🆑
qol: Mapping: Added broken machine map helper
qol: Mapping: Replaced damaged window spawner with a universal helper
/🆑
This commit is contained in:
Andrew
2023-05-04 14:06:30 -06:00
committed by GitHub
parent dc418a56ec
commit d3d2da52f9
8 changed files with 97 additions and 19 deletions
+82
View File
@@ -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))