diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 46cf8ffcd8d..977a3939d96 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -8,6 +8,9 @@ icon_state = "nest" var/health = 100 +/obj/structure/bed/nest/update_icon() + return + /obj/structure/bed/nest/user_unbuckle_mob(mob/user as mob) if(buckled_mob) if(buckled_mob.buckled == src) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index fb2ef2b5257..15858952775 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -10,28 +10,56 @@ /obj/structure/bed name = "bed" desc = "This is used to lie in, sleep in or strap on." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/furniture.dmi' icon_state = "bed" pressure_resistance = 15 anchored = 1 can_buckle = 1 buckle_lying = 1 var/material/material - var/apply_cosmetics = 1 + var/material/padding_material + var/base_icon = "bed" -/obj/structure/bed/New(var/newloc, var/new_material) +/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material) ..(newloc) if(!new_material) new_material = DEFAULT_WALL_MATERIAL - material = get_material_by_name(new_material) if(!istype(material)) qdel(src) return - if(apply_cosmetics) - color = material.icon_colour + if(new_padding_material) + padding_material = get_material_by_name(new_padding_material) + update_icon() + +// Reuse the cache/code from stools, todo maybe unify. +/obj/structure/bed/update_icon() + // Prep icon. + icon_state = "" + overlays.Cut() + // Base icon. + var/cache_key = "[base_icon]-[material.name]" + if(isnull(stool_cache[cache_key])) + var/image/I = image('icons/obj/furniture.dmi', base_icon) + I.color = material.icon_colour + stool_cache[cache_key] = I + overlays |= stool_cache[cache_key] + // Padding overlay. + if(padding_material) + var/padding_cache_key = "[base_icon]-padding-[padding_material.name]" + if(isnull(stool_cache[padding_cache_key])) + var/image/I = image('icons/obj/objects.dmi', "stool_padding") + I.color = padding_material.icon_colour + stool_cache[padding_cache_key] = I + overlays |= stool_cache[padding_cache_key] + // Strings. + desc = initial(desc) + if(padding_material) + name = "[padding_material.display_name] [initial(name)]" //this is not perfect but it will do for now. + desc += " It's made of [material.display_name] and covered with [padding_material.display_name]." + else name = "[material.display_name] [initial(name)]" - desc = "[initial(desc)] It's made of [material.display_name]." + desc += " It's made of [material.display_name]." /obj/structure/bed/ex_act(severity) switch(severity) @@ -55,8 +83,43 @@ /obj/structure/bed/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - material.place_sheet(get_turf(src)) + dismantle() qdel(src) + else if(istype(W,/obj/item/stack)) + if(padding_material) + user << "\The [src] is already padded." + return + var/obj/item/stack/C = W + if(C.get_amount() < 1) // How?? + user.drop_from_inventory(C) + qdel(C) + return + var/padding_type //This is awful but it needs to be like this until tiles are given a material var. + if(istype(W,/obj/item/stack/tile/carpet)) + padding_type = "carpet" + else if(istype(W,/obj/item/stack/material)) + var/obj/item/stack/material/M = W + if(M.material && (M.material.name in list("leather", "cloth"))) + padding_type = "[M.material.name]" + if(!padding_type) + user << "You cannot pad \the [src] with that." + return + C.use(1) + if(!istype(src.loc, /turf)) + user.drop_from_inventory(src) + src.loc = get_turf(src) + user << "You add padding to \the [src]." + add_padding(padding_type) + return + + else if (istype(W, /obj/item/weapon/wirecutters)) + if(!padding_material) + user << "\The [src] has no padding to remove." + return + user << "You remove the padding from \the [src]." + playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) + remove_padding() + else if(istype(W, /obj/item/weapon/grab)) user.visible_message("[user] attempts to buckle [W:affecting] into \the [src]!") if(do_after(user, 20)) @@ -69,11 +132,26 @@ else ..() +/obj/structure/bed/proc/remove_padding() + if(padding_material) + padding_material.place_sheet(get_turf(src)) + padding_material = null + update_icon() + +/obj/structure/bed/proc/add_padding(var/padding_type) + padding_material = get_material_by_name(padding_type) + update_icon() + +/obj/structure/bed/proc/dismantle() + material.place_sheet(get_turf(src)) + if(padding_material) + padding_material.place_sheet(get_turf(src)) + /obj/structure/bed/psych name = "psychiatrist's couch" desc = "For prime comfort during psychiatric evaluations." icon_state = "psychbed" - apply_cosmetics = 0 + base_icon = "psychbed" /obj/structure/bed/psych/New(var/newloc) ..(newloc,"leather") @@ -81,9 +159,6 @@ /obj/structure/bed/alien name = "resting contraption" desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?" - icon_state = "abed" - apply_cosmetics = 0 - /obj/structure/bed/alien/New(var/newloc) ..(newloc,"resin") @@ -96,10 +171,14 @@ icon = 'icons/obj/rollerbed.dmi' icon_state = "down" anchored = 0 - apply_cosmetics = 0 + +/obj/structure/bed/roller/update_icon() + return // Doesn't care about material or anything else. /obj/structure/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/roller_holder)) + if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + return + else if(istype(W,/obj/item/roller_holder)) if(buckled_mob) user_unbuckle_mob(user) else diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 271dfde0630..137565f5f1d 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -1,22 +1,23 @@ /obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete name = "chair" desc = "You sit in this. Either by will or force." - icon_state = "chair" + icon_state = "chair_preview" + base_icon = "chair" buckle_lying = 0 //force people to sit up in chairs when buckled var/propelled = 0 // Check for fire-extinguisher-driven chairs -/obj/structure/bed/chair/New(var/newloc, var/material) - ..(newloc, material) //Todo make metal/stone chairs display as thrones +/obj/structure/bed/chair/New() + ..() //Todo make metal/stone chairs display as thrones spawn(3) //sorry. i don't think there's a better way to do this. update_layer() return /obj/structure/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if(istype(W, /obj/item/assembly/shock_kit)) + if(!padding_material && istype(W, /obj/item/assembly/shock_kit)) var/obj/item/assembly/shock_kit/SK = W if(!SK.status) - user << "[SK] is not ready to be attached!" + user << "\The [SK] is not ready to be attached!" return user.drop_item() var/obj/structure/bed/chair/e_chair/E = new (src.loc, material.name) @@ -34,6 +35,19 @@ rotate() return +/obj/structure/bed/chair/post_buckle_mob() + update_icon() + +/obj/structure/bed/chair/update_icon() + ..() + if(buckled_mob && padding_material) + var/cache_key = "[base_icon]-armrest-[padding_material.name]" + if(isnull(stool_cache[cache_key])) + var/image/I = image('icons/obj/furniture.dmi', "[base_icon]_armrest") + I.color = padding_material.icon_colour + stool_cache[cache_key] = I + overlays |= stool_cache[cache_key] + /obj/structure/bed/chair/proc/update_layer() if(src.dir == NORTH) src.layer = FLY_LAYER @@ -65,70 +79,49 @@ src.set_dir(turn(src.dir, 90)) return -// Chair types -/obj/structure/bed/chair/wood - icon_state = "wooden_chair" - name = "wooden chair" - desc = "Old is never too old to not be in fashion." - apply_cosmetics = 0 - -/obj/structure/bed/chair/wood/New(var/newloc) - ..(newloc, "wood") - -/obj/structure/bed/chair/wood/wings - icon_state = "wooden_chair_wings" - +// Leaving this in for the sake of compilation. /obj/structure/bed/chair/comfy - name = "comfy chair" - desc = "It looks comfy." - icon_state = "comfychair" - color = rgb(255,255,255) - var/image/armrest = null - apply_cosmetics = 0 + desc = "It's a chair. It looks comfy." + icon_state = "comfychair_preview" -/obj/structure/bed/chair/comfy/New() - armrest = image("icons/obj/objects.dmi", "comfychair_armrest") - armrest.layer = MOB_LAYER + 0.1 +/obj/structure/bed/chair/comfy/brown/New(var/newloc,var/newmaterial) + ..(newloc,"steel","leather") - return ..() +/obj/structure/bed/chair/comfy/red/New(var/newloc,var/newmaterial) + ..(newloc,"steel","carpet") -/obj/structure/bed/chair/comfy/post_buckle_mob() - if(buckled_mob) - overlays += armrest - else - overlays -= armrest +/obj/structure/bed/chair/comfy/teal/New(var/newloc,var/newmaterial) + ..(newloc,"steel","teal") -/obj/structure/bed/chair/comfy/brown - color = rgb(141,70,0) +/obj/structure/bed/chair/comfy/black/New(var/newloc,var/newmaterial) + ..(newloc,"steel","black") -/obj/structure/bed/chair/comfy/red - color = rgb(218,2,10) +/obj/structure/bed/chair/comfy/green/New(var/newloc,var/newmaterial) + ..(newloc,"steel","green") -/obj/structure/bed/chair/comfy/teal - color = rgb(0,234,250) +/obj/structure/bed/chair/comfy/purp/New(var/newloc,var/newmaterial) + ..(newloc,"steel","purple") -/obj/structure/bed/chair/comfy/black - color = rgb(60,60,60) +/obj/structure/bed/chair/comfy/blue/New(var/newloc,var/newmaterial) + ..(newloc,"steel","blue") -/obj/structure/bed/chair/comfy/green - color = rgb(1,196,8) +/obj/structure/bed/chair/comfy/beige/New(var/newloc,var/newmaterial) + ..(newloc,"steel","beige") -/obj/structure/bed/chair/comfy/purp - color = rgb(112,2,176) - -/obj/structure/bed/chair/comfy/blue - color = rgb(2,9,210) - -/obj/structure/bed/chair/comfy/beige - color = rgb(255,253,195) +/obj/structure/bed/chair/comfy/lime/New(var/newloc,var/newmaterial) + ..(newloc,"steel","lime") /obj/structure/bed/chair/office anchored = 0 buckle_movable = 1 - apply_cosmetics = 0 -/obj/structure/bed/chair/comfy/lime - color = rgb(255,251,0) +/obj/structure/bed/chair/office/update_icon() + return + +/obj/structure/bed/chair/office/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + return + ..() /obj/structure/bed/chair/office/Move() ..() @@ -175,3 +168,23 @@ /obj/structure/bed/chair/office/dark icon_state = "officechair_dark" + +// Chair types +/obj/structure/bed/chair/wood + name = "wooden chair" + desc = "Old is never too old to not be in fashion." + icon_state = "wooden_chair" + +/obj/structure/bed/chair/wood/update_icon() + return + +/obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + return + ..() + +/obj/structure/bed/chair/wood/New(var/newloc) + ..(newloc, "wood") + +/obj/structure/bed/chair/wood/wings + icon_state = "wooden_chair_wings" diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index a8f879e0841..a088d6d51d4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -4,7 +4,7 @@ var/global/list/stool_cache = list() //haha stool /obj/item/weapon/stool name = "stool" desc = "Apply butt." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/furniture.dmi' icon_state = "stool_preview" //set for the map force = 10 throwforce = 10 @@ -34,13 +34,12 @@ var/global/list/stool_cache = list() //haha stool /obj/item/weapon/stool/update_icon() // Prep icon. - icon_state = "stool" + icon_state = "" overlays.Cut() // Base icon. var/cache_key = "stool-[material.name]" if(isnull(stool_cache[cache_key])) var/image/I = image('icons/obj/objects.dmi', base_icon) - color = material.icon_colour I.color = material.icon_colour stool_cache[cache_key] = I overlays |= stool_cache[cache_key] diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 81d7f31cdb9..a15bee5df27 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -9,6 +9,8 @@ var/mob/living/pulling = null var/bloodiness +/obj/structure/bed/chair/wheelchair/update_icon() + return /obj/structure/bed/chair/wheelchair/set_dir() ..() @@ -18,6 +20,11 @@ if(buckled_mob) buckled_mob.set_dir(dir) +/obj/structure/bed/chair/wheelchair/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters)) + return + ..() + /obj/structure/bed/chair/wheelchair/relaymove(mob/user, direction) // Redundant check? if(user.stat || user.stunned || user.weakened || user.paralysis || user.lying || user.restrained()) diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index a3189d6e0ff..e776adfd0e0 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -400,7 +400,8 @@ var/list/name_to_material return 1 return 0 -/material/leather //todo +//TODO PLACEHOLDERS: +/material/leather name = "leather" icon_colour = "#5C4831" stack_origin_tech = "materials=2" @@ -408,4 +409,39 @@ var/list/name_to_material /material/carpet name = "carpet" display_name = "padding" - icon_colour = "#A83C1B" \ No newline at end of file + icon_colour = "#DA020A" + +/material/cloth_teal + name = "teal" + display_name ="teal" + icon_colour = "#00EAFA" + +/material/cloth_black + name = "black" + display_name = "black" + icon_colour = "#505050" + +/material/cloth_ + name = "green" + display_name = "green" + icon_colour = "#01C608" + +/material/cloth_puple + name = "purple" + display_name = "purple" + icon_colour = "#9C56C4" + +/material/cloth_blue + name = "blue" + display_name = "blue" + icon_colour = "#6B6FE3" + +/material/cloth_beige + name = "beige" + display_name = "beige" + icon_colour = "#E8E7C8" + +/material/cloth_lime + name = "lime" + display_name = "lime" + icon_colour = "#62E36C" diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi new file mode 100644 index 00000000000..6b53f857a5c Binary files /dev/null and b/icons/obj/furniture.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 9143ac4817b..df3775ad034 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ