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 d148105ed05..fd34780d0cf 100644 Binary files a/icons/mecha/mech_equipment.dmi and b/icons/mecha/mech_equipment.dmi differ