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)