From 2736f112dca6be8e01b57f81925eda2a7862c4b9 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 04:41:57 +0700 Subject: [PATCH 01/18] heya --- code/modules/events/portal_storm.dm | 19 +--- code/modules/power/supermatter/supermatter.dm | 95 ++++++++++++++----- .../supermatter/supermatter_delamination.dm | 10 +- 3 files changed, 81 insertions(+), 43 deletions(-) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index f83d54973415..78dacc802e23 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -233,25 +233,10 @@ /datum/round_event/portal_storm/resonance_cascade/tick() var/turf/T = get_safe_random_station_turf() - - if(spawn_hostile()) - var/type = pick(hostile_types) - hostile_types[type] = hostile_types[type] - 1 - spawn_mob(T, type, hostiles_spawn) - if(!hostile_types[type]) - hostile_types -= type - - if(spawn_boss()) - var/type = pick(boss_types) - boss_types[type] = boss_types[type] - 1 - spawn_mob(T, type, boss_spawn) - if(!boss_types[type]) - boss_types -= type - var/anomaly = pick(anomaly_types) anomaly_types[anomaly] = anomaly_types[anomaly] - 1 supermatter_anomaly_gen(T, anomaly, rand(5, 10), has_weak_lifespan = TRUE) if(!anomaly_types[anomaly]) anomaly_types -= anomaly - - time_to_end() + + return ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 80d0c0e6efbc..951882de9fb8 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -162,7 +162,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/corruptor_attached = FALSE // The thing that reduces support integrity var/resonance_cascading = FALSE // IT'S NOT SHUTTING DOWN!!!!!!! var/noblium_suppressed = FALSE // or is it? - + var/bypass_containment = FALSE // If support_integrity is below 30, setting up a containment field at this point is useless + var/debug_inhibitor = FALSE // Blob related shit var/supermatter_blob = FALSE // Well say sike rn @@ -378,6 +379,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) light_color = "#ff5006" return distort +/obj/machinery/power/supermatter_crystal/proc/antinoblium_safety() //Used for checking containment during antinoblium delamination, if false, things will go south and trigger resonance cascade event + if(bypass_containment) //Containment is uselesss at this point + for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) + explosion(gens, heavy_impact_range = 2, light_impact_range = 3) + return FALSE + if(!check_containment(get_turf(src), 5) || corruptor_attached) + return FALSE + for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) + Beam(gens, icon_state = "lightning[rand(1,12)]", time = 5, maxdistance = INFINITY, beam_color="#fdd700") + return TRUE + /obj/machinery/power/supermatter_crystal/proc/countdown() set waitfor = FALSE @@ -419,9 +431,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(i == 10 SECONDS) playsound(src, 'yogstation/sound/voice/sm/fcitadel_10sectosingularity.ogg', 100, FALSE, 100, pressure_affected=FALSE) if(antinoblium_attached && !resonance_cascading) // yogs- resonance cascade! - priority_announce("RESONANCE CASCADE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg') + if(antinoblium_safety()) + priority_announce("SECONDARY CONTAINMENT SYSTEM IS OPERATING AT MAXIMUM POWER. [emergency_alert]", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="green") + else + priority_announce("RESONANCE CASCADE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") resonance_cascading = TRUE sound_to_playing_players('sound/magic/lightning_chargeup.ogg', 50, FALSE) // yogs end + add_overlay(mutable_appearance("icons/obj/tesla_engine/energy_ball.dmi", "smenergy_ball", LIGHTING_PRIMARY_LAYER)) if(supermatter_blob) if(!check_containment(src, 5)) priority_announce("LEVEL 5 BIOHAZARD OUTBREAK IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") @@ -445,7 +461,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) SSpersistence.rounds_since_engine_exploded = ROUNDCOUNT_ENGINE_JUST_EXPLODED for (var/obj/structure/sign/delamination_counter/sign as anything in GLOB.map_delamination_counters) sign.update_count(ROUNDCOUNT_ENGINE_JUST_EXPLODED) - new /datum/supermatter_delamination(power, combined_gas, get_turf(src), explosion_power, gasmix_power_ratio, antinoblium_attached, resonance_cascading, last_rads, supermatter_blob) + new /datum/supermatter_delamination(power, combined_gas, get_turf(src), explosion_power, gasmix_power_ratio, antinoblium_attached, resonance_cascading, last_rads, supermatter_blob, bypass_containment) qdel(src) @@ -587,7 +603,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) else powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05,0, 1) - if(support_integrity >= 10 && (!supermatter_blob || check_containment(src, 5))) + if((support_integrity >= 20 && (!supermatter_blob || check_containment(src, 5))) || !debug_inhibitor) powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) if(matter_power) @@ -629,8 +645,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) src.fire_nuclear_particle() // Spawn more radballs at 80% chance each if(antinobliumcomp >= 0.5 && antinobmol > 100 && nobliumcomp < 0.5 && !antinoblium_attached) // don't put this stuff in the SM - investigate_log("[src] has reached criticial antinoblium concentration and started a resonance cascade.", INVESTIGATE_SUPERMATTER) - message_admins("[src] has reached criticial antinoblium concentration and started a resonance cascade.") + investigate_log("[src] has reached criticial antinoblium concentration, this may cause a resonance cascade or a controlled supermatter energy ball containment.", INVESTIGATE_SUPERMATTER) + message_admins("[src] has reached criticial antinoblium concentration, this may cause a resonance cascade or a controlled supermatter energy ball containment.") antinoblium_attached = TRUE // oh god oh fuck if (miasmacomp >= 0.5 && miasmol > 500 && !supermatter_blob) //requires around 4500 mol of miasma for the blob @@ -639,7 +655,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) supermatter_zap(src, 10, 7000) // adding enough hypernoblium can save it, but only if it hasn't gotten too bad and it wasn't corrupted using the traitor kit - if(nobliumcomp >= 0.5 && antinoblium_attached && !corruptor_attached && support_integrity > 10 && damage <= damage_archived) + if(nobliumcomp >= 0.5 && antinoblium_attached && !corruptor_attached && support_integrity > 20 && damage <= damage_archived) support_integrity += 2 if(support_integrity >= 100) support_integrity = 100 @@ -708,15 +724,15 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) supermatter_zap(src, 5, clamp(power*2, 4000, 20000)) - if(prob(15) && (power > POWER_PENALTY_THRESHOLD || combined_gas > MOLE_PENALTY_THRESHOLD || antinoblium_attached || (supermatter_blob && !check_containment(src, 5)))) + if(prob(15) && (power > POWER_PENALTY_THRESHOLD || combined_gas > MOLE_PENALTY_THRESHOLD || !antinoblium_safety() || (supermatter_blob && !check_containment(src, 5)))) supermatter_pull(src, power/750) - if(prob(5) || (antinoblium_attached || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if(prob(5) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_FLUX, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(1) || (antinoblium_attached || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(1) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_GRAVITATIONAL, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3) && power > POWER_PENALTY_THRESHOLD || (antinoblium_attached || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3) && power > POWER_PENALTY_THRESHOLD || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_PYRO, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(0.5) || (antinoblium_attached || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(0.5) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_RADIATION, rand(5, 10)) if(damage > warning_point) // while the core is still damaged and it's still worth noting its status @@ -786,9 +802,14 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(antinoblium_attached) if(support_integrity <= 10) - radio.talk_into(src, "DANGER: RESONANCE CASCADE IMMINENT.", engineering_channel) - log_game("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.") // yogs start - Logs SM chatter - investigate_log("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.", INVESTIGATE_SUPERMATTER) // yogs end + if(!antinoblium_safety()) + radio.talk_into(src, "WARNING: CONTROLLED ANTINOBLIUM CONCENTRATION DE, PROCEED WITH CAUTION.", engineering_channel) + log_game("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.") // yogs start - Logs SM chatter + investigate_log("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.", INVESTIGATE_SUPERMATTER) // yogs end + else + radio.talk_into(src, "WARNING: CONTROLLED ANTINOBLIUM CONCENTRATION DETECTED, PROCEED WITH CAUTION.", engineering_channel) + log_game("The supermatter crystal: WARNING: CONTROLLED ANTINOBLIUM CONCENTRATION DETECTED, PROCEED WITH CAUTION.") // yogs start - Logs SM chatter + investigate_log("The supermatter crystal: WARNING: CONTROLLED ANTINOBLIUM CONCENTRATION DETECTED, PROCEED WITH CAUTION.", INVESTIGATE_SUPERMATTER) // yogs end else if(noblium_suppressed) radio.talk_into(src, "Paranoblium interface returning to safe operating parameters.", engineering_channel) log_game("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.") // yogs start - Logs SM chatter @@ -833,29 +854,49 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) radio.talk_into(src, "COMPLETE FAILURE OF GAMMA RADIATION SUPPRESSION SYSTEM DETECTED, ACTIVATING GAMMA EMISSION BUNDLING AND DISPERSION SYSTEM.", engineering_channel) if(40) radio.talk_into(src, "DISPERSION SYSTEM ACTIVATION FAILED, BUNDLER NOW FIRING WITHOUT GUIDANCE.", engineering_channel) - priority_announce("SUPERMATTER INSTABILITY IS AT 60%, PULSEWAVE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg') + priority_announce("SUPERMATTER INSTABILITY IS AT 60%, PULSEWAVE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") if(30) radio.talk_into(src, "WARNING ENERGY SPIKE IN CRYSTAL WELL DETECTED, ESTIMATED ENERGY OUTPUT EXCEEDS PEAK CHARGE DISPERSION CAPACITY.", engineering_channel) if(20) - radio.talk_into(src, "CRYSTAL WELL DESTABILIZED, ELECTROMAGNETIC PULSES INBOUND, PARANOBLIUM INTERFACE OPERATING AT [round(15+ rand()*10,0.01)]% CAPACITY.", common_channel) + if(!antinoblium_safety()) + radio.talk_into(src, "CRYSTAL WELL DESTABILIZED, ELECTROMAGNETIC PULSES INBOUND, PARANOBLIUM INTERFACE OPERATING AT [round(15+ rand()*10,0.01)]% CAPACITY.", common_channel) + else + radio.talk_into(src, "CRYSTAL WELL RESTABILIZATION IN PROGRESS, ACTIVATING SECONDARY ELECTROMAGNETIC FIELD CONTAINMENT, PARANOBLIUM INTERFACE OPERATING AT [round(15+ rand()*10,0.01)]% CAPACITY.", common_channel) if(10) - radio.talk_into(src, "ELECTROMAGNETIC FIELD CONTAINMENT FAILED, PARANOBLIUM INTERFACE NONFUNCTIONAL, RESONANCE CASCADE IMMINENT.", common_channel) - priority_announce("SUPERMATTER INSTABILITY IS AT 90%, SUPERMATTER SURGE DETECTED, VACATE THE AREA IMMEDIATELY.", "Anomaly Alert", 'sound/misc/notice1.ogg') + if(!antinoblium_safety()) + radio.talk_into(src, "ELECTROMAGNETIC FIELD CONTAINMENT FAILED, PARANOBLIUM INTERFACE NONFUNCTIONAL, RESONANCE CASCADE IMMINENT.", common_channel) + priority_announce("SUPERMATTER INSTABILITY IS AT 90%, SUPERMATTER SURGE DETECTED, VACATE THE AREA IMMEDIATELY.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") + else + radio.talk_into(src, "SECONDARY ELECTROMAGNETIC FIELD CONTAINMENT ENGAGED, PARANOBLIUM INTERFACE REBOOTING", common_channel) + priority_announce("SUPERMATTER INSTABILITY IS AT 90%, SUPERMATTER SURGE DETECTED, ACTIVATING SECONDARY FAILSAFE CONTAINMENT, PROCEED WITH CAUTION.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="green") if(6) - radio.talk_into(src, "ELECTROMAGNETIC PULSES IMMINENT, CONTAINMENT AND COOLING FAILURE IMMINENT.", common_channel) + if(!antinoblium_safety()) + radio.talk_into(src, "ELECTROMAGNETIC PULSES IMMINENT, CONTAINMENT AND COOLING FAILURE IMMINENT.", common_channel) + else + radio.talk_into(src, "ELECTROMAGNETIC PULSES MINIMAL, SECONDARY CONTAINMENT AND COOLING FULLY OPERATIONAL.", common_channel) if(1) - priority_announce("COMPLETE DESTABILIZATION OF ALL MAJOR SUPPORT SYSTEMS, MATTER EMISSION FACTOR AT 600%, COMPLETE EVACUATION IS ADVISED.", "Anomaly Alert", 'sound/misc/notice1.ogg') + if(!antinoblium_safety()) + priority_announce("COMPLETE DESTABILIZATION OF ALL MAJOR SUPPORT SYSTEMS, MATTER EMISSION FACTOR AT 600%, COMPLETE EVACUATION IS ADVISED.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") + else + priority_announce("COMPLETE RESTABILIZATION OF ALL MAJOR SUPPORT SYSTEMS, MATTER EMISSION FACTOR PERCENTAGE DROPPING, PROCEED WITH CAUTION.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="green") support_integrity -= 1 radiation_pulse(src, (100-support_integrity)*2, 4) + supermatter_zap(src, 7, 2000) + antinoblium_safety() if(support_integrity<3) var/emp_power = round(explosion_power * (1+(1-(support_integrity/3))),1) empulse(src, emp_power) + supermatter_zap(src, 7, 2000+power) + antinoblium_safety() if(support_integrity<100) power += round((100-support_integrity)/2,1) + supermatter_zap(src, 7, 2000+power) + antinoblium_safety() if(support_integrity<70) if(prob(30+round((100-support_integrity)/2,1))) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) - supermatter_zap(src, 5, min(power*2, 20000)) + supermatter_zap(src, 7, 2000+min(power*2, 20000)) + antinoblium_safety() if(support_integrity<40) if(prob(10)) T.hotspot_expose(max(((100-support_integrity)*2)+FIRE_MINIMUM_TEMPERATURE_TO_EXIST,T.return_air().return_temperature()), 100) @@ -864,13 +905,21 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) fire_nuclear_particle() + antinoblium_safety() + supermatter_zap(src, 7, 2000+power) + if(support_integrity<=20) + if(!antinoblium_safety()) + bypass_containment = TRUE if(support_integrity<10) powerloss_inhibitor = 0.01 //ensure big explosion - surging = 10000 + surging = 100000 if(istype(T, /turf/open/space) || T.return_air().total_moles() < MOLE_SPACE_THRESHOLD) damage += DAMAGE_HARDCAP * explosion_point //Can't cheat by spacing the crystal to buy time, it will just delaminate faster if(prob(2)) empulse(src, 10-support_integrity) //EMPs must always be spewing every so often to ensure that containment is guaranteed to fail. + if(prob(30)) + antinoblium_safety() + supermatter_zap(src, 7, 2000+power) // I FUCKING LOVE DATA!!!!!! powerData += power diff --git a/code/modules/power/supermatter/supermatter_delamination.dm b/code/modules/power/supermatter/supermatter_delamination.dm index 967589433e26..578fffb2dcb2 100644 --- a/code/modules/power/supermatter/supermatter_delamination.dm +++ b/code/modules/power/supermatter/supermatter_delamination.dm @@ -17,8 +17,10 @@ var/supermatter_radiation = 0 ///Blob shit var/supermatter_blob = FALSE + ///(Force trigger resonance cascade event if true) + var/bypass_containment = FALSE -/datum/supermatter_delamination/New(supermatter_power, supermatter_gas_amount, turf/supermatter_turf, supermatter_explosion_power, supermatter_gasmix_power_ratio, supermatter_antinoblium, supermatter_cascading, supermatter_radiation, supermatter_blob) +/datum/supermatter_delamination/New(supermatter_power, supermatter_gas_amount, turf/supermatter_turf, supermatter_explosion_power, supermatter_gasmix_power_ratio, supermatter_antinoblium, supermatter_cascading, supermatter_radiation, supermatter_blob, bypass_containment) . = ..() src.supermatter_power = supermatter_power @@ -30,6 +32,7 @@ src.supermatter_cascading = supermatter_cascading src.supermatter_radiation = supermatter_radiation src.supermatter_blob = supermatter_blob + src.bypass_containment = bypass_containment setup_mob_interaction() setup_delamination_type() @@ -66,9 +69,10 @@ call_blob() return if(supermatter_cascading && !supermatter_blob) - call_cascading() call_cascadetesla() - call_explosion() + if(bypass_containment) + call_cascading() + call_explosion() return if(supermatter_gas_amount > MOLE_PENALTY_THRESHOLD && !supermatter_cascading && !supermatter_blob) call_singulo() From 83e7da71316c7556748ea8edb6a52407d3e5b61b Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 05:37:53 +0700 Subject: [PATCH 02/18] a --- code/modules/antagonists/blob/overmind.dm | 2 +- code/modules/events/portal_storm.dm | 8 +++---- code/modules/power/supermatter/supermatter.dm | 24 ++++++++++--------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 0f7a83e7ad20..d003b2e72a09 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -141,7 +141,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) has_announced = TRUE SSshuttle.registerHostileEnvironment(src) else if(!check_containment(blob_core, 5) && !contained && !has_announced) - priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/default/outbreak5.ogg', color_override="yellow") + priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/default/outbreak5.ogg', color_override="red") has_announced = TRUE /mob/camera/blob/proc/victory() diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 78dacc802e23..2754cc5d5f98 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -205,7 +205,7 @@ A.visible_message(span_userdanger("[A] overloads and makes a huge arc!")) tesla_zap(A, 5, 10000) // woe message_centcom("Alert, a large scale of abnormal activity has been detected on [station_name()]. Investigate and send the special forces to the station immediately.", "Central Command Higher Dimensional Affairs") - priority_announce("Unknown anomalous portals detected on a large scale of the station. There is no additional data.", "Central Command Higher Dimensional Affairs", ANNOUNCER_SPANOMALIES) + priority_announce("Unknown anomalous portals detected on a large scale of the station. There is no additional data.", "Central Command Higher Dimensional Affairs", ANNOUNCER_SPANOMALIES, color_override="red") addtimer(CALLBACK(src, PROC_REF(call_shuttle)), 4 SECONDS) //Wait till the annoucement finishes till the the next one so the sounds dont overlap each other /datum/round_event/portal_storm/resonance_cascade/proc/call_shuttle() @@ -216,11 +216,10 @@ return priority_announce("Attention all personnel, this is an emergency announcement on [station_name()]. \ An evacuation is immediately underway due to abnormal hostile activity detected on the premises. \ - A distress signal has been sent to Central Command to alert them of the situation. In addition to that, \ - we have observed a substantial number of meteors approaching the station on a large scale. \ + A distress signal has been sent to Central Command to alert them of the situation. \ Please remain calm and follow the evacuation procedures provided. \ Proceed to the designated evacuation points swiftly and orderly. To ensure your safety, \ - please avoid areas with abnormal activity and refrain from going outside the station to minimize the risk of collisions with meteors. \ + please avoid areas with abnormal activity. \ Security personnel are present to assist and ensure your safety. \ Cooperate with their instructions and refrain from engaging with any hostiles. \ Central Command is actively responding and coordinating a comprehensive emergency response. \ @@ -229,6 +228,7 @@ Assistance is on the way.", title = "Central Command Higher Dimensional Affairs", sound = 'sound/misc/airraid.ogg', + color_override="red", ) /datum/round_event/portal_storm/resonance_cascade/tick() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 951882de9fb8..222154eb79ca 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -164,6 +164,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/noblium_suppressed = FALSE // or is it? var/bypass_containment = FALSE // If support_integrity is below 30, setting up a containment field at this point is useless var/debug_inhibitor = FALSE + // Blob related shit var/supermatter_blob = FALSE // Well say sike rn @@ -437,7 +438,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) priority_announce("RESONANCE CASCADE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") resonance_cascading = TRUE sound_to_playing_players('sound/magic/lightning_chargeup.ogg', 50, FALSE) // yogs end - add_overlay(mutable_appearance("icons/obj/tesla_engine/energy_ball.dmi", "smenergy_ball", LIGHTING_PRIMARY_LAYER)) + add_overlay(mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "smenergy_ball", /obj/singularity/energy_ball, LIGHTING_PRIMARY_LAYER, MASSIVE_OBJ_PLANE)) if(supermatter_blob) if(!check_containment(src, 5)) priority_announce("LEVEL 5 BIOHAZARD OUTBREAK IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") @@ -603,8 +604,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) else powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05,0, 1) - if((support_integrity >= 20 && (!supermatter_blob || check_containment(src, 5))) || !debug_inhibitor) - powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) + if(!debug_inhibitor) + if(support_integrity >= 20 && (!supermatter_blob || check_containment(src, 5))) + powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) if(matter_power) var/removed_matter = max(matter_power/MATTER_POWER_CONVERSION, 40) @@ -821,7 +823,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //blob SM HAMMM if(supermatter_blob) if(!check_containment(src, 5)) - powerloss_inhibitor = 0.01 + if(!debug_inhibitor) + powerloss_inhibitor = 0.01 power += 10000 if(prob(2)) empulse(src, 10, 5) @@ -833,6 +836,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) supermatter_zap(src, 5, power) for(var/i = 1 to 20) fire_nuclear_particle() + else if(prob(30)) + for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) + Beam(gens, icon_state = "lightning[rand(1,12)]", time = 5, maxdistance = INFINITY, beam_color="#bb0074") if(istype(T, /turf/open/space) || T.return_air().total_moles() < MOLE_SPACE_THRESHOLD) damage += DAMAGE_HARDCAP * explosion_point @@ -884,19 +890,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) supermatter_zap(src, 7, 2000) antinoblium_safety() if(support_integrity<3) - var/emp_power = round(explosion_power * (1+(1-(support_integrity/3))),1) - empulse(src, emp_power) + if(!antinoblium_safety()) + var/emp_power = round(explosion_power * (1+(1-(support_integrity/3))),1) + empulse(src, emp_power) supermatter_zap(src, 7, 2000+power) - antinoblium_safety() if(support_integrity<100) power += round((100-support_integrity)/2,1) supermatter_zap(src, 7, 2000+power) - antinoblium_safety() if(support_integrity<70) if(prob(30+round((100-support_integrity)/2,1))) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) supermatter_zap(src, 7, 2000+min(power*2, 20000)) - antinoblium_safety() if(support_integrity<40) if(prob(10)) T.hotspot_expose(max(((100-support_integrity)*2)+FIRE_MINIMUM_TEMPERATURE_TO_EXIST,T.return_air().return_temperature()), 100) @@ -905,7 +909,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) fire_nuclear_particle() - antinoblium_safety() supermatter_zap(src, 7, 2000+power) if(support_integrity<=20) if(!antinoblium_safety()) @@ -918,7 +921,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(prob(2)) empulse(src, 10-support_integrity) //EMPs must always be spewing every so often to ensure that containment is guaranteed to fail. if(prob(30)) - antinoblium_safety() supermatter_zap(src, 7, 2000+power) // I FUCKING LOVE DATA!!!!!! From 303b23eef74455c2f03363f1f104fee75a5f38e6 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 05:45:15 +0700 Subject: [PATCH 03/18] forgor --- code/modules/power/supermatter/supermatter.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 222154eb79ca..d6a1169e4255 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -824,7 +824,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(supermatter_blob) if(!check_containment(src, 5)) if(!debug_inhibitor) - powerloss_inhibitor = 0.01 + powerloss_inhibitor = 0.001 power += 10000 if(prob(2)) empulse(src, 10, 5) @@ -914,7 +914,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!antinoblium_safety()) bypass_containment = TRUE if(support_integrity<10) - powerloss_inhibitor = 0.01 //ensure big explosion + powerloss_inhibitor = 0.001 //ensure big explosion surging = 100000 if(istype(T, /turf/open/space) || T.return_air().total_moles() < MOLE_SPACE_THRESHOLD) damage += DAMAGE_HARDCAP * explosion_point //Can't cheat by spacing the crystal to buy time, it will just delaminate faster From c3cff55ab214e02cb92d43a111b7324fc80f134f Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 06:24:23 +0700 Subject: [PATCH 04/18] whatever --- code/modules/power/supermatter/supermatter.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index d6a1169e4255..3993ce75618b 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -438,7 +438,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) priority_announce("RESONANCE CASCADE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") resonance_cascading = TRUE sound_to_playing_players('sound/magic/lightning_chargeup.ogg', 50, FALSE) // yogs end - add_overlay(mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "smenergy_ball", /obj/singularity/energy_ball, LIGHTING_PRIMARY_LAYER, MASSIVE_OBJ_PLANE)) + var/mutable_appearance/sm_ball = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "smenergy_ball", /obj/singularity/energy_ball, LIGHTING_PRIMARY_LAYER) + sm_ball.pixel_x -= 32 + sm_ball.pixel_y -= 32 + add_overlay(sm_ball) if(supermatter_blob) if(!check_containment(src, 5)) priority_announce("LEVEL 5 BIOHAZARD OUTBREAK IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") From 9930586eb6cd6ca5d40f3ca60e32b24e36b5f3e3 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 06:53:24 +0700 Subject: [PATCH 05/18] better --- code/modules/power/supermatter/supermatter.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 3993ce75618b..335922f1eac9 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -827,7 +827,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(supermatter_blob) if(!check_containment(src, 5)) if(!debug_inhibitor) - powerloss_inhibitor = 0.001 + powerloss_inhibitor = 0 power += 10000 if(prob(2)) empulse(src, 10, 5) @@ -917,7 +917,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!antinoblium_safety()) bypass_containment = TRUE if(support_integrity<10) - powerloss_inhibitor = 0.001 //ensure big explosion + powerloss_inhibitor = 0 //ensure big explosion surging = 100000 if(istype(T, /turf/open/space) || T.return_air().total_moles() < MOLE_SPACE_THRESHOLD) damage += DAMAGE_HARDCAP * explosion_point //Can't cheat by spacing the crystal to buy time, it will just delaminate faster From 38bf7408e5cf75007cd00433c9f34a0ab66093e9 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 06:55:42 +0700 Subject: [PATCH 06/18] fix --- code/modules/power/supermatter/supermatter.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 335922f1eac9..0a144c58b9a4 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -912,7 +912,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) fire_nuclear_particle() - supermatter_zap(src, 7, 2000+power) if(support_integrity<=20) if(!antinoblium_safety()) bypass_containment = TRUE @@ -921,7 +920,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) surging = 100000 if(istype(T, /turf/open/space) || T.return_air().total_moles() < MOLE_SPACE_THRESHOLD) damage += DAMAGE_HARDCAP * explosion_point //Can't cheat by spacing the crystal to buy time, it will just delaminate faster - if(prob(2)) + if(prob(2) && !antinoblium_safety()) empulse(src, 10-support_integrity) //EMPs must always be spewing every so often to ensure that containment is guaranteed to fail. if(prob(30)) supermatter_zap(src, 7, 2000+power) From d784322fd372bc8ab40d7f34207827d322888754 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 07:04:42 +0700 Subject: [PATCH 07/18] fix --- code/modules/power/supermatter/supermatter.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 0a144c58b9a4..ca384edb46f4 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -808,7 +808,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(antinoblium_attached) if(support_integrity <= 10) if(!antinoblium_safety()) - radio.talk_into(src, "WARNING: CONTROLLED ANTINOBLIUM CONCENTRATION DE, PROCEED WITH CAUTION.", engineering_channel) + radio.talk_into(src, "WARNING: DANGER: RESONANCE CASCADE IMMINENT.", engineering_channel) log_game("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.") // yogs start - Logs SM chatter investigate_log("The supermatter crystal: DANGER: RESONANCE CASCADE IMMINENT.", INVESTIGATE_SUPERMATTER) // yogs end else @@ -912,9 +912,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) fire_nuclear_particle() - if(support_integrity<=20) - if(!antinoblium_safety()) - bypass_containment = TRUE if(support_integrity<10) powerloss_inhibitor = 0 //ensure big explosion surging = 100000 From 0cd613df69f22a0bfe1238709f7fcc5d99b62d28 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 07:09:01 +0700 Subject: [PATCH 08/18] oops --- code/modules/power/supermatter/supermatter.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index ca384edb46f4..90f64a429354 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -912,6 +912,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) fire_nuclear_particle() + if(support_integrity<=20) + if(!antinoblium_safety()) + bypass_containment = TRUE if(support_integrity<10) powerloss_inhibitor = 0 //ensure big explosion surging = 100000 From f20fcef81db9526174ab2c1e075e00cb323ac583 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 07:26:23 +0700 Subject: [PATCH 09/18] less zaps --- code/modules/power/supermatter/supermatter.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 90f64a429354..d4e1f91909db 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -890,16 +890,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) priority_announce("COMPLETE RESTABILIZATION OF ALL MAJOR SUPPORT SYSTEMS, MATTER EMISSION FACTOR PERCENTAGE DROPPING, PROCEED WITH CAUTION.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="green") support_integrity -= 1 radiation_pulse(src, (100-support_integrity)*2, 4) - supermatter_zap(src, 7, 2000) antinoblium_safety() if(support_integrity<3) if(!antinoblium_safety()) var/emp_power = round(explosion_power * (1+(1-(support_integrity/3))),1) empulse(src, emp_power) - supermatter_zap(src, 7, 2000+power) if(support_integrity<100) power += round((100-support_integrity)/2,1) - supermatter_zap(src, 7, 2000+power) if(support_integrity<70) if(prob(30+round((100-support_integrity)/2,1))) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) @@ -908,6 +905,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(prob(10)) T.hotspot_expose(max(((100-support_integrity)*2)+FIRE_MINIMUM_TEMPERATURE_TO_EXIST,T.return_air().return_temperature()), 100) if(prob(10+round(support_integrity/10,1))) + supermatter_zap(src, 7, 2000+power) pulsewave() var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) From d7c1d1f6de319859a854db3eaa49febfc2773b14 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 07:47:57 +0700 Subject: [PATCH 10/18] no spamming --- code/modules/power/supermatter/supermatter.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index d4e1f91909db..61f432e7b9ea 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -890,7 +890,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) priority_announce("COMPLETE RESTABILIZATION OF ALL MAJOR SUPPORT SYSTEMS, MATTER EMISSION FACTOR PERCENTAGE DROPPING, PROCEED WITH CAUTION.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="green") support_integrity -= 1 radiation_pulse(src, (100-support_integrity)*2, 4) - antinoblium_safety() + if(prob(30)) + antinoblium_safety() if(support_integrity<3) if(!antinoblium_safety()) var/emp_power = round(explosion_power * (1+(1-(support_integrity/3))),1) From e58d2d76fe4dd9bb055d35bac1e8103b3fc4c764 Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 07:56:25 +0700 Subject: [PATCH 11/18] reduce more zaps --- code/modules/power/supermatter/supermatter.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 61f432e7b9ea..b7eaab808954 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -906,7 +906,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(prob(10)) T.hotspot_expose(max(((100-support_integrity)*2)+FIRE_MINIMUM_TEMPERATURE_TO_EXIST,T.return_air().return_temperature()), 100) if(prob(10+round(support_integrity/10,1))) - supermatter_zap(src, 7, 2000+power) pulsewave() var/ballcount = round(10-(support_integrity/10), 1) // Cause more radballs to be spawned for(var/i = 1 to ballcount) @@ -921,8 +920,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) damage += DAMAGE_HARDCAP * explosion_point //Can't cheat by spacing the crystal to buy time, it will just delaminate faster if(prob(2) && !antinoblium_safety()) empulse(src, 10-support_integrity) //EMPs must always be spewing every so often to ensure that containment is guaranteed to fail. - if(prob(30)) - supermatter_zap(src, 7, 2000+power) // I FUCKING LOVE DATA!!!!!! powerData += power From c941da79618e082ddf439401ebeed6f2c60a576d Mon Sep 17 00:00:00 2001 From: Bop Date: Wed, 25 Dec 2024 08:22:53 +0700 Subject: [PATCH 12/18] final --- code/modules/power/supermatter/supermatter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index b7eaab808954..f2a1e168a132 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -438,7 +438,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) priority_announce("RESONANCE CASCADE IMMINENT.", "Anomaly Alert", 'sound/misc/notice1.ogg', color_override="yellow") resonance_cascading = TRUE sound_to_playing_players('sound/magic/lightning_chargeup.ogg', 50, FALSE) // yogs end - var/mutable_appearance/sm_ball = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "smenergy_ball", /obj/singularity/energy_ball, LIGHTING_PRIMARY_LAYER) + var/mutable_appearance/sm_ball = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "smenergy_ball", LIGHTING_PRIMARY_LAYER) sm_ball.pixel_x -= 32 sm_ball.pixel_y -= 32 add_overlay(sm_ball) From 52e02b80e759f828b1e901e31dbac7d7d2b65a01 Mon Sep 17 00:00:00 2001 From: Bop Date: Sat, 28 Dec 2024 04:34:38 +0700 Subject: [PATCH 13/18] power. --- code/modules/power/tesla/energy_ball.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 3e2ce0e73192..d76c8f7e40ea 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -76,7 +76,7 @@ pixel_y = 0 if(hypercharged) - tesla_zap(src, zap_range, TESLA_HYPERCHARGED_POWER, TESLA_DEFAULT_FLAGS | TESLA_ALLOW_DUPLICATES, zap_gib = TRUE) + tesla_zap(src, zap_range, TESLA_HYPERCHARGED_POWER+power, TESLA_DEFAULT_FLAGS | TESLA_ALLOW_DUPLICATES, zap_gib = TRUE) else tesla_zap(src, zap_range, TESLA_DEFAULT_POWER) From 8d02b9aa1366013a22371f8fe01e14efa73e13e8 Mon Sep 17 00:00:00 2001 From: Bop Date: Sat, 28 Dec 2024 04:44:22 +0700 Subject: [PATCH 14/18] wew --- code/modules/power/supermatter/supermatter.dm | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f2a1e168a132..f598a6d3ea00 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -381,15 +381,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) return distort /obj/machinery/power/supermatter_crystal/proc/antinoblium_safety() //Used for checking containment during antinoblium delamination, if false, things will go south and trigger resonance cascade event - if(bypass_containment) //Containment is uselesss at this point + if(antinoblium_attached) + if(bypass_containment) //Containment is uselesss at this point + for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) + explosion(gens, heavy_impact_range = 2, light_impact_range = 3) + return FALSE + if(!check_containment(get_turf(src), 5) || corruptor_attached) + return FALSE for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) - explosion(gens, heavy_impact_range = 2, light_impact_range = 3) - return FALSE - if(!check_containment(get_turf(src), 5) || corruptor_attached) - return FALSE - for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) - Beam(gens, icon_state = "lightning[rand(1,12)]", time = 5, maxdistance = INFINITY, beam_color="#fdd700") - return TRUE + Beam(gens, icon_state = "lightning[rand(1,12)]", time = 5, maxdistance = INFINITY, beam_color="#fdd700") + return TRUE + return FALSE /obj/machinery/power/supermatter_crystal/proc/countdown() set waitfor = FALSE @@ -733,11 +735,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) supermatter_pull(src, power/750) if(prob(5) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_FLUX, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(1) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if((power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) && !antinoblium_safety()) || prob(1) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_GRAVITATIONAL, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3) && power > POWER_PENALTY_THRESHOLD || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if((power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) && !antinoblium_safety()) || prob(0.3) && power > POWER_PENALTY_THRESHOLD || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_PYRO, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(0.5) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) + if((power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) && !antinoblium_safety()) || prob(0.5) || (!antinoblium_safety() || (supermatter_blob && !check_containment(src, 5))) && prob(10)) supermatter_anomaly_gen(src, ANOMALY_RADIATION, rand(5, 10)) if(damage > warning_point) // while the core is still damaged and it's still worth noting its status From e6a552e1954834b64ad533d3daf2ce864fffed8f Mon Sep 17 00:00:00 2001 From: Bop Date: Sat, 28 Dec 2024 04:45:46 +0700 Subject: [PATCH 15/18] oops --- code/modules/power/tesla/energy_ball.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index d76c8f7e40ea..c7847afd0d72 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -76,7 +76,7 @@ pixel_y = 0 if(hypercharged) - tesla_zap(src, zap_range, TESLA_HYPERCHARGED_POWER+power, TESLA_DEFAULT_FLAGS | TESLA_ALLOW_DUPLICATES, zap_gib = TRUE) + tesla_zap(src, zap_range, TESLA_HYPERCHARGED_POWER+energy, TESLA_DEFAULT_FLAGS | TESLA_ALLOW_DUPLICATES, zap_gib = TRUE) else tesla_zap(src, zap_range, TESLA_DEFAULT_POWER) From 26b1b161ba3926b0be41fd6a0446f6d0d03a9500 Mon Sep 17 00:00:00 2001 From: Bop Date: Sat, 28 Dec 2024 04:53:08 +0700 Subject: [PATCH 16/18] fix --- code/modules/power/supermatter/supermatter.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f598a6d3ea00..4a226d8882c3 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -388,8 +388,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) return FALSE if(!check_containment(get_turf(src), 5) || corruptor_attached) return FALSE - for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) - Beam(gens, icon_state = "lightning[rand(1,12)]", time = 5, maxdistance = INFINITY, beam_color="#fdd700") return TRUE return FALSE @@ -893,7 +891,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) support_integrity -= 1 radiation_pulse(src, (100-support_integrity)*2, 4) if(prob(30)) - antinoblium_safety() + for(var/obj/machinery/field/generator/gens in urange(5, src, 1)) + Beam(gens, icon_state = "lightning[rand(1,12)]", time = 5, maxdistance = INFINITY, beam_color="#fdd700") if(support_integrity<3) if(!antinoblium_safety()) var/emp_power = round(explosion_power * (1+(1-(support_integrity/3))),1) From b01a861307b0542971fdef2b332bc628c06dcfeb Mon Sep 17 00:00:00 2001 From: Bop Date: Sat, 28 Dec 2024 05:16:19 +0700 Subject: [PATCH 17/18] go hard --- code/modules/power/tesla/energy_ball.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index c7847afd0d72..86425facfa02 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -163,6 +163,7 @@ else EB = new /obj/singularity/energy_ball(loc, 0, TRUE) EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) + energy *= EB.energy var/icon/I = icon(icon,icon_state,dir) From f2ea9a63de55def422f51af223d9117a54ea663d Mon Sep 17 00:00:00 2001 From: Bop Date: Sat, 28 Dec 2024 05:16:39 +0700 Subject: [PATCH 18/18] wrong spot --- code/modules/power/tesla/energy_ball.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 86425facfa02..338b6f2c0084 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -160,10 +160,10 @@ if(hypercharged) EB = new /obj/singularity/energy_ball/supermatter/small_crystals(loc, 0, TRUE) EB.icon_state = "smcrystal[rand(1,3)]" + energy *= EB.energy else EB = new /obj/singularity/energy_ball(loc, 0, TRUE) EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) - energy *= EB.energy var/icon/I = icon(icon,icon_state,dir)