diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm index a8e3951a3e..c2d33e0726 100644 --- a/code/__defines/_planes+layers.dm +++ b/code/__defines/_planes+layers.dm @@ -67,6 +67,7 @@ What is the naming convention for planes or layers? #define UNDERWATER_LAYER 2.5 // Anything on this layer will render under the water layer. #define WATER_LAYER 3.0 // Layer for water overlays. #define ABOVE_TURF_LAYER 3.1 // Snow and wallmounted/floormounted equipment + #define TURF_DECAL_LAYER 3.2 // Mapped in floor decals, not automatic edges/corners #define DECAL_PLANE -44 // Permanent decals #define DIRTY_PLANE -43 // Nonpermanent decals #define BLOOD_PLANE -42 // Blood is really dirty, but we can do special stuff if we separate it 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/structures/window.dm b/code/game/objects/structures/window.dm index 79a6bf6e21..762608d5c0 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -420,6 +420,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 40a8dd7fe4..cc93478e86 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -45,6 +45,84 @@ var/list/flooring_types var/can_paint var/list/footstep_sounds = list() // key=species name, value = list of sounds, // For instance, footstep_sounds = list("key" = list(sound.ogg)) + 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) + I.layer = layer + flooring_cache[cache_key] = I + return flooring_cache[cache_key] /decl/flooring/grass name = "grass" @@ -53,7 +131,7 @@ var/list/flooring_types icon_base = "grass" has_base_range = 1 damage_temperature = T0C+80 - flags = TURF_HAS_EDGES | TURF_REMOVE_SHOVEL + flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_SHOVEL build_type = /obj/item/stack/tile/grass footstep_sounds = list("human" = list( 'sound/effects/footstep/grass1.ogg', diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 81aa348891..1ddfa79f82 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -29,7 +29,7 @@ var/list/floor_decals = list() var/image/I = floor_decals[cache_key] if(!I) I = image(icon = icon, icon_state = icon_state, dir = dir) - I.layer = T.layer + I.layer = TURF_DECAL_LAYER I.color = color I.alpha = alpha floor_decals[cache_key] = I diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index d04e52e62b..e18cf118bd 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -33,7 +33,7 @@ var/lava = 0 /turf/simulated/floor/is_plating() - return !flooring + return (!flooring || flooring.is_plating) /turf/simulated/floor/Initialize(mapload, floortype) . = ..() @@ -59,8 +59,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 @@ -79,11 +79,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 @@ -95,8 +99,9 @@ update_icon(1) /turf/simulated/floor/levelupdate() + var/floored_over = !is_plating() for(var/obj/O in src) - O.hide(O.hides_under_flooring() && src.flooring) + O.hide(O.hides_under_flooring() && floored_over) /turf/simulated/floor/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) switch(passed_mode) diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 70bc2646a2..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) + 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 5e332ca760..e82edc294d 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -36,39 +36,39 @@ 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(get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)) //Note: Doesn't actually check northeast, this is bitmath to check if we're edge'd (aka not smoothed) to NORTH and EAST //North = 0001, East = 0100, Northeast = 0101, so (North|East) == Northeast, therefore (North|East)&Northeast == Northeast if((has_border & NORTHEAST) == NORTHEAST) - add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST)) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST)) if((has_border & NORTHWEST) == NORTHWEST) - add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST)) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST)) if((has_border & SOUTHEAST) == SOUTHEAST) - add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST)) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST)) if((has_border & SOUTHWEST) == SOUTHWEST) - add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST)) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST)) if(flooring.flags & TURF_HAS_CORNERS) //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 - add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", 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)) - add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST)) + 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)) - add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST)) + 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)) - add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)) + 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 if(LAZYLEN(decals)) @@ -79,9 +79,9 @@ var/image/no_ceiling_image = null icon_state = "dmg[rand(1,4)]" else if(flooring) if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK)) - add_overlay(get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]")) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]")) if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) - add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]")) + add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]")) if(update_neighbors) for(var/turf/simulated/floor/F in range(src, 1)) @@ -129,9 +129,153 @@ 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) -/turf/simulated/floor/proc/test_link(var/turf/simulated/floor/them) - return (istype(them) && them.flooring?.name == src.flooring.name) + 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]) diff --git a/code/game/turfs/simulated/floor_types_eris.dm b/code/game/turfs/simulated/floor_types_eris.dm new file mode 100644 index 0000000000..00b66d0d8a --- /dev/null +++ b/code/game/turfs/simulated/floor_types_eris.dm @@ -0,0 +1,1010 @@ + +//////////////////////////// +/// ERIS FLOOR DECLS /////// +//////////////////////////// + +/decl/flooring/tiling/eris + name = "floor" + desc = "Scuffed from the passage of countless greyshirts." + icon = 'icons/turf/flooring/eris/tiles.dmi' + icon_base = "tiles" + has_damage_range = 2 + damage_temperature = T0C+1400 + flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BREAK + 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 + +/decl/flooring/tiling/eris/steel/panels + icon_base = "panels" + build_type = /obj/item/stack/tile/floor/eris/steel/panels + +/decl/flooring/tiling/eris/steel/techfloor + icon_base = "techfloor" + build_type = /obj/item/stack/tile/floor/eris/steel/techfloor + +/decl/flooring/tiling/eris/steel/techfloor_grid + icon_base = "techfloor_grid" + build_type = /obj/item/stack/tile/floor/eris/steel/techfloor_grid + +/decl/flooring/tiling/eris/steel/brown_perforated + icon_base = "brown_perforated" + build_type = /obj/item/stack/tile/floor/eris/steel/brown_perforated + +/decl/flooring/tiling/eris/steel/gray_perforated + icon_base = "gray_perforated" + build_type = /obj/item/stack/tile/floor/eris/steel/gray_perforated + +/decl/flooring/tiling/eris/steel/cargo + icon_base = "cargo" + build_type = /obj/item/stack/tile/floor/eris/steel/cargo + +/decl/flooring/tiling/eris/steel/brown_platform + icon_base = "brown_platform" + build_type = /obj/item/stack/tile/floor/eris/steel/brown_platform + +/decl/flooring/tiling/eris/steel/gray_platform + icon_base = "gray_platform" + build_type = /obj/item/stack/tile/floor/eris/steel/gray_platform + +/decl/flooring/tiling/eris/steel/danger + icon_base = "danger" + build_type = /obj/item/stack/tile/floor/eris/steel/danger + +/decl/flooring/tiling/eris/steel/golden + icon_base = "golden" + build_type = /obj/item/stack/tile/floor/eris/steel/golden + +/decl/flooring/tiling/eris/steel/bluecorner + icon_base = "bluecorner" + build_type = /obj/item/stack/tile/floor/eris/steel/bluecorner + +/decl/flooring/tiling/eris/steel/orangecorner + icon_base = "orangecorner" + build_type = /obj/item/stack/tile/floor/eris/steel/orangecorner + +/decl/flooring/tiling/eris/steel/cyancorner + icon_base = "cyancorner" + build_type = /obj/item/stack/tile/floor/eris/steel/cyancorner + +/decl/flooring/tiling/eris/steel/violetcorener + icon_base = "violetcorener" + build_type = /obj/item/stack/tile/floor/eris/steel/violetcorener + +/decl/flooring/tiling/eris/steel/monofloor + icon_base = "monofloor" + build_type = /obj/item/stack/tile/floor/eris/steel/monofloor + has_base_range = 15 + +/decl/flooring/tiling/eris/steel/bar_flat + 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" + icon_base = "tiles" + icon = 'icons/turf/flooring/eris/tiles_white.dmi' + build_type = /obj/item/stack/tile/floor/eris/white + +/decl/flooring/tiling/eris/white/panels + icon_base = "panels" + build_type = /obj/item/stack/tile/floor/eris/white/panels + +/decl/flooring/tiling/eris/white/techfloor + icon_base = "techfloor" + build_type = /obj/item/stack/tile/floor/eris/white/techfloor + +/decl/flooring/tiling/eris/white/techfloor_grid + icon_base = "techfloor_grid" + build_type = /obj/item/stack/tile/floor/eris/white/techfloor_grid + +/decl/flooring/tiling/eris/white/brown_perforated + icon_base = "brown_perforated" + build_type = /obj/item/stack/tile/floor/eris/white/brown_perforated + +/decl/flooring/tiling/eris/white/gray_perforated + icon_base = "gray_perforated" + build_type = /obj/item/stack/tile/floor/eris/white/gray_perforated + +/decl/flooring/tiling/eris/white/cargo + icon_base = "cargo" + build_type = /obj/item/stack/tile/floor/eris/white/cargo + +/decl/flooring/tiling/eris/white/brown_platform + icon_base = "brown_platform" + build_type = /obj/item/stack/tile/floor/eris/white/brown_platform + +/decl/flooring/tiling/eris/white/gray_platform + icon_base = "gray_platform" + build_type = /obj/item/stack/tile/floor/eris/white/gray_platform + +/decl/flooring/tiling/eris/white/danger + icon_base = "danger" + build_type = /obj/item/stack/tile/floor/eris/white/danger + +/decl/flooring/tiling/eris/white/golden + icon_base = "golden" + build_type = /obj/item/stack/tile/floor/eris/white/golden + +/decl/flooring/tiling/eris/white/bluecorner + icon_base = "bluecorner" + build_type = /obj/item/stack/tile/floor/eris/white/bluecorner + +/decl/flooring/tiling/eris/white/orangecorner + icon_base = "orangecorner" + build_type = /obj/item/stack/tile/floor/eris/white/orangecorner + +/decl/flooring/tiling/eris/white/cyancorner + icon_base = "cyancorner" + build_type = /obj/item/stack/tile/floor/eris/white/cyancorner + +/decl/flooring/tiling/eris/white/violetcorener + icon_base = "violetcorener" + build_type = /obj/item/stack/tile/floor/eris/white/violetcorener + +/decl/flooring/tiling/eris/white/monofloor + icon_base = "monofloor" + build_type = /obj/item/stack/tile/floor/eris/white/monofloor + has_base_range = 15 + +/decl/flooring/tiling/eris/dark + name = "dark floor" + icon_base = "tiles" + icon = 'icons/turf/flooring/eris/tiles_dark.dmi' + build_type = /obj/item/stack/tile/floor/eris/dark + +/decl/flooring/tiling/eris/dark/panels + icon_base = "panels" + build_type = /obj/item/stack/tile/floor/eris/dark/panels + +/decl/flooring/tiling/eris/dark/techfloor + icon_base = "techfloor" + build_type = /obj/item/stack/tile/floor/eris/dark/techfloor + +/decl/flooring/tiling/eris/dark/techfloor_grid + icon_base = "techfloor_grid" + build_type = /obj/item/stack/tile/floor/eris/dark/techfloor_grid + +/decl/flooring/tiling/eris/dark/brown_perforated + icon_base = "brown_perforated" + build_type = /obj/item/stack/tile/floor/eris/dark/brown_perforated + +/decl/flooring/tiling/eris/dark/gray_perforated + icon_base = "gray_perforated" + build_type = /obj/item/stack/tile/floor/eris/dark/gray_perforated + +/decl/flooring/tiling/eris/dark/cargo + icon_base = "cargo" + build_type = /obj/item/stack/tile/floor/eris/dark/cargo + +/decl/flooring/tiling/eris/dark/brown_platform + icon_base = "brown_platform" + build_type = /obj/item/stack/tile/floor/eris/dark/brown_platform + +/decl/flooring/tiling/eris/dark/gray_platform + icon_base = "gray_platform" + build_type = /obj/item/stack/tile/floor/eris/dark/gray_platform + +/decl/flooring/tiling/eris/dark/danger + icon_base = "danger" + build_type = /obj/item/stack/tile/floor/eris/dark/danger + +/decl/flooring/tiling/eris/dark/golden + icon_base = "golden" + build_type = /obj/item/stack/tile/floor/eris/dark/golden + +/decl/flooring/tiling/eris/dark/bluecorner + icon_base = "bluecorner" + build_type = /obj/item/stack/tile/floor/eris/dark/bluecorner + +/decl/flooring/tiling/eris/dark/orangecorner + icon_base = "orangecorner" + build_type = /obj/item/stack/tile/floor/eris/dark/orangecorner + +/decl/flooring/tiling/eris/dark/cyancorner + icon_base = "cyancorner" + build_type = /obj/item/stack/tile/floor/eris/dark/cyancorner + +/decl/flooring/tiling/eris/dark/violetcorener + icon_base = "violetcorener" + build_type = /obj/item/stack/tile/floor/eris/dark/violetcorener + +/decl/flooring/tiling/eris/dark/monofloor + icon_base = "monofloor" + build_type = /obj/item/stack/tile/floor/eris/dark/monofloor + has_base_range = 15 + +/decl/flooring/tiling/eris/cafe + name = "linoleum floor" + icon_base = "cafe" + icon = 'icons/turf/flooring/eris/tiles.dmi' + build_type = /obj/item/stack/tile/floor/eris/cafe + 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 + 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 + 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 + 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 + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE + +/////////////////////// +/// TILE OBJS /////// +/////////////////////// +/obj/item/stack/tile/floor/eris + icon = 'icons/turf/flooring/eris/tilestack.dmi' + +// Cafe +/obj/item/stack/tile/floor/eris/cafe + name = "cafe floor tile" + singular_name = "cafe floor tile" + desc = "A chekered pattern, an ancient style for a familiar feeling." + icon_state = "tile_cafe" + matter = list(MAT_PLASTIC = 1) + +// Techmaint +/obj/item/stack/tile/floor/eris/techmaint + name = "maint floor tile" + singular_name = "maint floor tile" + icon_state = "tile_techmaint" + matter = list(MAT_STEEL = 1) + +/obj/item/stack/tile/floor/eris/techmaint/perforated + name = "perforated maint floor tile" + singular_name = "perforated maint floor tile" + icon_state = "tile_techmaint_perforated" + +/obj/item/stack/tile/floor/eris/techmaint/panels + name = "panel maint floor tile" + singular_name = "panel maint floor tile" + icon_state = "tile_techmaint_panels" + +/obj/item/stack/tile/floor/eris/techmaint/cargo + name = "cargo maint floor tile" + singular_name = "cargo maint floor tile" + icon_state = "tile_techmaint_cargo" + +/* + * Steel + */ +/obj/item/stack/tile/floor/eris/steel + name = "steel floor tile" + singular_name = "steel floor tile" + icon_state = "tile_steel" + matter = list(MAT_STEEL = 1) + +/obj/item/stack/tile/floor/eris/steel/panels + name = "steel panel tile" + singular_name = "steel panel tile" + icon_state = "tile_steel_panels" + +/obj/item/stack/tile/floor/eris/steel/techfloor + name = "steel techfloor tile" + singular_name = "steel techfloor tile" + icon_state = "tile_steel_techfloor" + +/obj/item/stack/tile/floor/eris/steel/techfloor_grid + name = "steel techfloor tile with vents" + singular_name = "steel techfloor tile with vents" + icon_state = "tile_steel_techfloor_grid" + +/obj/item/stack/tile/floor/eris/steel/brown_perforated + name = "steel brown perforated tile" + singular_name = "steel brown perforated tile" + icon_state = "tile_steel_brownperforated" + +/obj/item/stack/tile/floor/eris/steel/gray_perforated + name = "steel gray perforated tile" + singular_name = "steel gray perforated tile" + icon_state = "tile_steel_grayperforated" + +/obj/item/stack/tile/floor/eris/steel/cargo + name = "steel cargo tile" + singular_name = "steel cargo tile" + icon_state = "tile_steel_cargo" + +/obj/item/stack/tile/floor/eris/steel/brown_platform + name = "steel brown platform tile" + singular_name = "steel brown platform tile" + icon_state = "tile_steel_brownplatform" + +/obj/item/stack/tile/floor/eris/steel/gray_platform + name = "steel gray platform tile" + singular_name = "steel gray platform tile" + icon_state = "tile_steel_grayplatform" + +/obj/item/stack/tile/floor/eris/steel/danger + name = "steel danger tile" + singular_name = "steel danger tile" + icon_state = "tile_steel_danger" + +/obj/item/stack/tile/floor/eris/steel/golden + name = "steel golden tile" + singular_name = "steel golden tile" + icon_state = "tile_steel_golden" + +/obj/item/stack/tile/floor/eris/steel/bluecorner + name = "steel blue corner tile" + singular_name = "steel blue corner tile" + icon_state = "tile_steel_bluecorner" + +/obj/item/stack/tile/floor/eris/steel/orangecorner + name = "steel orange corner tile" + singular_name = "steel orange corner tilee" + icon_state = "tile_steel_orangecorner" + +/obj/item/stack/tile/floor/eris/steel/cyancorner + name = "steel cyan corner tile" + singular_name = "steel cyan corner tile" + icon_state = "tile_steel_cyancorner" + +/obj/item/stack/tile/floor/eris/steel/violetcorener + name = "steel violet corener tile" + singular_name = "steel violet corener tile" + icon_state = "tile_steel_violetcorener" + +/obj/item/stack/tile/floor/eris/steel/monofloor + name = "steel monofloor tile" + singular_name = "steel monofloor tile" + icon_state = "tile_steel_monofloor" + +/obj/item/stack/tile/floor/eris/steel/bar_flat + name = "steel bar flat tile" + singular_name = "steel bar flat tile" + icon_state = "tile_steel_bar_flat" + +/obj/item/stack/tile/floor/eris/steel/bar_dance + name = "steel bar dance tile" + singular_name = "steel bar dance tile" + icon_state = "tile_steel_bar_dance" + +/obj/item/stack/tile/floor/eris/steel/bar_light + name = "steel bar light tile" + singular_name = "steel bar light tile" + icon_state = "tile_steel_bar_light" + +/* + * Plastic + */ +/obj/item/stack/tile/floor/eris/white + name = "white floor tile" + singular_name = "white floor tile" + desc = "Appears to be made out of a lighter mat." + icon_state = "tile_white" + matter = list(MAT_PLASTIC = 1) + +/obj/item/stack/tile/floor/eris/white/panels + name = "white panel tile" + singular_name = "white panel tile" + icon_state = "tile_white_panels" + +/obj/item/stack/tile/floor/eris/white/techfloor + name = "white techfloor tile" + singular_name = "white techfloor tile" + icon_state = "tile_white_techfloor" + +/obj/item/stack/tile/floor/eris/white/techfloor_grid + name = "white techfloor tile with vents" + singular_name = "white techfloor tile with vents" + icon_state = "tile_white_techfloor_grid" + +/obj/item/stack/tile/floor/eris/white/brown_perforated + name = "white brown perforated tile" + singular_name = "white brown perforated tile" + icon_state = "tile_white_brownperforated" + +/obj/item/stack/tile/floor/eris/white/gray_perforated + name = "white gray perforated tile" + singular_name = "white gray perforated tile" + icon_state = "tile-white-grayperforated" + +/obj/item/stack/tile/floor/eris/white/cargo + name = "white cargo tile" + singular_name = "white cargo tile" + icon_state = "tile_white_cargo" + +/obj/item/stack/tile/floor/eris/white/brown_platform + name = "white brown platform tile" + singular_name = "white brown platform tile" + icon_state = "tile_white_brownplatform" + +/obj/item/stack/tile/floor/eris/white/gray_platform + name = "white gray platform tile" + singular_name = "white gray platform tile" + icon_state = "tile_white_grayplatform" + +/obj/item/stack/tile/floor/eris/white/danger + name = "white danger tile" + singular_name = "white danger tile" + icon_state = "tile_white_danger" + +/obj/item/stack/tile/floor/eris/white/golden + name = "white golden tile" + singular_name = "white golden tile" + icon_state = "tile_white_golden" + +/obj/item/stack/tile/floor/eris/white/bluecorner + name = "white blue corner tile" + singular_name = "white blue corner tile" + icon_state = "tile_white_bluecorner" + +/obj/item/stack/tile/floor/eris/white/orangecorner + name = "white orange corner tile" + singular_name = "white orange corner tilee" + icon_state = "tile_white_orangecorner" + +/obj/item/stack/tile/floor/eris/white/cyancorner + name = "white cyan corner tile" + singular_name = "white cyan corner tile" + icon_state = "tile_white_cyancorner" + +/obj/item/stack/tile/floor/eris/white/violetcorener + name = "white violet corener tile" + singular_name = "white violet corener tile" + icon_state = "tile_white_violetcorener" + +/obj/item/stack/tile/floor/eris/white/monofloor + name = "white monofloor tile" + singular_name = "white monofloor tile" + icon_state = "tile_white_monofloor" + +/* + * Steel + */ +/obj/item/stack/tile/floor/eris/dark + name = "dark floor tile" + singular_name = "dark floor tile" + icon_state = "tile_dark" + matter = list(MAT_STEEL = 1) + +/obj/item/stack/tile/floor/eris/dark/panels + name = "dark panel tile" + singular_name = "dark panel tile" + icon_state = "tile_dark_panels" + +/obj/item/stack/tile/floor/eris/dark/techfloor + name = "dark techfloor tile" + singular_name = "dark techfloor tile" + icon_state = "tile_dark_techfloor" + +/obj/item/stack/tile/floor/eris/dark/techfloor_grid + name = "dark techfloor tile with vents" + singular_name = "dark techfloor tile with vents" + icon_state = "tile_dark_techfloor_grid" + +/obj/item/stack/tile/floor/eris/dark/brown_perforated + name = "dark brown perforated tile" + singular_name = "dark brown perforated tile" + icon_state = "tile_dark_brownperforated" + +/obj/item/stack/tile/floor/eris/dark/gray_perforated + name = "dark gray perforated tile" + singular_name = "dark gray perforated tile" + icon_state = "tile_dark_grayperforated" + +/obj/item/stack/tile/floor/eris/dark/cargo + name = "dark cargo tile" + singular_name = "dark cargo tile" + icon_state = "tile_dark_cargo" + +/obj/item/stack/tile/floor/eris/dark/brown_platform + name = "dark brown platform tile" + singular_name = "dark brown platform tile" + icon_state = "tile_dark_brownplatform" + +/obj/item/stack/tile/floor/eris/dark/gray_platform + name = "dark gray platform tile" + singular_name = "dark gray platform tile" + icon_state = "tile_dark_grayplatform" + +/obj/item/stack/tile/floor/eris/dark/danger + name = "dark danger tile" + singular_name = "dark danger tile" + icon_state = "tile_dark_danger" + +/obj/item/stack/tile/floor/eris/dark/golden + name = "dark golden tile" + singular_name = "dark golden tile" + icon_state = "tile_dark_golden" + +/obj/item/stack/tile/floor/eris/dark/bluecorner + name = "dark blue corner tile" + singular_name = "dark blue corner tile" + icon_state = "tile_dark_bluecorner" + +/obj/item/stack/tile/floor/eris/dark/orangecorner + name = "dark orange corner tile" + singular_name = "dark orange corner tilee" + icon_state = "tile_dark_orangecorner" + +/obj/item/stack/tile/floor/eris/dark/cyancorner + name = "dark cyan corner tile" + singular_name = "dark cyan corner tile" + icon_state = "tile_dark_cyancorner" + +/obj/item/stack/tile/floor/eris/dark/violetcorener + name = "dark violet corener tile" + singular_name = "dark violet corener tile" + icon_state = "tile_dark_violetcorener" + +/obj/item/stack/tile/floor/eris/dark/monofloor + name = "dark monofloor tile" + singular_name = "dark monofloor tile" + icon_state = "tile_dark_monofloor" + + +/////////////////////// +/// PREMADE TURFS ///// +/////////////////////// +/turf/simulated/floor/tiled/eris + name = "floor" + icon = 'icons/turf/flooring/eris/tiles.dmi' + icon_state = "tiles" + initial_flooring = /decl/flooring/tiling/eris + + + +//Steel tiles +/turf/simulated/floor/tiled/eris/steel + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_steel.dmi' + icon_state = "tiles" + initial_flooring = /decl/flooring/tiling/eris/steel + +/turf/simulated/floor/tiled/eris/steel/panels + icon_state = "panels" + initial_flooring = /decl/flooring/tiling/eris/steel/panels + +/turf/simulated/floor/tiled/eris/steel/techfloor + icon_state = "techfloor" + initial_flooring = /decl/flooring/tiling/eris/steel/techfloor + +/turf/simulated/floor/tiled/eris/steel/techfloor_grid + icon_state = "techfloor_grid" + initial_flooring = /decl/flooring/tiling/eris/steel/techfloor_grid + +/turf/simulated/floor/tiled/eris/steel/brown_perforated + icon_state = "brown_perforated" + initial_flooring = /decl/flooring/tiling/eris/steel/brown_perforated + +/turf/simulated/floor/tiled/eris/steel/gray_perforated + icon_state = "gray_perforated" + initial_flooring = /decl/flooring/tiling/eris/steel/gray_perforated + +/turf/simulated/floor/tiled/eris/steel/cargo + icon_state = "cargo" + initial_flooring = /decl/flooring/tiling/eris/steel/cargo + +/turf/simulated/floor/tiled/eris/steel/brown_platform + icon_state = "brown_platform" + initial_flooring = /decl/flooring/tiling/eris/steel/brown_platform + +/turf/simulated/floor/tiled/eris/steel/gray_platform + icon_state = "gray_platform" + initial_flooring = /decl/flooring/tiling/eris/steel/gray_platform + +/turf/simulated/floor/tiled/eris/steel/danger + icon_state = "danger" + initial_flooring = /decl/flooring/tiling/eris/steel/danger + +/turf/simulated/floor/tiled/eris/steel/golden + icon_state = "golden" + initial_flooring = /decl/flooring/tiling/eris/steel/golden + +/turf/simulated/floor/tiled/eris/steel/bluecorner + icon_state = "bluecorner" + initial_flooring = /decl/flooring/tiling/eris/steel/bluecorner + +/turf/simulated/floor/tiled/eris/steel/orangecorner + icon_state = "orangecorner" + initial_flooring = /decl/flooring/tiling/eris/steel/orangecorner + +/turf/simulated/floor/tiled/eris/steel/cyancorner + icon_state = "cyancorner" + initial_flooring = /decl/flooring/tiling/eris/steel/cyancorner + +/turf/simulated/floor/tiled/eris/steel/violetcorener + icon_state = "violetcorener" + initial_flooring = /decl/flooring/tiling/eris/steel/violetcorener + +/turf/simulated/floor/tiled/eris/steel/monofloor + icon_state = "monofloor" + initial_flooring = /decl/flooring/tiling/eris/steel/monofloor + +/turf/simulated/floor/tiled/eris/steel/bar_flat + icon_state = "bar_flat" + initial_flooring = /decl/flooring/tiling/eris/steel/bar_flat + +/turf/simulated/floor/tiled/eris/steel/bar_dance + icon_state = "bar_dance" + initial_flooring = /decl/flooring/tiling/eris/steel/bar_dance + +/turf/simulated/floor/tiled/eris/steel/bar_light + icon_state = "bar_light" + initial_flooring = /decl/flooring/tiling/eris/steel/bar_light + +/turf/simulated/floor/tiled/eris/steel/bar_light/Initialize() + . = ..() + set_light(3,4,"#00AAFF") + + + +//White Tiles +/turf/simulated/floor/tiled/eris/white + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_white.dmi' + icon_state = "tiles" + initial_flooring = /decl/flooring/tiling/eris/white + +/turf/simulated/floor/tiled/eris/white/panels + icon_state = "panels" + initial_flooring = /decl/flooring/tiling/eris/white/panels + +/turf/simulated/floor/tiled/eris/white/techfloor + icon_state = "techfloor" + initial_flooring = /decl/flooring/tiling/eris/white/techfloor + +/turf/simulated/floor/tiled/eris/white/techfloor_grid + icon_state = "techfloor_grid" + initial_flooring = /decl/flooring/tiling/eris/white/techfloor_grid + +/turf/simulated/floor/tiled/eris/white/brown_perforated + icon_state = "brown_perforated" + initial_flooring = /decl/flooring/tiling/eris/white/brown_perforated + +/turf/simulated/floor/tiled/eris/white/gray_perforated + icon_state = "gray_perforated" + initial_flooring = /decl/flooring/tiling/eris/white/gray_perforated + +/turf/simulated/floor/tiled/eris/white/cargo + icon_state = "cargo" + initial_flooring = /decl/flooring/tiling/eris/white/cargo + +/turf/simulated/floor/tiled/eris/white/brown_platform + icon_state = "brown_platform" + initial_flooring = /decl/flooring/tiling/eris/white/brown_platform + +/turf/simulated/floor/tiled/eris/white/gray_platform + icon_state = "gray_platform" + initial_flooring = /decl/flooring/tiling/eris/white/gray_platform + +/turf/simulated/floor/tiled/eris/white/danger + icon_state = "danger" + initial_flooring = /decl/flooring/tiling/eris/white/danger + +/turf/simulated/floor/tiled/eris/white/golden + icon_state = "golden" + initial_flooring = /decl/flooring/tiling/eris/white/golden + +/turf/simulated/floor/tiled/eris/white/bluecorner + icon_state = "bluecorner" + initial_flooring = /decl/flooring/tiling/eris/white/bluecorner + +/turf/simulated/floor/tiled/eris/white/orangecorner + icon_state = "orangecorner" + initial_flooring = /decl/flooring/tiling/eris/white/orangecorner + +/turf/simulated/floor/tiled/eris/white/cyancorner + icon_state = "cyancorner" + initial_flooring = /decl/flooring/tiling/eris/white/cyancorner + +/turf/simulated/floor/tiled/eris/white/violetcorener + icon_state = "violetcorener" + initial_flooring = /decl/flooring/tiling/eris/white/violetcorener + +/turf/simulated/floor/tiled/eris/white/monofloor + icon_state = "monofloor" + initial_flooring = /decl/flooring/tiling/eris/white/monofloor + + + +// Dark Tiles +/turf/simulated/floor/tiled/eris/dark + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_dark.dmi' + icon_state = "tiles" + initial_flooring = /decl/flooring/tiling/eris/dark + +/turf/simulated/floor/tiled/eris/dark/panels + icon_state = "panels" + initial_flooring = /decl/flooring/tiling/eris/dark/panels + +/turf/simulated/floor/tiled/eris/dark/techfloor + icon_state = "techfloor" + initial_flooring = /decl/flooring/tiling/eris/dark/techfloor + +/turf/simulated/floor/tiled/eris/dark/techfloor_grid + icon_state = "techfloor_grid" + initial_flooring = /decl/flooring/tiling/eris/dark/techfloor_grid + +/turf/simulated/floor/tiled/eris/dark/brown_perforated + icon_state = "brown_perforated" + initial_flooring = /decl/flooring/tiling/eris/dark/brown_perforated + +/turf/simulated/floor/tiled/eris/dark/gray_perforated + icon_state = "gray_perforated" + initial_flooring = /decl/flooring/tiling/eris/dark/gray_perforated + +/turf/simulated/floor/tiled/eris/dark/cargo + icon_state = "cargo" + initial_flooring = /decl/flooring/tiling/eris/dark/cargo + +/turf/simulated/floor/tiled/eris/dark/brown_platform + icon_state = "brown_platform" + initial_flooring = /decl/flooring/tiling/eris/dark/brown_platform + +/turf/simulated/floor/tiled/eris/dark/gray_platform + icon_state = "gray_platform" + initial_flooring = /decl/flooring/tiling/eris/dark/gray_platform + +/turf/simulated/floor/tiled/eris/dark/danger + icon_state = "danger" + initial_flooring = /decl/flooring/tiling/eris/dark/danger + +/turf/simulated/floor/tiled/eris/dark/golden + icon_state = "golden" + initial_flooring = /decl/flooring/tiling/eris/dark/golden + +/turf/simulated/floor/tiled/eris/dark/bluecorner + icon_state = "bluecorner" + initial_flooring = /decl/flooring/tiling/eris/dark/bluecorner + +/turf/simulated/floor/tiled/eris/dark/orangecorner + icon_state = "orangecorner" + initial_flooring = /decl/flooring/tiling/eris/dark/orangecorner + +/turf/simulated/floor/tiled/eris/dark/cyancorner + icon_state = "cyancorner" + initial_flooring = /decl/flooring/tiling/eris/dark/cyancorner + +/turf/simulated/floor/tiled/eris/dark/violetcorener + icon_state = "violetcorener" + initial_flooring = /decl/flooring/tiling/eris/dark/violetcorener + +/turf/simulated/floor/tiled/eris/dark/monofloor + icon_state = "monofloor" + initial_flooring = /decl/flooring/tiling/eris/dark/monofloor + + + + +/turf/simulated/floor/tiled/eris/cafe + name = "floor" + icon = 'icons/turf/flooring/eris/tiles.dmi' + icon_state = "cafe" + initial_flooring = /decl/flooring/tiling/eris/cafe + +/turf/simulated/floor/tiled/eris/techmaint + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_maint.dmi' + icon_state = "techmaint" + initial_flooring = /decl/flooring/tiling/eris/techmaint + +/turf/simulated/floor/tiled/eris/techmaint_perforated + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_maint.dmi' + icon_state = "techmaint_perforated" + initial_flooring = /decl/flooring/tiling/eris/techmaint_perforated + +/turf/simulated/floor/tiled/eris/techmaint_panels + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_maint.dmi' + icon_state = "techmaint_panels" + initial_flooring = /decl/flooring/tiling/eris/techmaint_panels + +/turf/simulated/floor/tiled/eris/techmaint_cargo + name = "floor" + icon = 'icons/turf/flooring/eris/tiles_maint.dmi' + icon_state = "techmaint_cargo" + initial_flooring = /decl/flooring/tiling/eris/techmaint_cargo + +//=========ERIS GRASS==========\\ +/decl/flooring/grass/heavy + name = "heavy grass" + desc = "A dense ground coating of grass" + flags = TURF_REMOVE_SHOVEL + icon = 'icons/turf/outdoors.dmi' + icon_base = "grass-heavy" + has_base_range = 3 + +/turf/simulated/floor/outdoors/grass/heavy + name = "heavy grass" + icon_state = "grass-heavy0" + edge_blending_priority = 4 + initial_flooring = /decl/flooring/grass/heavy + turf_layers = list( + /turf/simulated/floor/outdoors/rocks, + /turf/simulated/floor/outdoors/dirt + ) + grass_chance = 40 + + grass_types = list( + /obj/structure/flora/ausbushes/sparsegrass, + /obj/structure/flora/ausbushes/fullgrass + ) + +//=========R. PLATING==========\\ +/decl/flooring/reinforced/plating + name = "reinforced plating" + descriptor = "reinforced plating" + icon = 'icons/turf/flooring/eris/plating.dmi' + icon_base = "plating" + flags = TURF_REMOVE_WRENCH | TURF_HAS_CORNERS | TURF_HAS_EDGES | TURF_CAN_BURN | TURF_CAN_BREAK + can_paint = 1 + has_base_range = 18 + is_plating = TRUE + //build_type = /obj/item/stack/material/steel + + plating_type = /decl/flooring/reinforced/plating/under + /* + footstep_sound = "plating" + space_smooth = FALSE + removal_time = 150 + health = 100 + + floor_smooth = SMOOTH_BLACKLIST + flooring_blacklist = list(/decl/flooring/reinforced/plating/under,/decl/flooring/reinforced/plating/hull) //Smooth with everything except the contents of this list + 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)) + */ + +/obj/item/stack/tile/floor/rplating + name = "reinforced plating" + singular_name = "dark floor tile" + icon_state = "tile_dark" + matter = list(MAT_STEEL = 1) + +/turf/simulated/floor/plating/eris + name = "reinforced plating" + icon = 'icons/turf/flooring/eris/plating.dmi' + icon_state = "plating" + initial_flooring = /decl/flooring/reinforced/plating + +//==========UNDERPLATING==============\\ +/decl/flooring/reinforced/plating/under + name = "underplating" + icon = 'icons/turf/flooring/eris/plating.dmi' + descriptor = "support beams" + icon_base = "under" + flags = TURF_HAS_CORNERS | TURF_HAS_EDGES | TURF_CAN_BURN | TURF_CAN_BREAK + can_paint = 1 + 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 + removal_time = 250 + health = 200 + resistance = RESISTANCE_ARMOURED + footstep_sound = "catwalk" + space_smooth = SMOOTH_ALL + floor_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE + */ + +/turf/simulated/floor/plating/eris/under + name = "underplating" + icon_state = "under" + icon = 'icons/turf/flooring/eris/plating.dmi' + initial_flooring = /decl/flooring/reinforced/plating/under + +//============HULL PLATING=========\\ +/decl/flooring/reinforced/plating/hull + name = "hull" + descriptor = "outer hull" + icon = 'icons/turf/flooring/eris/hull.dmi' + icon_base = "hullcenter" + flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_WRENCH | TURF_CAN_BURN | TURF_CAN_BREAK + build_type = /obj/item/stack/material/plasteel + has_base_range = 35 + is_plating = FALSE + + /* Eris features we lack on flooring decls + try_update_icon = 0 + plating_type = null + health = 350 + resistance = RESISTANCE_HEAVILY_ARMOURED + removal_time = 1 MINUTES //Cutting through the hull is very slow work + footstep_sound = "hull" + wall_smooth = SMOOTH_ALL + space_smooth = SMOOTH_NONE + smooth_movable_atom = SMOOTH_NONE + */ + +/* Eris features we lack on flooring decls +//Hull can upgrade to underplating +/decl/flooring/reinforced/plating/hull/can_build_floor(var/decl/flooring/newfloor) + return FALSE //Not allowed to build directly on hull, you must first remove it and then build on the underplating + +/decl/flooring/reinforced/plating/hull/get_plating_type(var/turf/location) + if (turf_is_lower_hull(location)) //Hull plating is only on the lowest level of the ship + return null + else if (turf_is_upper_hull(location)) + return /decl/flooring/reinforced/plating/under + else + return null //This should never happen, hull plawell,ting should only be on the exterior +*/ +/turf/simulated/floor/hull + name = "hull" + icon = 'icons/turf/flooring/eris/hull.dmi' + icon_state = "hullcenter0" + initial_flooring = /decl/flooring/reinforced/plating/hull +/* +/turf/simulated/floor/hull/New() + if(icon_state != "hullcenter0") + overrided_icon_state = icon_state + ..() +*/ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f7df1de49f..61786782db 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -981,7 +981,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(!depth || lying) return - overlays_standing[WATER_LAYER] = image(icon = 'icons/mob/submerged.dmi', icon_state = "human_swimming_[depth]", layer = BODY_LAYER+WATER_LAYER) //TODO: Improve + var/atom/A = loc // We'd better be swimming and on a turf + var/image/I = image(icon = 'icons/mob/submerged.dmi', icon_state = "human_swimming_[depth]", layer = BODY_LAYER+WATER_LAYER) //TODO: Improve + I.color = A.color + overlays_standing[WATER_LAYER] = I apply_layer(WATER_LAYER) diff --git a/icons/turf/flooring/eris/grass.dmi b/icons/turf/flooring/eris/grass.dmi new file mode 100644 index 0000000000..d5a85320c4 Binary files /dev/null and b/icons/turf/flooring/eris/grass.dmi differ diff --git a/icons/turf/flooring/eris/hull.dmi b/icons/turf/flooring/eris/hull.dmi new file mode 100644 index 0000000000..9ec88575b6 Binary files /dev/null and b/icons/turf/flooring/eris/hull.dmi differ diff --git a/icons/turf/flooring/eris/plating.dmi b/icons/turf/flooring/eris/plating.dmi new file mode 100644 index 0000000000..455fdcc4f2 Binary files /dev/null and b/icons/turf/flooring/eris/plating.dmi differ diff --git a/icons/turf/flooring/eris/tiles.dmi b/icons/turf/flooring/eris/tiles.dmi new file mode 100644 index 0000000000..61edb65708 Binary files /dev/null and b/icons/turf/flooring/eris/tiles.dmi differ diff --git a/icons/turf/flooring/eris/tiles_dark.dmi b/icons/turf/flooring/eris/tiles_dark.dmi new file mode 100644 index 0000000000..7ca285d856 Binary files /dev/null and b/icons/turf/flooring/eris/tiles_dark.dmi differ diff --git a/icons/turf/flooring/eris/tiles_maint.dmi b/icons/turf/flooring/eris/tiles_maint.dmi new file mode 100644 index 0000000000..2d94d9c8b5 Binary files /dev/null and b/icons/turf/flooring/eris/tiles_maint.dmi differ diff --git a/icons/turf/flooring/eris/tiles_steel.dmi b/icons/turf/flooring/eris/tiles_steel.dmi new file mode 100644 index 0000000000..59cef85928 Binary files /dev/null and b/icons/turf/flooring/eris/tiles_steel.dmi differ diff --git a/icons/turf/flooring/eris/tiles_white.dmi b/icons/turf/flooring/eris/tiles_white.dmi new file mode 100644 index 0000000000..ee27b6caa2 Binary files /dev/null and b/icons/turf/flooring/eris/tiles_white.dmi differ diff --git a/icons/turf/flooring/eris/tilestack.dmi b/icons/turf/flooring/eris/tilestack.dmi new file mode 100644 index 0000000000..b46c363372 Binary files /dev/null and b/icons/turf/flooring/eris/tilestack.dmi differ diff --git a/icons/turf/flooring/grass.dmi b/icons/turf/flooring/grass.dmi index 5b8c7c3fca..abe272fbc4 100644 Binary files a/icons/turf/flooring/grass.dmi and b/icons/turf/flooring/grass.dmi differ diff --git a/icons/turf/outdoors.dmi b/icons/turf/outdoors.dmi index 8bcc4308f6..f08a94a80f 100644 Binary files a/icons/turf/outdoors.dmi and b/icons/turf/outdoors.dmi differ diff --git a/icons/turf/outdoors_edge.dmi b/icons/turf/outdoors_edge.dmi index 5357755973..bb334272fb 100644 Binary files a/icons/turf/outdoors_edge.dmi and b/icons/turf/outdoors_edge.dmi differ diff --git a/polaris.dme b/polaris.dme index b9f946dc14..2513571848 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1274,6 +1274,7 @@ #include "code\game\turfs\simulated\floor_icon.dm" #include "code\game\turfs\simulated\floor_static.dm" #include "code\game\turfs\simulated\floor_types.dm" +#include "code\game\turfs\simulated\floor_types_eris.dm" #include "code\game\turfs\simulated\lava.dm" #include "code\game\turfs\simulated\wall_attacks.dm" #include "code\game\turfs\simulated\wall_icon.dm"