Files
Paradise/code/modules/events/anomaly.dm
2021-10-02 13:16:24 +01:00

53 lines
1.7 KiB
Plaintext

/datum/event/anomaly
name = "Anomaly: Energetic Flux"
var/obj/effect/anomaly/anomaly_path = /obj/effect/anomaly/flux
announceWhen = 1
/datum/event/anomaly/proc/findEventArea()
var/static/list/allowed_areas
if(!allowed_areas)
//Places that shouldn't explode
var/list/safe_area_types = typecacheof(list(
/area/turret_protected/ai,
/area/turret_protected/ai_upload,
/area/ai_monitored/storage/emergency,
/area/engine,
/area/solar,
/area/holodeck,
/area/shuttle,
/area/maintenance,
/area/toxins/test_area)
)
//Subtypes from the above that actually should explode.
var/list/unsafe_area_subtypes = typecacheof(list(
/area/engine/break_room,
/area/engine/equipmentstorage,
/area/engine/chiefs_office,
/area/engine/controlroom
))
allowed_areas = typecacheof(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes
var/list/possible_areas = typecache_filter_list(SSmapping.existing_station_areas, allowed_areas)
if(length(possible_areas))
return pick(possible_areas)
/datum/event/anomaly/setup()
impact_area = findEventArea()
if(!impact_area)
CRASH("No valid areas for anomaly found.")
var/list/turf_test = get_area_turfs(impact_area)
if(!length(turf_test))
CRASH("Anomaly: No valid turfs found for [impact_area] - [impact_area.type]")
/datum/event/anomaly/announce()
GLOB.event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg')
/datum/event/anomaly/start()
var/turf/T = pick(get_area_turfs(impact_area))
var/newAnomaly
if(T)
newAnomaly = new anomaly_path(T)
if(newAnomaly)
announce_to_ghosts(newAnomaly)