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")