Refactors baseturf (#2778)

Modifies baseturf to be used instead of not used. Now all functions that used to call "get_base_turf_by_area(T)" will now call "T.baseturf". Turfs that do not have a baseturf defined will set their baseturf to be the result of "get_base_turf_by_area()", which will descend into "get_base_turf_by_z" and ultimately into "turf/space", if none of the previous stages catch.

ChangeTurf will now only keep baseturf persistent from father to child if the child has no baseturf set by code.

This allows for special turfs, such as ceilings, to have their own base turf, such as open space, to be used instead of the area/z baseturf.

Fixes #2763
This commit is contained in:
LordFowl
2017-06-22 13:16:06 +03:00
committed by skull132
parent bcccd88fd4
commit f604e14933
10 changed files with 39 additions and 30 deletions
+6 -6
View File
@@ -17,10 +17,10 @@
if (T.x > xmax)
xmax = T.x
if (T.x < xmin)
xmin = T.x
if (T.y > ymax)
ymax = T.y
@@ -62,12 +62,12 @@
continue
var/turf/TT = ST.copy_turf(target_turfs[i])
for (var/thing in ST)
var/atom/movable/AM = thing
AM.shuttle_move(TT)
ST.ChangeTurf(get_base_turf_by_area(ST))
ST.ChangeTurf(ST.baseturf)
if (istype(TT, /turf/simulated))
simulated_turfs += TT
@@ -106,7 +106,7 @@
T = target_turfs[idex]
baseturf = get_base_turf(T.z)
baseturf = T.baseturf
for (var/i = 1; i <= source_turfs.len; i++)
var/turf/ST = source_turfs[i]
@@ -115,7 +115,7 @@
continue
var/turf/TT = ST.copy_turf(TTi, ignore_air = TRUE)
for (var/thing in ST)
var/atom/movable/AM = thing
var/atom/movable/copy = DuplicateObject(AM, 1)
+10 -10
View File
@@ -236,9 +236,10 @@ var/global/list/narsie_list = list()
if (A)
qdel(A)
else if (isturf(A))
var/dist = get_dist(A, src)
var/turf/T2 = A
var/dist = get_dist(T2, src)
for (var/atom/movable/AM2 in A.contents)
for (var/atom/movable/AM2 in T2.contents)
if (AM2 == src) // This is the snowflake.
continue
@@ -246,9 +247,8 @@ var/global/list/narsie_list = list()
consume(AM2)
continue
if (dist <= consume_range && !istype(A, get_base_turf_by_area(A)))
var/turf/T2 = A
T2.ChangeTurf(get_base_turf_by_area(A))
if (dist <= consume_range && !istype(T2, T2.baseturf))
T2.ChangeTurf(T2.baseturf)
/obj/singularity/narsie/consume(const/atom/A) //This one is for the small ones.
if(!(A.singuloCanEat()))
@@ -270,9 +270,10 @@ var/global/list/narsie_list = list()
if (A)
qdel(A)
else if (isturf(A))
var/dist = get_dist(A, src)
var/turf/T2 = A
var/dist = get_dist(T2, src)
for (var/atom/movable/AM2 in A.contents)
for (var/atom/movable/AM2 in T2.contents)
if (AM2 == src) // This is the snowflake.
continue
@@ -290,9 +291,8 @@ var/global/list/narsie_list = list()
spawn (0)
AM2.singularity_pull(src, src.current_size)
if (dist <= consume_range && !istype(A, get_base_turf_by_area(A)))
var/turf/T2 = A
T2.ChangeTurf(get_base_turf_by_area(A))
if (dist <= consume_range && !istype(T2, T2.baseturf))
T2.ChangeTurf(T2.baseturf)
/obj/singularity/narsie/ex_act(severity) //No throwing bombs at it either. --NEO
return
+2 -1
View File
@@ -24,7 +24,8 @@
qdel(M)
for(var/obj/O in orange(1,src))
qdel(O)
var/base_turf = get_base_turf_by_area(src)
var/turf/T = loc
var/base_turf = T.baseturf
for(var/turf/simulated/ST in orange(1,src))
if(ST.type == base_turf)
continue
+5 -4
View File
@@ -279,13 +279,14 @@
playsound(target, 'sound/items/Deconstruct.ogg', 50, 1)
chassis.use_power(energy_drain)
else if (istype(target, /turf/simulated/floor))
occupant_message("Deconstructing [target]...")
var/turf/T = target
occupant_message("Deconstructing [T]...")
set_ready_state(0)
if(do_after_cooldown(target))
if(do_after_cooldown(T))
if(disabled) return
chassis.spark_system.queue()
target:ChangeTurf(get_base_turf_by_area(target))
playsound(target, 'sound/items/Deconstruct.ogg', 50, 1)
T.ChangeTurf(T.baseturf)
playsound(T, 'sound/items/Deconstruct.ogg', 50, 1)
chassis.use_power(energy_drain)
else if (istype(target, /obj/machinery/door/airlock))
occupant_message("Deconstructing [target]...")
+2 -2
View File
@@ -98,7 +98,7 @@
build_delay = 50
build_type = "airlock"
build_other = /obj/machinery/door/airlock
else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf_by_area(T))))
else if(!deconstruct && (istype(T,/turf/space) || istype(T,T.baseturf)))
build_cost = 1
build_type = "floor"
build_turf = /turf/simulated/floor/airless
@@ -112,7 +112,7 @@
build_delay = deconstruct ? 50 : 20
build_cost = deconstruct ? 10 : 3
build_type = deconstruct ? "floor" : "wall"
build_turf = deconstruct ? get_base_turf(T.z) : /turf/simulated/wall
build_turf = deconstruct ? T.baseturf : /turf/simulated/wall
else
return 0
@@ -202,7 +202,10 @@
footstep_sound = "gravelstep"
/turf/simulated/floor/plating/snow
footstep_sound = "gravelstep"
/turf/simulated/floor/airless/ceiling
icon_state = "asteroidplating"
baseturf = /turf/space
/turf/simulated/floor/beach
name = "beach"
+2 -2
View File
@@ -2,14 +2,14 @@
//set src in oview(1)
switch(severity)
if(1.0)
src.ChangeTurf(get_base_turf_by_area(src))
src.ChangeTurf(baseturf)
if(2.0)
switch(pick(40;1,40;2,3))
if (1)
if(prob(33)) new /obj/item/stack/material/steel(src)
src.ReplaceWithLattice()
if(2)
src.ChangeTurf(get_base_turf_by_area(src))
src.ChangeTurf(baseturf)
if(3)
if(prob(33)) new /obj/item/stack/material/steel(src)
if(prob(80))
+2 -2
View File
@@ -160,7 +160,7 @@
/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product, var/no_change = FALSE)
if (!no_change) // No change is TRUE when this is called by destroy.
playsound(src, 'sound/items/Welder.ogg', 100, 1)
if(!no_product)
if(reinf_material)
reinf_material.place_dismantled_girder(src, reinf_material)
@@ -186,7 +186,7 @@
/turf/simulated/wall/ex_act(severity)
switch(severity)
if(1.0)
src.ChangeTurf(get_base_turf(src.z))
src.ChangeTurf(baseturf)
return
if(2.0)
if(prob(75))
+4 -1
View File
@@ -27,7 +27,7 @@
var/list/decals
var/is_hole // If true, turf will be treated as space or a hole
var/turf/baseturf = /turf/space
var/tmp/turf/baseturf
var/roof_type = null // The turf type we spawn as a roof.
var/tmp/roof_flags = 0
@@ -58,6 +58,9 @@
if (opacity)
has_opaque_atom = TRUE
if(!baseturf)
baseturf = get_base_turf_by_area(src)
spawn_roof()
return INITIALIZE_HINT_NORMAL
+3 -2
View File
@@ -2,7 +2,7 @@
var/tmp/changing_turf
/turf/proc/ReplaceWithLattice()
src.ChangeTurf(get_base_turf_by_area(src))
src.ChangeTurf(baseturf)
spawn()
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
@@ -61,7 +61,8 @@
SSair.mark_for_update(src) //handle the addition of the new turf.
W.baseturf = old_baseturf
if(!W.baseturf)
W.baseturf = old_baseturf
W.post_change()