diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 9258caf0cfb..5a371c50a06 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -160,7 +160,7 @@ "dd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "de" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms) "df" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) -"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "dh" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms) "di" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms) "dj" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms) @@ -340,7 +340,7 @@ "gB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) "gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) -"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/toy/crossbow,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gG" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gH" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms) "gI" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) @@ -672,4 +672,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 62503cc3dd1..ce1e5a290e9 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -189,7 +189,7 @@ "dJ" = (/obj/item/target/syndicate,/turf/simulated/floor/carpet,/area/awaymission) "dK" = (/obj/item/trash/candy,/turf/simulated/floor/carpet,/area/awaymission) "dL" = (/obj/item/toy/spinningtoy,/turf/simulated/floor/carpet,/area/awaymission) -"dM" = (/obj/item/toy/crossbow,/turf/simulated/floor/carpet,/area/awaymission) +"dM" = (/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/turf/simulated/floor/carpet,/area/awaymission) "dN" = (/obj/structure/barricade/wooden,/obj/structure/barricade/wooden,/turf/simulated/floor/carpet,/area/awaymission) "dO" = (/obj/machinery/door/airlock,/turf/simulated/floor/carpet,/area/awaymission) "dP" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/wall,/area/awaymission) @@ -322,4 +322,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabReWeXbDbDbDbDbDeSeSeSbDbDbDbDeYeUeVaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZbRfabDeSeWeSbDbDeRbDbDfbfceSeTeUeVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZeNeMeHeIeNeLeLeLeNeMeHeIeNfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index d91ef330c60..4934529dbf1 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -286,8 +286,8 @@ "fz" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/mass_spectrometer{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fA" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "fB" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) -"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) -"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "fE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) "fF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "fG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/midblock) @@ -315,7 +315,7 @@ "gc" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/arrivalblock) "gd" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) "gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gi" = (/turf/simulated/floor/plasteel,/area/awaymission/midblock) @@ -689,4 +689,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzltlFlGlHhuhuhuiYlIkfkfkpkRjKlJjKlKiYlLlMlNlOlOlP aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzgzgzgzgzgzgzgziYlVlWlXiYkfkdlYlZmaiYjKjKjKmbmbmbmbmcjulCmdmejuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYjujujujujuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index f3117a67215..247d481f1be 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1348,9 +1348,19 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/misc/mafia name = "Mafia Supply Crate" - contains = list(/obj/item/clothing/suit/browntrenchcoat =1,/obj/item/clothing/suit/blacktrenchcoat =1,/obj/item/clothing/head/fedora/whitefedora =1, - /obj/item/clothing/head/fedora/brownfedora =1,/obj/item/clothing/head/fedora =1,/obj/item/clothing/under/flappers =1,/obj/item/clothing/under/mafia =1,/obj/item/clothing/under/mafia/vest =1,/obj/item/clothing/under/mafia/white =1, - /obj/item/clothing/under/mafia/sue =1,/obj/item/clothing/under/mafia/tan =1, /obj/item/toy/crossbow/tommygun =2) + contains = list(/obj/item/clothing/suit/browntrenchcoat, + /obj/item/clothing/suit/blacktrenchcoat, + /obj/item/clothing/head/fedora/whitefedora, + /obj/item/clothing/head/fedora/brownfedora, + /obj/item/clothing/head/fedora, + /obj/item/clothing/under/flappers, + /obj/item/clothing/under/mafia, + /obj/item/clothing/under/mafia/vest, + /obj/item/clothing/under/mafia/white, + /obj/item/clothing/under/mafia/sue, + /obj/item/clothing/under/mafia/tan, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun) cost = 15 containername = "mafia supply crate" @@ -1385,6 +1395,29 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine ..() +/datum/supply_packs/misc/foamforce + name = "Foam Force Crate" + contains = list(/obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy) + cost = 10 + containername = "foam force crate" + +/datum/supply_packs/misc/foamforce/bonus + name = "Foam Force Pistols Crate" + contains = list(/obj/item/weapon/gun/projectile/automatic/toy/pistol, + /obj/item/weapon/gun/projectile/automatic/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol) + cost = 40 + containername = "foam force pistols crate" + contraband = 1 + /datum/supply_packs/misc/randomised/contraband num_contained = 5 contains = list(/obj/item/weapon/storage/pill_bottle/random_drug_bottle, diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index cf997f6f28d..ca41668e53a 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -407,6 +407,34 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 +/datum/uplink_item/dangerous/foamsmg + name = "Toy Submachine Gun" + desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." + reference = "FSMG" + item = /obj/item/weapon/gun/projectile/automatic/c20r/toy + cost = 5 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + +/datum/uplink_item/dangerous/foammachinegun + name = "Toy Machine Gun" + desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating riot grade darts, that can briefly incapacitate someone in just one volley." + reference = "FLMG" + item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy + cost = 10 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + +/datum/uplink_item/ammo/toydarts + name = "Box of Riot Darts" + desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" + reference = "FOAM" + item = /obj/item/ammo_box/foambox/riot + cost = 2 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + + //for refunding the syndieborg teleporter /datum/uplink_item/dangerous/syndieborg/spawn_item() var/obj/item/weapon/antag_spawner/borg_tele/T = ..() @@ -550,6 +578,14 @@ var/list/uplink_items = list() cost = 8 excludefrom = list(/datum/game_mode/nuclear) +/datum/uplink_item/stealthy_weapons/foampistol + name = "Toy Gun (with Stun Darts)" + desc = "An innocent looking toy pistol designed to fire foam darts. Comes loaded with riot grade darts, to incapacitate a target." + reference = "FSPI" + item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot + cost = 3 + surplus = 10 + /datum/uplink_item/stealthy_weapons/soap name = "Syndicate Soap" desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. You can also drop it underfoot to slip people." @@ -1105,4 +1141,4 @@ var/list/uplink_items = list() U.purchase_log += "\icon[C]" for(var/item in bought_items) new item(C) - U.purchase_log += "\icon[item]" \ No newline at end of file + U.purchase_log += "\icon[item]" diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index f46e2361192..7e15df8676c 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -5,7 +5,7 @@ name = "Random Toy" New() ..() - var/list/types = list(/obj/item/toy/crossbow,/obj/item/toy/balloon,/obj/item/toy/spinningtoy,/obj/item/weapon/reagent_containers/spray/waterflower) + subtypesof(/obj/item/toy/prize) + var/list/types = list(/obj/item/weapon/gun/projectile/shotgun/toy/crossbow, /obj/item/toy/balloon,/obj/item/toy/spinningtoy,/obj/item/weapon/reagent_containers/spray/waterflower) + subtypesof(/obj/item/toy/prize) var/T = pick(types) new T(loc) spawn(1) @@ -332,4 +332,4 @@ new nade3(src) new nade4(src) new nade5(src) - new nade6(src) \ No newline at end of file + new nade6(src) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 8911a3e60f6..6a863bcc60f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -3,8 +3,6 @@ * Balloons * Fake telebeacon * Fake singularity - * Toy crossbow - * Toy Tommy Gun * Toy swords * Toy mechs * Snap pops @@ -132,142 +130,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_state = "crossbow" - lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/guns_righthand.dmi' - w_class = 2.0 - attack_verb = list("attacked", "struck", "hit") - var/bullets = 5 - -/obj/item/toy/crossbow/examine(mob/user) - ..(user) - if (bullets) - to_chat(user, "It is loaded with [bullets] foam darts!") - -/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob, params) - 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(user.loc, '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 - D.visible_message("[M] was hit by the foam dart!") - 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) - user.visible_message("[user] realized they were out of ammo and starting scrounging for some!") - - - -/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) - add_fingerprint(user) - -// ******* Check - - if (bullets > 0 && M.lying) - visible_message("[user] casually lines up a shot with [M]'s head and pulls the trigger!", "You hear the sound of foam against skull.") - M.visible_message("[M] was hit in the head by the foam dart!") - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - new /obj/item/toy/ammo/crossbow(M.loc) - bullets-- - else if (M.lying && bullets == 0) - visible_message("[user] casually lines up a shot with [M]'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", "You hear someone fall.") - user.Weaken(5) - return - -/obj/item/toy/ammo/crossbow - name = "foam dart" - desc = "Its nerf or nothing! Ages 8 and up." - icon = 'icons/obj/toy.dmi' - icon_state = "foamdart" - w_class = 1.0 - -/obj/effect/foam_dart_dummy - name = "" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "null" - anchored = 1 - density = 0 - - -/* - * Tommy gun - */ - -/obj/item/toy/crossbow/tommygun - name = "tommy gun" - desc = "Looks almost like the real thing! Great for practicing Drive-bys" - icon_state = "tommy" - item_state = "tommy" - flags = CONDUCT - w_class = 1.0 - attack_verb = list("struck", "hammered", "hit", "bashed") - bullets = 20.0 - -/obj/item/toy/crossbow/tommygun/attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 19) - user.drop_item() - qdel(I) - bullets++ - to_chat(user, "You load the foam dart into the tommy gun.") - else - to_chat(user, "It's already fully loaded.") - /* * Toy swords */ @@ -1777,4 +1639,4 @@ obj/item/toy/cards/deck/syndicate/black desc = "All hail the Magic Conch!" icon_state = "conch" use_action = "pulls the string" - possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.") \ No newline at end of file + possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.") diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 00433885ad5..1b819bb0a0d 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -80,7 +80,7 @@ /obj/item/weapon/banhammer, /obj/item/toy/balloon, /obj/item/toy/blink, - /obj/item/toy/crossbow, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow, /obj/item/weapon/gun/projectile/revolver/capgun, /obj/item/toy/katana, /obj/random/mech, @@ -115,7 +115,7 @@ /obj/item/toy/AI, /obj/item/clothing/under/syndicate/tacticool, /obj/item/weapon/storage/box/fakesyndiesuit, - /obj/item/toy/crossbow/tommygun, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun, /obj/item/stack/tile/fakespace/loaded, ) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b93fc3b06b1..ce1e6aad9bb 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -685,14 +685,3 @@ new /obj/item/weapon/lipstick/green(src) new /obj/item/weapon/lipstick/blue(src) new /obj/item/weapon/lipstick/white(src) - -/obj/item/weapon/storage/box/foam_darts - name = "Foam Dart Pack" - desc = "Extra ammo for foam dart launchers. Contains 10 darts." - storage_slots = 10 - max_combined_w_class = 10 - -/obj/item/weapon/storage/box/foam_darts/New() - ..() - for(var/i=1; i <= storage_slots; i++) - new /obj/item/toy/ammo/crossbow(src) diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index d67adf97bcb..da78a7806ef 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -93,8 +93,8 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/foam_darts name = "Pack of Foam Darts" - desc = "A refill pack of 10 foam darts." - typepath = /obj/item/weapon/storage/box/foam_darts + desc = "A refill pack with foam darts." + typepath = /obj/item/ammo_box/foambox cost = 20 /datum/prize_item/minigibber @@ -174,9 +174,10 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/crossbow name = "Foam Dart Crossbow" desc = "A toy crossbow that fires foam darts." - typepath = /obj/item/toy/crossbow + typepath = /obj/item/weapon/gun/projectile/shotgun/toy/crossbow cost = 100 + /datum/prize_item/toy_xeno name = "Xeno Action Figure" desc = "A lifelike replica of the horrific xeno scourge." @@ -252,7 +253,7 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/tommygun name = "Tommygun" desc = "A replica tommygun that fires foam darts." - typepath = /obj/item/toy/crossbow/tommygun + typepath = /obj/item/weapon/gun/projectile/shotgun/toy/tommygun cost = 175 /datum/prize_item/esword diff --git a/code/modules/computer3/computers/arcade.dm b/code/modules/computer3/computers/arcade.dm index a99c05410ae..6949bfff107 100644 --- a/code/modules/computer3/computers/arcade.dm +++ b/code/modules/computer3/computers/arcade.dm @@ -7,8 +7,8 @@ /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/weapon/gun/projectile/revolver/capgun = 2, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, /obj/item/clothing/suit/syndicatefake = 2, /obj/item/weapon/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, @@ -177,4 +177,4 @@ if(interactable()) computer.updateUsrDialog() blocked = 0 - return \ No newline at end of file + return diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 0022a4e1f80..45670ec70b0 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -38,22 +38,41 @@ var/tmp_label = "" var/label_text = sanitize(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label)) if(length(label_text) > 20) - to_chat(user, "\red The inscription can be at most 20 characters long.") + to_chat(user, "The inscription can be at most 20 characters long.") else if(label_text == "") - to_chat(user, "\blue You scratch the inscription off of [initial(BB)].") + to_chat(user, "You scratch the inscription off of [initial(BB)].") BB.name = initial(BB.name) else - to_chat(user, "\blue You inscribe \"[label_text]\" into \the [initial(BB.name)].") + to_chat(user, "You inscribe \"[label_text]\" into \the [initial(BB.name)].") BB.name = "[initial(BB.name)] \"[label_text]\"" else - to_chat(user, "\blue You can only inscribe a metal bullet.")//because inscribing beanbags is silly + to_chat(user, "You can only inscribe a metal bullet.")//because inscribing beanbags is silly else - to_chat(user, "\blue There is no bullet in the casing to inscribe anything into.") + to_chat(user, "There is no bullet in the casing to inscribe anything into.") + +/obj/item/ammo_casing/attackby(obj/item/ammo_box/box as obj, mob/user as mob, params) + if(!istype(box, /obj/item/ammo_box)) + return + if(isturf(loc)) + var/boolets = 0 + for(var/obj/item/ammo_casing/pew in loc) + if(box.stored_ammo.len >= box.max_ammo) + break + if(pew.BB) + if(box.give_round(pew)) + boolets++ + else + continue + if(boolets > 0) + box.update_icon() + to_chat(user, "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.") + else + to_chat(user, "You fail to collect anything.") /obj/item/ammo_casing/proc/newshot() //For energy weapons, shotgun shells and wands (!). - if (!BB) + if(!BB) BB = new projectile_type(src) return @@ -85,19 +104,19 @@ update_icon() /obj/item/ammo_box/proc/get_round(var/keep = 0) - if (!stored_ammo.len) + if(!stored_ammo.len) return null else var/b = stored_ammo[stored_ammo.len] stored_ammo -= b - if (keep) + if(keep) stored_ammo.Insert(1,b) return b /obj/item/ammo_box/proc/give_round(var/obj/item/ammo_casing/r) var/obj/item/ammo_casing/rb = r - if (rb) - if (stored_ammo.len < max_ammo && rb.caliber == caliber) + if(rb) + if(stored_ammo.len < max_ammo && rb.caliber == caliber) stored_ammo += rb rb.loc = src return 1 diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 8fc29a6ce7b..e337742549a 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -255,4 +255,42 @@ desc = "A cased high explosive grenade that can only be activated once fired out of a grenade launcher." caliber = "40mm" icon_state = "40mmHE" - projectile_type = "/obj/item/projectile/bullet/a40mm" \ No newline at end of file + projectile_type = "/obj/item/projectile/bullet/a40mm" + +//FOAM DARTS +/obj/item/ammo_casing/caseless/foam_dart + name = "foam dart" + desc = "It's nerf or nothing! Ages 8 and up." + projectile_type = "/obj/item/projectile/bullet/reusable/foam_dart" + caliber = "foam_force" + icon = 'icons/obj/toyguns.dmi' + icon_state = "foamdart" + var/modified = 0 + +/obj/item/ammo_casing/caseless/foam_dart/update_icon() + if(modified) + icon_state = "foamdart_empty" + +/obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/weapon/A as obj, mob/user as mob, params) + ..() + if(istype(A, /obj/item/weapon/screwdriver) && !modified) + modified = 1 + BB.damage_type = BRUTE + icon_state = "foamdart_empty" + desc = "It's nerf or nothing! ...Although, this one doesn't look too safe." + to_chat(user, "You pop the safety cap off of [src].") + else if((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) + if(!user.unEquip(A)) + return + A.forceMove(BB) + BB.damage = 5 + BB.nodamage = 0 + to_chat(user, "You insert [A] into [src].") + return + + +/obj/item/ammo_casing/caseless/foam_dart/riot + name = "riot foam dart" + desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." + projectile_type = "/obj/item/projectile/bullet/reusable/foam_dart/riot" + icon_state = "foamdart_riot" diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 96f8cca31c0..eb998823b6a 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -86,4 +86,16 @@ name = "Ammunition Box (tranquilizer darts)" icon_state = "45box" ammo_type = /obj/item/ammo_casing/shotgun/tranquilizer - materials = list(MAT_METAL=1750) \ No newline at end of file + materials = list(MAT_METAL=1750) + +//FOAM DARTS +/obj/item/ammo_box/foambox + name = "ammo box (Foam Darts)" + icon = 'icons/obj/toyguns.dmi' + icon_state = "foambox" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart + max_ammo = 40 + +/obj/item/ammo_box/foambox/riot + icon_state = "foambox_riot" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 7cf8e9fcdb0..32c3eeaa37c 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -101,6 +101,17 @@ max_ammo = 5 multiload = 1 +/obj/item/ammo_box/magazine/internal/shot/toy + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart" + caliber = "foam_force" + max_ammo = 4 + +/obj/item/ammo_box/magazine/internal/shot/toy/crossbow + max_ammo = 5 + +/obj/item/ammo_box/magazine/internal/shot/toy/tommygun + max_ammo = 10 + ///////////EXTERNAL MAGAZINES//////////////// /obj/item/ammo_box/magazine/m10mm @@ -290,4 +301,49 @@ /obj/item/ammo_box/magazine/m12g/dragon name = "shotgun magazine (12g dragon's breath)" icon_state = "m12gf" - ammo_type = "/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath" \ No newline at end of file + ammo_type = "/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath" + +//FOAM DARTS +/obj/item/ammo_box/magazine/toy + name = "foam force META magazine" + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart" + caliber = "foam_force" + +/obj/item/ammo_box/magazine/toy/smg + name = "foam force SMG magazine" + icon_state = "smg9mm-30" + max_ammo = 30 + +/obj/item/ammo_box/magazine/toy/smg/update_icon() + ..() + icon_state = "smg9mm-[round(ammo_count(),6)]" + +/obj/item/ammo_box/magazine/toy/smg/riot + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + +/obj/item/ammo_box/magazine/toy/pistol + name = "foam force pistol magazine" + icon_state = "9x19p" + max_ammo = 8 + multiple_sprites = 2 + +/obj/item/ammo_box/magazine/toy/pistol/riot + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + +/obj/item/ammo_box/magazine/toy/smgm45 + name = "donksoft SMG magazine" + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + max_ammo = 20 + +/obj/item/ammo_box/magazine/toy/smgm45/update_icon() + ..() + icon_state = "c20r45-[round(ammo_count(),2)]" + +/obj/item/ammo_box/magazine/toy/m762 + name = "donksoft box magazine" + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + max_ammo = 50 + +/obj/item/ammo_box/magazine/toy/m762/update_icon() + ..() + icon_state = "a762-[round(ammo_count(),10)]" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2b53068bcf6..edb281616d2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -276,19 +276,19 @@ //Suicide handling. if (M == user && user.zone_sel.selecting == "mouth" && !mouthshoot) mouthshoot = 1 - M.visible_message("\red [user] sticks their gun in their mouth, ready to pull the trigger...") + M.visible_message(" [user] sticks their gun in their mouth, ready to pull the trigger...") if(!do_after(user, 40, target = M)) - M.visible_message("\blue [user] decided life was worth living") + M.visible_message(" [user] decided life was worth living") mouthshoot = 0 return if (process_chambered()) - user.visible_message("[user] pulls the trigger.") + user.visible_message("[user] pulls the trigger.") if(silenced) playsound(user, fire_sound, 10, 1) else playsound(user, fire_sound, 50, 1) - if(istype(in_chamber, /obj/item/projectile/lasertag)) - user.show_message("You feel rather silly, trying to commit suicide with a toy.") + if(istype(in_chamber, /obj/item/projectile/lasertag) || istype(in_chamber, /obj/item/projectile/bullet/reusable/foam_dart)) + user.show_message("You feel rather silly, trying to commit suicide with a toy.") mouthshoot = 0 return in_chamber.on_hit(M) @@ -296,7 +296,7 @@ user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1) user.death() else - to_chat(user, "Ow...") + to_chat(user, "Ow...") user.apply_effect(110,STAMINA,0) del(in_chamber) mouthshoot = 0 @@ -380,4 +380,4 @@ update_icon() else set_light(0) - return \ No newline at end of file + return diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index d6fb9d9aff0..ffe2cd269b5 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -16,15 +16,18 @@ + + /obj/item/weapon/gun/projectile/New() ..() - magazine = new mag_type(src) + if(!magazine) + magazine = new mag_type(src) chamber_round() update_icon() return -/obj/item/weapon/gun/projectile/process_chambered(var/eject_casing = 1, var/empty_chamber = 1) +/obj/item/weapon/gun/projectile/process_chambered(var/eject_casing = 1, var/empty_chamber = 1 ) // if(in_chamber) // return 1 @@ -50,9 +53,9 @@ /obj/item/weapon/gun/projectile/proc/chamber_round() - if (chambered || !magazine) + if(chambered || !magazine) return - else if (magazine.ammo_count()) + else if(magazine.ammo_count()) chambered = magazine.get_round() chambered.loc = src return @@ -60,9 +63,9 @@ /obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob, params) ..() - if (istype(A, /obj/item/ammo_box/magazine)) + if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A - if (!magazine && istype(AM, text2path(mag_type))) + if(!magazine && istype(AM, text2path(mag_type))) user.remove_from_mob(AM) magazine = AM magazine.loc = src @@ -71,7 +74,7 @@ A.update_icon() update_icon() return 1 - else if (magazine) + else if(magazine) to_chat(user, "There's already a magazine in \the [src].") if(istype(A, /obj/item/weapon/suppressor)) var/obj/item/weapon/suppressor/S = A @@ -132,9 +135,9 @@ /obj/item/weapon/gun/projectile/proc/get_ammo(var/countchambered = 1) var/boolets = 0 //mature var names for mature people - if (chambered && countchambered) + if(chambered && countchambered) boolets++ - if (magazine) + if(magazine) boolets += magazine.ammo_count() return boolets @@ -146,4 +149,4 @@ item_state = "suppressor" w_class = 2 var/oldsound = null - var/initial_w_class = null \ No newline at end of file + var/initial_w_class = null diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm new file mode 100644 index 00000000000..7bb290f4f46 --- /dev/null +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -0,0 +1,100 @@ +/obj/item/weapon/gun/projectile/automatic/toy + name = "foam force SMG" + desc = "A prototype three-round burst toy submachine gun. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + icon_state = "saber" + item_state = "gun" + mag_type = "/obj/item/ammo_box/magazine/toy/smg" + force = 0 + throwforce = 0 + burst_size = 3 + can_suppress = 0 + clumsy_check = 0 + needs_permit = 0 + +/obj/item/weapon/gun/projectile/automatic/toy/process_chambered() + return ..(0, 1) + +/obj/item/weapon/gun/projectile/automatic/toy/pistol + name = "foam force pistol" + desc = "A small, easily concealable toy handgun. Ages 8 and up." + icon_state = "pistol" + w_class = 2 + mag_type = "/obj/item/ammo_box/magazine/toy/pistol" + fire_sound = 'sound/weapons/Gunshot.ogg' + can_suppress = 0 + burst_size = 1 + fire_delay = 0 + action_button_name = null + +/obj/item/weapon/gun/projectile/automatic/toy/pistol/update_icon() + ..() + icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" + +/obj/item/weapon/gun/projectile/automatic/toy/pistol/riot + name = "foam force riot pistol" + desc = "RIOT! Ages 8 and up." + +/obj/item/weapon/gun/projectile/automatic/toy/pistol/riot/New() + magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) + ..() + +/obj/item/weapon/gun/projectile/automatic/c20r/toy + name = "donksoft SMG" + desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + can_suppress = 0 + needs_permit = 0 + mag_type = "/obj/item/ammo_box/magazine/toy/smgm45" + +/obj/item/weapon/gun/projectile/automatic/c20r/toy/process_chambered() + return ..(0, 1) + +/obj/item/weapon/gun/projectile/automatic/l6_saw/toy + name = "donksoft LMG" + desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + can_suppress = 0 + needs_permit = 0 + mag_type = "/obj/item/ammo_box/magazine/toy/m762" + +/obj/item/weapon/gun/projectile/automatic/l6_saw/toy/process_chambered() + return ..(0, 1) + + + +/obj/item/weapon/gun/projectile/shotgun/toy + name = "foam force shotgun" + desc = "A toy shotgun with wood furniture and a four-shell capacity underneath. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + force = 0 + throwforce = 0 + origin_tech = null + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy" + clumsy_check = 0 + needs_permit = 0 + +/obj/item/weapon/gun/projectile/shotgun/toy/pump_unload() + if(chambered)//We have a shell in the chamber + chambered = null + if(in_chamber) + in_chamber = null + +/obj/item/weapon/gun/projectile/shotgun/toy/crossbow + name = "foam force crossbow" + desc = "A weapon favored by many overactive children. Ages 8 and up." + icon_state = "crossbow" + item_state = "crossbow" + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/crossbow" + fire_sound = 'sound/items/syringeproj.ogg' + slot_flags = SLOT_BELT + w_class = 2 + +/obj/item/weapon/gun/projectile/shotgun/toy/tommygun + name = "tommy gun" + desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." + icon = 'icons/obj/gun.dmi' + icon_state = "tommy" + item_state = "shotgun" + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/tommygun" + w_class = 2 diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm new file mode 100644 index 00000000000..81defd55743 --- /dev/null +++ b/code/modules/projectiles/projectile/reusable.dm @@ -0,0 +1,45 @@ +/obj/item/projectile/bullet/reusable + name = "reusable bullet" + desc = "How do you even reuse a bullet?" + var/obj/item/ammo_casing/caseless/ammo_type = /obj/item/ammo_casing/caseless/ + var/hit = 0 + +/obj/item/projectile/bullet/reusable/on_hit(var/atom/target, var/blocked = 0) + if(!proj_hit) + proj_hit = 1 + if (src.contents.len) + var/obj/content + for(content in src.contents) + content.loc = src.loc + else + new ammo_type(src.loc) + ..() + +/obj/item/projectile/bullet/reusable/on_range() + if(!proj_hit) + if (src.contents.len) + var/obj/content + for(content in src.contents) + content.loc = src.loc + else + new ammo_type(src.loc) + ..() + +/obj/item/projectile/bullet/reusable/foam_dart + name = "foam dart" + desc = "I hope you're wearing eye protection." + damage = 0 // It's a damn toy. + damage_type = OXY + nodamage = 1 + edge = 0 + embed = 0 + icon = 'icons/obj/toyguns.dmi' + icon_state = "foamdart" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart + range = 10 + +/obj/item/projectile/bullet/reusable/foam_dart/riot + name = "riot foam dart" + icon_state = "foamdart_riot" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot + stamina = 25 diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 663b394efb6..b5d44579d07 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -323,6 +323,14 @@ build_path = /obj/item/weapon/canvas/twentythreeXnineteen category = list("initial", "Miscellaneous") +/datum/design/foambox + name = "Box of Foam Force darts" + id = "foamforce" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2000) + build_path = /obj/item/ammo_box/foambox + category = list("initial", "Miscellaneous") + /datum/design/canvas/twentythreeXtwentythree name = "23px by 23px Canvas" id = "canvas23x23" diff --git a/icons/obj/toyguns.dmi b/icons/obj/toyguns.dmi new file mode 100644 index 00000000000..bd2ff273a40 Binary files /dev/null and b/icons/obj/toyguns.dmi differ diff --git a/paradise.dme b/paradise.dme index 1689caca4e1..b9b84d17cef 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1775,11 +1775,13 @@ #include "code\modules\projectiles\guns\projectile\revolver.dm" #include "code\modules\projectiles\guns\projectile\rocket.dm" #include "code\modules\projectiles\guns\projectile\shotgun.dm" +#include "code\modules\projectiles\guns\projectile\toy.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" #include "code\modules\projectiles\projectile\energy.dm" #include "code\modules\projectiles\projectile\force.dm" #include "code\modules\projectiles\projectile\magic.dm" +#include "code\modules\projectiles\projectile\reusable.dm" #include "code\modules\projectiles\projectile\special.dm" #include "code\modules\reagents\Chemistry-Colours.dm" #include "code\modules\reagents\Chemistry-Holder.dm"