From e20e03562ad16c8e937b14a2d00144355b948a97 Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 12 Nov 2015 19:45:50 +0100 Subject: [PATCH] Fixes your shield blocking the bullets when committing suicide with a gun. Merged kill_count and range var into one var/range for obj/item/projectile. Simplified projectile/proc/Range(). Fixes timestoped projectiles still calling Range() and thus being deleted despite being stopped. Fixes projectile being invisible when on the first tile in front of the shooter (which meant no sprite showing when shooting a target 1 tile away) Simplifies kinetic/Range() --- code/game/objects/structures/reflector.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 41 ++++++++++--------- code/modules/projectiles/projectile.dm | 20 +++------ code/modules/projectiles/projectile/beams.dm | 2 +- .../modules/projectiles/projectile/special.dm | 8 ++-- 5 files changed, 32 insertions(+), 41 deletions(-) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 335c3c0822b..72f0435425b 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -30,7 +30,7 @@ P.current = reflector_turf P.yo = reflect_turf.y - reflector_turf.y P.xo = reflect_turf.x - reflector_turf.x - P.kill_count = 50 //Keep the projectile healthy as long as its bouncing off things + P.range = initial(P.range) //Keep the projectile healthy as long as its bouncing off things new_dir = 0 return - 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 63d4d57afae..e5e66dd7e27 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -40,29 +40,30 @@ emp_act dna.species.on_hit(proj_type, src) /mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone) - if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) - if(check_reflect(def_zone)) // Checks if you've passed a reflection% check - visible_message("The [P.name] gets reflected by [src]!", \ - "The [P.name] gets reflected by [src]!") - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) + if(!(P.original == src && P.firer == src)) //can't block or reflect when shooting yourself + if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) + if(check_reflect(def_zone)) // Checks if you've passed a reflection% check + visible_message("The [P.name] gets reflected by [src]!", \ + "The [P.name] gets reflected by [src]!") + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(src) - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.current = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x + // redirect the projectile + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.current = curloc + P.firer = src + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x - return -1 // complete projectile permutation + return -1 // complete projectile permutation - if(check_shields(P.damage, "the [P.name]", P, 0, P.armour_penetration)) - P.on_hit(src, 100, def_zone) - return 2 + if(check_shields(P.damage, "the [P.name]", P, 0, P.armour_penetration)) + P.on_hit(src, 100, def_zone) + return 2 return (..(P , def_zone)) /mob/living/carbon/human/proc/check_reflect(def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on the reflection chance of the object diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 46f44c40a4a..0828219aebf 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -25,7 +25,7 @@ var/nodamage = 0 //Determines if the projectile will skip any damage inflictions var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb var/projectile_type = "/obj/item/projectile" - var/kill_count = 50 //This will de-increment every step. When 0, it will delete the projectile. + var/range = 50 //This will de-increment every step. When 0, it will delete the projectile. //Effects var/stun = 0 var/weaken = 0 @@ -39,19 +39,15 @@ var/jitter = 0 var/forcedodge = 0 // 1 to pass solid objects, 2 to pass solid turfs (results in bugs, bugs and tons of bugs) - var/range = 0 /obj/item/projectile/New() permutated = list() return ..() /obj/item/projectile/proc/Range() - if(range) - range-- - if(range <= 0) - on_range() - else - return + range-- + if(range <= 0 && loc) + on_range() /obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range qdel(src) @@ -125,13 +121,9 @@ /obj/item/projectile/proc/fire() - spawn() + spawn(1) while(loc) - if(kill_count < 1) - qdel(src) - return if(!paused) - kill_count-- if((!( current ) || loc == current)) current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) step_towards(src, current) @@ -139,7 +131,7 @@ if(loc == get_turf(original)) if(!(original in permutated)) Bump(original, 1) - Range() + Range() sleep(1) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d1c1941f9e3..043ba75060f 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -30,7 +30,7 @@ icon_state = "xray" damage = 15 irradiate = 30 - kill_count = 15 + range = 15 forcedodge = 1 /obj/item/projectile/beam/disabler diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 1b7b61b5389..3d3c0b62c70 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -130,11 +130,9 @@ obj/item/projectile/kinetic/New() damage *= 4 ..() -/obj/item/projectile/kinetic/Range() - range-- - if(range <= 0) - new /obj/item/effect/kinetic_blast(src.loc) - qdel(src) +/obj/item/projectile/kinetic/on_range() + new /obj/item/effect/kinetic_blast(src.loc) + ..() /obj/item/projectile/kinetic/on_hit(atom/target) . = ..()