From 7a313aa961cb56ebf0a9e293fa5fcc39d065025a Mon Sep 17 00:00:00 2001 From: Will <7099514+Willburd@users.noreply.github.com> Date: Sat, 15 Aug 2026 10:56:42 -0400 Subject: [PATCH] Mining machine construction (#19658) * the horrors persist * fix * more work * attempt to drop all sheets * comment * Techwebs * oops * organize * fix warns * Use a lookup * Use bumps instead of input dir * Smart direction search * wrong machine! * Update mineral.dm * cleaned unneeded global list * raise range slightly --------- Co-authored-by: Cameron Lennox --- code/game/machinery/frame.dm | 9 + .../items/weapons/circuitboards/frame.dm | 42 ++++ code/modules/economy/mint.dm | 18 +- .../mining/machinery/machine_processing.dm | 194 +++++++++++++----- .../mining/machinery/machine_stacking.dm | 167 +++++++++++---- .../mining/machinery/machine_unloading.dm | 140 ++++++------- code/modules/mining/machinery/mineral.dm | 80 ++++++++ .../research/tg/designs/boards/cargo.dm | 54 +++++ .../tg/techwebs/nodes/mining_nodes.dm | 8 +- icons/obj/machines/mining_machines.dmi | Bin 30436 -> 28206 bytes icons/obj/stock_parts_vr.dmi | Bin 63223 -> 64263 bytes vorestation.dme | 1 + 12 files changed, 541 insertions(+), 172 deletions(-) create mode 100644 code/modules/mining/machinery/mineral.dm diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index 175f49ceac4..cc196697fff 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -183,6 +183,15 @@ GLOBAL_LIST(construction_frame_floor) x_offset = 30 y_offset = 30 +/datum/frame/frame_types/mat_production_console + name = "mining machine console" + icon_override = 'icons/obj/stock_parts_vr.dmi' + frame_class = FRAME_CLASS_DISPLAY + frame_size = 2 + frame_style = FRAME_STYLE_WALL + x_offset = 32 + y_offset = 32 + /datum/frame/frame_types/intercom name = "Intercom" frame_class = FRAME_CLASS_ALARM diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm index 21a316268e6..bc95623bc8f 100644 --- a/code/game/objects/items/weapons/circuitboards/frame.dm +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -405,3 +405,45 @@ /obj/item/stock_parts/motor = 1, /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/console_screen = 1) + +/obj/item/circuitboard/mat_processor + name = T_BOARD("material processor") + build_path = /obj/machinery/mineral/processing_unit + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/stock_parts/motor = 1, + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/micro_laser = 4) + +/obj/item/circuitboard/mat_processor_console + name = T_BOARD("material processor console") + build_path = /obj/machinery/mineral/processing_unit_console + board_type = new /datum/frame/frame_types/mat_production_console + +/obj/item/circuitboard/mat_stacker + name = T_BOARD("stacking machine") + build_path = /obj/machinery/mineral/stacking_machine + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/stock_parts/motor = 2, + /obj/item/stock_parts/manipulator = 2) + +/obj/item/circuitboard/mat_stacker_console + name = T_BOARD("stacking machine console") + build_path = /obj/machinery/mineral/stacking_unit_console + board_type = new /datum/frame/frame_types/mat_production_console + +/obj/item/circuitboard/mat_unloader + name = T_BOARD("unloading machine") + build_path = /obj/machinery/mineral/unloading_machine + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/stock_parts/motor = 2, + /obj/item/stock_parts/manipulator = 1) + +/obj/item/circuitboard/mat_mint + name = T_BOARD("mint") + build_path = /obj/machinery/mineral/mint + board_type = new /datum/frame/frame_types/machine + req_components = list( + /obj/item/stock_parts/motor = 4) diff --git a/code/modules/economy/mint.dm b/code/modules/economy/mint.dm index 24b2a10ff39..588ea3be3fd 100644 --- a/code/modules/economy/mint.dm +++ b/code/modules/economy/mint.dm @@ -6,16 +6,30 @@ icon_state = "coinpress0" density = TRUE anchored = TRUE + circuit = /obj/item/circuitboard/mat_mint var/coinsToProduce = 6 //how many coins do we make per sheet? a sheet is 2000 units whilst a coin is 250, and some material should be lost in the process -/obj/machinery/mineral/mint/attackby(obj/item/stack/material/M, mob/user) +/obj/machinery/mineral/mint/Initialize(mapload) + . = ..() + default_apply_parts() + +/obj/machinery/mineral/mint/attackby(obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return if(!anchored) user.visible_message(span_warning("\The [src] must be properly secured to operate!")) return + if(!istype(I, /obj/item/stack/material)) + return + var/obj/item/stack/material/M = I if(!M.coin_type) user.visible_message(span_notice("You can't make coins out of that.")) return - else if(M.coin_type) + if(M.coin_type) user.visible_message("[user] starts to feed a sheet of [M.default_type] into \the [src].") while(M.amount > 0) icon_state = "coinpress1" diff --git a/code/modules/mining/machinery/machine_processing.dm b/code/modules/mining/machinery/machine_processing.dm index 3132289dfe8..32c4207025c 100644 --- a/code/modules/mining/machinery/machine_processing.dm +++ b/code/modules/mining/machinery/machine_processing.dm @@ -6,11 +6,10 @@ /obj/machinery/mineral/processing_unit_console name = "production machine console" - icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" layer = ABOVE_WINDOW_LAYER - density = TRUE anchored = TRUE + circuit = /obj/item/circuitboard/mat_processor_console var/obj/item/card/id/inserted_id // Inserted ID card, for points @@ -19,36 +18,75 @@ /obj/machinery/mineral/processing_unit_console/Initialize(mapload) . = ..() - src.machine = locate(/obj/machinery/mineral/processing_unit) in range(5, src) - if (machine) - machine.console = src - else + default_apply_parts() + processor_link() + if(!machine && mapload) // Delete mapped ones if they fail log_mapping("Ore processing machine console at [src.x], [src.y], [src.z] could not find its machine!") - qdel(src) + return INITIALIZE_HINT_QDEL /obj/machinery/mineral/processing_unit_console/Destroy() if(inserted_id) inserted_id.forceMove(loc) //Prevents deconstructing from deleting whatever ID was inside it. + processor_unlink() . = ..() +/obj/machinery/mineral/processing_unit_console/update_icon() + if(!machine || machine.console != src) + icon_state = "[initial(icon_state)]_bad" + return + icon_state = initial(icon_state) + /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) if(..()) return if(!allowed(user)) to_chat(user, span_warning("Access denied.")) return + if(!machine) + to_chat(user, span_danger("Ore processor not detected.")) + return tgui_interact(user) /obj/machinery/mineral/processing_unit_console/attackby(obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return if(istype(I, /obj/item/card/id)) if(!powered()) return + if(!machine) + to_chat(user, span_danger("Material processor not detected.")) + return if(!inserted_id && (user.unEquip(I) || isrobot(user))) I.forceMove(src) inserted_id = I SStgui.update_uis(src) return - ..() + . = ..() + +/obj/machinery/mineral/processing_unit_console/proc/processor_link(obj/machinery/mineral/processing_unit/new_machine = null) + if(!new_machine) + new_machine = find_nearest_linkable(/obj/machinery/mineral/processing_unit) + if(!new_machine) + update_icon() + return + // Perform the actual link! + machine = new_machine + machine.console = src + update_icon() + +/obj/machinery/mineral/processing_unit_console/proc/processor_unlink() + if(machine?.console == src) + machine.console = null + SStgui.close_uis(src) + machine = null + update_icon() + +/obj/machinery/mineral/processing_unit_console/has_link() + return machine /obj/machinery/mineral/processing_unit_console/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -95,6 +133,10 @@ return TRUE add_fingerprint(ui.user) + + if(!machine) + return FALSE + switch(action) if("toggleSmelting") var/ore = params["ore"] @@ -155,9 +197,10 @@ density = TRUE anchored = TRUE light_range = 3 - var/obj/machinery/mineral/input = null - var/obj/machinery/mineral/output = null - var/obj/machinery/mineral/console = null + circuit = /obj/item/circuitboard/mat_processor + sets_direction = TRUE + + var/obj/machinery/mineral/processing_unit_console/console = null var/sheets_per_tick = 10 var/list/ores_processing = list() var/list/ores_stored = list() @@ -189,23 +232,36 @@ /obj/machinery/mineral/processing_unit/Initialize(mapload) . = ..() + default_apply_parts() + for(var/ore, value in GLOB.ore_data) var/datum/ore/OD = value ores_processing[OD.name] = 0 ores_stored[OD.name] = 0 - // TODO - Eschew input/output machinery and just use dirs ~Leshana - //Locate our output and input machinery. - for (var/dir in GLOB.cardinal) - src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(src.input) break - for (var/dir in GLOB.cardinal) - src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(src.output) break - return + // Mapload uses direction hints + if(!mapload) + // If we were constructed, try to get a console to attach to us + var/obj/machinery/mineral/processing_unit_console/console = find_nearest_linkable(/obj/machinery/mineral/processing_unit_console) + if(console) + console.processor_link(src) + return + find_output_direction() + +/obj/machinery/mineral/processing_unit/Destroy() + if(console) + console.processor_unlink() + if(speed_process) // high gear + STOP_PROCESSING(SSfastprocess, src) + else + STOP_MACHINE_PROCESSING(src) + // We don't drop stored ores, just to avoid point exploits. Maybe this should drop slag instead? + . = ..() + +/obj/machinery/mineral/processing_unit/has_link() + return console /obj/machinery/mineral/processing_unit/proc/toggle_speed(forced) - var/area/refinery_area = get_area(src) if(forced) speed_process = forced else @@ -216,48 +272,54 @@ else // low gear STOP_PROCESSING(SSfastprocess, src) START_MACHINE_PROCESSING(src) - for(var/obj/machinery/mineral/unloading_machine/unloader in refinery_area.contents) - unloader.toggle_speed() - for(var/obj/machinery/conveyor_switch/cswitch in refinery_area.contents) - cswitch.toggle_speed() - for(var/obj/machinery/mineral/stacking_machine/stacker in refinery_area.contents) - stacker.toggle_speed() + // There is no danger of recursion here, because the other toggle_speed procs do no broadcast like this one on change + for(var/obj/machinery/mach in range(connection_range + 2, src)) // a little more than the link range + if(mach == src) + continue + if(istype(mach, /obj/machinery/mineral/unloading_machine)) + var/obj/machinery/mineral/unloading_machine/unloader = mach + unloader.toggle_speed(speed_process) + continue + if(istype(mach, /obj/machinery/conveyor_switch)) + var/obj/machinery/conveyor_switch/cswitch = mach + cswitch.toggle_speed(speed_process) + continue + if(istype(mach, /obj/machinery/mineral/stacking_machine)) + var/obj/machinery/mineral/stacking_machine/stacker = mach + stacker.toggle_speed(speed_process) + continue +/obj/machinery/mineral/processing_unit/attackby(obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return + . = ..() /obj/machinery/mineral/processing_unit/process() - - if (!src.output || !src.input) + if(!output_dir) return + var/turf/output = get_step(src,output_dir) + if(!output) + return if(panel_open || !powered()) return var/list/tick_alloys = list() //Grab some more ore to process this tick. - for(var/obj/structure/ore_box/OB in input.loc) - for(var/ore in OB.stored_ore) - if(OB.stored_ore[ore] > 0) - var/ore_amount = OB.stored_ore[ore] // How many ores does the box have? - ores_stored[ore] += ore_amount // Add the ore to the machine. - points += (ore_values[ore]*points_mult*ore_amount) // Give Points! VOREStation Edit - or give lots of points! or less points! or no points! - OB.stored_ore[ore] = 0 // Set the value of the ore in the box to 0. - - - for(var/obj/item/ore_chunk/ore_chunk in input.loc) //Special ore chunk item. For conveyor belt. Completely unneeded but keeps asthetics. - for(var/ore in ore_chunk.stored_ore) - if(ore_chunk.stored_ore[ore] > 0) - var/ore_amount = ore_chunk.stored_ore[ore] - ores_stored[ore] += ore_amount - points += (ore_values[ore]*points_mult*ore_amount) - ore_chunk.stored_ore[ore] = 0 - qdel(ore_chunk) - - for(var/obj/item/ore/O in input.loc) - if(!isnull(ores_stored[O.material])) - ores_stored[O.material]++ - points += (ore_values[O.material]*points_mult) - qdel(O) + var/turf/input = get_step(src, reverse_direction(output_dir)) // Only applies to unloading oreboxes DIRECTLY with no conveyors... Did anyone even know this was a feature? + if(input) + for(var/obj/structure/ore_box/OB in input) + for(var/ore in OB.stored_ore) + if(OB.stored_ore[ore] > 0) + var/ore_amount = OB.stored_ore[ore] // How many ores does the box have? + ores_stored[ore] += ore_amount // Add the ore to the machine. + points += (ore_values[ore]*points_mult*ore_amount) // Give Points! VOREStation Edit - or give lots of points! or less points! or no points! + OB.stored_ore[ore] = 0 // Set the value of the ore in the box to 0. if(!active) return @@ -305,7 +367,7 @@ sheets += total-1 for(var/i=0,i 0) + var/ore_amount = ore_chunk.stored_ore[ore] + ores_stored[ore] += ore_amount + points += (ore_values[ore]*points_mult*ore_amount) + ore_chunk.stored_ore[ore] = 0 + qdel(ore_chunk) + return + if(istype(AM, /obj/item/ore)) + var/obj/item/ore/O = AM + if(!isnull(ores_stored[O.material])) + ores_stored[O.material]++ + points += (ore_values[O.material]*points_mult) + qdel(O) + return + #undef PROCESS_NONE #undef PROCESS_SMELT #undef PROCESS_COMPRESS diff --git a/code/modules/mining/machinery/machine_stacking.dm b/code/modules/mining/machinery/machine_stacking.dm index 77910bff930..9d345e34506 100644 --- a/code/modules/mining/machinery/machine_stacking.dm +++ b/code/modules/mining/machinery/machine_stacking.dm @@ -2,29 +2,67 @@ /obj/machinery/mineral/stacking_unit_console name = "stacking machine console" - icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" layer = ABOVE_WINDOW_LAYER - density = TRUE anchored = TRUE + circuit = /obj/item/circuitboard/mat_stacker_console var/obj/machinery/mineral/stacking_machine/machine = null - //var/machinedir = SOUTHEAST //This is really dumb, so lets burn it with fire. /obj/machinery/mineral/stacking_unit_console/Initialize(mapload) . = ..() - //src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) //No. - src.machine = locate(/obj/machinery/mineral/stacking_machine) in range(5,src) - if (machine) - machine.console = src - else - //Silently failing and causing mappers to scratch their heads while runtiming isn't ideal. + default_apply_parts() + stacker_link() + if(!machine && mapload) // Delete mapped ones if they fail stack_trace(span_danger("Warning: Stacking machine console at [src.x], [src.y], [src.z] could not find its machine!")) return INITIALIZE_HINT_QDEL +/obj/machinery/mineral/stacking_unit_console/Destroy() + stacker_unlink() + . = ..() + +/obj/machinery/mineral/stacking_unit_console/has_link() + return machine + +/obj/machinery/mineral/stacking_unit_console/update_icon() + if(!machine || machine.console != src) + icon_state = "[initial(icon_state)]_bad" + return + icon_state = initial(icon_state) + +/obj/machinery/mineral/stacking_unit_console/proc/stacker_link(obj/machinery/mineral/stacking_machine/new_machine = null) + if(!new_machine) + new_machine = find_nearest_linkable(/obj/machinery/mineral/stacking_machine) + if(!new_machine) + update_icon() + return + // Perform the actual link! + machine = new_machine + machine.console = src + update_icon() + +/obj/machinery/mineral/stacking_unit_console/proc/stacker_unlink() + if(machine?.console == src) + machine.console = null + SStgui.close_uis(src) + machine = null + update_icon() + /obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user) add_fingerprint(user) + if(!machine) + to_chat(user, span_danger("Stacking machine not detected.")) + return tgui_interact(user) +/obj/machinery/mineral/stacking_unit_console/attackby(obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return + . = ..() + /obj/machinery/mineral/stacking_unit_console/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -50,6 +88,11 @@ if(..()) return TRUE + add_fingerprint(ui.user) + + if(!machine) + return FALSE + switch(action) if("change_stack") machine.stack_amt = clamp(text2num(params["amt"]), 1, 50) @@ -59,12 +102,13 @@ var/stack = params["stack"] if(machine.stack_storage[stack] > 0) var/stacktype = machine.stack_paths[stack] - new stacktype(get_turf(machine.output), machine.stack_storage[stack]) - machine.stack_storage[stack] = 0 + if(machine.output_dir) + var/turf/output = get_step(machine,machine.output_dir) + if(output) + new stacktype(output, machine.stack_storage[stack]) + machine.stack_storage[stack] = 0 . = TRUE - add_fingerprint(ui.user) - /**********************Mineral stacking unit**************************/ @@ -74,26 +118,52 @@ icon_state = "stacker" density = TRUE anchored = TRUE + circuit = /obj/item/circuitboard/mat_stacker var/obj/machinery/mineral/stacking_unit_console/console - var/obj/machinery/mineral/input = null - var/obj/machinery/mineral/output = null var/list/stack_storage[0] var/list/stack_paths[0] var/stack_amt = 50; // Amount to stack before releassing + sets_direction = TRUE /obj/machinery/mineral/stacking_machine/Initialize(mapload) . = ..() + default_apply_parts() + for(var/obj/item/stack/material/S as anything in (subtypesof(/obj/item/stack/material) - typesof(/obj/item/stack/material/cyborg))) var/s_matname = initial(S.default_type) stack_storage[s_matname] = 0 stack_paths[s_matname] = S - for (var/dir in GLOB.cardinal) - src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(src.input) break - for (var/dir in GLOB.cardinal) - src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(src.output) break + // Mapload uses direction hints + if(!mapload) + // If we were constructed, try to get a console to attach to us + var/obj/machinery/mineral/stacking_unit_console/console = find_nearest_linkable(/obj/machinery/mineral/stacking_unit_console) + if(console) + console.stacker_link(src) + return + find_output_direction() + +/obj/machinery/mineral/stacking_machine/Destroy() + if(console) + console.stacker_unlink() + if(speed_process) // high gear + STOP_PROCESSING(SSfastprocess, src) + else + STOP_MACHINE_PROCESSING(src) + // Release all sheets + for(var/stack in stack_storage) + if(stack_storage[stack] <= 0) + continue + var/obj/item/stack/stacktype = stack_paths[stack] + var/turf/output = get_turf(src) + while(stack_storage[stack] > 0) // Not really a nicer way to do this unless we just delete the stacks... + var/amnt = min(stack_storage[stack], initial(stacktype.max_amount)) + new stacktype(output, amnt) + stack_storage[stack] -= amnt + . = ..() + +/obj/machinery/mineral/stacking_machine/has_link() + return console /obj/machinery/mineral/stacking_machine/proc/toggle_speed(forced) if(forced) @@ -107,26 +177,47 @@ STOP_PROCESSING(SSfastprocess, src) START_MACHINE_PROCESSING(src) -/obj/machinery/mineral/stacking_machine/process() - if (src.output && src.input) - var/turf/T = get_turf(input) - for(var/obj/item/O in T.contents) - if(!O) return - if(istype(O,/obj/item/stack/material)) - var/obj/item/stack/material/S = O - var/matname = S.material.name - if(!isnull(stack_storage[matname])) - stack_storage[matname] += S.get_amount() - qdel(S) - else - O.loc = output.loc - else - O.loc = output.loc +/obj/machinery/mineral/stacking_machine/attackby(obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return + . = ..() +/obj/machinery/mineral/stacking_machine/process() + if(!output_dir) + return + + var/turf/output = get_step(src,output_dir) + if(panel_open || !powered()) + return + + if (!output) + return //Output amounts that are past stack_amt. for(var/sheet in stack_storage) if(stack_storage[sheet] >= stack_amt) var/stacktype = stack_paths[sheet] - new stacktype (get_turf(output), stack_amt) + new stacktype (output, stack_amt) stack_storage[sheet] -= stack_amt - return + +/obj/machinery/mineral/stacking_machine/Bumped(AM) + . = ..() + if(!isitem(AM)) + return + var/turf/output = get_step(src,output_dir) + if(!output) + return + var/obj/item/O = AM + if(!istype(O,/obj/item/stack/material)) + O.forceMove(output) + return + var/obj/item/stack/material/S = O + var/matname = S.material.name + if(!isnull(stack_storage[matname])) + stack_storage[matname] += S.get_amount() + qdel(S) + return + O.forceMove(output) diff --git a/code/modules/mining/machinery/machine_unloading.dm b/code/modules/mining/machinery/machine_unloading.dm index 5042b060287..24c5923c99a 100644 --- a/code/modules/mining/machinery/machine_unloading.dm +++ b/code/modules/mining/machinery/machine_unloading.dm @@ -3,23 +3,37 @@ /obj/machinery/mineral/unloading_machine name = "unloading machine" - icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "unloader" density = TRUE anchored = TRUE - var/obj/machinery/mineral/input = null - var/obj/machinery/mineral/output = null + circuit = /obj/item/circuitboard/mat_unloader + sets_direction = TRUE + var/static/list/ore_iconstates = null /obj/machinery/mineral/unloading_machine/Initialize(mapload) . = ..() - for(var/dir in GLOB.cardinal) - input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(input) - break - for(var/dir in GLOB.cardinal) - output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(output) - break + default_apply_parts() + + // Populate icons for unloaded ores, lookup is faster than the if-else monster it was before + if(!ore_iconstates) + ore_iconstates = list() + for(var/obj/item/ore/ore as anything in subtypesof(/obj/item/ore)) + var/mat = ore.material + if(!mat) + continue + ore_iconstates[mat] = ore.icon_state + + // Mapload uses direction hints + if(!mapload) + return + find_output_direction() + +/obj/machinery/mineral/unloading_machine/Destroy() + if(speed_process) // high gear + STOP_PROCESSING(SSfastprocess, src) + else + STOP_MACHINE_PROCESSING(src) + . = ..() /obj/machinery/mineral/unloading_machine/proc/toggle_speed(forced) if(forced) @@ -33,72 +47,50 @@ STOP_PROCESSING(SSfastprocess, src) START_MACHINE_PROCESSING(src) +/obj/machinery/mineral/unloading_machine/attackby(obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(default_part_replacement(user, I)) + return + . = ..() + /obj/machinery/mineral/unloading_machine/process() - if (src.output && src.input) - if (locate(/obj/structure/ore_box, input.loc)) - var/obj/structure/ore_box/BOX = locate(/obj/structure/ore_box, input.loc) - var/i = 0 - for (var/ore in BOX.stored_ore) - if(BOX.stored_ore[ore] > 0) - var/obj/item/ore_chunk/ore_chunk = new /obj/item/ore_chunk(src.output.loc) - var/ore_amount = BOX.stored_ore[ore] - ore_chunk.stored_ore[ore] += ore_amount - BOX.stored_ore[ore] = 0 + if(!output_dir) + return - //Icon code here. Going from most to least common. - if(ore == ORE_SAND) - ore_chunk.icon_state = "ore_glass" - else if(ore == ORE_CARBON) - ore_chunk.icon_state = "ore_coal" - else if(ore == ORE_HEMATITE) - ore_chunk.icon_state = "ore_iron" - else if(ore == ORE_PHORON) - ore_chunk.icon_state = "ore_phoron" - else if(ore == ORE_SILVER) - ore_chunk.icon_state = "ore_silver" - else if(ore == ORE_GOLD) - ore_chunk.icon_state = "ore_gold" - else if(ore == ORE_URANIUM) - ore_chunk.icon_state = "ore_uranium" - else if(ore == ORE_DIAMOND) - ore_chunk.icon_state = "ore_diamond" - else if(ore == ORE_PLATINUM) - ore_chunk.icon_state = "ore_platinum" - else if(ore == ORE_MARBLE) - ore_chunk.icon_state = "ore_marble" - else if(ore == ORE_LEAD) - ore_chunk.icon_state = "ore_lead" - else if(ore == ORE_RUTILE) - ore_chunk.icon_state = "ore_rutile" - else if(ore == ORE_QUARTZ) - ore_chunk.icon_state = "ore_quartz" - else if(ore == ORE_MHYDROGEN) - ore_chunk.icon_state = "ore_hydrogen" - else if(ore == ORE_VERDANTIUM) - ore_chunk.icon_state = "ore_verdantium" - else if(ore == ORE_COPPER) - ore_chunk.icon_state = "ore_copper" - else if(ore == ORE_TIN) - ore_chunk.icon_state = "ore_tin" - else if(ore == ORE_VOPAL) - ore_chunk.icon_state = "ore_void_opal" - else if(ore == ORE_BAUXITE) - ore_chunk.icon_state = "ore_bauxite" - else if(ore == ORE_PAINITE) - ore_chunk.icon_state = "ore_painite" - else - ore_chunk.icon_state = "boulder[rand(1,4)]" + var/turf/output = get_step(src,output_dir) + var/turf/input = get_step(src,reverse_direction(output_dir)) + if(panel_open || !powered()) + return + if (!output || !input) + return + if (locate(/obj/structure/ore_box, input)) + var/obj/structure/ore_box/BOX = locate(/obj/structure/ore_box, input) + var/i = 0 + for (var/ore in BOX.stored_ore) + if(BOX.stored_ore[ore] > 0) + var/obj/item/ore_chunk/ore_chunk = new /obj/item/ore_chunk(output) + var/ore_amount = BOX.stored_ore[ore] + ore_chunk.stored_ore[ore] += ore_amount + BOX.stored_ore[ore] = 0 - if (i>=3) //Let's make it staggered so it looks like a lot is happening. - return - if (locate(/obj/item, input.loc)) - var/obj/item/O - var/i - for (i = 0; i<10; i++) - O = locate(/obj/item, input.loc) - if (O) - O.loc = src.output.loc + // Icon code here. + if(ore in ore_iconstates) + ore_chunk.icon_state = ore_iconstates[ore] else + ore_chunk.icon_state = "boulder[rand(1,4)]" + + if (i>=3) //Let's make it staggered so it looks like a lot is happening. return - return + + if (locate(/obj/item, input)) + var/obj/item/O + var/i + for (i = 0; i<10; i++) + O = locate(/obj/item, input) + if(!O) + return + O.forceMove(output) diff --git a/code/modules/mining/machinery/mineral.dm b/code/modules/mining/machinery/mineral.dm new file mode 100644 index 00000000000..aec1425c7d5 --- /dev/null +++ b/code/modules/mining/machinery/mineral.dm @@ -0,0 +1,80 @@ +/obj/machinery/mineral + name = DEVELOPER_WARNING_NAME + desc = DEVELOPER_WARNING_NAME + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "furnace_old" + var/static/connection_range = 8 + var/sets_direction = FALSE // We don't want to set the direction of consoles + var/output_dir = 0 // direction that we output material + +/obj/machinery/mineral/proc/has_link() + return FALSE + +/obj/machinery/mineral/proc/find_nearest_linkable(filtering_type) + var/nearest_distance = INFINITY + var/nearest_machine = null + for(var/obj/machinery/mineral/checking in range(src, connection_range)) + if(!istype(checking, filtering_type)) + continue + if(checking.has_link()) + continue + var/turf/A = get_turf(src) + var/turf/B = get_turf(checking) + var/distcheck = A.Distance(B) + if(distcheck >= nearest_distance) + continue + nearest_distance = distcheck + nearest_machine = checking + return nearest_machine + +/obj/machinery/mineral/examine(mob/user, infix, suffix) + . = ..() + if(!sets_direction) + return + if(output_dir) + . += span_notice("Currently configured to drop processed material [dir2text(output_dir)].") + . += span_notice("Alt-click to reset.") + else + . += span_notice("Drag towards a direction (while next to it) to change drop direction.") + +/obj/machinery/mineral/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) + if(!sets_direction) + return ..() + var/mob/user = usr + if(!Adjacent(user)) + return + if(isobserver(user) || user.is_incorporeal()) + return + var/direction = get_dir(src, over_location) + if(!direction) + return + output_dir = direction + balloon_alert(user, "dropping [dir2text(output_dir)]") + +/obj/machinery/mineral/click_alt(mob/user) + if(!sets_direction) + return ..() + if(!output_dir) + return CLICK_ACTION_BLOCKING + balloon_alert(user, "drop direction reset") + output_dir = 0 + return CLICK_ACTION_SUCCESS + +// Attempt to detect our output direction from various context clues, used by mapload init +/obj/machinery/mineral/proc/find_output_direction() + var/turf/our_turf = get_turf(src) + for(var/check_dir in GLOB.cardinal) + var/turf/check = get_step(src, check_dir) + // Don't go off the edge of the map + if(!check) + continue + // Walls are obviously bad + if(check.density) + continue + // Look for conveyors that points away from us + var/obj/machinery/conveyor/convey = locate() in check + if(convey) + var/turf/conveyor_goal_turf = get_step(convey,convey.dir) + if(conveyor_goal_turf != our_turf) + output_dir = check_dir + break diff --git a/code/modules/research/tg/designs/boards/cargo.dm b/code/modules/research/tg/designs/boards/cargo.dm index 03f83fd4dd2..bd9ee285278 100644 --- a/code/modules/research/tg/designs/boards/cargo.dm +++ b/code/modules/research/tg/designs/boards/cargo.dm @@ -81,3 +81,57 @@ RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/board/mat_processor + SET_CIRCUIT_DESIGN_NAMEDESC("material processor") + id = "ore_processor" + build_path = /obj/item/circuitboard/mat_processor + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_MACHINE_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/board/mat_processor_console + SET_CIRCUIT_DESIGN_NAMEDESC("material processor console") + id = "ore_processor_console" + build_path = /obj/item/circuitboard/mat_processor_console + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/board/mat_stacker + SET_CIRCUIT_DESIGN_NAMEDESC("stacking machine") + id = "stack_machine" + build_path = /obj/item/circuitboard/mat_stacker + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_MACHINE_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/board/stacking_unit_console + SET_CIRCUIT_DESIGN_NAMEDESC("stacking machine console") + id = "stack_console" + build_path = /obj/item/circuitboard/mat_stacker_console + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/board/mat_unloader + SET_CIRCUIT_DESIGN_NAMEDESC("unloading machine") + id = "ore_unloader" + build_path = /obj/item/circuitboard/mat_unloader + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_MACHINE_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/board/mat_mint + SET_CIRCUIT_DESIGN_NAMEDESC("mint") + id = "mint" + build_path = /obj/item/circuitboard/mat_mint + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_MACHINE_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE diff --git a/code/modules/research/tg/techwebs/nodes/mining_nodes.dm b/code/modules/research/tg/techwebs/nodes/mining_nodes.dm index 40862f37a9e..1ed70a11747 100644 --- a/code/modules/research/tg/techwebs/nodes/mining_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/mining_nodes.dm @@ -10,11 +10,15 @@ "iceaxe", // "conveyor_switch", // "conveyor_belt", + "ore_unloader", // "mass_driver", // "recycler", - // "stack_machine", - // "stack_console", + "stack_machine", + "stack_console", + "ore_processor", + "ore_processor_console", "hoist_kit", + "mint", ) /datum/techweb_node/mining diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi index 2b01510cb1c1b79e4bc43753dc5b46963207cd74..b5fd34841d4b27d2f948da3f6ab2c7dc1d4a0796 100644 GIT binary patch literal 28206 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 C+>_$~ diff --git a/icons/obj/stock_parts_vr.dmi b/icons/obj/stock_parts_vr.dmi index 6a90bf44852a34904960f6ac71e8ccd016316f64..18b03c71bbac9fed7001e76bb85ef3c6174fa4c3 100644 GIT binary patch delta 8493 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 delta 7445 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