diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm index 5b51661c0e1..fcc49f6c7e0 100644 --- a/_maps/map_files/debug/multiz.dmm +++ b/_maps/map_files/debug/multiz.dmm @@ -103,7 +103,7 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "au" = ( -/turf/open/openspace, +/turf/open/transparent/openspace, /area/space) "av" = ( /obj/structure/stairs/north, @@ -1023,7 +1023,7 @@ }, /area/hallway/secondary/service) "eC" = ( -/turf/open/openspace, +/turf/open/transparent/openspace, /area/maintenance/department/bridge) "eD" = ( /obj/effect/turf_decal/stripes/asteroid/line{ @@ -1187,7 +1187,7 @@ /turf/open/floor/plating, /area/construction) "iu" = ( -/turf/open/openspace, +/turf/open/transparent/openspace, /area/hallway/secondary/service) "iH" = ( /obj/effect/turf_decal/stripes/white/line, @@ -1263,7 +1263,7 @@ }, /area/hallway/secondary/service) "nx" = ( -/turf/open/openspace, +/turf/open/transparent/openspace, /area/space/nearstation) "nz" = ( /obj/machinery/light{ @@ -1307,7 +1307,7 @@ /turf/open/floor/plating, /area/maintenance/department/bridge) "qo" = ( -/turf/open/openspace, +/turf/open/transparent/openspace, /area/engine/storage) "qx" = ( /obj/structure/railing/corner{ @@ -1330,7 +1330,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/openspace, +/turf/open/transparent/openspace, /area/engine/storage) "rN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -1498,7 +1498,7 @@ /area/construction) "Bk" = ( /obj/structure/grille, -/turf/open/openspace, +/turf/open/transparent/openspace, /area/space/nearstation) "Bm" = ( /obj/machinery/light{ @@ -1687,7 +1687,7 @@ "Ob" = ( /obj/structure/lattice, /obj/structure/grille, -/turf/open/openspace, +/turf/open/transparent/openspace, /area/space/nearstation) "Og" = ( /obj/machinery/airalarm/directional/north, diff --git a/_maps/multiz_debug.json b/_maps/multiz_debug.json index e8a474161e7..a1c35541087 100644 --- a/_maps/multiz_debug.json +++ b/_maps/multiz_debug.json @@ -2,5 +2,5 @@ "map_name": "MultiZ Debug", "map_path": "map_files/debug", "map_file": "multiz.dmm", - "traits": [{"Up" : 1, "Linkage" : "Cross"}, {"Up" : 1, "Down" : -1, "Baseturf" : "/turf/open/openspace", "Linkage" : "Cross"}, {"Down" : -1, "Baseturf" : "/turf/open/openspace", "Linkage" : "Cross"}] + "traits": [{"Up" : 1, "Linkage" : "Cross"}, {"Up" : 1, "Down" : -1, "Baseturf" : "/turf/open/transparent/openspace", "Linkage" : "Cross"}, {"Down" : -1, "Baseturf" : "/turf/open/transparent/openspace", "Linkage" : "Cross"}] } diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 4f22467d07f..54cef8a2582 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( /turf/open/chasm, /turf/open/lava, /turf/open/water, - /turf/open/openspace + /turf/open/transparent/openspace ))) #define isgroundlessturf(A) (is_type_in_typecache(A, GLOB.turfs_without_ground)) @@ -41,7 +41,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isplatingturf(A) (istype(A, /turf/open/floor/plating)) -#define isopenspace(A) (istype(A, /turf/open/openspace)) +#define istransparentturf(A) (istype(A, /turf/open/transparent)) //Mobs #define isliving(A) (istype(A, /mob/living)) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 99a742fde4a..df1931cc805 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1318,7 +1318,7 @@ if(isspaceturf(T)) // Turf never has gravity return FALSE - if(istype(T, /turf/open/openspace)) //openspace in a space area doesn't get gravity + if(istype(T, /turf/open/transparent/openspace)) //openspace in a space area doesn't get gravity if(istype(get_area(T), /area/space)) return FALSE diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index f3bd1a18303..fb3bf90ac75 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -3,7 +3,7 @@ #define STAIR_TERMINATOR_YES 2 // dir determines the direction of travel to go upwards -// stairs require /turf/open/openspace as the tile above them to work, unless your stairs have 'force_open_above' set to TRUE +// stairs require /turf/open/transparent/openspace as the tile above them to work, unless your stairs have 'force_open_above' set to TRUE // multiple stair objects can be chained together; the Z level transition will happen on the final stair object in the chain /obj/structure/stairs @@ -12,7 +12,7 @@ icon_state = "stairs" anchored = TRUE - var/force_open_above = FALSE // replaces the turf above this stair obj with /turf/open/openspace + var/force_open_above = FALSE // replaces the turf above this stair obj with /turf/open/transparent/openspace var/terminator_mode = STAIR_TERMINATOR_AUTOMATIC var/turf/listeningTo @@ -107,20 +107,20 @@ /obj/structure/stairs/proc/build_signal_listener() if(listeningTo) UnregisterSignal(listeningTo, COMSIG_TURF_MULTIZ_NEW) - var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP) + var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP) RegisterSignal(T, COMSIG_TURF_MULTIZ_NEW, .proc/on_multiz_new) listeningTo = T /obj/structure/stairs/proc/force_open_above() - var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP) + var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP) if(T && !istype(T)) - T.ChangeTurf(/turf/open/openspace, flags = CHANGETURF_INHERIT_AIR) + T.ChangeTurf(/turf/open/transparent/openspace, flags = CHANGETURF_INHERIT_AIR) /obj/structure/stairs/proc/on_multiz_new(turf/source, dir) if(dir == UP) - var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP) + var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP) if(T && !istype(T)) - T.ChangeTurf(/turf/open/openspace, flags = CHANGETURF_INHERIT_AIR) + T.ChangeTurf(/turf/open/transparent/openspace, flags = CHANGETURF_INHERIT_AIR) /obj/structure/stairs/intercept_zImpact(atom/movable/AM, levels = 1) . = ..() diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 6d2a5c37211..12fbc97785a 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -11,77 +11,47 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = SPLASHSCREEN_LAYER -/turf/open/openspace +/turf/open/transparent/openspace name = "open space" desc = "Watch your step!" icon_state = "transparent" - baseturfs = /turf/open/openspace + baseturfs = /turf/open/transparent/openspace CanAtmosPassVertical = ATMOS_PASS_YES //mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/can_cover_up = TRUE var/can_build_on = TRUE - intact = 0 -/turf/open/openspace/airless +/turf/open/transparent/openspace/airless initial_gas_mix = AIRLESS_ATMOS -/turf/open/openspace/debug/update_multiz() +/turf/open/transparent/openspace/debug/update_multiz() ..() return TRUE -/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker +///No bottom level for openspace. +/turf/open/transparent/openspace/show_bottom_level() + return FALSE + +/turf/open/transparent/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker . = ..() - plane = OPENSPACE_PLANE - layer = OPENSPACE_LAYER vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it. - return INITIALIZE_HINT_LATELOAD - -/turf/open/openspace/LateInitialize() - update_multiz(TRUE, TRUE) - -/turf/open/openspace/Destroy() - vis_contents.len = 0 - return ..() - -/turf/open/openspace/can_have_cabling() +/turf/open/transparent/openspace/can_have_cabling() if(locate(/obj/structure/lattice/catwalk, src)) return TRUE return FALSE -/turf/open/openspace/update_multiz(prune_on_fail = FALSE, init = FALSE) - . = ..() - var/turf/T = below() - if(!T) - vis_contents.len = 0 - if(prune_on_fail) - ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return FALSE - if(init) - vis_contents += T +/turf/open/transparent/openspace/zAirIn() return TRUE -/turf/open/openspace/multiz_turf_del(turf/T, dir) - if(dir != DOWN) - return - update_multiz() - -/turf/open/openspace/multiz_turf_new(turf/T, dir) - if(dir != DOWN) - return - update_multiz() - -/turf/open/openspace/zAirIn() +/turf/open/transparent/openspace/zAirOut() return TRUE -/turf/open/openspace/zAirOut() +/turf/open/transparent/openspace/zPassIn(atom/movable/A, direction, turf/source) return TRUE -/turf/open/openspace/zPassIn(atom/movable/A, direction, turf/source) - return TRUE - -/turf/open/openspace/zPassOut(atom/movable/A, direction, turf/destination) +/turf/open/transparent/openspace/zPassOut(atom/movable/A, direction, turf/destination) if(A.anchored) return FALSE for(var/obj/O in contents) @@ -89,13 +59,13 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr return FALSE return TRUE -/turf/open/openspace/proc/CanCoverUp() +/turf/open/transparent/openspace/proc/CanCoverUp() return can_cover_up -/turf/open/openspace/proc/CanBuildHere() +/turf/open/transparent/openspace/proc/CanBuildHere() return can_build_on -/turf/open/openspace/attackby(obj/item/C, mob/user, params) +/turf/open/transparent/openspace/attackby(obj/item/C, mob/user, params) ..() if(!CanBuildHere()) return @@ -137,7 +107,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr else to_chat(user, "The plating is going to need some support! Place metal rods first.") -/turf/open/openspace/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) +/turf/open/transparent/openspace/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(!CanBuildHere()) return FALSE @@ -150,7 +120,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) return FALSE -/turf/open/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) +/turf/open/transparent/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") diff --git a/code/game/turfs/open/transparent.dm b/code/game/turfs/open/transparent.dm new file mode 100644 index 00000000000..334b42e9354 --- /dev/null +++ b/code/game/turfs/open/transparent.dm @@ -0,0 +1,73 @@ +/turf/open/transparent + baseturfs = /turf/open/transparent/openspace + intact = FALSE //this means wires go on top + +/turf/open/transparent/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker + . = ..() + plane = OPENSPACE_PLANE + layer = OPENSPACE_LAYER + + return INITIALIZE_HINT_LATELOAD + +/turf/open/transparent/LateInitialize() + update_multiz(TRUE, TRUE) + +/turf/open/transparent/Destroy() + vis_contents.len = 0 + return ..() + +/turf/open/transparent/update_multiz(prune_on_fail = FALSE, init = FALSE) + . = ..() + var/turf/T = below() + if(!T) + vis_contents.len = 0 + if(!show_bottom_level() && prune_on_fail) //If we cant show whats below, and we prune on fail, change the turf to plating as a fallback + ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + return FALSE + if(init) + vis_contents += T + return TRUE + +/turf/open/transparent/multiz_turf_del(turf/T, dir) + if(dir != DOWN) + return + update_multiz() + +/turf/open/transparent/multiz_turf_new(turf/T, dir) + if(dir != DOWN) + return + update_multiz() + +///Called when there is no real turf below this turf +/turf/open/transparent/proc/show_bottom_level() + var/turf/path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space + if(!ispath(path)) + path = text2path(path) + if(!ispath(path)) + warning("Z-level [z] has invalid baseturf '[SSmapping.level_trait(z, ZTRAIT_BASETURF)]'") + path = /turf/open/space + var/mutable_appearance/underlay_appearance = mutable_appearance(initial(path.icon), initial(path.icon_state), layer = TURF_LAYER, plane = PLANE_SPACE) + underlays += underlay_appearance + return TRUE + + +/turf/open/transparent/glass + name = "Glass floor" + desc = "Dont jump on it, or do, I'm not your mom." + icon = 'icons/turf/floors/glass.dmi' + icon_state = "floor_glass" + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/open/transparent/glass, /turf/open/transparent/glass/reinforced) + footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + +/turf/open/transparent/glass/Initialize() + icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays + return ..() + +/turf/open/transparent/glass/reinforced + name = "Reinforced glass floor" + desc = "Do jump on it, it can take it." + icon = 'icons/turf/floors/reinf_glass.dmi' diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm index fecc17c711a..9a12d14ff2a 100644 --- a/code/modules/awaymissions/away_props.dm +++ b/code/modules/awaymissions/away_props.dm @@ -76,7 +76,7 @@ toggle() /obj/structure/pitgrate/proc/update_openspace() - var/turf/open/openspace/T = get_turf(src) + var/turf/open/transparent/openspace/T = get_turf(src) if(!istype(T)) return //Simple way to keep plane conflicts away, could probably be upgraded to something less nuclear with 513 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7df2061208e..28ff220fb27 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1517,7 +1517,7 @@ if(!ceiling) //We are at the highest z-level. to_chat(src, "You can't see through the ceiling above you.") return - else if(!isopenspace(ceiling)) //There is no openspace turf above us. + else if(!istransparentturf(ceiling)) //There is no turf we can look through above us to_chat(src, "You can't see through the floor above you.") return diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index be8005cfc6a..22cefcd56f3 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -182,7 +182,7 @@ var/clone_area = SSmapping.RequestBlockReservation(size_x * 2 + 1, size_y * 2 + 1) for(var/turf/placeholder in block(locate(target_turf.x - size_x, target_turf.y - size_y, target_turf.z), locate(target_turf.x + size_x, target_turf.y + size_y, target_turf.z))) var/turf/T = placeholder - while(istype(T, /turf/open/openspace)) //Multi-z photography + while(istype(T, /turf/open/transparent/openspace)) //Multi-z photography T = SSmapping.get_turf_below(T) if(!T) break diff --git a/icons/turf/floors/glass.dmi b/icons/turf/floors/glass.dmi new file mode 100644 index 00000000000..adf6f57aaa3 Binary files /dev/null and b/icons/turf/floors/glass.dmi differ diff --git a/icons/turf/floors/reinf_glass.dmi b/icons/turf/floors/reinf_glass.dmi new file mode 100644 index 00000000000..dda99cd07f8 Binary files /dev/null and b/icons/turf/floors/reinf_glass.dmi differ diff --git a/tgstation.dme b/tgstation.dme index c558060582e..64fedf0ba99 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1248,6 +1248,7 @@ #include "code\game\turfs\open\lava.dm" #include "code\game\turfs\open\openspace.dm" #include "code\game\turfs\open\river.dm" +#include "code\game\turfs\open\transparent.dm" #include "code\game\turfs\open\water.dm" #include "code\game\turfs\open\floor\fancy_floor.dm" #include "code\game\turfs\open\floor\hull.dm"