diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm
index 3afbcae374..3fda63b5aa 100644
--- a/code/controllers/subsystems/chat.dm
+++ b/code/controllers/subsystems/chat.dm
@@ -54,17 +54,12 @@ SUBSYSTEM_DEF(chat)
var/client/C = CLIENT_FROM_VAR(I) //Grab us a client if possible
if(!C)
- return
-
- if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
- //Send it to the old style output window.
+ continue // No client? No care.
+ else if(C.chatOutput.broken)
DIRECT_OUTPUT(C, original_message)
continue
-
- // // Client still loading, put their messages in a queue - Actually don't, logged already in database.
- // if(!C.chatOutput.loaded && C.chatOutput.message_queue && islist(C.chatOutput.message_queue))
- // C.chatOutput.message_queue[++C.chatOutput.message_queue.len] = messageStruct
- // continue
+ else if(!C.chatOutput.loaded)
+ continue // If not loaded yet, do nothing and history-sending on load will get it.
LAZYINITLIST(msg_queue[C])
msg_queue[C][++msg_queue[C].len] = messageStruct
@@ -72,16 +67,12 @@ SUBSYSTEM_DEF(chat)
var/client/C = CLIENT_FROM_VAR(target) //Grab us a client if possible
if(!C)
- return
-
- if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
+ return // No client? No care.
+ else if(C.chatOutput.broken)
DIRECT_OUTPUT(C, original_message)
return
-
- // // Client still loading, put their messages in a queue - Actually don't, logged already in database.
- // if(!C.chatOutput.loaded && C.chatOutput.message_queue && islist(C.chatOutput.message_queue))
- // C.chatOutput.message_queue[++C.chatOutput.message_queue.len] = messageStruct
- // return
+ else if(!C.chatOutput.loaded)
+ return // If not loaded yet, do nothing and history-sending on load will get it.
LAZYINITLIST(msg_queue[C])
msg_queue[C][++msg_queue[C].len] = messageStruct
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index 70ea20a378..8608cb8ce1 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -53,7 +53,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/simulated/floor_types_eris.dm b/code/game/turfs/simulated/floor_types_eris.dm
new file mode 100644
index 0000000000..f7ccae4511
--- /dev/null
+++ b/code/game/turfs/simulated/floor_types_eris.dm
@@ -0,0 +1,980 @@
+
+////////////////////////////
+/// 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
+
+/decl/flooring/tiling/eris/steel
+ name = "steel floor"
+ icon_base = "tiles"
+ icon = 'icons/turf/flooring/eris/tiles_steel.dmi'
+ build_type = /obj/item/stack/tile/floor/eris/steel
+ //footstep_sound = "floor"
+
+/decl/flooring/tiling/eris/steel/panels
+ icon_base = "panels"
+ build_type = /obj/item/stack/tile/floor/eris/steel/panels
+
+/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
+
+/decl/flooring/tiling/eris/steel/bar_dance
+ name = "dancefloor"
+ icon_base = "bar_dance"
+ build_type = /obj/item/stack/tile/floor/eris/steel/bar_dance
+
+/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
+
+/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
+ //footstep_sound = "floor"
+
+/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
+ //footstep_sound = "floor"
+
+/decl/flooring/tiling/eris/techmaint
+ name = "techmaint floor"
+ icon_base = "techmaint"
+ icon = 'icons/turf/flooring/eris/tiles_maint.dmi'
+ build_type = /obj/item/stack/tile/floor/eris/techmaint
+ //footstep_sound = "floor"
+
+/decl/flooring/tiling/eris/techmaint_perforated
+ name = "techmaint floor"
+ icon_base = "techmaint_perforated"
+ icon = 'icons/turf/flooring/eris/tiles_maint.dmi'
+ build_type = /obj/item/stack/tile/floor/eris/techmaint/perforated
+ //footstep_sound = "floor"
+
+/decl/flooring/tiling/eris/techmaint_panels
+ name = "techmaint floor"
+ icon_base = "techmaint_panels"
+ icon = 'icons/turf/flooring/eris/tiles_maint.dmi'
+ build_type = /obj/item/stack/tile/floor/eris/techmaint/panels
+ //footstep_sound = "floor"
+
+/decl/flooring/tiling/eris/techmaint_cargo
+ name = "techmaint floor"
+ icon_base = "techmaint_cargo"
+ icon = 'icons/turf/flooring/eris/tiles_maint.dmi'
+ build_type = /obj/item/stack/tile/floor/eris/techmaint/cargo
+ //footstep_sound = "floor"
+
+
+///////////////////////
+/// 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
+ //build_type = /obj/item/stack/material/steel
+
+ /* Eris features we lack on flooring decls
+ plating_type = /decl/flooring/reinforced/plating/under
+ is_plating = TRUE
+ 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
+
+ //build_type = /obj/item/stack/material/underplating
+
+ /* Eris features we lack on flooring decls
+ plating_type = /decl/flooring/reinforced/plating/hull
+ is_plating = TRUE
+ 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
+
+ /* Eris features we lack on flooring decls
+ try_update_icon = 0
+ plating_type = null
+ is_plating = TRUE
+ 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/hear_say.dm b/code/modules/mob/hear_say.dm
index cede44eecf..c5685aa0dc 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -178,35 +178,35 @@
if(prob(20))
to_chat(src, "You feel your headset vibrate but can hear nothing from it!")
else
- on_hear_radio(part_a, speaker_name, track, part_b, message)
+ on_hear_radio(part_a, speaker_name, track, part_b, message, part_c)
/proc/say_timestamp()
return "\[[stationtime2text()]\]"
-/mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, formatted)
- var/final_message = "[part_a][speaker_name][part_b][formatted]"
+/mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, formatted, part_c)
+ var/final_message = "[part_a][speaker_name][part_b][formatted][part_c]"
if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention))
final_message = "[final_message]"
to_chat(src, final_message)
-/mob/observer/dead/on_hear_radio(part_a, speaker_name, track, part_b, formatted)
- var/final_message = "[part_a][track][part_b][formatted]"
+/mob/observer/dead/on_hear_radio(part_a, speaker_name, track, part_b, formatted, part_c)
+ var/final_message = "[part_a][track][part_b][formatted][part_c]"
if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention))
final_message = "[final_message]"
to_chat(src, final_message)
-/mob/living/silicon/on_hear_radio(part_a, speaker_name, track, part_b, formatted)
+/mob/living/silicon/on_hear_radio(part_a, speaker_name, track, part_b, formatted, part_c)
var/time = say_timestamp()
- var/final_message = "[part_a][speaker_name][part_b][formatted]"
+ var/final_message = "[part_a][speaker_name][part_b][formatted][part_c]"
if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention))
final_message = "[time][final_message]"
else
final_message = "[time][final_message]"
to_chat(src, final_message)
-/mob/living/silicon/ai/on_hear_radio(part_a, speaker_name, track, part_b, formatted)
+/mob/living/silicon/ai/on_hear_radio(part_a, speaker_name, track, part_b, formatted, part_c)
var/time = say_timestamp()
- var/final_message = "[part_a][track][part_b][formatted]"
+ var/final_message = "[part_a][track][part_b][formatted][part_c]"
if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention))
final_message = "[time][final_message]"
else
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
index 6cc817a6f7..6c33b9c300 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
@@ -45,6 +45,9 @@
var/obj/prev_left_hand
var/obj/prev_right_hand
+ var/human_brute = 0
+ var/human_burn = 0
+
player_msg = "In this form, you can move a little faster, your health will regenerate as long as you have metal in you, and you can ventcrawl!"
can_buckle = TRUE //Blobsurfing
@@ -113,7 +116,9 @@
//Set the max
maxHealth = humanform.getMaxHealth()*2 //HUMANS, and their 'double health', bleh.
//Set us to their health, but, human health ignores robolimbs so we do it 'the hard way'
- health = maxHealth - humanform.getOxyLoss() - humanform.getToxLoss() - humanform.getCloneLoss() - humanform.getActualFireLoss() - humanform.getActualBruteLoss()
+ human_brute = humanform.getActualBruteLoss()
+ human_burn = humanform.getActualFireLoss()
+ health = maxHealth - humanform.getOxyLoss() - humanform.getToxLoss() - humanform.getCloneLoss() - human_brute - human_burn
//Alive, becoming dead
if((stat < DEAD) && (health <= 0))
@@ -151,6 +156,12 @@
healths.icon_state = "health7"
// All the damage and such to the blob translates to the human
+/mob/living/simple_mob/protean_blob/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1)
+ if(humanform)
+ return humanform.apply_effect(effect, effecttype, blocked, check_protection)
+ else
+ return ..()
+
/mob/living/simple_mob/protean_blob/adjustBruteLoss(var/amount)
if(humanform)
return humanform.adjustBruteLoss(amount)
@@ -181,6 +192,12 @@
else
return ..()
+/mob/living/simple_mob/protean_blob/adjustCloneLoss(amount)
+ if(humanform)
+ return humanform.adjustCloneLoss(amount)
+ else
+ return ..()
+
/mob/living/simple_mob/protean_blob/emp_act(severity)
if(humanform)
return humanform.emp_act(severity)
@@ -218,9 +235,9 @@
/mob/living/simple_mob/protean_blob/Life()
. = ..()
if(. && istype(refactory) && humanform)
- if(!healing && health < maxHealth && refactory.get_stored_material(DEFAULT_WALL_MATERIAL) >= 100)
+ if(!healing && (human_brute || human_burn) && refactory.get_stored_material(DEFAULT_WALL_MATERIAL) >= 100)
healing = humanform.add_modifier(/datum/modifier/protean/steel, origin = refactory)
- else if(healing && health == maxHealth)
+ else if(healing && !(human_brute || human_burn))
healing.expire()
healing = null
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
index 5b67d5e46e..ae59e957b6 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
@@ -1,3 +1,5 @@
+#define SLEEPER_INJECT_COST 600 // Note that this has unlimited supply unlike a borg hypo, so should be balanced accordingly
+
//Sleeper
/obj/item/device/dogborg/sleeper
name = "Medbelly"
@@ -11,7 +13,7 @@
var/min_health = -100
var/cleaning = 0
var/patient_laststat = null
- var/list/injection_chems = list("inaprovaline", "dexalin", "bicaridine", "kelotane","anti_toxin", "alkysine", "imidazoline", "spaceacillin", "paracetamol") //The borg is able to heal every damage type. As a nerf, they use 750 charge per injection.
+ var/list/injection_chems = list("inaprovaline", "dexalin", "bicaridine", "kelotane", "anti_toxin", "spaceacillin", "paracetamol") //The borg is able to heal every damage type. As a nerf, they use 750 charge per injection.
var/eject_port = "ingestion"
var/list/items_preserved = list()
var/UI_open = FALSE
@@ -403,7 +405,7 @@
to_chat(hound, "Your stomach is currently too full of fluids to secrete more fluids of this kind.")
else if(patient.reagents.get_reagent_amount(chem) + 10 <= 20) //No overdoses for you
patient.reagents.add_reagent(chem, inject_amount)
- drain(750) //-750 charge per injection
+ drain(SLEEPER_INJECT_COST)
var/units = round(patient.reagents.get_reagent_amount(chem))
to_chat(hound, "Injecting [units] unit\s of [SSchemistry.chemical_reagents[chem]] into occupant.") //If they were immersed, the reagents wouldn't leave with them.
@@ -703,3 +705,5 @@
icon_state = "sleeperc"
injection_chems = list("glucose","inaprovaline","tricordrazine")
max_item_count = 1
+
+#undef SLEEPER_INJECT_COST
\ No newline at end of file
diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm
index 881d3619c6..25486ac554 100644
--- a/code/modules/vchat/vchat_client.dm
+++ b/code/modules/vchat/vchat_client.dm
@@ -138,8 +138,9 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
//Perform DB shenanigans
/datum/chatOutput/proc/load_database()
set waitfor = FALSE
- var/list/results = vchat_get_messages(owner.ckey) //If there's bad performance on reconnects, look no further
- for(var/i in max(1, results.len - message_buffer)) // Only send them the number of buffered messages, instead of the ENTIRE log
+ // Only send them the number of buffered messages, instead of the ENTIRE log
+ var/list/results = vchat_get_messages(owner.ckey, message_buffer) //If there's bad performance on reconnects, look no further
+ for(var/i in results.len to 1 step -1)
var/list/message = results[i]
var/count = 10
to_chat_immediate(owner, message["time"], message["message"])
@@ -367,15 +368,13 @@ var/to_chat_src
time = world.time
var/client/C = CLIENT_FROM_VAR(target)
- if(C && C.chatOutput)
- if(C.chatOutput.broken)
- DIRECT_OUTPUT(C, original_message)
- return
-
- // // Client still loading, put their messages in a queue - Actually don't, logged already in database.
- // if(!C.chatOutput.loaded && C.chatOutput.message_queue && islist(C.chatOutput.message_queue))
- // C.chatOutput.message_queue[++C.chatOutput.message_queue.len] = list("time" = time, "message" = message)
- // return
+ if(!C)
+ return // No client? No care.
+ else if(C.chatOutput.broken)
+ DIRECT_OUTPUT(C, original_message)
+ return
+ else if(!C.chatOutput.loaded)
+ return // If not loaded yet, do nothing and history-sending on load will get it.
var/list/tojson = list("time" = time, "message" = message);
target << output(jsEncode(tojson), "htmloutput:putmessage")
diff --git a/code/modules/vchat/vchat_db.dm b/code/modules/vchat/vchat_db.dm
index 3fc0833aca..6ab20f42b6 100644
--- a/code/modules/vchat/vchat_db.dm
+++ b/code/modules/vchat/vchat_db.dm
@@ -108,12 +108,16 @@ GLOBAL_DATUM(vchatdb, /database)
return vchat_exec_update(messagedef)
-//Get a player's message history
-/proc/vchat_get_messages(var/ckey, var/oldest = 0)
+//Get a player's message history. If limit is supplied, messages will be in reverse order.
+/proc/vchat_get_messages(var/ckey, var/limit)
if(!ckey)
return
- var/list/getdef = list("SELECT * FROM messages WHERE ckey = ? AND worldtime >= ?", ckey, oldest)
+ var/list/getdef
+ if (limit)
+ getdef = list("SELECT * FROM messages WHERE ckey = ? ORDER BY id DESC LIMIT [text2num(limit)]", ckey)
+ else
+ getdef = list("SELECT * FROM messages WHERE ckey = ?", ckey)
return vchat_exec_query(getdef)
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 6409a23e1f..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/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index 3cb6b3807d..95884b3bc1 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -24194,24 +24194,6 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/chemistry)
-"aTc" = (
-/obj/effect/floor_decal/borderfloorwhite{
- dir = 1
- },
-/obj/effect/floor_decal/corner/paleblue/border{
- dir = 1
- },
-/obj/structure/closet/secure_closet/medical1,
-/obj/structure/cable/green{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/tiled/white,
-/area/tether/surfacebase/medical/chemistry)
"aTd" = (
/obj/structure/table/reinforced,
/obj/effect/floor_decal/borderfloorwhite{
@@ -30675,6 +30657,25 @@
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_three_hall)
+"mHO" = (
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 1
+ },
+/obj/structure/closet/secure_closet/medical1,
+/obj/structure/cable/green{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/item/weapon/reagent_containers/glass/beaker/vial/imidazoline,
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/chemistry)
"mIX" = (
/obj/structure/bed/chair/bay/chair{
dir = 4;
@@ -46224,7 +46225,7 @@ aed
afD
aDp
aSP
-aTc
+mHO
aTp
aUE
aUL
diff --git a/vorestation.dme b/vorestation.dme
index a818ed561a..88c10c5325 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1521,6 +1521,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\floor_types_vr.dm"
#include "code\game\turfs\simulated\lava.dm"
#include "code\game\turfs\simulated\wall_attacks.dm"