Crafting fireaxe cabinets, mech removal cabinets, and mirrors (#72856)

## About The Pull Request
Breaking down #72371 because it's... unreasonably large.
So this PR splits the crafting recipe file, and adds 3 new recipes for
fireaxe cabinets, mech removal cabinets, and mirrors.

## Why It's Good For The Game
Wallening compliance, and more of me on my shit breaking down long
files.

## Changelog
🆑 Tattle
qol: fireaxe cabinets, mech removal cabinets, and mirrors can now all be
crafted
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
This commit is contained in:
tattle
2023-01-23 10:45:27 +01:00
committed by GitHub
co-authored by tattle
parent e408c9ab2f
commit 57e88e6091
21 changed files with 2153 additions and 1880 deletions
@@ -0,0 +1,82 @@
///If the machine is used/deleted in the crafting process
#define CRAFTING_MACHINERY_CONSUME 1
///If the machine is only "used" i.e. it checks to see if it's nearby and allows crafting, but doesn't delete it
#define CRAFTING_MACHINERY_USE 0
/datum/crafting_recipe
///in-game display name
var/name
///type paths of items consumed associated with how many are needed
var/list/reqs = list()
///type paths of items explicitly not allowed as an ingredient
var/list/blacklist = list()
///type path of item resulting from this craft
var/result
/// String defines of items needed but not consumed. Lazy list.
var/list/tool_behaviors
/// Type paths of items needed but not consumed. Lazy list.
var/list/tool_paths
///time in seconds. Remember to use the SECONDS define!
var/time = 3 SECONDS
///type paths of items that will be placed in the result
var/list/parts = list()
///like tool_behaviors but for reagents
var/list/chem_catalysts = list()
///where it shows up in the crafting UI
var/category
///Set to FALSE if it needs to be learned first.
var/always_available = TRUE
/// Additonal requirements text shown in UI
var/additional_req_text
///Required machines for the craft, set the assigned value of the typepath to CRAFTING_MACHINERY_CONSUME or CRAFTING_MACHINERY_USE. Lazy associative list: type_path key -> flag value.
var/list/machinery
///Should only one object exist on the same turf?
var/one_per_turf = FALSE
/// Steps needed to achieve the result
var/list/steps
/// Whether the result can be crafted with a crafting menu button
var/non_craftable
/// Chemical reaction described in the recipe
var/datum/chemical_reaction/reaction
/// Resulting amount (for stacks only)
var/result_amount
/datum/crafting_recipe/New()
if(!(result in reqs))
blacklist += result
if(tool_behaviors)
tool_behaviors = string_list(tool_behaviors)
if(tool_paths)
tool_paths = string_list(tool_paths)
/datum/crafting_recipe/stack/New(obj/item/stack/material, datum/stack_recipe/stack_recipe)
if(!material || !stack_recipe || !stack_recipe.result_type)
stack_trace("Invalid stack recipe [stack_recipe]")
return
..()
src.name = stack_recipe.title
src.time = stack_recipe.time
src.result = stack_recipe.result_type
src.result_amount = stack_recipe.res_amount
src.reqs[material] = stack_recipe.req_amount
src.category = stack_recipe.category || CAT_MISC
/**
* Run custom pre-craft checks for this recipe, don't add feedback messages in this because it will spam the client
*
* user: The /mob that initiated the crafting
* collected_requirements: A list of lists of /obj/item instances that satisfy reqs. Top level list is keyed by requirement path.
*/
/datum/crafting_recipe/proc/check_requirements(mob/user, list/collected_requirements)
return TRUE
/datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result)
return
///Check if the pipe used for atmospheric device crafting is the proper one
/datum/crafting_recipe/proc/atmos_pipe_check(mob/user, list/collected_requirements)
var/obj/item/pipe/required_pipe = collected_requirements[/obj/item/pipe][1]
if(ispath(required_pipe.pipe_type, /obj/machinery/atmospherics/pipe/smart))
return TRUE
return FALSE
@@ -0,0 +1,351 @@
/datum/crafting_recipe/bluespace_vendor_mount
name = "Bluespace Vendor Wall Mount"
result = /obj/item/wallframe/bluespace_vendor_mount
time = 6 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 15,
/obj/item/stack/sheet/glass = 10,
/obj/item/stack/cable_coil = 10,
)
category = CAT_ATMOSPHERIC
/datum/crafting_recipe/pipe
name = "Smart pipe fitting"
tool_behaviors = list(TOOL_WRENCH)
result = /obj/item/pipe/quaternary/pipe
reqs = list(/obj/item/stack/sheet/iron = 1)
time = 0.5 SECONDS
category = CAT_ATMOSPHERIC
/datum/crafting_recipe/pipe/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/smart
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.p_init_dir = ALL_CARDINALS
crafted_pipe.setDir(SOUTH)
crafted_pipe.update()
/datum/crafting_recipe/layer_adapter
name = "Layer manifold fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/binary/layer_adapter
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 1 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/layer_adapter/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/layer_adapter/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/layer_manifold
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/color_adapter
name = "Color adapter fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/binary/color_adapter
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 1 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/color_adapter/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/color_adapter/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/color_adapter
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/he_pipe
name = "H/E pipe fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/quaternary/he_pipe
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 1 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/he_pipe/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/he_pipe/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/he_junction
name = "H/E junction fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/he_junction
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 1 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/he_junction/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/he_junction/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/heat_exchanging/junction
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/pressure_pump
name = "Pressure pump fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/binary/pressure_pump
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/cable_coil = 5,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/pressure_pump/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/pressure_pump/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/binary/pump
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/manual_valve
name = "Manual valve fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/binary/manual_valve
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/manual_valve/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/manual_valve/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/binary/valve
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/vent
name = "Vent pump fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/vent
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/cable_coil = 5,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/vent/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/vent/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/vent_pump
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/scrubber
name = "Scrubber fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/scrubber
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/cable_coil = 5,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/scrubber/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/scrubber/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/vent_scrubber
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/filter
name = "Filter fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/trinary/flippable/filter
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/cable_coil = 5,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/filter/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/filter/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/trinary/filter
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/mixer
name = "Mixer fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/trinary/flippable/mixer
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/cable_coil = 5,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/mixer/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/mixer/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/trinary/mixer
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/connector
name = "Portable connector fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/connector
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/connector/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/connector/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/portables_connector
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/passive_vent
name = "Passive vent fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/passive_vent
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/passive_vent/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/passive_vent/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/passive_vent
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/injector
name = "Outlet injector fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/injector
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/iron = 1,
/obj/item/stack/cable_coil = 5,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/injector/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/injector/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/outlet_injector
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/he_exchanger
name = "Heat exchanger fitting"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
result = /obj/item/pipe/directional/he_exchanger
reqs = list(
/obj/item/pipe = 1,
/obj/item/stack/sheet/plasteel = 1,
)
time = 2 SECONDS
category = CAT_ATMOSPHERIC
additional_req_text = " smart pipe fitting"
/datum/crafting_recipe/he_exchanger/check_requirements(mob/user, list/collected_requirements)
return atmos_pipe_check(user, collected_requirements)
/datum/crafting_recipe/he_exchanger/on_craft_completion(mob/user, atom/result)
var/obj/item/pipe/crafted_pipe = result
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/heat_exchanger
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
crafted_pipe.setDir(user.dir)
crafted_pipe.update()
/datum/crafting_recipe/steam_vent
name = "Steam Vent"
result = /obj/structure/steam_vent
time = 0.8 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 2,
/obj/item/stack/tile/iron = 1,
/obj/item/stock_parts/water_recycler = 1,
)
category = CAT_ATMOSPHERIC
@@ -0,0 +1,157 @@
/datum/crafting_recipe/improv_explosive
name = "IED"
result = /obj/item/grenade/iedcasing
reqs = list(
/datum/reagent/fuel = 50,
/obj/item/stack/cable_coil = 1,
/obj/item/assembly/igniter = 1,
/obj/item/reagent_containers/cup/soda_cans = 1,
)
parts = list(/obj/item/reagent_containers/cup/soda_cans = 1)
time = 1.5 SECONDS
category = CAT_CHEMISTRY
/datum/crafting_recipe/molotov
name = "Molotov"
result = /obj/item/reagent_containers/cup/glass/bottle/molotov
reqs = list(
/obj/item/reagent_containers/cup/rag = 1,
/obj/item/reagent_containers/cup/glass/bottle = 1,
)
parts = list(/obj/item/reagent_containers/cup/glass/bottle = 1)
time = 4 SECONDS
category = CAT_CHEMISTRY
/datum/crafting_recipe/chemical_payload
name = "Chemical Payload (C4)"
result = /obj/item/bombcore/chemical
reqs = list(
/obj/item/stock_parts/matter_bin = 1,
/obj/item/grenade/c4 = 1,
/obj/item/grenade/chem_grenade = 2
)
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
time = 3 SECONDS
category = CAT_CHEMISTRY
/datum/crafting_recipe/chemical_payload2
name = "Chemical Payload (Gibtonite)"
result = /obj/item/bombcore/chemical
reqs = list(
/obj/item/stock_parts/matter_bin = 1,
/obj/item/gibtonite = 1,
/obj/item/grenade/chem_grenade = 2,
)
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
time = 5 SECONDS
category = CAT_CHEMISTRY
/datum/crafting_recipe/alcohol_burner
name = "Burner (Ethanol)"
result = /obj/item/burner
time = 5 SECONDS
reqs = list(
/obj/item/reagent_containers/cup/beaker = 1,
/datum/reagent/consumable/ethanol = 15,
/obj/item/paper = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/oil_burner
name = "Burner (Oil)"
result = /obj/item/burner/oil
time = 5 SECONDS
reqs = list(
/obj/item/reagent_containers/cup/beaker = 1,
/datum/reagent/fuel/oil = 15,
/obj/item/paper = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/fuel_burner
name = "Burner (Fuel)"
result = /obj/item/burner/fuel
time = 5 SECONDS
reqs = list(
/obj/item/reagent_containers/cup/beaker = 1,
/datum/reagent/fuel = 15,
/obj/item/paper = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/thermometer
name = "Thermometer"
tool_behaviors = list(TOOL_WELDER)
result = /obj/item/thermometer
time = 5 SECONDS
reqs = list(
/datum/reagent/mercury = 5,
/obj/item/stack/sheet/glass = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/thermometer_alt
name = "Thermometer"
result = /obj/item/thermometer/pen
time = 5 SECONDS
reqs = list(
/datum/reagent/mercury = 5,
/obj/item/pen = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/ph_booklet
name = "pH booklet"
result = /obj/item/ph_booklet
time = 5 SECONDS
reqs = list(
/datum/reagent/universal_indicator = 5,
/obj/item/paper = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/dropper //Maybe make a glass pipette icon?
name = "Dropper"
result = /obj/item/reagent_containers/dropper
tool_behaviors = list(TOOL_WELDER)
time = 5 SECONDS
reqs = list(
/obj/item/stack/sheet/glass = 1,
)
category = CAT_CHEMISTRY
/datum/crafting_recipe/improvised_chem_heater
name = "Improvised chem heater"
result = /obj/machinery/space_heater/improvised_chem_heater
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER)
time = 15 SECONDS
reqs = list(
/obj/item/stack/cable_coil = 2,
/obj/item/stack/sheet/glass = 2,
/obj/item/stack/sheet/iron = 2,
/datum/reagent/water = 50,
/obj/item/thermometer = 1,
)
machinery = list(/obj/machinery/space_heater = CRAFTING_MACHINERY_CONSUME)
category = CAT_CHEMISTRY
/datum/crafting_recipe/improvised_chem_heater/on_craft_completion(mob/user, atom/result)
var/obj/item/stock_parts/cell/cell = locate(/obj/item/stock_parts/cell) in range(1)
if(!cell)
return
var/obj/machinery/space_heater/improvised_chem_heater/heater = result
var/turf/turf = get_turf(cell)
heater.forceMove(turf)
heater.attackby(cell, user) //puts it into the heater
/datum/crafting_recipe/improvised_coolant
name = "Improvised cooling spray"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/extinguisher/crafted
time = 10 SECONDS
reqs = list(
/obj/item/toy/crayon/spraycan = 1,
/datum/reagent/water = 20,
/datum/reagent/consumable/ice = 10,
)
category = CAT_CHEMISTRY
@@ -0,0 +1,45 @@
/datum/crafting_recipe/papersack
name = "Paper Sack"
result = /obj/item/storage/box/papersack
time = 1 SECONDS
reqs = list(/obj/item/paper = 5)
category = CAT_CONTAINERS
/datum/crafting_recipe/sillycup
name = "Paper Cup"
result = /obj/item/reagent_containers/cup/glass/sillycup
time = 1 SECONDS
reqs = list(/obj/item/paper = 2)
category = CAT_CONTAINERS
/datum/crafting_recipe/boh
name = "Bag of Holding"
reqs = list(
/obj/item/bag_of_holding_inert = 1,
/obj/item/assembly/signaler/anomaly/bluespace = 1,
)
result = /obj/item/storage/backpack/holding
category = CAT_CONTAINERS
/datum/crafting_recipe/underwater_basket
name = "Underwater Basket (Bamboo)"
reqs = list(/obj/item/stack/sheet/mineral/bamboo = 20)
result = /obj/item/storage/basket
category = CAT_CONTAINERS
additional_req_text = " being underwater, underwater basketweaving mastery"
/datum/crafting_recipe/underwater_basket/check_requirements(mob/user, list/collected_requirements)
. = ..()
if(!HAS_TRAIT(user,TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE))
return FALSE
var/turf/T = get_turf(user)
if(istype(T, /turf/open/water))
return TRUE
var/obj/machinery/shower/S = locate() in T
if(S?.actually_on)
return TRUE
//Same but with wheat
/datum/crafting_recipe/underwater_basket/wheat
name = "Underwater Basket (Wheat)"
reqs = list(/obj/item/food/grown/wheat = 50)
+25
View File
@@ -0,0 +1,25 @@
/datum/crafting_recipe/shutters
name = "Shutters"
reqs = list(
/obj/item/stack/sheet/plasteel = 5,
/obj/item/stack/cable_coil = 5,
/obj/item/electronics/airlock = 1,
)
result = /obj/machinery/door/poddoor/shutters/preopen
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER, TOOL_WELDER)
time = 10 SECONDS
category = CAT_DOORS
one_per_turf = TRUE
/datum/crafting_recipe/blast_doors
name = "Blast Door"
reqs = list(
/obj/item/stack/sheet/plasteel = 15,
/obj/item/stack/cable_coil = 15,
/obj/item/electronics/airlock = 1,
)
result = /obj/machinery/door/poddoor/preopen
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER, TOOL_WELDER)
time = 30 SECONDS
category = CAT_DOORS
one_per_turf = TRUE
@@ -0,0 +1,193 @@
/datum/crafting_recipe/mothplush
name = "Moth Plushie"
result = /obj/item/toy/plush/moth
reqs = list(
/obj/item/stack/sheet/animalhide/mothroach = 1,
/obj/item/organ/internal/heart = 1,
/obj/item/stack/sheet/cloth = 3,
)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/mixedbouquet
name = "Mixed bouquet"
result = /obj/item/bouquet
reqs = list(
/obj/item/food/grown/poppy/lily = 2,
/obj/item/food/grown/sunflower = 2,
/obj/item/food/grown/poppy/geranium = 2,
)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/sunbouquet
name = "Sunflower bouquet"
result = /obj/item/bouquet/sunflower
reqs = list(/obj/item/food/grown/sunflower = 6)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/poppybouquet
name = "Poppy bouquet"
result = /obj/item/bouquet/poppy
reqs = list (/obj/item/food/grown/poppy = 6)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/rosebouquet
name = "Rose bouquet"
result = /obj/item/bouquet/rose
reqs = list(/obj/item/food/grown/rose = 6)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/spooky_camera
name = "Camera Obscura"
result = /obj/item/camera/spooky
time = 1.5 SECONDS
reqs = list(
/obj/item/camera = 1,
/datum/reagent/water/holywater = 10,
)
parts = list(/obj/item/camera = 1)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/skateboard
name = "Skateboard"
result = /obj/vehicle/ridden/scooter/skateboard/improvised
time = 6 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/rods = 10,
)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/scooter
name = "Scooter"
result = /obj/vehicle/ridden/scooter
time = 6.5 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/rods = 12,
)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/headpike
name = "Spike Head (Glass Spear)"
time = 6.5 SECONDS
reqs = list(
/obj/item/spear = 1,
/obj/item/bodypart/head = 1,
)
parts = list(
/obj/item/bodypart/head = 1,
/obj/item/spear = 1,
)
blacklist = list(
/obj/item/spear/explosive,
/obj/item/spear/bonespear,
/obj/item/spear/bamboospear,
)
result = /obj/structure/headpike
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/headpikebone
name = "Spike Head (Bone Spear)"
time = 6.5 SECONDS
reqs = list(
/obj/item/spear/bonespear = 1,
/obj/item/bodypart/head = 1,
)
parts = list(
/obj/item/bodypart/head = 1,
/obj/item/spear/bonespear = 1,
)
result = /obj/structure/headpike/bone
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/headpikebamboo
name = "Spike Head (Bamboo Spear)"
time = 6.5 SECONDS
reqs = list(
/obj/item/spear/bamboospear = 1,
/obj/item/bodypart/head = 1,
)
parts = list(
/obj/item/bodypart/head = 1,
/obj/item/spear/bamboospear = 1,
)
result = /obj/structure/headpike/bamboo
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/guillotine
name = "Guillotine"
result = /obj/structure/guillotine
time = 15 SECONDS // Building a functioning guillotine takes time
reqs = list(
/obj/item/stack/sheet/plasteel = 3,
/obj/item/stack/sheet/mineral/wood = 20,
/obj/item/stack/cable_coil = 10,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/toiletbong
name = "Toiletbong"
result = /obj/structure/toiletbong
time = 5 SECONDS
tool_behaviors = list(TOOL_WRENCH)
reqs = list(/obj/item/flamethrower = 1)
machinery = list(/obj/structure/toilet)
additional_req_text = " plasma tank (on flamethrower), toilet"
category = CAT_ENTERTAINMENT
/datum/crafting_recipe/toiletbong/check_requirements(mob/user, list/collected_requirements)
if((locate(/obj/structure/toilet) in range(1, user.loc)) == null)
return FALSE
var/obj/item/flamethrower/flamethrower = collected_requirements[/obj/item/flamethrower][1]
if(flamethrower.ptank == null)
return FALSE
return TRUE
/datum/crafting_recipe/toiletbong/on_craft_completion(mob/user, atom/result)
var/obj/structure/toiletbong/toiletbong = result
var/obj/structure/toilet/toilet = locate(/obj/structure/toilet) in range(1, user.loc)
for (var/obj/item/cistern_item in toilet.contents)
cistern_item.forceMove(user.loc)
to_chat(user, span_warning("[cistern_item] falls out of the toilet!"))
toiletbong.dir = toilet.dir
toiletbong.loc = toilet.loc
qdel(toilet)
to_chat(user, span_notice("[user] attaches the flamethrower to the repurposed toilet."))
/datum/crafting_recipe/punching_bag
name = "Punching Bag"
result = /obj/structure/punching_bag
tool_behaviors = list(TOOL_SCREWDRIVER)
reqs = list(
/obj/item/stack/sheet/iron = 2,
/obj/item/stack/rods = 1,
/obj/item/pillow = 1,
)
category = CAT_ENTERTAINMENT
time = 10 SECONDS
/datum/crafting_recipe/stacklifter
name = "Chest Press"
result = /obj/structure/weightmachine/stacklifter
tool_behaviors = list(TOOL_SCREWDRIVER)
reqs = list(
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/rods = 2,
/obj/item/chair = 1,
)
category = CAT_ENTERTAINMENT
time = 10 SECONDS
/datum/crafting_recipe/weightlifter
name = "Bench Press"
result = /obj/structure/weightmachine/weightlifter
tool_behaviors = list(TOOL_SCREWDRIVER)
reqs = list(
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/rods = 2,
/obj/item/chair = 1,
)
category = CAT_ENTERTAINMENT
time = 10 SECONDS
@@ -0,0 +1,190 @@
/datum/crafting_recipe/strobeshield
name = "Strobe Shield"
result = /obj/item/shield/riot/flash
reqs = list(
/obj/item/wallframe/flasher = 1,
/obj/item/assembly/flash/handheld = 1,
/obj/item/shield/riot = 1,
)
time = 4 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/strobeshield/New()
..()
blacklist |= subtypesof(/obj/item/shield/riot)
/datum/crafting_recipe/radiogloves
name = "Radio Gloves"
result = /obj/item/clothing/gloves/radio
time = 1.5 SECONDS
reqs = list(
/obj/item/clothing/gloves/color/black = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/radio = 1,
)
tool_behaviors = list(TOOL_WIRECUTTER)
category = CAT_EQUIPMENT
/datum/crafting_recipe/radiogloves/New()
..()
blacklist |= typesof(/obj/item/radio/headset)
blacklist |= typesof(/obj/item/radio/intercom)
/datum/crafting_recipe/wheelchair
name = "Wheelchair"
result = /obj/vehicle/ridden/wheelchair
reqs = list(
/obj/item/stack/sheet/iron = 4,
/obj/item/stack/rods = 6,
)
time = 10 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/motorized_wheelchair
name = "Motorized Wheelchair"
result = /obj/vehicle/ridden/wheelchair/motorized
reqs = list(
/obj/item/stack/sheet/iron = 10,
/obj/item/stack/rods = 8,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stock_parts/capacitor = 1,
)
parts = list(
/obj/item/stock_parts/manipulator = 2,
/obj/item/stock_parts/capacitor = 1,
)
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH)
time = 20 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/trapdoor_kit
name = "Trapdoor Construction Kit"
result = /obj/item/trapdoor_kit
reqs = list(
/obj/item/stack/sheet/iron = 4,
/obj/item/stack/rods = 4,
/obj/item/stack/cable_coil = 10,
/obj/item/stock_parts/manipulator = 2,
/obj/item/assembly/signaler = 1,
)
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER)
time = 10 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/trapdoor_remote
name = "Trapdoor Remote"
result = /obj/item/trapdoor_remote/preloaded // since its useless without its assembly just require an assembly to craft it
reqs = list(
/obj/item/compact_remote = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/assembly/trapdoor = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 5 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/mousetrap
name = "Mouse Trap"
result = /obj/item/assembly/mousetrap
time = 1 SECONDS
reqs = list(
/obj/item/stack/sheet/cardboard = 1,
/obj/item/stack/rods = 1,
)
category = CAT_EQUIPMENT
/datum/crafting_recipe/flashlight_eyes
name = "Flashlight Eyes"
result = /obj/item/organ/internal/eyes/robotic/flashlight
time = 10
reqs = list(
/obj/item/flashlight = 2,
/obj/item/restraints/handcuffs/cable = 1
)
category = CAT_EQUIPMENT
/datum/crafting_recipe/extendohand_r
name = "Extendo-Hand (Right Arm)"
reqs = list(
/obj/item/bodypart/arm/right/robot = 1,
/obj/item/clothing/gloves/boxing = 1,
)
result = /obj/item/extendohand
category = CAT_EQUIPMENT
/datum/crafting_recipe/extendohand_l
name = "Extendo-Hand (Left Arm)"
reqs = list(
/obj/item/bodypart/arm/left/robot = 1,
/obj/item/clothing/gloves/boxing = 1,
)
result = /obj/item/extendohand
category = CAT_EQUIPMENT
/datum/crafting_recipe/ore_sensor
name = "Ore Sensor"
time = 3 SECONDS
reqs = list(
/datum/reagent/brimdust = 15,
/obj/item/stack/sheet/bone = 1,
/obj/item/stack/sheet/sinew = 1,
)
result = /obj/item/ore_sensor
category = CAT_EQUIPMENT
/datum/crafting_recipe/pressureplate
name = "Pressure Plate"
result = /obj/item/pressure_plate
time = 0.5 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 1,
/obj/item/stack/tile/iron = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/assembly/igniter = 1,
)
category = CAT_EQUIPMENT
/datum/crafting_recipe/rcl
name = "Makeshift Rapid Pipe Cleaner Layer"
result = /obj/item/rcl/ghetto
time = 4 SECONDS
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH)
reqs = list(/obj/item/stack/sheet/iron = 15)
category = CAT_EQUIPMENT
/datum/crafting_recipe/ghettojetpack
name = "Improvised Jetpack"
result = /obj/item/tank/jetpack/improvised
time = 30
reqs = list(
/obj/item/tank/internals/oxygen = 2,
/obj/item/extinguisher = 1,
/obj/item/pipe = 3,
/obj/item/stack/cable_coil = MAXCOIL,
)
category = CAT_EQUIPMENT
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
/datum/crafting_recipe/gripperoffbrand
name = "Improvised Gripper Gloves"
reqs = list(
/obj/item/clothing/gloves/fingerless = 1,
/obj/item/stack/sticky_tape = 1,
)
result = /obj/item/clothing/gloves/tackler/offbrand
category = CAT_EQUIPMENT
/**
* Recipe used for upgrading fake N-spect scanners to bananium HONK-spect scanners
*/
/datum/crafting_recipe/clown_scanner_upgrade
name = "Bananium HONK-spect scanner"
result = /obj/item/inspector/clown/bananium
reqs = list(
/obj/item/inspector/clown = 1,
/obj/item/stack/sticky_tape = 3,
/obj/item/stack/sheet/mineral/bananium = 5,
) //the chainsaw of prank tools
tool_paths = list(/obj/item/bikehorn)
time = 40 SECONDS
category = CAT_EQUIPMENT
@@ -0,0 +1,38 @@
/datum/crafting_recipe/curtain
name = "Curtains"
reqs = list(
/obj/item/stack/sheet/cloth = 4,
/obj/item/stack/rods = 1,
)
result = /obj/structure/curtain/cloth
category = CAT_FURNITURE
/datum/crafting_recipe/showercurtain
name = "Shower Curtains"
reqs = list(
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/plastic = 2,
/obj/item/stack/rods = 1,
)
result = /obj/structure/curtain
category = CAT_FURNITURE
/datum/crafting_recipe/aquarium
name = "Aquarium"
result = /obj/structure/aquarium
time = 10 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 15,
/obj/item/stack/sheet/glass = 10,
/obj/item/aquarium_kit = 1,
)
category = CAT_FURNITURE
/datum/crafting_recipe/mirror
name = "Mirror"
result = /obj/item/wallframe/mirror
reqs = list(
/obj/item/stack/sheet/glass = 5,
/obj/item/stack/sheet/mineral/silver = 2,
)
category = CAT_FURNITURE
@@ -0,0 +1,132 @@
/datum/crafting_recipe/stunprod
name = "Stunprod"
result = /obj/item/melee/baton/security/cattleprod
reqs = list(
/obj/item/restraints/handcuffs/cable = 1,
/obj/item/stack/rods = 1,
/obj/item/assembly/igniter = 1,
)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/teleprod
name = "Teleprod"
result = /obj/item/melee/baton/security/cattleprod/teleprod
reqs = list(
/obj/item/restraints/handcuffs/cable = 1,
/obj/item/stack/rods = 1,
/obj/item/assembly/igniter = 1,
/obj/item/stack/ore/bluespace_crystal = 1,
)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/tailclub
name = "Tail Club"
result = /obj/item/tailclub
reqs = list(
/obj/item/organ/external/tail/lizard = 1,
/obj/item/stack/sheet/iron = 1,
)
blacklist = list(/obj/item/organ/external/tail/lizard/fake)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/tailwhip
name = "Liz O' Nine Tails"
result = /obj/item/melee/chainofcommand/tailwhip
reqs = list(
/obj/item/organ/external/tail/lizard = 1,
/obj/item/stack/cable_coil = 1,
)
blacklist = list(/obj/item/organ/external/tail/lizard/fake)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/catwhip
name = "Cat O' Nine Tails"
result = /obj/item/melee/chainofcommand/tailwhip/kitty
reqs = list(
/obj/item/organ/external/tail/cat = 1,
/obj/item/stack/cable_coil = 1,
)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
result = /obj/item/chainsaw
reqs = list(
/obj/item/circular_saw = 1,
/obj/item/stack/cable_coil = 3,
/obj/item/stack/sheet/plasteel = 5,
)
tool_behaviors = list(TOOL_WELDER)
time = 5 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/spear
name = "Spear"
result = /obj/item/spear
reqs = list(
/obj/item/restraints/handcuffs/cable = 1,
/obj/item/shard = 1,
/obj/item/stack/rods = 1,
)
parts = list(/obj/item/shard = 1)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/toysword
name = "Toy Sword"
reqs = list(
/obj/item/light/bulb = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/stack/sheet/plastic = 4,
)
result = /obj/item/toy/sword
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/bonedagger
name = "Bone Dagger"
result = /obj/item/knife/combat/bone
time = 2 SECONDS
reqs = list(/obj/item/stack/sheet/bone = 2)
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/bonespear
name = "Bone Spear"
result = /obj/item/spear/bonespear
time = 3 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 4,
/obj/item/stack/sheet/sinew = 1,
)
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/boneaxe
name = "Bone Axe"
result = /obj/item/fireaxe/boneaxe
time = 5 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 6,
/obj/item/stack/sheet/sinew = 3,
)
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/house_edge
name = "House Edge"
result = /obj/item/house_edge
always_available = FALSE
tool_behaviors = list(TOOL_WRENCH, TOOL_SCREWDRIVER, TOOL_WELDER)
reqs = list(
/obj/item/v8_engine = 1,
/obj/item/weaponcrafting/receiver = 1,
/obj/item/assembly/igniter = 1,
/obj/item/stack/sheet/iron = 2,
/obj/item/knife = 1,
/obj/item/weldingtool = 1,
/obj/item/roulette_wheel_beacon = 1,
)
time = 10 SECONDS
category = CAT_WEAPON_MELEE
+25
View File
@@ -0,0 +1,25 @@
/datum/crafting_recipe/naturalpaper
name = "Hand-Pressed Paper"
time = 3 SECONDS
reqs = list(/datum/reagent/water = 50, /obj/item/stack/sheet/mineral/wood = 1)
tool_paths = list(/obj/item/hatchet)
result = /obj/item/paper_bin/bundlenatural
category = CAT_MISC
/datum/crafting_recipe/skeleton_key
name = "Skeleton Key"
time = 3 SECONDS
reqs = list(/obj/item/stack/sheet/bone = 5)
result = /obj/item/skeleton_key
always_available = FALSE
category = CAT_MISC
/datum/crafting_recipe/coffee_cartridge
name = "Bootleg Coffee Cartridge"
result = /obj/item/coffee_cartridge/bootleg
time = 2 SECONDS
reqs = list(
/obj/item/blank_coffee_cartridge = 1,
/datum/reagent/toxin/coffeepowder = 10,
)
category = CAT_MISC
@@ -0,0 +1,255 @@
/datum/crafting_recipe/bola
name = "Bola"
result = /obj/item/restraints/legcuffs/bola
reqs = list(
/obj/item/restraints/handcuffs/cable = 1,
/obj/item/stack/sheet/iron = 6,
)
time = 2 SECONDS //faster than crafting them by hand!
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/gonbola
name = "Gonbola"
result = /obj/item/restraints/legcuffs/bola/gonbola
reqs = list(
/obj/item/restraints/handcuffs/cable = 1,
/obj/item/stack/sheet/iron = 6,
/obj/item/stack/sheet/animalhide/gondola = 1,
)
time = 4 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/reciever
name = "Modular Rifle Reciever"
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER, TOOL_SAW)
result = /obj/item/weaponcrafting/receiver
reqs = list(
/obj/item/stack/sheet/iron = 5,
/obj/item/stack/sticky_tape = 1,
/obj/item/screwdriver = 1,
/obj/item/assembly/mousetrap = 1,
)
time = 10 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/riflestock
name = "Wooden Rifle Stock"
tool_paths = list(/obj/item/hatchet)
result = /obj/item/weaponcrafting/stock
reqs = list(
/obj/item/stack/sheet/mineral/wood = 8,
/obj/item/stack/sticky_tape = 1,
)
time = 5 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/advancedegun
name = "Advanced Energy Gun"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/e_gun/nuclear
reqs = list(
/obj/item/gun/energy/e_gun = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/nuclear = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/advancedegun/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/e_gun)
/datum/crafting_recipe/tempgun
name = "Temperature Gun"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/temperature
reqs = list(
/obj/item/gun/energy/e_gun = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/temperature = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/tempgun/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/e_gun)
/datum/crafting_recipe/beam_rifle
name = "Particle Acceleration Rifle"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/beam_rifle
reqs = list(
/obj/item/gun/energy/e_gun = 1,
/obj/item/assembly/signaler/anomaly/flux = 1,
/obj/item/assembly/signaler/anomaly/grav = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/beam_rifle = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/beam_rifle/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/e_gun)
/datum/crafting_recipe/ebow
name = "Energy Crossbow"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/recharge/ebow/large
reqs = list(
/obj/item/gun/energy/recharge/kinetic_accelerator = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/ebow = 1,
/datum/reagent/uranium/radium = 15,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/xraylaser
name = "X-ray Laser Gun"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/xray
reqs = list(
/obj/item/gun/energy/laser = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/xray = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/xraylaser/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/laser)
/datum/crafting_recipe/hellgun
name = "Hellfire Laser Gun"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/laser/hellgun
reqs = list(
/obj/item/gun/energy/laser = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/hellgun = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/hellgun/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/laser)
/datum/crafting_recipe/ioncarbine
name = "Ion Carbine"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/ionrifle/carbine
reqs = list(
/obj/item/gun/energy/laser = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/ion = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/ioncarbine/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/laser)
/datum/crafting_recipe/decloner
name = "Biological Demolecularisor"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/decloner
reqs = list(
/obj/item/gun/energy/laser = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/decloner = 1,
/datum/reagent/baldium = 30,
/datum/reagent/toxin/mutagen = 4,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/decloner/New()
..()
blacklist += subtypesof(/obj/item/gun/energy/laser)
/datum/crafting_recipe/teslacannon
name = "Tesla Cannon"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/gun/energy/tesla_cannon
reqs = list(
/obj/item/assembly/signaler/anomaly/flux = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/tesla = 1,
)
time = 20 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH)
reqs = list(
/obj/item/stack/sheet/iron = 4,
/obj/item/stack/package_wrap = 8,
/obj/item/pipe/quaternary = 2,
)
time = 5 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/flamethrower
name = "Flamethrower"
result = /obj/item/flamethrower
reqs = list(
/obj/item/weldingtool = 1,
/obj/item/assembly/igniter = 1,
/obj/item/stack/rods = 1,
)
parts = list(
/obj/item/assembly/igniter = 1,
/obj/item/weldingtool = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 1 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/pipegun
name = "Pipegun"
result = /obj/item/gun/ballistic/rifle/boltaction/pipegun
reqs = list(/obj/item/weaponcrafting/receiver = 1,
/obj/item/pipe = 1,
/obj/item/weaponcrafting/stock = 1,
/obj/item/stack/sticky_tape = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 5 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/pipegun_prime
name = "Regal Pipegun"
always_available = FALSE
result = /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime
reqs = list(
/obj/item/gun/ballistic/rifle/boltaction/pipegun = 1,
/obj/item/food/deadmouse = 1,
/datum/reagent/consumable/grey_bull = 20,
/obj/item/spear = 1,
/obj/item/storage/toolbox = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
tool_paths = list(/obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas, /obj/item/melee/baton/security/cattleprod)
time = 30 SECONDS //contemplate for a bit
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/trash_cannon
name = "Trash Cannon"
always_available = FALSE
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER)
result = /obj/structure/cannon/trash
reqs = list(
/obj/item/melee/skateboard/improvised = 1,
/obj/item/tank/internals/oxygen = 1,
/datum/reagent/drug/maint/tar = 15,
/obj/item/restraints/handcuffs/cable = 1,
/obj/item/storage/toolbox = 1,
)
category = CAT_WEAPON_RANGED
File diff suppressed because it is too large Load Diff
+214
View File
@@ -0,0 +1,214 @@
/datum/crafting_recipe/ed209
name = "ED209"
result = /mob/living/simple_animal/bot/secbot/ed209
reqs = list(
/obj/item/robot_suit = 1,
/obj/item/clothing/head/helmet = 1,
/obj/item/clothing/suit/armor/vest = 1,
/obj/item/bodypart/leg/left/robot = 1,
/obj/item/bodypart/leg/right/robot = 1,
/obj/item/stack/sheet/iron = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/gun/energy/disabler = 1,
/obj/item/assembly/prox_sensor = 1,
)
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER)
time = 6 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/secbot
name = "Secbot"
result = /mob/living/simple_animal/bot/secbot
reqs = list(
/obj/item/assembly/signaler = 1,
/obj/item/clothing/head/helmet/sec = 1,
/obj/item/melee/baton/security/ = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/arm/right/robot = 1,
)
tool_behaviors = list(TOOL_WELDER)
time = 6 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/cleanbot
name = "Cleanbot"
result = /mob/living/simple_animal/bot/cleanbot
reqs = list(
/obj/item/reagent_containers/cup/bucket = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/arm/right/robot = 1,
)
parts = list(/obj/item/reagent_containers/cup/bucket = 1)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/floorbot
name = "Floorbot"
result = /mob/living/simple_animal/bot/floorbot
reqs = list(
/obj/item/storage/toolbox = 1,
/obj/item/stack/tile/iron = 10,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/arm/right/robot = 1,
)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/medbot
name = "Medbot"
result = /mob/living/simple_animal/bot/medbot
reqs = list(
/obj/item/healthanalyzer = 1,
/obj/item/storage/medkit = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bodypart/arm/right/robot = 1,
)
parts = list(
/obj/item/storage/medkit = 1,
/obj/item/healthanalyzer = 1,
)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/medbot/on_craft_completion(mob/user, atom/result)
var/mob/living/simple_animal/bot/medbot/bot = result
var/obj/item/storage/medkit/medkit = bot.contents[3]
bot.medkit_type = medkit
bot.healthanalyzer = bot.contents[4]
if (istype(medkit, /obj/item/storage/medkit/fire))
bot.skin = "ointment"
else if (istype(medkit, /obj/item/storage/medkit/toxin))
bot.skin = "tox"
else if (istype(medkit, /obj/item/storage/medkit/o2))
bot.skin = "o2"
else if (istype(medkit, /obj/item/storage/medkit/brute))
bot.skin = "brute"
else if (istype(medkit, /obj/item/storage/medkit/advanced))
bot.skin = "advanced"
bot.damagetype_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE
bot.update_appearance()
/datum/crafting_recipe/honkbot
name = "Honkbot"
result = /mob/living/simple_animal/bot/secbot/honkbot
reqs = list(
/obj/item/storage/box/clown = 1,
/obj/item/bodypart/arm/right/robot = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/bikehorn = 1,
)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/firebot
name = "Firebot"
result = /mob/living/simple_animal/bot/firebot
reqs = list(
/obj/item/extinguisher = 1,
/obj/item/bodypart/arm/right/robot = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/clothing/head/utility/hardhat/red = 1,
)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/vibebot
name = "Vibebot"
result = /mob/living/simple_animal/bot/vibebot
reqs = list(
/obj/item/light/bulb = 2,
/obj/item/bodypart/head/robot = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/toy/crayon = 1,
)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/hygienebot
name = "Hygienebot"
result = /mob/living/simple_animal/bot/hygienebot
reqs = list(
/obj/item/bot_assembly/hygienebot = 1,
/obj/item/stack/ducts = 1,
/obj/item/assembly/prox_sensor = 1,
)
tool_behaviors = list(TOOL_WELDER)
time = 4 SECONDS
category = CAT_ROBOT
/datum/crafting_recipe/vim
name = "Vim"
result = /obj/vehicle/sealed/car/vim
reqs = list(
/obj/item/clothing/head/helmet/space/eva = 1,
/obj/item/bodypart/leg/left/robot = 1,
/obj/item/bodypart/leg/right/robot = 1,
/obj/item/flashlight = 1,
/obj/item/assembly/voice = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 6 SECONDS //Has a four second do_after when building manually
category = CAT_ROBOT
/datum/crafting_recipe/aitater
name = "intelliTater"
result = /obj/item/aicard/aitater
time = 3 SECONDS
tool_behaviors = list(TOOL_WIRECUTTER)
reqs = list(
/obj/item/aicard = 1,
/obj/item/food/grown/potato = 1,
/obj/item/stack/cable_coil = 5,
)
parts = list(/obj/item/aicard = 1)
category = CAT_ROBOT
/datum/crafting_recipe/aitater/aispook
name = "intelliLantern"
result = /obj/item/aicard/aispook
reqs = list(
/obj/item/aicard = 1,
/obj/item/food/grown/pumpkin = 1,
/obj/item/stack/cable_coil = 5,
)
/datum/crafting_recipe/aitater/on_craft_completion(mob/user, atom/result)
var/obj/item/aicard/new_card = result
var/obj/item/aicard/base_card = result.contents[1]
var/mob/living/silicon/ai = base_card.AI
if(ai)
base_card.AI = null
ai.forceMove(new_card)
new_card.AI = ai
new_card.update_appearance()
qdel(base_card)
/datum/crafting_recipe/mod_core_standard
name = "MOD core (Standard)"
result = /obj/item/mod/core/standard
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 10 SECONDS
reqs = list(
/obj/item/stack/cable_coil = 5,
/obj/item/stack/rods = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/organ/internal/heart/ethereal = 1,
)
category = CAT_ROBOT
/datum/crafting_recipe/mod_core_ethereal
name = "MOD core (Ethereal)"
result = /obj/item/mod/core/ethereal
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 10 SECONDS
reqs = list(
/datum/reagent/consumable/liquidelectricity = 5,
/obj/item/stack/cable_coil = 5,
/obj/item/stack/rods = 2,
/obj/item/stack/sheet/glass = 1,
/obj/item/reagent_containers/syringe = 1,
)
category = CAT_ROBOT
@@ -0,0 +1,62 @@
/datum/crafting_recipe/paperframes
name = "Paper Frames"
time = 1 SECONDS
reqs = list(
/obj/item/stack/sheet/mineral/wood = 5,
/obj/item/paper = 20,
)
result = /obj/item/stack/sheet/paperframes
result_amount = 5
category = CAT_STRUCTURE
/datum/crafting_recipe/rib
name = "Colossal Rib"
always_available = FALSE
reqs = list(
/obj/item/stack/sheet/bone = 10,
/datum/reagent/fuel/oil = 5,
)
result = /obj/structure/statue/bone/rib
category = CAT_STRUCTURE
/datum/crafting_recipe/skull
name = "Skull Carving"
always_available = FALSE
reqs = list(
/obj/item/stack/sheet/bone = 6,
/datum/reagent/fuel/oil = 5,
)
result = /obj/structure/statue/bone/skull
category = CAT_STRUCTURE
/datum/crafting_recipe/halfskull
name = "Cracked Skull Carving"
always_available = FALSE
reqs = list(
/obj/item/stack/sheet/bone = 3,
/datum/reagent/fuel/oil = 5,
)
result = /obj/structure/statue/bone/skull/half
category = CAT_STRUCTURE
/datum/crafting_recipe/firecabinet
name = "Fire Axe Cabinet"
result = /obj/item/wallframe/fireaxecabinet
time = 8 SECONDS
reqs = list(
/obj/item/stack/sheet/plasteel = 5,
/obj/item/stack/sheet/glass = 5,
/obj/item/stack/cable_coil = 10,
)
category = CAT_STRUCTURE
/datum/crafting_recipe/mechcabinet
name = "Mech Removal Cabinet"
result = /obj/item/wallframe/fireaxecabinet/mechremoval
time = 8 SECONDS
reqs = list(
/obj/item/stack/sheet/plasteel = 5,
/obj/item/stack/sheet/glass = 5,
/obj/item/stack/cable_coil = 10,
)
category = CAT_STRUCTURE
@@ -138,3 +138,169 @@
time = 2 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/lizardhat
name = "Lizard Cloche Hat"
result = /obj/item/clothing/head/costume/lizard
time = 1 SECONDS
reqs = list(/obj/item/organ/external/tail/lizard = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/lizardhat_alternate
name = "Lizard Cloche Hat"
result = /obj/item/clothing/head/costume/lizard
time = 1 SECONDS
reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/kittyears
name = "Kitty Ears"
result = /obj/item/clothing/head/costume/kitty/genuine
time = 1 SECONDS
reqs = list(
/obj/item/organ/external/tail/cat = 1,
/obj/item/organ/internal/ears/cat = 1,
)
category = CAT_CLOTHING
/datum/crafting_recipe/bonearmor
name = "Bone Armor"
result = /obj/item/clothing/suit/armor/bone
time = 3 SECONDS
reqs = list(/obj/item/stack/sheet/bone = 6)
category = CAT_CLOTHING
/datum/crafting_recipe/bonetalisman
name = "Bone Talisman"
result = /obj/item/clothing/accessory/talisman
time = 2 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 2,
/obj/item/stack/sheet/sinew = 1,
)
category = CAT_CLOTHING
/datum/crafting_recipe/bonecodpiece
name = "Skull Codpiece"
result = /obj/item/clothing/accessory/skullcodpiece
time = 2 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 2,
/obj/item/stack/sheet/animalhide/goliath_hide = 1,
)
category = CAT_CLOTHING
/datum/crafting_recipe/skilt
name = "Sinew Kilt"
result = /obj/item/clothing/accessory/skilt
time = 2 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 1,
/obj/item/stack/sheet/sinew = 2,
)
category = CAT_CLOTHING
/datum/crafting_recipe/bracers
name = "Bone Bracers"
result = /obj/item/clothing/gloves/bracer
time = 2 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 2,
/obj/item/stack/sheet/sinew = 1,
)
category = CAT_CLOTHING
/datum/crafting_recipe/skullhelm
name = "Skull Helmet"
result = /obj/item/clothing/head/helmet/skull
time = 3 SECONDS
reqs = list(/obj/item/stack/sheet/bone = 4)
category = CAT_CLOTHING
/datum/crafting_recipe/goliathcloak
name = "Goliath Cloak"
result = /obj/item/clothing/suit/hooded/cloak/goliath
time = 5 SECONDS
reqs = list(
/obj/item/stack/sheet/leather = 2,
/obj/item/stack/sheet/sinew = 2,
/obj/item/stack/sheet/animalhide/goliath_hide = 2,
) //it takes 4 goliaths to make 1 cloak if the plates are skinned
category = CAT_CLOTHING
/datum/crafting_recipe/drakecloak
name = "Ash Drake Armour"
result = /obj/item/clothing/suit/hooded/cloak/drake
time = 6 SECONDS
reqs = list(
/obj/item/stack/sheet/bone = 10,
/obj/item/stack/sheet/sinew = 2,
/obj/item/stack/sheet/animalhide/ashdrake = 5,
)
category = CAT_CLOTHING
/datum/crafting_recipe/godslayer
name = "Godslayer Armour"
result = /obj/item/clothing/suit/hooded/cloak/godslayer
time = 6 SECONDS
reqs = list(
/obj/item/ice_energy_crystal = 1,
/obj/item/wendigo_skull = 1,
/obj/item/clockwork_alloy = 1,
)
category = CAT_CLOTHING
/datum/crafting_recipe/mummy
name = "Mummification Bandages (Mask)"
result = /obj/item/clothing/mask/mummy
time = 1 SECONDS
tool_paths = list(/obj/item/nullrod/egyptian)
reqs = list(/obj/item/stack/sheet/cloth = 2)
category = CAT_CLOTHING
/datum/crafting_recipe/mummy/body
name = "Mummification Bandages (Body)"
result = /obj/item/clothing/under/costume/mummy
reqs = list(/obj/item/stack/sheet/cloth = 5)
/datum/crafting_recipe/chaplain_hood
name = "Follower Hoodie"
result = /obj/item/clothing/suit/hooded/chaplain_hoodie
time = 1 SECONDS
tool_paths = list(
/obj/item/clothing/suit/hooded/chaplain_hoodie,
/obj/item/storage/book/bible,
)
reqs = list(/obj/item/stack/sheet/cloth = 4)
category = CAT_CLOTHING
/datum/crafting_recipe/flower_garland
name = "Flower Garland"
result = /obj/item/clothing/head/costume/garland
time = 1 SECONDS
reqs = list(
/obj/item/food/grown/poppy = 4,
/obj/item/food/grown/harebell = 4,
/obj/item/food/grown/rose = 4,
)
category = CAT_CLOTHING
/datum/crafting_recipe/pillow_suit
name = "pillow suit"
result = /obj/item/clothing/suit/pillow_suit
time = 2 SECONDS
reqs = list(
/obj/item/stack/sticky_tape = 10,
/obj/item/pillow = 5,
)
category = CAT_CLOTHING
/datum/crafting_recipe/pillow_hood
name = "pillow hood"
result = /obj/item/clothing/head/pillow_hood
tool_behaviors = list(TOOL_WIRECUTTER, TOOL_KNIFE)
time = 2 SECONDS
reqs = list(
/obj/item/stack/sticky_tape = 5,
/obj/item/pillow = 1,
)
category = CAT_CLOTHING
+9
View File
@@ -0,0 +1,9 @@
/datum/crafting_recipe/blackcarpet
name = "Black Carpet"
reqs = list(
/obj/item/stack/tile/carpet = 50,
/obj/item/toy/crayon/black = 1,
)
result = /obj/item/stack/tile/carpet/black
result_amount = 50
category = CAT_TILES
+48
View File
@@ -0,0 +1,48 @@
/datum/crafting_recipe/gold_horn
name = "Golden Bike Horn"
result = /obj/item/bikehorn/golden
time = 2 SECONDS
reqs = list(
/obj/item/stack/sheet/mineral/bananium = 5,
/obj/item/bikehorn = 1,
)
category = CAT_TOOLS
/datum/crafting_recipe/bonfire
name = "Bonfire"
time = 6 SECONDS
reqs = list(/obj/item/grown/log = 5)
parts = list(/obj/item/grown/log = 5)
blacklist = list(/obj/item/grown/log/steel)
result = /obj/structure/bonfire
category = CAT_TOOLS
/datum/crafting_recipe/boneshovel
name = "Serrated Bone Shovel"
always_available = FALSE
reqs = list(
/obj/item/stack/sheet/bone = 4,
/datum/reagent/fuel/oil = 5,
/obj/item/shovel/spade = 1,
)
result = /obj/item/shovel/serrated
category = CAT_TOOLS
/datum/crafting_recipe/lasso
name = "Bone Lasso"
reqs = list(
/obj/item/stack/sheet/bone = 1,
/obj/item/stack/sheet/sinew = 5,
)
result = /obj/item/key/lasso
category = CAT_TOOLS
/datum/crafting_recipe/ipickaxe
name = "Improvised Pickaxe"
reqs = list(
/obj/item/crowbar = 1,
/obj/item/knife = 1,
/obj/item/stack/sticky_tape = 1,
)
result = /obj/item/pickaxe/improvised
category = CAT_TOOLS
@@ -0,0 +1,95 @@
/datum/crafting_recipe/meteorslug
name = "Meteorslug Shell"
result = /obj/item/ammo_casing/shotgun/meteorslug
reqs = list(
/obj/item/ammo_casing/shotgun/techshell = 1,
/obj/item/rcd_ammo = 1,
/datum/reagent/gunpowder = 10,
/datum/reagent/consumable/ethanol/rum = 10,
/obj/item/stock_parts/manipulator = 2,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/pulseslug
name = "Pulse Slug Shell"
result = /obj/item/ammo_casing/shotgun/pulseslug
reqs = list(
/obj/item/ammo_casing/shotgun/techshell = 1,
/obj/item/stock_parts/capacitor/adv = 2,
/obj/item/stock_parts/micro_laser/ultra = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/dragonsbreath
name = "Dragonsbreath Shell"
result = /obj/item/ammo_casing/shotgun/dragonsbreath
reqs = list(
/obj/item/ammo_casing/shotgun/techshell = 1,
/datum/reagent/phosphorus = 5,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/frag12
name = "FRAG-12 Shell"
result = /obj/item/ammo_casing/shotgun/frag12
reqs = list(
/obj/item/ammo_casing/shotgun/techshell = 1,
/datum/reagent/glycerol = 5,
/datum/reagent/toxin/acid = 5,
/datum/reagent/toxin/acid/fluacid = 5,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/ionslug
name = "Ion Scatter Shell"
result = /obj/item/ammo_casing/shotgun/ion
reqs = list(
/obj/item/ammo_casing/shotgun/techshell = 1,
/obj/item/stock_parts/micro_laser/ultra = 1,
/obj/item/stock_parts/subspace/crystal = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/improvisedslug
name = "Improvised Shotgun Shell"
result = /obj/item/ammo_casing/shotgun/improvised
reqs = list(
/obj/item/stack/sheet/iron = 2,
/obj/item/stack/cable_coil = 1,
/datum/reagent/fuel = 10,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 1.2 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/laserslug
name = "Scatter Laser Shell"
result = /obj/item/ammo_casing/shotgun/laserslug
reqs = list(
/obj/item/ammo_casing/shotgun/techshell = 1,
/obj/item/stock_parts/capacitor/adv = 1,
/obj/item/stock_parts/micro_laser/high = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/trashball
name = "Trashball"
always_available = FALSE
result = /obj/item/stack/cannonball/trashball
reqs = list(
/obj/item/stack/sheet = 5,
/datum/reagent/consumable/space_cola = 10,
)
category = CAT_WEAPON_AMMO
+32 -2
View File
@@ -18,6 +18,8 @@
var/item_path = /obj/item/fireaxe
/// Overlay we get when the item is inside us.
var/item_overlay = "axe"
/// Whether we should populate our own contents on Initialize()
var/populate_contents = TRUE
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
@@ -31,7 +33,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
/obj/structure/fireaxecabinet/Initialize(mapload)
. = ..()
held_item = new item_path(src)
if(populate_contents)
held_item = new item_path(src)
update_appearance()
/obj/structure/fireaxecabinet/Destroy()
@@ -115,7 +118,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
if(!(flags_1 & NODECONSTRUCT_1))
if(held_item && loc)
held_item.forceMove(loc)
new /obj/item/stack/sheet/iron(loc, 2)
new /obj/item/wallframe/fireaxecabinet(loc)
qdel(src)
/obj/structure/fireaxecabinet/blob_act(obj/structure/blob/B)
@@ -190,6 +193,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
update_appearance()
return
/obj/structure/fireaxecabinet/empty
populate_contents = FALSE
/obj/item/wallframe/fireaxecabinet
name = "fire axe cabinet"
desc = "Home to a window's greatest nightmare. Apply to wall to use."
icon = 'icons/obj/wallmounts.dmi'
icon_state = "fireaxe"
result_path = /obj/structure/fireaxecabinet/empty
pixel_shift = 32
/obj/structure/fireaxecabinet/mechremoval
name = "mech removal tool cabinet"
desc = "There is a small label that reads \"For Emergency use only\" along with details for safe use of the tool. As if."
@@ -198,3 +212,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
item_overlay = "crowbar"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet/mechremoval, 32)
/obj/structure/fireaxecabinet/mechremoval/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(held_item && loc)
held_item.forceMove(loc)
new /obj/item/wallframe/fireaxecabinet/mechremoval(loc)
qdel(src)
/obj/structure/fireaxecabinet/mechremoval/empty
populate_contents = FALSE
/obj/item/wallframe/fireaxecabinet/mechremoval
name = "mech removal tool cabinet"
desc = "Home to a very special crowbar. Apply to wall to use."
icon_state = "mechremoval"
result_path = /obj/structure/fireaxecabinet/mechremoval/empty
+18 -6
View File
@@ -1,4 +1,3 @@
//wip wip wup
/obj/structure/mirror
name = "mirror"
desc = "Mirror mirror on the wall, who's the most robust of them all?"
@@ -91,7 +90,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
/obj/structure/mirror/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(!disassembled)
new /obj/item/shard( src.loc )
new /obj/item/shard(loc)
else
new /obj/item/wallframe/mirror(loc)
qdel(src)
/obj/structure/mirror/welder_act(mob/living/user, obj/item/I)
@@ -105,10 +106,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
if(!I.tool_start_check(user, amount=0))
return TRUE
to_chat(user, span_notice("You begin repairing [src]..."))
if(I.use_tool(src, user, 10, volume=50))
to_chat(user, span_notice("You repair [src]."))
broken = 0
balloon_alert(user, "repairing...")
if(I.use_tool(src, user, 10, volume = 50))
balloon_alert(user, "repaired")
broken = FALSE
icon_state = initial(icon_state)
desc = initial(desc)
@@ -121,6 +122,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
if(BURN)
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
/obj/item/wallframe/mirror
name = "mirror"
desc = "An unmounted mirror. Attach it to a wall to use."
icon = 'icons/obj/watercloset.dmi'
icon_state = "mirror"
custom_materials = list(
/datum/material/glass = MINERAL_MATERIAL_AMOUNT,
/datum/material/silver = MINERAL_MATERIAL_AMOUNT,
)
result_path = /obj/structure/mirror
pixel_shift = 28
/obj/structure/mirror/magic
name = "magic mirror"
+16 -1
View File
@@ -987,10 +987,25 @@
#include "code\datums\components\wet_floor.dm"
#include "code\datums\components\container_item\container_item.dm"
#include "code\datums\components\container_item\tank_holder.dm"
#include "code\datums\components\crafting\_recipes.dm"
#include "code\datums\components\crafting\atmospheric.dm"
#include "code\datums\components\crafting\chemistry.dm"
#include "code\datums\components\crafting\containers.dm"
#include "code\datums\components\crafting\crafting.dm"
#include "code\datums\components\crafting\doors.dm"
#include "code\datums\components\crafting\entertainment.dm"
#include "code\datums\components\crafting\equipment.dm"
#include "code\datums\components\crafting\furniture.dm"
#include "code\datums\components\crafting\guncrafting.dm"
#include "code\datums\components\crafting\recipes.dm"
#include "code\datums\components\crafting\melee_weapon.dm"
#include "code\datums\components\crafting\misc.dm"
#include "code\datums\components\crafting\ranged_weapon.dm"
#include "code\datums\components\crafting\robot.dm"
#include "code\datums\components\crafting\structures.dm"
#include "code\datums\components\crafting\tailoring.dm"
#include "code\datums\components\crafting\tiles.dm"
#include "code\datums\components\crafting\tools.dm"
#include "code\datums\components\crafting\weapon_ammo.dm"
#include "code\datums\components\fantasy\_fantasy.dm"
#include "code\datums\components\fantasy\affix.dm"
#include "code\datums\components\fantasy\prefixes.dm"