diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index c2d04d9c93..fef25b9d10 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -35,42 +35,24 @@ datum/controller/game_controller/New()
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
datum/controller/game_controller/proc/setup()
- spawn(20)
- createRandomZlevel()
setup_objects()
setupgenetics()
SetupXenoarch()
transfer_controller = new
+ admin_notice("Initializations complete.", R_DEBUG)
+#if UNIT_TEST
+#define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed.
+#else
+#define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); }
+#endif
datum/controller/game_controller/proc/setup_objects()
- admin_notice("Initializing objects", R_DEBUG)
- sleep(-1)
- for(var/atom/movable/object in world)
- if(!QDELETED(object))
- object.initialize()
-
- admin_notice("Initializing areas", R_DEBUG)
- sleep(-1)
- for(var/area/area in all_areas)
- area.initialize()
-
- admin_notice("Initializing pipe networks", R_DEBUG)
- sleep(-1)
- for(var/obj/machinery/atmospherics/machine in machines)
- machine.build_network()
-
- admin_notice("Initializing atmos machinery.", R_DEBUG)
- sleep(-1)
- for(var/obj/machinery/atmospherics/unary/U in machines)
- if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
- var/obj/machinery/atmospherics/unary/vent_pump/T = U
- T.broadcast_status()
- else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
- var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
- T.broadcast_status()
+ #if !UNIT_TEST
+ var/initialized_objects = 0
+ #endif
// Set up antagonists.
populate_antag_type_list()
@@ -78,12 +60,50 @@ datum/controller/game_controller/proc/setup_objects()
//Set up spawn points.
populate_spawn_points()
+ admin_notice("Initializing Floor Decals", R_DEBUG)
+ var/list/turfs_with_decals = list()
+ for(var/obj/effect/floor_decal/D in world)
+ var/T = D.add_to_turf_decals()
+ if(T) turfs_with_decals |= T
+ CHECK_SLEEP_MASTER
+ for(var/item in turfs_with_decals)
+ var/turf/T = item
+ if(T.decals) T.apply_decals()
+ CHECK_SLEEP_MASTER
+ floor_decals_initialized = TRUE
+ sleep(1)
+
+ admin_notice("Initializing objects", R_DEBUG)
+ for(var/atom/movable/object in world)
+ if(!QDELETED(object))
+ object.initialize()
+ CHECK_SLEEP_MASTER
+ sleep(1)
+
+ admin_notice("Initializing areas", R_DEBUG)
+ for(var/area/area in all_areas)
+ area.initialize()
+ CHECK_SLEEP_MASTER
+ sleep(1)
+
+ admin_notice("Initializing pipe networks", R_DEBUG)
+ for(var/obj/machinery/atmospherics/machine in machines)
+ machine.build_network()
+ CHECK_SLEEP_MASTER
+
+ admin_notice("Initializing atmos machinery.", R_DEBUG)
+ for(var/obj/machinery/atmospherics/unary/U in machines)
+ if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
+ var/obj/machinery/atmospherics/unary/vent_pump/T = U
+ T.broadcast_status()
+ else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
+ var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
+ T.broadcast_status()
+ CHECK_SLEEP_MASTER
+
admin_notice("Initializing turbolifts", R_DEBUG)
for(var/thing in turbolifts)
var/obj/turbolift_map_holder/lift = thing
if(!QDELETED(lift))
lift.initialize()
- sleep(-1)
-
- admin_notice("Initializations complete.", R_DEBUG)
- sleep(-1)
+ CHECK_SLEEP_MASTER
diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm
index 56b503c7c7..b50ac335d9 100644
--- a/code/game/turfs/flooring/flooring_decals.dm
+++ b/code/game/turfs/flooring/flooring_decals.dm
@@ -14,22 +14,16 @@ var/list/floor_decals = list()
if(newcolour) color = newcolour
..(newloc)
+// VOREStation Edit - Hack to workaround byond crash bug
/obj/effect/floor_decal/initialize()
- if(supplied_dir) set_dir(supplied_dir)
+ if(!floor_decals_initialized || !loc || QDELETED(src))
+ return
+ add_to_turf_decals()
var/turf/T = get_turf(src)
- if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor))
- var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]"
- if(!floor_decals[cache_key])
- var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir)
- I.layer = T.layer
- I.color = src.color
- I.alpha = src.alpha
- floor_decals[cache_key] = I
- if(!T.decals) T.decals = list()
- T.decals |= floor_decals[cache_key]
- T.overlays |= floor_decals[cache_key]
+ T.apply_decals()
qdel(src)
return
+// VOREStation Edit End
/obj/effect/floor_decal/reset
name = "reset marker"
@@ -55,6 +49,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/black/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/black/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/black/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/black/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/black/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/black/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/black/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/blue
name = "blue corner"
color = COLOR_BLUE_GRAY
@@ -65,6 +77,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/blue/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/blue/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/blue/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/blue/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/blue/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/blue/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/blue/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/paleblue
name = "pale blue corner"
color = COLOR_PALE_BLUE_GRAY
@@ -75,6 +105,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/paleblue/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/paleblue/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/paleblue/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/paleblue/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/paleblue/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/paleblue/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/paleblue/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/green
name = "green corner"
color = COLOR_GREEN_GRAY
@@ -85,6 +133,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/green/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/green/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/green/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/green/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/green/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/green/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/green/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/lime
name = "lime corner"
color = COLOR_PALE_GREEN_GRAY
@@ -95,6 +161,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/lime/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/lime/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/lime/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/lime/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/lime/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/lime/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/lime/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/yellow
name = "yellow corner"
color = COLOR_BROWN
@@ -105,6 +189,27 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/yellow/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/yellow/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/yellow/full
+ icon_state = "corner_white_full"
+
+/obj/effect/floor_decal/corner/yellow/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/yellow/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/yellow/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/yellow/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/yellow/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/beige
name = "beige corner"
color = COLOR_BEIGE
@@ -115,6 +220,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/beige/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/beige/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/beige/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/beige/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/beige/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/beige/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/beige/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/red
name = "red corner"
color = COLOR_RED_GRAY
@@ -125,6 +248,27 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/red/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/red/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/red/full
+ icon_state = "corner_white_full"
+
+/obj/effect/floor_decal/corner/red/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/red/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/red/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/red/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/red/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/pink
name = "pink corner"
color = COLOR_PALE_RED_GRAY
@@ -135,6 +279,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/pink/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/pink/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/pink/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/pink/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/pink/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/pink/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/pink/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/purple
name = "purple corner"
color = COLOR_PURPLE_GRAY
@@ -145,6 +307,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/purple/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/purple/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/purple/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/purple/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/purple/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/purple/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/purple/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/mauve
name = "mauve corner"
color = COLOR_PALE_PURPLE_GRAY
@@ -155,6 +335,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/mauve/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/mauve/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/mauve/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/mauve/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/mauve/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/mauve/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/mauve/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/orange
name = "orange corner"
color = COLOR_DARK_ORANGE
@@ -165,6 +363,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/orange/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/orange/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/orange/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/orange/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/orange/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/orange/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/orange/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/brown
name = "brown corner"
color = COLOR_DARK_BROWN
@@ -175,6 +391,25 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/brown/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/brown/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/brown/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/brown/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/brown/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/brown/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/brown/bordercee
+ icon_state = "bordercolorcee"
+
+
/obj/effect/floor_decal/corner/white
name = "white corner"
icon_state = "corner_white"
@@ -185,6 +420,24 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/white/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/white/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/white/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/white/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/white/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/white/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/white/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/corner/grey
name = "grey corner"
color = "#8D8C8C"
@@ -195,6 +448,49 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/corner/grey/full
icon_state = "corner_white_full"
+/obj/effect/floor_decal/corner/grey/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/grey/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/grey/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/grey/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/grey/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/grey/bordercee
+ icon_state = "bordercolorcee"
+
+/obj/effect/floor_decal/corner/lightgrey
+ name = "lightgrey corner"
+ color = "#A8B2B6"
+
+/obj/effect/floor_decal/corner/lightgrey/diagonal
+ icon_state = "corner_white_diagonal"
+
+/obj/effect/floor_decal/corner/lightgrey/three_quarters
+ icon_state = "corner_white_three_quarters"
+
+/obj/effect/floor_decal/corner/lightgrey/border
+ icon_state = "bordercolor"
+
+/obj/effect/floor_decal/corner/lightgrey/bordercorner
+ icon_state = "bordercolorcorner"
+
+/obj/effect/floor_decal/corner/lightgrey/bordercorner2
+ icon_state = "bordercolorcorner2"
+
+/obj/effect/floor_decal/corner/lightgrey/borderfull
+ icon_state = "bordercolorfull"
+
+/obj/effect/floor_decal/corner/lightgrey/bordercee
+ icon_state = "bordercolorcee"
+
/obj/effect/floor_decal/spline/plain
name = "spline - plain"
icon_state = "spline_plain"
@@ -213,7 +509,7 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/spline/fancy/wood/cee
icon_state = "spline_fancy_cee"
-/obj/effect/floor_decal/spline/fancy/wood/full
+/obj/effect/floor_decal/spline/fancy/wood/three_quarters
icon_state = "spline_fancy_full"
/obj/effect/floor_decal/industrial/warning
@@ -229,6 +525,19 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/industrial/warning/cee
icon_state = "warningcee"
+/obj/effect/floor_decal/industrial/danger
+ name = "hazard stripes"
+ icon_state = "danger"
+
+/obj/effect/floor_decal/industrial/danger/corner
+ icon_state = "dangercorner"
+
+/obj/effect/floor_decal/industrial/danger/full
+ icon_state = "dangerfull"
+
+/obj/effect/floor_decal/industrial/danger/cee
+ icon_state = "dangercee"
+
/obj/effect/floor_decal/industrial/warning/dust
name = "hazard stripes"
icon_state = "warning_dust"
@@ -403,4 +712,441 @@ var/list/floor_decals = list()
icon_state = "white_d2"
/obj/effect/floor_decal/sign/dock/three
- icon_state = "white_d3"
\ No newline at end of file
+ icon_state = "white_d3"
+
+/obj/effect/floor_decal/rust
+ name = "rust"
+ icon_state = "rust"
+
+/obj/effect/floor_decal/rust/mono_rusted1
+ icon_state = "mono_rusted1"
+
+/obj/effect/floor_decal/rust/mono_rusted2
+ icon_state = "mono_rusted2"
+
+/obj/effect/floor_decal/rust/mono_rusted3
+ icon_state = "mono_rusted3"
+
+/obj/effect/floor_decal/rust/part_rusted1
+ icon_state = "part_rusted1"
+
+/obj/effect/floor_decal/rust/part_rusted2
+ icon_state = "part_rusted2"
+
+/obj/effect/floor_decal/rust/part_rusted3
+ icon_state = "part_rusted3"
+
+/obj/effect/floor_decal/rust/color_rusted
+ icon_state = "color_rusted"
+
+/obj/effect/floor_decal/rust/color_rustedcorner
+ icon_state = "color_rustedcorner"
+
+/obj/effect/floor_decal/rust/color_rustedfull
+ icon_state = "color_rustedfull"
+
+/obj/effect/floor_decal/rust/color_rustedcee
+ icon_state = "color_rustedcee"
+
+/obj/effect/floor_decal/rust/steel_decals_rusted1
+ icon_state = "steel_decals_rusted1"
+
+/obj/effect/floor_decal/rust/steel_decals_rusted2
+ icon_state = "steel_decals_rusted2"
+
+//Old tile
+
+/obj/effect/floor_decal/corner_oldtile
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+
+/obj/effect/floor_decal/corner_oldtile/white
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#d9d9d9"
+
+/obj/effect/floor_decal/corner_oldtile/white/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/white/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/blue
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#8ba7ad"
+
+/obj/effect/floor_decal/corner_oldtile/blue/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/blue/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/yellow
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#8c6d46"
+
+/obj/effect/floor_decal/corner_oldtile/yellow/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/yellow/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/gray
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#687172"
+
+/obj/effect/floor_decal/corner_oldtile/gray/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/gray/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/beige
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#385e60"
+
+/obj/effect/floor_decal/corner_oldtile/beige/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/beige/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/red
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#964e51"
+
+/obj/effect/floor_decal/corner_oldtile/red/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/red/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/purple
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#906987"
+
+/obj/effect/floor_decal/corner_oldtile/purple/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/purple/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+/obj/effect/floor_decal/corner_oldtile/green
+ name = "corner oldtile"
+ icon_state = "corner_oldtile"
+ color = "#46725c"
+
+/obj/effect/floor_decal/corner_oldtile/green/diagonal
+ name = "corner oldtile diagonal"
+ icon_state = "corner_oldtile_diagonal"
+
+/obj/effect/floor_decal/corner_oldtile/green/full
+ name = "corner oldtile full"
+ icon_state = "corner_oldtile_full"
+
+//Kafel
+
+/obj/effect/floor_decal/corner_kafel
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+
+/obj/effect/floor_decal/corner_kafel/white
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#d9d9d9"
+
+/obj/effect/floor_decal/corner_kafel/white/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/white/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/blue
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#8ba7ad"
+
+/obj/effect/floor_decal/corner_kafel/blue/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/blue/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/yellow
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#8c6d46"
+
+/obj/effect/floor_decal/corner_kafel/yellow/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/yellow/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/gray
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#687172"
+
+/obj/effect/floor_decal/corner_kafel/gray/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/gray/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/beige
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#385e60"
+
+/obj/effect/floor_decal/corner_kafel/beige/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/beige/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/red
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#964e51"
+
+/obj/effect/floor_decal/corner_kafel/red/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/red/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/purple
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#906987"
+
+/obj/effect/floor_decal/corner_kafel/purple/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/purple/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+/obj/effect/floor_decal/corner_kafel/green
+ name = "corner kafel"
+ icon_state = "corner_kafel"
+ color = "#46725c"
+
+/obj/effect/floor_decal/corner_kafel/green/diagonal
+ name = "corner kafel diagonal"
+ icon_state = "corner_kafel_diagonal"
+
+/obj/effect/floor_decal/corner_kafel/green/full
+ name = "corner kafel full"
+ icon_state = "corner_kafel_full"
+
+//Techfloor
+
+/obj/effect/floor_decal/corner_techfloor_gray
+ name = "corner techfloorgray"
+ icon_state = "corner_techfloor_gray"
+
+/obj/effect/floor_decal/corner_techfloor_gray/diagonal
+ name = "corner techfloorgray diagonal"
+ icon_state = "corner_techfloor_gray_diagonal"
+
+/obj/effect/floor_decal/corner_techfloor_gray/full
+ name = "corner techfloorgray full"
+ icon_state = "corner_techfloor_gray_full"
+
+/obj/effect/floor_decal/corner_techfloor_grid
+ name = "corner techfloorgrid"
+ icon_state = "corner_techfloor_grid"
+
+/obj/effect/floor_decal/corner_techfloor_grid/diagonal
+ name = "corner techfloorgrid diagonal"
+ icon_state = "corner_techfloor_grid_diagonal"
+
+/obj/effect/floor_decal/corner_techfloor_grid/full
+ name = "corner techfloorgrid full"
+ icon_state = "corner_techfloor_grid_full"
+
+/obj/effect/floor_decal/corner_steel_grid
+ name = "corner steel_grid"
+ icon_state = "steel_grid"
+
+/obj/effect/floor_decal/corner_steel_grid/diagonal
+ name = "corner tsteel_grid diagonal"
+ icon_state = "steel_grid_diagonal"
+
+/obj/effect/floor_decal/corner_steel_grid/full
+ name = "corner steel_grid full"
+ icon_state = "steel_grid_full"
+
+/obj/effect/floor_decal/borderfloor
+ name = "border floor"
+ icon_state = "borderfloor"
+
+/obj/effect/floor_decal/borderfloor/corner
+ icon_state = "borderfloorcorner"
+
+/obj/effect/floor_decal/borderfloor/corner2
+ icon_state = "borderfloorcorner2"
+
+/obj/effect/floor_decal/borderfloor/full
+ icon_state = "borderfloorfull"
+
+/obj/effect/floor_decal/borderfloor/cee
+ icon_state = "borderfloorcee"
+
+/obj/effect/floor_decal/borderfloorblack
+ name = "border floor"
+ icon_state = "borderfloor_black"
+
+/obj/effect/floor_decal/borderfloorblack/corner
+ icon_state = "borderfloorcorner_black"
+
+/obj/effect/floor_decal/borderfloorblack/corner2
+ icon_state = "borderfloorcorner2_black"
+
+/obj/effect/floor_decal/borderfloorblack/full
+ icon_state = "borderfloorfull_black"
+
+/obj/effect/floor_decal/borderfloorblack/cee
+ icon_state = "borderfloorcee_black"
+
+/obj/effect/floor_decal/borderfloorwhite
+ name = "border floor"
+ icon_state = "borderfloor_white"
+
+/obj/effect/floor_decal/borderfloorwhite/corner
+ icon_state = "borderfloorcorner_white"
+
+/obj/effect/floor_decal/borderfloorwhite/corner2
+ icon_state = "borderfloorcorner2_white"
+
+/obj/effect/floor_decal/borderfloorwhite/full
+ icon_state = "borderfloorfull_white"
+
+/obj/effect/floor_decal/borderfloorwhite/cee
+ icon_state = "borderfloorcee_white"
+
+/obj/effect/floor_decal/steeldecal
+ name = "steel decal"
+ icon_state = "steel_decals1"
+
+/obj/effect/floor_decal/steeldecal/steel_decals1
+ icon_state = "steel_decals1"
+
+/obj/effect/floor_decal/steeldecal/steel_decals2
+ icon_state = "steel_decals2"
+
+/obj/effect/floor_decal/steeldecal/steel_decals3
+ icon_state = "steel_decals3"
+
+/obj/effect/floor_decal/steeldecal/steel_decals4
+ icon_state = "steel_decals4"
+
+/obj/effect/floor_decal/steeldecal/steel_decals5
+ icon_state = "steel_decals5"
+
+/obj/effect/floor_decal/steeldecal/steel_decals6
+ icon_state = "steel_decals6"
+
+/obj/effect/floor_decal/steeldecal/steel_decals7
+ icon_state = "steel_decals7"
+
+/obj/effect/floor_decal/steeldecal/steel_decals8
+ icon_state = "steel_decals8"
+
+/obj/effect/floor_decal/steeldecal/steel_decals9
+ icon_state = "steel_decals9"
+
+/obj/effect/floor_decal/steeldecal/steel_decals10
+ icon_state = "steel_decals10"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central1
+ icon_state = "steel_decals_central1"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central2
+ icon_state = "steel_decals_central2"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central3
+ icon_state = "steel_decals_central3"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central4
+ icon_state = "steel_decals_central4"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central5
+ icon_state = "steel_decals_central5"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central6
+ icon_state = "steel_decals_central6"
+
+/obj/effect/floor_decal/steeldecal/steel_decals_central7
+ icon_state = "steel_decals_central7"
+
+
+/obj/effect/floor_decal/techfloor
+ name = "techfloor edges"
+ icon_state = "techfloor_edges"
+
+/obj/effect/floor_decal/techfloor/corner
+ name = "techfloor corner"
+ icon_state = "techfloor_corners"
+
+/obj/effect/floor_decal/techfloor/orange
+ name = "techfloor edges"
+ icon_state = "techfloororange_edges"
+
+/obj/effect/floor_decal/techfloor/orange/corner
+ name = "techfloor corner"
+ icon_state = "techfloororange_corners"
+
+/obj/effect/floor_decal/techfloor/hole
+ name = "hole left"
+ icon_state = "techfloor_hole_left"
+
+/obj/effect/floor_decal/techfloor/hole/right
+ name = "hole right"
+ icon_state = "techfloor_hole_right"
+
+
+//Grass for ship garden
+
+/obj/effect/floor_decal/grass_edge
+ name = "grass edge"
+ icon_state = "grass_edge"
+
+/obj/effect/floor_decal/grass_edge/corner
+ name = "grass edge"
+ icon_state = "grass_edge_corner"
diff --git a/code/game/turfs/flooring/turf_overlay_holder.dm b/code/game/turfs/flooring/turf_overlay_holder.dm
new file mode 100644
index 0000000000..a0326b8240
--- /dev/null
+++ b/code/game/turfs/flooring/turf_overlay_holder.dm
@@ -0,0 +1,90 @@
+//
+// Initialize floor decals! Woo! This is crazy.
+//
+
+var/global/floor_decals_initialized = FALSE
+
+// The Turf Decal Holder
+// Since it is unsafe to add overlays to turfs, we hold them here for now.
+// Since I want this object to basically not exist, I am modeling it in part after lighting_overlay
+/atom/movable/turf_overlay_holder
+ name = "turf overlay holder"
+ density = 0
+ simulated = 0
+ anchored = 1
+ layer = TURF_LAYER
+ icon = null
+ icon_state = null
+ mouse_opacity = 0
+ auto_init = 0
+
+/atom/movable/turf_overlay_holder/New(var/atom/newloc)
+ ..()
+ verbs.Cut()
+ var/turf/T = loc
+ T.overlay_holder = src
+
+/atom/movable/turf_overlay_holder/Destroy()
+ if(loc)
+ var/turf/T = loc
+ if(T.overlay_holder == src)
+ T.overlay_holder = null
+ . = ..()
+
+// Variety of overrides so the overlays don't get affected by weird things.
+/atom/movable/turf_overlay_holder/ex_act()
+ return
+
+/atom/movable/turf_overlay_holder/singularity_act()
+ return
+
+/atom/movable/turf_overlay_holder/singularity_pull()
+ return
+
+/atom/movable/turf_overlay_holder/forceMove()
+ return 0 //should never move
+
+/atom/movable/turf_overlay_holder/Move()
+ return 0
+
+/atom/movable/turf_overlay_holder/throw_at()
+ return 0
+
+/obj/effect/floor_decal/proc/add_to_turf_decals()
+ if(src.supplied_dir) src.set_dir(src.supplied_dir)
+ var/turf/T = get_turf(src)
+ if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor))
+ var/cache_key = "[src.alpha]-[src.color]-[src.dir]-[src.icon_state]-[T.layer]"
+ var/image/I = floor_decals[cache_key]
+ if(!I)
+ I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir)
+ I.layer = T.layer
+ I.color = src.color
+ I.alpha = src.alpha
+ floor_decals[cache_key] = I
+ if(!T.decals) T.decals = list()
+ //world.log << "About to add img:\ref[I] onto decals at turf:\ref[T] ([T.x],[T.y],[T.z]) which has appearance:\ref[T.appearance] and decals.len=[T.decals.len]"
+ T.decals += I
+ return T
+ // qdel(D)
+ src.loc = null
+ src.tag = null
+
+// Changes to turf to let us do this
+/turf
+ var/atom/movable/turf_overlay_holder/overlay_holder = null
+
+// After a turf change, destroy the old overlay holder since we will have lost access to it.
+/turf/post_change()
+ var/atom/movable/turf_overlay_holder/TOH = locate(/atom/movable/turf_overlay_holder, src)
+ if(TOH)
+ qdel(TOH)
+ ..()
+
+/turf/proc/apply_decals()
+ if(decals)
+ if(!overlay_holder)
+ overlay_holder = new(src)
+ overlay_holder.overlays = src.decals
+ else if(overlay_holder)
+ overlay_holder.overlays.Cut()
diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm
index 0ad44622b7..007108c72e 100644
--- a/code/game/turfs/simulated/floor_icon.dm
+++ b/code/game/turfs/simulated/floor_icon.dm
@@ -60,8 +60,11 @@ var/list/flooring_cache = list()
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)
- if(decals && decals.len)
- overlays |= decals
+ // VOREStation Edit - Hack workaround to byond crash bug
+ //if(decals && decals.len)
+ //overlays |= decals
+ apply_decals()
+ // VOREStation Edit End
if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo
icon = 'icons/turf/flooring/plating.dmi'
diff --git a/polaris.dme b/polaris.dme
index e60e603d5b..7c8dfd1d64 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1021,6 +1021,7 @@
#include "code\game\turfs\flooring\flooring.dm"
#include "code\game\turfs\flooring\flooring_decals.dm"
#include "code\game\turfs\flooring\flooring_premade.dm"
+#include "code\game\turfs\flooring\turf_overlay_holder.dm"
#include "code\game\turfs\initialization\init.dm"
#include "code\game\turfs\initialization\maintenance.dm"
#include "code\game\turfs\simulated\floor.dm"