diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index fa17c0e67b7..1bcc32a2c6c 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -8,6 +8,7 @@
matter = list("metal" = 1000)
recoil = 1
+ var/eject_casings = 1 //experimental: for guns that don't eject casings, like revolvers.
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
//For SINGLE_CASING or SPEEDLOADER guns
@@ -45,10 +46,19 @@
ammo_magazine.stored_ammo -= C
if(istype(C))
- C.loc = get_turf(src) //Eject casing onto ground.
+ if(eject_casings)
+ C.loc = get_turf(src) //Eject casing onto ground.
+ else
+ //cycle it to the end
+ if(ammo_magazine)
+ ammo_magazine.stored_ammo += C
+ else
+ loaded += C
+
if(C.BB)
in_chamber = C.BB
C.BB.loc = src //Set projectile loc to gun.
+ C.BB = null
return 1
return 0
@@ -63,12 +73,16 @@
switch(AM.mag_type)
if(MAGAZINE)
if(ammo_magazine)
- return //already a magazine here
+ user << "[src] already has a magazine loaded!" //already a magazine here
+ return
user.remove_from_mob(AM)
AM.loc = src
ammo_magazine = AM
user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src]!")
if(SPEEDLOADER)
+ if(loaded.len >= max_shells)
+ user << "[src] is full!"
+ return
var/count = 0
for(var/obj/item/ammo_casing/C in AM.stored_ammo)
if(loaded.len >= max_shells)
@@ -86,12 +100,15 @@
else if(istype(A, /obj/item/ammo_casing))
var/obj/item/ammo_casing/C = A
- if(!(load_method & SINGLE_CASING) || caliber != C.caliber || loaded.len >= max_shells)
- return //incompatible or full
+ if(!(load_method & SINGLE_CASING) || caliber != C.caliber)
+ return //incompatible
+ if(loaded.len >= max_shells)
+ user << "[src] is full!"
+ return
user.remove_from_mob(C)
C.loc = src
- loaded += C
+ loaded.Insert(C, 1) //add to the head of the list
user.visible_message("[user] inserts \a [C] into [src].", "You insert \a [C] into [src]!")
update_icon()
return
@@ -125,7 +142,7 @@
update_icon()
else
- user << "There's nothing loaded in [src]!"
+ user << "[src] is empty!"
/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob)
load_ammo(A, user)