diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm
index 807c964a98..f6651d733a 100644
--- a/code/datums/outfits/costumes/halloween.dm
+++ b/code/datums/outfits/costumes/halloween.dm
@@ -25,8 +25,7 @@
var/obj/item/weapon/storage/briefcase/new_briefcase = new(H)
for(var/obj/item/briefcase_item in new_briefcase)
qdel(briefcase_item)
- new_briefcase.contents += new /obj/item/toy/crossbow
- new_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/capgun
+ new_briefcase.contents += new /obj/item/weapon/gun/projectile/pistol/toy
new_briefcase.contents += new /obj/item/clothing/mask/gas/clown_hat
H.equip_to_slot_or_del(new_briefcase, slot_l_hand)
@@ -103,7 +102,7 @@
suit = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless
shoes = /obj/item/clothing/shoes/boots/jackboots
gloves = /obj/item/clothing/gloves/fingerless
- l_pocket = /obj/item/toy/crossbow
+ l_pocket = /obj/item/weapon/gun/projectile/revolver/toy/crossbow
r_pocket = /obj/item/device/flashlight/color/red
/decl/hierarchy/outfit/costume/pirate
@@ -120,4 +119,12 @@
shoes = /obj/item/clothing/shoes/white
suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout
gloves = /obj/item/clothing/gloves/white
- mask = /obj/item/clothing/mask/surgical
\ No newline at end of file
+ mask = /obj/item/clothing/mask/surgical
+
+/decl/hierarchy/outfit/costume/marine
+ name = OUTFIT_COSTUME("Ruin Marine")
+ uniform = /obj/item/clothing/under/color/grey
+ shoes = /obj/item/clothing/shoes/brown
+ head = /obj/item/clothing/head/marine
+ suit = /obj/item/clothing/suit/marine
+ r_hand = /obj/item/weapon/gun/projectile/revolver/toy/sawnoff
\ No newline at end of file
diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm
index a3b6ad30d5..2ce0248e0d 100644
--- a/code/datums/supplypacks/recreation.dm
+++ b/code/datums/supplypacks/recreation.dm
@@ -23,6 +23,13 @@
containertype = /obj/structure/closet/crate/allico
containername = "foam weapon crate"
+/datum/supply_pack/recreation/donksoftvend
+ name = "Donk-Soft Vendor Crate"
+ contains = list()
+ cost = 75
+ containertype = /obj/structure/largecrate/donksoftvendor
+ containername = "\improper Donk-Soft vendor crate"
+
/datum/supply_pack/recreation/lasertag
name = "Lasertag equipment"
contains = list(
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index a6b2c5d8bc..6928c3f029 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -4,24 +4,24 @@
icon_state = "arcade1"
icon_keyboard = null
clicksound = null //Gets too spammy and makes no sense for arcade to have the console keyboard noise anyway
- var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
- /obj/item/toy/blink = 2,
- /obj/item/clothing/under/syndicate/tacticool = 2,
- /obj/item/toy/sword = 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,
- /obj/item/toy/spinningtoy = 2,
- /obj/random/mech_toy = 1,
- /obj/item/weapon/reagent_containers/spray/waterflower = 1,
- /obj/random/action_figure = 1,
- /obj/random/plushie = 1,
- /obj/item/toy/cultsword = 1,
- /obj/item/toy/bouquet/fake = 1,
- /obj/item/clothing/accessory/badge/sheriff = 2,
- /obj/item/clothing/head/cowboy_hat/small = 2,
- /obj/item/toy/stickhorse = 2
+ var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
+ /obj/item/toy/blink = 2,
+ /obj/item/clothing/under/syndicate/tacticool = 2,
+ /obj/item/toy/sword = 2,
+ /obj/item/weapon/gun/projectile/revolver/capgun = 2,
+ /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 2,
+ /obj/item/clothing/suit/syndicatefake = 2,
+ /obj/item/weapon/storage/fancy/crayons = 2,
+ /obj/item/toy/spinningtoy = 2,
+ /obj/random/mech_toy = 1,
+ /obj/item/weapon/reagent_containers/spray/waterflower = 1,
+ /obj/random/action_figure = 1,
+ /obj/random/plushie = 1,
+ /obj/item/toy/cultsword = 1,
+ /obj/item/toy/bouquet/fake = 1,
+ /obj/item/clothing/accessory/badge/sheriff = 2,
+ /obj/item/clothing/head/cowboy_hat/small = 2,
+ /obj/item/toy/stickhorse = 2
)
var/list/special_prizes = list() // Holds instanced objects, intended for admins to shove surprises inside or something.
@@ -40,7 +40,7 @@
var/atom/movable/AM = pick_n_take(special_prizes)
AM.forceMove(get_turf(src))
special_prizes -= AM
-
+
else if(LAZYLEN(prizes))
var/prizeselect = pickweight(prizes)
new prizeselect(src.loc)
@@ -1325,7 +1325,7 @@
gameStatus = "CLAWMACHINE_NEW"
emagged = 1
return 1
-
+
/obj/machinery/computer/arcade/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/stack/arcadeticket))
var/obj/item/stack/arcadeticket/T = O
diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm
index 17faef53bb..f8db22109d 100644
--- a/code/game/objects/items/toys/toys.dm
+++ b/code/game/objects/items/toys/toys.dm
@@ -4,7 +4,6 @@
* Fake telebeacon
* Fake singularity
* Toy gun
- * Toy crossbow
* Toy swords
* Toy bosun's whistle
* Snap pops
@@ -16,7 +15,7 @@
* Plushies
* Toy cult sword
* Bouquets
- Stick Horse
+ * Stick Horse
*/
@@ -145,127 +144,6 @@
icon = 'icons/obj/singularity.dmi'
icon_state = "singularity_s1"
-/*
- * Toy crossbow
- */
-
-/obj/item/toy/crossbow
- name = "foam dart crossbow"
- desc = "A weapon favored by many overactive children. Ages 8 and up."
- icon = 'icons/obj/gun.dmi'
- icon_state = "crossbow"
- item_icons = list(
- icon_l_hand = 'icons/mob/items/lefthand_guns.dmi',
- icon_r_hand = 'icons/mob/items/righthand_guns.dmi',
- )
- slot_flags = SLOT_HOLSTER
- w_class = ITEMSIZE_SMALL
- attack_verb = list("attacked", "struck", "hit")
- var/bullets = 5
- drop_sound = 'sound/items/drop/gun.ogg'
-
-/obj/item/toy/crossbow/examine(mob/user)
- . = ..()
- if(bullets && get_dist(user, src) <= 2)
- . += "It is loaded with [bullets] foam darts!"
-
-/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I, /obj/item/toy/ammo/crossbow))
- if(bullets <= 4)
- user.drop_item()
- qdel(I)
- bullets++
- to_chat(user, "You load the foam dart into the crossbow.")
- else
- to_chat(usr, "It's already fully loaded.")
-
-
-/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
- if(!isturf(target.loc) || target == user) return
- if(flag) return
-
- if (locate (/obj/structure/table, src.loc))
- return
- else if (bullets)
- var/turf/trg = get_turf(target)
- var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src))
- bullets--
- D.icon_state = "foamdart"
- D.name = "foam dart"
- playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
-
- for(var/i=0, i<6, i++)
- if (D)
- if(D.loc == trg) break
- step_towards(D,trg)
-
- for(var/mob/living/M in D.loc)
- if(!istype(M,/mob/living)) continue
- if(M == user) continue
- for(var/mob/O in viewers(world.view, D))
- O.show_message(text("\The [] was hit by the foam dart!", M), 1)
- new /obj/item/toy/ammo/crossbow(M.loc)
- qdel(D)
- return
-
- for(var/atom/A in D.loc)
- if(A == user) continue
- if(A.density)
- new /obj/item/toy/ammo/crossbow(A.loc)
- qdel(D)
-
- sleep(1)
-
- spawn(10)
- if(D)
- new /obj/item/toy/ammo/crossbow(D.loc)
- qdel(D)
-
- return
- else if (bullets == 0)
- user.Weaken(5)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\The [] realized they were out of ammo and starting scrounging for some!", user), 1)
-
-
-/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob)
- src.add_fingerprint(user)
-
-// ******* Check
-
- if (src.bullets > 0 && M.lying)
-
- for(var/mob/O in viewers(M, null))
- if(O.client)
- O.show_message(text("\The [] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull", 2)
- O.show_message(text("\The [] was hit in the head by the foam dart!", M), 1)
-
- playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
- new /obj/item/toy/ammo/crossbow(M.loc)
- src.bullets--
- else if (M.lying && src.bullets == 0)
- for(var/mob/O in viewers(M, null))
- if (O.client) O.show_message(text("\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall", 2)
- user.Weaken(5)
- return
-
-/obj/item/toy/ammo/crossbow
- name = "foam dart"
- desc = "It's nerf or nothing! Ages 8 and up."
- icon = 'icons/obj/toy.dmi'
- icon_state = "foamdart"
- w_class = ITEMSIZE_TINY
- slot_flags = SLOT_EARS
- drop_sound = 'sound/items/drop/food.ogg'
-
-/obj/effect/foam_dart_dummy
- name = ""
- desc = ""
- icon = 'icons/obj/toy.dmi'
- icon_state = "null"
- anchored = 1
- density = 0
-
/*
* Toy swords
*/
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 665c1171f6..a767fd62e4 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -85,7 +85,7 @@
/obj/item/weapon/beach_ball/holoball,
/obj/item/toy/balloon,
/obj/item/toy/blink,
- /obj/item/toy/crossbow,
+ /obj/item/weapon/gun/projectile/revolver/toy/crossbow,
/obj/item/weapon/gun/projectile/revolver/capgun,
/obj/item/toy/katana,
/obj/item/toy/mecha/deathripley,
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index e6085703d4..10a7407f0b 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -453,4 +453,13 @@
name = "ranger belt"
desc = "The fancy utility-belt holding the tools, cuffs and gadgets of the Go Go ERT-Rangers. The belt buckle is not real phoron, but it is still surprisingly comfortable to wear."
icon = 'icons/obj/clothing/ranger.dmi'
- icon_state = "ranger_belt"
\ No newline at end of file
+ icon_state = "ranger_belt"
+
+/obj/item/weapon/storage/belt/dbandolier
+ name = "\improper Donk-Soft bandolier"
+ desc = "A Donk-Soft bandolier! Carry your spare darts anywhere! Ages 8 and up."
+ icon_state = "dbandolier"
+ storage_slots = 8
+ can_hold = list(
+ /obj/item/ammo_casing/afoam_dart
+ )
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 3506327f99..8b65413d71 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -551,3 +551,14 @@
name = "ambrosia deus seeds box"
desc = "Contains the seeds you need to get a proper healthy high."
starts_with = list(/obj/item/seeds/ambrosiadeusseed = 7)
+
+/obj/item/weapon/storage/box/foam_darts
+ name = "\improper Donk-Soft ammo box"
+ desc = "Contains Donk-Soft foam darts. It's Donk or Don't! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "foambox"
+ starts_with = list(/obj/item/ammo_casing/afoam_dart = 15)
+ max_w_class = ITEMSIZE_TINY
+ max_storage_space = ITEMSIZE_COST_TINY * 15
+ drop_sound = 'sound/items/drop/ammobox.ogg'
+ pickup_sound = 'sound/items/pickup/ammobox.ogg'
\ No newline at end of file
diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm
index efa1376ae2..b347dcd021 100644
--- a/code/game/objects/random/misc.dm
+++ b/code/game/objects/random/misc.dm
@@ -721,7 +721,7 @@
/obj/item/toy/snappop,
/obj/item/toy/sword,
/obj/item/toy/balloon,
- /obj/item/toy/crossbow,
+ /obj/item/weapon/gun/projectile/revolver/toy/crossbow,
/obj/item/toy/blink,
/obj/item/weapon/reagent_containers/spray/waterflower,
/obj/item/toy/eight_ball,
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index c9909656f4..3485b31505 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -58,6 +58,11 @@
ME.attach(H)
..()
+/obj/structure/largecrate/donksoftvendor
+ name = "\improper Donk-Soft vendor crate"
+ desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy."
+ starts_with = list(/obj/machinery/vending/donksoft)
+
/obj/structure/largecrate/vehicle
name = "vehicle crate"
desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?"
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 131e905265..ba20ceb2f5 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -495,4 +495,11 @@
name = "fish skull"
desc = "You... you're not actually going to wear that, right?"
icon_state = "fishskull"
- flags_inv = HIDEEARS|BLOCKHAIR
\ No newline at end of file
+ flags_inv = HIDEEARS|BLOCKHAIR
+
+/obj/item/clothing/head/marine
+ name = "marine helmet"
+ desc = "A marine helmet prop from the popular game 'Ruin'."
+ icon_state = "marine"
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
+ body_parts_covered = HEAD|FACE|EYES
\ No newline at end of file
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 6792e308b5..c66877d14e 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -214,6 +214,14 @@
flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat")
+/obj/item/clothing/suit/marine
+ name = "marine armor"
+ desc = "A set of marine prop armor from the popular game 'Ruin'."
+ icon_state = "marine"
+ body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS
+ flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
+ item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat")
+
/*
* Misc
*/
diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm
index be2375d939..53a61db103 100644
--- a/code/modules/economy/vending_machines.dm
+++ b/code/modules/economy/vending_machines.dm
@@ -1080,4 +1080,43 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
- vending_sound = "machines/vending/vending_cans.ogg"
\ No newline at end of file
+ vending_sound = "machines/vending/vending_cans.ogg"
+
+///////////////////////Donk-Soft!///////////////////////////////////////
+
+/obj/machinery/vending/donksoft
+ name = "Donk-Soft!"
+ desc = "A toy vendor owned by Donk-Soft, a NanoTrasen sub-company."
+ description_fluff = "Donk-Soft is a sub-company owned by NanoTrasen that distribute replica weapons that shoot squish foam darts. They've been a staple of personal entertainment for decades but their buisness has only just moved to the fringes of the galaxy."
+ icon_state = "donksoft"
+ product_slogans = "Get your cool toys today!;Quality toy weapons for cheap prices!"
+ product_ads = "Express your inner child today!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!"
+ products = list(/obj/item/weapon/storage/box/foam_darts = 20,
+ /obj/item/weapon/storage/belt/dbandolier = 5,
+ /obj/item/ammo_magazine/mfoam_dart/pistol = 10,
+ /obj/item/ammo_magazine/mfoam_dart/smg = 10,
+ /obj/item/weapon/gun/projectile/shotgun/pump/toy = 5,
+ /obj/item/weapon/gun/projectile/revolver/toy/sawnoff = 5,
+ /obj/item/weapon/gun/projectile/pistol/toy = 5,
+ /obj/item/weapon/gun/projectile/pistol/toy/n99 = 5,
+ /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun = 5,
+ /obj/item/weapon/gun/projectile/revolver/toy = 5,
+ /obj/item/weapon/gun/projectile/revolver/toy/big_iron = 5,
+ /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 5,
+ /obj/item/weapon/gun/projectile/automatic/toy = 5
+ )
+ contraband = list()
+ prices = list(/obj/item/weapon/storage/box/foam_darts = 50,
+ /obj/item/weapon/storage/belt/dbandolier = 100,
+ /obj/item/ammo_magazine/mfoam_dart/pistol = 25,
+ /obj/item/ammo_magazine/mfoam_dart/smg = 25,
+ /obj/item/weapon/gun/projectile/shotgun/pump/toy = 250,
+ /obj/item/weapon/gun/projectile/revolver/toy/sawnoff = 150,
+ /obj/item/weapon/gun/projectile/pistol/toy = 100,
+ /obj/item/weapon/gun/projectile/pistol/toy/n99 = 175,
+ /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun = 250,
+ /obj/item/weapon/gun/projectile/revolver/toy = 100,
+ /obj/item/weapon/gun/projectile/revolver/toy/big_iron = 175,
+ /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 75,
+ /obj/item/weapon/gun/projectile/automatic/toy = 300)
+ vending_sound = "machines/vending/vending_cans.ogg"
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index 41b000d82f..4276a16768 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -22,7 +22,33 @@
*/
/************************************************************************/
+///////// Foam /////////
+/obj/item/ammo_magazine/mfoam_dart/pistol
+ name = "\improper Donk-Soft pistol magazine"
+ icon_state = "45"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/afoam_dart
+ matter = list(MAT_PLASTIC = 250)
+ caliber = "foam"
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/mfoam_dart/pistol/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/mfoam_dart/smg
+ name = "\improper Donk-Soft smg magazine"
+ icon_state = "10mm"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/afoam_dart
+ matter = list(MAT_PLASTIC = 250)
+ caliber = "foam"
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/mfoam_dart/pistol/smg
+ initial_ammo = 0
///////// .357 /////////
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index 566235dd0f..ee824cd38d 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -19,6 +19,20 @@
*/
/************************************************************************/
+/*
+ * Foam
+ */
+
+/obj/item/ammo_casing/afoam_dart
+ name = "foam dart"
+ desc = "It's Donk or Don't! Ages 8 and up."
+ projectile_type = /obj/item/projectile/bullet/foam_dart
+ matter = list(MAT_PLASTIC = 60)
+ caliber = "foam"
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "foamdart"
+ caseless = 1
+
/*
* .357
*/
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 6e69b65a6a..4f6cb0b018 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -29,20 +29,25 @@
pump(user)
recentpump = world.time
-/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M as mob)
+/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M)
playsound(src, action_sound, 60, 1)
- if(chambered)//We have a shell in the chamber
- chambered.loc = get_turf(src)//Eject casing
+ // We have a shell in the chamber
+ if(chambered)
+ if(chambered.caseless)
+ qdel(chambered) // Delete casing
+ else
+ chambered.loc = get_turf(src) // Eject casing
chambered = null
+ // Load next shell
if(loaded.len)
- var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
- loaded -= AC //Remove casing from loaded list.
+ var/obj/item/ammo_casing/AC = loaded[1] // load next casing.
+ loaded -= AC // Remove casing from loaded list.
chambered = AC
- if(pump_animation)//This affects all bolt action and shotguns.
- flick("[pump_animation]", src)//This plays any pumping
+ if(pump_animation) // This affects all bolt action and shotguns.
+ flick("[pump_animation]", src) // This plays any pumping
update_icon()
diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm
new file mode 100644
index 0000000000..e23540d683
--- /dev/null
+++ b/code/modules/projectiles/guns/projectile/toy.dm
@@ -0,0 +1,167 @@
+/* Toys Guns!
+ * Contains:
+ * Shotgun
+ * Pistol
+ * N99 Pistol
+ * Levergun
+ * Revolver
+ * Big Iron
+ * Crossbow
+ * Sawn Off
+ * SMG
+ */
+
+
+/*
+ * Shotgun
+ */
+/obj/item/weapon/gun/projectile/shotgun/pump/toy
+ name = "\improper Donk-Soft shotgun"
+ desc = "Donk-Soft foam shotgun! It's Donk or Don't! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "shotgun"
+ item_state = "shotgun"
+ max_shells = 6
+ w_class = ITEMSIZE_LARGE
+ force = 2
+ slot_flags = null
+ caliber = "foam"
+ origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
+ load_method = SINGLE_CASING
+ ammo_type = /obj/item/ammo_casing/afoam_dart
+ projectile_type = /obj/item/projectile/bullet/foam_dart
+ matter = list(MAT_PLASTIC = 2000)
+ handle_casings = null
+ recoil = null //it's a toy
+
+/*
+ * Pistol
+ */
+/obj/item/weapon/gun/projectile/pistol/toy
+ name = "\improper Donk-Soft pistol"
+ desc = "Donk-Soft foam pistol! It's Donk or Don't! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "pistol"
+ item_state = "gun"
+ magazine_type = /obj/item/ammo_magazine/mfoam_dart/pistol
+ allowed_magazines = list(/obj/item/ammo_magazine/mfoam_dart/pistol)
+ projectile_type = /obj/item/projectile/bullet/foam_dart
+ caliber = "foam"
+ origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
+ load_method = MAGAZINE
+ matter = list(MAT_PLASTIC = 1000)
+ recoil = null //it's a toy
+
+/obj/item/weapon/gun/projectile/pistol/toy/update_icon()
+ if(ammo_magazine)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-e"
+
+/*
+ * N99 Pistol
+ */
+/obj/item/weapon/gun/projectile/pistol/toy/n99
+ name = "\improper Donk-Soft commemorative pistol"
+ desc = "A special made Donk-Soft pistol to promote 'Radius: Legend of the Demon Core', a popular post-apocolyptic TV series."
+ icon_state = "n99"
+ item_state = "gun"
+
+/obj/item/weapon/gun/projectile/pistol/toy/n99/update_icon()
+ if(ammo_magazine)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-e"
+
+/*
+ * Levergun
+ */
+/obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun
+ name = "\improper Donk-Soft levergun"
+ desc = "Donk-Soft foam levergun! Time to cowboy up! Ages 8 and up."
+ icon_state = "leveraction"
+ item_state = "leveraction"
+ max_shells = 5
+ pump_animation = "leveraction-cycling"
+
+/*
+ * Revolver
+ */
+/obj/item/weapon/gun/projectile/revolver/toy
+ name = "\improper Donk-Soft revolver"
+ desc = "Donk-Soft foam revolver! Time to cowboy up! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "revolver"
+ item_state = "revolver"
+ caliber = "foam"
+ ammo_type = /obj/item/ammo_casing/afoam_dart
+ projectile_type = /obj/item/projectile/bullet/foam_dart
+ origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
+ load_method = SINGLE_CASING
+ max_shells = 6
+ matter = list(MAT_PLASTIC = 1000)
+ handle_casings = null
+ recoil = null //it's a toy
+
+/*
+ * Big Iron
+ */
+/obj/item/weapon/gun/projectile/revolver/toy/big_iron
+ name = "\improper Donk-Soft big iron"
+ desc = "A special made Donk-Soft pistol to promote 'A Fistful of Phoron', a popular frontier novel series."
+ icon_state = "big_iron"
+ item_state = "revolver"
+
+/*
+ * Crossbow
+ */
+/obj/item/weapon/gun/projectile/revolver/toy/crossbow
+ name = "\improper Donk-Soft crossbow"
+ desc = "Donk-Soft foam pistol! It's Donk or Don't! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "foamcrossbow"
+ item_state = "foamcrossbow"
+ max_shells = 5
+
+/*
+ * Sawn Off
+ */
+/obj/item/weapon/gun/projectile/revolver/toy/sawnoff //revolver code just because it's easier
+ name = "\improper Donk-Soft sawn off shotgun"
+ desc = "Donk-Soft foam sawn off! It's Donk or Don't! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "sawnshotgun"
+ item_state = "dshotgun"
+ max_shells = 2
+ w_class = ITEMSIZE_NORMAL
+ matter = list(MAT_PLASTIC = 1500)
+
+/*
+ * SMG
+ */
+/obj/item/weapon/gun/projectile/automatic/toy
+ name = "\improper Donk-Soft SMG"
+ desc = "Donk-Soft foam SMG! It's Donk or Don't! Ages 8 and up."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "smg"
+ caliber = "foam"
+ w_class = ITEMSIZE_NORMAL
+ load_method = MAGAZINE
+ origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
+ slot_flags = SLOT_BELT
+ magazine_type = /obj/item/ammo_magazine/mfoam_dart/smg
+ allowed_magazines = list(/obj/item/ammo_magazine/mfoam_dart/smg)
+ projectile_type = /obj/item/projectile/bullet/foam_dart
+ matter = list(MAT_PLASTIC = 1500)
+ recoil = null //it's a toy
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=2, burst_accuracy=list(0,-2,-2), dispersion=null)
+ )
+
+/obj/item/weapon/gun/projectile/automatic/toy/update_icon()
+ if(ammo_magazine)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-e"
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 1483d08274..1c4529f314 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -65,6 +65,32 @@
return 0
+/* foam dart projectiles */
+
+/obj/item/projectile/bullet/foam_dart
+ name = "foam dart"
+ desc = "I hope you're wearing eye protection."
+ damage = 0 // It's a damn toy.
+ damage_type = OXY
+ nodamage = TRUE
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "foamdart_proj"
+ range = 15
+ impact_effect_type = null
+ fire_sound = 'sound/items/syringeproj.ogg'
+
+/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A)
+ . = ..()
+ var/turf/T = get_turf(loc)
+ if(istype(T))
+ new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
+
+/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A)
+ . = ..()
+ var/turf/T = get_turf(loc)
+ if(istype(T))
+ new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
+
/* short-casing projectiles, like the kind used in pistols or SMGs */
/obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity.
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index c3f0f0d956..6d88803fcb 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index a88b9bfe22..e67310f2e3 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 27aba23c34..73c59d73db 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index bc7116f5d7..9a64f28912 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 4f97b40e27..2d19da251a 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index c44818abce..8640e9653d 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 548d65a5db..f0c5ecdfb2 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 647859989e..958952bf9c 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/gun_toy.dmi b/icons/obj/gun_toy.dmi
new file mode 100644
index 0000000000..4b261960fe
Binary files /dev/null and b/icons/obj/gun_toy.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index b2b6e0a0c7..45819578c2 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index d303231acc..c8563d9738 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/polaris.dme b/polaris.dme
index a2aa7e433b..4d0ab5e4b6 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -2852,6 +2852,7 @@
#include "code\modules\projectiles\guns\projectile\semiauto.dm"
#include "code\modules\projectiles\guns\projectile\shotgun.dm"
#include "code\modules\projectiles\guns\projectile\sniper.dm"
+#include "code\modules\projectiles\guns\projectile\toy.dm"
#include "code\modules\projectiles\guns\projectile\sniper\collapsible_sniper.dm"
#include "code\modules\projectiles\projectile\arc.dm"
#include "code\modules\projectiles\projectile\beams.dm"