From 823863828358799512f3786a044f358d437dd279 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 13 Dec 2014 11:18:56 -0500 Subject: [PATCH] Gun Harmonization --- code/datums/uplink_item.dm | 86 +++-- code/game/gamemodes/wizard/rightandwrong.dm | 14 +- code/game/machinery/autolathe.dm | 5 +- code/game/mecha/equipment/weapons/weapons.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 17 - .../items/weapons/storage/uplink_kits.dm | 2 +- .../living/simple_animal/hostile/syndicate.dm | 4 +- code/modules/projectiles/ammunition.dm | 14 +- .../{bullets.dm => ammo_casings.dm} | 334 +++++++++--------- code/modules/projectiles/ammunition/boxes.dm | 71 ++-- .../projectiles/ammunition/magazines.dm | 119 ++++--- code/modules/projectiles/gun.dm | 1 + code/modules/projectiles/guns/energy/laser.dm | 5 + code/modules/projectiles/guns/energy/pulse.dm | 2 +- code/modules/projectiles/guns/energy/stun.dm | 2 +- code/modules/projectiles/guns/projectile.dm | 51 ++- .../projectiles/guns/projectile/automatic.dm | 152 +++++--- .../{launcher.dm => grenade launcher.dm} | 0 .../projectiles/guns/projectile/launchers.dm | 50 +++ .../projectiles/guns/projectile/pistol.dm | 115 +----- .../projectiles/guns/projectile/revolver.dm | 10 +- .../projectiles/guns/projectile/shotgun.dm | 30 +- .../modules/projectiles/projectile/bullets.dm | 124 +++---- .../modules/projectiles/projectile/special.dm | 11 + code/modules/research/designs.dm | 47 +-- icons/mob/back.dmi | Bin 64727 -> 67339 bytes icons/mob/in-hand/guns.dmi | Bin 595 -> 941 bytes icons/obj/ammo.dmi | Bin 17482 -> 15945 bytes icons/obj/gun.dmi | Bin 58019 -> 61296 bytes maps/cyberiad.dmm | 14 +- paradise.dme | 5 +- sound/weapons/Gunshot.ogg | Bin 7321 -> 13653 bytes 32 files changed, 702 insertions(+), 585 deletions(-) rename code/modules/projectiles/ammunition/{bullets.dm => ammo_casings.dm} (61%) rename code/modules/projectiles/guns/projectile/{launcher.dm => grenade launcher.dm} (100%) create mode 100644 code/modules/projectiles/guns/projectile/launchers.dm diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 87e1d741728..5e9d0f70042 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -205,28 +205,29 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous category = "Highly Visible and Dangerous Weapons" -/datum/uplink_item/dangerous/revolver - name = "Fully Loaded Revolver" - desc = "A traditional handgun which fires .357 rounds. Has 7 chambers. Can down an unarmoured target with two shots." - item = /obj/item/weapon/gun/projectile/revolver - cost = 13 /datum/uplink_item/dangerous/pistol - name = "Stechkin Pistol" - desc = "A small, easily concealable handgun that uses 10mm magazines and is compatible with suppressors." + name = "Syndicate Pistol" + desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible with suppressors." item = /obj/item/weapon/gun/projectile/automatic/pistol cost = 9 +/datum/uplink_item/dangerous/revolver + name = "Syndicate Revolver" + desc = "A brutally simple syndicate revolver that fires .357 Magnum cartridges and has 7 chambers." + item = /obj/item/weapon/gun/projectile/revolver + cost = 13 + /datum/uplink_item/dangerous/smg - name = "C-20r Submachine Gun" - desc = "A fully-loaded Scarborough Arms-developed submachine gun that fires 12mm automatic rounds with a 20-round magazine." + name = "Syndicate SMG" + desc = "A fully-loaded Scarborough Arms bullpup submachine gun that fires .45 rounds with a 20-round magazine and is compatible with suppressors." item = /obj/item/weapon/gun/projectile/automatic/c20r cost = 14 gamemodes = list("nuclear emergency") /datum/uplink_item/dangerous/machinegun - name = "L6 Squad Automatic Weapon" - desc = "A traditionally constructed machine gun made by AA-2531. This deadly weapon has a massive 50-round magazine of 7.62×51mm ammunition." + name = "Syndicate LMG" + desc = "A fully-loaded Aussec Armoury belt-fed machine gun. This deadly weapon has a massive 50-round magazine of devastating 7.62x51mm ammunition." item = /obj/item/weapon/gun/projectile/automatic/l6_saw cost = 40 gamemodes = list("nuclear emergency") @@ -304,53 +305,74 @@ var/list/uplink_items = list() /datum/uplink_item/ammo category = "Ammunition" -/datum/uplink_item/ammo/revolver - name = "Ammo-357" - desc = "A box that contains seven additional rounds for the revolver, made using an automatic lathe." - item = /obj/item/ammo_box/a357 - cost = 4 - /datum/uplink_item/ammo/pistol name = "Ammo-10mm" - desc = "An additional 8-round 10mm magazine for use in the Stetchkin pistol." + desc = "An additional 8-round 10mm magazine for use in the syndicate pistol. These subsonic rounds are dirt cheap but are half as effective as .357 rounds." item = /obj/item/ammo_box/magazine/m10mm cost = 1 +/datum/uplink_item/ammo/revolver + name = "Speed Loader - .357" + desc = "A speed loader that contains seven additional .357 Magnum rounds for the syndicate revolver. For when you really need a lot of things dead." + item = /obj/item/ammo_box/a357 + cost = 4 + /datum/uplink_item/ammo/smg - name = "Ammo-12mm" - desc = "A 20-round 12mm magazine for use in the C-20r submachine gun." - item = /obj/item/ammo_box/magazine/m12mm + name = "Magazine - .45" + desc = "An additional 20-round .45 magazine for use in the C-20r submachine gun. These bullets pack a lot of punch that can knock most targets down, but do limited overall damage." + item = /obj/item/ammo_box/magazine/smgm45 cost = 2 gamemodes = list("nuclear emergency") -/datum/uplink_item/ammo/machinegun - name = "Ammo-7.62×51mm" - desc = "A 50-round magazine of 7.62×51mm ammunition for use in the L6 SAW machinegun. By the time you need to use this, you'll already be on a pile of corpses." - item = /obj/item/ammo_box/magazine/m762 - cost = 12 +/datum/uplink_item/dangerous/car + name = "C-90gl Compact Assault Rifle" + desc = "A fully-loaded Zashchita Industriya toploading bullpup assault rifle that uses 30-round 5.45x39mm magazines with a togglable underslung 40mm grenade launcher." + item = /obj/item/weapon/gun/projectile/automatic/c90gl + cost = 18 gamemodes = list("nuclear emergency") /datum/uplink_item/ammo/bullstun - name = "Ammo-12g Stun Slug" + name = "Drum Magazine - 12g Stun Slug" desc = "An additional 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're non-lethal would be lying." item = /obj/item/ammo_box/magazine/m12g cost = 2 gamemodes = list("nuclear emergency") /datum/uplink_item/ammo/bullbuck - name = "Ammo-12g Buckshot" + name = "Drum Magazine - 12g Buckshot" desc = "An alternative 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy." item = /obj/item/ammo_box/magazine/m12g/buckshot cost = 2 gamemodes = list("nuclear emergency") /datum/uplink_item/ammo/bulldragon - name = "Ammo-12g Dragon's Breath" + name = "Drum Magazine - 12g Dragon's Breath" desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. I'm a fire starter, twisted fire starter!" item = /obj/item/ammo_box/magazine/m12g/dragon cost = 3 gamemodes = list("nuclear emergency") +/datum/uplink_item/ammo/car + name = "Box Magazine - 5.45x39mm" + desc = "An additional 30-round 5.45x39mm magazine for use in the C-90gl assault rifle. These bullets don't have the punch to knock most targets down, but dish out higher overall damage." + item = /obj/item/ammo_box/magazine/m545 + cost = 2 + gamemodes = list("nuclear emergency") + +/datum/uplink_item/ammo/a40mm + name = "Ammo Box - 40mm grenades" + desc = "A box of 4 additional 40mm HE grenades for use the C-90gl's underbarrel grenade launcher. Your teammates will thank you to not shoot these down small hallways." + item = /obj/item/ammo_box/a40mm + cost = 4 + gamemodes = list("nuclear emergency") + +/datum/uplink_item/ammo/machinegun + name = "Box Magazine - 7.62×51mm" + desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW machinegun. By the time you need to use this, you'll already be on a pile of corpses." + item = /obj/item/ammo_box/magazine/m762 + cost = 12 + gamemodes = list("nuclear emergency") + // STEALTHY WEAPONS @@ -379,9 +401,9 @@ var/list/uplink_items = list() // Commented out until a fix can be found, currently doesn't work with the PDA NanoUI and people keep wasting Telecrystals on it. -- Dave /datum/uplink_item/stealthy_weapons/silencer - name = "Stetchkin Silencer" - desc = "Fitted for use on the Stetchkin pistol, this silencer will make its shots quieter when equipped onto it." - item = /obj/item/weapon/silencer + name = "Universal Suppressor" + desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the shots of the weapon for increased stealth and superior ambushing capability." + item = /obj/item/weapon/suppressor cost = 3 // STEALTHY TOOLS diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 045809b422e..ce7c91f3245 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -19,7 +19,7 @@ for(var/datum/objective/OBJ in H.mind.objectives) H << "Objective #[obj_count]: [OBJ.explanation_text]" obj_count++ - var/randomizeguns = pick("taser","egun","laser","revolver","detective","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","mateba","smg","uzi","crossbow","saw") + var/randomizeguns = pick("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car") var/randomizemagic = pick("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge","wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying") if(!summon_type) switch (randomizeguns) @@ -33,7 +33,7 @@ new /obj/item/weapon/gun/projectile/revolver(get_turf(H)) if("detective") new /obj/item/weapon/gun/projectile/revolver/detective(get_turf(H)) - if("smg") + if("c20r") new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H)) if("nuclear") new /obj/item/weapon/gun/energy/gun/nuclear(get_turf(H)) @@ -45,7 +45,7 @@ new /obj/item/weapon/gun/energy/pulse_rifle(get_turf(H)) if("silenced") new /obj/item/weapon/gun/projectile/automatic/pistol(get_turf(H)) - new /obj/item/weapon/silencer(get_turf(H)) + new /obj/item/weapon/suppressor(get_turf(H)) if("cannon") new /obj/item/weapon/gun/energy/lasercannon(get_turf(H)) if("doublebarrel") @@ -54,16 +54,18 @@ new /obj/item/weapon/gun/projectile/shotgun/(get_turf(H)) if("combatshotgun") new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H)) + if("bulldog") + new /obj/item/weapon/gun/projectile/automatic/bulldog(get_turf(H)) if("mateba") new /obj/item/weapon/gun/projectile/revolver/mateba(get_turf(H)) - if("smg") + if("sabr") new /obj/item/weapon/gun/projectile/automatic(get_turf(H)) - if("uzi") - new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H)) if("crossbow") new /obj/item/weapon/gun/energy/crossbow(get_turf(H)) if("saw") new /obj/item/weapon/gun/projectile/automatic/l6_saw(get_turf(H)) + if("car") + new /obj/item/weapon/gun/projectile/automatic/c90gl(get_turf(H)) else switch (randomizemagic) if("fireball") diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index cb9e2d89985..b31ebab786f 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -62,8 +62,11 @@ var/global/list/autolathe_recipes_hidden = list( \ new /obj/item/weapon/handcuffs(), \ new /obj/item/weapon/hatchet(), \ new /obj/item/ammo_box/a357(), \ + new /obj/item/ammo_box/c10mm(), \ + new /obj/item/ammo_box/c45(), \ + new /obj/item/ammo_box/c9mm(), \ new /obj/item/ammo_casing/shotgun(), \ - new /obj/item/ammo_casing/shotgun/buck(), \ + new /obj/item/ammo_casing/shotgun/buckshot(), \ new /obj/item/ammo_casing/shotgun/incendiary(), \ /*new /obj/item/ammo_casing/shotgun/dart(), \ new /obj/item/weapon/shield/riot(), */ \ diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index a2a5e5228c2..c1456733a8a 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -254,7 +254,7 @@ name = "LBX AC 10 \"Scattershot\"" icon_state = "mecha_scatter" equip_cooldown = 20 - projectile = /obj/item/projectile/bullet/midbullet12 + projectile = /obj/item/projectile/bullet/midbullet fire_sound = 'sound/weapons/Gunshot.ogg' projectiles = 40 projectile_energy_cost = 25 diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index c52ab34827c..c2a7d68fa37 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -152,23 +152,6 @@ new /obj/item/weapon/dnainjector/m2h(src) new /obj/item/weapon/dnainjector/m2h(src) - -/obj/item/weapon/storage/box/blanks - name = "box of birdshot shells" - desc = "It has a picture of a gun and several warning symbols on the front." - m_amt = 41000 - - New() - ..() - new /obj/item/ammo_casing/shotgun/birdshot(src) - new /obj/item/ammo_casing/shotgun/birdshot(src) - new /obj/item/ammo_casing/shotgun/birdshot(src) - new /obj/item/ammo_casing/shotgun/birdshot(src) - new /obj/item/ammo_casing/shotgun/birdshot(src) - new /obj/item/ammo_casing/shotgun/birdshot(src) - new /obj/item/ammo_casing/shotgun/birdshot(src) - - /obj/item/weapon/storage/box/gauge name = "box of 12 gauge slugs" desc = "It has a picture of a gun and several warning symbols on the front." diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 439f27c1135..6c0a0adb432 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -18,7 +18,7 @@ if("bond") new /obj/item/weapon/gun/projectile/automatic/pistol(src) - new /obj/item/weapon/silencer(src) + new /obj/item/weapon/suppressor(src) new /obj/item/ammo_box/magazine/m10mm(src) new /obj/item/ammo_box/magazine/m10mm(src) new /obj/item/clothing/under/chameleon(src) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 78faa4294c0..3d43d4628fb 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -107,9 +107,9 @@ minimum_distance = 5 icon_state = "syndicateranged" icon_living = "syndicateranged" - casingtype = /obj/item/ammo_casing/a12mm + casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/weapons/Gunshot_smg.ogg' - projectiletype = /obj/item/projectile/bullet/midbullet12 + projectiletype = /obj/item/projectile/bullet/midbullet2 weapon1 = /obj/item/weapon/gun/projectile/automatic/c20r diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 868410ea747..b84eb480138 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -95,7 +95,7 @@ return 1 return 0 -/obj/item/ammo_box/attackby(var/obj/item/A as obj, mob/user as mob) +/obj/item/ammo_box/attackby(var/obj/item/A as obj, mob/user as mob, var/silent = 0) var/num_loaded = 0 if(istype(A, /obj/item/ammo_box)) var/obj/item/ammo_box/AM = A @@ -113,17 +113,25 @@ AC.loc = src num_loaded++ if(num_loaded) - user << "You load [num_loaded] shell\s into \the [src]!" + if(!silent) + user << "You load [num_loaded] shell\s into \the [src]!" A.update_icon() update_icon() +/obj/item/ammo_box/attack_self(mob/user as mob) + var/obj/item/ammo_casing/A = get_round() + if(A) + user.put_in_hands(A) + user << "You remove a round from \the [src]!" + update_icon() + /obj/item/ammo_box/update_icon() switch(multiple_sprites) if(1) icon_state = "[initial(icon_state)]-[stored_ammo.len]" if(2) icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]" - desc = "There are [stored_ammo.len] shell\s left!" + desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!" //Behavior for magazines /obj/item/ammo_box/magazine/proc/ammo_count() diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/ammo_casings.dm similarity index 61% rename from code/modules/projectiles/ammunition/bullets.dm rename to code/modules/projectiles/ammunition/ammo_casings.dm index 70203d4df9b..1ec564a7c9c 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -1,169 +1,165 @@ -/obj/item/ammo_casing/a357 - desc = "A .357 bullet casing." - caliber = "357" - projectile_type = "/obj/item/projectile/bullet" - -/obj/item/ammo_casing/a50 - desc = "A .50AE bullet casing." - caliber = ".50" - projectile_type = "/obj/item/projectile/bullet" - -/obj/item/ammo_casing/a418 - desc = "A .418 bullet casing." - caliber = "357" - projectile_type = "/obj/item/projectile/bullet/suffocationbullet" - - -/obj/item/ammo_casing/a75 - desc = "A .75 bullet casing." - caliber = "75" - projectile_type = "/obj/item/projectile/bullet/gyro" - - -/obj/item/ammo_casing/a666 - desc = "A .666 bullet casing." - caliber = "357" - projectile_type = "/obj/item/projectile/bullet/cyanideround" - - -/obj/item/ammo_casing/c38 - desc = "A .38 bullet casing." - caliber = "38" - projectile_type = "/obj/item/projectile/bullet/c38" - - -/obj/item/ammo_casing/c9mm - desc = "A 9mm bullet casing." - caliber = "9mm" - projectile_type = "/obj/item/projectile/bullet/midbullet9" - - -/obj/item/ammo_casing/c45 - desc = "A .45 bullet casing." - caliber = ".45" - projectile_type = "/obj/item/projectile/bullet/midbullet45" - -/obj/item/ammo_casing/c10mm - desc = "A 10mm bullet casing." - caliber = "10mm" - projectile_type = "/obj/item/projectile/bullet/midbullet10" - -/obj/item/ammo_casing/a12mm - desc = "A 12mm bullet casing." - caliber = "12mm" - projectile_type = "/obj/item/projectile/bullet/midbullet12" - - -/obj/item/ammo_casing/shotgun - name = "shotgun shell" - desc = "A 12 gauge shell." - icon_state = "slshell" - caliber = "shotgun" - projectile_type = "/obj/item/projectile/bullet/slug" - m_amt = 4000 - -/obj/item/ammo_casing/shotgun/buck - name = "buckshot shell" - desc = "A 12 gauge buckshot shell." - icon_state = "gshell" - projectile_type = "/obj/item/projectile/bullet/buck" - buck = 5 - deviation = 0.8 - -/obj/item/ammo_casing/shotgun/birdshot - name = "birdshot shell" - desc = "A shotgun shell full of birdshot." - icon_state = "blshell" - projectile_type = "/obj/item/projectile/bullet/rubberbullet" - buck = 4 - deviation = 1 - m_amt = 6000 - - -/obj/item/ammo_casing/shotgun/beanbag - name = "beanbag shell" - desc = "A weak beanbag shell." - icon_state = "bshell" - projectile_type = "/obj/item/projectile/bullet/rubberbullet" - m_amt = 250 - -/obj/item/ammo_casing/shotgun/fakebeanbag - name = "beanbag shell" - desc = "A weak beanbag shell." - icon_state = "bshell" - projectile_type = "/obj/item/projectile/bullet/weakbullet/booze" - -/obj/item/ammo_casing/shotgun/stunshell - name = "stun shell" - desc = "A stunning shell." - icon_state = "stunshell" - projectile_type = "/obj/item/projectile/bullet/stunslug" - m_amt = 250 - -/obj/item/ammo_casing/shotgun/incendiary - name = "incendiary shell" - desc = "An incendiary shell" - icon_state = "ishell" - projectile_type = "/obj/item/projectile/bullet/incendiary/shell" - -/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath - name = "dragonsbreath shell" - desc = "A shotgun shell which fires a spread of incendiary pellets." - icon_state = "ishell2" - projectile_type = "/obj/item/projectile/bullet/incendiary/shell/dragonsbreath" - buck = 4 - deviation = 0.9 - -/obj/item/ammo_casing/shotgun/techshell - name = "unloaded technological shell" - desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." - icon_state = "tshell" - projectile_type = null - -/obj/item/ammo_casing/shotgun/meteorshot - name = "meteorshot shell" - desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired." - icon_state = "mshell" - projectile_type = "/obj/item/projectile/bullet/meteorshot" - -/obj/item/ammo_casing/shotgun/pulseslug - name = "pulse slug" - desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \ - energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \ - would have difficulty with." - icon_state = "pshell" - projectile_type = "/obj/item/projectile/beam/pulse/shot" - -/obj/item/ammo_casing/shotgun/dart - name = "shotgun dart" - desc = "A dart for use in shotguns. Can be injected with up to 30 units of any chemical." - icon_state = "cshell" - projectile_type = /obj/item/projectile/bullet/dart - m_amt = 12500 - -obj/item/ammo_casing/shotgun/dart/New() - ..() - flags |= NOREACT - create_reagents(30) - -/obj/item/ammo_casing/shotgun/dart/attackby() - return - - -/obj/item/ammo_casing/a762 - desc = "A 7.62 bullet casing." - caliber = "a762" - projectile_type = "/obj/item/projectile/bullet/a762" - -/obj/item/ammo_casing/rocket - name = "rocket shell" - desc = "A high explosive designed to be fired from a launcher." - icon_state = "rocketshell" - projectile_type = "/obj/item/missile" - caliber = "rocket" - -/obj/item/ammo_casing/energy/kinetic - projectile_type = /obj/item/projectile/bullet - //select_name = "kinetic" - //e_cost = 500 - //fire_sound = 'sound/weapons/Gunshot4.ogg' \ No newline at end of file +/obj/item/ammo_casing/a357 + desc = "A .357 bullet casing." + caliber = "357" + projectile_type = "/obj/item/projectile/bullet" + +/obj/item/ammo_casing/a50 + desc = "A .50AE bullet casing." + caliber = ".50" + projectile_type = "/obj/item/projectile/bullet" + +/obj/item/ammo_casing/c38 + desc = "A .38 bullet casing." + caliber = "38" + projectile_type = "/obj/item/projectile/bullet/weakbullet2/rubber" + + +/obj/item/ammo_casing/c10mm + desc = "A 10mm bullet casing." + caliber = "10mm" + projectile_type = "/obj/item/projectile/bullet/midbullet3" + + +/obj/item/ammo_casing/c9mm + desc = "A 9mm bullet casing." + caliber = "9mm" + projectile_type = "/obj/item/projectile/bullet/weakbullet3" + + +/obj/item/ammo_casing/c45 + desc = "A .45 bullet casing." + caliber = ".45" + projectile_type = "/obj/item/projectile/bullet/midbullet" + + +/obj/item/ammo_casing/shotgun + name = "shotgun slug" + desc = "A 12 gauge lead slug." + icon_state = "blshell" + caliber = "shotgun" + projectile_type = "/obj/item/projectile/bullet" + m_amt = 4000 + + +/obj/item/ammo_casing/shotgun/buckshot + name = "buckshot shell" + desc = "A 12 gauge buckshot shell." + icon_state = "gshell" + projectile_type = "/obj/item/projectile/bullet/pellet" + buck = 5 + deviation = 0.8 + + +/obj/item/ammo_casing/shotgun/beanbag + name = "beanbag slug" + desc = "A weak beanbag slug for riot control." + icon_state = "bshell" + projectile_type = "/obj/item/projectile/bullet/weakbullet/rubber" + m_amt = 250 + + +/obj/item/ammo_casing/shotgun/improvised + name = "improvised shell" + desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." + icon_state = "gshell" + projectile_type = "/obj/item/projectile/bullet/pellet/weak" + m_amt = 250 + buck = 5 + deviation = 0.8 + + +/obj/item/ammo_casing/shotgun/stunslug + name = "taser slug" + desc = "A stunning taser slug." + icon_state = "stunshell" + projectile_type = "/obj/item/projectile/bullet/stunshot" + m_amt = 200 + + +/obj/item/ammo_casing/shotgun/meteorshot + name = "meteorshot shell" + desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired." + icon_state = "mshell" + projectile_type = "/obj/item/projectile/bullet/meteorshot" + +/obj/item/ammo_casing/shotgun/pulseslug + name = "pulse slug" + desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \ + energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \ + would have difficulty with." + icon_state = "pshell" + projectile_type = "/obj/item/projectile/beam/pulse/shot" + +/obj/item/ammo_casing/shotgun/incendiary + name = "incendiary slug" + desc = "An incendiary-coated shotgun slug." + icon_state = "ishell" + projectile_type = "/obj/item/projectile/bullet/incendiary/shell" + +/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + name = "dragonsbreath shell" + desc = "A shotgun shell which fires a spread of incendiary pellets." + icon_state = "ishell2" + projectile_type = "/obj/item/projectile/bullet/incendiary/shell/dragonsbreath" + buck = 4 + deviation = 0.9 + +/obj/item/ammo_casing/shotgun/techshell + name = "unloaded technological shell" + desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." + icon_state = "cshell" + projectile_type = null +/* +/obj/item/ammo_casing/shotgun/dart + name = "shotgun dart" + desc = "A dart for use in shotguns. Can be injected with up to 30 units of any chemical." + icon_state = "cshell" + projectile_type = /obj/item/projectile/bullet/dart + +/obj/item/ammo_casing/shotgun/dart/New() + ..() + flags |= NOREACT + flags |= OPENCONTAINER + create_reagents(30) + +/obj/item/ammo_casing/shotgun/dart/attackby() + return +*/ + +/obj/item/ammo_casing/shotgun/fakebeanbag + name = "beanbag shell" + desc = "A weak beanbag shell." + icon_state = "bshell" + projectile_type = "/obj/item/projectile/bullet/weakbullet/booze" + +/obj/item/ammo_casing/a762 + desc = "A 7.62mm bullet casing." + caliber = "a762" + projectile_type = "/obj/item/projectile/bullet" + +/obj/item/ammo_casing/a545 + desc = "A 5.45mm bullet casing." + caliber = "a545" + projectile_type = "/obj/item/projectile/bullet/heavybullet" + +/obj/item/ammo_casing/rocket + name = "rocket shell" + desc = "A high explosive designed to be fired from a launcher." + icon_state = "rocketshell" + projectile_type = "/obj/item/missile" + caliber = "rocket" + +/obj/item/ammo_casing/caseless + desc = "A caseless bullet casing." + +/obj/item/ammo_casing/caseless/a75 + desc = "A .75 bullet casing." + caliber = "75" + projectile_type = "/obj/item/projectile/bullet/gyro" + +/obj/item/ammo_casing/a40mm + name = "40mm HE shell" + 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 diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index a9624597314..72aa816d1cc 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -1,63 +1,48 @@ /obj/item/ammo_box/a357 - name = "ammo box (.357)" - desc = "A box of .357 ammo" + name = "speed loader (.357)" icon_state = "357" - ammo_type = "/obj/item/ammo_casing/a357" + ammo_type = /obj/item/ammo_casing/a357 max_ammo = 7 multiple_sprites = 1 /obj/item/ammo_box/c38 name = "speed loader (.38)" icon_state = "38" - ammo_type = "/obj/item/ammo_casing/c38" + ammo_type = /obj/item/ammo_casing/c38 max_ammo = 6 multiple_sprites = 1 +/obj/item/ammo_box/c9mm + name = "ammo box (9mm)" + icon_state = "9mmbox" + origin_tech = "combat=2" + ammo_type = /obj/item/ammo_casing/c9mm + max_ammo = 30 +/obj/item/ammo_box/c10mm + name = "ammo box (10mm)" + icon_state = "10mmbox" + origin_tech = "combat=2" + ammo_type = /obj/item/ammo_casing/c10mm + max_ammo = 20 -/obj/item/ammo_box/a418 - name = "ammo box (.418)" - icon_state = "418" - ammo_type = "/obj/item/ammo_casing/a418" - max_ammo = 7 - multiple_sprites = 1 +/obj/item/ammo_box/c45 + name = "ammo box (.45)" + icon_state = "45box" + origin_tech = "combat=2" + ammo_type = /obj/item/ammo_casing/c45 + max_ammo = 20 - - -/obj/item/ammo_box/a666 - name = "ammo box (.666)" - icon_state = "666" - ammo_type = "/obj/item/ammo_casing/a666" +/obj/item/ammo_box/a40mm + name = "ammo box (40mm grenades)" + icon_state = "40mm" + ammo_type = /obj/item/ammo_casing/a40mm max_ammo = 4 multiple_sprites = 1 - -/obj/item/ammo_box/c9mm - name = "Ammunition Box (9mm)" - icon_state = "9mm" - origin_tech = "combat=2" - ammo_type = "/obj/item/ammo_casing/c9mm" - max_ammo = 36 - -/obj/item/ammo_box/c45 - name = "Ammunition Box (.45)" - icon_state = "9mm" - origin_tech = "combat=2" - ammo_type = "/obj/item/ammo_casing/c45" - max_ammo = 32 - - - -/obj/item/ammo_box/a12mm - name = "Ammunition Box (12mm)" - icon_state = "9mm" - origin_tech = "combat=2" - ammo_type = "/obj/item/ammo_casing/a12mm" - max_ammo = 40 - /obj/item/ammo_box/shotgun name = "Ammunition Box (slug)" - icon_state = "9mm" + icon_state = "9mmbox" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/shotgun max_ammo = 8 @@ -65,11 +50,11 @@ /obj/item/ammo_box/shotgun/buck name = "Ammunition Box (buckshot)" - ammo_type = /obj/item/ammo_casing/shotgun/buck + ammo_type = /obj/item/ammo_casing/shotgun/buckshot /obj/item/ammo_box/shotgun/stun name = "Ammunition Box (stun shells)" - ammo_type = /obj/item/ammo_casing/shotgun/stunshell + ammo_type = /obj/item/ammo_casing/shotgun/stunslug m_amt = 20000 /obj/item/ammo_box/shotgun/beanbag diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index fef0f230492..a7410abdad3 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -25,6 +25,7 @@ caliber = "357" max_ammo = 6 multiload = 0 + /obj/item/ammo_box/magazine/internal/cylinder/rus357/New() stored_ammo += new ammo_type(src) @@ -42,13 +43,15 @@ caliber = "shotgun" max_ammo = 4 multiload = 0 + /obj/item/ammo_box/magazine/internal/shotcom name = "combat shotgun internal magazine" desc = "Oh god, this shouldn't be here" - ammo_type = "/obj/item/ammo_casing/shotgun/buck" + ammo_type = "/obj/item/ammo_casing/shotgun/buckshot" caliber = "shotgun" max_ammo = 8 multiload = 0 + /obj/item/ammo_box/magazine/internal/cylinder/dualshot name = "double-barrel shotgun internal magazine" desc = "This doesn't even exist" @@ -57,6 +60,14 @@ max_ammo = 2 multiload = 0 +/obj/item/ammo_box/magazine/internal/cylinder/improvised + name = "improvised shotgun internal magazine" + desc = "This doesn't even exist" + ammo_type = "/obj/item/ammo_casing/shotgun/improvised" + caliber = "shotgun" + max_ammo = 1 + multiload = 0 + /obj/item/ammo_box/magazine/internal/shotriot name = "riot shotgun internal magazine" desc = "Oh god, this shouldn't be here" @@ -64,29 +75,21 @@ caliber = "shotgun" max_ammo = 6 multiload = 0 + +/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher + name = "grenade launcher internal magazine" + ammo_type = "/obj/item/ammo_casing/a40mm" + caliber = "40mm" + max_ammo = 1 + +/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher/multi + ammo_type = "/obj/item/ammo_casing/a40mm" + max_ammo = 6 + ///////////EXTERNAL MAGAZINES//////////////// -/obj/item/ammo_box/magazine/m9mm - name = "magazine (9mm)" - icon_state = "9x19p" - origin_tech = "combat=2" - ammo_type = "/obj/item/ammo_casing/c9mm" - caliber = "9mm" - max_ammo = 8 - multiple_sprites = 2 - -/obj/item/ammo_box/magazine/msmg9mm - name = "SMG magazine (9mm)" - icon_state = "smg9mm" - ammo_type = "/obj/item/ammo_casing/c9mm" - caliber = "9mm" - max_ammo = 18 - -/obj/item/ammo_box/magazine/msmg9mm/update_icon() - ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),3)]" /obj/item/ammo_box/magazine/m10mm - name = "magazine (10mm)" + name = "pistol magazine (10mm)" icon_state = "9x19p" origin_tech = "combat=2" ammo_type = "/obj/item/ammo_casing/c10mm" @@ -94,39 +97,49 @@ max_ammo = 8 multiple_sprites = 2 -/obj/item/ammo_box/magazine/m12mm - name = "magazine (12mm)" - icon_state = "12mm" - origin_tech = "combat=2" - ammo_type = "/obj/item/ammo_casing/a12mm" - caliber = "12mm" - max_ammo = 20 - -/obj/item/ammo_box/magazine/m12mm/update_icon() - ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]" - /obj/item/ammo_box/magazine/m45 - name = "magazine (.45)" + name = "handgun magazine (.45)" icon_state = "45" ammo_type = "/obj/item/ammo_casing/c45" caliber = ".45" max_ammo = 8 - multiple_sprites = 1 -/obj/item/ammo_box/magazine/uzim45 - name = "Uzi magazine (.45)" - icon_state = "uzi45" +/obj/item/ammo_box/magazine/m45/update_icon() + ..() + icon_state = "[initial(icon_state)]-[ammo_count() ? "8" : "0"]" + +/obj/item/ammo_box/magazine/smgm9mm + name = "SMG magazine (9mm)" + icon_state = "smg9mm" + ammo_type = "/obj/item/ammo_casing/c9mm" + caliber = "9mm" + max_ammo = 20 + +/obj/item/ammo_box/magazine/smgm9mm/update_icon() + ..() + icon_state = "[initial(icon_state)]-[round(ammo_count(),5)]" + +/obj/item/ammo_box/magazine/smgm45 + name = "SMG magazine (.45)" + icon_state = "c20r45" + origin_tech = "combat=2" ammo_type = "/obj/item/ammo_casing/c45" caliber = ".45" - max_ammo = 16 + max_ammo = 20 -/obj/item/ammo_box/magazine/uzim45/update_icon() +/obj/item/ammo_box/magazine/smgm/update_icon() ..() icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]" +/obj/item/ammo_box/magazine/tommygunm45 + name = "drum magazine (.45)" + icon_state = "drum45" + ammo_type = "/obj/item/ammo_casing/c45" + caliber = ".45" + max_ammo = 50 + /obj/item/ammo_box/magazine/m50 - name = "magazine (.50ae)" + name = "handgun magazine (.50ae)" icon_state = "50ae" origin_tech = "combat=2" ammo_type = "/obj/item/ammo_casing/a50" @@ -135,15 +148,27 @@ multiple_sprites = 1 /obj/item/ammo_box/magazine/m75 - name = "magazine (.75)" + name = "specialized magazine (.75)" icon_state = "75" - ammo_type = "/obj/item/ammo_casing/a75" + ammo_type = "/obj/item/ammo_casing/caseless/a75" caliber = "75" multiple_sprites = 2 max_ammo = 8 +/obj/item/ammo_box/magazine/m545 + name = "box magazine (5.45mm)" + icon_state = "5.45m" + origin_tech = "combat=5;syndicate=1" + ammo_type = "/obj/item/ammo_casing/a545" + caliber = "a545" + max_ammo = 30 + +/obj/item/ammo_box/magazine/m545/update_icon() + ..() + icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]" + /obj/item/ammo_box/magazine/m762 - name = "magazine (7.62mm)" + name = "box magazine (7.62mm)" icon_state = "a762" origin_tech = "combat=2" ammo_type = "/obj/item/ammo_casing/a762" @@ -154,13 +179,11 @@ ..() icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]" -//TG Bulldog Automatic Shotty - /obj/item/ammo_box/magazine/m12g name = "shotgun magazine (12g taser slugs)" icon_state = "m12gs" origin_tech = "combat=3;syndicate=1" - ammo_type = "/obj/item/ammo_casing/shotgun/stunshell" + ammo_type = "/obj/item/ammo_casing/shotgun/stunslug" caliber = "shotgun" max_ammo = 8 @@ -172,7 +195,7 @@ /obj/item/ammo_box/magazine/m12g/buckshot name = "shotgun magazine (12g buckshot)" icon_state = "m12gb" - ammo_type = "/obj/item/ammo_casing/shotgun/buck" + ammo_type = "/obj/item/ammo_casing/shotgun/buckshot" /obj/item/ammo_box/magazine/m12g/dragon diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 8a86652764f..37fc7bede4b 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -20,6 +20,7 @@ var/silenced = 0 var/ghettomodded = 0 var/recoil = 0 + var/can_suppress = 0 var/clumsy_check = 1 var/sawn_desc = null var/obj/item/ammo_casing/chambered = null // The round (not bullet) that is in the chamber. THIS MISPLACED ITEM BROUGHT TO YOU BY HACKY BUCKSHOT. diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 0fb8c826058..51a607890a0 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -75,6 +75,11 @@ obj/item/weapon/gun/energy/laser/retro name = "laser cannon" desc = "With the L.A.S.E.R. cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!" icon_state = "lasercannon" + item_state = "laser" + w_class = 4.0 + force = 10 + flags = FPRINT | TABLEPASS | CONDUCT + slot_flags = SLOT_BACK fire_sound = 'sound/weapons/lasercannonfire.ogg' origin_tech = "combat=4;materials=3;powerstorage=3" projectile_type = "/obj/item/projectile/beam/heavylaser" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index e11a604b45e..46affe1165c 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -2,7 +2,7 @@ name = "pulse rifle" desc = "A heavy-duty, pulse-based energy weapon, preferred by front-line combat personnel." icon_state = "pulse" - item_state = null //so the human update icon uses the icon_state instead. + item_state = "pulse" //so the human update icon uses the icon_state instead. force = 10 fire_sound = 'sound/weapons/pulse.ogg' charge_cost = 200 diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 41e3764fdfe..0561255c471 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -44,7 +44,7 @@ /obj/item/weapon/gun/energy/stunrevolver name = "stun revolver" - desc = "A high-tech revolver that fires stun cartridges. The stun cartridges can be recharged using a conventional energy weapon recharger." + desc = "A high-tech revolver that fires internal, reusable stun cartidges in a revolving cylinder." icon_state = "stunrevolver" fire_sound = "sound/weapons/gunshot.ogg" origin_tech = "combat=3;materials=3;powerstorage=2" diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 3ab2dc49e28..c45bb04a6b0 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -53,6 +53,7 @@ /obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob) + ..() if (istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if (!magazine && istype(AM, text2path(mag_type))) @@ -66,10 +67,49 @@ return 1 else if (magazine) user << "There's already a magazine in \the [src]." + if(istype(A, /obj/item/weapon/suppressor)) + var/obj/item/weapon/suppressor/S = A + if(can_suppress) + if(!silenced) + if(user.l_hand != src && user.r_hand != src) + user << "You'll need [src] in your hands to do that." + return + user.drop_item() + user << "You screw [S] onto [src]." + silenced = A + S.oldsound = fire_sound + S.initial_w_class = w_class + fire_sound = 'sound/weapons/Gunshot_silenced.ogg' + w_class = 3 //so pistols do not fit in pockets when suppressed + A.loc = src + update_icon() + return + else + user << "[src] already has a suppressor." + return + else + user << "You can't seem to figure out how to fit [S] on [src]." + return return 0 +/obj/item/weapon/gun/projectile/attack_hand(mob/user as mob) + if(loc == user) + if(silenced) + var/obj/item/weapon/suppressor/S = silenced + if(user.l_hand != src && user.r_hand != src) + ..() + return + user << "You unscrew [silenced] from [src]." + user.put_in_hands(silenced) + fire_sound = S.oldsound + w_class = S.initial_w_class + silenced = 0 + update_icon() + return + ..() + /obj/item/weapon/gun/projectile/attack_self(mob/living/user as mob) - if (magazine) + if(magazine) magazine.loc = get_turf(src.loc) user.put_in_hands(magazine) magazine.update_icon() @@ -92,3 +132,12 @@ if (magazine) boolets += magazine.ammo_count() return boolets + +/obj/item/weapon/suppressor + name = "suppressor" + desc = "A universal syndicate small-arms suppressor for maximum espionage." + icon = 'icons/obj/gun.dmi' + icon_state = "suppressor" + w_class = 2 + var/oldsound = null + var/initial_w_class = null \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 3c622752418..9371a09469a 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -1,75 +1,71 @@ /obj/item/weapon/gun/projectile/automatic //Hopefully someone will find a way to make these fire in bursts or something. --Superxpdude - name = "submachine gun" - desc = "A lightweight, fast firing gun. Uses 9mm rounds." - icon_state = "saber" //ugly + name = "prototype SMG" + desc = "A lightweight, prototype 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors." + icon_state = "saber" w_class = 3.0 origin_tech = "combat=4;materials=2" automatic = 1 - mag_type = "/obj/item/ammo_box/magazine/msmg9mm" + mag_type = "/obj/item/ammo_box/magazine/smgm9mm" var/alarmed = 0 + can_suppress = 1 fire_delay = 0 isHandgun() return 0 /obj/item/weapon/gun/projectile/automatic/update_icon() ..() - icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"]" + icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][silenced ? "-suppressed" : ""]" return /obj/item/weapon/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob) if(..() && chambered) alarmed = 0 - - -/obj/item/weapon/gun/projectile/automatic/mini_uzi - name = "Uzi" - desc = "A lightweight, fast firing gun, for when you want someone dead. Uses .45 rounds." - icon_state = "mini-uzi" - w_class = 3.0 - - origin_tech = "combat=5;materials=2;syndicate=8" - mag_type = "/obj/item/ammo_box/magazine/uzim45" - - isHandgun() - return 1 - +/obj/item/weapon/gun/projectile/automatic/proc/empty_alarm() + if(!chambered && !get_ammo() && !alarmed) + playsound(src.loc, 'sound/weapons/smg_empty_alarm.ogg', 40, 1) + update_icon() + alarmed = 1 + return /obj/item/weapon/gun/projectile/automatic/c20r - name = "\improper C-20r SMG" - desc = "A lightweight, compact bullpup SMG. Uses .45 rounds in medium-capacity magazines and has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." + name = "syndicate SMG" + desc = "A lightweight, bullpup .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." icon_state = "c20r" item_state = "c20r" - w_class = 3.0 origin_tech = "combat=5;materials=2;syndicate=8" - mag_type = "/obj/item/ammo_box/magazine/m12mm" + mag_type = "/obj/item/ammo_box/magazine/smgm45" fire_sound = 'sound/weapons/Gunshot_smg.ogg' +/obj/item/weapon/gun/projectile/automatic/c20r/New() + ..() + update_icon() + return + /obj/item/weapon/gun/projectile/automatic/c20r/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) ..() - if(!chambered && !get_ammo() && !alarmed) - playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1) - alarmed = 1 + empty_alarm() return /obj/item/weapon/gun/projectile/automatic/c20r/update_icon() ..() - icon_state = "c20r[magazine ? "-[round(get_ammo(0),4)]" : ""][chambered ? "" : "-e"]" + icon_state = "c20r[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""][chambered ? "" : "-e"][silenced ? "-suppressed" : ""]" return /obj/item/weapon/gun/projectile/automatic/l6_saw - name = "\improper L6 SAW" - desc = "A heavily modified light machine gun with a tactical plasteel frame resting on a rather traditionally-made belt-fed ballistic weapon. Has 'Aussec Armoury - 2531' engraved on the reciever." + name = "syndicate LMG" + desc = "A heavily modified 7.62 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the reciever below the designation." icon_state = "l6closed100" item_state = "l6closedmag" - w_class = 4 + w_class = 5 slot_flags = 0 origin_tech = "combat=5;materials=1;syndicate=2" mag_type = "/obj/item/ammo_box/magazine/m762" fire_sound = 'sound/weapons/Gunshot3.ogg' var/cover_open = 0 + can_suppress = 0 @@ -115,8 +111,8 @@ /obj/item/weapon/gun/projectile/automatic/bulldog - name = "\improper Bulldog shotgun" - desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors. Compatible only with specialized magazines." + name = "syndicate shotgun" + desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." icon_state = "bulldog" item_state = "bulldog" icon_override = 'icons/mob/in-hand/guns.dmi' @@ -124,6 +120,7 @@ origin_tech = "combat=5;materials=4;syndicate=6" mag_type = "/obj/item/ammo_box/magazine/m12g" fire_sound = 'sound/weapons/Gunshot4.ogg' + can_suppress = 0 /obj/item/weapon/gun/projectile/automatic/bulldog/New() ..() @@ -144,16 +141,87 @@ /obj/item/weapon/gun/projectile/automatic/bulldog/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) ..() - if(!chambered && !get_ammo() && !alarmed) - playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1) - update_icon() - alarmed = 1 + empty_alarm() return -/* The thing I found with guns in ss13 is that they don't seem to simulate the rounds in the magazine in the gun. - Afaik, since projectile.dm features a revolver, this would make sense since the magazine is part of the gun. - However, it looks like subsequent guns that use removable magazines don't take that into account and just get - around simulating a removable magazine by adding the casings into the loaded list and spawning an empty magazine - when the gun is out of rounds. Which means you can't eject magazines with rounds in them. The below is a very - rough and poor attempt at making that happen. -Ausops */ \ No newline at end of file +/obj/item/weapon/gun/projectile/automatic/c90gl + name = "syndicate assault rifle" + desc = "A bullpup and compact 5.45x39 assault rifle with a unique toploading design, designated 'C-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off." + icon_state = "c90gl" + item_state = "c90gl" + icon_override = 'icons/mob/in-hand/guns.dmi' + origin_tech = "combat=5;materials=2;syndicate=8" + mag_type = "/obj/item/ammo_box/magazine/m545" + fire_sound = 'sound/weapons/Gunshot_smg.ogg' + action_button_name = "Toggle Grenade Launcher" + icon_action_button = "Action_c90gl" + can_suppress = 0 + var/select = 1 //1 for boolets, 0 for explosions. + var/obj/item/weapon/gun/projectile/revolver/grenadelauncher/underbarrel + +/obj/item/weapon/gun/projectile/automatic/c90gl/New() + ..() + underbarrel = new /obj/item/weapon/gun/projectile/revolver/grenadelauncher(src) + update_icon() + return + +/obj/item/weapon/gun/projectile/automatic/c90gl/afterattack(var/atom/target, var/mob/living/user, flag, params) + if(select) + ..() + empty_alarm() + return + else + underbarrel.afterattack(target, user, flag, params) + +/obj/item/weapon/gun/projectile/automatic/c90gl/attackby(var/obj/item/A, mob/user) + if(select) + ..() + else + underbarrel.attackby(A, user) + +/obj/item/weapon/gun/projectile/automatic/c90gl/attack_self(var/mob/living/user) + if(select) + ..() + else + underbarrel.attack_self(user) + + + +/obj/item/weapon/gun/projectile/automatic/c90gl/update_icon() + ..() + overlays.Cut() + if(select) + overlays += "c90prim" + else + overlays += "c90gren" + icon_state = "c90gl[magazine ? "-[Ceiling(get_ammo(0)/6)*6]" : ""][chambered ? "" : "-e"]" + return + +/obj/item/weapon/gun/projectile/automatic/c90gl/proc/underbarrel_swap() + var/mob/living/carbon/human/user = usr + if(select) + select = 0 + user << "You switch to grenades." + else + select = 1 + user << "You switch to bullets." + + update_icon() + return + +/obj/item/weapon/gun/projectile/automatic/c90gl/ui_action_click() + underbarrel_swap() + + + +/obj/item/weapon/gun/projectile/automatic/tommygun + name = "tommy gun" + desc = "A genuine 'Chicago Typewriter'." + icon_state = "tommygun" + item_state = "tommygun" + slot_flags = 0 + origin_tech = "combat=5;materials=1;syndicate=2" + mag_type = "/obj/item/ammo_box/magazine/tommygunm45" + fire_sound = 'sound/weapons/Gunshot_smg.ogg' + can_suppress = 0 \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/launcher.dm b/code/modules/projectiles/guns/projectile/grenade launcher.dm similarity index 100% rename from code/modules/projectiles/guns/projectile/launcher.dm rename to code/modules/projectiles/guns/projectile/grenade launcher.dm diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm new file mode 100644 index 00000000000..9c5dc867dc4 --- /dev/null +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -0,0 +1,50 @@ +//KEEP IN MIND: These are different from gun/grenadelauncher. These are designed to shoot premade rocket and grenade projectiles, not flashbangs or chemistry casings etc. +//Put handheld rocket launchers here if someone ever decides to make something so hilarious ~Paprika + + +/obj/item/weapon/gun/projectile/automatic/gyropistol + name = "gyrojet pistol" + desc = "A prototype pistol designed to fire self propelled rockets." + icon_state = "gyropistol" + fire_sound = 'sound/effects/Explosion1.ogg' + origin_tech = "combat=3" + mag_type = "/obj/item/ammo_box/magazine/m75" + +/obj/item/weapon/gun/projectile/automatic/gyropistol/New() + ..() + update_icon() + return + +/obj/item/weapon/gun/projectile/automatic/gyropistol/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) + ..() + if(!chambered && !get_ammo() && !alarmed) + playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1) + update_icon() + alarmed = 1 + return + +/obj/item/weapon/gun/projectile/automatic/gyropistol/update_icon() + ..() + icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]" + return + +/obj/item/weapon/gun/projectile/revolver/grenadelauncher//this is only used for underbarrel grenade launchers at the moment, but admins can still spawn it if they feel like being assholes + desc = "A break-operated grenade launcher." + name = "grenade launcher" + icon_state = "dshotgun-sawn" + item_state = "gun" + mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher" + w_class = 3 + +/obj/item/weapon/gun/projectile/revolver/grenadelauncher/attackby(var/obj/item/A, mob/user) + ..() + if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing)) + chamber_round() + +/obj/item/weapon/gun/projectile/revolver/grenadelauncher/multi + desc = "A revolving 6-shot grenade launcher." + name = "multi grenade launcher" + icon_state = "bulldog" + item_state = "bulldog" + icon_override = 'icons/mob/in-hand/guns.dmi' + mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher/multi" \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 355dc0b909c..26555a3b040 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,3 +1,17 @@ +/obj/item/weapon/gun/projectile/automatic/pistol + name = "syndicate pistol" + desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors." + icon_state = "pistol" + w_class = 2 + origin_tech = "combat=2;materials=2;syndicate=2" + mag_type = "/obj/item/ammo_box/magazine/m10mm" + can_suppress = 1 + +/obj/item/weapon/gun/projectile/automatic/pistol/update_icon() + ..() + icon_state = "[initial(icon_state)][chambered ? "" : "-e"][silenced ? "-suppressed" : ""]" + return + /obj/item/weapon/gun/projectile/automatic/m2411 name = "M2411" desc = "John Browning's classic updated for the modern day. Uses .45 rounds." @@ -12,29 +26,19 @@ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" return - - /obj/item/weapon/gun/projectile/automatic/deagle name = "desert eagle" - desc = "A robust handgun that uses .50 AE ammo" + desc = "A robust .50 AE handgun." icon_state = "deagle" force = 14.0 mag_type = "/obj/item/ammo_box/magazine/m50" -/obj/item/weapon/gun/projectile/automatic/deagle/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) - ..() - if(!chambered && !get_ammo() && !alarmed) - playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1) - update_icon() - alarmed = 1 - return - /obj/item/weapon/gun/projectile/automatic/deagle/update_icon() ..() icon_state = "[initial(icon_state)][magazine ? "" : "-e"]" /obj/item/weapon/gun/projectile/automatic/deagle/gold - desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." + desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." icon_state = "deagleg" item_state = "deagleg" @@ -43,89 +47,4 @@ /obj/item/weapon/gun/projectile/automatic/deagle/camo desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo." icon_state = "deaglecamo" - item_state = "deagleg" - - - -/obj/item/weapon/gun/projectile/automatic/gyropistol - name = "gyrojet pistol" - desc = "A bulky pistol designed to fire self propelled rounds" - icon_state = "gyropistol" - fire_sound = 'sound/effects/Explosion1.ogg' - origin_tech = "combat=3" - mag_type = "/obj/item/ammo_box/magazine/m75" - -/obj/item/weapon/gun/projectile/automatic/gyropistol/New() - ..() - update_icon() - return - -/obj/item/weapon/gun/projectile/automatic/gyropistol/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) - ..() - if(!chambered && !get_ammo() && !alarmed) - playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1) - update_icon() - alarmed = 1 - return - -/obj/item/weapon/gun/projectile/automatic/gyropistol/update_icon() - ..() - icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]" - return - -/obj/item/weapon/gun/projectile/automatic/pistol - name = "\improper Stechtkin pistol" - desc = "A small, easily concealable gun. Uses 10mm rounds and has a threaded barrel for suppressors." - icon_state = "pistol" - w_class = 2 - silenced = 0 - origin_tech = "combat=2;materials=2;syndicate=2" - mag_type = "/obj/item/ammo_box/magazine/m10mm" - fire_sound = 'sound/weapons/Gunshot2.ogg' - -/obj/item/weapon/gun/projectile/automatic/pistol/attack_hand(mob/user as mob) - if(loc == user) - if(silenced) - if(user.l_hand != src && user.r_hand != src) - ..() - return - user << "You unscrew [silenced] from [src]." - user.put_in_hands(silenced) - var/obj/item/weapon/silencer/S = silenced - fire_sound = S.oldsound - silenced = 0 - w_class = 2 - update_icon() - return - ..() - - -/obj/item/weapon/gun/projectile/automatic/pistol/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/silencer)) - if(user.l_hand != src && user.r_hand != src) //if we're not in his hands - user << "You'll need [src] in your hands to do that." - return - user.drop_item() - user << "You screw [I] onto [src]." - silenced = I //dodgy? - var/obj/item/weapon/silencer/S = I - S.oldsound = fire_sound - fire_sound = 'sound/weapons/Gunshot_silenced.ogg' - w_class = 3 - I.loc = src //put the silencer into the gun - update_icon() - return - ..() - -/obj/item/weapon/gun/projectile/automatic/pistol/update_icon() - ..() - icon_state = "[initial(icon_state)][silenced ? "-silencer" : ""][chambered ? "" : "-e"]" - return - -/obj/item/weapon/silencer - name = "supressor" - desc = "A universal syndicate small-arms suppressor." - icon = 'icons/obj/gun.dmi' - icon_state = "silencer" - w_class = 2 - var/oldsound = 0 //Stores the true sound the gun made before it was silenced \ No newline at end of file + item_state = "deagleg" \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index df2202e4a47..d0dcee8fb2b 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/revolver - desc = "A classic revolver. Uses 357 ammo" + desc = "A suspicious revolver. Uses .357 ammo." name = "revolver" icon_state = "revolver" mag_type = "/obj/item/ammo_box/magazine/internal/cylinder" @@ -76,7 +76,7 @@ usr << "[get_ammo(0,0)] of those are live rounds." /obj/item/weapon/gun/projectile/revolver/detective - desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds." + desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." name = "revolver" icon_state = "detective" origin_tech = "combat=2;materials=2" @@ -165,8 +165,8 @@ /obj/item/weapon/gun/projectile/revolver/mateba - name = "mateba" - desc = "When you absolutely, positively need a 10mm hole in the other guy. Uses .357 ammo." //>10mm hole >.357 + name = "autorevolver" + desc = "A retro high-powered mateba autorevolver typically used by officers of the New Russia military. Uses .357 ammo." //>10mm hole >.357 icon_state = "mateba" origin_tech = "combat=2;materials=2" @@ -175,7 +175,7 @@ /obj/item/weapon/gun/projectile/revolver/russian name = "Russian Revolver" - desc = "A Russian made revolver. Uses .357 ammo." + desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism that spins the chamber before each trigger pull." origin_tech = "combat=2;materials=2" mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/rus357" var/spun = 0 diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index cb2f14bb7c9..90436a500d0 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/shotgun name = "shotgun" - desc = "Useful for sweeping alleys." + desc = "A traditional shotgun with wood furniture and a four-shell capacity underneath." icon_state = "shotgun" item_state = "shotgun" w_class = 4.0 @@ -83,6 +83,7 @@ /obj/item/weapon/gun/projectile/shotgun/combat name = "combat shotgun" + desc = "A traditional shotgun with tactical furniture and an eight-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" mag_type = "/obj/item/ammo_box/magazine/internal/shotcom" @@ -152,3 +153,30 @@ user << "You break open \the [src] and unload [num_unloaded] shell\s." else user << "[src] is empty." + +// IMPROVISED SHOTGUN // + +/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised + name = "improvised shotgun" + desc = "Essentially a tube that aims shotgun shells." + icon_state = "ishotgun" + item_state = "shotgun" + w_class = 4.0 + force = 10 + origin_tech = "combat=2;materials=2" + mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/improvised" + sawn_desc = "I'm just here for the gasoline." + +/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/attackby(var/obj/item/A as obj, mob/user as mob) + ..() + if(istype(A, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = A + if(C.use(10)) + flags = CONDUCT + slot_flags = SLOT_BACK + icon_state = "ishotgunsling" + user << "You tie the lengths of cable to the shotgun, making a sling." + update_icon() + else + user << "You need at least ten lengths of cable if you want to make a sling." + return \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 86a66a0c43a..0f0491d63ac 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -8,36 +8,63 @@ embed = 1 sharp = 1 -/* on_hit(var/atom/target, var/blocked = 0) - if (..(target, blocked)) - var/mob/living/L = target - shake_camera(L, 3, 2) - return 1 - return 0 */ - /obj/item/projectile/bullet/weakbullet damage = 5 stun = 5 weaken = 5 -/obj/item/projectile/bullet/slug - name = "slug" - - -/obj/item/projectile/bullet/rubberbullet // Back to insta-stun bullets. - damage = 5 - stun = 5 - weaken = 5 +/obj/item/projectile/bullet/weakbullet/rubber //beanbag shotgun shells embed = 0 sharp = 0 -/obj/item/projectile/bullet/c38 //replacement for detective's ammo +/obj/item/projectile/bullet/weakbullet2 damage = 15 stun = 5 weaken = 5 + +/obj/item/projectile/bullet/weakbullet2/rubber //detective's c38 bullets embed = 0 sharp = 0 +/obj/item/projectile/bullet/weakbullet3 + damage = 20 + +/obj/item/projectile/bullet/pellet + name = "pellet" + damage = 15 + +/obj/item/projectile/bullet/blank + name = "blankshot" + nodamage = 1 + +/obj/item/projectile/bullet/pellet/weak + damage = 3 + +/obj/item/projectile/bullet/midbullet + damage = 20 + stun = 5 + weaken = 5 + +/obj/item/projectile/bullet/midbullet2 + damage = 25 + +/obj/item/projectile/bullet/midbullet3 + damage = 30 + +/obj/item/projectile/bullet/heavybullet + damage = 35 + + +/obj/item/projectile/bullet/stunshot + name = "stunshot" + damage = 5 + stun = 5 + weaken = 5 + stutter = 5 + embed = 0 + sharp = 0 + + /obj/item/projectile/bullet/weakbullet/booze embed = 0 on_hit(var/atom/target, var/blocked = 0) @@ -57,71 +84,6 @@ M.drowsyness += 10 A.volume += 5 //Because we can - -/obj/item/projectile/bullet/midbullet12 - damage = 20 - stun = 5 - weaken = 5 - -/obj/item/projectile/bullet/midbullet9 - damage = 25 - -/obj/item/projectile/bullet/midbullet45 - damage = 25 - stun = 1 - weaken = 1 - -/obj/item/projectile/bullet/midbullet10 //Only used with the Stechkin Pistol - RobRichards - damage = 30 - -/obj/item/projectile/bullet/buck - name = "pellet" - damage = 15 - -/obj/item/projectile/bullet/blank - name = "blankshot" - nodamage = 1 - -/obj/item/projectile/bullet/suffocationbullet//How does this even work? - name = "co bullet" - damage = 20 - damage_type = OXY - - -/obj/item/projectile/bullet/cyanideround - name = "poison bullet" - damage = 40 - damage_type = TOX - - -/obj/item/projectile/bullet/burstbullet//I think this one needs something for the on hit - name = "exploding bullet" - damage = 20 - embed = 0 - edge = 1 - -/obj/item/projectile/bullet/stunshot - name = "stunshot" - damage = 5 - stun = 5 - weaken = 5 - stutter = 5 - embed = 0 - sharp = 0 - -/obj/item/projectile/bullet/stunslug - name = "stunslug" - damage = 5 - stun = 5 - weaken = 5 - stutter = 5 - embed = 0 - sharp = 0 - -/obj/item/projectile/bullet/a762 - damage = 35 - - /obj/item/projectile/bullet/incendiary /obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 01fe8ca9485..8ceea50cbba 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -24,6 +24,17 @@ explosion(target, -1, 0, 2) return 1 +/obj/item/projectile/bullet/a40mm + name ="40mm grenade" + desc = "USE A WEEL GUN" + icon_state= "bolter" + damage = 60 + flag = "bullet" + +/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0) + explosion(target, -1, 0, 2, 1, 0) + return 1 + /obj/item/projectile/temp name = "freeze beam" icon_state = "ice_2" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 1cc959346f8..aeb58ad68db 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1587,7 +1587,7 @@ datum/design/cyborg_analyzer build_type = PROTOLATHE materials = list("$metal" = 30, "$glass" = 20) reliability_base = 74 - build_path = "/obj/item/device/robotanalyzer" + build_path = "/obj/item/device/robotanalyzer" datum/design/mmi name = "Man-Machine Interface" @@ -1710,7 +1710,7 @@ datum/design/nuclear_gun datum/design/stunrevolver name = "Stun Revolver" - desc = "The prize of the Head of Security." + desc = "A high-tech revolver that fires internal, reusable stun cartidges in a revolving cylinder. The stun cartridges can be recharged using a conventional energy weapon recharger." id = "stunrevolver" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) build_type = PROTOLATHE @@ -1797,8 +1797,8 @@ datum/design/large_grenade build_path = "/obj/item/weapon/grenade/chem_grenade/large" datum/design/smg - name = "Submachine Gun" - desc = "A lightweight, fast firing gun." + name = "Prototype Submachine Gun" + desc = "A prototype weapon made using lightweight materials on a traditional frame, designed to fire standard 9mm rounds." id = "smg" req_tech = list("combat" = 4, "materials" = 3) build_type = PROTOLATHE @@ -1806,6 +1806,16 @@ datum/design/smg build_path = "/obj/item/weapon/gun/projectile/automatic" locked = 1 +datum/design/mag_smg + name = "Submachine Gun Magazine (9mm)" + desc = "A 20-round magazine for the prototype submachine gun." + id = "mag_smg" + req_tech = list("combat" = 4, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 2000) + build_path = /obj/item/ammo_box/magazine/smgm9mm + + datum/design/ionrifle name = "Ion Rifle" desc = "How to dismantle a cyborg : The gun." @@ -1816,24 +1826,6 @@ datum/design/ionrifle build_path = /obj/item/weapon/gun/energy/ionrifle locked = 1 -datum/design/ammo_9mm - name = "Ammunition Box (9mm)" - desc = "A box of prototype 9mm ammunition." - id = "ammo_9mm" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 2000) - build_path = "/obj/item/ammo_box/c9mm" - -datum/design/mag_smg - name = "Submachine Gun Magazine (9mm)" - desc = "A prototype magazine for the submachine gun." - id = "mag_smg" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 2000) - build_path = "/obj/item/ammo_box/magazine/msmg9mm" - datum/design/stunshell name = "Stun Shell" desc = "A stunning shell for a shotgun." @@ -1841,7 +1833,7 @@ datum/design/stunshell req_tech = list("combat" = 3, "materials" = 3) build_type = PROTOLATHE materials = list("$metal" = 200) - build_path = "/obj/item/ammo_casing/shotgun/stunshell" + build_path = "/obj/item/ammo_casing/shotgun/stunslug" datum/design/techshell name = "Unloaded Technological Shotshell" @@ -1852,6 +1844,15 @@ datum/design/techshell materials = list("$metal" = 1000, "$glass" = 200, "$silver" = 300) build_path = "/obj/item/ammo_casing/shotgun/techshell" +datum/design/suppressor + name = "Universal Suppressor" + desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels." + id = "suppressor" + req_tech = list("combat" = 6, "engineering" = 5, "syndicate" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 2000, "$silver" = 500) + build_path = /obj/item/weapon/suppressor + datum/design/xray name = "Xray Laser Gun" desc = "Not quite as menacing as it sounds" diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index c03f9e0b2cf0e615f33f4f1a933f3fdb2b9c8a76..86a54f833eb39c9bb3f73579964d19987984b768 100644 GIT binary patch delta 24998 zcmb5V2UHYI+bueP3?f-_5CkMi&LCNmD8YarS#nN-WN4zGWD&_hKtRbk=O|HfW(blQ zavYeM+xWiU{r`WRv(7ztEry<+?yjz?uBvD6{p_B)#0rnP6+=n5bQ=nRKqeO3aUl>a zqF9y(z%)k!W7qSyaQbg=&1P4ao+Uq+8cg>K6^m>T9!qFr!;*PHcKMOav7h(ch#|cX zzAAs%&iJWfEmt2%ri?TEnbWUUr%ORPIJ)V2{qf`7gp{KX1O;TNY*iUBvbd*@xkT6M z6UPH|qreMNm+$>(VyhYs+&leUie0ur1C{@J4Yc7NIW1Z21t#>Hye#`BU&oO!_M)-( zooaGi{w_t+gYU!RE2d9lH=@4{@9T>J*;U=A6ptMGX?5Pqjba3nUn&HOe@pw( zDUvWV@{w|EMD*obC+}`I3G<6CmG|TkRwhyg=q3-#;zL_YlrmsPYph{|M$U;eOwgtd zivuj*XZ~=f_jfVj;W%^PP25d16gTpD>!e)$PD#v&OVhH{hJCafT0}?+CZ0dd1UbDaX_I5aT#Yv6-v9PFm!%uMuovt zx7>c%Y<|)!S=a2OSEN)g0xi^eWM4Detp90PBIu=`rkV;Oxm}F2aPQG0s4Y(K&TS

FPdcc591YOY)%hb}`EpT~#SY&QC%WEXS1G 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 delta 22358 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 Se*icWI%R5U^47>9{C@xwiSly* diff --git a/icons/mob/in-hand/guns.dmi b/icons/mob/in-hand/guns.dmi index 8b4f0fa69cd8f641595b59a984c6891d7bd0d953..9f0b1ae7ae8f06223db37094b053b95f7fedd4cb 100644 GIT binary patch delta 825 zcmV-91IGN*1g!@piBL{Q4GJ0x0000DNk~Le0001h0001h2m=5B0QBII`2YX_LXjmO zJQNfZWo2bXMn>}T09IC3Gcz+D9v(bAJP;5NFE1}WJv~lTSUx^J800<$00001bW%=J z06^y0W&i*Hevw>fe?(AavZX0O5Hr}JB@j%Y_y50ownGyGyY`we)4PuJ(iYZ|Y)Gb(QUCw|0Pr87`f2_8 zEC*R0TB+8?oMRx%qc4;L-AEmzcIfYAc^cNTZRz5EnnwK}@I>|MZPbYq@#TA4;Fy{w2<$NENkhTg%a zSze|}nNMw$5q}6xy!wTOr^LZxplIE8b!4EBCp?AlOH-^Lt&T30@|fp4aOC^P5bwZA z-(vs(00000e*p0B_5^Plt7_StF`AxyvpuLTve@SI>40ZK63A5p>^-M144}IHXh^nj zFu7`gBXzl5`UG`T`?KCR0AUBYYJlNXa{cdgPc#6J?4Pa%7{&wnlWYLgp=zKoxBC@L z1K^RW1{jee`JZk8*c)kyL;0U<0N5KDiG#VFXaLw7f2alk00000007{HRy0IUT|1#j zUrfEhjU2mn-5}DpZO;w%?M=ck-dbW4-8c*)2iDr2oE)6~C}Qvqb_`DcE?Mm+?L?fx zF!a`rR%F1t6p$tpBH-_Xg(4wvJflz{Z;h z)|~^Xe|~VVzc|n2WuD@>iHG$9edg0%qQ9Chv!3ESI(?G<8~AB`000000000ez#IR* z%96W7cRk3Gs13qOQF3=dtxGu|gZ*P&-=@NqG`YK^I*f^?gbem-$>zL)&>RTE-`zRj z?{0(rOJU-J@zNYf)8~EglUxg9>2@LnT-Ly&OF57|0*5c}fN5dY!9FsO3b-ZBL4f62 z7!SIgNCw>U_-&berle8|2jVxg&#csmOVAkrz;D4{V&)aYGqPX_00000NkvXXu0mjf DxGi<- delta 477 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