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