diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 8b4c2ffa..b34004ee 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -21,6 +21,27 @@ hostile_types = list(/mob/living/simple_animal/hostile/construct/armored/hostile = 8,\ /mob/living/simple_animal/hostile/construct/wraith/hostile = 6) +/datum/round_event_control/portal_storm_mesa + name = "Portal Storm: Mesa" + typepath = /datum/round_event/portal_storm/portal_storm_mesa + weight = 0 + max_occurrences = 0 + +/datum/round_event/portal_storm/portal_storm_mesa + boss_types = list(/mob/living/simple_animal/hostile/jungle/leaper = 4, \ + /mob/living/simple_animal/hostile/jungle/mega_arachnid = 6, \ + /mob/living/simple_animal/hostile/asteroid/hivelord = 5) + hostile_types = list(/mob/living/carbon/alien/larva = 2, \ + /mob/living/simple_animal/hostile/netherworld = 8, \ + /mob/living/simple_animal/hostile/asteroid/fugu = 7, \ + /mob/living/simple_animal/hostile/asteroid/basilisk = 8, \ + /mob/living/simple_animal/hostile/asteroid/gutlunch = 7, \ + /mob/living/simple_animal/hostile/statue = 6, \ + /mob/living/simple_animal/hostile/zombie = 12, \ + /mob/living/simple_animal/hostile/netherworld/migo = 10, \ + /mob/living/simple_animal/hostile/netherworld/blankbody = 6 + ) + /datum/round_event/portal_storm startWhen = 7 endWhen = 999 @@ -35,6 +56,12 @@ var/number_of_hostiles var/mutable_appearance/storm +/datum/round_event/portal_storm/portal_storm_mesa/setup() + . = ..() + storm = mutable_appearance('hyperstation/icons/obj/stationobjs.dmi', "fart_hole", FLY_LAYER)//Why do I do these things?? + for(var/mob/M in GLOB.player_list) + SEND_SOUND(M, 'sound/music/half-life07.ogg') + /datum/round_event/portal_storm/setup() storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER) storm.color = "#00FF00" @@ -48,10 +75,10 @@ number_of_hostiles += hostile_types[hostile] while(number_of_bosses > boss_spawn.len) - boss_spawn += get_random_station_turf() + boss_spawn += get_safe_random_station_turf() while(number_of_hostiles > hostiles_spawn.len) - hostiles_spawn += get_random_station_turf() + hostiles_spawn += get_safe_random_station_turf() next_boss_spawn = startWhen + CEILING(2 * number_of_hostiles / number_of_bosses, 1) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 8c4c99ff..84eb2a4e 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -66,6 +66,9 @@ #define SUPERMATTER_COUNTDOWN_TIME 30 SECONDS +#define DEFAULT_ZAP_STATE "sm_arc" +#define MESA_ZAP_STATE "sm_arc_mesa" //You know what this is + GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/power/supermatter_crystal @@ -284,12 +287,18 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) SEND_SOUND(M, 'sound/magic/charge.ogg') to_chat(M, "You feel reality distort for a moment...") SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam) - if(combined_gas > MOLE_PENALTY_THRESHOLD) + if(QDELETED(src))//If something fucks up we just end it. + return + if(combined_gas > MOLE_PENALTY_THRESHOLD && power > CRITICAL_POWER_PENALTY_THRESHOLD) + investigate_log("has collapsed into a resonance cascade.", INVESTIGATE_SUPERMATTER) + var/datum/round_event_control/portal_storm_mesa/cascade = new() + cascade.runEvent() + else if(combined_gas > MOLE_PENALTY_THRESHOLD) investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER) - if(T) - var/obj/singularity/S = new(T) - S.energy = 800 - S.consume(src) + var/obj/singularity/S = new(T) + S.energy = 800 + S.consume(src) + return //No boom for me sir else investigate_log("has exploded.", INVESTIGATE_SUPERMATTER) explosion(get_turf(T), explosion_power * max(gasmix_power_ratio, 0.205) * 0.5 , explosion_power * max(gasmix_power_ratio, 0.205) + 2, explosion_power * max(gasmix_power_ratio, 0.205) + 4 , explosion_power * max(gasmix_power_ratio, 0.205) + 6, 1, 1) @@ -460,7 +469,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(power > SEVERE_POWER_PENALTY_THRESHOLD) supermatter_zap(src, 5, min(power*2, 20000)) if(power > CRITICAL_POWER_PENALTY_THRESHOLD) - supermatter_zap(src, 5, min(power*2, 20000)) + if(combined_gas >= MOLE_PENALTY_THRESHOLD) + playsound(src.loc, 'hyperstation/sound/halflife/beamstart5.ogg', 100, 1, extrarange = 10) + supermatter_zap(src, 5, min(power*2, 20000), MESA_ZAP_STATE) + else + supermatter_zap(src, 5, min(power*2, 20000)) else if (damage > damage_penalty_point && prob(20)) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) supermatter_zap(src, 5, CLAMP(power*2, 4000, 20000)) @@ -500,6 +513,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(combined_gas > MOLE_PENALTY_THRESHOLD) radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel) + if(power > CRITICAL_POWER_PENALTY_THRESHOLD) + radio.talk_into(src, "Warning: Anti-mass spectrometer showing a five percent gain.", engineering_channel) if(damage > explosion_point) countdown() @@ -775,7 +790,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(PYRO_ANOMALY) new /obj/effect/anomaly/pyro(L, 200) -/obj/machinery/power/supermatter_crystal/proc/supermatter_zap(atom/zapstart, range = 3, power) +/obj/machinery/power/supermatter_crystal/proc/supermatter_zap(atom/zapstart, range = 3, power, zap_state = DEFAULT_ZAP_STATE) . = zapstart.dir if(power < 1000) return @@ -816,7 +831,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) target_atom = A if(target_atom) - zapstart.Beam(target_atom, icon_state="nzcrentrs_power", time=5) + zapstart.Beam(target_atom, icon_state=zap_state, time=5) var/zapdir = get_dir(zapstart, target_atom) if(zapdir) . = zapdir diff --git a/hyperstation/icons/obj/stationobjs.dmi b/hyperstation/icons/obj/stationobjs.dmi new file mode 100644 index 00000000..424ea845 Binary files /dev/null and b/hyperstation/icons/obj/stationobjs.dmi differ diff --git a/hyperstation/sound/halflife/beamstart5.ogg b/hyperstation/sound/halflife/beamstart5.ogg new file mode 100644 index 00000000..2208a631 Binary files /dev/null and b/hyperstation/sound/halflife/beamstart5.ogg differ diff --git a/hyperstation/sound/misc/hev_logon.ogg b/hyperstation/sound/misc/hev_logon.ogg deleted file mode 100644 index 6f3cdf91..00000000 Binary files a/hyperstation/sound/misc/hev_logon.ogg and /dev/null differ diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 07315837..bad913ec 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ