mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
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:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user