Kinnetic Accelerator fixes and changes (#6323)

KAs now account for atmosphere the shot is fired at. Reducing damage if inside of atmosphere. Maximum damage for KAs to living being is capped at 50 per shot. Fixes #6318

KAs AOE now damages anything in its range. It looses 25% of damage per tile from the center out of center tile damage(100 -> 75 -> 50 -> 25 -> 0...).

Mechs KAs damage was increased, and AOE of 5(That is a lot!) tiles was added. Keep in mind that AOE will damage mech itself if in range. Regular mech KA damage is now 40 per shot. Burst KA damage is now 25 per shot(that is 75 in total).

Bumps Travis Byond version to 512.1467 since it includes good fixes for DD and client.
This commit is contained in:
Mykhailo Bykhovtsev
2019-04-26 15:59:02 -07:00
committed by Erki
parent 3482a84679
commit abfe06afbf
4 changed files with 67 additions and 15 deletions

View File

@@ -130,4 +130,4 @@
projectiles_per_shot = 3
fire_cooldown = 3
equip_cooldown = 30
projectile = /obj/item/projectile/kinetic/mech/burst
projectile = /obj/item/projectile/kinetic/mech/burst

View File

@@ -8,37 +8,45 @@
range = 5
var/pressure_decrease = 0.25
var/aoe_s = 1 // aoe scale
/obj/item/projectile/kinetic/mech
damage = 15
damage = 40
aoe = 5
/obj/item/projectile/kinetic/mech/burst
damage = 10
damage = 25
/obj/item/projectile/kinetic/on_impact(var/atom/A,var/aoe_scale = 1, var/damage_scale = 1)
/obj/item/projectile/kinetic/Collide(var/atom/A)
var/turf/target_turf = get_turf(A)
if(!target_turf)
target_turf = get_turf(src)
if(istype(target_turf))
var/datum/gas_mixture/environment = target_turf.return_air()
damage *= max(1 - (environment.return_pressure()/100)*0.75,0)
if(isliving(A)) //Never do more than 15 damage to a living being per shot.
damage = min(damage,15)
strike_thing(A,aoe*aoe_scale,damage)
if(isliving(A)) //Never do more than 50 damage to a living being per shot.
damage = min(damage, 50)
. = ..()
/obj/item/projectile/kinetic/proc/strike_thing(atom/target,var/new_aoe,var/damage_scale)
/obj/item/projectile/kinetic/on_impact(var/atom/A)
var/turf/target_turf = get_turf(A)
if(!target_turf)
target_turf = get_turf(src)
if(istype(target_turf))
strike_thing(A, aoe * aoe_s)
/obj/item/projectile/kinetic/proc/strike_thing(atom/target, var/new_aoe)
var/turf/target_turf = get_turf(target)
if(istype(target_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = target_turf
M.kinetic_hit(damage,dir)
M.kinetic_hit(damage, dir)
new /obj/effect/overlay/temp/kinetic_blast(target_turf)
if(new_aoe > 0)
for(var/new_target in orange(new_aoe, target_turf))
src.on_impact(new_target,0,0.5)
aoe_s = 0
damage = max(initial(damage) - initial(damage) * get_dist(new_target, target_turf) * 0.25, 0)
src.Collide(new_target)
CHECK_TICK