diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 10d86aa4b2..6a0ad704a2 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -605,8 +605,12 @@ var/list/turret_icons if(!raised) //the turret has to be raised in order to fire - makes sense, right? return - update_icon() + + //targeting check, can we hit them? + if(!check_trajectory(target, src)) + return + var/obj/item/projectile/A if(emagged || lethal) A = new eprojectile(loc) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 9feebbd64b..d60169d836 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -385,7 +385,7 @@ return //cannot shoot yourself if(istype(A, /obj/item/projectile)) return - if(istype(A, /mob/living)) + if(istype(A, /mob/living) || istype(A, /obj/mecha) || istype(A, /obj/vehicle)) result = 2 //We hit someone, return 1! return result = 1 @@ -424,15 +424,14 @@ if(istype(M)) return 1 -/proc/check_trajectory(atom/target as mob, var/mob/living/user as mob, var/pass_flags=PASSTABLE|PASSGLASS|PASSGRILLE, flags=null) //Checks if you can hit them or not. - if(!istype(target) || !istype(user)) +/proc/check_trajectory(atom/target as mob|obj, atom/firer as mob|obj, var/pass_flags=PASSTABLE|PASSGLASS|PASSGRILLE, flags=null) //Checks if you can hit them or not. + if(!istype(target) || !istype(firer)) return 0 - var/obj/item/projectile/test/trace = new /obj/item/projectile/test(get_step_to(user,target)) //Making the test.... + var/obj/item/projectile/test/trace = new /obj/item/projectile/test(get_step_to(firer,target)) //Making the test.... trace.target = target if(!isnull(flags)) trace.flags = flags //Set the flags... trace.pass_flags = pass_flags //And the pass flags to that of the real projectile... - trace.firer = user var/output = trace.process() //Test it! qdel(trace) //No need for it anymore return output //Send it back to the gun!