diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 27f3f7e0ece..b26be27e857 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -58,6 +58,8 @@
/obj/item/gun/ballistic/Initialize()
. = ..()
if (!spawnwithmagazine)
+ bolt_locked = TRUE
+ update_icon()
return
if (!magazine)
magazine = new mag_type(src)
@@ -200,6 +202,9 @@
return
if (istype(A, /obj/item/ammo_casing) || istype(A, /obj/item/ammo_box))
if (bolt_type == BOLT_TYPE_NO_BOLT || internal_magazine)
+ if (chambered && !chambered.BB)
+ chambered.forceMove(drop_location())
+ chambered = null
var/num_loaded = magazine.attackby(A, user, params, TRUE)
if (num_loaded)
to_chat(user, "You load [num_loaded] [cartridge_wording]\s into \the [src].")
@@ -306,7 +311,8 @@
/obj/item/gun/ballistic/examine(mob/user)
..()
- to_chat(user, "It has [get_ammo()] round\s remaining.")
+ var/count_chambered = !((bolt_type == BOLT_TYPE_NO_BOLT) || (bolt_type == BOLT_TYPE_OPEN))
+ to_chat(user, "It has [get_ammo(count_chambered)] round\s remaining.")
if (!chambered)
to_chat(user, "It does not seem to have a round chambered.")
if (bolt_locked)
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index 1138b57dc67..f0c77a52a09 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -4,12 +4,13 @@
/obj/item/gun/ballistic/revolver/grenadelauncher//this is only used for underbarrel grenade launchers at the moment, but admins can still spawn it if they feel like being assholes
desc = "A break-operated grenade launcher."
name = "grenade launcher"
- icon_state = "dshotgun-sawn"
+ icon_state = "dshotgun_sawn"
item_state = "gun"
mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher
fire_sound = 'sound/weapons/grenadelaunch.ogg'
w_class = WEIGHT_CLASS_NORMAL
pin = /obj/item/firing_pin/implant/pindicate
+ bolt_type = BOLT_TYPE_NO_BOLT
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted
pin = /obj/item/firing_pin
@@ -41,10 +42,6 @@
actions_types = list()
casing_ejector = FALSE
-/obj/item/gun/ballistic/automatic/gyropistol/update_icon()
- ..()
- icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]"
-
/obj/item/gun/ballistic/rocketlauncher
name = "rocket propelled grenade launcher"
desc = "A reusable rocket propelled grenade launcher."
@@ -59,7 +56,9 @@
fire_delay = 0
casing_ejector = FALSE
weapon_weight = WEAPON_HEAVY
+ bolt_type = BOLT_TYPE_NO_BOLT
magazine_wording = "rocket"
+ empty_indicator = TRUE
/obj/item/gun/ballistic/rocketlauncher/handle_atom_del(atom/A)
if(A == chambered)
@@ -107,9 +106,6 @@
to_chat(user, "There's no rocket in [src].")
update_icon()
-/obj/item/gun/ballistic/rocketlauncher/update_icon()
- icon_state = "[initial(icon_state)]-[chambered ? "1" : "0"]"
-
/obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user)
user.visible_message("[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!", \
"You aim [src] at the ground to perform a bisnasty rocket jump...")
diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm
index d60d54c1874..2bd902a371c 100644
--- a/code/modules/projectiles/guns/ballistic/rifle.dm
+++ b/code/modules/projectiles/guns/ballistic/rifle.dm
@@ -26,7 +26,7 @@ obj/item/gun/ballistic/rifle/rack(mob/user = null)
bolt_locked = TRUE
update_icon()
return
- drop_bolt()
+ drop_bolt(user)
obj/item/gun/ballistic/rifle/can_shoot()
if (bolt_locked)
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
index 8b358832b00..ddad95468a8 100644
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ b/code/modules/projectiles/guns/ballistic/toy.dm
@@ -1,7 +1,6 @@
/obj/item/gun/ballistic/automatic/toy
name = "foam force SMG"
desc = "A prototype three-round burst toy submachine gun. Ages 8 and up."
- icon = 'icons/obj/guns/toy.dmi'
icon_state = "saber"
item_state = "gun"
mag_type = /obj/item/ammo_box/magazine/toy/smg
@@ -14,6 +13,10 @@
item_flags = NONE
casing_ejector = FALSE
+/obj/item/gun/ballistic/automatic/toy/update_icon()
+ . = ..()
+ add_overlay("[icon_state]_toy")
+
/obj/item/gun/ballistic/automatic/toy/unrestricted
pin = /obj/item/firing_pin
@@ -48,7 +51,6 @@
/obj/item/gun/ballistic/shotgun/toy
name = "foam force shotgun"
desc = "A toy shotgun with wood furniture and a four-shell capacity underneath. Ages 8 and up."
- icon = 'icons/obj/guns/toy.dmi'
force = 0
throwforce = 0
mag_type = /obj/item/ammo_box/magazine/internal/shot/toy
@@ -57,6 +59,10 @@
casing_ejector = FALSE
can_suppress = FALSE
+/obj/item/gun/ballistic/shotgun/toy/update_icon()
+ . = ..()
+ add_overlay("[icon_state]_toy")
+
/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0)
..()
if(chambered && !chambered.BB)
@@ -79,7 +85,6 @@
/obj/item/gun/ballistic/automatic/c20r/toy //This is the syndicate variant with syndicate firing pin and riot darts.
name = "donksoft SMG"
desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up."
- icon = 'icons/obj/guns/toy.dmi'
can_suppress = TRUE
item_flags = NONE
mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot
@@ -93,10 +98,13 @@
/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot
mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot
+/obj/item/gun/ballistic/automatic/c20r/toy/update_icon()
+ . = ..()
+ add_overlay("[icon_state]_toy")
+
/obj/item/gun/ballistic/automatic/l6_saw/toy //This is the syndicate variant with syndicate firing pin and riot darts.
name = "donksoft LMG"
desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up."
- icon = 'icons/obj/guns/toy.dmi'
can_suppress = FALSE
item_flags = NONE
mag_type = /obj/item/ammo_box/magazine/toy/m762/riot
@@ -109,3 +117,7 @@
/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot
mag_type = /obj/item/ammo_box/magazine/toy/m762/riot
+
+/obj/item/gun/ballistic/automatic/l6_saw/toy/update_icon()
+ . = ..()
+ add_overlay("[icon_state]_toy")
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 046cfbf44d7..e2083d8d8f9 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/guns/toy.dmi b/icons/obj/guns/toy.dmi
index f41c2897463..01240245903 100644
Binary files a/icons/obj/guns/toy.dmi and b/icons/obj/guns/toy.dmi differ