Files
VOREStation/code/game/turfs/flooring/flooring.dm

538 lines
17 KiB
Plaintext

var/list/flooring_types
/proc/populate_flooring_types()
flooring_types = list()
for (var/flooring_path in typesof(/decl/flooring))
flooring_types["[flooring_path]"] = new flooring_path
/proc/get_flooring_data(var/flooring_path)
if(!flooring_types)
flooring_types = list()
if(!flooring_types["[flooring_path]"])
flooring_types["[flooring_path]"] = new flooring_path
return flooring_types["[flooring_path]"]
// State values:
// [icon_base]: initial base icon_state without edges or corners.
// if has_base_range is set, append 0-has_base_range ie.
// [icon_base][has_base_range]
// [icon_base]_broken: damaged overlay.
// if has_damage_range is set, append 0-damage_range for state ie.
// [icon_base]_broken[has_damage_range]
// [icon_base]_edges: directional overlays for edges.
// [icon_base]_corners: directional overlays for non-edge corners.
/decl/flooring
var/name = "floor"
var/desc
var/icon
var/icon_base // initial base icon_state without edges or corners.
var/has_base_range // This will pick between a range of 0 - x. Number icon_states accordingly.
// Note that this will append a 0 - x number automatically to icon_base, but NOT the dmi. Do icon_base = "grass", but name grass0 inside the dmi. etc etc.
var/has_damage_range
var/has_burn_range
var/damage_temperature
var/apply_thermal_conductivity
var/apply_heat_capacity
var/build_type // Unbuildable if not set. Must be /obj/item/stack.
var/build_cost = 1 // Stack units.
var/build_time = 0 // BYOND ticks.
var/descriptor = "tiles"
var/flags
var/can_paint
var/can_engrave = FALSE
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 = BUILTIN_DECAL_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"
desc = "Do they smoke grass out in space, Bowie? Or do they smoke AstroTurf?"
icon = 'icons/turf/flooring/grass.dmi'
icon_base = "grass"
has_base_range = 1
damage_temperature = T0C+80
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',
'sound/effects/footstep/grass2.ogg',
'sound/effects/footstep/grass3.ogg',
'sound/effects/footstep/grass4.ogg'))
/decl/flooring/grass/sif // Subtype for Sif's grass.
name = "growth"
desc = "A natural moss that has adapted to the sheer cold climate."
flags = TURF_REMOVE_SHOVEL
icon = 'icons/turf/outdoors.dmi'
icon_base = "grass_sif"
build_type = /obj/item/stack/tile/grass/sif
has_base_range = 1
/decl/flooring/grass/sif/forest
name = "thick growth"
desc = "A natural moss that has adapted to the sheer cold climate."
flags = TURF_REMOVE_SHOVEL
icon = 'icons/turf/outdoors.dmi'
icon_base = "grass_sif_dark"
build_type = /obj/item/stack/tile/grass/sif/forest
has_base_range = 1
/decl/flooring/water
name = "water"
desc = "Water is wet, gosh, who knew!"
icon = 'icons/turf/outdoors.dmi'
icon_base = "seashallow"
footstep_sounds = list("human" = list(
'sound/effects/footstep/water1.ogg',
'sound/effects/footstep/water2.ogg',
'sound/effects/footstep/water3.ogg',
'sound/effects/footstep/water4.ogg'))
/decl/flooring/sand
name = "sand"
desc = "I don't like sand. It's coarse and rough and irritating and it gets everywhere."
icon = 'icons/misc/beach.dmi'
icon_base = "sand"
footstep_sounds = list("human" = list(
'sound/effects/footstep/HeavySand1.ogg',
'sound/effects/footstep/HeavySand2.ogg',
'sound/effects/footstep/HeavySand3.ogg',
'sound/effects/footstep/HeavySand4.ogg'))
/decl/flooring/sand/desert // Subtype of sand, desert.
name = "desert"
desc = "I don't like sand. It's coarse and rough and irritating and it gets everywhere."
icon = 'icons/turf/desert.dmi'
icon_base = "desert"
/decl/flooring/mud
name = "mud"
desc = "STICKY AND WET!"
icon = 'icons/turf/outdoors.dmi'
icon_base = "mud_dark"
footstep_sounds = list("human" = list(
'sound/effects/footstep/mud1.ogg',
'sound/effects/footstep/mud2.ogg',
'sound/effects/footstep/mud3.ogg',
'sound/effects/footstep/mud4.ogg'))
/decl/flooring/asteroid
name = "coarse sand"
desc = "Gritty and unpleasant."
icon = 'icons/turf/flooring/asteroid.dmi'
icon_base = "asteroid"
flags = TURF_REMOVE_SHOVEL
build_type = null
footstep_sounds = list("human" = list(
'sound/effects/footstep/asteroid1.ogg',
'sound/effects/footstep/asteroid2.ogg',
'sound/effects/footstep/asteroid3.ogg',
'sound/effects/footstep/asteroid4.ogg',
'sound/effects/footstep/asteroid5.ogg'))
/decl/flooring/dirt
name = "dirt"
desc = "Gritty and unpleasant, just like dirt."
icon = 'icons/turf/outdoors.dmi'
icon_base = "dirt-dark"
flags = TURF_REMOVE_SHOVEL
build_type = null
footstep_sounds = list("human" = list(
'sound/effects/footstep/asteroid1.ogg',
'sound/effects/footstep/asteroid2.ogg',
'sound/effects/footstep/asteroid3.ogg',
'sound/effects/footstep/asteroid4.ogg',
'sound/effects/footstep/asteroid5.ogg',
'sound/effects/footstep/MedDirt1.ogg',
'sound/effects/footstep/MedDirt2.ogg',
'sound/effects/footstep/MedDirt3.ogg',
'sound/effects/footstep/MedDirt4.ogg',))
/decl/flooring/snow
name = "snow"
desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is."
icon = 'icons/turf/snow_new.dmi'
icon_base = "snow"
footstep_sounds = list("human" = list(
'sound/effects/footstep/snow1.ogg',
'sound/effects/footstep/snow2.ogg',
'sound/effects/footstep/snow3.ogg',
'sound/effects/footstep/snow4.ogg',
'sound/effects/footstep/snow5.ogg'))
/decl/flooring/snow/snow2
name = "snow"
desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is."
icon = 'icons/turf/snow.dmi'
icon_base = "snow"
flags = TURF_HAS_EDGES
/decl/flooring/snow/gravsnow
name = "snow"
icon_base = "gravsnow"
/decl/flooring/snow/plating
name = "snowy plating"
desc = "Steel plating coated with a light layer of snow."
icon_base = "snowyplating"
flags = null
/decl/flooring/snow/ice
name = "ice"
desc = "Looks slippery."
icon_base = "ice"
/decl/flooring/snow/plating/drift
icon_base = "snowyplayingdrift"
/decl/flooring/carpet
name = "carpet"
desc = "Imported and comfy."
icon = 'icons/turf/flooring/carpet.dmi'
icon_base = "carpet"
build_type = /obj/item/stack/tile/carpet
damage_temperature = T0C+200
flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BURN
footstep_sounds = list("human" = list(
'sound/effects/footstep/carpet1.ogg',
'sound/effects/footstep/carpet2.ogg',
'sound/effects/footstep/carpet3.ogg',
'sound/effects/footstep/carpet4.ogg',
'sound/effects/footstep/carpet5.ogg'))
/decl/flooring/carpet/bcarpet
name = "black carpet"
icon_base = "bcarpet"
build_type = /obj/item/stack/tile/carpet/bcarpet
/decl/flooring/carpet/blucarpet
name = "blue carpet"
icon_base = "blucarpet"
build_type = /obj/item/stack/tile/carpet/blucarpet
/decl/flooring/carpet/turcarpet
name = "tur carpet"
icon_base = "turcarpet"
build_type = /obj/item/stack/tile/carpet/turcarpet
/decl/flooring/carpet/sblucarpet
name = "silver blue carpet"
icon_base = "sblucarpet"
build_type = /obj/item/stack/tile/carpet/sblucarpet
/decl/flooring/carpet/gaycarpet
name = "clown carpet"
icon_base = "gaycarpet"
build_type = /obj/item/stack/tile/carpet/gaycarpet
/decl/flooring/carpet/purcarpet
name = "purple carpet"
icon_base = "purcarpet"
build_type = /obj/item/stack/tile/carpet/purcarpet
/decl/flooring/carpet/oracarpet
name = "orange carpet"
icon_base = "oracarpet"
build_type = /obj/item/stack/tile/carpet/oracarpet
/decl/flooring/carpet/tealcarpet
name = "teal carpet"
icon_base = "tealcarpet"
build_type = /obj/item/stack/tile/carpet/teal
/decl/flooring/tiling
name = "floor"
desc = "Scuffed from the passage of countless greyshirts."
icon = 'icons/turf/flooring/tiles_vr.dmi' // VOREStation Edit - Eris floors. Polaris still hasn't added all of them properly. See: steel_ridged
icon_base = "tiled"
has_damage_range = 2
damage_temperature = T0C+1400
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
build_type = /obj/item/stack/tile/floor
can_paint = 1
can_engrave = TRUE
footstep_sounds = list("human" = list(
'sound/effects/footstep/floor1.ogg',
'sound/effects/footstep/floor2.ogg',
'sound/effects/footstep/floor3.ogg',
'sound/effects/footstep/floor4.ogg',
'sound/effects/footstep/floor5.ogg'))
/decl/flooring/tiling/tech
desc = "Scuffed from the passage of countless greyshirts."
icon = 'icons/turf/flooring/techfloor.dmi'
icon_base = "techfloor_gray"
build_type = /obj/item/stack/tile/floor/techgrey
can_paint = null
/decl/flooring/tiling/tech/grid
icon_base = "techfloor_grid"
build_type = /obj/item/stack/tile/floor/techgrid
/decl/flooring/tiling/new_tile
name = "floor"
icon_base = "tile_full"
flags = TURF_CAN_BREAK | TURF_CAN_BURN | TURF_IS_FRAGILE
build_type = null
/decl/flooring/tiling/new_tile/cargo_one
icon_base = "cargo_one_full"
/decl/flooring/tiling/new_tile/kafel
icon_base = "kafel_full"
/decl/flooring/tiling/new_tile/techmaint
icon_base = "techmaint"
/decl/flooring/tiling/new_tile/monofloor
icon_base = "monofloor"
/decl/flooring/tiling/new_tile/monotile
icon_base = "monotile"
/decl/flooring/tiling/new_tile/steel_grid
icon_base = "steel_grid"
/decl/flooring/tiling/new_tile/steel_ridged
icon_base = "steel_ridged"
/decl/flooring/linoleum
name = "linoleum"
desc = "It's like the 2390's all over again."
icon = 'icons/turf/flooring/linoleum.dmi'
icon_base = "lino"
can_paint = 1
build_type = /obj/item/stack/tile/linoleum
flags = TURF_REMOVE_SCREWDRIVER | TURF_CAN_BREAK | TURF_CAN_BURN
/decl/flooring/tiling/red
name = "floor"
icon_base = "white"
has_damage_range = null
flags = TURF_REMOVE_CROWBAR
build_type = /obj/item/stack/tile/floor/red
/decl/flooring/tiling/steel
name = "floor"
icon_base = "steel"
build_type = /obj/item/stack/tile/floor/steel
/decl/flooring/tiling/steel_dirty
name = "floor"
icon_base = "steel_dirty"
build_type = /obj/item/stack/tile/floor/steel_dirty
/decl/flooring/tiling/asteroidfloor
name = "floor"
icon_base = "asteroidfloor"
has_damage_range = null
build_type = /obj/item/stack/tile/floor/steel
/decl/flooring/tiling/white
name = "floor"
desc = "How sterile."
icon_base = "white"
build_type = /obj/item/stack/tile/floor/white
/decl/flooring/tiling/yellow
name = "floor"
icon_base = "white"
has_damage_range = null
build_type = /obj/item/stack/tile/floor/yellow
/decl/flooring/tiling/dark
name = "floor"
desc = "How ominous."
icon_base = "dark"
has_damage_range = null
build_type = /obj/item/stack/tile/floor/dark
/decl/flooring/tiling/hydro
name = "floor"
icon_base = "hydrofloor"
build_type = /obj/item/stack/tile/floor/steel
/decl/flooring/tiling/neutral
name = "floor"
icon_base = "neutral"
build_type = /obj/item/stack/tile/floor/steel
/decl/flooring/tiling/freezer
name = "floor"
desc = "Don't slip."
icon_base = "freezer"
build_type = /obj/item/stack/tile/floor/freezer
/decl/flooring/wmarble
name = "marble floor"
desc = "Very regal white marble flooring."
icon = 'icons/turf/flooring/misc.dmi'
icon_base = "lightmarble"
build_type = /obj/item/stack/tile/wmarble
flags = TURF_REMOVE_CROWBAR
/decl/flooring/bmarble
name = "marble floor"
desc = "Very regal black marble flooring."
icon = 'icons/turf/flooring/misc.dmi'
icon_base = "darkmarble"
build_type = /obj/item/stack/tile/bmarble
flags = TURF_REMOVE_CROWBAR
/decl/flooring/wood
name = "wooden floor"
desc = "Polished redwood planks."
icon = 'icons/turf/flooring/wood_vr.dmi'
icon_base = "wood"
has_damage_range = 6
damage_temperature = T0C+200
descriptor = "planks"
build_type = /obj/item/stack/tile/wood
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
footstep_sounds = list("human" = list(
'sound/effects/footstep/wood1.ogg',
'sound/effects/footstep/wood2.ogg',
'sound/effects/footstep/wood3.ogg',
'sound/effects/footstep/wood4.ogg',
'sound/effects/footstep/wood5.ogg'))
/decl/flooring/wood/sif
name = "alien wooden floor"
desc = "Polished alien wood planks."
icon = 'icons/turf/flooring/wood.dmi'
icon_base = "sifwood"
build_type = /obj/item/stack/tile/wood/sif
/decl/flooring/reinforced
name = "reinforced floor"
desc = "Heavily reinforced with steel rods."
icon = 'icons/turf/flooring/tiles.dmi'
icon_base = "reinforced"
flags = TURF_REMOVE_WRENCH | TURF_ACID_IMMUNE | TURF_CAN_BURN | TURF_CAN_BREAK
build_type = /obj/item/stack/rods
build_cost = 2
build_time = 30
apply_thermal_conductivity = 0.025
apply_heat_capacity = 325000
can_paint = 1
footstep_sounds = list("human" = list(
'sound/effects/footstep/hull1.ogg',
'sound/effects/footstep/hull2.ogg',
'sound/effects/footstep/hull3.ogg',
'sound/effects/footstep/hull4.ogg',
'sound/effects/footstep/hull5.ogg'))
/decl/flooring/reinforced/circuit
name = "processing strata"
icon = 'icons/turf/flooring/circuit.dmi'
icon_base = "bcircuit"
build_type = null
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_CAN_BURN | TURF_REMOVE_CROWBAR
can_paint = 1
/decl/flooring/reinforced/circuit/green
name = "processing strata"
icon_base = "gcircuit"
/decl/flooring/reinforced/cult
name = "engraved floor"
desc = "Unsettling whispers waver from the surface..."
icon = 'icons/turf/flooring/cult.dmi'
icon_base = "cult"
build_type = null
has_damage_range = 6
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
can_paint = null
/decl/flooring/lava // Defining this in case someone DOES step on lava and survive. Somehow.
name = "lava"
desc = "Lava. Y'know. Sets you on fire. AAAAAAAAAAA"
icon = 'icons/turf/outdoors.dmi'
icon_base = "lava"
is_plating = TRUE
flags = 0
footstep_sounds = list("human" = list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'))