diff --git a/baystation12.dme b/baystation12.dme index 6810ce9c32..06ddf79d43 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1338,6 +1338,7 @@ #include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm" #include "code\modules\projectiles\guns\projectile\shotgun.dm" +#include "code\modules\projectiles\guns\projectile\sniper.dm" #include "code\modules\projectiles\projectile\animate.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 3d29aad51f..ef6eb1d18e 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -219,6 +219,20 @@ new /obj/item/ammo_casing/shotgun/stunshell(src) new /obj/item/ammo_casing/shotgun/stunshell(src) +/obj/item/weapon/storage/box/heavysniperammo + name = "box of 14.5mm AP shells" + desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." + + New() + ..() + new /obj/item/ammo_casing/a145(src) + new /obj/item/ammo_casing/a145(src) + new /obj/item/ammo_casing/a145(src) + new /obj/item/ammo_casing/a145(src) + new /obj/item/ammo_casing/a145(src) + new /obj/item/ammo_casing/a145(src) + new /obj/item/ammo_casing/a145(src) + /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 02850db6e0..d31ba64814 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -18,12 +18,12 @@ BB = new projectile_type(src) pixel_x = rand(-10, 10) pixel_y = rand(-10, 10) - set_dir(pick(cardinal)) //removes the projectile from the ammo casing /obj/item/ammo_casing/proc/expend() . = BB BB = null + set_dir(pick(cardinal)) //spin spent casings update_icon() /obj/item/ammo_casing/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -118,6 +118,7 @@ user << "You empty [src]." for(var/obj/item/ammo_casing/C in stored_ammo) C.loc = user.loc + C.set_dir(pick(cardinal)) stored_ammo.Cut() update_icon() diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 9de5fc87c0..0fb5b56d58 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -114,7 +114,9 @@ /obj/item/ammo_casing/a145 name = "\improper AP shell casing" desc = "A 14.5mm AP shell." - icon_state = "slshell" + icon_state = "lcasing" + spent_icon = "lcasing-spent" + caliber = "14.5mm" projectile_type = /obj/item/projectile/bullet/rifle/a145 /obj/item/ammo_casing/rocket diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index b8e1559445..a515bde758 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -98,6 +98,7 @@ playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) user.visible_message("[user] draws back the bolt on [src], clicking it into place.", "You draw back the bolt on the [src], loading the spring!") next = darts[1] + user.next_move = world.time + 4 /obj/item/weapon/gun/launcher/syringe/attack_hand(mob/living/user as mob) if(loc == user) diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index a54e3b5867..93d355df8b 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -9,11 +9,14 @@ origin_tech = "combat=8;materials=2;syndicate=8" caliber = "14.5mm" recoil = 2 //extra kickback + //fire_sound = 'sound/weapons/sniper.ogg' handle_casings = HOLD_CASINGS load_method = SINGLE_CASING max_shells = 1 ammo_type = /obj/item/ammo_casing/a145 - accuracy = -1 //made this not as bad as the LWAP's penalty because only one shot + //+2 accuracy over the LWAP because only one shot + accuracy = -1 + scoped_accuracy = 2 var/bolt_open = 0 /obj/item/weapon/gun/projectile/heavysniper/update_icon() @@ -36,11 +39,12 @@ else user << "You work the bolt closed." bolt_open = 0 + user.next_move = world.time + 4 //prevent spam, also makes having to work the bolt more of a drawback update_icon() /obj/item/weapon/gun/projectile/heavysniper/special_check(mob/user) if(bolt_open) - user << "You can't fire [src] with the bolt open!" + user << "You can't fire [src] while the bolt is open!" return 0 return ..() @@ -58,11 +62,6 @@ set category = "Object" set name = "Use Scope" set popup_menu = 1 - + toggle_scope(2.0) -//need to override zoom() so that accuracy is properly reset even if we move while zoomed in. -/obj/item/weapon/gun/projectile/heavysniper/zoom() - ..() - if(zoom) - accuracy -= initial(accuracy) //remove the accuracy penalty if zoomed in \ No newline at end of file diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 03e2489918..6176a48569 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -128,7 +128,7 @@ xo = new_x - starting_loc.x //Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying. -/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier = -30) +/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) //accuracy bonus from aiming if (istype(shot_from, /obj/item/weapon/gun)) //If you aim at someone beforehead, it'll hit more often. var/obj/item/weapon/gun/daddy = shot_from //Kinda balanced by fact you need like 2 seconds to aim @@ -137,7 +137,7 @@ miss_modifier += -30 //roll to-hit - var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, max(miss_modifier + 15*distance, 0)) + var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, max(miss_modifier + 15*(distance-2), 0)) if(!hit_zone) visible_message("\The [src] misses [target_mob] narrowly!") return 0 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 6a04892ee1..cb7905d880 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -25,22 +25,23 @@ damage *= 0.7 //squishy mobs absorb KE return 1 - if(istype(A, /obj/machinery) || istype(A, /obj/structure)) - var/chance = 15 - if(istype(A, /turf/simulated/wall)) - var/turf/simulated/wall/W = A - chance = round(damage/W.damage_cap*100) - else if(istype(A, /obj/machinery/door)) - var/obj/machinery/door/D = A - chance = round(damage/D.maxhealth*100) - else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder)) - chance = 100 - - if(prob(chance)) - if(A.opacity) - //display a message so that people on the other side aren't so confused - A.visible_message("\The [src] pierces through \the [A]!") - return 1 + var/chance = 0 + if(istype(A, /turf/simulated/wall)) + var/turf/simulated/wall/W = A + chance = round(damage/W.damage_cap*150) + else if(istype(A, /obj/machinery/door)) + var/obj/machinery/door/D = A + chance = round(damage/D.maxhealth*100) + else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder)) + chance = 100 + else if(istype(A, /obj/machinery) || istype(A, /obj/structure)) + chance = 15 + + if(prob(chance)) + if(A.opacity) + //display a message so that people on the other side aren't so confused + A.visible_message("\The [src] pierces through \the [A]!") + return 1 return 0 @@ -125,7 +126,9 @@ penetrating = 1 /obj/item/projectile/bullet/rifle/a145 - damage = 90 + damage = 80 + stun = 3 + weaken = 3 penetrating = 5 /* Miscellaneous */ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index e47e53e736..d84132a60c 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 1e03bbe0b7..a3a7fbc357 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/sound/weapons/gunshot_smg2.ogg b/sound/weapons/gunshot_smg2.ogg new file mode 100644 index 0000000000..faba955f52 Binary files /dev/null and b/sound/weapons/gunshot_smg2.ogg differ