From 35a0dff2dc43a599124148923977f77eb7e16598 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sat, 13 Jun 2020 14:10:08 +0200 Subject: [PATCH] Mining Mech Equipment (#9084) --- aurorastation.dme | 1 + .../modules/heavy_vehicle/equipment/mining.dm | 86 ++++++++++++++++++ code/modules/mining/drilling/drill.dm | 17 ++-- .../mechs/designs_exosuit_equipment.dm | 7 +- .../geeves-even_more_mech_equipment.yml | 6 ++ icons/mecha/mech_equipment.dmi | Bin 26838 -> 28302 bytes 6 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 code/modules/heavy_vehicle/equipment/mining.dm create mode 100644 html/changelogs/geeves-even_more_mech_equipment.yml diff --git a/aurorastation.dme b/aurorastation.dme index c31d86727e2..ef1960dc8aa 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1591,6 +1591,7 @@ #include "code\modules\heavy_vehicle\equipment\combat.dm" #include "code\modules\heavy_vehicle\equipment\engineering.dm" #include "code\modules\heavy_vehicle\equipment\medical.dm" +#include "code\modules\heavy_vehicle\equipment\mining.dm" #include "code\modules\heavy_vehicle\equipment\utility.dm" #include "code\modules\heavy_vehicle\interface\_interface.dm" #include "code\modules\heavy_vehicle\interface\screen_objectsa.dm" diff --git a/code/modules/heavy_vehicle/equipment/mining.dm b/code/modules/heavy_vehicle/equipment/mining.dm new file mode 100644 index 00000000000..7851e61234e --- /dev/null +++ b/code/modules/heavy_vehicle/equipment/mining.dm @@ -0,0 +1,86 @@ +/obj/item/mecha_equipment/drill_mover + name = "mounted drill loader" + desc = "A large back-mounted drill loader, capable of picking up and deploying large industrial drills." + icon_state = "mecha_drill_loader" + restricted_hardpoints = list(HARDPOINT_BACK) + restricted_software = list(MECH_SOFTWARE_UTILITY) + w_class = ITEMSIZE_HUGE + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + var/obj/machinery/mining/drill/held_drill + var/list/obj/machinery/mining/brace/held_braces + var/charging = FALSE + +/obj/item/mecha_equipment/drill_mover/afterattack(var/atom/target, var/mob/living/user, var/inrange, var/params) + . = ..() + + if(.) + for(var/obj/machinery/M in range(1, target)) + if(istype(M, /obj/machinery/mining/brace)) + var/obj/machinery/mining/brace/B = M + B.anchored = FALSE + B.disconnect() + if(length(held_braces) < 2) + owner.visible_message(SPAN_NOTICE("\The [owner] starts loading \the [B] into \the [src].")) + if(do_after(owner, 50, act_target = B)) + owner.visible_message(SPAN_NOTICE("\The [owner] loads \the [B] into \the [src].")) + B.forceMove(src) + LAZYADD(held_braces, B) + if(!held_drill && istype(M, /obj/machinery/mining/drill)) + var/obj/machinery/mining/drill/D = M + owner.visible_message(SPAN_NOTICE("\The [owner] starts loading \the [D] into \the [src].")) + if(do_after(owner, 50, act_target = D)) + owner.visible_message(SPAN_NOTICE("\The [owner] loads \the [D] into \the [src].")) + D.anchored = FALSE + D.active = FALSE + D.forceMove(src) + held_drill = D + +/obj/item/mecha_equipment/drill_mover/attack_self(var/mob/user) + . = ..() + if(.) + deploy_drill(user) + +/obj/item/mecha_equipment/drill_mover/proc/deploy_drill(var/mob/user) + var/turf/drill_turf = get_turf(src) + var/turf/left_brace_turf = get_step(src, WEST) + var/turf/right_brace_turf = get_step(src, EAST) + var/list/turf/deployment_turfs = list(drill_turf, left_brace_turf, right_brace_turf) + for(var/turf/T in list(drill_turf, left_brace_turf, right_brace_turf)) + if(T.density || isopenspace(T)) + to_chat(user, SPAN_WARNING("There isn't enough space to deploy the drill here!")) + return + if(held_drill) + held_drill.forceMove(deployment_turfs[1]) + held_drill.anchored = TRUE + deployment_turfs -= deployment_turfs[1] + for(var/obj/machinery/mining/brace/B in held_braces) + B.forceMove(deployment_turfs[1]) + B.anchored = TRUE + B.connect() + deployment_turfs -= deployment_turfs[1] + if(held_drill) + held_drill.check_supports() + if(length(held_drill.supports) >= held_drill.braces_needed) + held_drill.active = TRUE + held_drill.need_update_field = TRUE + held_drill.need_player_check = FALSE + held_drill.update_icon() + held_drill = null + held_braces = null + +/obj/item/mecha_equipment/drill_mover/get_hardpoint_status_value() + var/carried_amount = 0 + if(held_drill) + carried_amount++ + var/increase_amount = length(held_braces) // i have to do this because += with null makes the whole thing go weird + if(increase_amount) + carried_amount += increase_amount + return carried_amount / 3 + +/obj/item/mecha_equipment/drill_mover/uninstalled() + if(held_drill) + held_drill.dropInto(get_turf(src)) + for(var/obj/brace in held_braces) + brace.dropInto(get_turf(src)) + held_braces -= brace + . = ..() \ No newline at end of file diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index bbcd1f8cfe6..23ec7a05e00 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -187,6 +187,8 @@ return src.attack_hand(user) /obj/machinery/mining/drill/attackby(obj/item/O, mob/user) + if(istype(O, /obj/item/mecha_equipment/drill_mover)) // the drill mover afterattack handles it + return if(!active) if(default_deconstruction_screwdriver(user, O)) return @@ -478,11 +480,6 @@ playsound(get_turf(src), W.usesound, 100, 1) to_chat(user, SPAN_NOTICE("You [anchored ? "un" : ""]anchor the brace.")) - for(var/angle in cardinal) // make it face any drill in cardinal direction from it - if(locate(/obj/machinery/mining/drill) in get_step(src, angle)) - src.dir = angle - break - anchored = !anchored if(anchored) connect() @@ -494,11 +491,11 @@ return ..() /obj/machinery/mining/brace/proc/connect() - var/turf/T = get_step(get_turf(src), src.dir) - - for(var/thing in T.contents) - if(istype(thing, /obj/machinery/mining/drill)) - connected = thing + for(var/angle in cardinal) // make it face any drill in cardinal direction from it + var/obj/machinery/mining/drill/D = locate() in get_step(src, angle) + if(D) + src.dir = angle + connected = D break if(!connected) diff --git a/code/modules/research/designs/mechfab/mechs/designs_exosuit_equipment.dm b/code/modules/research/designs/mechfab/mechs/designs_exosuit_equipment.dm index b35c1707e6f..46a0445a71b 100644 --- a/code/modules/research/designs/mechfab/mechs/designs_exosuit_equipment.dm +++ b/code/modules/research/designs/mechfab/mechs/designs_exosuit_equipment.dm @@ -120,4 +120,9 @@ /datum/design/item/mechfab/exosuit_equipment/quick_enter name = "Mounted Rapid-Entry System" materials = list(DEFAULT_WALL_MATERIAL = 10000) - build_path = /obj/item/mecha_equipment/quick_enter \ No newline at end of file + build_path = /obj/item/mecha_equipment/quick_enter + +/datum/design/item/mechfab/exosuit_equipment/drill_mover + name = "Mounted Drill Loader System" + materials = list(DEFAULT_WALL_MATERIAL = 15000) + build_path = /obj/item/mecha_equipment/drill_mover \ No newline at end of file diff --git a/html/changelogs/geeves-even_more_mech_equipment.yml b/html/changelogs/geeves-even_more_mech_equipment.yml new file mode 100644 index 00000000000..b56c26273c0 --- /dev/null +++ b/html/changelogs/geeves-even_more_mech_equipment.yml @@ -0,0 +1,6 @@ +author: Geeves, sprites by Wezzy + +delete-after: True + +changes: + - rscadd: "Added a back-mounted drill loader, an exosuit equipment that can take mining drills and their braces and deploy them elsewhere. Even if they're active and anchored." \ No newline at end of file diff --git a/icons/mecha/mech_equipment.dmi b/icons/mecha/mech_equipment.dmi index d148105ed056eefeefb9662b683c077b10f88886..fd34780d0cf72022493ca43fdd0ebae9754d03ee 100644 GIT binary patch delta 8672 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