mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-29 11:02:05 +00:00
## About The Pull Request A morbid surgery toolset for coroners! Functions exactly like an ordinary surgical toolset except it uses morbid tools instead of normal tools! All stats are the same between them otherwise! So to clarify, this means that these tools all have the CRUEL_IMPLEMENT tag, as they inherit it from their parent tool. Making them faster for morbid surgeries when used by someone with the morbid trait (ala coroner). Also includes a way to craft the toolset: Requires 1 surgical arm implant and the following tools: wirecutter, screwdriver, and welder **NOTE:** Cannot use an emagged surgical toolset. Takes 10 seconds to craft! Also made a second craft which allows you to change it back to normal toolset too. Functions identically to the first but obviously requires a morbid toolset to do so. The morbid toolset does not have an emagged variant at this time. ## Why It's Good For The Game More fun thematic tools for players to enjoy, and for coroners that prefer to use toolsets now they don't have to give up their thematic tools for them. ## Changelog 🆑 add: Adds a brand new morbid themed surgical toolset, along with a way to craft it from a normal surgical toolset! These tools, much like their non-augmented counterparts are faster at certain surgeries when used by someone that is morbidly inclined. /🆑  
125 lines
5.0 KiB
Plaintext
125 lines
5.0 KiB
Plaintext
/datum/crafting_recipe
|
|
/// in-game display name
|
|
/// Optional, if not set uses result name
|
|
var/name
|
|
/// description displayed in game
|
|
/// Optional, if not set uses result desc
|
|
var/desc
|
|
///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
|
|
/**
|
|
* If defined, it'll spawn paths in this list first during the unit test.
|
|
* This is an assoc list, with the key being the paths and the value being the amount (e.g. list(/obj/item = 2))
|
|
*/
|
|
var/list/unit_test_spawn_extras
|
|
///time in seconds. Remember to use the SECONDS define!
|
|
var/time = 3 SECONDS
|
|
///type paths of items that will be forceMoved() into the result instead of being deleted
|
|
var/list/parts = list()
|
|
///items, structures and machineries of types that are in this list won't transfer their materials to the result
|
|
var/list/requirements_mats_blacklist
|
|
///like tool_behaviors but for reagents
|
|
var/list/chem_catalysts = list()
|
|
///where it shows up in the crafting UI
|
|
var/category
|
|
///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
|
|
///Required structures for the craft, set the assigned value of the typepath to CRAFTING_STRUCTURE_CONSUME or CRAFTING_STRUCTURE_USE. Lazy associative list: type_path key -> flag value.
|
|
var/list/structures
|
|
/// Bitflag of additional placement checks required to place. (STACK_CHECK_CARDINALS|STACK_CHECK_ADJACENT|STACK_CHECK_TRAM_FORBIDDEN|STACK_CHECK_TRAM_EXCLUSIVE)
|
|
var/placement_checks = NONE
|
|
/// 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
|
|
/// Whether we should delete the contents of the crafted storage item (Only works with storage items, used for ammo boxes, donut boxes, internals boxes, etc)
|
|
var/delete_contents = TRUE
|
|
/// Allows you to craft so that you don't have to click the craft button many times.
|
|
var/mass_craftable = FALSE
|
|
|
|
///crafting_flags var to hold bool values
|
|
var/crafting_flags = CRAFT_CHECK_DENSITY
|
|
|
|
/datum/crafting_recipe/New()
|
|
if(!name && result)
|
|
var/atom/atom_result = result
|
|
name = initial(atom_result.name)
|
|
|
|
if(!(result in reqs))
|
|
blacklist += result
|
|
// These should be excluded from all crafting recipies
|
|
blacklist += list(
|
|
/obj/item/cautery/augment,
|
|
/obj/item/cautery/cruel/augment,
|
|
/obj/item/circular_saw/augment,
|
|
/obj/item/circular_saw/cruel/augment,
|
|
/obj/item/crowbar/cyborg,
|
|
/obj/item/hemostat/augment,
|
|
/obj/item/hemostat/cruel/augment,
|
|
/obj/item/multitool/cyborg,
|
|
/obj/item/retractor/augment,
|
|
/obj/item/retractor/cruel/augment,
|
|
/obj/item/scalpel/augment,
|
|
/obj/item/scalpel/cruel/augment,
|
|
/obj/item/screwdriver/cyborg,
|
|
/obj/item/surgicaldrill/augment,
|
|
/obj/item/surgicaldrill/cruel/augment,
|
|
/obj/item/weldingtool/largetank/cyborg,
|
|
/obj/item/wirecutters/cyborg,
|
|
/obj/item/wrench/cyborg,
|
|
)
|
|
if(tool_behaviors)
|
|
tool_behaviors = string_list(tool_behaviors)
|
|
if(tool_paths)
|
|
tool_paths = string_list(tool_paths)
|
|
for(var/key in parts)
|
|
if(!parts[key])
|
|
//ensure every single, same-type part used for the recipe will be transferred if the value is otherwise not specified
|
|
parts[key] = INFINITY
|
|
|
|
/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
|
|
src.placement_checks = stack_recipe.placement_checks
|
|
|
|
if(!(stack_recipe.crafting_flags & CRAFT_APPLIES_MATS))
|
|
requirements_mats_blacklist = list(material) //the item is not intended to have mats :shrug:
|
|
|
|
/**
|
|
* 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
|
|
|
|
///Run custom pre-craft checks for this recipe for tools, rather than consumed requirements.
|
|
/datum/crafting_recipe/proc/check_tools(atom/source, list/collected_tools, final_check = FALSE)
|
|
return TRUE
|
|
|
|
/// Additional UI data to be passed to the crafting UI for this recipe
|
|
/datum/crafting_recipe/proc/crafting_ui_data()
|
|
return list()
|