/datum/supermatter_event var/name = "Unknown X-K (Report this to coders)" var/obj/machinery/atmospherics/supermatter_crystal/supermatter /// Probability of the event not running, higher tiers being rarer var/threat_level var/duration var/turf/supermatter_turf /datum/supermatter_event/New(obj/machinery/atmospherics/supermatter_crystal/_supermatter) . = ..() supermatter = _supermatter supermatter_turf = get_turf(supermatter) if(!supermatter) stack_trace("a /datum/supermatter_event was called without an involved supermatter.") return if(!istype(supermatter)) stack_trace("a /datum/supermatter_event was called with (name: [supermatter], type: [supermatter.type]) instead of a supermatter!") return /datum/supermatter_event/proc/start_event() supermatter.event_active = src on_start() alert_engi() supermatter.investigate_log("event [src] has been triggered", "supermatter") if(duration) addtimer(CALLBACK(src, PROC_REF(on_end)), duration) /datum/supermatter_event/proc/on_start() return /datum/supermatter_event/proc/alert_engi() return /datum/supermatter_event/proc/on_end() sm_radio_say("Anomalous crystal activity has ended.") supermatter.heat_penalty_threshold = SUPERMATTER_HEAT_PENALTY_THRESHOLD supermatter.gas_multiplier = 1 supermatter.power_additive = 0 supermatter.heat_multiplier = 1 supermatter.event_active = null /datum/supermatter_event/proc/sm_radio_say(text) if(!text) return supermatter.radio.autosay(text, supermatter, "Engineering") /datum/supermatter_event/proc/general_radio_say(text) if(!text) return supermatter.radio.autosay(text, supermatter, null) // Below this are procs used for the SM events, in order of severity //D class events /datum/supermatter_event/delta_tier threat_level = SM_EVENT_THREAT_D duration = 10 SECONDS /datum/supermatter_event/delta_tier/alert_engi() sm_radio_say("Abnormal crystal activity detected! Activity class: [name].") // sleeping gas /datum/supermatter_event/delta_tier/sleeping_gas name = "D-1" /datum/supermatter_event/delta_tier/sleeping_gas/on_start() var/datum/gas_mixture/air = new() air.set_sleeping_agent(200) supermatter_turf.blind_release_air(air) // nitrogen /datum/supermatter_event/delta_tier/nitrogen name = "D-2" /datum/supermatter_event/delta_tier/nitrogen/on_start() var/datum/gas_mixture/air = new() air.set_nitrogen(200) supermatter_turf.blind_release_air(air) // carbon dioxide /datum/supermatter_event/delta_tier/carbon_dioxide name = "D-3" /datum/supermatter_event/delta_tier/carbon_dioxide/on_start() var/datum/gas_mixture/air = new() air.set_carbon_dioxide(250) supermatter_turf.blind_release_air(air) // C class events /datum/supermatter_event/charlie_tier threat_level = SM_EVENT_THREAT_C duration = 15 SECONDS /datum/supermatter_event/charlie_tier/alert_engi() sm_radio_say("Anomalous crystal activity detected. Activity class: [name]. Operator intervention may be required.") // oxygen /datum/supermatter_event/charlie_tier/oxygen name = "C-1" /datum/supermatter_event/charlie_tier/oxygen/on_start() var/datum/gas_mixture/air = new() air.set_oxygen(250) supermatter_turf.blind_release_air(air) // plasma /datum/supermatter_event/charlie_tier/plasma name = "C-2" /datum/supermatter_event/charlie_tier/plasma/on_start() var/datum/gas_mixture/air = new() air.set_toxins(200) supermatter_turf.blind_release_air(air) // lowers the temp required for the SM to take damage. /datum/supermatter_event/charlie_tier/heat_penalty_threshold name = "C-3" duration = 5 MINUTES /datum/supermatter_event/charlie_tier/heat_penalty_threshold/on_start() supermatter.heat_penalty_threshold -= -73 //Class B events /datum/supermatter_event/bravo_tier threat_level = SM_EVENT_THREAT_B duration = 1 MINUTES /datum/supermatter_event/bravo_tier/alert_engi() sm_radio_say("Anomalous crystal activity detected! Activity class: [name]. Operator intervention is required!") // more gas /datum/supermatter_event/bravo_tier/gas_multiply name = "B-1" /datum/supermatter_event/bravo_tier/gas_multiply/on_start() supermatter.gas_multiplier = 1.5 /datum/supermatter_event/bravo_tier/heat_multiplier name = "B-2" /datum/supermatter_event/bravo_tier/heat_multiplier/on_start() supermatter.heat_multiplier = 1.25 /datum/supermatter_event/bravo_tier/power_additive name = "B-3" /datum/supermatter_event/bravo_tier/power_additive/on_start() supermatter.power += 3000 duration = 10 SECONDS //A class events /datum/supermatter_event/alpha_tier threat_level = SM_EVENT_THREAT_A duration = 10 SECONDS /datum/supermatter_event/alpha_tier/alert_engi() sm_radio_say("ALERT: Critical anomalous crystal activity detected! Activity class: [name]. IMMEDIATE Operator intervention is REQUIRED!") /datum/supermatter_event/alpha_tier/apc_short name = "A-1" /datum/supermatter_event/alpha_tier/apc_short/on_start() var/area/current_area = get_area(supermatter) var/obj/machinery/power/apc/A = current_area.get_apc() A.apc_short() /datum/supermatter_event/alpha_tier/air_siphon name = "A-2" /datum/supermatter_event/alpha_tier/air_siphon/on_start() var/area/current_area = get_area(supermatter) for(var/obj/machinery/alarm/A in current_area) A.apply_mode(AALARM_MODE_OFF) /datum/supermatter_event/alpha_tier/gas_multiplier name = "A-3" duration = 2 MINUTES /datum/supermatter_event/alpha_tier/gas_multiplier/on_start() supermatter.gas_multiplier = 4 // S-tier events are special. They are very dangerous, but give a 5 minute warning to the engis. /datum/supermatter_event/sierra_tier threat_level = SM_EVENT_THREAT_S duration = 7 MINUTES // 2 MINUTES of s-tier anomaly /datum/supermatter_event/sierra_tier/alert_engi() general_radio_say("ALERT: Anomalous supermatter state expected in: 5 minutes.") sm_radio_say("EMERGENCY ALERT: 5 MINUTES UNTIL [supermatter] EXHIBITS [name] CLASS ANOMALOUS ACTIVITY!") /datum/supermatter_event/sierra_tier/on_start() addtimer(CALLBACK(src, PROC_REF(start_sierra_event)), 5 MINUTES) supermatter.has_run_sclass = TRUE /datum/supermatter_event/sierra_tier/proc/start_sierra_event() general_radio_say("ALERT: ANOMALOUS SUPERMATTER STATE DETECTED!") sm_radio_say("EMERGENCY ALERT: Class [name] anomalous behavior in progress!") //S class events //Arc-type /datum/supermatter_event/sierra_tier/arc name = "S-ARC" /datum/supermatter_event/sierra_tier/arc/start_sierra_event() ..() supermatter.power_additive = 6000 // Laminate type /datum/supermatter_event/sierra_tier/laminate name = "S-LAMINATE REJECTION" /datum/supermatter_event/sierra_tier/laminate/start_sierra_event() ..() supermatter.heat_multiplier = 10