From 016fd2ac3ccfebb484fa09f530aef6bdca4a61d6 Mon Sep 17 00:00:00 2001
From: Detective Google <48196179+Detective-Google@users.noreply.github.com>
Date: Sat, 15 Aug 2020 23:55:52 -0500
Subject: [PATCH] woo yeah yeah woo
---
.../IceRuins/icemoon_surface_mining_site.dmm | 2 +-
_maps/map_files/Snaxi/Snaxi.dmm | 8 +-
_maps/map_files/debug/multiz.dmm | 16 ++--
_maps/multiz_debug.json | 2 +-
_maps/snaxi.json | 2 +-
code/__DEFINES/is_helpers.dm | 4 +-
code/controllers/subsystem/mapping.dm | 2 +-
code/game/objects/structures/stairs.dm | 14 +--
code/game/turfs/openspace/openspace.dm | 85 +++++++-----------
code/game/turfs/openspace/transparent.dm | 73 +++++++++++++++
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, 133 insertions(+), 76 deletions(-)
create mode 100644 code/game/turfs/openspace/transparent.dm
create mode 100644 icons/turf/floors/glass.dmi
create mode 100644 icons/turf/floors/reinf_glass.dmi
diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm
index 969acdd871..23abc4b731 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm
@@ -16,7 +16,7 @@
/turf/open/floor/wood,
/area/ruin/unpowered)
"d" = (
-/turf/open/openspace/icemoon,
+/turf/open/transparent/openspace/icemoon,
/area/icemoon/surface/outdoors)
"e" = (
/obj/item/clothing/suit/hooded/explorer,
diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm
index f7aca9baf2..aec051b9d0 100644
--- a/_maps/map_files/Snaxi/Snaxi.dmm
+++ b/_maps/map_files/Snaxi/Snaxi.dmm
@@ -5169,7 +5169,7 @@
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
"bum" = (
-/turf/open/openspace/icemoon,
+/turf/open/transparent/openspace/icemoon,
/area/icemoon/surface/outdoors)
"buF" = (
/obj/machinery/light,
@@ -12388,7 +12388,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"esY" = (
-/turf/open/openspace/icemoon,
+/turf/open/transparent/openspace/icemoon,
/area/engine/atmos)
"ets" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -34891,7 +34891,7 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"rUd" = (
-/turf/open/openspace/icemoon,
+/turf/open/transparent/openspace/icemoon,
/area/science/mixing)
"rUl" = (
/obj/structure/cable{
@@ -36338,7 +36338,7 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"sTq" = (
-/turf/open/openspace/icemoon,
+/turf/open/transparent/openspace/icemoon,
/area/engine/atmospherics_engine)
"sTz" = (
/obj/effect/turf_decal/bot_white,
diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm
index 4614829679..5a18682129 100644
--- a/_maps/map_files/debug/multiz.dmm
+++ b/_maps/map_files/debug/multiz.dmm
@@ -102,7 +102,7 @@
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"au" = (
-/turf/open/openspace,
+/turf/open/transparent/openspace,
/area/space)
"av" = (
/obj/structure/stairs{
@@ -1407,7 +1407,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{
@@ -1542,7 +1542,7 @@
/turf/open/floor/plating,
/area/space)
"iu" = (
-/turf/open/openspace,
+/turf/open/transparent/openspace,
/area/hallway/secondary/service)
"iK" = (
/turf/open/floor/plasteel{
@@ -1593,7 +1593,7 @@
},
/area/hallway/secondary/service)
"nx" = (
-/turf/open/openspace,
+/turf/open/transparent/openspace,
/area/space/nearstation)
"nz" = (
/obj/machinery/light{
@@ -1633,7 +1633,7 @@
/turf/open/floor/plating,
/area/maintenance/department/bridge)
"qo" = (
-/turf/open/openspace,
+/turf/open/transparent/openspace,
/area/engine/storage)
"qR" = (
/obj/effect/turf_decal/stripes/white/line{
@@ -1646,7 +1646,7 @@
/obj/machinery/light{
dir = 8
},
-/turf/open/openspace,
+/turf/open/transparent/openspace,
/area/engine/storage)
"sh" = (
/turf/open/floor/plasteel{
@@ -1746,7 +1746,7 @@
/area/construction)
"Bk" = (
/obj/structure/grille,
-/turf/open/openspace,
+/turf/open/transparent/openspace,
/area/space/nearstation)
"Bm" = (
/obj/machinery/light{
@@ -1876,7 +1876,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 7e39981e23..e916a77d1d 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}, {"Up": 1, "Down": -1}, {"Down": -1}]
+ "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/_maps/snaxi.json b/_maps/snaxi.json
index cb1917b6f6..3fc8eba15d 100644
--- a/_maps/snaxi.json
+++ b/_maps/snaxi.json
@@ -33,7 +33,7 @@
"Linkage":null,
"Gravity":true,
"Ice Ruins Underground":true,
- "Baseturf":"/turf/open/openspace/icemoon"
+ "Baseturf":"/turf/open/transparent/openspace/icemoon"
},
{
"Down":-1,
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index d66521d945..55be13834d 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -17,7 +17,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))
@@ -44,6 +44,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isplatingturf(A) (istype(A, /turf/open/floor/plating))
+#define istransparentturf(A) (istype(A, /turf/open/transparent))
+
//Mobs
#define isliving(A) (istype(A, /mob/living))
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index 97addfa131..617004646a 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -113,7 +113,7 @@ SUBSYSTEM_DEF(mapping)
// needs to be whitelisted for underground too so place_below ruins work
seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored), ice_ruins_templates)
for (var/ice_z in ice_ruins)
- spawn_rivers(ice_z, 4, /turf/open/openspace/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers)
+ spawn_rivers(ice_z, 4, /turf/open/transparent/openspace/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers)
var/list/ice_ruins_underground = levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND)
if (ice_ruins_underground.len)
diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm
index d1a2a6f9f6..1358b2e296 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 (due to lack of sprites, currently only 1 and 2 make sense)
-// stairs require /turf/open/openspace as the tile above them to work
+// stairs require /turf/open/transparent/openspace as the tile above them to work
// 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
@@ -95,20 +95,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/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm
index 90fab29611..f03181ae3c 100644
--- a/code/game/turfs/openspace/openspace.dm
+++ b/code/game/turfs/openspace/openspace.dm
@@ -11,66 +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
-/turf/open/openspace/debug/update_multiz()
+/turf/open/transparent/openspace/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/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/transparent/openspace/can_have_cabling()
+ if(locate(/obj/structure/lattice/catwalk, src))
+ return TRUE
+ return FALSE
-/turf/open/openspace/Destroy()
- vis_contents.len = 0
- return ..()
-
-/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)
- 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)
@@ -78,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
@@ -98,14 +79,14 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
if(L)
if(R.use(1))
to_chat(user, "You construct a catwalk.")
- playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE)
new/obj/structure/lattice/catwalk(src)
else
to_chat(user, "You need two rods to build a catwalk!")
return
if(R.use(1))
to_chat(user, "You construct a lattice.")
- playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE)
ReplaceWithLattice()
else
to_chat(user, "You need one rod to build a lattice.")
@@ -118,7 +99,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
var/obj/item/stack/tile/plasteel/S = C
if(S.use(1))
qdel(L)
- playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE)
to_chat(user, "You build a floor.")
PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
else
@@ -126,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
@@ -139,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.")
@@ -147,12 +128,12 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
return TRUE
return FALSE
-/turf/open/openspace/icemoon
+/turf/open/transparent/openspace/icemoon
name = "ice chasm"
- baseturfs = /turf/open/openspace/icemoon
- can_cover_up = FALSE
- can_build_on = FALSE
+ baseturfs = /turf/open/transparent/openspace/icemoon
+ can_cover_up = TRUE
+ can_build_on = TRUE
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
-/turf/open/openspace/icemoon/can_zFall(atom/movable/A, levels = 1, turf/target)
+/turf/open/transparent/openspace/icemoon/can_zFall(atom/moveable/A, levels = 1, turf/target)
return TRUE
diff --git a/code/game/turfs/openspace/transparent.dm b/code/game/turfs/openspace/transparent.dm
new file mode 100644
index 0000000000..78ce820257
--- /dev/null
+++ b/code/game/turfs/openspace/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'
\ No newline at end of file
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 4784fb3d32..7041220ddd 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1296,6 +1296,7 @@
#include "code\game\turfs\open.dm"
#include "code\game\turfs\turf.dm"
#include "code\game\turfs\openspace\openspace.dm"
+#include "code\game\turfs\openspace\transparent.dm"
#include "code\game\turfs\simulated\chasm.dm"
#include "code\game\turfs\simulated\dirtystation.dm"
#include "code\game\turfs\simulated\floor.dm"