From 4f3c6af38b15069e847144b0aaaa2cdcfbfe30ec Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 4 Feb 2025 01:30:45 -0500 Subject: [PATCH] Move padding onto an extension --- code/__defines/tools.dm | 1 + code/datums/extensions/extensions.dm | 16 +- code/datums/extensions/padding/padding.dm | 132 +++++++++++++ code/game/objects/__objs.dm | 3 + code/game/objects/items/crutches.dm | 42 +++-- code/game/objects/items/stools.dm | 102 +++------- code/game/objects/structures/beds/bed.dm | 101 +++------- .../game/objects/structures/beds/rollerbed.dm | 4 +- .../objects/structures/beds/simple_bed.dm | 6 +- code/game/objects/structures/benches/bench.dm | 2 +- .../game/objects/structures/benches/lounge.dm | 4 +- code/game/objects/structures/chairs/chairs.dm | 175 ++++++++---------- .../structures/chairs/rustic_chairs.dm | 4 +- .../objects/structures/chairs/wheelchair.dm | 4 +- code/game/objects/structures/janicart.dm | 1 + code/game/objects/structures/sofa.dm | 77 ++++---- nebula.dme | 1 + 17 files changed, 350 insertions(+), 325 deletions(-) create mode 100644 code/datums/extensions/padding/padding.dm diff --git a/code/__defines/tools.dm b/code/__defines/tools.dm index 3caa322b023..05931f41a2f 100644 --- a/code/__defines/tools.dm +++ b/code/__defines/tools.dm @@ -62,6 +62,7 @@ #define IS_KNIFE(A) IS_TOOL(A, TOOL_KNIFE) #define IS_HAMMER(A) IS_TOOL(A, TOOL_HAMMER) #define IS_HOE(A) IS_TOOL(A, TOOL_HOE) +#define IS_SHEARS(A) IS_TOOL(A, TOOL_SHEARS) #define IS_HEMOSTAT(A) IS_TOOL(A, TOOL_HEMOSTAT) #define IS_RETRACTOR(A) IS_TOOL(A, TOOL_RETRACTOR) diff --git a/code/datums/extensions/extensions.dm b/code/datums/extensions/extensions.dm index 196d396e30a..d8925181840 100644 --- a/code/datums/extensions/extensions.dm +++ b/code/datums/extensions/extensions.dm @@ -56,9 +56,13 @@ qdel(existing_extension) if(initial(extension_base_type.flags) & EXTENSION_FLAG_IMMEDIATE) - var/datum/extension/created = construct_extension_instance(extension_type, source, args.Copy(3)) + var/list/construct_args = args.Copy(3) + var/datum/extension/created = construct_extension_instance(extension_type, source, construct_args) source.extensions[extension_base_type] = created - created.post_construction() + if(length(construct_args)) + created.post_construction(arglist(construct_args)) + else + created.post_construction() return created var/list/extension_data = list(extension_type, source) @@ -89,9 +93,13 @@ return if(islist(.)) //a list, so it's expecting to be lazy-loaded var/list/extension_data = . - var/datum/extension/created = construct_extension_instance(extension_data[1], extension_data[2], extension_data.Copy(3)) + var/list/construct_args = extension_data.Copy(3) + var/datum/extension/created = construct_extension_instance(extension_data[1], extension_data[2], construct_args) source.extensions[base_type] = created - created.post_construction() + if(length(construct_args)) + created.post_construction(arglist(construct_args)) + else + created.post_construction() return created //Fast way to check if it has an extension, also doesn't trigger instantiation of lazy loaded extensions diff --git a/code/datums/extensions/padding/padding.dm b/code/datums/extensions/padding/padding.dm new file mode 100644 index 00000000000..f75445c9ae2 --- /dev/null +++ b/code/datums/extensions/padding/padding.dm @@ -0,0 +1,132 @@ +// TODO: Maybe generalize this to handle any sort of component-composition that can have a separate material and painting? +/// An extension that unifies padding state and interactions. +/datum/extension/padding + abstract_type = /datum/extension/padding + base_type = /datum/extension/padding + expected_type = /obj + flags = EXTENSION_FLAG_IMMEDIATE // logic must run on creation + /// The paint color for the padding represented by this extension. + /// '#FFFFFF' is treated as 'painted white', while 'null' is treated as 'unpainted'. + VAR_PROTECTED/padding_color + VAR_PROTECTED/decl/material/padding_material + // TODO: Add some better way of determining if a stack is usable, for more extensibility in modpacks. + /// What stack types can be used to add padding? + VAR_PRIVATE/static/padding_stack_types = list( + /obj/item/stack/material/skin, // leather, fur + /obj/item/stack/material/bolt, // cloth + ) + /// An internal variable used to hold a typecache for the above list. + VAR_PRIVATE/static/_padding_stack_typecache + +/datum/extension/padding/New(datum/holder, _padding_material, _padding_color) + . = ..() + if(!_padding_stack_typecache) + _padding_stack_typecache = typecacheof(padding_stack_types) + +// Must be here so our holder's get_extension calls work. +/datum/extension/padding/post_construction(_padding_material, _padding_color) + . = ..() + add_padding(_padding_material, _padding_color) + +/// Returns an object's padding material. +/datum/extension/padding/proc/get_padding_material() + RETURN_TYPE(/decl/material) + return padding_material + +/// Returns the color of the padding, either the painted/dyed color or (optionally) the underlying material color. +/datum/extension/padding/proc/get_padding_color(use_material_color = TRUE) + var/decl/material/padding_material = get_padding_material() + return padding_color || (use_material_color ? padding_material?.color : null) + +/// Used to change just the paint color on padding. +/datum/extension/padding/proc/set_padding_color(new_color) + padding_color = new_color + +/datum/extension/padding/proc/handle_use_item(obj/item/used_item, mob/user) + if(isstack(used_item)) + if(padding_material) + to_chat(user, SPAN_NOTICE("\The [holder] is already padded.")) + return TRUE + var/decl/material/new_padding_material = used_item.material + if(!is_type_in_typecache(used_item, _padding_stack_typecache) || !(new_padding_material.flags & MAT_FLAG_PADDING)) + to_chat(user, SPAN_NOTICE("You cannot pad \the [holder] with that.")) + return TRUE + var/obj/item/stack/used_stack = used_item + if(!used_stack.can_use(1)) + to_chat(user, SPAN_NOTICE("You need at least [used_stack.get_string_for_amount(1)] to pad \the [holder].")) + return TRUE + if(!used_item.user_can_attack_with(user, holder)) + return TRUE + to_chat(user, SPAN_NOTICE("You pad \the [holder] with [used_stack.get_string_for_amount(1)].")) + used_stack.use(1) + if(new_padding_material.sound_manipulate) + playsound(get_turf(holder), new_padding_material.sound_manipulate, 50, TRUE) + add_padding(new_padding_material.type, used_stack.paint_color) + return TRUE + else if(IS_SHEARS(used_item)) // can use shears or wirecutters + if(!padding_material) + to_chat(user, SPAN_NOTICE("\The [holder] has no padding to remove.")) + return TRUE + if(!used_item.user_can_attack_with(user, holder)) + return TRUE + to_chat(user, SPAN_NOTICE("You remove \the [padding_material.adjective_name] padding from \the [holder].")) + var/use_tool_sound = used_item.get_tool_sound(TOOL_SHEARS) + if(use_tool_sound) + playsound(get_turf(holder), use_tool_sound, 100, TRUE) + remove_padding() + return TRUE + return FALSE + +// TODO: Unify this somewhere on /obj, maybe? +/datum/extension/padding/proc/update_holder_name() + if(QDELETED(src) || QDELETED(holder)) + return + if(istype(holder, /obj/structure)) + var/obj/structure/structure_holder = holder + structure_holder.update_materials() // update name and description if needed + else if(isitem(holder)) + var/obj/item/item_holder = holder + item_holder.update_name() + +/datum/extension/padding/proc/add_padding(padding_type, new_padding_color, do_icon_update = TRUE) + ASSERT(padding_type) + var/old_padding_material = padding_material + padding_material = ispath(padding_type) ? GET_DECL(padding_type) : padding_type + padding_color = new_padding_color + update_matter(old_padding_material, padding_material) + if(do_icon_update) + var/obj/obj_holder = holder + addtimer(CALLBACK(src, PROC_REF(update_holder_name)), 0, TIMER_UNIQUE) // Update at the end of the tick. + obj_holder.queue_icon_update() + +/datum/extension/padding/proc/remove_padding(do_icon_update = TRUE) + if(padding_material) + var/list/res = padding_material.create_object(get_turf(holder)) + if(padding_color) + for(var/obj/item/thing in res) + thing.set_color(padding_color) + var/old_padding_material = padding_material + padding_material = null + padding_color = null + update_matter(old_padding_material, padding_material) + if(do_icon_update) + var/obj/obj_holder = holder + if(istype(obj_holder, /obj/structure)) + var/obj/structure/structure_holder = obj_holder + structure_holder.update_materials() // update name and description if needed + else if(isitem(obj_holder)) + var/obj/item/item_holder = obj_holder + item_holder.update_name() + obj_holder.queue_icon_update() + +/datum/extension/padding/proc/update_matter(decl/material/old_padding, decl/material/new_padding) + var/obj/obj_holder = holder + var/matter_mult = obj_holder.get_matter_amount_modifier() + if(LAZYLEN(obj_holder.matter) && old_padding) + obj_holder.matter[old_padding.type] -= MATTER_AMOUNT_TRACE * matter_mult + if(!obj_holder.matter[old_padding.type]) + obj_holder.matter -= old_padding.type + if(new_padding) + LAZYINITLIST(obj_holder.matter) + obj_holder.matter[new_padding.type] += MATTER_AMOUNT_TRACE * matter_mult + UNSETEMPTY(obj_holder.matter) \ No newline at end of file diff --git a/code/game/objects/__objs.dm b/code/game/objects/__objs.dm index d950aa3925c..23cf27f6002 100644 --- a/code/game/objects/__objs.dm +++ b/code/game/objects/__objs.dm @@ -136,6 +136,9 @@ wrench_floor_bolts(user, null, used_item) update_icon() return TRUE + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + if(padding_extension && padding_extension.handle_use_item(used_item, user)) + return TRUE return ..() /obj/proc/wrench_floor_bolts(mob/user, delay = 2 SECONDS, obj/item/tool) diff --git a/code/game/objects/items/crutches.dm b/code/game/objects/items/crutches.dm index 5a9ac03b477..4f22b7a8f2c 100644 --- a/code/game/objects/items/crutches.dm +++ b/code/game/objects/items/crutches.dm @@ -8,21 +8,20 @@ material_alteration = MAT_FLAG_ALTERATION_ALL w_class = ITEM_SIZE_LARGE max_health = null // autoset from material - /// The material used for the padding. If null, the crutch is unpadded. Initially a typepath, set to an instance in Initialize. - var/decl/material/padding_material - /// The color used for the padding, in the case of paint or dye. If null, falls back to padding material color. - var/padding_color = null + /// The padding extension type for this item. If null, no extension is created and this item cannot be padded. + var/padding_extension_type = /datum/extension/padding + /// The initial material used when instantiating this item's padding extension. + /// Should not be modified at runtime. + var/decl/material/initial_padding_material + /// The initial color used for the padding, representing paint or dye. + /// If null, falls back to material color if we have MAT_FLAG_ALTERATION_COLOR. + /// COLOR_WHITE is treated differently than null color is. + var/initial_padding_color /obj/item/crutch/Initialize(ml, material_key) - padding_material = GET_DECL(padding_material) - return ..() - -// potential todo: to avoid matter shenanigans make padding a separate item that can be removed via alt interaction and added via attackby? -// add padding by clicking with sewing tools in active hand and fabric in offhand? -/obj/item/crutch/create_matter() . = ..() - if(padding_material) - matter[padding_material.type] += MATTER_AMOUNT_TRACE + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) /obj/item/crutch/get_stance_support_value() return LIMB_UNUSABLE @@ -32,28 +31,35 @@ /obj/item/crutch/on_update_icon() . = ..() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - add_overlay(overlay_image(icon, "[icon_state]-padding", padding_color || padding_material.color, RESET_COLOR | RESET_ALPHA)) + add_overlay(overlay_image(icon, "[icon_state]-padding", padding_extension.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR), RESET_COLOR | RESET_ALPHA)) /obj/item/crutch/apply_additional_mob_overlays(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_color || padding_material.color, RESET_COLOR | RESET_ALPHA)) + overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_extension.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR), RESET_COLOR | RESET_ALPHA)) . = ..() /obj/item/crutch/examine(mob/user, distance, infix, suffix) . = ..() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - to_chat(user, "It has been padded with [padding_color ? "[padding_material.paint_verb] " : null][padding_material.use_name].") + var/padding_paint_color = padding_extension.get_padding_color(FALSE) // do not include material color + to_chat(user, "It has been padded with [padding_paint_color ? "[padding_material.paint_verb] " : null][padding_material.use_name].") /obj/item/crutch/aluminum material = /decl/material/solid/metal/aluminium /obj/item/crutch/aluminum/padded - padding_material = /decl/material/solid/organic/plastic/foam - padding_color = COLOR_GRAY20 + initial_padding_material = /decl/material/solid/organic/plastic/foam + initial_padding_color = COLOR_GRAY20 /obj/item/crutch/wooden material = /decl/material/solid/organic/wood/oak /obj/item/crutch/wooden/padded - padding_material = /decl/material/solid/organic/leather \ No newline at end of file + initial_padding_material = /decl/material/solid/organic/leather \ No newline at end of file diff --git a/code/game/objects/items/stools.dm b/code/game/objects/items/stools.dm index 07eeb6e2087..31c54d503a5 100644 --- a/code/game/objects/items/stools.dm +++ b/code/game/objects/items/stools.dm @@ -10,20 +10,22 @@ material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_COLOR obj_flags = OBJ_FLAG_SUPPORT_MOB | OBJ_FLAG_ROTATABLE _base_attack_force = 10 - var/padding_color - var/decl/material/padding_material + /// The padding extension type for this stool. If null, no extension is created and this stool cannot be padded. + var/padding_extension_type = /datum/extension/padding + var/decl/material/initial_padding_material + var/initial_padding_color /obj/item/stool/padded icon_state = "stool_padded_preview" //set for the map - padding_material = /decl/material/solid/organic/cloth - padding_color = "#9d2300" + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = "#9d2300" /obj/item/stool/Initialize() . = ..() if(!istype(material)) return INITIALIZE_HINT_QDEL - if(ispath(padding_material, /decl/material)) - padding_material = GET_DECL(padding_material) + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) update_icon() /obj/item/stool/bar @@ -32,16 +34,20 @@ /obj/item/stool/bar/padded icon_state = "bar_stool_padded_preview" - padding_material = /decl/material/solid/organic/cloth - padding_color = "#9d2300" + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = "#9d2300" /obj/item/stool/update_name() ..() if(material_alteration & MAT_FLAG_ALTERATION_NAME) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() SetName("[padding_material?.adjective_name || material.adjective_name] [base_name || initial(name)]") update_desc() /obj/item/stool/proc/update_desc() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) desc = "A padded stool. Apply butt. It's made of [material.use_name] and covered with [padding_material.use_name]." else @@ -50,31 +56,19 @@ /obj/item/stool/on_update_icon() . = ..() icon_state = get_world_inventory_state() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - add_overlay(overlay_image(icon, "[icon_state]-padding", padding_color || padding_material.color, RESET_COLOR|RESET_ALPHA)) + add_overlay(overlay_image(icon, "[icon_state]-padding", padding_extension.get_padding_color(), RESET_COLOR|RESET_ALPHA)) // Strings. update_name() - update_desc() /obj/item/stool/apply_additional_mob_overlays(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing) . = ..() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_color || padding_material.color, RESET_COLOR|RESET_ALPHA)) - -/obj/item/stool/proc/add_padding(var/padding_type, var/new_padding_color) - padding_material = GET_DECL(padding_type) - padding_color = new_padding_color - update_icon() - -/obj/item/stool/proc/remove_padding() - if(padding_material) - var/list/res = padding_material.create_object(get_turf(src)) - if(padding_color) - for(var/obj/item/thing in res) - thing.set_color(padding_color) - padding_material = null - padding_color = null - update_icon() + overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_extension.get_padding_color(), RESET_COLOR|RESET_ALPHA)) /obj/item/stool/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) if (prob(5)) @@ -98,62 +92,15 @@ /obj/item/stool/proc/dismantle() if(material) material.create_object(get_turf(src)) - if(padding_material) - padding_material.create_object(get_turf(src)) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + padding_extension?.remove_padding(do_icon_update = FALSE) qdel(src) -/// Return TRUE if the stool is capable of supporting padding. -/// This should not check existing padding state, just whether -/// the behavior is supported at all. -/obj/item/stool/proc/can_be_padded() - return TRUE - /obj/item/stool/attackby(obj/item/W, mob/user) if(IS_WRENCH(W)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) dismantle() return TRUE - else if(can_be_padded()) - if(istype(W,/obj/item/stack)) - if(padding_material) - to_chat(user, "\The [src] is already padded.") - return TRUE - var/obj/item/stack/C = W - if(C.get_amount() < 1) // How?? - qdel(C) - return TRUE - - var/padding_type - var/new_padding_color - if(istype(W, /obj/item/stack/tile) || istype(W, /obj/item/stack/material/bolt)) - padding_type = W.material?.type - new_padding_color = W.paint_color - - if(padding_type) - var/decl/material/padding_mat = GET_DECL(padding_type) - if(!istype(padding_mat) || !(padding_mat.flags & MAT_FLAG_PADDING)) - padding_type = null - - if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") - return TRUE - - C.use(1) - if(!isturf(src.loc)) - user.drop_from_inventory(src) - src.dropInto(loc) - to_chat(user, "You add padding to \the [src].") - add_padding(padding_type, new_padding_color) - return TRUE - - else if(IS_WIRECUTTER(W)) - if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") - return TRUE - to_chat(user, "You remove the padding from \the [src].") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - remove_padding() - return TRUE return ..() /obj/item/stool/rustic @@ -162,9 +109,8 @@ icon = 'icons/obj/stool_rustic.dmi' material = /decl/material/solid/organic/wood/walnut color = /decl/material/solid/organic/wood/walnut::color - -/obj/item/stool/rustic/can_be_padded() - return FALSE + // Cannot be padded. + padding_extension_type = null /obj/item/stool/rustic/update_desc() desc = "A rustic stool carved from wood. It's a little rickety and wobbles under any weight, but it'll do." diff --git a/code/game/objects/structures/beds/bed.dm b/code/game/objects/structures/beds/bed.dm index d46f354729b..ad432669f7d 100644 --- a/code/game/objects/structures/beds/bed.dm +++ b/code/game/objects/structures/beds/bed.dm @@ -19,7 +19,15 @@ parts_type = /obj/item/stack/material/rods user_comfort = 1 obj_flags = OBJ_FLAG_SUPPORT_MOB - var/padding_color + /// The padding extension type for this bed. If null, no extension is created and this bed cannot be padded. + var/padding_extension_type = /datum/extension/padding + var/decl/material/initial_padding_material + var/initial_padding_color + +/obj/structure/bed/Initialize(ml, _mat, _reinf_mat) + . = ..() + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) /obj/structure/bed/user_can_mousedrop_onto(mob/user, atom/being_dropped, incapacitation_flags, params) if(user == being_dropped) @@ -38,8 +46,10 @@ /obj/structure/bed/update_material_name(override_name) var/base_name = override_name || initial(name) var/new_name = base_name - if(reinf_material) - new_name = "[reinf_material.adjective_name] [base_name]" + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + SetName("[padding_material.adjective_name] [base_name]") else if(material) new_name = "[material.adjective_name] [base_name]" if(name_prefix) @@ -47,8 +57,10 @@ SetName(new_name) /obj/structure/bed/update_material_desc() - if(reinf_material) - desc = "[initial(desc)] It's made of [material.use_name] and covered with [reinf_material.use_name]." + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + desc = "[initial(desc)] It's made of [material.use_name] and covered with [padding_material.use_name]." else desc = "[initial(desc)] It's made of [material.use_name]." @@ -58,11 +70,10 @@ /obj/structure/bed/on_update_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)) - else - add_overlay(overlay_image(icon, "[icon_state]_padding")) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + add_overlay(overlay_image(icon, "[icon_state]_padding", material_alteration & MAT_FLAG_ALTERATION_COLOR ? padding_extension.get_padding_color() : null, RESET_COLOR|RESET_ALPHA)) /obj/structure/bed/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) @@ -74,72 +85,6 @@ if(. && !QDELETED(src) && (severity == 1 || (severity == 2 && prob(50)) || (severity == 3 && prob(5)))) physically_destroyed() -/obj/structure/bed/proc/can_apply_padding() - return TRUE - -/obj/structure/bed/attackby(obj/item/used_item, mob/user) - - if((. = ..())) - return - - if(istype(used_item, /obj/item/stack) && can_apply_padding()) - - if(reinf_material) - to_chat(user, SPAN_WARNING("\The [src] is already padded.")) - return TRUE - - var/obj/item/stack/cloth = used_item - if(cloth.get_amount() < 1) - to_chat(user, SPAN_WARNING("You need at least one unit of material to pad \the [src].")) - return TRUE - - var/padding_type - var/new_padding_color - if(istype(used_item, /obj/item/stack/tile) || istype(used_item, /obj/item/stack/material/bolt)) - padding_type = used_item.material?.type - new_padding_color = used_item.paint_color - - if(padding_type) - var/decl/material/padding_mat = GET_DECL(padding_type) - if(!istype(padding_mat) || !(padding_mat.flags & MAT_FLAG_PADDING)) - padding_type = null - - if(!padding_type) - to_chat(user, SPAN_WARNING("You cannot pad \the [src] with that.")) - return TRUE - - cloth.use(1) - if(!isturf(src.loc)) - src.forceMove(get_turf(src)) - playsound(src.loc, 'sound/effects/rustle5.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You add padding to \the [src].")) - add_padding(padding_type, new_padding_color) - return TRUE - - if(IS_WIRECUTTER(used_item)) - if(!reinf_material) - to_chat(user, SPAN_WARNING("\The [src] has no padding to remove.")) - else - to_chat(user, SPAN_NOTICE("You remove the padding from \the [src].")) - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - remove_padding() - return TRUE - -/obj/structure/bed/proc/add_padding(var/padding_type, var/new_padding_color) - reinf_material = GET_DECL(padding_type) - padding_color = new_padding_color - update_icon() - -/obj/structure/bed/proc/remove_padding() - if(reinf_material) - var/list/res = reinf_material.create_object(get_turf(src)) - if(padding_color) - for(var/obj/item/thing in res) - thing.set_color(padding_color) - reinf_material = null - padding_color = null - update_icon() - /obj/structure/bed/psych name = "psychiatrist's couch" desc = "For prime comfort during psychiatric evaluations." @@ -147,8 +92,8 @@ material = /decl/material/solid/organic/wood/walnut /obj/structure/bed/psych/leather - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/padded material = /decl/material/solid/metal/aluminium - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth diff --git a/code/game/objects/structures/beds/rollerbed.dm b/code/game/objects/structures/beds/rollerbed.dm index 4c0285d3b78..657d86c04c9 100644 --- a/code/game/objects/structures/beds/rollerbed.dm +++ b/code/game/objects/structures/beds/rollerbed.dm @@ -9,6 +9,7 @@ buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 6) movable_flags = MOVABLE_FLAG_WHEELED tool_interaction_flags = 0 + padding_extension_type = null // Cannot be padded. var/item_form_type = /obj/item/roller //The folded-up object path. var/obj/item/chems/beaker var/iv_attached = 0 @@ -32,9 +33,6 @@ iv.pixel_y = 6 add_overlay(iv) -/obj/structure/bed/roller/can_apply_padding() - return FALSE - /obj/structure/bed/roller/attackby(obj/item/I, mob/user) if(iv_stand && !beaker && istype(I, /obj/item/chems)) if(!user.try_unequip(I, src)) diff --git a/code/game/objects/structures/beds/simple_bed.dm b/code/game/objects/structures/beds/simple_bed.dm index b12a5d5201e..3092fc63a71 100644 --- a/code/game/objects/structures/beds/simple_bed.dm +++ b/code/game/objects/structures/beds/simple_bed.dm @@ -4,7 +4,7 @@ icon_state = "bed_padded_preview" // For map editor preview purposes parts_type = /obj/item/stack/material/plank material = /decl/material/solid/organic/wood/oak - reinf_material = /decl/material/solid/organic/plantmatter/grass/dry + initial_padding_material = /decl/material/solid/organic/plantmatter/grass/dry color = /decl/material/solid/organic/plantmatter/grass/dry::color anchored = TRUE user_comfort = 0.8 @@ -43,11 +43,11 @@ material = /decl/material/solid/organic/wood/ebony /obj/structure/bed/simple/ebony/cloth - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth color = /decl/material/solid/organic/cloth::color /obj/structure/bed/simple/crafted - reinf_material = null + initial_padding_material = null icon_state = "bed" color = /decl/material/solid/organic/wood/oak::color diff --git a/code/game/objects/structures/benches/bench.dm b/code/game/objects/structures/benches/bench.dm index 8e8ed2688a3..97be5c19b7f 100644 --- a/code/game/objects/structures/benches/bench.dm +++ b/code/game/objects/structures/benches/bench.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/structures/furniture/bench.dmi' icon_state = ICON_STATE_WORLD + "_standing" color = WOOD_COLOR_GENERIC - reinf_material = null + initial_padding_material = null material = /decl/material/solid/organic/wood/oak obj_flags = 0 anchored = TRUE diff --git a/code/game/objects/structures/benches/lounge.dm b/code/game/objects/structures/benches/lounge.dm index b426a84b3f7..38863dd68cf 100644 --- a/code/game/objects/structures/benches/lounge.dm +++ b/code/game/objects/structures/benches/lounge.dm @@ -10,5 +10,5 @@ /obj/structure/bed/chair/bench/lounge/mapped color = /decl/material/solid/organic/wood/mahogany::color material = /decl/material/solid/organic/wood/mahogany - reinf_material = /decl/material/solid/organic/cloth - padding_color = COLOR_RED_GRAY + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = COLOR_RED_GRAY diff --git a/code/game/objects/structures/chairs/chairs.dm b/code/game/objects/structures/chairs/chairs.dm index aa255dad7b9..f91dfcc4119 100644 --- a/code/game/objects/structures/chairs/chairs.dm +++ b/code/game/objects/structures/chairs/chairs.dm @@ -37,39 +37,26 @@ /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/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/use_padding_color = padding_extension?.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR) + var/use_layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - 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 + var/image/I = overlay_image(icon, "[icon_state]_over", base_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) - 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 + I = overlay_image(icon, "[icon_state]_armrest", base_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) - if(reinf_material) - 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 + if(padding_extension?.get_padding_material()) + I = overlay_image(icon, "[icon_state]_padding_over", use_padding_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) - 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 + I = overlay_image(icon, "[icon_state]_padding_armrest", use_padding_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) if(has_special_overlay) - 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 - I.color = base_color + I = overlay_image(icon, "[icon_state]_special", base_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) /obj/structure/bed/chair/rotate(mob/user) @@ -81,57 +68,57 @@ update_icon() /obj/structure/bed/chair/padded - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth /obj/structure/bed/chair/padded/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/chair/padded/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/chair/padded/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/chair/padded/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/padded/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/chair/padded/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/chair/padded/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/chair/padded/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/chair/padded/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/chair/padded/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" // Leaving this in for the sake of compilation. /obj/structure/bed/chair/comfy name = "comfy chair" desc = "It's a chair. It looks comfy." icon = 'icons/obj/structures/furniture/chair_comfy.dmi' - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth /obj/structure/bed/chair/comfy/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/chair/comfy/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/chair/comfy/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/chair/comfy/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/chair/comfy/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/comfy/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/chair/comfy/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/chair/comfy/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/chair/comfy/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/chair/comfy/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/chair/comfy/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" /obj/structure/bed/chair/comfy/captain name = "captain chair" @@ -139,38 +126,38 @@ icon = 'icons/obj/structures/furniture/chair_captain.dmi' buckle_movable = 1 material = /decl/material/solid/metal/steel - reinf_material = /decl/material/solid/organic/cloth - padding_color = "#46698c" + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = "#46698c" has_special_overlay = TRUE /obj/structure/bed/chair/armchair name = "armchair" desc = "It's an armchair. It looks comfy." icon = 'icons/obj/structures/furniture/armchair.dmi' - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth /obj/structure/bed/chair/armchair/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/chair/armchair/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/chair/armchair/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/chair/armchair/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/chair/armchair/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/armchair/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/chair/armchair/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/chair/armchair/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/chair/armchair/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/chair/armchair/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/chair/armchair/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" /obj/structure/bed/chair/office name = "office chair" @@ -178,7 +165,7 @@ anchored = FALSE buckle_movable = 1 movable_flags = MOVABLE_FLAG_WHEELED - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth /obj/structure/bed/chair/office/Move() . = ..() @@ -219,9 +206,9 @@ occupant.visible_message("[occupant] crashed into \the [A]!") /obj/structure/bed/chair/office/light - padding_color = "#f0f0f0" + initial_padding_color = "#f0f0f0" /obj/structure/bed/chair/office/dark - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/office/comfy name = "comfy office chair" @@ -229,27 +216,27 @@ icon = 'icons/obj/structures/furniture/chair_comfy_office.dmi' /obj/structure/bed/chair/office/comfy/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/chair/office/comfy/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/chair/office/comfy/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/chair/office/comfy/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/chair/office/comfy/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/office/comfy/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/chair/office/comfy/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/chair/office/comfy/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/chair/office/comfy/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/chair/office/comfy/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/chair/office/comfy/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" /obj/structure/bed/chair/rounded name = "rounded chair" @@ -257,25 +244,25 @@ icon = 'icons/obj/structures/furniture/chair_rounded.dmi' /obj/structure/bed/chair/rounded/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/chair/rounded/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/chair/rounded/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/chair/rounded/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/rounded/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/chair/rounded/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/chair/rounded/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/chair/rounded/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/chair/rounded/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/chair/rounded/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" /obj/structure/bed/chair/shuttle name = "shuttle seat" @@ -283,7 +270,7 @@ 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 + initial_padding_material = /decl/material/solid/organic/cloth has_special_overlay = TRUE /obj/structure/bed/chair/shuttle/get_base_icon() @@ -292,11 +279,11 @@ . += "_buckled" /obj/structure/bed/chair/shuttle/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/chair/shuttle/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/chair/shuttle/white - padding_color = "#f0f0f0" + initial_padding_color = "#f0f0f0" /obj/structure/bed/chair/wood name_prefix = "classic" @@ -304,9 +291,7 @@ icon = 'icons/obj/structures/furniture/chair_wooden.dmi' color = WOOD_COLOR_GENERIC material = /decl/material/solid/organic/wood/oak - -/obj/structure/bed/chair/wood/can_apply_padding() - return FALSE + padding_extension_type = null // Cannot be padded. /obj/structure/bed/chair/wood/mahogany color = WOOD_COLOR_RICH diff --git a/code/game/objects/structures/chairs/rustic_chairs.dm b/code/game/objects/structures/chairs/rustic_chairs.dm index 8ca7bef74df..fff98ecac55 100644 --- a/code/game/objects/structures/chairs/rustic_chairs.dm +++ b/code/game/objects/structures/chairs/rustic_chairs.dm @@ -12,8 +12,8 @@ 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 - padding_color = COLOR_CHERRY_RED + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = COLOR_CHERRY_RED user_comfort = 1.25 /obj/structure/bed/chair/rustic_fancy/ebony diff --git a/code/game/objects/structures/chairs/wheelchair.dm b/code/game/objects/structures/chairs/wheelchair.dm index 46035193325..fa52fcb9b6e 100644 --- a/code/game/objects/structures/chairs/wheelchair.dm +++ b/code/game/objects/structures/chairs/wheelchair.dm @@ -11,6 +11,7 @@ ) tool_interaction_flags = TOOL_INTERACTION_NONE material_alteration = MAT_FLAG_ALTERATION_NONE + padding_extension_type = null // Cannot be padded. var/item_form_type = /obj/item/wheelchair_kit // TODO: Replace with reagent holder? This doesn't even properly handle non-human bloodstains. @@ -22,9 +23,6 @@ if(!item_form_type) verbs -= .verb/collapse -/obj/structure/bed/chair/wheelchair/can_apply_padding() - return FALSE - /obj/structure/bed/chair/wheelchair/attack_hand(mob/user) if(!user.check_dexterity(DEXTERITY_SIMPLE_MACHINES, TRUE)) return ..() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 9dab13138ec..cc5633a1eab 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -193,6 +193,7 @@ /datum/movement_handler/delay = list(1), /datum/movement_handler/move_relay_self/janicart ) + padding_extension_type = null var/obj/item/bag/trash/mybag = null var/callme = "pimpin' ride" //how do people refer to it? diff --git a/code/game/objects/structures/sofa.dm b/code/game/objects/structures/sofa.dm index 05d544531d8..b12b1148f3a 100644 --- a/code/game/objects/structures/sofa.dm +++ b/code/game/objects/structures/sofa.dm @@ -7,8 +7,8 @@ buckle_lying = FALSE //force people to sit up in chairs when buckled obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_ANCHORABLE material = /decl/material/solid/organic/wood/oak - reinf_material = /decl/material/solid/organic/cloth - material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + initial_padding_material = /decl/material/solid/organic/cloth + material_alteration = MAT_FLAG_ALTERATION_ALL var/has_special_overlay = FALSE @@ -24,15 +24,16 @@ /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) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/use_padding_color = padding_extension?.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR) var/list/overlays_to_add = list( "_over" = use_base_color, "_armrest" = use_base_color ) - if(reinf_material) - overlays_to_add["_padding_over"] = use_reinf_color - overlays_to_add["_padding_armrest"] = use_reinf_color + if(padding_extension?.get_padding_material()) + overlays_to_add["_padding_over"] = use_padding_color + overlays_to_add["_padding_armrest"] = use_padding_color if(has_special_overlay && buckled_mob) overlays_to_add["_special"] = use_base_color @@ -62,76 +63,76 @@ set_dir(turn(dir, 45)) update_icon() /obj/structure/bed/sofa/middle/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/sofa/middle/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/sofa/middle/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/sofa/middle/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/sofa/middle/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/sofa/middle/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/sofa/middle/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/sofa/middle/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/sofa/middle/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/sofa/middle/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/sofa/middle/yellow paint_color = "#ffbf00" /obj/structure/bed/sofa/right icon = 'icons/obj/structures/furniture/sofa_right.dmi' /obj/structure/bed/sofa/right/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/sofa/right/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/sofa/right/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/sofa/right/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/sofa/right/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/sofa/right/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/sofa/right/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/sofa/right/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/sofa/right/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/sofa/right/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/sofa/right/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" /obj/structure/bed/sofa/left name = "sofa" icon = 'icons/obj/structures/furniture/sofa_left.dmi' /obj/structure/bed/sofa/left/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/sofa/left/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/sofa/left/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/sofa/left/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/sofa/left/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/sofa/left/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/sofa/left/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/sofa/left/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/sofa/left/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/sofa/left/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/sofa/left/yellow - padding_color = "#ffbf00" \ No newline at end of file + initial_padding_color = "#ffbf00" \ No newline at end of file diff --git a/nebula.dme b/nebula.dme index 34e663b2b29..5519d2e270c 100644 --- a/nebula.dme +++ b/nebula.dme @@ -485,6 +485,7 @@ #include "code\datums\extensions\multitool\items\items.dm" #include "code\datums\extensions\multitool\items\stock_parts_radio.dm" #include "code\datums\extensions\on_click\turf_hand.dm" +#include "code\datums\extensions\padding\padding.dm" #include "code\datums\extensions\resistable\resistable.dm" #include "code\datums\extensions\shearable\shearable.dm" #include "code\datums\genetics\genetic_conditions.dm"