diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 11c1fa87fc..8c81c98db6 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -1834,6 +1834,35 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
access = access_security
group = "Security"
+/datum/supply_packs/bolt_rifles_competitive
+ name = "Competitive shooting crate"
+ contains = list(
+ /obj/item/device/assembly/timer,
+ /obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice = 2,
+ /obj/item/ammo_magazine/clip/a762/practice = 4,
+ /obj/item/target = 2,
+ /obj/item/target/alien = 2,
+ /obj/item/target/syndicate = 2
+ )
+ cost = 40
+ containertype = /obj/structure/closet/crate/secure/weapon
+ containername = "Weapons crate"
+ access = access_security
+ group = "Security"
+
+/datum/supply_packs/bolt_rifles_mosin
+ name = "Surplus militia rifles"
+ contains = list(
+ /obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin = 3,
+ /obj/item/ammo_magazine/clip/a762 = 6
+ )
+ cost = 50
+ hidden = 1
+ containertype = /obj/structure/closet/crate/secure/weapon
+ containername = "Weapons crate"
+ access = access_security
+ group = "Security"
+
/datum/supply_packs/medicalextragear
name = "Medical surplus equipment"
contains = list(
@@ -2108,4 +2137,4 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
cost = 10
containertype = "/obj/structure/closet/crate"
containername = "Chaplain equipment crate"
- group = "Miscellaneous"
\ No newline at end of file
+ group = "Miscellaneous"
diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm
index b45cf3be3c..a9aa501788 100644
--- a/code/datums/uplink/ammunition.dm
+++ b/code/datums/uplink/ammunition.dm
@@ -6,62 +6,98 @@
category = /datum/uplink_category/ammunition
/datum/uplink_item/item/ammo/a357
- name = ".357"
+ name = ".357 Speedloader"
path = /obj/item/ammo_magazine/a357
/datum/uplink_item/item/ammo/mc9mm
- name = "9mm"
+ name = "Pistol Magazine (9mm)"
path = /obj/item/ammo_magazine/mc9mm
/datum/uplink_item/item/ammo/c45m
- name = ".45"
+ name = "Pistol Magazine (.45)"
path = /obj/item/ammo_magazine/c45m
+/datum/uplink_item/item/ammo/tommymag
+ name = "Tommygun Magazine (.45)"
+ path = /obj/item/ammo_magazine/tommymag
+
+/datum/uplink_item/item/ammo/tommydrum
+ name = "Tommygun Drum Magazine (.45)"
+ path = /obj/item/ammo_magazine/tommydrum
+ item_cost = 4 // Buy 40 bullets, get 10 free!
+
/datum/uplink_item/item/ammo/darts
name = "Darts"
path = /obj/item/ammo_magazine/chemdart
/datum/uplink_item/item/ammo/sniperammo
- name = "14.5mm"
+ name = "Anti-Materiel Rifle ammo box (14.5mm)"
path = /obj/item/weapon/storage/box/sniperammo
/datum/uplink_item/item/ammo/a556
- name = "5.56mm"
+ name = "10rnd Rifle Magazine (5.56mm)"
path = /obj/item/ammo_magazine/a556
/datum/uplink_item/item/ammo/a556/ap
- name = "5.56mm AP"
+ name = "10rnd Rifle Magazine (5.56mm AP)"
path = /obj/item/ammo_magazine/a556/ap
+/datum/uplink_item/item/ammo/a556m
+ name = "20rnd Rifle Magazine (5.56mm)"
+ path = /obj/item/ammo_magazine/a556m
+ item_cost = 4
+
+/datum/uplink_item/item/ammo/a556m/ap
+ name = "20rnd Rifle Magazine (5.56mm AP)"
+ path = /obj/item/ammo_magazine/a556m/ap
+ item_cost = 4
+
+/datum/uplink_item/item/ammo/c762
+ name = "20rnd Rifle Magazine (7.62mm)"
+ path = /obj/item/ammo_magazine/c762
+
+/datum/uplink_item/item/ammo/c762/ap
+ name = "20rnd Rifle Magazine (7.62mm AP)"
+ path = /obj/item/ammo_magazine/c762/ap
+
+/datum/uplink_item/item/ammo/SVD
+ name = "10rnd Rifle Magazine (7.62mm)"
+ path = /obj/item/ammo_magazine/SVD
+ item_cost = 1 // Half the capacity.
+
+/datum/uplink_item/item/ammo/SVD/ap
+ name = "10rnd Rifle Magazine (7.62mm AP)"
+ path = /obj/item/ammo_magazine/SVD/ap
+
/datum/uplink_item/item/ammo/a10mm
- name = "10mm"
+ name = "SMG Magazine (10mm)"
path = /obj/item/ammo_magazine/a10mm
/datum/uplink_item/item/ammo/a762
- name = "7.62mm"
+ name = "Machinegun Magazine (7.62mm)"
path = /obj/item/ammo_magazine/a762
/datum/uplink_item/item/ammo/a762/ap
- name = "7.62mm AP"
+ name = "Machinegun Magazine (7.62mm AP)"
path = /obj/item/ammo_magazine/a762/ap
/datum/uplink_item/item/ammo/g12
- name = "12 gauge"
+ name = "12g Auto-Shotgun Magazine (Slug)"
path = /obj/item/ammo_magazine/g12
/datum/uplink_item/item/ammo/g12/beanbag
- name = "12 gauge beanbag"
+ name = "12g Auto-Shotgun Magazine (Beanbag)"
path = /obj/item/ammo_magazine/g12/beanbag
item_cost = 1 // Discount due to it being LTL.
/datum/uplink_item/item/ammo/g12/pellet
- name = "12 gauge pellet"
+ name = "12g Auto-Shotgun Magazine (Pellet)"
path = /obj/item/ammo_magazine/g12/pellet
/datum/uplink_item/item/ammo/g12/stun
- name = "12 gauge stun"
+ name = "12g Auto-Shotgun Magazine (Stun)"
path = /obj/item/weapon/storage/box/stunshells
/datum/uplink_item/item/ammo/g12/flash
- name = "12 gauge flash"
+ name = "12g Auto-Shotgun Magazine (Flash)"
path = /obj/item/weapon/storage/box/flashshells
\ No newline at end of file
diff --git a/code/datums/uplink/visible_weapons.dm b/code/datums/uplink/visible_weapons.dm
index 4c9ac49ee1..c0e8d3aaca 100644
--- a/code/datums/uplink/visible_weapons.dm
+++ b/code/datums/uplink/visible_weapons.dm
@@ -34,22 +34,37 @@
item_cost = 6
path = /obj/item/weapon/gun/projectile/revolver
+/datum/uplink_item/item/visible_weapons/Derringer
+ name = ".357 Derringer Pistol"
+ item_cost = 5
+ path = /obj/item/weapon/gun/projectile/derringer
+
/datum/uplink_item/item/visible_weapons/heavysniper
- name = "Anti-materiel Rifle"
+ name = "Anti-Materiel Rifle (14.5mm)"
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
path = /obj/item/weapon/gun/projectile/heavysniper
+/datum/uplink_item/item/visible_weapons/tommygun
+ name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades
+ item_cost = 7
+ path = /obj/item/weapon/gun/projectile/automatic/tommygun
+
//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear.
/datum/uplink_item/item/visible_weapons/submachinegun
- name = "Submachine Gun"
+ name = "Submachine Gun (10mm)"
item_cost = 6
path = /obj/item/weapon/gun/projectile/automatic/c20r
/datum/uplink_item/item/visible_weapons/assaultrifle
- name = "Assault Rifle"
+ name = "Assault Rifle (7.62mm)"
item_cost = 7
path = /obj/item/weapon/gun/projectile/automatic/sts35
+/datum/uplink_item/item/visible_weapons/bullpuprifle
+ name = "Assault Rifle (5.56mm)"
+ item_cost = 7
+ path = /obj/item/weapon/gun/projectile/automatic/carbine
+
/datum/uplink_item/item/visible_weapons/combatshotgun
name = "Combat Shotgun"
item_cost = 7
diff --git a/code/game/antagonist/outsider/commando.dm b/code/game/antagonist/outsider/commando.dm
index 135a586b2e..d7acf05273 100644
--- a/code/game/antagonist/outsider/commando.dm
+++ b/code/game/antagonist/outsider/commando.dm
@@ -27,7 +27,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(player), slot_glasses)
player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(player), slot_wear_mask)
player.equip_to_slot_or_del(new /obj/item/weapon/storage/box(player), slot_in_backpack)
- player.equip_to_slot_or_del(new /obj/item/ammo_magazine/c45(player), slot_in_backpack)
+ player.equip_to_slot_or_del(new /obj/item/ammo_magazine/clip/c45(player), slot_in_backpack)
player.equip_to_slot_or_del(new /obj/item/weapon/rig/merc(player), slot_back)
player.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(player), slot_r_hand)
diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm
index 08a6e8644b..b420b3d59e 100644
--- a/code/game/antagonist/outsider/raider.dm
+++ b/code/game/antagonist/outsider/raider.dm
@@ -80,16 +80,22 @@ var/datum/antagonist/raider/raiders
/obj/item/weapon/gun/projectile/automatic/c20r,
/obj/item/weapon/gun/projectile/automatic/wt550,
/obj/item/weapon/gun/projectile/automatic/sts35,
+ /obj/item/weapon/gun/projectile/automatic/carbine,
+ /obj/item/weapon/gun/projectile/automatic/tommygun,
/obj/item/weapon/gun/projectile/silenced,
/obj/item/weapon/gun/projectile/shotgun/pump,
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
+ /obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn,
/obj/item/weapon/gun/projectile/colt/detective,
/obj/item/weapon/gun/projectile/pistol,
/obj/item/weapon/gun/projectile/revolver,
- /obj/item/weapon/gun/projectile/pirate
+ /obj/item/weapon/gun/projectile/pirate,
+ /obj/item/weapon/gun/projectile/revolver/judge,
+ list(/obj/item/weapon/gun/projectile/luger,/obj/item/weapon/gun/projectile/luger/brown),
+ list(/obj/item/weapon/gun/projectile/deagle, /obj/item/weapon/gun/projectile/deagle/gold, /obj/item/weapon/gun/projectile/deagle/camo)
)
var/list/raider_holster = list(
diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm
index efcdbad236..1e6913a374 100644
--- a/code/game/antagonist/station/renegade.dm
+++ b/code/game/antagonist/station/renegade.dm
@@ -37,19 +37,25 @@ var/datum/antagonist/renegade/renegades
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
/obj/item/weapon/gun/projectile/automatic/c20r,
/obj/item/weapon/gun/projectile/automatic/sts35,
+ /obj/item/weapon/gun/projectile/automatic/carbine,
/obj/item/weapon/gun/projectile/automatic/wt550,
/obj/item/weapon/gun/projectile/automatic/z8,
+ /obj/item/weapon/gun/projectile/automatic/tommygun,
/obj/item/weapon/gun/projectile/colt/detective,
/obj/item/weapon/gun/projectile/sec/wood,
/obj/item/weapon/gun/projectile/silenced,
/obj/item/weapon/gun/projectile/pistol,
/obj/item/weapon/gun/projectile/revolver,
+ /obj/item/weapon/gun/projectile/derringer,
/obj/item/weapon/gun/projectile/shotgun/pump,
+ /obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin,
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
+ /obj/item/weapon/gun/projectile/revolver/judge,
list(/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn),
list(/obj/item/weapon/gun/projectile/deagle, /obj/item/weapon/gun/projectile/deagle/gold, /obj/item/weapon/gun/projectile/deagle/camo),
- list(/obj/item/weapon/gun/projectile/revolver/detective, /obj/item/weapon/gun/projectile/revolver/deckard)
+ list(/obj/item/weapon/gun/projectile/revolver/detective, /obj/item/weapon/gun/projectile/revolver/deckard),
+ list(/obj/item/weapon/gun/projectile/luger,/obj/item/weapon/gun/projectile/luger/brown)
)
/datum/antagonist/renegade/New()
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 0082a515a4..5901148603 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -146,6 +146,22 @@
if(is_robot_module(O))
return 0
+ if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/a357) || istype(O,/obj/item/ammo_magazine/c38)) // Prevents ammo recycling exploit with speedloaders.
+ user << "\The [O] is too hazardous to recycle with the autolathe!"
+ return
+ /* ToDo: Make this actually check for ammo and change the value of the magazine if it's empty. -Spades
+ var/obj/item/ammo_magazine/speedloader = O
+ if(speedloader.stored_ammo)
+ user << "\The [speedloader] is too hazardous to put back into the autolathe while there's ammunition inside of it!"
+ return
+ else
+ speedloader.matter = list(DEFAULT_WALL_MATERIAL = 75) // It's just a hunk of scrap metal now.
+ if(istype(O,/obj/item/ammo_magazine)) // This was just for immersion consistency with above.
+ var/obj/item/ammo_magazine/mag = O
+ if(mag.stored_ammo)
+ user << "\The [mag] is too hazardous to put back into the autolathe while there's ammunition inside of it!"
+ return*/
+
//Resources are being loaded.
var/obj/item/eating = O
if(!eating.matter)
diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm
index bedf855ec8..eda9262351 100644
--- a/code/game/machinery/autolathe_datums.dm
+++ b/code/game/machinery/autolathe_datums.dm
@@ -330,36 +330,415 @@
path = /obj/item/weapon/syringe_cartridge
category = "Arms and Ammunition"
+////////////////
+/*Ammo casings*/
+////////////////
+
/datum/autolathe/recipe/shotgun_blanks
- name = "ammunition (shotgun, blank)"
+ name = "ammunition (12g, blank)"
path = /obj/item/ammo_casing/shotgun/blank
category = "Arms and Ammunition"
/datum/autolathe/recipe/shotgun_beanbag
- name = "ammunition (shotgun, beanbag)"
+ name = "ammunition (12g, beanbag)"
path = /obj/item/ammo_casing/shotgun/beanbag
category = "Arms and Ammunition"
/datum/autolathe/recipe/shotgun_flash
- name = "ammunition (shotgun, flash)"
+ name = "ammunition (12g, flash)"
path = /obj/item/ammo_casing/shotgun/flash
category = "Arms and Ammunition"
-/datum/autolathe/recipe/magazine_rubber
- name = "ammunition (.45, rubber)"
+/datum/autolathe/recipe/shotgun
+ name = "ammunition (12g, slug)"
+ path = /obj/item/ammo_casing/shotgun
+ hidden = 1
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/shotgun_pellet
+ name = "ammunition (12g, pellet)"
+ path = /obj/item/ammo_casing/shotgun/pellet
+ hidden = 1
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/stunshell
+ name = "ammunition (stun cartridge, shotgun)"
+ path = /obj/item/ammo_casing/shotgun/stunshell
+ hidden = 1
+ category = "Arms and Ammunition"
+
+//////////////////
+/*Ammo magazines*/
+//////////////////
+
+/////// 5mm
+/*
+/datum/autolathe/recipe/pistol_5mm
+ name = "pistol magazine (5mm)"
+ path = /obj/item/ammo_magazine/c5mm
+ category = "Arms and Ammunition"
+ hidden = 1
+*/
+
+/////// .45
+/datum/autolathe/recipe/pistol_45
+ name = "pistol magazine (.45)"
+ path = /obj/item/ammo_magazine/c45m
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_45p
+ name = "pistol magazine (.45 practice)"
+ path = /obj/item/ammo_magazine/c45m/practice
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_45r
+ name = "pistol magazine (.45 rubber)"
path = /obj/item/ammo_magazine/c45m/rubber
category = "Arms and Ammunition"
-/datum/autolathe/recipe/magazine_flash
- name = "ammunition (.45, flash)"
+/datum/autolathe/recipe/pistol_45f
+ name = "pistol magazine (.45 flash)"
path = /obj/item/ammo_magazine/c45m/flash
category = "Arms and Ammunition"
-/datum/autolathe/recipe/magazine_smg_rubber
- name = "ammunition (9mm rubber top mounted)"
+/datum/autolathe/recipe/pistol_45uzi
+ name = "uzi magazine (.45)"
+ path = /obj/item/ammo_magazine/c45uzi
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/tommymag
+ name = "Tommygun magazine (.45)"
+ path = /obj/item/ammo_magazine/tommymag
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/tommydrum
+ name = "Tommygun drum magazine (.45)"
+ path = /obj/item/ammo_magazine/tommydrum
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/////// 9mm
+
+/obj/item/ammo_magazine/mc9mm/flash
+ ammo_type = /obj/item/ammo_casing/c9mmf
+
+/obj/item/ammo_magazine/mc9mm/rubber
+ name = "magazine (9mm rubber)"
+ ammo_type = /obj/item/ammo_casing/c9mmr
+
+/obj/item/ammo_magazine/mc9mm/practice
+ name = "magazine (9mm practice)"
+ ammo_type = /obj/item/ammo_casing/c9mmp
+
+/datum/autolathe/recipe/pistol_9mm
+ name = "pistol magazine (9mm)"
+ path = /obj/item/ammo_magazine/mc9mm
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_9mmr
+ name = "pistol magazine (9mm rubber)"
+ path = /obj/item/ammo_magazine/mc9mm/rubber
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_9mmp
+ name = "pistol magazine (9mm practice)"
+ path = /obj/item/ammo_magazine/mc9mm/practice
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_9mmf
+ name = "pistol magazine (9mm flash)"
+ path = /obj/item/ammo_magazine/mc9mm/flash
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/smg_9mm
+ name = "top-mounted SMG magazine (9mm)"
+ path = /obj/item/ammo_magazine/mc9mmt
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/smg_9mmr
+ name = "top-mounted SMG magazine (9mm rubber)"
path = /obj/item/ammo_magazine/mc9mmt/rubber
category = "Arms and Ammunition"
+/datum/autolathe/recipe/smg_9mmp
+ name = "top-mounted SMG magazine (9mm practice)"
+ path = /obj/item/ammo_magazine/mc9mmt/practice
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/smg_9mmf
+ name = "top-mounted SMG magazine (9mm flash)"
+ path = /obj/item/ammo_magazine/mc9mmt/flash
+ category = "Arms and Ammunition"
+
+/////// 10mm
+/datum/autolathe/recipe/smg_10mm
+ name = "SMG magazine (10mm)"
+ path = /obj/item/ammo_magazine/a10mm
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_50
+ name = "pistol magazine (.50AE)"
+ path = /obj/item/ammo_magazine/a50
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/////// 5.56mm
+/datum/autolathe/recipe/rifle_556
+ name = "10rnd rifle magazine (5.56mm)"
+ path = /obj/item/ammo_magazine/a556/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_556p
+ name = "10rnd rifle magazine (5.56mm practice)"
+ path = /obj/item/ammo_magazine/a556/practice
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/rifle_556m
+ name = "20rnd rifle magazine (5.56mm)"
+ path = /obj/item/ammo_magazine/a556m
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_556mp
+ name = "20rnd rifle magazine (5.56mm practice)"
+ path = /obj/item/ammo_magazine/a556m/practice
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/////// 7.62
+/datum/autolathe/recipe/rifle_SVD
+ name = "10rnd rifle magazine (7.62mm)"
+ path = /obj/item/ammo_magazine/SVD
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_762
+ name = "20rnd rifle magazine (7.62mm)"
+ path = /obj/item/ammo_magazine/c762
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/machinegun_762
+ name = "machinegun box magazine (7.62)"
+ path = /obj/item/ammo_magazine/a762
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/shotgun_magazine
+ name = "24rnd shotgun magazine (12g)"
+ path = /obj/item/ammo_magazine/g12
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/* Commented out until autolathe stuff is decided/fixed. Will probably remove these entirely. -Spades
+// These should always be /empty! The idea is to fill them up manually with ammo clips.
+
+/datum/autolathe/recipe/pistol_5mm
+ name = "pistol magazine (5mm)"
+ path = /obj/item/ammo_magazine/c5mm/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/smg_5mm
+ name = "top-mounted SMG magazine (5mm)"
+ path = /obj/item/ammo_magazine/c5mmt/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_45
+ name = "pistol magazine (.45)"
+ path = /obj/item/ammo_magazine/c45m/empty
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_45uzi
+ name = "uzi magazine (.45)"
+ path = /obj/item/ammo_magazine/c45uzi/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/tommymag
+ name = "Tommygun magazine (.45)"
+ path = /obj/item/ammo_magazine/tommymag/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/tommydrum
+ name = "Tommygun drum magazine (.45)"
+ path = /obj/item/ammo_magazine/tommydrum/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_9mm
+ name = "pistol magazine (9mm)"
+ path = /obj/item/ammo_magazine/mc9mm/empty
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/smg_9mm
+ name = "top-mounted SMG magazine (9mm)"
+ path = /obj/item/ammo_magazine/mc9mmt/empty
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/smg_10mm
+ name = "SMG magazine (10mm)"
+ path = /obj/item/ammo_magazine/a10mm/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_50
+ name = "pistol magazine (.50AE)"
+ path = /obj/item/ammo_magazine/a50/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_556
+ name = "10rnd rifle magazine (5.56mm)"
+ path = /obj/item/ammo_magazine/a556/empty
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/rifle_556m
+ name = "20rnd rifle magazine (5.56mm)"
+ path = /obj/item/ammo_magazine/a556m/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_SVD
+ name = "10rnd rifle magazine (7.62mm)"
+ path = /obj/item/ammo_magazine/SVD/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_762
+ name = "20rnd rifle magazine (7.62mm)"
+ path = /obj/item/ammo_magazine/c762/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/machinegun_762
+ name = "machinegun box magazine (7.62)"
+ path = /obj/item/ammo_magazine/a762/empty
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/shotgun_magazine
+ name = "24rnd shotgun magazine (12g)"
+ path = /obj/item/ammo_magazine/g12/empty
+ category = "Arms and Ammunition"
+ hidden = 1*/
+
+///////////////////////////////
+/*Ammo clips and Speedloaders*/
+///////////////////////////////
+
+/datum/autolathe/recipe/speedloader_357
+ name = "speedloader (.357)"
+ path = /obj/item/ammo_magazine/a357
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/speedloader_38
+ name = "speedloader (.38)"
+ path = /obj/item/ammo_magazine/c38
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/speedloader_38r
+ name = "speedloader (.38 rubber)"
+ path = /obj/item/ammo_magazine/c38/rubber
+ category = "Arms and Ammunition"
+
+// Commented out until metal exploits with autolathe is fixed.
+/*/datum/autolathe/recipe/pistol_clip_45
+ name = "ammo clip (.45)"
+ path = /obj/item/ammo_magazine/clip/c45
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_clip_45r
+ name = "ammo clip (.45 rubber)"
+ path = /obj/item/ammo_magazine/clip/c45/rubber
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_clip_45f
+ name = "ammo clip (.45 flash)"
+ path = /obj/item/ammo_magazine/clip/c45/flash
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_clip_45p
+ name = "ammo clip (.45 practice)"
+ path = /obj/item/ammo_magazine/clip/c45/practice
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_clip_9mm
+ name = "ammo clip (9mm)"
+ path = /obj/item/ammo_magazine/clip/c9mm
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_clip_9mmr
+ name = "ammo clip (9mm rubber)"
+ path = /obj/item/ammo_magazine/clip/c9mm/rubber
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_clip_9mmp
+ name = "ammo clip (9mm practice)"
+ path = /obj/item/ammo_magazine/clip/c9mm/practice
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_clip_9mmf
+ name = "ammo clip (9mm flash)"
+ path = /obj/item/ammo_magazine/clip/c9mm/flash
+ category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/pistol_clip_5mm
+ name = "ammo clip (5mm)"
+ path = /obj/item/ammo_magazine/clip/c5mm
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_clip_10mm
+ name = "ammo clip (10mm)"
+ path = /obj/item/ammo_magazine/clip/a10mm
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/pistol_clip_50
+ name = "ammo clip (.50AE)"
+ path = /obj/item/ammo_magazine/clip/a50
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_clip_556
+ name = "ammo clip (5.56mm)"
+ path = /obj/item/ammo_magazine/clip/a556
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_clip_556_practice
+ name = "ammo clip (5.56mm practice)"
+ path = /obj/item/ammo_magazine/clip/a556/practice
+ category = "Arms and Ammunition"
+*/
+
+/datum/autolathe/recipe/rifle_clip_762
+ name = "ammo clip (7.62mm)"
+ path = /obj/item/ammo_magazine/clip/a762
+ category = "Arms and Ammunition"
+ hidden = 1
+
+/datum/autolathe/recipe/rifle_clip_762_practice
+ name = "ammo clip (7.62mm practice)"
+ path = /obj/item/ammo_magazine/clip/a762/practice
+ category = "Arms and Ammunition"
+
+//////////////
+
/datum/autolathe/recipe/consolescreen
name = "console screen"
path = /obj/item/weapon/stock_parts/console_screen
@@ -427,78 +806,6 @@
hidden = 1
category = "Arms and Ammunition"
-/datum/autolathe/recipe/magazine_revolver_1
- name = "ammunition (.357)"
- path = /obj/item/ammo_magazine/a357
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_revolver_2
- name = "ammunition (.45)"
- path = /obj/item/ammo_magazine/c45m
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_stetchkin
- name = "ammunition (9mm)"
- path = /obj/item/ammo_magazine/mc9mm
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_stetchkin_flash
- name = "ammunition (9mm, flash)"
- path = /obj/item/ammo_magazine/mc9mm/flash
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_c20r
- name = "ammunition (10mm)"
- path = /obj/item/ammo_magazine/a10mm
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_arifle
- name = "ammunition (7.62mm)"
- path = /obj/item/ammo_magazine/c762
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_smg
- name = "ammunition (9mm top mounted)"
- path = /obj/item/ammo_magazine/mc9mmt
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/magazine_carbine
- name = "ammunition (5.56mm)"
- path = /obj/item/ammo_magazine/a556
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/shotgun
- name = "ammunition (slug, shotgun)"
- path = /obj/item/ammo_casing/shotgun
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/shotgun_pellet
- name = "ammunition (shell, shotgun)"
- path = /obj/item/ammo_casing/shotgun/pellet
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/tacknife
- name = "tactical knife"
- path = /obj/item/weapon/material/hatchet/tacknife
- hidden = 1
- category = "Arms and Ammunition"
-
-/datum/autolathe/recipe/stunshell
- name = "ammunition (stun cartridge, shotgun)"
- path = /obj/item/ammo_casing/shotgun/stunshell
- hidden = 1
- category = "Arms and Ammunition"
-
/datum/autolathe/recipe/rcd
name = "rapid construction device"
path = /obj/item/weapon/rcd
@@ -534,3 +841,9 @@
path = /obj/item/weapon/material/knuckledusters
hidden = 1
category = "Arms and Ammunition"
+
+/datum/autolathe/recipe/tacknife
+ name = "tactical knife"
+ path = /obj/item/weapon/material/hatchet/tacknife
+ hidden = 1
+ category = "Arms and Ammunition"
\ No newline at end of file
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 4721e84440..4edaae81aa 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -48,7 +48,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target)
var/obj/item/projectile/P = A
- P.launch(target)
+ P.launch(target)
/obj/item/mecha_parts/mecha_equipment/weapon/energy
name = "general energy weapon"
@@ -95,7 +95,7 @@
energy_drain = 120
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 6, TECH_POWER = 4)
projectile = /obj/item/projectile/beam/pulse/heavy
- fire_sound = 'sound/weapons/marauder.ogg'
+ fire_sound = 'sound/weapons/gauss_shoot.ogg'
/obj/item/projectile/beam/pulse/heavy
name = "heavy pulse laser"
@@ -205,7 +205,7 @@
icon_state = "mecha_uac2"
equip_cooldown = 10
projectile = /obj/item/projectile/bullet/pistol/medium
- fire_sound = 'sound/weapons/Gunshot.ogg'
+ fire_sound = 'sound/weapons/machinegun.ogg'
projectiles = 300
projectiles_per_shot = 3
deviation = 0.3
@@ -218,7 +218,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/Fire(atom/movable/AM, atom/target, turf/aimloc)
AM.throw_at(target,missile_range, missile_speed, chassis)
-
+
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare
name = "\improper BNI Flare Launcher"
icon_state = "mecha_flaregun"
@@ -231,7 +231,7 @@
missile_speed = 1
missile_range = 15
required_type = /obj/mecha //Why restrict it to just mining or combat mechs?
-
+
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc)
var/obj/item/device/flashlight/flare/fired = AM
fired.ignite()
@@ -241,7 +241,7 @@
name = "\improper SRM-8 missile rack"
icon_state = "mecha_missilerack"
projectile = /obj/item/missile
- fire_sound = 'sound/effects/bang.ogg'
+ fire_sound = 'sound/weapons/rpg.ogg'
projectiles = 8
projectile_energy_cost = 1000
equip_cooldown = 60
diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm
index da2599aeb7..ee99318c15 100644
--- a/code/modules/mob/living/simple_animal/hostile/russian.dm
+++ b/code/modules/mob/living/simple_animal/hostile/russian.dm
@@ -42,7 +42,7 @@
ranged = 1
projectiletype = /obj/item/projectile/bullet
projectilesound = 'sound/weapons/Gunshot.ogg'
- casingtype = /obj/item/ammo_casing/a357
+ casingtype = /obj/item/ammo_casing/spent
/mob/living/simple_animal/hostile/russian/death()
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 609b77ae56..694e95b434 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -107,7 +107,7 @@
rapid = 1
icon_state = "syndicateranged"
icon_living = "syndicateranged"
- casingtype = /obj/item/ammo_casing/a10mm
+ casingtype = /obj/item/ammo_casing/spent
projectilesound = 'sound/weapons/Gunshot_light.ogg'
projectiletype = /obj/item/projectile/bullet/pistol/medium
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 3f5598f647..59428ceb94 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -12,7 +12,7 @@
var/caliber = "" //Which kind of guns it can be loaded into
var/projectile_type //The bullet type to create when New() is called
var/obj/item/projectile/BB = null //The loaded bullet - make it so that the projectiles are created only when needed?
- var/spent_icon = null
+// var/spent_icon = null
/obj/item/ammo_casing/New()
..()
@@ -46,8 +46,10 @@
BB.name = "[initial(BB.name)] (\"[label_text]\")"
/obj/item/ammo_casing/update_icon()
- if(spent_icon && !BB)
- icon_state = spent_icon
+/* if(spent_icon && !BB)
+ icon_state = spent_icon*/
+ if(!BB) // This is really just a much better way of doing this.
+ icon_state = "[initial(icon_state)]-spent"
/obj/item/ammo_casing/examine(mob/user)
..()
@@ -113,6 +115,24 @@
C.loc = src
stored_ammo.Insert(1, C) //add to the head of the list
update_icon()
+ if(istype(W, /obj/item/ammo_magazine/clip))
+ var/obj/item/ammo_magazine/clip/L = W
+ if(L.caliber != caliber)
+ user << "The ammo in [L] does not fit into [src]."
+ return
+ if(!L.stored_ammo.len)
+ user << "There's no more ammo [L]!"
+ return
+ if(stored_ammo.len >= max_ammo)
+ user << "[src] is full!"
+ return
+ var/obj/item/ammo_casing/AC = L.stored_ammo[1] //select the next casing.
+ L.stored_ammo -= AC //Remove this casing from loaded list of the clip.
+ AC.loc = src
+ stored_ammo.Insert(1, AC) //add it to the head of our magazine's list
+ L.update_icon()
+ playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
+ update_icon()
/obj/item/ammo_magazine/attack_self(mob/user)
if(!stored_ammo.len)
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index a2b1dd7272..0a148e2ca2 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -1,17 +1,20 @@
+///////// .357 /////////
+
/obj/item/ammo_magazine/a357
- //name = "ammo box (.357)"
- //desc = "A box of .357 ammo"
- //icon_state = "357"
- name = "speed loader (.357)"
- icon_state = "T38"
+ name = "speedloader (.357)"
+ desc = "A speedloader for .357 revolvers."
+ icon_state = "38"
caliber = "357"
ammo_type = /obj/item/ammo_casing/a357
matter = list(DEFAULT_WALL_MATERIAL = 1260)
- max_ammo = 7
+ max_ammo = 6
multiple_sprites = 1
+///////// .38 /////////
+
/obj/item/ammo_magazine/c38
- name = "speed loader (.38)"
+ name = "speedloader (.38)"
+ desc = "A speedloader for .38 revolvers."
icon_state = "38"
caliber = "38"
matter = list(DEFAULT_WALL_MATERIAL = 360)
@@ -20,11 +23,13 @@
multiple_sprites = 1
/obj/item/ammo_magazine/c38/rubber
- name = "speed loader (.38 rubber)"
+ name = "speedloader (.38 rubber)"
ammo_type = /obj/item/ammo_casing/c38r
+///////// .45 /////////
+
/obj/item/ammo_magazine/c45m
- name = "magazine (.45)"
+ name = "pistol magazine (.45)"
icon_state = "45"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/c45
@@ -46,17 +51,79 @@
/obj/item/ammo_magazine/c45m/flash
name = "magazine (.45 flash)"
- ammo_type = "/obj/item/ammo_casing/c45f"
+ ammo_type = /obj/item/ammo_casing/c45f
+
+/obj/item/ammo_magazine/c45uzi
+ name = "stick magazine (.45)"
+ icon_state = "uzi45"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
+ caliber = ".45"
+ max_ammo = 16
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/c45uzi/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/tommymag
+ name = "tommygun magazine (.45)"
+ icon_state = "tommy-mag"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 1500)
+ caliber = ".45"
+ max_ammo = 20
+
+/obj/item/ammo_magazine/tommymag/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/tommydrum
+ name = "tommygun drum magazine (.45)"
+ icon_state = "tommy-drum"
+ w_class = 3 // Bulky ammo doesn't fit in your pockets!
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 3750)
+ caliber = ".45"
+ max_ammo = 50
+
+/obj/item/ammo_magazine/tommydrum/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c45
+ name = "ammo clip (.45)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading .45 rounds into magazines."
+ caliber = ".45"
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs very roughly based around one .45 casing = 75 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c45/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/c45r
+
+/obj/item/ammo_magazine/clip/c45/practice
+ name = "ammo clip (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/c45p
+
+/obj/item/ammo_magazine/clip/c45/flash
+ name = "ammo clip (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/c45f
+
+///////// 9mm /////////
/obj/item/ammo_magazine/mc9mm
name = "magazine (9mm)"
icon_state = "9x19p"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
- matter = list(DEFAULT_WALL_MATERIAL = 600)
+ matter = list(DEFAULT_WALL_MATERIAL = 480)
caliber = "9mm"
ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 10
+ max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/mc9mm/empty
@@ -65,17 +132,13 @@
/obj/item/ammo_magazine/mc9mm/flash
ammo_type = /obj/item/ammo_casing/c9mmf
-/obj/item/ammo_magazine/c9mm
- name = "ammunition Box (9mm)"
- icon_state = "9mm"
- origin_tech = list(TECH_COMBAT = 2)
- matter = list(DEFAULT_WALL_MATERIAL = 1800)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 30
+/obj/item/ammo_magazine/mc9mm/rubber
+ name = "magazine (9mm rubber)"
+ ammo_type = /obj/item/ammo_casing/c9mmr
-/obj/item/ammo_magazine/c9mm/empty
- initial_ammo = 0
+/obj/item/ammo_magazine/mc9mm/practice
+ name = "magazine (9mm practice)"
+ ammo_type = /obj/item/ammo_casing/c9mmp
/obj/item/ammo_magazine/mc9mmt
name = "top mounted magazine (9mm)"
@@ -94,22 +157,85 @@
name = "top mounted magazine (9mm rubber)"
ammo_type = /obj/item/ammo_casing/c9mmr
+/obj/item/ammo_magazine/mc9mmt/flash
+ name = "top mounted magazine (9mm flash)"
+ ammo_type = /obj/item/ammo_casing/c9mmf
+
/obj/item/ammo_magazine/mc9mmt/practice
name = "top mounted magazine (9mm practice)"
ammo_type = /obj/item/ammo_casing/c9mmp
-/obj/item/ammo_magazine/c45
- name = "ammunition Box (.45)"
+/obj/item/ammo_magazine/p90
+ name = "high capacity top mounted magazine (9mm armor-piercing)"
+ icon_state = "p90"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c9mm/ap
+ matter = list(DEFAULT_WALL_MATERIAL = 3000)
+ caliber = "9mm"
+ max_ammo = 50
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/p90/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c9mm
+ name = "ammo clip (9mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 9mm rounds into magazines."
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/c9mm
+ matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 9mm casing = 60 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c9mm/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/c9mmr
+
+/obj/item/ammo_magazine/clip/c9mm/practice
+ name = "ammo clip (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/c9mmp
+
+/obj/item/ammo_magazine/clip/c9mm/flash
+ name = "ammo clip (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/c9mmf
+
+/obj/item/ammo_magazine/c9mm // Made by RnD for Prototype SMG and should probably be removed because why does it require DIAMONDS to make bullets?
+ name = "ammunition Box (9mm)"
icon_state = "9mm"
origin_tech = list(TECH_COMBAT = 2)
- caliber = ".45"
- matter = list(DEFAULT_WALL_MATERIAL = 2250)
- ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/c9mm
max_ammo = 30
/obj/item/ammo_magazine/c9mm/empty
initial_ammo = 0
+///////// 5mm /////////
+/*
+/obj/item/ammo_magazine/c5mm
+ name = "magazine (5mm)"
+ icon_state = "fiveseven"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c5mm
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
+ caliber = "5mm"
+ max_ammo = 20
+ //multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c5mm
+ name = "ammo clip (5mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 5mm rounds into magazines."
+ caliber = "5mm"
+ ammo_type = /obj/item/ammo_casing/c5mm
+ matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 5mm casing = 60 metal
+ max_ammo = 9
+ multiple_sprites = 1
+*/
+///////// 10mm /////////
+
/obj/item/ammo_magazine/a10mm
name = "magazine (10mm)"
icon_state = "12mm"
@@ -124,6 +250,18 @@
/obj/item/ammo_magazine/a10mm/empty
initial_ammo = 0
+/obj/item/ammo_magazine/clip/a10mm
+ name = "ammo clip (10mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 5mm rounds into magazines."
+ caliber = "10mm"
+ ammo_type = /obj/item/ammo_casing/a10mm
+ matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+///////// 5.56mm /////////
+
/obj/item/ammo_magazine/a556
name = "magazine (5.56mm)"
icon_state = "5.56"
@@ -146,8 +284,49 @@
name = "magazine (5.56mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a556/ap
+/obj/item/ammo_magazine/a556m
+ name = "20rnd magazine (5.56mm)"
+ icon_state = "5.56mid"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ caliber = "a556"
+ matter = list(DEFAULT_WALL_MATERIAL = 3600)
+ ammo_type = /obj/item/ammo_casing/a556
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/a556m/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/a556m/ap
+ name = "20rnd magazine (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/a556m/practice
+ name = "20rnd magazine (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556p
+
+/obj/item/ammo_magazine/clip/a556
+ name = "ammo clip (5.56mm)"
+ icon_state = "clip_rifle"
+ caliber = "a556"
+ ammo_type = /obj/item/ammo_casing/a556
+ matter = list(DEFAULT_WALL_MATERIAL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
+ max_ammo = 5
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/a556/ap
+ name = "rifle clip (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/clip/a556/practice
+ name = "rifle clip (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556
+
+///////// .50 AE /////////
+
/obj/item/ammo_magazine/a50
- name = "magazine (.50)"
+ name = "magazine (.50 AE)"
icon_state = "50ae"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
@@ -160,17 +339,17 @@
/obj/item/ammo_magazine/a50/empty
initial_ammo = 0
-/obj/item/ammo_magazine/a75
- name = "ammo magazine (20mm)"
- icon_state = "75"
- mag_type = MAGAZINE
- caliber = "75"
- ammo_type = /obj/item/ammo_casing/a75
+/obj/item/ammo_magazine/clip/a50
+ name = "ammo clip (.50 AE)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading .50 Action Express rounds into magazines."
+ caliber = ".50"
+ ammo_type = /obj/item/ammo_casing/a50
+ matter = list(DEFAULT_WALL_MATERIAL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
+ max_ammo = 9
multiple_sprites = 1
- max_ammo = 4
-/obj/item/ammo_magazine/a75/empty
- initial_ammo = 0
+///////// 7.62mm /////////
/obj/item/ammo_magazine/a762
name = "magazine box (7.62mm)"
@@ -178,8 +357,9 @@
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "a762"
- matter = list(DEFAULT_WALL_MATERIAL = 4500)
+ matter = list(DEFAULT_WALL_MATERIAL = 10000)
ammo_type = /obj/item/ammo_casing/a762
+ w_class = 3 // This should NOT fit in your pocket!!
max_ammo = 50
multiple_sprites = 1
@@ -195,7 +375,7 @@
icon_state = "c762"
mag_type = MAGAZINE
caliber = "a762"
- matter = list(DEFAULT_WALL_MATERIAL = 1800)
+ matter = list(DEFAULT_WALL_MATERIAL = 4000)
ammo_type = /obj/item/ammo_casing/a762
max_ammo = 20
multiple_sprites = 1
@@ -204,19 +384,48 @@
name = "magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
-/obj/item/ammo_magazine/caps
- name = "speed loader (caps)"
- icon_state = "T38"
- caliber = "caps"
- color = "#FF0000"
- ammo_type = /obj/item/ammo_casing/cap
- matter = list(DEFAULT_WALL_MATERIAL = 600)
- max_ammo = 7
+/obj/item/ammo_magazine/c762/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/SVD
+ name = "\improper SVD magazine (7.62mm)"
+ icon_state = "SVD"
+ mag_type = MAGAZINE
+ caliber = "a762"
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
+ ammo_type = /obj/item/ammo_casing/a762
+ max_ammo = 10
multiple_sprites = 1
+/obj/item/ammo_magazine/SVD/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/SVD/ap
+ name = "\improper SVD magazine (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/clip/a762
+ name = "ammo clip (7.62mm)"
+ icon_state = "clip_rifle"
+ caliber = "a762"
+ ammo_type = /obj/item/ammo_casing/a762
+ matter = list(DEFAULT_WALL_MATERIAL = 1000) // metal costs are very roughly based around one 7.62 casing = 200 metal
+ max_ammo = 5
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/a762/ap
+ name = "rifle clip (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/clip/a762/practice
+ name = "rifle clip (7.62mm practice)"
+ ammo_type = /obj/item/ammo_casing/a762p
+
+///////// 12g /////////
+
/obj/item/ammo_magazine/g12
name = "magazine (12 gauge)"
- icon_state = "g12"
+ icon_state = "12g"
mag_type = MAGAZINE
caliber = "shotgun"
matter = list(DEFAULT_WALL_MATERIAL = 2200)
@@ -237,4 +446,30 @@
ammo_type = /obj/item/ammo_casing/shotgun/flash
/obj/item/ammo_magazine/g12/empty
- initial_ammo = 0
\ No newline at end of file
+ initial_ammo = 0
+
+///////// .75 Gyrojet /////////
+
+/obj/item/ammo_magazine/a75
+ name = "ammo magazine (.75 Gyrojet)"
+ icon_state = "75"
+ mag_type = MAGAZINE
+ caliber = "75"
+ ammo_type = /obj/item/ammo_casing/a75
+ multiple_sprites = 1
+ max_ammo = 4
+
+/obj/item/ammo_magazine/a75/empty
+ initial_ammo = 0
+
+///////// Misc. /////////
+
+/obj/item/ammo_magazine/caps
+ name = "speedloader (caps)"
+ icon_state = "T38"
+ caliber = "caps"
+ color = "#FF0000"
+ ammo_type = /obj/item/ammo_casing/cap
+ matter = list(DEFAULT_WALL_MATERIAL = 600)
+ max_ammo = 7
+ multiple_sprites = 1
\ No newline at end of file
diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm
index 6050fb2c65..d10280854f 100644
--- a/code/modules/projectiles/ammunition/bullets.dm
+++ b/code/modules/projectiles/ammunition/bullets.dm
@@ -9,7 +9,7 @@
projectile_type = /obj/item/projectile/bullet/pistol/strong
/obj/item/ammo_casing/a75
- desc = "A 20mm bullet casing."
+ desc = "A .75 gyrojet rocket sheathe."
caliber = "75"
projectile_type = /obj/item/projectile/bullet/gyro
@@ -21,6 +21,7 @@
/obj/item/ammo_casing/c38r
desc = "A .38 rubber bullet casing."
caliber = "38"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/rubber
/obj/item/ammo_casing/c9mm
@@ -28,21 +29,34 @@
caliber = "9mm"
projectile_type = /obj/item/projectile/bullet/pistol
+/obj/item/ammo_casing/c9mm/ap
+ desc = "A 9mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/pistol/ap
+
/obj/item/ammo_casing/c9mmf
desc = "A 9mm flash shell casing."
caliber = "9mm"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/energy/flash
/obj/item/ammo_casing/c9mmr
desc = "A 9mm rubber bullet casing."
caliber = "9mm"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/rubber
/obj/item/ammo_casing/c9mmp
desc = "A 9mm practice bullet casing."
caliber = "9mm"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/practice
+/*
+/obj/item/ammo_casing/c5mm
+ desc = "A 5mm bullet casing."
+ caliber = "5mm"
+ projectile_type = /obj/item/projectile/bullet/pistol/ap
+*/
/obj/item/ammo_casing/c45
desc = "A .45 bullet casing."
@@ -52,16 +66,19 @@
/obj/item/ammo_casing/c45p
desc = "A .45 practice bullet casing."
caliber = ".45"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/practice
/obj/item/ammo_casing/c45r
desc = "A .45 rubber bullet casing."
caliber = ".45"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/rubber
/obj/item/ammo_casing/c45f
desc = "A .45 flash shell casing."
caliber = ".45"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/energy/flash
/obj/item/ammo_casing/a10mm
@@ -112,7 +129,6 @@
name = "stun shell"
desc = "A 12 gauge taser cartridge."
icon_state = "stunshell"
- spent_icon = "stunshell-spent"
projectile_type = /obj/item/projectile/energy/electrode/stunshot
matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
@@ -131,18 +147,27 @@
/obj/item/ammo_casing/a762
desc = "A 7.62mm bullet casing."
caliber = "a762"
+ icon_state = "rifle-casing"
projectile_type = /obj/item/projectile/bullet/rifle/a762
/obj/item/ammo_casing/a762/ap
desc = "A 7.62mm armor-piercing bullet casing."
- caliber = "a762"
projectile_type = /obj/item/projectile/bullet/rifle/a762/ap
+/obj/item/ammo_casing/a762p
+ desc = "A 7.62mm practice bullet casing."
+ caliber = "a762"
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/item/projectile/bullet/rifle/practice
+
+/obj/item/ammo_casing/a762/blank
+ desc = "A blank 7.62mm bullet casing."
+ projectile_type = /obj/item/projectile/bullet/blank
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
+
/obj/item/ammo_casing/a145
- name = "shell casing"
desc = "A 14.5mm shell."
icon_state = "lcasing"
- spent_icon = "lcasing-spent"
caliber = "14.5mm"
projectile_type = /obj/item/projectile/bullet/rifle/a145
matter = list(DEFAULT_WALL_MATERIAL = 1250)
@@ -150,17 +175,18 @@
/obj/item/ammo_casing/a556
desc = "A 5.56mm bullet casing."
caliber = "a556"
+ icon_state = "rifle-casing"
projectile_type = /obj/item/projectile/bullet/rifle/a556
/obj/item/ammo_casing/a556/ap
desc = "A 5.56mm armor-piercing bullet casing."
- caliber = "a556"
projectile_type = /obj/item/projectile/bullet/rifle/a556/ap
/obj/item/ammo_casing/a556p
desc = "A 5.56mm practice bullet casing."
caliber = "a556"
- projectile_type = /obj/item/projectile/bullet/rifle/a556/practice
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/item/projectile/bullet/rifle/practice
/obj/item/ammo_casing/rocket
name = "rocket shell"
@@ -173,5 +199,11 @@
name = "cap"
desc = "A cap for children toys."
caliber = "caps"
+ icon_state = "r-casing"
color = "#FF0000"
projectile_type = /obj/item/projectile/bullet/pistol/cap
+
+/obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else.
+ icon_state = "s-casing-spent"
+ BB = null
+ projectile_type = null
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 8cd8f72a36..9d0ba4e736 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -90,7 +90,7 @@ obj/item/weapon/gun/energy/retro
standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
icon_state = "xray"
item_state = "xray"
- fire_sound = 'sound/weapons/laser3.ogg'
+ fire_sound = 'sound/weapons/eluger.ogg'
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
projectile_type = /obj/item/projectile/beam/xray
charge_cost = 100
@@ -101,8 +101,8 @@ obj/item/weapon/gun/energy/retro
desc = "The HI DMR 9E is an older design of Hesphaistos Industries. A designated marksman rifle capable of shooting powerful \
ionized beams, this is a weapon to kill from a distance."
icon_state = "sniper"
- item_state = "laser"
- fire_sound = 'sound/weapons/marauder.ogg'
+ item_state = "laser" // placeholder
+ fire_sound = 'sound/weapons/gauss_shoot.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
projectile_type = /obj/item/projectile/beam/sniper
slot_flags = SLOT_BACK
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index ab134d3406..3074638bce 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -7,13 +7,14 @@
force = 10
fire_sound='sound/weapons/Laser.ogg'
projectile_type = /obj/item/projectile/beam
+ charge_cost=100
+ max_shots = 20 // This is cut in half by "DESTROY" mode.
sel_mode = 2
- max_shots = 10
-
+
firemodes = list(
- list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=null),
- list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=null),
- list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=null, charge_cost=100),
+ list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=100),
+ list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=100),
+ list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost=200),
)
/obj/item/weapon/gun/energy/pulse_rifle/mounted
@@ -25,7 +26,7 @@
desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists."
cell_type = /obj/item/weapon/cell/super
fire_delay = 25
- fire_sound='sound/weapons/pulse.ogg'
+ fire_sound='sound/weapons/gauss_shoot.ogg'
projectile_type=/obj/item/projectile/beam/pulse
charge_cost=400
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index fab9a08b7a..ef3a74666e 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -19,7 +19,7 @@
/obj/item/weapon/gun/energy/ionrifle/update_icon()
..()
if(power_supply.charge < charge_cost)
- item_state = "ionrifle-empty"
+ item_state = "ionrifle0"
else
item_state = initial(item_state)
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index 547dc702cf..107330c13d 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -60,6 +60,7 @@
grenades.len--
user.put_in_hands(G)
user.visible_message("[user] removes \a [G] from [src].", "You remove \a [G] from [src].")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
user << "[src] is empty."
@@ -117,6 +118,7 @@
if(chambered)
user.put_in_hands(chambered)
user.visible_message("[user] removes \a [chambered] from [src].", "You remove \a [chambered] from [src].")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
chambered = null
else
user << "[src] is empty."
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm
index b20e9521e6..5463fe26f0 100644
--- a/code/modules/projectiles/guns/launcher/pneumatic.dm
+++ b/code/modules/projectiles/guns/launcher/pneumatic.dm
@@ -54,6 +54,7 @@
item_storage.remove_from_storage(removing, src.loc)
user.put_in_hands(removing)
user << "You remove [removing] from the hopper."
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
user << "There is nothing to remove in \the [src]."
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index 12338ee5c3..300121aef7 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -10,8 +10,8 @@
flags = CONDUCT
slot_flags = 0
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 5)
- fire_sound = 'sound/effects/bang.ogg'
-
+ fire_sound = 'sound/weapons/rpg.ogg'
+
release_force = 15
throw_distance = 30
var/max_rockets = 1
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index 07cb48d784..3cbbd40f34 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -31,6 +31,7 @@
/obj/item/weapon/syringe_cartridge/attack_self(mob/user)
if(syringe)
user << "You remove [syringe] from [src]."
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
user.put_in_hands(syringe)
syringe = null
sharp = initial(sharp)
@@ -114,6 +115,7 @@
darts -= C
user.put_in_hands(C)
user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
..()
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index d032cb3848..bb5168169e 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -24,6 +24,7 @@
//For MAGAZINE guns
var/magazine_type = null //the type of magazine that the gun comes preloaded with
var/obj/item/ammo_magazine/ammo_magazine = null //stored magazine
+ var/allowed_magazines //determines list of which magazines will fit in the gun
var/auto_eject = 0 //if the magazine should automatically eject itself when empty.
var/auto_eject_sound = null
//TODO generalize ammo icon states for guns
@@ -96,9 +97,9 @@
/obj/item/weapon/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user)
if(istype(A, /obj/item/ammo_magazine))
var/obj/item/ammo_magazine/AM = A
- if(!(load_method & AM.mag_type) || caliber != AM.caliber)
- return //incompatible
-
+ if(!(load_method & AM.mag_type) || caliber != AM.caliber || allowed_magazines && !is_type_in_list(A, allowed_magazines))
+ user << "[AM] won't load into [src]!"
+ return
switch(AM.mag_type)
if(MAGAZINE)
if(ammo_magazine)
@@ -167,6 +168,7 @@
loaded.len--
user.put_in_hands(C)
user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
user << "[src] is empty."
update_icon()
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 975f48ae7b..390e8cf33e 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -17,21 +17,10 @@
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1,-2,-2), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
-/obj/item/weapon/gun/projectile/automatic/mini_uzi
- name = "\improper Uzi"
- desc = "The UZI is a lightweight, fast firing gun. For when you want someone dead. Uses .45 rounds."
- icon_state = "mini-uzi"
- w_class = 3
- load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
- max_shells = 15
- caliber = ".45"
- origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
- ammo_type = /obj/item/ammo_casing/c45
-
/obj/item/weapon/gun/projectile/automatic/c20r
name = "submachine gun"
desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Uses 10mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
@@ -45,6 +34,7 @@
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a10mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a10mm)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -71,23 +61,27 @@
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c762
+ allowed_magazines = list(/obj/item/ammo_magazine/c762, /obj/item/ammo_magazine/SVD)
one_handed_penalty = 4
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6)),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2,-2,-3), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
..()
- icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/SVD))
+ icon_state = "arifle-small"
+ else
+ icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
if(!ignore_inhands) update_held_icon()
/obj/item/weapon/gun/projectile/automatic/wt550
name = "machine pistol"
- desc = "The W-T 550 Saber is a cheap self-defense weapon, mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
+ desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
icon_state = "wt550"
item_state = "wt550"
w_class = 3
@@ -98,6 +92,7 @@
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/mc9mmt/rubber
+ allowed_magazines = list(/obj/item/ammo_magazine/mc9mmt)
/obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
..()
@@ -108,19 +103,20 @@
return
/obj/item/weapon/gun/projectile/automatic/z8
- name = "bullpup assault rifle"
- desc = "The Z8 Bulldog is an older model bullpup carbine, made by the now defunct Zendai Foundries. Uses armor piercing 5.56mm rounds. Makes you feel like a space marine when you hold it."
- icon_state = "carbine"
+ name = "designated marksman rifle"
+ desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 5.56mm rounds and has an under barrel grenade launcher."
+ icon_state = "carbine" // This isn't a carbine. :T
item_state = "z8carbine"
w_class = 4
force = 10
caliber = "a556"
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
- ammo_type = "/obj/item/ammo_casing/a556"
+ ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
fire_sound = 'sound/weapons/Gunshot.ogg'
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a556
+ allowed_magazines = list(/obj/item/ammo_magazine/a556)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -180,7 +176,7 @@
name = "light machine gun"
desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever"
icon_state = "l6closed100"
- item_state = "l6closedmag"
+ item_state = "l6closed"
w_class = 4
force = 10
slot_flags = 0
@@ -188,17 +184,18 @@
caliber = "a762"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
- ammo_type = "/obj/item/ammo_casing/a762"
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ ammo_type = "/obj/item/ammo_casing/a762" // Is this really needed anymore?
+ fire_sound = 'sound/weapons/machinegun.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a762
+ allowed_magazines = list(/obj/item/ammo_magazine/a762, /obj/item/ammo_magazine/c762)
one_handed_penalty = 6
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
- list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2))
)
var/cover_open = 0
@@ -213,6 +210,7 @@
cover_open = !cover_open
user << "You [cover_open ? "open" : "close"] [src]'s cover."
update_icon()
+ update_held_icon()
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
if(cover_open)
@@ -227,7 +225,13 @@
return ..() //once open, behave like normal
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
- icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/c762))
+ icon_state = "l6[cover_open ? "open" : "closed"]mag"
+ item_state = icon_state
+ else
+ icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
+ item_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
+ update_held_icon()
/obj/item/weapon/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user)
if(!cover_open)
@@ -242,23 +246,25 @@
..()
/obj/item/weapon/gun/projectile/automatic/as24
- name = "\improper AS-24 automatic shotgun"
- desc = "A durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked."
+ name = "automatic shotgun"
+ desc = "The AS-24 is a durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked."
icon_state = "ashot"
item_state = null
w_class = 4
force = 10
caliber = "shotgun"
+ fire_sound = 'sound/weapons/shotgun.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/g12
+ allowed_magazines = list(/obj/item/ammo_magazine/g12)
one_handed_penalty = 4
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
- list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6)),
+ list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6))
// list(mode_name="6-round bursts", burst=6, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
)
@@ -270,5 +276,99 @@
icon_state = "ashot"
return
+/obj/item/weapon/gun/projectile/automatic/mini_uzi
+ name = "\improper Uzi"
+ desc = "A lightweight, compact, fast firing gun, for when you want someone really dead. Uses .45 rounds."
+ icon_state = "mini-uzi"
+ w_class = 3
+ load_method = MAGAZINE
+ caliber = ".45"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
+ magazine_type = /obj/item/ammo_magazine/c45uzi
+ allowed_magazines = list(/obj/item/ammo_magazine/c45uzi)
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0),
+ list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0))
+ )
+/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "mini-uzi"
+ else
+ icon_state = "mini-uzi-empty"
+
+/obj/item/weapon/gun/projectile/automatic/p90
+ name = "personal defense weapon"
+ desc = "The H90K is a compact, high capacity submachine gun produced by Hephaistos Industries. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds."
+ icon_state = "p90smg"
+ item_state = "p90"
+ w_class = 3
+ caliber = "5mm"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
+ slot_flags = SLOT_BELT // ToDo: Belt sprite.
+ fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/p90
+ allowed_magazines = list(/obj/item/ammo_magazine/p90, /obj/item/ammo_magazine/mc9mmt) // ToDo: New sprite for the different mag.
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/p90/update_icon()
+ icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]"
+
+/obj/item/weapon/gun/projectile/automatic/tommygun
+ name = "\improper Tommygun"
+ desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds."
+ icon_state = "tommygun"
+ w_class = 3
+ caliber = ".45"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
+ slot_flags = SLOT_BELT // ToDo: Belt sprite.
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/tommymag
+ allowed_magazines = list(/obj/item/ammo_magazine/tommymag, /obj/item/ammo_magazine/tommydrum)
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
+ ..()
+ icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty"
+// update_held_icon()
+
+/obj/item/weapon/gun/projectile/automatic/carbine
+ name = "assault carbine"
+ desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.56mm rounds."
+ icon_state = "bullpupm"
+ item_state = "bullpup"
+ w_class = 4
+ force = 10
+ caliber = "a556"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
+ slot_flags = SLOT_BACK
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/a556m
+ allowed_magazines = list(/obj/item/ammo_magazine/a556, /obj/item/ammo_magazine/a556m)
+
+ one_handed_penalty = 4
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/carbine/update_icon(var/ignore_inhands)
+ ..()
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a556m))
+ icon_state = "bullpupm"
+ else
+ icon_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
+ item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
+ if(!ignore_inhands) update_held_icon()
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
new file mode 100644
index 0000000000..28da9997d2
--- /dev/null
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -0,0 +1,52 @@
+// For all intents and purposes, these work exactly the same as pump shotguns. It's unnecessary to make their own procs for them.
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle
+ name = "bolt action rifle"
+ desc = "A reproduction of an almost ancient weapon design from the early 20th century. It's still popular among hunters and collectors due to its reliability. Uses 7.62mm rounds."
+ item_state = "boltaction"
+ icon_state = "boltaction"
+ fire_sound = 'sound/weapons/rifleshot.ogg'
+ max_shells = 5
+ caliber = "a762"
+ origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
+ ammo_type = /obj/item/ammo_casing/a762
+ load_method = SINGLE_CASING|SPEEDLOADER
+ action_sound = 'sound/weapons/riflebolt.ogg'
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice // For target practice
+ desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds."
+ ammo_type = /obj/item/ammo_casing/a762p
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial
+ name = "ceremonial bolt-action rifle"
+ desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 7.62mm rounds."
+ ammo_type = /obj/item/ammo_casing/a762/blank
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin
+ name = "\improper Mosin Nagant"
+ desc = "Despite its age, the Mosin Nagant continues to be a favorite weapon among colonists, conscripts, and militias across the cosmos. Most today are built by Chen-Iltchenko Firearms, but it's hard to say who built this particular gun, considering the design has been ripped off by just about every arms manufacturer in the galaxy. Uses 7.62mm rounds."
+ icon_state = "mosin"
+ item_state = "mosin"
+
+// Stole hacky terrible code from doublebarrel shotgun. -Spades
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin/attackby(var/obj/item/A as obj, mob/user as mob)
+ if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3)
+ user << "You begin to shorten the barrel and stock of \the [src]."
+ if(loaded.len)
+ afterattack(user, user) //will this work? //it will. we call it twice, for twice the FUN
+ playsound(user, fire_sound, 50, 1)
+ user.visible_message("[src] goes off!", "The rifle goes off in your face!")
+ return
+ if(do_after(user, 30))
+ icon_state = "obrez"
+ w_class = 3
+ recoil = 2 // Owch
+ accuracy = -1 // You know damn well why.
+ item_state = "gun"
+ slot_flags &= ~SLOT_BACK //you can't sling it on your back
+ slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
+ name = "\improper Obrez"
+ desc = "The firepower of a Mosin, now the size of a pistol, with an effective combat range of about three feet. Uses 7.62mm rounds."
+ user << "You shorten the barrel and stock of \the [src]!"
+ else
+ ..()
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index 747a8294b8..79ca041ed5 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -54,6 +54,7 @@
silenced = 1
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/chemdart
+ allowed_magazines = list(/obj/item/ammo_magazine/chemdart)
auto_eject = 0
var/list/beakers = list() //All containers inside the gun.
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index c3a48cd374..9caf66af4b 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -3,10 +3,11 @@
name = ".45 pistol"
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
magazine_type = /obj/item/ammo_magazine/c45m
+ allowed_magazines = list(/obj/item/ammo_magazine/c45m)
icon_state = "colt"
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/colt/detective
@@ -54,6 +55,7 @@
options["NT Mk. 58"] = "secguncomp"
options["NT Mk. 58 Custom"] = "secgundark"
options["Colt M1911"] = "colt"
+ options["FiveSeven"] = "fnseven"
options["USP"] = "usp"
options["H&K VP"] = "VP78"
options["P08 Luger"] = "p08"
@@ -72,7 +74,7 @@
magazine_type = /obj/item/ammo_magazine/c45m/rubber
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/sec/update_icon()
@@ -108,42 +110,62 @@
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c45m
+ allowed_magazines = list(/obj/item/ammo_magazine/c45m)
/obj/item/weapon/gun/projectile/deagle
name = "desert eagle"
- desc = "A robust handgun that uses .50 AE ammo"
+ desc = "A robust handgun that uses .50 AE rounds."
icon_state = "deagle"
item_state = "deagle"
force = 14.0
caliber = ".50"
load_method = MAGAZINE
+ fire_sound = 'sound/weapons/deagle.ogg'
magazine_type = /obj/item/ammo_magazine/a50
- auto_eject = 1
+ allowed_magazines = list(/obj/item/ammo_magazine/a50)
/obj/item/weapon/gun/projectile/deagle/gold
- desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
+ desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE rounds."
icon_state = "deagleg"
item_state = "deagleg"
/obj/item/weapon/gun/projectile/deagle/camo
- desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo."
+ desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE rounds."
icon_state = "deaglecamo"
item_state = "deagleg"
- auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
+/*
+/obj/item/weapon/gun/projectile/fiveseven
+ name = "\improper WT-AP57"
+ desc = "This tacticool pistol made by Ward-Takahashi trades stopping power for armor piercing and a high capacity. Uses 5mm rounds."
+ icon_state = "fnseven"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ caliber = "5mm"
+ load_method = MAGAZINE
+ fire_sound = 'sound/weapons/semiauto.ogg'
+ magazine_type = /obj/item/ammo_magazine/c5mm
+ allowed_magazines = list(/obj/item/ammo_magazine/c5mm)
+/obj/item/weapon/gun/projectile/fiveseven/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "fnseven"
+ else
+ icon_state = "fnseven-empty"
+*/
-/obj/item/weapon/gun/projectile/gyropistol
+/obj/item/weapon/gun/projectile/gyropistol // Does this even appear anywhere outside of admin abuse?
name = "gyrojet pistol"
- desc = "A bulky pistol designed to fire self propelled rounds"
+ desc = "Speak softly, and carry a big gun. Fires rare .75 caliber self-propelled exploding bolts--because fuck you and everything around you."
icon_state = "gyropistol"
max_shells = 8
caliber = "75"
- fire_sound = 'sound/effects/Explosion1.ogg'
+ fire_sound = 'sound/weapons/rpg.ogg'
origin_tech = list(TECH_COMBAT = 3)
ammo_type = "/obj/item/ammo_casing/a75"
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a75
+ allowed_magazines = list(/obj/item/ammo_magazine/a75)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -163,9 +185,10 @@
caliber = "9mm"
silenced = 0
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/mc9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
/obj/item/weapon/gun/projectile/pistol/flash
name = "holdout signal pistol"
@@ -246,3 +269,36 @@
var/obj/item/ammo_casing/ammo = ammo_type
caliber = initial(ammo.caliber)
..()
+
+/obj/item/weapon/gun/projectile/derringer
+ name = "derringer"
+ desc = "It's not size of your gun that matters, just the size of your load. Uses .357 rounds." //OHHH MYYY~
+ icon_state = "derringer"
+ item_state = "concealed"
+ w_class = 2
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3)
+ handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading
+ load_method = SINGLE_CASING
+ max_shells = 2
+ ammo_type = /obj/item/ammo_casing/a357
+
+/obj/item/weapon/gun/projectile/luger
+ name = "\improper P08 Luger"
+ desc = "Not some cheap Scheisse .45 caliber Martian knockoff! This Luger is an authentic reproduction by RauMauser. Accuracy, easy handling, and its signature appearance make it popular among historic gun collectors. Uses 9mm rounds."
+ icon_state = "p08"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ caliber = "9mm"
+ load_method = MAGAZINE
+ fire_sound = 'sound/weapons/semiauto.ogg'
+ magazine_type = /obj/item/ammo_magazine/mc9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
+
+/obj/item/weapon/gun/projectile/luger/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "[initial(icon_state)]"
+ else
+ icon_state = "[initial(icon_state)]-e"
+
+/obj/item/weapon/gun/projectile/luger/brown
+ icon_state = "p08b"
\ 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 d1e561a509..7de8e7b877 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -1,12 +1,12 @@
/obj/item/weapon/gun/projectile/revolver
name = "revolver"
- desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 ammo."
+ desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 rounds."
icon_state = "revolver"
item_state = "revolver"
caliber = "357"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
- max_shells = 7
+ max_shells = 6
ammo_type = /obj/item/ammo_casing/a357
var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round
@@ -35,6 +35,7 @@
/obj/item/weapon/gun/projectile/revolver/mateba
name = "mateba"
+ desc = "This unique looking handgun is named after an Italian company famous for the manufacture of these revolvers, and pasta kneading machines. Uses .357 rounds." // Yes I'm serious. -Spades
icon_state = "mateba"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -42,7 +43,6 @@
name = "revolver"
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
icon_state = "detective"
- max_shells = 6
caliber = "38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
@@ -68,10 +68,9 @@
// Blade Runner pistol.
/obj/item/weapon/gun/projectile/revolver/deckard
- name = "Deckard .44"
+ name = "Deckard .38"
desc = "A custom-built revolver, based off the semi-popular Detective Special model."
icon_state = "deckard-empty"
- max_shells = 6
caliber = "38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
@@ -100,3 +99,15 @@
max_shells = 7
ammo_type = /obj/item/ammo_casing/cap
+/obj/item/weapon/gun/projectile/revolver/judge
+ name = "\"The Judge\""
+ desc = "A revolving hand-shotgun by Cybersun Industries that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12 shotgun rounds."
+ icon_state = "judge"
+ caliber = "shotgun"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
+ max_shells = 5
+ fire_sound = 'sound/weapons/shotgun.ogg'
+ recoil = 2 // ow my fucking hand
+ accuracy = -1 // smooth bore + short barrel = shit accuracy
+ ammo_type = /obj/item/ammo_casing/shotgun
+ // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index d4da287a71..025aac20d9 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -13,7 +13,9 @@
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
handle_casings = HOLD_CASINGS
+ fire_sound = 'sound/weapons/shotgun.ogg'
var/recentpump = 0 // to prevent spammage
+ var/action_sound = 'sound/weapons/shotgunpump.ogg'
/obj/item/weapon/gun/projectile/shotgun/pump/consume_next_projectile()
if(chambered)
@@ -26,7 +28,7 @@
recentpump = world.time
/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M as mob)
- playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
+ playsound(M, action_sound, 60, 1)
if(chambered)//We have a shell in the chamber
chambered.loc = get_turf(src)//Eject casing
@@ -65,7 +67,7 @@
caliber = "shotgun"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
-
+
burst_delay = 0
firemodes = list(
list(mode_name="fire one barrel at a time", burst=1),
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index e03ff73988..d69a97f2f4 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -1,15 +1,17 @@
+////////////// PTR-7 Anti-Materiel Rifle //////////////
+
/obj/item/weapon/gun/projectile/heavysniper
name = "anti-materiel rifle"
desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells."
icon_state = "heavysniper"
- item_state = "l6closednomag" //placeholder
+ item_state = "l6closed-empty" // placeholder
w_class = 5 // So it can't fit in a backpack.
force = 10
slot_flags = SLOT_BACK
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
caliber = "14.5mm"
- recoil = 2 //extra kickback
- //fire_sound = 'sound/weapons/sniper.ogg'
+ recoil = 3 //extra kickback
+ fire_sound = 'sound/weapons/sniper.ogg' // extra boom
handle_casings = HOLD_CASINGS
load_method = SINGLE_CASING
max_shells = 1
@@ -65,3 +67,41 @@
toggle_scope(2.0)
+////////////// Dragunov Sniper Rifle //////////////
+
+/* // Commented out until it's not worthless. Also might be nice to have a new icon that looks more sci-fi Dragunov-ish.
+/obj/item/weapon/gun/projectile/SVD
+ name = "\improper Dragunov"
+ desc = "The SVD, also known as the Dragunov, was mass produced with an Optical Sniper Sight so simple that even Ivan can figure out how it works. Too bad for you that it's written in Russian. Uses 7.62mm rounds."
+ icon_state = "SVD"
+ item_state = "SVD"
+ w_class = 5 // So it can't fit in a backpack.
+ force = 10
+ slot_flags = SLOT_BACK // Needs a sprite.
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
+ recoil = 2 //extra kickback
+ caliber = "a762"
+ load_method = MAGAZINE
+ accuracy = -3 //shooting at the hip
+ scoped_accuracy = 0
+// requires_two_hands = 1
+ one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
+ fire_sound = 'sound/weapons/SVD_shot.ogg'
+ magazine_type = /obj/item/ammo_magazine/SVD
+ allowed_magazines = list(/obj/item/ammo_magazine/SVD, /obj/item/ammo_magazine/c762)
+
+/obj/item/weapon/gun/projectile/SVD/update_icon()
+ ..()
+// if(istype(ammo_magazine,/obj/item/ammo_magazine/c762)
+// icon_state = "SVD-bigmag" //No icon for this exists yet.
+ if(ammo_magazine)
+ icon_state = "SVD"
+ else
+ icon_state = "SVD-empty"
+
+/obj/item/weapon/gun/projectile/SVD/verb/scope()
+ set category = "Object"
+ set name = "Use Scope"
+ set popup_menu = 1
+
+ toggle_scope(2.0)*/
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index ca2ab63eef..fef93692ec 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -128,6 +128,10 @@
/obj/item/projectile/bullet/pistol
damage = 20
+/obj/item/projectile/bullet/pistol/ap
+ damage = 20
+ armor_penetration = 30
+
/obj/item/projectile/bullet/pistol/medium
damage = 25
@@ -227,8 +231,9 @@
/obj/item/projectile/bullet/pistol/practice
damage = 5
-/obj/item/projectile/bullet/rifle/a556/practice
+/obj/item/projectile/bullet/rifle/practice
damage = 5
+ penetrating = 0
/obj/item/projectile/bullet/shotgun/practice
name = "practice"
diff --git a/html/changelogs/JerTheAce_GunsGunsGuns.yml b/html/changelogs/JerTheAce_GunsGunsGuns.yml
new file mode 100644
index 0000000000..9e020384e6
--- /dev/null
+++ b/html/changelogs/JerTheAce_GunsGunsGuns.yml
@@ -0,0 +1,53 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: JerTheAce
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds a variety of new guns. Some of these guns and and their ammunition are purchasable through antag uplink, cargo, or can be spawned during Renegade or Heist modes."
+ - rscadd: "Adds ammunition clips for reloading magazines and some guns (such as bolt-actions)."
+ - rscadd: "All magazines and ammunitions can now be produced with the autolathe."
+ - maptweak: "New bullpup SMG is available in armory area on CentCom level."
+ - tweak: "Revolvers now use 6 shots. Finally."
+ - tweak: "5.56 now does less damage, 7.62 does more, because previously it was backwards which made no sense."
+ - tweak: "Most guns that didn't use magazines before for some reason (such as the Uzi) now use magazines."
+ - tweak: "All casings now update icons if they have been spent."
+ - tweak: "Corrects Pulse Rifle charge cost consistency."
+ - tweak: "Corrects and improves a number of icons for guns, including a couple of energy guns, and adds fallback icons so they do not turn invisible when held or strapped to your back."
+ - tweak: "Made the icons for some guns look differently depending on what magazine is loaded into them."
+ - tweak: "Made antag uplink menu for guns and ammo more informative."
+ - tweak: "Machinegun magazines no longer fit in pockets."
+ - spellcheck: "Made names and descriptions for all projectile guns and ammo consistent while removing grammar and spelling errors."
+ - bugfix: "Autolathe no longer exploitable for ammo by repeatedly recycling empty magazines."
+ - bugfix: "Guns now check a list of compatible magazines."
+ - bugfix: "Ranged mobs no longer drop usable .357 casings."
+ - soundadd: "Added a variety of new gun sound effects, and swapped out the old default gun sound."
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 51710554d1..ce61c817f5 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index b2b3ff87ee..7d495b376d 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
index 5a6c20b633..fe2bb9e62f 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index 1cb6952bb6..ba63e4189f 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 f9e2f6fc0f..453baecbc0 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm
index 5d3fc9a518..dba980372f 100644
--- a/maps/polaris-2.dmm
+++ b/maps/polaris-2.dmm
@@ -655,7 +655,7 @@
"mE" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mF" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mG" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"mH" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"mH" = (/obj/structure/table/rack,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/weapon/gun/projectile/automatic/p90,/obj/item/weapon/gun/projectile/automatic/p90,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mI" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mJ" = (/obj/structure/table/rack,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/plasmacutter,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mK" = (/obj/structure/table/rack,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/healthscanner,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
diff --git a/polaris.dme b/polaris.dme
index a83e390b23..24805a5450 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1655,6 +1655,7 @@
#include "code\modules\projectiles\guns\launcher\rocket.dm"
#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
#include "code\modules\projectiles\guns\projectile\automatic.dm"
+#include "code\modules\projectiles\guns\projectile\boltaction.dm"
#include "code\modules\projectiles\guns\projectile\dartgun.dm"
#include "code\modules\projectiles\guns\projectile\pistol.dm"
#include "code\modules\projectiles\guns\projectile\revolver.dm"
diff --git a/sound/weapons/Gunshot.ogg b/sound/weapons/Gunshot.ogg
index 2547b98af9..eee7d68648 100644
Binary files a/sound/weapons/Gunshot.ogg and b/sound/weapons/Gunshot.ogg differ
diff --git a/sound/weapons/Gunshot_old.ogg b/sound/weapons/Gunshot_old.ogg
new file mode 100644
index 0000000000..2547b98af9
Binary files /dev/null and b/sound/weapons/Gunshot_old.ogg differ
diff --git a/sound/weapons/deagle.ogg b/sound/weapons/deagle.ogg
new file mode 100644
index 0000000000..2235c89fd3
Binary files /dev/null and b/sound/weapons/deagle.ogg differ
diff --git a/sound/weapons/eLuger.ogg b/sound/weapons/eLuger.ogg
new file mode 100644
index 0000000000..e7e21511f3
Binary files /dev/null and b/sound/weapons/eLuger.ogg differ
diff --git a/sound/weapons/gauss_shoot.ogg b/sound/weapons/gauss_shoot.ogg
new file mode 100644
index 0000000000..c9a4036b94
Binary files /dev/null and b/sound/weapons/gauss_shoot.ogg differ
diff --git a/sound/weapons/machinegun.ogg b/sound/weapons/machinegun.ogg
new file mode 100644
index 0000000000..49c2b0c554
Binary files /dev/null and b/sound/weapons/machinegun.ogg differ
diff --git a/sound/weapons/riflebolt.ogg b/sound/weapons/riflebolt.ogg
new file mode 100644
index 0000000000..19adcef8ec
Binary files /dev/null and b/sound/weapons/riflebolt.ogg differ
diff --git a/sound/weapons/rifleshot.ogg b/sound/weapons/rifleshot.ogg
new file mode 100644
index 0000000000..4b26d5e7e6
Binary files /dev/null and b/sound/weapons/rifleshot.ogg differ
diff --git a/sound/weapons/rpg.ogg b/sound/weapons/rpg.ogg
new file mode 100644
index 0000000000..31d2499042
Binary files /dev/null and b/sound/weapons/rpg.ogg differ
diff --git a/sound/weapons/semiauto.ogg b/sound/weapons/semiauto.ogg
new file mode 100644
index 0000000000..c9d6322992
Binary files /dev/null and b/sound/weapons/semiauto.ogg differ
diff --git a/sound/weapons/shotgun.ogg b/sound/weapons/shotgun.ogg
new file mode 100644
index 0000000000..1a9f0c526e
Binary files /dev/null and b/sound/weapons/shotgun.ogg differ
diff --git a/sound/weapons/sniper.ogg b/sound/weapons/sniper.ogg
new file mode 100644
index 0000000000..c482770bdb
Binary files /dev/null and b/sound/weapons/sniper.ogg differ
diff --git a/sound/weapons/svd_shot.ogg b/sound/weapons/svd_shot.ogg
new file mode 100644
index 0000000000..28bee648f7
Binary files /dev/null and b/sound/weapons/svd_shot.ogg differ