diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 673c634b5e3..2762ea8f857 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -524,6 +524,22 @@ var/s1 = 0.0 var/s2 = 0.0 +/obj/item/weapon/gun/combatshotgun + 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 + /obj/item/weapon/gun/energy name = "energy" var/charges = 10.0 diff --git a/code/game/objects/items/weapons/guns_ammo.dm b/code/game/objects/items/weapons/guns_ammo.dm index 2af20fcb700..cb3c92f4a7f 100644 --- a/code/game/objects/items/weapons/guns_ammo.dm +++ b/code/game/objects/items/weapons/guns_ammo.dm @@ -1,5 +1,4 @@ /* -test CONTAINS: PROJECTILE DEFINES PULSE RIFLE @@ -253,9 +252,9 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us if (src.s1 >= 1 && src.s2 >= 1) src.desc = "There are 2 shells left!" if (src.s1 >= 1 && src.s2 == 0) - src.desc = "There are 1 shells left!" + src.desc = "There is 1 shell left!" if (src.s1 == 0 && src.s2 == 0) - src.desc = "There are 0 shells left!" + src.desc = "There are no shells left!" ..() return @@ -386,6 +385,222 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us 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.s2 = 1 + return 1 + else if (src.s4 == 0) + del(A) + src.s2 = 1 + return 1 + else if (src.s5 == 0) + del(A) + src.s2 = 1 + return 1 + else if (src.s6 == 0) + del(A) + src.s2 = 1 + return 1 + else if (src.s7 == 0) + del(A) + src.s2 = 1 + return 1 + else if (src.s8 == 0) + del(A) + src.s2 = 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.s2 = 2 + return 1 + else if (src.s4 == 0) + del(A) + src.s2 = 2 + return 1 + else if (src.s5 == 0) + del(A) + src.s2 = 2 + return 1 + else if (src.s6 == 0) + del(A) + src.s2 = 2 + return 1 + else if (src.s7 == 0) + del(A) + src.s2 = 2 + return 1 + else if (src.s8 == 0) + del(A) + src.s2 = 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.s2 = 3 + return 1 + else if (src.s4 == 0) + del(A) + src.s2 = 3 + return 1 + else if (src.s5 == 0) + del(A) + src.s2 = 3 + return 1 + else if (src.s6 == 0) + del(A) + src.s2 = 3 + return 1 + else if (src.s7 == 0) + del(A) + src.s2 = 3 + return 1 + else if (src.s8 == 0) + del(A) + src.s2 = 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 + spawn( 0 ) + return