diff --git a/code/game/objects/structures/__structure.dm b/code/game/objects/structures/__structure.dm
index 7d04f64b169..33bb9fb9102 100644
--- a/code/game/objects/structures/__structure.dm
+++ b/code/game/objects/structures/__structure.dm
@@ -254,6 +254,12 @@
)
victim.standard_weapon_hit_effects(S, user, S.expend_attack_force()*2, BP_HEAD)
qdel(grab)
+ return TRUE
+ else if(can_buckle && !buckled_mob && istype(victim) && istype(user))
+ user.visible_message(SPAN_NOTICE("\The [user] attempts to put \the [victim] onto \the [src]!"))
+ if(do_after(user, 2 SECONDS, src) && !QDELETED(victim) && !QDELETED(user) && !QDELETED(grab) && user_buckle_mob(victim, user))
+ qdel(grab)
+ return TRUE
else if(atom_flags & ATOM_FLAG_CLIMBABLE)
var/obj/occupied = turf_is_crowded()
if (occupied)
diff --git a/code/game/objects/structures/_structure_icon.dm b/code/game/objects/structures/_structure_icon.dm
index 3f3c7e7e4ec..12bbc26f160 100644
--- a/code/game/objects/structures/_structure_icon.dm
+++ b/code/game/objects/structures/_structure_icon.dm
@@ -56,6 +56,7 @@ var/global/list/default_noblend_objects = list(/obj/machinery/door/window, /obj/
var/list/dirs
var/list/other_dirs
+ // TODO: Allow structures to limit dirs?
for(var/direction in global.alldirs)
var/turf/T = get_step(src, direction)
if(T)
diff --git a/code/game/objects/structures/beds/bed.dm b/code/game/objects/structures/beds/bed.dm
index fdcdff9a143..d46f354729b 100644
--- a/code/game/objects/structures/beds/bed.dm
+++ b/code/game/objects/structures/beds/bed.dm
@@ -2,12 +2,11 @@
// TODO by end of Q2 2025: Repath /obj/structure/bed/chair to just /obj/structure/chair.
// Remaining steps:
// - Move padding interactions and padding_color var onto an extension
-// - Allow /obj/structure/grab_attack to handle buckling
/obj/structure/bed
name = "bed"
desc = "A raised, padded platform for sleeping on. This one has straps for ensuring restful snoozing in microgravity."
- icon = 'icons/obj/furniture.dmi'
- icon_state = "bed"
+ icon = 'icons/obj/structures/furniture/bed.dmi'
+ icon_state = ICON_STATE_WORLD
anchored = TRUE
can_buckle = TRUE
buckle_dir = SOUTH
@@ -20,7 +19,6 @@
parts_type = /obj/item/stack/material/rods
user_comfort = 1
obj_flags = OBJ_FLAG_SUPPORT_MOB
- var/base_icon = "bed"
var/padding_color
/obj/structure/bed/user_can_mousedrop_onto(mob/user, atom/being_dropped, incapacitation_flags, params)
@@ -37,13 +35,16 @@
/obj/structure/bed/get_surgery_success_modifier(delicate)
return delicate ? -5 : 0
-/obj/structure/bed/update_material_name()
+/obj/structure/bed/update_material_name(override_name)
+ var/base_name = override_name || initial(name)
+ var/new_name = base_name
if(reinf_material)
- SetName("[reinf_material.adjective_name] [initial(name)]")
+ new_name = "[reinf_material.adjective_name] [base_name]"
else if(material)
- SetName("[material.adjective_name] [initial(name)]")
- else
- SetName(initial(name))
+ new_name = "[material.adjective_name] [base_name]"
+ if(name_prefix)
+ new_name = "[name_prefix] [new_name]"
+ SetName(new_name)
/obj/structure/bed/update_material_desc()
if(reinf_material)
@@ -51,10 +52,12 @@
else
desc = "[initial(desc)] It's made of [material.use_name]."
-// Reuse the cache/code from stools, todo maybe unify.
+/obj/structure/bed/proc/get_base_icon()
+ return ICON_STATE_WORLD
+
/obj/structure/bed/on_update_icon()
..()
- icon_state = base_icon
+ icon_state = get_base_icon()
if(istype(reinf_material))
if(material_alteration & MAT_FLAG_ALTERATION_COLOR)
add_overlay(overlay_image(icon, "[icon_state]_padding", padding_color || reinf_material.color, RESET_COLOR))
@@ -122,15 +125,6 @@
remove_padding()
return TRUE
-/obj/structure/bed/grab_attack(obj/item/grab/grab, mob/user)
- var/mob/living/victim = grab.get_affecting_mob()
- if(istype(victim) && istype(user))
- user.visible_message(SPAN_NOTICE("\The [user] attempts to put \the [victim] onto \the [src]!"))
- if(do_after(user, 2 SECONDS, src) && !QDELETED(victim) && !QDELETED(user) && !QDELETED(grab) && user_buckle_mob(victim, user))
- qdel(grab)
- return TRUE
- return ..()
-
/obj/structure/bed/proc/add_padding(var/padding_type, var/new_padding_color)
reinf_material = GET_DECL(padding_type)
padding_color = new_padding_color
@@ -149,7 +143,7 @@
/obj/structure/bed/psych
name = "psychiatrist's couch"
desc = "For prime comfort during psychiatric evaluations."
- icon_state = "psychbed"
+ icon = 'icons/obj/structures/furniture/bed_psych.dmi'
material = /decl/material/solid/organic/wood/walnut
/obj/structure/bed/psych/leather
diff --git a/code/game/objects/structures/beds/bedroll.dm b/code/game/objects/structures/beds/bedroll.dm
index 27d710d9cdb..27971d1b66f 100644
--- a/code/game/objects/structures/beds/bedroll.dm
+++ b/code/game/objects/structures/beds/bedroll.dm
@@ -1,7 +1,7 @@
/obj/item/bedroll
name = "bedroll"
desc = "A thick, padded bag big enough for a human to huddle in, rolled into a tight tube for easy-ish transport."
- icon = 'icons/obj/structures/bedroll.dmi'
+ icon = 'icons/obj/structures/bedroll_rolled.dmi'
icon_state = ICON_STATE_WORLD
w_class = ITEM_SIZE_LARGE
material = /decl/material/solid/organic/leather
@@ -44,8 +44,6 @@
desc = "A thick, padded bag big enough for a human to huddle in. It's better than sleeping on the ground."
user_comfort = 0.65
icon = 'icons/obj/structures/bedroll.dmi'
- icon_state = "bedroll"
- base_icon = "bedroll"
w_class = ITEM_SIZE_LARGE
anchored = FALSE
material = /decl/material/solid/organic/leather
diff --git a/code/game/objects/structures/beds/simple_bed.dm b/code/game/objects/structures/beds/simple_bed.dm
index 100527ea293..b12a5d5201e 100644
--- a/code/game/objects/structures/beds/simple_bed.dm
+++ b/code/game/objects/structures/beds/simple_bed.dm
@@ -1,6 +1,6 @@
/obj/structure/bed/simple
desc = "A slatted wooden bed."
- icon = 'icons/obj/structures/simple_bed.dmi'
+ icon = 'icons/obj/structures/furniture/bed_simple.dmi'
icon_state = "bed_padded_preview" // For map editor preview purposes
parts_type = /obj/item/stack/material/plank
material = /decl/material/solid/organic/wood/oak
diff --git a/code/game/objects/structures/beds/travois.dm b/code/game/objects/structures/beds/travois.dm
deleted file mode 100644
index b1ce37f8540..00000000000
--- a/code/game/objects/structures/beds/travois.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Travois used to drag mobs in low-tech settings.
- */
-// TODO: Should this really be a bed subtype?
-// Only really needs the base_icon and grab_attack handling from beds, doesn't it?
-/obj/structure/bed/travois
- name = "travois"
- anchored = FALSE
- icon_state = ICON_STATE_WORLD
- base_icon = ICON_STATE_WORLD
- icon = 'icons/obj/structures/travois.dmi'
- buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 6)
- movable_flags = MOVABLE_FLAG_WHEELED
- user_comfort = 0
- material = /decl/material/solid/organic/wood/oak
-
-/obj/structure/bed/travois/can_apply_padding()
- return FALSE
\ No newline at end of file
diff --git a/code/game/objects/structures/benches/bench.dm b/code/game/objects/structures/benches/bench.dm
index c2b6fb98c3b..8e8ed2688a3 100644
--- a/code/game/objects/structures/benches/bench.dm
+++ b/code/game/objects/structures/benches/bench.dm
@@ -2,109 +2,98 @@
/obj/structure/bed/chair/bench
name = "bench"
desc = "A simple slatted bench."
- icon = 'icons/obj/structures/benches.dmi'
- icon_state = "bench_standing"
- base_icon = "bench"
+ icon = 'icons/obj/structures/furniture/bench.dmi'
+ icon_state = ICON_STATE_WORLD + "_standing"
color = WOOD_COLOR_GENERIC
reinf_material = null
material = /decl/material/solid/organic/wood/oak
obj_flags = 0
anchored = TRUE
- var/connect_neighbors = TRUE
+ /// A bitfield of connected neighbors.
+ var/neighbors = 0
/obj/structure/bed/chair/bench/should_have_alpha_mask()
- return simulated && isturf(loc) && connect_neighbors && !(locate(/obj/structure/bed/chair/bench) in get_step(loc, SOUTH))
+ if(!simulated || !isturf(loc))
+ return FALSE
+ var/obj/structure/bed/chair/bench/south_neighbor = locate() in get_step(loc, SOUTH)
+ if(can_visually_connect_to(south_neighbor)) // if we're connected to a south neighbor don't add an alpha mask
+ return TRUE
+ return TRUE
-/obj/structure/bed/chair/bench/single
- name = "slatted seat"
- base_icon = "bench_standing"
- anchored = FALSE
- connect_neighbors = FALSE
+// TODO: make this use the generic structure smoothing system?
+/obj/structure/bed/chair/bench/can_visually_connect_to(var/obj/structure/bed/chair/bench/other)
+ return istype(other) && other.dir == dir && other.icon == icon && other.material == material
/obj/structure/bed/chair/bench/Initialize(mapload)
- . = ..()
- if(connect_neighbors)
- . = INITIALIZE_HINT_LATELOAD
+ ..()
+ return INITIALIZE_HINT_LATELOAD
/obj/structure/bed/chair/bench/LateInitialize(mapload)
..()
- if(connect_neighbors)
- if(mapload)
- update_base_icon()
- else
- update_neighbors()
+ if(mapload)
+ recalculate_connections()
+ else
+ update_neighbors()
/obj/structure/bed/chair/bench/Destroy()
var/oldloc = loc
. = ..()
- if(connect_neighbors)
- update_neighbors(oldloc)
+ update_neighbors(oldloc)
/obj/structure/bed/chair/bench/set_dir()
var/olddir = dir
. = ..()
- if(. && connect_neighbors)
+ if(.)
update_neighbors(update_dir = olddir, skip_icon_update = TRUE)
update_neighbors(update_dir = dir)
/obj/structure/bed/chair/bench/Move()
var/oldloc = loc
. = ..()
- if(. && connect_neighbors)
+ if(.)
update_neighbors(oldloc, skip_icon_update = TRUE)
update_neighbors(loc)
/obj/structure/bed/chair/bench/proc/update_neighbors(update_loc = loc, update_dir = dir, skip_icon_update)
- if(!connect_neighbors)
- return
if(!skip_icon_update)
- update_base_icon()
+ recalculate_connections()
if(!isturf(update_loc))
return
for(var/stepdir in list(turn(update_dir, -90), turn(update_dir, 90)))
for(var/obj/structure/bed/chair/bench/other in get_step(update_loc, stepdir))
- other.update_base_icon()
-
-/obj/structure/bed/chair/bench/proc/update_base_icon()
-
- if(!connect_neighbors)
- return
-
- base_icon = initial(base_icon)
+ other.recalculate_connections()
+// TODO: Make this use base structure smoothing eventually? Somehow?
+/obj/structure/bed/chair/bench/proc/recalculate_connections()
+ neighbors = 0
if(!isturf(loc))
- base_icon = "[base_icon]_standing"
+ neighbors = 0
else
- var/neighbors = 0
- var/left_dir = turn(dir, -90)
- var/right_dir = turn(dir, 90)
- for(var/checkdir in list(left_dir, right_dir))
+ for(var/checkdir in list(turn(dir, -90), turn(dir, 90)))
var/turf/check_turf = get_step(loc, checkdir)
for(var/obj/structure/bed/chair/bench/other in check_turf)
- if(other.connect_neighbors && other.dir == dir && initial(other.base_icon) == base_icon && other.material == material)
+ // TODO: Make this use normal structure smoothing helpers.
+ if(other.dir == dir && other.icon == icon && other.material == material)
neighbors |= checkdir
break
-
- if(neighbors & left_dir)
- if(neighbors & right_dir)
- base_icon = "[base_icon]_middle"
- else
- base_icon = "[base_icon]_right"
- else if(neighbors & right_dir)
- base_icon = "[base_icon]_left"
- else
- base_icon = "[base_icon]_standing"
-
update_icon()
-/obj/structure/bed/chair/bench/proc/get_material_icon()
- return material?.bench_icon
-
-/obj/structure/bed/chair/bench/update_materials()
+/obj/structure/bed/chair/bench/get_base_icon()
. = ..()
- var/icon/material_icon = get_material_icon()
- if(material_icon)
- icon = material_icon
+ var/left_dir = turn(dir, -90)
+ var/right_dir = turn(dir, 90)
+ if(neighbors & left_dir)
+ if(neighbors & right_dir)
+ . += "_middle"
+ else
+ . += "_right"
+ else if(neighbors & right_dir)
+ . += "_left"
+ else
+ . += "_standing"
+
+/obj/structure/bed/chair/bench/get_material_icon()
+ return material?.bench_icon || initial(icon)
/obj/structure/bed/chair/bench/mahogany
color = WOOD_COLOR_RICH
diff --git a/code/game/objects/structures/benches/lounge.dm b/code/game/objects/structures/benches/lounge.dm
index 046ccc3c034..b426a84b3f7 100644
--- a/code/game/objects/structures/benches/lounge.dm
+++ b/code/game/objects/structures/benches/lounge.dm
@@ -1,12 +1,11 @@
/obj/structure/bed/chair/bench/lounge
name = "lounge"
desc = "An elegant lounge, perfect for reclining on."
- icon = 'icons/obj/structures/lounge.dmi'
- icon_state = "lounge_standing"
- base_icon = "lounge"
+ icon = 'icons/obj/structures/furniture/lounge.dmi'
+// Just use the existing icon.
/obj/structure/bed/chair/bench/lounge/get_material_icon()
- return icon
+ return icon || initial(icon)
/obj/structure/bed/chair/bench/lounge/mapped
color = /decl/material/solid/organic/wood/mahogany::color
diff --git a/code/game/objects/structures/benches/pew.dm b/code/game/objects/structures/benches/pew.dm
index 272d62c5116..0b5f9211d81 100644
--- a/code/game/objects/structures/benches/pew.dm
+++ b/code/game/objects/structures/benches/pew.dm
@@ -1,18 +1,10 @@
/obj/structure/bed/chair/bench/pew
name = "pew"
desc = "A long bench with a backboard, commonly found in places of worship, courtrooms and so on. Not known for being particularly comfortable."
- icon = 'icons/obj/structures/pews.dmi'
- icon_state = "pew_standing"
- base_icon = "pew"
+ icon = 'icons/obj/structures/furniture/pew.dmi'
/obj/structure/bed/chair/bench/pew/get_material_icon()
- return material?.pew_icon
-
-/obj/structure/bed/chair/bench/pew/single
- name = "backed chair"
- desc = "A tall chair with a sturdy back. Not very comfortable."
- base_icon = "pew_standing"
- connect_neighbors = FALSE
+ return material?.pew_icon || initial(icon)
/obj/structure/bed/chair/bench/pew/mahogany
color = /decl/material/solid/organic/wood/mahogany::color
diff --git a/code/game/objects/structures/chairs/chairs.dm b/code/game/objects/structures/chairs/chairs.dm
index f2e6ebadec4..aa255dad7b9 100644
--- a/code/game/objects/structures/chairs/chairs.dm
+++ b/code/game/objects/structures/chairs/chairs.dm
@@ -1,13 +1,13 @@
-//YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete
+//YES, chairs are a type of bed. Hopefully this will be fixed by the end of Q2 2025.
/obj/structure/bed/chair
name = "chair"
desc = "You sit in this, either by will or force."
- icon_state = "chair_preview"
+ icon = 'icons/obj/structures/furniture/chair.dmi'
+ icon_state = "world_preview"
color = "#666666"
buckle_dir = 0
buckle_lying = 0 //force people to sit up in chairs when buckled
obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_SUPPORT_MOB
- base_icon = "chair"
user_comfort = 0.5
var/propelled = 0 // Check for fire-extinguisher-driven chairs
@@ -22,40 +22,50 @@
update_icon()
return ..()
-/obj/structure/bed/chair/on_update_icon()
- ..()
- icon_state = base_icon
+/// Returns an alternate icon based on our material.
+/// Mostly used by benches.
+/// TODO: Refactor to eliminate?
+/obj/structure/bed/chair/proc/get_material_icon()
+ return icon
+/obj/structure/bed/chair/update_materials()
+ . = ..()
+ var/icon/material_icon = get_material_icon()
+ if(material_icon)
+ icon = material_icon
+
+/obj/structure/bed/chair/on_update_icon()
+ ..() // handles setting icon_state to get_base_icon(), and adds padding
var/base_color = get_color()
var/reinf_color = padding_color || reinf_material?.color
- var/image/I = image(icon, "[base_icon]_over")
+ var/image/I = image(icon, "[icon_state]_over")
I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER
if(material && (material_alteration & MAT_FLAG_ALTERATION_COLOR))
I.appearance_flags |= RESET_COLOR
I.color = base_color
add_overlay(I)
- I = image(icon, "[base_icon]_armrest")
+ I = image(icon, "[icon_state]_armrest")
I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER
if(material && (material_alteration & MAT_FLAG_ALTERATION_COLOR))
I.appearance_flags |= RESET_COLOR
I.color = base_color
add_overlay(I)
if(reinf_material)
- I = image(icon, "[base_icon]_padding_over")
+ I = image(icon, "[icon_state]_padding_over")
I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER
if(material_alteration & MAT_FLAG_ALTERATION_COLOR)
I.appearance_flags |= RESET_COLOR
I.color = reinf_color
add_overlay(I)
- I = image(icon, "[base_icon]_padding_armrest")
+ I = image(icon, "[icon_state]_padding_armrest")
I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER
if(material_alteration & MAT_FLAG_ALTERATION_COLOR)
I.appearance_flags |= RESET_COLOR
I.color = reinf_color
add_overlay(I)
if(has_special_overlay)
- I = image(icon, "[base_icon]_special")
+ I = image(icon, "[icon_state]_special")
I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER
if(material && (material_alteration & MAT_FLAG_ALTERATION_COLOR))
I.appearance_flags |= RESET_COLOR
@@ -97,8 +107,7 @@
/obj/structure/bed/chair/comfy
name = "comfy chair"
desc = "It's a chair. It looks comfy."
- icon_state = "comfychair_preview"
- base_icon = "comfychair"
+ icon = 'icons/obj/structures/furniture/chair_comfy.dmi'
reinf_material = /decl/material/solid/organic/cloth
/obj/structure/bed/chair/comfy/unpadded
@@ -127,8 +136,7 @@
/obj/structure/bed/chair/comfy/captain
name = "captain chair"
desc = "It's a chair. Only for the highest ranked asses."
- icon_state = "capchair_preview"
- base_icon = "capchair"
+ icon = 'icons/obj/structures/furniture/chair_captain.dmi'
buckle_movable = 1
material = /decl/material/solid/metal/steel
reinf_material = /decl/material/solid/organic/cloth
@@ -138,8 +146,7 @@
/obj/structure/bed/chair/armchair
name = "armchair"
desc = "It's an armchair. It looks comfy."
- icon_state = "armchair_preview"
- base_icon = "armchair"
+ icon = 'icons/obj/structures/furniture/armchair.dmi'
reinf_material = /decl/material/solid/organic/cloth
/obj/structure/bed/chair/armchair/unpadded
@@ -167,8 +174,7 @@
/obj/structure/bed/chair/office
name = "office chair"
- icon_state = "officechair_preview"
- base_icon = "officechair"
+ icon = 'icons/obj/structures/furniture/chair_office.dmi'
anchored = FALSE
buckle_movable = 1
movable_flags = MOVABLE_FLAG_WHEELED
@@ -188,7 +194,8 @@
/obj/structure/bed/chair/office/Bump(atom/A)
..()
- if(!buckled_mob) return
+ if(!buckled_mob)
+ return
if(propelled)
var/mob/living/occupant = unbuckle_mob()
@@ -219,8 +226,7 @@
/obj/structure/bed/chair/office/comfy
name = "comfy office chair"
desc = "It's an office chair. It looks comfy."
- icon_state = "comfyofficechair_preview"
- base_icon = "comfyofficechair"
+ icon = 'icons/obj/structures/furniture/chair_comfy_office.dmi'
/obj/structure/bed/chair/office/comfy/unpadded
reinf_material = null
@@ -248,8 +254,7 @@
/obj/structure/bed/chair/rounded
name = "rounded chair"
desc = "It's a rounded chair. It looks comfy."
- icon_state = "roundedchair_preview"
- base_icon = "roundedchair"
+ icon = 'icons/obj/structures/furniture/chair_rounded.dmi'
/obj/structure/bed/chair/rounded/brown
reinf_material = /decl/material/solid/organic/leather
@@ -275,19 +280,16 @@
/obj/structure/bed/chair/shuttle
name = "shuttle seat"
desc = "A comfortable, secure seat. It has a sturdy-looking buckling system for smoother flights."
- icon_state = "shuttle_chair_preview"
- base_icon = "shuttle_chair"
+ icon = 'icons/obj/structures/furniture/chair_shuttle.dmi'
buckle_sound = 'sound/effects/metal_close.ogg'
material = /decl/material/solid/metal/steel
reinf_material = /decl/material/solid/organic/cloth
has_special_overlay = TRUE
-/obj/structure/bed/chair/shuttle/post_buckle_mob()
- if(buckled_mob)
- base_icon = "shuttle_chair-b"
- else
- base_icon = "shuttle_chair"
- ..()
+/obj/structure/bed/chair/shuttle/get_base_icon()
+ . = ..()
+ if (buckled_mob)
+ . += "_buckled"
/obj/structure/bed/chair/shuttle/blue
padding_color = "#46698c"
@@ -297,10 +299,9 @@
padding_color = "#f0f0f0"
/obj/structure/bed/chair/wood
- name = "classic chair"
+ name_prefix = "classic"
desc = "Old is never too old to not be in fashion."
- icon_state = "wooden_chair_preview"
- base_icon = "wooden_chair"
+ icon = 'icons/obj/structures/furniture/chair_wooden.dmi'
color = WOOD_COLOR_GENERIC
material = /decl/material/solid/organic/wood/oak
@@ -322,8 +323,7 @@
/obj/structure/bed/chair/wood/wings
name = "winged chair"
- icon_state = "wooden_chair_wings_preview"
- base_icon = "wooden_chair_wings"
+ icon = 'icons/obj/structures/furniture/chair_wooden_wings.dmi'
/obj/structure/bed/chair/wood/wings/mahogany
color = WOOD_COLOR_RICH
@@ -337,3 +337,25 @@
/obj/structure/bed/chair/wood/wings/walnut
color = WOOD_COLOR_CHOCOLATE
material = /decl/material/solid/organic/wood/walnut
+
+/obj/structure/bed/chair/backed
+ name_prefix = "backed"
+ desc = "A tall chair with a sturdy back. Not very comfortable."
+ icon = 'icons/obj/structures/furniture/chair_backed.dmi'
+ reinf_material = null
+ material = /decl/material/solid/organic/wood/oak
+ color = /decl/material/solid/organic/wood/oak::color
+
+/obj/structure/bed/chair/backed/get_material_icon()
+ return material?.backed_chair_icon || initial(icon)
+
+/obj/structure/bed/chair/slatted
+ name = "seat"
+ name_prefix = "slatted" // slatted wooden seat vs wooden slatted seat
+ icon = 'icons/obj/structures/furniture/chair_slatted.dmi'
+ reinf_material = null
+ material = /decl/material/solid/organic/wood/oak
+ color = /decl/material/solid/organic/wood/oak::color
+
+/obj/structure/bed/chair/slatted/get_material_icon()
+ return material?.slatted_seat_icon || initial(icon)
\ No newline at end of file
diff --git a/code/game/objects/structures/chairs/rustic_chairs.dm b/code/game/objects/structures/chairs/rustic_chairs.dm
index 100e94deedc..8ca7bef74df 100644
--- a/code/game/objects/structures/chairs/rustic_chairs.dm
+++ b/code/game/objects/structures/chairs/rustic_chairs.dm
@@ -1,18 +1,15 @@
/obj/structure/bed/chair/rustic
+ name_prefix = "rustic"
desc = "A simple, rustic-looking chair. Looks like it'd hurt to sit on for too long..."
- icon = 'icons/obj/structures/rustic_chair.dmi'
+ icon = 'icons/obj/structures/furniture/chair_rustic.dmi'
material = /decl/material/solid/organic/wood/walnut
color = /decl/material/solid/organic/wood/walnut::color
user_comfort = -0.5
-/obj/structure/bed/chair/rustic/update_material_name(override_name)
- . = ..()
- SetName("rustic [name]") // rustic oaken chair, not oaken rustic chair
-
/obj/structure/bed/chair/rustic_fancy
- name = "chair"
+ name_prefix = "fancy"
desc = "An ornate, detailed chair made from wood. It has armrests!"
- icon = 'icons/obj/structures/fancy_rustic_chair.dmi'
+ icon = 'icons/obj/structures/furniture/chair_rustic_fancy.dmi'
material = /decl/material/solid/organic/wood/oak
color = COLOR_WHITE // preview state is precolored
reinf_material = /decl/material/solid/organic/cloth
@@ -21,7 +18,3 @@
/obj/structure/bed/chair/rustic_fancy/ebony
material = /decl/material/solid/organic/wood/ebony
-
-/obj/structure/bed/chair/rustic_fancy/update_material_name(override_name)
- . = ..()
- SetName("fancy [name]") // see above, 'fancy ebony chair' not 'ebony fancy chair'
\ No newline at end of file
diff --git a/code/game/objects/structures/chairs/wheelchair.dm b/code/game/objects/structures/chairs/wheelchair.dm
index c6b882a2a67..46035193325 100644
--- a/code/game/objects/structures/chairs/wheelchair.dm
+++ b/code/game/objects/structures/chairs/wheelchair.dm
@@ -1,7 +1,7 @@
/obj/structure/bed/chair/wheelchair
name = "wheelchair"
desc = "Now we're getting somewhere."
- icon_state = "wheelchair"
+ icon = 'icons/obj/structures/furniture/wheelchair.dmi'
anchored = FALSE
buckle_movable = TRUE
movement_handlers = list(
@@ -9,7 +9,8 @@
/datum/movement_handler/delay = list(5),
/datum/movement_handler/move_relay_self
)
- tool_interaction_flags = 0
+ tool_interaction_flags = TOOL_INTERACTION_NONE
+ material_alteration = MAT_FLAG_ALTERATION_NONE
var/item_form_type = /obj/item/wheelchair_kit
// TODO: Replace with reagent holder? This doesn't even properly handle non-human bloodstains.
@@ -21,9 +22,6 @@
if(!item_form_type)
verbs -= .verb/collapse
-/obj/structure/bed/chair/wheelchair/on_update_icon()
- set_overlays(image(icon = 'icons/obj/furniture.dmi', icon_state = "w_overlay", layer = ABOVE_HUMAN_LAYER))
-
/obj/structure/bed/chair/wheelchair/can_apply_padding()
return FALSE
@@ -129,8 +127,7 @@
name = "compressed wheelchair kit"
desc = "Collapsed parts, prepared to immediately spring into the shape of a wheelchair."
icon = 'icons/obj/items/wheelchairkit.dmi'
- icon_state = "wheelchair-item"
- item_state = "rbed"
+ icon_state = ICON_STATE_WORLD
w_class = ITEM_SIZE_LARGE
max_health = 50
var/structure_form_type = /obj/structure/bed/chair/wheelchair
@@ -142,7 +139,7 @@
user.visible_message("[user] starts to lay out \the [src].")
if(do_after(user, 4 SECONDS, src))
var/obj/structure/bed/chair/wheelchair/W = new structure_form_type(get_turf(user))
- user.visible_message(SPAN_NOTICE("[user] lays out \the [W]."))
+ user.visible_message("[user] lays out \the [W].")
W.add_fingerprint(user)
qdel(src)
diff --git a/code/game/objects/structures/defensive_barrier.dm b/code/game/objects/structures/defensive_barrier.dm
index 7545fcc0641..97b999566c0 100644
--- a/code/game/objects/structures/defensive_barrier.dm
+++ b/code/game/objects/structures/defensive_barrier.dm
@@ -7,7 +7,7 @@
throwpass = TRUE
anchored = TRUE
atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CHECKS_BORDER
- can_buckle = TRUE
+ can_buckle = TRUE // TODO: Is it actually... intended that you can buckle stuff to this?
material = /decl/material/solid/metal/steel
material_alteration = MAT_FLAG_ALTERATION_DESC | MAT_FLAG_ALTERATION_NAME
max_health = 200
diff --git a/code/game/objects/structures/dogbed.dm b/code/game/objects/structures/dogbed.dm
index 803746b9f9f..d26621b8668 100644
--- a/code/game/objects/structures/dogbed.dm
+++ b/code/game/objects/structures/dogbed.dm
@@ -3,6 +3,6 @@
desc = "A bed made especially for dogs, or other similarly sized pets."
icon = 'icons/obj/furniture.dmi'
icon_state = "dogbed"
- can_buckle = 1
+ can_buckle = TRUE
buckle_dir = SOUTH
- buckle_lying = 1
\ No newline at end of file
+ buckle_lying = TRUE
\ No newline at end of file
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index fb9f17eeb07..9dab13138ec 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -181,7 +181,7 @@
name = "janicart"
icon = 'icons/obj/vehicles.dmi'
icon_state = "pussywagon"
- base_icon = "pussywagon"
+ color = null
anchored = FALSE
density = TRUE
material_alteration = MAT_FLAG_ALTERATION_NONE
@@ -197,6 +197,9 @@
var/obj/item/bag/trash/mybag = null
var/callme = "pimpin' ride" //how do people refer to it?
+/obj/structure/bed/chair/janicart/get_base_icon()
+ return initial(icon_state)
+
/obj/structure/bed/chair/janicart/Initialize()
// Handled in init due to dirs needing to be stringified
buckle_pixel_shift = list(
diff --git a/code/game/objects/structures/quicksand.dm b/code/game/objects/structures/quicksand.dm
index d891b03a6ea..fbbd3393c87 100644
--- a/code/game/objects/structures/quicksand.dm
+++ b/code/game/objects/structures/quicksand.dm
@@ -6,7 +6,7 @@
icon_state = "open"
density = FALSE
anchored = TRUE
- can_buckle = 1
+ can_buckle = TRUE
buckle_dir = SOUTH
var/exposed = 0
var/busy
diff --git a/code/game/objects/structures/sofa.dm b/code/game/objects/structures/sofa.dm
index 93cfc6b1c5c..05d544531d8 100644
--- a/code/game/objects/structures/sofa.dm
+++ b/code/game/objects/structures/sofa.dm
@@ -1,8 +1,7 @@
/obj/structure/bed/sofa
name = "sofa"
desc = "A wide and comfy sofa - no assistants were harmed to produce it!"
- icon_state = "sofa_preview"
- base_icon = "sofa"
+ icon = 'icons/obj/structures/furniture/sofa_middle.dmi'
color = "#666666"
buckle_dir = FALSE
buckle_lying = FALSE //force people to sit up in chairs when buckled
@@ -23,9 +22,7 @@
return ..()
/obj/structure/bed/sofa/on_update_icon()
-
..()
-
var/use_base_color = get_color()
var/use_reinf_color = padding_color || ((material_alteration & MAT_FLAG_ALTERATION_COLOR) ? reinf_material?.color : null)
@@ -89,9 +86,7 @@
paint_color = "#ffbf00"
/obj/structure/bed/sofa/right
- name = "sofa"
- icon_state = "sofa_r_preview"
- base_icon = "sofa_r"
+ icon = 'icons/obj/structures/furniture/sofa_right.dmi'
/obj/structure/bed/sofa/right/unpadded
reinf_material = null
/obj/structure/bed/sofa/right/red
@@ -117,8 +112,7 @@
/obj/structure/bed/sofa/left
name = "sofa"
- icon_state = "sofa_l_preview"
- base_icon = "sofa_l"
+ icon = 'icons/obj/structures/furniture/sofa_left.dmi'
/obj/structure/bed/sofa/left/unpadded
reinf_material = null
/obj/structure/bed/sofa/left/red
diff --git a/code/game/objects/structures/travois.dm b/code/game/objects/structures/travois.dm
new file mode 100644
index 00000000000..bcf23f16081
--- /dev/null
+++ b/code/game/objects/structures/travois.dm
@@ -0,0 +1,22 @@
+/*
+ * Travois used to drag mobs in low-tech settings.
+ */
+/obj/structure/travois
+ name = "travois"
+ desc = "An assemblage of sticks, commonly used to make it easier to transport animal carcasses."
+ anchored = FALSE
+ icon_state = ICON_STATE_WORLD
+ icon = 'icons/obj/structures/travois.dmi'
+ can_buckle = TRUE
+ buckle_dir = SOUTH
+ buckle_lying = TRUE
+ buckle_sound = 'sound/effects/buckle.ogg'
+ buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 6)
+ obj_flags = OBJ_FLAG_SUPPORT_MOB
+ movable_flags = MOVABLE_FLAG_WHEELED
+ tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
+ user_comfort = 0
+ parts_amount = 1
+ parts_type = /obj/item/stack/material/log
+ material_alteration = MAT_FLAG_ALTERATION_ALL
+ material = /decl/material/solid/organic/wood/oak
diff --git a/code/modules/atmospherics/pipes.dm b/code/modules/atmospherics/pipes.dm
index 28ef33e3644..f054a258a91 100644
--- a/code/modules/atmospherics/pipes.dm
+++ b/code/modules/atmospherics/pipes.dm
@@ -8,7 +8,7 @@
stat_immune = NOSCREEN | NOINPUT | NOPOWER
interact_offline = TRUE //Needs to be set so that pipes don't say they lack power in their description
- can_buckle = 1
+ can_buckle = TRUE
buckle_require_restraints = 1
buckle_lying = -1
build_icon_state = "simple"
diff --git a/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm b/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm
index eafa6e89d73..423740def13 100644
--- a/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm
+++ b/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm
@@ -52,15 +52,9 @@
result_type = /obj/structure/bed/chair/bench
category = "seating"
-/decl/stack_recipe/hardness/integrity/furniture/bench/single
- result_type = /obj/structure/bed/chair/bench/single
-
/decl/stack_recipe/hardness/integrity/furniture/bench/pew
result_type = /obj/structure/bed/chair/bench/pew
-/decl/stack_recipe/hardness/integrity/furniture/bench/pew/single
- result_type = /obj/structure/bed/chair/bench/pew/single
-
/decl/stack_recipe/hardness/integrity/furniture/bench/lounge
result_type = /obj/structure/bed/chair/bench/lounge
difficulty = MAT_VALUE_VERY_HARD_DIY
@@ -92,6 +86,12 @@
/decl/stack_recipe/hardness/integrity/furniture/chair/roundedchair
result_type = /obj/structure/bed/chair/rounded
+/decl/stack_recipe/hardness/integrity/furniture/chair/backed
+ result_type = /obj/structure/bed/chair/backed
+
+/decl/stack_recipe/hardness/integrity/furniture/chair/slatted
+ result_type = /obj/structure/bed/chair/slatted
+
/decl/stack_recipe/hardness/integrity/furniture/drying_rack
result_type = /obj/structure/drying_rack
diff --git a/code/modules/crafting/stack_recipes/recipes_logs.dm b/code/modules/crafting/stack_recipes/recipes_logs.dm
index 608ca509501..150f36cd102 100644
--- a/code/modules/crafting/stack_recipes/recipes_logs.dm
+++ b/code/modules/crafting/stack_recipes/recipes_logs.dm
@@ -4,7 +4,7 @@
forbidden_craft_stack_types = /obj/item/stack/material/ore
/decl/stack_recipe/logs/travois
- result_type = /obj/structure/bed/travois
+ result_type = /obj/structure/travois
difficulty = MAT_VALUE_EASY_DIY
/decl/stack_recipe/turfs/wall/logs
diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm
index d5965e1caa1..ba4020aa2f2 100644
--- a/code/modules/materials/_materials.dm
+++ b/code/modules/materials/_materials.dm
@@ -135,8 +135,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
var/table_icon_base = "metal"
var/table_icon_reinforced = "reinf_metal"
- var/bench_icon = 'icons/obj/structures/benches.dmi'
- var/pew_icon = 'icons/obj/structures/pews.dmi'
+ // TODO: Refactor these to just apply a generic material overlay (e.g. wood grain) instead of entirely-separate icon files?
+ // Alternatively, find some other way for icon variation based on material.
+ // You can't do it by having separate states in the base icons,
+ // because then modpacked materials can't add new states,
+ // and what if we really really want a special nullglass pew sprite or something?
+ var/bench_icon = 'icons/obj/structures/furniture/bench.dmi'
+ var/pew_icon = 'icons/obj/structures/furniture/pew.dmi'
+ var/slatted_seat_icon = 'icons/obj/structures/furniture/chair_slatted.dmi'
+ var/backed_chair_icon = 'icons/obj/structures/furniture/chair_backed.dmi'
var/list/stack_origin_tech = @'{"materials":1}' // Research level for stacks.
diff --git a/code/modules/materials/definitions/solids/materials_solid_wood.dm b/code/modules/materials/definitions/solids/materials_solid_wood.dm
index e4cb6575b1c..2f7f3e8f7d8 100644
--- a/code/modules/materials/definitions/solids/materials_solid_wood.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_wood.dm
@@ -21,8 +21,10 @@
)
use_reinf_state = null
table_icon_base = "wood"
- bench_icon = 'icons/obj/structures/wood_benches.dmi'
- pew_icon = 'icons/obj/structures/wood_pews.dmi'
+ bench_icon = 'icons/obj/structures/furniture/bench_wood.dmi'
+ pew_icon = 'icons/obj/structures/furniture/pew_wood.dmi'
+ slatted_seat_icon = 'icons/obj/structures/furniture/chair_slatted_wood.dmi'
+ backed_chair_icon = 'icons/obj/structures/furniture/chair_backed_wood.dmi'
explosion_resistance = 2
shard_type = SHARD_SPLINTER
shard_can_repair = 0 // you can't weld splinters back into planks
@@ -153,8 +155,10 @@
adjective_name = "oak laminate"
uid = "solid_wood_chipboard_oak"
lore_text = "Also known as particle board, this material is made from various kinds of oak wood chips and resin, with a plastic laminate."
- bench_icon = 'icons/obj/structures/benches.dmi'
- pew_icon = 'icons/obj/structures/pews.dmi'
+ bench_icon = 'icons/obj/structures/furniture/bench.dmi'
+ pew_icon = 'icons/obj/structures/furniture/pew.dmi'
+ slatted_seat_icon = 'icons/obj/structures/furniture/chair_slatted.dmi'
+ backed_chair_icon = 'icons/obj/structures/furniture/chair_backed.dmi'
door_icon_base = "metal"
table_icon_base = "metal"
color = WOOD_COLOR_GENERIC
diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi
index 00943fee562..46c6c0e16dd 100644
Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ
diff --git a/icons/obj/items/wheelchairkit.dmi b/icons/obj/items/wheelchairkit.dmi
index d887fffc810..d6615844f79 100644
Binary files a/icons/obj/items/wheelchairkit.dmi and b/icons/obj/items/wheelchairkit.dmi differ
diff --git a/icons/obj/structures/bedroll.dmi b/icons/obj/structures/bedroll.dmi
index 8d18e280829..9363491681a 100644
Binary files a/icons/obj/structures/bedroll.dmi and b/icons/obj/structures/bedroll.dmi differ
diff --git a/icons/obj/structures/bedroll_rolled.dmi b/icons/obj/structures/bedroll_rolled.dmi
new file mode 100644
index 00000000000..7670a224845
Binary files /dev/null and b/icons/obj/structures/bedroll_rolled.dmi differ
diff --git a/icons/obj/structures/benches.dmi b/icons/obj/structures/benches.dmi
index 5a56743224b..80fda7a9a16 100644
Binary files a/icons/obj/structures/benches.dmi and b/icons/obj/structures/benches.dmi differ
diff --git a/icons/obj/structures/fancy_rustic_chair.dmi b/icons/obj/structures/fancy_rustic_chair.dmi
deleted file mode 100644
index 9062f59e4aa..00000000000
Binary files a/icons/obj/structures/fancy_rustic_chair.dmi and /dev/null differ
diff --git a/icons/obj/structures/furniture/armchair.dmi b/icons/obj/structures/furniture/armchair.dmi
new file mode 100644
index 00000000000..aada0c0681d
Binary files /dev/null and b/icons/obj/structures/furniture/armchair.dmi differ
diff --git a/icons/obj/structures/furniture/bed.dmi b/icons/obj/structures/furniture/bed.dmi
new file mode 100644
index 00000000000..f9d1d7dda97
Binary files /dev/null and b/icons/obj/structures/furniture/bed.dmi differ
diff --git a/icons/obj/structures/furniture/bed_psych.dmi b/icons/obj/structures/furniture/bed_psych.dmi
new file mode 100644
index 00000000000..57e6943f54d
Binary files /dev/null and b/icons/obj/structures/furniture/bed_psych.dmi differ
diff --git a/icons/obj/structures/furniture/bed_simple.dmi b/icons/obj/structures/furniture/bed_simple.dmi
new file mode 100644
index 00000000000..4e5bf1701a9
Binary files /dev/null and b/icons/obj/structures/furniture/bed_simple.dmi differ
diff --git a/icons/obj/structures/furniture/bench.dmi b/icons/obj/structures/furniture/bench.dmi
new file mode 100644
index 00000000000..80fda7a9a16
Binary files /dev/null and b/icons/obj/structures/furniture/bench.dmi differ
diff --git a/icons/obj/structures/wood_benches.dmi b/icons/obj/structures/furniture/bench_wood.dmi
similarity index 98%
rename from icons/obj/structures/wood_benches.dmi
rename to icons/obj/structures/furniture/bench_wood.dmi
index 24014a51b54..f6c0043b957 100644
Binary files a/icons/obj/structures/wood_benches.dmi and b/icons/obj/structures/furniture/bench_wood.dmi differ
diff --git a/icons/obj/structures/furniture/chair.dmi b/icons/obj/structures/furniture/chair.dmi
new file mode 100644
index 00000000000..dbd8dd3a62e
Binary files /dev/null and b/icons/obj/structures/furniture/chair.dmi differ
diff --git a/icons/obj/structures/furniture/chair_backed.dmi b/icons/obj/structures/furniture/chair_backed.dmi
new file mode 100644
index 00000000000..66eb3ecea7e
Binary files /dev/null and b/icons/obj/structures/furniture/chair_backed.dmi differ
diff --git a/icons/obj/structures/furniture/chair_backed_wood.dmi b/icons/obj/structures/furniture/chair_backed_wood.dmi
new file mode 100644
index 00000000000..5eae485abf7
Binary files /dev/null and b/icons/obj/structures/furniture/chair_backed_wood.dmi differ
diff --git a/icons/obj/structures/furniture/chair_captain.dmi b/icons/obj/structures/furniture/chair_captain.dmi
new file mode 100644
index 00000000000..56287d4ec89
Binary files /dev/null and b/icons/obj/structures/furniture/chair_captain.dmi differ
diff --git a/icons/obj/structures/furniture/chair_comfy.dmi b/icons/obj/structures/furniture/chair_comfy.dmi
new file mode 100644
index 00000000000..4a3a63ca12e
Binary files /dev/null and b/icons/obj/structures/furniture/chair_comfy.dmi differ
diff --git a/icons/obj/structures/furniture/chair_comfy_office.dmi b/icons/obj/structures/furniture/chair_comfy_office.dmi
new file mode 100644
index 00000000000..780dea823e6
Binary files /dev/null and b/icons/obj/structures/furniture/chair_comfy_office.dmi differ
diff --git a/icons/obj/structures/furniture/chair_office.dmi b/icons/obj/structures/furniture/chair_office.dmi
new file mode 100644
index 00000000000..6c1bbcf54a4
Binary files /dev/null and b/icons/obj/structures/furniture/chair_office.dmi differ
diff --git a/icons/obj/structures/furniture/chair_rounded.dmi b/icons/obj/structures/furniture/chair_rounded.dmi
new file mode 100644
index 00000000000..6ab3ce4b0da
Binary files /dev/null and b/icons/obj/structures/furniture/chair_rounded.dmi differ
diff --git a/icons/obj/structures/furniture/chair_rustic.dmi b/icons/obj/structures/furniture/chair_rustic.dmi
new file mode 100644
index 00000000000..e94faecc209
Binary files /dev/null and b/icons/obj/structures/furniture/chair_rustic.dmi differ
diff --git a/icons/obj/structures/furniture/chair_rustic_fancy.dmi b/icons/obj/structures/furniture/chair_rustic_fancy.dmi
new file mode 100644
index 00000000000..5191fc5d4b4
Binary files /dev/null and b/icons/obj/structures/furniture/chair_rustic_fancy.dmi differ
diff --git a/icons/obj/structures/furniture/chair_shuttle.dmi b/icons/obj/structures/furniture/chair_shuttle.dmi
new file mode 100644
index 00000000000..6031f7edd6d
Binary files /dev/null and b/icons/obj/structures/furniture/chair_shuttle.dmi differ
diff --git a/icons/obj/structures/furniture/chair_slatted.dmi b/icons/obj/structures/furniture/chair_slatted.dmi
new file mode 100644
index 00000000000..d05d846ed2e
Binary files /dev/null and b/icons/obj/structures/furniture/chair_slatted.dmi differ
diff --git a/icons/obj/structures/furniture/chair_slatted_wood.dmi b/icons/obj/structures/furniture/chair_slatted_wood.dmi
new file mode 100644
index 00000000000..640d8da1db9
Binary files /dev/null and b/icons/obj/structures/furniture/chair_slatted_wood.dmi differ
diff --git a/icons/obj/structures/furniture/chair_wooden.dmi b/icons/obj/structures/furniture/chair_wooden.dmi
new file mode 100644
index 00000000000..3d77d82ebb8
Binary files /dev/null and b/icons/obj/structures/furniture/chair_wooden.dmi differ
diff --git a/icons/obj/structures/furniture/chair_wooden_wings.dmi b/icons/obj/structures/furniture/chair_wooden_wings.dmi
new file mode 100644
index 00000000000..928512cfc8f
Binary files /dev/null and b/icons/obj/structures/furniture/chair_wooden_wings.dmi differ
diff --git a/icons/obj/structures/lounge.dmi b/icons/obj/structures/furniture/lounge.dmi
similarity index 89%
rename from icons/obj/structures/lounge.dmi
rename to icons/obj/structures/furniture/lounge.dmi
index 49843d472ca..1323daaccd6 100644
Binary files a/icons/obj/structures/lounge.dmi and b/icons/obj/structures/furniture/lounge.dmi differ
diff --git a/icons/obj/structures/furniture/pew.dmi b/icons/obj/structures/furniture/pew.dmi
new file mode 100644
index 00000000000..5f19d36b246
Binary files /dev/null and b/icons/obj/structures/furniture/pew.dmi differ
diff --git a/icons/obj/structures/wood_pews.dmi b/icons/obj/structures/furniture/pew_wood.dmi
similarity index 97%
rename from icons/obj/structures/wood_pews.dmi
rename to icons/obj/structures/furniture/pew_wood.dmi
index bd9e0fe651e..cfc0b9d578e 100644
Binary files a/icons/obj/structures/wood_pews.dmi and b/icons/obj/structures/furniture/pew_wood.dmi differ
diff --git a/icons/obj/structures/furniture/sofa_left.dmi b/icons/obj/structures/furniture/sofa_left.dmi
new file mode 100644
index 00000000000..d64661b633a
Binary files /dev/null and b/icons/obj/structures/furniture/sofa_left.dmi differ
diff --git a/icons/obj/structures/furniture/sofa_middle.dmi b/icons/obj/structures/furniture/sofa_middle.dmi
new file mode 100644
index 00000000000..92a69a0146e
Binary files /dev/null and b/icons/obj/structures/furniture/sofa_middle.dmi differ
diff --git a/icons/obj/structures/furniture/sofa_right.dmi b/icons/obj/structures/furniture/sofa_right.dmi
new file mode 100644
index 00000000000..82f801624ba
Binary files /dev/null and b/icons/obj/structures/furniture/sofa_right.dmi differ
diff --git a/icons/obj/structures/furniture/wheelchair.dmi b/icons/obj/structures/furniture/wheelchair.dmi
new file mode 100644
index 00000000000..e4e13d08e60
Binary files /dev/null and b/icons/obj/structures/furniture/wheelchair.dmi differ
diff --git a/icons/obj/structures/pews.dmi b/icons/obj/structures/pews.dmi
deleted file mode 100644
index f384a3f127b..00000000000
Binary files a/icons/obj/structures/pews.dmi and /dev/null differ
diff --git a/icons/obj/structures/rustic_chair.dmi b/icons/obj/structures/rustic_chair.dmi
deleted file mode 100644
index 1e48dd9c579..00000000000
Binary files a/icons/obj/structures/rustic_chair.dmi and /dev/null differ
diff --git a/icons/obj/structures/simple_bed.dmi b/icons/obj/structures/simple_bed.dmi
deleted file mode 100644
index fe9a8ba32ea..00000000000
Binary files a/icons/obj/structures/simple_bed.dmi and /dev/null differ
diff --git a/mods/species/ascent/_ascent.dme b/mods/species/ascent/_ascent.dme
index 461ef828f3a..acb7c9b9a93 100644
--- a/mods/species/ascent/_ascent.dme
+++ b/mods/species/ascent/_ascent.dme
@@ -40,7 +40,6 @@
#include "mobs\nymph\nymph_inventory.dm"
#include "mobs\nymph\nymph_life.dm"
#include "mobs\nymph\nymph_ui.dm"
-#include "structures\furniture.dm"
#include "structures\ship_furniture.dm"
#include "turfs\ship.dm"
// END_INCLUDE
diff --git a/mods/species/ascent/icons/furniture/chair_nest.dmi b/mods/species/ascent/icons/furniture/chair_nest.dmi
new file mode 100644
index 00000000000..d4e79af000c
Binary files /dev/null and b/mods/species/ascent/icons/furniture/chair_nest.dmi differ
diff --git a/mods/species/ascent/icons/furniture/chair_nest_large.dmi b/mods/species/ascent/icons/furniture/chair_nest_large.dmi
new file mode 100644
index 00000000000..b95c2c1a338
Binary files /dev/null and b/mods/species/ascent/icons/furniture/chair_nest_large.dmi differ
diff --git a/mods/species/ascent/structures/furniture.dm b/mods/species/ascent/structures/furniture.dm
deleted file mode 100644
index 4971e113047..00000000000
--- a/mods/species/ascent/structures/furniture.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-MANTIDIFY(/obj/structure/bed/chair/padded/purple, "mantid nest", "resting place")
-
-/obj/structure/bed/chair/padded/purple/ascent
- icon_state = "nest_chair"
- pixel_z = 0
-
-/obj/structure/bed/chair/padded/purple/ascent/gyne
- name = "mantid throne"
- icon_state = "nest_chair_large"
-
-/obj/structure/ascent_spawn
- name = "mantid cryotank"
- desc = "A liquid-filled, cloudy tank with strange forms twitching inside."
- icon = 'icons/obj/cryogenics.dmi'
- icon_state = "cellold2"
- anchored = TRUE
- density = TRUE
diff --git a/mods/species/ascent/structures/ship_furniture.dm b/mods/species/ascent/structures/ship_furniture.dm
index 1e29e7d74d7..812a9ae2cd0 100644
--- a/mods/species/ascent/structures/ship_furniture.dm
+++ b/mods/species/ascent/structures/ship_furniture.dm
@@ -1,12 +1,11 @@
-MANTIDIFY(/obj/structure/bed/chair/padded/purple, "mantid nest", "resting place")
+MANTIDIFY(/obj/structure/bed/chair/padded/purple, "mantid nest", "resting place") // sets up name, description and color
-/obj/structure/bed/chair/padded/purple/ascent
- icon_state = "nest_chair"
- pixel_z = 0
+/obj/structure/bed/chair/padded/purple/ascent // sets up icon and offsets
+ icon = 'mods/species/ascent/icons/furniture/chair_nest.dmi'
/obj/structure/bed/chair/padded/purple/ascent/gyne
name = "mantid throne"
- icon_state = "nest_chair_large"
+ icon = 'mods/species/ascent/icons/furniture/chair_nest_large.dmi'
/obj/structure/ascent_spawn
name = "mantid cryotank"
diff --git a/nebula.dme b/nebula.dme
index 93d673c2f55..34e663b2b29 100644
--- a/nebula.dme
+++ b/nebula.dme
@@ -1476,6 +1476,7 @@
#include "code\game\objects\structures\target_stake.dm"
#include "code\game\objects\structures\town_bell.dm"
#include "code\game\objects\structures\transit_tubes.dm"
+#include "code\game\objects\structures\travois.dm"
#include "code\game\objects\structures\under_wardrobe.dm"
#include "code\game\objects\structures\wall_frame.dm"
#include "code\game\objects\structures\wall_sconce.dm"
@@ -1493,7 +1494,6 @@
#include "code\game\objects\structures\beds\mattress.dm"
#include "code\game\objects\structures\beds\rollerbed.dm"
#include "code\game\objects\structures\beds\simple_bed.dm"
-#include "code\game\objects\structures\beds\travois.dm"
#include "code\game\objects\structures\benches\bench.dm"
#include "code\game\objects\structures\benches\lounge.dm"
#include "code\game\objects\structures\benches\pew.dm"