From 2c9a9d90acadd0a0e88bf34eabec07c660b63208 Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Wed, 6 May 2020 14:03:10 +0200 Subject: [PATCH] Adds glass floors (That work with multi-z) (#50831) --- _maps/map_files/debug/multiz.dmm | 16 ++--- _maps/multiz_debug.json | 2 +- code/__DEFINES/is_helpers.dm | 4 +- code/game/atoms.dm | 2 +- code/game/objects/structures/stairs.dm | 14 ++--- code/game/turfs/open/openspace.dm | 68 ++++++-------------- code/game/turfs/open/transparent.dm | 73 ++++++++++++++++++++++ code/modules/awaymissions/away_props.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/photography/camera/camera.dm | 2 +- icons/turf/floors/glass.dmi | Bin 0 -> 3463 bytes icons/turf/floors/reinf_glass.dmi | Bin 0 -> 2961 bytes tgstation.dme | 1 + 13 files changed, 115 insertions(+), 71 deletions(-) create mode 100644 code/game/turfs/open/transparent.dm create mode 100644 icons/turf/floors/glass.dmi create mode 100644 icons/turf/floors/reinf_glass.dmi 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 0000000000000000000000000000000000000000..adf6f57aaa3428df4c551214d41da17d798d1fa0 GIT binary patch literal 3463 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 RKKrZy!|P_K*GNqK{{V*fjT-;} literal 0 HcmV?d00001 diff --git a/icons/turf/floors/reinf_glass.dmi b/icons/turf/floors/reinf_glass.dmi new file mode 100644 index 0000000000000000000000000000000000000000..dda99cd07f83469db90cbd7fa3693c95153abc5e GIT binary patch literal 2961 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 LolxbL=qvvPP-E|X literal 0 HcmV?d00001 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"