diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
index 46190a4c84..c781fa3736 100644
--- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
@@ -18,6 +18,7 @@
toolspeed = 0.9
var/drill_delay = 7
var/drill_level = DRILL_BASIC
+ var/is_drilling = 0;
mech_flags = EXOSUIT_MODULE_WORKING | EXOSUIT_MODULE_COMBAT
/obj/item/mecha_parts/mecha_equipment/drill/Initialize(mapload)
@@ -25,34 +26,58 @@
AddComponent(/datum/component/butchering, 50, 100, null, null, TRUE)
/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, params)
- if(!action_checks(target))
+ //Are we already drilling?
+ if(is_drilling)
return
- if(isspaceturf(target))
+ is_drilling = 1
+ //Is the mech not in a position to start drilling, maybe due to damage? Is the tile literal space?
+ if(!action_checks(target) || isspaceturf(target))
+ is_drilling = 0
return
if(isobj(target))
var/obj/target_obj = target
if(target_obj.resistance_flags & UNACIDABLE)
+ is_drilling = 0
return
target.visible_message("[chassis] starts to drill [target].", \
- "[chassis] starts to drill [target]...", \
- "You hear drilling.")
-
+ "[chassis] starts to drill [target]...", \
+ "You hear drilling.")
if(do_after_cooldown(target, source))
log_message("Started drilling [target]", LOG_MECHA)
+ //If it's a turf, activate special drill through code
if(isturf(target))
var/turf/T = target
T.drill_act(src, source)
+ is_drilling = 0
+ log_message("Stopped drilling [target]", LOG_MECHA)
+ target.visible_message("[chassis] finishes drilling [target].", \
+ "[chassis] finishes drilling [target]...", \
+ "You hear the drilling stop.")
return
while(do_after_mecha(target, source, drill_delay))
+ //Let's make sure they're still within range yeah?
+ if (!in_range(target,source))
+ is_drilling = 0
+ log_message("Stopped drilling [target]", LOG_MECHA)
+ target.visible_message("[chassis] stops drilling [target].", \
+ "[chassis] stops drilling [target]...", \
+ "You hear the drilling stop.")
+ return
if(isliving(target))
drill_mob(target, source)
playsound(src,'sound/weapons/drill.ogg',40,TRUE)
else if(isobj(target))
var/obj/O = target
- O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target))
+ O.take_damage(force, BRUTE, 0, FALSE, get_dir(chassis, target))
playsound(src,'sound/weapons/drill.ogg',40,TRUE)
else
+ is_drilling = 0
+ log_message("Stopped drilling [target]", LOG_MECHA)
+ target.visible_message("[chassis] stops drilling [target].", \
+ "[chassis] stops drilling [target]...", \
+ "You hear the drilling stop.")
return
+ is_drilling = 0
return ..()
/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
@@ -148,7 +173,6 @@
force = 15
toolspeed = 0.7
-
/obj/item/mecha_parts/mecha_equipment/mining_scanner
name = "exosuit mining scanner"
desc = "Equipment for working exosuits. It will automatically check surrounding rock for useful minerals."