From 426a9139640bb4d566a3c7e2fdf6268e372409f4 Mon Sep 17 00:00:00 2001 From: Cody Brittain Date: Sun, 25 Aug 2024 13:22:38 -0400 Subject: [PATCH 01/21] Ported the Microlathe from Bay, and began autolathe refactor --- aurorastation.dme | 30 +- code/__DEFINES/machinery.dm | 6 + .../subsystems/initialization/fabrication.dm | 83 ++++ code/datums/wires/autolathe.dm | 60 --- code/datums/wires/fabricator.dm | 78 ++++ code/game/machinery/autolathe/autolathe.dm | 434 ------------------ .../machinery/autolathe/autolathe_datums.dm | 14 - .../circuitboards/machinery/research.dm | 2 +- .../objects/items/weapons/material/kitchen.dm | 7 + .../fabrication/__fabricator_defines.dm | 2 + code/modules/fabrication/_fabricator.dm | 260 +++++++++++ .../fabrication/_fabricator_build_order.dm | 19 + code/modules/fabrication/designs/_design.dm | 12 + .../designs/general/designs_arms_ammo.dm | 169 +++++++ .../designs/general/designs_devices.dm | 72 +++ .../designs/general/designs_engineering.dm | 44 ++ .../designs/general/designs_general.dm | 139 ++++++ .../designs/general/designs_medical.dm | 63 +++ .../designs/general/designs_tools.dm | 55 +++ .../designs/micro/designs_cutlery.dm | 41 ++ .../designs/micro/designs_glasses.dm | 50 ++ code/modules/fabrication/fabricator_build.dm | 82 ++++ code/modules/fabrication/fabricator_hacked.dm | 5 + code/modules/fabrication/fabricator_intake.dm | 69 +++ .../fabrication/fabricator_microlathe.dm | 22 + .../heavy_vehicle/equipment/utility.dm | 6 +- code/modules/item_worth/worths_list.dm | 2 +- .../GeneralCamo - Autolathe Refactor.yml | 59 +++ icons/obj/machinery/autolathe.dmi | Bin 1922 -> 0 bytes icons/obj/machinery/fabricators/autolathe.dmi | Bin 0 -> 966 bytes .../obj/machinery/fabricators/microlathe.dmi | Bin 0 -> 957 bytes .../abandoned_diner/abandoned_diner.dmm | 2 +- .../away_site/big_derelict/bigderelict.dmm | 2 +- .../away_site/first_aurora/first_aurora.dmm | 4 +- .../away_site/hivebot_hub/hivebot_hub.dmm | 2 +- .../konyang/point_verdant/point_verdant.dmm | 25 +- .../overgrown_mining_station.dmm | 2 +- .../hegemony_waypoint_submaps.dmm | 2 +- .../solarian_prewar/sensor_relay.dmm | 2 +- maps/away/away_site/shady/shady.dmm | 2 +- .../away_site/tajara/scrapper/scrapper.dmm | 2 +- .../uueoaesa/omgolo/omgolo_tourist.dmm | 2 +- .../uueoaesa/reclamation/ihss_reclamation.dmm | 2 +- .../wrecked_nt_ship/wrecked_nt_ship.dmm | 2 +- maps/away/ships/coc/coc_ranger/coc_ship.dmm | 2 +- maps/away/ships/coc/coc_scarab/coc_scarab.dmm | 2 +- .../ships/coc/coc_surveyor/coc_surveyor.dmm | 2 +- .../coc/gadpathur_patrol/gadpathur_patrol.dmm | 2 +- .../diona_serz_ship/diona_serz_ship.dmm | 2 +- .../dominian_corvette/dominian_corvette.dmm | 2 +- .../elyra/elyra_corvette/elyra_corvette.dmm | 2 +- .../ships/freebooter/freebooter_ship_.dmm | 2 +- .../fishing_league_trawler.dmm | 2 +- maps/away/ships/heph/cyclops/cyclops.dmm | 2 +- .../heph/heph_security/heph_security.dmm | 2 +- maps/away/ships/idris/idris_cruiser.dmm | 2 +- .../ships/kataphracts/kataphract_ship.dmm | 2 +- .../ships/konyang/kasf_ship/kasf_ship.dmm | 2 +- .../konyang/konyang_wreck/konyang_wreck.dmm | 2 +- maps/away/ships/orion/orion_express_ship.dmm | 2 +- maps/away/ships/sadar_scout/sadar_scout.dmm | 2 +- .../ships/sol/sol_merc/fsf_patrol_ship.dmm | 4 +- .../ships/sol/sol_pirate/sfa_patrol_ship.dmm | 4 +- maps/away/ships/sol/sol_ssmd/ssmd_ship.dmm | 2 +- .../tirakqi_smuggler/tirakqi_smuggler.dmm | 2 +- .../ships/tramp_freighter/tramp_freighter.dmm | 2 +- .../hiskyn/unathi_pirate_hiskyn.dmm | 2 +- .../izharshan/unathi_pirate_izharshan.dmm | 5 +- .../tarwa/unathi_pirate_tarwa.dmm | 2 +- maps/away/ships/xanu/xanu_frigate.dmm | 2 +- maps/dungeon_spawns/coc_ship_unique.dmm | 7 +- maps/dungeon_spawns/skrell_crash_unique.dmm | 2 +- maps/dungeon_spawns/sol_ship_unique.dmm | 2 +- maps/event/generic_dock/generic_dock-1.dmm | 7 +- maps/event/idris_cruise/idris_cruise-1.dmm | 7 +- .../helpers/event_shuttles/sccv_apollo_v1.dmm | 4 +- .../helpers/event_shuttles/sccv_apollo_v2.dmm | 4 +- .../helpers/event_shuttles/sccv_apollo_v3.dmm | 4 +- maps/helpers/event_shuttles/sccv_artemis.dmm | 4 +- maps/helpers/event_shuttles/sccv_packrat.dmm | 2 +- .../asteroid/coc_ship/coc_ship_unique.dmm | 7 +- .../skrell_ship/skrell_crash_unique.dmm | 2 +- .../asteroid/sol_ship/sol_ship_unique.dmm | 2 +- .../exoplanets/crashed_pod/crashed_pod.dmm | 2 +- .../konyang/abandoned/factory_arms.dmm | 8 +- .../exoplanets/konyang/abandoned/garage.dmm | 7 +- .../konyang/abandoned/landing_zone.dmm | 2 +- .../exoplanets/konyang/landing_zone.dmm | 2 +- .../konyang/ocean/naval_landing_zone.dmm | 2 +- .../exoplanets/konyang/pirate_outpost.dmm | 6 +- .../moghes/moghes_wasteland_ozeuoi.dmm | 2 +- .../exoplanets/ouerea/ouerea_autakh.dmm | 2 +- .../exoplanets/ouerea/ouerea_freewater.dmm | 2 +- .../uueoaesa/heph_mining_station.dmm | 2 +- .../exoplanets/uueoaesa/heph_survey_post.dmm | 2 +- .../uueoaesa/miners_guild_outpost.dmm | 2 +- .../exoplanets/uueoaesa/pid_kois_farm.dmm | 2 +- maps/sccv_horizon/sccv_horizon.dmm | 31 +- tgui/packages/tgui/assets/bg-hammertail.svg | 18 + tgui/packages/tgui/index.tsx | 1 + tgui/packages/tgui/interfaces/Autolathe.tsx | 7 +- .../tgui/styles/themes/hammertail.scss | 67 +++ 102 files changed, 1535 insertions(+), 681 deletions(-) create mode 100644 code/controllers/subsystems/initialization/fabrication.dm delete mode 100644 code/datums/wires/autolathe.dm create mode 100644 code/datums/wires/fabricator.dm delete mode 100644 code/game/machinery/autolathe/autolathe.dm delete mode 100644 code/game/machinery/autolathe/autolathe_datums.dm create mode 100644 code/modules/fabrication/__fabricator_defines.dm create mode 100644 code/modules/fabrication/_fabricator.dm create mode 100644 code/modules/fabrication/_fabricator_build_order.dm create mode 100644 code/modules/fabrication/designs/_design.dm create mode 100644 code/modules/fabrication/designs/general/designs_arms_ammo.dm create mode 100644 code/modules/fabrication/designs/general/designs_devices.dm create mode 100644 code/modules/fabrication/designs/general/designs_engineering.dm create mode 100644 code/modules/fabrication/designs/general/designs_general.dm create mode 100644 code/modules/fabrication/designs/general/designs_medical.dm create mode 100644 code/modules/fabrication/designs/general/designs_tools.dm create mode 100644 code/modules/fabrication/designs/micro/designs_cutlery.dm create mode 100644 code/modules/fabrication/designs/micro/designs_glasses.dm create mode 100644 code/modules/fabrication/fabricator_build.dm create mode 100644 code/modules/fabrication/fabricator_hacked.dm create mode 100644 code/modules/fabrication/fabricator_intake.dm create mode 100644 code/modules/fabrication/fabricator_microlathe.dm create mode 100644 html/changelogs/GeneralCamo - Autolathe Refactor.yml delete mode 100644 icons/obj/machinery/autolathe.dmi create mode 100644 icons/obj/machinery/fabricators/autolathe.dmi create mode 100644 icons/obj/machinery/fabricators/microlathe.dmi create mode 100644 tgui/packages/tgui/assets/bg-hammertail.svg create mode 100644 tgui/packages/tgui/styles/themes/hammertail.scss diff --git a/aurorastation.dme b/aurorastation.dme index 759cb38da8d..b0027ba597a 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -391,6 +391,7 @@ #include "code\controllers\subsystems\initialization\atlas.dm" #include "code\controllers\subsystems\initialization\atoms.dm" #include "code\controllers\subsystems\initialization\codex.dm" +#include "code\controllers\subsystems\initialization\fabrication.dm" #include "code\controllers\subsystems\initialization\holomap.dm" #include "code\controllers\subsystems\initialization\map_finalization.dm" #include "code\controllers\subsystems\initialization\misc_early.dm" @@ -585,10 +586,10 @@ #include "code\datums\wires\airlock.dm" #include "code\datums\wires\alarm.dm" #include "code\datums\wires\apc.dm" -#include "code\datums\wires\autolathe.dm" #include "code\datums\wires\camera.dm" #include "code\datums\wires\disposals.dm" #include "code\datums\wires\explosive.dm" +#include "code\datums\wires\fabricator.dm" #include "code\datums\wires\iff.dm" #include "code\datums\wires\ipc_tag_scanner.dm" #include "code\datums\wires\landmine.dm" @@ -969,17 +970,6 @@ #include "code\game\machinery\atmoalter\portable_atmospherics.dm" #include "code\game\machinery\atmoalter\pump.dm" #include "code\game\machinery\atmoalter\scrubber.dm" -#include "code\game\machinery\autolathe\autolathe.dm" -#include "code\game\machinery\autolathe\autolathe_datums.dm" -#include "code\game\machinery\autolathe\designs\ammunition.dm" -#include "code\game\machinery\autolathe\designs\armaments.dm" -#include "code\game\machinery\autolathe\designs\components.dm" -#include "code\game\machinery\autolathe\designs\dinnerware.dm" -#include "code\game\machinery\autolathe\designs\engineering.dm" -#include "code\game\machinery\autolathe\designs\general.dm" -#include "code\game\machinery\autolathe\designs\materials.dm" -#include "code\game\machinery\autolathe\designs\medical.dm" -#include "code\game\machinery\autolathe\designs\tools.dm" #include "code\game\machinery\bots\bots.dm" #include "code\game\machinery\camera\camera.dm" #include "code\game\machinery\camera\camera_assembly.dm" @@ -2199,6 +2189,22 @@ #include "code\modules\events\visitor.dm" #include "code\modules\events\wallrot.dm" #include "code\modules\ext_scripts\python.dm" +#include "code\modules\fabrication\__fabricator_defines.dm" +#include "code\modules\fabrication\_fabricator.dm" +#include "code\modules\fabrication\_fabricator_build_order.dm" +#include "code\modules\fabrication\fabricator_build.dm" +#include "code\modules\fabrication\fabricator_hacked.dm" +#include "code\modules\fabrication\fabricator_intake.dm" +#include "code\modules\fabrication\fabricator_microlathe.dm" +#include "code\modules\fabrication\designs\_design.dm" +#include "code\modules\fabrication\designs\general\designs_arms_ammo.dm" +#include "code\modules\fabrication\designs\general\designs_devices.dm" +#include "code\modules\fabrication\designs\general\designs_engineering.dm" +#include "code\modules\fabrication\designs\general\designs_general.dm" +#include "code\modules\fabrication\designs\general\designs_medical.dm" +#include "code\modules\fabrication\designs\general\designs_tools.dm" +#include "code\modules\fabrication\designs\micro\designs_cutlery.dm" +#include "code\modules\fabrication\designs\micro\designs_glasses.dm" #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\TextFilters.dm" #include "code\modules\games\cardemon.dm" diff --git a/code/__DEFINES/machinery.dm b/code/__DEFINES/machinery.dm index 3dc7f732189..8d31b27e198 100644 --- a/code/__DEFINES/machinery.dm +++ b/code/__DEFINES/machinery.dm @@ -30,6 +30,12 @@ #define MAINT 0x8 // Under maintenance. #define EMPED 0x10 // Temporary broken by EMP pulse. +#define FABRICATOR_EXTRA_COST_FACTOR 1.25 +#define FAB_HACKED BITFLAG(0) +#define FAB_DISABLED BITFLAG(1) +#define FAB_SHOCKED BITFLAG(2) +#define FAB_BUSY BITFLAG(3) + #define INOPERABLE(machine) (machine.stat & (BROKEN|NOPOWER|MAINT|EMPED)) #define OPERABLE(machine) !INOPERABLE(machine) diff --git a/code/controllers/subsystems/initialization/fabrication.dm b/code/controllers/subsystems/initialization/fabrication.dm new file mode 100644 index 00000000000..0dc5ac92f0e --- /dev/null +++ b/code/controllers/subsystems/initialization/fabrication.dm @@ -0,0 +1,83 @@ +SUBSYSTEM_DEF(fabrication) + name = "Fabrication" + flags = SS_NO_FIRE + init_order = INIT_ORDER_MISC + + /** + * List of lists(Strings => Paths - Subtypes of `/datum/fabricator_recipe`). Global list of fabricator recipes. Set during `Initialize()`. + * + * Example formatting: + * ```dm + * list( + * "general" = list( + * /datum/fabricator_recipe/A, + * /datum/fabricator_recipe/B + * ), + * "microlathe" = list( + * /datum/fabricator_recipe/C, + * /datum/fabricator_recipe/D + * ) + * ) + * ``` + */ + var/list/recipes = list() + + /** + * List of lists (Strings => Strings). Global list of recipe categories. These are pulled from the recipes provided in `recipes`. Set during `Initialize()`. + * + * Example formatting: + * ```dm + * list( + * "general" = list( + * "Arms and Ammunition", + * "Devices and Components" + * ), + * "microlathe" = list( + * "Cutlery", + * "Drinking Glasses" + * ) + * ) + * ``` + */ + var/list/categories = list() + +/datum/controller/subsystem/fabrication/Initialize() + for(var/singleton/autolathe_recipe/recipe in GET_SINGLETON_SUBTYPE_LIST(/singleton/autolathe_recipe)) + if(!recipe.name) + continue + for(var/type in recipe.fabricator_types) + if(!recipes[type]) + recipes[type] = list() + recipes[type] += recipe + if (!categories[type]) + categories[type] = list() + categories[type] |= recipe.category + var/obj/item/I = new recipe.path + if(I.matter && !recipe.resources) //This can be overidden in the datums. + recipe.resources = list() + for(var/material in I.matter) + recipe.resources[material] = I.matter[material] * FABRICATOR_EXTRA_COST_FACTOR + qdel(I) + return SS_INIT_SUCCESS + +/** + * Retrieves a list of categories for the given root type. + * + * **Parameters**: + * - `type` - The root type to fetch from the `categories` list. + * + * Returns list of strings. The categories associated with the given root type. + */ +/datum/controller/subsystem/fabrication/proc/get_categories(type) + return categories[type] + +/** + * Retrieves a list of recipes for the given root type. + * + * **Parameters**: + * - `type` - The root type to fetch from the `recipes` list. + * + * Returns list of paths (`/datum/fabricator_recipe`). The recipes associated with the given root type. + */ +/datum/controller/subsystem/fabrication/proc/get_recipes(type) + return recipes[type] diff --git a/code/datums/wires/autolathe.dm b/code/datums/wires/autolathe.dm deleted file mode 100644 index d549767e571..00000000000 --- a/code/datums/wires/autolathe.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/wires/autolathe - proper_name = "Autolathe" - holder_type = /obj/machinery/autolathe - -/datum/wires/autolathe/New(atom/holder) - wires = list( - WIRE_HACK, WIRE_DISABLE, - WIRE_SHOCK - ) - add_duds(2) - ..() - -/datum/wires/autolathe/get_status() - var/obj/machinery/autolathe/A = holder - . = ..() - . += "\The [A] [A.disabled ? "is dead quiet" : "has a soft electric whirr"]." - . += "\The [A] [A.shocked ? "is making sparking noises" : "is cycling normally"]." - . += "\The [A] [A.hacked ? "rarely" : "occasionally"] makes a beep boop noise." - -/datum/wires/autolathe/interactable(mob/user) - if(!..()) - return FALSE - var/obj/machinery/autolathe/A = holder - if(A.panel_open) - return TRUE - return FALSE - -/datum/wires/autolathe/on_cut(wire, mend, source) - var/obj/machinery/autolathe/A = holder - switch(wire) - if(WIRE_HACK) - A.hacked = !mend - if(WIRE_SHOCK) - A.shocked = !mend - if(WIRE_DISABLE) - A.disabled = !mend - -/datum/wires/autolathe/on_pulse(wire) - if(is_cut(wire)) - return - var/obj/machinery/autolathe/A = holder - switch(wire) - if(WIRE_HACK) - A.hacked = !A.hacked - spawn(50) - if(A && !is_cut(wire)) - A.hacked = 0 - interact(usr) - if(WIRE_SHOCK) - A.shocked = !A.shocked - spawn(50) - if(A && !is_cut(wire)) - A.shocked = 0 - interact(usr) - if(WIRE_DISABLE) - A.disabled = !A.disabled - spawn(50) - if(A && !is_cut(wire)) - A.disabled = 0 - interact(usr) diff --git a/code/datums/wires/fabricator.dm b/code/datums/wires/fabricator.dm new file mode 100644 index 00000000000..1406b85dba3 --- /dev/null +++ b/code/datums/wires/fabricator.dm @@ -0,0 +1,78 @@ +/datum/wires/fabricator + proper_name = "Fabricator" + holder_type = /obj/machinery/fabricator + +/datum/wires/fabricator/New(atom/holder) + wires = list( + WIRE_HACK, WIRE_DISABLE, + WIRE_SHOCK + ) + add_duds(2) + ..() + +/datum/wires/fabricator/get_status() + var/obj/machinery/fabricator/A = holder + . = ..() + . += "\The [A] [(A.fab_status_flags & FAB_DISABLED) ? "is dead quiet" : "has a soft electric whirr"]." + . += "\The [A] [(A.fab_status_flags & FAB_SHOCKED) ? "is making sparking noises" : "is cycling normally"]." + . += "\The [A] [(A.fab_status_flags & FAB_HACKED) ? "rarely" : "occasionally"] makes a beep boop noise." + +/datum/wires/fabricator/interactable(mob/user) + if(!..()) + return FALSE + var/obj/machinery/fabricator/A = holder + if(A.panel_open) + return TRUE + return FALSE + +/datum/wires/fabricator/on_cut(wire, mend, source) + var/obj/machinery/fabricator/A = holder + switch(wire) + if(WIRE_HACK) + if(mend) + A.fab_status_flags &= ~FAB_HACKED + else + A.fab_status_flags |= FAB_HACKED + if(WIRE_SHOCK) + if(mend) + A.fab_status_flags &= ~FAB_SHOCKED + else + A.fab_status_flags |= FAB_SHOCKED + if(WIRE_DISABLE) + if(mend) + A.fab_status_flags &= ~FAB_DISABLED + else + A.fab_status_flags |= FAB_DISABLED + +/datum/wires/fabricator/on_pulse(wire) + if(is_cut(wire)) + return + var/obj/machinery/fabricator/A = holder + switch(wire) + if(WIRE_HACK) + if(A.fab_status_flags & FAB_HACKED) + A.fab_status_flags &= ~FAB_HACKED + else + A.fab_status_flags |= FAB_HACKED + spawn(50) + if(A && !is_cut(wire)) + A.fab_status_flags &= ~FAB_HACKED + interact(usr) + if(WIRE_SHOCK) + if(A.fab_status_flags & FAB_SHOCKED) + A.fab_status_flags &= ~FAB_SHOCKED + else + A.fab_status_flags |= FAB_SHOCKED + spawn(50) + if(A && !is_cut(wire)) + A.fab_status_flags &= ~FAB_SHOCKED + interact(usr) + if(WIRE_DISABLE) + if(A.fab_status_flags & FAB_DISABLED) + A.fab_status_flags &= ~FAB_DISABLED + else + A.fab_status_flags |= FAB_DISABLED + spawn(50) + if(A && !is_cut(wire)) + A.fab_status_flags &= ~FAB_DISABLED + interact(usr) diff --git a/code/game/machinery/autolathe/autolathe.dm b/code/game/machinery/autolathe/autolathe.dm deleted file mode 100644 index 0dd14af232e..00000000000 --- a/code/game/machinery/autolathe/autolathe.dm +++ /dev/null @@ -1,434 +0,0 @@ -#define AUTOLATHE_BUSY 1 -#define AUTOLATHE_STARTED 2 - -/obj/machinery/autolathe - name = "autolathe" - desc = "A large device loaded with various item schematics. It uses a combination of steel and glass to fabricate items." - icon = 'icons/obj/machinery/autolathe.dmi' - icon_state = "autolathe" - density = TRUE - anchored = TRUE - use_power = POWER_USE_IDLE - idle_power_usage = 10 - active_power_usage = 2000 - clicksound = /singleton/sound_category/keyboard_sound - clickvol = 30 - - var/atom/print_loc - - var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, MATERIAL_GLASS = 0, MATERIAL_ALUMINIUM = 0, MATERIAL_PLASTIC = 0, MATERIAL_LEAD = 0) - var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, MATERIAL_GLASS = 0, MATERIAL_ALUMINIUM = 0, MATERIAL_PLASTIC = 0, MATERIAL_LEAD = 0) - var/show_category = "All" - - var/hacked = FALSE - var/disabled = FALSE - var/shocked = FALSE - var/autolathe_flags = 0 - var/datum/autolathe_queue_item/currently_printing - - var/mat_efficiency = 1 - var/last_process_time - var/build_time = 50 - - var/does_flick = TRUE - - var/datum/wires/autolathe/wires - - var/list/print_queue = list() - - component_types = list( - /obj/item/circuitboard/autolathe, - /obj/item/stock_parts/matter_bin = 3, - /obj/item/stock_parts/manipulator, - /obj/item/stock_parts/console_screen - ) - -/obj/machinery/autolathe/Initialize() - ..() - wires = new(src) - print_loc = src - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/autolathe/LateInitialize() - populate_lathe_recipes() - -/obj/machinery/autolathe/Destroy() - print_loc = null - QDEL_NULL(currently_printing) - QDEL_NULL(wires) - - QDEL_LIST(print_queue) - - return ..() - -/obj/machinery/autolathe/proc/populate_lathe_recipes() - if(SSmaterials.autolathe_categories) - return - - SSmaterials.autolathe_categories = list() - for(var/singleton/autolathe_recipe/recipe in GET_SINGLETON_SUBTYPE_LIST(/singleton/autolathe_recipe)) - SSmaterials.autolathe_categories |= recipe.category - - var/obj/item/I = new recipe.path - if(I.matter && !recipe.resources) //This can be overidden in the datums. - recipe.resources = list() - for(var/material in I.matter) - recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle. - qdel(I) - SSmaterials.autolathe_categories |= "All" - SSmaterials.autolathe_categories = sort_list(SSmaterials.autolathe_categories, GLOBAL_PROC_REF(cmp_text_asc)) - -/obj/machinery/autolathe/proc/can_print_item(var/singleton/autolathe_recipe/recipe) - var/ship_security_level = seclevel2num(get_security_level()) - var/is_on_ship = is_station_level(z) // since ship security levels are global FOR NOW, we'll ignore the alert check for offship autolathes - - if(!hacked) - if(recipe.hack_only) - return FALSE - else if(is_on_ship && ship_security_level < recipe.security_level) - return FALSE - - return TRUE - -/obj/machinery/autolathe/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Autolathe", capitalize_first_letters(name)) - ui.open() - -/obj/machinery/autolathe/ui_data(mob/user) - . = ..() - - var/list/data = list() - data["disabled"] = disabled - data["material_efficiency"] = mat_efficiency - data["materials"] = list() - data["categories"] = SSmaterials.autolathe_categories - data["build_time"] = build_time - for(var/material in stored_material) - data["materials"] += list(list("material" = material, "stored" = stored_material[material], "max_capacity" = storage_capacity[material])) - data["recipes"] = list() - - for(var/recipe in GET_SINGLETON_SUBTYPE_LIST(/singleton/autolathe_recipe)) - var/singleton/autolathe_recipe/R = recipe - if(is_abstract(R)) - continue - if(R.hack_only && !hacked) - continue - - var/list/recipe_data = list() - recipe_data["name"] = R.name - recipe_data["recipe"] = R.type - recipe_data["security_level"] = R.security_level ? capitalize(num2seclevel(R.security_level)) : "None" - recipe_data["hack_only"] = R.hack_only - recipe_data["enabled"] = can_print_item(R) - - var/list/resources = list() - for(var/resource in R.resources) - resources += "[R.resources[resource] * mat_efficiency] [resource]" - recipe_data["sheets"] = stored_material[resource]/round(R.resources[resource]*mat_efficiency) - recipe_data["can_make"] = !isnull(stored_material[resource]) && stored_material[resource] < round(R.resources[resource]*mat_efficiency) - recipe_data["category"] = R.category - recipe_data["resources"] = english_list(resources) - recipe_data["max_sheets"] = null - if(R.is_stack) - var/obj/item/stack/R_stack = R.path - recipe_data["max_sheets"] = initial(R_stack.max_amount) - data["recipes"] += list(recipe_data) - - data["currently_printing"] = null - if(currently_printing) - data["currently_printing"] = "[REF(currently_printing)]" - data["queue"] = list() - for(var/datum/autolathe_queue_item/AR in print_queue) - data["queue"] += list( - list( - "ref" = "[REF(AR)]", - "order" = AR.recipe.name, - "path" = AR.recipe.type, - "multiplier" = AR.multiplier, - "build_time" = AR.build_time, - "progress" = AR.progress - ) - ) - return data - -/obj/machinery/autolathe/attackby(obj/item/attacking_item, mob/user) - if((autolathe_flags & AUTOLATHE_BUSY)) - to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for the completion of previous operation.")) - return TRUE - - if(default_deconstruction_screwdriver(user, attacking_item)) - SStgui.update_uis(src) - return TRUE - if(default_deconstruction_crowbar(user, attacking_item)) - return TRUE - if(default_part_replacement(user, attacking_item)) - return TRUE - - if(stat) - return TRUE - - if(panel_open) - //Don't eat multitools or wirecutters used on an open lathe. - if(attacking_item.ismultitool() || attacking_item.iswirecutter()) - if(panel_open) - wires.interact(user) - else - to_chat(user, SPAN_WARNING("\The [src]'s wires aren't exposed.")) - return TRUE - - if(attacking_item.loc != user && !istype(attacking_item, /obj/item/stack)) - return FALSE - - if(is_robot_module(attacking_item)) - return FALSE - - load_lathe(attacking_item, user) - return TRUE - -/obj/machinery/autolathe/attack_hand(mob/user) - user.set_machine(src) - ui_interact(user) - -/obj/machinery/autolathe/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - usr.set_machine(src) - add_fingerprint(usr) - - playsound(src, /singleton/sound_category/keyboard_sound, 50) - - if(action == "make") - var/multiplier = text2num(params["multiplier"]) - var/singleton/autolathe_recipe/R = GET_SINGLETON(text2path(params["recipe"])) - if(!istype(R)) - CRASH("([usr.ckey]) tried to print an unknown recipe! [R], param is [params["recipe"]].") - - if(!can_print_item(R)) - CRASH("([usr.ckey]) tried to print an un-enabled recipe! [R], param is [params["recipe"]].") - - intent_message(MACHINE_SOUND) - - //Check if we still have the materials. - for(var/material in R.resources) - if(!isnull(stored_material[material])) - if(stored_material[material] < round(R.resources[material] * mat_efficiency) * multiplier) - return - - var/datum/autolathe_queue_item/order = new() - order.recipe = R - order.multiplier = multiplier - order.build_time = build_time - //We know we have the materials, store them in the order. - for(var/material in R.resources) - if(!isnull(stored_material[material])) - var/material_usage = round(R.resources[material] * mat_efficiency) * multiplier - order.materials_used[material] = material_usage - stored_material[material] = max(0, stored_material[material] - material_usage) - - print_queue += order - . = TRUE - - if(action == "remove") - var/datum/autolathe_queue_item/order = locate(params["ref"]) - if(!order) - return - if(currently_printing == order) - to_chat(usr, SPAN_WARNING("This item is already being printed!")) - return - for(var/material in order.materials_used) - if((stored_material[material] + order.materials_used[material]) > storage_capacity[material]) - to_chat(usr, SPAN_WARNING("The autolathe display indicates that there isn't enough space to refund the materials!")) - return - stored_material[material] += order.materials_used[material] - print_queue -= order - qdel(order) - . = TRUE - -/obj/machinery/autolathe/process() - if(length(print_queue)) - if(!currently_printing) - last_process_time = world.time - currently_printing = print_queue[1] - autolathe_flags |= AUTOLATHE_BUSY - update_use_power(POWER_USE_ACTIVE) - else if(!currently_printing && (autolathe_flags & AUTOLATHE_BUSY)) - autolathe_flags &= ~(AUTOLATHE_BUSY|AUTOLATHE_STARTED) - update_use_power(POWER_USE_IDLE) - - if(currently_printing && use_power == POWER_USE_ACTIVE) - if(!(autolathe_flags & AUTOLATHE_STARTED)) - start_processing_queue_item() - else if((autolathe_flags & AUTOLATHE_BUSY)) - process_queue_item() - -/// Used so that we don't try to AddOverlays every tick the autolathe processes. -/obj/machinery/autolathe/proc/start_processing_queue_item() - if(does_flick) - //Fancy autolathe animation. - AddOverlays("process") - autolathe_flags |= AUTOLATHE_STARTED|AUTOLATHE_BUSY - -/obj/machinery/autolathe/proc/process_queue_item() - if(!currently_printing) - return - - var/time_difference = world.time - last_process_time - currently_printing.progress = min(currently_printing.progress + time_difference, currently_printing.build_time) - last_process_time = world.time - if(currently_printing.progress >= currently_printing.build_time) - complete_queue_item() - -/obj/machinery/autolathe/proc/complete_queue_item() - //Create the desired item. - var/obj/item/I = new currently_printing.recipe.path(get_turf(print_loc)) - I.Created() - if(currently_printing.multiplier > 1 && istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - S.amount = currently_printing.multiplier - - print_queue -= currently_printing - QDEL_NULL(currently_printing) - CutOverlays("process") - I.update_icon() - update_use_power(POWER_USE_IDLE) - - return TRUE - -/obj/machinery/autolathe/update_icon() - icon_state = (panel_open ? "autolathe_panel" : "autolathe") - -//Updates overall lathe storage size. -/obj/machinery/autolathe/RefreshParts() - ..() - var/mb_rating = 0 - var/man_rating = 0 - for(var/obj/item/stock_parts/matter_bin/MB in component_parts) - mb_rating += MB.rating - for(var/obj/item/stock_parts/manipulator/M in component_parts) - man_rating += M.rating - - storage_capacity[DEFAULT_WALL_MATERIAL] = mb_rating * 25000 - storage_capacity[MATERIAL_GLASS] = mb_rating * 12500 - storage_capacity[MATERIAL_ALUMINIUM] = mb_rating * 25000 - storage_capacity[MATERIAL_PLASTIC] = mb_rating * 12500 - storage_capacity[MATERIAL_LEAD] = mb_rating * 12500 - build_time = 50 / man_rating - mat_efficiency = 1.1 - man_rating * 0.1 // Normally, price is 1.25 the amount of material, so this shouldn't go higher than 0.8. Maximum rating of parts is 3 - -/obj/machinery/autolathe/dismantle() - for(var/mat in stored_material) - var/material/M = SSmaterials.get_material_by_name(mat) - if(!istype(M)) - continue - var/obj/item/stack/material/S = new M.stack_type(get_turf(src)) - if(stored_material[mat] > S.perunit) - S.amount = round(stored_material[mat] / S.perunit) - else - qdel(S) - ..() - return TRUE - -#define NO_SPACE "No Space" -#define FILL_COMPLETELY "Fill Completely" -#define FILL_INCOMPLETELY "Fill Incompletely" - -/obj/machinery/autolathe/proc/load_lathe(obj/item/O, mob/user) - - //Resources are being loaded. - var/obj/item/eating = O - if(!eating.matter || !eating.recyclable) - to_chat(user, SPAN_WARNING("\The [eating] cannot be recycled by \the [src].")) - return - - var/list/fill_status = list() // Used to determine message in cases of multiple materials. - var/total_used = 0 // Amount of material used. - var/mass_per_sheet = 0 // Amount of material constituting one sheet. - var/is_stack = FALSE //Affects the fill message - - for(var/material in eating.matter) - if(isnull(stored_material[material]) || isnull(storage_capacity[material])) - continue - if(stored_material[material] >= storage_capacity[material]) - LAZYADD(fill_status[NO_SPACE], material) - continue - - var/total_material = eating.matter[material] - - //If it's a stack, we eat multiple sheets. - if(istype(eating, /obj/item/stack)) - var/obj/item/stack/stack = eating - is_stack = TRUE - total_material *= stack.get_amount() - - if(stored_material[material] + total_material > storage_capacity[material]) - total_material = storage_capacity[material] - stored_material[material] - LAZYADD(fill_status[FILL_COMPLETELY], material) - else - LAZYADD(fill_status[FILL_INCOMPLETELY], material) - - stored_material[material] += total_material - total_used += total_material - mass_per_sheet += eating.matter[material] - - if(fill_status[NO_SPACE]) - to_chat(user, SPAN_WARNING("\The [src] is full of [english_list(fill_status[NO_SPACE])]. Please remove some material in order to insert more.")) - return - else if(fill_status[FILL_COMPLETELY]) - to_chat(user, SPAN_NOTICE("You fill \the [src] to capacity with [english_list(fill_status[FILL_COMPLETELY])][is_stack ? "." : " from \the [eating]."]")) - else if(fill_status[FILL_INCOMPLETELY]) - to_chat(user, SPAN_NOTICE("You fill \the [src] with [english_list(fill_status[FILL_INCOMPLETELY])][is_stack ? "." : " from \the [eating]."]")) - - // Plays metal insertion animation. - if(istype(eating, /obj/item/stack/material)) - var/obj/item/stack/material/sheet = eating - var/icon/load = icon(icon, "load") - load.Blend(sheet.material.icon_colour,ICON_MULTIPLY) - AddOverlays(load) - CUT_OVERLAY_IN(load, 6) - - if(istype(eating, /obj/item/stack)) - var/obj/item/stack/stack = eating - var/amount_needed = total_used / mass_per_sheet - stack.use(min(stack.get_amount(), (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1)) // Prevent maths imprecision from leading to infinite resources - else - user.remove_from_mob(O) - qdel(O) - -/obj/machinery/autolathe/mounted - name = "\improper mounted autolathe" - density = FALSE - anchored = FALSE - idle_power_usage = FALSE - active_power_usage = FALSE - interact_offline = TRUE - does_flick = FALSE - -/obj/machinery/autolathe/mounted/ui_state(mob/user) - return GLOB.heavy_vehicle_state - -/// Queue items are needed so that the queue knows exactly what it's doing. -/datum/autolathe_queue_item - /// The recipe singleton. We need to know exactly what we're making. - var/singleton/autolathe_recipe/recipe - /// Multiplier, used to know how many sheets we are printing. Note that this is specifically for sheets. - var/multiplier = 1 - /// The materials used for this order. - var/list/materials_used = list() - /// How much time it takes to build this order. 50 for an un-upgraded autolathe. - var/build_time = 0 - /// Current progress on this queue item. - var/progress = 0 - -/datum/autolathe_queue_item/Destroy() - recipe = null - return ..() - -#undef NO_SPACE -#undef FILL_COMPLETELY -#undef FILL_INCOMPLETELY -#undef AUTOLATHE_BUSY -#undef AUTOLATHE_STARTED diff --git a/code/game/machinery/autolathe/autolathe_datums.dm b/code/game/machinery/autolathe/autolathe_datums.dm deleted file mode 100644 index 5b35393e00c..00000000000 --- a/code/game/machinery/autolathe/autolathe_datums.dm +++ /dev/null @@ -1,14 +0,0 @@ -/singleton/autolathe_recipe - var/name = "object" - var/path - var/list/resources - var/hidden - var/category - var/power_use = 0 - var/is_stack - - /// If true, the autolathe needs to be hacked before it can print this design - var/hack_only - - /// If set, the ship needs to be at this alert level before autolathes on it can print this design. ignored if hacked - var/security_level diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index b9e311b8a08..640ed6de7b5 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -33,7 +33,7 @@ /obj/item/circuitboard/autolathe name = T_BOARD("autolathe") - build_path = /obj/machinery/autolathe + build_path = /obj/machinery/fabricator board_type = BOARD_MACHINE origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) req_components = list( diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 0596541f0ee..455fef7e0ed 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -24,6 +24,7 @@ var/list/bite_sizes = list(1,2,3,4,5) use_material_name = FALSE applies_material_colour = FALSE + default_material = MATERIAL_ALUMINIUM /obj/item/material/kitchen/utensil/Initialize(newloc, material_key) . = ..() @@ -120,6 +121,12 @@ use_material_name = TRUE applies_material_colour = TRUE +/obj/item/material/kitchen/utensil/fork/chopsticks/plastic + icon_state = "plastic_chopsticks" + default_material = MATERIAL_PLASTIC + use_material_name = TRUE + applies_material_colour = TRUE + /obj/item/material/kitchen/utensil/spoon name = "spoon" desc = "It's a spoon. You can see your own upside-down face in it." diff --git a/code/modules/fabrication/__fabricator_defines.dm b/code/modules/fabrication/__fabricator_defines.dm new file mode 100644 index 00000000000..8f36f3f58ef --- /dev/null +++ b/code/modules/fabrication/__fabricator_defines.dm @@ -0,0 +1,2 @@ +#define FABRICATOR_CLASS_GENERAL "general" +#define FABRICATOR_CLASS_MICRO "microlathe" diff --git a/code/modules/fabrication/_fabricator.dm b/code/modules/fabrication/_fabricator.dm new file mode 100644 index 00000000000..2efb8720701 --- /dev/null +++ b/code/modules/fabrication/_fabricator.dm @@ -0,0 +1,260 @@ +/obj/machinery/fabricator + name = "autolathe" + desc = "A large device loaded with various item schematics. It produces common day to day items from a variety of materials." + icon = 'icons/obj/machinery/fabricators/autolathe.dmi' + icon_state = "autolathe" + density = TRUE + anchored = TRUE + use_power = POWER_USE_IDLE + idle_power_usage = 10 + active_power_usage = 2000 + clicksound = /singleton/sound_category/keyboard_sound + clickvol = 30 + manufacturer = "hephaestus" + + var/atom/print_loc + + var/has_recycler = TRUE + var/fabricator_class = FABRICATOR_CLASS_GENERAL + var/list/stored_material = list() + var/list/storage_capacity = list() + var/list/base_storage_capacity = list( + DEFAULT_WALL_MATERIAL = 25000, + MATERIAL_ALUMINIUM = 25000, + MATERIAL_GLASS = 12500, + MATERIAL_PLASTIC = 12500 + ) + var/show_category = "All" + + var/fab_status_flags = 0 + + var/list/print_queue = list() + var/datum/fabricator_build_order/currently_printing + + var/mat_efficiency = 1 + var/last_process_time + var/build_time_multiplier = 1 + + var/does_flick = TRUE + + var/datum/wires/fabricator/wires + + component_types = list( + /obj/item/circuitboard/autolathe, + /obj/item/stock_parts/matter_bin = 3, + /obj/item/stock_parts/manipulator, + /obj/item/stock_parts/console_screen + ) + + var/static/list/stored_substances_to_names = list() + +/obj/machinery/fabricator/Initialize() + ..() + stored_material = list() + for(var/mat in base_storage_capacity) + stored_material[mat] = 0 + + // Update global type to string cache. + if(!stored_substances_to_names[mat]) + if(ispath(mat, /material)) + var/material/mat_instance = mat + mat_instance = SSmaterials.get_material_by_name(initial(mat_instance.name)) + if(istype(mat_instance)) + stored_substances_to_names[mat] = mat_instance.display_name + else if(ispath(mat, /singleton/reagent)) + var/singleton/reagent/reg = mat + stored_substances_to_names[mat] = initial(reg.name) + +/obj/machinery/fabricator/Destroy() + print_loc = null + QDEL_NULL(currently_printing) + QDEL_NULL(wires) + + QDEL_LIST(print_queue) + + return ..() + +/obj/machinery/fabricator/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Autolathe", capitalize_first_letters(name)) + ui.open() + +/obj/machinery/fabricator/ui_data(mob/user) + . = ..() + var/list/data = list() + data["manufacturer"] = manufacturer + data["disabled"] = (fab_status_flags & FAB_DISABLED) + data["material_efficiency"] = mat_efficiency + data["materials"] = list() + data["categories"] = SSfabrication.get_categories(fabricator_class)|"All" + data["build_time"] = currently_printing?.remaining_time + for(var/material in stored_material) + data["materials"] += list(list("material" = material, "stored" = stored_material[material], "max_capacity" = storage_capacity[material])) + data["recipes"] = list() + for(var/recipe in SSfabrication.get_recipes(fabricator_class)) + var/singleton/autolathe_recipe/R = recipe + if(R.hidden && !(fab_status_flags & FAB_HACKED)) + continue + var/list/recipe_data = list() + recipe_data["name"] = R.name + recipe_data["recipe"] = R.type + recipe_data["hidden"] = R.hidden + var/list/resources = list() + for(var/resource in R.resources) + resources += "[R.resources[resource] * mat_efficiency] [resource]" + recipe_data["sheets"] = stored_material[resource]/round(R.resources[resource]*mat_efficiency) + recipe_data["can_make"] = !isnull(stored_material[resource]) && stored_material[resource] < round(R.resources[resource]*mat_efficiency) + recipe_data["category"] = R.category + recipe_data["resources"] = english_list(resources) + recipe_data["max_sheets"] = null + if(R.is_stack) + var/obj/item/stack/R_stack = R.path + recipe_data["max_sheets"] = initial(R_stack.max_amount) + data["recipes"] += list(recipe_data) + + data["currently_printing"] = null + if(currently_printing) + data["currently_printing"] = "\ref[currently_printing]" + data["queue"] = list() + for(var/datum/fabricator_build_order/AR in print_queue) + data["queue"] += list( + list( + "ref" = "\ref[AR]", + "order" = AR.target_recipe.name, + "path" = AR.target_recipe.type, + "multiplier" = AR.multiplier, + "build_time" = AR.target_recipe.build_time, + "progress" = AR.remaining_time + ) + ) + return data + +/obj/machinery/fabricator/attackby(obj/item/attacking_item, mob/user) + if(fab_status_flags & FAB_BUSY) + to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for the completion of previous operation.")) + return TRUE + + if(default_deconstruction_screwdriver(user, attacking_item)) + SStgui.update_uis(src) + return TRUE + if(default_deconstruction_crowbar(user, attacking_item)) + return TRUE + if(default_part_replacement(user, attacking_item)) + return TRUE + + if(stat) + return TRUE + + if(panel_open) + //Don't eat multitools or wirecutters used on an open lathe. + if(attacking_item.ismultitool() || attacking_item.iswirecutter()) + if(panel_open) + wires.interact(user) + else + to_chat(user, SPAN_WARNING("\The [src]'s wires aren't exposed.")) + return TRUE + + if(attacking_item.loc != user && !istype(attacking_item, /obj/item/stack)) + return FALSE + + if(is_robot_module(attacking_item)) + return FALSE + + load_lathe(attacking_item, user) + return TRUE + +/obj/machinery/fabricator/attack_hand(mob/user) + user.set_machine(src) + ui_interact(user) + +/obj/machinery/fabricator/proc/is_functioning() + . = use_power != POWER_USE_OFF && !(fab_status_flags & FAB_DISABLED) + +/obj/machinery/fabricator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + usr.set_machine(src) + add_fingerprint(usr) + + playsound(src, /singleton/sound_category/keyboard_sound, 50) + + if(action == "make") + var/multiplier = text2num(params["multiplier"]) + var/singleton/autolathe_recipe/R = GET_SINGLETON(text2path(params["recipe"])) + if(!istype(R)) + CRASH("Unknown recipe given! [R], param is [params["recipe"]].") + + intent_message(MACHINE_SOUND) + + try_queue_build(R, multiplier) + + . = TRUE + + if(action == "remove") + var/datum/fabricator_build_order/order = locate(params["ref"]) + try_cancel_build(order) + qdel(order) + . = TRUE + +/obj/machinery/fabricator/process(seconds_per_tick) + ..() + if(use_power == POWER_USE_ACTIVE && (fab_status_flags & FAB_BUSY)) + update_current_build(seconds_per_tick) + +/obj/machinery/fabricator/update_icon() + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") + if(currently_printing) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) + AddOverlays("[icon_state]_lights_working") + AddOverlays("[icon_state]_process") + else if (powered()) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") + +/obj/machinery/fabricator/proc/remove_mat_overlay(mat_overlay) + CutOverlays(mat_overlay) + update_icon() + +//Updates overall lathe storage size. +/obj/machinery/fabricator/RefreshParts() + ..() + var/mb_rating = 0 + var/man_rating = 0 + for(var/obj/item/stock_parts/matter_bin/MB in component_parts) + mb_rating += MB.rating + for(var/obj/item/stock_parts/manipulator/M in component_parts) + man_rating += M.rating + for(var/mat in base_storage_capacity) + storage_capacity[mat] = mb_rating * base_storage_capacity[mat] + mat_efficiency = 1.1 - man_rating * 0.1 // Normally, price is 1.25 the amount of material, so this shouldn't go higher than 0.8. Maximum rating of parts is 3 + build_time_multiplier = initial(build_time_multiplier) * man_rating + +/obj/machinery/fabricator/dismantle() + for(var/mat in stored_material) + var/material/M = SSmaterials.get_material_by_name(mat) + if(!istype(M)) + continue + var/obj/item/stack/material/S = new M.stack_type(get_turf(src)) + if(stored_material[mat] > S.perunit) + S.amount = round(stored_material[mat] / S.perunit) + else + qdel(S) + ..() + return TRUE + +/obj/machinery/fabricator/mounted + name = "\improper mounted autolathe" + density = FALSE + anchored = FALSE + idle_power_usage = FALSE + active_power_usage = FALSE + interact_offline = TRUE + does_flick = FALSE + +/obj/machinery/fabricator/mounted/ui_state(mob/user) + return GLOB.heavy_vehicle_state diff --git a/code/modules/fabrication/_fabricator_build_order.dm b/code/modules/fabrication/_fabricator_build_order.dm new file mode 100644 index 00000000000..baba10b480d --- /dev/null +++ b/code/modules/fabrication/_fabricator_build_order.dm @@ -0,0 +1,19 @@ +/// Queue items are needed so that the queue knows exactly what it's doing. +/datum/fabricator_build_order + /// The recipe singleton. We need to know exactly what we're making. + var/singleton/autolathe_recipe/target_recipe + /// Multiplier, used to know how many sheets we are printing. Note that this is specifically for sheets. + var/multiplier = 1 + /// The materials used for this order. + var/list/earmarked_materials = list() + /// Remaining time for this order. + var/remaining_time = 0 + +/datum/fabricator_build_order/New(singleton/autolathe_recipe/_target_recipe, _multiplier = 1) + ..() + target_recipe = _target_recipe + multiplier = _multiplier + +/datum/fabricator_build_order/Destroy() + target_recipe = null + . = ..() diff --git a/code/modules/fabrication/designs/_design.dm b/code/modules/fabrication/designs/_design.dm new file mode 100644 index 00000000000..5b8498ebd44 --- /dev/null +++ b/code/modules/fabrication/designs/_design.dm @@ -0,0 +1,12 @@ +/singleton/autolathe_recipe + var/name = "object" + var/path + var/hidden + var/category + var/list/resources + var/power_use = 0 + var/is_stack + var/list/fabricator_types = list( + FABRICATOR_CLASS_GENERAL + ) + var/build_time = 5 SECONDS diff --git a/code/modules/fabrication/designs/general/designs_arms_ammo.dm b/code/modules/fabrication/designs/general/designs_arms_ammo.dm new file mode 100644 index 00000000000..3c27f98d834 --- /dev/null +++ b/code/modules/fabrication/designs/general/designs_arms_ammo.dm @@ -0,0 +1,169 @@ +/singleton/autolathe_recipe/syringegun_ammo + name = "syringe gun cartridge" + path = /obj/item/syringe_cartridge + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/shotgun_blanks + name = "ammunition (shotgun, blank)" + path = /obj/item/ammo_casing/shotgun/blank + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/shotgun_beanbag + name = "ammunition (shotgun, beanbag)" + path = /obj/item/ammo_casing/shotgun/beanbag + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/shotgun_flash + name = "ammunition (shotgun, flash)" + path = /obj/item/ammo_casing/shotgun/flash + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_rubber + name = "ammunition (.45, rubber)" + path = /obj/item/ammo_magazine/c45m/rubber + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_flash + name = "ammunition (.45, flash)" + path = /obj/item/ammo_magazine/c45m/flash + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_smg_rubber + name = "ammunition (9mm rubber top mounted)" + path = /obj/item/ammo_magazine/mc9mmt/rubber + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/detective_revolver_rubber + name = "ammunition (.38, rubber)" + path = /obj/item/ammo_magazine/c38/rubber + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/flamethrower + name = "flamethrower" + path = /obj/item/flamethrower/full + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_revolver_1 + name = "ammunition (.357)" + path = /obj/item/ammo_magazine/a357 + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_revolver_2 + name = "ammunition (.45)" + path = /obj/item/ammo_magazine/c45m + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_stetchkin + name = "ammunition (9mm)" + path = /obj/item/ammo_magazine/mc9mm + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_stetchkin_flash + name = "ammunition (9mm, flash)" + path = /obj/item/ammo_magazine/mc9mm/flash + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_c20r + name = "ammunition (10mm)" + path = /obj/item/ammo_magazine/a10mm + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_arifle + name = "ammunition (7.62mm)" + path = /obj/item/ammo_magazine/c762 + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_smg + name = "ammunition (9mm top mounted)" + path = /obj/item/ammo_magazine/mc9mmt + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_carbine + name = "ammunition (5.56mm, large)" + path = /obj/item/ammo_magazine/a556 + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_carbinepolymer + name = "ammunition (5.56mm, polymer)" + path = /obj/item/ammo_magazine/a556/polymer + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_smallcarbine + name = "ammunition (5.56mm, small)" + path = /obj/item/ammo_magazine/a556/carbine + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/magazine_smallcarbinepolymer + name = "ammunition (5.56mm, small polymer)" + path = /obj/item/ammo_magazine/a556/carbine/polymer + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/shotgun + name = "ammunition (slug, shotgun)" + path = /obj/item/ammo_casing/shotgun + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/shotgun_pellet + name = "ammunition (shell, shotgun)" + path = /obj/item/ammo_casing/shotgun/pellet + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/tacknife + name = "tactical knife" + path = /obj/item/material/knife/tacknife + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/stunshell + name = "ammunition (stun cartridge, shotgun)" + path = /obj/item/ammo_casing/shotgun/stunshell + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/clip_boltaction + name = "ammunition clip (7.62mm)" + path = /obj/item/ammo_magazine/boltaction + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/detective_revolver_lethal + name = "ammunition (.38)" + path = /obj/item/ammo_magazine/c38 + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/submachine_mag + name = "submachinegun magazine (.45)" + path = /obj/item/ammo_magazine/submachinemag + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/uzi_mag + name = "stick magazine (.45)" + path = /obj/item/ammo_magazine/c45uzi + hidden = TRUE + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/grenade + name = "grenade casing" + path = /obj/item/grenade/chem_grenade + category = "Arms and Ammunition" + +/singleton/autolathe_recipe/grenade/large + name = "large grenade casing" + path = /obj/item/grenade/chem_grenade/large + hidden = TRUE diff --git a/code/modules/fabrication/designs/general/designs_devices.dm b/code/modules/fabrication/designs/general/designs_devices.dm new file mode 100644 index 00000000000..65c5d0852d9 --- /dev/null +++ b/code/modules/fabrication/designs/general/designs_devices.dm @@ -0,0 +1,72 @@ +/singleton/autolathe_recipe/micromanip + name = "micro-manipulator" + path = /obj/item/stock_parts/manipulator + category = "Devices and Components" + +/singleton/autolathe_recipe/matterbin + name = "matter bin" + path = /obj/item/stock_parts/matter_bin + category = "Devices and Components" + +/singleton/autolathe_recipe/capacitor + name = "capacitor" + path = /obj/item/stock_parts/capacitor + category = "Devices and Components" + +/singleton/autolathe_recipe/scanningmod + name = "scanning module" + path = /obj/item/stock_parts/scanning_module + category = "Devices and Components" + +/singleton/autolathe_recipe/microlaser + name = "micro-laser" + path = /obj/item/stock_parts/micro_laser + category = "Devices and Components" + +/singleton/autolathe_recipe/electropack + name = "electropack" + path = /obj/item/device/radio/electropack + hidden = TRUE + category = "Devices and Components" + +/singleton/autolathe_recipe/trap + name = "mechanical trap" + path = /obj/item/trap + hidden = TRUE + category = "Devices and Components" + +/singleton/autolathe_recipe/cable_coil + name = "cable coil" + path = /obj/item/stack/cable_coil + category = "Devices and Components" + is_stack = TRUE + +/singleton/autolathe_recipe/consolescreen + name = "console screen" + path = /obj/item/stock_parts/console_screen + category = "Devices and Components" + +/singleton/autolathe_recipe/igniter + name = "igniter" + path = /obj/item/device/assembly/igniter + category = "Devices and Components" + +/singleton/autolathe_recipe/signaler + name = "signaler" + path = /obj/item/device/assembly/signaler + category = "Devices and Components" + +/singleton/autolathe_recipe/sensor_infra + name = "infrared sensor" + path = /obj/item/device/assembly/infra + category = "Devices and Components" + +/singleton/autolathe_recipe/timer + name = "timer" + path = /obj/item/device/assembly/timer + category = "Devices and Components" + +/singleton/autolathe_recipe/sensor_prox + name = "proximity sensor" + path = /obj/item/device/assembly/prox_sensor + category = "Devices and Components" diff --git a/code/modules/fabrication/designs/general/designs_engineering.dm b/code/modules/fabrication/designs/general/designs_engineering.dm new file mode 100644 index 00000000000..2346061ce59 --- /dev/null +++ b/code/modules/fabrication/designs/general/designs_engineering.dm @@ -0,0 +1,44 @@ +/singleton/autolathe_recipe/airlockmodule + name = "airlock electronics" + path = /obj/item/airlock_electronics + category = "Engineering" + +/singleton/autolathe_recipe/airalarm + name = "air alarm electronics" + path = /obj/item/airalarm_electronics + category = "Engineering" + +/singleton/autolathe_recipe/firealarm + name = "fire alarm electronics" + path = /obj/item/firealarm_electronics + category = "Engineering" + +/singleton/autolathe_recipe/powermodule + name = "power control module" + path = /obj/item/module/power_control + category = "Engineering" + +/singleton/autolathe_recipe/stockparts_box + name = "stock parts box" + path = /obj/item/storage/bag/stockparts_box + category = "Engineering" + +/singleton/autolathe_recipe/debugger + name = "debugger" + path = /obj/item/device/debugger + category = "Engineering" + +/singleton/autolathe_recipe/camera_assembly + name = "camera assembly" + path = /obj/item/camera_assembly + category = "Engineering" + +/singleton/autolathe_recipe/suit_cooling + name = "portable suit cooling unit" + path = /obj/item/device/suit_cooling_unit/no_cell + category = "Engineering" + +/singleton/autolathe_recipe/emergency_cell + name = "miniature cell" + path = /obj/item/cell/device/emergency_light/empty + category = "Engineering" diff --git a/code/modules/fabrication/designs/general/designs_general.dm b/code/modules/fabrication/designs/general/designs_general.dm new file mode 100644 index 00000000000..2e3b2a9fab4 --- /dev/null +++ b/code/modules/fabrication/designs/general/designs_general.dm @@ -0,0 +1,139 @@ +/singleton/autolathe_recipe/bucket + name = "bucket" + path = /obj/item/reagent_containers/glass/bucket + category = "General" + +/singleton/autolathe_recipe/flashlight + name = "flashlight" + path = /obj/item/device/flashlight/empty + category = "General" + +/singleton/autolathe_recipe/floor_light + name = "floor light" + path = /obj/machinery/floor_light + category = "General" + +/singleton/autolathe_recipe/tile_circuit_blue + name = "circuit tile, blue" + path = /obj/item/stack/tile/circuit_blue + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/tile_circuit_green + name = "circuit tile, green" + path = /obj/item/stack/tile/circuit_green + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/extinguisher + name = "extinguisher" + path = /obj/item/extinguisher + category = "General" + +/singleton/autolathe_recipe/jar + name = "jar" + path = /obj/item/glass_jar + category = "General" + +/singleton/autolathe_recipe/bowl + name = "bowl" + path = /obj/item/reagent_containers/cooking_container/board/bowl + category = "General" + +/singleton/autolathe_recipe/radio_headset + name = "radio headset" + path = /obj/item/device/radio/headset + category = "General" + +/singleton/autolathe_recipe/radio_bounced + name = "shortwave radio" + path = /obj/item/device/radio/off + category = "General" + +/singleton/autolathe_recipe/weldermask + name = "welding mask" + path = /obj/item/clothing/head/welding + category = "General" + +/singleton/autolathe_recipe/metal + name = "steel sheets" + path = /obj/item/stack/material/steel + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/aluminium + name = "aluminium sheets" + path = /obj/item/stack/material/aluminium + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/glass + name = "glass sheets" + path = /obj/item/stack/material/glass + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/rglass + name = "reinforced glass sheets" + path = /obj/item/stack/material/glass/reinforced + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/rods + name = "metal rods" + path = /obj/item/stack/rods + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/barbed_wire + name = "barbed wire" + path = /obj/item/stack/barbed_wire + category = "General" + is_stack = TRUE + +/singleton/autolathe_recipe/taperecorder + name = "tape recorder" + path = /obj/item/device/taperecorder + category = "General" + +/singleton/autolathe_recipe/tube + name = "light tube" + path = /obj/item/light/tube + category = "General" + +/singleton/autolathe_recipe/bulb + name = "light bulb" + path = /obj/item/light/bulb + category = "General" + +/singleton/autolathe_recipe/ashtray_glass + name = "glass ashtray" + path = /obj/item/material/ashtray/glass + category = "General" + +/singleton/autolathe_recipe/labeler + name = "hand labeler" + path = /obj/item/device/hand_labeler + category = "General" + +/singleton/autolathe_recipe/destTagger + name = "destination tagger" + path = /obj/item/device/destTagger + category = "General" + +/singleton/autolathe_recipe/cratescanner + name = "crate contents scanner" + path = /obj/item/device/cratescanner + category = "General" + +/singleton/autolathe_recipe/handcuffs + name = "handcuffs" + path = /obj/item/handcuffs + hidden = TRUE + category = "General" + +/singleton/autolathe_recipe/brassknuckles + name = "brass knuckles" + path = /obj/item/clothing/gloves/brassknuckles + hidden = TRUE + category = "General" diff --git a/code/modules/fabrication/designs/general/designs_medical.dm b/code/modules/fabrication/designs/general/designs_medical.dm new file mode 100644 index 00000000000..c79ca0770e6 --- /dev/null +++ b/code/modules/fabrication/designs/general/designs_medical.dm @@ -0,0 +1,63 @@ +/singleton/autolathe_recipe/scalpel + name = "scalpel" + path = /obj/item/surgery/scalpel + category = "Medical" + +/singleton/autolathe_recipe/circularsaw + name = "circular saw" + path = /obj/item/surgery/circular_saw + category = "Medical" + +/singleton/autolathe_recipe/surgicaldrill + name = "surgical drill" + path = /obj/item/surgery/surgicaldrill + category = "Medical" + +/singleton/autolathe_recipe/retractor + name = "retractor" + path = /obj/item/surgery/retractor + category = "Medical" + +/singleton/autolathe_recipe/cautery + name = "cautery" + path = /obj/item/surgery/cautery + category = "Medical" + +/singleton/autolathe_recipe/hemostat + name = "hemostat" + path = /obj/item/surgery/hemostat + category = "Medical" + +/singleton/autolathe_recipe/beaker + name = "glass beaker" + path = /obj/item/reagent_containers/glass/beaker + category = "Medical" + +/singleton/autolathe_recipe/beaker_large + name = "large glass beaker" + path = /obj/item/reagent_containers/glass/beaker/large + category = "Medical" + +/singleton/autolathe_recipe/vial + name = "glass vial" + path = /obj/item/reagent_containers/glass/beaker/vial + category = "Medical" + +/singleton/autolathe_recipe/autoinjector + name = "autoinjector" + path = /obj/item/reagent_containers/hypospray/autoinjector + category = "Medical" + +/singleton/autolathe_recipe/autoinhaler + name = "autoinhaler" + path = /obj/item/reagent_containers/inhaler + category = "Medical" + +/singleton/autolathe_recipe/syringe + name = "syringe" + path = /obj/item/reagent_containers/syringe + category = "Medical" + +/singleton/autolathe_recipe/syringe/large + name = "large syringe" + path = /obj/item/reagent_containers/syringe/large diff --git a/code/modules/fabrication/designs/general/designs_tools.dm b/code/modules/fabrication/designs/general/designs_tools.dm new file mode 100644 index 00000000000..c7a47ccbfd6 --- /dev/null +++ b/code/modules/fabrication/designs/general/designs_tools.dm @@ -0,0 +1,55 @@ +/singleton/autolathe_recipe/crowbar + name = "crowbar" + path = /obj/item/crowbar + category = "Tools" + +/singleton/autolathe_recipe/multitool + name = "multitool" + path = /obj/item/device/multitool + category = "Tools" + +/singleton/autolathe_recipe/geiger + name = "geiger counter" + path = /obj/item/device/geiger + category = "Tools" + +/singleton/autolathe_recipe/t_scanner + name = "T-ray scanner" + path = /obj/item/device/t_scanner + category = "Tools" + +/singleton/autolathe_recipe/weldertool + name = "welding tool" + path = /obj/item/weldingtool + category = "Tools" + +/singleton/autolathe_recipe/screwdriver + name = "screwdriver" + path = /obj/item/screwdriver + category = "Tools" + +/singleton/autolathe_recipe/wirecutters + name = "wirecutters" + path = /obj/item/wirecutters + category = "Tools" + +/singleton/autolathe_recipe/wrench + name = "wrench" + path = /obj/item/wrench + category = "Tools" + +/singleton/autolathe_recipe/hatchet + name = "hatchet" + path = /obj/item/material/hatchet + category = "Tools" + +/singleton/autolathe_recipe/minihoe + name = "mini hoe" + path = /obj/item/material/minihoe + category = "Tools" + +/singleton/autolathe_recipe/welder_industrial + name = "industrial welding tool" + path = /obj/item/weldingtool/largetank + hidden = 1 + category = "Tools" diff --git a/code/modules/fabrication/designs/micro/designs_cutlery.dm b/code/modules/fabrication/designs/micro/designs_cutlery.dm new file mode 100644 index 00000000000..aa9f111b3a3 --- /dev/null +++ b/code/modules/fabrication/designs/micro/designs_cutlery.dm @@ -0,0 +1,41 @@ +/singleton/autolathe_recipe/cutlery + name = "fork, aluminium" + path = /obj/item/material/kitchen/utensil/fork + category = "Cutlery" + fabricator_types = list(FABRICATOR_CLASS_MICRO) + +/singleton/autolathe_recipe/cutlery/spoon_aluminum + name = "spoon, aluminium" + path = /obj/item/material/kitchen/utensil/spoon + +/singleton/autolathe_recipe/cutlery/spork_aluminum + name = "spork, aluminium" + path = /obj/item/material/kitchen/utensil/spork + +/singleton/autolathe_recipe/cutlery/knife_aluminum + name = "table knife, aluminium" + path = /obj/item/material/kitchen/utensil/knife + +/singleton/autolathe_recipe/cutlery/chopsticks_aluminum + name = "chopsticks, aluminium" + path = /obj/item/material/kitchen/utensil/fork/chopsticks + +/singleton/autolathe_recipe/cutlery/fork_plastic + name = "fork, plastic" + path = /obj/item/material/kitchen/utensil/fork/plastic + +/singleton/autolathe_recipe/cutlery/spoon_plastic + name = "spoon, plastic" + path = /obj/item/material/kitchen/utensil/spoon/plastic + +/singleton/autolathe_recipe/cutlery/spork_plastic + name = "spork, plastic" + path = /obj/item/material/kitchen/utensil/spork/plastic + +/singleton/autolathe_recipe/cutlery/knife_plastic + name = "table knife, plastic" + path = /obj/item/material/kitchen/utensil/knife/plastic + +/singleton/autolathe_recipe/cutlery/chopsticks_plastic + name = "chopsticks, plastic" + path = /obj/item/material/kitchen/utensil/fork/chopsticks/plastic diff --git a/code/modules/fabrication/designs/micro/designs_glasses.dm b/code/modules/fabrication/designs/micro/designs_glasses.dm new file mode 100644 index 00000000000..75842e5eb99 --- /dev/null +++ b/code/modules/fabrication/designs/micro/designs_glasses.dm @@ -0,0 +1,50 @@ +/singleton/autolathe_recipe/drinking_glass + name = "drinking glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass + category = "Drinking Glasses" + fabricator_types = list(FABRICATOR_CLASS_MICRO, FABRICATOR_CLASS_GENERAL) + +/singleton/autolathe_recipe/drinking_glass/half_pint_glass + name = "half pint glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/square + +/singleton/autolathe_recipe/drinking_glass/rocks_glass + name = "rocks glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/rocks + +/singleton/autolathe_recipe/drinking_glass/sherry_glass + name = "sherry glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/shake + +/singleton/autolathe_recipe/drinking_glass/cocktail_glass + name = "cocktail glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/cocktail + +/singleton/autolathe_recipe/drinking_glass/shot_glass + name = "shot glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/shot + +/singleton/autolathe_recipe/drinking_glass/pint_glass + name = "pint glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/pint + +/singleton/autolathe_recipe/drinking_glass/mug_glass + name = "mug glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/mug + +/singleton/autolathe_recipe/drinking_glass/flute_glass + name = "flute glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/flute + +/singleton/autolathe_recipe/drinking_glass/cognac_glass + name = "cognac glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/cognac + +/singleton/autolathe_recipe/drinking_glass/goblet_glass + name = "goblet glass" + path = /obj/item/reagent_containers/food/drinks/drinkingglass/newglass/goblet + +/singleton/autolathe_recipe/bottle + name = "bottle" + path = /obj/item/reagent_containers/food/drinks/bottle + category = "Drinking Glasses" diff --git a/code/modules/fabrication/fabricator_build.dm b/code/modules/fabrication/fabricator_build.dm new file mode 100644 index 00000000000..8f0ac24dd40 --- /dev/null +++ b/code/modules/fabrication/fabricator_build.dm @@ -0,0 +1,82 @@ +/obj/machinery/fabricator/proc/update_current_build(spend_time) + + if(!istype(currently_printing) || !is_functioning()) + return + + // Decrement our current build timer. + currently_printing.remaining_time -= max(1, max(1, spend_time * build_time_multiplier)) + if(currently_printing.remaining_time > 0) + return + + // Print the item. + if(ispath(currently_printing.target_recipe.path, /obj/item/stack)) + new currently_printing.target_recipe.path(get_turf(src), amount = currently_printing.multiplier) + else + new currently_printing.target_recipe.path(get_turf(src)) + QDEL_NULL(currently_printing) + get_next_build() + update_icon() + +/obj/machinery/fabricator/proc/start_building() + if(!(fab_status_flags & FAB_BUSY) && is_functioning()) + fab_status_flags |= FAB_BUSY + update_use_power(POWER_USE_ACTIVE) + update_icon() + +/obj/machinery/fabricator/proc/stop_building() + if(fab_status_flags & FAB_BUSY) + fab_status_flags &= ~FAB_BUSY + update_use_power(POWER_USE_IDLE) + update_icon() + +/obj/machinery/fabricator/proc/get_next_build() + currently_printing = null + if(length(print_queue)) + currently_printing = print_queue[1] + print_queue -= currently_printing + start_building() + else + stop_building() + updateUsrDialog() + +/obj/machinery/fabricator/proc/try_queue_build(singleton/autolathe_recipe/recipe, multiplier) + + // Do some basic sanity checking. + if(!is_functioning() || !istype(recipe) || !(recipe in SSfabrication.get_recipes(fabricator_class))) + return + + multiplier = sanitize_integer(multiplier, 1, 100, 1) + if(!ispath(recipe, /obj/item/stack) && multiplier > 1) + multiplier = 1 + + // Check if sufficient resources exist. + for(var/material in recipe.resources) + if(stored_material[material] < round(recipe.resources[material] * mat_efficiency) * multiplier) + return + + // Generate and track a new order. + var/datum/fabricator_build_order/order = new + order.remaining_time = recipe.build_time + order.target_recipe = recipe + order.multiplier = multiplier + print_queue += order + + // Remove/earmark resources. + for(var/material in recipe.resources) + var/removed_mat = round(recipe.resources[material] * mat_efficiency) * multiplier + stored_material[material] = max(0, stored_material[material] - removed_mat) + order.earmarked_materials[material] = removed_mat + + if(!currently_printing) + get_next_build() + else + start_building() + +/obj/machinery/fabricator/proc/try_cancel_build(datum/fabricator_build_order/order) + if(istype(order) && currently_printing != order && is_functioning()) + if(order in print_queue) + // Refund some mats. + for(var/mat in order.earmarked_materials) + stored_material[mat] = min(stored_material[mat] + (order.earmarked_materials[mat] * 0.9), storage_capacity[mat]) + print_queue -= order + qdel(order) diff --git a/code/modules/fabrication/fabricator_hacked.dm b/code/modules/fabrication/fabricator_hacked.dm new file mode 100644 index 00000000000..de4c6affd73 --- /dev/null +++ b/code/modules/fabrication/fabricator_hacked.dm @@ -0,0 +1,5 @@ +/obj/machinery/fabricator/hacked + desc = "A typical autolathe. It has an unusual icon in the interface, and appears to have far more options than a normal autolathe."; + name = "jailbroken autolathe" + fab_status_flags = FAB_HACKED + manufacturer = "hammertail" diff --git a/code/modules/fabrication/fabricator_intake.dm b/code/modules/fabrication/fabricator_intake.dm new file mode 100644 index 00000000000..d7a1549768d --- /dev/null +++ b/code/modules/fabrication/fabricator_intake.dm @@ -0,0 +1,69 @@ +#define NO_SPACE "No Space" +#define FILL_COMPLETELY "Fill Completely" +#define FILL_INCOMPLETELY "Fill Incompletely" + +/obj/machinery/fabricator/proc/load_lathe(obj/item/O, mob/user) + + //Resources are being loaded. + var/obj/item/eating = O + if(!eating.matter || !eating.recyclable) + to_chat(user, SPAN_WARNING("\The [eating] cannot be recycled by \the [src].")) + return + + var/list/fill_status = list() // Used to determine message in cases of multiple materials. + var/total_used = 0 // Amount of material used. + var/mass_per_sheet = 0 // Amount of material constituting one sheet. + var/is_stack = FALSE //Affects the fill message + + for(var/material in eating.matter) + if(isnull(stored_material[material]) || isnull(storage_capacity[material])) + continue + if(stored_material[material] >= storage_capacity[material]) + LAZYADD(fill_status[NO_SPACE], material) + continue + + var/total_material = eating.matter[material] + + //If it's a stack, we eat multiple sheets. + if(istype(eating, /obj/item/stack)) + var/obj/item/stack/stack = eating + is_stack = TRUE + total_material *= stack.get_amount() + + if(stored_material[material] + total_material > storage_capacity[material]) + total_material = storage_capacity[material] - stored_material[material] + LAZYADD(fill_status[FILL_COMPLETELY], material) + else + LAZYADD(fill_status[FILL_INCOMPLETELY], material) + + stored_material[material] += total_material + total_used += total_material + mass_per_sheet += eating.matter[material] + + if(fill_status[NO_SPACE]) + to_chat(user, SPAN_WARNING("\The [src] is full of [english_list(fill_status[NO_SPACE])]. Please remove some material in order to insert more.")) + return + else if(fill_status[FILL_COMPLETELY]) + to_chat(user, SPAN_NOTICE("You fill \the [src] to capacity with [english_list(fill_status[FILL_COMPLETELY])][is_stack ? "." : " from \the [eating]."]")) + else if(fill_status[FILL_INCOMPLETELY]) + to_chat(user, SPAN_NOTICE("You fill \the [src] with [english_list(fill_status[FILL_INCOMPLETELY])][is_stack ? "." : " from \the [eating]."]")) + + // Plays metal insertion animation. + if(istype(eating, /obj/item/stack/material)) + var/obj/item/stack/material/sheet = eating + var/image/adding_mat_overlay = overlay_image(icon, "[icon_state]_mat") + adding_mat_overlay.color = sheet.material.icon_colour + AddOverlays(adding_mat_overlay) + CUT_OVERLAY_IN(adding_mat_overlay, 1 SECOND) + + if(istype(eating, /obj/item/stack)) + var/obj/item/stack/stack = eating + var/amount_needed = total_used / mass_per_sheet + stack.use(min(stack.get_amount(), (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1)) // Prevent maths imprecision from leading to infinite resources + else + user.remove_from_mob(O) + qdel(O) + +#undef NO_SPACE +#undef FILL_COMPLETELY +#undef FILL_INCOMPLETELY diff --git a/code/modules/fabrication/fabricator_microlathe.dm b/code/modules/fabrication/fabricator_microlathe.dm new file mode 100644 index 00000000000..92b26fd57cb --- /dev/null +++ b/code/modules/fabrication/fabricator_microlathe.dm @@ -0,0 +1,22 @@ +/obj/machinery/fabricator/micro + name = "microlathe" + desc = "It produces small items from common resources." + icon = 'icons/obj/machinery/fabricators/microlathe.dmi' + icon_state = "minilathe" + idle_power_usage = 5 + active_power_usage = 1000 + fabricator_class = FABRICATOR_CLASS_MICRO + base_storage_capacity = list( + MATERIAL_ALUMINIUM = 5000, + MATERIAL_GLASS = 5000, + MATERIAL_PLASTIC = 5000 + ) + manufacturer = "idris" + +//Subtype for mapping, starts preloaded and set to print glasses +/obj/machinery/fabricator/micro/bartender + show_category = "Drinking Glasses" + +/obj/machinery/fabricator/micro/bartender/Initialize() + . = ..() + stored_material[MATERIAL_GLASS] = base_storage_capacity[MATERIAL_GLASS] diff --git a/code/modules/heavy_vehicle/equipment/utility.dm b/code/modules/heavy_vehicle/equipment/utility.dm index 0b35a3a96f2..235077afef3 100644 --- a/code/modules/heavy_vehicle/equipment/utility.dm +++ b/code/modules/heavy_vehicle/equipment/utility.dm @@ -591,16 +591,16 @@ restricted_hardpoints = list(HARDPOINT_BACK) restricted_software = list(MECH_SOFTWARE_UTILITY) origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - var/obj/machinery/autolathe/mounted/lathe + var/obj/machinery/fabricator/mounted/lathe /obj/item/mecha_equipment/autolathe/get_hardpoint_maptext() if(lathe?.currently_printing) - return lathe.currently_printing.recipe.name + return lathe.currently_printing.target_recipe.name . = ..() /obj/item/mecha_equipment/autolathe/Initialize() . = ..() - lathe = new /obj/machinery/autolathe/mounted(src) + lathe = new /obj/machinery/fabricator/mounted(src) /obj/item/mecha_equipment/autolathe/installed() ..() diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index eec5ba4e9eb..b62f361e16a 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -791,7 +791,7 @@ var/list/worths = list( /obj/machinery/ai_slipper = -500, /obj/machinery/alarm = -800, /obj/machinery/air_sensor = -800, - /obj/machinery/autolathe = -3300, + /obj/machinery/fabricator = -3300, /obj/machinery/bluespacerelay = -4000, /obj/machinery/button = 100, /obj/machinery/cablelayer = -1700, diff --git a/html/changelogs/GeneralCamo - Autolathe Refactor.yml b/html/changelogs/GeneralCamo - Autolathe Refactor.yml new file mode 100644 index 00000000000..71ede88aebd --- /dev/null +++ b/html/changelogs/GeneralCamo - Autolathe Refactor.yml @@ -0,0 +1,59 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: GeneralCamo + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Ported the microlathe from Bay. This is a small autolathe that can make cutlery and drinking glasses." + - refactor: "Refactored the autolathe to have its recipes handled by a subsystem, in preparation for further refactors." diff --git a/icons/obj/machinery/autolathe.dmi b/icons/obj/machinery/autolathe.dmi deleted file mode 100644 index e12e0e5d3e1a86d64fcbbe19bc4857da0a00cffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1922 zcmb_b`9IW)0{za{FbrdmOhrsXS)xRiY%_%yg-O=XL?UkYGL3B_d`Vqm?qDRIZ7S=F zm~w4dv!`Uabj3t7*>_{jXkLBZ`{Dfo?|eSzoX`33d_LzST(UclLLNc_0D!W#vbg-i zp`R2L`Jt_5UOhi7Bizw7*up2so8nIn_74mI0BW{_Gno>yweCP(-T10;QA?xu-3NyX zC+&XS36ACm8})90l0>U9)V-`bsCxmM%}H%bb;LTTvno~asw@>{r-Ve^qpyk&sQGra zXF8{4WFfs;o#bRERg2^>-Yz$hvbOK7OW|Vkgd?fLZS{XC#L9jBs#-Xqb9k^}m5Oq5 zCT|465TZax3^AfYZmJ0YL<+1e&N@=F7jw?~DL5VI98Wh*JBO5xRbjc!wOCXm(6pD; zG;9Oa9iuF&_jLb#k?VP z5a8*!tM--=pQ+gtGJ{m99b{%`Gh%HU9 zdgJQe)MH0)ki9cj9uY0R)oEEEIS{;*FGqgL_i4iS>_mW4wbXAiRWGIMa^`@i+bw?H z$2U0Up|F8o_bF7C`cye(ZxoClTNWd%D_dafea9+k#5p@2*u$J3CIVXi98z=vj*w3o zIh-CUt-Upg(Mo}-U9Vjk`dCuysR42q=!tJPFw(CN7N=VOvrpJ=7xz5-o*l;{`UGSc zU=yZ*eUD5>?F7M!Ygo17)7wU-C&?e3`mfr>`qkq+xjFRhmurJt3mqIZDHeTme7a|& zs0>299{pT5icCHW&TWE5iKrC`BCy1M0@@2c8)m(YX|Ku71Gv5iEOqefU=mNoVe5y)HQzx!K~ z3zC<~VY8i0G|*)J$PrG!fCM~-N(EQ8R$Ccn5fdQu0-M(Uo7cIq_MJF!=oenXp_;w` zyQ;p)aX9z^EOy2(D^&2jclm<(2<1|e;@mX_?Z#8^aCpj-Tcr;D&xo{^jp>}O6J8gO zqx2oLP-`BLNIeev#BbA)|I(pUc)dBrU{zB5Y5WMYrmfH|WcZZTv#a0t6@=E}dmpUl z9y}mgU-b_hv%q~vUY5QYddVG5P^}Tt?bsV%swSPeZ9)+!2~4ivBpEX@*fO*GL{quB zJaO;IkL|nrEc|asb)A&@aowM&k~U^CBglnIt2>1ZE3DPDv5=24qd5AR-`)Dfwm*bs zqVUiX-&VB>5pQh9Ugz6(Zf^GN#rZ8SSn& zpebPul&yQ;?k5qs@-9aYdzNJJga1r5mUa~wW+W*&C*0i`@+@+_@JvT)_;e|TV89?M z@+Pk}DXqt2=>))RiX?$nKmXeYpN>=`MN(26%YJhg0hv|q;%KP`WWjo3;erHT0LBw7x$b75_ zllUeq%qBqhjs^va_G>iMre)1WfpYagPV)b5shulND1Xqmk zb-?nKPj`|y_ojRS4)UO;5pFn?JQ3~EPpDTvP3O&yfEa+y-ZMe0+%tqm$goScxp1is zsPm*`I7vI~i^sLhHt7Ram=l1`OhF>=P2A)1zjhWz(4o~0S1Q@gkc5nDHHN@SK|TB! zF#b!4O`@HD;q(1fb8*CK$#?ly4^X;lwmD07xi&Q{Xq8b^gTeY8&afq_QP;Y?8&$Xr z(YhntJS~@PL005u}0{{R3yb+fl0000vP)t-s00011 zRAO&@dzh%BDLO-IBPpgLC@#s~4jLhY<=<9SVW$8#{Qx%0)ywko*_E4`F+?sm5*K|q zKvX`yng9R*0d!JMQvg8b*k%9#0IPabSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1 z4ST z*aiBa)4E)ihRPec&y$}Kj}{#K+!7d05u{n*T#u9{IQGF}O+5OU5wb8`3YMA&lY+j} z6&}UsYHZzM^$?_~57sqJnhs}uxS*W`7lKW5(puX=qU|W2aGjCN51OVj<>@_hTn7=X)+5-imYXh6ZIg^%EZCuIuVSVdI)FCq_k~0* zw`ks^#RVhi38{jy$i2xDq)zKD+QLEv)zvMc1rvTU1Wo&1bpio`9ntklNlNP(x-Jzy zz3D$5000000DwPEZvO5C_1Cjo8}fInJFw}qmZ{&aB!^u6wd9f80VlAsgIocwes=zD z@A}#KyS?iJ00000006*0g1gH{rSGG10{&UHL#@7nf0j+EfPcv3P^-BB*9QgNiT*RN z=`$uf#iq}4**$%h%ij6FZ1&FoWwUqw4*&oF0Mfa=58O(Nr1-cEe3TYR0YL!%6-)xj=sL0BF z+Be8#-ukeDy)%?6cz1$#p@L)tT^Hm$VeI->ex(NUP;9LCq1Y+?M o-~@Ba0RR9100000002OgFKUAv0pROAUH||907*qoM6N<$g5rU&iU0rr literal 0 HcmV?d00001 diff --git a/icons/obj/machinery/fabricators/microlathe.dmi b/icons/obj/machinery/fabricators/microlathe.dmi new file mode 100644 index 0000000000000000000000000000000000000000..850b2892f27cf65d4be93a744af7a633f46a5a8d GIT binary patch literal 957 zcmV;u148_XP)005u}0{{R3yb+fl00015P)t-sz`(#@ zV|Cx)=*7p>)z{#Zm#Y{VA8>PrYa=P`@Asx6C`U?LH#$opBQO_F7kB9eW@Z3-e*w+a z0QUa?UteG9>gxah|GftXO-)U}z`$Cu1B4L~Id3_@z`%yb1IPdX00DGTPE!Ct=GbNc z006mqR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;Zh zDainGjE%TBGg33tGfE(w;*!LYR3KAHiHkEOv#1!zH00t;D@x2wg|OiYax?QXa}rB3 zQi)d?p98X}7`q0bLsC+65-UN%20D1O$Cu|9WoPE4V>iYe$rv3Zh|Ro$#JtoT5}co# zSb|-(1rAGfjImlQ#t{QW!~W(zW>*Gg#ylkEw|@tyW8)RB_nHaUo?VwLOdM6zeEe2@l=v# zgPes9c_zs-#+V9B7NL_KB`PgTSkCfnlE+mz1Qr>~`7GK%{S4+o1K$+$ZxIFRI5Tk_ zm<9@bTWyT)feKT<(_@&xF{><>&DrWr!dQ?%-8cR`7OE5Va2`xqzKAUFn5w4q$nHV} zPJQYfVis0&)$$tixB~0x`c~a9byc9iQg4=KU{w@FmDI^;lGMh|LI~@FH;#4J{vQH| zli<_9x){}e9Y|fD3d?!3e0YOjht+YNib$u?}+8hJr zS*k!@pN6OMq&AFQTiIG4n!0XgJznZm&w$sg)+ZUYvFG7D*#59EW$8>UM4YzuaqAF1 z3jhEB0002sTWcD}e6MMOuK$Dip8X#PYGCwy&-cjl!FTx{^*R6m0N7nFm(U5yazns+ z>GH!K_?iRY)2(Hn34F-`@NB%d!b_lIeV;EK_%n(?t?SlH*I!qA0Pz6!>4cEKMStU6 zZ!Wn4sRyu2$NRpOZ7()nVrrmkeV3l!q`XOSi#71TMJrTe8*kwAD~U7UN?RxM{tw{4 zx9j$}kiPzWF0_63?*)YU8~^|SfLC#ha4q5(;o1T`k8sHc=zBs+p8v%k=y`-o4)i_3 z^&Ut*0P2XBI=>4({{sL30000000000`1bVI_kDid^$lmP{hfRVkOO@OkOTGi3;J8f fm)rpW0GR#&Bz-EW9D-{?00000NkvXXu0mjfdC<2S literal 0 HcmV?d00001 diff --git a/maps/away/away_site/abandoned_diner/abandoned_diner.dmm b/maps/away/away_site/abandoned_diner/abandoned_diner.dmm index 2e8f86d2f63..0db3aaaba19 100644 --- a/maps/away/away_site/abandoned_diner/abandoned_diner.dmm +++ b/maps/away/away_site/abandoned_diner/abandoned_diner.dmm @@ -5525,7 +5525,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/plating, /area/abandoned_diner/maintenance) "uRz" = ( diff --git a/maps/away/away_site/big_derelict/bigderelict.dmm b/maps/away/away_site/big_derelict/bigderelict.dmm index 2f1cc6bf0b0..4b5b31760a3 100644 --- a/maps/away/away_site/big_derelict/bigderelict.dmm +++ b/maps/away/away_site/big_derelict/bigderelict.dmm @@ -750,7 +750,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark, /area/derelict) diff --git a/maps/away/away_site/first_aurora/first_aurora.dmm b/maps/away/away_site/first_aurora/first_aurora.dmm index ce59a485cf3..6aedd4e1d07 100644 --- a/maps/away/away_site/first_aurora/first_aurora.dmm +++ b/maps/away/away_site/first_aurora/first_aurora.dmm @@ -2792,7 +2792,7 @@ /turf/simulated/floor/airless, /area/derelict/hallway/southeast) "jC" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white/airless, /area/derelict/hallway/southeast) @@ -3663,7 +3663,7 @@ /turf/simulated/floor/tiled/airless, /area/derelict/hallway/southwest) "mv" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light_switch{ pixel_x = -27 }, diff --git a/maps/away/away_site/hivebot_hub/hivebot_hub.dmm b/maps/away/away_site/hivebot_hub/hivebot_hub.dmm index daea0554869..df247a1f545 100644 --- a/maps/away/away_site/hivebot_hub/hivebot_hub.dmm +++ b/maps/away/away_site/hivebot_hub/hivebot_hub.dmm @@ -2467,7 +2467,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/autolathe{ +/obj/machinery/fabricator{ hacked = 1 }, /turf/simulated/floor/tiled/dark/airless, diff --git a/maps/away/away_site/konyang/point_verdant/point_verdant.dmm b/maps/away/away_site/konyang/point_verdant/point_verdant.dmm index 65ef7011271..2651154ab47 100644 --- a/maps/away/away_site/konyang/point_verdant/point_verdant.dmm +++ b/maps/away/away_site/konyang/point_verdant/point_verdant.dmm @@ -4292,12 +4292,7 @@ /turf/simulated/floor/carpet/lightblue, /area/point_verdant/interior/police) "cqN" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /turf/simulated/floor/tiled, /area/point_verdant/interior/offices/kaf) "crM" = ( @@ -12187,12 +12182,7 @@ /obj/effect/floor_decal/corner_wide/yellow{ dir = 5 }, -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /turf/simulated/floor/tiled, /area/point_verdant/interior/offices/basement) "gLK" = ( @@ -24214,12 +24204,7 @@ /turf/simulated/wall, /area/point_verdant/interior/decrepit) "nDG" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /obj/effect/floor_decal/corner_wide/yellow/diagonal, /obj/effect/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled, @@ -25109,7 +25094,7 @@ /turf/simulated/floor/asphalt, /area/point_verdant/interior/parking) "ola" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/random/dirt_75, /obj/effect/floor_decal/corner/mauve/diagonal, /turf/simulated/floor/tiled, @@ -25279,7 +25264,7 @@ /turf/simulated/floor/roofing_tiles, /area/point_verdant/outdoors) "ooU" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/decal/curb, /turf/simulated/floor/tiled/full, /area/point_verdant/interior/spaceport) diff --git a/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm b/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm index b33a7b2d8f3..5f68074188f 100644 --- a/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm +++ b/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm @@ -122,7 +122,7 @@ /turf/simulated/floor/wood/airless, /area/overgrown_mining_station) "bQ" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/airless, /area/overgrown_mining_station) "bU" = ( diff --git a/maps/away/away_site/sensor_relay/hegemony_waypoint/hegemony_waypoint_submaps.dmm b/maps/away/away_site/sensor_relay/hegemony_waypoint/hegemony_waypoint_submaps.dmm index 33222768e0e..f4e47955eb4 100644 --- a/maps/away/away_site/sensor_relay/hegemony_waypoint/hegemony_waypoint_submaps.dmm +++ b/maps/away/away_site/sensor_relay/hegemony_waypoint/hegemony_waypoint_submaps.dmm @@ -610,7 +610,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/gridded, /area/hegemony_waypoint/atmos) "nm" = ( diff --git a/maps/away/away_site/sensor_relay/solarian_prewar/sensor_relay.dmm b/maps/away/away_site/sensor_relay/solarian_prewar/sensor_relay.dmm index dae8d5191c4..df4fe5bcb3e 100644 --- a/maps/away/away_site/sensor_relay/solarian_prewar/sensor_relay.dmm +++ b/maps/away/away_site/sensor_relay/solarian_prewar/sensor_relay.dmm @@ -2538,7 +2538,7 @@ /turf/simulated/floor/plating, /area/sensor_relay/airlocks) "aWD" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/decal/cleanable/cobweb, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/item/device/radio/intercom/ship/west, diff --git a/maps/away/away_site/shady/shady.dmm b/maps/away/away_site/shady/shady.dmm index 8c2a0cac03b..f4a2184db54 100644 --- a/maps/away/away_site/shady/shady.dmm +++ b/maps/away/away_site/shady/shady.dmm @@ -1761,7 +1761,7 @@ /area/hideout) "AM" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/hideout) "AQ" = ( diff --git a/maps/away/away_site/tajara/scrapper/scrapper.dmm b/maps/away/away_site/tajara/scrapper/scrapper.dmm index f2f02be6c52..5afeabdcbdc 100644 --- a/maps/away/away_site/tajara/scrapper/scrapper.dmm +++ b/maps/away/away_site/tajara/scrapper/scrapper.dmm @@ -1303,7 +1303,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/scrapper_ship/bridge) "oE" = ( -/obj/machinery/autolathe{ +/obj/machinery/fabricator{ hacked = 1 }, /obj/structure/window/reinforced, diff --git a/maps/away/away_site/uueoaesa/omgolo/omgolo_tourist.dmm b/maps/away/away_site/uueoaesa/omgolo/omgolo_tourist.dmm index a6fd942e2b8..ff092022b93 100644 --- a/maps/away/away_site/uueoaesa/omgolo/omgolo_tourist.dmm +++ b/maps/away/away_site/uueoaesa/omgolo/omgolo_tourist.dmm @@ -2425,7 +2425,7 @@ /obj/effect/floor_decal/corner/orange{ dir = 9 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/omgolo_tourist/engineering) "aRr" = ( diff --git a/maps/away/away_site/uueoaesa/reclamation/ihss_reclamation.dmm b/maps/away/away_site/uueoaesa/reclamation/ihss_reclamation.dmm index 62a39a89d7b..05d0384adb4 100644 --- a/maps/away/away_site/uueoaesa/reclamation/ihss_reclamation.dmm +++ b/maps/away/away_site/uueoaesa/reclamation/ihss_reclamation.dmm @@ -574,7 +574,7 @@ /turf/simulated/floor/tiled/dark, /area/ihss_reclamation/bridge) "cI" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/ihss_reclamation/equipment) "cJ" = ( diff --git a/maps/away/away_site/wrecked_nt_ship/wrecked_nt_ship.dmm b/maps/away/away_site/wrecked_nt_ship/wrecked_nt_ship.dmm index 083ac0b4020..8c0810f6588 100644 --- a/maps/away/away_site/wrecked_nt_ship/wrecked_nt_ship.dmm +++ b/maps/away/away_site/wrecked_nt_ship/wrecked_nt_ship.dmm @@ -381,7 +381,7 @@ /turf/simulated/floor/airless, /area/wrecked_nt_ship) "hC" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/hatch/red, /turf/simulated/floor/tiled/steel/airless, /area/wrecked_nt_ship) diff --git a/maps/away/ships/coc/coc_ranger/coc_ship.dmm b/maps/away/ships/coc/coc_ranger/coc_ship.dmm index c13aee523ae..9238a45e20d 100644 --- a/maps/away/ships/coc/coc_ranger/coc_ship.dmm +++ b/maps/away/ships/coc/coc_ranger/coc_ship.dmm @@ -2184,7 +2184,7 @@ req_access = null; req_one_access = list(221,222) }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/ship/ranger_corvette/engine2) "iDh" = ( diff --git a/maps/away/ships/coc/coc_scarab/coc_scarab.dmm b/maps/away/ships/coc/coc_scarab/coc_scarab.dmm index b616776158c..b7afd6a8da2 100644 --- a/maps/away/ships/coc/coc_scarab/coc_scarab.dmm +++ b/maps/away/ships/coc/coc_scarab/coc_scarab.dmm @@ -12619,7 +12619,7 @@ /area/ship/coc_scarab/starboardhallway) "XL" = ( /obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/carpet/rubber, /area/ship/coc_scarab/engistorage) "XS" = ( diff --git a/maps/away/ships/coc/coc_surveyor/coc_surveyor.dmm b/maps/away/ships/coc/coc_surveyor/coc_surveyor.dmm index e75ad87b7c4..11abea55445 100644 --- a/maps/away/ships/coc/coc_surveyor/coc_surveyor.dmm +++ b/maps/away/ships/coc/coc_surveyor/coc_surveyor.dmm @@ -926,7 +926,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/carpet/rubber, /area/coc_survey_ship/engineering) "iR" = ( diff --git a/maps/away/ships/coc/gadpathur_patrol/gadpathur_patrol.dmm b/maps/away/ships/coc/gadpathur_patrol/gadpathur_patrol.dmm index aa9a4b06365..e89f972ddda 100644 --- a/maps/away/ships/coc/gadpathur_patrol/gadpathur_patrol.dmm +++ b/maps/away/ships/coc/gadpathur_patrol/gadpathur_patrol.dmm @@ -4905,7 +4905,7 @@ req_access = null; req_one_access = list(223,224) }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/structure/cable{ icon_state = "0-4" }, diff --git a/maps/away/ships/dionae/diona_serz_ship/diona_serz_ship.dmm b/maps/away/ships/dionae/diona_serz_ship/diona_serz_ship.dmm index 28ee9251601..0562e7c9fb5 100644 --- a/maps/away/ships/dionae/diona_serz_ship/diona_serz_ship.dmm +++ b/maps/away/ships/dionae/diona_serz_ship/diona_serz_ship.dmm @@ -6,7 +6,7 @@ /turf/simulated/floor/diona/airless, /area/ship/diona_serz_ship/hall) "af" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/diona/airless, /area/ship/diona_serz_ship/warehouse) "av" = ( diff --git a/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dmm b/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dmm index f438a8f9b06..67b62c7e722 100644 --- a/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dmm +++ b/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dmm @@ -6384,7 +6384,7 @@ /turf/simulated/wall, /area/ship/dominian_corvette/recroom) "xoc" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light{ dir = 4; inserted_light = /obj/item/light/tube/colored/blue; diff --git a/maps/away/ships/elyra/elyra_corvette/elyra_corvette.dmm b/maps/away/ships/elyra/elyra_corvette/elyra_corvette.dmm index 9209d277d02..8cbd7570efe 100644 --- a/maps/away/ships/elyra/elyra_corvette/elyra_corvette.dmm +++ b/maps/away/ships/elyra/elyra_corvette/elyra_corvette.dmm @@ -8788,7 +8788,7 @@ /obj/structure/sign/poster{ pixel_y = 32 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/warning{ dir = 8 }, diff --git a/maps/away/ships/freebooter/freebooter_ship_.dmm b/maps/away/ships/freebooter/freebooter_ship_.dmm index 4b77797077e..062a05da2f6 100644 --- a/maps/away/ships/freebooter/freebooter_ship_.dmm +++ b/maps/away/ships/freebooter/freebooter_ship_.dmm @@ -4445,7 +4445,7 @@ /area/ship/freebooter_ship/foyer) "rfn" = ( /obj/effect/floor_decal/corner/orange/full, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light/small/emergency{ dir = 8 }, diff --git a/maps/away/ships/hegemony/fishing_trawler/fishing_league_trawler.dmm b/maps/away/ships/hegemony/fishing_trawler/fishing_league_trawler.dmm index c7ae0ea307f..ecf8148183b 100644 --- a/maps/away/ships/hegemony/fishing_trawler/fishing_league_trawler.dmm +++ b/maps/away/ships/hegemony/fishing_trawler/fishing_league_trawler.dmm @@ -3004,7 +3004,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/ship/fishing_trawler/engineering/port) "wG" = ( diff --git a/maps/away/ships/heph/cyclops/cyclops.dmm b/maps/away/ships/heph/cyclops/cyclops.dmm index 524eec8e571..7bd7c15e816 100644 --- a/maps/away/ships/heph/cyclops/cyclops.dmm +++ b/maps/away/ships/heph/cyclops/cyclops.dmm @@ -3146,7 +3146,7 @@ dir = 10 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/hephmining_ship/cyclops) "CV" = ( diff --git a/maps/away/ships/heph/heph_security/heph_security.dmm b/maps/away/ships/heph/heph_security/heph_security.dmm index 96392bb9011..13d6a114b37 100644 --- a/maps/away/ships/heph/heph_security/heph_security.dmm +++ b/maps/away/ships/heph/heph_security/heph_security.dmm @@ -2177,7 +2177,7 @@ /area/heph_security_ship/engineering) "pn" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor, /area/heph_security_ship/engineering) diff --git a/maps/away/ships/idris/idris_cruiser.dmm b/maps/away/ships/idris/idris_cruiser.dmm index b9aec7bb008..a78636d9867 100644 --- a/maps/away/ships/idris/idris_cruiser.dmm +++ b/maps/away/ships/idris/idris_cruiser.dmm @@ -4667,7 +4667,7 @@ /turf/simulated/floor/wood, /area/ship/idris_cruiser/corridor/civ_aft) "qY" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/sign/nosmoking_1{ pixel_x = -26 diff --git a/maps/away/ships/kataphracts/kataphract_ship.dmm b/maps/away/ships/kataphracts/kataphract_ship.dmm index 11ce1ca89e6..bfbde4d87ec 100644 --- a/maps/away/ships/kataphracts/kataphract_ship.dmm +++ b/maps/away/ships/kataphracts/kataphract_ship.dmm @@ -7239,7 +7239,7 @@ /turf/simulated/floor/tiled, /area/kataphract_chapter/portentry) "XZ" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/kataphract_chapter/engineering) diff --git a/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm b/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm index d134a6bc95b..64e8ca85b6d 100644 --- a/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm +++ b/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm @@ -2732,7 +2732,7 @@ /turf/simulated/floor/tiled/dark, /area/ship/kasf_corvette/engie) "qv" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/structure/sign/poster{ pixel_y = 32 }, diff --git a/maps/away/ships/konyang/konyang_wreck/konyang_wreck.dmm b/maps/away/ships/konyang/konyang_wreck/konyang_wreck.dmm index d8cbab093fb..8b8e29961b7 100644 --- a/maps/away/ships/konyang/konyang_wreck/konyang_wreck.dmm +++ b/maps/away/ships/konyang/konyang_wreck/konyang_wreck.dmm @@ -5017,7 +5017,7 @@ /turf/simulated/floor/tiled/dark, /area/konyang_wreck/pod1) "Ry" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/operations, /obj/machinery/light{ dir = 8; diff --git a/maps/away/ships/orion/orion_express_ship.dmm b/maps/away/ships/orion/orion_express_ship.dmm index c872d2d8951..bfd06af592b 100644 --- a/maps/away/ships/orion/orion_express_ship.dmm +++ b/maps/away/ships/orion/orion_express_ship.dmm @@ -5742,7 +5742,7 @@ /area/space) "sSQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor, /area/ship/orion/engie) "sTm" = ( diff --git a/maps/away/ships/sadar_scout/sadar_scout.dmm b/maps/away/ships/sadar_scout/sadar_scout.dmm index ed0c68a9fb5..c28e6288c5a 100644 --- a/maps/away/ships/sadar_scout/sadar_scout.dmm +++ b/maps/away/ships/sadar_scout/sadar_scout.dmm @@ -4630,7 +4630,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/button/remote/blast_door{ pixel_y = 28; dir = 1; diff --git a/maps/away/ships/sol/sol_merc/fsf_patrol_ship.dmm b/maps/away/ships/sol/sol_merc/fsf_patrol_ship.dmm index eb71570319d..a252709314d 100644 --- a/maps/away/ships/sol/sol_merc/fsf_patrol_ship.dmm +++ b/maps/away/ships/sol/sol_merc/fsf_patrol_ship.dmm @@ -2686,9 +2686,7 @@ /obj/structure/cable/green{ icon_state = "1-8" }, -/obj/machinery/autolathe{ - hacked = 1 - }, +/obj/machinery/fabricator/hacked, /obj/effect/floor_decal/industrial/outline/operations, /turf/simulated/floor/tiled/dark, /area/ship/fsf_patrol_ship/engineering) diff --git a/maps/away/ships/sol/sol_pirate/sfa_patrol_ship.dmm b/maps/away/ships/sol/sol_pirate/sfa_patrol_ship.dmm index f1c40d9ed61..4efef3733e5 100644 --- a/maps/away/ships/sol/sol_pirate/sfa_patrol_ship.dmm +++ b/maps/away/ships/sol/sol_pirate/sfa_patrol_ship.dmm @@ -5666,9 +5666,7 @@ /turf/simulated/wall/shuttle/raider, /area/ship/sfa_patrol_ship/Officer) "qXN" = ( -/obj/machinery/autolathe{ - hacked = 1 - }, +/obj/machinery/fabricator/hacked, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, diff --git a/maps/away/ships/sol/sol_ssmd/ssmd_ship.dmm b/maps/away/ships/sol/sol_ssmd/ssmd_ship.dmm index ad2c39495d5..5b8a816e83f 100644 --- a/maps/away/ships/sol/sol_ssmd/ssmd_ship.dmm +++ b/maps/away/ships/sol/sol_ssmd/ssmd_ship.dmm @@ -2295,7 +2295,7 @@ /obj/effect/floor_decal/corner/orange{ dir = 5 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/ship/ssmd_corvette/portengine) "fWG" = ( diff --git a/maps/away/ships/tirakqi_smuggler/tirakqi_smuggler.dmm b/maps/away/ships/tirakqi_smuggler/tirakqi_smuggler.dmm index 9f7bca4217d..cf00fd8b2de 100644 --- a/maps/away/ships/tirakqi_smuggler/tirakqi_smuggler.dmm +++ b/maps/away/ships/tirakqi_smuggler/tirakqi_smuggler.dmm @@ -6670,7 +6670,7 @@ /area/ship/tirakqi_smuggler/port_hall) "Oy" = ( /obj/machinery/light/skrell, -/obj/machinery/autolathe, +/obj/machinery/fabricator/hacked, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/full, /area/ship/tirakqi_smuggler/engi) diff --git a/maps/away/ships/tramp_freighter/tramp_freighter.dmm b/maps/away/ships/tramp_freighter/tramp_freighter.dmm index 1ce60485917..48a8f20a3d3 100644 --- a/maps/away/ships/tramp_freighter/tramp_freighter.dmm +++ b/maps/away/ships/tramp_freighter/tramp_freighter.dmm @@ -7708,7 +7708,7 @@ /turf/simulated/floor/tiled/dark/full, /area/tramp_freighter/afthallway) "Oj" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light{ dir = 8 }, diff --git a/maps/away/ships/unathi_pirate/hiskyn/unathi_pirate_hiskyn.dmm b/maps/away/ships/unathi_pirate/hiskyn/unathi_pirate_hiskyn.dmm index b0ba7f749c5..bf8e214769f 100644 --- a/maps/away/ships/unathi_pirate/hiskyn/unathi_pirate_hiskyn.dmm +++ b/maps/away/ships/unathi_pirate/hiskyn/unathi_pirate_hiskyn.dmm @@ -2009,7 +2009,7 @@ dir = 9 }, /obj/machinery/light, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/hiskyn_ship/engineering) "aQp" = ( diff --git a/maps/away/ships/unathi_pirate/izharshan/unathi_pirate_izharshan.dmm b/maps/away/ships/unathi_pirate/izharshan/unathi_pirate_izharshan.dmm index 2005d682d06..d0431d0bbb7 100644 --- a/maps/away/ships/unathi_pirate/izharshan/unathi_pirate_izharshan.dmm +++ b/maps/away/ships/unathi_pirate/izharshan/unathi_pirate_izharshan.dmm @@ -118,10 +118,7 @@ /turf/simulated/floor/airless, /area/shuttle/unathi_pirate_izharshan/helm) "dv" = ( -/obj/machinery/autolathe{ - hacked = 1; - name = "Modified Autolathe" - }, +/obj/machinery/fabricator/hacked, /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor, diff --git a/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa.dmm b/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa.dmm index 7faf29edb55..8b511d6e6fc 100644 --- a/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa.dmm +++ b/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa.dmm @@ -3955,7 +3955,7 @@ /turf/simulated/floor/diona, /area/tarwa_ship/diona) "KP" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/plating, /area/tarwa_ship/engineering1) diff --git a/maps/away/ships/xanu/xanu_frigate.dmm b/maps/away/ships/xanu/xanu_frigate.dmm index 61e3893a83d..926873a5453 100644 --- a/maps/away/ships/xanu/xanu_frigate.dmm +++ b/maps/away/ships/xanu/xanu_frigate.dmm @@ -13795,7 +13795,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/ship/xanu_frigate/engineering/port) diff --git a/maps/dungeon_spawns/coc_ship_unique.dmm b/maps/dungeon_spawns/coc_ship_unique.dmm index 0d911026881..61de2581f90 100644 --- a/maps/dungeon_spawns/coc_ship_unique.dmm +++ b/maps/dungeon_spawns/coc_ship_unique.dmm @@ -1252,12 +1252,7 @@ /turf/simulated/floor/carpet, /area/dungeon/crashed_ship) "zq" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "modified autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /obj/effect/decal/cleanable/liquid_fuel, /turf/simulated/floor/tiled, /area/dungeon/crashed_ship) diff --git a/maps/dungeon_spawns/skrell_crash_unique.dmm b/maps/dungeon_spawns/skrell_crash_unique.dmm index 3b0be81ed74..2e17e7d0dba 100644 --- a/maps/dungeon_spawns/skrell_crash_unique.dmm +++ b/maps/dungeon_spawns/skrell_crash_unique.dmm @@ -376,7 +376,7 @@ /turf/simulated/floor/tiled/white, /area/dungeon/skrell_ship) "bq" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/shuttle/advanced, /area/dungeon/skrell_ship) "br" = ( diff --git a/maps/dungeon_spawns/sol_ship_unique.dmm b/maps/dungeon_spawns/sol_ship_unique.dmm index 7577388d107..5aab74a873e 100644 --- a/maps/dungeon_spawns/sol_ship_unique.dmm +++ b/maps/dungeon_spawns/sol_ship_unique.dmm @@ -46,7 +46,7 @@ }, /area/dungeon/crashed_ship) "dX" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light/colored/red{ dir = 8 }, diff --git a/maps/event/generic_dock/generic_dock-1.dmm b/maps/event/generic_dock/generic_dock-1.dmm index 0270687fcd4..9b6d7d6b3b6 100644 --- a/maps/event/generic_dock/generic_dock-1.dmm +++ b/maps/event/generic_dock/generic_dock-1.dmm @@ -16862,12 +16862,7 @@ }, /area/centcom/holding) "wjW" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /turf/unsimulated/floor/plating, /area/centcom/specops) "wkk" = ( diff --git a/maps/event/idris_cruise/idris_cruise-1.dmm b/maps/event/idris_cruise/idris_cruise-1.dmm index 41953caceda..bbcc8fc9f0d 100644 --- a/maps/event/idris_cruise/idris_cruise-1.dmm +++ b/maps/event/idris_cruise/idris_cruise-1.dmm @@ -20044,12 +20044,7 @@ /turf/simulated/floor/beach/water/pool, /area/cruise/pool/sauna1) "qNh" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /obj/effect/floor_decal/corner/yellow/diagonal, /obj/structure/railing/mapped, /obj/structure/railing/mapped{ diff --git a/maps/helpers/event_shuttles/sccv_apollo_v1.dmm b/maps/helpers/event_shuttles/sccv_apollo_v1.dmm index ab9a4af5078..0fce5fac01e 100644 --- a/maps/helpers/event_shuttles/sccv_apollo_v1.dmm +++ b/maps/helpers/event_shuttles/sccv_apollo_v1.dmm @@ -95,7 +95,7 @@ /turf/simulated/floor/tiled, /area/scc_event_shuttle) "bC" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/scc_event_shuttle) "bH" = ( @@ -2201,7 +2201,7 @@ /turf/simulated/floor/carpet/rubber, /area/scc_event_shuttle) "Gf" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/operations, /turf/simulated/floor/tiled/dark, /area/scc_event_shuttle) diff --git a/maps/helpers/event_shuttles/sccv_apollo_v2.dmm b/maps/helpers/event_shuttles/sccv_apollo_v2.dmm index 6741c1d7c4d..68732857a19 100644 --- a/maps/helpers/event_shuttles/sccv_apollo_v2.dmm +++ b/maps/helpers/event_shuttles/sccv_apollo_v2.dmm @@ -415,7 +415,7 @@ /turf/simulated/floor/tiled/white, /area/scc_event_shuttle) "eK" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/scc_event_shuttle) "eL" = ( @@ -859,7 +859,7 @@ /turf/simulated/floor/tiled/dark, /area/scc_event_shuttle) "nq" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/operations, /turf/simulated/floor/tiled, /area/scc_event_shuttle) diff --git a/maps/helpers/event_shuttles/sccv_apollo_v3.dmm b/maps/helpers/event_shuttles/sccv_apollo_v3.dmm index a23e1ce027e..38ac48699a6 100644 --- a/maps/helpers/event_shuttles/sccv_apollo_v3.dmm +++ b/maps/helpers/event_shuttles/sccv_apollo_v3.dmm @@ -2618,7 +2618,7 @@ /turf/simulated/floor/tiled/dark, /area/scc_event_shuttle) "TR" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/scc_event_shuttle) "TZ" = ( @@ -2768,7 +2768,7 @@ /turf/simulated/floor, /area/scc_event_shuttle) "VP" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/operations, /turf/simulated/floor/tiled, /area/scc_event_shuttle) diff --git a/maps/helpers/event_shuttles/sccv_artemis.dmm b/maps/helpers/event_shuttles/sccv_artemis.dmm index 1de6e3f0fd0..9a9c00a5e7d 100644 --- a/maps/helpers/event_shuttles/sccv_artemis.dmm +++ b/maps/helpers/event_shuttles/sccv_artemis.dmm @@ -1305,7 +1305,7 @@ /turf/simulated/floor/tiled/steel, /area/scc_event_shuttle) "wt" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/steel, /area/scc_event_shuttle) "ww" = ( @@ -2257,7 +2257,7 @@ /area/scc_event_shuttle) "IW" = ( /obj/effect/floor_decal/industrial/outline/operations, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/steel, /area/scc_event_shuttle) "IZ" = ( diff --git a/maps/helpers/event_shuttles/sccv_packrat.dmm b/maps/helpers/event_shuttles/sccv_packrat.dmm index 5e48df9321a..8121292688e 100644 --- a/maps/helpers/event_shuttles/sccv_packrat.dmm +++ b/maps/helpers/event_shuttles/sccv_packrat.dmm @@ -1459,7 +1459,7 @@ /turf/simulated/floor/tiled, /area/scc_event_shuttle) "Fg" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/operations, /turf/simulated/floor/tiled, /area/scc_event_shuttle) diff --git a/maps/random_ruins/exoplanets/asteroid/coc_ship/coc_ship_unique.dmm b/maps/random_ruins/exoplanets/asteroid/coc_ship/coc_ship_unique.dmm index eec03f94372..3b852f5e2a3 100644 --- a/maps/random_ruins/exoplanets/asteroid/coc_ship/coc_ship_unique.dmm +++ b/maps/random_ruins/exoplanets/asteroid/coc_ship/coc_ship_unique.dmm @@ -1092,12 +1092,7 @@ }, /area/template_noop) "wR" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "modified autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /obj/effect/decal/cleanable/liquid_fuel, /turf/simulated/floor/tiled/airless, /area/template_noop) diff --git a/maps/random_ruins/exoplanets/asteroid/skrell_ship/skrell_crash_unique.dmm b/maps/random_ruins/exoplanets/asteroid/skrell_ship/skrell_crash_unique.dmm index ec0763ab675..7f3aeb23ade 100644 --- a/maps/random_ruins/exoplanets/asteroid/skrell_ship/skrell_crash_unique.dmm +++ b/maps/random_ruins/exoplanets/asteroid/skrell_ship/skrell_crash_unique.dmm @@ -384,7 +384,7 @@ /turf/simulated/floor/tiled/white, /area/template_noop) "bq" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/shuttle/advanced, /area/template_noop) "br" = ( diff --git a/maps/random_ruins/exoplanets/asteroid/sol_ship/sol_ship_unique.dmm b/maps/random_ruins/exoplanets/asteroid/sol_ship/sol_ship_unique.dmm index 32811f82ddc..5520de69dfe 100644 --- a/maps/random_ruins/exoplanets/asteroid/sol_ship/sol_ship_unique.dmm +++ b/maps/random_ruins/exoplanets/asteroid/sol_ship/sol_ship_unique.dmm @@ -31,7 +31,7 @@ /turf/simulated/floor/shuttle/dark_blue/airless, /area/template_noop) "dX" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light/colored/red{ dir = 8 }, diff --git a/maps/random_ruins/exoplanets/crashed_pod/crashed_pod.dmm b/maps/random_ruins/exoplanets/crashed_pod/crashed_pod.dmm index c89687d9e29..b17b3b1fbd1 100644 --- a/maps/random_ruins/exoplanets/crashed_pod/crashed_pod.dmm +++ b/maps/random_ruins/exoplanets/crashed_pod/crashed_pod.dmm @@ -62,7 +62,7 @@ /turf/simulated/floor/tiled, /area/map_template/crashed_pod) "n" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/map_template/crashed_pod) "o" = ( diff --git a/maps/random_ruins/exoplanets/konyang/abandoned/factory_arms.dmm b/maps/random_ruins/exoplanets/konyang/abandoned/factory_arms.dmm index e14a29bdba4..1777678a081 100644 --- a/maps/random_ruins/exoplanets/konyang/abandoned/factory_arms.dmm +++ b/maps/random_ruins/exoplanets/konyang/abandoned/factory_arms.dmm @@ -53,7 +53,7 @@ /turf/simulated/floor/foundation, /area/konyang/arms_factory) "cG" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/sidewalk/dark, /area/konyang/arms_factory) "cL" = ( @@ -61,7 +61,7 @@ /turf/simulated/floor/sidewalk/dark, /area/konyang/arms_factory) "cP" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/random/dirt_75, /turf/simulated/floor/sidewalk/dark, /area/konyang/arms_factory) @@ -728,7 +728,7 @@ /turf/simulated/floor/exoplanet/dirt_konyang, /area/exoplanet/grass/konyang) "CF" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/random/dirt_75, /turf/simulated/floor/foundation, /area/konyang/arms_factory) @@ -990,7 +990,7 @@ /turf/simulated/floor/sidewalk/dark, /area/konyang/arms_factory) "Oy" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/foundation, /area/konyang/arms_factory) "OO" = ( diff --git a/maps/random_ruins/exoplanets/konyang/abandoned/garage.dmm b/maps/random_ruins/exoplanets/konyang/abandoned/garage.dmm index 35e3c6e13f1..0bcc2b5bdc9 100644 --- a/maps/random_ruins/exoplanets/konyang/abandoned/garage.dmm +++ b/maps/random_ruins/exoplanets/konyang/abandoned/garage.dmm @@ -188,12 +188,7 @@ /turf/simulated/floor/exoplanet/asphalt, /area/konyang/garage) "jm" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /obj/machinery/light{ dir = 4 }, diff --git a/maps/random_ruins/exoplanets/konyang/abandoned/landing_zone.dmm b/maps/random_ruins/exoplanets/konyang/abandoned/landing_zone.dmm index 03b00814922..28471d79de5 100644 --- a/maps/random_ruins/exoplanets/konyang/abandoned/landing_zone.dmm +++ b/maps/random_ruins/exoplanets/konyang/abandoned/landing_zone.dmm @@ -1756,7 +1756,7 @@ /turf/simulated/floor/carpet/magenta, /area/konyang_landing_zone/command_center_abandoned/living) "wJ" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, diff --git a/maps/random_ruins/exoplanets/konyang/landing_zone.dmm b/maps/random_ruins/exoplanets/konyang/landing_zone.dmm index 6681ea8ff1f..7e951fa3587 100644 --- a/maps/random_ruins/exoplanets/konyang/landing_zone.dmm +++ b/maps/random_ruins/exoplanets/konyang/landing_zone.dmm @@ -1719,7 +1719,7 @@ /turf/simulated/floor/carpet/magenta, /area/konyang_landing_zone/command_center/living) "wJ" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, diff --git a/maps/random_ruins/exoplanets/konyang/ocean/naval_landing_zone.dmm b/maps/random_ruins/exoplanets/konyang/ocean/naval_landing_zone.dmm index 1bdee84effe..b19fb9ac632 100644 --- a/maps/random_ruins/exoplanets/konyang/ocean/naval_landing_zone.dmm +++ b/maps/random_ruins/exoplanets/konyang/ocean/naval_landing_zone.dmm @@ -3060,7 +3060,7 @@ /turf/simulated/floor/plating, /area/konyang_landing_zone/command_center/landing_pads) "RD" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, diff --git a/maps/random_ruins/exoplanets/konyang/pirate_outpost.dmm b/maps/random_ruins/exoplanets/konyang/pirate_outpost.dmm index d0f23b77f28..95b5bd32060 100644 --- a/maps/random_ruins/exoplanets/konyang/pirate_outpost.dmm +++ b/maps/random_ruins/exoplanets/konyang/pirate_outpost.dmm @@ -935,11 +935,7 @@ /area/konyang_pirate_outpost) "WP" = ( /obj/random/dirt_75, -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe" - }, +/obj/machinery/fabricator/hacked, /turf/simulated/floor/wood, /area/konyang_pirate_outpost) "WV" = ( diff --git a/maps/random_ruins/exoplanets/moghes/moghes_wasteland_ozeuoi.dmm b/maps/random_ruins/exoplanets/moghes/moghes_wasteland_ozeuoi.dmm index 19e314791b2..9c7c8fe561f 100644 --- a/maps/random_ruins/exoplanets/moghes/moghes_wasteland_ozeuoi.dmm +++ b/maps/random_ruins/exoplanets/moghes/moghes_wasteland_ozeuoi.dmm @@ -353,7 +353,7 @@ }, /area/moghes_ozeuoi) "Ga" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light{ dir = 1 }, diff --git a/maps/random_ruins/exoplanets/ouerea/ouerea_autakh.dmm b/maps/random_ruins/exoplanets/ouerea/ouerea_autakh.dmm index 37ce0c32d5d..e5729056f8e 100644 --- a/maps/random_ruins/exoplanets/ouerea/ouerea_autakh.dmm +++ b/maps/random_ruins/exoplanets/ouerea/ouerea_autakh.dmm @@ -179,7 +179,7 @@ /obj/effect/floor_decal/corner/orange{ dir = 5 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/exoplanet/tiled, /area/ouerea_autakh) "pC" = ( diff --git a/maps/random_ruins/exoplanets/ouerea/ouerea_freewater.dmm b/maps/random_ruins/exoplanets/ouerea/ouerea_freewater.dmm index b4cfc13f465..744acf48818 100644 --- a/maps/random_ruins/exoplanets/ouerea/ouerea_freewater.dmm +++ b/maps/random_ruins/exoplanets/ouerea/ouerea_freewater.dmm @@ -1086,7 +1086,7 @@ }, /area/ouerea_freewater) "Zx" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled{ temperature = 298.15 diff --git a/maps/random_ruins/exoplanets/uueoaesa/heph_mining_station.dmm b/maps/random_ruins/exoplanets/uueoaesa/heph_mining_station.dmm index 5a5b0e91bbc..c537bc5855b 100644 --- a/maps/random_ruins/exoplanets/uueoaesa/heph_mining_station.dmm +++ b/maps/random_ruins/exoplanets/uueoaesa/heph_mining_station.dmm @@ -1808,7 +1808,7 @@ }, /area/heph_mining_station/engineer) "AD" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/operations, /turf/simulated/floor{ temperature = 303.15 diff --git a/maps/random_ruins/exoplanets/uueoaesa/heph_survey_post.dmm b/maps/random_ruins/exoplanets/uueoaesa/heph_survey_post.dmm index 25a26d1a84f..4584b421b1f 100644 --- a/maps/random_ruins/exoplanets/uueoaesa/heph_survey_post.dmm +++ b/maps/random_ruins/exoplanets/uueoaesa/heph_survey_post.dmm @@ -213,7 +213,7 @@ /turf/simulated/floor/plating, /area/heph_survey_post) "jx" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled/dark, /area/heph_survey_post) "jF" = ( diff --git a/maps/random_ruins/exoplanets/uueoaesa/miners_guild_outpost.dmm b/maps/random_ruins/exoplanets/uueoaesa/miners_guild_outpost.dmm index 5d88e87c596..be77a7056fe 100644 --- a/maps/random_ruins/exoplanets/uueoaesa/miners_guild_outpost.dmm +++ b/maps/random_ruins/exoplanets/uueoaesa/miners_guild_outpost.dmm @@ -1833,7 +1833,7 @@ dir = 4; status = 2 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor{ temperature = 303.15 }, diff --git a/maps/random_ruins/exoplanets/uueoaesa/pid_kois_farm.dmm b/maps/random_ruins/exoplanets/uueoaesa/pid_kois_farm.dmm index 6d7d8ef2004..9ea7e5f553e 100644 --- a/maps/random_ruins/exoplanets/uueoaesa/pid_kois_farm.dmm +++ b/maps/random_ruins/exoplanets/uueoaesa/pid_kois_farm.dmm @@ -325,7 +325,7 @@ /obj/effect/floor_decal/corner/orange{ dir = 5 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/pid_kois_farm) "sg" = ( diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm index 34d0c506062..1f931ebf23c 100644 --- a/maps/sccv_horizon/sccv_horizon.dmm +++ b/maps/sccv_horizon/sccv_horizon.dmm @@ -24735,11 +24735,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/storage) "dzJ" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe" - }, +/obj/machinery/fabricator/hacked, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -50308,12 +50304,7 @@ }, /area/centcom/ferry) "hns" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Modified Autolathe"; - pixel_y = 2 - }, +/obj/machinery/fabricator/hacked, /turf/unsimulated/floor/plating, /area/centcom/specops) "hnx" = ( @@ -59493,11 +59484,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "iGc" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Unlocked Autolathe" - }, +/obj/machinery/fabricator/hacked, /obj/machinery/light/small{ dir = 4; name = "old light fixture"; @@ -115905,11 +115892,7 @@ /turf/simulated/floor/plating, /area/shuttle/canary) "qSk" = ( -/obj/machinery/autolathe{ - desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; - hacked = 1; - name = "Unlocked Autolathe" - }, +/obj/machinery/fabricator/hacked, /turf/unsimulated/floor, /area/centcom/legion/hangar5) "qSl" = ( @@ -128968,7 +128951,7 @@ /obj/structure/railing/mapped{ dir = 8 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/machinery/light{ dir = 1 }, @@ -147576,7 +147559,7 @@ /turf/simulated/floor/plating, /area/engineering/bluespace_drive) "vBu" = ( -/obj/machinery/autolathe, +/obj/machinery/fabricator, /turf/simulated/floor/carpet/rubber, /area/rnd/lab) "vBv" = ( @@ -164408,7 +164391,7 @@ /obj/effect/floor_decal/corner/brown{ dir = 5 }, -/obj/machinery/autolathe, +/obj/machinery/fabricator, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 1 diff --git a/tgui/packages/tgui/assets/bg-hammertail.svg b/tgui/packages/tgui/assets/bg-hammertail.svg new file mode 100644 index 00000000000..fe2f166dbd6 --- /dev/null +++ b/tgui/packages/tgui/assets/bg-hammertail.svg @@ -0,0 +1,18 @@ + + diff --git a/tgui/packages/tgui/index.tsx b/tgui/packages/tgui/index.tsx index bc948e7b7c5..c9868e38c12 100644 --- a/tgui/packages/tgui/index.tsx +++ b/tgui/packages/tgui/index.tsx @@ -29,6 +29,7 @@ import './styles/themes/zavodskoi.scss'; import './styles/themes/idris.scss'; import './styles/themes/nanotrasen.scss'; import './styles/themes/zenghu.scss'; +import './styles/themes/hammertail.scss'; import './styles/themes/hephaestus.scss'; import './styles/themes/sol.scss'; import './styles/themes/vaurca.scss'; diff --git a/tgui/packages/tgui/interfaces/Autolathe.tsx b/tgui/packages/tgui/interfaces/Autolathe.tsx index 2aab0d9efbb..f7e1dea5d0b 100644 --- a/tgui/packages/tgui/interfaces/Autolathe.tsx +++ b/tgui/packages/tgui/interfaces/Autolathe.tsx @@ -6,6 +6,7 @@ import { Box, Button, Input, LabeledList, NoticeBox, ProgressBar, Section, Stack import { Window } from '../layouts'; export type AutolatheData = { + manufacturer: string; disabled: BooleanLike; material_efficiency: number; build_time: number; @@ -49,7 +50,7 @@ export const Autolathe = (props, context) => { const [tab, setTab] = useLocalState(context, 'tab', 'All'); return ( - + @@ -258,7 +259,7 @@ export const CategoryData = (props, context) => {