From 6809133d755e6ec59097d251b778954b4f916026 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 29 May 2020 14:00:43 -0400 Subject: [PATCH 1/2] Port Eris' extensive floor blending system --- code/__defines/turfs.dm | 7 + code/_helpers/turfs.dm | 8 + code/game/objects/items/stacks/stack.dm | 5 +- code/game/objects/structures/window.dm | 5 + code/game/turfs/flooring/flooring.dm | 69 ++++++++ code/game/turfs/simulated/floor.dm | 12 +- code/game/turfs/simulated/floor_attackby.dm | 5 +- code/game/turfs/simulated/floor_icon.dm | 166 +++++++++++++++++- code/game/turfs/simulated/floor_types_eris.dm | 52 ++++-- 9 files changed, 300 insertions(+), 29 deletions(-) diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm index bf4c3de6fe..64593f6e11 100644 --- a/code/__defines/turfs.dm +++ b/code/__defines/turfs.dm @@ -9,5 +9,12 @@ #define TURF_IS_FRAGILE 256 #define TURF_ACID_IMMUNE 512 +//Used for floor/wall smoothing +#define SMOOTH_NONE 0 //Smooth only with itself +#define SMOOTH_ALL 1 //Smooth with all of type +#define SMOOTH_WHITELIST 2 //Smooth with a whitelist of subtypes +#define SMOOTH_BLACKLIST 3 //Smooth with all but a blacklist of subtypes +#define SMOOTH_GREYLIST 4 // Use a whitelist and a blacklist at the same time. atom smoothing only + #define isCardinal(x) (x == NORTH || x == SOUTH || x == EAST || x == WEST) #define isDiagonal(x) (x == NORTHEAST || x == SOUTHEAST || x == NORTHWEST || x == SOUTHWEST) \ No newline at end of file diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm index a9cede52de..5a0a519743 100644 --- a/code/_helpers/turfs.dm +++ b/code/_helpers/turfs.dm @@ -169,3 +169,11 @@ T.ChangeTurf(get_base_turf_by_area(T)) return TRUE + +//Used for border objects. This returns true if this atom is on the border between the two specified turfs +//This assumes that the atom is located inside the target turf +/atom/proc/is_between_turfs(var/turf/origin, var/turf/target) + if (flags & ON_BORDER) + var/testdir = get_dir(target, origin) + return (dir & testdir) + return TRUE diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index d8237b30a5..ad187265c2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -364,10 +364,7 @@ return ..() /obj/item/stack/proc/combine_in_loc() - for(var/obj/item/stack/S in loc) - if(S == src) - continue - S.transfer_to(src) // them to us, so if we're being pulled, we can keep being pulled + return //STUBBED for now, as it seems to randomly delete stacks /obj/item/stack/dropped(atom/old_loc) . = ..() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 4a5db1e7a9..be79fe7b23 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -424,6 +424,11 @@ /obj/structure/window/proc/is_fulltile() return fulltile +/obj/structure/window/is_between_turfs(var/turf/origin, var/turf/target) + if(fulltile) + return TRUE + return ..() + //This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc! /obj/structure/window/proc/update_nearby_icons() update_icon() diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index d785a8f2d4..f26e4a3a2b 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -48,6 +48,75 @@ var/list/flooring_types var/is_plating = FALSE var/list/flooring_cache = list() // Cached overlays for our edges and corners and junk + //Plating types, can be overridden + var/plating_type = null + + //Resistance is subtracted from all incoming damage + //var/resistance = RESISTANCE_FRAGILE + + //Damage the floor can take before being destroyed + //var/health = 50 + + //var/removal_time = WORKTIME_FAST * 0.75 + + //Flooring Icon vars + var/smooth_nothing = FALSE //True/false only, optimisation + //If true, all smoothing logic is entirely skipped + + //The rest of these x_smooth vars use one of the following options + //SMOOTH_NONE: Ignore all of type + //SMOOTH_ALL: Smooth with all of type + //SMOOTH_WHITELIST: Ignore all except types on this list + //SMOOTH_BLACKLIST: Smooth with all except types on this list + //SMOOTH_GREYLIST: Objects only: Use both lists + + //How we smooth with other flooring + var/floor_smooth = SMOOTH_NONE + var/list/flooring_whitelist = list() //Smooth with nothing except the contents of this list + var/list/flooring_blacklist = list() //Smooth with everything except the contents of this list + + //How we smooth with walls + var/wall_smooth = SMOOTH_NONE + //There are no lists for walls at this time + + //How we smooth with space and openspace tiles + var/space_smooth = SMOOTH_NONE + //There are no lists for spaces + + /* + How we smooth with movable atoms + These are checked after the above turf based smoothing has been handled + SMOOTH_ALL or SMOOTH_NONE are treated the same here. Both of those will just ignore atoms + Using the white/blacklists will override what the turfs concluded, to force or deny smoothing + + Movable atom lists are much more complex, to account for many possibilities + Each entry in a list, is itself a list consisting of three items: + Type: The typepath to allow/deny. This will be checked against istype, so all subtypes are included + Priority: Used when items in two opposite lists conflict. The one with the highest priority wins out. + Vars: An associative list of variables (varnames in text) and desired values + Code will look for the desired vars on the target item and only call it a match if all desired values match + This can be used, for example, to check that objects are dense and anchored + there are no safety checks on this, it will probably throw runtimes if you make typos + + Common example: + Don't smooth with dense anchored objects except airlocks + + smooth_movable_atom = SMOOTH_GREYLIST + movable_atom_blacklist = list( + list(/obj, list("density" = TRUE, "anchored" = TRUE), 1) + ) + movable_atom_whitelist = list( + list(/obj/machinery/door/airlock, list(), 2) + ) + + */ + var/smooth_movable_atom = SMOOTH_NONE + var/list/movable_atom_whitelist = list() + var/list/movable_atom_blacklist = list() + +/decl/flooring/proc/get_plating_type(var/turf/T) + return plating_type + /decl/flooring/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/layer = ABOVE_TURF_LAYER) if(!flooring_cache[cache_key]) var/image/I = image(icon = icon, icon_state = icon_base, dir = icon_dir) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 238bbf085a..b5d9cf751b 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -61,8 +61,8 @@ old_decals = current_decals /turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring, var/initializing) - make_plating(defer_icon_update = 1) - if(!flooring && !initializing) // Plating -> Flooring + //make_plating(defer_icon_update = 1) + if(is_plating() && !initializing) // Plating -> Flooring swap_decals() flooring = newflooring footstep_sounds = newflooring.footstep_sounds @@ -81,11 +81,15 @@ icon_state = base_icon_state footstep_sounds = base_footstep_sounds - if(flooring) // Flooring -> Plating + if(!is_plating()) // Flooring -> Plating swap_decals() if(flooring.build_type && place_product) new flooring.build_type(src) - flooring = null + var/newtype = flooring.get_plating_type() + if(newtype) // Has a custom plating type to become + set_flooring(get_flooring_data(newtype)) + else + flooring = null set_light(0) broken = null diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 624cad36cd..df13c2162c 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -53,7 +53,7 @@ break return - if(flooring && !flooring.is_plating) + if(!is_plating()) if(istype(C, /obj/item/weapon)) try_deconstruct_tile(C, user) return @@ -64,7 +64,6 @@ try_replace_tile(C, user) return else - if(istype(C, /obj/item/stack/cable_coil)) if(broken || burnt) to_chat(user, "This section is too damaged to support anything. Use a welder to fix the damage.") @@ -94,7 +93,7 @@ // Stay still and focus... if(use_flooring.build_time && !do_after(user, use_flooring.build_time)) return - if(flooring || !S || !user || !use_flooring) + if(!is_plating() || !S || !user || !use_flooring) return if(S.use(use_flooring.build_cost)) set_flooring(use_flooring) diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index 67ba62e104..e82edc294d 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -36,7 +36,7 @@ var/image/no_ceiling_image = null if(flooring.flags & TURF_HAS_EDGES) for(var/step_dir in cardinal) var/turf/simulated/floor/T = get_step(src, step_dir) - if(!test_link(T)) + if(!flooring.test_link(src, T)) has_border |= step_dir add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)) @@ -55,19 +55,19 @@ var/image/no_ceiling_image = null //Like above but checking for NO similar bits rather than both similar bits. if((has_border & NORTHEAST) == 0) //Are connected NORTH and EAST var/turf/simulated/floor/T = get_step(src, NORTHEAST) - if(!test_link(T)) //But not NORTHEAST + if(!flooring.test_link(src, T)) //But not NORTHEAST add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST)) if((has_border & NORTHWEST) == 0) var/turf/simulated/floor/T = get_step(src, NORTHWEST) - if(!test_link(T)) + if(!flooring.test_link(src, T)) add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST)) if((has_border & SOUTHEAST) == 0) var/turf/simulated/floor/T = get_step(src, SOUTHEAST) - if(!test_link(T)) + if(!flooring.test_link(src, T)) add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST)) if((has_border & SOUTHWEST) == 0) var/turf/simulated/floor/T = get_step(src, SOUTHWEST) - if(!test_link(T)) + if(!flooring.test_link(src, T)) add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)) // Re-apply floor decals @@ -129,6 +129,158 @@ var/image/no_ceiling_image = null return S return null +//Tests whether this flooring will smooth with the specified turf +//You can override this if you want a flooring to have super special snowflake smoothing behaviour +/decl/flooring/proc/test_link(var/turf/origin, var/turf/T, var/countercheck = FALSE) + + var/is_linked = FALSE + if (countercheck) + //If this is a countercheck, we skip all of the above, start off with true, and go straight to the atom lists + is_linked = TRUE + else if(T) + + //If it's a wall, use the wall_smooth setting + if(istype(T, /turf/simulated/wall)) + if(wall_smooth == SMOOTH_ALL) + is_linked = TRUE + + //If it's space or openspace, use the space_smooth setting + else if(isspace(T) || isopenspace(T)) + if(space_smooth == SMOOTH_ALL) + is_linked = TRUE + + //If we get here then its a normal floor + else if (istype(T, /turf/simulated/floor)) + var/turf/simulated/floor/t = T + //If the floor is the same as us,then we're linked, + if (t.flooring?.type == type) + is_linked = TRUE + /* + But there's a caveat. To make atom black/whitelists work correctly, we also need to check that + they smooth with us. Ill call this counterchecking for simplicity. + This is needed to make both turfs have the correct borders + + To prevent infinite loops we have a countercheck var, which we'll set true + */ + + if (smooth_movable_atom != SMOOTH_NONE) + //We do the countercheck, passing countercheck as true + is_linked = test_link(T, origin, countercheck = TRUE) + + else if (floor_smooth == SMOOTH_ALL) + is_linked = TRUE + + else if (floor_smooth != SMOOTH_NONE) + //If we get here it must be using a whitelist or blacklist + if (floor_smooth == SMOOTH_WHITELIST) + for (var/v in flooring_whitelist) + if (istype(t.flooring, v)) + //Found a match on the list + is_linked = TRUE + break + else if(floor_smooth == SMOOTH_BLACKLIST) + is_linked = TRUE //Default to true for the blacklist, then make it false if a match comes up + for (var/v in flooring_whitelist) + if (istype(t.flooring, v)) + //Found a match on the list + is_linked = FALSE + break + + //Alright now we have a preliminary answer about smoothing, however that answer may change with the following + //Atom lists! + var/best_priority = -1 + //A white or blacklist entry will only override smoothing if its priority is higher than this + //And then this value becomes its priority + if (smooth_movable_atom != SMOOTH_NONE) + if (smooth_movable_atom == SMOOTH_WHITELIST || smooth_movable_atom == SMOOTH_GREYLIST) + for (var/list/v in movable_atom_whitelist) + var/d_type = v[1] + var/list/d_vars = v[2] + var/d_priority = v[3] + //Priority is the quickest thing to check first + if (d_priority <= best_priority) + continue + + //Ok, now we start testing all the atoms in the target turf + for (var/a in T) //No implicit typecasting here, faster + + if (istype(a, d_type)) + //It's the right type, so we're sure it will have the vars we want. + + var/atom/movable/AM = a + //Typecast it to a movable atom + //Lets make sure its in the way before we consider it + if (!AM.is_between_turfs(origin, T)) + continue + + //From here on out, we do dangerous stuff that may runtime if the coder screwed up + + + var/match = TRUE + for (var/d_var in d_vars) + //For each variable we want to check + if (AM.vars[d_var] != d_vars[d_var]) + //We get a var of the same name from the atom's vars list. + //And check if it equals our desired value + match = FALSE + break //If any var doesn't match the desired value, then this atom is not a match, move on + + + if (match) + //If we've successfully found an atom which matches a list entry + best_priority = d_priority //This one is king until a higher priority overrides it + + //And this is a whitelist, so this match forces is_linked to true + is_linked = TRUE + + + if (smooth_movable_atom == SMOOTH_BLACKLIST || smooth_movable_atom == SMOOTH_GREYLIST) + //All of this blacklist code is copypasted from above, with only minor name changes + for (var/list/v in movable_atom_blacklist) + var/d_type = v[1] + var/list/d_vars = v[2] + var/d_priority = v[3] + //Priority is the quickest thing to check first + if (d_priority <= best_priority) + continue + + //Ok, now we start testing all the atoms in the target turf + for (var/a in T) //No implicit typecasting here, faster + + if (istype(a, d_type)) + //It's the right type, so we're sure it will have the vars we want. + + var/atom/movable/AM = a + //Typecast it to a movable atom + //Lets make sure its in the way before we consider it + if (!AM.is_between_turfs(origin, T)) + continue + + //From here on out, we do dangerous stuff that may runtime if the coder screwed up + + var/match = TRUE + for (var/d_var in d_vars) + //For each variable we want to check + if (AM.vars[d_var] != d_vars[d_var]) + //We get a var of the same name from the atom's vars list. + //And check if it equals our desired value + match = FALSE + break //If any var doesn't match the desired value, then this atom is not a match, move on + + + if (match) + //If we've successfully found an atom which matches a list entry + best_priority = d_priority //This one is king until a higher priority overrides it + + //And this is a blacklist, so this match forces is_linked to false + is_linked = FALSE + + return is_linked + +/turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0) + if(!flooring_cache[cache_key]) + var/image/I = image(icon = flooring.icon, icon_state = icon_base, dir = icon_dir) + I.layer = layer + flooring_cache[cache_key] = I + return flooring_cache[cache_key] -/turf/simulated/floor/proc/test_link(var/turf/simulated/floor/them) - return (istype(them) && them.flooring?.name == src.flooring.name) diff --git a/code/game/turfs/simulated/floor_types_eris.dm b/code/game/turfs/simulated/floor_types_eris.dm index 5c1d3cba3e..3a4fdfaf76 100644 --- a/code/game/turfs/simulated/floor_types_eris.dm +++ b/code/game/turfs/simulated/floor_types_eris.dm @@ -14,13 +14,28 @@ build_type = /obj/item/stack/tile/floor/eris can_paint = 1 + plating_type = /decl/flooring/reinforced/plating/under + + floor_smooth = SMOOTH_WHITELIST + flooring_whitelist = list( + /decl/flooring/reinforced/plating/under + ) + + smooth_movable_atom = SMOOTH_GREYLIST + movable_atom_whitelist = list( + list(/obj/machinery/door/airlock, list(), 1) // Smooth Eris floors with airlocks + ) + movable_atom_blacklist = list( + list(/obj/machinery/door/airlock/maintenance, list(), 2), // But not maintenance airlocks + list(/obj/structure/window, list("anchored" = TRUE, "fulltile" = TRUE), 2) // Don't blend under full windows + ) + /decl/flooring/tiling/eris/steel name = "steel floor" icon_base = "tiles" icon = 'icons/turf/flooring/eris/tiles_steel.dmi' build_type = /obj/item/stack/tile/floor/eris/steel - //footstep_sound = "floor" - + /decl/flooring/tiling/eris/steel/panels icon_base = "panels" build_type = /obj/item/stack/tile/floor/eris/steel/panels @@ -86,16 +101,22 @@ name = "flat bar floor" icon_base = "bar_flat" build_type = /obj/item/stack/tile/floor/eris/steel/bar_flat + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/steel/bar_dance name = "dancefloor" icon_base = "bar_dance" build_type = /obj/item/stack/tile/floor/eris/steel/bar_dance + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/steel/bar_light name = "lit bar floor" icon_base = "bar_light" build_type = /obj/item/stack/tile/floor/eris/steel/bar_light + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/white name = "white floor" @@ -169,7 +190,6 @@ icon_base = "tiles" icon = 'icons/turf/flooring/eris/tiles_dark.dmi' build_type = /obj/item/stack/tile/floor/eris/dark - //footstep_sound = "floor" /decl/flooring/tiling/eris/dark/panels icon_base = "panels" @@ -237,36 +257,40 @@ icon_base = "cafe" icon = 'icons/turf/flooring/eris/tiles.dmi' build_type = /obj/item/stack/tile/floor/eris/cafe - //footstep_sound = "floor" + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/techmaint name = "techmaint floor" icon_base = "techmaint" icon = 'icons/turf/flooring/eris/tiles_maint.dmi' build_type = /obj/item/stack/tile/floor/eris/techmaint - //footstep_sound = "floor" + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/techmaint_perforated name = "techmaint floor" icon_base = "techmaint_perforated" icon = 'icons/turf/flooring/eris/tiles_maint.dmi' build_type = /obj/item/stack/tile/floor/eris/techmaint/perforated - //footstep_sound = "floor" + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/techmaint_panels name = "techmaint floor" icon_base = "techmaint_panels" icon = 'icons/turf/flooring/eris/tiles_maint.dmi' build_type = /obj/item/stack/tile/floor/eris/techmaint/panels - //footstep_sound = "floor" + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /decl/flooring/tiling/eris/techmaint_cargo name = "techmaint floor" icon_base = "techmaint_cargo" icon = 'icons/turf/flooring/eris/tiles_maint.dmi' build_type = /obj/item/stack/tile/floor/eris/techmaint/cargo - //footstep_sound = "floor" - + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE /////////////////////// /// TILE OBJS /////// @@ -875,8 +899,8 @@ is_plating = TRUE //build_type = /obj/item/stack/material/steel - /* Eris features we lack on flooring decls plating_type = /decl/flooring/reinforced/plating/under + /* footstep_sound = "plating" space_smooth = FALSE removal_time = 150 @@ -910,10 +934,16 @@ has_base_range = 0 is_plating = TRUE + floor_smooth = SMOOTH_WHITELIST + flooring_whitelist = list( + /decl/flooring/tiling/eris + ) + + plating_type = null + //build_type = /obj/item/stack/material/underplating /* Eris features we lack on flooring decls - plating_type = /decl/flooring/reinforced/plating/hull removal_time = 250 health = 200 resistance = RESISTANCE_ARMOURED From a7ddb2c0ef4b60d6759fefd99de70fe4c0c3c47e Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 29 May 2020 14:59:16 -0400 Subject: [PATCH 2/2] Update talon for more floor merging --- maps/tether/submaps/offmap/talon1.dmm | 122 +++++++++++++------------- maps/tether/submaps/offmap/talon2.dmm | 26 +++--- 2 files changed, 75 insertions(+), 73 deletions(-) diff --git a/maps/tether/submaps/offmap/talon1.dmm b/maps/tether/submaps/offmap/talon1.dmm index b98faa2fa0..6d3d9c431c 100644 --- a/maps/tether/submaps/offmap/talon1.dmm +++ b/maps/tether/submaps/offmap/talon1.dmm @@ -213,7 +213,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "bT" = ( /obj/structure/grille, @@ -266,7 +266,7 @@ pixel_y = 32 }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/bridge_hallway) "cl" = ( /turf/simulated/wall, @@ -297,7 +297,7 @@ /obj/machinery/door/airlock/glass, /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/bridge_hallway) "cC" = ( /obj/structure/disposalpipe/segment{ @@ -363,7 +363,7 @@ /obj/machinery/door/airlock/maintenance/engi{ req_one_access = list(301) }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/port_solar) "cQ" = ( /obj/structure/table/rack/shelf/steel, @@ -398,7 +398,7 @@ /obj/machinery/door/airlock/maintenance/engi{ req_one_access = list(301) }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/starboard_solar) "da" = ( /obj/structure/table/standard, @@ -453,7 +453,7 @@ /obj/machinery/door/airlock/glass_security{ req_one_access = list(301) }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) "dL" = ( /turf/simulated/wall, @@ -561,7 +561,7 @@ /obj/machinery/door/window/brigdoor/eastleft{ req_access = list(301) }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) "eq" = ( /obj/structure/cable/green{ @@ -617,7 +617,7 @@ dir = 4; icon_state = "pipe-s" }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) "ey" = ( /obj/structure/grille, @@ -637,7 +637,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/emblem/talon_big/center, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "eI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -648,14 +648,14 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/bridge_hallway) "eS" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ id = "talon_brigblast1" }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) "eV" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -776,7 +776,7 @@ /area/talon/maintenance/deckone_port) "gc" = ( /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/workroom) "gg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ @@ -813,7 +813,7 @@ dir = 4; icon_state = "pipe-s" }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/workroom) "gs" = ( /obj/machinery/door/airlock/maintenance/common, @@ -963,7 +963,7 @@ /obj/machinery/door/airlock/maintenance/engi{ req_one_access = list(301) }, -/turf/simulated/floor/plating/eris/under, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/port_solar) "in" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -978,7 +978,7 @@ pixel_x = 0 }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/bridge_hallway) "iq" = ( /obj/machinery/light/small{ @@ -1149,7 +1149,7 @@ dir = 8; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "jE" = ( /obj/effect/floor_decal/industrial/outline/yellow, @@ -1567,7 +1567,7 @@ }, /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/starboard_eng) "mF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ @@ -1661,7 +1661,7 @@ dir = 5; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "nv" = ( /obj/machinery/door/blast/regular/open{ @@ -1790,7 +1790,7 @@ dir = 4; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "pc" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -2177,7 +2177,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "tg" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, @@ -2362,7 +2362,7 @@ icon_state = "2-4" }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/bridge_hallway) "uL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -2411,7 +2411,7 @@ req_access = list(301) }, /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/medical) "vb" = ( /obj/structure/bed/chair/bay/chair{ @@ -2453,7 +2453,7 @@ pixel_y = -24 }, /obj/effect/floor_decal/emblem/talon_big, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "vw" = ( /turf/simulated/floor/tiled/eris/steel, @@ -2976,7 +2976,7 @@ /obj/machinery/door/airlock/maintenance/engi{ req_one_access = list(301) }, -/turf/simulated/floor/plating/eris/under, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/starboard_solar) "AI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux, @@ -3045,7 +3045,7 @@ /obj/machinery/door/airlock/glass_medical{ req_one_access = list(301) }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/medical) "Bq" = ( /obj/structure/cable/green{ @@ -3319,7 +3319,7 @@ req_one_access = list(301) }, /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/port_eng) "Ea" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3335,7 +3335,7 @@ req_one_access = list(301) }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/eris/white/gray_platform, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/bridge_hallway) "Ec" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -3424,6 +3424,7 @@ /obj/structure/sign/department/bridge{ pixel_y = 31 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) "ES" = ( @@ -3483,7 +3484,7 @@ dir = 4; icon_state = "pipe-s" }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/medical) "FA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3622,7 +3623,7 @@ /area/talon/deckone/starboard_eng) "GJ" = ( /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/medical) "GK" = ( /obj/structure/table/standard, @@ -3706,15 +3707,13 @@ /area/talon/deckone/brig) "HQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) "HW" = ( @@ -3766,7 +3765,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated/dark, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating/eris/under, /area/talon/deckone/bridge_hallway) "Ij" = ( @@ -3810,7 +3809,7 @@ dir = 1; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "II" = ( /obj/structure/cable/green{ @@ -4011,7 +4010,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "JY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux, @@ -4111,7 +4110,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "KI" = ( /obj/structure/cable/green{ @@ -4153,6 +4152,7 @@ /area/space) "KP" = ( /obj/structure/closet/emcloset, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) "La" = ( @@ -4216,7 +4216,7 @@ /obj/machinery/door/window/brigdoor/eastleft{ req_access = list(301) }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) "Lz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -4490,12 +4490,6 @@ }, /turf/simulated/floor/plating/eris/under, /area/shuttle/talonboat) -"Np" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/eris/white/gray_platform, -/area/talon/deckone/bridge_hallway) "Ns" = ( /obj/structure/cable/green, /obj/machinery/power/apc/talon{ @@ -4580,7 +4574,7 @@ req_one_access = list(301) }, /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/port_eng_store) "Of" = ( /obj/structure/barricade, @@ -4624,7 +4618,6 @@ /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "OQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, @@ -4634,6 +4627,9 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) "OS" = ( @@ -4682,7 +4678,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "PF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ @@ -4767,7 +4763,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "QC" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -4920,7 +4916,7 @@ dir = 9; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "SE" = ( /obj/machinery/recharger/wallcharger{ @@ -4954,7 +4950,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/central_hallway) "SO" = ( /obj/machinery/light/small, @@ -5026,7 +5022,7 @@ req_one_access = list(301) }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/eris/white/gray_platform, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/bridge) "Ts" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -5208,7 +5204,7 @@ dir = 6; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "UG" = ( /obj/machinery/door/airlock/maintenance/medical{ @@ -5265,7 +5261,7 @@ /obj/machinery/door/blast/regular{ id = "talon_brigblast2" }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) "UU" = ( /obj/machinery/power/pointdefense{ @@ -5323,7 +5319,7 @@ dir = 10; icon_state = "talon_big" }, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "Vf" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -5333,8 +5329,8 @@ /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) "Vj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) @@ -5648,7 +5644,7 @@ req_one_access = list(301) }, /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/starboard_eng_store) "Ym" = ( /obj/machinery/light/small{ @@ -5746,6 +5742,12 @@ }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/starboard_solar) +"Zi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/talon/deckone/bridge_hallway) "Zj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -15839,9 +15841,9 @@ cC zy ac ER -iP +Zi UV -Np +iP JP bQ bV @@ -18416,7 +18418,7 @@ rm Ru Ru Ru -we +Ru Ru Ru Ru @@ -18558,7 +18560,7 @@ Ru Ru Ru Ru -Ru +we Ru Ru Ru diff --git a/maps/tether/submaps/offmap/talon2.dmm b/maps/tether/submaps/offmap/talon2.dmm index b4331dabbc..76bddbccbb 100644 --- a/maps/tether/submaps/offmap/talon2.dmm +++ b/maps/tether/submaps/offmap/talon2.dmm @@ -587,7 +587,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "cE" = ( /obj/structure/railing, @@ -1295,7 +1295,7 @@ name = "Talon Secure Airlock"; req_one_access = list(301) }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/cap_room) "fZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -1848,7 +1848,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "mh" = ( /obj/structure/disposalpipe/segment, @@ -2092,7 +2092,7 @@ dir = 2 }, /obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/bar) "oX" = ( /obj/structure/cable/heavyduty{ @@ -2177,7 +2177,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "qb" = ( /obj/machinery/atmospherics/pipe/simple/visible/supply{ @@ -2521,13 +2521,13 @@ "uA" = ( /obj/machinery/door/firedoor/glass/talon, /obj/machinery/door/airlock, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "uJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "uL" = ( /obj/structure/cable/green{ @@ -3652,7 +3652,7 @@ name = "Talon Secure Airlock"; req_one_access = list(301) }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/cap_room) "Lo" = ( /obj/structure/catwalk, @@ -3760,7 +3760,7 @@ dir = 4; icon_state = "pipe-s" }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/bar) "Np" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -4109,7 +4109,7 @@ /obj/machinery/door/firedoor/glass{ dir = 2 }, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "Sb" = ( /obj/machinery/power/pointdefense{ @@ -4356,7 +4356,7 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "Vu" = ( /obj/structure/grille, @@ -4392,7 +4392,7 @@ /obj/machinery/door/airlock/glass, /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/eris/steel, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "VV" = ( /obj/structure/disposalpipe/segment{ @@ -4516,7 +4516,7 @@ "XU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/eris/dark/monofloor, +/turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/central_hallway) "XY" = ( /obj/structure/cable/green{