mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 22:17:32 +01:00
273 lines
8.8 KiB
Plaintext
273 lines
8.8 KiB
Plaintext
/datum/engi_event/supermatter_event
|
|
name = "Unknown X-K (Report this to coders)"
|
|
var/obj/machinery/atmospherics/supermatter_crystal/supermatter
|
|
var/turf/supermatter_turf
|
|
|
|
/datum/engi_event/supermatter_event/New(obj/machinery/atmospherics/supermatter_crystal/_supermatter)
|
|
. = ..()
|
|
supermatter = _supermatter
|
|
supermatter_turf = get_turf(supermatter)
|
|
if(!supermatter)
|
|
stack_trace("a /datum/engi_event/supermatter_event was called without an involved supermatter.")
|
|
return
|
|
if(!istype(supermatter))
|
|
stack_trace("a /datum/engi_event/supermatter_event was called with (name: [supermatter], type: [supermatter.type]) instead of a supermatter!")
|
|
return
|
|
|
|
/datum/engi_event/supermatter_event/start_event()
|
|
supermatter.event_active = src
|
|
supermatter.investigate_log("event [src] has been triggered", INVESTIGATE_SUPERMATTER)
|
|
. = ..()
|
|
|
|
/datum/engi_event/supermatter_event/on_end()
|
|
sm_radio_say("<b>Anomalous crystal activity has ended.</b>")
|
|
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/engi_event/supermatter_event/proc/sm_radio_say(text)
|
|
if(!text)
|
|
return
|
|
supermatter.radio.autosay(text, supermatter.name, "Engineering")
|
|
|
|
/datum/engi_event/supermatter_event/proc/general_radio_say(text)
|
|
if(!text)
|
|
return
|
|
supermatter.radio.autosay(text, supermatter.name, null)
|
|
|
|
// Below this are procs used for the SM events, in order of severity
|
|
|
|
//D class events
|
|
|
|
/datum/engi_event/supermatter_event/delta_tier
|
|
threat_level = SM_EVENT_THREAT_D
|
|
duration = 10 SECONDS
|
|
|
|
/datum/engi_event/supermatter_event/delta_tier/alert_engi()
|
|
sm_radio_say("Abnormal crystal activity detected! Activity class: [name].")
|
|
|
|
// sleeping gas
|
|
/datum/engi_event/supermatter_event/delta_tier/sleeping_gas
|
|
name = "D-1"
|
|
|
|
/datum/engi_event/supermatter_event/delta_tier/sleeping_gas/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_sleeping_agent(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
// nitrogen
|
|
/datum/engi_event/supermatter_event/delta_tier/nitrogen
|
|
name = "D-2"
|
|
|
|
/datum/engi_event/supermatter_event/delta_tier/nitrogen/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_nitrogen(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
// carbon dioxide
|
|
/datum/engi_event/supermatter_event/delta_tier/carbon_dioxide
|
|
name = "D-3"
|
|
|
|
/datum/engi_event/supermatter_event/delta_tier/carbon_dioxide/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_carbon_dioxide(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
// hydrogen
|
|
/datum/engi_event/supermatter_event/delta_tier/hydrogen
|
|
name = "D-4"
|
|
|
|
/datum/engi_event/supermatter_event/delta_tier/hydrogen/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_hydrogen(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
// C class events
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier
|
|
threat_level = SM_EVENT_THREAT_C
|
|
duration = 15 SECONDS
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier/alert_engi()
|
|
sm_radio_say("Anomalous crystal activity detected. Activity class: [name]. Operator intervention may be required.")
|
|
|
|
// oxygen
|
|
/datum/engi_event/supermatter_event/charlie_tier/oxygen
|
|
name = "C-1"
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier/oxygen/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_oxygen(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
// plasma
|
|
/datum/engi_event/supermatter_event/charlie_tier/plasma
|
|
name = "C-2"
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier/plasma/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_toxins(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
// lowers the temp required for the SM to take damage.
|
|
/datum/engi_event/supermatter_event/charlie_tier/heat_penalty_threshold
|
|
name = "C-3"
|
|
duration = 5 MINUTES
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier/heat_penalty_threshold/on_start()
|
|
supermatter.heat_penalty_threshold -= 173
|
|
|
|
// hydrogen
|
|
/datum/engi_event/supermatter_event/charlie_tier/hydrogen
|
|
name = "C-4"
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier/hydrogen/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_hydrogen(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
//water vapor
|
|
/datum/engi_event/supermatter_event/charlie_tier/water_vapor
|
|
name = "C-5"
|
|
|
|
/datum/engi_event/supermatter_event/charlie_tier/water_vapor/on_start()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_water_vapor(2000)
|
|
supermatter_turf.blind_release_air(air)
|
|
|
|
//Class B events
|
|
/datum/engi_event/supermatter_event/bravo_tier
|
|
threat_level = SM_EVENT_THREAT_B
|
|
duration = 1 MINUTES
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/alert_engi()
|
|
sm_radio_say("<b>Anomalous crystal activity detected! Activity class: [name]. Operator intervention is required!</b>")
|
|
|
|
|
|
// more gas
|
|
/datum/engi_event/supermatter_event/bravo_tier/gas_multiply
|
|
name = "B-1"
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/gas_multiply/on_start()
|
|
supermatter.gas_multiplier = 3
|
|
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/heat_multiplier
|
|
name = "B-2"
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/heat_multiplier/on_start()
|
|
supermatter.heat_multiplier = 3
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/power_additive
|
|
name = "B-3"
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/power_additive/on_start()
|
|
supermatter.power += 3000
|
|
duration = 10 SECONDS
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/power_surge // basically an arc-lite event
|
|
name = "B-4"
|
|
duration = 2 MINUTES
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/power_surge/on_start()
|
|
supermatter.power_additive = 1500
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/gas_dump // basically a laminate-lite event without the EMP
|
|
name = "B-5"
|
|
duration = 2 MINUTES
|
|
|
|
/datum/engi_event/supermatter_event/bravo_tier/gas_dump/on_start()
|
|
supermatter.heat_multiplier = 2
|
|
supermatter.gas_multiplier = 2
|
|
|
|
//A class events
|
|
/datum/engi_event/supermatter_event/alpha_tier
|
|
threat_level = SM_EVENT_THREAT_A
|
|
duration = 10 SECONDS
|
|
|
|
/datum/engi_event/supermatter_event/alpha_tier/alert_engi()
|
|
sm_radio_say(SPAN_BIG("ALERT: Critical anomalous crystal activity detected! Activity class: [name]. IMMEDIATE Operator intervention is REQUIRED!"))
|
|
|
|
/datum/engi_event/supermatter_event/alpha_tier/apc_short
|
|
name = "A-1"
|
|
|
|
/datum/engi_event/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/engi_event/supermatter_event/alpha_tier/air_siphon
|
|
name = "A-2"
|
|
|
|
/datum/engi_event/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.mode = AALARM_MODE_OFF
|
|
A.apply_mode()
|
|
|
|
/datum/engi_event/supermatter_event/alpha_tier/gas_multiplier
|
|
name = "A-3"
|
|
duration = 2 MINUTES
|
|
|
|
/datum/engi_event/supermatter_event/alpha_tier/gas_multiplier/on_start()
|
|
supermatter.gas_multiplier = 4
|
|
|
|
/datum/engi_event/supermatter_event/alpha_tier/integrity_hit
|
|
name = "A-4"
|
|
|
|
/datum/engi_event/supermatter_event/alpha_tier/integrity_hit/on_start()
|
|
supermatter.damage = clamp((supermatter.damage + rand(350, 650)), 0, 1000)
|
|
|
|
supermatter.matter_power += 1000
|
|
|
|
// S-tier events are special. They are very dangerous, but give a 5 minute warning to the engis.
|
|
/datum/engi_event/supermatter_event/sierra_tier
|
|
threat_level = SM_EVENT_THREAT_S
|
|
duration = 7 MINUTES // 2 MINUTES of s-tier anomaly
|
|
|
|
/datum/engi_event/supermatter_event/sierra_tier/alert_engi()
|
|
general_radio_say(SPAN_BIG("ALERT: Anomalous supermatter state expected in: 5 minutes."))
|
|
sm_radio_say(SPAN_REALLYBIG("EMERGENCY ALERT: 5 MINUTES UNTIL [supermatter] EXHIBITS [name] CLASS ANOMALOUS ACTIVITY!"))
|
|
|
|
/datum/engi_event/supermatter_event/sierra_tier/on_start()
|
|
addtimer(CALLBACK(src, PROC_REF(start_sierra_event)), 5 MINUTES)
|
|
supermatter.has_run_sclass = TRUE
|
|
|
|
/datum/engi_event/supermatter_event/sierra_tier/proc/start_sierra_event()
|
|
general_radio_say(SPAN_BIG("ALERT: ANOMALOUS SUPERMATTER STATE DETECTED!"))
|
|
sm_radio_say(SPAN_REALLYBIG("EMERGENCY ALERT: Class [name] anomalous behavior in progress!"))
|
|
|
|
//S class events
|
|
//Arc-type
|
|
/datum/engi_event/supermatter_event/sierra_tier/arc
|
|
name = "S-ARC"
|
|
|
|
/datum/engi_event/supermatter_event/sierra_tier/arc/start_sierra_event()
|
|
..()
|
|
supermatter.power_additive = 6000
|
|
|
|
// Laminate type
|
|
/datum/engi_event/supermatter_event/sierra_tier/laminate
|
|
name = "S-LAMINATE REJECTION"
|
|
|
|
/datum/engi_event/supermatter_event/sierra_tier/laminate/start_sierra_event()
|
|
..()
|
|
supermatter.heat_multiplier = 25
|
|
supermatter.gas_multiplier = 25
|
|
empulse(supermatter, 3, 6, TRUE, "S-laminite event")
|
|
|
|
// Flood
|
|
/datum/engi_event/supermatter_event/sierra_tier/flood
|
|
name = "S-FLOOD OUTPOUR"
|
|
|
|
/datum/engi_event/supermatter_event/sierra_tier/flood/start_sierra_event()
|
|
..()
|
|
var/datum/gas_mixture/air = new()
|
|
air.set_toxins(20000)
|
|
air.set_oxygen(15000)
|
|
supermatter_turf.blind_release_air(air) // WHO HAS AN RCD, SPACE IT
|
|
supermatter.gas_multiplier = 40
|
|
empulse(supermatter, 3, 6, TRUE, "S-flood event")
|