diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 491d21155c7..08b17ec5ddb 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -334,6 +334,7 @@ /obj/item/weapon/gun/ballistic/automatic/pistol/deagle/ctf desc = "This looks like it could really hurt in melee." force = 75 + mag_type = /obj/item/ammo_box/magazine/m50/ctf /obj/item/weapon/gun/ballistic/automatic/pistol/deagle/ctf/dropped() . = ..() @@ -343,6 +344,20 @@ if(isturf(loc)) qdel(src) +/obj/item/ammo_box/magazine/m50/ctf + ammo_type = /obj/item/ammo_casing/a50/ctf + +/obj/item/ammo_casing/a50/ctf + projectile_type = /obj/item/projectile/bullet/ctf + +/obj/item/projectile/bullet/ctf + damage = 0 + +/obj/item/projectile/bullet/ctf/prehit(atom/target) + if(is_ctf_target(target)) + damage = 60 + . = ..() + /obj/item/weapon/gun/ballistic/automatic/laser/ctf mag_type = /obj/item/ammo_box/magazine/recharge/ctf desc = "This looks like it could really hurt in melee." @@ -364,9 +379,23 @@ projectile_type = /obj/item/projectile/beam/ctf /obj/item/projectile/beam/ctf - damage = 150 + damage = 0 icon_state = "omnilaser" +/obj/item/projectile/beam/ctf/prehit(atom/target) + if(is_ctf_target(target)) + damage = 150 + . = ..() + +/proc/is_ctf_target(atom/target) + . = FALSE + if(istype(target, /obj/structure/barricade/security/ctf)) + . = TRUE + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit/shielded/ctf)) + . = TRUE + // RED TEAM GUNS /obj/item/weapon/gun/ballistic/automatic/laser/ctf/red diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index e3fed94d8a5..cfaf52e21f9 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1234,7 +1234,6 @@ H.show_message("The radiation beam dissipates harmlessly through your body.") if(/obj/item/projectile/energy/florayield) H.show_message("The radiation beam dissipates harmlessly through your body.") - return /datum/species/proc/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) // called before a projectile hit diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index b508fb85957..51799b0d8d5 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -74,6 +74,9 @@ else //when a limb is missing the damage is actually passed to the chest return "chest" +/obj/item/projectile/proc/prehit(atom/target) + return + /obj/item/projectile/proc/on_hit(atom/target, blocked = 0) var/turf/target_loca = get_turf(target) if(!isliving(target)) @@ -145,6 +148,7 @@ var/turf/target_turf = get_turf(A) + prehit(A) var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null if(permutation == -1 || forcedodge)// the bullet passes through a dense object! loc = target_turf @@ -158,6 +162,7 @@ mobs_list += L if(mobs_list.len) var/mob/living/picked_mob = pick(mobs_list) + prehit(picked_mob) picked_mob.bullet_act(src, def_zone) qdel(src) @@ -168,6 +173,7 @@ if(!log_override && firer && original) add_logs(firer, original, "fired at", src, " [get_area(src)]") if(direct_target) + prehit(direct_target) direct_target.bullet_act(src, def_zone) qdel(src) return