diff --git a/code/game/gamemodes/cult/cultify/turf.dm b/code/game/gamemodes/cult/cultify/turf.dm index c29bd7b15b6..aed1a75890a 100644 --- a/code/game/gamemodes/cult/cultify/turf.dm +++ b/code/game/gamemodes/cult/cultify/turf.dm @@ -27,6 +27,9 @@ /turf/unsimulated/beach/cultify() return +/turf/simulated/open/cultify() + return + /turf/unsimulated/floor/cultify() cultify_floor() @@ -37,6 +40,8 @@ if((icon_state != "cult")&&(icon_state != "cult-narsie")) icon = 'icons/turf/flooring/cult.dmi' icon_state = "cult" + pixel_x = 0 + pixel_y = 0 if(istype(src,/turf/simulated/floor)) var/turf/simulated/floor/F = src F.set_flooring(get_flooring_data(/decl/flooring/reinforced/cult)) diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index 4371ff4b2aa..a916129d8cf 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -108,7 +108,15 @@ var/global/list/narsie_list = list() movement_dir = force_move if(target && prob(60)) - movement_dir = get_dir(src,target) + movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one + if(target.z < z) + visible_message("\The [src] descends ominously.") + zMove(DOWN) + visible_message("\The [src] appears from on high.") + else if(target.z > z) + visible_message("\The [src] ascends ominously.") + zMove(UP) + visible_message("\The [src] claws its way up from below.") spawn(0) step(src, movement_dir) @@ -126,7 +134,16 @@ var/global/list/narsie_list = list() movement_dir = force_move if(target && prob(60)) - movement_dir = get_dir(src,target) + movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one + if(target.z < z) + visible_message("\The [src] descends ominously.") + zMove(DOWN) + visible_message("\The [src] appears from on high.") + else if(target.z > z) + visible_message("\The [src] ascends ominously.") + zMove(UP) + visible_message("\The [src] claws its way up from below.") + spawn(0) step(src, movement_dir) narsiefloor(get_turf(loc)) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm index 0e4d2b4f197..9b214e97354 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm @@ -34,13 +34,20 @@ var/pdir = pick(avail_dirs) avail_dirs -= pdir var/turf/T = get_step(src, pdir) + var/turf/A = GetAbove(T) + var/turf/B = GetBelow(T) // EXPAND if(!istype(T,type)) // Do pretty fadeout animation for 1s. new /obj/effect/overlay/bluespacify(T) addtimer(CALLBACK(src, .proc/after_tick, T), 10) - + if(A && !istype(A,type)) + new /obj/effect/overlay/bluespacify(A) + addtimer(CALLBACK(src, .proc/after_tick, A), 10) + if(B && !istype(B,type)) + new /obj/effect/overlay/bluespacify(B) + addtimer(CALLBACK(src, .proc/after_tick, B), 10) if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST)) STOP_PROCESSING(SScalamity, src) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 342676d7540..1d7ce2725b6 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -27,7 +27,7 @@ if(N == /turf/space) var/turf/below = GetBelow(src) if(istype(below) && !istype(below,/turf/space)) - N = below.density ? /turf/simulated/floor/airless : /turf/simulated/open + N = /turf/simulated/open var/obj/fire/old_fire = fire var/old_baseturf = baseturf @@ -36,12 +36,12 @@ changing_turf = TRUE - if(connections) + if(connections) connections.erase_all() cut_overlays() underlays.Cut() - + // So we call destroy. qdel(src) @@ -63,7 +63,7 @@ W.baseturf = old_baseturf W.post_change() - + . = W queue_smooth(src) @@ -102,7 +102,7 @@ if (dir != other.dir) other.set_dir(dir) - + other.icon = icon other.icon_state = icon_state other.underlays = underlays.Copy() @@ -114,7 +114,7 @@ other.priority_overlays = priority_overlays other.overlays = overlays.Copy() - + /turf/simulated/copy_turf(turf/simulated/other, ignore_air = FALSE) . = ..() diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index 23774d526ed..dae21030860 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -100,14 +100,25 @@ explosion(src.loc,(dist),(dist*2),(dist*4)) return 1000 -/turf/singularity_act(S, current_size) +/turf/singularity_act(S, current_size, var/go_down = 1, var/go_up = 1) if(!is_plating()) for(var/obj/O in contents) if(O.level != 1) continue if(O.invisibility == 101) O.singularity_act(src, current_size) - ChangeTurf(get_base_turf_by_area(src)) + if(go_up && current_size >= STAGE_FIVE) + if(HasAbove(src.z)) + var/turf/A = GetAbove(src) + A.singularity_act(S, current_size, 0, 1) + if(go_down && current_size >= STAGE_FIVE) + if(HasBelow(src.z)) + var/turf/B = GetBelow(src) + B.singularity_act(S, current_size, 1, 0) + if(istype(src,/turf/simulated/mineral)) + var/turf/simulated/mineral/M = src + M.GetDrilled() + ChangeTurf(/turf/space) return 2 /turf/simulated/wall/singularity_pull(S, current_size) @@ -128,6 +139,9 @@ /turf/space/singularity_act() return +/turf/simulated/open/singularity_act() + return + /******************* * Nar-Sie Act/Pull * *******************/ diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 7b696750d3f..08a3eeaad62 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -8,7 +8,7 @@ anchored = 1 density = 1 layer = 6 - light_range = 6 + light_power = -100 //eats all light unacidable = 1 //Don't comment this out. var/current_size = 1 @@ -23,7 +23,7 @@ var/grav_pull = 4 //How many tiles out do we pull? var/consume_range = 0 //How many tiles out do we eat. var/event_chance = 15 //Prob for event each tick. - var/target = null //Its target. Moves towards the target if it has one. + var/atom/target = null //Its target. Moves towards the target if it has one. var/last_failed_movement = 0 //Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing. var/last_warning @@ -80,6 +80,9 @@ eat() dissipate() check_energy() + light_range = current_size-2 + if(light_range < 0) + light_range = 0 if (current_size >= STAGE_THREE) move() @@ -299,6 +302,14 @@ if(target && prob(60)) movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one + if(target.z < z) + visible_message("\The [src] gravitates downwards.") + zMove(DOWN) + visible_message("\The [src] appears from above.") + else if(target.z > z) + visible_message("\The [src] gravitates upwards.") + zMove(UP) + visible_message("\The [src] appears from below.") if(current_size >= 9)//The superlarge one does not care about things in its way spawn(0) @@ -312,7 +323,12 @@ step(src, movement_dir) return 1 else - last_failed_movement = movement_dir + if(current_size >= STAGE_FIVE) + var/z_dir = pick(UP,DOWN) + if(!zMove(z_dir)) + last_failed_movement = movement_dir + else + last_failed_movement = movement_dir return 0 /obj/singularity/proc/check_turfs_in(var/direction = 0, var/step = 0) @@ -493,3 +509,11 @@ spawn(0) qdel(src) return gain + +/obj/singularity/can_fall() + return FALSE + +/obj/singularity/proc/zMove(direction) + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) + if(destination) + forceMove(destination) \ No newline at end of file