diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 793e1bd0803..32adf464d31 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -194,23 +194,29 @@
return 1
-/obj/item/borg/upgrade/hyperka
- name = "mining cyborg hyper-kinetic accelerator"
- desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
+/obj/item/borg/upgrade/aoeka
+ name = "mining cyborg mining aoe kinetic accelerator"
+ desc = "A mining cyborg kinetic accelerator upgrade that causes it to destroy rock in an AoE."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
origin_tech = "materials=6;powerstorage=4;engineering=4;magnets=4;combat=4"
-/obj/item/borg/upgrade/hyperka/action(mob/living/silicon/robot/R)
+/obj/item/borg/upgrade/aoeka/action(mob/living/silicon/robot/R)
if(..())
return
for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules)
- qdel(H)
-
- R.module.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/hyper(R.module)
- R.module.rebuild()
+ var/current_mod_capacity = 0
+ for(var/obj/item/modkit/M in H.modkits)
+ current_mod_capacity += M.cost
+ var/obj/item/modkit/aoe/turfs/T = new/obj/item/modkit/aoe/turfs(H)
+ if((current_mod_capacity + T.cost) > max_mod_capacity)
+ usr << "This unit has no space for additional modkits!"
+ qdel(T)
+ return
+ else
+ T.install(H)
return 1
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index 7408cd520ed..33372cc6578 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -65,7 +65,7 @@
if(57 to 58)
new /obj/item/toy/syndicateballoon(src)
if(59 to 60)
- new /obj/item/modkit/projectile_mod(src)
+ new /obj/item/modkit/aoe/mobs(src)
new /obj/item/clothing/suit/space(src)
new /obj/item/clothing/head/helmet/space(src)
if(61 to 62)
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index e2af04e96cb..336dfb48c30 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -47,7 +47,7 @@
if(16)
new /obj/item/weapon/guardiancreator(src)
if(17)
- new /obj/item/stack/sheet/runed_metal/fifty(src)
+ new /obj/item/modkit/aoe/mobs(src)
if(18)
new /obj/item/device/warp_cube/red(src)
if(19)
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 608215ae631..a60df91fdbe 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -59,9 +59,7 @@
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
holds_charge = TRUE
unique_frequency = TRUE
-
-/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/hyper
- ammo_type = list(/obj/item/ammo_casing/energy/kinetic/hyper)
+ max_mod_capacity = 2
/obj/item/weapon/gun/energy/kinetic_accelerator/New()
. = ..()
@@ -132,17 +130,7 @@
add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset))
-
-
-
-
-
-
-
-
//Casing
-
-
/obj/item/ammo_casing/energy/kinetic
projectile_type = /obj/item/projectile/kinetic
select_name = "kinetic"
@@ -165,13 +153,8 @@
var/obj/item/projectile/kinetic/K = BB
K.damage /= K.damage_divisor
-/obj/item/ammo_casing/energy/kinetic/hyper
- projectile_type = /obj/item/projectile/kinetic/hyper
-
-
//Projectiles
-
/obj/item/projectile/kinetic
name = "kinetic force"
icon_state = null
@@ -180,12 +163,18 @@
flag = "bomb"
range = 3
var/damage_divisor = 4
+ var/turf_aoe = FALSE
+ var/mob_aoe = 0
/obj/item/projectile/kinetic/on_range()
+ if(turf_aoe || mob_aoe)
+ aoe_blast()
PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc)
..()
/obj/item/projectile/kinetic/on_hit(atom/target)
+ if(turf_aoe || mob_aoe)
+ aoe_blast(target)
var/turf/target_turf= get_turf(target)
if(istype(target_turf, /turf/closed/mineral))
var/turf/closed/mineral/M = target_turf
@@ -193,36 +182,25 @@
PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, target_turf)
. = ..()
-
-//AoE
-
-/obj/item/projectile/kinetic/hyper
- name = "kinetic explosion"
-
-/obj/item/projectile/kinetic/hyper/proc/aoe_blast(atom/target)
+/obj/item/projectile/kinetic/proc/aoe_blast(atom/target)
var/turf/target_turf = get_turf(target)
if(!target_turf)
target_turf = get_turf(src)
PoolOrNew(/obj/effect/overlay/temp/explosion/fast, target_turf)
- for(var/T in RANGE_TURFS(1, target_turf) - target_turf)
- if(istype(T, /turf/closed/mineral))
- var/turf/closed/mineral/M = T
- M.gets_drilled(firer)
-
-/obj/item/projectile/kinetic/hyper/on_range()
- aoe_blast()
- ..()
-
-/obj/item/projectile/kinetic/hyper/on_hit(atom/target)
- aoe_blast(target)
- . = ..()
-
-
-
+ if(turf_aoe)
+ for(var/T in RANGE_TURFS(1, target_turf) - target_turf)
+ if(istype(T, /turf/closed/mineral))
+ var/turf/closed/mineral/M = T
+ M.gets_drilled(firer)
+ if(mob_aoe)
+ for(var/mob/living/L in range(1, target_turf) - firer - target)
+ var/armor = L.run_armor_check(def_zone, flag, "", "", armour_penetration)
+ L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor)
+ L << "You're struck by a [name]!"
+ world << "hit [L]"
//Modkits
-
/obj/item/modkit
name = "modification kit"
desc = "An upgrade for kinetic accelerators."
@@ -243,9 +221,7 @@
/obj/item/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
-
-//Types
-
+//Range
/obj/item/modkit/range
name = "range increase"
desc = "Increases the range of a kinetic accelerator when installed. Occupies two mod slots."
@@ -254,8 +230,8 @@
/obj/item/modkit/range/modify_projectile(obj/item/projectile/kinetic/K)
K.range += modifier
-//Damage
+//Damage
/obj/item/modkit/damage
name = "damage increase"
desc = "Increases the damage of kinetic accelerator when installed. Occupies two mod slots."
@@ -264,10 +240,10 @@
/obj/item/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K)
K.damage += modifier
-//Cooldown
+//Cooldown
/obj/item/modkit/cooldown
- name = "coolodown decrease"
+ name = "cooldown decrease"
desc = "Decreases the cooldown of a kinetic accelerator. Occupies two mod slots."
modifier = 2.5
@@ -280,23 +256,29 @@
..()
-//Projectile Type
+//AoE blasts
+/obj/item/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K)
+ K.name = "kinetic explosion"
+ ..()
-/obj/item/modkit/projectile_mod
- name = "hyper shot"
+/obj/item/modkit/aoe/turfs
+ name = "mining explosion"
desc = "Causes the kinetic accelerator to destroy rock in an AoE. Occupies two mod slots."
- var/projectile_type = /obj/item/ammo_casing/energy/kinetic/hyper
-/obj/item/modkit/projectile_mod/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
- KA.ammo_type = list(projectile_type)
- KA.update_ammo_types()
+/obj/item/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K)
+ K.turf_aoe = TRUE
..()
-/obj/item/modkit/projectile_mod/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
- KA.ammo_type = list(/obj/item/ammo_casing/energy/kinetic)
- KA.update_ammo_types()
+/obj/item/modkit/aoe/mobs
+ name = "offensive explosion"
+ desc = "Causes the kinetic accelerator to damage mobs in an AoE. Occupies two mod slots."
+ modifier = 0.25
+
+/obj/item/modkit/aoe/mobs/modify_projectile(obj/item/projectile/kinetic/K)
+ K.mob_aoe += modifier
..()
+
//Indoors
/obj/item/modkit/indoors
name = "decrease pressure penalty"
@@ -307,6 +289,7 @@
/obj/item/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
K.damage_divisor = Clamp(K.damage_divisor - modifier, 0, INFINITY)
+
//Trigger Guard
/obj/item/modkit/trigger_guard
name = "modified trigger guard"
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 22e467962ff..31e87dab6d4 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -220,13 +220,13 @@ other types of metals and chemistry for reagents).
category = list("Mining Designs")
/datum/design/hyperaccelerator
- name = "Hyper-Kinetic Accelerator Mod"
- desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts.."
+ name = "Kinetic Accelerator Mining AoE Mod"
+ desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock."
id = "hypermod"
req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000)
- build_path = /obj/item/modkit/projectile_mod
+ build_path = /obj/item/modkit/aoe/turfs
category = list("Mining Designs")
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index dd15c0338e6..bc1b98e6441 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -648,13 +648,13 @@
construction_time = 120
category = list("Cyborg Upgrade Modules")
-/datum/design/borg_upgrade_hyperka
- name = "Cyborg Upgrade (Hyper-Kinetic Accelerator)"
- id = "borg_upgrade_hyperka"
+/datum/design/borg_upgrade_aoeka
+ name = "Cyborg Upgrade (KA Mining AoE Mod)"
+ id = "borg_upgrade_aoeka"
req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4)
build_type = MECHFAB //Reqs same as human Hyper KA
materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000)
- build_path = /obj/item/borg/upgrade/hyperka
+ build_path = /obj/item/borg/upgrade/aoeka
construction_time = 120
category = list("Cyborg Upgrade Modules")