From 7e655d1c9610568dded8b168b794476d0ca7a88f Mon Sep 17 00:00:00 2001 From: crazyclonetheninja Date: Wed, 15 Dec 2010 21:50:28 +0000 Subject: [PATCH] Shotguns now use a list for ammo instead of 8 vars. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@629 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/weapon.dm | 20 +- code/game/objects/items/weapons/guns_ammo.dm | 303 +++---------------- 2 files changed, 41 insertions(+), 282 deletions(-) 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