diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 252d9e0bc58d..76fc01723465 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -39,6 +39,7 @@ var/obj/item/device/flashlight/F = null var/can_flashlight = 0 + var/list/upgrades = list() /obj/item/weapon/gun/New() ..() diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index c2b6e49039bf..7804f844e223 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -115,10 +115,45 @@ cell_type = "/obj/item/weapon/stock_parts/cell/emproof" var/overheat = 0 var/recent_reload = 1 + var/range_add = 0 + var/overheat_time = 20 + upgrades = list("diamond" = 0, "screwdriver" = 0, "plasma" = 0) + + +/obj/item/weapon/gun/energy/kinetic_accelerator/newshot() + ..() + if(chambered && chambered.BB) + var/obj/item/projectile/kinetic/charge = chambered.BB + charge.range += range_add + + +/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/screwdriver) && upgrades["screwdriver"] < 3) + upgrades["screwdriver"]++ + overheat_time -= 1 + user << "You tweak [src]'s thermal exchanger." + + + else if(istype(W, /obj/item/stack)) + var/obj/item/stack/S = W + + if(istype(S, /obj/item/stack/sheet/mineral/diamond) && upgrades["diamond"] < 3) + upgrades["diamond"]++ + overheat_time -= 3 + user << "You upgrade [src]'s thermal exchanger with diamonds." + S.use(1) + + if(istype(S, /obj/item/stack/sheet/mineral/plasma) && upgrades["plasma"] < 2) + upgrades["plasma"]++ + range_add++ + user << "You upgrade [src]'s accelerating chamber with plasma." + if(prob(5 * (range_add + 1) * (range_add + 1)) && power_supply) + power_supply.rigged = 1 // This is dangerous! + S.use(1) /obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() overheat = 1 - spawn(20) + spawn(overheat_time) overheat = 0 recent_reload = 0 ..() diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 05a9ad91036d..7de39ceb6557 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -114,13 +114,19 @@ obj/item/projectile/kinetic/New() var/pressure = environment.return_pressure() if(pressure < 50) name = "full strength kinetic force" - damage = 30 + damage *= 2 ..() /obj/item/projectile/kinetic/Range() range-- if(range <= 0) new /obj/item/effect/kinetic_blast(src.loc) + for(var/turf/T in range(1, src.loc)) + if(!istype(T, /turf/simulated/wall)) + T.ex_act(3) + + for(var/obj/structure/S in range(1, src.loc)) + S.ex_act(3) qdel(src) /obj/item/projectile/kinetic/on_hit(atom/target) @@ -129,6 +135,13 @@ obj/item/projectile/kinetic/New() var/turf/simulated/mineral/M = target_turf M.gets_drilled(firer) new /obj/item/effect/kinetic_blast(target_turf) + if(isturf(target) || istype(target, /obj/structure)) + for(var/turf/T in range(1, target_turf)) + if(!istype(T, /turf/simulated/wall)) + T.ex_act(3) + + for(var/obj/structure/S in range(1, target_turf)) + S.ex_act(3) ..() /obj/item/effect/kinetic_blast