diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 30c2e8cd370..be2ac743438 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -109,6 +109,11 @@ icon_state = "357-7" amount_left = 7.0 +/obj/item/weapon/ammo/a45 + desc = "There are 10 bullets left!" + name = "ammo-45" + icon_state = "45-10" + amount_left = 10.0 /obj/item/weapon/ammo/shell //easier to add new shell types. Like badmin laser/taser/pulse shells. desc = "Generic shell description." @@ -674,6 +679,30 @@ icon_state = "mateba" origin_tech = "combat=3;materials=2" +/obj/item/weapon/gun/glock + desc = "There are 0 bullets left. Uses .45 ACP" + name = "glock" + icon_state = "glock" + var/obj/item/weapon/ammo/a45/magazine + w_class = 3.0 + throw_speed = 2 + throw_range = 10 + force = 6.0 + m_amt = 2000 +// origin_tech = "combat=3;materials=2" + +/obj/item/weapon/gun/m1911 + desc = "There are 0 bullets left. Uses .45 ACP" + name = "m1911" + icon_state = "m1911" + var/obj/item/weapon/ammo/a45/magazine + w_class = 3.0 + throw_speed = 2 + throw_range = 10 + force = 14.0 + m_amt = 2000 +// origin_tech = "combat=3;materials=2" + /obj/item/weapon/gun/detectiverevolver desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds." name = ".38 revolver" diff --git a/code/game/objects/items/weapons/guns_ammo.dm b/code/game/objects/items/weapons/guns_ammo.dm index 6d539aea465..7a024bd97e7 100644 --- a/code/game/objects/items/weapons/guns_ammo.dm +++ b/code/game/objects/items/weapons/guns_ammo.dm @@ -1138,3 +1138,173 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us if(O.client) O.show_message(text("\red [M] has been knocked unconscious!"), 1, "\red You hear someone fall", 2) return + + + + +//GLOCK + + +/obj/item/weapon/gun/glock/examine() + set src in usr + if (src.magazine) + if (istype(src.magazine, /obj/item/weapon/ammo/a45)) + src.desc = text("There are [] bullet\s left! Uses .45 ACP", src.magazine.amount_left) + else + src.desc = "There are 0 bullets left! Uses .45 ACP" + ..() + return + +/obj/item/weapon/gun/glock/verb/eject() + set src in usr + if (src.magazine) + if (istype(src.magazine, /obj/item/weapon/ammo/a45)) + if (istype(src.loc, /mob)) + var/obj/item/W = src.loc:equipped() + var/emptyHand = (W == null) + if(emptyHand) + src.magazine.DblClick() + if(!istype(src.magazine.loc, /obj/item/weapon/gun/glock)) + src.magazine = null + else + src.magazine.loc = src.loc + src.magazine = null + ..() + return + +/obj/item/weapon/ammo/a45/examine() + set src in usr + src.desc = text("There are [] bullet\s left!", src.amount_left) + ..() + return + +/obj/item/weapon/gun/glock/attackby(obj/item/weapon/ammo/a45/A as obj, mob/user as mob) + ..() + + if (istype(A, /obj/item/weapon/ammo/a45)) + if (src.magazine) + user << "\blue There is already a magazine in!" + return 1 + user.drop_item() + A.loc = src + src.magazine = A + return 1 + return + +/obj/item/weapon/gun/glock/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((istype(user, /mob/living/carbon/monkey)) && ticker.mode != "monkey") + usr << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.magazine.amount_left < 1) + user.show_message("\red *click* *click*", 2) + return + playsound(user, 'Gunshot.ogg', 100, 1) + src.magazine.amount_left-- + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] fires the glock 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) + user.bullet_act(PROJECTILE_WEAKBULLET) + return + var/obj/bullet/weakbullet/A = new /obj/bullet/weakbullet( user.loc ) + if (!istype(U, /turf)) + del(A) + return + 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() + return + return + +/obj/item/weapon/gun/m1911/examine() + set src in usr + if (src.magazine) + if (istype(src.magazine, /obj/item/weapon/ammo/a45)) + src.desc = text("There are [] bullet\s left! Uses .45 ACP", src.magazine.amount_left) + else + src.desc = "There are 0 bullets left! Uses .45 ACP" + ..() + return + +/obj/item/weapon/gun/m1911/verb/eject() + set src in usr + if (src.magazine) + if (istype(src.magazine, /obj/item/weapon/ammo/a45)) + if (istype(src.loc, /mob)) + var/obj/item/W = src.loc:equipped() + var/emptyHand = (W == null) + if(emptyHand) + src.magazine.DblClick() + if(!istype(src.magazine.loc, /obj/item/weapon/gun/m1911)) + src.magazine = null + else + src.magazine.loc = src.loc + src.magazine = null + ..() + return + +/obj/item/weapon/gun/m1911/attackby(obj/item/weapon/ammo/a45/A as obj, mob/user as mob) + ..() + + if (istype(A, /obj/item/weapon/ammo/a45)) + if (src.magazine) + user << "\blue There is already a magazine in!" + return 1 + user.drop_item() + A.loc = src + src.magazine = A + return 1 + return + +/obj/item/weapon/gun/m1911/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((istype(user, /mob/living/carbon/monkey)) && ticker.mode != "monkey") + usr << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.magazine.amount_left < 1) + user.show_message("\red *click* *click*", 2) + return + playsound(user, 'Gunshot.ogg', 100, 1) + src.magazine.amount_left-- + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] fires the m1911 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) + user.bullet_act(PROJECTILE_BULLET) + return + var/obj/bullet/A = new /obj/bullet( user.loc ) + if (!istype(U, /turf)) + del(A) + return + 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() + return + return diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 1f68710e695..d1a95c52fbd 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 8439a04671a..0440e62a015 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ