diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm index d4f0cb748e1..6f618ac8240 100644 --- a/code/__DEFINES/wires.dm +++ b/code/__DEFINES/wires.dm @@ -9,6 +9,8 @@ #define WIRE_ACCEPT "Scan Success" #define WIRE_ACTIVATE "Activate" +#define WIRE_LAUNCH "Launch" +#define WIRE_SAFETIES "Safeties" #define WIRE_AGELIMIT "Age Limit" #define WIRE_AI "AI Connection" #define WIRE_ALARM "Alarm" diff --git a/code/datums/wires/mass_driver.dm b/code/datums/wires/mass_driver.dm new file mode 100644 index 00000000000..329da73c2dc --- /dev/null +++ b/code/datums/wires/mass_driver.dm @@ -0,0 +1,25 @@ +/datum/wires/mass_driver + holder_type = /obj/machinery/mass_driver + proper_name = "Mass Driver" + +/datum/wires/mass_driver/New(atom/holder) + wires = list(WIRE_LAUNCH, WIRE_SAFETIES) + ..() + +/datum/wires/mass_driver/on_pulse(wire) + var/obj/machinery/mass_driver/the_mass_driver = holder + switch(wire) + if(WIRE_LAUNCH) + the_mass_driver.drive() + holder.visible_message(span_notice("The drive mechanism activates.")) + if(WIRE_SAFETIES) + the_mass_driver.power = 3 + holder.visible_message(span_notice("You hear a worrying whirring noise emitting from the mass driver.")) + +/datum/wires/mass_driver/on_cut(wire, mend, source) + var/obj/machinery/mass_driver/the_mass_driver = holder + switch(wire) + if(WIRE_SAFETIES) + if(the_mass_driver.power > 1) + the_mass_driver.power = 1 + holder.visible_message(span_notice("The whirring noise emitting from the mass driver stops.")) diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index f925dfdbdc3..e3922415a66 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -3,10 +3,20 @@ desc = "The finest in spring-loaded piston toy technology, now on a space station near you." icon = 'icons/obj/machines/floor.dmi' icon_state = "mass_driver" + circuit = /obj/item/circuitboard/machine/mass_driver var/power = 1 var/code = 1 var/id = 1 - var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess. + var/drive_range = 10 + var/power_per_obj = 1000 + +/obj/machinery/mass_driver/Initialize(mapload) + . = ..() + wires = new /datum/wires/mass_driver(src) + +/obj/machinery/mass_driver/Destroy() + QDEL_NULL(wires) + . = ..() /obj/machinery/mass_driver/chapelgun name = "holy driver" @@ -31,9 +41,9 @@ id = "[port.shuttle_id]_[id]" /obj/machinery/mass_driver/proc/drive(amount) - if(machine_stat & (BROKEN|NOPOWER)) + if(machine_stat & (BROKEN|NOPOWER) || panel_open) return - use_power(active_power_usage) + use_power(power_per_obj) var/O_limit var/atom/target = get_edge_target_turf(src, dir) for(var/atom/movable/O in loc) @@ -44,14 +54,33 @@ if(O_limit >= 20) audible_message(span_notice("[src] lets out a screech, it doesn't seem to be able to handle the load.")) break - use_power(active_power_usage) + use_power(power_per_obj) O.throw_at(target, drive_range * power, power) flick("mass_driver1", src) +/obj/machinery/mass_driver/attackby(obj/item/I, mob/living/user, params) + + if(is_wire_tool(I) && panel_open) + wires.interact(user) + return + if(default_deconstruction_screwdriver(user, "mass_driver_o", "mass_driver", I)) + return + if(default_change_direction_wrench(user, I)) + return + if(default_deconstruction_crowbar(I)) + return + + return ..() + +/obj/machinery/mass_driver/RefreshParts() + . = ..() + for(var/datum/stock_part/servo/new_servo in component_parts) + drive_range += new_servo.tier * 10 + /obj/machinery/mass_driver/emp_act(severity) . = ..() if (. & EMP_PROTECT_SELF) return - if(machine_stat & (BROKEN|NOPOWER)) + if(machine_stat & (BROKEN|NOPOWER) || panel_open) return drive() diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index b0807aff466..e5b7144dc8c 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -56,6 +56,13 @@ /datum/stock_part/capacitor = 1, /obj/item/electronics/airlock = 1) +/obj/item/circuitboard/machine/mass_driver + name = "Mass Driver" + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/mass_driver + req_components = list( + /datum/stock_part/servo = 1,) + /obj/item/circuitboard/machine/autolathe name = "Autolathe" greyscale_colors = CIRCUIT_COLOR_ENGINEERING diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 6597c12fbec..1c44e8bc4fb 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -51,6 +51,16 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +/datum/design/board/mass_driver + name = "Mass Driver Board" + desc = "The circuit board for a mass driver." + id = "mass_driver" + build_path = /obj/item/circuitboard/machine/mass_driver + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + /datum/design/board/turbine_compressor name = "Turbine Compressor Board" desc = "The circuit board for a turbine compressor." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index dc15c976721..3a818ea9403 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -596,6 +596,7 @@ "emergency_oxygen_engi", "emergency_oxygen", "emitter", + "mass_driver", "firealarm_electronics", "firelock_board", "generic_tank", diff --git a/icons/obj/machines/floor.dmi b/icons/obj/machines/floor.dmi index 38ea510f37b..6f858465dcd 100644 Binary files a/icons/obj/machines/floor.dmi and b/icons/obj/machines/floor.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 02892fd88dd..c8782fe7bb6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1695,6 +1695,7 @@ #include "code\datums\wires\emitter.dm" #include "code\datums\wires\explosive.dm" #include "code\datums\wires\fax.dm" +#include "code\datums\wires\mass_driver.dm" #include "code\datums\wires\mecha.dm" #include "code\datums\wires\microwave.dm" #include "code\datums\wires\mod.dm"