diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 6d8c40c16c..79f4d8f0bb 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -166,12 +166,12 @@ //roll to-hit miss_modifier = max(15*(distance-2) - round(15*accuracy) + miss_modifier, 0) var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss - + var/result = PROJECTILE_FORCE_MISS if(hit_zone) def_zone = hit_zone //set def_zone, so if the projectile ends up hitting someone else later (to be implemented), it is more likely to hit the same part result = target_mob.bullet_act(src, def_zone) - + if(result == PROJECTILE_FORCE_MISS) visible_message("\The [src] misses [target_mob] narrowly!") return 0 @@ -303,6 +303,7 @@ if(loc == get_turf(original)) if(!(original in permutated)) if(Bump(original)) + qdel(src) return if(first_step) @@ -314,9 +315,6 @@ if(!hitscan) sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon -/obj/item/projectile/proc/process_step(first_step = 0) - return - /obj/item/projectile/proc/before_move() return diff --git a/code/modules/spells/spell_projectile.dm b/code/modules/spells/spell_projectile.dm index f3e69b9b6c..c94131b252 100644 --- a/code/modules/spells/spell_projectile.dm +++ b/code/modules/spells/spell_projectile.dm @@ -6,6 +6,7 @@ var/spell/targeted/projectile/carried + penetrating = 0 kill_count = 10 //set by the duration of the spell var/proj_trail = 0 //if it leaves a trail @@ -15,18 +16,15 @@ var/list/trails = new() /obj/item/projectile/spell_projectile/Destroy() - ..() for(var/trail in trails) qdel(trail) + carried = null + return ..() /obj/item/projectile/spell_projectile/ex_act() return /obj/item/projectile/spell_projectile/before_move() - if(carried) - var/list/targets = carried.choose_prox_targets(user = carried.holder, spell_holder = src) - if(targets.len) - src.prox_cast(targets) if(proj_trail && src && src.loc) //pretty trails var/obj/effect/overlay/trail = PoolOrNew(/obj/effect/overlay, src.loc) trails += trail @@ -44,19 +42,14 @@ return /obj/item/projectile/spell_projectile/Bump(var/atom/A) - if(loc) + if(loc && carried) prox_cast(carried.choose_prox_targets(user = carried.holder, spell_holder = src)) - return + return 1 /obj/item/projectile/spell_projectile/on_impact() - if(loc) + if(loc && carried) prox_cast(carried.choose_prox_targets(user = carried.holder, spell_holder = src)) - return + return 1 /obj/item/projectile/spell_projectile/seeking name = "seeking spell" - -/obj/item/projectile/spell_projectile/seeking/process_step() - ..() - if(original && !isnull(src.loc)) - current = original //update the target