From 10c8586db01548c1b32cc632de0aa03946638d1d Mon Sep 17 00:00:00 2001 From: Woodratt Date: Mon, 21 Aug 2017 14:16:59 -0700 Subject: [PATCH] Rough port of https://github.com/VOREStation/VOREStation/commit/a8c9bb786aabedfe715b9ab354a68cd32327e12d Unsure if I even did it correctly, but seems to function in the brief tests done, no compile errors. In preparation of porting the massive number of floor decals for the new map. --- code/controllers/master_controller.dm | 82 +- code/game/turfs/flooring/flooring_decals.dm | 774 +++++++++++++++++- .../turfs/flooring/turf_overlay_holder.dm | 90 ++ code/game/turfs/simulated/floor_icon.dm | 7 +- polaris.dme | 1 + 5 files changed, 907 insertions(+), 47 deletions(-) create mode 100644 code/game/turfs/flooring/turf_overlay_holder.dm 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"