diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 2aba6a68ba6..090205fff23 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -512,28 +512,22 @@
/obj/item/weapon/gun/shotgun
name = "shotgun"
icon_state = "shotgun"
+ var/shellsmax
+ var/index
+ var/list/shells = list() //At least, it's better than two/eight vars, Uhangi! -- Barhandar
w_class = 3.0 //should go on back now, has no sprite for that atm because I can't sprite for shit -- Urist
force = 7.0
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
- var/pumped = 0.0
- var/s1 = 0.0
- var/s2 = 0.0
+ var/pumped = 0
+ shellsmax = 2
-/obj/item/weapon/gun/combatshotgun
+/obj/item/weapon/gun/shotgun/combat
name = "combat shotgun"
icon_state = "cshotgun"
w_class = 4.0
force = 12.0
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
- var/pumped = 0.0
- var/s1 = 0.0 // this can probably done in a much more efficient way, but who gives a fuck
- var/s2 = 0.0
- var/s3 = 0.0
- var/s4 = 0.0
- var/s5 = 0.0
- var/s6 = 0.0
- var/s7 = 0.0
- var/s8 = 0.0
+ shellsmax = 8
/obj/item/weapon/gun/energy
name = "energy"
diff --git a/code/game/objects/items/weapons/guns_ammo.dm b/code/game/objects/items/weapons/guns_ammo.dm
index be9fe93d795..1541d63dedc 100644
--- a/code/game/objects/items/weapons/guns_ammo.dm
+++ b/code/game/objects/items/weapons/guns_ammo.dm
@@ -247,72 +247,54 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
// SHOTGUN
/obj/item/weapon/gun/shotgun/examine()
- set src in usr
+ set src in usr // Maybe this is a reason for comment lower. -- Barhandar
- if (src.s1 >= 1 && src.s2 >= 1)
- src.desc = "There are 2 shells left!"
- if (src.s1 >= 1 && src.s2 == 0)
- src.desc = "There is 1 shell left!"
- if (src.s1 == 0 && src.s2 == 0)
- src.desc = "There are no shells left!"
+ src.desc = text("There are [src.index] shell\s left! Uses 12 gauge and beanbag.") //Doesn't shows the desc for some reason. -- Barhandar
..()
return
-// if s1 is 0, not loaded. 1 is beanbag, 2 is 12gauge. same as s2.
+//0, not loaded. 1, beanbag, 2, 12gauge, 3, blank.
/obj/item/weapon/gun/shotgun/attackby(obj/item/weapon/A as obj, mob/user as mob)
-
if (istype(A, /obj/item/weapon/ammo/bshell))
//var/obj/item/weapon/ammo/bshell/A = B
- if ((src.s1 > 0 && src.s2 > 0))
+ if (index == src.shellsmax) //...than sorry.
user << "\blue It's already fully loaded!"
return 1
else
user << "\blue You load the shell into the shotgun."
- if (src.s1 == 0)
- del(A)
- src.s1 = 1
- return 1
- else if (src.s2 == 0)
- del(A)
- src.s2 = 1
- return 1
+ index++
+ src.shells.len = index
+ del(A)
+ src.shells[index] = 1
return 1
return 1
else if (istype(A, /obj/item/weapon/ammo/gshell))
//var/obj/item/weapon/ammo/gshell/A = B
- if ((src.s1 > 0 && src.s2 > 0))
+ if (index == src.shellsmax)
user << "\blue It's already fully loaded!"
return 1
else
user << "\blue You load the shell into the shotgun."
- if (src.s1 == 0)
- del(A)
- src.s1 = 2
- return 1
- else if (src.s2 == 0)
- del(A)
- src.s2 = 2
- return 1
+ index++
+ src.shells.len = index
+ del(A)
+ src.shells[index] = 2
return 1
return 1
else if (istype(A, /obj/item/weapon/ammo/blshell))
//var/obj/item/weapon/ammo/gshell/A = B
- if ((src.s1 > 0 && src.s2 > 0))
+ if (index == src.shellsmax)
user << "\blue It's already fully loaded!"
return 1
else
user << "\blue You load the shell into the shotgun."
- if (src.s1 == 0)
- del(A)
- src.s1 = 3
- return 1
- else if (src.s2 == 0)
- del(A)
- src.s2 = 3
- return 1
+ index++
+ src.shells.len = index
+ del(A)
+ src.shells[index] = 3
return 1
return 1
return 1
@@ -327,10 +309,10 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] pumps the shotgun!", user), 1, "\red You hear pumping", 2)
playsound(user, 'shotgunpump.ogg', 100, 1)
- src.pumped++
+ src.pumped = 1
return
src.add_fingerprint(user)
- if ((src.s1 + src.s2) < 1)
+ if (!index)
user.show_message("\red *click* *click*", 2)
return
playsound(user, 'Gunshot.ogg', 100, 1)
@@ -345,16 +327,16 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- if (src.s1 == 1)
+ if (src.shells[index] == 1)
user.bullet_act(PROJECTILE_WEAKBULLET)
- else if (src.s1 == 2)
+ else if (src.shells[index] == 2)
user.bullet_act(PROJECTILE_BULLET)
return
- if (src.s1 == 1)
+ if (src.shells[index] == 1)
var/obj/bullet/A = new /obj/bullet/weakbullet( user.loc )
- src.pumped--
- src.s1 = src.s2
- src.s2 = 0
+ src.pumped = 0
+ src.shells[index] = 0
+ index--
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -364,11 +346,11 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!istype(U, /turf))
del(A)
return
- else if (src.s1 == 2)
+ else if (src.shells[index] == 2)
var/obj/bullet/A = new /obj/bullet( user.loc )
- src.pumped--
- src.s1 = src.s2
- src.s2 = 0
+ src.pumped = 0
+ src.shells[index] = 0
+ index--
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -378,227 +360,10 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!istype(U, /turf))
del(A)
return
- else if (src.s1 == 3)
- src.pumped--
- src.s1 = src.s2
- src.s2 = 0
- spawn( 0 )
- return
-
-/obj/item/weapon/gun/combatshotgun/attackby(obj/item/weapon/A as obj, mob/user as mob)
-
- if (istype(A, /obj/item/weapon/ammo/bshell))
- //var/obj/item/weapon/ammo/bshell/A = B
- if ((src.s1 > 0 && src.s2 > 0 && src.s3 > 0 && src.s4 > 0 && src.s5 > 0 && src.s6 > 0 && src.s7 > 0 && src.s8 > 0))
- user << "\blue It's already fully loaded!"
- return 1
- else
- user << "\blue You load the shell into the shotgun."
- if (src.s1 == 0)
- del(A)
- src.s1 = 1
- return 1
- else if (src.s2 == 0)
- del(A)
- src.s2 = 1
- return 1
- else if (src.s3 == 0)
- del(A)
- src.s3 = 1
- return 1
- else if (src.s4 == 0)
- del(A)
- src.s4 = 1
- return 1
- else if (src.s5 == 0)
- del(A)
- src.s5 = 1
- return 1
- else if (src.s6 == 0)
- del(A)
- src.s6 = 1
- return 1
- else if (src.s7 == 0)
- del(A)
- src.s7 = 1
- return 1
- else if (src.s8 == 0)
- del(A)
- src.s8 = 1
- return 1
- return 1
- return 1
-
- else if (istype(A, /obj/item/weapon/ammo/gshell))
- //var/obj/item/weapon/ammo/gshell/A = B
- if ((src.s1 > 0 && src.s2 > 0 && src.s3 > 0 && src.s4 > 0 && src.s5 > 0 && src.s6 > 0 && src.s7 > 0 && src.s8 > 0))
- user << "\blue It's already fully loaded!"
- return 1
- else
- user << "\blue You load the shell into the shotgun."
- if (src.s1 == 0)
- del(A)
- src.s1 = 2
- return 1
- else if (src.s2 == 0)
- del(A)
- src.s2 = 2
- return 1
- else if (src.s3 == 0)
- del(A)
- src.s3 = 2
- return 1
- else if (src.s4 == 0)
- del(A)
- src.s4 = 2
- return 1
- else if (src.s5 == 0)
- del(A)
- src.s5 = 2
- return 1
- else if (src.s6 == 0)
- del(A)
- src.s6 = 2
- return 1
- else if (src.s7 == 0)
- del(A)
- src.s7 = 2
- return 1
- else if (src.s8 == 0)
- del(A)
- src.s8 = 2
- return 1
- return 1
- return 1
-
- else if (istype(A, /obj/item/weapon/ammo/blshell))
- //var/obj/item/weapon/ammo/gshell/A = B
- if ((src.s1 > 0 && src.s2 > 0 && src.s3 > 0 && src.s4 > 0 && src.s5 > 0 && src.s6 > 0 && src.s7 > 0 && src.s8 > 0))
- user << "\blue It's already fully loaded!"
- return 1
- else
- user << "\blue You load the shell into the shotgun."
- if (src.s1 == 0)
- del(A)
- src.s1 = 3
- return 1
- else if (src.s2 == 0)
- del(A)
- src.s2 = 3
- return 1
- else if (src.s3 == 0)
- del(A)
- src.s3 = 3
- return 1
- else if (src.s4 == 0)
- del(A)
- src.s4 = 3
- return 1
- else if (src.s5 == 0)
- del(A)
- src.s5 = 3
- return 1
- else if (src.s6 == 0)
- del(A)
- src.s6 = 3
- return 1
- else if (src.s7 == 0)
- del(A)
- src.s7 = 3
- return 1
- else if (src.s8 == 0)
- del(A)
- src.s8 = 3
- return 1
- return 1
- return 1
- return 1
-
- //there is DEFINITELY a better way to do this, but I am a lazy fuck
-
-/obj/item/weapon/gun/combatshotgun/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
- if (flag)
- return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- usr << "\red You don't have the dexterity to do this!"
- return
- if (src.pumped == 0)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] pumps the shotgun!", user), 1, "\red You hear pumping", 2)
- playsound(user, 'shotgunpump.ogg', 100, 1)
- src.pumped++
- return
- src.add_fingerprint(user)
- if ((src.s1 + src.s2) < 1)
- user.show_message("\red *click* *click*", 2)
- return
- playsound(user, 'Gunshot.ogg', 100, 1)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] fires a shotgun at []!", user, target), 1, "\red You hear a gunshot", 2)
- var/turf/T = user.loc
- var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
- if ((!( U ) || !( T )))
- return
- while(!( istype(U, /turf) ))
- U = U.loc
- if (!( istype(T, /turf) ))
- return
- if (U == T)
- if (src.s1 == 1)
- user.bullet_act(PROJECTILE_WEAKBULLET)
- else if (src.s1 == 2)
- user.bullet_act(PROJECTILE_BULLET)
- return
- if (src.s1 == 1)
- var/obj/bullet/A = new /obj/bullet/weakbullet( user.loc )
- src.pumped--
- src.s1 = src.s2
- src.s2 = src.s3
- src.s3 = src.s4
- src.s4 = src.s5
- src.s5 = src.s6
- src.s6 = src.s7
- src.s7 = src.s8
- src.s8 = 0
- A.current = U
- A.yo = U.y - T.y
- A.xo = U.x - T.x
- user.next_move = world.time + 4
- spawn( 0 )
- A.process()
- if (!istype(U, /turf))
- del(A)
- return
- else if (src.s1 == 2)
- var/obj/bullet/A = new /obj/bullet( user.loc )
- src.pumped--
- src.s1 = src.s2
- src.s2 = src.s3
- src.s3 = src.s4
- src.s4 = src.s5
- src.s5 = src.s6
- src.s6 = src.s7
- src.s7 = src.s8
- src.s8 = 0
- A.current = U
- A.yo = U.y - T.y
- A.xo = U.x - T.x
- user.next_move = world.time + 4
- spawn( 0 )
- A.process()
- if (!istype(U, /turf))
- del(A)
- return
- else if (src.s1 == 3)
- src.pumped--
- src.s1 = src.s2
- src.s2 = src.s3
- src.s3 = src.s4
- src.s4 = src.s5
- src.s5 = src.s6
- src.s6 = src.s7
- src.s7 = src.s8
- src.s8 = 0
+ else if (src.shells[index] == 3)
+ src.pumped = 0
+ src.shells[index] = 0
+ index--
spawn( 0 )
return