diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm
index b332766517..202008a212 100644
--- a/code/__DEFINES/tools.dm
+++ b/code/__DEFINES/tools.dm
@@ -5,6 +5,8 @@
#define TOOL_WIRECUTTER "wirecutter"
#define TOOL_WRENCH "wrench"
#define TOOL_WELDER "welder"
+#define TOOL_MINING "mining"
+#define TOOL_SHOVEL "shovel"
// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY,
diff --git a/code/datums/components/archaeology.dm b/code/datums/components/archaeology.dm
index 30bf107ad0..5b5d52b0b4 100644
--- a/code/datums/components/archaeology.dm
+++ b/code/datums/components/archaeology.dm
@@ -19,28 +19,22 @@
for(var/I in other_archdrops)
_archdrops[I] += other_archdrops[I]
-/datum/component/archaeology/proc/Dig(obj/item/W, mob/living/user)
+/datum/component/archaeology/proc/Dig(obj/item/I, mob/living/user)
if(dug)
to_chat(user, "Looks like someone has dug here already.")
return
-
- var/digging_speed
- if (istype(W, /obj/item/shovel))
- var/obj/item/shovel/S = W
- digging_speed = S.digspeed
- else if (istype(W, /obj/item/pickaxe))
- var/obj/item/pickaxe/P = W
- digging_speed = P.digspeed
-
- if (digging_speed && isturf(user.loc))
- to_chat(user, "You start digging...")
- playsound(parent, 'sound/effects/shovel_dig.ogg', 50, 1)
- if(do_after(user, digging_speed, target = parent))
+ if(!isturf(user.loc))
+ return
+
+ if(I.tool_behaviour == TOOL_SHOVEL || I.tool_behaviour == TOOL_MINING)
+ to_chat(user, "You start digging...")
+
+ if(I.use_tool(parent, user, 40, volume=50))
to_chat(user, "You dig a hole.")
gets_dug()
dug = TRUE
- SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type)
+ SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
return COMPONENT_NO_AFTERATTACK
/datum/component/archaeology/proc/gets_dug()
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 8d83c646c2..c717b815e9 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -173,8 +173,8 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
#undef METEOR_MEDAL
-/obj/effect/meteor/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/pickaxe))
+/obj/effect/meteor/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_MINING)
make_debris()
qdel(src)
else
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 259c72647d..35d1008474 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -124,11 +124,10 @@
else
icon_state = initial_state
-/obj/structure/mineral_door/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/pickaxe))
- var/obj/item/pickaxe/digTool = W
+/obj/structure/mineral_door/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_MINING)
to_chat(user, "You start digging the [name]...")
- if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src)
+ if(I.use_tool(src, user, 40, volume=50))
to_chat(user, "You finish digging.")
deconstruct(TRUE)
else if(user.a_intent != INTENT_HARM)
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index 6e3c1d66f3..b9d9202190 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -46,26 +46,26 @@
return ..()
-/turf/closed/mineral/attackby(obj/item/pickaxe/P, mob/user, params)
+/turf/closed/mineral/attackby(obj/item/I, mob/user, params)
if (!user.IsAdvancedToolUser())
to_chat(usr, "You don't have the dexterity to do this!")
return
- if (istype(P, /obj/item/pickaxe))
+ if(I.tool_behaviour == TOOL_MINING)
var/turf/T = user.loc
if (!isturf(T))
return
- if(last_act+P.digspeed > world.time)//prevents message spam
+ if(last_act + (40 * I.toolspeed) > world.time)//prevents message spam
return
last_act = world.time
to_chat(user, "You start picking...")
- if(do_after(user,P.digspeed, target = src))
+ if(I.use_tool(src, user, 40, volume=50))
if(ismineralturf(src))
to_chat(user, "You finish cutting into the rock.")
gets_drilled(user)
- SSblackbox.record_feedback("tally", "pick_used_mining", 1, P.type)
+ SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
else
return attack_hand(user)
@@ -90,7 +90,7 @@
/turf/closed/mineral/attack_alien(mob/living/carbon/alien/M)
to_chat(M, "You start digging into the rock...")
playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
- if(do_after(M,40, target = src))
+ if(do_after(M, 40, target = src))
to_chat(M, "You tunnel into the rock.")
gets_drilled(M)
@@ -98,14 +98,14 @@
..()
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
- var/obj/item/I = H.is_holding_item_of_type(/obj/item/pickaxe)
+ var/obj/item/I = H.is_holding_tool_quality(TOOL_MINING)
if(I)
- attackby(I,H)
+ attackby(I, H)
return
else if(iscyborg(AM))
var/mob/living/silicon/robot/R = AM
- if(istype(R.module_active, /obj/item/pickaxe))
- attackby(R.module_active,R)
+ if(R.module_active && R.module_active.tool_behaviour == TOOL_MINING)
+ attackby(R.module_active, R)
return
else
return
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 5277a25991..2bcf03c595 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -829,21 +829,19 @@
if(!myseed && !weedlevel)
to_chat(user, "[src] doesn't have any plants or weeds!")
return
- user.visible_message("[user] starts digging out [src]'s plants...", "You start digging out [src]'s plants...")
- O.play_tool_sound(src)
- if(!do_after(user, 50, target = src) || (!myseed && !weedlevel))
- return
- user.visible_message("[user] digs out the plants in [src]!", "You dig out all of [src]'s plants!")
- O.play_tool_sound(src)
- if(myseed) //Could be that they're just using it as a de-weeder
- age = 0
- plant_health = 0
- if(harvest)
- harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it
- qdel(myseed)
- myseed = null
- weedlevel = 0 //Has a side effect of cleaning up those nasty weeds
- update_icon()
+ user.visible_message("[user] starts digging out [src]'s plants...",
+ "You start digging out [src]'s plants...")
+ if(O.use_tool(src, user, 50, volume=50) || (!myseed && !weedlevel))
+ user.visible_message("[user] digs out the plants in [src]!", "You dig out all of [src]'s plants!")
+ if(myseed) //Could be that they're just using it as a de-weeder
+ age = 0
+ plant_health = 0
+ if(harvest)
+ harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it
+ qdel(myseed)
+ myseed = null
+ weedlevel = 0 //Has a side effect of cleaning up those nasty weeds
+ update_icon()
else
return ..()
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index 1038d8c267..581c47b83f 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -12,16 +12,16 @@
righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
- var/digspeed = 40
+ tool_behaviour = TOOL_MINING
+ toolspeed = 1
usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
attack_verb = list("hit", "pierced", "sliced", "attacked")
/obj/item/pickaxe/suicide_act(mob/living/user)
user.visible_message("[user] begins digging into their chest! It looks like [user.p_theyre()] trying to commit suicide!")
- if(do_after(user,30, target = user))
- play_tool_sound(user)
+ if(use_tool(user, user, 30, volume=50))
return BRUTELOSS
- user.visible_message("[user] couldn't do it!")
+ user.visible_message("[user] couldn't do it!")
return SHAME
/obj/item/pickaxe/mini
@@ -38,7 +38,7 @@
name = "silver-plated pickaxe"
icon_state = "spickaxe"
item_state = "spickaxe"
- digspeed = 20 //mines faster than a normal pickaxe, bought from mining vendor
+ toolspeed = 0.5 //mines faster than a normal pickaxe, bought from mining vendor
desc = "A silver-plated pickaxe that mines slightly faster than standard-issue."
force = 17
@@ -46,7 +46,7 @@
name = "diamond-tipped pickaxe"
icon_state = "dpickaxe"
item_state = "dpickaxe"
- digspeed = 14
+ toolspeed = 0.3
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
force = 19
@@ -55,7 +55,7 @@
icon_state = "handdrill"
item_state = "jackhammer"
slot_flags = SLOT_BELT
- digspeed = 25 //available from roundstart, faster than a pickaxe.
+ toolspeed = 0.6 //available from roundstart, faster than a pickaxe.
usesound = 'sound/weapons/drill.ogg'
hitsound = 'sound/weapons/drill.ogg'
desc = "An electric mining drill for the especially scrawny."
@@ -68,19 +68,19 @@
/obj/item/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
- digspeed = 7
+ toolspeed = 0.2
desc = "Yours is the drill that will pierce the heavens!"
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
name = "diamond-tipped cyborg mining drill" //To inherit the NODROP_1 flag, and easier to change borg specific drill mechanics.
icon_state = "diamonddrill"
- digspeed = 7
+ toolspeed = 0.2
/obj/item/pickaxe/drill/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
- digspeed = 5 //the epitome of powertools. extremely fast mining, laughs at puny walls
+ toolspeed = 0.1 //the epitome of powertools. extremely fast mining, laughs at puny walls
usesound = 'sound/weapons/sonic_jackhammer.ogg'
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
@@ -95,7 +95,8 @@
flags_1 = CONDUCT_1
slot_flags = SLOT_BELT
force = 8
- var/digspeed = 20
+ tool_behaviour = TOOL_SHOVEL
+ toolspeed = 1
usesound = 'sound/effects/shovel_dig.ogg'
throwforce = 4
item_state = "shovel"
@@ -103,13 +104,12 @@
materials = list(MAT_METAL=50)
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharpness = IS_SHARP
-
+
/obj/item/shovel/suicide_act(mob/living/user)
user.visible_message("[user] begins digging their own grave! It looks like [user.p_theyre()] trying to commit suicide!")
- if(do_after(user,30, target = user))
- play_tool_sound(user)
+ if(use_tool(user, user, 30, volume=50))
return BRUTELOSS
- user.visible_message("[user] couldn't do it!")
+ user.visible_message("[user] couldn't do it!")
return SHAME
/obj/item/shovel/spade
@@ -121,4 +121,4 @@
righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
force = 5
throwforce = 7
- w_class = WEIGHT_CLASS_SMALL
+ w_class = WEIGHT_CLASS_SMALL
\ No newline at end of file
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 56020b5407..5ce6abc73d 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
wires.interact(user)
return
- if(istype(I, /obj/item/pickaxe) || istype(I, /obj/item/resonator) || I.force >= 10)
+ if(I.tool_behaviour == TOOL_MINING || istype(I, /obj/item/resonator) || I.force >= 10)
GibtoniteReaction(user)
return
if(primed)