diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index e20900013e..4ac8ac6b18 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -171,6 +171,33 @@
R.module.basic_modules += S
R.module.add_module(S, FALSE, TRUE)
+/obj/item/borg/upgrade/advcutter
+ name = "mining cyborg advanced plasma cutter"
+ desc = "An upgrade for the mining cyborgs plasma cutter, bringing it to advanced operation."
+ icon_state = "cyborg_upgrade3"
+ require_module = 1
+ module_type = list(/obj/item/robot_module/miner)
+
+/obj/item/borg/upgrade/advcutter/action(mob/living/silicon/robot/R, user = usr)
+ . = ..()
+ if(.)
+ for(var/obj/item/gun/energy/plasmacutter/cyborg/C in R.module)
+ C.name = "advanced cyborg plasma cutter"
+ C.desc = "An improved version of the cyborg plasma cutter. Baring functionality identical to the standard hand held version."
+ C.icon_state = "adv_plasmacutter"
+ for(var/obj/item/ammo_casing/energy/plasma/weak/L in C.ammo_type)
+ L.projectile_type = /obj/item/projectile/plasma/adv
+
+/obj/item/borg/upgrade/advcutter/deactivate(mob/living/silicon/robot/R, user = usr)
+ . = ..()
+ if (.)
+ for(var/obj/item/gun/energy/plasmacutter/cyborg/C in R.module)
+ C.name = initial(name)
+ C.desc = initial(desc)
+ C.icon_state = initial(icon_state)
+ for(var/obj/item/ammo_casing/energy/plasma/weak/L in C.ammo_type)
+ L.projectile_type = initial(L.projectile_type)
+
/obj/item/borg/upgrade/tboh
name = "janitor cyborg trash bag of holding"
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index aeadceb2e5..a706bb022a 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -47,7 +47,7 @@
return ..()
-/turf/closed/mineral/attackby(obj/item/I, mob/user, params)
+/turf/closed/mineral/attackby(obj/item/pickaxe/I, mob/user, params)
if (!user.IsAdvancedToolUser())
to_chat(usr, "You don't have the dexterity to do this!")
return
@@ -64,6 +64,10 @@
if(I.use_tool(src, user, 40, volume=50))
if(ismineralturf(src))
+ if(I.digrange > 0)
+ for(var/turf/closed/mineral/M in range(user,I.digrange))
+ if(get_dir(user,M)&user.dir)
+ M.gets_drilled()
to_chat(user, "You finish cutting into the rock.")
gets_drilled(user)
SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index e02f38b7e3..86c1a86acb 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -16,6 +16,20 @@
toolspeed = 1
usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
attack_verb = list("hit", "pierced", "sliced", "attacked")
+ var/digrange = 0
+
+/obj/item/pickaxe/attack_self(mob/user)
+ if(initial(digrange) > 0)
+ if(digrange == 0)
+ digrange = initial(digrange)
+ toolspeed = initial(toolspeed)
+ to_chat(user, "You increase the tools dig range, decreasing its mining speed.")
+ else
+ digrange = 0
+ toolspeed = toolspeed/3
+ to_chat(user, "You decrease the tools dig range, increasing its mining speed.")
+ else
+ to_chat(user, "Tool does not have a configureable dig range.")
/obj/item/pickaxe/suicide_act(mob/living/user)
user.visible_message("[user] begins digging into [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -51,6 +65,7 @@
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
force = 19
materials = list(MAT_DIAMOND=4000)
+ digrange = 1
/obj/item/pickaxe/drill
name = "mining drill"
@@ -64,8 +79,10 @@
/obj/item/pickaxe/drill/cyborg
name = "cyborg mining drill"
- desc = "An integrated electric mining drill."
+ desc = "An integrated electric mining drill. Mines in 3 wide"
flags_1 = NONE
+ toolspeed = 0.5
+ digrange = 1
/obj/item/pickaxe/drill/cyborg/Initialize()
. = ..()
@@ -74,23 +91,27 @@
/obj/item/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
- toolspeed = 0.2
+ toolspeed = 0.4
desc = "Yours is the drill that will pierce the heavens!"
+ digrange = 1
/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"
- toolspeed = 0.1
+ toolspeed = 0.4
+ digrange = 2
/obj/item/pickaxe/drill/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
w_class = WEIGHT_CLASS_HUGE
- toolspeed = 0.1 //the epitome of powertools. extremely fast mining, laughs at puny walls
+ digrange = 2
+ toolspeed = 0.2 //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."
+ digrange = 2
/obj/item/shovel
name = "shovel"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 3d5b1b96f0..eb03b4e156 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -845,7 +845,6 @@
/obj/item/borg/sight/meson,
/obj/item/storage/bag/ore/cyborg,
/obj/item/pickaxe/drill/cyborg,
- /obj/item/shovel,
/obj/item/weldingtool/mini,
/obj/item/storage/bag/sheetsnatcher/borg,
/obj/item/t_scanner/adv_mining_scanner,
diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm
index 797ab601a5..4c05c42fb3 100644
--- a/code/modules/projectiles/projectile/special/plasma.dm
+++ b/code/modules/projectiles/projectile/special/plasma.dm
@@ -51,5 +51,5 @@
/obj/item/projectile/plasma/weak
dismemberment = 0
damage = 10
- range = 2
+ range = 4
mine_range = 0
\ No newline at end of file
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index cc26c223df..a6d0f384b8 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -624,6 +624,15 @@
construction_time = 120
category = list("Cyborg Upgrade Modules")
+/datum/design/borg_upgrade_advcutter
+ name = "Cyborg Upgrade (Advanced Plasma Cutter)"
+ id = "borg_upgrade_advcutter"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/advcutter
+ materials = list(MAT_METAL=8000, MAT_PLASMA=2000)
+ construction_time = 120
+ category = list("Cyborg Upgrade Modules")
+
/datum/design/borg_upgrade_lavaproof
name = "Cyborg Upgrade (Lavaproof Tracks)"
id = "borg_upgrade_lavaproof"
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index eed1e4aefd..4b014372e7 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -365,7 +365,7 @@
display_name = "Advanced Robotics Research"
description = "It can even do the dishes!"
prereq_ids = list("robotics")
- design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_advancedmop")
+ design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_advancedmop", "borg_upgrade_advcutter")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
export_price = 5000
@@ -391,7 +391,7 @@
display_name = "Cyborg Upgrades: Utility"
description = "Utility upgrades for cyborgs."
prereq_ids = list("engineering", "robotics")
- design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand", "borg_upgrade_rped")
+ design_ids = list("borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand", "borg_upgrade_rped")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
export_price = 5000