diff --git a/code/controllers/subsystem/processing/supermatter_cascade.dm b/code/controllers/subsystem/processing/supermatter_cascade.dm index 91d6d3b4624..ddd5ef09b38 100644 --- a/code/controllers/subsystem/processing/supermatter_cascade.dm +++ b/code/controllers/subsystem/processing/supermatter_cascade.dm @@ -1,4 +1,4 @@ PROCESSING_SUBSYSTEM_DEF(supermatter_cascade) name = "Supermatter Cascade" - wait = 1 SECONDS + wait = 0.5 SECONDS stat_tag = "SC" diff --git a/code/modules/power/supermatter/supermatter_cascade_components.dm b/code/modules/power/supermatter/supermatter_cascade_components.dm index 457c46ba2a7..3281f2b7ab1 100644 --- a/code/modules/power/supermatter/supermatter_cascade_components.dm +++ b/code/modules/power/supermatter/supermatter_cascade_components.dm @@ -1,4 +1,4 @@ -/turf/closed/indestructible/supermatter_wall +/obj/crystal_mass name = "crystal mass" desc = "You see this massive crystal mass looming towards you, cracking and screeching at every seemingly random movement." icon = 'icons/turf/walls.dmi' @@ -6,15 +6,19 @@ layer = AREA_LAYER plane = ABOVE_LIGHTING_PLANE opacity = FALSE + density = TRUE + anchored = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF light_power = 1 light_range = 7 light_color = COLOR_VIVID_YELLOW + move_resist = INFINITY ///All dirs we can expand to var/list/available_dirs = list(NORTH,SOUTH,EAST,WEST,UP,DOWN) ///Cooldown on the expansion process COOLDOWN_DECLARE(sm_wall_cooldown) -/turf/closed/indestructible/supermatter_wall/Initialize(mapload) +/obj/crystal_mass/Initialize(mapload, dir_to_remove) . = ..() icon_state = "crystal_cascade_[rand(1,6)]" START_PROCESSING(SSsupermatter_cascade, src) @@ -23,7 +27,13 @@ playsound(src, 'sound/misc/cracking_crystal.ogg', 45, TRUE) -/turf/closed/indestructible/supermatter_wall/process() + available_dirs -= dir_to_remove + + var/turf/our_turf = get_turf(src) + if(our_turf) + our_turf.opacity = FALSE + +/obj/crystal_mass/process() if(!COOLDOWN_FINISHED(src, sm_wall_cooldown)) return @@ -36,32 +46,27 @@ var/picked_dir = pick_n_take(available_dirs) var/turf/next_turf = get_step_multiz(src, picked_dir) - if(!istype(next_turf) || istype(next_turf, /turf/closed/indestructible/supermatter_wall)) - return icon_state = "crystal_cascade_[rand(1,6)]" + if(!next_turf || locate(/obj/crystal_mass) in next_turf) + return + for(var/atom/movable/checked_atom as anything in next_turf) - if(isliving(checked_atom)) - qdel(checked_atom) - else if(ismob(checked_atom)) // Observers, AI cameras. + if(!isliving(checked_atom) && !istype(checked_atom, /obj/cascade_portal)) continue - else - qdel(checked_atom) + qdel(checked_atom) - next_turf.ChangeTurf(type) - var/turf/closed/indestructible/supermatter_wall/sm_wall = next_turf - if(sm_wall.available_dirs) - sm_wall.available_dirs -= get_dir(next_turf, src) + new /obj/crystal_mass(next_turf, get_dir(next_turf, src)) -/turf/closed/indestructible/supermatter_wall/bullet_act(obj/projectile/projectile) +/obj/crystal_mass/bullet_act(obj/projectile/projectile) visible_message(span_notice("[src] is unscathed!")) return BULLET_ACT_HIT -/turf/closed/indestructible/supermatter_wall/singularity_act() +/obj/crystal_mass/singularity_act() return -/turf/closed/indestructible/supermatter_wall/attack_tk(mob/user) +/obj/crystal_mass/attack_tk(mob/user) if(!iscarbon(user)) return var/mob/living/carbon/jedi = user diff --git a/code/modules/power/supermatter/supermatter_delamination.dm b/code/modules/power/supermatter/supermatter_delamination.dm index af0eac81f43..42d418d0d91 100644 --- a/code/modules/power/supermatter/supermatter_delamination.dm +++ b/code/modules/power/supermatter/supermatter_delamination.dm @@ -176,10 +176,9 @@ create_cascade_ambience() pick_rift_location() warn_crew() - supermatter_turf.ChangeTurf(/turf/closed/indestructible/supermatter_wall) + new /obj/crystal_mass(supermatter_turf) for(var/i in 1 to rand(4,6)) - var/turf/crystal_cascade_location = get_turf(pick(GLOB.generic_event_spawns)) - crystal_cascade_location.ChangeTurf(/turf/closed/indestructible/supermatter_wall) + new /obj/crystal_mass(get_turf(pick(GLOB.generic_event_spawns))) /** * Adds a bit of spiciness to the cascade by breaking lights and turning emergency maint access on @@ -206,7 +205,7 @@ priority_announce("Unknown harmonance affecting local spatial substructure, all nearby matter is starting to crystallize.", "Central Command Higher Dimensional Affairs", 'sound/misc/bloblarm.ogg') priority_announce("There's been a sector-wide electromagnetic pulse. All of our systems are heavily damaged, including those required for emergency shuttle navigation. \ We can only reasonably conclude that a supermatter cascade has been initiated on or near your station. \ - Evacuation is no longer possible by conventional means; however, we managed to open a rift near the [span_boldannounce(get_area_name(cascade_rift))]. \ + Evacuation is no longer possible by conventional means; however, we managed to open a rift near the [get_area_name(cascade_rift)]. \ All personnel are hereby advised to enter the rift using all means available. Retrieval of survivors will be conducted upon recovery of necessary facilities. \ Good l\[\[###!!!-")