diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 7c8bba08643..d5f7c1d1517 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -66,6 +66,10 @@ /// For wiremod/integrated circuits. Uses various minerals. #define COMPONENT_PRINTER (1<<10) //Note: More than one of these can be added to a design but imprinter and lathe designs are incompatable. +// SKYRAT EDIT ADDITION +/// Can be made by the orderable colony fabricator +#define COLONY_FABRICATOR (1<<11) +// SKYRAT EDIT END #define FIREDOOR_OPEN 1 #define FIREDOOR_CLOSED 2 diff --git a/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm b/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm index d0e82f110b5..8f8a879124e 100644 --- a/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm +++ b/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm @@ -5,7 +5,7 @@ #define CARGO_COMPANY_DEFOREST (1<<3) #define CARGO_COMPANY_DONK (1<<4) #define CARGO_COMPANY_KAHRAMAN (1<<5) -#define CARGO_COMPANY_NAKAMURA_TOOLING (1<<6) +#define CARGO_COMPANY_FRONTIER_EQUIPMENT (1<<6) #define CARGO_COMPANY_SOL_DEFENSE (1<<7) #define CARGO_COMPANY_MICROSTAR (1<<8) #define CARGO_COMPANY_VITEZSTVI_AMMO (1<<9) @@ -17,7 +17,7 @@ #define DEFOREST_MEDICAL_NAME "DeForest Medical Corporation" #define DONK_CO_NAME "Donk Corporation" #define KAHRAMAN_INDUSTRIES_NAME "Kahraman Heavy Industries" -#define NAKAMURA_ENGINEERING_TOOLING_NAME "Nakamura Engineering Tooling Divison" +#define FRONTIER_EQUIPMENT_NAME "Akhter Company Frontier Equipment" #define SOL_DEFENSE_DEFENSE_NAME "Sol Defense Imports" #define MICROSTAR_ENERGY_NAME "MicroStar Energy Weapon Coalition" #define VITEZSTVI_AMMO_NAME "Vitezstvi Ammo & Weapon Accessories" diff --git a/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm b/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm new file mode 100644 index 00000000000..d9012ad0869 --- /dev/null +++ b/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm @@ -0,0 +1,29 @@ +/// Category for clothing in the organics printer +#define RND_CATEGORY_AKHTER_CLOTHING "Clothing" +/// Category for equipment like belts and bags in the organics printer +#define RND_CATEGORY_AKHTER_EQUIPMENT "Equipment" +/// Category for medical items in the organics printer +#define RND_CATEGORY_AKHTER_MEDICAL "Emergency Medical" +/// Category for resources made by the organics printer +#define RND_CATEGORY_AKHTER_RESOURCES "Resources" +/// Category for the seeds the organics printer can make +#define RND_CATEGORY_AKHTER_SEEDS "Synthesized Seeds" + +/// The items the frontier clothing can hold +GLOBAL_LIST_INIT(colonist_suit_allowed, list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/flashlight, + /obj/item/gun, + /obj/item/melee, + /obj/item/tank/internals, + /obj/item/storage/belt/holster, + /obj/item/construction, + /obj/item/fireaxe, + /obj/item/pipe_dispenser, + /obj/item/storage/bag, + /obj/item/pickaxe, + /obj/item/resonator, + /obj/item/t_scanner, + /obj/item/analyzer, +)) diff --git a/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm b/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm index 0f4b8de3348..70c1ba9674d 100644 --- a/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm +++ b/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm @@ -21,4 +21,6 @@ #define COMPANY_ABDUCTOR "It has [span_abductor("✌︎︎♌︎︎♎︎︎◆︎︎♍︎︎⧫︎︎❄︎♏︎♍︎♒︎")] engraved into it." +#define COMPANY_FRONTIER "It has a small label with [span_engradio("Akhter Company Frontier Equipment")] printed on it, alongside various xerxian proof-marks." + #define COMPANY_REMOVED "It has had [span_grey("all identifying marks scrubbed off")]." diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 9087c7cfa9f..e7dfc229a39 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -1,4 +1,4 @@ -/obj/machinery/portable_atmospherics/pump //SKYRAT EDIT - ICON OVERRIDEN IN SCRUBBER.DM AESTHETICS +/obj/machinery/portable_atmospherics/pump name = "portable air pump" icon_state = "siphon" density = TRUE diff --git a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm b/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm index 213bd617ac6..9a253d53e7d 100644 --- a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm +++ b/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm @@ -59,10 +59,10 @@ /datum/design/vox_gas_filter name = "Vox Gas Filter" id = "vox_gas_filter" - build_type = PROTOLATHE | AUTOLATHE + build_type = PROTOLATHE | AUTOLATHE | COLONY_FABRICATOR materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/gas_filter/vox category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS_EQUIPMENT ) departmental_flags = ALL diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm new file mode 100644 index 00000000000..c1cecc8a7e3 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm @@ -0,0 +1,27 @@ +// Machine that makes water and nothing else + +/obj/machinery/plumbing/synthesizer/water_synth + name = "water synthesizer" + desc = "An infinitely useful device for those finding themselves in a frontier without a stable source of water. \ + Using a simplified version of the chemistry dispenser's synthesizer process, it can create water out of nothing \ + but good old electricity." + icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "water_synth" + anchored = FALSE + dispensable_reagents = list( + /datum/reagent/water, + ) + +/obj/machinery/plumbing/synthesizer/water_synth/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Deployable item for cargo for the water synth + +/obj/item/flatpacked_machine/water_synth + name = "water synthesizer parts kit" + icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "water_synth_parts" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/plumbing/synthesizer/water_synth + deploy_time = 2 SECONDS diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm new file mode 100644 index 00000000000..e8afbca61a7 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm @@ -0,0 +1,52 @@ +/obj/machinery/cell_charger_multi/wall_mounted + name = "mounted multi-cell charging rack" + desc = "The innovative technology of a cell charging rack, but mounted neatly on a wall out of the way!" + icon = 'modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi' + icon_state = "wall_charger" + base_icon_state = "wall_charger" + circuit = null + flags_1 = NODECONSTRUCT_1 + max_batteries = 3 + charge_rate = 750 + /// The item we turn into when repacked + var/repacked_type = /obj/item/wallframe/cell_charger_multi + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29) + +/obj/machinery/cell_charger_multi/wall_mounted/Initialize(mapload) + . = ..() + find_and_hang_on_wall() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/cell_charger_multi/wall_mounted/wrench_act(mob/living/user, obj/item/tool) + . = ..() + user.balloon_alert(user, "deconstructing...") + tool.play_tool_sound(src) + if(tool.use_tool(src, user, 1 SECONDS)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + return + +/obj/machinery/cell_charger_multi/wall_mounted/deconstruct(disassembled) + if(disassembled) + new repacked_type(drop_location()) + return ..() + +/obj/machinery/cell_charger_multi/wall_mounted/RefreshParts() + . = ..() + charge_rate = 750 // Nuh uh! + +// Item for creating the arc furnace or carrying it around + +/obj/item/wallframe/cell_charger_multi + name = "unmounted wall multi-cell charging rack" + desc = "The innovative technology of a cell charging rack, but able to be mounted neatly on a wall out of the way!" + icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi' + icon_state = "cell_charger_packed" + w_class = WEIGHT_CLASS_NORMAL + result_path = /obj/machinery/cell_charger_multi/wall_mounted + pixel_shift = 29 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm new file mode 100644 index 00000000000..5bb3276553f --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm @@ -0,0 +1,106 @@ +/obj/machinery/rnd/production/colony_lathe + name = "rapid construction fabricator" + desc = "These bad boys are seen just about anywhere someone would want or need to build fast, damn the consequences. \ + That tends to be colonies, especially on dangerous worlds, where the influences of this one machine can be seen \ + in every bit of architecture." + icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon_state = "colony_lathe" + base_icon_state = "colony_lathe" + production_animation = null + circuit = null + production_animation = "colony_lathe_n" + flags_1 = NODECONSTRUCT_1 + light_color = LIGHT_COLOR_BRIGHT_YELLOW + light_power = 5 + charges_tax = FALSE + allowed_buildtypes = COLONY_FABRICATOR + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine + /// The sound loop played while the fabricator is making something + var/datum/looping_sound/colony_fabricator_running/soundloop + +/obj/machinery/rnd/production/colony_lathe/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 5 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + // We don't get new designs but can't print stuff if something's not researched, so we use the web that has everything researched + stored_research = locate(/datum/techweb/admin) in SSresearch.techwebs + soundloop = new(src, FALSE) + if(!mapload) + flick("colony_lathe_deploy", src) // Sick ass deployment animation + +/obj/machinery/rnd/production/colony_lathe/Destroy() + QDEL_NULL(soundloop) + return ..() + +/obj/machinery/rnd/production/colony_lathe/user_try_print_id(design_id, print_quantity) + . = ..() + + if(!.) + return + + soundloop.start() + set_light(l_range = 1.5) + icon_state = "colony_lathe_working" + update_appearance() + +/obj/machinery/rnd/production/colony_lathe/do_print(path, amount) + . = ..() + soundloop.stop() + set_light(l_range = 0) + icon_state = base_icon_state + update_appearance() + flick("colony_lathe_finish_print", src) + +/obj/machinery/rnd/production/colony_lathe/calculate_efficiency() + efficiency_coeff = 1 + +// We take from all nodes even unresearched ones +/obj/machinery/rnd/production/colony_lathe/update_designs() + var/previous_design_count = cached_designs.len + + cached_designs.Cut() + + for(var/design_id in SSresearch.techweb_designs) + var/datum/design/design = SSresearch.techweb_designs[design_id] + + if((isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags)) && (design.build_type & allowed_buildtypes)) + cached_designs |= design + + var/design_delta = cached_designs.len - previous_design_count + + if(design_delta > 0) + say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].") + playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE) + + update_static_data_for_all_viewers() + +// Item for carrying the lathe around and building it + +/obj/item/flatpacked_machine + name = "flat-packed rapid construction fabricator" + icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi' + icon_state = "colony_lathe_packed" + w_class = WEIGHT_CLASS_BULKY + /// What structure is created by this item. + var/obj/type_to_deploy = /obj/machinery/rnd/production/colony_lathe + /// How long it takes to create the structure in question. + var/deploy_time = 4 SECONDS + +/obj/item/flatpacked_machine/Initialize(mapload) + . = ..() + desc = initial(type_to_deploy.desc) + AddComponent(/datum/component/deployable, deploy_time, type_to_deploy, delete_on_use = TRUE) + give_manufacturer_examine() + +/// Adds the manufacturer examine element to the flatpack machine, but can be overridden in the future +/obj/item/flatpacked_machine/proc/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/item/borg/apparatus/sheet_manipulator/Initialize(mapload) + . = ..() + storable += /obj/item/flatpacked_machine + +/obj/item/borg/apparatus/circuit/Initialize(mapload) + . = ..() + storable += /obj/item/flatpacked_machine diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm new file mode 100644 index 00000000000..acd6182f3f1 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm @@ -0,0 +1,96 @@ +// Machine categories + +#define FABRICATOR_CATEGORY_APPLIANCES "/Appliances" +#define FABRICATOR_SUBCATEGORY_POWER "/Power" +#define FABRICATOR_SUBCATEGORY_ATMOS "/Atmospherics" +#define FABRICATOR_SUBCATEGORY_FLUIDS "/Liquids" + +// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with + +/datum/techweb_node/colony_fabricator_appliances + id = "colony_fabricator_appliances" + display_name = "Colony Fabricator Appliance Designs" + description = "Contains all of the colony fabricator's appliance machine designs." + design_ids = list( + "wall_multi_cell_rack", + "portable_lil_pump", + "portable_scrubbs", + "survival_knife", // I just don't want to make a whole new node for this one sorry + "soup_pot", // This one too + "water_synth", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you + hidden = TRUE + show_on_wiki = FALSE + starting_node = TRUE + +// Wall mountable multi cell charger + +/datum/design/wall_mounted_multi_charger + name = "Mounted Multi-Cell Charging Rack" + id = "wall_multi_cell_rack" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, + ) + build_path = /obj/item/wallframe/cell_charger_multi + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 15 SECONDS + +// Portable scrubber and pumps for all your construction atmospherics needs + +/datum/design/portable_gas_pump + name = "Portable Air Pump" + id = "portable_lil_pump" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/machinery/portable_atmospherics/pump + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 30 SECONDS + +/datum/design/portable_gas_scrubber + name = "Portable Air Scrubber" + id = "portable_scrubbs" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/machinery/portable_atmospherics/scrubber + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 30 SECONDS + +// Plumbable chem machine that makes nothing but water + +/datum/design/water_synthesizer + name = "Water Synthesizer" + id = "water_synth" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/machinery/plumbing/synthesizer/water_synth + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS, + ) + construction_time = 10 SECONDS + +#undef FABRICATOR_CATEGORY_APPLIANCES +#undef FABRICATOR_SUBCATEGORY_POWER +#undef FABRICATOR_SUBCATEGORY_ATMOS +#undef FABRICATOR_SUBCATEGORY_FLUIDS diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm new file mode 100644 index 00000000000..1740162cbf4 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm @@ -0,0 +1,27 @@ +/datum/design/survival_knife + name = "Survival Knife" + id = "survival_knife" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 6 + ) + build_path = /obj/item/knife/combat/survival + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + +/datum/design/soup_pot + name = "Soup Pot" + id = "soup_pot" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5 + ) + build_path = /obj/item/reagent_containers/cup/soup_pot + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm new file mode 100644 index 00000000000..c690e454eed --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm @@ -0,0 +1,11 @@ +/datum/design/board/solarcontrol/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/atmosalerts/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/powermonitor/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm new file mode 100644 index 00000000000..71eed6b71f8 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm @@ -0,0 +1,101 @@ +// This file is going to be just all bitflag additions + +/datum/design/apc_board/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airalarm_electronics/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airlock_board/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/firealarm_electronics/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/control/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/firelock_board/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/condenser/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/health_sensor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/igniter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/infrared_emitter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/prox_sensor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/signaler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/timer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/voice_analyzer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/camera_assembly/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/intercom_frame/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/light_tube/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/light_bulb/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/conveyor_belt/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/conveyor_switch/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/lavarods/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rglass/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasteel_alloy/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plaglass_alloy/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasmarglass_alloy/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm new file mode 100644 index 00000000000..9ebd506602d --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm @@ -0,0 +1,103 @@ +// This file is going to be just all bitflag additions + +/datum/design/radio_navigation_beacon/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/engine_goggles/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/pneumatic_seal/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/welding_goggles/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/welding_helmet/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/gas_filter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasmaman_gas_filter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasmarefiller/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/emergency_oxygen_engi/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasmaman_tank_belt/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/generic_gas_tank/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasma_tank/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/diagnostic_hud/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/portaseeder/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/oven_tray/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/bowl/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/beaker/New() + . = ..() + build_type |= COLONY_FABRICATOR + +// Stock parts are going here too because there's not many of them + +/datum/design/water_recycler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/super_cell/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/adv_capacitor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/adv_scanning/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/nano_servo/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/high_micro_laser/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/adv_matter_bin/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rped/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm new file mode 100644 index 00000000000..86b70bc7f74 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm @@ -0,0 +1,39 @@ +/datum/design/board/hydroponics/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/cyborgrecharger/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/microwave/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/processor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/recycler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/suit_storage_unit/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/range/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/griddle/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/reagentgrinder/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/biogenerator/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm new file mode 100644 index 00000000000..9990dfcfa3f --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm @@ -0,0 +1,31 @@ +/datum/design/water_recycler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/super_cell/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/adv_capacitor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/adv_scanning/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/nano_servo/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/high_micro_laser/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/adv_matter_bin/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rped/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm new file mode 100644 index 00000000000..4497aa130c3 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm @@ -0,0 +1,113 @@ +// Various designs that get added to the colony fab + +/datum/design/rcd_loaded/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/holosignatmos/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/analyzer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/extinguisher/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/cable_coil/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airlock_painter/decal/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airlock_painter/decal/tile/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/holosignengi/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/inducer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/multitool/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/tscanner/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/pipe_painter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rwd/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/bolter_wrench/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rpd/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rpd_upgrade/unwrench/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rtd_loaded/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rcd_ammo/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/light_replacer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rld_mini/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/miningsatchel_holding/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/mining_scanner/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/flashlight/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/ducts/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plunger/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/handlabeler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/paperroll/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/spraycan/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm new file mode 100644 index 00000000000..a824a145df9 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm @@ -0,0 +1,208 @@ +// Machine categories + +#define FABRICATOR_CATEGORY_FLATPACK_MACHINES "/Flatpacked Machines" +#define FABRICATOR_SUBCATEGORY_MANUFACTURING "/Manufacturing" +#define FABRICATOR_SUBCATEGORY_POWER "/Power" +#define FABRICATOR_SUBCATEGORY_MATERIALS "/Materials" +#define FABRICATOR_SUBCATEGORY_ATMOS "/Atmospherics" + +// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with + +/datum/techweb_node/colony_fabricator_flatpacks + id = "colony_fabricator_flatpacks" + display_name = "Colony Fabricator Flatpack Designs" + description = "Contains all of the colony fabricator's flatpack machine designs." + design_ids = list( + "flatpack_solar_panel", + "flatpack_solar_tracker", + "flatpack_arc_furnace", + "flatpack_colony_fab", + "flatpack_station_battery", + "flatpack_station_battery_large", + "flatpack_fuel_generator", + "flatpack_rtg", + "flatpack_thermo", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you + hidden = TRUE + show_on_wiki = FALSE + starting_node = TRUE + +// Lets the colony lathe make more colony lathes but at very hihg cost, for fun + +/datum/design/flatpack_colony_fabricator + name = "Flat-packed Colony Fabricator" + desc = "A deployable fabricator capable of producing other flat-packed machines and other special equipment tailored for \ + rapidly constructing functional structures given resources and power. While it cannot be upgraded, it can be repacked \ + and moved to any location you see fit." + id = "flatpack_colony_fab" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MANUFACTURING, + ) + construction_time = 30 SECONDS + +// Solar panels and trackers + +/datum/design/flatpack_solar_panel + name = "Flat-packed Solar Panel" + desc = "A deployable solar panel, able to be repacked after placement for relocation or recycling." + id = "flatpack_solar_panel" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1, + ) + build_path = /obj/item/flatpacked_machine/solar + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 5 SECONDS + +/datum/design/flatpack_solar_tracker + name = "Flat-packed Solar Tracker" + desc = "A deployable solar tracker, able to be repacked after placement for relocation or recycling." + id = "flatpack_solar_tracker" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3.5, + ) + build_path = /obj/item/flatpacked_machine/solar_tracker + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 7 SECONDS + +// Arc furance + +/datum/design/flatpack_arc_furnace + name = "Flat-packed Arc Furnace" + desc = "A deployable furnace for refining ores. While slower and less safe than conventional refining methods, \ + it multiplies the output of refined materials enough to still outperform simply recycling ore." + id = "flatpack_arc_furnace" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/flatpacked_machine/arc_furnace + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MATERIALS, + ) + construction_time = 15 SECONDS + +// Power storage structures + +/datum/design/flatpack_power_storage + name = "Flat-packed Stationary Battery" + desc = "A deployable station-scale power cell with an overall low capacity, but high input and output rate." + id = "flatpack_station_battery" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/station_battery + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 20 SECONDS + +/datum/design/flatpack_power_storage_large + name = "Flat-packed Large Stationary Battery" + desc = "A deployable station-scale power cell with an overall extremely high capacity, but low input and output rate." + id = "flatpack_station_battery_large" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 12, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/gold = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/large_station_battery + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 40 SECONDS + +// PACMAN generator but epic!! + +/datum/design/flatpack_solids_generator + name = "Flat-Packed S.O.F.I.E. Generator" + desc = "A deployable plasma-burning generator capable of outperforming even upgraded P.A.C.M.A.N. type generators, \ + at expense of creating hot carbon dioxide exhaust." + id = "flatpack_fuel_generator" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/fuel_generator + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 30 SECONDS + +// Buildable RTG that is quite radioactive + +/datum/design/flatpack_rtg + name = "Flat-packed Radioisotope Thermoelectric Generator" + desc = "A deployable radioisotope generator capable of producing a practically free trickle of power. \ + Free if you can tolerate the radiation that the machine makes while deployed, that is." + id = "flatpack_rtg" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/rtg + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 30 SECONDS + +// Thermomachine with decent temperature change rate, but a limited max/min temperature + +/datum/design/flatpack_thermomachine + name = "Flat-packed Atmospheric Temperature Regulator" + desc = "A deployable temperature control device for use with atmospherics pipe systems. \ + Limited in its temperature range, however comes with a higher than normal heat capacity." + id = "flatpack_thermo" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/thermomachine + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 20 SECONDS + +#undef FABRICATOR_CATEGORY_FLATPACK_MACHINES +#undef FABRICATOR_SUBCATEGORY_MANUFACTURING +#undef FABRICATOR_SUBCATEGORY_POWER +#undef FABRICATOR_SUBCATEGORY_MATERIALS +#undef FABRICATOR_SUBCATEGORY_ATMOS diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm new file mode 100644 index 00000000000..0ddfb18e1f7 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm @@ -0,0 +1,80 @@ +/datum/techweb_node/colony_fabricator_special_tools + id = "colony_fabricator_tools" + display_name = "Colony Fabricator Tool Designs" + description = "Contains all of the colony fabricator's tool designs." + design_ids = list( + "colony_power_drive", + "colony_prybar", + "colony_arc_welder", + "colony_compact_drill", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you + hidden = TRUE + show_on_wiki = FALSE + starting_node = TRUE + +// Screw-Wrench-Wirecutter combo machine + +/datum/design/colony_power_driver + name = "Powered Driver" + id = "colony_power_drive" + build_type = COLONY_FABRICATOR + build_path = /obj/item/screwdriver/omni_drill + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, + ) + +// Crowbar that is completely normal except it can force doors + +/datum/design/colony_door_crowbar + name = "Prybar" + id = "colony_prybar" + build_type = COLONY_FABRICATOR + build_path = /obj/item/crowbar/large/doorforcer + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, + ) + +// Welder that takes no fuel or power to run but is quite slow, at least it sounds cool as hell + +/datum/design/colony_arc_welder + name = "Arc Welder" + id = "colony_arc_welder" + build_type = COLONY_FABRICATOR + build_path = /obj/item/weldingtool/electric/arc_welder + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, + ) + +// Slightly slower drill that fits in backpacks + +/datum/design/colony_compact_drill + name = "Compact Mining Drill" + id = "colony_compact_drill" + build_type = COLONY_FABRICATOR + build_path = /obj/item/pickaxe/drill/compact + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING, + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm b/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm new file mode 100644 index 00000000000..5c375e6259c --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm @@ -0,0 +1,35 @@ +/datum/looping_sound/colony_fabricator_running + start_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav' + start_length = 1 + mid_sounds = list( + 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav' = 1, + ) + mid_length = 3 SECONDS + end_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav' + volume = 100 + falloff_exponent = 3 + +/datum/looping_sound/arc_furnace_running + mid_sounds = list( + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav' = 1, + ) + mid_length = 1 SECONDS + volume = 200 // This sound effect is very quiet I've noticed + falloff_exponent = 2 + +/datum/looping_sound/conditioner_running + mid_sounds = list( + 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav' = 1, + 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav' = 1, + ) + mid_length = 3 SECONDS + volume = 75 + falloff_exponent = 3 diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm new file mode 100644 index 00000000000..e49383c52a2 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm @@ -0,0 +1,222 @@ +#define RADIAL_CHOICE_USE "use" +#define RADIAL_CHOICE_EJECT "eject" + +#define ARC_FURNACE_ORE_MULTIPLIER 1.5 + +/obj/machinery/arc_furnace + name = "arc furnace" + desc = "An arc furnace, a specialist machine that can rapidly smelt ores using, as the name implies, massive \ + amounts of electricity. While not nearly as fast and efficient as other ore refining methods, the arc furnace is \ + capable of returning larger amounts of refined material than a standard refining process can. \ + A sticker on the side notes that this may exhaust waste gasses to the air during operation." + icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon_state = "arc_furnace" + base_icon_state = "arc_furnace" + appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE + layer = BELOW_OBJ_LAYER + density = TRUE + circuit = null + light_color = LIGHT_COLOR_BRIGHT_YELLOW + light_power = 10 + flags_1 = NODECONSTRUCT_1 + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // This baby consumes so much power + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/arc_furnace + /// If the furnace is currently working on smelting something + var/operating = FALSE + /// Image for the radial eject button + var/static/radial_eject = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_eject") + /// Image for the radial use button + var/static/radial_use = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + /// Radial options for using the arc furnace + var/static/list/radial_options = list(RADIAL_CHOICE_EJECT = radial_eject, RADIAL_CHOICE_USE = radial_use) + /// Soundloop for while we are smelting ores + var/datum/looping_sound/arc_furnace_running/soundloop + +/obj/machinery/arc_furnace/Initialize(mapload) + . = ..() + soundloop = new(src, FALSE) + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + if(!mapload) + flick("arc_furnace_deploy", src) + +/obj/machinery/arc_furnace/examine(mob/user) + . = ..() + if(length(contents)) + . += span_notice("It has [contents[1]] sitting in it.") + +/obj/machinery/arc_furnace/deconstruct(disassembled = TRUE) + eject_contents() + return ..() + +/obj/machinery/arc_furnace/update_appearance() + . = ..() + cut_overlays() + + if(length(contents)) + var/image/overlayed_item = image(icon = contents[1].icon, icon_state = contents[1].icon_state) + overlayed_item.transform = matrix(, 0, 0, 0, 0.8, 0) + add_overlay(overlayed_item) + + var/image/furnace_front_overlay = image(icon = icon, icon_state = "[operating ? "[base_icon_state]_overlay_active" : "[base_icon_state]_overlay"]") + add_overlay(furnace_front_overlay) + +/obj/machinery/arc_furnace/attackby(obj/item/attacking_item, mob/living/user, params) + if(operating) + balloon_alert(user, "furnace busy") + return TRUE + + if(length(contents)) + balloon_alert(user, "furnace full") + return TRUE + + if(istype(attacking_item, /obj/item/stack/ore)) + attacking_item.forceMove(src) + balloon_alert(user, "ore added") + update_appearance() + return TRUE + + return ..() + +/obj/machinery/arc_furnace/ui_interact(mob/user) + . = ..() + + if(operating || !user.can_perform_action(src, ALLOW_SILICON_REACH)) + return + if(isAI(user) && (machine_stat & NOPOWER)) + return + + if(!length(contents)) + balloon_alert(user, "it's empty!") + return + + var/choice = show_radial_menu(user, src, radial_options, require_near = !issilicon(user)) + + // post choice verification + if(operating || !user.can_perform_action(src, ALLOW_SILICON_REACH)) + return + if(isAI(user) && (machine_stat & NOPOWER)) + return + + usr.set_machine(src) // What does this even do?? + switch(choice) + if(RADIAL_CHOICE_EJECT) + eject_contents() + if(RADIAL_CHOICE_USE) + smelt_it_up(user) + +/// Removes the first item in the contents list which should only ever be ore and if its not, we have problems +/obj/machinery/arc_furnace/proc/eject_contents() + if(operating) + return + + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) + + if(!length(contents)) + return + + var/atom/movable/thing_inside = contents[1] + thing_inside.forceMove(drop_location()) + update_appearance() + +/// Starts the smelting process, checking if the machine has power or if its broken at all +/obj/machinery/arc_furnace/proc/smelt_it_up(mob/user) + if(machine_stat & (NOPOWER|BROKEN)) + balloon_alert(user, "button doesn't respond") + return + if(operating) + balloon_alert(user, "already smelting") + return + + var/obj/item/stack/ore/ore_to_smelt = contents[1] + if(!istype(ore_to_smelt)) + balloon_alert(user, "nothing to smelt") + + operating = TRUE + /// How long the smelting is going to take based off the stack size + var/smelting_time = ore_to_smelt.amount * 1 SECONDS + loop(smelting_time) + + soundloop.start() + set_light(l_range = 1.5) + + update_appearance() + +/// The smelting loop for checking if we're done smelting or not. If we are, then we succeed smelting. If we have to stop for whatever reason, we stop. +/obj/machinery/arc_furnace/proc/loop(time) + if(machine_stat & (NOPOWER|BROKEN)) + end_smelting() + return + + if(!length(contents)) + end_smelting() + return + + if(time <= 0) + succeed_smelting() + return + + time -= 1 SECONDS + use_power(active_power_usage) + + var/turf/where_we_spawn_air = get_turf(src) + var/obj/item/stack/ore/ore_stack_to_check = contents[1] + switch(ore_stack_to_check.refined_type) + if(/obj/item/stack/sheet/mineral/silver) + where_we_spawn_air.atmos_spawn_air("n2=10;TEMP=1200") + if(/obj/item/stack/sheet/mineral/uranium) + where_we_spawn_air.atmos_spawn_air("co2=50;TEMP=1200") + if(/obj/item/stack/sheet/mineral/titanium) + where_we_spawn_air.atmos_spawn_air("n2=10;co2=10;TEMP=1200") + else + where_we_spawn_air.atmos_spawn_air("co2=20;TEMP=1200") + + addtimer(CALLBACK(src, PROC_REF(loop), time), 1 SECONDS) + +/// Takes the ore contained and turns it into an equal stack amount of its smelt result +/obj/machinery/arc_furnace/proc/succeed_smelting() + var/obj/item/stack/ore/ore_to_smelt = contents[1] + if(!istype(ore_to_smelt)) + end_smelting() + + // We collect how many sheets of material we will need to spawn with the multiplier, whole sheets only! + var/how_much_material_to_spawn = round(ore_to_smelt.amount * ARC_FURNACE_ORE_MULTIPLIER) + // We also grab what the resulting refined type will be + var/obj/item/stack/ore_refined_type = ore_to_smelt.refined_type + + // While the materials to spawn are greater than or equal to the max stack amount of the product, we can just safely spawn the max amount + // Variable with the max stack amount just for futureproofing, because why not? + while(how_much_material_to_spawn >= ore_refined_type.max_amount) + new ore_refined_type(drop_location(), ore_refined_type.max_amount) + how_much_material_to_spawn -= ore_refined_type.max_amount + + // Now, we spawn a stack with whatever's left, if there is anything left + if(how_much_material_to_spawn) + new ore_refined_type(drop_location(), how_much_material_to_spawn) + + qdel(ore_to_smelt) + end_smelting() + +/// Turns the arc furnace off, removing its lights, sounds, so on. +/obj/machinery/arc_furnace/proc/end_smelting() + operating = FALSE + soundloop.stop() + set_light(l_range = 0) + update_appearance() + +// Item for creating the arc furnace or carrying it around + +/obj/item/flatpacked_machine/arc_furnace + name = "flat-packed arc furnace" + icon_state = "arc_furnace_folded" + type_to_deploy = /obj/machinery/arc_furnace + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + ) + +#undef RADIAL_CHOICE_USE +#undef RADIAL_CHOICE_EJECT + +#undef ARC_FURNACE_ORE_MULTIPLIER diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm new file mode 100644 index 00000000000..ca73a4711bd --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm @@ -0,0 +1,69 @@ +/obj/machinery/power/smes/battery_pack + name = "stationary battery" + desc = "An about table-height block of power storage, commonly seen in low storage high output power applications. \ + Smaller units such as these tend to have a respectively smaller energy storage, though also are capable of \ + higher maximum output than some larger units. Most commonly seen being used not for their ability to store \ + power, but rather for use in regulating power input and output." + icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi' + capacity = 75e4 + input_level_max = 4e5 + output_level_max = 4e5 + circuit = null + flags_1 = NODECONSTRUCT_1 + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/station_battery + +/obj/machinery/power/smes/battery_pack/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 5 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + if(!mapload) + flick("smes_deploy", src) + +/obj/machinery/power/smes/battery_pack/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + if(screwdriver.tool_behaviour != TOOL_SCREWDRIVER) + return FALSE + + screwdriver.play_tool_sound(src, 50) + toggle_panel_open() + if(panel_open) + icon_state = icon_state_open + to_chat(user, span_notice("You open the maintenance hatch of [src].")) + else + icon_state = icon_state_closed + to_chat(user, span_notice("You close the maintenance hatch of [src].")) + return TRUE + +// We don't care about the parts updates because we don't want them to change +/obj/machinery/power/smes/battery_pack/RefreshParts() + return + +// We also don't need to bother with fuddling with charging power cells, there are none to remove +/obj/machinery/power/smes/on_deconstruction() + return + +// Item for creating the small battery and carrying it around + +/obj/item/flatpacked_machine/station_battery + name = "flat-packed stationary battery" + icon_state = "battery_small_packed" + type_to_deploy = /obj/machinery/power/smes/battery_pack + +// Larger station batteries, hold more but have less in/output + +/obj/machinery/power/smes/battery_pack/large + name = "large stationary battery" + desc = "A massive block of power storage, commonly seen in high storage low output power applications. \ + Larger units such as these tend to have a respectively larger energy storage, though only capable of \ + low maximum output compared to smaller units. Most commonly seen as large backup batteries, or simply \ + for large power storage where throughput is not a concern." + icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi' + capacity = 1e7 + input_level_max = 5e4 + output_level_max = 5e4 + repacked_type = /obj/item/flatpacked_machine/large_station_battery + +/obj/item/flatpacked_machine/large_station_battery + name = "flat-packed large stationary battery" + icon_state = "battery_large_packed" + type_to_deploy = /obj/machinery/power/smes/battery_pack/large diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm new file mode 100644 index 00000000000..6e2c769b2fd --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm @@ -0,0 +1,33 @@ +/obj/machinery/power/rtg/portable + name = "radioisotope thermoelectric generator" + desc = "The ultimate in 'middle of nowhere' power generation. Unlike standard RTGs, this particular \ + design of generator has forgone the heavy radiation shielding that most RTG designs include. \ + In better news, these tend to be pretty good with making a passable trickle of power for any \ + application." + icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + circuit = null + flags_1 = NODECONSTRUCT_1 + power_gen = 7500 + /// What we turn into when we are repacked + var/repacked_type = /obj/item/flatpacked_machine/rtg + +/obj/machinery/power/rtg/portable/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) + AddElement(/datum/element/radioactive) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + if(!mapload) + flick("rtg_deploy", src) + +// Item for creating the arc furnace or carrying it around + +/obj/item/flatpacked_machine/rtg + name = "flat-packed radioisotope thermoelectric generator" + icon_state = "rtg_packed" + type_to_deploy = /obj/machinery/power/rtg/portable + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm new file mode 100644 index 00000000000..c7708bbdee1 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm @@ -0,0 +1,67 @@ +// Solar panels + +/obj/machinery/power/solar/deployable + icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + flags_1 = NODECONSTRUCT_1 + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/solar + +/obj/machinery/power/solar/deployable/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 1 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/power/solar/deployable/crowbar_act(mob/user, obj/item/I) + return + +/obj/machinery/power/solar/deployable/deconstruct(disassembled = TRUE) + var/obj/item/solar_assembly/assembly = locate() in src + if(assembly) + qdel(assembly) + return ..() + +// Solar panel deployable item + +/obj/item/flatpacked_machine/solar + name = "flat-packed solar panel" + icon_state = "solar_panel_packed" + type_to_deploy = /obj/machinery/power/solar/deployable + deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3, + ) + +// Solar trackers + +/obj/machinery/power/tracker/deployable + icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + flags_1 = NODECONSTRUCT_1 + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/solar_tracker + +/obj/machinery/power/tracker/deployable/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 1 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/power/tracker/deployable/crowbar_act(mob/user, obj/item/item_acting) + return + +/obj/machinery/power/tracker/deployable/deconstruct(disassembled = TRUE) + var/obj/item/solar_assembly/assembly = locate() in src + if(assembly) + qdel(assembly) + return ..() + +// Solar tracker deployable item + +/obj/item/flatpacked_machine/solar_tracker + name = "flat-packed solar tracker" + icon_state = "solar_tracker_packed" + type_to_deploy = /obj/machinery/power/tracker/deployable + deploy_time = 3 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3.5, + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm new file mode 100644 index 00000000000..4fc0f9b781b --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm @@ -0,0 +1,52 @@ +/obj/machinery/power/port_gen/pacman/solid_fuel + name = "\improper S.O.F.I.E.-type portable generator" + desc = "The second most common generator design in the galaxy, second only to the P.A.C.M.A.N. \ + The S.O.F.I.E. (Stationary Operating Fuel Ignition Engine) is similar to other generators in \ + burning sheets of plasma in order to produce power. \ + Unlike other generators however, this one isn't as portable, or as safe to operate, \ + but at least it makes a hell of a lot more power. Must be bolted to the ground \ + and attached to a wire before use. A massive warning label wants you to know that this generator \ + outputs waste heat and gasses to the air around it." + icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon_state = "fuel_generator_0" + base_icon_state = "fuel_generator" + circuit = null + flags_1 = NODECONSTRUCT_1 + anchored = TRUE + max_sheets = 25 + time_per_sheet = 100 + power_gen = 12500 + drag_slowdown = 1.5 + sheet_path = /obj/item/stack/sheet/mineral/plasma + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/fuel_generator + +/obj/machinery/power/port_gen/pacman/solid_fuel/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 1 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + if(!mapload) + flick("fuel_generator_deploy", src) + +// We don't need to worry about the board, this machine doesn't have one! +/obj/machinery/power/port_gen/pacman/solid_fuel/on_construction(mob/user) + return + +/obj/machinery/power/port_gen/pacman/solid_fuel/process() + . = ..() + if(active) + var/turf/where_we_spawn_air = get_turf(src) + where_we_spawn_air.atmos_spawn_air("co2=10;TEMP=480") // Standard UK diesel engine operating temp is about 220 celsius or ~473 K + +// Item for creating the generator or carrying it around + +/obj/item/flatpacked_machine/fuel_generator + name = "flat-packed S.O.F.I.E.-type portable generator" + icon_state = "fuel_generator_packed" + type_to_deploy = /obj/machinery/power/port_gen/pacman/solid_fuel + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm b/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm new file mode 100644 index 00000000000..741aabd0626 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm @@ -0,0 +1,55 @@ +/obj/machinery/atmospherics/components/unary/thermomachine/deployable + icon = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi' + name = "atmospheric temperature regulator" + desc = "A much more tame variant of the thermomachines commonly seen in station scale temperature control devices. \ + Its upper and lower bounds for temperature are highly limited, though it has a higher than standard heat capacity \ + and the benefit of being undeployable when you're done with it." + circuit = null + greyscale_config = /datum/greyscale_config/thermomachine/deployable + min_temperature = T0C + max_temperature = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD + 50 + heat_capacity = 10000 + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/thermomachine + /// Soundloop for while the thermomachine is turned on + var/datum/looping_sound/conditioner_running/soundloop + +/obj/machinery/atmospherics/components/unary/thermomachine/deployable/Initialize(mapload) + . = ..() + soundloop = new(src, FALSE) + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + flick("thermo_deploy", src) + +/obj/machinery/atmospherics/components/unary/thermomachine/deployable/RefreshParts() + . = ..() + heat_capacity = 10000 + min_temperature = T0C + max_temperature = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD + 50 + +/obj/machinery/atmospherics/components/unary/thermomachine/deployable/default_deconstruction_crowbar() + return + +/obj/machinery/atmospherics/components/unary/thermomachine/deployable/process_atmos() + if(on && !soundloop.loop_started) + soundloop.start() + else if(soundloop.loop_started) + soundloop.stop() + . = ..() + +// Item for creating the regulator and carrying it about + +/obj/item/flatpacked_machine/thermomachine + name = "flat-packed atmospheric temperature regulator" + icon_state = "thermomachine_packed" + type_to_deploy = /obj/machinery/atmospherics/components/unary/thermomachine/deployable + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + +// Greyscale config for the light on this machine + +/datum/greyscale_config/thermomachine/deployable + name = "Deployable Thermomachine" + icon_file = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi' diff --git a/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm b/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm new file mode 100644 index 00000000000..dec98f4877e --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm @@ -0,0 +1,70 @@ +/// An element that allows objects to be right clicked and turned into another item after a delay +/datum/element/repackable + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + + /// The path to spawn when the repacking operation is complete + var/item_to_pack_into + /// How long will repacking the attachee take + var/repacking_time + /// Do we tell objects destroyed that we disassembled them? + var/disassemble_objects + +/datum/element/repackable/Attach(datum/target, item_to_pack_into = /obj/item, repacking_time = 1 SECONDS, disassemble_objects = TRUE) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + + src.item_to_pack_into = item_to_pack_into + src.repacking_time = repacking_time + src.disassemble_objects = disassemble_objects + + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(on_right_click)) + RegisterSignal(target, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) + +/datum/element/repackable/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_ATOM_EXAMINE) + UnregisterSignal(target, COMSIG_ATOM_ATTACK_HAND_SECONDARY) + UnregisterSignal(target, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM)) + +/datum/element/repackable/proc/examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + examine_list += span_notice("It can be repacked with right click.") + +/// Checks if the user can actually interact with the structures in question, then invokes the proc to make it repack +/datum/element/repackable/proc/on_right_click(atom/source, mob/user) + SIGNAL_HANDLER + + if(!user.can_perform_action(source, NEED_DEXTERITY)) + return + + INVOKE_ASYNC(src, PROC_REF(repack), source, user) + +/// Removes the element target and spawns a new one of whatever item_to_pack_into is +/datum/element/repackable/proc/repack(atom/source, mob/user) + source.balloon_alert_to_viewers("repacking...") + if(!do_after(user, 3 SECONDS, target = source)) + return + + playsound(source, 'sound/items/ratchet.ogg', 50, TRUE) + + new item_to_pack_into(source.drop_location()) + + if(istype(source, /obj)) + var/obj/source_object = source + source_object.deconstruct(TRUE) + else + qdel(source) + +/// Adds screen context for hovering over the repackable items with your mouse +/datum/element/repackable/proc/on_requesting_context_from_item(atom/source, list/context, obj/item/held_item, mob/user) + SIGNAL_HANDLER + + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_RMB] = "Repack" + . = CONTEXTUAL_SCREENTIP_SET + + return NONE diff --git a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm new file mode 100644 index 00000000000..e0b0e22af13 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm @@ -0,0 +1,150 @@ +// Like the power drill, except no speed buff but has wirecutters as well? Just trust me on this one. + +/obj/item/screwdriver/omni_drill + name = "powered driver" + desc = "The ultimate in multi purpose construction tools. With heads for wire cutting, bolt driving, and driving \ + screws, what's not to love? Well, the slow speed. Compared to other power drills these tend to be \ + not much quicker than unpowered tools." + icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' + icon_state = "drill" + belt_icon_state = null + inhand_icon_state = "drill" + worn_icon_state = "drill" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + force = 10 + throwforce = 8 + throw_speed = 2 + throw_range = 3 + attack_verb_continuous = list("drills", "screws", "jabs", "whacks") + attack_verb_simple = list("drill", "screw", "jab", "whack") + hitsound = 'sound/items/drill_hit.ogg' + usesound = 'sound/items/drill_use.ogg' + w_class = WEIGHT_CLASS_SMALL + toolspeed = 1 + random_color = FALSE + greyscale_config = null + greyscale_config_belt = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + +/obj/item/screwdriver/omni_drill/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/item/screwdriver/omni_drill/get_all_tool_behaviours() + return list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WRENCH) + +/obj/item/screwdriver/omni_drill/examine(mob/user) + . = ..() + . += span_notice("Use in hand to switch configuration.\n") + . += span_notice("It functions as a [tool_behaviour] tool.") + +/obj/item/screwdriver/omni_drill/update_icon_state() + . = ..() + switch(tool_behaviour) + if(TOOL_SCREWDRIVER) + icon_state = initial(icon_state) + if(TOOL_WRENCH) + icon_state = "[initial(icon_state)]_bolt" + if(TOOL_WIRECUTTER) + icon_state = "[initial(icon_state)]_cut" + +/obj/item/screwdriver/omni_drill/attack_self(mob/user, modifiers) + . = ..() + if(!user) + return + var/list/tool_list = list( + "Screwdriver" = image(icon = icon, icon_state = "drill"), + "Wrench" = image(icon = icon, icon_state = "drill_bolt"), + "Wirecutters" = image(icon = icon, icon_state = "drill_cut"), + ) + var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user) || !tool_result) + return + switch(tool_result) + if("Wrench") + tool_behaviour = TOOL_WRENCH + sharpness = NONE + if("Wirecutters") + tool_behaviour = TOOL_WIRECUTTER + sharpness = NONE + if("Screwdriver") + tool_behaviour = TOOL_SCREWDRIVER + sharpness = SHARP_POINTY + playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE) + update_appearance(UPDATE_ICON) + +/obj/item/screwdriver/omni_drill/proc/check_menu(mob/user) + if(!istype(user)) + return FALSE + if(user.incapacitated() || !user.Adjacent(src)) + return FALSE + return TRUE + +// Just a completely normal crowbar except its normal sized and can force doors like jaws of life can + +/obj/item/crowbar/large/doorforcer + name = "prybar" + desc = "A large, sturdy crowbar, painted orange. This one just happens to be tough enough to \ + survive forcing doors open." + icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' + icon_state = "prybar" + toolspeed = 1 + force_opens = TRUE + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/crowbar/large/doorforcer/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Backpackable mining drill + +/obj/item/pickaxe/drill/compact + name = "compact mining drill" + desc = "A powered mining drill, it drills all over the place. Compact enough to hopefully fit in a backpack." + icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' + icon_state = "drilla" + worn_icon_state = "drill" + w_class = WEIGHT_CLASS_NORMAL + toolspeed = 0.6 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/pickaxe/drill/compact/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Electric welder but not quite as strong + +/obj/item/weldingtool/electric/arc_welder + name = "arc welding tool" + desc = "A specialized welding tool utilizing high powered arcs of electricity to weld things together. \ + Compared to other electrically-powered welders, this model is slow and highly power inefficient, \ + but it still gets the job done and chances are you printed this bad boy off for free." + icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' + icon_state = "arc_welder" + usesound = list( + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav', + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav', + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav', + 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav', + ) + light_range = 2 + light_power = 0.75 + toolspeed = 1 + power_use_amount = POWER_CELL_USE_INSANE + +/obj/item/weldingtool/electric/arc_welder/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) diff --git a/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi b/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi new file mode 100644 index 00000000000..16ec75ba35c Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi new file mode 100644 index 00000000000..c8533ee3e1e Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/machines.dmi new file mode 100644 index 00000000000..389432e376e Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/machines.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi new file mode 100644 index 00000000000..8e7c4dbd737 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi new file mode 100644 index 00000000000..9e4fd1a29cc Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi new file mode 100644 index 00000000000..dce9d878154 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi b/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi new file mode 100644 index 00000000000..305c4c43edb Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/tools.dmi b/modular_skyrat/modules/colony_fabricator/icons/tools.dmi new file mode 100644 index 00000000000..e1e7a12bc7d Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/tools.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav new file mode 100644 index 00000000000..b26fa32ed9d Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav new file mode 100644 index 00000000000..8b30d09b81e Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav new file mode 100644 index 00000000000..71621213d79 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav new file mode 100644 index 00000000000..95f9dc385e5 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt new file mode 100644 index 00000000000..e9c05e68c01 --- /dev/null +++ b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt @@ -0,0 +1,10 @@ +The following sounds have been recorded, edited and added by Paxilmaniac: + +modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_(1 - 4).wav +modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_(1 - 4).wav +modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav +modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav + +The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/ + +modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav new file mode 100644 index 00000000000..e014af99119 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav new file mode 100644 index 00000000000..a99f8a939ad Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav new file mode 100644 index 00000000000..1f798b05a2d Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav new file mode 100644 index 00000000000..88f57ec4f00 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav new file mode 100644 index 00000000000..90e16a116fb Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav new file mode 100644 index 00000000000..5a70874cda7 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav new file mode 100644 index 00000000000..a8ea099036c Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav new file mode 100644 index 00000000000..b5d0a0117c5 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav new file mode 100644 index 00000000000..1700b0fc379 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav new file mode 100644 index 00000000000..673a9da8b41 Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav differ diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm b/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm new file mode 100644 index 00000000000..b819b6a90fa --- /dev/null +++ b/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm @@ -0,0 +1,82 @@ +/datum/armament_entry/company_import/akh_frontier + category = FRONTIER_EQUIPMENT_NAME + company_bitflag = CARGO_COMPANY_FRONTIER_EQUIPMENT + +// Tools that you could use the rapid fabricator for, but you're too lazy to actually do that + +/datum/armament_entry/company_import/akh_frontier/basic + subcategory = "Hand-Held Equipment" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/basic/omni_drill + item_type = /obj/item/screwdriver/omni_drill + +/datum/armament_entry/company_import/akh_frontier/basic/prybar + item_type = /obj/item/crowbar/large/doorforcer + restricted = TRUE + +/datum/armament_entry/company_import/akh_frontier/basic/arc_welder + item_type = /obj/item/weldingtool/electric/arc_welder + +/datum/armament_entry/company_import/akh_frontier/basic/compact_drill + item_type = /obj/item/pickaxe/drill/compact + +// Flatpacked fabricator and related upgrades + +/datum/armament_entry/company_import/akh_frontier/deployables_fab + subcategory = "Deployable Fabrication Equipment" + +/datum/armament_entry/company_import/akh_frontier/deployables_fab/rapid_construction_fabricator + item_type = /obj/item/flatpacked_machine + cost = CARGO_CRATE_VALUE * 6 + +// Various smaller appliances than the deployable machines below + +/datum/armament_entry/company_import/akh_frontier/appliances + subcategory = "Appliances" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/appliances/charger + item_type = /obj/item/wallframe/cell_charger_multi + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/akh_frontier/appliances/water_synth + item_type = /obj/item/flatpacked_machine/water_synth + +// Flatpacked, ready to deploy machines + +/datum/armament_entry/company_import/akh_frontier/deployables_misc + subcategory = "Deployable General Equipment" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/deployables_misc/arc_furnace + item_type = /obj/item/flatpacked_machine/arc_furnace + +/datum/armament_entry/company_import/akh_frontier/deployables_misc/thermomachine + item_type = /obj/item/flatpacked_machine/thermomachine + +// Flatpacked, ready to deploy machines for power related activities + +/datum/armament_entry/company_import/akh_frontier/deployables + subcategory = "Deployable Power Equipment" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/deployables/solar + item_type = /obj/item/flatpacked_machine/solar + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/akh_frontier/deployables/solar_tracker + item_type = /obj/item/flatpacked_machine/solar_tracker + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/akh_frontier/deployables/station_battery + item_type = /obj/item/flatpacked_machine/station_battery + +/datum/armament_entry/company_import/akh_frontier/deployables/big_station_battery + item_type = /obj/item/flatpacked_machine/large_station_battery + +/datum/armament_entry/company_import/akh_frontier/deployables/solids_generator + item_type = /obj/item/flatpacked_machine/fuel_generator + +/datum/armament_entry/company_import/akh_frontier/deployables/rtg + item_type = /obj/item/flatpacked_machine/rtg diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_tools.dm b/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_tools.dm deleted file mode 100644 index dded1ac084e..00000000000 --- a/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_tools.dm +++ /dev/null @@ -1,86 +0,0 @@ -/datum/armament_entry/company_import/nakamura_tooling - category = NAKAMURA_ENGINEERING_TOOLING_NAME - company_bitflag = CARGO_COMPANY_NAKAMURA_TOOLING - -// Basic, non-power tools, as well as other related equipment - -/datum/armament_entry/company_import/nakamura_tooling/basic - subcategory = "Standard Engineering Equipment" - -/datum/armament_entry/company_import/nakamura_tooling/basic/mechanical_toolbox - item_type = /obj/item/storage/toolbox/mechanical - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/nakamura_tooling/basic/electrical_toolbox - item_type = /obj/item/storage/toolbox/electrical - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/nakamura_tooling/basic/multitool - item_type = /obj/item/multitool - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/nakamura_tooling/basic/inducer - item_type = /obj/item/inducer - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/nakamura_tooling/basic/magboots - item_type = /obj/item/clothing/shoes/magboots - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nakamura_tooling/basic/insuls - item_type = /obj/item/clothing/gloves/color/yellow - cost = PAYCHECK_COMMAND - -// Advanced stuff like power tools and holofans - -/datum/armament_entry/company_import/nakamura_tooling/advanced - subcategory = "Advanced Engineering Equipment" - restricted = TRUE - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/nakamura_tooling/advanced/ranged_analyzer - item_type = /obj/item/analyzer/ranged - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/nakamura_tooling/advanced/forcefield - item_type = /obj/item/forcefield_projector - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/nakamura_tooling/advanced/atmos_fan - item_type = /obj/item/holosign_creator/atmos - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/nakamura_tooling/advanced/powerdrill - item_type = /obj/item/screwdriver/power - -/datum/armament_entry/company_import/nakamura_tooling/advanced/jaws - item_type = /obj/item/crowbar/power - -/datum/armament_entry/company_import/nakamura_tooling/advanced/hugewelder - item_type = /obj/item/weldingtool/hugetank - -// Overpriced experimental or gimmick tools - -/datum/armament_entry/company_import/nakamura_tooling/experimental - subcategory = "Experimental Engineering Equipment" - cost = PAYCHECK_COMMAND * 8 - restricted = TRUE - -/datum/armament_entry/company_import/nakamura_tooling/experimental/sprayon_insuls - item_type = /obj/item/toy/sprayoncan - contraband = TRUE - -/datum/armament_entry/company_import/nakamura_tooling/experimental/red_screwdriver - item_type = /obj/item/screwdriver/caravan - -/datum/armament_entry/company_import/nakamura_tooling/experimental/red_crowbar - item_type = /obj/item/crowbar/red/caravan - -/datum/armament_entry/company_import/nakamura_tooling/experimental/red_wirecutters - item_type = /obj/item/wirecutters/caravan - -/datum/armament_entry/company_import/nakamura_tooling/experimental/red_wrench - item_type = /obj/item/wrench/caravan - -/datum/armament_entry/company_import/nakamura_tooling/experimental/advanced_welder - item_type = /obj/item/weldingtool/advanced diff --git a/modular_skyrat/modules/company_imports/code/company_datums.dm b/modular_skyrat/modules/company_imports/code/company_datums.dm index 263c8214ffc..038f91956ab 100644 --- a/modular_skyrat/modules/company_imports/code/company_datums.dm +++ b/modular_skyrat/modules/company_imports/code/company_datums.dm @@ -72,13 +72,10 @@ cost_change_lower = -1000 cost_change_upper = 3000 -// Nakamura engineering's tooling division, sells tools, possibly even advanced ones -/datum/cargo_company/nakamura_tooling - name = NAKAMURA_ENGINEERING_TOOLING_NAME - company_flag = CARGO_COMPANY_NAKAMURA_TOOLING - cost = 6000 - cost_change_lower = -1000 - cost_change_upper = 3000 +// Sells unique construction supplies that the station can't normally obtain +/datum/cargo_company/akh_frontier + name = FRONTIER_EQUIPMENT_NAME + company_flag = CARGO_COMPANY_FRONTIER_EQUIPMENT // A coalition between nt and bolt to sell personal defense equipment and weapons /datum/cargo_company/nanotrasen_bolt_weapons diff --git a/modular_skyrat/modules/huds/code/designs.dm b/modular_skyrat/modules/huds/code/designs.dm index bb5382f914f..d4f0586ada9 100644 --- a/modular_skyrat/modules/huds/code/designs.dm +++ b/modular_skyrat/modules/huds/code/designs.dm @@ -62,7 +62,7 @@ name = "Prescription Engineering Scanner Goggles" desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes. Prescription lens has been added into this design." id = "engine_goggles_prescription" - build_type = PROTOLATHE | AWAY_LATHE + build_type = PROTOLATHE | AWAY_LATHE | COLONY_FABRICATOR materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plasma = SMALL_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) build_path = /obj/item/clothing/glasses/meson/engine/prescription category = list( diff --git a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm b/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm index 16019c588c6..6f1aa8383ab 100644 --- a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm +++ b/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm @@ -3,6 +3,7 @@ desc = "A cell charging rack for multiple batteries." icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi' icon_state = "cchargermulti" + base_icon_state = "cchargermulti" use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 60 @@ -24,8 +25,8 @@ for(var/i = charging_batteries.len, i >= 1, i--) var/obj/item/stock_parts/cell/charging = charging_batteries[i] var/newlevel = round(charging.percent() * 4 / 100) - var/mutable_appearance/charge_overlay = mutable_appearance(icon, "cchargermulti-o[newlevel]") - var/mutable_appearance/cell_overlay = mutable_appearance(icon, "cchargermulti-cell") + var/mutable_appearance/charge_overlay = mutable_appearance(icon, "[base_icon_state]-o[newlevel]") + var/mutable_appearance/cell_overlay = mutable_appearance(icon, "[base_icon_state]-cell") charge_overlay.pixel_x = 5 * (i - 1) cell_overlay.pixel_x = 5 * (i - 1) . += new /mutable_appearance(charge_overlay) diff --git a/modular_skyrat/modules/polarized_windows/polarizer.dm b/modular_skyrat/modules/polarized_windows/polarizer.dm index eb09d5072ad..351815dd102 100644 --- a/modular_skyrat/modules/polarized_windows/polarizer.dm +++ b/modular_skyrat/modules/polarized_windows/polarizer.dm @@ -50,7 +50,7 @@ /datum/design/polarizer name = "Window Polarization Remote Controller" id = "polarizer" - build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | COLONY_FABRICATOR materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/assembly/control/polarizer category = list( diff --git a/tgstation.dme b/tgstation.dme index 442d0cd7b46..03f9da38801 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1,4 +1,3 @@ -// DM Environment file for tgstation.dme. // All manual changes should be made outside the BEGIN_ and END_ blocks. // New source code should be placed in .dm files: choose File/New --> Code File. // BEGIN_INTERNALS @@ -396,6 +395,7 @@ #include "code\__DEFINES\~skyrat_defines\cells.dm" #include "code\__DEFINES\~skyrat_defines\chat.dm" #include "code\__DEFINES\~skyrat_defines\clock_cult.dm" +#include "code\__DEFINES\~skyrat_defines\colony_fabricator_misc.dm" #include "code\__DEFINES\~skyrat_defines\colors.dm" #include "code\__DEFINES\~skyrat_defines\combat.dm" #include "code\__DEFINES\~skyrat_defines\computers.dm" @@ -6621,16 +6621,38 @@ #include "modular_skyrat\modules\clock_cult\code\structures\traps\senders\pressure_sensor.dm" #include "modular_skyrat\modules\cme\code\_cme_defines.dm" #include "modular_skyrat\modules\cme\code\cme.dm" +#include "modular_skyrat\modules\colony_fabricator\code\colony_fabricator.dm" +#include "modular_skyrat\modules\colony_fabricator\code\looping_sounds.dm" +#include "modular_skyrat\modules\colony_fabricator\code\repacking_element.dm" +#include "modular_skyrat\modules\colony_fabricator\code\appliances\chem_machines.dm" +#include "modular_skyrat\modules\colony_fabricator\code\appliances\wall_cell_charger.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\appliances.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\equipment.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\flatpack_machines.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\tools.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\computer_board.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\construction.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\equipment.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\machine_boards.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\stock_parts.dm" +#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\tools.dm" +#include "modular_skyrat\modules\colony_fabricator\code\machines\arc_furnace.dm" +#include "modular_skyrat\modules\colony_fabricator\code\machines\power_storage_unit.dm" +#include "modular_skyrat\modules\colony_fabricator\code\machines\rtg.dm" +#include "modular_skyrat\modules\colony_fabricator\code\machines\solar_panels.dm" +#include "modular_skyrat\modules\colony_fabricator\code\machines\solid_fuel_generator.dm" +#include "modular_skyrat\modules\colony_fabricator\code\machines\thermomachine.dm" +#include "modular_skyrat\modules\colony_fabricator\code\tools\tools.dm" #include "modular_skyrat\modules\command_vendor\code\vending.dm" #include "modular_skyrat\modules\company_imports\code\armament_component.dm" #include "modular_skyrat\modules\company_imports\code\company_datums.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\_armament_basetype.dm" +#include "modular_skyrat\modules\company_imports\code\armament_datums\akh_frontier.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\deforest_medical.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\jarnsmiour.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\kahraman_industries.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\microstar_energy.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\nakamura_modsuits.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\nakamura_tools.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\nri_military_surplus.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\put_a_donk_on_it.dm" #include "modular_skyrat\modules\company_imports\code\armament_datums\sol_defense.dm"