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 c03f9e0b2cf..86a54f833eb 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/in-hand/guns.dmi b/icons/mob/in-hand/guns.dmi index 8b4f0fa69cd..9f0b1ae7ae8 100644 Binary files a/icons/mob/in-hand/guns.dmi and b/icons/mob/in-hand/guns.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 9a0139587c6..b0e573ab6f9 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index f206f2c013c..4b79d29367c 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 63153e67471..53dfce86a2b 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -8556,7 +8556,7 @@ "diB" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) "diC" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) "diD" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "ASSAULT1"; name = "Launch Bay #1"; p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) -"diE" = (/obj/structure/rack,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"diE" = (/obj/structure/rack,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/obj/item/ammo_box/magazine/smgm9mm,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "diF" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "diG" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "diH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/control) @@ -9112,20 +9112,20 @@ "dtl" = (/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/turf/unsimulated/wall{dir = 1; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/admin) "dtm" = (/obj/item/weapon/storage/box/syringes,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/gun/syringe/rapidsyringe,/obj/item/weapon/reagent_containers/spray/chemsprayer,/obj/structure/closet,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtn" = (/turf/space,/turf/unsimulated/wall{dir = 2; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/admin) -"dto" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/automatic/pistol{pixel_x = 3; pixel_y = -3},/obj/item/weapon/silencer,/obj/item/weapon/silencer{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"dto" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/automatic/pistol{pixel_x = 3; pixel_y = -3},/obj/item/weapon/suppressor,/obj/item/weapon/suppressor{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtp" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m12g,/obj/item/ammo_box/magazine/m12g,/obj/item/ammo_box/magazine/m12g/buckshot,/obj/item/ammo_box/magazine/m12g/buckshot,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/weapon/gun/projectile/automatic/bulldog,/obj/item/weapon/gun/projectile/automatic/bulldog{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"dtq" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m12mm,/obj/item/ammo_box/magazine/m12mm,/obj/item/ammo_box/magazine/m12mm,/obj/item/ammo_box/magazine/m12mm,/obj/item/ammo_box/magazine/m12mm,/obj/item/ammo_box/magazine/m12mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"dtq" = (/obj/structure/rack,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtr" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/weapon/gun/projectile/automatic/gyropistol,/obj/item/weapon/gun/projectile/automatic/gyropistol{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dts" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/weapon/gun/projectile/automatic/deagle,/obj/item/weapon/gun/projectile/automatic/deagle{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"dtt" = (/obj/structure/rack,/obj/item/ammo_box/a418,/obj/item/ammo_box/a418,/obj/item/ammo_box/a666,/obj/item/ammo_box/a666,/obj/item/ammo_box/a357,/obj/item/ammo_box/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/item/weapon/gun/projectile/revolver/mateba{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"dtt" = (/obj/structure/rack,/obj/item/ammo_box/a357,/obj/item/ammo_box/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/item/weapon/gun/projectile/revolver/mateba{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/grown/lemon,/obj/item/weapon/reagent_containers/food/snacks/grown/berries,/obj/item/weapon/reagent_containers/food/snacks/grown/banana,/obj/item/weapon/reagent_containers/food/snacks/grown/cherries,/obj/item/weapon/reagent_containers/food/snacks/grown/orange,/obj/item/weapon/reagent_containers/food/snacks/grown/corn,/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtv" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtw" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/storage/box/autoinjectors,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtx" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dty" = (/obj/machinery/door/airlock/hatch{name = "Chem Lab"; req_access_txt = "0"},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtz" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m762,/obj/item/ammo_box/magazine/m762,/obj/item/ammo_box/magazine/m762,/obj/item/ammo_box/magazine/m762,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/item/weapon/gun/projectile/automatic/l6_saw{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"dtA" = (/obj/structure/rack,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/ammo_box/magazine/msmg9mm,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"dtB" = (/obj/structure/rack,/obj/item/ammo_box/magazine/uzim45,/obj/item/ammo_box/magazine/uzim45,/obj/item/ammo_box/magazine/uzim45,/obj/item/ammo_box/magazine/uzim45,/obj/item/ammo_box/magazine/uzim45,/obj/item/ammo_box/magazine/uzim45,/obj/item/weapon/gun/projectile/automatic/mini_uzi,/obj/item/weapon/gun/projectile/automatic/mini_uzi{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"dtA" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic,/obj/item/weapon/gun/projectile/automatic{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"dtB" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m545,/obj/item/ammo_box/magazine/m545,/obj/item/ammo_box/magazine/m545,/obj/item/ammo_box/magazine/m545,/obj/item/ammo_box/magazine/m545,/obj/item/ammo_box/magazine/m545,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/weapon/gun/projectile/automatic/c90gl,/obj/item/weapon/gun/projectile/automatic/c90gl{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtC" = (/obj/structure/mirror{dir = 4; pixel_x = 0; pixel_y = -32},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtD" = (/obj/machinery/optable,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtE" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchenknife,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) @@ -9140,7 +9140,7 @@ "dtN" = (/obj/structure/rack,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtO" = (/obj/structure/rack,/obj/item/weapon/katana{pixel_x = 3; pixel_y = -3},/obj/item/weapon/katana,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtP" = (/obj/structure/rack,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/melee/energy/sword{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"dtQ" = (/obj/structure/rack,/obj/item/weapon/gun/energy/mindflayer,/obj/item/weapon/gun/energy/mindflayer{pixel_x = 3; pixel_y = -3},/obj/machinery/recharger/wallcharger{pixel_x = 30},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"dtQ" = (/obj/structure/rack,/obj/machinery/recharger/wallcharger{pixel_x = 30},/obj/item/weapon/gun/energy/xray,/obj/item/weapon/gun/energy/xray{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "dtR" = (/obj/structure/table,/obj/random/toolbox,/obj/random/bomb_supply,/obj/machinery/syndicatebomb/badmin/clown,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "dtS" = (/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "dtT" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) diff --git a/paradise.dme b/paradise.dme index cc045a21fc4..9710cd7fead 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1341,8 +1341,8 @@ #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\projectile.dm" #include "code\modules\projectiles\targeting.dm" +#include "code\modules\projectiles\ammunition\ammo_casings.dm" #include "code\modules\projectiles\ammunition\boxes.dm" -#include "code\modules\projectiles\ammunition\bullets.dm" #include "code\modules\projectiles\ammunition\magazines.dm" #include "code\modules\projectiles\guns\alien.dm" #include "code\modules\projectiles\guns\energy.dm" @@ -1358,7 +1358,8 @@ #include "code\modules\projectiles\guns\magic\wand.dm" #include "code\modules\projectiles\guns\projectile\automatic.dm" #include "code\modules\projectiles\guns\projectile\crossbow.dm" -#include "code\modules\projectiles\guns\projectile\launcher.dm" +#include "code\modules\projectiles\guns\projectile\grenade launcher.dm" +#include "code\modules\projectiles\guns\projectile\launchers.dm" #include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\pneumatic.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm" diff --git a/sound/weapons/Gunshot.ogg b/sound/weapons/Gunshot.ogg index 2547b98af9e..4fd082ce7f2 100644 Binary files a/sound/weapons/Gunshot.ogg and b/sound/weapons/Gunshot.ogg differ