From 5cf3f258922a2739f0b4ac8e829cc8bbf591caf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Fri, 22 Apr 2016 17:51:24 +0200 Subject: [PATCH 01/10] Ports /tg/ Foam Force guns --- _maps/map_files/RandomZLevels/academy.dmm | 5 +- _maps/map_files/RandomZLevels/spacehotel.dmm | 3 +- .../RandomZLevels/stationCollision.dmm | 7 +- code/datums/supplypacks.dm | 39 ++++- code/datums/uplink_item.dm | 34 ++++- code/game/objects/items/random_items.dm | 4 +- code/game/objects/items/toys.dm | 140 +----------------- .../objects/items/weapons/gift_wrappaper.dm | 4 +- .../objects/items/weapons/storage/boxes.dm | 11 -- code/modules/arcade/prize_datums.dm | 10 +- code/modules/computer3/computers/arcade.dm | 6 +- .../projectiles/ammunition/ammo_casings.dm | 41 ++++- code/modules/projectiles/ammunition/boxes.dm | 14 +- .../projectiles/ammunition/magazines.dm | 60 +++++++- code/modules/projectiles/gun.dm | 14 +- code/modules/projectiles/guns/projectile.dm | 9 +- .../projectiles/guns/projectile/toy.dm | 102 +++++++++++++ .../projectiles/projectile/reusable.dm | 43 ++++++ icons/obj/toyguns.dmi | Bin 0 -> 2562 bytes paradise.dme | 2 + 20 files changed, 361 insertions(+), 187 deletions(-) create mode 100644 code/modules/projectiles/guns/projectile/toy.dm create mode 100644 code/modules/projectiles/projectile/reusable.dm create mode 100644 icons/obj/toyguns.dmi diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 9258caf0cfb..f5ecc09bfe4 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/automatic/tommygun/toy,/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/automatic/tommygun/toy,/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..0f6741251de 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/automatic/tommygun/toy,/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/automatic/tommygun/toy,/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/automatic/tommygun/toy,/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..0db941e3ca5 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/automatic/tommygun/toy, + /obj/item/weapon/gun/projectile/automatic/tommygun/toy) 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 = 25 + 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..cc10ee566af 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -407,6 +407,31 @@ 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." + item = /obj/item/weapon/gun/projectile/automatic/c20r/toy + cost = 12 + 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." + item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy + cost = 30 + 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!" + item = /obj/item/ammo_box/foambox/riot + cost = 10 + 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 +575,13 @@ 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." + item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot + cost = 10 + 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 +1137,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..c4c1fd38604 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/automatic/tommygun/toy, /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..d404fbaf855 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,9 +253,10 @@ 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/automatic/tommygun/toy cost = 175 + /datum/prize_item/esword name = "Toy Energy Sword" desc = "A plastic replica of an energy blade." 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/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 8fc29a6ce7b..1527dfc2b64 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -255,4 +255,43 @@ 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 = "Its 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" + desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." + +/obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/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 = "Its nerf or nothing! ...Although, this one doesn't look too safe." + 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.loc = BB + BB.damage = 5 + BB.nodamage = 0 + 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..13757e8de0d 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -101,6 +101,14 @@ 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 + ///////////EXTERNAL MAGAZINES//////////////// /obj/item/ammo_box/magazine/m10mm @@ -290,4 +298,54 @@ /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)]" + +/obj/item/ammo_box/magazine/toy/tommygunm45 + name = "little tommy's mag" + icon_state = "drum45" + max_ammo = 50 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2aea246d314..e68e384e940 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -279,19 +279,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) @@ -299,7 +299,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 @@ -383,4 +383,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..8844f5cd7ab 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 @@ -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..350b53f9aa1 --- /dev/null +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -0,0 +1,102 @@ +/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" + fire_sound = 'sound/items/syringeproj.ogg' + 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" + 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/automatic/tommygun/toy + name = "tommy gun" + desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." + icon_state = "tommygun" + item_state = "shotgun" + w_class = 2 + mag_type = "/obj/item/ammo_box/magazine/toy/tommygunm45" + fire_sound = 'sound/items/syringeproj.ogg' + +/obj/item/weapon/gun/projectile/automatic/tommygun/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" + fire_sound = 'sound/items/syringeproj.ogg' + 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 = 'icons/obj/gun.dmi' + icon_state = "crossbow" + item_state = "crossbow" + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/crossbow" + slot_flags = SLOT_BELT + 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..367d20b6992 --- /dev/null +++ b/code/modules/projectiles/projectile/reusable.dm @@ -0,0 +1,43 @@ +/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 + 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/icons/obj/toyguns.dmi b/icons/obj/toyguns.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fee7774cae553b6e63d8c85d5ab699fe8740ad67 GIT binary patch literal 2562 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 Date: Fri, 22 Apr 2016 21:40:27 +0200 Subject: [PATCH 02/10] Adds the ability to pick up all ammo from a turf using a magazine --- code/modules/projectiles/ammunition.dm | 29 +++++++++++++++---- .../projectiles/ammunition/ammo_casings.dm | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 0022a4e1f80..d4a24807275 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -38,19 +38,38 @@ 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(src.loc)) + var/boolets = 0 + for(var/obj/item/ammo_casing/pew in src.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() + user << "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s." + else + user << "You fail to collect anything." /obj/item/ammo_casing/proc/newshot() //For energy weapons, shotgun shells and wands (!). if (!BB) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 1527dfc2b64..b60744aaf79 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -273,7 +273,7 @@ icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." -/obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/A as obj, mob/user as mob, params) +/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 From 03c173aeaffe738daebef51218ec83b78deb9b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Sun, 24 Apr 2016 09:19:03 +0200 Subject: [PATCH 03/10] Lowers costs, adds darts to autolathe --- code/datums/supplypacks.dm | 4 ++-- code/datums/uplink_item.dm | 8 ++++---- .../projectiles/guns/projectile/toy.dm | 1 - .../research/designs/autolathe_designs.dm | 8 ++++++++ icons/obj/toyguns.dmi | Bin 2562 -> 2804 bytes 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 0db941e3ca5..a5b6605c76e 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1360,7 +1360,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/under/mafia/sue, /obj/item/clothing/under/mafia/tan, /obj/item/weapon/gun/projectile/automatic/tommygun/toy, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy) + /obj/item/weapon/gun/projectile/automatic/tommygun/toy) cost = 15 containername = "mafia supply crate" @@ -1405,7 +1405,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/gun/projectile/shotgun/toy, /obj/item/weapon/gun/projectile/shotgun/toy, /obj/item/weapon/gun/projectile/shotgun/toy) - cost = 25 + cost = 10 containername = "foam force crate" /datum/supply_packs/misc/foamforce/bonus diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index cc10ee566af..2c74d75b545 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -411,7 +411,7 @@ var/list/uplink_items = list() name = "Toy Submachine Gun" desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." item = /obj/item/weapon/gun/projectile/automatic/c20r/toy - cost = 12 + cost = 5 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -419,7 +419,7 @@ var/list/uplink_items = list() 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." item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy - cost = 30 + cost = 10 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -427,7 +427,7 @@ var/list/uplink_items = list() 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!" item = /obj/item/ammo_box/foambox/riot - cost = 10 + cost = 2 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -579,7 +579,7 @@ var/list/uplink_items = list() 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." item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot - cost = 10 + cost = 3 surplus = 10 /datum/uplink_item/stealthy_weapons/soap diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm index 350b53f9aa1..812361ec245 100644 --- a/code/modules/projectiles/guns/projectile/toy.dm +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -94,7 +94,6 @@ /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 = 'icons/obj/gun.dmi' icon_state = "crossbow" item_state = "crossbow" mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/crossbow" 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 index fee7774cae553b6e63d8c85d5ab699fe8740ad67..4ac5c62056e39a1fe97c752db1cabbf0010fe347 100644 GIT binary patch delta 2555 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 From 0f7be5576fb31a43d2f9dbe757cb6dd865dd950f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Mon, 25 Apr 2016 11:32:48 +0200 Subject: [PATCH 04/10] Gunshot sounds, uplink references, less spammy tommygun, fixes --- _maps/map_files/RandomZLevels/academy.dmm | 4 +-- .../RandomZLevels/stationCollision.dmm | 6 ++--- code/datums/supplypacks.dm | 4 +-- code/datums/uplink_item.dm | 4 +++ .../objects/items/weapons/gift_wrappaper.dm | 2 +- code/modules/arcade/prize_datums.dm | 3 +-- code/modules/projectiles/ammunition.dm | 26 +++++++++---------- .../projectiles/ammunition/ammo_casings.dm | 14 +++++----- .../projectiles/ammunition/magazines.dm | 8 +++--- code/modules/projectiles/guns/projectile.dm | 16 ++++++------ .../projectiles/guns/projectile/toy.dm | 23 ++++++++-------- 11 files changed, 55 insertions(+), 55 deletions(-) diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index f5ecc09bfe4..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/weapon/gun/projectile/automatic/tommygun/toy,/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/weapon/gun/projectile/automatic/tommygun/toy,/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) diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index 0f6741251de..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/weapon/gun/projectile/automatic/tommygun/toy,/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/automatic/tommygun/toy,/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/weapon/gun/projectile/automatic/tommygun/toy,/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) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index a5b6605c76e..247d481f1be 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1359,8 +1359,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/under/mafia/white, /obj/item/clothing/under/mafia/sue, /obj/item/clothing/under/mafia/tan, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy) + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun) cost = 15 containername = "mafia supply crate" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 2c74d75b545..ca41668e53a 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -410,6 +410,7 @@ var/list/uplink_items = list() /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) @@ -418,6 +419,7 @@ var/list/uplink_items = list() /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) @@ -426,6 +428,7 @@ var/list/uplink_items = list() /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) @@ -578,6 +581,7 @@ var/list/uplink_items = list() /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 diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index c4c1fd38604..1b819bb0a0d 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -115,7 +115,7 @@ /obj/item/toy/AI, /obj/item/clothing/under/syndicate/tacticool, /obj/item/weapon/storage/box/fakesyndiesuit, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun, /obj/item/stack/tile/fakespace/loaded, ) diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index d404fbaf855..da78a7806ef 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -253,10 +253,9 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/tommygun name = "Tommygun" desc = "A replica tommygun that fires foam darts." - typepath = /obj/item/weapon/gun/projectile/automatic/tommygun/toy + typepath = /obj/item/weapon/gun/projectile/shotgun/toy/tommygun cost = 175 - /datum/prize_item/esword name = "Toy Energy Sword" desc = "A plastic replica of an energy blade." diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index d4a24807275..45670ec70b0 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -55,24 +55,24 @@ /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(src.loc)) + if(isturf(loc)) var/boolets = 0 - for(var/obj/item/ammo_casing/pew in src.loc) - if (box.stored_ammo.len >= box.max_ammo) + 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)) + if(pew.BB) + if(box.give_round(pew)) boolets++ else continue - if (boolets > 0) + if(boolets > 0) box.update_icon() - user << "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s." + to_chat(user, "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.") else - user << "You fail to collect anything." + 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 @@ -104,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 b60744aaf79..ec6aa9bc7f4 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -269,25 +269,25 @@ /obj/item/ammo_casing/caseless/foam_dart/update_icon() ..() - if (modified) + if(modified) icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." /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) + if(istype(A, /obj/item/weapon/screwdriver) && !modified) modified = 1 BB.damage_type = BRUTE icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." - 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)) + 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.loc = BB + A.forceMove(BB) BB.damage = 5 BB.nodamage = 0 - user << "You insert [A] into [src]." + to_chat(user, "You insert [A] into [src].") return /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 13757e8de0d..32c3eeaa37c 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -109,6 +109,9 @@ /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 @@ -344,8 +347,3 @@ /obj/item/ammo_box/magazine/toy/m762/update_icon() ..() icon_state = "a762-[round(ammo_count(),10)]" - -/obj/item/ammo_box/magazine/toy/tommygunm45 - name = "little tommy's mag" - icon_state = "drum45" - max_ammo = 50 diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 8844f5cd7ab..ffe2cd269b5 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -20,7 +20,7 @@ /obj/item/weapon/gun/projectile/New() ..() - if (!magazine) + if(!magazine) magazine = new mag_type(src) chamber_round() update_icon() @@ -53,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 @@ -63,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 @@ -74,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 @@ -135,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 diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm index 812361ec245..7bb290f4f46 100644 --- a/code/modules/projectiles/guns/projectile/toy.dm +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -5,7 +5,6 @@ icon_state = "saber" item_state = "gun" mag_type = "/obj/item/ammo_box/magazine/toy/smg" - fire_sound = 'sound/items/syringeproj.ogg' force = 0 throwforce = 0 burst_size = 3 @@ -22,6 +21,7 @@ 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 @@ -61,17 +61,7 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw/toy/process_chambered() return ..(0, 1) -/obj/item/weapon/gun/projectile/automatic/tommygun/toy - name = "tommy gun" - desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." - icon_state = "tommygun" - item_state = "shotgun" - w_class = 2 - mag_type = "/obj/item/ammo_box/magazine/toy/tommygunm45" - fire_sound = 'sound/items/syringeproj.ogg' -/obj/item/weapon/gun/projectile/automatic/tommygun/toy/process_chambered() - return ..(0, 1) /obj/item/weapon/gun/projectile/shotgun/toy name = "foam force shotgun" @@ -81,7 +71,6 @@ throwforce = 0 origin_tech = null mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy" - fire_sound = 'sound/items/syringeproj.ogg' clumsy_check = 0 needs_permit = 0 @@ -97,5 +86,15 @@ 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 From d35248366a16cf4af885fef826bf1907bc9b5daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Tue, 26 Apr 2016 11:28:00 +0200 Subject: [PATCH 05/10] Thingies don't embed, icons work. --- .../projectiles/ammunition/ammo_casings.dm | 3 ++- .../projectiles/projectile/reusable.dm | 4 +++- icons/obj/toyguns.dmi | Bin 2804 -> 2486 bytes 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index ec6aa9bc7f4..16fad035055 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -268,7 +268,7 @@ var/modified = 0 /obj/item/ammo_casing/caseless/foam_dart/update_icon() - ..() + ....() //to omit adding "-live" to the ammo casing if(modified) icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." @@ -290,6 +290,7 @@ 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." diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm index 367d20b6992..81defd55743 100644 --- a/code/modules/projectiles/projectile/reusable.dm +++ b/code/modules/projectiles/projectile/reusable.dm @@ -31,10 +31,12 @@ 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 + range = 10 /obj/item/projectile/bullet/reusable/foam_dart/riot name = "riot foam dart" diff --git a/icons/obj/toyguns.dmi b/icons/obj/toyguns.dmi index 4ac5c62056e39a1fe97c752db1cabbf0010fe347..bd2ff273a40c1f1d38bdc3fe4a85e9089d2547be 100644 GIT binary patch delta 2414 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 Date: Tue, 26 Apr 2016 16:19:30 +0200 Subject: [PATCH 06/10] Makes gameboard circuits printable Whoops! --- code/modules/research/designs/machine_designs.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index afb1e09b40f..d2da596b692 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -492,6 +492,17 @@ build_path = /obj/item/weapon/circuitboard/prize_counter category = list("Misc. Machinery") +/datum/design/gameboard + name = "Machine Design (Virtual Gameboard)" + desc = "The circuit board for a Virtual Gameboard." + id = "gameboard" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS=1000, "sacid"=20) + build_path = /obj/item/weapon/circuitboard/gameboard + category = list("Misc. Machinery") + + /datum/design/botany_extractor name = "Machine Design (Lysis-Isolation Centrifuge)" desc = "The circuit board for a lysis-isolation centrifuge." From f8ebf7d672a5e424f4d1c53a1717f821a0ebac90 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 27 Apr 2016 03:58:32 -0400 Subject: [PATCH 07/10] Fixes reviving while restrained --- code/modules/mob/living/living.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 37b326dc4c5..dd47a9cbcb6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -327,10 +327,13 @@ if (C.handcuffed && !initial(C.handcuffed)) C.unEquip(C.handcuffed) C.handcuffed = initial(C.handcuffed) + C.update_handcuffed() if (C.legcuffed && !initial(C.legcuffed)) C.unEquip(C.legcuffed) C.legcuffed = initial(C.legcuffed) + C.update_inv_legcuffed() + if(C.reagents) for(var/datum/reagent/R in C.reagents.reagent_list) C.reagents.clear_reagents() From 9f8a8cef9b374984191d65412c545f918820828a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Wed, 27 Apr 2016 10:56:04 +0200 Subject: [PATCH 08/10] Grammar and that weird proc. --- code/modules/projectiles/ammunition/ammo_casings.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 16fad035055..e337742549a 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -260,7 +260,7 @@ //FOAM DARTS /obj/item/ammo_casing/caseless/foam_dart name = "foam dart" - desc = "Its nerf or nothing! Ages 8 and up." + 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' @@ -268,10 +268,8 @@ var/modified = 0 /obj/item/ammo_casing/caseless/foam_dart/update_icon() - ....() //to omit adding "-live" to the ammo casing if(modified) icon_state = "foamdart_empty" - desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." /obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/weapon/A as obj, mob/user as mob, params) ..() @@ -279,7 +277,7 @@ modified = 1 BB.damage_type = BRUTE icon_state = "foamdart_empty" - desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." + 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)) From 09ee3315d474531623b09969257010e28b9eb5fc Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 27 Apr 2016 11:43:58 -0400 Subject: [PATCH 09/10] Automatic changelog generation for PR #4270 --- html/changelogs/AutoChangeLog-pr-4270.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4270.yml diff --git a/html/changelogs/AutoChangeLog-pr-4270.yml b/html/changelogs/AutoChangeLog-pr-4270.yml new file mode 100644 index 00000000000..c46542d69f8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4270.yml @@ -0,0 +1,4 @@ +author: FlattestGuitar +delete-after: True +changes: + - rscadd: "ports /tg/ Foam Force guns, now you can shoot foam at your enemies /with style/" From b54d463e3abef0f0b7fefd92e287f680a17251c7 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 27 Apr 2016 17:13:46 -0400 Subject: [PATCH 10/10] Fixes ai satt supply and scrubber lines actually connecting to something --- _maps/map_files/cyberiad/cyberiad.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 4e12bb5b05a..674e111caae 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -7989,7 +7989,7 @@ "cXG" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/aisat) -"cXJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "75"},/turf/simulated/floor/plasteel,/area/aisat/maintenance) +"cXJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "75"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXK" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/warning_stripes/north,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/aisat/maintenance) @@ -8003,7 +8003,7 @@ "cXU" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXV" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plasteel,/area/aisat/maintenance) -"cXX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/aisat/maintenance) +"cXX" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/wall,/area/aisat/maintenance) "cXY" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/toxins/xenobiology) "cXZ" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) "cYa" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{dir = 10; icon_state = "yellow"},/area/aisat/maintenance)