diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 091383196a2..45390b5ff3c 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -54,6 +54,7 @@ #define MEDAL_EARTHQUAKE_VICTIM "Earthquake Victim" #define MEDAL_DEBT_EXTINGUISHED "Debt Extinguished" #define MEDAL_ARCHMAGE "Archmage" +#define MEDAL_THEORETICAL_LIMITS "All Within Theoretical Limits" //Skill medal hub IDs #define MEDAL_LEGENDARY_MINER "Legendary Miner" diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index 354d9a8dc36..1dd047ac244 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -241,3 +241,9 @@ desc = "I've paid my dues, shift after shift... I've done my sentence but commited no griff..." database_id = MEDAL_DEBT_EXTINGUISHED icon = "outdebted" + +/datum/award/achievement/misc/theoretical_limits + name = "All Within Theoretical Limits" + desc = "I never thought I'd see a resonance cascade, let alone prevent one..." + database_id = MEDAL_THEORETICAL_LIMITS + icon = "theoreticallimits" diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 2b6c31231fc..71f2346646c 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -169,6 +169,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /// Only values greater or equal to the current one can change the strat. var/delam_priority = SM_DELAM_PRIO_NONE + /// Lazy list of the crazy engineers who managed to turn a cascading engine around. + var/list/datum/weakref/saviors = null + /obj/machinery/power/supermatter_crystal/Initialize(mapload) . = ..() gas_percentage = list() @@ -312,6 +315,16 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) processing_sound() handle_high_power() psychological_examination() + + // handle the engineers that saved the engine from cascading, if there were any + if(get_status() < SUPERMATTER_EMERGENCY && !isnull(saviors)) + for(var/datum/weakref/savior_ref as anything in saviors) + var/mob/living/savior = savior_ref.resolve() + if(!istype(savior)) // didn't live to tell the tale, sadly. + continue + savior.client?.give_award(/datum/award/achievement/misc/theoretical_limits, savior) + LAZYNULL(saviors) + if(prob(15)) supermatter_pull(loc, min(internal_energy/850, 3))//850, 1700, 2550 update_appearance() @@ -515,6 +528,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(healed) final_countdown = FALSE + + if(!istype(delamination_strategy, /datum/sm_delam/cascade)) + return + + for(var/mob/living/lucky_engi as anything in mobs_in_area_type(list(/area/station/engineering/supermatter))) + if(isnull(lucky_engi.client)) + continue + if(isanimal_or_basicmob(lucky_engi)) + continue + LAZYADD(saviors, WEAKREF(lucky_engi)) + return // delam averted sleep(1 SECONDS) diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index 0f6b9c933e3..ad34dfd16f0 100644 Binary files a/icons/ui_icons/achievements/achievements.dmi and b/icons/ui_icons/achievements/achievements.dmi differ