diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index fa58b9526fc..c4f9a6193e5 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -13,7 +13,7 @@ /obj/item/toy/blink = 2, /obj/item/weapon/storage/box/fakesyndiesuit = 2, /obj/item/toy/sword = 2, - /obj/item/toy/gun = 2, + /obj/item/weapon/gun/projectile/revolver/capgun = 2, /obj/item/toy/crossbow = 2, /obj/item/weapon/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, @@ -60,8 +60,8 @@ var/prizeselect = pickweight(prizes) new prizeselect(src.loc) - if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun - new /obj/item/toy/ammo/gun(src.loc) + if(istype(prizeselect, /obj/item/weapon/gun/projectile/revolver/capgun)) //Ammo comes with the gun + new /obj/item/ammo_box/caps(src.loc) else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit new /obj/item/clothing/head/syndicatefake(src.loc) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 41db700ac12..8b14ecaa96f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -3,7 +3,6 @@ * Balloons * Fake telebeacon * Fake singularity - * Toy gun * Toy crossbow * Toy Tommy Gun * Toy swords @@ -125,78 +124,6 @@ icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" -/* - * Toy gun: Why isnt this an /obj/item/weapon/gun? - */ -/obj/item/toy/gun - name = "cap gun" - desc = "There are 0 caps left. Looks almost like the real thing! Ages 8 and up. Please recycle in an autolathe when you're out of caps!" - icon = 'icons/obj/gun.dmi' - icon_state = "revolver" - item_state = "gun" - lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/guns_righthand.dmi' - flags = CONDUCT - slot_flags = SLOT_BELT - w_class = 3.0 - materials = list(MAT_METAL=10, MAT_GLASS=10) - attack_verb = list("struck", "pistol whipped", "hit", "bashed") - var/bullets = 7.0 - - examine(mob/user) - if(..(user, 0)) - user << "There are [bullets] caps\s left. Looks almost like the real thing! Ages 8 and up." - - attackby(obj/item/toy/ammo/gun/A as obj, mob/user as mob, params) - - if (istype(A, /obj/item/toy/ammo/gun)) - if (src.bullets >= 7) - user << "\blue It's already fully loaded!" - return 1 - if (A.amount_left <= 0) - user << "\red There is no more caps!" - return 1 - if (A.amount_left < (7 - src.bullets)) - src.bullets += A.amount_left - user << text("\red You reload [] caps\s!", A.amount_left) - A.amount_left = 0 - else - user << text("\red You reload [] caps\s!", 7 - src.bullets) - A.amount_left -= 7 - src.bullets - src.bullets = 7 - A.update_icon() - return 1 - return - - afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if (flag) - return - if (!user.IsAdvancedToolUser()) - user << "You don't have the dexterity to do this!" - return - src.add_fingerprint(user) - if (src.bullets < 1) - user.show_message("*click* *click*", 2) - playsound(user, 'sound/weapons/empty.ogg', 100, 1) - return - playsound(user, 'sound/weapons/Gunshot.ogg', 100, 1) - src.bullets-- - user.visible_message("[user] fires a cap gun at [target]!", null, "You hear a gunshot.") - -/obj/item/toy/ammo/gun - name = "ammo-caps" - desc = "There are 7 caps left! Make sure to recyle the box in an autolathe when it gets empty." - icon = 'icons/obj/ammo.dmi' - icon_state = "357-7" - flags = CONDUCT - w_class = 1.0 - materials = list(MAT_METAL=10, MAT_GLASS=10) - var/amount_left = 7.0 - - update_icon() - src.icon_state = text("357-[]", src.amount_left) - src.desc = text("There are [] caps\s left! Make sure to recycle the box in an autolathe when it gets empty.", src.amount_left) - return /* * Toy crossbow diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index db3d8a38092..a5f38baf06b 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -84,7 +84,7 @@ /obj/item/toy/balloon, /obj/item/toy/blink, /obj/item/toy/crossbow, - /obj/item/toy/gun, + /obj/item/weapon/gun/projectile/revolver/capgun, /obj/item/toy/katana, /obj/item/toy/prize/deathripley, /obj/item/toy/prize/durand, diff --git a/code/modules/computer3/computers/arcade.dm b/code/modules/computer3/computers/arcade.dm index 746551079b5..a99c05410ae 100644 --- a/code/modules/computer3/computers/arcade.dm +++ b/code/modules/computer3/computers/arcade.dm @@ -7,7 +7,7 @@ /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, - /obj/item/toy/gun = 2, + /obj/item/weapon/gun/projectile/revolver/capgun = 2, /obj/item/toy/crossbow = 2, /obj/item/clothing/suit/syndicatefake = 2, /obj/item/weapon/storage/fancy/crayons = 2, @@ -28,8 +28,8 @@ if(computer && !computer.stat) var/prizeselect = pickweight(prizes) new prizeselect(computer.loc) - if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun - new /obj/item/toy/ammo/gun(computer.loc) + if(istype(prizeselect, /obj/item/weapon/gun/projectile/revolver/capgun)) //Ammo comes with the gun + new /obj/item/ammo_box/caps(computer.loc) else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit new /obj/item/clothing/head/syndicatefake(computer.loc) feedback_inc("arcade_win_normal") diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 557407ac8a3..84bcd8b5ac9 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -13,6 +13,11 @@ caliber = "38" projectile_type = "/obj/item/projectile/bullet/weakbullet2/rubber" +/obj/item/ammo_casing/cap + desc = "A cap for children toys." + caliber = "caps" + projectile_type = "/obj/item/projectile/bullet/cap" + /obj/item/ammo_casing/c10mm desc = "A 10mm bullet casing." diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 36ebbce963b..66a50373c76 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -12,6 +12,13 @@ max_ammo = 6 multiple_sprites = 1 +/obj/item/ammo_box/caps + name = "speed loader (caps)" + icon_state = "357" + ammo_type = /obj/item/ammo_casing/cap + max_ammo = 7 + multiple_sprites = 1 + /obj/item/ammo_box/c9mm name = "ammo box (9mm)" icon_state = "9mmbox" diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 9ef9938071a..1e6dfadd7b5 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -36,6 +36,13 @@ caliber = "38" max_ammo = 6 +/obj/item/ammo_box/magazine/internal/cylinder/cap + name = "cap gun revolver cylinder" + desc = "Oh god, this shouldn't be here" + ammo_type = "/obj/item/ammo_casing/cap" + caliber = "cap" + max_ammo = 7 + /obj/item/ammo_box/magazine/internal/shot name = "shotgun internal magazine" desc = "Oh god, this shouldn't be here" diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 713ebbf9dce..cee7f1e95b3 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -64,8 +64,26 @@ ..(user) user << "[get_ammo(0,0)] of those are live rounds." +/obj/item/weapon/gun/projectile/revolver/proc/Spin() + set name = "Spin cylinder" + set desc = "Fun when you're bored out of your skull." + set category = "Object" + + usr.visible_message("[usr] spins the chamber of the revolver.", "You spin the revolver's chamber.") + playsound(src.loc, 'sound/weapons/revolver_spin.ogg', 100, 1) + chambered = null + var/random = rand(1, magazine.max_ammo) + if(random <= get_ammo(0,0)) + chamber_round() + update_icon() + +/obj/item/weapon/gun/projectile/revolver/capgun + name = "cap gun" + desc = "Looks almost like the real thing! Ages 8 and up." + origin_tech = "combat=1;materials=1" + mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/cap" + /obj/item/weapon/gun/projectile/revolver/detective - name = "\improper .38 Mars Special" desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." name = "revolver" icon_state = "detective" @@ -168,43 +186,11 @@ desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism that spins the chamber before each trigger pull." origin_tech = "combat=2;materials=2" mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/rus357" - var/spun = 0 + /obj/item/weapon/gun/projectile/revolver/russian/New() ..() Spin() - update_icon() - -/obj/item/weapon/gun/projectile/revolver/russian/proc/Spin() - chambered = null - var/random = rand(1, magazine.max_ammo) - if(random <= get_ammo(0,0)) - chamber_round() - spun = 1 - -/obj/item/weapon/gun/projectile/revolver/russian/attackby(var/obj/item/A as obj, mob/user as mob, params) - ..() - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") - if(get_ammo() > 0) - Spin() - update_icon() - A.update_icon() - return - -/obj/item/weapon/gun/projectile/revolver/russian/attack_self(mob/user as mob) - if(!spun && get_ammo(0,0)) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") - Spin() - else - ..() - - -/obj/item/weapon/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) - if (!spun) - Spin() - return - ..() - spun = 0 /obj/item/weapon/gun/projectile/revolver/russian/attack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj) @@ -229,6 +215,5 @@ user.apply_damage(300, BRUTE, affecting, sharp=1) // You are dead, dead, dead. return - spun = 0 ..() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 2859edc6a3c..5b4273f2480 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -8,6 +8,17 @@ embed = 1 sharp = 1 +/obj/item/projectile/bullet/cap + name = "cap" + damage = 0 + nodamage = 1 + embed = 0 + sharp = 0 + +/obj/item/projectile/bullet/cap/process() + loc = null + qdel(src) + /obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage damage = 5 stamina = 80 diff --git a/sound/weapons/revolver_spin.ogg b/sound/weapons/revolver_spin.ogg new file mode 100644 index 00000000000..8e40848d690 Binary files /dev/null and b/sound/weapons/revolver_spin.ogg differ