diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 56a0e153b5d..b9082df0699 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -68,63 +68,65 @@
else
to_chat(user, "You have enough charge to produce [get_amount()].")
-/obj/item/stack/attack_self(mob/user as mob)
- list_recipes(user)
+/obj/item/stack/attack_self(mob/user)
+ list_recipes(user, recipes)
-/obj/item/stack/proc/list_recipes(mob/user as mob, recipes_sublist)
- if (!recipes)
+/obj/item/stack/proc/list_recipes(mob/user, recipes_sublist, var/datum/stack_recipe/sublist)
+ if(!recipes)
return
- if (!src || get_amount() <= 0)
+ if(!src || get_amount() <= 0)
user << browse(null, "window=stack")
user.set_machine(src) //for correct work of onclose
- var/list/recipe_list = recipes
- if (recipes_sublist && recipe_list[recipes_sublist] && istype(recipe_list[recipes_sublist], /datum/stack_recipe_list))
- var/datum/stack_recipe_list/srl = recipe_list[recipes_sublist]
- recipe_list = srl.recipes
- var/t1 = text("
Constructions from []Amount Left: []
", src, src.get_amount())
- for(var/i=1;i<=recipe_list.len,i++)
- var/E = recipe_list[i]
- if (isnull(E))
- t1 += "
"
+
+ var/t1 = "Constructions from [capitalize_first_letters(src.name)]Amount Left: [src.get_amount()]
"
+
+ if(locate(/datum/stack_recipe_list) in recipes_sublist)
+ t1 += "Recipe Categories
"
+ for(var/datum/stack_recipe_list/srl in recipes_sublist)
+ t1 += "[capitalize_first_letters(srl.title)]
"
+
+ if(locate(/datum/stack_recipe) in recipes_sublist)
+ var/sublist_title = sublist ? " ([capitalize_first_letters(sublist.title)])" : ""
+ t1 += "Recipes[sublist_title]
"
+ for(var/datum/stack_recipe/R in recipes_sublist)
+ var/max_multiplier = round(src.get_amount() / R.req_amount)
+ var/title = ""
+ var/can_build = TRUE
+ can_build = (max_multiplier > 0)
+
+ if(R.res_amount > 1)
+ title += "[R.res_amount]x [R.title]\s"
+ else
+ title += "[capitalize_first_letters(R.title)]"
+
+ title += " ([R.req_amount] [src.singular_name]\s)"
+
+ if(can_build)
+ var/sublist_var = sublist ? "\ref[sublist]" : ""
+ t1 += "[title]"
+ else
+ t1 += "[title]
"
continue
- if (i>1 && !isnull(recipe_list[i-1]))
- t1+="
"
+ if(R.max_res_amount > 1 && max_multiplier > 1)
+ max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount))
+ t1 += " |"
+ var/list/multipliers = list(5, 10, 25)
+ for(var/n in multipliers)
+ if(max_multiplier >= n)
+ var/sublist_var = sublist ? "\ref[sublist]" : ""
+ t1 += " [n * R.res_amount]x"
+ if(!(max_multiplier in multipliers))
+ var/sublist_var = sublist ? "\ref[sublist]" : ""
+ t1 += " [max_multiplier * R.res_amount]x"
+ t1 += "
"
- if (istype(E, /datum/stack_recipe_list))
- var/datum/stack_recipe_list/srl = E
- t1 += "[srl.title]"
+ t1 += ""
- if (istype(E, /datum/stack_recipe))
- var/datum/stack_recipe/R = E
- var/max_multiplier = round(src.get_amount() / R.req_amount)
- var/title
- var/can_build = 1
- can_build = can_build && (max_multiplier>0)
- if (R.res_amount>1)
- title+= "[R.res_amount]x [R.title]\s"
- else
- title+= "[R.title]"
- title+= " ([R.req_amount] [src.singular_name]\s)"
- if (can_build)
- t1 += text("[title] ")
- else
- t1 += text("[]", title)
- continue
- if (R.max_res_amount>1 && max_multiplier>1)
- max_multiplier = min(max_multiplier, round(R.max_res_amount/R.res_amount))
- t1 += " |"
- var/list/multipliers = list(5,10,25)
- for (var/n in multipliers)
- if (max_multiplier>=n)
- t1 += " [n*R.res_amount]x"
- if (!(max_multiplier in multipliers))
- t1 += " [max_multiplier*R.res_amount]x"
-
- t1 += ""
- user << browse(t1, "window=stack")
- onclose(user, "stack")
- return
+ var/datum/browser/stack_win = new(user, "stack", capitalize_first_letters(name))
+ stack_win.set_content(t1)
+ stack_win.add_stylesheet("misc", 'html/browser/misc.css')
+ stack_win.open()
/obj/item/stack/proc/produce_recipe(datum/stack_recipe/recipe, var/quantity, mob/user)
var/required = quantity*recipe.req_amount
@@ -132,21 +134,21 @@
if (!can_use(required))
if (produced>1)
- to_chat(user, "You haven't got enough [src] to build \the [produced] [recipe.title]\s!")
+ to_chat(user, SPAN_WARNING("You haven't got enough [src] to build \the [produced] [recipe.title]\s!"))
else
- to_chat(user, "You haven't got enough [src] to build \the [recipe.title]!")
+ to_chat(user, SPAN_WARNING("You haven't got enough [src] to build \the [recipe.title]!"))
return
if (recipe.one_per_turf && (locate(recipe.result_type) in user.loc))
- to_chat(user, "There is another [recipe.title] here!")
+ to_chat(user, SPAN_WARNING("There is another [recipe.title] here!"))
return
if (recipe.on_floor && !isfloor(user.loc))
- to_chat(user, "\The [recipe.title] must be constructed on the floor!")
+ to_chat(user, SPAN_WARNING("\The [recipe.title] must be constructed on the floor!"))
return
+ to_chat(user, SPAN_NOTICE("Building [recipe.title]..."))
if (recipe.time)
- to_chat(user, "Building [recipe.title] ...")
if (!do_after(user, recipe.time))
return
@@ -170,32 +172,27 @@
/obj/item/stack/Topic(href, href_list)
..()
- if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
+ if((usr.restrained() || usr.stat || usr.get_active_hand() != src))
return
- if (href_list["sublist"] && !href_list["make"])
- list_recipes(usr, text2num(href_list["sublist"]))
+ if(href_list["sublist"] && !href_list["make"])
+ var/datum/stack_recipe_list/recipe_list = locate(href_list["sublist"]) in recipes
+ list_recipes(usr, recipe_list.recipes, recipe_list)
- if (href_list["make"])
- if (src.get_amount() < 1) qdel(src) //Never should happen
+ if(href_list["make"])
+ if(src.get_amount() < 1)
+ qdel(src) //Never should happen
- var/list/recipes_list = recipes
- if (href_list["sublist"])
- var/datum/stack_recipe_list/srl = recipes_list[text2num(href_list["sublist"])]
- recipes_list = srl.recipes
-
- var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])]
+ var/datum/stack_recipe/R = locate(href_list["make"]) in recipes
+ if(href_list["sublist"])
+ var/datum/stack_recipe_list/recipe_list = locate(href_list["sublist"]) in recipes
+ R = locate(href_list["make"]) in recipe_list.recipes
var/multiplier = text2num(href_list["multiplier"])
- if (!multiplier || (multiplier <= 0)) //href exploit protection
+ if(!multiplier || (multiplier <= 0)) //href exploit protection
return
- src.produce_recipe(R, multiplier, usr)
-
- if (src && usr.machine==src) //do not reopen closed window
- spawn( 0 )
- src.interact(usr)
- return
- return
+ produce_recipe(R, multiplier, usr)
+ updateUsrDialog()
//Return 1 if an immediate subsequent call to use() would succeed.
//Ensures that code dealing with stacks uses the same logic
@@ -318,7 +315,7 @@
continue
var/transfer = src.transfer_to(item)
if (transfer)
- to_chat(user, "You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s.")
+ to_chat(user, SPAN_NOTICE("You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."))
if(!amount)
break
@@ -368,16 +365,16 @@
var/on_floor = 0
var/use_material
- New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, supplied_material = null)
- src.title = title
- src.result_type = result_type
- src.req_amount = req_amount
- src.res_amount = res_amount
- src.max_res_amount = max_res_amount
- src.time = time
- src.one_per_turf = one_per_turf
- src.on_floor = on_floor
- src.use_material = supplied_material
+/datum/stack_recipe/New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, supplied_material = null)
+ src.title = title
+ src.result_type = result_type
+ src.req_amount = req_amount
+ src.res_amount = res_amount
+ src.max_res_amount = max_res_amount
+ src.time = time
+ src.one_per_turf = one_per_turf
+ src.on_floor = on_floor
+ src.use_material = supplied_material
/*
* Recipe list datum
@@ -385,6 +382,7 @@
/datum/stack_recipe_list
var/title = "ERROR"
var/list/recipes = null
- New(title, recipes)
- src.title = title
- src.recipes = recipes
+
+/datum/stack_recipe_list/New(new_title, new_recipes)
+ src.title = new_title
+ src.recipes = new_recipes
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 6717bf4aae2..3a6f40ae997 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -18,6 +18,9 @@
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
+/obj/item/storage/briefcase/real
+ desc = "A leather briefcase, made of real leather. Looks fancy, owner must be real proud."
+
/obj/item/storage/briefcase/black
name = "black briefcase"
icon_state = "briefcase_black"
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index 2f53df9c585..64c30126ea3 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -7,198 +7,279 @@
recipes = list()
// If is_brittle() returns true, these are only good for a single strike.
- recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] sword hilt", /obj/item/material/sword_hilt, 10, time = 100, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] sword blade", /obj/item/material/sword_blade, 15, time = 100, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/ring/material, 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/material/armor_plating, 3, time = 20, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] railing", /obj/structure/railing, 2, time = 50, one_per_turf = FALSE, on_floor = TRUE, supplied_material = "[name]")
+ recipes += new /datum/stack_recipe_list("generic crafts",
+ list(
+ new /datum/stack_recipe("[display_name] baseball bat", /obj/item/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] sword hilt", /obj/item/material/sword_hilt, 10, time = 100, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] sword blade", /obj/item/material/sword_blade, 15, time = 100, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/ring/material, 1, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] armor plate", /obj/item/material/armor_plating, 3, time = 20, on_floor = 1, supplied_material = "[name]")
+ ))
- if(integrity>=50)
- recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] lock",/obj/item/material/lock_construct, 1, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] urn", /obj/item/material/urn, 10, time = 30, one_per_turf = FALSE, on_floor = 1, supplied_material = "[name]")
- if(hardness>=10)
- recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
- if(hardness>50)
- recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] knife", /obj/item/material/kitchen/utensil/knife/plastic, 1, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] blade", /obj/item/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] spearhead", /obj/item/material/spearhead, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("[display_name] drill_head", /obj/item/material/drill_head, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- if(name == "sandstone")
- recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
+ if(integrity >= 50)
+ recipes += new /datum/stack_recipe_list("generic construction",
+ list(
+ new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] railing", /obj/structure/railing, 2, time = 50, one_per_turf = FALSE, on_floor = TRUE, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] stool", /obj/item/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] lock",/obj/item/material/lock_construct, 1, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("[display_name] urn", /obj/item/material/urn, 10, time = 30, one_per_turf = FALSE, on_floor = 1, supplied_material = "[name]")
+ ))
+
+ var/list/hardness_craftables = list()
+ if(hardness >= 10)
+ hardness_craftables += new /datum/stack_recipe("[display_name] ashtray", /obj/item/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+
+ if(hardness > 50)
+ hardness_craftables += new /datum/stack_recipe("[display_name] fork", /obj/item/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]")
+ hardness_craftables += new /datum/stack_recipe("[display_name] spoon", /obj/item/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
+ hardness_craftables += new /datum/stack_recipe("[display_name] knife", /obj/item/material/kitchen/utensil/knife/plastic, 1, on_floor = 1, supplied_material = "[name]")
+ hardness_craftables += new /datum/stack_recipe("[display_name] blade", /obj/item/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
+ hardness_craftables += new /datum/stack_recipe("[display_name] spearhead", /obj/item/material/spearhead, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
+ hardness_craftables += new /datum/stack_recipe("[display_name] drill head", /obj/item/material/drill_head, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
+
+ if(length(hardness_craftables))
+ recipes += new /datum/stack_recipe_list("generic miscellaneous", hardness_craftables)
/material/steel/generate_recipes()
..()
- recipes += new/datum/stack_recipe_list("office chairs",list( \
- new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1) \
- ))
- recipes += new/datum/stack_recipe_list("comfy chairs", list( \
- new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1), \
+ recipes += new /datum/stack_recipe_list("construction recipes",
+ list(
+ new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20),
+ new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60),
+ new /datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("machine blueprint", /obj/machinery/constructable_frame/machine_frame, 2, time = 25, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2),
+ new /datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1),
+ new /datum/stack_recipe("apc frame", /obj/item/frame/apc, 2),
+ new /datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2),
+ new /datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2)
))
- recipes += new/datum/stack_recipe("key", /obj/item/key, 1, time = 10, one_per_turf = 0, on_floor = 1)
- recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("custodial cart", /obj/structure/janitorialcart, 15, time = 120, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("cannon frame", /obj/item/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
- recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
- recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
- recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("machine blueprint", /obj/machinery/constructable_frame/machine_frame, 2, time = 25, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe_list("turret frames", list( \
- new/datum/stack_recipe("light turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("dark turret frame", /obj/machinery/porta_turret_construct/dark, 5, time = 25, one_per_turf = 1, on_floor = 1), \
- ))
-
- recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
- new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("vault assembly", /obj/structure/door_assembly/door_assembly_vault, 10, time = 100, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ recipes += new /datum/stack_recipe_list("miscellaneous construction",
+ list(
+ new /datum/stack_recipe("key", /obj/item/key, 1, time = 10, one_per_turf = 0, on_floor = 1),
+ new /datum/stack_recipe("custodial cart", /obj/structure/janitorialcart, 15, time = 120, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
))
- recipes += new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade)
- recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
- recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1)
- recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2)
- recipes += new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2)
- recipes += new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2)
- recipes += new/datum/stack_recipe("firearm receiver", /obj/item/receivergun, 15, time = 25, one_per_turf = 0, on_floor = 0)
- recipes += new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, time = 25, one_per_turf = TRUE)
- recipes += new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, time = 25)
- recipes += new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, time = 25)
- recipes += new/datum/stack_recipe("shield fittings", /obj/item/material/shieldbits, 10, time = 25)
- recipes += new/datum/stack_recipe("large trap foundation", /obj/item/large_trap_foundation, 4, time = 40)
+ recipes += new /datum/stack_recipe_list("airlock assemblies",
+ list(
+ new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("vault assembly", /obj/structure/door_assembly/door_assembly_vault, 10, time = 100, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1)
+ ))
+
+ recipes += new /datum/stack_recipe_list("office chairs",
+ list(
+ new /datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1)
+ ))
+
+ recipes += new /datum/stack_recipe_list("comfy chairs",
+ list(
+ new /datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1)
+ ))
+
+ recipes += new /datum/stack_recipe_list("turret frames",
+ list(
+ new /datum/stack_recipe("light turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("dark turret frame", /obj/machinery/porta_turret_construct/dark, 5, time = 25, one_per_turf = 1, on_floor = 1)
+ ))
+
+ recipes += new /datum/stack_recipe_list("modular computers",
+ list(
+ new /datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, time = 25, one_per_turf = TRUE),
+ new /datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, time = 25),
+ new /datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, time = 25)
+ ))
+
+ recipes += new /datum/stack_recipe_list("[display_name] weaponry",
+ list(
+ new /datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade),
+ new /datum/stack_recipe("firearm receiver", /obj/item/receivergun, 15, time = 25, one_per_turf = 0, on_floor = 0),
+ new /datum/stack_recipe("shield fittings", /obj/item/material/shieldbits, 10, time = 25),
+ new /datum/stack_recipe("cannon frame", /obj/item/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0),
+ new /datum/stack_recipe("large trap foundation", /obj/item/large_trap_foundation, 4, time = 40)
+ ))
/material/plasteel/generate_recipes()
..()
- recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
- recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
- recipes += new/datum/stack_recipe("knife grip", /obj/item/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
- recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
+ recipes += new /datum/stack_recipe_list("[display_name] recipes",
+ list(
+ new /datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1),
+ new /datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1),,,
+ new /datum/stack_recipe("knife grip", /obj/item/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
+ new /datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
+ ))
/material/plastic/generate_recipes()
..()
- recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("plastic bag", /obj/item/storage/bag/plasticbag, 3, on_floor = 1)
- recipes += new/datum/stack_recipe("blood pack", /obj/item/reagent_containers/blood/empty, 4, on_floor = 0)
- recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
- recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
- recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
- recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
- recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
- recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, 1, 1)
+ recipes += new /datum/stack_recipe_list("[display_name] recipes",
+ list(
+ new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("plastic bag", /obj/item/storage/bag/plasticbag, 3, on_floor = 1),
+ new /datum/stack_recipe("blood pack", /obj/item/reagent_containers/blood/empty, 4, on_floor = 0),
+ new /datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/reagent_containers/chem_disp_cartridge, 5, on_floor=0), // 500u
+ new /datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0), // 250u
+ new /datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0), // 100u
+ new /datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20),
+ new /datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20),
+ new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, 1, 1)
+ ))
/material/wood/generate_recipes()
..()
- recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1)
- recipes += new/datum/stack_recipe("wood circlet", /obj/item/woodcirclet, 1)
- recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
- recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("crossbow frame", /obj/item/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0)
- recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("rifle stock", /obj/item/stock, 10, time = 25, one_per_turf = 0, on_floor = 0)
- recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4)
- recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1)
- recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("ore box", /obj/structure/ore_box, 10, time = 15, one_per_turf = 1, on_floor = 1)
- recipes += new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
- recipes += new/datum/stack_recipe("shaft", /obj/item/material/shaft, 10, time = 25, one_per_turf = 0, on_floor = 0)
- recipes += new/datum/stack_recipe("buckler donut", /obj/item/material/woodenshield, 20, time = 25, one_per_turf = 0, on_floor = 0)
+ recipes += new /datum/stack_recipe_list("[display_name] recipes",
+ list(
+ new /datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1),
+ new /datum/stack_recipe("wood circlet", /obj/item/woodcirclet, 1),
+ new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20),
+ new /datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("crossbow frame", /obj/item/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0),
+ new /datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("rifle stock", /obj/item/stock, 10, time = 25, one_per_turf = 0, on_floor = 0),
+ new /datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4),
+ new /datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1),
+ new /datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("ore box", /obj/structure/ore_box, 10, time = 15, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0),
+ new /datum/stack_recipe("shaft", /obj/item/material/shaft, 10, time = 25, one_per_turf = 0, on_floor = 0),
+ new /datum/stack_recipe("buckler donut", /obj/item/material/woodenshield, 20, time = 25, one_per_turf = 0, on_floor = 0)
+ ))
+
+/material/stone/generate_recipes()
+ ..()
+ recipes += new /datum/stack_recipe_list("[display_name] recipes",
+ list(
+ new /datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
+ ))
/material/cardboard/generate_recipes()
..()
- recipes += new/datum/stack_recipe("box", /obj/item/storage/box)
- recipes += new/datum/stack_recipe("donut box", /obj/item/storage/box/fancy/donut/empty)
- recipes += new/datum/stack_recipe("egg carton", /obj/item/storage/box/fancy/egg_box)
- recipes += new/datum/stack_recipe("candle pack", /obj/item/storage/box/fancy/candle_box/empty)
- recipes += new/datum/stack_recipe("crayon box", /obj/item/storage/box/fancy/crayons/empty)
- recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox)
- recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3)
- recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg)
- recipes += new/datum/stack_recipe_list("folders",list( \
- new/datum/stack_recipe("blue folder", /obj/item/folder/blue), \
- new/datum/stack_recipe("grey folder", /obj/item/folder), \
- new/datum/stack_recipe("red folder", /obj/item/folder/red), \
- new/datum/stack_recipe("white folder", /obj/item/folder/white), \
- new/datum/stack_recipe("yellow folder", /obj/item/folder/yellow), \
+ recipes += new /datum/stack_recipe_list("[display_name] recipes",
+ list(
+ new /datum/stack_recipe("box", /obj/item/storage/box),
+ new /datum/stack_recipe("donut box", /obj/item/storage/box/fancy/donut/empty),
+ new /datum/stack_recipe("egg carton", /obj/item/storage/box/fancy/egg_box),
+ new /datum/stack_recipe("candle pack", /obj/item/storage/box/fancy/candle_box/empty),
+ new /datum/stack_recipe("crayon box", /obj/item/storage/box/fancy/crayons/empty),
+ new /datum/stack_recipe("pizza box", /obj/item/pizzabox),
+ new /datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3),
+ new /datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg)
+ ))
+ recipes += new /datum/stack_recipe_list("[display_name] folders",
+ list(
+ new /datum/stack_recipe("blue folder", /obj/item/folder/blue),
+ new /datum/stack_recipe("grey folder", /obj/item/folder),
+ new /datum/stack_recipe("red folder", /obj/item/folder/red),
+ new /datum/stack_recipe("white folder", /obj/item/folder/white),
+ new /datum/stack_recipe("yellow folder", /obj/item/folder/yellow)
))
/material/cloth/generate_recipes()
..()
- recipes += new/datum/stack_recipe_list("curtains list",list( \
- new /datum/stack_recipe("white curtain", /obj/structure/curtain, 2, time = 10), \
- new /datum/stack_recipe("bed curtain", /obj/structure/curtain/open/bed, 2, time = 10), \
- new /datum/stack_recipe("black curtain", /obj/structure/curtain/black, 2, time = 10), \
- new /datum/stack_recipe("shower curtain", /obj/structure/curtain/open/shower, 2, time = 10), \
- new /datum/stack_recipe("orange shower curtain", /obj/structure/curtain/open/shower/engineering, 2, time = 10), \
- new /datum/stack_recipe("red shower curtain", /obj/structure/curtain/open/shower/security, 2, time = 10), \
- new /datum/stack_recipe("privacy curtain", /obj/structure/curtain/open/privacy, 2, time = 10), \
-
+ recipes += new /datum/stack_recipe_list("[display_name] curtains",
+ list(
+ new /datum/stack_recipe("white curtain", /obj/structure/curtain, 2, time = 10),
+ new /datum/stack_recipe("bed curtain", /obj/structure/curtain/open/bed, 2, time = 10),
+ new /datum/stack_recipe("black curtain", /obj/structure/curtain/black, 2, time = 10),
+ new /datum/stack_recipe("shower curtain", /obj/structure/curtain/open/shower, 2, time = 10),
+ new /datum/stack_recipe("orange shower curtain", /obj/structure/curtain/open/shower/engineering, 2, time = 10),
+ new /datum/stack_recipe("red shower curtain", /obj/structure/curtain/open/shower/security, 2, time = 10),
+ new /datum/stack_recipe("privacy curtain", /obj/structure/curtain/open/privacy, 2, time = 10)
))
/material/hide/xeno/generate_recipes()
..()
- recipes += new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos)
- recipes += new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 3)
+ recipes += new /datum/stack_recipe_list("[display_name] costumes",
+ list(
+ new /datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos),
+ new /datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 3)
+ ))
/material/hide/corgi/generate_recipes()
..()
- recipes += new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/storage/hooded/wintercoat/corgi, 3)
+ recipes += new /datum/stack_recipe_list("[display_name] costumes",
+ list(
+ new /datum/stack_recipe("corgi costume", /obj/item/clothing/suit/storage/hooded/wintercoat/corgi, 3)
+ ))
/material/hide/monkey/generate_recipes()
..()
- recipes += new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask)
- recipes += new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2)
+ recipes += new /datum/stack_recipe_list("[display_name] costumes",
+ list(
+ new /datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask),
+ new /datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2)
+ ))
/material/silver/generate_recipes()
..()
- recipes += new/datum/stack_recipe("silver floor tile", /obj/item/stack/tile/silver, 1, 4, 20)
+ recipes += new /datum/stack_recipe_list("[display_name] construction",
+ list(
+ new /datum/stack_recipe("silver floor tile", /obj/item/stack/tile/silver, 1, 4, 20)
+ ))
/material/gold/generate_recipes()
..()
- recipes += new/datum/stack_recipe("golden floor tile", /obj/item/stack/tile/gold, 1, 4, 20)
+ recipes += new /datum/stack_recipe_list("[display_name] construction",
+ list(
+ new /datum/stack_recipe("golden floor tile", /obj/item/stack/tile/gold, 1, 4, 20)
+ ))
/material/uranium/generate_recipes()
..()
- recipes += new/datum/stack_recipe("uranium floor tile", /obj/item/stack/tile/uranium, 1, 4, 20)
+ recipes += new /datum/stack_recipe_list("[display_name] construction",
+ list(
+ new /datum/stack_recipe("uranium floor tile", /obj/item/stack/tile/uranium, 1, 4, 20)
+ ))
/material/phoron/generate_recipes()
..()
- recipes += new/datum/stack_recipe("phoron floor tile", /turf/simulated/floor/phoron, 1, 4, 20)
+ recipes += new /datum/stack_recipe_list("[display_name] construction",
+ list(
+ new /datum/stack_recipe("phoron floor tile", /turf/simulated/floor/phoron, 1, 4, 20)
+ ))
/material/diamond/generate_recipes()
..()
- recipes += new/datum/stack_recipe("diamond floor tile", /turf/simulated/floor/diamond, 1, 4, 20)
+ recipes += new /datum/stack_recipe_list("[display_name] construction",
+ list(
+ new /datum/stack_recipe("diamond floor tile", /turf/simulated/floor/diamond, 1, 4, 20)
+ ))
+
+/material/leather/generate_recipes()
+ ..()
+ recipes += new /datum/stack_recipe_list("[display_name] construction",
+ list(
+ new /datum/stack_recipe("leather briefcase", /obj/item/storage/briefcase/real, 1, 4, 20)
+ ))
\ No newline at end of file
diff --git a/html/changelogs/geeves-better_crafting.yml b/html/changelogs/geeves-better_crafting.yml
new file mode 100644
index 00000000000..c193fea1fdf
--- /dev/null
+++ b/html/changelogs/geeves-better_crafting.yml
@@ -0,0 +1,7 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "The crafting UI has been improved and categorized."
+ - rscadd: "Added the ability to craft leather briefcases."
\ No newline at end of file