diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 5cd6c3bac50..ba89628d03e 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -32,6 +32,16 @@ multiple_sprites = 1 +/obj/item/ammo_magazine/mc9mm + name = "magazine (9mm)" + icon_state = "9x19p" + origin_tech = "combat=2" + ammo_type = "/obj/item/ammo_casing/c9mm" + max_ammo = 8 + multiple_sprites = 1 + +/obj/item/ammo_magazine/mc9mm/empty + max_ammo = 0 /obj/item/ammo_magazine/c9mm name = "Ammunition Box (9mm)" diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 330eb2fbe7c..112b7d81f69 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -55,9 +55,10 @@ update_icon() ..() - overlays = null if(empty_mag) - overlays += "c20r-[round(loaded.len,4)]" + icon_state = "c20r-[round(loaded.len,4)]" + else + icon_state = "c20r" return @@ -68,6 +69,7 @@ icon_state = "l6closed100" item_state = "l6closedmag" w_class = 4 + slot_flags = 0 max_shells = 50 caliber = "a762" origin_tech = "combat=5;materials=1;syndicate=2" @@ -79,55 +81,57 @@ var/mag_inserted = 1 - attack_self(mob/user as mob) - cover_open = !cover_open - user << "You [cover_open ? "open" : "close"] [src]'s cover." +/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob) + cover_open = !cover_open + user << "You [cover_open ? "open" : "close"] [src]'s cover." + update_icon() + + +/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon() + icon_state = "l6[cover_open ? "open" : "closed"][mag_inserted ? round(loaded.len, 25) : "-empty"]" + + +/obj/item/weapon/gun/projectile/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays + if(cover_open) + user << "[src]'s cover is open! Close it before firing!" + else + ..() update_icon() - update_icon() - icon_state = "l6[cover_open ? "open" : "closed"][mag_inserted ? round(loaded.len, 25) : "-empty"]" - - - afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays - if(cover_open) - user << "[src]'s cover is open! Close it before firing!" - else - ..() - update_icon() - - - attack_hand(mob/user as mob) - if(loc != user) - ..() - return //let them pick it up - if(!cover_open) - user << "[src]'s cover is closed! You can't remove the magazine!" - else if (cover_open && mag_inserted) - //drop the mag - empty_mag = new /obj/item/ammo_magazine/a762(src) - empty_mag.stored_ammo = loaded - empty_mag.icon_state = "a762-[round(loaded.len, 10)]" - empty_mag.desc = "There are [loaded.len] shells left!" - empty_mag.loc = get_turf(src.loc) - user.put_in_hands(empty_mag) - empty_mag = null - mag_inserted = 0 - loaded = list() - update_icon() - user << "You remove the magazine from [src]." - - - /obj/item/weapon/gun/projectile/automatic/l6_saw/attackby(var/obj/item/A as obj, mob/user as mob) - if(!cover_open) - user << "The [src]'s cover is closed! You can't insert a new mag!" - else if (cover_open && mag_inserted) - user << "The [src] already has a magazine inserted!" - else if (cover_open && !mag_inserted) - mag_inserted = 1 - user << "You insert the magazine!" - update_icon() +/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_hand(mob/user as mob) + if(loc != user) ..() + return //let them pick it up + if(!cover_open) + ..() + else if(cover_open && mag_inserted) + //drop the mag + empty_mag = new /obj/item/ammo_magazine/a762(src) + empty_mag.stored_ammo = loaded + empty_mag.icon_state = "a762-[round(loaded.len, 10)]" + empty_mag.desc = "There are [loaded.len] shells left!" + empty_mag.loc = get_turf(src.loc) + user.put_in_hands(empty_mag) + empty_mag = null + mag_inserted = 0 + loaded = list() + update_icon() + user << "You remove the magazine from [src]." + + +/obj/item/weapon/gun/projectile/automatic/l6_saw/attackby(var/obj/item/A as obj, mob/user as mob) + if(!cover_open) + user << "[src]'s cover is closed! You can't insert a new mag!" + return + else if(cover_open && mag_inserted) + user << "[src] already has a magazine inserted!" + return + else if(cover_open && !mag_inserted) + mag_inserted = 1 + user << "You insert the magazine!" + update_icon() + ..() /* The thing I found with guns in ss13 is that they don't seem to simulate the rounds in the magazine in the gun. diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 5b218fe96a2..b12625eee3b 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/silenced - name = "Silenced Pistol" + name = "silenced pistol" desc = "A small, quiet, easily concealable gun. Uses .45 rounds." icon_state = "silenced_pistol" w_class = 3.0 @@ -12,7 +12,7 @@ /obj/item/weapon/gun/projectile/deagle - name = "Desert Eagle" + name = "desert eagle" desc = "A robust handgun that uses .50 AE ammo" icon_state = "deagle" force = 14.0 @@ -37,7 +37,6 @@ return /obj/item/weapon/gun/projectile/deagle/gold - name = "Desert Eagle" desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." icon_state = "deagleg" item_state = "deagleg" @@ -45,7 +44,6 @@ /obj/item/weapon/gun/projectile/deagle/camo - name = "Desert Eagle" desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo." icon_state = "deaglecamo" item_state = "deagleg" @@ -53,7 +51,7 @@ /obj/item/weapon/gun/projectile/gyropistol - name = "Gyrojet Pistol" + name = "gyrojet pistol" desc = "A bulky pistol designed to fire self propelled rounds" icon_state = "gyropistol" max_shells = 8 @@ -84,4 +82,65 @@ icon_state = "gyropistolloaded" else icon_state = "gyropistol" - return \ No newline at end of file + return + +/obj/item/weapon/gun/projectile/pistol + name = "\improper Stetckov pistol" + desc = "A small, easily concealable gun. Uses 9mm rounds." + icon_state = "pistol" + w_class = 2 + max_shells = 8 + caliber = "9mm" + silenced = 0 + origin_tech = "combat=2;materials=2;syndicate=2" + ammo_type = "/obj/item/ammo_casing/c9mm" + load_method = 2 + +/obj/item/weapon/gun/projectile/pistol/New() + ..() + empty_mag = new /obj/item/ammo_magazine/mc9mm/empty(src) + return + +/obj/item/weapon/gun/projectile/pistol/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) + ..() + if(!loaded.len && empty_mag) + empty_mag.loc = get_turf(src.loc) + empty_mag = null + return + +/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob) + if(loc == user) + if(silenced) + user << "You unscrew [silenced] from [src]." + user.put_in_hands(silenced) + silenced = 0 + w_class = 2 + update_icon() + return + ..() + + +/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/silencer)) + user.drop_item() + user << "You screw [I] onto [src]." + silenced = I //dodgy? + w_class = 3 + I.loc = src //put the silencer into the gun + update_icon() + return + ..() + +/obj/item/weapon/gun/projectile/pistol/update_icon() + ..() + if(silenced) + icon_state = "pistol-silencer" + else + icon_state = "pistol" + +/obj/item/weapon/silencer + name = "silencer" + desc = "a silencer" + icon = 'icons/obj/gun.dmi' + icon_state = "silencer" + w_class = 2 \ No newline at end of file diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 8c1ad9ff6f1..95d88d303af 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 cc96ed334b7..0c40065fe17 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ