From 3c3817ecd3eda5ad9f0be8d8feae301dd9a0a98b Mon Sep 17 00:00:00 2001 From: Shadowfire Date: Sat, 7 Mar 2020 09:49:36 +0100 Subject: [PATCH] Bug fixing, improvements to furniture, jukebox change Made casino jukebox music finally only appear on its proper jukebox made tiles have material variable, allowing recovery of carpets from padding made carpets give padding different colors made stools also benefit from colored padding Made modular sofas able to be made from plasteel and plastic --- code/__defines/misc_ch.dm | 11 ++ code/game/machinery/jukebox.dm | 3 + .../objects/items/stacks/tiles/tile_types.dm | 10 +- .../items/stacks/tiles/tile_types_ch.dm | 102 ++++++++++++++++++ .../structures/stool_bed_chair_nest/bed.dm | 8 +- .../structures/stool_bed_chair_nest/chairs.dm | 4 +- .../stool_bed_chair_nest/chairs_ch.dm | 14 ++- .../structures/stool_bed_chair_nest/stools.dm | 10 +- code/game/turfs/flooring/flooring.dm | 4 +- code/modules/materials/material_recipes_ch.dm | 18 +++- code/modules/materials/materials.dm | 3 + code/modules/materials/materials_ch.dm | 55 ++++++++++ icons/obj/furniture_ch.dmi | Bin 14802 -> 15464 bytes vorestation.dme | 2 + 14 files changed, 230 insertions(+), 14 deletions(-) create mode 100644 code/game/objects/items/stacks/tiles/tile_types_ch.dm create mode 100644 code/modules/materials/materials_ch.dm diff --git a/code/__defines/misc_ch.dm b/code/__defines/misc_ch.dm index dbdf8ef926..31f35d8493 100644 --- a/code/__defines/misc_ch.dm +++ b/code/__defines/misc_ch.dm @@ -1,4 +1,15 @@ +//Material defines +#define MAT_CARPET "red carpet" +#define MAT_CARPET_TEAL "teal carpet" +#define MAT_CARPET_BLACK "black carpet" +#define MAT_CARPET_BLUE "blue carpet" +#define MAT_CARPET_TURQUOISE "turquoise carpet" +#define MAT_CARPET_SILVERBLUE "silver blue carpet" +#define MAT_CARPET_PINK "pink carpet" +#define MAT_CARPET_PURPLE "purple carpet" +#define MAT_CARPET_ORANGE "orange carpet" + //Casino prize dispenser stuff #define CAT_WEAPONS 1 #define CAT_GEAR 2 diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index a9e5d7c154..2a6f35f033 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -75,6 +75,9 @@ secret_tracks |= T else tracks |= T + if(T.casino) //CHOMPEDIT: preventing casion tracks from being added to other jukeboxes + tracks -= T + else if(!LAZYLEN(tracks)) //We don't even have default tracks stat |= BROKEN // No tracks configured this round! diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 7c441e8169..865d1cbfc1 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -17,6 +17,11 @@ w_class = ITEMSIZE_NORMAL max_amount = 60 + var/material/material //CHOMPEDIT: Start, To make tiles have material variables + var/default_type = DEFAULT_WALL_MATERIAL + var/perunit = SHEET_MATERIAL_AMOUNT + var/apply_colour //CHOMPEDIT: End + /obj/item/stack/tile/New() ..() pixel_x = rand(-7, 7) @@ -66,9 +71,9 @@ stacktype = /obj/item/stack/tile/wood build_type = /obj/item/stack/tile/wood + +//CHOMPEDIT: Moving carpets to tile_types_ch to give them proper names, descriptions and material variables /* - * Carpets - */ /obj/item/stack/tile/carpet name = "carpet" singular_name = "carpet" @@ -102,6 +107,7 @@ icon_state = "tile-carpet" /obj/item/stack/tile/carpet/oracarpet icon_state = "tile-carpet" + */ /obj/item/stack/tile/floor name = "floor tile" diff --git a/code/game/objects/items/stacks/tiles/tile_types_ch.dm b/code/game/objects/items/stacks/tiles/tile_types_ch.dm new file mode 100644 index 0000000000..cd919466e6 --- /dev/null +++ b/code/game/objects/items/stacks/tiles/tile_types_ch.dm @@ -0,0 +1,102 @@ +// Procs to allow tiles to have material variables, consider unifying this on stack parent? +// Uncertain if any of these procs can result in unforseen issues with tile objects, if there are bugs with tiles check if any of these procs are the cause + +/obj/item/stack/tile/New() + ..() + + if(!default_type) + default_type = DEFAULT_WALL_MATERIAL + material = get_material_by_name("[default_type]") + if(!material) + qdel(src) + return 0 + + recipes = material.get_recipes() + stacktype = material.stack_type + if(islist(material.stack_origin_tech)) + origin_tech = material.stack_origin_tech.Copy() + + if(apply_colour) + color = material.icon_colour + + if(!material.conductive) + flags |= NOCONDUCT + + matter = material.get_matter() + return 1 + + +/obj/item/stack/material/get_material() + return material + +/* + * Carpets + */ +/obj/item/stack/tile/carpet + name = "red carpet" + singular_name = "red carpet" + desc = "A piece of red carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + force = 1.0 + throwforce = 1.0 + throw_speed = 5 + throw_range = 20 + flags = 0 + no_variants = FALSE + default_type = MAT_CARPET + +/obj/item/stack/tile/carpet/teal + name = "teal carpet" + singular_name = "teal carpet" + desc = "A piece of teal carpet. It is the same size as a normal floor tile!" + icon_state = "tile-tealcarpet" + default_type = MAT_CARPET_TEAL + +/obj/item/stack/tile/carpet/bcarpet + name = "black carpet" + singular_name = "black carpet" + desc = "A piece of black carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_BLACK + +/obj/item/stack/tile/carpet/blucarpet + name = "blue carpet" + singular_name = "blue carpet" + desc = "A piece of blue carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_BLUE + +/obj/item/stack/tile/carpet/turcarpet + name = "turquoise carpet" + singular_name = "turquoise carpet" + desc = "A piece of turquoise carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_TURQUOISE + +/obj/item/stack/tile/carpet/sblucarpet + name = "silver blue carpet" + singular_name = "silver blue carpet" + desc = "A piece of silver blue carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_SILVERBLUE + +/obj/item/stack/tile/carpet/gaycarpet + name = "clown carpet" + singular_name = "clown carpet" + desc = "A piece of clown carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_PINK + +/obj/item/stack/tile/carpet/purcarpet + name = "purple carpet" + singular_name = "purple carpet" + desc = "A piece of purple carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_PURPLE + +/obj/item/stack/tile/carpet/oracarpet + name = "orange carpet" + singular_name = "orange carpet" + desc = "A piece of orange carpet. It is the same size as a normal floor tile!" + icon_state = "tile-carpet" + default_type = MAT_CARPET_ORANGE \ No newline at end of file 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 72edab89e3..fdd40ef785 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -102,9 +102,11 @@ 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" + var/padding_type + if(istype(W,/obj/item/stack/tile/carpet)) //CHOMPEDIT: making carpets different and not just the boring basic red no matter carpet type, consider merging material variables at stack level in future - Jack + var/obj/item/stack/tile/carpet/M = W + if(M.material && (M.material.flags & MATERIAL_PADDING)) + padding_type = "[M.material.name]" else if(istype(W,/obj/item/stack/material)) var/obj/item/stack/material/M = W if(M.material && (M.material.flags & MATERIAL_PADDING)) 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 8950533b8e..1b931fc65f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -93,7 +93,9 @@ // Leaving this in for the sake of compilation. /obj/structure/bed/chair/comfy desc = "It's a chair. It looks comfy." - icon_state = "comfychair_preview" + icon = 'icons/obj/furniture_ch.dmi' //CHOMPEDIT START: Making the premade chairs not have the basic chair visible, sometime make the constructed ones work as well + icon_state = "comfychair" + base_icon = "comfychair" //CHOMPEDIT END /obj/structure/bed/chair/comfy/brown/New(var/newloc,var/newmaterial) ..(newloc,"steel","leather") diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm index 7918f450d2..ecdebf4305 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs_ch.dm @@ -16,4 +16,16 @@ /obj/structure/bed/chair/oldsofa/corner icon_state = "sofacornerOLD" - base_icon = "sofacornerOLD" \ No newline at end of file + base_icon = "sofacornerOLD" + +/obj/structure/bed/chair/sofa/sif_ora/New(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) + +/obj/structure/bed/chair/sofa/left/sif_ora/New(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) + +/obj/structure/bed/chair/sofa/right/sif_ora/New(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) + +/obj/structure/bed/chair/sofa/corner/sif_ora/New(var/newloc,var/newmaterial) + ..(newloc,MAT_SIFWOOD,MAT_CARPET_ORANGE) \ No newline at end of file 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 d86c9d4606..190bf61ab3 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -30,7 +30,7 @@ var/global/list/stool_cache = list() //haha stool update_icon() /obj/item/weapon/stool/padded/New(var/newloc, var/new_material) - ..(newloc, "steel", "carpet") + ..(newloc,"steel",MAT_CARPET) //CHOMPEDIT: New tile material system /obj/item/weapon/stool/update_icon() // Prep icon. @@ -121,9 +121,11 @@ var/global/list/stool_cache = list() //haha stool 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" + var/padding_type + if(istype(W,/obj/item/stack/tile/carpet)) //CHOMPEDIT: making carpets different and not just the boring basic red no matter carpet type, consider merging material variables at stack level in future + var/obj/item/stack/tile/carpet/M = W + if(M.material && (M.material.flags & MATERIAL_PADDING)) + padding_type = "[M.material.name]" else if(istype(W,/obj/item/stack/material)) var/obj/item/stack/material/M = W if(M.material && (M.material.flags & MATERIAL_PADDING)) diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 2f45eb7b51..78ff6746cb 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -100,7 +100,7 @@ var/list/flooring_types icon_base = "snowyplayingdrift" /decl/flooring/carpet - name = "carpet" + name = "red carpet" //CHOMPEDIT renamed to red carpet desc = "Imported and comfy." icon = 'icons/turf/flooring/carpet.dmi' icon_base = "carpet" @@ -125,7 +125,7 @@ var/list/flooring_types build_type = /obj/item/stack/tile/carpet/blucarpet /decl/flooring/carpet/turcarpet - name = "tur carpet" + name = "turquoise carpet" //CHOMPEDIT: changing name to turquoise icon_base = "turcarpet" build_type = /obj/item/stack/tile/carpet/turcarpet diff --git a/code/modules/materials/material_recipes_ch.dm b/code/modules/materials/material_recipes_ch.dm index 26b6c93ba3..bf99c375cf 100644 --- a/code/modules/materials/material_recipes_ch.dm +++ b/code/modules/materials/material_recipes_ch.dm @@ -1,7 +1,23 @@ +//In future consider cleaning up often used recipes by adding them to the general recipe list with material criteria + /material/plasteel/generate_recipes() . = ..() recipes += new/datum/stack_recipe("Hammer Head", /obj/item/weapon/hammer_head, 2) - + recipes += new/datum/stack_recipe_list("sofas", list( \ + new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \ + )) + +/material/plastic/generate_recipes() + . = ..() + recipes += new/datum/stack_recipe_list("sofas", list( \ + new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \ + new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \ + new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \ + new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \ + )) /material/wood/generate_recipes() //Is a little sad we cant have lovely wooden sofa . = ..() diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 724f4771f6..65fa1580af 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -1011,6 +1011,8 @@ var/list/name_to_material protectiveness = 3 // 13% conductive = 0 +//CHOMPEDIT: Moved to materials_ch and changed to allow for material var +/* /material/carpet name = "carpet" display_name = "comfy" @@ -1023,6 +1025,7 @@ var/list/name_to_material sheet_plural_name = "tiles" protectiveness = 1 // 4% conductive = 0 +*/ /material/cotton name = "cotton" diff --git a/code/modules/materials/materials_ch.dm b/code/modules/materials/materials_ch.dm new file mode 100644 index 0000000000..94a1516f38 --- /dev/null +++ b/code/modules/materials/materials_ch.dm @@ -0,0 +1,55 @@ +//CARPET materials + +/material/carpet + name = MAT_CARPET + display_name = "comfy" + use_name = "upholstery" + icon_colour = "#DB2626" + flags = MATERIAL_PADDING + stack_type = /obj/item/stack/tile/carpet + ignition_point = T0C+232 + melting_point = T0C+300 + sheet_singular_name = "tile" + sheet_plural_name = "tiles" + protectiveness = 1 // 4% + conductive = 0 + +/material/carpet/teal + name = MAT_CARPET_TEAL + icon_colour = "#007575" + stack_type = /obj/item/stack/tile/carpet/teal + +/material/carpet/bcarpet + name = MAT_CARPET_BLACK + icon_colour = "#1B171E" + stack_type = /obj/item/stack/tile/carpet/bcarpet + +/material/carpet/blucarpet + name = MAT_CARPET_BLUE + icon_colour = "#122CDF" + stack_type = /obj/item/stack/tile/carpet/blucarpet + +/material/carpet/turcarpet + name = MAT_CARPET_TURQUOISE + icon_colour = "#41A997" + stack_type = /obj/item/stack/tile/carpet/turcarpet + +/material/carpet/sblucarpet + name = MAT_CARPET_SILVERBLUE + icon_colour = "#547EC6" + stack_type = /obj/item/stack/tile/carpet/sblucarpet + +/material/carpet/gaycarpet + name = MAT_CARPET_PINK + icon_colour = "#E12C87" + stack_type = /obj/item/stack/tile/carpet/gaycarpet + +/material/carpet/purcarpet + name = MAT_CARPET_PURPLE + icon_colour = "#B500A6" + stack_type = /obj/item/stack/tile/carpet/purcarpet + +/material/carpet/oracarpet + name = MAT_CARPET_ORANGE + icon_colour = "#D1D000" + stack_type = /obj/item/stack/tile/carpet/oracarpet \ No newline at end of file diff --git a/icons/obj/furniture_ch.dmi b/icons/obj/furniture_ch.dmi index f013a520c4dee686c84a6909972727e88d4d29f6..576f661a7a4cfb561d88fc43dd482f26dba4738e 100644 GIT binary patch literal 15464 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 DzRo`4 literal 14802 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