diff --git a/citadel.dme b/citadel.dme
index 5a9d261dab1..f46817ae9d7 100644
--- a/citadel.dme
+++ b/citadel.dme
@@ -288,7 +288,9 @@
#include "code\__DEFINES\procs\saycode.dm"
#include "code\__DEFINES\procs\update_icon.dm"
#include "code\__DEFINES\projectiles\ammo_casing.dm"
+#include "code\__DEFINES\projectiles\ammo_magazine.dm"
#include "code\__DEFINES\projectiles\guns.dm"
+#include "code\__DEFINES\projectiles\system.dm"
#include "code\__DEFINES\radiation\flags.dm"
#include "code\__DEFINES\radiation\ignore.dm"
#include "code\__DEFINES\radiation\insulation.dm"
@@ -1037,8 +1039,15 @@
#include "code\game\click\reachability.dm"
#include "code\game\click\rig.dm"
#include "code\game\click\telekinesis.dm"
+#include "code\game\content\enigmas\unsorted\cursedform.dm"
+#include "code\game\content\enigmas\unsorted\deadringer.dm"
+#include "code\game\content\enigmas\unsorted\telecube.dm"
+#include "code\game\content\factions\corporations\corporation.dm"
+#include "code\game\content\factions\corporations\gorlex\items\guns\phoron_spitter.dm"
+#include "code\game\content\factions\corporations\gorlex\items\guns\wild_hunt.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-faction.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply.dm"
+#include "code\game\content\factions\corporations\nanotrasen\items\guns\pulse.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\animals.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\atmospherics.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\contraband.dm"
@@ -1050,11 +1059,6 @@
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\medical.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\miscellaneous.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\munitions.dm"
-#include "code\game\content\enigmas\unsorted\cursedform.dm"
-#include "code\game\content\enigmas\unsorted\deadringer.dm"
-#include "code\game\content\enigmas\unsorted\telecube.dm"
-#include "code\game\content\factions\corporations\corporation.dm"
-#include "code\game\content\factions\corporations\nanotrasen\items\guns\pulse.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\reagents.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\recreation.dm"
#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\robotics.dm"
@@ -4296,18 +4300,54 @@
#include "code\modules\preferences\preference_setup\vore\08_traits.dm"
#include "code\modules\preferences\preference_setup\vore\09_nif.dm"
#include "code\modules\preferences\preference_setup\vore\10_misc.dm"
+#include "code\modules\projectiles\firing_pin.dm"
#include "code\modules\projectiles\gun.dm"
#include "code\modules\projectiles\gun_item_renderer.dm"
#include "code\modules\projectiles\gun_mob_renderer.dm"
-#include "code\modules\projectiles\pins.dm"
#include "code\modules\projectiles\projectile.dm"
+#include "code\modules\projectiles\ammunition\ammo_caliber.dm"
#include "code\modules\projectiles\ammunition\ammo_casing.dm"
-#include "code\modules\projectiles\ammunition\rounds.dm"
+#include "code\modules\projectiles\ammunition\ammo_magazine.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a10g.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a10mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a12_7mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a12g.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a357.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a38.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a44.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a45.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a5_56mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a5_7mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a5mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a75.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a7_62mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a7_92mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a9_5mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\normal\a9mm.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\arrow.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\biomatter-wax.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\biomatter.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\blunderbuss.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\cap.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\dart.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\foam.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\microbattery.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\musket.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\pellet.dm"
+#include "code\modules\projectiles\ammunition\calibers\special\rocket.dm"
#include "code\modules\projectiles\guns\ballistic.dm"
#include "code\modules\projectiles\guns\energy.dm"
#include "code\modules\projectiles\guns\launcher.dm"
#include "code\modules\projectiles\guns\magic.dm"
#include "code\modules\projectiles\guns\vox.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\medigun.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\medigun_cells.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\microbattery-casing.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\microbattery-magazine.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\microbattery.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\revolver.dm"
+#include "code\modules\projectiles\guns\ballistic\microbattery\revolver_cells.dm"
+#include "code\modules\projectiles\guns\energy\frontier.dm"
#include "code\modules\projectiles\guns\energy\hooklauncher.dm"
#include "code\modules\projectiles\guns\energy\kinetic_accelerator.dm"
#include "code\modules\projectiles\guns\energy\laser.dm"
@@ -4326,10 +4366,20 @@
#include "code\modules\projectiles\guns\energy\modular\modulargun.dm"
#include "code\modules\projectiles\guns\energy\modular\modularlenses.dm"
#include "code\modules\projectiles\guns\energy\modular\modularpower.dm"
+#include "code\modules\projectiles\guns\energy\special\hardlight_bow.dm"
#include "code\modules\projectiles\guns\launcher\crossbow.dm"
#include "code\modules\projectiles\guns\launcher\grenade_launcher.dm"
#include "code\modules\projectiles\guns\launcher\pneumatic.dm"
#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\bsharpoon.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\crestrose.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\custom_guns.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\dominator.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\gunsword.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\protector.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\pummeler.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\secutor.dm"
+#include "code\modules\projectiles\guns\legacy_vr_guns\sickshot.dm"
#include "code\modules\projectiles\guns\magic\staff.dm"
#include "code\modules\projectiles\guns\magic\wand.dm"
#include "code\modules\projectiles\guns\magnetic\bore.dm"
@@ -4351,9 +4401,6 @@
#include "code\modules\projectiles\guns\projectile\sniper.dm"
#include "code\modules\projectiles\guns\projectile\caseless\pellet.dm"
#include "code\modules\projectiles\guns\projectile\sniper\collapsible_sniper.dm"
-#include "code\modules\projectiles\magazines\magazine.dm"
-#include "code\modules\projectiles\magazines\smartmag.dm"
-#include "code\modules\projectiles\magazines\unsorted.dm"
#include "code\modules\projectiles\projectile\arc.dm"
#include "code\modules\projectiles\projectile\blob.dm"
#include "code\modules\projectiles\projectile\bullets.dm"
@@ -5027,25 +5074,11 @@
#include "code\modules\vore\eating\vorepanel_vr.dm"
#include "code\modules\vore\fluffstuff\custom_boxes.dm"
#include "code\modules\vore\fluffstuff\custom_clothes.dm"
-#include "code\modules\vore\fluffstuff\custom_guns.dm"
#include "code\modules\vore\fluffstuff\custom_items.dm"
#include "code\modules\vore\fluffstuff\custom_items_cit.dm"
#include "code\modules\vore\fluffstuff\custom_mecha.dm"
#include "code\modules\vore\fluffstuff\custom_permits.dm"
#include "code\modules\vore\fluffstuff\life_crystals.dm"
-#include "code\modules\vore\fluffstuff\guns\bsharpoon.dm"
-#include "code\modules\vore\fluffstuff\guns\crestrose.dm"
-#include "code\modules\vore\fluffstuff\guns\dominator.dm"
-#include "code\modules\vore\fluffstuff\guns\gunsword.dm"
-#include "code\modules\vore\fluffstuff\guns\protector.dm"
-#include "code\modules\vore\fluffstuff\guns\pummeler.dm"
-#include "code\modules\vore\fluffstuff\guns\secutor.dm"
-#include "code\modules\vore\fluffstuff\guns\sickshot.dm"
-#include "code\modules\vore\fluffstuff\guns\cell_loaded\cell_loaded.dm"
-#include "code\modules\vore\fluffstuff\guns\cell_loaded\medigun.dm"
-#include "code\modules\vore\fluffstuff\guns\cell_loaded\medigun_cells.dm"
-#include "code\modules\vore\fluffstuff\guns\cell_loaded\revolver.dm"
-#include "code\modules\vore\fluffstuff\guns\cell_loaded\revolver_cells.dm"
#include "code\modules\vore\persist\persist_vr.dm"
#include "code\modules\vore\resizing\grav_pull_vr.dm"
#include "code\modules\vore\resizing\holder_micro_vr.dm"
diff --git a/code/__DEFINES/projectiles/ammo_casing.dm b/code/__DEFINES/projectiles/ammo_casing.dm
index 607dbe251c8..87427678b77 100644
--- a/code/__DEFINES/projectiles/ammo_casing.dm
+++ b/code/__DEFINES/projectiles/ammo_casing.dm
@@ -1,7 +1,40 @@
-// /obj/item/ammo_casing casing_flags
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+//* /obj/item/ammo_casing casing_flags *//
+
/// delete after fire (usually for caseless)
#define CASING_DELETE (1<<0)
+/// we're modified; otherwise, we assume that our type alone is enough to encode our information.
+/// you must change this if var-changing a casing, or it might get deleted when it enters a magazine!
+#define CASING_MODIFIED (1<<2)
-DEFINE_BITFIELD(casing_flags, list(
- BITFIELD(CASING_DELETE),
+DEFINE_BITFIELD_NEW(ammo_casing_flags, list(
+ /obj/item/ammo_casing = list(
+ "casing_flags",
+ ),
+), list(
+ BITFIELD_NEW("Delete after firing", CASING_DELETE),
+ BITFIELD_NEW("Ferromagnetic", CASING_FERROMAGNETIC),
+ BITFIELD_NEW("Is Modified", CASING_MODIFIED),
+ BITFIELD_NEW("Non Chemical", CASING_NONCHEMICAL),
+))
+
+//* Firing Method (Priming) Flags *//
+
+/// chemical propellant ignition
+#define CASING_PRIMER_CHEMICAL (1<<0)
+/// magnetic acceleration
+#define CASING_PRIMER_MAGNETIC (1<<1)
+/// activate microbattery cell
+#define CASING_PRIMER_MICROBATTERY (1<<2)
+
+DEFINE_BITFIELD_NEW(ammo_casing_primer, list(
+ /obj/item/ammo_casing = list(
+ "casing_primer",
+ ),
+), list(
+ BITFIELD_NEW("Chemical", CASING_PRIMER_CHEMICAL),
+ BITFIELD_NEW("Magnetic", CASING_PRIMER_MAGNETIC),
+ BITFIELD_NEW("Microbattery", CASING_PRIMER_MICROBATTERY),
))
diff --git a/code/__DEFINES/projectiles/ammo_magazine.dm b/code/__DEFINES/projectiles/ammo_magazine.dm
new file mode 100644
index 00000000000..4acb0ad2309
--- /dev/null
+++ b/code/__DEFINES/projectiles/ammo_magazine.dm
@@ -0,0 +1,27 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+//* /obj/item/ammo_magazine magazine_type
+
+/// normal magazines
+#define MAGAZINE_TYPE_NORMAL (1<<0)
+/// revolver-like speedloader
+#define MAGAZINE_TYPE_SPEEDLOADER (1<<1)
+/// stripper clip
+#define MAGAZINE_TYPE_CLIP (1<<2)
+/// loose pouch
+#define MAGAZINE_TYPE_POUCH (1<<3)
+/// structured box
+#define MAGAZINE_TYPE_BOX (1<<3)
+
+DEFINE_BITFIELD_NEW(ammo_magazine_types, list(
+ /obj/item/ammo_magazine = list(
+ "magazine_type",
+ ),
+), list(
+ BITFIELD_NEW("Normal", MAGAZINE_TYPE_NORMAL),
+ BITFIELD_NEW("Speedloader", MAGAZINE_TYPE_SPEEDLOADER),
+ BITFIELD_NEW("Stripper Clip", MAGAZINE_TYPE_CLIP),
+ BITFIELD_NEW("Ammo Pouch", MAGAZINE_TYPE_POUCH),
+ BITFIELD_NEW("Ammo Box", MAGAZINE_TYPE_BOX),
+))
diff --git a/code/__DEFINES/projectiles/system.dm b/code/__DEFINES/projectiles/system.dm
new file mode 100644
index 00000000000..fafd60aac2c
--- /dev/null
+++ b/code/__DEFINES/projectiles/system.dm
@@ -0,0 +1,15 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+//* rendering system
+//* this is currently only used on ammo magazines, as guns use composition of datums
+//* to determine their renderers instead.
+
+/// no automatic rendering
+#define GUN_RENDERING_DISABLED 0
+/// overlay rendering
+#define GUN_RENDERING_OVERLAYS 1
+/// state rendering
+#define GUN_RENDERING_STATES 2
+/// for some guns, we render segmented overlays with offsets
+#define GUN_RENDERING_SEGMENTS 3
diff --git a/code/datums/design/designs/ammo/lmg.dm b/code/datums/design/designs/ammo/lmg.dm
index 574e8671143..a88fe827dea 100644
--- a/code/datums/design/designs/ammo/lmg.dm
+++ b/code/datums/design/designs/ammo/lmg.dm
@@ -5,6 +5,6 @@
id = "AmmoLMG545mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m556saw
+ build_path = /obj/item/ammo_magazine/a5_56mm/saw
diff --git a/code/datums/design/designs/ammo/pistol.dm b/code/datums/design/designs/ammo/pistol.dm
index fbc59829f71..87364154cad 100644
--- a/code/datums/design/designs/ammo/pistol.dm
+++ b/code/datums/design/designs/ammo/pistol.dm
@@ -5,73 +5,73 @@
id = "AmmoPistol44"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m44
+ build_path = /obj/item/ammo_magazine/a44
/datum/design/ammo/pistol/a44_rubber
id = "AmmoPistol44Rubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m44/rubber
+ build_path = /obj/item/ammo_magazine/a44/rubber
/datum/design/ammo/pistol/a45
id = "AmmoPistol45"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45
+ build_path = /obj/item/ammo_magazine/a45
/datum/design/ammo/pistol/a45_hunter
id = "AmmoPistol45Hunter"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45/hunter
+ build_path = /obj/item/ammo_magazine/a45/hunter
/datum/design/ammo/pistol/a45_practice
id = "AmmoPistol45Practice"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45/practice
+ build_path = /obj/item/ammo_magazine/a45/practice
/datum/design/ammo/pistol/a45_rubber
id = "AmmoPistol45Rubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45/rubber
+ build_path = /obj/item/ammo_magazine/a45/rubber
/datum/design/ammo/pistol/a45_flash
id = "AmmoPistol45Flash"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45/flash
+ build_path = /obj/item/ammo_magazine/a45/flash
/datum/design/ammo/pistol/a45_uzi
id = "AmmoUzi45"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45uzi
+ build_path = /obj/item/ammo_magazine/a45/uzi
/datum/design/ammo/pistol/a9mm
id = "AmmoPistol9mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm
+ build_path = /obj/item/ammo_magazine/a9mm
/datum/design/ammo/pistol/a9mm_rubber
id = "AmmoPistol9mmRubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/rubber
+ build_path = /obj/item/ammo_magazine/a9mm/rubber
/datum/design/ammo/pistol/a9mm_practice
id = "AmmoPistol9mmPractice"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/practice
+ build_path = /obj/item/ammo_magazine/a9mm/practice
/datum/design/ammo/pistol/a9mm_flash
id = "AmmoPistol9mmFlash"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/flash
+ build_path = /obj/item/ammo_magazine/a9mm/flash
/datum/design/ammo/pistol/compact
abstract_type = /datum/design/ammo/pistol/compact
@@ -80,22 +80,22 @@
id = "AmmoCompact9mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/compact
+ build_path = /obj/item/ammo_magazine/a9mm/compact
/datum/design/ammo/pistol/compact/a9mm_rubber
id = "AmmoCompact9mmRubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/compact/rubber
+ build_path = /obj/item/ammo_magazine/a9mm/compact/rubber
/datum/design/ammo/pistol/compact/a9mm_practice
id = "AmmoCompact9mmPractice"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/compact/practice
+ build_path = /obj/item/ammo_magazine/a9mm/compact/practice
/datum/design/ammo/pistol/compact/a9mm_flash
id = "AmmoCompact9mmFlash"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mm/compact/flash
+ build_path = /obj/item/ammo_magazine/a9mm/compact/flash
diff --git a/code/datums/design/designs/ammo/revolver.dm b/code/datums/design/designs/ammo/revolver.dm
index b82d458525c..255872489a6 100644
--- a/code/datums/design/designs/ammo/revolver.dm
+++ b/code/datums/design/designs/ammo/revolver.dm
@@ -5,58 +5,58 @@
id = "AmmoSpeedloader357"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s357
+ build_path = /obj/item/ammo_magazine/a357/speedloader
/datum/design/ammo/revolver/a357_flash
id = "AmmoSpeedloader357Flash"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s357/flash
+ build_path = /obj/item/ammo_magazine/a357/speedloader/flash
/datum/design/ammo/revolver/a357_stun
id = "AmmoSpeedloader357Stun"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s357/stun
+ build_path = /obj/item/ammo_magazine/a357/speedloader/stun
/datum/design/ammo/revolver/a357_rubber
id = "AmmoSpeedloader357Rubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s357/rubber
+ build_path = /obj/item/ammo_magazine/a357/speedloader/rubber
/datum/design/ammo/revolver/a38
id = "AmmoSpeedloader38"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s38
+ build_path = /obj/item/ammo_magazine/a38/speedloader
/datum/design/ammo/revolver/a38_rubber
id = "AmmoSpeedloader38Rubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s38/rubber
+ build_path = /obj/item/ammo_magazine/a38/speedloader/rubber
/datum/design/ammo/revolver/a44
id = "AmmoSpeedloader44"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s44
+ build_path = /obj/item/ammo_magazine/a44/speedloader
/datum/design/ammo/revolver/a44_rubber
id = "AmmoSpeedloader44Rubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s44/rubber
+ build_path = /obj/item/ammo_magazine/a44/speedloader/rubber
/datum/design/ammo/revolver/a45
id = "AmmoSpeedloader45"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s45
+ build_path = /obj/item/ammo_magazine/a45/speedloader
/datum/design/ammo/revolver/a45_rubber
id = "AmmoSpeedloader45Rubber"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/s45/rubber
+ build_path = /obj/item/ammo_magazine/a45/speedloader/rubber
diff --git a/code/datums/design/designs/ammo/rife.dm b/code/datums/design/designs/ammo/rife.dm
index 7ce90849452..c132d142bc7 100644
--- a/code/datums/design/designs/ammo/rife.dm
+++ b/code/datums/design/designs/ammo/rife.dm
@@ -5,40 +5,40 @@
id = "AmmoRifle762mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m762
+ build_path = /obj/item/ammo_magazine/a7_62mm
/datum/design/ammo/rifle/m556mm
id = "AmmoRifle545mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m556
+ build_path = /obj/item/ammo_magazine/a5_56mm
/datum/design/ammo/rifle/m556mm_practice
id = "AmmoRifle545mmPractice"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m556/practice
+ build_path = /obj/item/ammo_magazine/a5_56mm/practice
/datum/design/ammo/rifle/c545mm
id = "AmmoClip545mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c545
+ build_path = /obj/item/ammo_magazine/a5_56mm/clip
/datum/design/ammo/rifle/c545mm_practice
id = "AmmoClip545mmPractice"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c545/practice
+ build_path = /obj/item/ammo_magazine/a5_56mm/clip/practice
/datum/design/ammo/rifle/c762
id = "AmmoClip762mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c762
+ build_path = /obj/item/ammo_magazine/a7_62mm/clip
/datum/design/ammo/rifle/c762_practice
id = "AmmoClip762mmPractice"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c762/practice
+ build_path = /obj/item/ammo_magazine/a7_62mm/clip/practice
diff --git a/code/datums/design/designs/ammo/shotgun.dm b/code/datums/design/designs/ammo/shotgun.dm
index dabe1b82cb4..6e4b94e753b 100644
--- a/code/datums/design/designs/ammo/shotgun.dm
+++ b/code/datums/design/designs/ammo/shotgun.dm
@@ -49,22 +49,22 @@
id = "ClipShotgunBeanbag2"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c12g/beanbag
+ build_path = /obj/item/ammo_magazine/a12g/clip/beanbag
/datum/design/ammo/shotgun/clip/dual/slug
id = "ClipShotgunSlug2"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c12g
+ build_path = /obj/item/ammo_magazine/a12g/clip
/datum/design/ammo/shotgun/clip/dual/buckshot
id = "ClipShotgunBuckshot2"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/clip/c12g/pellet
+ build_path = /obj/item/ammo_magazine/a12g/clip/pellet
/datum/design/ammo/shotgun/pouch
id = "ShotgunShellPouch"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/shotholder
+ build_path = /obj/item/ammo_magazine/a12g/pouch
diff --git a/code/datums/design/designs/ammo/smg.dm b/code/datums/design/designs/ammo/smg.dm
index 8c268b582b5..68a9a3411da 100644
--- a/code/datums/design/designs/ammo/smg.dm
+++ b/code/datums/design/designs/ammo/smg.dm
@@ -5,52 +5,52 @@
id = "AmmoSMG9mmT"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mmt
+ build_path = /obj/item/ammo_magazine/a9mm/top_mount
/datum/design/ammo/smg/a9mm_hunter_t
id = "AmmoSMG9mmHunterT"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mmt/hunter
+ build_path = /obj/item/ammo_magazine/a9mm/top_mount/hunter
/datum/design/ammo/smg/a9mm_rubber_t
id = "AmmoSMG9mmRubberT"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mmt/rubber
+ build_path = /obj/item/ammo_magazine/a9mm/top_mount/rubber
/datum/design/ammo/smg/a9mm_practice_t
id = "AmmoSMG9mmPracticeT"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mmt/practice
+ build_path = /obj/item/ammo_magazine/a9mm/top_mount/practice
/datum/design/ammo/smg/a9mm_flash_t
id = "AmmoSMG9mmFlashT"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mmt/flash
+ build_path = /obj/item/ammo_magazine/a9mm/top_mount/flash
/datum/design/ammo/smg/a9mm
id = "AmmoSMG9mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m9mml
+ build_path = /obj/item/ammo_magazine/a9mm/large
/datum/design/ammo/smg/a10mm
id = "AmmoSMG10mm"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m10mm
+ build_path = /obj/item/ammo_magazine/a10mm
/datum/design/ammo/smg/a45tommy
id = "AmmoSMG45Tommy"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45tommy
+ build_path = /obj/item/ammo_magazine/a45/tommy
/datum/design/ammo/smg/a45tommydrum
id = "AmmoSMG45TommyDrum"
lathe_type = LATHE_TYPE_AUTOLATHE
design_unlock = DESIGN_UNLOCK_INTRINSIC
- build_path = /obj/item/ammo_magazine/m45tommydrum
+ build_path = /obj/item/ammo_magazine/a45/tommy/drum
diff --git a/code/datums/outfits/horror_killers.dm b/code/datums/outfits/horror_killers.dm
index d28dfa48ff3..87ce4e99270 100644
--- a/code/datums/outfits/horror_killers.dm
+++ b/code/datums/outfits/horror_killers.dm
@@ -57,7 +57,7 @@
sec_briefcase.contents += new /obj/item/spacecash/c1000
sec_briefcase.contents += new /obj/item/gun/energy/crossbow
sec_briefcase.contents += new /obj/item/gun/ballistic/revolver/mateba
- sec_briefcase.contents += new /obj/item/ammo_magazine/s357
+ sec_briefcase.contents += new /obj/item/ammo_magazine/a357/speedloader
sec_briefcase.contents += new /obj/item/plastique
H.equip_to_slot_or_del(sec_briefcase, /datum/inventory_slot/abstract/hand/left)
diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm
index 5c2ef580402..e9f5223c5e0 100644
--- a/code/datums/outfits/outfit.dm
+++ b/code/datums/outfits/outfit.dm
@@ -218,8 +218,8 @@
uniform = /obj/item/clothing/under/oricon/mildress/marine/command
back = /obj/item/storage/backpack/satchel
belt = /obj/item/gun/ballistic/revolver/consul
- l_pocket = /obj/item/ammo_magazine/s44
- r_pocket = /obj/item/ammo_magazine/s44
+ l_pocket = /obj/item/ammo_magazine/a44/speedloader
+ r_pocket = /obj/item/ammo_magazine/a44/speedloader
r_hand = /obj/item/clothing/accessory/holster/hip
l_hand = /obj/item/clothing/accessory/tie/black
diff --git a/code/datums/outfits/pirates.dm b/code/datums/outfits/pirates.dm
index 81f725cb4c1..3208e284a18 100644
--- a/code/datums/outfits/pirates.dm
+++ b/code/datums/outfits/pirates.dm
@@ -27,7 +27,7 @@
back = /obj/item/tank/vox
l_hand = /obj/item/melee/energy/sword/pirate
r_hand = /obj/item/gun/ballistic/shotgun/pump/rifle/vox_hunting
- l_pocket = /obj/item/ammo_magazine/clip/c762
- r_pocket = /obj/item/ammo_magazine/clip/c762
+ l_pocket = /obj/item/ammo_magazine/a7_62mm/clip
+ r_pocket = /obj/item/ammo_magazine/a7_62mm/clip
var/faction = "voxpirate"
diff --git a/code/datums/outfits/tournament.dm b/code/datums/outfits/tournament.dm
index 04cd481c78f..25b64c6ebda 100644
--- a/code/datums/outfits/tournament.dm
+++ b/code/datums/outfits/tournament.dm
@@ -23,7 +23,7 @@
suit_store = /obj/item/clothing/suit/storage/det_trench
glasses = /obj/item/clothing/glasses/thermal/plain/monocle
r_hand = /obj/item/gun/ballistic/revolver
- l_pocket = /obj/item/ammo_magazine/s357
+ l_pocket = /obj/item/ammo_magazine/a357/speedloader
/datum/outfit/tournament_gear/chef
name = "Tournament gear - Chef"
diff --git a/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm b/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm
index 7bd926e0b30..12f5948ba16 100644
--- a/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/recipe/crafting_recipes/recipes_weapon_and_ammo.dm
@@ -351,7 +351,7 @@
name = "Protoype Dart Gun (Rapid)"
result = /obj/item/gun/ballistic/dartgun
reqs = list(
- /obj/item/ammo_casing/chemdart = 1,
+ /obj/item/ammo_casing/dart/chemdart = 1,
/obj/item/stack/material/plastic = 5,
/obj/item/stack/cable_coil = 1,
/obj/item/reagent_containers/glass/beaker = 1
@@ -492,7 +492,7 @@
//Munitions
/datum/crafting_recipe/smartdart
name = "Chemical Dart"
- result = /obj/item/ammo_casing/chemdart
+ result = /obj/item/ammo_casing/dart/chemdart
reqs = list(/obj/item/stack/material/steel = 1,
/obj/item/stack/material/glass = 1,
/obj/item/stack/material/plastic = 1)
diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm
index 94bd64cee26..407768b7ecf 100644
--- a/code/datums/uplink/ammunition.dm
+++ b/code/datums/uplink/ammunition.dm
@@ -8,53 +8,53 @@
/datum/uplink_item/item/ammo/a357
name = ".357 Speedloader"
- path = /obj/item/ammo_magazine/s357
+ path = /obj/item/ammo_magazine/a357/speedloader
/datum/uplink_item/item/ammo/mc9mm_compact
name = "Compact Pistol Magazine (9mm)"
- path = /obj/item/ammo_magazine/m9mm/compact
+ path = /obj/item/ammo_magazine/a9mm/compact
/datum/uplink_item/item/ammo/mc9mm
name = "Pistol Magazine (9mm)"
- path = /obj/item/ammo_magazine/m9mm
+ path = /obj/item/ammo_magazine/a9mm
/datum/uplink_item/item/ammo/mc9mm_large
name = "Large Capacity Pistol Magazine (9mm)"
- path = /obj/item/ammo_magazine/m9mm/large
+ path = /obj/item/ammo_magazine/a9mm/large
item_cost = 40
/datum/uplink_item/item/ammo/c45m
name = "Pistol Magazine (.45)"
- path = /obj/item/ammo_magazine/m45
+ path = /obj/item/ammo_magazine/a45
/datum/uplink_item/item/ammo/c45map
name = "Pistol Magazine (.45 AP)"
- path = /obj/item/ammo_magazine/m45/ap
+ path = /obj/item/ammo_magazine/a45/ap
/datum/uplink_item/item/ammo/s45m
name = "Speedloader (.45)"
- path = /obj/item/ammo_magazine/s45
+ path = /obj/item/ammo_magazine/a45/speedloader
/datum/uplink_item/item/ammo/s45map
name = "Speedloader (.45 AP)"
- path = /obj/item/ammo_magazine/s45/ap
+ path = /obj/item/ammo_magazine/a45/speedloader/ap
/datum/uplink_item/item/ammo/tommymag
name = "Tommy Gun Magazine (.45)"
- path = /obj/item/ammo_magazine/m45tommy
+ path = /obj/item/ammo_magazine/a45/tommy
/datum/uplink_item/item/ammo/tommymagap
name = "Tommy Gun Magazine (.45 AP)"
- path = /obj/item/ammo_magazine/m45tommy/ap
+ path = /obj/item/ammo_magazine/a45/tommy/ap
/datum/uplink_item/item/ammo/tommydrum
name = "Tommy Gun Drum Magazine (.45)"
- path = /obj/item/ammo_magazine/m45tommydrum
+ path = /obj/item/ammo_magazine/a45/tommy/drum
item_cost = 40
/datum/uplink_item/item/ammo/tommydrumap
name = "Tommy Gun Drum Magazine (.45 AP)"
- path = /obj/item/ammo_magazine/m45tommydrum/ap
+ path = /obj/item/ammo_magazine/a45/tommy/drum/ap
/datum/uplink_item/item/ammo/darts
name = "Darts"
@@ -67,39 +67,39 @@
/datum/uplink_item/item/ammo/c545
name = "Rifle Magazine (5.56mm)"
- path = /obj/item/ammo_magazine/m556
+ path = /obj/item/ammo_magazine/a5_56mm
/datum/uplink_item/item/ammo/c545/ext
name = "Rifle Magazine (5.56mm Extended)"
- path = /obj/item/ammo_magazine/m556/ext
+ path = /obj/item/ammo_magazine/a5_56mm/ext
/datum/uplink_item/item/ammo/c545/ap
name = "Rifle Magazine (5.56mm AP)"
- path = /obj/item/ammo_magazine/m556/ap
+ path = /obj/item/ammo_magazine/a5_56mm/ap
/datum/uplink_item/item/ammo/c545/ap/ext
name = "Rifle Magazine (5.56mm AP Extended)"
- path = /obj/item/ammo_magazine/m556/ap/ext
+ path = /obj/item/ammo_magazine/a5_56mm/ap/ext
/datum/uplink_item/item/ammo/c762
name = "Rifle Magazine (7.62mm)"
- path = /obj/item/ammo_magazine/m762
+ path = /obj/item/ammo_magazine/a7_62mm
/datum/uplink_item/item/ammo/c762/ap
name = "Rifle Magazine (7.62mm AP)"
- path = /obj/item/ammo_magazine/m762/ap
+ path = /obj/item/ammo_magazine/a7_62mm/ap
/datum/uplink_item/item/ammo/a10mm
name = "SMG Magazine (10mm)"
- path = /obj/item/ammo_magazine/m10mm
+ path = /obj/item/ammo_magazine/a10mm
/datum/uplink_item/item/ammo/a556
name = "Machinegun Magazine (5.56mm)"
- path = /obj/item/ammo_magazine/m556saw
+ path = /obj/item/ammo_magazine/a5_56mm/saw
/datum/uplink_item/item/ammo/a556/ap
name = "Machinegun Magazine (5.56mm AP)"
- path = /obj/item/ammo_magazine/m556saw/ap
+ path = /obj/item/ammo_magazine/a5_56mm/saw/ap
/datum/uplink_item/item/ammo/g12
name = "12g Shotgun Ammo Box (Slug)"
diff --git a/code/game/antagonist/outsider/commando.dm b/code/game/antagonist/outsider/commando.dm
index 77aecd941ee..6093faca4f1 100644
--- a/code/game/antagonist/outsider/commando.dm
+++ b/code/game/antagonist/outsider/commando.dm
@@ -28,7 +28,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(player), SLOT_ID_GLASSES)
player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(player), SLOT_ID_MASK)
player.equip_to_slot_or_del(new /obj/item/storage/box(player), /datum/inventory_slot/abstract/put_in_backpack)
- player.equip_to_slot_or_del(new /obj/item/ammo_magazine/clip/c45(player), /datum/inventory_slot/abstract/put_in_backpack)
+ player.equip_to_slot_or_del(new /obj/item/ammo_magazine/a45/clip(player), /datum/inventory_slot/abstract/put_in_backpack)
player.equip_to_slot_or_del(new /obj/item/hardsuit/merc(player), SLOT_ID_BACK)
player.equip_to_slot_or_del(new /obj/item/gun/ballistic/automatic/c20r(player), /datum/inventory_slot/abstract/hand/right)
diff --git a/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm b/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm
new file mode 100644
index 00000000000..c42d565c765
--- /dev/null
+++ b/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm
@@ -0,0 +1,71 @@
+
+/obj/item/gun/ballistic/caseless/phoron_spitter // phoron war SMG that fires phoron shards.
+ name = "Gorlex 'SHRAPNEL-SPITTER' Phoron SMG"
+ desc = "A short-barrel SMG from the Phoron Wars that lacks conventional ammo, instead using compressed matter cartridges. Coils accelerate a ferromagnetic, self-oxidizing cloud of alloy. Lack of traditional cycling means it can fire blindingly fast. Like all caseless weapons, it's fallen by the wayside, and is no longer produced."
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = SLOT_BACK
+ load_method = MAGAZINE
+ regex_this_caliber = /datum/ammo_caliber/phoron_shrap
+ magazine_type = /obj/item/ammo_magazine/phoron_shrap
+ allowed_magazines = list(/obj/item/ammo_magazine/phoron_shrap)
+
+ icon = 'icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi'
+ icon_state = "gun"
+
+ recoil = 1.5
+ accuracy = -30
+ one_handed_penalty = 50
+ auto_eject = 1
+ auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
+ fire_sound = 'sound/weapons/gunshot/gunshot_tech_smg.ogg'
+
+ firemodes = list(
+ list(mode_name="full auto", burst=1, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1),
+ list(mode_name="fuller auto", burst=2, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1)
+ )
+
+/obj/item/gun/ballistic/caseless/phoron_spitter/Initialize(mapload)
+ . = ..()
+ var/fluff_date = rand(2501,2543)
+ desc += "\nYou see a stamp on the side: GORLEX MARAUDERS, MANUFACTURED IN [fluff_date]."
+
+// todo: gun rendering system
+/obj/item/gun/ballistic/caseless/phoron_spitter/update_icon_state()
+ . = ..()
+ if(ammo_magazine)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-empty"
+
+//* Caliber *//
+
+/datum/ammo_caliber/phoron_shrap
+ caliber = "phoron-shrapnel"
+
+//* Ammunition *//
+
+/obj/item/ammo_casing/phoron_shrap
+ name = "phoron shrapnel"
+ desc = "Should you really be holding this?"
+
+ icon = 'icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi'
+ icon_state = "shrapnel"
+
+ regex_this_caliber = /datum/ammo_caliber/phoron_shrap
+ projectile_type = /obj/projectile/bullet/incendiary/phoronshrap
+ casing_flags = CASING_DELETE
+
+//* Magazine *//
+
+/obj/item/ammo_magazine/phoron_shrap
+ name = "compressed phoron matter container"
+ desc = "A compressed matter container meant for the Gorlex SHRAPNEL-SPITTER SMG. Contains a phoron alloy that self-oxidzes and ignites on contact with air. \n \nThey're in good shape for the shape they're in, \nbut God, I wonder how they think they can win, \nwith phoron rolling down their skin."
+ ammo_max = 40
+ ammo_caliber = /datum/ammo_caliber/phoron_shrap
+ ammo_type = /obj/item/ammo_casing/phoron_shrap
+
+ icon = 'icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi'
+ icon_state = "mag-1"
+ base_icon_state = "mag"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
diff --git a/code/game/content/factions/corporations/gorlex/items/guns/wild_hunt.dm b/code/game/content/factions/corporations/gorlex/items/guns/wild_hunt.dm
new file mode 100644
index 00000000000..0994de35363
--- /dev/null
+++ b/code/game/content/factions/corporations/gorlex/items/guns/wild_hunt.dm
@@ -0,0 +1,50 @@
+/obj/item/gun/ballistic/caseless/wild_hunt //extremely powerful and rare rifle - meant to spawn with maybe 2 mags extra, or be for asset protection/ert/solo antags/etc
+ name = "Gorlex WILD-HUNT 12.7mm Caseless Rifle"
+ desc = "An ancient rifle of the Phoron Wars. For when you want to kill something with no negotiation. The Wild Hunt is a beast that kicks like a mule and fires experimental caseless phoron rounds. It has, obviously, horrific results, setting targets on fire after giving them a golf-ball sized hole. Now generally disused due to the extreme maintenance cost and impracticality. Nobody makes these, anymore."
+ icon_state = "rifle"
+ inhand_state = "rifle"
+ icon = 'icons/content/factions/corporations/gorlex/items/guns/wild_hunt.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = SLOT_BACK
+ regex_this_caliber = /datum/ammo_caliber/a12_7mm
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/a12_7mm/wild_hunt
+ recoil = 1
+ accuracy = -10
+ allowed_magazines = list(/obj/item/ammo_magazine/a12_7mm/wild_hunt)
+ one_handed_penalty = 100 //you simply do not
+ auto_eject = 1
+ auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
+ fire_sound = 'sound/weapons/gunshot/gunshot_tech_huge.ogg'
+ render_use_legacy_by_default = FALSE
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
+ list(mode_name="automatic", burst=1, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1)
+ )
+
+ item_renderer = /datum/gun_item_renderer
+
+// todo: gun rendering system
+/obj/item/gun/ballistic/caseless/wild_hunt/update_icon_state()
+ . = ..()
+ if(ammo_magazine)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-empty"
+
+/obj/item/gun/ballistic/caseless/wild_hunt/Initialize(mapload)
+ . = ..()
+ var/fluff_date = rand(2501,2543)
+ desc += "\n You see a stamp on the side: GORLEX MARAUDERS, MANUFACTURED IN [fluff_date]."
+
+/obj/item/ammo_magazine/a12_7mm/wild_hunt
+ name = "Wild Hunt magazine (12.7mm caseless)"
+ icon = 'icons/content/factions/corporations/gorlex/items/guns/wild_hunt.dmi'
+ icon_state = "mag-1"
+ base_icon_state = "mag"
+ ammo_caliber = /datum/ammo_caliber/a12_7mm
+ ammo_preload = /obj/item/ammo_casing/a12_7mm/phoron
+ ammo_max = 20
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm
index bed7fbd6928..18172ed42ca 100644
--- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm
@@ -41,7 +41,7 @@
name = "Weapon - Misplaced militia rifles"
contains = list(
/obj/item/gun/ballistic/shotgun/pump/rifle = 3,
- /obj/item/ammo_magazine/clip/c762 = 6,
+ /obj/item/ammo_magazine/a7_62mm/clip = 6,
)
legacy_contraband = 1
container_type = /obj/structure/closet/crate/secure/weapon
@@ -78,8 +78,8 @@
new /obj/item/clothing/suit/storage/vest/heavy/merc(src)
new /obj/item/clothing/glasses/night(src)
new /obj/item/storage/box/anti_photons(src)
- new /obj/item/ammo_magazine/clip/c12g/pellet(src)
- new /obj/item/ammo_magazine/clip/c12g(src)
+ new /obj/item/ammo_magazine/a12g/clip/pellet(src)
+ new /obj/item/ammo_magazine/a12g/clip(src)
/obj/item/storage/box/cargo_null_entry_kit/doctor
name = "doctor's kit"
@@ -122,7 +122,7 @@
new /obj/item/gun/energy/ionrifle/pistol(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/card/emag(src)
- new /obj/item/ammo_magazine/m45/ap(src)
+ new /obj/item/ammo_magazine/a45/ap(src)
new /obj/item/material/knife/tacknife/combatknife(src)
new /obj/item/clothing/mask/balaclava(src)
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm
index 5c11413b3a0..9e7848402f2 100644
--- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm
@@ -375,8 +375,8 @@
/datum/supply_pack/nanotrasen/medical/medigun
name = "Cell-Loaded Medigun crate"
contains = list(
- /obj/item/gun/ballistic/cell_loaded/medical = 1,
- /obj/item/ammo_magazine/cell_mag/medical = 1,
+ /obj/item/gun/ballistic/microbattery/medical = 1,
+ /obj/item/ammo_magazine/microbattery/medical = 1,
)
worth = 1500
container_type = /obj/structure/closet/crate/secure/corporate/veymed
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm
index 75134297cde..d3fc78511e7 100644
--- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm
@@ -109,7 +109,7 @@
contains = list(
/obj/item/assembly/timer,
/obj/item/gun/ballistic/shotgun/pump/rifle/practice = 2,
- /obj/item/ammo_magazine/clip/c762/practice = 4,
+ /obj/item/ammo_magazine/a7_62mm/clip/practice = 4,
/obj/item/target = 2,
/obj/item/target/alien = 2,
/obj/item/target/syndicate = 2,
@@ -156,7 +156,7 @@
/datum/supply_pack/nanotrasen/munitions/bsmgammo
name = "Ammunition - 9mm top mounted lethal"
contains = list(
- /obj/item/ammo_magazine/m9mmt = 6,
+ /obj/item/ammo_magazine/a9mm/top_mount = 6,
)
worth = 250
container_name = "Ballistic ammunition crate"
@@ -164,7 +164,7 @@
/datum/supply_pack/nanotrasen/munitions/bsmgammorubber
name = "Ammunition - 9mm top mounted rubber"
contains = list(
- /obj/item/ammo_magazine/m9mmt/rubber = 6,
+ /obj/item/ammo_magazine/a9mm/top_mount/rubber = 6,
)
worth = 250
container_type = /obj/structure/closet/crate/secure
@@ -173,7 +173,7 @@
/datum/supply_pack/nanotrasen/munitions/brifleammo
name = "Ammunition - 7.62mm lethal"
contains = list(
- /obj/item/ammo_magazine/m762 = 6,
+ /obj/item/ammo_magazine/a7_62mm = 6,
)
worth = 250
container_type = /obj/structure/closet/crate/secure
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm
index 51120d08185..7c9fefcb365 100644
--- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm
@@ -179,8 +179,8 @@
contains = list(
/obj/item/gun/ballistic/automatic/c20r/foam = 2,
/obj/item/gun/ballistic/automatic/lmg/foam = 1,
- /obj/item/ammo_magazine/mfoam/c20 = 4,
- /obj/item/ammo_magazine/mfoam/lmg = 2,
+ /obj/item/ammo_magazine/foam/smg = 4,
+ /obj/item/ammo_magazine/foam/lmg = 2,
/obj/item/material/twohanded/spear/foam = 2,
/obj/item/material/twohanded/fireaxe/foam = 1,
)
@@ -189,7 +189,7 @@
/datum/supply_pack/nanotrasen/recreation/donksoft_ammo
name = "DONKsoft Resupply Bundle"
contains = list(
- /obj/item/storage/box/foamdart= 4,
+ /obj/item/ammo_magazine/foam/box= 4,
)
worth = 250
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index a1124b7d446..b016f4d0a5c 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -1,3 +1,4 @@
+// todo: dynamic recharger API on item for cell chargers, wall chargers, and device rechargers.
/obj/machinery/recharger
name = "recharger"
desc = "A standard recharger for all devices that use power."
@@ -9,7 +10,7 @@
active_power_usage = 40000 //10 kW
var/efficiency = 10000 //will provide the modified power rate when upgraded
var/obj/item/charging = null
- var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/modular_computer, /obj/item/computer_hardware/battery_module, /obj/item/cell, /obj/item/flashlight, /obj/item/electronic_assembly, /obj/item/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/flash, /obj/item/ammo_casing/microbattery, /obj/item/shield_diffuser, /obj/item/ammo_magazine/cell_mag, /obj/item/gun/ballistic/cell_loaded)
+ var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/modular_computer, /obj/item/computer_hardware/battery_module, /obj/item/cell, /obj/item/flashlight, /obj/item/electronic_assembly, /obj/item/weldingtool/electric, /obj/item/flash, /obj/item/ammo_casing/microbattery, /obj/item/shield_diffuser, /obj/item/ammo_magazine/microbattery, /obj/item/gun/ballistic/microbattery)
var/icon_state_charged = "recharger2"
var/icon_state_charging = "recharger1"
var/icon_state_idle = "recharger0" //also when unpowered
@@ -64,16 +65,16 @@
if(EW.use_external_power)
to_chat(user, "\The [EW] has no recharge port.")
return
- else if(istype(G, /obj/item/ammo_magazine/cell_mag))
- var/obj/item/ammo_magazine/cell_mag/maggy = G
- if(maggy.stored_ammo.len < 1)
+ else if(istype(G, /obj/item/ammo_magazine/microbattery))
+ var/obj/item/ammo_magazine/microbattery/maggy = G
+ if(!maggy.amount_remaining())
to_chat(user, "\The [G] does not have any cells installed.")
return
- else if(istype(G, /obj/item/gun/ballistic/cell_loaded))
- var/obj/item/gun/ballistic/cell_loaded/gunny = G
+ else if(istype(G, /obj/item/gun/ballistic/microbattery))
+ var/obj/item/gun/ballistic/microbattery/gunny = G
if(gunny.ammo_magazine)
- var/obj/item/ammo_magazine/cell_mag/maggy = gunny.ammo_magazine
- if(maggy.stored_ammo.len < 1)
+ var/obj/item/ammo_magazine/microbattery/maggy = gunny.ammo_magazine
+ if(!maggy.amount_remaining())
to_chat(user, "\The [G] does not have any cell in its magazine installed.")
return
else
@@ -176,15 +177,15 @@
update_use_power(USE_POWER_ACTIVE)
return
- else if(istype(charging, /obj/item/ammo_magazine/cell_mag))
+ else if(istype(charging, /obj/item/ammo_magazine/microbattery))
charge_mag(charging)
- else if(istype(charging, /obj/item/gun/ballistic/cell_loaded))
- var/obj/item/gun/ballistic/cell_loaded/gunny = charging
+ else if(istype(charging, /obj/item/gun/ballistic/microbattery))
+ var/obj/item/gun/ballistic/microbattery/gunny = charging
charge_mag(gunny.ammo_magazine)
-/obj/machinery/recharger/proc/charge_mag(obj/item/ammo_magazine/cell_mag/maggy)
- var/tally = maggy.stored_ammo.len
+/obj/machinery/recharger/proc/charge_mag(obj/item/ammo_magazine/microbattery/maggy)
+ var/tally = maggy.amount_remaining()
for(var/obj/item/ammo_casing/microbattery/batt in maggy)
if(batt.shots_left < initial(batt.shots_left))
icon_state = icon_state_charging
@@ -229,7 +230,7 @@
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
base_power_draw = 30000
- allowed_devices = list(/obj/item/gun/energy, /obj/item/gun/magnetic, /obj/item/melee/baton, /obj/item/flashlight, /obj/item/cell/device, /obj/item/ammo_casing/microbattery, /obj/item/ammo_magazine/cell_mag, /obj/item/gun/ballistic/cell_loaded)
+ allowed_devices = list(/obj/item/gun/energy, /obj/item/gun/magnetic, /obj/item/melee/baton, /obj/item/flashlight, /obj/item/cell/device, /obj/item/ammo_casing/microbattery, /obj/item/ammo_magazine/microbattery, /obj/item/gun/ballistic/microbattery)
icon_state_charged = "wrecharger2"
icon_state_charging = "wrecharger1"
icon_state_idle = "wrecharger0"
diff --git a/code/game/machinery/vending/security.dm b/code/game/machinery/vending/security.dm
index 96ef3f0bfbc..d00588d040f 100644
--- a/code/game/machinery/vending/security.dm
+++ b/code/game/machinery/vending/security.dm
@@ -13,7 +13,7 @@
/obj/item/reagent_containers/food/snacks/donut/normal = 12,
/obj/item/storage/box/evidence = 6,
/obj/item/gun/ballistic/sec = 2,
- /obj/item/ammo_magazine/m45/rubber = 6,
+ /obj/item/ammo_magazine/a45/rubber = 6,
/obj/item/clothing/mask/gas/half = 6,
/obj/item/clothing/glasses/omnihud/sec = 6,
/obj/item/hailer = 6,
diff --git a/code/game/objects/items/gunbox.dm b/code/game/objects/items/gunbox.dm
index ebfbe0ad04b..7744108a0dc 100644
--- a/code/game/objects/items/gunbox.dm
+++ b/code/game/objects/items/gunbox.dm
@@ -7,9 +7,9 @@
/obj/item/gunbox/attack_self(mob/user)
var/list/options = list()
- options["NT Mk58 (.45)"] = list(/obj/item/gun/ballistic/sec, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/flash)
- options["SW 625 Revolver (.45)"] = list(/obj/item/gun/ballistic/revolver/detective45, /obj/item/ammo_magazine/s45/rubber, /obj/item/ammo_magazine/s45/rubber)
- options["P92X (9mm)"] = list(/obj/item/gun/ballistic/p92x/sec, /obj/item/ammo_magazine/m9mm/rubber, /obj/item/ammo_magazine/m9mm/flash)
+ options["NT Mk58 (.45)"] = list(/obj/item/gun/ballistic/sec, /obj/item/ammo_magazine/a45/rubber, /obj/item/ammo_magazine/a45/flash)
+ options["SW 625 Revolver (.45)"] = list(/obj/item/gun/ballistic/revolver/detective45, /obj/item/ammo_magazine/a45/speedloader/rubber, /obj/item/ammo_magazine/a45/speedloader/rubber)
+ options["P92X (9mm)"] = list(/obj/item/gun/ballistic/p92x/sec, /obj/item/ammo_magazine/a9mm/rubber, /obj/item/ammo_magazine/a9mm/flash)
var/choice = input(user,"Would you prefer a pistol or a revolver?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
@@ -28,9 +28,9 @@
/obj/item/gunbox/lethal/attack_self(mob/user)
var/list/options = list()
- options["M1911 Dynamic (.45)"] = list(/obj/item/gun/ballistic/colt, /obj/item/ammo_magazine/m45, /obj/item/ammo_magazine/m45)
- options["SW 625 Revolver (.45)"] = list(/obj/item/gun/ballistic/revolver/detective45, /obj/item/ammo_magazine/s45, /obj/item/ammo_magazine/s45)
- options["P92X (9mm)"] = list(/obj/item/gun/ballistic/p92x, /obj/item/ammo_magazine/m9mm, /obj/item/ammo_magazine/m9mm)
+ options["M1911 Dynamic (.45)"] = list(/obj/item/gun/ballistic/colt, /obj/item/ammo_magazine/a45, /obj/item/ammo_magazine/a45)
+ options["SW 625 Revolver (.45)"] = list(/obj/item/gun/ballistic/revolver/detective45, /obj/item/ammo_magazine/a45/speedloader, /obj/item/ammo_magazine/a45/speedloader)
+ options["P92X (9mm)"] = list(/obj/item/gun/ballistic/p92x, /obj/item/ammo_magazine/a9mm, /obj/item/ammo_magazine/a9mm)
var/choice = input(user,"Would you prefer a pistol or a revolver?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
@@ -50,8 +50,8 @@
/obj/item/gunbox/attack_self(mob/user)
var/list/options = list()
- options[".45 Pistol"] = list(/obj/item/gun/ballistic/colt/detective, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
- options[".45 Revolver"] = list(/obj/item/gun/ballistic/revolver/detective45, /obj/item/ammo_magazine/s45/rubber, /obj/item/ammo_magazine/s45/rubber)
+ options[".45 Pistol"] = list(/obj/item/gun/ballistic/colt/detective, /obj/item/ammo_magazine/a45/rubber, /obj/item/ammo_magazine/a45/rubber)
+ options[".45 Revolver"] = list(/obj/item/gun/ballistic/revolver/detective45, /obj/item/ammo_magazine/a45/speedloader/rubber, /obj/item/ammo_magazine/a45/speedloader/rubber)
var/choice = input(user,"Would you prefer a pistol or a revolver?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
@@ -72,7 +72,7 @@
/obj/item/gunbox/marksman/attack_self(mob/user)
var/list/options = list()
options["Marksman Energy Rifle"] = list(/obj/item/gun/energy/sniperrifle/locked)
- options["M1A Garand"] = list(/obj/item/gun/ballistic/garand/sniper, /obj/item/storage/belt/security/tactical/bandolier, /obj/item/ammo_magazine/m762garand/sniperhunter, /obj/item/ammo_magazine/m762garand/sniperhunter, /obj/item/ammo_magazine/m762garand/sniperhunter, /obj/item/ammo_magazine/m762garand/sniperhunter, /obj/item/ammo_magazine/m762garand/sniperhunter, /obj/item/ammo_magazine/m762garand/sniperhunter, /obj/item/ammo_magazine/m762garand/sniperhunter) // 7 clips, 56 rounds
+ options["M1A Garand"] = list(/obj/item/gun/ballistic/garand/sniper, /obj/item/storage/belt/security/tactical/bandolier, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter, /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter) // 7 clips, 56 rounds
var/choice = input(user,"Would you prefer a ballistic rifle or a laser?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
@@ -91,9 +91,9 @@
/obj/item/gunbox/donksoft/attack_self(mob/user)
var/list/options = list()
- options["Classic DONKsoft Pistol"] = list(/obj/item/gun/ballistic/pistol/foam, /obj/item/ammo_magazine/mfoam/pistol, /obj/item/ammo_magazine/mfoam/pistol)
- options["Blue DONKsoft Pistol"] = list(/obj/item/gun/ballistic/pistol/foam/blue, /obj/item/ammo_magazine/mfoam/pistol, /obj/item/ammo_magazine/mfoam/pistol)
- options["DONKsoft Automag"] = list(/obj/item/gun/ballistic/pistol/foam/magnum, /obj/item/ammo_magazine/mfoam/pistol, /obj/item/ammo_magazine/mfoam/pistol)
+ options["Classic DONKsoft Pistol"] = list(/obj/item/gun/ballistic/pistol/foam, /obj/item/ammo_magazine/foam/pistol, /obj/item/ammo_magazine/foam/pistol)
+ options["Blue DONKsoft Pistol"] = list(/obj/item/gun/ballistic/pistol/foam/blue, /obj/item/ammo_magazine/foam/pistol, /obj/item/ammo_magazine/foam/pistol)
+ options["DONKsoft Automag"] = list(/obj/item/gun/ballistic/pistol/foam/magnum, /obj/item/ammo_magazine/foam/pistol, /obj/item/ammo_magazine/foam/pistol)
var/choice = input(user,"What toy is in this box?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
@@ -111,8 +111,8 @@
/obj/item/gunbox/donksoft/shotgun/attack_self(mob/user)
var/list/options = list()
- options["Classic DONKsoft Shotgun"] = list(/obj/item/gun/ballistic/shotgun/pump/foam, /obj/item/storage/box/foamdart, /obj/item/storage/box/foamdart)
- options["Blue DONKsoft Shotgun"] = list(/obj/item/gun/ballistic/shotgun/pump/foam/blue, /obj/item/storage/box/foamdart, /obj/item/storage/box/foamdart)
+ options["Classic DONKsoft Shotgun"] = list(/obj/item/gun/ballistic/shotgun/pump/foam, /obj/item/ammo_magazine/foam/box, /obj/item/ammo_magazine/foam/box)
+ options["Blue DONKsoft Shotgun"] = list(/obj/item/gun/ballistic/shotgun/pump/foam/blue, /obj/item/ammo_magazine/foam/box, /obj/item/ammo_magazine/foam/box)
var/choice = input(user,"What toy is in this box?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
@@ -130,8 +130,8 @@
/obj/item/gunbox/donksoft/smg/attack_self(mob/user)
var/list/options = list()
- options["Classic DONKsoft SMG"] = list(/obj/item/gun/ballistic/automatic/advanced_smg/foam, /obj/item/ammo_magazine/mfoam/smg, /obj/item/ammo_magazine/mfoam/smg)
- options["Blue DONKsoft SMG"] = list(/obj/item/gun/ballistic/automatic/advanced_smg/foam/blue, /obj/item/ammo_magazine/mfoam/smg, /obj/item/ammo_magazine/mfoam/smg)
+ options["Classic DONKsoft SMG"] = list(/obj/item/gun/ballistic/automatic/advanced_smg/foam, /obj/item/ammo_magazine/foam/smg, /obj/item/ammo_magazine/foam/smg)
+ options["Blue DONKsoft SMG"] = list(/obj/item/gun/ballistic/automatic/advanced_smg/foam/blue, /obj/item/ammo_magazine/foam/smg, /obj/item/ammo_magazine/foam/smg)
var/choice = input(user,"What toy is in this box?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 517fd0870f0..a8d3e994287 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -228,7 +228,7 @@
/obj/item/storage/box/sniperammo
name = "box of 12.7mm shells"
desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death."
- starts_with = list(/obj/item/ammo_casing/a127 = 7)
+ starts_with = list(/obj/item/ammo_casing/a12_7mm = 7)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
@@ -687,20 +687,3 @@
max_items = 1
insertion_whitelist = list(/obj/item/clothing/suit/storage/hooded/rainponcho)
starts_with = list(/obj/item/clothing/suit/storage/hooded/rainponcho)
-
-//Foam Darts
-/obj/item/storage/box/foamdart
- name = "box of foam darts"
- desc = "It has a picture of some foam darts on it."
- icon = 'icons/obj/ammo.dmi'
- icon_state = "foambox"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "syringe_kit", SLOT_ID_LEFT_HAND = "syringe_kit")
- starts_with = list(/obj/item/ammo_casing/foam = 20)
- drop_sound = 'sound/items/drop/ammobox.ogg'
- pickup_sound = 'sound/items/pickup/ammobox.ogg'
-
-/obj/item/storage/box/foamdart/riot
- name = "box of riot darts"
- desc = "It has a picture of some angry looking foam darts on it."
- icon_state = "foambox_riot"
- starts_with = list(/obj/item/ammo_casing/foam/riot = 20)
diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm
index 6212bf3ec1d..558830cbd48 100644
--- a/code/game/objects/items/storage/lockbox.dm
+++ b/code/game/objects/items/storage/lockbox.dm
@@ -121,9 +121,9 @@
/obj/item/clothing/accessory/storage/black_vest = 4,
/obj/item/clothing/head/soft/black = 4,
/obj/item/gun/ballistic/automatic/p90 = 2,
- /obj/item/ammo_magazine/m57x28mmp90 = 4,
+ /obj/item/ammo_magazine/a5_7mm/p90 = 4,
/obj/item/gun/ballistic/p92x = 1,
- /obj/item/ammo_magazine/m9mm = 2,
+ /obj/item/ammo_magazine/a9mm = 2,
)
/obj/item/storage/lockbox/cowboy
@@ -135,9 +135,9 @@
/obj/item/clothing/shoes/boots/cowboy/classic = 4,
/obj/item/clothing/head/cowboy_hat = 4,
/obj/item/gun/ballistic/revolver/dirty_harry = 2,
- /obj/item/ammo_magazine/s44 = 4,
+ /obj/item/ammo_magazine/a44/speedloader = 4,
/obj/item/gun/ballistic/shotgun/pump/rifle/lever/win1895 = 1,
- /obj/item/ammo_magazine/clip/c762 = 2,
+ /obj/item/ammo_magazine/a7_62mm/clip = 2,
/obj/item/gun/ballistic/shotgun/doublebarrel/pellet = 1,
/obj/item/storage/box/shotgunshells = 1,
/obj/item/reagent_containers/food/drinks/bottle/small/sarsaparilla = 3,
@@ -154,9 +154,9 @@
/obj/item/clothing/head/ushanka = 3,
/obj/item/clothing/head/bearpelt = 1,
/obj/item/gun/ballistic/shotgun/pump/rifle = 3,
- /obj/item/ammo_magazine/clip/c762 = 3,
+ /obj/item/ammo_magazine/a7_62mm/clip = 3,
/obj/item/gun/ballistic/pistol = 1,
- /obj/item/ammo_magazine/m9mm/compact = 1,
+ /obj/item/ammo_magazine/a9mm/compact = 1,
/obj/item/reagent_containers/food/drinks/bottle/vodka = 1,
)
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index ea34163b60e..710acf38d92 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -22,7 +22,7 @@
if("guns")
new /obj/item/gun/ballistic/revolver(src)
- new /obj/item/ammo_magazine/s357(src)
+ new /obj/item/ammo_magazine/a357/speedloader(src)
new /obj/item/card/emag(src)
new /obj/item/plastique(src)
new /obj/item/plastique(src)
@@ -280,7 +280,7 @@
/obj/item/sniper_rifle_part/barrel,
/obj/item/sniper_rifle_part/stock,
/obj/item/sniper_rifle_part/trigger_group,
- /obj/item/ammo_casing/a127 = 4
+ /obj/item/ammo_casing/a12_7mm = 4
)
/obj/item/storage/secure/briefcase/fuelrod
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index afa68ab234f..03056c176db 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -19,10 +19,10 @@
//? Access - see [modules/jobs/access.dm]
/// If set, all of these accesses are needed to access this object.
- // todo: getter / setter, enforced cached & deduped lists
+ // todo: getter / setter, enforced cached & deduped lists
var/list/req_access
/// If set, at least one of these accesses are needed to access this object.
- // todo: getter / setter, enforced cached & deduped lists
+ // todo: getter / setter, enforced cached & deduped lists
var/list/req_one_access
//? Climbing
diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm
index 8e41e4311d0..979b442f766 100644
--- a/code/game/objects/random/guns_and_ammo.dm
+++ b/code/game/objects/random/guns_and_ammo.dm
@@ -156,19 +156,20 @@
/obj/random/ammo
name = "Random Ammunition"
desc = "This is random security ammunition."
- icon = 'icons/obj/ammo.dmi'
- icon_state = "45-10"
+
+ icon = 'icons/modules/projectiles/legacy/ammo_box.dmi'
+ icon_state = "green"
/obj/random/ammo/item_to_spawn()
return pick(prob(6);/obj/item/storage/box/beanbags,
prob(2);/obj/item/storage/box/shotgunammo,
prob(4);/obj/item/storage/box/shotgunshells,
prob(1);/obj/item/storage/box/stunshells,
- prob(2);/obj/item/ammo_magazine/m45,
- prob(4);/obj/item/ammo_magazine/m45/rubber,
- prob(4);/obj/item/ammo_magazine/m45/flash,
- prob(2);/obj/item/ammo_magazine/m9mmt,
- prob(6);/obj/item/ammo_magazine/m9mmt/rubber)
+ prob(2);/obj/item/ammo_magazine/a45,
+ prob(4);/obj/item/ammo_magazine/a45/rubber,
+ prob(4);/obj/item/ammo_magazine/a45/flash,
+ prob(2);/obj/item/ammo_magazine/a9mm/top_mount,
+ prob(6);/obj/item/ammo_magazine/a9mm/top_mount/rubber)
/obj/random/projectile/random
name = "Random Projectile Weapon"
@@ -192,41 +193,41 @@
return pick(
prob(6);list(
/obj/item/gun/ballistic/automatic/wt550,
- /obj/item/ammo_magazine/m9mmt,
- /obj/item/ammo_magazine/m9mmt
+ /obj/item/ammo_magazine/a9mm/top_mount,
+ /obj/item/ammo_magazine/a9mm/top_mount
),
prob(6);list(
/obj/item/gun/ballistic/automatic/wt274,
- /obj/item/ammo_magazine/m45uzi/wt274,
- /obj/item/ammo_magazine/m45uzi/wt274
+ /obj/item/ammo_magazine/a45/wt274,
+ /obj/item/ammo_magazine/a45/wt274
),
prob(2);list(
/obj/item/gun/ballistic/automatic/mini_uzi,
- /obj/item/ammo_magazine/m45uzi,
- /obj/item/ammo_magazine/m45uzi
+ /obj/item/ammo_magazine/a45/uzi,
+ /obj/item/ammo_magazine/a45/uzi
),
prob(2);list(
/obj/item/gun/ballistic/automatic/tommygun,
- /obj/item/ammo_magazine/m45tommy,
- /obj/item/ammo_magazine/m45tommy
+ /obj/item/ammo_magazine/a45/tommy,
+ /obj/item/ammo_magazine/a45/tommy
),
prob(4);list(
/obj/item/gun/ballistic/automatic/c20r,
- /obj/item/ammo_magazine/m10mm,
- /obj/item/ammo_magazine/m10mm
+ /obj/item/ammo_magazine/a10mm,
+ /obj/item/ammo_magazine/a10mm
),
prob(2);list(
/obj/item/gun/ballistic/automatic/p90,
- /obj/item/ammo_magazine/m57x28mmp90
+ /obj/item/ammo_magazine/a5_7mm/p90
),
prob(2);list(
/obj/item/gun/ballistic/automatic/mini_uzi/taj,
- /obj/item/ammo_magazine/m45uzi,
- /obj/item/ammo_magazine/m45uzi
+ /obj/item/ammo_magazine/a45/uzi,
+ /obj/item/ammo_magazine/a45/uzi
),
prob(1);list(
/obj/item/gun/ballistic/caseless/phoron_spitter,
- /obj/item/ammo_magazine/mphoronshot
+ /obj/item/ammo_magazine/phoron_shrap
)
)
@@ -242,38 +243,38 @@
return pick(
prob(4);list(
/obj/item/gun/ballistic/automatic/sts35,
- /obj/item/ammo_magazine/m556,
- /obj/item/ammo_magazine/m556
+ /obj/item/ammo_magazine/a5_56mm,
+ /obj/item/ammo_magazine/a5_56mm
),
prob(4);list(
/obj/item/gun/ballistic/automatic/z8,
- /obj/item/ammo_magazine/m762,
- /obj/item/ammo_magazine/m762
+ /obj/item/ammo_magazine/a7_62mm,
+ /obj/item/ammo_magazine/a7_62mm
),
prob(8);list(
/obj/item/gun/ballistic/shotgun/pump/rifle,
- /obj/item/ammo_magazine/clip/c762,
- /obj/item/ammo_magazine/clip/c762
+ /obj/item/ammo_magazine/a7_62mm/clip,
+ /obj/item/ammo_magazine/a7_62mm/clip
),
prob(2);list(
/obj/item/gun/ballistic/shotgun/pump/rifle/lever/win1895,
- /obj/item/ammo_magazine/clip/c762,
- /obj/item/ammo_magazine/clip/c762
+ /obj/item/ammo_magazine/a7_62mm/clip,
+ /obj/item/ammo_magazine/a7_62mm/clip
),
prob(2);list(
/obj/item/gun/ballistic/automatic/bullpup,
- /obj/item/ammo_magazine/m762,
- /obj/item/ammo_magazine/m762
+ /obj/item/ammo_magazine/a7_62mm,
+ /obj/item/ammo_magazine/a7_62mm
),
prob(8);list(
/obj/item/gun/ballistic/shotgun/pump/rifle/taj,
- /obj/item/ammo_magazine/clip/c762,
- /obj/item/ammo_magazine/clip/c762
+ /obj/item/ammo_magazine/a7_62mm/clip,
+ /obj/item/ammo_magazine/a7_62mm/clip
),
prob(1);list(
/obj/item/gun/ballistic/caseless/wild_hunt,
- /obj/item/ammo_magazine/mfiftycalcaseless,
- /obj/item/ammo_magazine/mfiftycalcaseless
+ /obj/item/ammo_magazine/a12_7mm/wild_hunt,
+ /obj/item/ammo_magazine/a12_7mm/wild_hunt
),
)
@@ -287,150 +288,150 @@
return pick(
prob(5);list(
/obj/item/gun/ballistic/colt,
- /obj/item/ammo_magazine/m45,
- /obj/item/ammo_magazine/m45
+ /obj/item/ammo_magazine/a45,
+ /obj/item/ammo_magazine/a45
),
prob(4);list(
/obj/item/gun/ballistic/contender,
- /obj/item/ammo_magazine/s357,
- /obj/item/ammo_magazine/s357
+ /obj/item/ammo_magazine/a357/speedloader,
+ /obj/item/ammo_magazine/a357/speedloader
),
prob(3);list(
/obj/item/gun/ballistic/contender/tacticool,
- /obj/item/ammo_magazine/s357,
- /obj/item/ammo_magazine/s357
+ /obj/item/ammo_magazine/a357/speedloader,
+ /obj/item/ammo_magazine/a357/speedloader
),
prob(1);list(
/obj/item/gun/ballistic/contender/taj,
- /obj/item/ammo_magazine/s357,
- /obj/item/ammo_magazine/s357
+ /obj/item/ammo_magazine/a357/speedloader,
+ /obj/item/ammo_magazine/a357/speedloader
),
prob(2);list(
/obj/item/gun/ballistic/deagle,
- /obj/item/ammo_magazine/m44,
- /obj/item/ammo_magazine/m44
+ /obj/item/ammo_magazine/a44,
+ /obj/item/ammo_magazine/a44
),
prob(1);list(
/obj/item/gun/ballistic/deagle/camo,
- /obj/item/ammo_magazine/m44,
- /obj/item/ammo_magazine/m44
+ /obj/item/ammo_magazine/a44,
+ /obj/item/ammo_magazine/a44
),
prob(1);list(
/obj/item/gun/ballistic/deagle/gold,
- /obj/item/ammo_magazine/m44,
- /obj/item/ammo_magazine/m44
+ /obj/item/ammo_magazine/a44,
+ /obj/item/ammo_magazine/a44
),
prob(1);list(
/obj/item/gun/ballistic/deagle/taj,
- /obj/item/ammo_magazine/m44,
- /obj/item/ammo_magazine/m44
+ /obj/item/ammo_magazine/a44,
+ /obj/item/ammo_magazine/a44
),
prob(1);list(
/obj/item/gun/ballistic/derringer,
- /obj/item/ammo_magazine/s357,
- /obj/item/ammo_magazine/s357
+ /obj/item/ammo_magazine/a357/speedloader,
+ /obj/item/ammo_magazine/a357/speedloader
),
prob(1);list(
/obj/item/gun/ballistic/luger,
- /obj/item/ammo_magazine/m9mm/compact,
- /obj/item/ammo_magazine/m9mm/compact
+ /obj/item/ammo_magazine/a9mm/compact,
+ /obj/item/ammo_magazine/a9mm/compact
),
prob(1);list(
/obj/item/gun/ballistic/luger/brown,
- /obj/item/ammo_magazine/m9mm/compact,
- /obj/item/ammo_magazine/m9mm/compact
+ /obj/item/ammo_magazine/a9mm/compact,
+ /obj/item/ammo_magazine/a9mm/compact
),
prob(5);list(
/obj/item/gun/ballistic/sec,
- /obj/item/ammo_magazine/m45,
- /obj/item/ammo_magazine/m45
+ /obj/item/ammo_magazine/a45,
+ /obj/item/ammo_magazine/a45
),
prob(4);list(
/obj/item/gun/ballistic/sec/wood,
- /obj/item/ammo_magazine/m45,
- /obj/item/ammo_magazine/m45
+ /obj/item/ammo_magazine/a45,
+ /obj/item/ammo_magazine/a45
),
prob(5);list(
/obj/item/gun/ballistic/p92x,
- /obj/item/ammo_magazine/m9mm,
- /obj/item/ammo_magazine/m9mm
+ /obj/item/ammo_magazine/a9mm,
+ /obj/item/ammo_magazine/a9mm
),
prob(5);list(
/obj/item/gun/ballistic/r9,
- /obj/item/ammo_magazine/clip/c9mm,
- /obj/item/ammo_magazine/clip/c9mm
+ /obj/item/ammo_magazine/a9mm/clip,
+ /obj/item/ammo_magazine/a9mm/clip
),
prob(4);list(
/obj/item/gun/ballistic/p92x/brown,
- /obj/item/ammo_magazine/m9mm,
- /obj/item/ammo_magazine/m9mm
+ /obj/item/ammo_magazine/a9mm,
+ /obj/item/ammo_magazine/a9mm
),
prob(2);list(
/obj/item/gun/ballistic/p92x/large,
- /obj/item/ammo_magazine/m9mm/large,
- /obj/item/ammo_magazine/m9mm/large
+ /obj/item/ammo_magazine/a9mm/large,
+ /obj/item/ammo_magazine/a9mm/large
),
prob(5);list(
/obj/item/gun/ballistic/pistol,
- /obj/item/ammo_magazine/m9mm/compact,
- /obj/item/ammo_magazine/m9mm/compact
+ /obj/item/ammo_magazine/a9mm/compact,
+ /obj/item/ammo_magazine/a9mm/compact
),
prob(2);list(
/obj/item/gun/ballistic/silenced,
- /obj/item/ammo_magazine/m45,
- /obj/item/ammo_magazine/m45
+ /obj/item/ammo_magazine/a45,
+ /obj/item/ammo_magazine/a45
),
prob(2);list(
/obj/item/gun/ballistic/revolver,
- /obj/item/ammo_magazine/s357,
- /obj/item/ammo_magazine/s357
+ /obj/item/ammo_magazine/a357/speedloader,
+ /obj/item/ammo_magazine/a357/speedloader
),
prob(4);list(
/obj/item/gun/ballistic/revolver/deckard,
- /obj/item/ammo_magazine/s38,
- /obj/item/ammo_magazine/s38
+ /obj/item/ammo_magazine/a38/speedloader,
+ /obj/item/ammo_magazine/a38/speedloader
),
prob(4);list(
/obj/item/gun/ballistic/revolver/detective,
- /obj/item/ammo_magazine/s38,
- /obj/item/ammo_magazine/s38
+ /obj/item/ammo_magazine/a38/speedloader,
+ /obj/item/ammo_magazine/a38/speedloader
),
prob(2);list(
/obj/item/gun/ballistic/revolver/judge,
- /obj/item/ammo_magazine/clip/c12g,
- /obj/item/ammo_magazine/clip/c12g,
- /obj/item/ammo_magazine/clip/c12g
+ /obj/item/ammo_magazine/a12g/clip,
+ /obj/item/ammo_magazine/a12g/clip,
+ /obj/item/ammo_magazine/a12g/clip
),
prob(2);list(
/obj/item/gun/ballistic/revolver/lemat,
- /obj/item/ammo_magazine/s38,
- /obj/item/ammo_magazine/s38,
- /obj/item/ammo_magazine/clip/c12g
+ /obj/item/ammo_magazine/a38/speedloader,
+ /obj/item/ammo_magazine/a38/speedloader,
+ /obj/item/ammo_magazine/a12g/clip
),
prob(2);list(
/obj/item/gun/ballistic/revolver/mateba,
- /obj/item/ammo_magazine/s357,
- /obj/item/ammo_magazine/s357
+ /obj/item/ammo_magazine/a357/speedloader,
+ /obj/item/ammo_magazine/a357/speedloader
),
prob(1);list(
/obj/item/gun/ballistic/revolver/webley,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader
),
prob(2);list(
/obj/item/gun/ballistic/revolver/dirty_harry,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader
),
prob(1);list(
/obj/item/gun/ballistic/revolver/webley/auto,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader
),
prob(1);list(
/obj/item/gun/ballistic/colt/taj,
- /obj/item/ammo_magazine/m45,
- /obj/item/ammo_magazine/m45
+ /obj/item/ammo_magazine/a45,
+ /obj/item/ammo_magazine/a45
)
)
@@ -444,24 +445,24 @@
return pick(
prob(4);list(
/obj/item/gun/ballistic/shotgun/doublebarrel/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet
),
prob(3);list(
/obj/item/gun/ballistic/shotgun/doublebarrel/sawn,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet
),
prob(3);list(
/obj/item/gun/ballistic/shotgun/doublebarrel/quad,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet,
- /obj/item/ammo_magazine/clip/c12g/pellet
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet,
+ /obj/item/ammo_magazine/a12g/clip/pellet
),
prob(3);list(
/obj/item/gun/ballistic/shotgun/pump/slug,
diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm
index 54078e01f6a..d6e34c541f6 100644
--- a/code/game/objects/random/mapping.dm
+++ b/code/game/objects/random/mapping.dm
@@ -282,10 +282,10 @@
/obj/item/clothing/head/helmet/space/syndicate/black/red,
/obj/item/gun/ballistic/automatic/mini_uzi,
/obj/item/gun/ballistic/automatic/mini_uzi,
- /obj/item/ammo_magazine/m45uzi,
- /obj/item/ammo_magazine/m45uzi,
- /obj/item/ammo_magazine/m45uzi/empty,
- /obj/item/ammo_magazine/m45uzi/empty,
+ /obj/item/ammo_magazine/a45/uzi,
+ /obj/item/ammo_magazine/a45/uzi,
+ /obj/item/ammo_magazine/a45/uzi/empty,
+ /obj/item/ammo_magazine/a45/uzi/empty,
/obj/structure/closet/crate/plastic
),
prob(2);list(
@@ -299,8 +299,8 @@
/obj/item/clothing/suit/armor/vest,
/obj/item/gun/ballistic/garand,
/obj/item/gun/ballistic/garand,
- /obj/item/ammo_magazine/m762garand,
- /obj/item/ammo_magazine/m762garand,
+ /obj/item/ammo_magazine/a7_62mm/garand,
+ /obj/item/ammo_magazine/a7_62mm/garand,
/obj/structure/closet/crate/plastic
),
prob(2);list(
diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm
index f4aad4afb1d..6a874a3abae 100644
--- a/code/game/objects/random/misc.dm
+++ b/code/game/objects/random/misc.dm
@@ -879,49 +879,50 @@
/obj/random/ammo_all
name = "Random Ammunition (All)"
desc = "This is random ammunition. Spawns all ammo types."
- icon = 'icons/obj/ammo.dmi'
- icon_state = "666"
+
+ icon = 'icons/modules/projectiles/legacy/ammo_box.dmi'
+ icon_state = "orange"
/obj/random/ammo_all/item_to_spawn()
return pick(
prob(5);/obj/item/storage/box/shotgunammo,
prob(5);/obj/item/storage/box/shotgunshells,
- prob(5);/obj/item/ammo_magazine/clip/c762,
- prob(5);/obj/item/ammo_magazine/m380,
- prob(5);/obj/item/ammo_magazine/m45,
- prob(5);/obj/item/ammo_magazine/m9mm,
- prob(5);/obj/item/ammo_magazine/s38,
- prob(4);/obj/item/ammo_magazine/clip/c45,
- prob(4);/obj/item/ammo_magazine/clip/c9mm,
- prob(4);/obj/item/ammo_magazine/m45uzi,
- prob(4);/obj/item/ammo_magazine/m45uzi/wt274,
- prob(4);/obj/item/ammo_magazine/m9mml,
- prob(4);/obj/item/ammo_magazine/m9mmt,
- prob(4);/obj/item/ammo_magazine/m57x28mmp90,
- prob(4);/obj/item/ammo_magazine/m10mm,
- prob(4);/obj/item/ammo_magazine/m556/small,
- prob(3);/obj/item/ammo_magazine/clip/c10mm,
- prob(3);/obj/item/ammo_magazine/clip/c44,
- prob(3);/obj/item/ammo_magazine/s44,
- prob(3);/obj/item/ammo_magazine/m762,
- prob(3);/obj/item/ammo_magazine/m556,
+ prob(5);/obj/item/ammo_magazine/a7_62mm/clip,
+ prob(5);/obj/item/ammo_magazine/a38,
+ prob(5);/obj/item/ammo_magazine/a45,
+ prob(5);/obj/item/ammo_magazine/a9mm,
+ prob(5);/obj/item/ammo_magazine/a38/speedloader,
+ prob(4);/obj/item/ammo_magazine/a45/clip,
+ prob(4);/obj/item/ammo_magazine/a9mm/clip,
+ prob(4);/obj/item/ammo_magazine/a45/uzi,
+ prob(4);/obj/item/ammo_magazine/a45/wt274,
+ prob(4);/obj/item/ammo_magazine/a9mm,
+ prob(4);/obj/item/ammo_magazine/a9mm/top_mount,
+ prob(4);/obj/item/ammo_magazine/a5_7mm/p90,
+ prob(4);/obj/item/ammo_magazine/a10mm,
+ prob(4);/obj/item/ammo_magazine/a5_56mm/small,
+ prob(3);/obj/item/ammo_magazine/a10mm/clip,
+ prob(3);/obj/item/ammo_magazine/a44/clip,
+ prob(3);/obj/item/ammo_magazine/a44/speedloader,
+ prob(3);/obj/item/ammo_magazine/a7_62mm,
+ prob(3);/obj/item/ammo_magazine/a5_56mm,
prob(3);/obj/item/cell/device/weapon,
- prob(2);/obj/item/ammo_magazine/m44,
- prob(2);/obj/item/ammo_magazine/s357,
- prob(2);/obj/item/ammo_magazine/m762m,
- prob(2);/obj/item/ammo_magazine/clip/c12g,
- prob(2);/obj/item/ammo_magazine/clip/c12g/pellet,
- prob(1);/obj/item/ammo_magazine/m45tommy,
+ prob(2);/obj/item/ammo_magazine/a44,
+ prob(2);/obj/item/ammo_magazine/a357/speedloader,
+ prob(2);/obj/item/ammo_magazine/a7_62mm,
+ prob(2);/obj/item/ammo_magazine/a12g/clip,
+ prob(2);/obj/item/ammo_magazine/a12g/clip/pellet,
+ prob(1);/obj/item/ammo_magazine/a45/tommy,
// prob(1);/obj/item/ammo_magazine/m95,
prob(1);/obj/item/ammo_casing/rocket,
prob(1);/obj/item/storage/box/sniperammo,
prob(1);/obj/item/storage/box/flashshells,
prob(1);/obj/item/storage/box/beanbags,
prob(1);/obj/item/storage/box/stunshells,
- prob(1);/obj/item/ammo_magazine/mtg,
- prob(1);/obj/item/ammo_magazine/m12gdrum,
- prob(1);/obj/item/ammo_magazine/m12gdrum/pellet,
- prob(1);/obj/item/ammo_magazine/m45tommydrum,
+ prob(1);/obj/item/ammo_magazine/a7_92mm,
+ prob(1);/obj/item/ammo_magazine/a12g/drum,
+ prob(1);/obj/item/ammo_magazine/a12g/drum/pellet,
+ prob(1);/obj/item/ammo_magazine/a45/tommy/drum,
)
/obj/random/cargopod
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/explorer.dm b/code/game/objects/structures/crates_lockers/closets/secure/explorer.dm
index 2ef79c88ac1..5e94c4ef3de 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/explorer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/explorer.dm
@@ -141,8 +141,8 @@
/obj/item/material/knife/machete/deluxe,
/obj/item/gun/energy/frontier/locked/carbine,
/obj/item/gun/ballistic/ntles/pathfinder,
- /obj/item/ammo_magazine/m57x28mm/ntles,
- /obj/item/ammo_magazine/m57x28mm/ntles,
+ /obj/item/ammo_magazine/a5_7mm/nt_les,
+ /obj/item/ammo_magazine/a5_7mm/nt_les,
/obj/item/clothing/accessory/holster/machete,
/obj/item/clothing/accessory/holster/leg,
/obj/item/reagent_containers/food/snacks/liquid,
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index 6907b9d21a7..dab0d7d5a4e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -68,7 +68,7 @@
req_one_access = list(ACCESS_GENERAL_EXPLORER,ACCESS_SECURITY_BRIG)
starts_with = list(
- /obj/item/ammo_magazine/clip/c762/hunter = 9,
+ /obj/item/ammo_magazine/a7_62mm/clip/hunter = 9,
/obj/item/gun/ballistic/shotgun/pump/rifle = 2)
/obj/structure/closet/secure_closet/guncabinet/rifle/Initialize(mapload)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 970aeacdb3d..dfe4064a21e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -214,14 +214,14 @@
/obj/item/reagent_containers/spray/pepper,
/obj/item/flash,
/obj/item/gun/ballistic/revolver/consul,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44,
- /obj/item/ammo_magazine/s44/rubber,
- /obj/item/ammo_magazine/s44/rubber,
- /obj/item/ammo_magazine/s44/rubber,
- /obj/item/ammo_magazine/s44/empty,
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader,
+ /obj/item/ammo_magazine/a44/speedloader/rubber,
+ /obj/item/ammo_magazine/a44/speedloader/rubber,
+ /obj/item/ammo_magazine/a44/speedloader/rubber,
+ /obj/item/ammo_magazine/a44/speedloader/empty,
/obj/item/melee/telebaton,
/obj/item/gps/command/blueshield,
@@ -360,8 +360,8 @@
/obj/item/clothing/accessory/badge/holo/detective,
/obj/item/clothing/gloves/forensic,
/obj/item/gun/ballistic/revolver/detective45,
- /obj/item/ammo_magazine/s45/rubber,
- /obj/item/ammo_magazine/s45/rubber,
+ /obj/item/ammo_magazine/a45/speedloader/rubber,
+ /obj/item/ammo_magazine/a45/speedloader/rubber,
/obj/item/reagent_containers/spray/pepper,
/obj/item/storage/belt/detective,
/obj/item/storage/box/evidence,
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 513d3867a2c..e0b788d4508 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -35,7 +35,7 @@
desc = "It's a storage unit for nuclear-operative gear."
starts_with = list(
- /obj/item/ammo_magazine/m10mm = 5,
+ /obj/item/ammo_magazine/a10mm = 5,
/obj/item/storage/box/handcuffs,
/obj/item/storage/box/flashbangs,
/obj/item/gun/energy/gun = 5,
diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm
index 8f87d062a4d..a18bd0046e6 100644
--- a/code/game/objects/structures/loot_piles.dm
+++ b/code/game/objects/structures/loot_piles.dm
@@ -254,7 +254,6 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/reagent_containers/food/snacks/mysterysoup,
/obj/item/reagent_containers/food/snacks/hotdog,
/obj/item/pizzabox,
- /obj/item/ammo_casing/spent,
/obj/item/stack/rods{amount = 5},
/obj/item/stack/material/steel{amount = 5},
/obj/item/stack/material/cardboard{amount = 5},
@@ -1082,7 +1081,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
)
uncommon_loot = list(
- /obj/item/ammo_magazine/m75,
+ /obj/item/ammo_magazine/a75,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar
)
diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm
index 3d628ac9890..5658cd48069 100644
--- a/code/modules/awaymissions/loot_vr.dm
+++ b/code/modules/awaymissions/loot_vr.dm
@@ -181,35 +181,35 @@
var/new_ammo = pick( // Copied from Random.dm
prob(5);/obj/item/storage/box/shotgunammo,\
prob(5);/obj/item/storage/box/shotgunshells,\
- prob(5);/obj/item/ammo_magazine/s357,\
- prob(5);/obj/item/ammo_magazine/clip/c762,\
- prob(5);/obj/item/ammo_magazine/m45,\
- prob(5);/obj/item/ammo_magazine/m45/rubber,\
- prob(5);/obj/item/ammo_magazine/s38,\
- prob(5);/obj/item/ammo_magazine/s38/rubber,\
+ prob(5);/obj/item/ammo_magazine/a357/speedloader,\
+ prob(5);/obj/item/ammo_magazine/a7_62mm/clip,\
+ prob(5);/obj/item/ammo_magazine/a45,\
+ prob(5);/obj/item/ammo_magazine/a45/rubber,\
+ prob(5);/obj/item/ammo_magazine/a38/speedloader,\
+ prob(5);/obj/item/ammo_magazine/a38/speedloader/rubber,\
prob(5);/obj/item/storage/box/flashbangs,\
- prob(5);/obj/item/ammo_magazine/m556,\
- prob(4);/obj/item/ammo_magazine/clip/c545,\
- prob(4);/obj/item/ammo_magazine/clip/c45,\
- prob(4);/obj/item/ammo_magazine/clip/c9mm,\
- prob(4);/obj/item/ammo_magazine/m45uzi,\
- prob(4);/obj/item/ammo_magazine/m556/ext,\
- prob(4);/obj/item/ammo_magazine/m9mm,\
- prob(4);/obj/item/ammo_magazine/m9mml,\
- prob(4);/obj/item/ammo_magazine/m9mmt,\
- prob(4);/obj/item/ammo_magazine/m9mmt/rubber,\
- prob(4);/obj/item/ammo_magazine/m10mm,\
- prob(4);/obj/item/ammo_magazine/m57x28mmp90,\
+ prob(5);/obj/item/ammo_magazine/a5_56mm,\
+ prob(4);/obj/item/ammo_magazine/a5_56mm/clip,\
+ prob(4);/obj/item/ammo_magazine/a45/clip,\
+ prob(4);/obj/item/ammo_magazine/a9mm/clip,\
+ prob(4);/obj/item/ammo_magazine/a45/uzi,\
+ prob(4);/obj/item/ammo_magazine/a5_56mm/ext,\
+ prob(4);/obj/item/ammo_magazine/a9mm,\
+ prob(4);/obj/item/ammo_magazine/a9mm/advanced_smg,\
+ prob(4);/obj/item/ammo_magazine/a9mm/top_mount,\
+ prob(4);/obj/item/ammo_magazine/a9mm/top_mount/rubber,\
+ prob(4);/obj/item/ammo_magazine/a10mm,\
+ prob(4);/obj/item/ammo_magazine/a5_7mm/p90,\
/* prob(4);/obj/item/ammo_magazine/m14,\
prob(4);/obj/item/ammo_magazine/m14/large,\*/
- prob(4);/obj/item/ammo_magazine/m556/ext,
- prob(4);/obj/item/ammo_magazine/m762,\
- prob(4);/obj/item/ammo_magazine/m556/ext,\
- prob(3);/obj/item/ammo_magazine/clip/c10mm,\
- prob(3);/obj/item/ammo_magazine/clip/c44,\
- prob(3);/obj/item/ammo_magazine/m556,\
- prob(2);/obj/item/ammo_magazine/m44,\
- prob(2);/obj/item/ammo_magazine/m556,\
+ prob(4);/obj/item/ammo_magazine/a5_56mm/ext,
+ prob(4);/obj/item/ammo_magazine/a7_62mm,\
+ prob(4);/obj/item/ammo_magazine/a5_56mm/ext,\
+ prob(3);/obj/item/ammo_magazine/a10mm/clip,\
+ prob(3);/obj/item/ammo_magazine/a44/clip,\
+ prob(3);/obj/item/ammo_magazine/a5_56mm,\
+ prob(2);/obj/item/ammo_magazine/a44,\
+ prob(2);/obj/item/ammo_magazine/a5_56mm,\
prob(1);/obj/item/storage/box/frags,\
/* prob(1);/obj/item/ammo_magazine/m95,\ */
prob(1);/obj/item/ammo_casing/rocket,\
@@ -219,9 +219,9 @@
prob(1);/obj/item/storage/box/practiceshells,\
prob(1);/obj/item/storage/box/stunshells,\
prob(1);/obj/item/storage/box/blanks,\
- prob(1);/obj/item/ammo_magazine/mtg,\
- prob(1);/obj/item/ammo_magazine/m45tommydrum,\
- prob(1);/obj/item/ammo_magazine/m45tommy)
+ prob(1);/obj/item/ammo_magazine/a7_92mm,\
+ prob(1);/obj/item/ammo_magazine/a45/tommy/drum,\
+ prob(1);/obj/item/ammo_magazine/a45/tommy)
new new_ammo(C)
if("spacesuit")
var/obj/structure/closet/syndicate/C = new(src.loc)
diff --git a/code/modules/examine/descriptions/weapons.dm b/code/modules/examine/descriptions/weapons.dm
index 00b5c0d192f..835d35882dc 100644
--- a/code/modules/examine/descriptions/weapons.dm
+++ b/code/modules/examine/descriptions/weapons.dm
@@ -36,11 +36,6 @@
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. Unlike most weapons, this weapon recharges itself."
-/obj/item/gun/ballistic
- description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
- then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \
- will tell you what caliber you need."
-
/obj/item/gun/energy/chameleon
description_info = null //The chameleon gun adopts the description_info of the weapon it is impersonating as, to make meta-ing harder.
description_antag = "This gun is actually a hologram projector that can alter its appearance to mimick other weapons. To change the appearance, use \
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 6dcd35967de..e553eba475a 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -327,7 +327,7 @@ proc/check_panel(mob/M)
qdel(O)
return
-GLOBAL_LIST_INIT(non_fakeattack_weapons, list(/obj/item/gun/ballistic, /obj/item/ammo_magazine/s357,\
+GLOBAL_LIST_INIT(non_fakeattack_weapons, list(/obj/item/gun/ballistic, /obj/item/ammo_magazine/a357/speedloader,\
/obj/item/gun/energy/crossbow, /obj/item/melee/energy/sword,\
/obj/item/storage/box/syndicate, /obj/item/storage/box/emps,\
/obj/item/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
diff --git a/code/modules/materials/definitions/misc/wax.dm b/code/modules/materials/definitions/misc/wax.dm
index 8cc4191d3a4..eb574802497 100644
--- a/code/modules/materials/definitions/misc/wax.dm
+++ b/code/modules/materials/definitions/misc/wax.dm
@@ -39,7 +39,7 @@
)
. += create_stack_recipe_datum(
name = "wax globule",
- product = /obj/item/ammo_casing/organic/wax,
+ product = /obj/item/ammo_casing/biomatter/wax,
cost = 1,
)
. += create_stack_recipe_datum(
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
index 3992079f92b..e9e9ee7e338 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
@@ -190,8 +190,8 @@
reload_max = 12
ai_holder_type = /datum/ai_holder/polaris/simple_mob/merc/ranged
loot_list = list(/obj/item/gun/ballistic/clown_pistol = 100,
- /obj/item/ammo_magazine/mcompressedbio = 30,
- /obj/item/ammo_magazine/mcompressedbio = 30
+ /obj/item/ammo_magazine/biomatter = 30,
+ /obj/item/ammo_magazine/biomatter = 30
)
//Voidsuit Variants
@@ -267,8 +267,8 @@
corpse = /obj/spawner/corpse/clown/clownop/space
loot_list = list(/obj/item/gun/ballistic/automatic/clown_rifle = 100,
- /obj/item/ammo_magazine/mcompressedbio/large/banana = 30,
- /obj/item/ammo_magazine/mcompressedbio/large/banana = 30
+ /obj/item/ammo_magazine/biomatter/large/banana = 30,
+ /obj/item/ammo_magazine/biomatter/large/banana = 30
)
base_attack_cooldown = 5 // Two attacks a second or so.
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
index bfac17fedee..59acf04dd4d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
@@ -641,8 +641,8 @@
corpse = /obj/spawner/corpse/vox/pirate
loot_list = list(/obj/item/gun/ballistic/shotgun/pump/rifle/vox_hunting = 100,
- /obj/item/ammo_magazine/clip/c762 = 30,
- /obj/item/ammo_magazine/clip/c762 = 30
+ /obj/item/ammo_magazine/a7_62mm/clip = 30,
+ /obj/item/ammo_magazine/a7_62mm/clip = 30
)
ai_holder_type = /datum/ai_holder/polaris/simple_mob/merc
@@ -727,8 +727,8 @@
ai_holder_type = /datum/ai_holder/polaris/simple_mob/merc/ranged/shotgun
corpse = /obj/spawner/corpse/vox/boarder_r
loot_list = list(/obj/item/gun/ballistic/shotgun/pump/combat = 100,
- /obj/item/ammo_magazine/m12gdrum = 30,
- /obj/item/ammo_magazine/m12gdrum = 30
+ /obj/item/ammo_magazine/a12g/drum = 30,
+ /obj/item/ammo_magazine/a12g/drum = 30
)
needs_reload = TRUE
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm
index 618e4efce10..7de7e01468e 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm
@@ -41,7 +41,6 @@
icon_living = "russianranged"
projectiletype = /obj/projectile/bullet
- casingtype = /obj/item/ammo_casing/spent
projectilesound = 'sound/weapons/Gunshot4.ogg'
loot_list = list(/obj/item/gun/ballistic/revolver/mateba = 100)
diff --git a/code/modules/projectiles/ammunition/ammo_caliber.dm b/code/modules/projectiles/ammunition/ammo_caliber.dm
new file mode 100644
index 00000000000..4bc9635dff4
--- /dev/null
+++ b/code/modules/projectiles/ammunition/ammo_caliber.dm
@@ -0,0 +1,69 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+GLOBAL_LIST_INIT(calibers, init_calibers())
+
+/proc/init_calibers()
+ . = list()
+ GLOB.calibers = .
+ for(var/datum/ammo_caliber/path as anything in subtypesof(/datum/ammo_caliber))
+ if(initial(path.abstract_type) == path)
+ continue
+ var/datum/ammo_caliber/created = new path
+ .[created.type] = created
+ if(created.caliber)
+ if(.[created.caliber])
+ stack_trace("collision between [path] and [.[created.caliber]:type] for caliber [created.caliber]")
+ .[created.caliber] = created
+
+/proc/resolve_caliber(datum/ammo_caliber/caliberlike)
+ RETURN_TYPE(/datum/ammo_caliber)
+ if(istext(caliberlike))
+ return GLOB.calibers[caliberlike]
+ if(ispath(caliberlike))
+ return GLOB.calibers[caliberlike]
+ if(istype(caliberlike))
+ return caliberlike
+
+/**
+ * desc wip
+ *
+ * welcome to hell: brought to you by a webdev
+ *
+ * naming convention: c[whatever] for the caliber, subtype to a[whatever] for different ammo lengths
+ *
+ * direct subtypes of /datum/ammo_caliber should be for diameter, usually,
+ * and length subtypes go from the diameter subtype.
+ */
+/datum/ammo_caliber
+ abstract_type = /datum/ammo_caliber
+ /// caliber string
+ var/caliber
+ /// does dynamic measurements
+ var/measured
+ /// width in millimeters
+ var/diameter
+ /// length in millimeters, if known; if not known / unbounded, this is null
+ var/length
+
+/datum/ammo_caliber/New()
+ if(isnull(measured))
+ measured = !isnull(diameter) && !isnull(length)
+
+/**
+ * checks if other caliber is smaller or equal to this one
+ */
+/datum/ammo_caliber/proc/smaller_or_equal(datum/ammo_caliber/other)
+ return other.caliber == caliber || (measured && other.measured && ((other.diameter <= diameter) && (other.length <= length)))
+
+/**
+ * checks if other caliber is same diameter as this one
+ */
+/datum/ammo_caliber/proc/equivalent_diameter(datum/ammo_caliber/other)
+ return other.caliber == caliber || (measured && other.measured && (other.diameter == diameter))
+
+/**
+ * checks if other caliber is equivalent to us
+ */
+/datum/ammo_caliber/proc/equivalent(datum/ammo_caliber/other)
+ return other.caliber == caliber || (measured && other.measured && (other.diameter == diameter) && (other.length == length))
diff --git a/code/modules/projectiles/ammunition/ammo_casing.dm b/code/modules/projectiles/ammunition/ammo_casing.dm
index a5131b48e33..ce1f082a859 100644
--- a/code/modules/projectiles/ammunition/ammo_casing.dm
+++ b/code/modules/projectiles/ammunition/ammo_casing.dm
@@ -1,31 +1,37 @@
/obj/item/ammo_casing
name = "bullet casing"
desc = "A bullet casing."
- icon = 'icons/obj/ammo.dmi'
- icon_state = "s-casing"
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
slot_flags = SLOT_BELT | SLOT_EARS
item_flags = ITEM_EASY_LATHE_DECONSTRUCT | ITEM_ENCUMBERS_WHILE_HELD
throw_force = 1
w_class = WEIGHT_CLASS_TINY
- preserve_item = 1
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
- //! Casing
+ //* Casing
/// casing flags - see __DEFINES/projectiles/ammo_casing.dm
var/casing_flags = NONE
+ /// what types of primer we react to
+ var/casing_primer = CASING_PRIMER_CHEMICAL
/// projectile type
var/projectile_type
+ /// caliber - set to typepath of datum for compile checking
+ ///
+ /// * may be typepath of caliber (recommended)
+ /// * may be instance of caliber (not recommended, but allowable for special cases)
+ /// * may NOT be string of caliber, currently
+ var/regex_this_caliber
/// stored projectile - either null for un-init'd, FALSE for empty, or an instance
- VAR_PRIVATE/obj/projectile/stored
+ VAR_PROTECTED/obj/projectile/stored
- //! Icon
+ //* Icon
/// switch to "[initial(state)]-spent" after expenditure
var/icon_spent = TRUE
//! unsorted / legacy
var/leaves_residue = 1
- var/caliber = "" //Which kind of guns it can be loaded into
var/fall_sounds = list('sound/weapons/guns/casingfall1.ogg','sound/weapons/guns/casingfall2.ogg','sound/weapons/guns/casingfall3.ogg')
/obj/item/ammo_casing/Initialize(mapload)
@@ -132,3 +138,18 @@
mag.quick_gather(get_turf(src), user)
return CLICKCHAIN_DID_SOMETHING | CLICKCHAIN_DO_NOT_PROPAGATE
return ..()
+
+//* Caliber *//
+
+/obj/item/ammo_casing/proc/get_caliber_string()
+ return resolve_caliber(regex_this_caliber)?.caliber
+
+/obj/item/ammo_casing/proc/get_caliber()
+ RETURN_TYPE(/datum/ammo_caliber)
+ return resolve_caliber(regex_this_caliber)
+
+//* Generic - Spent Subtype *//
+
+/obj/item/ammo_casing/spent
+ icon_state = /obj/item/ammo_casing::icon_state + "-spent"
+ stored = FALSE
diff --git a/code/modules/projectiles/ammunition/ammo_magazine.dm b/code/modules/projectiles/ammunition/ammo_magazine.dm
new file mode 100644
index 00000000000..8c8b9f9ba86
--- /dev/null
+++ b/code/modules/projectiles/ammunition/ammo_magazine.dm
@@ -0,0 +1,432 @@
+/**
+ * # Magazines
+ *
+ * A holder for ammo casings.
+ *
+ * * Holds logic required to lazy-init casings, be inserted into guns, etc.
+ */
+/obj/item/ammo_magazine
+ name = "magazine"
+ desc = "A magazine for some kind of gun."
+ item_flags = ITEM_EASY_LATHE_DECONSTRUCT | ITEM_ENCUMBERS_WHILE_HELD
+ slot_flags = SLOT_BELT
+
+ icon = 'icons/system/error_32x32.dmi'
+ inhand_state = "syringe_kit"
+ inhand_default_type = INHAND_DEFAULT_ICON_STORAGE
+ worn_render_flags = WORN_RENDER_INHAND_ALLOW_DEFAULT
+
+ materials_base = list(MAT_STEEL = 500)
+ throw_force = 5
+ w_class = WEIGHT_CLASS_SMALL
+ throw_speed = 4
+ throw_range = 10
+ preserve_item = 1
+
+ //* dynamic config; can be changed at runtime freely
+ /// what types of magazines are we?
+ ///
+ /// * this is a bitfield
+ var/magazine_type = MAGAZINE_TYPE_NORMAL
+
+ //* for magazines
+ /// magazine type - must match gun's to be fitted into it, if gun's is
+ /// setting this to a gun's typepath is allowed, this is an arbitrary field.
+ // todo: impl
+ var/magazine_restrict
+ /// considered an extended magazine for guns that support rendering extended magazines?
+ // todo: impl
+ var/magazine_extended = FALSE
+ // todo: magazine_insert_delay
+ // todo: magazine_remove_delay
+
+ //* for speedloaders
+ /// inherent speedloader delay, added to gun's speedloaders_delay
+ // todo: impl
+ var/speedloader_delay = 0
+ /// speedloader type - must match gun's to fit ammo in, if gun's is set
+ // todo: impl
+ var/speedloader_restrict
+
+ //* for stripper clips / usage as single loader
+ // todo: clip_load_delay
+ // todo: clip_restrict
+
+ //* loading *//
+ /// sound for loading a piece of ammo
+ var/load_sound = 'sound/weapons/flipblade.ogg'
+
+ //* ammo storage *//
+ /// max ammo in us
+ var/ammo_max = 7
+ /// currently stored ammo; defaults to ammo_max if unset
+ /// this is used to detect base material costs too, so
+ /// if this is not set properly or you're abusing ammo_internal, bad stuff happens
+ // todo: way to use a different count for base material cost detection
+ var/ammo_current
+ /// can bullets be removed?
+ var/ammo_removable = TRUE
+ /// ammo list
+ /// only instantiated when we need to for memory reasons
+ /// should not be directly manipulated unless you know what you're doing.
+ ///
+ /// spec:
+ /// ammo_preload is what 'current ammo' is, type-wise
+ /// ammo_internal is considered the list of 1 to n casings infront of ammo_current.
+ /// index 1 is the bottom, index ammo_internal.len is the top of the magazine.
+ /// peek/draw will peek/draw the last index first all the way to the first, and after that,
+ /// ammo_current is considered the 'reserve' pool (as just a number).
+ var/list/ammo_internal
+ /// caliber - set to typepath to init
+ var/ammo_caliber
+ /// preloaded ammo type
+ var/ammo_preload
+ /// if set, only loads ammo of this type
+ var/ammo_type
+ /// if set, doesn't allow subtypes
+ var/ammo_picky = FALSE
+ /// init all contents on initialize instead of lazy-drawing
+ ///
+ /// * used for things like microbatteries / legacy content
+ var/ammo_legacy_init_everything = FALSE
+
+ //* Rendering
+ /// use default rendering system
+ /// in state mode, we will be "[base_icon_state]-[count]", from 0 to count (0 for empty)
+ /// in segements mode, we will repeatedly add "[base_icon_state]-ammo" with given offsets.
+ /// overlay mode is not supported
+ var/rendering_system = GUN_RENDERING_DISABLED
+ /// number of states
+ var/rendering_count = 0
+ /// used internally to avoid appearance churn
+ VAR_PRIVATE/rendering_count_current
+ /// for offset mode: initial x offset
+ var/rendering_segment_x_start = 0
+ /// for offset mode: initial y offset
+ var/rendering_segment_y_start = 0
+ /// for offset mode: x offset
+ var/rendering_segment_x_offset = 0
+ /// for offset mode: y offset
+ var/rendering_segment_y_offset = 0
+ /// display special "[base_icon_state]-empty" if count == 0
+ var/rendering_segment_use_empty = FALSE
+ /// add a specific overlay as "[base_icon_state]-[state]", useful for denoting different magazines
+ /// that look similar with a stripe
+ var/rendering_static_overlay
+
+/obj/item/ammo_magazine/Initialize(mapload)
+ . = ..()
+
+ pixel_x = rand(-5, 5)
+ pixel_y = rand(-5, 5)
+
+ if(!isnull(rendering_static_overlay))
+ add_overlay(rendering_static_overlay, TRUE)
+
+ if(ammo_legacy_init_everything)
+ instantiate_internal_list()
+ if(isnull(ammo_current))
+ ammo_current = ammo_max
+
+ update_icon()
+
+/obj/item/ammo_magazine/get_containing_worth(flags)
+ . = ..()
+ var/obj/item/ammo_casing/ammo_casted = ammo_type
+ . += (isnull(ammo_current)? ammo_max : ammo_current) * initial(ammo_casted.worth_intrinsic)
+
+/obj/item/ammo_magazine/detect_material_base_costs()
+ . = ..()
+ if(isnull(ammo_type))
+ return
+ var/shell_amount = isnull(ammo_current)? ammo_max : ammo_current
+ if(!shell_amount)
+ return
+ var/obj/item/ammo_casing/casing = new ammo_type
+ if(!istype(casing))
+ qdel(casing)
+ return
+ var/list/adding = casing.detect_material_base_costs()
+ qdel(casing)
+ for(var/key in adding)
+ .[key] += adding[key] * shell_amount
+
+/obj/item/ammo_magazine/examine(mob/user, dist)
+ . = ..()
+ var/amount_left = amount_remaining()
+ . += "There [(amount_left == 1)? "is" : "are"] [amount_left] round\s left!"
+
+/**
+ * transfer as many rounds to another magazine as possible
+ *
+ * * This proc must do safety checks like caliber. The receiving side does not!
+ *
+ * @params
+ * * receiver - receiving mag
+ * * update_icon - update icons for both us and receiver
+ *
+ * @return rounds transferred
+ */
+/obj/item/ammo_magazine/proc/transfer_rounds_to(obj/item/ammo_magazine/receiver, update_icon)
+ . = 0
+ var/amount_missing = receiver.amount_missing()
+ // todo: mixed caliber support
+ if(!receiver.loads_caliber(ammo_caliber))
+ return
+ for(var/i in 1 to min(amount_missing, amount_remaining()))
+ receiver.push(pop(receiver))
+ ++.
+ update_icon()
+ receiver.update_icon()
+
+/**
+ * create casing when we draw into non-instantiated part of the mag
+ */
+/obj/item/ammo_magazine/proc/instantiate_casing(atom/newloc)
+ return new ammo_preload(newloc)
+
+/**
+ * instantiate the entire internal ammo list
+ *
+ * * DO NOT USE UNLESS YOU KNOW WHAT YOU ARE DOING.
+ * caliber = "nsfw"
+
+ * @return rounds created
+ */
+/obj/item/ammo_magazine/proc/instantiate_internal_list()
+ LAZYINITLIST(ammo_internal)
+ var/existing = length(ammo_internal)
+ if(existing > ammo_max || !ammo_preload)
+ ammo_current = 0
+ return 0
+ var/list/adding = list()
+ for(var/i in 1 to min(ammo_current, ammo_max - existing))
+ adding += instantiate_casing()
+ . = length(adding)
+ ammo_current = 0
+ ammo_internal += adding
+
+/**
+ * can load a round
+ *
+ * @return null for success, a string describing why not otherwise.
+ */
+/obj/item/ammo_magazine/proc/why_cant_load_casing(obj/item/ammo_casing/casing)
+ if(!loads_caliber(casing.regex_this_caliber))
+ return "mismatched caliber"
+ if(ammo_type && (ammo_picky ? casing.type != ammo_type : !istype(casing, ammo_type)))
+ return "mismatched ammo"
+
+/obj/item/ammo_magazine/on_attack_self(datum/event_args/actor/e_args)
+ . = ..()
+ if(.)
+ return
+ if(!ammo_removable)
+ return
+ . = TRUE
+ if(!amount_remaining())
+ e_args.chat_feedback(SPAN_WARNING("[src] is empty."), src)
+ return
+ e_args.chat_feedback(SPAN_NOTICE("You remove a round from [src]."), src)
+ var/obj/item/ammo_casing/casing = pop(src)
+ e_args.performer.put_in_hands_or_drop(casing)
+
+/obj/item/ammo_magazine/on_attack_hand(datum/event_args/actor/clickchain/e_args)
+ . = ..()
+ if(.)
+ return
+ if(!e_args.performer.is_holding_inactive(src))
+ return
+ if(!ammo_removable)
+ return
+ . = TRUE
+ if(!amount_remaining())
+ e_args.chat_feedback(SPAN_WARNING("[src] is empty."), src)
+ return
+ e_args.chat_feedback(SPAN_NOTICE("You remove a round from [src]."), src)
+ var/obj/item/ammo_casing/casing = pop(src)
+ e_args.performer.put_in_hands_or_drop(casing)
+
+/obj/item/ammo_magazine/attackby(obj/item/I, mob/living/user, list/params, clickchain_flags, damage_multiplier)
+ if(istype(I, /obj/item/ammo_casing))
+ var/obj/item/ammo_casing/casing = I
+ if(!isnull(why_cant_load_casing(casing)))
+ to_chat(user, SPAN_WARNING("[I] doesn't fit into [src]!"))
+ return CLICKCHAIN_DO_NOT_PROPAGATE
+ if(!amount_missing())
+ to_chat(user, SPAN_WARNING("[src] is full."))
+ return CLICKCHAIN_DO_NOT_PROPAGATE
+ if(!user.temporarily_remove_from_inventory(casing, user = user))
+ to_chat(user, SPAN_WARNING("[I] is stuck to your hand!"))
+ return CLICKCHAIN_DO_NOT_PROPAGATE
+ if(!push(casing, update_icon = TRUE))
+ to_chat(user, SPAN_WARNING("You fail to insert [I] into [src]!"))
+ return
+ // todo: variable load sounds
+ playsound(src, load_sound, 50, 1)
+ return CLICKCHAIN_DO_NOT_PROPAGATE | CLICKCHAIN_DID_SOMETHING
+ else if(istype(I, /obj/item/ammo_magazine))
+ var/obj/item/ammo_magazine/enemy = I
+ var/amount_transferred = enemy.transfer_rounds_to(src, update_icon = TRUE)
+ if(!amount_transferred)
+ to_chat(user, SPAN_WARNING("You fail to transfer any rounds from [I] to [src]."))
+ return CLICKCHAIN_DO_NOT_PROPAGATE
+ else
+ to_chat(user, SPAN_NOTICE("You transfer [amount_transferred] rounds from [I] to [src]."))
+ return CLICKCHAIN_DO_NOT_PROPAGATE | CLICKCHAIN_DID_SOMETHING
+ else
+ return ..()
+
+/**
+ * quickly gathers stuff from turf
+ * does not sainty check
+ *
+ * @params
+ * * where - the turf
+ * * user - (optional) who's doing it
+ *
+ * @return number of rounds gathered
+ */
+/obj/item/ammo_magazine/proc/quick_gather(turf/where, mob/user)
+ . = 0
+ var/needed
+ if((needed = amount_remaining()) >= ammo_max)
+ user?.action_feedback(SPAN_WARNING("[src] is full."), src)
+ return
+ // todo: de-instantiate unmodified rounds
+ for(var/obj/item/ammo_casing/casing in where)
+ if(. > needed)
+ break
+ if(!casing.loaded())
+ continue
+ if(!isnull(why_cant_load_casing(casing)))
+ continue
+ if(!push(casing, FALSE))
+ continue
+ ++.
+ if(.)
+ update_icon()
+ user?.action_feedback(SPAN_NOTICE("You collect [.] rounds."), src)
+ else
+ user?.action_feedback(SPAN_WARNING("You fail to collect anything."), src)
+
+/obj/item/ammo_magazine/update_icon(updates)
+ if(rendering_system == GUN_RENDERING_DISABLED)
+ return ..()
+ cut_overlays()
+ var/count = CEILING(amount_remaining() / ammo_max * rendering_count, 1)
+ if(count == rendering_count_current)
+ return
+ rendering_count_current = count
+ switch(rendering_system)
+ if(GUN_RENDERING_STATES)
+ icon_state = "[base_icon_state]-[count]"
+ if(GUN_RENDERING_SEGMENTS)
+ if(count == 0)
+ if(rendering_segment_use_empty)
+ add_overlay("[base_icon_state]-empty")
+ else
+ var/px = rendering_segment_x_start
+ var/py = rendering_segment_y_start
+ for(var/i in 1 to count)
+ var/image/seg = image(icon, icon_state = "[base_icon_state]-ammo")
+ seg.pixel_x = px
+ seg.pixel_y = py
+ px += rendering_segment_x_offset
+ py += rendering_segment_y_offset
+ return ..()
+
+//* Accessors - Top of Mag *//
+//* This is the preferred way to interact with a magazine. *//
+
+/**
+ * peek top ammo casing
+ */
+/obj/item/ammo_magazine/proc/peek()
+ RETURN_TYPE(/obj/item/ammo_casing)
+ if(!length(ammo_internal))
+ // list empty, see if we have one to inject
+ if(!ammo_current || !ammo_preload)
+ // we're empty
+ return
+ var/obj/item/ammo_casing/created = instantiate_casing()
+ if(isnull(ammo_internal))
+ ammo_internal = list(created)
+ else
+ ammo_internal += created
+ --ammo_current
+ return created
+ return ammo_internal[length(ammo_internal)]
+
+/**
+ * get and eject top casing
+ */
+/obj/item/ammo_magazine/proc/pop(atom/newloc)
+ RETURN_TYPE(/obj/item/ammo_casing)
+ if(length(ammo_internal))
+ // list filled
+ . = ammo_internal[length(ammo_internal)]
+ --ammo_internal.len
+ update_icon()
+ return
+ // list empty
+ if(!ammo_current || !ammo_preload)
+ return
+ . = instantiate_casing(newloc)
+ --ammo_current
+ update_icon()
+
+/**
+ * put a casing into top
+ *
+ * @return TRUE/FALSE on success/failure
+ */
+/obj/item/ammo_magazine/proc/push(obj/item/ammo_casing/casing, update_icon)
+ if(amount_remaining() >= ammo_max)
+ return FALSE
+ LAZYADD(ammo_internal, casing)
+ if(casing.loc != src)
+ casing.forceMove(src)
+ return TRUE
+
+/**
+ * replace the first spent casing from the top or insert top depending on if there's room
+ *
+ * @return TRUE/FALSE on success/failure
+ */
+/obj/item/ammo_magazine/proc/push_resupply(obj/item/ammo_casing/casing, update_icon, atom/transfer_old_to)
+ // try to resupply
+ for(var/i in length(ammo_internal) to 1 step -1)
+ var/obj/item/ammo_casing/loaded = ammo_internal[i]
+ if(loaded.loaded())
+ continue
+ loaded.forceMove(transfer_old_to || drop_location())
+ ammo_internal[i] = casing
+ if(casing.loc != src)
+ casing.forceMove(src)
+ return TRUE
+ // try to insert
+ return push(casing, update_icon)
+
+//* Ammo - Getters *//
+
+/obj/item/ammo_magazine/proc/is_full()
+ return amount_remaining() >= ammo_max
+
+/obj/item/ammo_magazine/proc/amount_remaining(live_only)
+ if(!live_only)
+ return ammo_current + length(ammo_internal)
+ . = ammo_current
+ for(var/obj/item/ammo_casing/casing as anything in ammo_internal)
+ if(casing.loaded())
+ .++
+
+/obj/item/ammo_magazine/proc/amount_missing(live_only)
+ return ammo_max - amount_remaining(live_only)
+
+//* Caliber *//
+
+/obj/item/ammo_magazine/proc/loads_caliber(datum/ammo_caliber/caliberlike)
+ var/datum/ammo_caliber/ours = resolve_caliber(ammo_caliber)
+ var/datum/ammo_caliber/theirs = resolve_caliber(caliberlike)
+ return ours.equivalent(theirs)
diff --git a/code/modules/projectiles/ammunition/calibers/README.md b/code/modules/projectiles/ammunition/calibers/README.md
new file mode 100644
index 00000000000..689d84a5f17
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/README.md
@@ -0,0 +1,17 @@
+# Calibers
+
+All specific calibers go in here. In their own files.
+
+No more 1200 line b/s.
+
+Put the magazines / casings / etc together; if projectiles were specially made for it, put it there too.
+
+Calibers should be named 'a12g' for say, '12g', as most programming languages do not allow leading numbers in identifiers.
+
+If a magazine only is meant to work for one specific gun, put it with the gun instead.
+
+## Naming Convention
+
+12 gauge = `/a12g`
+1.23mm = `/a1_23mm`
+.23 (inches) = `/a23`
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a10g.dm b/code/modules/projectiles/ammunition/calibers/normal/a10g.dm
new file mode 100644
index 00000000000..44041b18844
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a10g.dm
@@ -0,0 +1,33 @@
+/datum/ammo_caliber/a10g
+ caliber = "10g"
+
+/obj/item/ammo_casing/a10g
+ name = "heavy shotgun slug"
+ desc = "A brass jacketed 10 gauge slug shell."
+ icon = 'icons/modules/projectiles/casings/a10g.dmi'
+ icon_state = "10ga_slug"
+ icon_spent = FALSE
+ regex_this_caliber = /datum/ammo_caliber/a10g
+ projectile_type = /obj/projectile/bullet/heavy_shotgun
+ materials_base = list(MAT_STEEL = 300, "brass" = 200)
+ fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg')
+
+/obj/item/ammo_casing/a10g/pellet //Spread variant.
+ name = "heavy shotgun shell"
+ desc = "A brass jacketed 10 gauge shot shell."
+ projectile_type = /obj/projectile/scatter/heavy_shotgun
+
+/obj/item/ammo_casing/a10g/silver
+ name = "heavy silver shotgun shell"
+ desc = "A brass jacketed 10 gauge filled with blessed silver shot."
+ projectile_type = /obj/projectile/scatter/heavy_shotgun/silver
+
+/obj/item/ammo_casing/a10g/grit
+ name = "tooled heavy shotgun slug"
+ desc = "A custom brass jacketed 10 gauge slug shell."
+ projectile_type = /obj/projectile/bullet/heavy_shotgun/grit
+
+/obj/item/ammo_casing/a10g/pellet/grit
+ name = "tooled heavy shotgun shell"
+ desc = "A custom brass jacketed 10 gauge shot shell."
+ projectile_type = /obj/projectile/scatter/heavy_shotgun/grit
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a10mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a10mm.dm
new file mode 100644
index 00000000000..a131c151e34
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a10mm.dm
@@ -0,0 +1,48 @@
+/datum/ammo_caliber/a10mm
+ caliber = "10mm"
+
+/obj/item/ammo_casing/a10mm
+ desc = "A 10mm bullet casing."
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
+ regex_this_caliber = /datum/ammo_caliber/a10mm
+ projectile_type = /obj/projectile/bullet/pistol/medium
+ materials_base = list(MAT_STEEL = 75)
+
+/obj/item/ammo_casing/a10mm/emp
+ name = "10mm haywire round"
+ desc = "A 10mm bullet casing fitted with a single-use ion pulse generator."
+ icon_state = "small-tech"
+ projectile_type = /obj/projectile/ion/small
+ materials_base = list(MAT_STEEL = 130, MAT_URANIUM = 100)
+
+/obj/item/ammo_magazine/a10mm
+ ammo_caliber = /datum/ammo_caliber/a10mm
+
+/obj/item/ammo_magazine/a10mm
+ name = "magazine (10mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "10mm-5"
+ base_icon_state = "10mm"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+ materials_base = list(MAT_STEEL = 500)
+ ammo_preload = /obj/item/ammo_casing/a10mm
+ ammo_max = 20
+
+/obj/item/ammo_magazine/a10mm/empty
+ icon_state = "10mm-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a10mm/clip
+ name = "ammo clip (10mm)"
+ desc = "A stripper clip for reloading 5mm rounds into magazines."
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "pistol-10"
+ base_icon_state = "pistol"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 9
+ magazine_type = MAGAZINE_TYPE_CLIP
+ ammo_preload = /obj/item/ammo_casing/a10mm
+ materials_base = list(MAT_STEEL = 250)
+ ammo_max = 9
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a12_7mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a12_7mm.dm
new file mode 100644
index 00000000000..af32018f1b8
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a12_7mm.dm
@@ -0,0 +1,18 @@
+/datum/ammo_caliber/a12_7mm
+ caliber = "12.7mm"
+
+/obj/item/ammo_casing/a12_7mm
+ desc = "A 12.7mm shell."
+ icon = 'icons/modules/projectiles/casings/a12_7mm.dmi'
+ icon_state = "casing"
+ icon_spent = TRUE
+ regex_this_caliber = /datum/ammo_caliber/a12_7mm
+ projectile_type = /obj/projectile/bullet/rifle/a12_7mm
+ materials_base = list(MAT_STEEL = 1250)
+
+/obj/item/ammo_casing/a12_7mm/phoron
+ name = "caseless phoron round"
+ desc = "A 12.7mm caseless round."
+ regex_this_caliber = /datum/ammo_caliber/a12_7mm
+ projectile_type = /obj/projectile/bullet/incendiary/caseless
+ casing_flags = CASING_DELETE
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a12g.dm b/code/modules/projectiles/ammunition/calibers/normal/a12g.dm
new file mode 100644
index 00000000000..d9c38f66505
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a12g.dm
@@ -0,0 +1,289 @@
+/datum/ammo_caliber/a12g
+ caliber = "12g"
+ diameter = 18.53
+ length = 69.85
+
+//* Casings
+/obj/item/ammo_casing/a12g
+ name = "slug shell"
+ desc = "A 12 gauge slug."
+ icon = 'icons/modules/projectiles/casings/a12g.dmi'
+ icon_state = "grey"
+ regex_this_caliber = /datum/ammo_caliber/a12g
+ projectile_type = /obj/projectile/bullet/shotgun
+ materials_base = list(MAT_STEEL = 360)
+ fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg')
+ worth_intrinsic = 5
+
+/obj/item/ammo_casing/a12g/pellet
+ name = "buckshot shell"
+ desc = "A 12 gauge shell."
+ icon_state = "red"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun
+ worth_intrinsic = 5
+
+/obj/item/ammo_casing/a12g/blank
+ name = "blank shell"
+ desc = "A blank shell."
+ icon_state = "white"
+ projectile_type = /obj/projectile/bullet/blank
+ materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 1.5
+
+/obj/item/ammo_casing/a12g/practice
+ name = "practice shell"
+ desc = "A practice shell."
+ icon_state = "white"
+ projectile_type = /obj/projectile/bullet/practice
+ materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 1.5
+
+/obj/item/ammo_casing/a12g/beanbag
+ name = "beanbag shell"
+ desc = "A beanbag shell."
+ icon_state = "green"
+ projectile_type = /obj/projectile/bullet/shotgun/beanbag
+ materials_base = list(MAT_STEEL = 180)
+ worth_intrinsic = 3.5
+
+/obj/item/ammo_casing/a12g/improvised
+ name = "improvised shell"
+ desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards."
+ icon_state = "improv"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_improvised
+ materials_base = list(MAT_STEEL = 500, MAT_GLASS = 200)
+ worth_intrinsic = 3.5
+
+/obj/item/ammo_casing/a12g/stunshell
+ name = "stun shell"
+ desc = "A 12 gauge taser cartridge."
+ icon_state = "stun"
+ projectile_type = /obj/projectile/energy/electrode/stunshot
+ materials_base = list(MAT_STEEL = 360, MAT_GLASS = 720)
+ worth_intrinsic = 7.5
+
+/obj/item/ammo_casing/a12g/flare
+ name = "flare shell"
+ desc = "A chemical shell used to signal distress or provide illumination."
+ icon_state = "flare"
+ projectile_type = /obj/projectile/energy/flash/flare
+ materials_base = list(MAT_STEEL = 90, MAT_GLASS = 90)
+ worth_intrinsic = 3.5
+
+/obj/item/ammo_casing/a12g/techshell
+ name = "unloaded technological shell"
+ desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects."
+ icon_state = "tech"
+ projectile_type = null
+ materials_base = list(MAT_STEEL = 500, MAT_PHORON = 200)
+ worth_intrinsic = 30
+
+/obj/item/ammo_casing/a12g/techshell/meteorslug
+ name = "meteorslug shell"
+ desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired."
+ icon_state = "meteor"
+ projectile_type = /obj/projectile/meteor/slug
+ materials_base = list(MAT_STEEL = 500, MAT_GOLD = 200)
+ worth_intrinsic = 150
+
+/obj/item/ammo_casing/a12g/techshell/emp
+ name = "ion shell"
+ desc = "An advanced shotgun round that creates a small EMP when it strikes a target."
+ icon_state = "emp"
+ projectile_type = /obj/projectile/scatter/ion
+ materials_base = list(MAT_STEEL = 360, MAT_URANIUM = 240)
+ worth_intrinsic = 50
+
+/obj/item/ammo_casing/a12g/techshell/pulseslug
+ name = "pulse slug"
+ desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \
+ energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \
+ would have difficulty with."
+ icon_state = "pulse"
+ projectile_type = /obj/projectile/beam/pulse/shotgun
+ materials_base = list(MAT_STEEL = 500, MAT_SILVER = 200)
+ worth_intrinsic = 75
+
+/obj/item/ammo_casing/a12g/techshell/dragonsbreath
+ name = "dragonsbreath shell"
+ desc = "A shotgun shell which fires a spread of incendiary pellets."
+ icon_state = "dragon"
+ projectile_type = /obj/projectile/bullet/incendiary/shotgun
+ worth_intrinsic = 75
+
+/obj/item/ammo_casing/a12g/techshell/frag12
+ name = "FRAG-12 slug"
+ desc = "A high explosive breaching round for a 12 gauge shotgun."
+ icon_state = "explosive"
+ projectile_type = /obj/projectile/bullet/shotgun/frag12
+ materials_base = list(MAT_STEEL = 500, MAT_PHORON = 200)
+ worth_intrinsic = 75
+
+/obj/item/ammo_casing/a12g/techshell/laserslug
+ name = "scatter laser shell"
+ desc = "An advanced shotgun shell that uses a micro laser to replicate the effects of a scatter laser weapon in a ballistic package."
+ icon_state = "laser"
+ projectile_type = /obj/projectile/scatter/laser
+ materials_base = list(MAT_STEEL = 500, MAT_GLASS = 200)
+ worth_intrinsic = 50
+
+/obj/item/ammo_casing/a12g/silver
+ name = "Silver shotgun shell"
+ desc = "A 12 gauge slug. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "stake"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun/silver
+ materials_base = list(MAT_STEEL = 360, MAT_SILVER = 240)
+ worth_intrinsic = 75
+
+/obj/item/ammo_casing/a12g/stake
+ name = "Wooden stake shell"
+ desc = "A specialized shell designed to launch a wooden stake. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "stake"
+ projectile_type = /obj/projectile/bullet/shotgun/stake
+ materials_base = list(MAT_STEEL = 500)
+ worth_intrinsic = 30
+
+//* Magazines - Drums
+
+/obj/item/ammo_magazine/a12g/drum
+ name = "magazine (12 gauge)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_drum.dmi'
+ icon_state = "autoshotgun"
+ base_icon_state = "autoshotgun"
+ materials_base = list(MAT_STEEL = 13000)
+ ammo_caliber = /datum/ammo_caliber/a12g
+ ammo_preload = /obj/item/ammo_casing/a12g
+ ammo_max = 24
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 2
+
+/obj/item/ammo_magazine/a12g/drum/beanbag
+ name = "magazine (12 gauge beanbag)"
+ ammo_preload = /obj/item/ammo_casing/a12g/beanbag
+
+/obj/item/ammo_magazine/a12g/drum/pellet
+ name = "magazine (12 gauge pellet)"
+ ammo_preload = /obj/item/ammo_casing/a12g/pellet
+
+/obj/item/ammo_magazine/a12g/drum/flare
+ name = "magazine (12 gauge flash)"
+ ammo_preload = /obj/item/ammo_casing/a12g/flare
+
+/obj/item/ammo_magazine/a12g/drum/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a12g/drum/holy
+ name = "blessed drum magazine (12 gauge)"
+ icon_state = "holyshotgun"
+ base_icon_state = "holyshotgun"
+ desc = "Thrice-blessed, this drum magazine is loaded with silver shot designed to combat supernatural threats."
+ materials_base = list(MAT_STEEL = 100, MAT_SILVER = 1100)
+ ammo_preload = /obj/item/ammo_casing/a12g/silver
+ ammo_max = 12
+ rendering_system = GUN_RENDERING_DISABLED
+
+/obj/item/ammo_magazine/a12g/drum/holy/stake
+ name = "blessed drum magazine (stakes)"
+ desc = "Thrice-blessed, this drum magazine is loaded with wooden stakes soaked in sacred oils."
+ ammo_preload = /obj/item/ammo_casing/a12g/stake
+
+//* Magazines - Clips
+
+/obj/item/ammo_magazine/a12g/clip
+ name = "ammo clip (12g slug)"
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "a12-slug-2"
+ base_icon_state = "a12-slug"
+ desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with slugs."
+ ammo_caliber = /datum/ammo_caliber/a12g
+ ammo_preload = /obj/item/ammo_casing/a12g
+ materials_base = list(MAT_STEEL = 350) // slugs shells x2 + 350 metal for the clip itself.
+ ammo_max = 2
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 2
+ ammo_picky = TRUE
+ ammo_type = /obj/item/ammo_casing/a12g
+ magazine_type = MAGAZINE_TYPE_CLIP
+
+/obj/item/ammo_magazine/a12g/clip/pellet
+ name = "ammo clip (12g buckshot)"
+ icon_state = "a12-buck-2"
+ base_icon_state = "a12-buck"
+ desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with buckshot."
+ ammo_preload = /obj/item/ammo_casing/a12g/pellet
+ ammo_type = /obj/item/ammo_casing/a12g/pellet
+
+/obj/item/ammo_magazine/a12g/clip/beanbag
+ name = "ammo clip (12g beanbag)"
+ icon_state = "a12-bean-2"
+ base_icon_state = "a12-bean"
+ desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with beanbags."
+ ammo_preload = /obj/item/ammo_casing/a12g/beanbag
+ ammo_type = /obj/item/ammo_casing/a12g/beanbag
+
+/obj/item/ammo_magazine/a12g/clip/silver
+ name = "ammo clip (12g buckshot)"
+ icon_state = "a12-silver-2"
+ base_icon_state = "a12-silver"
+ desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with silver buckshot."
+ ammo_preload = /obj/item/ammo_casing/a12g/silver
+ ammo_type = /obj/item/ammo_casing/a12g/silver
+
+//* Magazines - Pouches
+
+/obj/item/ammo_magazine/a12g/pouch
+ name = "shotgun slug holder"
+ desc = "A convenient pouch that holds 12 gauge shells."
+ icon = 'icons/modules/projectiles/magazines/old_pouch.dmi'
+ icon_state = "shotgun-clip-4"
+ base_icon_state = "shotgun-clip"
+ ammo_caliber = /datum/ammo_caliber/a12g
+ materials_base = list(MAT_STEEL = 1440)
+ magazine_type = MAGAZINE_TYPE_POUCH
+ ammo_preload = /obj/item/ammo_casing/a12g
+ ammo_current = 0
+ ammo_max = 4
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 4
+
+ var/marking_color
+
+/obj/item/ammo_magazine/a12g/pouch/update_icon()
+ . = ..()
+ if(marking_color)
+ var/image/I = image(icon, "[base_icon_state]-marking")
+ I.color = marking_color
+ add_overlay(I)
+
+/obj/item/ammo_magazine/a12g/pouch/full
+ ammo_current = 4
+
+/obj/item/ammo_magazine/a12g/pouch/full/slug
+ name = "shotgun slug holder (slug)"
+ marking_color = PIPE_COLOR_BLACK
+ ammo_preload = /obj/item/ammo_casing/a12g
+ ammo_type = /obj/item/ammo_casing/a12g
+
+/obj/item/ammo_magazine/a12g/pouch/full/flare
+ name = "shotgun slug holder (flare)"
+ marking_color = COLOR_RED_GRAY
+ ammo_preload = /obj/item/ammo_casing/a12g/flare
+ ammo_type = /obj/item/ammo_casing/a12g/flare
+
+/obj/item/ammo_magazine/a12g/pouch/full/buckshot
+ name = "shotgun slug holder (buckshot)"
+ marking_color = COLOR_RED
+ ammo_preload = /obj/item/ammo_casing/a12g/pellet
+ ammo_type = /obj/item/ammo_casing/a12g/pellet
+
+/obj/item/ammo_magazine/a12g/pouch/full/beanbag
+ name = "shotgun slug holder (beanbag)"
+ marking_color = COLOR_GREEN
+ ammo_preload = /obj/item/ammo_casing/a12g/beanbag
+ ammo_type = /obj/item/ammo_casing/a12g/beanbag
+
+/obj/item/ammo_magazine/a12g/pouch/full/stun
+ name = "shotgun slug holder (stun)"
+ marking_color = PIPE_COLOR_YELLOW
+ ammo_preload = /obj/item/ammo_casing/a12g/stunshell
+ ammo_type = /obj/item/ammo_casing/a12g/stunshell
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a357.dm b/code/modules/projectiles/ammunition/calibers/normal/a357.dm
new file mode 100644
index 00000000000..4769438fca4
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a357.dm
@@ -0,0 +1,86 @@
+/datum/ammo_caliber/a357
+ caliber = ".357"
+ diameter = 9.1
+ length = 40
+
+//* Casings
+
+/obj/item/ammo_casing/a357
+ name = "bullet casing (.357)"
+ desc = "A .357 bullet casing."
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "large"
+ base_icon_state = "large"
+ projectile_type = /obj/projectile/bullet/pistol/strong
+ materials_base = list(MAT_STEEL = 210)
+ regex_this_caliber = /datum/ammo_caliber/a357
+
+/obj/item/ammo_casing/a357/silver
+ desc = "A .357 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "large-white"
+ base_icon_state = "large-white"
+ materials_base = list(MAT_STEEL = 350, MAT_SILVER = 200)
+
+/obj/item/ammo_casing/a357/stun
+ desc = "A .357 stun bullet casing."
+ icon_state = "large-red"
+ base_icon_state = "large-red"
+ projectile_type = /obj/projectile/energy/electrode/stunshot/strong
+
+/obj/item/ammo_casing/a357/rubber
+ desc = "A .357 rubber bullet casing."
+ icon_state = "large-blue"
+ base_icon_state = "large-blue"
+ projectile_type = /obj/projectile/bullet/pistol/rubber/strong
+
+/obj/item/ammo_casing/a357/flash
+ desc = "A .357 flash bullet casing."
+ icon_state = "large-white"
+ base_icon_state = "large-white"
+ projectile_type = /obj/projectile/energy/flash/strong
+
+//* Magazines - Speedloaders
+
+/obj/item/ammo_magazine/a357/speedloader
+ name = "speedloader (.357)"
+ desc = "A speedloader for .357 revolvers."
+ icon = 'icons/modules/projectiles/magazines/old_speedloader_6.dmi'
+ icon_state = "normal-6"
+ base_icon_state = "normal"
+ ammo_caliber = /datum/ammo_caliber/a357
+ ammo_preload = /obj/item/ammo_casing/a357
+ ammo_type = /obj/item/ammo_casing/a357
+ magazine_type = MAGAZINE_TYPE_SPEEDLOADER
+ ammo_max = 6
+ materials_base = list(MAT_STEEL = 500)
+
+/obj/item/ammo_magazine/a357/speedloader/silver
+ name = "speedloader (.357 silver)"
+ icon_state = "holy-6"
+ base_icon_state = "holy"
+ ammo_preload = /obj/item/ammo_casing/a357/silver
+ ammo_type = /obj/item/ammo_casing/a357/silver
+
+/obj/item/ammo_magazine/a357/speedloader/stun
+ name = "speedloader (.357 stun)"
+ desc = "A speedloader for .357 revolvers."
+ icon_state = "redtip-6"
+ base_icon_state = "redtip"
+ ammo_preload = /obj/item/ammo_casing/a357/stun
+ ammo_type = /obj/item/ammo_casing/a357/stun
+
+/obj/item/ammo_magazine/a357/speedloader/rubber
+ name = "speedloader (.357 rubber)"
+ desc = "A speedloader for .357 revolvers."
+ icon_state = "bluetip-6"
+ base_icon_state = "bluetip"
+ ammo_preload = /obj/item/ammo_casing/a357/rubber
+ ammo_type = /obj/item/ammo_casing/a357/rubber
+
+/obj/item/ammo_magazine/a357/speedloader/flash
+ name = "speedloader (.357 flash)"
+ desc = "A speedloader for .357 revolvers."
+ icon_state = "white-6"
+ base_icon_state = "white"
+ ammo_preload = /obj/item/ammo_casing/a357/flash
+ ammo_type = /obj/item/ammo_casing/a357/flash
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a38.dm b/code/modules/projectiles/ammunition/calibers/normal/a38.dm
new file mode 100644
index 00000000000..95965578d4f
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a38.dm
@@ -0,0 +1,75 @@
+/datum/ammo_caliber/a38
+ caliber = ".38"
+
+/obj/item/ammo_casing/a38
+ desc = "A .38 bullet casing."
+ regex_this_caliber = /datum/ammo_caliber/a38
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
+ projectile_type = /obj/projectile/bullet/pistol
+ materials_base = list(MAT_STEEL = 60)
+
+/obj/item/ammo_casing/a38/rubber
+ desc = "A .38 rubber bullet casing."
+ icon_state = "small-reinf"
+ projectile_type = /obj/projectile/bullet/pistol/rubber
+
+/obj/item/ammo_casing/a38/emp
+ name = ".38 haywire round"
+ desc = "A .38 bullet casing fitted with a single-use ion pulse generator."
+ icon_state = "small-tech"
+ projectile_type = /obj/projectile/ion/small
+ materials_base = list(MAT_STEEL = 130, MAT_URANIUM = 100)
+
+/obj/item/ammo_casing/a38/silver
+ desc = "A .38 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "small-silver"
+ projectile_type = /obj/projectile/bullet/pistol/silver
+ materials_base = list(MAT_STEEL = 130, MAT_SILVER = 100)
+
+//* Magazines *//
+
+/obj/item/ammo_magazine/a38
+ name = "magazine (.38)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "9x19-small"
+ base_icon_state = "9x19-small"
+ origin_tech = list(TECH_COMBAT = 2)
+ materials_base = list(MAT_STEEL = 480)
+ ammo_caliber = /datum/ammo_caliber/a38
+ ammo_preload = /obj/item/ammo_casing/a38
+ ammo_max = 8
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/a38/speedloader
+ name = "speedloader (.38)"
+ desc = "A speedloader for .38 revolvers."
+ icon = 'icons/modules/projectiles/magazines/old_speedloader_6.dmi'
+ icon_state = "normal-6"
+ base_icon_state = "normal"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 6
+ magazine_type = MAGAZINE_TYPE_SPEEDLOADER
+ materials_base = list(MAT_STEEL = 360)
+ ammo_preload = /obj/item/ammo_casing/a38
+ ammo_max = 6
+
+/obj/item/ammo_magazine/a38/speedloader/rubber
+ name = "speedloader (.38 rubber)"
+ icon_state = "blue-6"
+ base_icon_state = "blue"
+ ammo_preload = /obj/item/ammo_casing/a38/rubber
+
+/obj/item/ammo_magazine/a38/speedloader/emp
+ name = "speedloader (.38 haywire)"
+ icon_state = "bluetip-6"
+ base_icon_state = "bluetip"
+ ammo_preload = /obj/item/ammo_casing/a38/emp
+
+/obj/item/ammo_magazine/a38/speedloader/silver
+ name = "speedloader (.38 silver)"
+ icon_state = "holy-6"
+ base_icon_state = "holy"
+ ammo_preload = /obj/item/ammo_casing/a38/silver
+ materials_base = list(MAT_STEEL = 780, MAT_SILVER = 600)
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a44.dm b/code/modules/projectiles/ammunition/calibers/normal/a44.dm
new file mode 100644
index 00000000000..e2b5cfa7d3c
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a44.dm
@@ -0,0 +1,89 @@
+/datum/ammo_caliber/a44
+ caliber = ".44"
+
+//* Casings
+
+/obj/item/ammo_casing/a44
+ desc = "A .44 bullet casing."
+ regex_this_caliber = /datum/ammo_caliber/a44
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "large"
+ projectile_type = /obj/projectile/bullet/pistol/strong
+ materials_base = list(MAT_STEEL = 210)
+
+/obj/item/ammo_casing/a44/rubber
+ icon_state = "r-casing"
+ desc = "A .44 rubber bullet casing."
+ icon_state = "large-blue"
+ projectile_type = /obj/projectile/bullet/pistol/rubber/strong
+ materials_base = list(MAT_STEEL = 60)
+
+/obj/item/ammo_casing/a44/silver
+ desc = "A .44 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/pistol/strong/silver
+ materials_base = list(MAT_STEEL = 350, MAT_SILVER = 200)
+
+//* Magazines
+
+/obj/item/ammo_magazine/a44
+ ammo_caliber = /datum/ammo_caliber/a44
+
+/obj/item/ammo_magazine/a44
+ name = "magazine (.44)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "m44-7"
+ base_icon_state = "m44"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 7
+ materials_base = list(MAT_STEEL = 1260)
+ ammo_preload = /obj/item/ammo_casing/a44
+ ammo_max = 7
+
+/obj/item/ammo_magazine/a44/empty
+ icon_state = "m44-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a44/rubber
+ desc = "A magazine for .44 less-than-lethal ammo."
+ ammo_type = /obj/item/ammo_casing/a44/rubber
+
+/obj/item/ammo_magazine/a44/clip
+ name = "ammo clip (.44)"
+ desc = "A stripper clip for reloading .44 rounds into magazines."
+ ammo_preload = /obj/item/ammo_casing/a44
+ materials_base = list(MAT_STEEL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
+ ammo_max = 9
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "pistol-9"
+ base_icon_state = "pistol"
+ magazine_type = MAGAZINE_TYPE_CLIP
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 9
+
+/obj/item/ammo_magazine/a44/speedloader
+ name = "speedloader (.44)"
+ ammo_preload = /obj/item/ammo_casing/a44
+ materials_base = list(MAT_STEEL = 250)
+ ammo_max = 6
+ magazine_type = MAGAZINE_TYPE_SPEEDLOADER
+ icon = 'icons/modules/projectiles/magazines/old_speedloader_6.dmi'
+ icon_state = "normal-6"
+ base_icon_state = "normal"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 6
+
+/obj/item/ammo_magazine/a44/speedloader/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a44/speedloader/rubber
+ name = "speedloader (.44 rubber)"
+ icon_state = "blue-6"
+ base_icon_state = "blue"
+ ammo_preload = /obj/item/ammo_casing/a44/rubber
+
+/obj/item/ammo_magazine/a44/speedloader/silver
+ name = "speedloader (.44 silver)"
+ icon_state = "holy-6"
+ base_icon_state = "holy"
+ ammo_preload = /obj/item/ammo_casing/a44/silver
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a45.dm b/code/modules/projectiles/ammunition/calibers/normal/a45.dm
new file mode 100644
index 00000000000..09763abc03a
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a45.dm
@@ -0,0 +1,229 @@
+/datum/ammo_caliber/a45
+ caliber = ".45"
+
+//* Casings
+
+/obj/item/ammo_casing/a45
+ desc = "A .45 bullet casing."
+ regex_this_caliber = /datum/ammo_caliber/a45
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "large"
+ projectile_type = /obj/projectile/bullet/pistol/medium
+ materials_base = list(MAT_STEEL = 75)
+
+/obj/item/ammo_casing/a45/ap
+ desc = "A .45 Armor-Piercing bullet casing."
+ icon_state = "large-blue"
+ projectile_type = /obj/projectile/bullet/pistol/medium/ap
+
+/obj/item/ammo_casing/a45/hunter
+ desc = "A .45 hunting bullet casing."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/pistol/medium/hunter
+
+/obj/item/ammo_casing/a45/practice
+ desc = "A .45 practice bullet casing."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/practice
+ materials_base = list(MAT_STEEL = 60)
+
+/obj/item/ammo_casing/a45/rubber
+ desc = "A .45 rubber bullet casing."
+ icon_state = "large-red"
+ projectile_type = /obj/projectile/bullet/pistol/rubber
+ materials_base = list(MAT_STEEL = 60)
+
+/obj/item/ammo_casing/a45/flash
+ desc = "A .45 flash shell casing."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/energy/flash
+ materials_base = list(MAT_STEEL = 60)
+
+/obj/item/ammo_casing/a45/emp
+ name = ".45 haywire round"
+ desc = "A .45 bullet casing fitted with a single-use ion pulse generator."
+ icon_state = "large-blue"
+ projectile_type = /obj/projectile/ion/small
+ materials_base = list(MAT_STEEL = 130, MAT_URANIUM = 100)
+
+/obj/item/ammo_casing/a45/hp
+ desc = "A .45 hollow-point bullet casing."
+ icon_state = "large-red"
+ projectile_type = /obj/projectile/bullet/pistol/medium/hp
+
+/obj/item/ammo_casing/a45/silver
+ name = ".45 silver round"
+ desc = "A .45 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/pistol/silver
+ materials_base = list(MAT_STEEL = 130, MAT_SILVER = 100)
+
+
+//* Magazines
+
+/obj/item/ammo_magazine/a45
+ ammo_caliber = /datum/ammo_caliber/a45
+ name = "pistol magazine (.45)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "45-7"
+ base_icon_state = "45"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 7
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 250)
+ ammo_max = 7
+
+/obj/item/ammo_magazine/a45/empty
+ icon_state = "45-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a45/hunter
+ name = "magazine (.45 hunter)"
+ ammo_preload = /obj/item/ammo_casing/a45/hunter
+
+/obj/item/ammo_magazine/a45/rubber
+ name = "magazine (.45 rubber)"
+ ammo_preload = /obj/item/ammo_casing/a45/rubber
+
+/obj/item/ammo_magazine/a45/practice
+ name = "magazine (.45 practice)"
+ ammo_preload = /obj/item/ammo_casing/a45/practice
+
+/obj/item/ammo_magazine/a45/flash
+ name = "magazine (.45 flash)"
+ ammo_preload = /obj/item/ammo_casing/a45/flash
+
+/obj/item/ammo_magazine/a45/ap
+ name = "magazine (.45 AP)"
+ ammo_preload = /obj/item/ammo_casing/a45/ap
+
+/obj/item/ammo_magazine/a45/uzi
+ name = "stick magazine (.45)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "uzi45-8"
+ base_icon_state = "uzi45"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 8
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 1200)
+ ammo_max = 16
+
+/obj/item/ammo_magazine/a45/uzi/empty
+ icon_state = "uzi45-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a45/wt274
+ name = "double-stack magazine (.45)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "wt-274-1"
+ base_icon_state = "wt274"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 500)
+ ammo_max = 32
+
+/obj/item/ammo_magazine/a45/tommy
+ name = "Tommy Gun magazine (.45)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "tommy-mag"
+ rendering_system = GUN_RENDERING_DISABLED
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 350)
+ ammo_max = 20
+
+/obj/item/ammo_magazine/a45/tommy/ap
+ name = "Tommy Gun magazine (.45 AP)"
+ ammo_preload = /obj/item/ammo_casing/a45/ap
+
+/obj/item/ammo_magazine/a45/tommy/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a45/tommy/drum
+ name = "Tommy Gun drum magazine (.45)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_drum.dmi'
+ icon_state = "tommy-drum"
+ rendering_system = GUN_RENDERING_DISABLED
+ w_class = WEIGHT_CLASS_NORMAL
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 500)
+ ammo_max = 50
+
+/obj/item/ammo_magazine/a45/tommy/drum/ap
+ name = "Tommy Gun drum magazine (.45 AP)"
+ ammo_preload = /obj/item/ammo_casing/a45/ap
+
+/obj/item/ammo_magazine/a45/tommy/drum/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a45/clip
+ name = "ammo clip (.45)"
+ desc = "A stripper clip for reloading .45 rounds into magazines."
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "pistol-9"
+ base_icon_state = "pistol"
+ rendering_system = GUN_RENDERING_STATES
+ magazine_type = MAGAZINE_TYPE_CLIP
+ rendering_count = 9
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 250)
+ ammo_max = 9
+
+/obj/item/ammo_magazine/a45/clip/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_preload = /obj/item/ammo_casing/a45/rubber
+
+/obj/item/ammo_magazine/a45/clip/hunter
+ name = "ammo clip (.45 hunter)"
+ ammo_preload = /obj/item/ammo_casing/a45/hunter
+
+/obj/item/ammo_magazine/a45/clip/practice
+ name = "ammo clip (.45 practice)"
+ ammo_preload = /obj/item/ammo_casing/a45/practice
+
+/obj/item/ammo_magazine/a45/clip/flash
+ name = "ammo clip (.45 flash)"
+ ammo_preload = /obj/item/ammo_casing/a45/flash
+
+/obj/item/ammo_magazine/a45/speedloader
+ name = "speedloader (.45)"
+ icon = 'icons/modules/projectiles/magazines/old_speedloader_7.dmi'
+ icon_state = "normal-7"
+ base_icon_state = "normal"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 7
+ ammo_preload = /obj/item/ammo_casing/a45
+ materials_base = list(MAT_STEEL = 250)
+ magazine_type = MAGAZINE_TYPE_SPEEDLOADER
+ ammo_max = 7
+
+/obj/item/ammo_magazine/a45/speedloader/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a45/speedloader/rubber
+ name = "speedloader (.45 rubber)"
+ icon_state = "bluetip-7"
+ base_icon_state = "bluetip"
+ ammo_preload = /obj/item/ammo_casing/a45/rubber
+
+/obj/item/ammo_magazine/a45/speedloader/practice
+ name = "speedloader (.45 practice)"
+ ammo_preload = /obj/item/ammo_casing/a45/practice
+
+/obj/item/ammo_magazine/a45/speedloader/flash
+ name = "speedloader (.45 flash)"
+ icon_state = "bluetip-7"
+ base_icon_state = "bluetip"
+ ammo_preload = /obj/item/ammo_casing/a45/flash
+
+/obj/item/ammo_magazine/a45/speedloader/ap
+ name = "speedloader (.45 AP)"
+ icon_state = "bluetip-7"
+ base_icon_state = "bluetip"
+ ammo_preload = /obj/item/ammo_casing/a45/ap
+
+/obj/item/ammo_magazine/a45/speedloader/silver
+ name = "speedloader (.45 silver)"
+ icon_state = "holy-7"
+ base_icon_state = "holy"
+ ammo_preload = /obj/item/ammo_casing/a45/silver
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a5_56mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a5_56mm.dm
new file mode 100644
index 00000000000..f316dad8b2f
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a5_56mm.dm
@@ -0,0 +1,164 @@
+/datum/ammo_caliber/a5_56mm
+ caliber = "5.56mm"
+
+//* Casings
+
+/obj/item/ammo_casing/a5_56mm
+ desc = "A 5.56mm bullet casing."
+ regex_this_caliber = /datum/ammo_caliber/a5_56mm
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "large"
+ projectile_type = /obj/projectile/bullet/rifle/a556
+ materials_base = list(MAT_STEEL = 180)
+
+/obj/item/ammo_casing/a5_56mm/ap
+ desc = "A 5.56mm armor-piercing bullet casing."
+ icon_state = "large-blue"
+ projectile_type = /obj/projectile/bullet/rifle/a556/ap
+ materials_base = list(MAT_STEEL = 270)
+
+/obj/item/ammo_casing/a5_56mm/practice
+ desc = "A 5.56mm practice bullet casing."
+ icon_state = "large=white"
+ projectile_type = /obj/projectile/bullet/practice
+ materials_base = list(MAT_STEEL = 90)
+
+/obj/item/ammo_casing/a5_56mm/blank
+ desc = "A blank 5.56mm bullet casing."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/blank
+ materials_base = list(MAT_STEEL = 90)
+
+/obj/item/ammo_casing/a5_56mm/hp
+ icon_state = "large-red"
+ desc = "A 5.56mm hollow-point bullet casing."
+ projectile_type = /obj/projectile/bullet/rifle/a556/hp
+
+/obj/item/ammo_casing/a5_56mm/hunter
+ icon_state = "large-white"
+ desc = "A 5.56mm hunting bullet casing."
+ projectile_type = /obj/projectile/bullet/rifle/a556/hunter
+
+//* Magazines
+
+/obj/item/ammo_magazine/a5_56mm
+ name = "magazine (5.56mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "m556-1"
+ base_icon_state = "m556"
+ ammo_caliber = /datum/ammo_caliber/a5_56mm
+ materials_base = list(MAT_STEEL = 1800)
+ ammo_preload = /obj/item/ammo_casing/a5_56mm
+ ammo_max = 20
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/a5_56mm/ext
+ name = "extended magazine (5.56mm)"
+ materials_base = list(MAT_STEEL = 2700)
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a5_56mm/empty
+ icon_state = "m556-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a5_56mm/ext/empty
+ icon_state = "m556-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a5_56mm/practice
+ name = "magazine (5.56mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/practice
+
+/obj/item/ammo_magazine/a5_56mm/practice/ext
+ name = "extended magazine (5.56mm practice)"
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a5_56mm/ap
+ name = "magazine (5.56mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/ap
+
+/obj/item/ammo_magazine/a5_56mm/ap/ext
+ name = "extended magazine (5.56mm armor-piercing)"
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a5_56mm/hunter
+ name = "magazine (5.56mm hunting)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/hunter
+
+/obj/item/ammo_magazine/a5_56mm/hunter/ext
+ name = "extended magazine (5.56mm hunting)"
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a5_56mm/small
+ name = "reduced magazine (5.56mm)"
+ icon_state = "m556-small-1"
+ base_icon_state = "m556-small"
+ materials_base = list(MAT_STEEL = 900)
+ ammo_max = 10
+
+/obj/item/ammo_magazine/a5_56mm/small/empty
+ icon_state = "m556-small-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a5_56mm/small/practice
+ name = "magazine (5.56mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/practice
+
+/obj/item/ammo_magazine/a5_56mm/small/ap
+ name = "magazine (5.56mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/ap
+
+/obj/item/ammo_magazine/a5_56mm/small/hunter
+ name = "magazine (5.56mm hunting)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/hunter
+
+/obj/item/ammo_magazine/a5_56mm/clip
+ name = "ammo clip (5.56mm)"
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "rifle-5"
+ base_icon_state = "rifle"
+ ammo_caliber = /datum/ammo_caliber/a5_56mm
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+ magazine_type = MAGAZINE_TYPE_CLIP
+ ammo_preload = /obj/item/ammo_casing/a5_56mm
+ materials_base = list(MAT_STEEL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
+ ammo_max = 5
+
+/obj/item/ammo_magazine/a5_56mm/clip/ap
+ name = "rifle clip (5.56mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/ap
+
+/obj/item/ammo_magazine/a5_56mm/clip/hunter
+ name = "rifle clip (5.56mm hunting)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/hunter
+
+/obj/item/ammo_magazine/a5_56mm/clip/practice
+ name = "rifle clip (5.56mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm
+
+/obj/item/ammo_magazine/a5_56mm/saw
+ name = "magazine box (5.56mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_box.dmi'
+ icon_state = "a556-5"
+ base_icon_state = "a556"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+ ammo_caliber = /datum/ammo_caliber/a5_56mm
+ materials_base = list(MAT_STEEL = 1000)
+ ammo_preload = /obj/item/ammo_casing/a5_56mm
+ w_class = WEIGHT_CLASS_NORMAL // This should NOT fit in your pocket!!
+ ammo_max = 50
+
+/obj/item/ammo_magazine/a5_56mm/saw/ap
+ name = "magazine box (5.56mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/ap
+
+/obj/item/ammo_magazine/a5_56mm/saw/hunter
+ name = "magazine box (5.56mm hunting)"
+ ammo_preload = /obj/item/ammo_casing/a5_56mm/hunter
+
+/obj/item/ammo_magazine/a5_56mm/saw/empty
+ icon_state = "a556-0"
+ ammo_current = 0
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm
new file mode 100644
index 00000000000..c15269588f6
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm
@@ -0,0 +1,173 @@
+/datum/ammo_caliber/a5_7mm
+ caliber = "5.7x28mm"
+
+//* Casings
+
+/obj/item/ammo_casing/a5_7mm
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
+ desc = "A 5.7x28mm bullet casing."
+ regex_this_caliber = /datum/ammo_caliber/a5_7mm
+ projectile_type = /obj/projectile/bullet/pistol/lap
+ materials_base = list(MAT_STEEL = 30, MAT_COPPER = 30)
+
+/obj/item/ammo_casing/a5_7mm/ap
+ desc = "A 5.7x28mm armor-piercing bullet casing."
+ icon_state = "small-reinf"
+ projectile_type = /obj/projectile/bullet/pistol/ap
+ materials_base = list(MAT_STEEL = 80, MAT_COPPER = 30)
+
+/obj/item/ammo_casing/a5_7mm/hp
+ icon_state = "small-tech"
+ desc = "A 5.7x28mm hollow-point bullet casing."
+ projectile_type = /obj/projectile/bullet/pistol/hp
+ materials_base = list(MAT_STEEL = 60, MAT_COPPER = 30)
+
+/obj/item/ammo_casing/a5_7mm/hunter
+ desc = "A 5.7x28mm hunting bullet casing."
+ icon_state = "small-silver"
+ projectile_type = /obj/projectile/bullet/pistol/hunter
+ materials_base = list(MAT_STEEL = 30, MAT_COPPER = 50)
+
+//* Magazines
+
+/obj/item/ammo_magazine/a5_7mm
+ ammo_caliber = /datum/ammo_caliber/a5_7mm
+
+/obj/item/ammo_magazine/a5_7mm/nt_les
+ name = "magazine (5.7x28mm)"
+ desc = "A durable top-loading magazine, designed for withstanding rough treatment."
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "ntles-1"
+ base_icon_state = "ntles"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ ammo_max = 20
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/ap
+ name = "magazine (5.7x28mm armor piercing)"
+ rendering_static_overlay = "ap"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/ap
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/hp
+ name = "magazine (5.7x28mm hollow-point)"
+ rendering_static_overlay = "hp"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hp
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/hunter
+ name = "magazine (5.7x28mm hunter)"
+ rendering_static_overlay = "hunter"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/highcap
+ name = "high capacity magazine (5.7x28mm)"
+ icon_state = "ntles-high-1"
+ base_icon_state = "ntles-high"
+ ammo_max = 50
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/highcap/ap
+ name = "high capacity magazine (5.7x28mm armor piercing)"
+ rendering_static_overlay = "ap"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/ap
+/obj/item/ammo_magazine/a5_7mm/nt_les/highcap/hp
+ name = "high capacity magazine (5.7x28mm hollow-point)"
+ rendering_static_overlay = "hp"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hp
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/highcap/hunter
+ name = "high capacity magazine (5.7x28mm hunter)"
+ rendering_static_overlay = "hunter"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter
+
+/obj/item/ammo_magazine/a5_7mm/nt_les/highcap/empty
+ ammo_current = 0
+
+//Harpy SMG
+
+/obj/item/ammo_magazine/a5_7mm/harpy_smg
+ name = "NT-SMG-8 magazine (5.7x28mm)"
+ desc = "A compact double stack aluminum magazine."
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "harpy"
+ rendering_count = 1
+ rendering_system = GUN_RENDERING_STATES
+ ammo_max = 40
+
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap
+ name = "NT-SMG-8 magazine (5.7x28mm armor piercing)"
+ rendering_static_overlay = "ap"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/ap
+
+//Fiveseven mags
+/obj/item/ammo_magazine/a5_7mm/five_seven
+ name = "fiveseven magazine (5.7x28mm)"
+ desc = "A sturdy double stack magazine with a reinforced spring, designed for withstanding rough treatment."
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "fiveseven-0"
+ base_icon_state = "fiveseven"
+ materials_base = list(MAT_STEEL = 300)
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ ammo_caliber = /datum/ammo_caliber/a5_7mm
+ ammo_preload = /obj/item/ammo_casing/a5_7mm
+ ammo_max = 20
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap
+ name = "magazine (5.7x28mm armor piercing)"
+ rendering_static_overlay = "ap"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/ap
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/hp
+ name = "magazine (5.7x28mm hollow-point)"
+ rendering_static_overlay = "hp"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hp
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/hunter
+ name = "magazine (5.7x28mm hunter)"
+ rendering_static_overlay = "hunter"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/highcap
+ name = "high capacity fiveseven magazine (5.7x28mm)"
+ desc = "A sturdy, extra long double stack magazine with a reinforced spring, designed for withstanding rough treatment."
+ icon_state = "fiveseven-high-1"
+ base_icon_state = "fiveseven-high"
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/highcap/ap
+ name = "high capacity magazine (5.7x28mm armor piercing)"
+ rendering_static_overlay = "ap"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/ap
+/obj/item/ammo_magazine/a5_7mm/five_seven/highcap/hp
+ name = "high capacity magazine (5.7x28mm hollow-point)"
+ rendering_static_overlay = "hp"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hp
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/highcap/hunter
+ name = "high capacity magazine (5.7x28mm hunter)"
+ rendering_static_overlay = "hunter"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter
+
+/obj/item/ammo_magazine/a5_7mm/five_seven/highcap/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a5_7mm/p90
+ name = "high capacity top mounted magazine (5.7x28mm armor-piercing)"
+ icon_state = "p90-1"
+ base_icon_state = "p90"
+ rendering_system = GUN_RENDERING_STATES
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/ap
+ ammo_max = 50
+
+/obj/item/ammo_magazine/a5_7mm/p90/hunter
+ name = "high capacity top mounted magazine (5.7x28mm hunter)"
+ ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter
+
+/obj/item/ammo_magazine/a5_7mm/p90/empty
+ ammo_current = 0
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm
new file mode 100644
index 00000000000..012491f1f1a
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm
@@ -0,0 +1,36 @@
+/datum/ammo_caliber/a5mm
+ caliber = "5mm"
+ diameter = 5
+
+//* Magazines *//
+
+/obj/item/ammo_magazine/m5mmcaseless
+ name = "prototype rifle magazine (5mm caseless)"
+ icon_state = "caseless-mag-0"
+ base_icon_state = "caseless-mag"
+ ammo_type = /obj/item/ammo_casing/a5mmcaseless
+ ammo_caliber = /datum/ammo_caliber/a5mm
+ ammo_max = 30
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/m5mmcaseless/stun
+ icon_state = "caseless-mag-alt-0"
+ base_icon_state = "caseless-mag-alt"
+ ammo_type = /obj/item/ammo_casing/a5mmcaseless/stun
+
+//* Ammunition *//
+
+/obj/item/ammo_casing/a5mmcaseless
+ desc = "A 5mm solid phoron caseless round."
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
+ icon_spent = TRUE
+ regex_this_caliber = /datum/ammo_caliber/a5mm
+ projectile_type = /obj/projectile/bullet/pistol // Close enough to be comparable.
+ materials_base = list(MAT_STEEL = 180)
+ casing_flags = CASING_DELETE
+
+/obj/item/ammo_casing/a5mmcaseless/stun
+ desc = "A 5mm solid phoron caseless stun round."
+ projectile_type = /obj/projectile/energy/electrode // Maybe nerf this considering there's 30 rounds in a mag.
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a75.dm b/code/modules/projectiles/ammunition/calibers/normal/a75.dm
new file mode 100644
index 00000000000..9dd237c118f
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a75.dm
@@ -0,0 +1,51 @@
+/**
+ * oh god oh fuck-
+ */
+/datum/ammo_caliber/a75
+ caliber = ".75"
+
+/obj/item/ammo_casing/a75
+ desc = "A .75 gyrojet rocket sheathe."
+ icon = 'icons/modules/projectiles/casings/misc.dmi'
+ icon_state = "shell"
+ regex_this_caliber = /datum/ammo_caliber/a75
+ projectile_type = /obj/projectile/bullet/gyro
+ materials_base = list(MAT_STEEL = 2000)
+
+/obj/item/ammo_magazine/a75
+ name = "magazine (.75 Gyrojet)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "m75-1"
+ base_icon_state = "m75"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ ammo_caliber = /datum/ammo_caliber/a75
+ ammo_preload = /obj/item/ammo_casing/a75
+ ammo_max = 8
+
+/obj/item/ammo_magazine/a75/empty
+ icon_state = "m75-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a75/rifle
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a75/rifle/empty
+ icon_state = "m75-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a75/box
+ name = "box magazine (.75 Gyrojet)"
+
+ icon = 'icons/modules/projectiles/magazines/old_magazine_box.dmi'
+ icon_state = "m75-1"
+ base_icon_state = "m75"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ ammo_max = 50
+
+/obj/item/ammo_magazine/a75/box/empty
+ icon_state = "m75-0"
+
+ ammo_current = 0
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a7_62mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a7_62mm.dm
new file mode 100644
index 00000000000..a8f169accf5
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a7_62mm.dm
@@ -0,0 +1,202 @@
+/datum/ammo_caliber/a7_62mm
+ caliber = "7.62mm"
+
+/obj/item/ammo_casing/a7_62mm
+ desc = "A 7.62mm bullet casing."
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "large"
+ projectile_type = /obj/projectile/bullet/rifle/a762
+ materials_base = list(MAT_STEEL = 200)
+ worth_intrinsic = 5
+
+/obj/item/ammo_casing/a7_62mm/ap
+ desc = "A 7.62mm armor-piercing bullet casing."
+ icon_state = "large-blue"
+ projectile_type = /obj/projectile/bullet/rifle/a762/ap
+ materials_base = list(MAT_STEEL = 300)
+ worth_intrinsic = 7.5
+
+/obj/item/ammo_casing/a7_62mm/practice
+ desc = "A 7.62mm practice bullet casing."
+ icon_state = "large-white"
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/projectile/bullet/practice
+ materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 1.5
+
+/obj/item/ammo_casing/a7_62mm/blank
+ desc = "A blank 7.62mm bullet casing."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/blank
+ materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 1.5
+
+/obj/item/ammo_casing/a7_62mm/hp
+ desc = "A 7.62mm hollow-point bullet casing."
+ icon_state = "large-red"
+ projectile_type = /obj/projectile/bullet/rifle/a762/hp
+
+/obj/item/ammo_casing/a7_62mm/hunter
+ desc = "A 7.62mm hunting bullet casing."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/rifle/a762/hunter
+
+/obj/item/ammo_casing/a7_62mm/sniper
+ desc = "A 7.62mm high velocity bullet casing optimised for a marksman rifle."
+ icon_state = "large-blue"
+ projectile_type = /obj/projectile/bullet/rifle/a762/sniper
+
+/obj/item/ammo_casing/a7_62mm/sniperhunter
+ desc = "A 7.62mm high velocity hunter bullet casing optimised for a marksman rifle."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/rifle/a762/sniperhunter
+
+/obj/item/ammo_casing/a7_62mm/silver
+ desc = "A 7.62mm hunting bullet casing. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "large-white"
+ projectile_type = /obj/projectile/bullet/rifle/a762/silver
+ materials_base = list(MAT_STEEL = 300, MAT_SILVER = 150)
+
+/obj/item/ammo_magazine/a7_62mm
+ name = "magazine (7.62mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "m762-1"
+ base_icon_state = "m762"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ materials_base = list(MAT_STEEL = 1000)
+ ammo_preload = /obj/item/ammo_casing/a7_62mm
+ ammo_max = 10
+
+/obj/item/ammo_magazine/a7_62mm/ap
+ name = "magazine (7.62mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/ap
+
+/obj/item/ammo_magazine/a7_62mm/empty
+ icon_state = "m762-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a7_62mm/garand
+ name = "garand clip (7.62mm)" // The clip goes into the magazine, hence the name. I'm very sure this is correct.
+ icon = 'icons/modules/projectiles/magazines/old_magazine_clip.dmi'
+ icon_state = "gerand-8"
+ base_icon_state = "gerand"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 8
+
+ materials_base = list(MAT_STEEL = 800)
+ ammo_preload = /obj/item/ammo_casing/a7_62mm
+ ammo_max = 8
+
+/obj/item/ammo_magazine/a7_62mm/garand/ap
+ name = "garand clip (7.62mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/ap
+
+/obj/item/ammo_magazine/a7_62mm/garand/hunter
+ name = "garand clip (7.62mm Hunting)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/hunter
+
+/obj/item/ammo_magazine/a7_62mm/garand/sniperhunter
+ name = "garand clip (7.62mm HV Hunting)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/sniperhunter
+
+/obj/item/ammo_magazine/a7_62mm/empty
+ icon_state = "gerand-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a7_62mm/clip
+ name = "ammo clip (7.62mm)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm
+ materials_base = list(MAT_STEEL = 1000)
+ ammo_max = 5
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "rifle-5"
+ base_icon_state = "rifle"
+ magazine_type = MAGAZINE_TYPE_CLIP
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+
+/obj/item/ammo_magazine/a7_62mm/clip/ap
+ name = "rifle clip (7.62mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/ap
+
+/obj/item/ammo_magazine/a7_62mm/clip/practice
+ name = "rifle clip (7.62mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/practice
+
+/obj/item/ammo_magazine/a7_62mm/clip/hunter
+ name = "rifle clip (7.62mm hunting)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/hunter
+
+/obj/item/ammo_magazine/a7_62mm/clip/sniper
+ name = "rifle clip (7.62mm HV)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/sniper
+
+/obj/item/ammo_magazine/a7_62mm/clip/sniperhunter
+ name = "rifle clip (7.62mm HV hunting)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/sniperhunter
+
+/obj/item/ammo_magazine/a7_62mm/clip/silver
+ name = "rifle clip (7.62mm silver)"
+ icon_state = "rifle-silver-5"
+ base_icon_state = "rifle-silver"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/silver
+
+/obj/item/ammo_magazine/a7_62mm/svd
+ name = "\improper SVD magazine (7.62mm)"
+ materials_base = list(MAT_STEEL = 1000)
+ ammo_preload = /obj/item/ammo_casing/a7_62mm
+ ammo_max = 10
+
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "svd-1"
+ base_icon_state = "svd"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/a7_62mm/svd/ap
+ name = "\improper SVD magazine (7.62mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/ap
+
+/obj/item/ammo_magazine/a7_62mm/svd/empty
+ icon_state = "svd-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a7_62mm/mg42
+ name = "antique ammo drum (7.62mm)"
+ materials_base = list(MAT_STEEL = 1000)
+ ammo_preload = /obj/item/ammo_casing/a7_62mm
+ w_class = WEIGHT_CLASS_NORMAL
+ ammo_max = 50
+
+ icon = 'icons/modules/projectiles/magazines/old_magazine_drum.dmi'
+ icon_state = "mg42-1"
+ base_icon_state = "mg42"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/a7_62mm/mg42/ap
+ name = "antique ammo drum box (7.62mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a7_62mm/ap
+
+/obj/item/ammo_magazine/a7_62mm/mg42/empty
+ icon_state = "mg42-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a7_62mm/m60
+ name = "M60 belt (7.62mm)"
+ materials_base = list(MAT_STEEL = 1000)
+ ammo_preload = /obj/item/ammo_casing/a7_62mm
+ ammo_max = 75
+
+ icon = 'icons/modules/projectiles/magazines/old_magazine_box.dmi'
+ icon_state = "m60-1"
+ base_icon_state = "m60"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/a7_62mm/m60/empty
+ icon_state = "m60-0"
+ ammo_current = 0
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm
new file mode 100644
index 00000000000..ab02a61e8c9
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm
@@ -0,0 +1,21 @@
+/datum/ammo_caliber/a7_92mm
+ caliber = "7.92x33mm"
+
+/obj/item/ammo_magazine/a7_92mm
+ name = "box mag (7.92x33mm Kurz)"
+
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "stg"
+
+ ammo_caliber = /datum/ammo_caliber/a7_92mm
+ ammo_type = /obj/item/ammo_casing/a792
+ ammo_max = 30
+
+/obj/item/ammo_magazine/a7_92mm/empty
+ ammo_current = 0
+
+/obj/item/ammo_casing/a792
+ desc = "A 7.92x33mm Kurz casing."
+ icon_state = "rifle-casing"
+ regex_this_caliber = /datum/ammo_caliber/a7_92mm
+ projectile_type = /obj/projectile/bullet/rifle/a762
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a9_5mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a9_5mm.dm
new file mode 100644
index 00000000000..ad928b1f24f
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a9_5mm.dm
@@ -0,0 +1,33 @@
+/datum/ammo_caliber/a9_5mm
+ caliber = "9.5x40mm"
+ diameter = 9.5
+ length = 40
+
+//* Casings *//
+
+/obj/item/ammo_casing/a95
+ desc = "A 9.5x40mm bullet casing."
+ icon_state = "rifle-casing"
+ regex_this_caliber = /datum/ammo_caliber/a9_5mm
+ projectile_type = /obj/projectile/bullet/rifle/a95
+
+//* Magazines *//
+
+/obj/item/ammo_magazine/m95
+ name = "box mag (9.5x40mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "battlerifle-20"
+ base_icon_state = "battlerifle"
+ ammo_caliber = /datum/ammo_caliber/a9_5mm
+ ammo_preload = /obj/item/ammo_casing/a95
+ ammo_max = 36
+ rendering_count = 1
+ rendering_system = GUN_RENDERING_STATES
+
+/obj/item/ammo_magazine/m95/empty
+ ammo_current = 0
+
+//* Projectiles *//
+
+/obj/projectile/bullet/rifle/a95
+ damage = 40
diff --git a/code/modules/projectiles/ammunition/calibers/normal/a9mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a9mm.dm
new file mode 100644
index 00000000000..7c38d166c29
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/normal/a9mm.dm
@@ -0,0 +1,208 @@
+/datum/ammo_caliber/a9mm
+ caliber = "9mm"
+
+/obj/item/ammo_casing/a9mm
+ desc = "A 9mm bullet casing."
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
+ projectile_type = /obj/projectile/bullet/pistol
+ materials_base = list(MAT_STEEL = 60)
+
+/obj/item/ammo_casing/a9mm/ap
+ desc = "A 9mm armor-piercing bullet casing."
+ icon_state = "small-reinf"
+ projectile_type = /obj/projectile/bullet/pistol/ap
+ materials_base = list(MAT_STEEL = 80)
+
+/obj/item/ammo_casing/a9mm/hp
+ desc = "A 9mm hollow-point bullet casing."
+ projectile_type = /obj/projectile/bullet/pistol/hp
+
+/obj/item/ammo_casing/a9mm/hunter
+ desc = "A 9mm hunting bullet casing."
+ icon_state = "small-silver"
+ projectile_type = /obj/projectile/bullet/pistol/hunter
+ materials_base = list(MAT_STEEL = 80)
+
+/obj/item/ammo_casing/a9mm/flash
+ desc = "A 9mm flash shell casing."
+ icon_state = "small-tech"
+ projectile_type = /obj/projectile/energy/flash
+
+/obj/item/ammo_casing/a9mm/rubber
+ desc = "A 9mm rubber bullet casing."
+ projectile_type = /obj/projectile/bullet/pistol/rubber
+
+/obj/item/ammo_casing/a9mm/practice
+ desc = "A 9mm practice bullet casing."
+ icon_state = "small-silver"
+ projectile_type = /obj/projectile/bullet/practice
+
+/obj/item/ammo_casing/a9mm/silver
+ desc = "A 9mm silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
+ icon_state = "small-silver"
+ projectile_type = /obj/projectile/bullet/pistol/silver
+ materials_base = list(MAT_STEEL = 130, MAT_SILVER = 100)
+
+/obj/item/ammo_magazine/a9mm
+ ammo_caliber = /datum/ammo_caliber/a9mm
+
+/obj/item/ammo_magazine/a9mm
+ name = "magazine (9mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "9x19-big-1"
+ base_icon_state = "9x19-big"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ materials_base = list(MAT_STEEL = 600)
+ ammo_preload = /obj/item/ammo_casing/a9mm
+ ammo_max = 10
+
+/obj/item/ammo_magazine/a9mm/large
+ icon_state = "9x19-ext-1"
+ base_icon_state = "9x19-ext"
+ ammo_max = 17
+
+/obj/item/ammo_magazine/a9mm/large/ap
+ name = "magazine (9mm armor-piercing)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/ap
+
+/obj/item/ammo_magazine/a9mm/large/hp
+ name = "magazine (9mm hollow-point)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/hp
+
+/obj/item/ammo_magazine/a9mm/empty
+ icon_state = "9x19-big-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a9mm/flash
+ name = "magazine (9mm flash)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/flash
+
+/obj/item/ammo_magazine/a9mm/rubber
+ name = "magazine (9mm rubber)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/rubber
+
+/obj/item/ammo_magazine/a9mm/practice
+ name = "magazine (9mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/practice
+
+// Compact
+/obj/item/ammo_magazine/a9mm/compact
+ name = "compact magazine (9mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "9x19-small-1"
+ base_icon_state = "9x19-small"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ materials_base = list(MAT_STEEL = 480)
+ ammo_preload = /obj/item/ammo_casing/a9mm
+ ammo_max = 8
+
+/obj/item/ammo_magazine/a9mm/compact/empty
+ icon_state = "9x19-small-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a9mm/compact/flash
+ name = "compact magazine (9mm flash)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/flash
+
+/obj/item/ammo_magazine/a9mm/compact/rubber
+ name = "compact magazine (9mm rubber)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/rubber
+
+/obj/item/ammo_magazine/a9mm/compact/practice
+ name = "compact magazine (9mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/practice
+
+/obj/item/ammo_magazine/a9mm/compact/double
+ name = "compact magazine (9mm double stack)"
+ materials_base = list(MAT_STEEL = 900)
+ ammo_max = 16
+
+// SMG
+/obj/item/ammo_magazine/a9mm/top_mount
+ name = "top mounted magazine (9mm)"
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "9mmt-5"
+ base_icon_state = "9mmt"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+ ammo_preload = /obj/item/ammo_casing/a9mm
+ materials_base = list(MAT_STEEL = 1200)
+ ammo_max = 20
+
+/obj/item/ammo_magazine/a9mm/top_mount/empty
+ icon_state = "9mmt-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a9mm/top_mount/hunter
+ name = "top mounted magazine (9mm hunter)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/hunter
+
+/obj/item/ammo_magazine/a9mm/top_mount/rubber
+ name = "top mounted magazine (9mm rubber)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/rubber
+
+/obj/item/ammo_magazine/a9mm/top_mount/flash
+ name = "top mounted magazine (9mm flash)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/flash
+
+/obj/item/ammo_magazine/a9mm/top_mount/practice
+ name = "top mounted magazine (9mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/practice
+
+/obj/item/ammo_magazine/a9mm/clip
+ name = "ammo clip (9mm)"
+ icon = 'icons/modules/projectiles/magazines/old_stripper.dmi'
+ icon_state = "pistol-10"
+ base_icon_state = "pistol"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 10
+ magazine_type = MAGAZINE_TYPE_CLIP
+ desc = "A stripper clip for reloading 9mm rounds into magazines."
+ ammo_preload = /obj/item/ammo_casing/a9mm
+ materials_base = list(MAT_STEEL = 200)
+ ammo_max = 10
+
+/obj/item/ammo_magazine/a9mm/clip/hunter
+ name = "ammo clip (9mm hunter)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/hunter
+
+/obj/item/ammo_magazine/a9mm/clip/rubber
+ name = "ammo clip (9mm rubber)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/rubber
+
+/obj/item/ammo_magazine/a9mm/clip/practice
+ name = "ammo clip (9mm practice)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/practice
+
+/obj/item/ammo_magazine/a9mm/clip/flash
+ name = "ammo clip (9mm flash)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/flash
+
+/obj/item/ammo_magazine/a9mm/clip/silver
+ name = "ammo clip (9mm silver)"
+ ammo_preload = /obj/item/ammo_casing/a9mm/silver
+ icon_state = "pistol-silver-10"
+ base_icon_state = "pistol-silver"
+
+/obj/item/ammo_magazine/a9mm/advanced_smg
+ desc = "A very high capacity double stack magazine made specially for the Advanced SMG. Filled with 21 9mm bullets."
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "advsmg-1"
+ base_icon_state = "advsmg"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+ ammo_preload = /obj/item/ammo_casing/a9mm
+ materials_base = list(MAT_STEEL = 700)
+ ammo_max = 21
+
+/obj/item/ammo_magazine/a9mm/advanced_smg/empty
+ icon_state = "advsmg-0"
+ ammo_current = 0
+
+/obj/item/ammo_magazine/a9mm/advanced_smg/ap
+ desc = "A high capacity double stack magazine made specially for the Advanced SMG. Filled with 21 9mm armor piercing bullets."
+ ammo_preload = /obj/item/ammo_casing/a9mm/ap
diff --git a/code/modules/projectiles/ammunition/calibers/special/arrow.dm b/code/modules/projectiles/ammunition/calibers/special/arrow.dm
new file mode 100644
index 00000000000..3b065aa758b
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/arrow.dm
@@ -0,0 +1,51 @@
+/datum/ammo_caliber/arrow
+ caliber = "arrow"
+
+/obj/item/ammo_casing/arrow
+ name = "arrow of questionable material"
+ desc = "You shouldn't be seeing this arrow."
+ projectile_type = /obj/projectile/bullet/reusable/arrow
+ regex_this_caliber = /datum/ammo_caliber/arrow
+
+ icon = 'icons/modules/projectiles/casings/arrow.dmi'
+ icon_state = "arrow"
+ icon_spent = FALSE
+
+ throw_force = 3 //good luck hitting someone with the pointy end of the arrow
+ throw_speed = 3
+
+ casing_flags = CASING_DELETE
+
+/obj/item/ammo_casing/arrow/wood
+ name = "wooden arrow"
+ desc = "An arrow made of wood, typically fired from a bow."
+
+/obj/item/ammo_casing/arrow/bone
+ name = "bone arrow"
+ desc = "An arrow made of bone, knapped to a piercing tip."
+ icon_state = "ashenarrow"
+ projectile_type = /obj/projectile/bullet/reusable/arrow/bone
+
+/obj/item/ammo_casing/arrow/ash
+ name = "ashen arrow"
+ desc = "An arrow made of wood, hardened by fire."
+ icon_state = "ashenarrow"
+ projectile_type = /obj/projectile/bullet/reusable/arrow/ash
+
+/obj/item/ammo_casing/arrow/bone_ap
+ name = "hardened bone arrow"
+ desc = "An arrow made of bone and sinew. The tip is sharp enough to pierce through a goliath plate."
+ icon_state = "bonearrow"
+ projectile_type = /obj/projectile/bullet/reusable/arrow/bone_ap
+
+/obj/item/ammo_casing/arrow/bronze
+ name = "bronze arrow"
+ desc = "An arrow made of wood, tipped with bronze. The tip is dense enough to provide some armor penetration."
+ icon_state = "bronzearrow"
+ projectile_type = /obj/projectile/bullet/reusable/arrow/bronze
+
+/obj/item/ammo_casing/arrow/plunger
+ name = "plunger"
+ desc = "It's a plunger, for plunging."
+ icon_state = "plunger"
+ projectile_type = /obj/projectile/bullet/reusable/plunger
diff --git a/code/modules/projectiles/ammunition/calibers/special/biomatter-wax.dm b/code/modules/projectiles/ammunition/calibers/special/biomatter-wax.dm
new file mode 100644
index 00000000000..2d53f3d3708
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/biomatter-wax.dm
@@ -0,0 +1,31 @@
+
+/datum/ammo_caliber/biomatter/wax
+ caliber = "wax"
+
+/obj/item/ammo_casing/biomatter/wax
+ name = "wax globule"
+ desc = "Tacky wax rendered semi-solid and ready for compression."
+ icon_state = "globule"
+ color = "#E6E685"
+ projectile_type = /obj/projectile/bullet/organic/wax
+ regex_this_caliber = /datum/ammo_caliber/biomatter/wax
+ materials_base = list(
+ /datum/material/wax::id = 100,
+ )
+
+/obj/item/ammo_magazine/biovial
+ name = "bio-vial (Liquid Wax)"
+ desc = "Biological Munitions Vials, commonly referred to as bio-vials, contain liquid biomatter of some form, for use in exotic weapons systems. This one accepts wax globules."
+
+ icon = 'icons/modules/projectiles/magazines/bio.dmi'
+ icon_state = "vial-4"
+ base_icon_state = "vial"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 4
+
+ ammo_caliber = /datum/ammo_caliber/biomatter/wax
+ ammo_preload = /obj/item/ammo_casing/biomatter/wax
+ materials_base = list(
+ /datum/material/wax::id = 100,
+ )
+ ammo_max = 10
diff --git a/code/modules/projectiles/ammunition/calibers/special/biomatter.dm b/code/modules/projectiles/ammunition/calibers/special/biomatter.dm
new file mode 100644
index 00000000000..44e5556d5d0
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/biomatter.dm
@@ -0,0 +1,47 @@
+/datum/ammo_caliber/biomatter
+ caliber = "biomatter"
+
+/obj/item/ammo_casing/biomatter
+ name = "biomatter globule"
+ desc = "Globular biomatter rendered and ready for compression."
+ regex_this_caliber = /datum/ammo_caliber/biomatter
+
+ icon = 'icons/modules/projectiles/casings/bio.dmi'
+ icon_state = "globule"
+ icon_spent = FALSE
+
+ color = "#FFE0E2"
+ projectile_type = /obj/projectile/bullet/organic
+ materials_base = list("flesh" = 100)
+
+ casing_flags = CASING_DELETE
+
+/obj/item/ammo_magazine/biomatter
+ name = "magazine (Compressed Biomatter)"
+ desc = "An advanced matter compression unit, used to feed biomass into a Rapid On-board Fabricator. Accepts biomass globules."
+
+ icon_state = "bio-4"
+ base_icon_state = "bio"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 4
+
+ ammo_caliber = /datum/ammo_caliber/biomatter
+ ammo_preload = /obj/item/ammo_casing/biomatter
+ materials_base = list("flesh" = 1000)
+ ammo_max = 10
+
+/obj/item/ammo_magazine/biomatter
+ ammo_max = 10
+
+/obj/item/ammo_magazine/biomatter/large
+ icon_state = "bio-large-5"
+ base_icon_state = "bio-large"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+
+ ammo_max = 30
+
+/obj/item/ammo_magazine/biomatter/large/banana
+ icon_state = "banana-mag"
+ base_icon_state = "banana-mag"
+ rendering_system = GUN_RENDERING_DISABLED
diff --git a/code/modules/projectiles/ammunition/calibers/special/blunderbuss.dm b/code/modules/projectiles/ammunition/calibers/special/blunderbuss.dm
new file mode 100644
index 00000000000..61294cbe13e
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/blunderbuss.dm
@@ -0,0 +1,18 @@
+/datum/ammo_caliber/blunderbuss
+ caliber = "blunderbuss"
+
+/obj/item/ammo_casing/blunderbuss
+ name = "shot"
+ desc = "A bundle of lead balls and other assorted shrapnel."
+ icon = 'icons/modules/projectiles/casings/blunderbuss.dmi'
+ icon_state = "blunderbuss"
+ regex_this_caliber = /datum/ammo_caliber/blunderbuss
+ projectile_type = /obj/projectile/bullet/pellet/blunderbuss
+ materials_base = list("lead" = 500)
+
+/obj/item/ammo_casing/blunderbuss/silver
+ name = "sliver shot"
+ desc = "A bundle of silver lead allow balls and other assorted bits of silver."
+ icon_state = "silverbuss"
+ projectile_type = /obj/projectile/bullet/pellet/blunderbuss/silver
+ materials_base = list("lead" = 500, "silver" = 500)
diff --git a/code/modules/projectiles/ammunition/calibers/special/cap.dm b/code/modules/projectiles/ammunition/calibers/special/cap.dm
new file mode 100644
index 00000000000..3550ad9a308
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/cap.dm
@@ -0,0 +1,24 @@
+/datum/ammo_caliber/cap_gun
+ caliber = "capgun"
+
+/obj/item/ammo_casing/cap_gun
+ name = "cap"
+ desc = "A cap for children toys."
+ icon = 'icons/modules/projectiles/casings/slim.dmi'
+ icon_state = "small"
+ regex_this_caliber = /datum/ammo_caliber/cap_gun
+ color = "#FF0000"
+ projectile_type = /obj/projectile/bullet/pistol/cap
+ materials_base = list(MAT_STEEL = 85)
+
+/obj/item/ammo_magazine/cap_gun
+ name = "speedloader (caps)"
+ icon = 'icons/modules/projectiles/magazines/old_speedloader_7.dmi'
+ icon_state = "normal-7"
+ base_icon_state = "normal"
+ rendering_system = GUN_RENDERING_STATES
+ ammo_caliber = /datum/ammo_caliber/cap_gun
+ ammo_preload = /obj/item/ammo_casing/cap_gun
+ materials_base = list(MAT_STEEL = 50)
+ ammo_max = 7
+
diff --git a/code/modules/projectiles/ammunition/calibers/special/dart.dm b/code/modules/projectiles/ammunition/calibers/special/dart.dm
new file mode 100644
index 00000000000..151bef61bc9
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/dart.dm
@@ -0,0 +1,71 @@
+/datum/ammo_caliber/dart
+ caliber = "dart"
+
+//* Casings *//
+
+/obj/item/ammo_casing/dart/chemdart
+ name = "chemical dart"
+ desc = "A casing containing a small hardened, hollow dart."
+ icon_state = "dartcasing"
+ regex_this_caliber = /datum/ammo_caliber/dart
+ projectile_type = /obj/projectile/bullet/chemdart
+
+/obj/item/ammo_casing/dart/chemdart/small
+ name = "short chemical dart"
+ desc = "A casing containing a small hardened, hollow dart."
+ projectile_type = /obj/projectile/bullet/chemdart/small
+
+//* Magazines *//
+
+/obj/item/ammo_magazine/chemdart
+ name = "dart cartridge"
+ desc = "A rack of hollow darts."
+
+ icon_state = "darts-5"
+ base_icon_state = "darts"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 5
+
+ item_state = "rcdammo"
+ origin_tech = list(TECH_MATERIAL = 2)
+ magazine_type = MAGAZINE_TYPE_NORMAL
+ ammo_caliber = /datum/ammo_caliber/dart
+ ammo_type = /obj/item/ammo_casing/dart/chemdart
+ ammo_max = 5
+
+/obj/item/ammo_magazine/chemdart/small
+ name = "small dart cartridge"
+ desc = "A rack of hollow darts."
+
+ icon_state = "darts_small-5"
+ base_icon_state = "darts_small"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 3
+
+ origin_tech = list(TECH_MATERIAL = 2)
+ ammo_type = /obj/item/ammo_casing/dart/chemdart/small
+ ammo_max = 3
+
+//* Projectiles *//
+
+/obj/projectile/bullet/chemdart
+ name = "dart"
+ icon_state = "dart"
+ damage = 5
+ var/reagent_amount = 15
+ range = WORLD_ICON_SIZE * 15
+
+ muzzle_type = null
+
+/obj/projectile/bullet/chemdart/Initialize(mapload)
+ . = ..()
+ create_reagents(reagent_amount)
+
+/obj/projectile/bullet/chemdart/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
+ if(blocked < 2 && isliving(target))
+ var/mob/living/L = target
+ if(L.can_inject(target_zone=def_zone))
+ reagents.trans_to_mob(L, reagent_amount, CHEM_INJECT)
+
+/obj/projectile/bullet/chemdart/small
+ reagent_amount = 10
diff --git a/code/modules/projectiles/ammunition/calibers/special/foam.dm b/code/modules/projectiles/ammunition/calibers/special/foam.dm
new file mode 100644
index 00000000000..0379c401ac9
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/foam.dm
@@ -0,0 +1,137 @@
+/datum/ammo_caliber/foam
+ caliber = "donksoft"
+
+//* Ammunition *//
+
+/obj/item/ammo_casing/foam
+ name = "foam dart"
+ desc = "A soft projectile made out of orange foam with a blue plastic tip."
+ projectile_type = /obj/projectile/bullet/reusable/foam
+ regex_this_caliber = /datum/ammo_caliber/foam
+ icon = 'icons/modules/projectiles/casings/foam.dmi'
+ icon_state = "dart"
+ throw_force = 0
+ throw_speed = 3
+ casing_flags = CASING_DELETE
+ drop_sound = 'sound/items/drop/accessory.ogg'
+ pickup_sound = 'sound/items/pickup/accessory.ogg'
+
+/obj/item/ammo_casing/foam/riot
+ name = "riot dart"
+ desc = "A flexible projectile made out of hardened orange foam with a red plastic tip."
+ projectile_type = /obj/projectile/bullet/reusable/foam/riot
+ icon_state = "dart-riot"
+
+//* Magazines *//
+
+// todo: should the type filtering be on the gun or on the magazine? probably the magazine tbh.
+
+/obj/item/ammo_magazine/foam
+ name = "abstract toy magazine"
+ desc = "You shouldn't be seeing this, contact a Maintainer!"
+
+ icon = 'icons/modules/projectiles/magazines/foam.dmi'
+
+ materials_base = list(MAT_PLASTIC = 480)
+ ammo_caliber = /datum/ammo_caliber/foam
+ ammo_preload = /obj/item/ammo_casing/foam
+ ammo_max = 8
+
+/obj/item/ammo_magazine/foam/box
+ name = "box of foam darts"
+ desc = "It has a picture of some foam darts on it."
+
+ icon_state = "box"
+ base_icon_state = "box"
+ inhand_state = "box"
+
+ ammo_max = 30
+
+ drop_sound = 'sound/items/drop/ammobox.ogg'
+ pickup_sound = 'sound/items/pickup/ammobox.ogg'
+
+/obj/item/ammo_magazine/foam/box/riot
+ name = "box of riot darts"
+ desc = "It has a picture of some angry looking foam darts on it."
+
+ icon_state = "box-riot"
+ base_icon_state = "box-riot"
+
+ ammo_preload = /obj/item/ammo_casing/foam/riot
+
+/obj/item/ammo_magazine/foam/pistol
+ name = "toy pistol magazine"
+ desc = "A plastic pistol magazine for foam darts!"
+
+ icon_state = "pistol-1"
+ base_icon_state = "pistol"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+/obj/item/ammo_magazine/foam/pistol/empty
+ icon_state = "pistol-0"
+
+ ammo_current = 0
+
+/obj/item/ammo_magazine/foam/pistol/riot
+ name = "toy pistol magazine (riot)"
+
+ icon_state = "pistol-riot-1"
+ base_icon_state = "pistol-riot"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ ammo_preload = /obj/item/ammo_casing/foam/riot
+
+/obj/item/ammo_magazine/foam/lmg
+ name = "toy magazine box"
+ desc = "A heavy plastic box designed to hold belts of foam darts! Wow!"
+
+ icon_state = "lmg-1"
+ base_icon_state = "lmg"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ materials_base = list(MAT_PLASTIC = 10000)
+ w_class = WEIGHT_CLASS_NORMAL
+ ammo_max = 50
+
+/obj/item/ammo_magazine/foam/lmg/empty
+ ammo_current = 0
+
+/obj/item/ammo_magazine/foam/lmg/riot
+ name = "toy magazine box (riot)"
+
+ icon_state = "lmg-riot-1"
+ base_icon_state = "lmg-riot"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ ammo_preload = /obj/item/ammo_casing/foam/riot
+
+/obj/item/ammo_magazine/foam/smg
+ name = "toy submachine gun magazine"
+ desc = "A plastic recreation of a double-stack submachine gun magazine."
+
+ icon_state = "smg-1"
+ base_icon_state = "smg"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ materials_base = list(MAT_PLASTIC = 1200)
+ ammo_max = 20
+
+/obj/item/ammo_magazine/foam/smg/empty
+ icon_state = "smg-0"
+
+ ammo_current = 0
+
+/obj/item/ammo_magazine/foam/smg/riot
+ name = "toy submachine gun magazine (riot)"
+
+ icon_state = "smg-riot-1"
+ base_icon_state = "smg-riot"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ ammo_preload = /obj/item/ammo_casing/foam/riot
diff --git a/code/modules/projectiles/ammunition/calibers/special/microbattery.dm b/code/modules/projectiles/ammunition/calibers/special/microbattery.dm
new file mode 100644
index 00000000000..894ffcd4c0d
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/microbattery.dm
@@ -0,0 +1,4 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+/datum/ammo_caliber/microbattery
diff --git a/code/modules/projectiles/ammunition/calibers/special/musket.dm b/code/modules/projectiles/ammunition/calibers/special/musket.dm
new file mode 100644
index 00000000000..6aed4b07d22
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/musket.dm
@@ -0,0 +1,19 @@
+/datum/ammo_caliber/musket
+ caliber = "musket"
+
+/obj/item/ammo_casing/musket
+ name = "musket ball"
+ desc = "A solid ball made of lead."
+ icon = 'icons/modules/projectiles/casings/musket.dmi'
+ icon_state = "musketball"
+ regex_this_caliber = /datum/ammo_caliber/musket
+ projectile_type = /obj/projectile/bullet/musket
+ materials_base = list("lead" = 100)
+ casing_flags = CASING_DELETE
+
+/obj/item/ammo_casing/musket/silver
+ name = "silver musket ball"
+ desc = "A solid ball made of a lead-silver alloy."
+ icon_state = "silverball"
+ projectile_type = /obj/projectile/bullet/musket/silver
+ materials_base = list("lead" = 100, "silver" = 100)
diff --git a/code/modules/projectiles/ammunition/calibers/special/pellet.dm b/code/modules/projectiles/ammunition/calibers/special/pellet.dm
new file mode 100644
index 00000000000..749c074bcc4
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/pellet.dm
@@ -0,0 +1,36 @@
+/datum/ammo_caliber/pellet
+ caliber = "pellet"
+
+//* Ammunition *//
+
+/obj/item/ammo_casing/p_pellet
+ name = "pellet"
+ desc = "Also know as a BB, it is shot from airguns for recreational shooting."
+ regex_this_caliber = /datum/ammo_caliber/pellet
+ icon = 'icons/obj/gun/ballistic/caseless/pellet.dmi'
+ icon_state = "pellet_single"
+ projectile_type = /obj/projectile/bullet/practice
+ casing_flags = CASING_DELETE
+ materials_base = list(
+ /datum/material/plastic::id = 10,
+ )
+
+//* Magazines *//
+
+/obj/item/ammo_magazine/pellets
+ name = "box of pellets"
+ desc = "A box containing small pellets for a pellet gun."
+
+ icon = 'icons/obj/gun/ballistic/caseless/pellet.dmi'
+ icon_state = "pelletbox-50"
+ base_icon_state = "pelletbox"
+ rendering_system = GUN_RENDERING_STATES
+ rendering_count = 1
+
+ ammo_caliber = /datum/ammo_caliber/pellet
+ ammo_type = /obj/item/ammo_casing/p_pellet
+ magazine_type = MAGAZINE_TYPE_BOX
+ materials_base = list(
+ /datum/material/steel::id = 100,
+ )
+ ammo_max = 50
diff --git a/code/modules/projectiles/ammunition/calibers/special/rocket.dm b/code/modules/projectiles/ammunition/calibers/special/rocket.dm
new file mode 100644
index 00000000000..d0e2bc2d67f
--- /dev/null
+++ b/code/modules/projectiles/ammunition/calibers/special/rocket.dm
@@ -0,0 +1,15 @@
+/datum/ammo_caliber/rocket
+ caliber = "rocket"
+
+/obj/item/ammo_casing/rocket
+ name = "rocket shell"
+ desc = "A high explosive designed to be fired from a launcher."
+ icon_state = "rocketshell_alt"
+ projectile_type = /obj/projectile/bullet/srmrocket
+ regex_this_caliber = /datum/ammo_caliber/rocket
+ materials_base = list(MAT_STEEL = 10000)
+
+/obj/item/ammo_casing/rocket/weak
+ name = "low-yield rocket shell"
+ projectile_type = /obj/projectile/bullet/srmrocket/weak
+ materials_base = list(MAT_STEEL = 5000)
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
deleted file mode 100644
index e43c6248cb0..00000000000
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ /dev/null
@@ -1,734 +0,0 @@
-/************************************************************************/
-/*
-# An explaination of the naming format for guns and ammo:
-#
-# a = Ammo, as in individual rounds of ammunition.
-# b = Box, intended to have ammo taken out one at a time by hand.
-# c = Clips, intended to reload magazines or guns quickly.
-# m = Magazine, intended to hold rounds of ammo.
-# s = Speedloaders, intended to reload guns quickly.
-#
-# Use this format, followed by the caliber. For example, a shotgun's caliber
-# variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g",
-# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion
-# for developers and in-game admins spawning these items, stick to this format.
-# Likewise, when creating new rounds, the caliber variable should match whatever
-# the name says.
-#
-# This comment is copied in magazines.dm as well.
-*/
-/************************************************************************/
-
-/*
- * .357
- */
-
-/obj/item/ammo_casing/a357
- desc = "A .357 bullet casing."
- caliber = ".357"
- projectile_type = /obj/projectile/bullet/pistol/strong
- materials_base = list(MAT_STEEL = 210)
-
-/obj/item/ammo_casing/a357/silver
- desc = "A .357 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
- caliber = ".357"
- icon_state = "ag-casing"
- projectile_type = /obj/projectile/bullet/pistol/strong
- materials_base = list(MAT_STEEL = 350, MAT_SILVER = 200)
-
-/*
- * .38
- */
-
-/obj/item/ammo_casing/a38
- desc = "A .38 bullet casing."
- caliber = ".38"
- projectile_type = /obj/projectile/bullet/pistol
- materials_base = list(MAT_STEEL = 60)
-
-/obj/item/ammo_casing/a38/rubber
- desc = "A .38 rubber bullet casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/bullet/pistol/rubber
-
-/obj/item/ammo_casing/a38/emp
- name = ".38 haywire round"
- desc = "A .38 bullet casing fitted with a single-use ion pulse generator."
- icon_state = "empcasing"
- projectile_type = /obj/projectile/ion/small
- materials_base = list(MAT_STEEL = 130, MAT_URANIUM = 100)
-
-/obj/item/ammo_casing/a38/silver
- desc = "A .38 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "ag-casing"
- projectile_type = /obj/projectile/bullet/pistol/silver
- materials_base = list(MAT_STEEL = 130, MAT_SILVER = 100)
-
-
-/*
- * .44
- */
-
-/obj/item/ammo_casing/a44
- desc = "A .44 bullet casing."
- caliber = ".44"
- projectile_type = /obj/projectile/bullet/pistol/strong
- materials_base = list(MAT_STEEL = 210)
-
-/obj/item/ammo_casing/a44/rubber
- icon_state = "r-casing"
- desc = "A .44 rubber bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/rubber/strong
- materials_base = list(MAT_STEEL = 60)
-
-/obj/item/ammo_casing/a44/silver
- desc = "A .44 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "ag_casing"
- projectile_type = /obj/projectile/bullet/pistol/strong/silver
- materials_base = list(MAT_STEEL = 350, MAT_SILVER = 200)
-
-/*
- * .75 (aka Gyrojet Rockets, aka admin abuse)
- */
-
-/obj/item/ammo_casing/a75
- desc = "A .75 gyrojet rocket sheathe."
- caliber = ".75"
- projectile_type = /obj/projectile/bullet/gyro
- materials_base = list(MAT_STEEL = 4000)
-
-/*
- * 9mm
- */
-
-/obj/item/ammo_casing/a9mm
- desc = "A 9mm bullet casing."
- caliber = "9mm"
- projectile_type = /obj/projectile/bullet/pistol
- materials_base = list(MAT_STEEL = 60)
-
-/obj/item/ammo_casing/a9mm/ap
- desc = "A 9mm armor-piercing bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/ap
- materials_base = list(MAT_STEEL = 80)
-
-/obj/item/ammo_casing/a9mm/hp
- desc = "A 9mm hollow-point bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/hp
-
-/obj/item/ammo_casing/a9mm/hunter
- desc = "A 9mm hunting bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/hunter
- materials_base = list(MAT_STEEL = 80)
-
-/obj/item/ammo_casing/a9mm/flash
- desc = "A 9mm flash shell casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/energy/flash
-
-/obj/item/ammo_casing/a9mm/rubber
- desc = "A 9mm rubber bullet casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/bullet/pistol/rubber
-
-/obj/item/ammo_casing/a9mm/practice
- desc = "A 9mm practice bullet casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/bullet/practice
-
-/obj/item/ammo_casing/a9mm/silver
- desc = "A 9mm silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "ag-casing"
- projectile_type = /obj/projectile/bullet/pistol/silver
- materials_base = list(MAT_STEEL = 130, MAT_SILVER = 100)
-
-/*
- * 5.7
- */
-/obj/item/ammo_casing/a57x28mm
- desc = "A 5.7x28mm bullet casing."
- caliber = "5.7x28mm"
- projectile_type = /obj/projectile/bullet/pistol/lap
- materials_base = list(MAT_STEEL = 30, MAT_COPPER = 30)
-
-/obj/item/ammo_casing/a57x28mm/ap
- desc = "A 5.7x28mm armor-piercing bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/ap
- materials_base = list(MAT_STEEL = 80, MAT_COPPER = 30)
-
-/obj/item/ammo_casing/a57x28mm/hp
- desc = "A 5.7x28mm hollow-point bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/hp
- materials_base = list(MAT_STEEL = 60, MAT_COPPER = 30)
-
-/obj/item/ammo_casing/a57x28mm/hunter
- desc = "A 5.7x28mm hunting bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/hunter
- materials_base = list(MAT_STEEL = 30, MAT_COPPER = 50)
-
-/*
- * .45
- */
-
-/obj/item/ammo_casing/a45
- desc = "A .45 bullet casing."
- caliber = ".45"
- projectile_type = /obj/projectile/bullet/pistol/medium
- materials_base = list(MAT_STEEL = 75)
-
-/obj/item/ammo_casing/a45/ap
- desc = "A .45 Armor-Piercing bullet casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/bullet/pistol/medium/ap
-
-/obj/item/ammo_casing/a45/hunter
- desc = "A .45 hunting bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/medium/hunter
- materials_base = list(MAT_STEEL = 75)
-
-/obj/item/ammo_casing/a45/practice
- desc = "A .45 practice bullet casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/bullet/practice
- materials_base = list(MAT_STEEL = 60)
-
-/obj/item/ammo_casing/a45/rubber
- desc = "A .45 rubber bullet casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/bullet/pistol/rubber
- materials_base = list(MAT_STEEL = 60)
-
-/obj/item/ammo_casing/a45/flash
- desc = "A .45 flash shell casing."
- icon_state = "r-casing"
- projectile_type = /obj/projectile/energy/flash
- materials_base = list(MAT_STEEL = 60)
-
-/obj/item/ammo_casing/a45/emp
- name = ".45 haywire round"
- desc = "A .45 bullet casing fitted with a single-use ion pulse generator."
- projectile_type = /obj/projectile/ion/small
- icon_state = "empcasing"
- materials_base = list(MAT_STEEL = 130, MAT_URANIUM = 100)
-
-/obj/item/ammo_casing/a45/hp
- desc = "A .45 hollow-point bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/medium/hp
-
-/obj/item/ammo_casing/a45/silver
- name = ".45 silver round"
- desc = "A .45 silver bullet casing. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "ag-casing"
- projectile_type = /obj/projectile/bullet/pistol/silver
- materials_base = list(MAT_STEEL = 130, MAT_SILVER = 100)
-
-
-/*
- * 10mm
- */
-
-/obj/item/ammo_casing/a10mm
- desc = "A 10mm bullet casing."
- caliber = "10mm"
- projectile_type = /obj/projectile/bullet/pistol/medium
- materials_base = list(MAT_STEEL = 75)
-
-/obj/item/ammo_casing/a10mm/emp
- name = "10mm haywire round"
- desc = "A 10mm bullet casing fitted with a single-use ion pulse generator."
- projectile_type = /obj/projectile/ion/small
- icon_state = "empcasing"
- materials_base = list(MAT_STEEL = 130, MAT_URANIUM = 100)
-
-/*
- * 12g (aka shotgun ammo)
- */
-
-/obj/item/ammo_casing/a12g
- name = "shotgun slug"
- desc = "A 12 gauge slug."
- icon_state = "slshell"
- caliber = "12g"
- projectile_type = /obj/projectile/bullet/shotgun
- materials_base = list(MAT_STEEL = 360)
- fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg')
- worth_intrinsic = 7.5
-
-/obj/item/ammo_casing/a12g/pellet
- name = "shotgun shell"
- desc = "A 12 gauge shell."
- icon_state = "gshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun
- worth_intrinsic = 7.5
-
-/obj/item/ammo_casing/a12g/blank
- name = "shotgun shell"
- desc = "A blank shell."
- icon_state = "blshell"
- projectile_type = /obj/projectile/bullet/blank
- materials_base = list(MAT_STEEL = 90)
- worth_intrinsic = 2.5
-
-/obj/item/ammo_casing/a12g/practice
- name = "shotgun shell"
- desc = "A practice shell."
- icon_state = "pshell"
- projectile_type = /obj/projectile/bullet/practice
- materials_base = list(MAT_STEEL = 90)
- worth_intrinsic = 2.5
-
-/obj/item/ammo_casing/a12g/beanbag
- name = "beanbag shell"
- desc = "A beanbag shell."
- icon_state = "bshell"
- projectile_type = /obj/projectile/bullet/shotgun/beanbag
- materials_base = list(MAT_STEEL = 180)
- worth_intrinsic = 3.5
-
-/obj/item/ammo_casing/a12g/improvised
- name = "improvised shell"
- desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards."
- icon_state = "improvshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_improvised
- materials_base = list(MAT_STEEL = 500, MAT_GLASS = 200)
-
-//Can stun in one hit if aimed at the head, but
-//is blocked by clothing that stops tasers and is vulnerable to EMP
-/obj/item/ammo_casing/a12g/stunshell
- name = "stun shell"
- desc = "A 12 gauge taser cartridge."
- icon_state = "stunshell"
- projectile_type = /obj/projectile/energy/electrode/stunshot
- materials_base = list(MAT_STEEL = 360, MAT_GLASS = 720)
- worth_intrinsic = 7.5
-
-//Does not stun, only blinds, but has area of effect.
-/obj/item/ammo_casing/a12g/flare
- name = "flare shell"
- desc = "A chemical shell used to signal distress or provide illumination."
- icon_state = "fshell"
- projectile_type = /obj/projectile/energy/flash/flare
- materials_base = list(MAT_STEEL = 90, MAT_GLASS = 90)
- worth_intrinsic = 2.5
-
-//Silver 12g
-/obj/item/ammo_casing/a12g/silver
- name = " Silver shotgun shell"
- desc = "A 12 gauge slug. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "agshell"
- caliber = "12g"
- projectile_type = /obj/projectile/bullet/pellet/shotgun/silver
- materials_base = list(MAT_STEEL = 360, MAT_SILVER = 240)
- worth_intrinsic = 20
-
-//Wooden Stake 12g
-/obj/item/ammo_casing/a12g/stake
- name = "Wooden stake shell"
- desc = "A specialized shell designed to launch a wooden stake. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "agshell"
- caliber = "12g"
- projectile_type = /obj/projectile/bullet/shotgun/stake
- materials_base = list(MAT_STEEL = 500)
- worth_intrinsic = 45
-
-//Techshell & Derivatives
-/obj/item/ammo_casing/a12g/techshell
- name = "unloaded technological shell"
- desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects."
- icon_state = "cshell"
- caliber = "12g"
- projectile_type = null
- materials_base = list(MAT_STEEL = 500, MAT_PHORON = 200)
- worth_intrinsic = 35
-
-/obj/item/ammo_casing/a12g/techshell/meteorslug
- name = "meteorslug shell"
- desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired."
- icon_state = "mshell"
- projectile_type = /obj/projectile/meteor/slug
- materials_base = list(MAT_STEEL = 500, MAT_GOLD = 200)
- worth_intrinsic = 75
-
-/obj/item/ammo_casing/a12g/techshell/emp
- name = "ion shell"
- desc = "An advanced shotgun round that creates a small EMP when it strikes a target."
- icon_state = "empshell"
- projectile_type = /obj/projectile/scatter/ion
-// projectile_type = /obj/projectile/bullet/shotgun/ion
- materials_base = list(MAT_STEEL = 360, MAT_URANIUM = 240)
- worth_intrinsic = 50
-
-/obj/item/ammo_casing/a12g/techshell/pulseslug
- name = "pulse slug"
- desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \
- energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \
- would have difficulty with."
- icon_state = "plshell"
- projectile_type = /obj/projectile/beam/pulse/shotgun
- materials_base = list(MAT_STEEL = 500, MAT_SILVER = 200)
- worth_intrinsic = 75
-
-/obj/item/ammo_casing/a12g/techshell/dragonsbreath
- name = "dragonsbreath shell"
- desc = "A shotgun shell which fires a spread of incendiary pellets."
- icon_state = "ishell"
- projectile_type = /obj/projectile/bullet/incendiary/shotgun
- worth_intrinsic = 75
-
-/obj/item/ammo_casing/a12g/techshell/frag12
- name = "FRAG-12 slug"
- desc = "A high explosive breaching round for a 12 gauge shotgun."
- icon_state = "heshell"
- projectile_type = /obj/projectile/bullet/shotgun/frag12
- materials_base = list(MAT_STEEL = 500, MAT_PHORON = 200)
- worth_intrinsic = 100
-
-/obj/item/ammo_casing/a12g/techshell/laserslug
- name = "scatter laser shell"
- desc = "An advanced shotgun shell that uses a micro laser to replicate the effects of a scatter laser weapon in a ballistic package."
- icon_state = "lshell"
- projectile_type = /obj/projectile/scatter/laser
- materials_base = list(MAT_STEEL = 500, MAT_GLASS = 200)
- worth_intrinsic = 75
-
-/*
- * 7.62mm
- */
-
-/obj/item/ammo_casing/a762
- desc = "A 7.62mm bullet casing."
- caliber = "7.62mm"
- icon_state = "rifle-casing"
- projectile_type = /obj/projectile/bullet/rifle/a762
- materials_base = list(MAT_STEEL = 200)
- worth_intrinsic = 20
-
-/obj/item/ammo_casing/a762/ap
- desc = "A 7.62mm armor-piercing bullet casing."
- projectile_type = /obj/projectile/bullet/rifle/a762/ap
- materials_base = list(MAT_STEEL = 300)
- worth_intrinsic = 30
-
-/obj/item/ammo_casing/a762/practice
- desc = "A 7.62mm practice bullet casing."
- icon_state = "rifle-casing" // Need to make an icon for these
- projectile_type = /obj/projectile/bullet/practice
- materials_base = list(MAT_STEEL = 90)
-
-/obj/item/ammo_casing/a762/blank
- desc = "A blank 7.62mm bullet casing."
- projectile_type = /obj/projectile/bullet/blank
- materials_base = list(MAT_STEEL = 90)
- worth_intrinsic = 5
-
-/obj/item/ammo_casing/a762/hp
- desc = "A 7.62mm hollow-point bullet casing."
- projectile_type = /obj/projectile/bullet/rifle/a762/hp
-
-/obj/item/ammo_casing/a762/hunter
- desc = "A 7.62mm hunting bullet casing."
- projectile_type = /obj/projectile/bullet/rifle/a762/hunter
-
-/obj/item/ammo_casing/a762/sniper
- desc = "A 7.62mm high velocity bullet casing optimised for a marksman rifle."
- projectile_type = /obj/projectile/bullet/rifle/a762/sniper
-
-/obj/item/ammo_casing/a762/sniperhunter
- desc = "A 7.62mm high velocity hunter bullet casing optimised for a marksman rifle."
- projectile_type = /obj/projectile/bullet/rifle/a762/sniperhunter
-
-/obj/item/ammo_casing/a762/silver
- desc = "A 7.62mm hunting bullet casing. Bless and Sancitfied to banish otherworlds entities."
- icon_state = "agrifle-casing"
- projectile_type = /obj/projectile/bullet/rifle/a762/silver
- materials_base = list(MAT_STEEL = 300, MAT_SILVER = 150)
-
-/*
- * 12.7mm (anti-materiel rifle round)
- */
-
-/obj/item/ammo_casing/a127
- desc = "A 12.7mm shell."
- icon_state = "lcasing"
- caliber = "12.7mm"
- projectile_type = /obj/projectile/bullet/rifle/a127
- materials_base = list(MAT_STEEL = 1250)
-
-/*
- * 5.56mm
- */
-
-/obj/item/ammo_casing/a556
- desc = "A 5.56mm bullet casing."
- caliber = "5.56mm"
- icon_state = "rifle-casing"
- projectile_type = /obj/projectile/bullet/rifle/a556
- materials_base = list(MAT_STEEL = 180)
-
-/obj/item/ammo_casing/a556/ap
- desc = "A 5.56mm armor-piercing bullet casing."
- projectile_type = /obj/projectile/bullet/rifle/a556/ap
- materials_base = list(MAT_STEEL = 270)
-
-/obj/item/ammo_casing/a556/practice
- desc = "A 5.56mm practice bullet casing."
- icon_state = "rifle-casing" // Need to make an icon for these
- projectile_type = /obj/projectile/bullet/practice
- materials_base = list(MAT_STEEL = 90)
-
-/obj/item/ammo_casing/a556/blank
- desc = "A blank 5.56mm bullet casing."
- projectile_type = /obj/projectile/bullet/blank
- materials_base = list(MAT_STEEL = 90)
-
-/obj/item/ammo_casing/a556/hp
- desc = "A 5.56mm hollow-point bullet casing."
- projectile_type = /obj/projectile/bullet/rifle/a556/hp
-
-/obj/item/ammo_casing/a556/hunter
- desc = "A 5.56mm hunting bullet casing."
- projectile_type = /obj/projectile/bullet/rifle/a556/hunter
-
-/*
- * 10x24mm Caseless
- */
-
-/obj/item/ammo_casing/a10x24mmcaseless
- desc = "A 10x24mm caseless round, common during the Xenomorph wars due to its use the the battle rifles of the United Solar Marine Corps."
- caliber = "10mmCL"
- icon_state = "casing"
- projectile_type = /obj/projectile/bullet/pistol/medium
- materials_base = list(MAT_STEEL = 180)
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_casing/a10x24mmcaseless/ap
- desc = "A 10x24mm caseless round, common during the Xenomorph wars due to its use the the battle rifles of the United Solar Marine Corps. This one was meant to shred armored targets."
- caliber = "10mmCL"
- icon_state = "casing"
- projectile_type = /obj/projectile/bullet/pistol/medium/ap
- materials_base = list(MAT_STEEL = 180)
-
-/obj/item/ammo_casing/a10x24mmcaseless/hp
- desc = "A 10x24mm caseless round, common during the Xenomorph wars due to its use the the battle rifles of the United Solar Marine Corps. This one was meant to shred armored targets."
- caliber = "10mmCL"
- icon_state = "casing"
- projectile_type = /obj/projectile/bullet/pistol/medium/hp
- materials_base = list(MAT_STEEL = 180)
-
-/*
- * 5mm Caseless
- */
-
-/obj/item/ammo_casing/a5mmcaseless
- desc = "A 5mm solid phoron caseless round."
- caliber = "5mm caseless"
- icon_state = "p-casing"
- projectile_type = /obj/projectile/bullet/pistol // Close enough to be comparable.
- materials_base = list(MAT_STEEL = 180)
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_casing/a5mmcaseless/stun
- desc = "A 5mm solid phoron caseless stun round."
- projectile_type = /obj/projectile/energy/electrode // Maybe nerf this considering there's 30 rounds in a mag.
-
-
-/*
- * Misc
- */
-
-/obj/item/ammo_casing/fiftycalcaseless
- name = "caseless phoron round"
- desc = "A 12.7mm caseless round."
- caliber = "12.7mm caseless"
- icon_state = "p-casing"
- projectile_type = /obj/projectile/bullet/incendiary/caseless
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_casing/phoron_shrap
- name = "phoron shrapnel"
- desc = "Should you really be holding this?"
- caliber = "phoron shrapnel"
- icon_state = "phoronshrap"
- projectile_type = /obj/projectile/bullet/incendiary/phoronshrap
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_casing/rocket
- name = "rocket shell"
- desc = "A high explosive designed to be fired from a launcher."
- icon_state = "rocketshell_alt"
- projectile_type = /obj/projectile/bullet/srmrocket
- caliber = "rocket"
- materials_base = list(MAT_STEEL = 10000)
-
-/obj/item/ammo_casing/rocket/weak
- name = "low-yield rocket shell"
- projectile_type = /obj/projectile/bullet/srmrocket/weak
- materials_base = list(MAT_STEEL = 5000)
-
-/obj/item/ammo_casing/cap
- name = "cap"
- desc = "A cap for children toys."
- caliber = "caps"
- icon_state = "r-casing"
- color = "#FF0000"
- projectile_type = /obj/projectile/bullet/pistol/cap
- materials_base = list(MAT_STEEL = 85)
-
-/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"
- projectile_type = null
-
-/obj/item/ammo_casing/organic
- name = "biomatter globule"
- desc = "Globular biomatter rendered and ready for compression."
- caliber = "organic"
- icon_state = "globule"
- color = "#FFE0E2"
- projectile_type = /obj/projectile/bullet/organic
- materials_base = list("flesh" = 100)
-
-/obj/item/ammo_casing/organic/wax
- name = "wax globule"
- desc = "Tacky wax rendered semi-solid and ready for compression."
- caliber = "apidean"
- icon_state = "globule"
- color = "#E6E685"
- projectile_type = /obj/projectile/bullet/organic/wax
- materials_base = list("wax" = 100)
-
-/obj/item/ammo_casing/p_pellet
- name = "pellet"
- desc = "Also know as a BB, it is shot from airguns for recreational shooting."
- caliber = "pellet"
- icon_state = "pellet"
- projectile_type = /obj/projectile/bullet/practice
- casing_flags = CASING_DELETE
-
-
-//Musket Rounds
-/obj/item/ammo_casing/musket
- name = "musket ball"
- desc = "A solid ball made of lead."
- icon_state = "musketball"
- caliber = "musket"
- projectile_type = /obj/projectile/bullet/musket
- materials_base = list("lead" = 100)
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_casing/musket/silver
- name = "silver musket ball"
- desc = "A solid ball made of a lead-silver alloy."
- icon_state = "silverball"
- projectile_type = /obj/projectile/bullet/musket/silver
- materials_base = list("lead" = 100, "silver" = 100)
-
-/obj/item/ammo_casing/musket/blunderbuss
- name = "shot"
- desc = "A bundle of lead balls and other assorted shrapnel."
- icon_state = "blunderbuss"
- caliber = "blunderbuss"
- projectile_type = /obj/projectile/bullet/pellet/blunderbuss
- materials_base = list("lead" = 500)
-
-/obj/item/ammo_casing/musket/blunderbuss/silver
- name = "sliver shot"
- desc = "A bundle of silver lead allow balls and other assorted bits of silver."
- icon_state = "silverbuss"
- projectile_type = /obj/projectile/bullet/pellet/blunderbuss/silver
- materials_base = list("lead" = 500, "silver" = 500)
-
-//Ten Gauge Rounds for Exotic Shotguns
-/obj/item/ammo_casing/a10g
- name = "heavy shotgun slug"
- desc = "A brass jacketed 10 gauge slug shell."
- icon_state = "brshell"
- caliber = "10g"
- projectile_type = /obj/projectile/bullet/heavy_shotgun
- materials_base = list(MAT_STEEL = 300, "brass" = 200)
- fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg')
-
-/obj/item/ammo_casing/a10g/pellet //Spread variant.
- name = "heavy shotgun shell"
- desc = "A brass jacketed 10 gauge shot shell."
- projectile_type = /obj/projectile/scatter/heavy_shotgun
-
-/obj/item/ammo_casing/a10g/silver
- name = "heavy silver shotgun shell"
- desc = "A brass jacketed 10 gauge filled with blessed silver shot."
- projectile_type = /obj/projectile/scatter/heavy_shotgun/silver
-
-//Related to the above, knockback specific variants for Grit.
-/obj/item/ammo_casing/a10g/grit
- name = "tooled heavy shotgun slug"
- desc = "A custom brass jacketed 10 gauge slug shell."
- projectile_type = /obj/projectile/bullet/heavy_shotgun/grit
-
-/obj/item/ammo_casing/a10g/pellet/grit
- name = "tooled heavy shotgun shell"
- desc = "A custom brass jacketed 10 gauge shot shell."
- projectile_type = /obj/projectile/scatter/heavy_shotgun/grit
-
-//Arrows
-/obj/item/ammo_casing/arrow
- name = "arrow of questionable material"
- desc = "You shouldn't be seeing this arrow."
- projectile_type = /obj/projectile/bullet/reusable/arrow
- caliber = "arrow"
- icon_state = "arrow"
- throw_force = 3 //good luck hitting someone with the pointy end of the arrow
- throw_speed = 3
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_casing/arrow/wood
- name = "wooden arrow"
- desc = "An arrow made of wood, typically fired from a bow."
-
-/obj/item/ammo_casing/arrow/bone
- name = "bone arrow"
- desc = "An arrow made of bone, knapped to a piercing tip."
- icon_state = "ashenarrow"
- projectile_type = /obj/projectile/bullet/reusable/arrow/bone
-
-/obj/item/ammo_casing/arrow/ash
- name = "ashen arrow"
- desc = "An arrow made of wood, hardened by fire."
- icon_state = "ashenarrow"
- projectile_type = /obj/projectile/bullet/reusable/arrow/ash
-
-/obj/item/ammo_casing/arrow/bone_ap
- name = "hardened bone arrow"
- desc = "An arrow made of bone and sinew. The tip is sharp enough to pierce through a goliath plate."
- icon_state = "bonearrow"
- projectile_type = /obj/projectile/bullet/reusable/arrow/bone_ap
-
-/obj/item/ammo_casing/arrow/bronze
- name = "bronze arrow"
- desc = "An arrow made of wood, tipped with bronze. The tip is dense enough to provide some armor penetration."
- icon_state = "bronzearrow"
- projectile_type = /obj/projectile/bullet/reusable/arrow/bronze
-
-//Plunger
-/obj/item/ammo_casing/arrow/plunger
- name = "plunger"
- desc = "It's a plunger, for plunging."
- icon_state = "plunger"
- projectile_type = /obj/projectile/bullet/reusable/plunger
-
-//Foam Darts
-/obj/item/ammo_casing/foam
- name = "foam dart"
- desc = "A soft projectile made out of orange foam with a blue plastic tip."
- projectile_type = /obj/projectile/bullet/reusable/foam
- caliber = "foamdart"
- icon_state = "foamdart"
- throw_force = 0 //good luck hitting someone with the pointy end of the arrow
- throw_speed = 3
- casing_flags = CASING_DELETE
- drop_sound = 'sound/items/drop/accessory.ogg'
- pickup_sound = 'sound/items/pickup/accessory.ogg'
-
-/obj/item/ammo_casing/foam/riot
- name = "riot dart"
- desc = "A flexible projectile made out of hardened orange foam with a red plastic tip."
- projectile_type = /obj/projectile/bullet/reusable/foam/riot
- icon_state = "foamdart_riot"
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/firing_pin.dm
similarity index 99%
rename from code/modules/projectiles/pins.dm
rename to code/modules/projectiles/firing_pin.dm
index d8aef4eafd0..bc63a65de4f 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/firing_pin.dm
@@ -34,7 +34,7 @@
if(G.pin && !(G.pin.pin_irremovable))
G.pin.forceMove(get_turf(G))
G.pin.gun_remove(G)
- to_chat(user, "You remove [G]'s old pin. Rendering it unuseable in the process.")
+ to_chat(user, "You remove [G]'s old pin, rendering it unuseable in the process.")
gun_insert(user, G)
return
if(!G.pin)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 171bf1e45e9..c2e5bfd281c 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -53,6 +53,7 @@
origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("struck", "hit", "bashed")
zoomdevicename = "scope"
+ inhand_default_type = INHAND_DEFAULT_ICON_GUNS
var/burst = 1
var/fire_delay = 6 //delay after shooting before the gun can be used again
@@ -73,6 +74,7 @@
var/mode_name = null
var/projectile_type = /obj/projectile //On ballistics, only used to check for the cham gun
var/holy = FALSE //For Divinely blessed guns
+ // todo: this should be on /ballistic, and be `internal_chambered`.
var/obj/item/ammo_casing/chambered = null
var/wielded_item_state
@@ -138,14 +140,26 @@
/// for de-duping
var/static/list/mob_renderer_store = list()
/// base onmob state override so we don't use [base_icon_state] if overridden
+ // todo: impl
var/render_mob_base
/// render as -wield if we're wielded? applied at the end of our worn state no matter what
///
/// * ignores [mob_renderer]
- /// * ignores [render_mob_exclusive]
+ /// * ignores [render_additional_exclusive] / [render_additional_worn]
// todo: impl
var/render_mob_wielded = FALSE
+ /// state to add as an append
+ ///
+ /// * segment and overlay renders add [base_icon_state]-[append]
+ /// * state renders set state to [base_icon_state]-[append]-[...rest]
+ var/render_additional_state
+ /// only render [render_additional_state]
+ var/render_additional_exclusive = FALSE
+ /// [render_additional_state] and [render_additional_exclusive] apply to worn sprites
+ // todo: impl
+ var/render_additional_worn = FALSE
/// use the old render system, if item_renderer and mob_renderer are not set
+ // todo: remove
var/render_use_legacy_by_default = TRUE
/obj/item/gun/Initialize(mapload)
@@ -169,7 +183,7 @@
update_icon()
//! LEGACY: if neither of these are here, we are using legacy render.
- if(!item_renderer && !mob_renderer && !render_use_legacy_by_default)
+ if(!item_renderer && !mob_renderer && render_use_legacy_by_default)
item_icons = list(
SLOT_ID_LEFT_HAND = 'icons/mob/items/lefthand_guns.dmi',
SLOT_ID_RIGHT_HAND = 'icons/mob/items/righthand_guns.dmi',
diff --git a/code/modules/projectiles/gun_item_renderer.dm b/code/modules/projectiles/gun_item_renderer.dm
index 3838f77d4d7..a41a6fc61ad 100644
--- a/code/modules/projectiles/gun_item_renderer.dm
+++ b/code/modules/projectiles/gun_item_renderer.dm
@@ -47,6 +47,10 @@
/datum/gun_item_renderer/segments/render(obj/item/gun/gun, ammo_ratio, firemode_key)
var/base_icon_state = gun.base_icon_state || initial(gun.icon_state)
+ if(gun.render_additional_state)
+ gun.add_overlay("[base_icon_state]-[gun.render_additional_state]")
+ if(gun.render_additional_exclusive)
+ return
if(independent_firemode && firemode_key)
gun.add_overlay("[base_icon_state]-[firemode_key]")
if(!ammo_ratio)
@@ -87,6 +91,10 @@
/datum/gun_item_renderer/overlays/render(obj/item/gun/gun, ammo_ratio, firemode_key)
var/base_icon_state = gun.base_icon_state || initial(gun.icon_state)
+ if(gun.render_additional_state)
+ gun.add_overlay("[base_icon_state]-[gun.render_additional_state]")
+ if(gun.render_additional_exclusive)
+ return
if(independent_firemode && firemode_key)
gun.add_overlay("[base_icon_state]-[firemode_key]")
if(!ammo_ratio)
@@ -118,13 +126,16 @@
/datum/gun_item_renderer/states/render(obj/item/gun/gun, ammo_ratio, firemode_key)
var/base_icon_state = gun.base_icon_state || initial(gun.icon_state)
+ if(gun.render_additional_exclusive)
+ gun.icon_state = "[base_icon_state][gun.render_additional_state ? "-[gun.render_additional_state]" : ""]"
+ return
if(!ammo_ratio)
if(use_empty)
gun.icon_state = "[base_icon_state][firemode_key && use_firemode_empty && "-[firemode_key]"]-empty"
else
gun.icon_state = base_icon_state
return
- gun.icon_state = "[base_icon_state]-[use_firemode && firemode_key && "-[firemode_key]"]-[ceil(count * ammo_ratio)]"
+ gun.icon_state = "[base_icon_state][gun.render_additional_state ? "-[gun.render_additional_state]" : ""]-[use_firemode && firemode_key && "-[firemode_key]"]-[ceil(count * ammo_ratio)]"
/datum/gun_item_renderer/states/dedupe_key()
return "states-[use_firemode]-[count]-[use_empty]-[use_firemode_empty]"
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 717c55ad975..5dde19d70d8 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -1,6 +1,9 @@
/obj/item/gun/ballistic
name = "gun"
desc = "A gun that fires bullets."
+ description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
+ then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \
+ will tell you what caliber you need."
icon = 'icons/obj/gun/ballistic.dmi'
icon_state = "revolver"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -9,9 +12,18 @@
recoil = 0
projectile_type = /obj/projectile/bullet/pistol/strong //Only used for chameleon guns
- var/caliber = ".357" //determines which casings will fit
+ //* Configuration *//
+
+ /// If set, accepts ammo and magazines of this caliber.
+ var/regex_this_caliber = /datum/ammo_caliber/a357
+
+ //! LEGACY BELOW
+
var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
+ var/load_method_converted = TRUE
+
+ // todo: rework mag handling, internal magazine?
//For SINGLE_CASING or SPEEDLOADER guns
var/max_shells = 0 //the number of casings that will fit inside
@@ -41,11 +53,17 @@
loaded += new ammo_type(src)
if(ispath(magazine_type) && (load_method & MAGAZINE))
ammo_magazine = new magazine_type(src)
- allowed_magazines += /obj/item/ammo_magazine/smart
update_icon()
+ if(load_method & SPEEDLOADER)
+ load_method_converted |= MAGAZINE_TYPE_SPEEDLOADER
+ else if(load_method & MAGAZINE)
+ load_method_converted |= MAGAZINE_TYPE_NORMAL
+
/obj/item/gun/ballistic/update_icon_state()
. = ..()
+ if((item_renderer || mob_renderer) || !render_use_legacy_by_default)
+ return // using new system
var/silenced_state = silenced ? silenced_icon : initial(icon_state)
var/magazine_state = ammo_magazine ? "" : "-empty"
if(magazine_type)
@@ -57,10 +75,8 @@
chambered = loaded[1] //load next casing.
if(handle_casings != HOLD_CASINGS)
loaded -= chambered
- else if(ammo_magazine && ammo_magazine.stored_ammo.len)
- chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len]
- if(handle_casings != HOLD_CASINGS)
- ammo_magazine.stored_ammo -= chambered
+ else if(ammo_magazine && ammo_magazine.amount_remaining())
+ chambered = ammo_magazine.pop(src)
if (chambered)
return chambered.get_projectile()
@@ -84,10 +100,10 @@
var/mob/living/carbon/human/H = loc
if(istype(H))
if(!H.gloves)
- H.gunshot_residue = chambered.caliber
+ H.gunshot_residue = chambered.get_caliber_string()
else
var/obj/item/clothing/G = H.gloves
- G.gunshot_residue = chambered.caliber
+ G.gunshot_residue = chambered.get_caliber_string()
switch(handle_casings)
if(EJECT_CASINGS) //eject casing onto ground.
@@ -99,9 +115,8 @@
playsound(src.loc, "casing", 50, 1)
if(CYCLE_CASINGS) //cycle the casing back to the end.
if(ammo_magazine)
- ammo_magazine.stored_ammo += chambered
- else
- loaded += chambered
+ CRASH("attempted to cycle casing with a mag in; guncode doesn't support this use case, this is for revolver-likes only currently!")
+ loaded += chambered
if(handle_casings != HOLD_CASINGS)
chambered = null
@@ -115,67 +130,67 @@
/obj/item/gun/ballistic/proc/load_ammo(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 || allowed_magazines && !is_type_in_list(A, allowed_magazines))
+ if(!(load_method_converted & AM.magazine_type) || !accepts_caliber(AM.ammo_caliber) || allowed_magazines && !is_type_in_list(A, allowed_magazines))
to_chat(user, SPAN_WARNING("[AM] won't load into [src]!"))
return
- switch(AM.mag_type)
- if(MAGAZINE)
- if(ammo_magazine)
- if(user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM)
- to_chat(user, SPAN_WARNING("[src] already has a magazine loaded."))//already a magazine here
- return
- else
- if(user.a_intent == INTENT_GRAB) //Tactical reloading
- if(!can_special_reload)
- to_chat(user, SPAN_WARNING("You can't tactically reload this gun!"))
- return
- if(do_after(user, TACTICAL_RELOAD_SPEED, src))
- if(!user.attempt_insert_item_for_installation(AM, src))
- return
- ammo_magazine.update_icon()
- user.put_in_hands_or_drop(ammo_magazine)
- user.visible_message(SPAN_WARNING("\The [user] reloads \the [src] with \the [AM]!"),
- SPAN_WARNING("You tactically reload \the [src] with \the [AM]!"))
- else //Speed reloading
- if(!can_special_reload)
- to_chat(user, SPAN_WARNING("You can't speed reload this gun!"))
- return
- if(do_after(user, SPEED_RELOAD_SPEED, src))
- if(!user.attempt_insert_item_for_installation(AM, src))
- return
- ammo_magazine.update_icon()
- ammo_magazine.dropInto(user.loc)
- user.visible_message(SPAN_WARNING("\The [user] reloads \the [src] with \the [AM]!"),
- SPAN_WARNING("You speed reload \the [src] with \the [AM]!"))
- ammo_magazine = AM
- playsound(loc, mag_insert_sound, 75, 1)
- update_icon()
- AM.update_icon()
- if(!user.attempt_insert_item_for_installation(AM, src))
+ if(AM.magazine_type & MAGAZINE_TYPE_NORMAL)
+ if(ammo_magazine)
+ if(user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM)
+ to_chat(user, SPAN_WARNING("[src] already has a magazine loaded."))//already a magazine here
return
+ else
+ if(user.a_intent == INTENT_GRAB) //Tactical reloading
+ if(!can_special_reload)
+ to_chat(user, SPAN_WARNING("You can't tactically reload this gun!"))
+ return
+ if(do_after(user, TACTICAL_RELOAD_SPEED, src))
+ if(!user.attempt_insert_item_for_installation(AM, src))
+ return
+ ammo_magazine.update_icon()
+ user.put_in_hands_or_drop(ammo_magazine)
+ user.visible_message(SPAN_WARNING("\The [user] reloads \the [src] with \the [AM]!"),
+ SPAN_WARNING("You tactically reload \the [src] with \the [AM]!"))
+ else //Speed reloading
+ if(!can_special_reload)
+ to_chat(user, SPAN_WARNING("You can't speed reload this gun!"))
+ return
+ if(do_after(user, SPEED_RELOAD_SPEED, src))
+ if(!user.attempt_insert_item_for_installation(AM, src))
+ return
+ ammo_magazine.update_icon()
+ ammo_magazine.dropInto(user.loc)
+ user.visible_message(SPAN_WARNING("\The [user] reloads \the [src] with \the [AM]!"),
+ SPAN_WARNING("You speed reload \the [src] with \the [AM]!"))
ammo_magazine = AM
- user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].")
- playsound(src.loc, mag_insert_sound, 50, 1)
- if(SPEEDLOADER)
- if(loaded.len >= max_shells)
- to_chat(user, "[src] is full!")
- return
- var/count = 0
- for(var/obj/item/ammo_casing/C in AM.stored_ammo)
- if(loaded.len >= max_shells)
- break
- if(C.caliber == caliber)
- C.loc = src
- loaded += C
- AM.stored_ammo -= C //should probably go inside an ammo_magazine proc, but I guess less proc calls this way...
- count++
- if(count)
- user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].")
- playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) //Kind of the opposite of empty but the "click" sound fits a speedloader nicely.
+ playsound(loc, mag_insert_sound, 75, 1)
+ update_icon()
+ AM.update_icon()
+ if(!user.attempt_insert_item_for_installation(AM, src))
+ return
+ ammo_magazine = AM
+ user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].")
+ playsound(src.loc, mag_insert_sound, 50, 1)
+ else if(AM.magazine_type & MAGAZINE_TYPE_SPEEDLOADER)
+ if(loaded.len >= max_shells)
+ to_chat(user, "[src] is full!")
+ return
+ var/count = 0
+ while(length(loaded) < max_shells)
+ var/obj/item/ammo_casing/inserting = AM.peek()
+ if(!accepts_casing(inserting))
+ break
+ inserting = AM.pop(src)
+ if(inserting.loc != src)
+ inserting.forceMove(src)
+ loaded += inserting
+ count++
+ if(count)
+ user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) //Kind of the opposite of empty but the "click" sound fits a speedloader nicely.
AM.update_icon()
else if(istype(A, /obj/item/ammo_casing))
var/obj/item/ammo_casing/C = A
- if(!(load_method & SINGLE_CASING) || caliber != C.caliber)
+ if(!(load_method & SINGLE_CASING) || !accepts_caliber(C.regex_this_caliber))
return //incompatible
if(loaded.len >= max_shells)
to_chat(user, "[src] is full.")
@@ -194,7 +209,7 @@
to_chat(user, "You start loading \the [src].")
sleep(1 SECOND)
for(var/obj/item/ammo_casing/ammo in storage.contents)
- if(caliber != ammo.caliber)
+ if(!accepts_caliber(ammo.regex_this_caliber))
continue
load_ammo(ammo, user)
@@ -285,7 +300,7 @@
/obj/item/gun/ballistic/afterattack(atom/target, mob/user, clickchain_flags, list/params)
..()
- if(auto_eject && ammo_magazine && ammo_magazine.stored_ammo && !ammo_magazine.stored_ammo.len)
+ if(auto_eject && ammo_magazine && !ammo_magazine.amount_remaining())
ammo_magazine.loc = get_turf(src.loc)
user.visible_message(
"[ammo_magazine] falls out and clatters on the floor!",
@@ -308,8 +323,8 @@
var/bullets = 0
if(loaded)
bullets += loaded.len
- if(ammo_magazine && ammo_magazine.stored_ammo)
- bullets += ammo_magazine.stored_ammo.len
+ if(ammo_magazine)
+ bullets += ammo_magazine.amount_remaining()
if(chambered)
bullets += 1
return bullets
@@ -325,3 +340,29 @@
unload_ammo(usr)
*/
+
+//* Ammo *//
+
+/**
+ * Can accept an ammo casing
+ */
+/obj/item/gun/ballistic/proc/accepts_casing(obj/item/ammo_casing/casing)
+ if(!accepts_caliber(casing.regex_this_caliber))
+ return FALSE
+ return TRUE
+
+//* Caliber *//
+
+/**
+ * Accepts:
+ *
+ * * Text caliber string
+ * * Caliber path
+ * * Caliber instance
+ *
+ * @return TRUE / FALSE
+ */
+/obj/item/gun/ballistic/proc/accepts_caliber(datum/ammo_caliber/caliberlike)
+ var/datum/ammo_caliber/ours = resolve_caliber(regex_this_caliber)
+ var/datum/ammo_caliber/theirs = resolve_caliber(caliberlike)
+ return ours.equivalent(theirs)
diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/medigun.dm b/code/modules/projectiles/guns/ballistic/microbattery/medigun.dm
similarity index 87%
rename from code/modules/vore/fluffstuff/guns/cell_loaded/medigun.dm
rename to code/modules/projectiles/guns/ballistic/microbattery/medigun.dm
index 55d42b55870..e0c51d4bf7d 100644
--- a/code/modules/vore/fluffstuff/guns/cell_loaded/medigun.dm
+++ b/code/modules/projectiles/guns/ballistic/microbattery/medigun.dm
@@ -1,5 +1,5 @@
// The Gun //
-/obj/item/gun/ballistic/cell_loaded/medical
+/obj/item/gun/ballistic/microbattery/medical
name = "cell-loaded medigun"
desc = "The Nanotrasen-VayMed Adaptive Medical Laser, or the NT-V 'AML', is a powerful cell-based ranged healing device designed by Nanotrasen with a partnership with Vey-Med. It uses an internal nanite fabricator, powered and controlled by discrete cells, to deliver a variety of effects at range. Up to six combinations of healing beams can be configured at once, depending on cartridge used. Ammo not included."
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
@@ -9,10 +9,10 @@
description_fluff = "The Vey-Med AML 'Medigun' allows one to customize their loadout in the field, or before deploying, to allow emergency response personnel to deliver a variety of ranged healing options."
description_antag = ""
origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_BIO = 5)
- allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/medical)
+ allowed_magazines = list(/obj/item/ammo_magazine/microbattery/medical)
no_pin_required = 1
-/obj/item/gun/ballistic/cell_loaded/medical/cmo
+/obj/item/gun/ballistic/microbattery/medical/cmo
name = "advanced cell-loaded medigun"
desc = "This is a variation on the AML 'Medigun', a powerful cell-based ranged healing device based on the same model made by Nanotrasen and Vey-Med \
It has an extended sight for increased accuracy, and much more comfortable grip. Ammo not included."
@@ -21,7 +21,7 @@
// The Magazine //
-/obj/item/ammo_magazine/cell_mag/medical //medical
+/obj/item/ammo_magazine/microbattery/medical //medical
name = "nanite magazine"
desc = "A nanite fabrication magazine for the \'AML'"
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
@@ -30,10 +30,10 @@
icon_state = "ml3m_mag"
origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3)
-/obj/item/ammo_magazine/cell_mag/medical/advanced
+/obj/item/ammo_magazine/microbattery/medical/advanced
name = "advanced nanite magazine"
desc = "A nanite discharge cell for the \'AML\'. This one is a more advanced version which can hold six individual nanite discharge cells."
- max_ammo = 6
+ ammo_max = 6
x_offset = 3
icon_state = "ml3m_mag_extended"
origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 5)
@@ -47,8 +47,8 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/secure/briefcase/ml3m_pack_med/legacy_spawn_contents()
- new /obj/item/gun/ballistic/cell_loaded/medical(src)
- new /obj/item/ammo_magazine/cell_mag/medical(src)
+ new /obj/item/gun/ballistic/microbattery/medical(src)
+ new /obj/item/ammo_magazine/microbattery/medical(src)
new /obj/item/ammo_casing/microbattery/medical/brute(src)
new /obj/item/ammo_casing/microbattery/medical/burn(src)
new /obj/item/ammo_casing/microbattery/medical/stabilize(src)
@@ -60,8 +60,8 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/secure/briefcase/ml3m_pack_cmo/legacy_spawn_contents()
- new /obj/item/gun/ballistic/cell_loaded/medical/cmo(src)
- new /obj/item/ammo_magazine/cell_mag/medical(src)
+ new /obj/item/gun/ballistic/microbattery/medical/cmo(src)
+ new /obj/item/ammo_magazine/microbattery/medical(src)
new /obj/item/ammo_casing/microbattery/medical/brute(src)
new /obj/item/ammo_casing/microbattery/medical/burn(src)
new /obj/item/ammo_casing/microbattery/medical/stabilize(src)
diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/medigun_cells.dm b/code/modules/projectiles/guns/ballistic/microbattery/medigun_cells.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/cell_loaded/medigun_cells.dm
rename to code/modules/projectiles/guns/ballistic/microbattery/medigun_cells.dm
diff --git a/code/modules/projectiles/guns/ballistic/microbattery/microbattery-casing.dm b/code/modules/projectiles/guns/ballistic/microbattery/microbattery-casing.dm
new file mode 100644
index 00000000000..34e251db4e3
--- /dev/null
+++ b/code/modules/projectiles/guns/ballistic/microbattery/microbattery-casing.dm
@@ -0,0 +1,33 @@
+/obj/item/ammo_casing/microbattery
+ name = "\'NSFW\' microbattery - UNKNOWN"
+ desc = "A miniature battery for an energy weapon."
+ icon = 'icons/modules/projectiles/legacy/microbattery_old.dmi'
+ icon_state = "nsfw_batt"
+ slot_flags = SLOT_BELT | SLOT_EARS
+ throw_force = 1
+ w_class = WEIGHT_CLASS_TINY
+ var/shots_left = 4
+
+ leaves_residue = 0
+ regex_this_caliber = /datum/ammo_caliber/microbattery
+ var/type_color = null
+ var/type_name = null
+ projectile_type = /obj/projectile/beam
+
+ casing_primer = CASING_PRIMER_MICROBATTERY
+
+/obj/item/ammo_casing/microbattery/Initialize(mapload)
+ . = ..()
+ pixel_x = rand(-10, 10)
+ pixel_y = rand(-10, 10)
+ update_icon()
+
+/obj/item/ammo_casing/microbattery/update_icon()
+ cut_overlays()
+
+ var/image/ends = image(icon, icon_state = "[initial(icon_state)]_ends")
+ ends.color = type_color
+ add_overlay(ends)
+
+/obj/item/ammo_casing/microbattery/expend()
+ shots_left--
diff --git a/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm b/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm
new file mode 100644
index 00000000000..dbcb829cd3c
--- /dev/null
+++ b/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm
@@ -0,0 +1,50 @@
+// todo: /ammo_magazine/microbattery
+
+/obj/item/ammo_magazine/microbattery
+ name = "microbattery magazine"
+ desc = "A microbattery holder for a cell-based variable weapon."
+ icon = 'icons/modules/projectiles/legacy/microbattery_old.dmi'
+ icon_state = "cell_mag"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNETS = 3)
+ ammo_caliber = /datum/ammo_caliber/microbattery
+ ammo_type = /obj/item/ammo_casing/microbattery
+ ammo_max = 3
+ ammo_current = 0
+ ammo_legacy_init_everything = TRUE
+ var/x_offset = 5 //for update_icon() shenanigans- moved here so it can be adjusted for bigger mags
+ var/capname = "nsfw_mag" //as above
+ var/chargename = "nsfw_mag" //as above
+
+/obj/item/ammo_magazine/microbattery/why_cant_load_casing(obj/item/ammo_casing/casing)
+ if(!istype(casing, /obj/item/ammo_casing/microbattery))
+ return "not a microbattery"
+ return ..()
+
+/obj/item/ammo_magazine/microbattery/update_icon()
+ cut_overlays()
+ if(!ammo_internal.len)
+ return //Why bother
+
+ var/current = 0
+ for(var/B in ammo_internal)
+ var/obj/item/ammo_casing/microbattery/batt = B
+ var/image/cap = image(icon, icon_state = "[capname]_cap")
+ cap.color = batt.type_color
+ cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset
+ add_overlay(cap)
+
+ if(batt.shots_left)
+ var/ratio = CEILING(((batt.shots_left / initial(batt.shots_left)) * 4), 1) //4 is how many lights we have a sprite for
+ var/image/charge = image(icon, icon_state = "[chargename]_charge-[ratio]")
+ charge.color = "#29EAF4" //Could use battery color but eh.
+ charge.pixel_x = current * x_offset
+ add_overlay(charge)
+
+ current++ //Increment for offsets
+
+/obj/item/ammo_magazine/microbattery/advanced
+ name = "advanced microbattery magazine"
+ desc = "A microbattery holder for a cell-based variable weapon. This one has much more cell capacity!"
+ ammo_max = 6
+ x_offset = 3
+ icon_state = "cell_mag_extended"
diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm b/code/modules/projectiles/guns/ballistic/microbattery/microbattery.dm
similarity index 51%
rename from code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm
rename to code/modules/projectiles/guns/ballistic/microbattery/microbattery.dm
index 507156a9c10..849ee6ff1a1 100644
--- a/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm
+++ b/code/modules/projectiles/guns/ballistic/microbattery/microbattery.dm
@@ -1,5 +1,5 @@
-// The Gun //
-/obj/item/gun/ballistic/cell_loaded //this one can load both medical and security cells! for ERT/admin use.
+// todo: rework all of this shit, jfc
+/obj/item/gun/ballistic/microbattery
name = "multipurpose cell-loaded revolver"
desc = "Variety is the spice of life! This weapon is a hybrid of the NT-102b 'Nanotech Selectable-Fire Weapon' and the Vey-Med ML-3 'Medigun', dubbed the 'NSFW-ML3M'. \
It can fire both harmful and healing cells with an internal nanite fabricator and energy weapon cell loader. Up to three combinations of \
@@ -12,34 +12,32 @@
icon_override = 'icons/vore/custom_guns_vr.dmi'
item_state = "gun"
- caliber = "nsfw"
-
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNETS = 4)
fire_sound = 'sound/weapons/Taser.ogg'
load_method = MAGAZINE //Nyeh heh hehhh.
magazine_type = null
- allowed_magazines = list(/obj/item/ammo_magazine/cell_mag)
+ allowed_magazines = list(/obj/item/ammo_magazine/microbattery)
handle_casings = HOLD_CASINGS //Don't eject batteries!
recoil = 0
var/charge_left = 0
var/max_charge = 0
charge_sections = 5
-/obj/item/gun/ballistic/cell_loaded/consume_next_projectile()
+/obj/item/gun/ballistic/microbattery/consume_next_projectile()
if(chambered && ammo_magazine)
var/obj/item/ammo_casing/microbattery/batt = chambered
if(batt.shots_left)
return new chambered.projectile_type()
else
- for(var/B in ammo_magazine.stored_ammo)
+ for(var/B in ammo_magazine.ammo_internal)
var/obj/item/ammo_casing/microbattery/other_batt = B
if(istype(other_batt,chambered.type) && other_batt.shots_left)
switch_to(other_batt)
return new chambered.projectile_type()
-/obj/item/gun/ballistic/cell_loaded/proc/update_charge()
+/obj/item/gun/ballistic/microbattery/proc/update_charge()
charge_left = 0
max_charge = 0
@@ -51,13 +49,13 @@
charge_left = batt.shots_left
max_charge = initial(batt.shots_left)
if(ammo_magazine) //Crawl to find more
- for(var/B in ammo_magazine.stored_ammo)
+ for(var/B in ammo_magazine.ammo_internal)
var/obj/item/ammo_casing/microbattery/bullet = B
if(istype(bullet,batt.type))
charge_left += bullet.shots_left
max_charge += initial(bullet.shots_left)
-/obj/item/gun/ballistic/cell_loaded/proc/switch_to(obj/item/ammo_casing/microbattery/new_batt)
+/obj/item/gun/ballistic/microbattery/proc/switch_to(obj/item/ammo_casing/microbattery/new_batt)
if(ishuman(loc))
if(chambered && new_batt.type == chambered.type)
to_chat(loc,"\The [src] is now using the next [new_batt.type_name] power cell.")
@@ -68,45 +66,35 @@
update_charge()
update_icon()
-/obj/item/gun/ballistic/cell_loaded/attack_self(mob/user)
+/obj/item/gun/ballistic/microbattery/attack_self(mob/user)
if(!chambered)
return
- var/list/stored_ammo = ammo_magazine.stored_ammo
+ var/list/ammo_internal = ammo_magazine.ammo_internal
- if(stored_ammo.len == 1)
+ if(ammo_internal.len == 1)
return //silly you.
//Find an ammotype that ISN'T the same, or exhaust the list and don't change.
- var/our_slot = stored_ammo.Find(chambered)
+ var/our_slot = ammo_internal.Find(chambered)
- for(var/index in 1 to stored_ammo.len)
- var/true_index = ((our_slot + index - 1) % stored_ammo.len) + 1 // Stupid ONE BASED lists!
- var/obj/item/ammo_casing/microbattery/next_batt = stored_ammo[true_index]
+ for(var/index in 1 to ammo_internal.len)
+ var/true_index = ((our_slot + index - 1) % ammo_internal.len) + 1 // Stupid ONE BASED lists!
+ var/obj/item/ammo_casing/microbattery/next_batt = ammo_internal[true_index]
if(chambered != next_batt && !istype(next_batt, chambered.type))
switch_to(next_batt)
break
-/*
-/obj/item/gun/ballistic/cell_loaded/special_check(mob/user)
- if(!chambered)
- return
- var/obj/item/ammo_casing/microbattery/batt = chambered
- if(!batt.shots_left)
- return FALSE
-
- return TRUE
-*/
-/obj/item/gun/ballistic/cell_loaded/load_ammo(var/obj/item/A, mob/user)
+/obj/item/gun/ballistic/microbattery/load_ammo(var/obj/item/A, mob/user)
. = ..()
- if(ammo_magazine && ammo_magazine.stored_ammo.len)
- switch_to(ammo_magazine.stored_ammo[1])
+ if(ammo_magazine && ammo_magazine.amount_remaining())
+ switch_to(ammo_magazine.ammo_internal[1])
-/obj/item/gun/ballistic/cell_loaded/unload_ammo(mob/user, var/allow_dump=1)
+/obj/item/gun/ballistic/microbattery/unload_ammo(mob/user, var/allow_dump=1)
chambered = null
return ..()
-/obj/item/gun/ballistic/cell_loaded/update_overlays()
+/obj/item/gun/ballistic/microbattery/update_overlays()
. = ..()
update_charge()
@@ -136,103 +124,6 @@
charge_bar.color = batt_color
. += charge_bar
-// The Magazine //
-/obj/item/ammo_magazine/cell_mag
- name = "microbattery magazine"
- desc = "A microbattery holder for a cell-based variable weapon."
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "cell_mag"
- origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNETS = 3)
- caliber = "nsfw"
- ammo_type = /obj/item/ammo_casing/microbattery
- initial_ammo = 0
- max_ammo = 3
- var/x_offset = 5 //for update_icon() shenanigans- moved here so it can be adjusted for bigger mags
- var/capname = "nsfw_mag" //as above
- var/chargename = "nsfw_mag" //as above
- mag_type = MAGAZINE
-
- var/list/modes = list()
-
-/obj/item/ammo_magazine/cell_mag/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W, /obj/item/ammo_casing/microbattery))
- var/obj/item/ammo_casing/microbattery/B = W
- if(!istype(B, ammo_type))
- to_chat(user, "[B] does not fit into [src].")
- return
- if(stored_ammo.len >= max_ammo)
- to_chat(user, "[src] is full!")
- return
- if(!user.attempt_insert_item_for_installation(B, src))
- return
- stored_ammo.Add(B)
- update_icon()
- playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
- update_icon()
-
-/obj/item/ammo_magazine/cell_mag/update_icon()
- cut_overlays()
- if(!stored_ammo.len)
- return //Why bother
-
- var/current = 0
- for(var/B in stored_ammo)
- var/obj/item/ammo_casing/microbattery/batt = B
- var/image/cap = image(icon, icon_state = "[capname]_cap")
- cap.color = batt.type_color
- cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset
- add_overlay(cap)
-
- if(batt.shots_left)
- var/ratio = CEILING(((batt.shots_left / initial(batt.shots_left)) * 4), 1) //4 is how many lights we have a sprite for
- var/image/charge = image(icon, icon_state = "[chargename]_charge-[ratio]")
- charge.color = "#29EAF4" //Could use battery color but eh.
- charge.pixel_x = current * x_offset
- add_overlay(charge)
-
- current++ //Increment for offsets
-
-/obj/item/ammo_magazine/cell_mag/advanced
- name = "advanced microbattery magazine"
- desc = "A microbattery holder for a cell-based variable weapon. This one has much more cell capacity!"
- max_ammo = 6
- x_offset = 3
- icon_state = "cell_mag_extended"
-
-
-// The Casing //
-/obj/item/ammo_casing/microbattery
- name = "\'NSFW\' microbattery - UNKNOWN"
- desc = "A miniature battery for an energy weapon."
- //catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen)
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "nsfw_batt"
- slot_flags = SLOT_BELT | SLOT_EARS
- throw_force = 1
- w_class = WEIGHT_CLASS_TINY
- var/shots_left = 4
-
- leaves_residue = 0
- caliber = "nsfw"
- var/type_color = null
- var/type_name = null
- projectile_type = /obj/projectile/beam
-
-/obj/item/ammo_casing/microbattery/Initialize(mapload)
- . = ..()
- pixel_x = rand(-10, 10)
- pixel_y = rand(-10, 10)
- update_icon()
-
-/obj/item/ammo_casing/microbattery/update_icon()
- cut_overlays()
-
- var/image/ends = image(icon, icon_state = "[initial(icon_state)]_ends")
- ends.color = type_color
- add_overlay(ends)
-
-/obj/item/ammo_casing/microbattery/expend()
- shots_left--
// The Pack //
@@ -243,8 +134,8 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/secure/briefcase/nsfw_pack_hybrid/legacy_spawn_contents()
- new /obj/item/gun/ballistic/cell_loaded(src)
- new /obj/item/ammo_magazine/cell_mag/advanced(src)
+ new /obj/item/gun/ballistic/microbattery(src)
+ new /obj/item/ammo_magazine/microbattery/advanced(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
@@ -263,8 +154,8 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/secure/briefcase/nsfw_pack_hybrid_combat/legacy_spawn_contents()
- new /obj/item/gun/ballistic/cell_loaded(src)
- new /obj/item/ammo_magazine/cell_mag/advanced(src)
+ new /obj/item/gun/ballistic/microbattery(src)
+ new /obj/item/ammo_magazine/microbattery/advanced(src)
new /obj/item/ammo_casing/microbattery/combat/shotstun(src)
new /obj/item/ammo_casing/microbattery/combat/shotstun(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/revolver.dm b/code/modules/projectiles/guns/ballistic/microbattery/revolver.dm
similarity index 84%
rename from code/modules/vore/fluffstuff/guns/cell_loaded/revolver.dm
rename to code/modules/projectiles/guns/ballistic/microbattery/revolver.dm
index 2e545edf3da..7ecdbf4d0f7 100644
--- a/code/modules/vore/fluffstuff/guns/cell_loaded/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/microbattery/revolver.dm
@@ -1,5 +1,5 @@
// The Gun //
-/obj/item/gun/ballistic/cell_loaded/combat
+/obj/item/gun/ballistic/microbattery/combat
name = "cell-loaded revolver"
desc = "Variety is the spice of life! The NT-102b 'Hydra' is an unholy hybrid of an ammo-driven \
energy weapon that allows the user to mix and match their own fire modes. Up to four combinations of \
@@ -7,9 +7,9 @@
//catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen)
description_fluff = "The Nanotrasen 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding."
- allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat)
+ allowed_magazines = list(/obj/item/ammo_magazine/microbattery/combat)
-/obj/item/gun/ballistic/cell_loaded/combat/prototype
+/obj/item/gun/ballistic/microbattery/combat/prototype
name = "prototype cell-loaded revolver"
desc = "Variety is the spice of life! A prototype based on NT-102b 'Hydra' for short, is an unholy hybrid of an ammo-driven \
energy weapon that allows the user to mix and match their own fire modes. Up to two combinations of \
@@ -17,26 +17,26 @@
description_info = "This gun is an energy weapon that uses interchangable microbatteries in a magazine. Each battery is a different beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type."
description_antag = ""
- allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat/prototype)
+ allowed_magazines = list(/obj/item/ammo_magazine/microbattery/combat/prototype)
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 4, TECH_MAGNETS = 3)
// The Magazine //
-/obj/item/ammo_magazine/cell_mag/combat
+/obj/item/ammo_magazine/microbattery/combat
name = "microbattery magazine"
desc = "A microbattery holder for the \'Hydra\'"
icon_state = "nsfw_mag"
- max_ammo = 4
+ ammo_max = 4
x_offset = 4
catalogue_data = null//list(/datum/category_item/catalogue/information/organization/nanotrasen)
description_info = "This magazine holds Hydra microbatteries to power the Hydra handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger."
ammo_type = /obj/item/ammo_casing/microbattery/combat
-/obj/item/ammo_magazine/cell_mag/combat/prototype
+/obj/item/ammo_magazine/microbattery/combat/prototype
name = "prototype microbattery magazine"
icon_state = "nsfw_mag_prototype"
- max_ammo = 2
+ ammo_max = 2
x_offset = 6
catalogue_data = null
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_MAGNETS = 2)
@@ -50,8 +50,8 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/secure/briefcase/nsfw_pack/legacy_spawn_contents()
- new /obj/item/gun/ballistic/cell_loaded/combat(src)
- new /obj/item/ammo_magazine/cell_mag/combat(src)
+ new /obj/item/gun/ballistic/microbattery/combat(src)
+ new /obj/item/ammo_magazine/microbattery/combat(src)
for(var/path in subtypesof(/obj/item/ammo_casing/microbattery/combat))
new path(src)
@@ -62,8 +62,8 @@
max_single_weight_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/secure/briefcase/nsfw_pack_hos/legacy_spawn_contents()
- new /obj/item/gun/ballistic/cell_loaded/combat(src)
- new /obj/item/ammo_magazine/cell_mag/combat(src)
+ new /obj/item/gun/ballistic/microbattery/combat(src)
+ new /obj/item/ammo_magazine/microbattery/combat(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/revolver_cells.dm b/code/modules/projectiles/guns/ballistic/microbattery/revolver_cells.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/cell_loaded/revolver_cells.dm
rename to code/modules/projectiles/guns/ballistic/microbattery/revolver_cells.dm
diff --git a/code/modules/projectiles/guns/energy/frontier.dm b/code/modules/projectiles/guns/energy/frontier.dm
new file mode 100644
index 00000000000..ded27a27001
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/frontier.dm
@@ -0,0 +1,126 @@
+//Expedition pistol
+/obj/item/gun/energy/frontier
+ name = "Expedition Crank Phaser"
+ desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization."
+ icon_state = "phaser"
+ item_state = "phaser"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "phaser", SLOT_ID_LEFT_HAND = "phaser", "SLOT_ID_BELT" = "phaser")
+ fire_sound = 'sound/weapons/laser_rifle_1.wav'
+ origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_POWER = 4)
+ charge_cost = 300
+ battery_lock = 1
+
+ var/recharging = 0
+ var/phase_power = 75
+
+ projectile_type = /obj/projectile/beam
+ firemodes = list(
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/projectile/beam, charge_cost = 300),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/projectile/beam/weaklaser, charge_cost = 60),
+ )
+
+/obj/item/gun/energy/frontier/unload_ammo(var/mob/user)
+ if(recharging)
+ return
+ recharging = 1
+ update_icon()
+ user.visible_message("[user] opens \the [src] and starts pumping the handle.", \
+ "You open \the [src] and start pumping the handle.")
+ while(recharging)
+ if(!do_after(user, 10, src))
+ break
+ playsound(get_turf(src),'sound/items/change_drill.ogg',25,1)
+ if(power_supply.give(phase_power) < phase_power)
+ break
+
+ recharging = 0
+ update_icon()
+
+/obj/item/gun/energy/frontier/update_icon()
+ if(recharging)
+ icon_state = "[initial(icon_state)]_pump"
+ update_held_icon()
+ return
+ ..()
+
+/obj/item/gun/energy/frontier/emp_act(severity)
+ return ..(severity+2)
+
+/obj/item/gun/energy/frontier/legacy_ex_act() //|rugged|
+ return
+
+/obj/item/gun/energy/frontier/locked
+ desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
+ pin = /obj/item/firing_pin/explorer
+
+//Phaser Carbine - Reskinned phaser
+/obj/item/gun/energy/frontier/locked/carbine
+ name = "Expedition Phaser Carbine"
+ desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
+ icon_state = "carbinekill"
+ item_state = "retro"
+ item_icons = list(SLOT_ID_LEFT_HAND = 'icons/mob/items/lefthand_guns.dmi', SLOT_ID_RIGHT_HAND = 'icons/mob/items/righthand_guns.dmi')
+
+ modifystate = "carbinekill"
+ firemodes = list(
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/projectile/beam, modifystate="carbinekill", charge_cost = 300),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/projectile/beam/weaklaser, modifystate="carbinestun", charge_cost = 60),
+
+ )
+
+/obj/item/gun/energy/frontier/locked/carbine/update_icon_state()
+ . = ..()
+ if(recharging)
+ icon_state = "[modifystate]_pump"
+ update_held_icon()
+
+//Expeditionary Holdout Phaser Pistol
+/obj/item/gun/energy/frontier/locked/holdout
+ name = "Holdout Phaser Pistol"
+ desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
+ icon = 'icons/obj/gun/energy.dmi'
+ icon_state = "holdoutkill"
+ item_state = null
+ fire_sound = 'sound/weapons/laser_holdout_1.wav'
+ phase_power = 100
+
+ w_class = WEIGHT_CLASS_SMALL
+ charge_cost = 600
+ modifystate = "holdoutkill"
+ firemodes = list(
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/projectile/beam, modifystate="holdoutkill", charge_cost = 600),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/projectile/beam/weaklaser, modifystate="holdoutstun", charge_cost = 120),
+ list(mode_name="stun", fire_delay=12, projectile_type=/obj/projectile/beam/stun/med, modifystate="holdoutshock", charge_cost = 300),
+ )
+
+/obj/item/gun/energy/frontier/taj
+ name = "Adhomai crank laser"
+ desc = "The \"Icelance\" crank charged laser rifle, produced by the Hadii-Wrack group for the People's Republic of Adhomai's Grand People's Army."
+ icon = 'icons/obj/gun/energy.dmi'
+ icon_state = "phaser-taj"
+ item_state = "phaser-taj"
+ wielded_item_state = "phaser-taj"
+ charge_cost = 600
+
+ projectile_type = /obj/projectile/beam/midlaser
+
+
+ firemodes = list(
+ )
+
+/obj/item/gun/energy/frontier/taj/unload_ammo(var/mob/user)
+ if(recharging)
+ return
+ recharging = 1
+ update_icon()
+ user.visible_message("[user] begins to turn the crank of \the [src].", \
+ "You begins to turn the crank of \the [src].")
+ while(recharging)
+ if(!do_after(user, 10, src))
+ break
+ playsound(get_turf(src),'sound/items/change_drill.ogg',25,1)
+ if(power_supply.give(phase_power) < phase_power)
+ break
+
+ recharging = 0
+ update_icon()
diff --git a/code/modules/projectiles/guns/energy/special/hardlight_bow.dm b/code/modules/projectiles/guns/energy/special/hardlight_bow.dm
new file mode 100644
index 00000000000..1b6ce64b3a9
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/special/hardlight_bow.dm
@@ -0,0 +1,30 @@
+
+/obj/item/gun/energy/hardlight_bow
+ name = "hardlight bow"
+ desc = "An experimental, unlicensed design from Haephestus that never actually went anywhere; the idea of a crankable ion weapon was of interest, but the lack of practicality made it undesirable. \n \n \"...and his music was electric.\""
+ icon = 'icons/obj/gun/energy.dmi'
+ icon_state = "bow_hardlight"
+ item_state = "bow_pipe"
+ slot_flags = SLOT_BACK | SLOT_BELT
+ charge_cost = 1200
+ battery_lock = 1
+ pin = /obj/item/firing_pin/explorer
+ projectile_type = /obj/projectile/ion
+
+ var/recharging = 0
+ var/phase_power = 150
+
+/obj/item/gun/energy/hardlight_bow/unload_ammo(var/mob/user)
+ if(recharging)
+ return
+ recharging = 1
+ user.visible_message("[user] begins to tighten \the [src]'s electric bowstring.", \
+ "You begin to tighten \the [src]'s electric bowstring")
+ while(recharging)
+ if(!do_after(user, 10, src))
+ break
+ playsound(get_turf(src),'sound/weapons/hardlight_bow_charge.ogg',25,1)
+ if(power_supply.give(phase_power) < phase_power)
+ break
+
+ recharging = 0
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index 3542155b7d5..9393ff5c723 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -1,7 +1,7 @@
/obj/item/syringe_cartridge
name = "syringe gun cartridge"
desc = "An impact-triggered compressed gas cartridge that can be fitted to a syringe for rapid injection."
- icon = 'icons/obj/ammo.dmi'
+ icon = 'icons/modules/projectiles/casings/syringe.dmi'
icon_state = "syringe-cartridge"
var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot
materials_base = list(MAT_STEEL = 125, MAT_GLASS = 375)
diff --git a/code/modules/vore/fluffstuff/guns/bsharpoon.dm b/code/modules/projectiles/guns/legacy_vr_guns/bsharpoon.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/bsharpoon.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/bsharpoon.dm
diff --git a/code/modules/vore/fluffstuff/guns/crestrose.dm b/code/modules/projectiles/guns/legacy_vr_guns/crestrose.dm
similarity index 90%
rename from code/modules/vore/fluffstuff/guns/crestrose.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/crestrose.dm
index 158e6f38fb4..c3570b14781 100644
--- a/code/modules/vore/fluffstuff/guns/crestrose.dm
+++ b/code/modules/projectiles/guns/legacy_vr_guns/crestrose.dm
@@ -17,9 +17,9 @@
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
attack_sound = null
- caliber = "s762"
- magazine_type = /obj/item/ammo_magazine/m762
- allowed_magazines = list(/obj/item/ammo_magazine/m762)
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ magazine_type = /obj/item/ammo_magazine/a7_62mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm)
firemodes = list(
list(mode_name="fold", icon_state="crestrose_fold",item_state = "laser",damage_force=3),
diff --git a/code/modules/projectiles/guns/legacy_vr_guns/custom_guns.dm b/code/modules/projectiles/guns/legacy_vr_guns/custom_guns.dm
new file mode 100644
index 00000000000..f7ef0beaa8d
--- /dev/null
+++ b/code/modules/projectiles/guns/legacy_vr_guns/custom_guns.dm
@@ -0,0 +1,272 @@
+// For general use
+/obj/item/gun/ballistic/automatic/battlerifle
+ name = "\improper JSDF service rifle"
+ desc = "You had your chance to be afraid before you joined my beloved Corps! But, to guide you back to the true path, I have brought this motivational device! Uses 9.5x40mm rounds."
+ icon_state = "battlerifle"
+ icon_override = 'icons/obj/gun/ballistic.dmi'
+ item_state = "battlerifle_i"
+ item_icons = null
+ w_class = WEIGHT_CLASS_BULKY
+ recoil = 2 // The battlerifle was known for its nasty recoil.
+ max_shells = 36
+ regex_this_caliber = /datum/ammo_caliber/a9_5mm
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
+ magazine_type = /obj/item/ammo_magazine/m95
+ allowed_magazines = list(/obj/item/ammo_magazine/m95)
+ fire_sound = 'sound/weapons/battlerifle.ogg'
+ load_method = MAGAZINE
+ slot_flags = SLOT_BACK
+ one_handed_penalty = 60 // The weapon itself is heavy
+
+/obj/item/gun/ballistic/automatic/battlerifle/update_icon()
+ . = ..()
+ update_held_icon()
+
+/obj/item/gun/ballistic/automatic/battlerifle/update_icon_state()
+ . = ..()
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/m95))
+ icon_state = "battlerifle"
+ else
+ icon_state = (ammo_magazine)? "battlerifle" : "battlerifle_empty"
+
+// For general use
+/obj/item/gun/ballistic/shotgun/pump/JSDF
+ name = "\improper JSDF tactical shotgun"
+ desc = "All you greenhorns who wanted to see Xenomorphs up close... this is your lucky day. Uses 12g rounds."
+ icon_state = "haloshotgun"
+ icon_override = 'icons/obj/gun/ballistic.dmi'
+ item_state = "haloshotgun_i"
+ item_icons = null
+ ammo_type = /obj/item/ammo_casing/a12g
+ max_shells = 12
+
+// For general use
+/obj/item/gun/ballistic/automatic/pdw
+ name = "personal defense weapon"
+ desc = "The X-9MM is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, but never caught on with Nanotrasen. Uses 9mm rounds."
+ icon_state = "pdw"
+ item_state = "c20r" // Placeholder
+ w_class = WEIGHT_CLASS_NORMAL
+ regex_this_caliber = /datum/ammo_caliber/a9mm
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
+ slot_flags = SLOT_BELT
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/a9mm/large
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm, /obj/item/ammo_magazine/a9mm/large)
+
+ 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,-15,-30), dispersion=list(0.0, 0.6, 0.6))
+ )
+
+/obj/item/gun/ballistic/automatic/pdw/update_icon()
+ . = ..()
+ update_held_icon()
+
+/obj/item/gun/ballistic/automatic/pdw/update_icon_state()
+ . = ..()
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a9mm))
+ icon_state = "pdw-short"
+ else
+ icon_state = (ammo_magazine)? "pdw" : "pdw-empty"
+
+// For general use
+/obj/item/gun/energy/imperial
+ name = "imperial energy pistol"
+ desc = "An elegant weapon developed by the Imperium Auream. Their weaponsmiths have cleverly found a way to make a gun that is only about the size of an average energy pistol, yet with the fire power of a laser carbine."
+ icon_state = "ge_pistol"
+ item_state = "ge_pistol"
+ fire_sound = 'sound/weapons/mandalorian.ogg'
+ item_icons = list(SLOT_ID_RIGHT_HAND = 'icons/obj/gun/energy.dmi', SLOT_ID_LEFT_HAND = 'icons/obj/gun/energy.dmi') // WORK YOU FUCKING CUNT PIECE OF SHIT BASTARD STUPID BITCH ITEM ICON AAAAHHHH
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "ge_pistol_r", SLOT_ID_LEFT_HAND = "ge_pistol_l")
+ slot_flags = SLOT_BELT
+ w_class = WEIGHT_CLASS_NORMAL
+ damage_force = 10
+ origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2)
+ materials_base = list(MAT_STEEL = 2000)
+ projectile_type = /obj/projectile/beam/imperial
+
+// For general use
+/obj/item/gun/ballistic/automatic/stg
+ name = "\improper Sturmgewehr"
+ desc = "An STG-560 built by RauMauser. Experience the terror of the Siegfried line, redone for the 26th century! The Kaiser would be proud. Uses unique 7.92x33mm Kurz rounds."
+ icon_state = "stg60"
+ item_state = "arifle"
+ w_class = WEIGHT_CLASS_BULKY
+ max_shells = 30
+ regex_this_caliber = /datum/ammo_caliber/a7_92mm
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ILLEGAL = 6)
+ magazine_type = /obj/item/ammo_magazine/a7_92mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_92mm)
+ load_method = MAGAZINE
+
+/obj/item/gun/ballistic/automatic/stg/update_icon()
+ . = ..()
+ update_held_icon()
+
+/obj/item/gun/ballistic/automatic/stg/update_icon_state()
+ . = ..()
+ icon_state = (ammo_magazine)? "stg60" : "stg60-e"
+ item_state = (ammo_magazine)? "arifle" : "arifle-e"
+
+// ------------ Energy Luger ------------
+/obj/item/gun/energy/gun/eluger
+ name = "energy Luger"
+ desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing for rapid follow-up shots. It also has the ability to toggle between stun and kill."
+ icon_state = "elugerstun100"
+ item_state = "gun"
+ fire_delay = null // Lugers are quite comfortable to shoot, thus allowing for more controlled follow-up shots. Rate of fire similar to a laser carbine.
+ battery_lock = 1 // In exchange for balance, you cannot remove the battery. Also there's no sprite for that and I fucking suck at sprites. -Ace
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
+ modifystate = "elugerstun"
+ fire_sound = 'sound/weapons/Taser.ogg'
+ firemodes = list(
+ list(mode_name="stun", charge_cost=120,projectile_type=/obj/projectile/beam/stun, modifystate="elugerstun", fire_sound='sound/weapons/Taser.ogg'),
+ list(mode_name="lethal", charge_cost=240,projectile_type=/obj/projectile/beam/eluger, modifystate="elugerkill", fire_sound='sound/weapons/eluger.ogg'),
+ )
+
+//Civilian gun
+/obj/item/gun/ballistic/giskard
+ name = "\improper \"Giskard\" holdout pistol"
+ desc = "The FS HG .380 \"Giskard\" can even fit into the pocket! Uses .380 rounds."
+ icon_state = "giskardcivil"
+ regex_this_caliber = /datum/ammo_caliber/a38
+ magazine_type = /obj/item/ammo_magazine/a38
+ allowed_magazines = list(/obj/item/ammo_magazine/a38)
+ load_method = MAGAZINE
+ w_class = WEIGHT_CLASS_SMALL
+ fire_sound = 'sound/weapons/gunshot_pathetic.ogg'
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3)
+
+/obj/item/gun/ballistic/giskard/update_icon_state()
+ . = ..()
+ if(ammo_magazine && ammo_magazine.amount_remaining())
+ icon_state = "giskardcivil"
+ else
+ icon_state = "giskardcivil_empty"
+
+//Not so civilian gun
+/obj/item/gun/ballistic/giskard/olivaw
+ name = "\improper \"Olivaw\" holdout burst-pistol"
+ desc = "The FS HG .380 \"Olivaw\" is a more advanced version of the \"Giskard\". This one seems to have a two-round burst-fire mode. Uses .380 rounds."
+ icon_state = "olivawcivil"
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=1.2, move_delay=null, burst_accuracy=null, dispersion=null),
+ list(mode_name="2-round bursts", burst=2, fire_delay=0.2, move_delay=4, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)),
+ )
+
+/obj/item/gun/ballistic/giskard/olivaw/update_icon_state()
+ . = ..()
+ if(ammo_magazine && ammo_magazine.amount_remaining())
+ icon_state = "olivawcivil"
+ else
+ icon_state = "olivawcivil_empty"
+
+//Detective gun
+/obj/item/gun/ballistic/revolver/consul
+ name = "\improper \"Consul\" Revolver"
+ desc = "Are you feeling lucky, punk? Uses .44 rounds."
+ icon_state = "inspector"
+ item_state = "revolver"
+ regex_this_caliber = /datum/ammo_caliber/a44
+ ammo_type = /obj/item/ammo_casing/a44/rubber
+ handle_casings = CYCLE_CASINGS
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
+
+/obj/item/gun/ballistic/revolver/consul/update_overlays()
+ . = ..()
+ if(loaded.len==0)
+ . += "inspector_off"
+ else
+ . += "inspector_on"
+
+// No idea what this is for.
+/obj/item/gun/ballistic/automatic/sol
+ name = "\improper \"Sol\" SMG"
+ desc = "The FS 9x19mm \"Sol\" is a compact and reliable submachine gun. Uses 9mm rounds."
+ icon_state = "SMG-IS"
+ item_state = "wt550"
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = SLOT_BELT
+ regex_this_caliber = /datum/ammo_caliber/a9mm
+ magazine_type = /obj/item/ammo_magazine/a9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm)
+ load_method = MAGAZINE
+ multi_aim = 1
+ burst_delay = 2
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
+ 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,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
+ )
+
+/obj/item/gun/ballistic/automatic/sol/proc/update_charge()
+ if(!ammo_magazine)
+ return
+ var/ratio = ammo_magazine.amount_remaining() / ammo_magazine.ammo_max
+ if(ratio < 0.25 && ratio != 0)
+ ratio = 0.25
+ ratio = round(ratio, 0.25) * 100
+ add_overlay("smg_[ratio]")
+
+/obj/item/gun/ballistic/automatic/sol/update_icon()
+ icon_state = (ammo_magazine)? "SMG-IS" : "SMG-IS-empty"
+ cut_overlay()
+ update_charge()
+
+//HoP gun
+/obj/item/gun/energy/gun/martin
+ name = "holdout energy gun"
+ desc = "The FS PDW E \"Martin\" is small holdout e-gun. Don't miss!"
+ icon_state = "PDW"
+ item_state = "gun"
+ w_class = WEIGHT_CLASS_SMALL
+ projectile_type = /obj/projectile/beam/stun
+ charge_cost = 1200
+ charge_meter = 0
+ modifystate = null
+ battery_lock = 1
+ fire_sound = 'sound/weapons/Taser.ogg'
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
+ firemodes = list(
+ list(mode_name="stun", projectile_type=/obj/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', charge_cost = 600),
+ list(mode_name="lethal", projectile_type=/obj/projectile/beam, fire_sound='sound/weapons/Laser.ogg', charge_cost = 1200),
+ )
+
+/obj/item/gun/energy/gun/martin/update_overlays()
+ . = ..()
+ var/datum/firemode/current_mode = firemodes[sel_mode]
+ switch(current_mode.name)
+ if("stun")
+ . += "taser_pdw"
+ if("lethal")
+ . += "lazer_pdw"
+
+/////////////////////////////////////////////////////
+//////////////////// Custom Ammo ////////////////////
+/////////////////////////////////////////////////////
+//---------------- Beams ----------------
+/obj/projectile/beam/eluger
+ name = "laser beam"
+ icon_state = "xray"
+ light_color = "#00FF00"
+ muzzle_type = /obj/effect/projectile/muzzle/xray
+ tracer_type = /obj/effect/projectile/tracer/xray
+ impact_type = /obj/effect/projectile/impact/xray
+
+/obj/projectile/beam/imperial
+ name = "laser beam"
+ fire_sound = 'sound/weapons/mandalorian.ogg'
+ icon_state = "darkb"
+ light_color = "#8837A3"
+ muzzle_type = /obj/effect/projectile/muzzle/darkmatter
+ tracer_type = /obj/effect/projectile/tracer/darkmatter
+ impact_type = /obj/effect/projectile/impact/darkmatter
+
+/obj/projectile/beam/stun/kin21
+ name = "kinh21 stun beam"
+ icon_state = "omnilaser"
+ light_color = "#0000FF"
+ muzzle_type = /obj/effect/projectile/muzzle/laser_omni
+ tracer_type = /obj/effect/projectile/tracer/laser_omni
+ impact_type = /obj/effect/projectile/impact/laser_omni
diff --git a/code/modules/vore/fluffstuff/guns/dominator.dm b/code/modules/projectiles/guns/legacy_vr_guns/dominator.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/dominator.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/dominator.dm
diff --git a/code/modules/vore/fluffstuff/guns/gunsword.dm b/code/modules/projectiles/guns/legacy_vr_guns/gunsword.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/gunsword.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/gunsword.dm
diff --git a/code/modules/vore/fluffstuff/guns/protector.dm b/code/modules/projectiles/guns/legacy_vr_guns/protector.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/protector.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/protector.dm
diff --git a/code/modules/vore/fluffstuff/guns/pummeler.dm b/code/modules/projectiles/guns/legacy_vr_guns/pummeler.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/pummeler.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/pummeler.dm
diff --git a/code/modules/vore/fluffstuff/guns/secutor.dm b/code/modules/projectiles/guns/legacy_vr_guns/secutor.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/secutor.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/secutor.dm
diff --git a/code/modules/vore/fluffstuff/guns/sickshot.dm b/code/modules/projectiles/guns/legacy_vr_guns/sickshot.dm
similarity index 100%
rename from code/modules/vore/fluffstuff/guns/sickshot.dm
rename to code/modules/projectiles/guns/legacy_vr_guns/sickshot.dm
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index f7e8c4edfb0..b7adad88eba 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -20,11 +20,11 @@
icon_state = "advanced_smg"
w_class = WEIGHT_CLASS_NORMAL
load_method = MAGAZINE
- caliber = "9mm"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
magazine_type = null // R&D builds this. Starts unloaded.
- allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced, /obj/item/ammo_magazine/m9mm)
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm/advanced_smg, /obj/item/ammo_magazine/a9mm)
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
@@ -32,7 +32,7 @@
)
/obj/item/gun/ballistic/automatic/advanced_smg/loaded
- magazine_type = /obj/item/ammo_magazine/m9mmAdvanced
+ magazine_type = /obj/item/ammo_magazine/a9mm/advanced_smg
/obj/item/gun/ballistic/automatic/c20r
name = "submachine gun"
@@ -41,12 +41,12 @@
item_state = "c20r"
w_class = WEIGHT_CLASS_NORMAL
damage_force = 10
- caliber = "10mm"
+ regex_this_caliber = /datum/ammo_caliber/a10mm
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
slot_flags = SLOT_BELT|SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m10mm
- allowed_magazines = list(/obj/item/ammo_magazine/m10mm)
+ magazine_type = /obj/item/ammo_magazine/a10mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a10mm)
projectile_type = /obj/projectile/bullet/pistol/medium
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -56,7 +56,7 @@
/obj/item/gun/ballistic/automatic/c20r/update_icon_state()
. = ..()
if(ammo_magazine)
- icon_state = "c20r-[round(ammo_magazine.stored_ammo.len,4)]"
+ icon_state = "c20r-[round(ammo_magazine.amount_remaining(),4)]"
else
icon_state = "c20r"
@@ -69,12 +69,12 @@
item_state = null
w_class = WEIGHT_CLASS_BULKY
damage_force = 10
- caliber = "5.56mm"
+ regex_this_caliber = /datum/ammo_caliber/a5_56mm
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/m556
- allowed_magazines = list(/obj/item/ammo_magazine/m556)
+ magazine_type = /obj/item/ammo_magazine/a5_56mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a5_56mm)
projectile_type = /obj/projectile/bullet/rifle/a556
mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg'
mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg'
@@ -89,7 +89,7 @@
/obj/item/gun/ballistic/automatic/sts35/update_icon_state()
. = ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m556/small))
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a5_56mm/small))
icon_state = "arifle-small" // If using the small magazines, use the small magazine sprite.
/obj/item/gun/ballistic/automatic/sts35/update_icon(ignore_inhands)
@@ -103,25 +103,25 @@
icon_state = "wt550"
item_state = "wt550"
w_class = WEIGHT_CLASS_NORMAL
- caliber = "9mm"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
ammo_type = "/obj/item/ammo_casing/a9mmr"
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mmt/rubber
- allowed_magazines = list(/obj/item/ammo_magazine/m9mmt)
+ magazine_type = /obj/item/ammo_magazine/a9mm/top_mount/rubber
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm/top_mount)
projectile_type = /obj/projectile/bullet/pistol/medium
worth_intrinsic = 450
/obj/item/gun/ballistic/automatic/wt550/update_icon_state()
. = ..()
if(ammo_magazine)
- icon_state = "wt550-[round(ammo_magazine.stored_ammo.len,4)]"
+ icon_state = "wt550-[round(ammo_magazine.amount_remaining(),4)]"
else
icon_state = "wt550"
/obj/item/gun/ballistic/automatic/wt550/lethal
- magazine_type = /obj/item/ammo_magazine/m9mmt
+ magazine_type = /obj/item/ammo_magazine/a9mm/top_mount
/obj/item/gun/ballistic/automatic/z8
name = "designated marksman rifle"
@@ -131,12 +131,12 @@
wielded_item_state = "z8carbine-wielded"
w_class = WEIGHT_CLASS_BULKY
damage_force = 10
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
slot_flags = SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m762
- allowed_magazines = list(/obj/item/ammo_magazine/m762)
+ magazine_type = /obj/item/ammo_magazine/a7_62mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm)
projectile_type = /obj/projectile/bullet/rifle/a762
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -183,7 +183,7 @@
/obj/item/gun/ballistic/automatic/z8/update_icon_state()
. = ..()
if(ammo_magazine)
- icon_state = "carbine-[round(ammo_magazine.stored_ammo.len,2)]"
+ icon_state = "carbine-[round(ammo_magazine.amount_remaining(),2)]"
else
icon_state = "carbine"
@@ -207,12 +207,12 @@
damage_force = 10
slot_flags = 0
max_shells = 50
- caliber = "5.56mm"
+ regex_this_caliber = /datum/ammo_caliber/a5_56mm
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m556saw
- allowed_magazines = list(/obj/item/ammo_magazine/m556saw, /obj/item/ammo_magazine/m556)
+ magazine_type = /obj/item/ammo_magazine/a5_56mm/saw
+ allowed_magazines = list(/obj/item/ammo_magazine/a5_56mm/saw, /obj/item/ammo_magazine/a5_56mm)
projectile_type = /obj/projectile/bullet/rifle/a556
mag_insert_sound = 'sound/weapons/guns/interaction/lmg_magin.ogg'
mag_remove_sound = 'sound/weapons/guns/interaction/lmg_magout.ogg'
@@ -267,11 +267,11 @@
/obj/item/gun/ballistic/automatic/lmg/update_icon_state()
. = ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m762))
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a7_62mm))
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, 10) : "-empty"]"
+ icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.amount_remaining(), 10) : "-empty"]"
item_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
/obj/item/gun/ballistic/automatic/lmg/load_ammo(var/obj/item/A, mob/user)
@@ -293,15 +293,15 @@
icon_state = "mg42closed50"
item_state = "mg42closed"
max_shells = 50
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
- magazine_type = /obj/item/ammo_magazine/m762_mg42
- allowed_magazines = list(/obj/item/ammo_magazine/m762_mg42)
+ magazine_type = /obj/item/ammo_magazine/a7_62mm/mg42
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm/mg42)
one_handed_penalty = 100
/obj/item/gun/ballistic/automatic/lmg/mg42/update_icon_state()
. = ..()
- icon_state = "mg42[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
+ icon_state = "mg42[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.amount_remaining(), 25) : "-empty"]"
item_state = "mg42[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
/obj/item/gun/ballistic/automatic/lmg/m60
@@ -310,9 +310,9 @@
icon_state = "M60closed75"
item_state = "M60closed"
max_shells = 75
- caliber = "7.62mm"
- magazine_type = /obj/item/ammo_magazine/m762_m60
- allowed_magazines = list(/obj/item/ammo_magazine/m762_m60)
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ magazine_type = /obj/item/ammo_magazine/a7_62mm/m60
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm/m60)
projectile_type = /obj/projectile/bullet/rifle/a762
one_handed_penalty = 100
@@ -323,7 +323,7 @@
/obj/item/gun/ballistic/automatic/lmg/m60/update_icon_state()
. = ..()
- icon_state = "M60[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 15) : "-empty"]"
+ icon_state = "M60[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.amount_remaining(), 15) : "-empty"]"
item_state = "M60[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
//Future AA-12
@@ -334,12 +334,12 @@
item_state = "ashot"
w_class = WEIGHT_CLASS_BULKY
damage_force = 10
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
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/m12gdrum
- allowed_magazines = list(/obj/item/ammo_magazine/m12gdrum)
+ magazine_type = /obj/item/ammo_magazine/a12g/drum
+ allowed_magazines = list(/obj/item/ammo_magazine/a12g/drum)
projectile_type = /obj/projectile/bullet/shotgun
heavy = TRUE
one_handed_penalty = 30 //The AA12 can be fired one-handed fairly easily.
@@ -367,10 +367,10 @@
icon_state = "mini-uzi"
w_class = WEIGHT_CLASS_NORMAL
load_method = MAGAZINE
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
- magazine_type = /obj/item/ammo_magazine/m45uzi
- allowed_magazines = list(/obj/item/ammo_magazine/m45uzi)
+ magazine_type = /obj/item/ammo_magazine/a45/uzi
+ allowed_magazines = list(/obj/item/ammo_magazine/a45/uzi)
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -418,13 +418,13 @@
icon_state = "p90smg"
item_state = "p90"
w_class = WEIGHT_CLASS_NORMAL
- caliber = "5.7x28mm"
+ regex_this_caliber = /datum/ammo_caliber/a5_7mm
fire_sound = 'sound/weapons/gunshot/gunshot_uzi.wav'
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT // ToDo: Belt sprite.
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m57x28mmp90
- allowed_magazines = list(/obj/item/ammo_magazine/m57x28mmp90) // ToDo: New sprite for the different mag.
+ magazine_type = /obj/item/ammo_magazine/a5_7mm/p90
+ allowed_magazines = list(/obj/item/ammo_magazine/a5_7mm/p90) // ToDo: New sprite for the different mag.
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -433,31 +433,31 @@
/obj/item/gun/ballistic/automatic/p90/update_icon_state()
. = ..()
- icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]"
+ icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 6) : "empty"]"
/obj/item/gun/ballistic/automatic/p90/custom
name = "custom personal defense weapon"
desc = "An H90K from Hephaestus Industries. This one has a different colored receiver and a sling."
icon_state = "p90smgC"
- magazine_type = /obj/item/ammo_magazine/m57x28mmp90/hunter
+ magazine_type = /obj/item/ammo_magazine/a5_7mm/p90/hunter
slot_flags = SLOT_BELT|SLOT_BACK
pin = /obj/item/firing_pin/explorer
/obj/item/gun/ballistic/automatic/p90/custom/update_icon_state()
. = ..()
- icon_state = "p90smgC-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "e"]"
+ icon_state = "p90smgC-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 6) : "e"]"
/obj/item/gun/ballistic/automatic/tommygun
name = "\improper Tommy Gun"
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 = WEIGHT_CLASS_NORMAL
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
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/m45tommy
- allowed_magazines = list(/obj/item/ammo_magazine/m45tommy, /obj/item/ammo_magazine/m45tommydrum)
+ magazine_type = /obj/item/ammo_magazine/a45/tommy
+ allowed_magazines = list(/obj/item/ammo_magazine/a45/tommy, /obj/item/ammo_magazine/a45/tommy/drum)
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -476,12 +476,12 @@
item_state = "bullpup"
w_class = WEIGHT_CLASS_BULKY
damage_force = 10
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
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/m762
- allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
+ magazine_type = /obj/item/ammo_magazine/a7_62mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm, /obj/item/ammo_magazine/a7_62mm)
projectile_type = /obj/projectile/bullet/rifle/a762
heavy = TRUE
one_handed_penalty = 45
@@ -493,7 +493,7 @@
/obj/item/gun/ballistic/automatic/bullpup/update_icon_state()
. = ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m762))
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a7_62mm))
icon_state = "bullpup-small"
/obj/item/gun/ballistic/automatic/bullpup/update_icon()
@@ -507,12 +507,12 @@
item_state = "fal"
w_class = WEIGHT_CLASS_BULKY
damage_force = 10
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
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/m762m
- allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
+ magazine_type = /obj/item/ammo_magazine/a7_62mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm, /obj/item/ammo_magazine/a7_62mm)
heavy = TRUE
projectile_type = /obj/projectile/bullet/rifle/a762
@@ -536,12 +536,12 @@
fire_anim = "automat_fire"
w_class = WEIGHT_CLASS_BULKY
damage_force = 10
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
heavy = TRUE
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) //A real work around to a automatic rifle.
slot_flags = SLOT_BACK
load_method = SPEEDLOADER
- ammo_type = /obj/item/ammo_casing/a762
+ ammo_type = /obj/item/ammo_casing/a7_62mm
max_shells = 15
burst = 3
fire_delay = 7.2
@@ -550,7 +550,7 @@
dispersion = list(0.0, 0.6,1.0)
/obj/item/gun/ballistic/automatic/automat/holy
- ammo_type = /obj/item/ammo_casing/a762/silver
+ ammo_type = /obj/item/ammo_casing/a7_62mm/silver
holy = TRUE
/obj/item/gun/ballistic/automatic/automat/taj
@@ -569,12 +569,12 @@
w_class = WEIGHT_CLASS_BULKY
heavy = TRUE
damage_force = 10
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
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/holyshot_mag
- allowed_magazines = list(/obj/item/ammo_magazine/holyshot_mag, /obj/item/ammo_magazine/holyshot_mag/stake)
+ magazine_type = /obj/item/ammo_magazine/a12g/drum/holy
+ allowed_magazines = list(/obj/item/ammo_magazine/a12g/drum/holy, /obj/item/ammo_magazine/a12g/drum/holy/stake)
projectile_type = /obj/projectile/bullet/shotgun
one_handed_penalty = 40
@@ -601,12 +601,12 @@
w_class = WEIGHT_CLASS_BULKY
heavy = TRUE
damage_force = 10
- caliber = "organic"
+ regex_this_caliber = /datum/ammo_caliber/biomatter
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/mcompressedbio/large/banana
- allowed_magazines = list(/obj/item/ammo_magazine/mcompressedbio/large/banana)
+ magazine_type = /obj/item/ammo_magazine/biomatter/large/banana
+ allowed_magazines = list(/obj/item/ammo_magazine/biomatter/large/banana)
projectile_type = /obj/projectile/bullet/organic
one_handed_penalty = 30
@@ -631,10 +631,10 @@
icon_state = "wt274"
item_state = "gun"
load_method = MAGAZINE
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
- magazine_type = /obj/item/ammo_magazine/m45uzi/wt274
- allowed_magazines = list(/obj/item/ammo_magazine/m45uzi/wt274)
+ magazine_type = /obj/item/ammo_magazine/a45/wt274
+ allowed_magazines = list(/obj/item/ammo_magazine/a45/wt274)
one_handed_penalty = 10
firemodes = list(
@@ -656,13 +656,13 @@
icon_state = "combatsmg"
item_state = "combatsmg"
w_class = WEIGHT_CLASS_NORMAL
- caliber = "5.7x28mm"
+ regex_this_caliber = /datum/ammo_caliber/a5_7mm
fire_sound = 'sound/weapons/gunshot/gunshot_uzi.wav'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m57x28mm/smg/ap
- allowed_magazines = list(/obj/item/ammo_magazine/m57x28mm/smg)
+ magazine_type = /obj/item/ammo_magazine/a5_7mm/harpy_smg/ap
+ allowed_magazines = list(/obj/item/ammo_magazine/a5_7mm/harpy_smg)
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -681,13 +681,13 @@
description_fluff = "The HI-GP mk 8 'Ballistae' is a bulky weapon designed to fire an obscenely robust .75 caliber gyrojet round with an explosive payload. The original design was sourced from Old Earth speculative documentation, and developed to test its efficacy. Although the weapon itself is undeniably powerful, its logistical demands, the recoil of the three-stage ammunition system, and its hefty size make it untenable on the modern battlefield."
icon_state = "bolter"
item_state = "bolter"
- caliber = ".75"
+ regex_this_caliber = /datum/ammo_caliber/a75
origin_tech = list(TECH_COMBAT = 5, TECH_ILLEGAL = 2)
load_method = MAGAZINE
fire_sound = 'sound/weapons/gunshot/gunshot_bolter.ogg'
max_shells = 30
- magazine_type = /obj/item/ammo_magazine/m75/sickle
- allowed_magazines = list(/obj/item/ammo_magazine/m75/sickle)
+ magazine_type = /obj/item/ammo_magazine/a75/rifle
+ allowed_magazines = list(/obj/item/ammo_magazine/a75/rifle)
heavy = TRUE
one_handed_penalty = 80
@@ -698,7 +698,7 @@
/obj/item/gun/ballistic/automatic/bolter/update_icon_state()
. = ..()
- icon_state = "bolter-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 2) : "empty"]"
+ icon_state = "bolter-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 2) : "empty"]"
/obj/item/gun/ballistic/automatic/bolter/storm
name = "\improper Onager heavy bolt rifle"
@@ -707,8 +707,8 @@
icon_state = "stormbolter"
item_state = "stormbolter"
max_shells = 50
- magazine_type = /obj/item/ammo_magazine/m75/box
- allowed_magazines = list(/obj/item/ammo_magazine/m75/box)
+ magazine_type = /obj/item/ammo_magazine/a75/box
+ allowed_magazines = list(/obj/item/ammo_magazine/a75/box)
one_handed_penalty = 100
firemodes = list(
@@ -718,7 +718,7 @@
/obj/item/gun/ballistic/automatic/bolter/storm/update_icon_state()
. = ..()
- icon_state = "stormbolter-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 10) : "empty"]"
+ icon_state = "stormbolter-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 10) : "empty"]"
//Foam Weapons
/obj/item/gun/ballistic/automatic/advanced_smg/foam
@@ -726,9 +726,9 @@
desc = "The existence of this DONKsoft toy has instigated allegations of corporate espionage from Nanotrasen."
icon = 'icons/obj/toy.dmi'
icon_state = "toy_smg"
- caliber = "foamdart"
- magazine_type = /obj/item/ammo_magazine/mfoam/smg
- allowed_magazines = list(/obj/item/ammo_magazine/mfoam/smg)
+ regex_this_caliber = /datum/ammo_caliber/foam
+ magazine_type = /obj/item/ammo_magazine/foam/smg
+ allowed_magazines = list(/obj/item/ammo_magazine/foam/smg)
fire_sound = 'sound/items/syringeproj.ogg'
/obj/item/gun/ballistic/automatic/advanced_smg/foam/update_icon_state()
@@ -753,9 +753,9 @@
icon = 'icons/obj/toy.dmi'
icon_state = "toy_c20"
damage_force = 5
- caliber = "foamdart"
- magazine_type = /obj/item/ammo_magazine/mfoam/c20
- allowed_magazines = list(/obj/item/ammo_magazine/mfoam/c20)
+ regex_this_caliber = /datum/ammo_caliber/foam
+ magazine_type = /obj/item/ammo_magazine/foam/smg
+ allowed_magazines = list(/obj/item/ammo_magazine/foam/smg)
projectile_type = /obj/projectile/bullet/reusable/foam
one_handed_penalty = 5
fire_sound = 'sound/items/syringeproj.ogg'
@@ -763,7 +763,7 @@
/obj/item/gun/ballistic/automatic/c20r/foam/update_icon_state()
. = ..()
if(ammo_magazine)
- icon_state = "toy_c20r-[round(ammo_magazine.stored_ammo.len,4)]"
+ icon_state = "toy_c20r-[round(ammo_magazine.amount_remaining(),4)]"
else
icon_state = "toy_c20r"
@@ -778,9 +778,9 @@
icon = 'icons/obj/toy.dmi'
icon_state = "toy_lmgclosed100"
damage_force = 5
- caliber = "foamdart"
- magazine_type = /obj/item/ammo_magazine/mfoam/lmg
- allowed_magazines = list(/obj/item/ammo_magazine/mfoam/lmg)
+ regex_this_caliber = /datum/ammo_caliber/foam
+ magazine_type = /obj/item/ammo_magazine/foam/lmg
+ allowed_magazines = list(/obj/item/ammo_magazine/foam/lmg)
projectile_type = /obj/projectile/bullet/reusable/foam
one_handed_penalty = 45 //It's plastic.
fire_sound = 'sound/items/syringeproj.ogg'
@@ -789,7 +789,7 @@
/obj/item/gun/ballistic/automatic/lmg/foam/update_icon_state()
. = ..()
- icon_state = "toy_lmg[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 10) : "-empty"]"
+ icon_state = "toy_lmg[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.amount_remaining(), 10) : "-empty"]"
item_state = "toy_lmg[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
/obj/item/gun/ballistic/automatic/lmg/foam/update_icon()
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
index 2f11bfa5cb0..3022077da2d 100644
--- a/code/modules/projectiles/guns/projectile/boltaction.dm
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -7,29 +7,29 @@
icon_state = "boltaction"
fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg'
max_shells = 5
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
heavy = TRUE
origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
- ammo_type = /obj/item/ammo_casing/a762
+ ammo_type = /obj/item/ammo_casing/a7_62mm
load_method = SINGLE_CASING|SPEEDLOADER
action_sound = 'sound/weapons/riflebolt.ogg'
worth_intrinsic = 300
/obj/item/gun/ballistic/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/a762/practice
+ ammo_type = /obj/item/ammo_casing/a7_62mm/practice
/obj/item/gun/ballistic/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."
icon_state = "boltaction_c"
item_state = "boltaction_c"
- ammo_type = /obj/item/ammo_casing/a762/blank
+ ammo_type = /obj/item/ammo_casing/a7_62mm/blank
/obj/item/gun/ballistic/shotgun/pump/rifle/ceremonial/holy
name = "blessed 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/silver
+ ammo_type = /obj/item/ammo_casing/a7_62mm/silver
holy = TRUE
/obj/item/gun/ballistic/shotgun/pump/rifle/taj
@@ -44,7 +44,7 @@
desc = "This ancient rifle bears traces of an assembly meant to house power cells, implying it used to fire energy beams. It has since been crudely modified to fire standard 7.62mm rounds."
icon_state = "vox_hunting"
item_state = "vox_hunting"
- ammo_type = /obj/item/ammo_casing/a762
+ ammo_type = /obj/item/ammo_casing/a7_62mm
throw_force = 10
damage_force = 20
@@ -78,7 +78,7 @@
item_state = "leveraction"
icon_state = "leveraction"
max_shells = 10
- caliber = ".357"
+ regex_this_caliber = /datum/ammo_caliber/a357
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/a357
action_sound = 'sound/weapons/riflebolt.ogg'
@@ -101,7 +101,7 @@
item_state = "mareleg"
icon_state = "mareleg"
set_weight_class(WEIGHT_CLASS_NORMAL)
- caliber = ".357"
+ regex_this_caliber = /datum/ammo_caliber/a357
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/a357
recoil = 1 // Less Ouch
@@ -122,7 +122,7 @@
item_state = "levercarabine" // That isn't how carbine is spelled ya knob! :U
icon_state = "levercarabine"
max_shells = 10
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/a44
animated_pump = 1
@@ -145,7 +145,7 @@
item_state = "mareleg"
icon_state = "mareleg"
set_weight_class(WEIGHT_CLASS_NORMAL)
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/a44
recoil = 1 // Less Ouch
@@ -168,7 +168,7 @@
slot_flags = SLOT_BACK
ammo_type = /obj/item/ammo_casing/a12g/pellet
max_shells = 5
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
load_method = SINGLE_CASING
action_sound = 'sound/weapons/riflebolt.ogg'
@@ -183,16 +183,16 @@
item_state = "win1895"
icon_state = "win1895"
slot_flags = SLOT_BACK
- ammo_type = /obj/item/ammo_casing/a762
+ ammo_type = /obj/item/ammo_casing/a7_62mm
load_method = SINGLE_CASING|SPEEDLOADER
max_shells = 5
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
action_sound = 'sound/weapons/riflebolt.ogg'
animated_pump = 1
/obj/item/gun/ballistic/shotgun/pump/rifle/lever/win1895/holy
name = "blessed lever-action"
- ammo_type = /obj/item/ammo_casing/a762/silver
+ ammo_type = /obj/item/ammo_casing/a7_62mm/silver
holy = TRUE
/obj/item/gun/ballistic/shotgun/pump/scopedrifle
@@ -202,14 +202,14 @@
icon_state = "boltaction-scoped"
fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg'
max_shells = 5
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
heavy = TRUE
origin_tech = list(TECH_COMBAT = 1)
load_method = SINGLE_CASING|SPEEDLOADER
action_sound = 'sound/weapons/riflebolt.ogg'
pin = /obj/item/firing_pin/explorer
w_class = WEIGHT_CLASS_HUGE // So it can't fit in a backpack.
- ammo_type = /obj/item/ammo_casing/a762/sniperhunter
+ ammo_type = /obj/item/ammo_casing/a7_62mm/sniperhunter
accuracy = 50 //Forced missing fucking sucks ass
scoped_accuracy = 100
diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm
index 397abce2ee4..20c24f1e6b2 100644
--- a/code/modules/projectiles/guns/projectile/bow.dm
+++ b/code/modules/projectiles/guns/projectile/bow.dm
@@ -6,7 +6,7 @@
w_class = WEIGHT_CLASS_BULKY
damage_force = 5
load_method = SINGLE_CASING
- caliber = "arrow"
+ regex_this_caliber = /datum/ammo_caliber/arrow
max_shells = 1
fire_sound = 'sound/weapons/bowfire.wav'
slot_flags = SLOT_BACK
@@ -27,7 +27,7 @@
/obj/item/gun/ballistic/bow/load_ammo(var/obj/item/A, mob/user)
if(istype(A, /obj/item/ammo_casing))
var/obj/item/ammo_casing/C = A
- if(!(load_method & SINGLE_CASING) || caliber != C.caliber)
+ if(!(load_method & SINGLE_CASING) || !accepts_caliber(C.regex_this_caliber))
return //incompatible
if(loaded.len >= max_shells)
to_chat(user, "[src] is full.")
diff --git a/code/modules/projectiles/guns/projectile/caseless.dm b/code/modules/projectiles/guns/projectile/caseless.dm
index 9d424ef08c6..baaea211fcd 100644
--- a/code/modules/projectiles/guns/projectile/caseless.dm
+++ b/code/modules/projectiles/guns/projectile/caseless.dm
@@ -4,7 +4,7 @@
icon_state = "caseless"
item_state = "caseless"
w_class = WEIGHT_CLASS_BULKY
- caliber = "5mm caseless"
+ regex_this_caliber = /datum/ammo_caliber/a5mm
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3)
slot_flags = SLOT_BACK
load_method = MAGAZINE
@@ -22,98 +22,13 @@
/obj/item/gun/ballistic/caseless/prototype/loaded
magazine_type = /obj/item/ammo_magazine/m5mmcaseless
-/obj/item/gun/ballistic/caseless/usmc
- name = "M41A Pulse Rifle"
- desc = "A relic of the Phoron Wars and a more violent age. The former primary battle rifle of the United Terran Marine Corps. It's now discontinued, like most caseless designs, due to cost and lack of need. Still preferred by many. Loads using 10x24mm caseless Magazines."
- icon_state = "usmc"
- item_state = "usmc"
- w_class = WEIGHT_CLASS_BULKY
- caliber = "10mmCL"
- origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
- slot_flags = SLOT_BACK
- load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m10x24mm/small
- allowed_magazines = list(/obj/item/ammo_magazine/m10x24mm/small, /obj/item/ammo_magazine/m10x24mm/med, /obj/item/ammo_magazine/m10x24mm/large)
- recoil = 0
- auto_eject = 1
- auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
- firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="4-round bursts", burst=4, fire_delay=null, move_delay=6, burst_accuracy=list(0,-5,-10,-15), dispersion=list(0.0, 0.2, 0.4, 0.6)),//Small damage countered by tight spread.
- )
-
-/obj/item/gun/ballistic/caseless/wild_hunt //extremely powerful and rare rifle - meant to spawn with maybe 2 mags extra, or be for asset protection/ert/solo antags/etc
- name = "Gorlex WILD-HUNT 12.7mm Caseless Rifle"
- desc = "An ancient rifle of the Phoron Wars. For when you want to kill something with no negotiation. The Wild Hunt is a beast that kicks like a mule and fires experimental caseless phoron rounds. It has, obviously, horrific results, setting targets on fire after giving them a golf-ball sized hole. Now generally disused due to the extreme maintenance cost and impracticality. Nobody makes these, anymore."
- icon_state = "wild-hunt"
- item_state = "wild-hunt"
- caliber = "12.7mm caseless"
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
- load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/mfiftycalcaseless
- recoil = 1
- accuracy = -10
- allowed_magazines = list(/obj/item/ammo_magazine/mfiftycalcaseless)
- one_handed_penalty = 100 //you simply do not
- auto_eject = 1
- auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
- fire_sound = 'sound/weapons/gunshot/gunshot_tech_huge.ogg'
-
- firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="automatic", burst=1, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1)
- )
-
-/obj/item/gun/ballistic/caseless/wild_hunt/update_icon_state()
- . = ..()
- if(ammo_magazine)
- icon_state = initial(icon_state)
- else
- icon_state = "[initial(icon_state)]-empty"
-
-/obj/item/gun/ballistic/caseless/wild_hunt/Initialize(mapload)
- . = ..()
- var/fluff_date = rand(2501,2543)
- desc += "\n You see a stamp on the side: GORLEX MARAUDERS, MANUFACTURED IN [fluff_date]."
-
-
-/obj/item/gun/ballistic/caseless/phoron_spitter // phoron war SMG that fires phoron shards.
- name = "Gorlex 'SHRAPNEL-SPITTER' Phoron SMG"
- desc = "A short-barrel SMG from the Phoron Wars that lacks conventional ammo, instead using compressed matter cartridges. Coils accelerate a ferromagnetic, self-oxidizing cloud of alloy. Lack of traditional cycling means it can fire blindingly fast. Like all caseless weapons, it's fallen by the wayside, and is no longer produced."
- caliber = "phoron shrapnel"
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
- load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/mphoronshot
- allowed_magazines = list(/obj/item/ammo_magazine/mphoronshot)
- icon_state = "phoron_shredder"
- item_state = "ashot" //close enough
- recoil = 1.5
- accuracy = -30
- one_handed_penalty = 50
- auto_eject = 1
- auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
- fire_sound = 'sound/weapons/gunshot/gunshot_tech_smg.ogg'
-
- firemodes = list(
- list(mode_name="full auto", burst=1, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1),
- list(mode_name="fuller auto", burst=2, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1)
- )
-
-/obj/item/gun/ballistic/caseless/phoron_spitter/Initialize(mapload)
- . = ..()
- var/fluff_date = rand(2501,2543)
- desc += "\nYou see a stamp on the side: GORLEX MARAUDERS, MANUFACTURED IN [fluff_date]."
-
-
/obj/item/gun/ballistic/caseless/pellet
name = "pellet gun"
desc = "An air powered rifle that shoots near harmless pellets. Used for recreation in enviroments where firearm ownership is restricted."
icon_state = "pellet"
item_state = "pellet"
wielded_item_state = "pellet-wielded"
- caliber = "pellet"
+ regex_this_caliber = /datum/ammo_caliber/pellet
fire_sound = 'sound/weapons/tap.ogg'
max_shells = 1
ammo_type = /obj/item/ammo_casing/p_pellet
diff --git a/code/modules/projectiles/guns/projectile/caseless/pellet.dm b/code/modules/projectiles/guns/projectile/caseless/pellet.dm
index 83b721c9b72..7d16ae43838 100644
--- a/code/modules/projectiles/guns/projectile/caseless/pellet.dm
+++ b/code/modules/projectiles/guns/projectile/caseless/pellet.dm
@@ -1,8 +1,5 @@
-///////////////////////////////////////
-// Pellet Gun - For Recerational Use //
-///////////////////////////////////////
-
-#define DEFINE_CALIBER_PELLET 804
+/datum/ammo_caliber/pellet
+ caliber = "pellet"
/obj/item/gun/ballistic/caseless/pellet
name = "pellet gun"
@@ -11,30 +8,9 @@
icon_state = "pellet"
item_state = "pellet"
wielded_item_state = "pellet-wielded"
- caliber = "pellet"
+ regex_this_caliber = /datum/ammo_caliber/pellet
fire_sound = 'sound/weapons/tap.ogg'
max_shells = 1
ammo_type = /obj/item/ammo_casing/p_pellet
load_method = SINGLE_CASING
item_icons = list("left_hand" = 'icons/mob/items/lefthand_guns.dmi', "right_hand" = 'icons/mob/items/righthand_guns.dmi')
-
-/obj/item/ammo_casing/p_pellet
- name = "pellet"
- desc = "Also know as a BB, it is shot from airguns for recreational shooting."
- icon = 'icons/obj/gun/ballistic/caseless/pellet.dmi'
- caliber = "pellet"
- icon_state = "pellet_single"
- projectile_type = /obj/projectile/bullet/practice
- casing_flags = CASING_DELETE
-
-/obj/item/ammo_magazine/pellets
- name = "box of pellets"
- desc = "A box containing small pellets for a pellet gun."
- icon = 'icons/obj/gun/ballistic/caseless/pellet.dmi'
- icon_state = "pelletbox"
- caliber = "pellet"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/p_pellet
- materials_base = list(MAT_PLASTIC = 600)
- max_ammo = 50
- multiple_sprites = 1
diff --git a/code/modules/projectiles/guns/projectile/contender.dm b/code/modules/projectiles/guns/projectile/contender.dm
index fb9f3822337..9152fcd550a 100644
--- a/code/modules/projectiles/guns/projectile/contender.dm
+++ b/code/modules/projectiles/guns/projectile/contender.dm
@@ -4,7 +4,7 @@
icon_state = "pockrifle"
var/icon_retracted = "pockrifle-empty"
item_state = "revolver"
- caliber = ".357"
+ regex_this_caliber = /datum/ammo_caliber/a357
handle_casings = HOLD_CASINGS
max_shells = 1
ammo_type = /obj/item/ammo_casing/a357
@@ -42,12 +42,12 @@
..()
/obj/item/gun/ballistic/contender/a44
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
ammo_type = /obj/item/ammo_casing/a44
/obj/item/gun/ballistic/contender/a762
- caliber = "7.62mm"
- ammo_type = /obj/item/ammo_casing/a762
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ ammo_type = /obj/item/ammo_casing/a7_62mm
/obj/item/gun/ballistic/contender/tacticool
desc = "A modified replica of an ancient one-shot hand-cannon, reinvented with a tactical look. For when you really want to make a hole. This one has been modified to work almost like a bolt-action."
@@ -55,12 +55,12 @@
icon_retracted = "pockrifle_b-empty"
/obj/item/gun/ballistic/contender/tacticool/a44
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
ammo_type = /obj/item/ammo_casing/a44
/obj/item/gun/ballistic/contender/tacticool/a762
- caliber = "7.62mm"
- ammo_type = /obj/item/ammo_casing/a762
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ ammo_type = /obj/item/ammo_casing/a7_62mm
/obj/item/gun/ballistic/contender/holy
name = "Divine Challenger"
@@ -72,12 +72,12 @@
holy = TRUE
/obj/item/gun/ballistic/contender/holy/a44
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
ammo_type = /obj/item/ammo_casing/a44/silver
/obj/item/gun/ballistic/contender/holy/a762
- caliber = "7.62mm"
- ammo_type = /obj/item/ammo_casing/a762/silver
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ ammo_type = /obj/item/ammo_casing/a7_62mm/silver
/obj/item/gun/ballistic/contender/taj
name = "Adhomai pocket rifle"
@@ -86,12 +86,12 @@
icon_retracted = "pockrifle_d-empty"
/obj/item/gun/ballistic/contender/taj/a44
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
ammo_type = /obj/item/ammo_casing/a44
/obj/item/gun/ballistic/contender/taj/a762
- caliber = "7.62mm"
- ammo_type = /obj/item/ammo_casing/a762
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
+ ammo_type = /obj/item/ammo_casing/a7_62mm
/obj/item/gun/ballistic/contender/pipegun
name = "improvised pipe rifle"
@@ -99,7 +99,7 @@
icon_state = "pipegun"
icon_retracted = "pipegun-empty"
item_state = "revolver"
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
ammo_type = /obj/item/ammo_casing/a12g/improvised
projectile_type = /obj/projectile/bullet/shotgun
unstable = 1
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index 6a96b6ffe29..164d129f016 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -1,45 +1,3 @@
-/obj/projectile/bullet/chemdart
- name = "dart"
- icon_state = "dart"
- damage = 5
- var/reagent_amount = 15
- range = WORLD_ICON_SIZE * 15
-
- muzzle_type = null
-
-/obj/projectile/bullet/chemdart/Initialize(mapload)
- . = ..()
- create_reagents(reagent_amount)
-
-/obj/projectile/bullet/chemdart/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
- if(blocked < 2 && isliving(target))
- var/mob/living/L = target
- if(L.can_inject(target_zone=def_zone))
- reagents.trans_to_mob(L, reagent_amount, CHEM_INJECT)
-
-/obj/item/ammo_casing/chemdart
- name = "chemical dart"
- desc = "A casing containing a small hardened, hollow dart."
- icon_state = "dartcasing"
- caliber = "dart"
- projectile_type = /obj/projectile/bullet/chemdart
-
-/obj/item/ammo_casing/chemdart/expend()
- ..()
- //qdel(src) //Wasn't able to find the exact issue with the qdel-ing. Possibly because it was still being processed by the gun when this is called.
-
-/obj/item/ammo_magazine/chemdart
- name = "dart cartridge"
- desc = "A rack of hollow darts."
- icon_state = "darts"
- item_state = "rcdammo"
- origin_tech = list(TECH_MATERIAL = 2)
- mag_type = MAGAZINE
- caliber = "dart"
- ammo_type = /obj/item/ammo_casing/chemdart
- max_ammo = 5
- multiple_sprites = 1
-
/obj/item/gun/ballistic/dartgun
name = "dart gun"
desc = "Zeng-Hu Pharmaceutical's entry into the arms market, the Z-H P Artemis is a gas-powered dart gun capable of delivering chemical cocktails swiftly across short distances."
@@ -50,7 +8,7 @@
var/base_state = "dartgun"
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_BIO = 5, TECH_MAGNET = 2, TECH_ILLEGAL = 3)
- caliber = "dart"
+ regex_this_caliber = /datum/ammo_caliber/dart
fire_sound = 'sound/weapons/empty.ogg'
fire_sound_text = "a metallic click"
recoil = 0
@@ -84,12 +42,12 @@
icon_state = "[base_state]-empty"
return 1
if(track_magazine)
- if(!ammo_magazine.stored_ammo || ammo_magazine.stored_ammo.len == 0)
+ if(ammo_magazine.amount_remaining() == 0)
icon_state = "[base_state]-0"
- else if(ammo_magazine.stored_ammo.len > default_magazine_casing_count)
+ else if(ammo_magazine.amount_remaining() > default_magazine_casing_count)
icon_state = "[base_state]-[default_magazine_casing_count]"
else
- icon_state = "[base_state]-[ammo_magazine.stored_ammo.len]"
+ icon_state = "[base_state]-[ammo_magazine.amount_remaining()]"
return 1
else
icon_state = "[base_state]"
@@ -162,8 +120,8 @@
dat += "There are no beakers inserted!
"
if(ammo_magazine)
- if(ammo_magazine.stored_ammo && ammo_magazine.stored_ammo.len)
- dat += "The dart cartridge has [ammo_magazine.stored_ammo.len] shots remaining."
+ if(ammo_magazine.amount_remaining())
+ dat += "The dart cartridge has [ammo_magazine.amount_remaining()] shots remaining."
else
dat += "The dart cartridge is empty!"
dat += " \[Eject\]"
@@ -221,24 +179,18 @@
max_beakers = 2
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_BIO = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 1)
-/obj/item/ammo_casing/chemdart/small
- name = "short chemical dart"
- desc = "A casing containing a small hardened, hollow dart."
- icon_state = "dartcasing"
- caliber = "dart"
- projectile_type = /obj/projectile/bullet/chemdart/small
+/obj/item/gun/ballistic/dartgun/tranq
+ name = "tranquilizer gun"
+ desc = "A gas-powered dart gun designed by the National Armory of Gaia. This gun is used primarily by United Federation special forces for Tactical Espionage missions. Don't forget your bandana."
+ icon = 'icons/vore/custom_guns_vr.dmi'
+ icon_state = "tranqgun"
+ item_state = null
-/obj/item/ammo_magazine/chemdart/small
- name = "small dart cartridge"
- desc = "A rack of hollow darts."
- icon_state = "darts_small"
- item_state = "rcdammo"
- origin_tech = list(TECH_MATERIAL = 2)
- mag_type = MAGAZINE
- caliber = "dart"
- ammo_type = /obj/item/ammo_casing/chemdart/small
- max_ammo = 3
- multiple_sprites = 1
-
-/obj/projectile/bullet/chemdart/small
- reagent_amount = 10
+ fire_sound = 'sound/weapons/empty.ogg'
+ fire_sound_text = "a metallic click"
+ recoil = 0
+ silenced = 1
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/chemdart
+ allowed_magazines = list(/obj/item/ammo_magazine/chemdart)
+ auto_eject = 0
diff --git a/code/modules/projectiles/guns/projectile/musket.dm b/code/modules/projectiles/guns/projectile/musket.dm
index a17b875a4af..bd8e2340831 100644
--- a/code/modules/projectiles/guns/projectile/musket.dm
+++ b/code/modules/projectiles/guns/projectile/musket.dm
@@ -11,7 +11,7 @@
load_method = SINGLE_CASING
max_shells = 1
- caliber = "musket"
+ regex_this_caliber = /datum/ammo_caliber/musket
slot_flags = SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
@@ -64,7 +64,7 @@
/obj/item/reagent_containers/glass/powder_horn
name = "powder horn"
desc = "An ivory container for gunpowder."
- icon = 'icons/obj/ammo.dmi'
+ icon = 'icons/modules/projectiles/rp_ammo_unused.dmi'
icon_state = "powderhorn"
w_class = WEIGHT_CLASS_SMALL
slot_flags = SLOT_BELT
@@ -138,6 +138,6 @@
icon_state = "blunderbuss"
item_state = "blunderbuss"
wielded_item_state = "blunderbuss-wielded"
- caliber = "blunderbuss"
+ regex_this_caliber = /datum/ammo_caliber/blunderbuss
- ammo_type = /obj/item/ammo_casing/musket/blunderbuss
+ ammo_type = /obj/item/ammo_casing/blunderbuss
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index c2798f3b120..f69f269aeb5 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -2,11 +2,11 @@
var/unique_reskin
name = ".45 pistol"
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
- magazine_type = /obj/item/ammo_magazine/m45
- allowed_magazines = list(/obj/item/ammo_magazine/m45)
+ magazine_type = /obj/item/ammo_magazine/a45
+ allowed_magazines = list(/obj/item/ammo_magazine/a45)
projectile_type = /obj/projectile/bullet/pistol/medium
icon_state = "colt"
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
load_method = MAGAZINE
@@ -25,7 +25,7 @@
/obj/item/gun/ballistic/colt/detective
desc = "A Martian recreation of an old pistol. Uses .45 rounds."
- magazine_type = /obj/item/ammo_magazine/m45/rubber
+ magazine_type = /obj/item/ammo_magazine/a45/rubber
/obj/item/gun/ballistic/colt/detective/verb/rename_gun()
set name = "Name Gun"
@@ -85,16 +85,16 @@
name = ".45 pistol"
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a Nanotrasen subsidiary. Found pretty much everywhere humans are. This one is a less-lethal variant that only accepts .45 rubber or flash magazines."
icon_state = "secguncomp"
- magazine_type = /obj/item/ammo_magazine/m45/rubber
- allowed_magazines = list(/obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/flash, /obj/item/ammo_magazine/m45/practice)
+ magazine_type = /obj/item/ammo_magazine/a45/rubber
+ allowed_magazines = list(/obj/item/ammo_magazine/a45/rubber, /obj/item/ammo_magazine/a45/flash, /obj/item/ammo_magazine/a45/practice)
projectile_type = /obj/projectile/bullet/pistol/medium
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
load_method = MAGAZINE
/obj/item/gun/ballistic/sec/flash
name = ".45 signal pistol"
- magazine_type = /obj/item/ammo_magazine/m45/flash
+ magazine_type = /obj/item/ammo_magazine/a45/flash
/obj/item/gun/ballistic/sec/wood
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a Nanotrasen subsidiary. This one has a sweet wooden grip and only accepts .45 rubber or flash magazines."
@@ -106,14 +106,14 @@
desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
icon_state = "silenced_pistol"
w_class = WEIGHT_CLASS_NORMAL
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
silenced = 1
fire_delay = 1
recoil = 0
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m45
- allowed_magazines = list(/obj/item/ammo_magazine/m45)
+ magazine_type = /obj/item/ammo_magazine/a45
+ allowed_magazines = list(/obj/item/ammo_magazine/a45)
projectile_type = /obj/projectile/bullet/pistol/medium
/obj/item/gun/ballistic/deagle
@@ -122,11 +122,11 @@
icon_state = "deagle"
item_state = "deagle"
damage_force = 14.0
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
fire_sound = 'sound/weapons/Gunshot_deagle.ogg'
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m44
- allowed_magazines = list(/obj/item/ammo_magazine/m44)
+ magazine_type = /obj/item/ammo_magazine/a44
+ allowed_magazines = list(/obj/item/ammo_magazine/a44)
/obj/item/gun/ballistic/deagle/gold
desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .44 rounds."
@@ -148,13 +148,13 @@
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"
+ regex_this_caliber = /datum/ammo_caliber/a75
fire_sound = 'sound/weapons/railgun.ogg'
origin_tech = list(TECH_COMBAT = 3)
ammo_type = "/obj/item/ammo_casing/a75"
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m75
- allowed_magazines = list(/obj/item/ammo_magazine/m75)
+ 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'
@@ -167,13 +167,13 @@
max_shells = 10
fire_sound = 'sound/weapons/gunshot/gunshot_bolter.ogg'
origin_tech = list(TECH_COMBAT = 5, TECH_ILLEGAL = 3)
- magazine_type = /obj/item/ammo_magazine/m75/pistol
- allowed_magazines = list(/obj/item/ammo_magazine/m75/pistol)
+ magazine_type = /obj/item/ammo_magazine/a75
+ allowed_magazines = list(/obj/item/ammo_magazine/a75)
auto_eject = 0
/obj/item/gun/ballistic/gyropistol/bolter/update_icon_state()
. = ..()
- icon_state = "bolt_pistol-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 2) : "empty"]"
+ icon_state = "bolt_pistol-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 2) : "empty"]"
/obj/item/gun/ballistic/gyropistol/bolter/black
desc = "A boxy sidearm seemingly designed for a larger hand. This one is painted black."
@@ -182,7 +182,7 @@
/obj/item/gun/ballistic/gyropistol/bolter/black/update_icon_state()
. = ..()
- icon_state = "bolt_pistolblack-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 2) : "empty"]"
+ icon_state = "bolt_pistolblack-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 2) : "empty"]"
/obj/item/gun/ballistic/pistol
name = "compact pistol"
@@ -191,18 +191,18 @@
icon_state = "pistol"
item_state = null
w_class = WEIGHT_CLASS_SMALL
- caliber = "9mm"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
suppressible = TRUE
silenced_icon = "pistol_silencer"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mm/compact
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact)
+ magazine_type = /obj/item/ammo_magazine/a9mm/compact
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm/compact)
projectile_type = /obj/projectile/bullet/pistol
/obj/item/gun/ballistic/pistol/flash
name = "compact signal pistol"
- magazine_type = /obj/item/ammo_magazine/m9mm/compact/flash
+ magazine_type = /obj/item/ammo_magazine/a9mm/compact/flash
/obj/item/silencer
name = "silencer"
@@ -223,29 +223,30 @@
max_shells = 1 //literally just a barrel
unstable = 1
+ // todo: caliber types?
var/global/list/ammo_types = list(
- /obj/item/ammo_casing/a357 = ".357",
- /obj/item/ammo_casing/a9mm = "9mm",
- /obj/item/ammo_casing/a45 = ".45",
- /obj/item/ammo_casing/a10mm = "10mm",
- /obj/item/ammo_casing/a12g = "12g",
- /obj/item/ammo_casing/a12g = "12g",
- /obj/item/ammo_casing/a12g/pellet = "12g",
- /obj/item/ammo_casing/a12g/pellet = "12g",
- /obj/item/ammo_casing/a12g/pellet = "12g",
- /obj/item/ammo_casing/a12g/beanbag = "12g",
- /obj/item/ammo_casing/a12g/stunshell = "12g",
- /obj/item/ammo_casing/a12g/flare = "12g",
- /obj/item/ammo_casing/a762 = "7.62mm",
- /obj/item/ammo_casing/a556 = "5.56mm"
- )
+ /obj/item/ammo_casing/a357,
+ /obj/item/ammo_casing/a9mm,
+ /obj/item/ammo_casing/a45,
+ /obj/item/ammo_casing/a10mm,
+ /obj/item/ammo_casing/a12g,
+ /obj/item/ammo_casing/a12g,
+ /obj/item/ammo_casing/a12g/pellet,
+ /obj/item/ammo_casing/a12g/pellet,
+ /obj/item/ammo_casing/a12g/pellet,
+ /obj/item/ammo_casing/a12g/beanbag,
+ /obj/item/ammo_casing/a12g/stunshell,
+ /obj/item/ammo_casing/a12g/flare,
+ /obj/item/ammo_casing/a7_62mm,
+ /obj/item/ammo_casing/a5_56mm,
+ )
/obj/item/gun/ballistic/pirate/Initialize(mapload)
ammo_type = pick(ammo_types)
desc += " Uses [ammo_types[ammo_type]] rounds."
var/obj/item/ammo_casing/ammo = ammo_type
- caliber = initial(ammo.caliber)
+ regex_this_caliber = initial(ammo.regex_this_caliber)
return ..()
/obj/item/gun/ballistic/pirate/consume_next_projectile(mob/user as mob)
@@ -297,10 +298,10 @@
desc = "Not some cheap scheisse 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"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mm/compact
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact)
+ magazine_type = /obj/item/ammo_magazine/a9mm/compact
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm/compact)
projectile_type = /obj/projectile/bullet/pistol
/obj/item/gun/ballistic/luger/brown
@@ -311,38 +312,38 @@
desc = "A widespread sidearm called the P92X which is used by military, police, and security forces across the galaxy. Uses 9mm rounds."
icon_state = "p92x"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
- caliber = "9mm"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mm
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm) // Can accept illegal large capacity magazines, or compact magazines.
+ magazine_type = /obj/item/ammo_magazine/a9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm) // Can accept illegal large capacity magazines, or compact magazines.
/obj/item/gun/ballistic/p92x/sec
desc = "A widespread sidearm called the P92X which is used by military, police, and security forces across the galaxy. This one is a less-lethal variant that only accepts 9mm rubber or flash magazines."
- magazine_type = /obj/item/ammo_magazine/m9mm/rubber
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm/rubber, /obj/item/ammo_magazine/m9mm/flash)
+ magazine_type = /obj/item/ammo_magazine/a9mm/rubber
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm/rubber, /obj/item/ammo_magazine/a9mm/flash)
//Ported this over from the _vr before deletion. Commenting them out because I'm not sure we want these in.
/*
/obj/item/gun/ballistic/p92x/large/licensed
icon_state = "p92x-brown"
- magazine_type = /obj/item/ammo_magazine/m9mm/large/licensed // Spawns with big magazines that are legal.
+ magazine_type = /obj/item/ammo_magazine/a9mm/large // Spawns with big magazines that are legal.
/obj/item/gun/ballistic/p92x/large/licensed/hp
- magazine_type = /obj/item/ammo_magazine/m9mm/large/licensed/hp // Spawns with legal hollow-point mag
+ magazine_type = /obj/item/ammo_magazine/a9mm/large/hp // Spawns with legal hollow-point mag
*/
/obj/item/gun/ballistic/p92x/brown
icon_state = "p92x-brown"
/obj/item/gun/ballistic/p92x/large
- magazine_type = /obj/item/ammo_magazine/m9mm/large // Spawns with illegal magazines.
+ magazine_type = /obj/item/ammo_magazine/a9mm/large // Spawns with illegal magazines.
/obj/item/gun/ballistic/r9
name = "C96-Red 9"
desc = "A variation on the Mauser C-96, remade for a modern day. A Glithari Exports product, for gun collectors and private militaries alike. Uses 9mm stripper clips."
icon_state = "r9"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL =1) //VERY OLD
- caliber = "9mm"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
load_method = SPEEDLOADER
max_shells = 10
ammo_type = /obj/item/ammo_casing/a9mm
@@ -358,12 +359,12 @@
desc = "This curious weapon feeds from a compressed biomatter cartridge, and seems to fabricate its ammunition from that supply."
icon_state = "clownpistol"
item_state = "revolver"
- caliber = "organic"
+ regex_this_caliber = /datum/ammo_caliber/biomatter
load_method = MAGAZINE
w_class = WEIGHT_CLASS_SMALL
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3)
- magazine_type = /obj/item/ammo_magazine/mcompressedbio/compact
- allowed_magazines = list(/obj/item/ammo_magazine/mcompressedbio/compact)
+ magazine_type = /obj/item/ammo_magazine/biomatter
+ allowed_magazines = list(/obj/item/ammo_magazine/biomatter)
projectile_type = /obj/projectile/bullet/organic
//Hey did you ever see Kingsman? Well, you know this gun then.
@@ -374,13 +375,13 @@
icon_state = "konigin"
item_state = null
w_class = WEIGHT_CLASS_SMALL
- caliber = "9mm"
+ regex_this_caliber = /datum/ammo_caliber/a9mm
suppressible = TRUE
silenced_icon = "konigin_silencer"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2, TECH_ILLEGAL = 3)
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mm/compact/double
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact)
+ magazine_type = /obj/item/ammo_magazine/a9mm/compact/double
+ allowed_magazines = list(/obj/item/ammo_magazine/a9mm/compact)
projectile_type = /obj/projectile/bullet/pistol
/obj/item/gun/ballistic/konigin
@@ -432,11 +433,11 @@
desc = "The NT-57 'LES' (Light Expeditionary Sidearm) is a tried and tested pistol often issued to Pathfinders. Featuring a polymer frame, collapsible stock, and integrated optics, the LES is lightweight and reliably functions in nearly any hazardous environment, including vacuum."
icon_state = "ntles"
item_state = "pistol"
- caliber = "5.7x28mm"
+ regex_this_caliber = /datum/ammo_caliber/a5_7mm
load_method = MAGAZINE
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
- magazine_type = /obj/item/ammo_magazine/m57x28mm/ntles
- allowed_magazines = list(/obj/item/ammo_magazine/m57x28mm/ntles)
+ magazine_type = /obj/item/ammo_magazine/a5_7mm/nt_les
+ allowed_magazines = list(/obj/item/ammo_magazine/a5_7mm/nt_les)
projectile_type = /obj/projectile/bullet/pistol/lap
one_handed_penalty = 30
var/collapsible = 1
@@ -478,17 +479,17 @@
desc = "This classic sidearm design utilizes an adaptable round considered by some to be superior to 9mm parabellum. Favored amongst sheild bearers in tactical units for its stability in one-handed use, and high capacity magazines."
icon_state = "fiveseven"
item_state = "pistol"
- caliber = "5.7x28mm"
+ regex_this_caliber = /datum/ammo_caliber/a5_7mm
load_method = MAGAZINE
w_class = WEIGHT_CLASS_SMALL
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
- magazine_type = /obj/item/ammo_magazine/m57x28mm/fiveseven
- allowed_magazines = list(/obj/item/ammo_magazine/m57x28mm/fiveseven)
+ magazine_type = /obj/item/ammo_magazine/a5_7mm/five_seven
+ allowed_magazines = list(/obj/item/ammo_magazine/a5_7mm/five_seven)
one_handed_penalty = 0
/obj/item/gun/ballistic/fiveseven/update_icon_state()
. = ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m57x28mm/fiveseven/highcap))
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a5_7mm/five_seven/highcap))
icon_state = "fiveseven-extended"
//Apidean Weapons
@@ -497,7 +498,7 @@
desc = "Used by Hive-guards to detain deviants."
icon_state = "apipistol"
item_state = "florayield"
- caliber = "apidean"
+ regex_this_caliber = /datum/ammo_caliber/biomatter/wax
load_method = MAGAZINE
w_class = WEIGHT_CLASS_SMALL
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_BIO = 5)
@@ -507,7 +508,7 @@
/obj/item/gun/ballistic/apinae_pistol/update_icon_state()
. = ..()
- icon_state = "apipistol-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 2) : "e"]"
+ icon_state = "apipistol-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 2) : "e"]"
//Tyrmalin Weapons
/obj/item/gun/ballistic/pirate/junker_pistol
@@ -530,10 +531,10 @@
icon_state = "toy_pistol"
item_state = null
w_class = WEIGHT_CLASS_SMALL
- caliber = "foamdart"
+ regex_this_caliber = /datum/ammo_caliber/foam
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/mfoam/pistol
- allowed_magazines = list(/obj/item/ammo_magazine/mfoam/pistol)
+ magazine_type = /obj/item/ammo_magazine/foam/pistol
+ allowed_magazines = list(/obj/item/ammo_magazine/foam/pistol)
fire_sound = 'sound/items/syringeproj.ogg'
/obj/item/gun/ballistic/pistol/foam/handle_suicide(mob/living/user)
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index accf9272424..b2f97239d87 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -3,7 +3,7 @@
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"
+ regex_this_caliber = /datum/ammo_caliber/a357
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 6
@@ -55,7 +55,7 @@
name = "Adhomai knife revolver"
desc = "An ornate knife revolver from an Adhomai gunsmith. Popular among Tajaran nobility just before the civil war and even to this day, many of these revolvers found their way into the market when they were taken as trophies by Grand People's Army soldiers and DPRA guerillas."
icon_state = "knifegun"
- caliber = ".38"
+ regex_this_caliber = /datum/ammo_caliber/a38
ammo_type = /obj/item/ammo_casing/a38
damage_force = 15
sharp = 1
@@ -65,7 +65,7 @@
name = "revolver"
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
icon_state = "detective"
- caliber = ".38"
+ regex_this_caliber = /datum/ammo_caliber/a38
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/a38
@@ -91,7 +91,7 @@
name = ".45 revolver"
desc = "A fancy replica of an old revolver, modified for .45 rounds and a seven-shot cylinder."
icon_state = "detective"
- caliber = ".45"
+ regex_this_caliber = /datum/ammo_caliber/a45
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/a45/rubber
max_shells = 7
@@ -145,7 +145,7 @@
name = "\improper Deckard .38"
desc = "A custom-built revolver, based off the semi-popular Detective Special model. Uses .38-Special rounds."
icon_state = "deckard-empty"
- caliber = ".38"
+ regex_this_caliber = /datum/ammo_caliber/a38
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/a38
@@ -170,18 +170,18 @@
desc = "Looks almost like the real thing! Ages 8 and up."
icon_state = "revolver"
item_state = "revolver"
- caliber = "caps"
+ regex_this_caliber = /datum/ammo_caliber/cap_gun
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
handle_casings = CYCLE_CASINGS
max_shells = 7
- ammo_type = /obj/item/ammo_casing/cap
+ ammo_type = /obj/item/ammo_casing/cap_gun
projectile_type = /obj/projectile/bullet/pistol/strong
/obj/item/gun/ballistic/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 12g rounds."
icon_state = "judge"
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
max_shells = 5
recoil = 2 // ow my fucking hand
@@ -198,11 +198,11 @@
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 9
- caliber = ".38"
+ regex_this_caliber = /datum/ammo_caliber/a38
ammo_type = /obj/item/ammo_casing/a38
projectile_type = /obj/projectile/bullet/pistol
var/secondary_max_shells = 1
- var/secondary_caliber = "12g"
+ var/secondary_regex_this_caliber = /datum/ammo_caliber/a12g
var/secondary_ammo_type = /obj/item/ammo_casing/a12g
var/flipped_firing = 0
var/list/secondary_loaded = list()
@@ -227,8 +227,8 @@
if(max_shells && secondary_max_shells)
max_shells = secondary_max_shells
- if(caliber && secondary_caliber)
- caliber = secondary_caliber
+ if(regex_this_caliber && secondary_regex_this_caliber)
+ regex_this_caliber = secondary_regex_this_caliber
if(ammo_type && secondary_ammo_type)
ammo_type = secondary_ammo_type
@@ -243,8 +243,8 @@
if(max_shells)
max_shells = initial(max_shells)
- if(caliber && secondary_caliber)
- caliber = initial(caliber)
+ if(regex_this_caliber && secondary_regex_this_caliber)
+ regex_this_caliber = initial(regex_this_caliber)
if(ammo_type && secondary_ammo_type)
ammo_type = initial(ammo_type)
@@ -290,7 +290,7 @@
desc = "A rugged top break revolver based on the Webley Mk. VI model, with modern improvements. Uses .44 magnum rounds."
icon_state = "webley2"
item_state = "webley2"
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 6
@@ -313,7 +313,7 @@
desc = "A powerful hand cannon made famous by the legendary lawman that wielded it. Even to this day people follow in his legacy. 'Are you feeling lucky punk?'"
icon_state = "dirty_harry"
item_state = "revolver"
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
fire_sound = 'sound/weapons/Gunshot_deagle.ogg'
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
@@ -329,7 +329,7 @@
name = "\improper Ogre combat revolver"
desc = "The NT-R-7 'Ogre' combat revolver is tooled for Nanotrasen special operations. Chambered in .44 Magnum with an advanced high-speed firing mechanism, it serves as the perfect sidearm for any off the books endeavor."
icon_state = "combatrevolver"
- caliber = ".44"
+ regex_this_caliber = /datum/ammo_caliber/a44
fire_delay = 5.7
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3)
ammo_type = /obj/item/ammo_casing/a44
diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm
index 9e58df29ac5..184ef55b548 100644
--- a/code/modules/projectiles/guns/projectile/rocket.dm
+++ b/code/modules/projectiles/guns/projectile/rocket.dm
@@ -3,7 +3,7 @@
desc = "MAGGOT."
icon_state = "rocket"
item_state = "rocket"
- caliber = "rocket"
+ regex_this_caliber = /datum/ammo_caliber/rocket
max_shells = 1
load_method = SINGLE_CASING
w_class = WEIGHT_CLASS_BULKY
diff --git a/code/modules/projectiles/guns/projectile/semiauto.dm b/code/modules/projectiles/guns/projectile/semiauto.dm
index f93a515685b..d7c0ab90690 100644
--- a/code/modules/projectiles/guns/projectile/semiauto.dm
+++ b/code/modules/projectiles/guns/projectile/semiauto.dm
@@ -5,13 +5,13 @@
item_state = "boltaction"
w_class = WEIGHT_CLASS_BULKY
heavy = TRUE
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
slot_flags = SLOT_BACK
//fire_sound = 'sound/weapons/rifleshot.ogg'
load_method = MAGAZINE // ToDo: Make it so MAGAZINE, SPEEDLOADER and SINGLE_CASING can all be used on the same gun.
- magazine_type = /obj/item/ammo_magazine/m762garand
- allowed_magazines = list(/obj/item/ammo_magazine/m762garand)
+ magazine_type = /obj/item/ammo_magazine/a7_62mm/garand
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm/garand)
auto_eject = 1
auto_eject_sound = 'sound/weapons/garand_ping.ogg'
one_handed_penalty = 15
@@ -28,7 +28,7 @@
desc = "A reproduction of the rare MIA Garand rifle. Most likely, it was once a standard Cybersun reproduction, modified by a competant gunsmith into a proper M1A model."
icon_state = "sgarand"
pin = /obj/item/firing_pin/explorer
- magazine_type = /obj/item/ammo_magazine/m762garand/sniperhunter
+ magazine_type = /obj/item/ammo_magazine/a7_62mm/garand/sniperhunter
w_class = WEIGHT_CLASS_HUGE // We don't need this fitting in backpacks.
accuracy = 70 //Forced missing fucking sucks ass
scoped_accuracy = 100
@@ -47,7 +47,7 @@
item_state = "speargun"
w_class = WEIGHT_CLASS_BULKY
heavy = TRUE
- caliber = "apidean"
+ regex_this_caliber = /datum/ammo_caliber/biomatter/wax
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_BIO = 7)
slot_flags = SLOT_BACK
fire_sound = 'sound/weapons/rifleshot.ogg'
@@ -59,4 +59,4 @@
/obj/item/gun/ballistic/apinae_stinger/update_icon_state()
. = ..()
- icon_state = "apigun-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 2) : "e"]"
+ icon_state = "apigun-[ammo_magazine ? round(ammo_magazine.amount_remaining(), 2) : "e"]"
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 32f77895c86..ec3d65b1dcc 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -8,7 +8,7 @@
heavy = TRUE
damage_force = 10
slot_flags = SLOT_BACK
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
load_method = SINGLE_CASING|SPEEDLOADER
ammo_type = /obj/item/ammo_casing/a12g/beanbag
@@ -124,7 +124,7 @@
desc = "This exotic ten gauge shotgun sports a custom paint job and a cylinder choke. At close ranges, it packs quite the punch."
icon_state = "grit"
item_state = "grit"
- caliber = "10g"
+ regex_this_caliber = /datum/ammo_caliber/a10g
ammo_type = /obj/item/ammo_casing/a10g/pellet/grit
fire_sound = 'sound/weapons/gunshot/musket.ogg'
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
@@ -158,7 +158,7 @@
heavy = TRUE
damage_force = 10
slot_flags = SLOT_BACK
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/a12g/beanbag
@@ -244,7 +244,7 @@
accuracy = 40
slot_flags = SLOT_BACK
ammo_type = /obj/item/ammo_casing/a12g/pellet
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/a12g/pellet
@@ -259,7 +259,7 @@
desc = "Rip and tear, until it is done."
icon_state = "supershotgun"
item_state = "supershotgun"
- caliber = "10g"
+ regex_this_caliber = /datum/ammo_caliber/a10g
recoil = 0
accuracy = 80
slot_flags = SLOT_BELT|SLOT_HOLSTER
@@ -280,7 +280,7 @@
w_class = WEIGHT_CLASS_SMALL
damage_force = 5
slot_flags = SLOT_BELT
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
accuracy = -15 //Its a flaregun and you expected accuracy?
ammo_type = /obj/item/ammo_casing/a12g/flare
projectile_type = /obj/projectile/energy/flash
@@ -331,7 +331,7 @@
handle_casings = CYCLE_CASINGS
max_shells = 1
w_class = WEIGHT_CLASS_TINY
- caliber = "12g"
+ regex_this_caliber = /datum/ammo_caliber/a12g
ammo_type = /obj/item/ammo_casing/a12g
one_handed_penalty = 0
safety_state = GUN_SAFETY_OFF
@@ -344,7 +344,7 @@
icon_state = "toy_shotgun"
max_shells = 8
damage_force = 5
- caliber = "foamdart"
+ regex_this_caliber = /datum/ammo_caliber/foam
ammo_type = /obj/item/ammo_casing/foam
projectile_type = /obj/projectile/bullet/reusable/foam
one_handed_penalty = 5
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index 1b5b38c2fd5..63cbc51cdfa 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -11,13 +11,13 @@
heavy = TRUE
slot_flags = SLOT_BACK
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
- caliber = "12.7mm"
+ regex_this_caliber = /datum/ammo_caliber/a12_7mm
recoil = 5 //extra kickback
handle_casings = HOLD_CASINGS
load_method = SINGLE_CASING
max_shells = 1
- ammo_type = /obj/item/ammo_casing/a127
- projectile_type = /obj/projectile/bullet/rifle/a127
+ ammo_type = /obj/item/ammo_casing/a12_7mm
+ projectile_type = /obj/projectile/bullet/rifle/a12_7mm
load_sound = 'sound/weapons/guns/interaction/rifle_load.ogg'
accuracy = -45
scoped_accuracy = 95
@@ -86,7 +86,7 @@
damage_force = 10
slot_flags = SLOT_BACK // Needs a sprite.
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
- caliber = "7.62mm"
+ regex_this_caliber = /datum/ammo_caliber/a7_62mm
load_method = MAGAZINE
accuracy = -45 //shooting at the hip
scoped_accuracy = 95
@@ -94,8 +94,8 @@
// requires_two_hands = 1
one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
fire_sound = 'sound/weapons/Gunshot_SVD.ogg' // Has a very unique sound.
- magazine_type = /obj/item/ammo_magazine/m762svd
- allowed_magazines = list(/obj/item/ammo_magazine/m762svd)
+ magazine_type = /obj/item/ammo_magazine/a7_62mm/svd
+ allowed_magazines = list(/obj/item/ammo_magazine/a7_62mm/svd)
/obj/item/gun/ballistic/SVD/update_icon_state()
. = ..()
diff --git a/code/modules/projectiles/magazines/magazine.dm b/code/modules/projectiles/magazines/magazine.dm
deleted file mode 100644
index c03ca5d1ad7..00000000000
--- a/code/modules/projectiles/magazines/magazine.dm
+++ /dev/null
@@ -1,255 +0,0 @@
-//An item that holds casings and can be used to put them inside guns
-/obj/item/ammo_magazine
- name = "magazine"
- desc = "A magazine for some kind of gun."
- icon_state = ".357"
- icon = 'icons/obj/ammo.dmi'
- item_flags = ITEM_EASY_LATHE_DECONSTRUCT | ITEM_ENCUMBERS_WHILE_HELD
- slot_flags = SLOT_BELT
- item_state = "syringe_kit"
- materials_base = list(MAT_STEEL = 500)
- throw_force = 5
- w_class = WEIGHT_CLASS_SMALL
- throw_speed = 4
- throw_range = 10
- preserve_item = 1
-
- var/list/stored_ammo = list()
- var/mag_type = SPEEDLOADER //ammo_magazines can only be used with compatible guns. This is not a bitflag, the load_method var on guns is.
- var/caliber = ".357"
- var/max_ammo = 7
-
- var/ammo_type = /obj/item/ammo_casing //ammo type that is initially loaded
- var/initial_ammo // initial ammo amount, null for full
-
- var/can_remove_ammo = TRUE // Can this thing have bullets removed one-by-one? As of first implementation, only affects smart magazines
-
- var/multiple_sprites = 0
- //because BYOND doesn't support numbers as keys in associative lists
- var/list/icon_keys = list() //keys
- var/list/ammo_states = list() //values
- var/ammo_mark = null //Used for overlays simulated paint or tape bands on magazines. Cuts down on bloat.
-
-/obj/item/ammo_magazine/Initialize(mapload)
- . = ..()
- pixel_x = rand(-5, 5)
- pixel_y = rand(-5, 5)
- if(multiple_sprites)
- initialize_magazine_icondata(src)
-
- if(isnull(initial_ammo))
- initial_ammo = max_ammo
-
- if(initial_ammo)
- for(var/i in 1 to initial_ammo)
- stored_ammo += new ammo_type(src)
- update_icon()
-
-/obj/item/ammo_magazine/detect_material_base_costs()
- . = ..()
- if(isnull(ammo_type))
- return
- var/shell_amount = isnull(initial_ammo)? max_ammo : initial_ammo
- if(!shell_amount)
- return
- var/obj/item/ammo_casing/casing = new ammo_type
- if(!istype(casing))
- qdel(casing)
- return
- var/list/adding = casing.detect_material_base_costs()
- qdel(casing)
- for(var/key in adding)
- .[key] += adding[key] * shell_amount
-
-/obj/item/ammo_magazine/get_containing_worth(flags)
- . = ..()
- var/obj/item/ammo_casing/ammo_casted = ammo_type
- . += (isnull(initial_ammo)? max_ammo : initial_ammo) * initial(ammo_casted.worth_intrinsic)
-
-/obj/item/ammo_magazine/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W, /obj/item/ammo_casing))
- var/obj/item/ammo_casing/C = W
- if(C.caliber != caliber)
- to_chat(user, "[C] does not fit into [src].")
- return
- if(stored_ammo.len >= max_ammo)
- to_chat(user, "[src] is full!")
- return
- if(!user.attempt_insert_item_for_installation(C, src))
- return
- stored_ammo.Add(C)
- update_icon()
- if(istype(W, /obj/item/ammo_magazine/clip))
- var/obj/item/ammo_magazine/clip/L = W
- if(L.caliber != caliber)
- to_chat(user, "The ammo in [L] does not fit into [src].")
- return
- if(!L.stored_ammo.len)
- to_chat(user, "There's no more ammo [L]!")
- return
- if(stored_ammo.len >= max_ammo)
- to_chat(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()
-
-// This dumps all the bullets right on the floor
-/obj/item/ammo_magazine/attack_self(mob/user)
- . = ..()
- if(.)
- return
- if(can_remove_ammo)
- if(!stored_ammo.len)
- to_chat(user, "[src] is already empty!")
- return
- to_chat(user, "You empty [src].")
- playsound(user.loc, "casing_sound", 50, 1)
- spawn(7)
- playsound(user.loc, "casing_sound", 50, 1)
- spawn(10)
- playsound(user.loc, "casing_sound", 50, 1)
- for(var/obj/item/ammo_casing/C in stored_ammo)
- C.loc = user.loc
- C.setDir(pick(GLOB.cardinal))
- stored_ammo.Cut()
- update_icon()
- else
- to_chat(user, "\The [src] is not designed to be unloaded.")
- return
-
-// This puts one bullet from the magazine into your hand
-/obj/item/ammo_magazine/attack_hand(mob/user, list/params)
- if(can_remove_ammo) // For Smart Magazines
- if(user.get_inactive_held_item() == src)
- if(stored_ammo.len)
- var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len]
- stored_ammo-=C
- user.put_in_hands(C)
- user.visible_message("\The [user] removes \a [C] from [src].", "You remove \a [C] from [src].")
- update_icon()
- return
- ..()
-
-/obj/item/ammo_magazine/update_icon()
- if(multiple_sprites)
- //find the lowest key greater than or equal to stored_ammo.len
- var/new_state = null
- for(var/idx in 1 to icon_keys.len)
- var/ammo_count = icon_keys[idx]
- if (ammo_count >= stored_ammo.len)
- new_state = ammo_states[idx]
- break
- icon_state = (new_state)? new_state : initial(icon_state)
- if(ammo_mark)
- add_overlay("[initial(icon_state)]_[ammo_mark]")
-
-/obj/item/ammo_magazine/examine(mob/user, dist)
- . = ..()
- . += "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!"
-
-/**
- * puts a round into us, if possible
- * does not update icon by default!
- */
-/obj/item/ammo_magazine/proc/load_casing(obj/item/ammo_casing/casing, replace_spent, update_icon)
- if(caliber)
- if(casing.caliber != caliber)
- return FALSE
- else
- if(casing.type != ammo_type)
- return FALSE
- if(length(stored_ammo) < max_ammo)
- // add
- casing.forceMove(src)
- if(QDELETED(casing))
- return FALSE
- stored_ammo += casing
- if(update_icon)
- update_icon()
- return TRUE
- else if(replace_spent)
- // replace
- var/obj/item/ammo_casing/enemy
- for(var/i in 1 to length(stored_ammo))
- enemy = stored_ammo[i]
- if(enemy.loaded())
- continue
- // this is the one
- casing.forceMove(src)
- if(QDELETED(casing))
- return FALSE
- stored_ammo[i] = casing
- // kick 'em out
- enemy.forceMove(drop_location())
- if(update_icon)
- update_icon()
- return TRUE
- return FALSE
-
-/**
- * quickly gathers stuff from turf
- * does not sainty check
- *
- * @params
- * * where - the turf
- * * user - (optional) who's doing it
- *
- * @return number of rounds gathered
- */
-/obj/item/ammo_magazine/proc/quick_gather(turf/where, mob/user)
- . = 0
- if(full())
- user?.action_feedback(SPAN_WARNING("[src] is full."), src)
- return
- for(var/obj/item/ammo_casing/casing in where)
- if(length(stored_ammo) >= max_ammo)
- break
- if(!casing.loaded())
- continue
- if(!load_casing(casing, FALSE))
- continue
- ++.
- if(.)
- update_icon()
- user?.action_feedback(SPAN_NOTICE("You collect [.] rounds."), src)
- else
- user?.action_feedback(SPAN_WARNING("You fail to collect anything."), src)
-
-/obj/item/ammo_magazine/proc/full()
- return length(stored_ammo) >= max_ammo
-
-/obj/item/ammo_magazine/proc/remaining()
- return length(stored_ammo)
-
-/obj/item/ammo_magazine/proc/missing()
- return max_ammo - length(stored_ammo)
-
-//magazine icon state caching
-/var/global/list/magazine_icondata_keys = list()
-/var/global/list/magazine_icondata_states = list()
-
-/proc/initialize_magazine_icondata(var/obj/item/ammo_magazine/M)
- var/typestr = "[M.type]"
- if(!(typestr in magazine_icondata_keys) || !(typestr in magazine_icondata_states))
- magazine_icondata_cache_add(M)
-
- M.icon_keys = magazine_icondata_keys[typestr]
- M.ammo_states = magazine_icondata_states[typestr]
-
-/proc/magazine_icondata_cache_add(var/obj/item/ammo_magazine/M)
- var/list/icon_keys = list()
- var/list/ammo_states = list()
- var/list/states = icon_states(M.icon)
- for(var/i = 0, i <= M.max_ammo, i++)
- var/ammo_state = "[M.icon_state]-[i]"
- if(ammo_state in states)
- icon_keys += i
- ammo_states += ammo_state
-
- magazine_icondata_keys["[M.type]"] = icon_keys
- magazine_icondata_states["[M.type]"] = ammo_states
diff --git a/code/modules/projectiles/magazines/smartmag.dm b/code/modules/projectiles/magazines/smartmag.dm
deleted file mode 100644
index 9b2f96e9682..00000000000
--- a/code/modules/projectiles/magazines/smartmag.dm
+++ /dev/null
@@ -1,226 +0,0 @@
-///////// Smart Mags /////////
-
-/obj/item/ammo_magazine/smart
- name = "smart magazine"
- icon_state = "smartmag-empty"
- desc = "A Hephaistos Industries brand Smart Magazine. It uses advanced matter manipulation technology to create bullets from energy. Simply present your loaded gun or magazine to the Smart Magazine."
- multiple_sprites = 1
- max_ammo = 5
- mag_type = MAGAZINE
-
- caliber = null //Set later
- ammo_type = null //Set later
- initial_ammo = 0 //Ensure no problems with no ammo_type or caliber set
-
- can_remove_ammo = FALSE // Interferes with batteries
-
- var/production_time = 6 SECONDS // Delay in between bullets forming
- var/last_production_time = 0 // Used in determining if we should make a new bullet
- var/production_cost = null // Set when an ammo type is scanned in
- var/production_modifier = 2 // Multiplier on the ammo_casing's matter cost
- var/production_delay = 75 // If we're in a gun, how long since it last shot do we need to wait before making bullets?
-
- var/obj/item/gun/holding_gun = null // What gun are we in, if any?
-
- var/obj/item/cell/device/attached_cell = null // What cell are we using, if any?
-
- var/emagged = 0 // If you emag the smart mag, you can get the bullets out by clicking it
-
-/obj/item/ammo_magazine/smart/Initialize(mapload)
- . = ..()
- START_PROCESSING(SSobj, src)
-
-/obj/item/ammo_magazine/smart/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-/obj/item/ammo_magazine/smart/process(delta_time)
- if(!holding_gun) // Yes, this is awful, sorry. Don't know a better way to figure out if we've been moved into or out of a gun.
- if(istype(src.loc, /obj/item/gun))
- holding_gun = src.loc
-
- if(caliber && ammo_type && attached_cell)
- if(stored_ammo.len == max_ammo)
- last_production_time = world.time // Otherwise the max_ammo var is basically always off by 1
- return
- if(holding_gun && world.time < holding_gun.last_shot + production_delay) // Same as recharging energy weapons.
- return
- if(world.time > last_production_time + production_time)
- last_production_time = world.time
- produce()
-
-/obj/item/ammo_magazine/smart/examine(mob/user, dist)
- . = ..()
-
- if(attached_cell)
- . += "\The [src] is loaded with a [attached_cell.name]. It is [round(attached_cell.percent())]% charged."
- else
- . += "\The [src] does not appear to have a power source installed."
-
-/obj/item/ammo_magazine/smart/update_icon()
- if(attached_cell)
- icon_state = "smartmag-filled"
- else
- icon_state = "smartmag-empty"
-
-// Emagging lets you remove bullets from your bullet-making magazine
-/obj/item/ammo_magazine/smart/emag_act(var/remaining_charges, var/mob/user)
- if(!emagged)
- to_chat(user, "You overload \the [src]'s security measures causing widespread destabilisation. It is likely you could empty \the [src] now.")
- emagged = TRUE
- can_remove_ammo = TRUE
- return TRUE
- return FALSE
-
-/obj/item/ammo_magazine/smart/attackby(var/obj/item/I as obj, mob/user)
- if(istype(I, /obj/item/cell/device))
- if(attached_cell)
- to_chat(user, "\The [src] already has a [attached_cell.name] attached.")
- return
- else
- to_chat(user, "You begin inserting \the [I] into \the [src].")
- if(do_after(user, 25))
- if(!user.attempt_insert_item_for_installation(I, src))
- return
- attached_cell = I
- user.visible_message("[user] installs a cell in \the [src].", "You install \the [I] into \the [src].")
- update_icon()
- return
-
- else if(I.is_screwdriver())
- if(attached_cell)
- to_chat(user, "You begin removing \the [attached_cell] from \the [src].")
- if(do_after(user, 10)) // Faster than doing it by hand
- attached_cell.update_icon()
- user.put_in_hands_or_drop(attached_cell)
- attached_cell = null
- user.visible_message("[user] removes a cell from \the [src].", "You remove \the [attached_cell] from \the [src].")
- update_icon()
- return
-
- else if(istype(I, /obj/item/ammo_magazine) || istype(I, /obj/item/ammo_casing))
- scan_ammo(I, user)
-
- ..()
-
-/obj/item/ammo_magazine/smart/afterattack(atom/target, mob/user, clickchain_flags, list/params)
- if(src.loc == user)
- scan_ammo(target, user)
- ..()
-
-// You can remove the power cell from the magazine by hand, but it's way slower than using a screwdriver
-/obj/item/ammo_magazine/smart/attack_hand(mob/user, list/params)
- if(user.get_inactive_held_item() == src)
- if(attached_cell)
- to_chat(user, "You struggle to remove \the [attached_cell] from \the [src].")
- if(do_after(user, 40))
- attached_cell.update_icon()
- user.put_in_hands(attached_cell)
- attached_cell = null
- user.visible_message("[user] removes a cell from \the [src].", "You remove \the [attached_cell] from \the [src].")
- update_icon()
- return
- ..()
-
-// Classic emp_act, just drains the battery
-/obj/item/ammo_magazine/smart/emp_act(severity)
- ..()
- if(attached_cell)
- attached_cell.emp_act(severity)
-
-// Finds the cell for the magazine, used by rechargers
-/obj/item/ammo_magazine/smart/get_cell(inducer)
- return attached_cell
-
-// Removes energy from the attached cell when creating new bullets
-/obj/item/ammo_magazine/smart/proc/chargereduction()
- return attached_cell && attached_cell.checked_use(production_cost)
-
-// Sets how much energy is drained to make each bullet
-/obj/item/ammo_magazine/smart/proc/set_production_cost(var/obj/item/ammo_casing/A)
- var/list/matters = ammo_repository.get_materials_from_object(A)
- var/tempcost
- for(var/key in matters)
- var/value = matters[key]
- tempcost += value * production_modifier
- production_cost = tempcost
-
-// Scans a magazine or ammo casing and tells the smart mag to start making those, if it can
-/obj/item/ammo_magazine/smart/proc/scan_ammo(atom/target, mob/user)
-
- var/new_caliber = caliber // Tracks what our new caliber will be
- var/new_ammo_type = ammo_type // Tracks what our new ammo_type will be
-
- if(istype(target, /obj/item/ammo_magazine))
- var/obj/item/ammo_magazine/M = target
- if(!new_caliber)
- new_caliber = M.caliber // If caliber isn't set, set it now
-
- if(new_caliber && new_caliber != M.caliber) // If we still don't have a caliber, or if our caliber doesn't match the thing we're scanning, give up
- return
- else
- new_ammo_type = M.ammo_type
-
- if(istype(target, /obj/item/ammo_casing))
- var/obj/item/ammo_casing/C = target
-
- if(!new_caliber)
- new_caliber = C.caliber // If caliber isn't set, set it now
-
- if(new_caliber && new_caliber != C.caliber) // If we still don't have a caliber, or if our caliber doesn't match the thing we're scanning, give up
- return
- else
- new_ammo_type = C.type
-
- var/change = FALSE // If we've changed caliber or ammo_type, display the built message.
- var/msg = "You scan \the [target] with \the [src], copying \the [target]'s "
- if(new_caliber != caliber) // This should never happen without the ammo_type switching too
- change = TRUE
- msg += "caliber and "
- if(new_ammo_type != ammo_type)
- change = TRUE
- msg += "ammunition type."
-
- if(change)
- to_chat(user, "[msg]")
- caliber = new_caliber
- ammo_type = new_ammo_type
- set_production_cost(ammo_type) // Update our cost
-
- return
-
-// Actually makes the bullets
-/obj/item/ammo_magazine/smart/proc/produce()
- if(chargereduction())
- var/obj/item/ammo_casing/W = new ammo_type(src)
- stored_ammo.Insert(1, W) //add to the head of the list
- return 1
- return 0
-
-
-// This verb clears out the smart mag's copied data, but only if it's empty
-/obj/item/ammo_magazine/smart/verb/clear_ammo_data()
- set name = "Clear Ammo Data"
- set category = VERB_CATEGORY_OBJECT
- set src in usr
-
- if(!istype(src.loc, /mob/living)) // Needs to be in your hands to reset
- return
-
- var/mob/living/carbon/human/H = usr
- if(!istype(H))
- return
- if(H.stat)
- return
-
- if(LAZYLEN(stored_ammo))
- to_chat(usr, "You can't reset \the [src] unless it's empty!")
- return
-
- to_chat(usr, "You clear \the [src]'s data buffers.")
-
- caliber = null
- ammo_type = null
- production_cost = null
-
- return
diff --git a/code/modules/projectiles/magazines/unsorted.dm b/code/modules/projectiles/magazines/unsorted.dm
deleted file mode 100644
index 12af5d2212d..00000000000
--- a/code/modules/projectiles/magazines/unsorted.dm
+++ /dev/null
@@ -1,1259 +0,0 @@
-/************************************************************************/
-/*
-# An explaination of the naming format for guns and ammo:
-#
-# a = Ammo, as in individual rounds of ammunition.
-# b = Box, intended to have ammo taken out one at a time by hand. Really obsolete. Don't use this.
-# c = Clips, intended to reload magazines or guns quickly.
-# m = Magazine, intended to hold rounds of ammo.
-# s = Speedloaders, intended to reload guns quickly.
-#
-# Use this format, followed by the caliber. For example, a shotgun's caliber
-# variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g",
-# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion
-# for developers and in-game admins spawning these items, stick to this format.
-# Likewise, when creating new rounds, the caliber variable should match whatever
-# the name says.
-#
-# This comment is copied in rounds.dm as well.
-#
-# Also, if a magazine is only meant for a specific gun, include the name
-# of the specific gun in the path. Example: m45uzi is only for the Uzi.
-*/
-/************************************************************************/
-
-
-
-///////// .357 /////////
-
-/obj/item/ammo_magazine/s357
- name = "speedloader (.357)"
- desc = "A speedloader for .357 revolvers."
- icon_state = "38"
- caliber = ".357"
- ammo_type = /obj/item/ammo_casing/a357
- materials_base = list(MAT_STEEL = 1260)
- max_ammo = 6
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/s357/silver
- name = "speedloader (.357 silver)"
- icon_state = "ag_38"
- ammo_type = /obj/item/ammo_casing/a357/silver
- materials_base = list(MAT_STEEL = 2100, MAT_SILVER = 1200)
-
-///////// .38 /////////
-
-/obj/item/ammo_magazine/s38
- name = "speedloader (.38)"
- desc = "A speedloader for .38 revolvers."
- icon_state = "38"
- caliber = ".38"
- materials_base = list(MAT_STEEL = 360)
- ammo_type = /obj/item/ammo_casing/a38
- max_ammo = 6
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/s38/rubber
- name = "speedloader (.38 rubber)"
- icon_state = "T38"
- ammo_type = /obj/item/ammo_casing/a38/rubber
-
-/obj/item/ammo_magazine/s38/emp
- name = "speedloader (.38 haywire)"
- ammo_type = /obj/item/ammo_casing/a38/emp
-
-/obj/item/ammo_magazine/s38/silver
- name = "speedloader (.38 silver)"
- icon_state = "ag_38"
- ammo_type = /obj/item/ammo_casing/a38/silver
- materials_base = list(MAT_STEEL = 780, MAT_SILVER = 600)
-
-///////// .45 /////////
-
-/obj/item/ammo_magazine/m45
- name = "pistol magazine (.45)"
- icon_state = "45"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a45
- materials_base = list(MAT_STEEL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
- caliber = ".45"
- max_ammo = 7
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m45/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m45/hunter
- name = "magazine (.45 hunter)"
- ammo_type = /obj/item/ammo_casing/a45/hunter
-
-/obj/item/ammo_magazine/m45/rubber
- name = "magazine (.45 rubber)"
- ammo_type = /obj/item/ammo_casing/a45/rubber
-
-/obj/item/ammo_magazine/m45/practice
- name = "magazine (.45 practice)"
- ammo_type = /obj/item/ammo_casing/a45/practice
-
-/obj/item/ammo_magazine/m45/flash
- name = "magazine (.45 flash)"
- ammo_type = /obj/item/ammo_casing/a45/flash
-
-/obj/item/ammo_magazine/m45/ap
- name = "magazine (.45 AP)"
- ammo_type = /obj/item/ammo_casing/a45/ap
-
-/obj/item/ammo_magazine/box/emp/b45
- name = "ammunition box (.45 haywire)"
- ammo_type = /obj/item/ammo_casing/a45/emp
-
-/obj/item/ammo_magazine/m45uzi
- name = "stick magazine (.45)"
- icon_state = "uzi45"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a45
- materials_base = list(MAT_STEEL = 1200)
- caliber = ".45"
- max_ammo = 16
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m45uzi/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m45uzi/wt274
- name = "double-stack magazine (.45)"
- icon_state = "wt274"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a45
- materials_base = list(MAT_STEEL = 2400)
- caliber = ".45"
- max_ammo = 32
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m45tommy
- name = "Tommy Gun magazine (.45)"
- icon_state = "tommy-mag"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a45
- materials_base = list(MAT_STEEL = 1500)
- caliber = ".45"
- max_ammo = 20
-
-/obj/item/ammo_magazine/m45tommy/ap
- name = "Tommy Gun magazine (.45 AP)"
- ammo_type = /obj/item/ammo_casing/a45/ap
-
-/obj/item/ammo_magazine/m45tommy/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m45tommydrum
- name = "Tommy Gun drum magazine (.45)"
- icon_state = "tommy-drum"
- w_class = WEIGHT_CLASS_NORMAL // Bulky ammo doesn't fit in your pockets!
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a45
- materials_base = list(MAT_STEEL = 3750)
- caliber = ".45"
- max_ammo = 50
-
-/obj/item/ammo_magazine/m45tommydrum/ap
- name = "Tommy Gun drum magazine (.45 AP)"
- ammo_type = /obj/item/ammo_casing/a45/ap
-
-/obj/item/ammo_magazine/m45tommydrum/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/a45
- materials_base = list(MAT_STEEL = 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/a45/rubber
-
-/obj/item/ammo_magazine/clip/c45/hunter
- name = "ammo clip (.45 hunter)"
- ammo_type = /obj/item/ammo_casing/a45/hunter
-
-/obj/item/ammo_magazine/clip/c45/practice
- name = "ammo clip (.45 practice)"
- ammo_type = /obj/item/ammo_casing/a45/practice
-
-/obj/item/ammo_magazine/clip/c45/flash
- name = "ammo clip (.45 flash)"
- ammo_type = /obj/item/ammo_casing/a45/flash
-
-/obj/item/ammo_magazine/s45
- name = "speedloader (.45)"
- icon_state = "45s"
- ammo_type = /obj/item/ammo_casing/a45
- materials_base = list(MAT_STEEL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
- caliber = ".45"
- max_ammo = 7
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/s45/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/s45/rubber
- name = "speedloader (.45 rubber)"
- ammo_type = /obj/item/ammo_casing/a45/rubber
-
-/obj/item/ammo_magazine/s45/practice
- name = "speedloader (.45 practice)"
- ammo_type = /obj/item/ammo_casing/a45/practice
-
-/obj/item/ammo_magazine/s45/flash
- name = "speedloader (.45 flash)"
- ammo_type = /obj/item/ammo_casing/a45/flash
-
-/obj/item/ammo_magazine/s45/ap
- name = "speedloader (.45 AP)"
- ammo_type = /obj/item/ammo_casing/a45/ap
-
-/obj/item/ammo_magazine/s45/silver
- name = "speedloader (.45 silver)"
- icon_state = "ag45s"
- ammo_type = /obj/item/ammo_casing/a45/silver
- materials_base = list(MAT_STEEL = 780, MAT_SILVER = 600)
-
-///////// 10x24mm Caseless /////////
-
-/obj/item/ammo_magazine/m10x24mm
- name = "debug magazine that shouldn't appear please report it if you do (10mm caseless)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless
- icon_state = "usmc-large"
- caliber = "10mmCL"
- w_class = WEIGHT_CLASS_NORMAL
- materials_base = list(MAT_STEEL = 8500)
- mag_type = MAGAZINE
- max_ammo = 96
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m10x24mm/large
- name = "magazine (large) (10mm caseless)"
- icon_state = "usmc-large"
- materials_base = list(MAT_STEEL = 8500)
- max_ammo = 96
-
-/obj/item/ammo_magazine/m10x24mm/large/hp
- name = "magazine (large) (10mm caseless hollow-point)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless/hp
- icon_state = "usmc-large-hp"
-
-/obj/item/ammo_magazine/m10x24mm/large/ap
- name = "magazine (large) (10mm caseless armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless/ap
- icon_state = "usmc-large-ap"
-
-/obj/item/ammo_magazine/m10x24mm/med
- name = "magazine (medium) (10mm caseless)"
- icon_state = "usmc-med"
- materials_base = list(MAT_STEEL = 5500)
- max_ammo = 64
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m10x24mm/med/hp
- name = "magazine (medium) (10mm caseless hollow-point)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless/hp
- icon_state = "usmc-med-hp"
-
-/obj/item/ammo_magazine/m10x24mm/med/ap
- name = "magazine (medium) (10mm caseless armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless/ap
- icon_state = "usmc-med-ap"
-
-/obj/item/ammo_magazine/m10x24mm/small
- name = "magazine (small) (10mm caseless)"
- icon_state = "usmc-small"
- materials_base = list(MAT_STEEL = 2500)
- max_ammo = 32
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m10x24mm/small/hp
- name = "magazine (small) (10mm caseless hollow-point)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless/hp
- icon_state = "usmc-small-hp"
- caliber = "10mmCL"
- max_ammo = 32
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m10x24mm/small/ap
- name = "magazine (small) (10mm caseless armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a10x24mmcaseless/ap
- icon_state = "usmc-small-ap"
- caliber = "10mmCL"
- max_ammo = 32
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m10x24mm/small/snark
- desc = "A magazine for some kind of gun. Taped on it is a reminder to \"watch those firing lanes\" and a drawing of a stickman wearing a helmet. The helmet has a hole in it. The stickman is dead."
-
-/obj/item/ammo_magazine/m10x24mm/small/hp/snark
- desc = "A magazine for some kind of gun. Taped on it is a reminder to \"watch those firing lanes\" and a drawing of a stickman wearing a helmet. The helmet has a hole in it. The stickman is dead."
-
-/obj/item/ammo_magazine/m10x24mm/small/ap/snark
- desc = "A magazine for some kind of gun. Taped on it is a reminder to \"watch those firing lanes\" and a drawing of a stickman wearing a helmet. The helmet has a hole in it. The stickman is dead."
-
-///////// 5mm Caseless /////////
-
-/obj/item/ammo_magazine/m5mmcaseless
- name = "prototype rifle magazine (5mm caseless)"
- ammo_type = /obj/item/ammo_casing/a5mmcaseless
- icon_state = "caseless-mag"
- caliber = "5mm caseless"
- mag_type = MAGAZINE
- max_ammo = 30
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m5mmcaseless/stun
- icon_state = "caseless-mag-alt"
- ammo_type = /obj/item/ammo_casing/a5mmcaseless/stun
-
-/////// 12.7mm / 50 caliber caseless /////////
-
-/obj/item/ammo_magazine/mfiftycalcaseless
- name = "Wild Hunt magazine (12.7mm caseless)"
- ammo_type = /obj/item/ammo_casing/fiftycalcaseless
- icon_state = "caseless-127"
- caliber = "12.7mm caseless"
- mag_type = MAGAZINE
- max_ammo = 20
- multiple_sprites = 1
-
-/////// phoron shrapnel smg //////
-
-/obj/item/ammo_magazine/mphoronshot
- name = "compressed phoron matter container"
- desc = "A compressed matter container meant for the Gorlex SHRAPNEL-SPITTER SMG. Contains a phoron alloy that self-oxidzes and ignites on contact with air. \n \nThey're in good shape for the shape they're in, \nbut God, I wonder how they think they can win, \nwith phoron rolling down their skin."
- max_ammo = 40
- caliber = "phoron shrapnel"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/phoron_shrap
- icon_state = "spitterammo"
- multiple_sprites = 1
-
-///////// 9mm /////////
-
-/obj/item/ammo_magazine/m9mm
- name = "magazine (9mm)"
- icon_state = "9x19p_fullsize"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- materials_base = list(MAT_STEEL = 600)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/a9mm
- max_ammo = 10
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m9mm/large
- desc = "\"FOR LAW ENFORCEMENT/MILITARY USE ONLY\" is clearly etched on the magazine. This is probably illegal for you to have." // Remember, Security is not Law Enforcement, so it's illegal for Security to use as well.
- icon_state = "9x19p_highcap"
- max_ammo = 17
- origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
-
-/obj/item/ammo_magazine/m9mm/large/licensed // Sold by traders.
- desc = "A large capacity magazine produced via a joint NT-Hephaestus license, making it legal to own."
-
-/obj/item/ammo_magazine/m9mm/large/licensed/hp // Hollow Point Version
- name = "magazine (9mm hollow-point)"
- ammo_type = /obj/item/ammo_casing/a9mm/hp
-
-/obj/item/ammo_magazine/m9mm/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m9mm/flash
- name = "magazine (9mm flash)"
- ammo_type = /obj/item/ammo_casing/a9mm/flash
-
-/obj/item/ammo_magazine/m9mm/rubber
- name = "magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/a9mm/rubber
-
-/obj/item/ammo_magazine/m9mm/practice
- name = "magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/a9mm/practice
-
-// Compact
-/obj/item/ammo_magazine/m9mm/compact
- name = "compact magazine (9mm)"
- icon_state = "9x19p"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- materials_base = list(MAT_STEEL = 480)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/a9mm
- max_ammo = 8
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m9mm/compact/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m9mm/compact/flash
- name = "compact magazine (9mm flash)"
- ammo_type = /obj/item/ammo_casing/a9mm/flash
-
-/obj/item/ammo_magazine/m9mm/compact/rubber
- name = "compact magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/a9mm/rubber
-
-/obj/item/ammo_magazine/m9mm/compact/practice
- name = "compact magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/a9mm/practice
-
-/obj/item/ammo_magazine/m9mm/compact/double
- name = "compact magazine (9mm double stack)"
- materials_base = list(MAT_STEEL = 900)
- max_ammo = 16
-
-// SMG
-/obj/item/ammo_magazine/m9mmt
- name = "top mounted magazine (9mm)"
- icon_state = "9mmt"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a9mm
- materials_base = list(MAT_STEEL = 1200)
- caliber = "9mm"
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m9mmt/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m9mmt/hunter
- name = "top mounted magazine (9mm hunter)"
- ammo_type = /obj/item/ammo_casing/a9mm/hunter
-
-/obj/item/ammo_magazine/m9mmt/rubber
- name = "top mounted magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/a9mm/rubber
-
-/obj/item/ammo_magazine/m9mmt/flash
- name = "top mounted magazine (9mm flash)"
- ammo_type = /obj/item/ammo_casing/a9mm/flash
-
-/obj/item/ammo_magazine/m9mmt/practice
- name = "top mounted magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/a9mm/practice
-
-/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/a9mm
- materials_base = list(MAT_STEEL = 600) // metal costs are very roughly based around one 9mm casing = 60 metal
- max_ammo = 10
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/c9mm/hunter
- name = "ammo clip (9mm hunter)"
- ammo_type = /obj/item/ammo_casing/a9mm/hunter
-
-/obj/item/ammo_magazine/clip/c9mm/rubber
- name = "ammo clip (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/a9mm/rubber
-
-/obj/item/ammo_magazine/clip/c9mm/practice
- name = "ammo clip (9mm practice)"
- ammo_type = /obj/item/ammo_casing/a9mm/practice
-
-/obj/item/ammo_magazine/clip/c9mm/flash
- name = "ammo clip (9mm flash)"
- ammo_type = /obj/item/ammo_casing/a9mm/flash
-
-/obj/item/ammo_magazine/clip/c9mm/silver
- name = "ammo clip (9mm silver)"
- ammo_type = /obj/item/ammo_casing/a9mm/silver
- icon_state = "clip_pistol_ag"
- materials_base = list(MAT_STEEL = 1300, MAT_SILVER = 1000)
-
-/obj/item/ammo_magazine/m9mmAdvanced
- desc = "A very high capacity double stack magazine made specially for the Advanced SMG. Filled with 21 9mm bullets."
- icon_state = "S9mm"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a9mm
- materials_base = list(MAT_STEEL = 1200)
- caliber = "9mm"
- max_ammo = 21
- origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m9mmAdvanced/ap
- desc = "A high capacity double stack magazine made specially for the Advanced SMG. Filled with 21 9mm armor piercing bullets."
- icon_state = "S9mm"
- ammo_type = /obj/item/ammo_casing/a9mm/ap
- materials_base = list(MAT_STEEL = 2000)
-
-/obj/item/ammo_magazine/m9mmR/saber/empty
- initial_ammo = 0
-
-/////// 5.7x28mm ////////
-/obj/item/ammo_magazine/m57x28mm
- name = "magazine (5.7x28mm)"
- desc = "A durable top-loading magazine, designed for withstanding rough treatment."
- icon_state = "ntles"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- materials_base = list(MAT_STEEL = 300, MAT_COPPER = 300)
- caliber = "5.7x28mm"
- ammo_type = /obj/item/ammo_casing/a57x28mm
- max_ammo = 20
- multiple_sprites = 1
-
-//NTLES
-
-/obj/item/ammo_magazine/m57x28mm/ntles/
- max_ammo = 30
-
-/obj/item/ammo_magazine/m57x28mm/ntles/ap
- name = "magazine (5.7x28mm armor piercing)"
- ammo_mark = "ap"
- ammo_type = /obj/item/ammo_casing/a57x28mm/ap
-
-/obj/item/ammo_magazine/m57x28mm/ntles/hp
- name = "magazine (5.7x28mm hollow-point)"
- ammo_mark = "hp"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hp
-
-/obj/item/ammo_magazine/m57x28mm/ntles/hunter
- name = "magazine (5.7x28mm hunter)"
- ammo_mark = "hunter"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hunter
-
-/obj/item/ammo_magazine/m57x28mm/ntles/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m57x28mm/ntles/highcap
- name = "high capacity magazine (5.7x28mm)"
- icon_state = "ntles_highcap"
- max_ammo = 50
- origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
-
-/obj/item/ammo_magazine/m57x28mm/ntles/highcap/ap
- name = "high capacity magazine (5.7x28mm armor piercing)"
- ammo_mark = "ap"
- ammo_type = /obj/item/ammo_casing/a57x28mm/ap
-/obj/item/ammo_magazine/m57x28mm/ntles/highcap/hp
- name = "high capacity magazine (5.7x28mm hollow-point)"
- ammo_mark = "hp"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hp
-
-/obj/item/ammo_magazine/m57x28mm/ntles/highcap/hunter
- name = "high capacity magazine (5.7x28mm hunter)"
- ammo_mark = "hunter"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hunter
-
-/obj/item/ammo_magazine/m57x28mm/ntles/highcap/empty
- initial_ammo = 0
-
-//Harpy SMG
-
-/obj/item/ammo_magazine/m57x28mm/smg
- name = "NT-SMG-8 magazine (5.7x28mm)"
- desc = "A compact double stack aluminum magazine."
- icon_state = "combatsmg"
- max_ammo = 40
-
-/obj/item/ammo_magazine/m57x28mm/smg/ap
- name = "NT-SMG-8 magazine (5.7x28mm armor piercing)"
- ammo_mark = "cmbtsmg_ap"
- ammo_type = /obj/item/ammo_casing/a57x28mm/ap
-
-//Fiveseven mags
-/obj/item/ammo_magazine/m57x28mm/fiveseven
- name = "fiveseven magazine (5.7x28mm)"
- desc = "A sturdy double stack magazine with a reinforced spring, designed for withstanding rough treatment."
- icon_state = "fiveseven"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- materials_base = list(MAT_STEEL = 300, MAT_COPPER = 300)
- caliber = "5.7x28mm"
- ammo_type = /obj/item/ammo_casing/a57x28mm
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap
- name = "magazine (5.7x28mm armor piercing)"
- ammo_mark = "ap"
- ammo_type = /obj/item/ammo_casing/a57x28mm/ap
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/hp
- name = "magazine (5.7x28mm hollow-point)"
- ammo_mark = "hp"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hp
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/hunter
- name = "magazine (5.7x28mm hunter)"
- ammo_mark = "hunter"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hunter
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/highcap
- name = "high capacity fiveseven magazine (5.7x28mm)"
- desc = "A sturdy, extra long double stack magazine with a reinforced spring, designed for withstanding rough treatment."
- icon_state = "fiveseven_highcap"
- max_ammo = 30
- origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/ap
- name = "high capacity magazine (5.7x28mm armor piercing)"
- ammo_mark = "ap"
- ammo_type = /obj/item/ammo_casing/a57x28mm/ap
-/obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/hp
- name = "high capacity magazine (5.7x28mm hollow-point)"
- ammo_mark = "hp"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hp
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/hunter
- name = "high capacity magazine (5.7x28mm hunter)"
- ammo_mark = "hunter"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hunter
-
-/obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/empty
- initial_ammo = 0
-
-//p90
-/obj/item/ammo_magazine/m57x28mmp90
- name = "high capacity top mounted magazine (5.7x28mm armor-piercing)"
- icon_state = "p90"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/a57x28mm/ap
- materials_base = list(MAT_STEEL = 1500, MAT_COPPER = 1500)
- caliber = "5.7x28mm"
- max_ammo = 50
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m57x28mmp90/hunter
- name = "high capacity top mounted magazine (5.7x28mm hunter)"
- ammo_type = /obj/item/ammo_casing/a57x28mm/hunter
-
-/obj/item/ammo_magazine/m57x28mmp90/empty
- initial_ammo = 0
-
-///////// 10mm /////////
-
-/obj/item/ammo_magazine/m10mm
- name = "magazine (10mm)"
- icon_state = "10mm"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "10mm"
- materials_base = list(MAT_STEEL = 1500)
- ammo_type = /obj/item/ammo_casing/a10mm
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m10mm/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/c10mm
- 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
- materials_base = list(MAT_STEEL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
- max_ammo = 9
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/box/emp/b10
- name = "ammunition box (10mm haywire)"
- ammo_type = /obj/item/ammo_casing/a10mm/emp
-
-///////// 5.56mm /////////
-
-/obj/item/ammo_magazine/m556
- name = "magazine (5.56mm)"
- icon_state = "m556"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "5.56mm"
- materials_base = list(MAT_STEEL = 1800)
- ammo_type = /obj/item/ammo_casing/a556
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m556/ext
- name = "extended magazine (5.56mm)"
- materials_base = list(MAT_STEEL = 2700)
- max_ammo = 30
-
-/obj/item/ammo_magazine/m556/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m556/ext/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m556/practice
- name = "magazine (5.56mm practice)"
- ammo_type = /obj/item/ammo_casing/a556/practice
-
-/obj/item/ammo_magazine/m556/practice/ext
- name = "extended magazine (5.56mm practice)"
- max_ammo = 30
-
-/obj/item/ammo_magazine/m556/ap
- name = "magazine (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/m556/ap/ext
- name = "extended magazine (5.56mm armor-piercing)"
- max_ammo = 30
-
-/obj/item/ammo_magazine/m556/hunter
- name = "magazine (5.56mm hunting)"
- ammo_type = /obj/item/ammo_casing/a556/hunter
-
-/obj/item/ammo_magazine/m556/hunter/ext
- name = "extended magazine (5.56mm hunting)"
- max_ammo = 30
-
-/obj/item/ammo_magazine/m556/small
- name = "reduced magazine (5.56mm)"
- icon_state = "m556-small"
- materials_base = list(MAT_STEEL = 900)
- max_ammo = 10
-
-/obj/item/ammo_magazine/m556/small/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m556/small/practice
- name = "magazine (5.56mm practice)"
- ammo_type = /obj/item/ammo_casing/a556/practice
-
-/obj/item/ammo_magazine/m556/small/ap
- name = "magazine (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/m556/small/hunter
- name = "magazine (5.56mm hunting)"
- ammo_type = /obj/item/ammo_casing/a556/hunter
-
-/obj/item/ammo_magazine/clip/c545
- name = "ammo clip (5.56mm)"
- icon_state = "clip_rifle"
- caliber = "5.56mm"
- ammo_type = /obj/item/ammo_casing/a556
- materials_base = list(MAT_STEEL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
- max_ammo = 5
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/c545/ap
- name = "rifle clip (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/clip/c545/hunter
- name = "rifle clip (5.56mm hunting)"
- ammo_type = /obj/item/ammo_casing/a556/hunter
-
-/obj/item/ammo_magazine/clip/c545/practice
- name = "rifle clip (5.56mm practice)"
- ammo_type = /obj/item/ammo_casing/a556
-
-/obj/item/ammo_magazine/m556saw
- name = "magazine box (5.56mm)"
- icon_state = "a556"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "5.56mm"
- materials_base = list(MAT_STEEL = 10000)
- ammo_type = /obj/item/ammo_casing/a556
- w_class = WEIGHT_CLASS_NORMAL // This should NOT fit in your pocket!!
- max_ammo = 50
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m556saw/ap
- name = "magazine box (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/m556saw/hunter
- name = "magazine box (5.56mm hunting)"
- ammo_type = /obj/item/ammo_casing/a556/hunter
-
-/obj/item/ammo_magazine/m556saw/empty
- initial_ammo = 0
-
-///////// .44 Magnum /////////
-
-/obj/item/ammo_magazine/m44
- name = "magazine (.44)"
- icon_state = "m44"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = ".44"
- materials_base = list(MAT_STEEL = 1260)
- ammo_type = /obj/item/ammo_casing/a44
- max_ammo = 7
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m44/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/c44
- name = "ammo clip (.44)"
- icon_state = "clip_pistol"
- desc = "A stripper clip for reloading .44 rounds into magazines."
- caliber = ".44"
- ammo_type = /obj/item/ammo_casing/a44
- materials_base = list(MAT_STEEL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
- max_ammo = 9
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/s44
- name = "speedloader (.44)"
- icon_state = "44"
- icon = 'icons/obj/ammo.dmi'
- ammo_type = /obj/item/ammo_casing/a44
- materials_base = list(MAT_STEEL = 1260) //metal costs are very roughly based around 1 .45 casing = 75 metal
- caliber = ".44"
- max_ammo = 6
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/s44/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/s44/rubber
- name = "speedloader (.44 rubber)"
- icon_state = "R44"
- ammo_type = /obj/item/ammo_casing/a44/rubber
-
-/obj/item/ammo_magazine/s44/silver
- name = "speedloader (.44 silver)"
- icon_state = "ag44"
- ammo_type = /obj/item/ammo_casing/a44/silver
- materials_base = list(MAT_STEEL = 2100, MAT_SILVER = 1200)
-
-///////// 7.62mm /////////
-
-/obj/item/ammo_magazine/m762
- name = "magazine (7.62mm)"
- icon_state = "m762-small"
- mag_type = MAGAZINE
- caliber = "7.62mm"
- materials_base = list(MAT_STEEL = 2000)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 10
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m762/ap
- name = "magazine (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/m762/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m762m // Intentionally not a subtype of m762 because it's supposed to be incompatible with the Z8 Bulldog rifle.
- name = "magazine (7.62mm)"
- icon_state = "m762"
- mag_type = MAGAZINE
- caliber = "7.62mm"
- materials_base = list(MAT_STEEL = 4000)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m762m/ap
- name = "magazine (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/m762m/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m762garand
- name = "garand clip (7.62mm)" // The clip goes into the magazine, hence the name. I'm very sure this is correct.
- icon_state = "gclip"
- mag_type = MAGAZINE
- caliber = "7.62mm"
- materials_base = list(MAT_STEEL = 1600)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 8
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m762garand/ap
- name = "garand clip (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/m762garand/hunter
- name = "garand clip (7.62mm Hunting)"
- ammo_type = /obj/item/ammo_casing/a762/hunter
-
-/obj/item/ammo_magazine/m762garand/sniperhunter
- name = "garand clip (7.62mm HV Hunting)"
- ammo_type = /obj/item/ammo_casing/a762/sniperhunter
-
-/obj/item/ammo_magazine/m762/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/c762
- name = "ammo clip (7.62mm)"
- icon_state = "clip_rifle"
- caliber = "7.62mm"
- ammo_type = /obj/item/ammo_casing/a762
- materials_base = list(MAT_STEEL = 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/c762/ap
- name = "rifle clip (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/clip/c762/practice
- name = "rifle clip (7.62mm practice)"
- ammo_type = /obj/item/ammo_casing/a762/practice
-
-/obj/item/ammo_magazine/clip/c762/hunter
- name = "rifle clip (7.62mm hunting)"
- ammo_type = /obj/item/ammo_casing/a762/hunter
-
-/obj/item/ammo_magazine/clip/c762/sniper
- name = "rifle clip (7.62mm HV)"
- ammo_type = /obj/item/ammo_casing/a762/sniper
-
-/obj/item/ammo_magazine/clip/c762/sniperhunter
- name = "rifle clip (7.62mm HV hunting)"
- ammo_type = /obj/item/ammo_casing/a762/sniperhunter
-
-/obj/item/ammo_magazine/clip/c762/silver
- name = "rifle clip (7.62mm silver)"
- icon_state = "agclip_rifle"
- ammo_type = /obj/item/ammo_casing/a762/silver
- materials_base = list(MAT_STEEL = 1500, MAT_SILVER = 750)
-
-/obj/item/ammo_magazine/m762svd
- name = "\improper SVD magazine (7.62mm)"
- icon_state = "SVD"
- mag_type = MAGAZINE
- caliber = "7.62mm"
- materials_base = list(MAT_STEEL = 2000)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 10
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m762svd/ap
- name = "\improper SVD magazine (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/m762svd/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m762_mg42
- name = "antique ammo drum (7.62mm)"
- icon_state = "mg42_drum"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "7.62mm"
- materials_base = list(MAT_STEEL = 10000)
- ammo_type = /obj/item/ammo_casing/a762
- w_class = WEIGHT_CLASS_NORMAL
- max_ammo = 50
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m762_mg42/ap
- name = "antique ammo drum box (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/m762_mg42/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m762_m60
- name = "M60 belt (7.62mm)"
- icon_state = "M60MAG"
- mag_type = MAGAZINE
- caliber = "7.62mm"
- materials_base = list(MAT_STEEL = 20000)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 75
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m762_m60/empty
- initial_ammo = 0
-
-///////// 12g /////////
-
-/obj/item/ammo_magazine/m12gdrum
- name = "magazine (12 gauge)"
- icon_state = "ashot-mag"
- mag_type = MAGAZINE
- caliber = "12g"
- materials_base = list(MAT_STEEL = 13000)
- ammo_type = /obj/item/ammo_casing/a12g
- max_ammo = 24
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m12gdrum/beanbag
- name = "magazine (12 gauge beanbag)"
- ammo_type = /obj/item/ammo_casing/a12g/beanbag
-
-/obj/item/ammo_magazine/m12gdrum/pellet
- name = "magazine (12 gauge pellet)"
- ammo_type = /obj/item/ammo_casing/a12g/pellet
-
-/obj/item/ammo_magazine/m12gdrum/flare
- name = "magazine (12 gauge flash)"
- ammo_type = /obj/item/ammo_casing/a12g/flare
-
-/obj/item/ammo_magazine/m12gdrum/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/c12g
- name = "ammo clip (12g slug)"
- icon_state = "12gclipslug" // Still a placeholder sprite. Feel free to make a better one.
- desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with slugs."
- caliber = "12g"
- ammo_type = /obj/item/ammo_casing/a12g
- materials_base = list(MAT_STEEL = 1070) // slugs shells x2 + 350 metal for the clip itself.
- max_ammo = 2
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/c12g/pellet
- name = "ammo clip (12g buckshot)"
- icon_state = "12gclipshell"
- desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with buckshot."
- ammo_type = /obj/item/ammo_casing/a12g/pellet
- materials_base = list(MAT_STEEL = 1070) // buckshot and slugs cost the same
-
-/obj/item/ammo_magazine/clip/c12g/beanbag
- name = "ammo clip (12g beanbag)"
- icon_state = "12gclipbean"
- desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with beanbags."
- ammo_type = /obj/item/ammo_casing/a12g/beanbag
- materials_base = list(MAT_STEEL = 710) //beanbags x2 + 350 metal
-
-/obj/item/ammo_magazine/clip/c12g/silver
- name = "ammo clip (12g buckshot)"
- icon_state = "12gclipag"
- desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with silver buckshot."
- ammo_type = /obj/item/ammo_casing/a12g/silver
- materials_base = list(MAT_STEEL = 1070, MAT_SILVER = 480)
-
-/obj/item/ammo_magazine/holyshot_mag
- name = "blessed drum magazine (12 gauge)"
- icon_state = "holyshotgun_mag"
- desc = "Thrice-blessed, this drum magazine is loaded with silver shot designed to combat supernatural threats."
- mag_type = MAGAZINE
- caliber = "12g"
- materials_base = list(MAT_STEEL = 100, MAT_SILVER = 1100)
- ammo_type = /obj/item/ammo_casing/a12g/silver
- max_ammo = 12
-
-/obj/item/ammo_magazine/holyshot_mag/stake
- name = "blessed drum magazine (stakes)"
- desc = "Thrice-blessed, this drum magazine is loaded with wooden stakes soaked in sacred oils."
- ammo_type = /obj/item/ammo_casing/a12g/stake
-
-///////// .75 Gyrojet /////////
-
-/obj/item/ammo_magazine/m75
- name = "magazine (.75 Gyrojet)"
- icon_state = "m75"
- mag_type = MAGAZINE
- caliber = ".75"
- ammo_type = /obj/item/ammo_casing/a75
- multiple_sprites = 1
- max_ammo = 8
-
-/obj/item/ammo_magazine/m75/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m75/sickle
- name = "sickle magazine (.75 Gyrojet)"
- icon_state = "m75sickle"
- max_ammo = 30
-
-/obj/item/ammo_magazine/m75/pistol
- icon_state = "m75pistol"
- max_ammo = 10
-
-/obj/item/ammo_magazine/m75/box
- name = "box magazine (.75 Gyrojet)"
- icon_state = "a75box"
- max_ammo = 50
-
-///////// Misc. /////////
-
-/obj/item/ammo_magazine/caps
- name = "speedloader (caps)"
- icon_state = "T38"
- caliber = "caps"
- color = "#FF0000"
- ammo_type = /obj/item/ammo_casing/cap
- materials_base = list(MAT_STEEL = 600)
- max_ammo = 7
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/mcompressedbio
- name = "magazine (Compressed Biomatter)"
- desc = "An advanced matter compression unit, used to feed biomass into a Rapid On-board Fabricator. Accepts biomass globules."
- icon_state = "bio"
- mag_type = MAGAZINE
- caliber = "organic"
- ammo_type = /obj/item/ammo_casing/organic
- materials_base = list("flesh" = 1000)
- max_ammo = 10
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/pellets
- name = "box of pellets"
- desc = "A box containing small pellets for a pellet gun."
- icon_state = "pelletbox"
- caliber = "pellet"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/p_pellet
- materials_base = list(MAT_PLASTIC = 600)
- max_ammo = 50
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/mcompressedbio/compact
- max_ammo = 10
-
-/obj/item/ammo_magazine/mcompressedbio/large
- icon_state = "bio_large"
- max_ammo = 30
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/mcompressedbio/large/banana
- icon_state = "bio_large_banana"
-
-/obj/item/ammo_magazine/biovial
- name = "bio-vial (Liquid Wax)"
- desc = "Biological Munitions Vials, commonly referred to as bio-vials, contain liquid biomatter of some form, for use in exotic weapons systems. This one accepts wax globules."
- icon_state = "bio_vial"
- mag_type = MAGAZINE
- caliber = "apidean"
- ammo_type = /obj/item/ammo_casing/organic/wax
- materials_base = list("wax" = 1000)
- max_ammo = 10
- multiple_sprites = 1
-
-//Foam
-/obj/item/ammo_magazine/mfoam
- name = "abstract toy magazine"
- desc = "You shouldn't be seeing this, contact a Maintainer!"
- icon_state = "toy_pistol"
- mag_type = MAGAZINE
- materials_base = list(MAT_PLASTIC = 480)
- caliber = "foamdart"
- ammo_type = /obj/item/ammo_casing/foam
- max_ammo = 8
- multiple_sprites = 1
-
-//Foam Pistol
-/obj/item/ammo_magazine/mfoam/pistol
- name = "toy pistol magazine"
- desc = "A plastic pistol magazine for foam darts!"
-
-/obj/item/ammo_magazine/mfoam/pistol/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/mfoam/pistol/riot
- name = "toy pistol magazine (riot)"
- ammo_type = /obj/item/ammo_casing/foam/riot
-
-//Foam c20r
-/obj/item/ammo_magazine/mfoam/c20
- name = "toy c20r magazine"
- desc = "A plastic recreation of the classic c20r submachine gun."
- icon_state = "toy_c20"
- materials_base = list(MAT_PLASTIC = 1500)
- max_ammo = 20
-
-/obj/item/ammo_magazine/mfoam/c20/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/mfoam/c20/riot
- name = "toy c20r magazine (riot)"
- ammo_type = /obj/item/ammo_casing/foam/riot
-
-//Foam LMG
-/obj/item/ammo_magazine/mfoam/lmg
- name = "toy magazine box"
- desc = "A heavy plastic box designed to hold belts of foam darts! Wow!"
- icon_state = "toy_lmg"
- materials_base = list(MAT_PLASTIC = 10000)
- w_class = WEIGHT_CLASS_NORMAL
- max_ammo = 50
-
-/obj/item/ammo_magazine/mfoam/lmg/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/mfoam/lmg/riot
- name = "toy magazine box (riot)"
- ammo_type = /obj/item/ammo_casing/foam/riot
-
-//Foam SMGs
-/obj/item/ammo_magazine/mfoam/smg
- name = "toy submachine gun magazine"
- desc = "A plastic recreation of a double-stack submachine gun magazine."
- icon_state = "toy_smg"
- materials_base = list(MAT_PLASTIC = 1200)
- max_ammo = 20
-
-/obj/item/ammo_magazine/mfoam/smg/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/mfoam/smg/riot
- name = "toy submachine gun magazine (riot)"
- ammo_type = /obj/item/ammo_casing/foam/riot
-
-//shell holders
-
-/obj/item/ammo_magazine/shotholder
- name = "shotgun slug holder"
- desc = "A convenient pouch that holds 12 gauge shells."
- icon_state = "shotholder"
- caliber = "12g"
- ammo_type = null
- materials_base = list(MAT_STEEL = 1440)
- ammo_type = /obj/item/ammo_casing/a12g
- initial_ammo = 0
- max_ammo = 4
- multiple_sprites = 1
- var/marking_color
-
-/obj/item/ammo_magazine/shotholder/update_icon()
- . = ..()
- overlays.Cut()
- if(marking_color)
- var/image/I = image(icon, "shotholder-marking")
- I.color = marking_color
- overlays += I
-
-/obj/item/ammo_magazine/shotholder/full
- initial_ammo = 4
-
-/obj/item/ammo_magazine/shotholder/full/slug
- name = "shotgun slug holder (slug)"
- marking_color = PIPE_COLOR_BLACK
- ammo_type = /obj/item/ammo_casing/a12g
-
-/obj/item/ammo_magazine/shotholder/full/flare
- name = "shotgun slug holder (flare)"
- marking_color = COLOR_RED_GRAY
- ammo_type = /obj/item/ammo_casing/a12g/flare
-
-/obj/item/ammo_magazine/shotholder/full/buckshot
- name = "shotgun slug holder (buckshot)"
- marking_color = COLOR_RED
- ammo_type = /obj/item/ammo_casing/a12g/pellet
-
-/obj/item/ammo_magazine/shotholder/full/beanbag
- name = "shotgun slug holder (beanbag)"
- marking_color = COLOR_GREEN
- ammo_type = /obj/item/ammo_casing/a12g/beanbag
-
-/obj/item/ammo_magazine/shotholder/full/stun
- name = "shotgun slug holder (stun)"
- marking_color = PIPE_COLOR_YELLOW
- ammo_type = /obj/item/ammo_casing/a12g/stunshell
-
-
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 19d02f16283..c6d6b9ef896 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -325,7 +325,7 @@
SA_bonus_damage = 35 // 50 total on animals.
SA_vulnerability = MOB_CLASS_ANIMAL
-/obj/projectile/bullet/rifle/a127 // 14.5×114mm is bigger than a .50 BMG round.
+/obj/projectile/bullet/rifle/a12_7mm // 14.5×114mm is bigger than a .50 BMG round.
fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon.
damage = 80
stun = 3
diff --git a/code/modules/projectiles/unsorted/magnetic.dm b/code/modules/projectiles/unsorted/magnetic.dm
index fb3cecc666e..2da277715f0 100644
--- a/code/modules/projectiles/unsorted/magnetic.dm
+++ b/code/modules/projectiles/unsorted/magnetic.dm
@@ -1,13 +1,14 @@
/obj/item/magnetic_ammo
name = "flechette magazine"
desc = "A magazine containing steel flechettes."
- icon = 'icons/obj/ammo.dmi'
- icon_state = "5.56"
+
+ icon = 'icons/modules/projectiles/magazines/old_magazine_stick.dmi'
+ icon_state = "svtmag-1"
+
w_class = WEIGHT_CLASS_SMALL
materials_base = list(MAT_STEEL = 1800)
origin_tech = list(TECH_COMBAT = 1)
var/remaining = 9
- preserve_item = 1
/obj/item/magnetic_ammo/examine(mob/user, dist)
. = ..()
diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm
index 0b7db3ee822..9bd0d665fd5 100644
--- a/code/modules/random_map/drop/drop_types.dm
+++ b/code/modules/random_map/drop/drop_types.dm
@@ -62,10 +62,10 @@ var/global/list/datum/supply_drop_loot/supply_drop
/obj/item/storage/box/emps,
/obj/item/storage/box/flashbangs,
/obj/item/gun/ballistic/automatic/sts35,
- /obj/item/ammo_magazine/m762/ap,
- /obj/item/ammo_magazine/m762/ap,
+ /obj/item/ammo_magazine/a7_62mm/ap,
+ /obj/item/ammo_magazine/a7_62mm/ap,
/obj/item/gun/ballistic/colt,
- /obj/item/ammo_magazine/m45,
+ /obj/item/ammo_magazine/a45,
/obj/item/material/knife/tacknife/combatknife)
/datum/supply_drop_loot/heavy_warfare
@@ -83,8 +83,8 @@ var/global/list/datum/supply_drop_loot/supply_drop
/obj/item/clothing/accessory/storage/black_drop_pouches,
/obj/item/storage/backpack/dufflebag/sec,
/obj/item/gun/ballistic/automatic/bullpup,
- /obj/item/ammo_magazine/m762/ap,
- /obj/item/ammo_magazine/m762,
+ /obj/item/ammo_magazine/a7_62mm/ap,
+ /obj/item/ammo_magazine/a7_62mm,
/obj/item/shield/energy,
/obj/item/grenade/explosive/frag,
/obj/item/grenade/explosive/frag,
diff --git a/code/modules/research/designs/medical.dm b/code/modules/research/designs/medical.dm
index 31ba401b0a4..44babf4b377 100644
--- a/code/modules/research/designs/medical.dm
+++ b/code/modules/research/designs/medical.dm
@@ -133,7 +133,7 @@
id = "cell_medigun_mag_advanced"
req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 4, TECH_BIO = 7)
materials_base = list(MAT_STEEL = 5000, MAT_PLASTIC = 10000, MAT_GLASS = 5000, MAT_SILVER = 1500, MAT_GOLD = 1500, MAT_DIAMOND = 5000)
- build_path = /obj/item/ammo_magazine/cell_mag/medical/advanced
+ build_path = /obj/item/ammo_magazine/microbattery/medical/advanced
/datum/design/science/medigun_cell
abstract_type = /datum/design/science/medigun_cell
diff --git a/code/modules/research/designs/weapons.dm b/code/modules/research/designs/weapons.dm
index dc0a9de724b..350c6ea1ae3 100644
--- a/code/modules/research/designs/weapons.dm
+++ b/code/modules/research/designs/weapons.dm
@@ -92,7 +92,7 @@
desc = "A 21 round magazine for an advanced 9mm SMG."
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
materials_base = list(MAT_STEEL = 3750, MAT_SILVER = 100) // Requires silver for proprietary magazines! Or something.
- build_path = /obj/item/ammo_magazine/m9mmAdvanced
+ build_path = /obj/item/ammo_magazine/a9mm/advanced_smg
/datum/design/science/weapon/ballistic/ammo/techshell
design_name = "unloaded tech shell"
@@ -116,7 +116,7 @@
id = "m57x28mmp90"
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4)
materials_base = list(MAT_STEEL = 2250, MAT_PLASTIC = 1500, MAT_COPPER = 1000)
- build_path = /obj/item/ammo_magazine/m57x28mmp90
+ build_path = /obj/item/ammo_magazine/a5_7mm/p90
/datum/design/science/weapon/ballistic/ammo/m57x28mm
abstract_type = /datum/design/science/weapon/ballistic/ammo/m57x28mm
@@ -127,28 +127,28 @@
id = "ntles"
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4)
materials_base = list(MAT_STEEL = 1500, MAT_COPPER = 750)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/ap
design_name = "5.7 top-mounted magazine (AP)"
desc = "A standard capacity sidearm magazine (5.7x28mm armor-piercing)."
id = "ntlesap"
materials_base = list(MAT_STEEL = 1500, MAT_COPPER = 1000)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/ap
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/ap
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/hp
design_name = "5.7 top-mounted magazine (HP)"
desc = "A standard capacity sidearm magazine (5.7x28mm hollow point)."
id = "ntleshp"
materials_base = list(MAT_STEEL = 1500, MAT_COPPER = 750)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/hp
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/hp
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/hunter
design_name = "5.7 top-mounted magazine (Hunter)"
desc = "A standard capacity sidearm magazine (5.7x28mm hunter)."
id = "ntleshunter"
materials_base = list(MAT_STEEL = 1500, MAT_COPPER = 500)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/hunter
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/hunter
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/highcap
design_name = "5.7 highcap top-mounted magazine"
@@ -156,28 +156,28 @@
id = "ntleshc"
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4)
materials_base = list(MAT_STEEL = 2500, MAT_COPPER = 2000)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/highcap
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/highcap
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/highcap/ap
design_name = "5.7 highcap top-mounted magazine (AP)"
desc = "A high capacity sidearm magazine (5.7x28mm armor-piercing)."
id = "ntleshcap"
materials_base = list(MAT_STEEL = 2500, MAT_COPPER = 2500)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/highcap/ap
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/ap
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/highcap/hp
design_name = "5.7 highcap top-mounted magazine (HP)"
desc = "A high capacity sidearm magazine (5.7x28mm hollow point)."
id = "ntleshchp"
materials_base = list(MAT_STEEL = 2500, MAT_COPPER = 2000)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/highcap/hp
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/hp
/datum/design/science/weapon/ballistic/ammo/m57x28mm/ntles/highcap/hunter
design_name = "5.7 highcap top-mounted magazine (Hunter)"
desc = "A high capacity sidearm magazine (5.7x28mm hunter)."
id = "ntleshchunter"
materials_base = list(MAT_STEEL = 2500, MAT_COPPER = 1750)
- build_path = /obj/item/ammo_magazine/m57x28mm/ntles/highcap/hunter
+ build_path = /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/hunter
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven
design_name = "5.7 sidearm magazine"
@@ -185,28 +185,28 @@
id = "fiveseven"
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4)
materials_base = list(MAT_STEEL = 1250, MAT_COPPER = 750)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/ap
design_name = "5.7 sidearm magazine (AP)"
desc = "A standard capacity sidearm magazine (5.7x28mm armor-piercing)."
id = "fivesevenap"
materials_base = list(MAT_STEEL = 1250, MAT_COPPER = 1000)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/ap
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/ap
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/hp
design_name = "5.7 sidearm magazine (HP)"
desc = "A standard capacity sidearm magazine (5.7x28mm hollow point)."
id = "fivesevenhp"
materials_base = list(MAT_STEEL = 1250, MAT_COPPER = 750)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/hp
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/hp
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/hunter
design_name = "5.7 sidearm magazine (Hunter)"
desc = "A standard capacity sidearm magazine (5.7x28mm hunter)."
id = "fivesevenhunter"
materials_base = list(MAT_STEEL = 1250, MAT_COPPER = 250)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/hunter
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/hunter
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/highcap
design_name = "5.7 sidearm high-cap magazine"
@@ -214,28 +214,28 @@
id = "fivesevenhc"
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4)
materials_base = list(MAT_STEEL = 2000, MAT_COPPER = 750)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/highcap
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/highcap
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/highcap/ap
design_name = "5.7 sidearm high-cap magazine (AP)"
desc = "A high capacity sidearm magazine (5.7x28mm armor-piercing)."
id = "fivesevenhcap"
materials_base = list(MAT_STEEL = 2500, MAT_COPPER = 1000)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/ap
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/ap
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/highcap/hp
design_name = "5.7 sidearm high-cap magazine (HP)"
desc = "A high capacity sidearm magazine (5.7x28mm hollow point)."
id = "fivesevenhchp"
materials_base = list(MAT_STEEL = 2000, MAT_COPPER = 750)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/hp
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/hp
/datum/design/science/weapon/ballistic/ammo/m57x28mm/fiveseven/highcap/hunter
design_name = "5.7 sidearm high-cap magazine (Hunter)"
desc = "A high capacity sidearm magazine (5.7x28mm hunter)."
id = "fivesevenhchunter"
materials_base = list(MAT_STEEL = 2000, MAT_COPPER = 500)
- build_path = /obj/item/ammo_magazine/m57x28mm/fiveseven/highcap/hunter
+ build_path = /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/hunter
/datum/design/science/weapon/phase
abstract_type = /datum/design/science/weapon/phase
@@ -306,7 +306,7 @@
id = "dartgun_ammo_s"
req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
materials_base = list(MAT_STEEL = 50, MAT_GOLD = 30, MAT_SILVER = 30, MAT_GLASS = 50)
- build_path = /obj/item/ammo_casing/chemdart/small
+ build_path = /obj/item/ammo_casing/dart/chemdart/small
/datum/design/science/weapon/ammo/dartgunmag_med
id = "dartgun_mag_m"
@@ -318,7 +318,7 @@
id = "dartgun_ammo_m"
req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
materials_base = list(MAT_STEEL = 80, MAT_GOLD = 40, MAT_SILVER = 40, MAT_GLASS = 60)
- build_path = /obj/item/ammo_casing/chemdart
+ build_path = /obj/item/ammo_casing/dart/chemdart
/datum/design/science/weapon/melee
abstract_type = /datum/design/science/weapon/melee
@@ -411,14 +411,14 @@
id = "nsfw_prototype"
req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 7)
materials_base = list(MAT_STEEL = 10000, MAT_GLASS = 6000, MAT_PHORON = 8000, MAT_URANIUM = 4000)
- build_path = /obj/item/gun/ballistic/cell_loaded/combat/prototype
+ build_path = /obj/item/gun/ballistic/microbattery/combat/prototype
/datum/design/science/weapon/cell_based/prototype_nsfw_mag
design_name = "combat cell magazine"
id = "nsfw_mag_prototype"
req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 7)
materials_base = list(MAT_STEEL = 8000, MAT_GLASS = 4000, MAT_PHORON = 4000)
- build_path = /obj/item/ammo_magazine/cell_mag/combat/prototype
+ build_path = /obj/item/ammo_magazine/microbattery/combat/prototype
/datum/design/science/nsfw_cell
abstract_type = /datum/design/science/nsfw_cell
diff --git a/code/modules/vore/fluffstuff/custom_boxes.dm b/code/modules/vore/fluffstuff/custom_boxes.dm
index 58d18f6cf71..2d22f778eda 100644
--- a/code/modules/vore/fluffstuff/custom_boxes.dm
+++ b/code/modules/vore/fluffstuff/custom_boxes.dm
@@ -6,7 +6,7 @@
name = "Undefined Fluff Box"
desc = "This should have a description. Tell an admin."
max_items = 7
-
+
// END - DO NOT EDIT PROTOTYPE
@@ -175,8 +175,8 @@
name = "Sebastian's Lumoco Arms P3 Box"
starts_with = list(
/obj/item/gun/ballistic/pistol,
- /obj/item/ammo_magazine/m9mm/compact/flash,
- /obj/item/ammo_magazine/m9mm/compact/flash,
+ /obj/item/ammo_magazine/a9mm/compact/flash,
+ /obj/item/ammo_magazine/a9mm/compact/flash,
/obj/item/clothing/accessory/permit/gun/fluff/sebastian_aji)
/*
diff --git a/code/modules/vore/fluffstuff/custom_guns.dm b/code/modules/vore/fluffstuff/custom_guns.dm
deleted file mode 100644
index c63aab7a164..00000000000
--- a/code/modules/vore/fluffstuff/custom_guns.dm
+++ /dev/null
@@ -1,879 +0,0 @@
-/* TUTORIAL
- "icon" is the file with the HUD/ground icon for the item
- "icon_state" is the iconstate in this file for the item
- "icon_override" is the file with the on-mob icons, can be the same file
- "item_state" is the iconstate for the on-mob icons:
- item_state_s is used for worn uniforms on mobs
- item_state_r and item_state_l are for being held in each hand
-
- "item_state_slots" can replace "item_state", it is a list:
- item_state_slots["slotname1"] = "item state for that slot"
- item_state_slots["slotname2"] = "item state for that slot"
-
- on guns, in particular:
- item_state being null makes it look for exactly the icon_state in the on-mob file,
- including any 0,75,etc appended from the energy bar setting
- item_state being present prevents different mode sprites, sadly, but you may
- be able to override this on the gun itself with a proc
-*/
-
-/* TEMPLATE
-//ckey:Character Name
-/obj/item/gun/type/fluff/charactername
- name = ""
- desc = ""
-
- icon = 'icons/vore/custom_guns_vr.dmi'
- icon_state = "myicon"
-
- icon_override = 'icons/vore/custom_guns_vr.dmi'
- item_state = "myicon"
-
-*/
-
-
-////////////////////////////////////////////////////////////
-//////////////////// Projectile Weapons ////////////////////
-////////////////////////////////////////////////////////////
-// For general use
-/obj/item/gun/ballistic/automatic/battlerifle
- name = "\improper JSDF service rifle"
- desc = "You had your chance to be afraid before you joined my beloved Corps! But, to guide you back to the true path, I have brought this motivational device! Uses 9.5x40mm rounds."
- icon_state = "battlerifle"
- icon_override = 'icons/obj/gun/ballistic.dmi'
- item_state = "battlerifle_i"
- item_icons = null
- w_class = WEIGHT_CLASS_BULKY
- recoil = 2 // The battlerifle was known for its nasty recoil.
- max_shells = 36
- caliber = "9.5x40mm"
- origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
- magazine_type = /obj/item/ammo_magazine/m95
- allowed_magazines = list(/obj/item/ammo_magazine/m95)
- fire_sound = 'sound/weapons/battlerifle.ogg'
- load_method = MAGAZINE
- slot_flags = SLOT_BACK
- one_handed_penalty = 60 // The weapon itself is heavy
-
-/obj/item/gun/ballistic/automatic/battlerifle/update_icon()
- . = ..()
- update_held_icon()
-
-/obj/item/gun/ballistic/automatic/battlerifle/update_icon_state()
- . = ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m95))
- icon_state = "battlerifle"
- else
- icon_state = (ammo_magazine)? "battlerifle" : "battlerifle_empty"
-
-// For general use
-/obj/item/gun/ballistic/shotgun/pump/JSDF
- name = "\improper JSDF tactical shotgun"
- desc = "All you greenhorns who wanted to see Xenomorphs up close... this is your lucky day. Uses 12g rounds."
- icon_state = "haloshotgun"
- icon_override = 'icons/obj/gun/ballistic.dmi'
- item_state = "haloshotgun_i"
- item_icons = null
- ammo_type = /obj/item/ammo_casing/a12g
- max_shells = 12
-
-// For general use
-/obj/item/gun/ballistic/automatic/pdw
- name = "personal defense weapon"
- desc = "The X-9MM is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, but never caught on with Nanotrasen. Uses 9mm rounds."
- icon_state = "pdw"
- item_state = "c20r" // Placeholder
- w_class = WEIGHT_CLASS_NORMAL
- caliber = "9mm"
- origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
- slot_flags = SLOT_BELT
- load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mml
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm, /obj/item/ammo_magazine/m9mml)
-
- 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,-15,-30), dispersion=list(0.0, 0.6, 0.6))
- )
-
-/obj/item/gun/ballistic/automatic/pdw/update_icon()
- . = ..()
- update_held_icon()
-
-/obj/item/gun/ballistic/automatic/pdw/update_icon_state()
- . = ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m9mm))
- icon_state = "pdw-short"
- else
- icon_state = (ammo_magazine)? "pdw" : "pdw-empty"
-
-// For general use
-/obj/item/gun/energy/imperial
- name = "imperial energy pistol"
- desc = "An elegant weapon developed by the Imperium Auream. Their weaponsmiths have cleverly found a way to make a gun that is only about the size of an average energy pistol, yet with the fire power of a laser carbine."
- icon_state = "ge_pistol"
- item_state = "ge_pistol"
- fire_sound = 'sound/weapons/mandalorian.ogg'
- item_icons = list(SLOT_ID_RIGHT_HAND = 'icons/obj/gun/energy.dmi', SLOT_ID_LEFT_HAND = 'icons/obj/gun/energy.dmi') // WORK YOU FUCKING CUNT PIECE OF SHIT BASTARD STUPID BITCH ITEM ICON AAAAHHHH
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "ge_pistol_r", SLOT_ID_LEFT_HAND = "ge_pistol_l")
- slot_flags = SLOT_BELT
- w_class = WEIGHT_CLASS_NORMAL
- damage_force = 10
- origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2)
- materials_base = list(MAT_STEEL = 2000)
- projectile_type = /obj/projectile/beam/imperial
-/* CITADEL CHANGE - Removes Virgo Fluff
-// jertheace : Jeremiah 'Ace' Acacius
-/obj/item/gun/ballistic/shotgun/pump/USDF/fluff/ace
- name = "Ace's tactical shotgun" // D-model holds half as many shells as the normal version so as not OP as shit. Better than normal shotgun, worse than combat shotgun.
- desc = "Owned by the respected (or feared?) veteran Captain of the original NSS Adephagia. Inscribed on the barrel are the words \"Speak softly, and carry a big stick.\""
- ammo_type = /obj/item/ammo_casing/a12g/stunshell
- max_shells = 6
-
-// bwoincognito:Tasald Corlethian
-/obj/item/gun/ballistic/revolver/mateba/fluff/tasald_corlethian //Now that it is actually Single-Action and not hacky broken SA, I see no reason to nerf this down to .38. --Joan Risu
- name = "\improper \"Big Iron\" revolver"
- desc = "A .357 revolver for veteran rangers on the planet Orta. The right side of the handle has a logo for Quarion industries, and the left is the Rangers. The primary ammo for this gun is .357 rubber. According to the CentCom Chief of Security, this revolver was more controversial than it needed to be."
- icon = 'icons/vore/custom_guns_vr.dmi'
- icon_state = "tasaldrevolver"
- item_state = "revolver"
- fire_sound = 'sound/weapons/pistol.ogg'
- ammo_type = /obj/item/ammo_casing/a357/rubber //Like I said, no reason to nerf. --Joan Risu
- var/recentpump = 0
- var/cocksound = 'sound/weapons/revolvercock.ogg'
- consume_next_projectile()
- if(chambered)
- return chambered.BB
- to_chat(usr, "It's a single action revolver, pull the hammer back!")
- return null
- attack_self(mob/living/user as mob)
- if(world.time >= recentpump + 10)
- pump(user)
- recentpump = world.time
- proc/pump(mob/M as mob)
- playsound(M, cocksound, 60, 1)
- if(chambered)//We have a shell in the chamber
- chambered.loc = get_turf(src)//Eject casing
- chambered = null
- if(loaded.len)
- var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
- loaded -= AC //Remove casing from loaded list.
- chambered = AC
- update_icon()
-
-/obj/item/gun/ballistic/revolver/mateba/fluff/tasald_corlethian/attack_hand(mob/user, list/params)
- if(user.get_inactive_held_item() == src)
- unload_ammo(user, allow_dump = 1)
- else
- ..()
-
-// wankersonofjerkin : Glenn Pink
-/obj/item/gun/ballistic/revolver/fluff/admiral_pink_revolver
- name = "Admiral Pink's 'Devilgun'"
- desc = "You notice the serial number on the revolver is 666. The word 'Sin' is engraved on the blood-red rosewood grip. Uses .357 rounds." //Edgy, but based on real guns the player owns.
- icon = 'icons/vore/custom_guns_vr.dmi'
- icon_state = "ryan_winz"
- item_state = "revolver"
-
-/obj/item/gun/ballistic/revolver/fluff/admiral_pink_revolver/redemption
- name = "Admiral Pink's 'Redeemer'"
- desc = "You notice the serial number on the revolver is 667. The word 'Redemption' is engraved on dark rosewood grip. Uses .357 rounds." //Edgy, but based on real guns the player owns.
-
-// sasoperative : Joseph Skinner
-/obj/item/gun/ballistic/revolver/judge/fluff/sasoperative
- name = "\"The Jury\""
- desc = "A customized variant of the \"The Judge\" revolver sold by Cybersun Industries, built specifically for Joseph Skinner. Uses 12g shells."
- icon = 'icons/vore/custom_guns_vr.dmi'
- icon_state = "jury"
- item_state = "gun"
- ammo_type = /obj/item/ammo_casing/a12g/beanbag
-
-// Dhaeleena : Dhaeleena M'iar
-/obj/item/gun/ballistic/revolver/mateba/fluff/dhael
- name = "Dhaeleena's engraved mateba"
- desc = "This unique looking handgun is engraved with roses along the barrel and the cylinder as well as the initials DM under the grip. Along the middle of the barrel an engraving shows the words 'Mateba Unica 6'. Uses .357 rounds."
- icon_state = "mateba"
- origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
- ammo_type = /obj/item/ammo_casing/a357/stun
-
-// SilencedMP5A5 : Serdykov Antoz
-/obj/item/gun/ballistic/colt/fluff/serdy
- name = "Raikov PPS/45"
- desc = "An expertly crafted and reliable .45 sidearm with a 7 round single-stack magazine, originally built and in 2369 for frontier men and peacekeepers. The frame and slide are nickel plated, and it has a synthetic black ivory grip. The words 'Krasnaya Raketa' are engraved on the slide near the muzzle. It's relatively thin, but heavy. It also has an ambidextrous mag release and safety lever, making it grippable in either hand comfortably."
- icon = 'icons/vore/custom_guns_vr.dmi'
- item_state = "raikov"
- icon_state = "raikov"
- fire_sound = 'sound/weapons/45pistol_vr.ogg'
- magazine_type = /obj/item/ammo_magazine/m45/rubber
-
-/* //Commented out due to weapon change.
-/obj/item/gun/ballistic/revolver/detective/fluff/serdy //This forces it to be .38 bullets only
- name = "Vintage S&W Model 10"
- desc = "It's a classic S&W Model 10 revolver. This one in particular is beautifully restored with a chromed black frame and cylinder, and a nice redwood grip. The name 'Serdykov A.' is engraved into the base of the grip."
- icon = 'icons/vore/custom_guns_vr.dmi'
- item_state = "model10"
- icon_state = "model10"
- fire_sound = 'sound/weapons/deagle.ogg'
- origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
- ammo_type = /obj/item/ammo_casing/a38r //Rubber rounds.
-*/
-
-// LuminescentRing : Briana Moore
-/obj/item/gun/ballistic/derringer/fluff/briana
- name = "second-hand derringer"
- desc = "It's a palm sized gun. One of the few things that won't break an angel's wrists. Uses 10mm rounds."
- caliber = "10mm"
- ammo_type = /obj/item/ammo_casing/a10mm
-END OF CITADEL CHANGES */
-// For general use
-/obj/item/gun/ballistic/automatic/stg
- name = "\improper Sturmgewehr"
- desc = "An STG-560 built by RauMauser. Experience the terror of the Siegfried line, redone for the 26th century! The Kaiser would be proud. Uses unique 7.92x33mm Kurz rounds."
- icon_state = "stg60"
- item_state = "arifle"
- w_class = WEIGHT_CLASS_BULKY
- max_shells = 30
- caliber = "7.92x33mm"
- origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ILLEGAL = 6)
- magazine_type = /obj/item/ammo_magazine/mtg
- allowed_magazines = list(/obj/item/ammo_magazine/mtg)
- load_method = MAGAZINE
-
-/obj/item/gun/ballistic/automatic/stg/update_icon()
- . = ..()
- update_held_icon()
-
-/obj/item/gun/ballistic/automatic/stg/update_icon_state()
- . = ..()
- icon_state = (ammo_magazine)? "stg60" : "stg60-e"
- item_state = (ammo_magazine)? "arifle" : "arifle-e"
-
-//-----------------------Tranq Gun----------------------------------
-/obj/item/gun/ballistic/dartgun/tranq
- name = "tranquilizer gun"
- desc = "A gas-powered dart gun designed by the National Armory of Gaia. This gun is used primarily by United Federation special forces for Tactical Espionage missions. Don't forget your bandana."
- icon_state = "tranqgun"
- item_state = null
-
- caliber = "dart"
- fire_sound = 'sound/weapons/empty.ogg'
- fire_sound_text = "a metallic click"
- recoil = 0
- silenced = 1
- load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/chemdart
- allowed_magazines = list(/obj/item/ammo_magazine/chemdart)
- auto_eject = 0
-
-// Removed because gun64_vr.dmi guns don't work.
-/*//-----------------------UF-ARC----------------------------------
-/obj/item/gun/ballistic/automatic/carbine/fluff/ufarc
- name = "UF-ARC"
- desc = "The UF-ARC is a lightweight assault rifle manufactured by the National Armory of Gaia and sold almost exclusively to the United Federation's standing army, the Military Assault Command Operations Department (MACOs)."
- icon = 'icons/obj/gun64_vr.dmi'
- icon_state = "ufarc"
- icon_override = 'icons/obj/gun_vr.dmi'
- item_state = "battlerifle_i"
- item_icons = null
- pixel_x = -16
-
-/obj/item/gun/ballistic/automatic/carbine/fluff/ufarc/update_icon(var/ignore_inhands)
- ..()
- // TODO - Fix this for spriting different size magazines
- icon_state = (ammo_magazine)? "ufarc" : "ufarc-empty"
- item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
- if(!ignore_inhands) update_held_icon()
-
-
-
-//-----------------------G44----------------------------------
-/obj/item/gun/ballistic/automatic/carbine/fluff/g44
- name = "G44 Rifle"
- desc = "The G44 is a lightweight assault rifle manufactured by the National Armory of Gaia and sold almost exclusively to the United Federation's standing army, the Military Assault Command Operations Department (MACOs)."
- icon = 'icons/obj/gun64_vr.dmi'
- icon_state = "g44"
- item_state = "bullpup"
- pixel_x = -16
-
-/obj/item/gun/ballistic/automatic/carbine/fluff/g44/update_icon(var/ignore_inhands)
- ..()
- // TODO - Fix this for spriting different size magazines
- icon_state = (ammo_magazine)? "g44" : "g44-empty"
- item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
- if(!ignore_inhands) update_held_icon()
-
-//-----------------------G44 Energy Variant--------------------
-/obj/item/gun/energy/gun/burst/g44e
- name = "G44 Energy Rifle"
- desc = "The G44 Energy is a laser variant of the G44 lightweight assault rifle manufactured by the National Armory of Gaia. Though almost exclusively to the United Federation's Military Assault Command Operations Department (MACOs) and Starfleet, it is occassionally sold to security departments for their stun capabilities."
- icon = 'icons/obj/gun64_vr.dmi'
- icon_state = "g44estun100"
- item_state = "energystun100" //This is temporary.
- fire_sound = 'sound/weapons/Taser.ogg'
- charge_cost = 100
- damage_force = 8
- w_class = WEIGHT_CLASS_BULKY
- fire_delay = 6
- pixel_x = -16
-
- projectile_type = /obj/projectile/beam/stun/weak
- origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3)
- modifystate = "g44estun"
-
- one_handed_penalty = 60
-
- firemodes = list(
- list(mode_name="stun", burst=1, projectile_type=/obj/projectile/beam/stun/weak, modifystate="g44estun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 100),
- list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/projectile/beam/stun/weak, modifystate="g44estun", fire_sound='sound/weapons/Taser.ogg'),
- list(mode_name="lethal", burst=1, projectile_type=/obj/projectile/beam/burstlaser, modifystate="g44ekill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 200),
- list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/projectile/beam/burstlaser, modifystate="g44ekill", fire_sound='sound/weapons/Laser.ogg'),
- )*/
-
-/* CITADEL CHANGE - Removes Virgo Fluff
-// molenar:Kari Akiren
-/obj/item/gun/ballistic/shotgun/pump/rifle/fluff/kari_akiren
- name = "clockwork rifle"
- desc = "Brass, copper, and lots of gears. Well lubricated for fluid movement as each round is loaded, locked, and fired. Just like clockwork."
- icon = 'icons/vore/custom_guns_vr.dmi'
- icon_state = "clockworkrifle_icon"
- icon_override = 'icons/vore/custom_guns_vr.dmi'
- item_state = "clockworkrifle"
- item_icons = null
-
-/* Permit Expired
-//Razerwing:Archer Maximus
-/obj/item/gun/ballistic/colt/fluff/archercolt
- name = "\improper MEUSOC .45"
- desc = "Some serious drywall work, coming up!"
-*/
-//hzdonut:Jesse Soemmer
-/obj/item/gun/ballistic/revolver/fluff/jesselemat
- name = "Modified LeMat"
- desc = "The LeMat Revolver is a 9 shot revolver with a secondary firing barrel for loading shotgun shells. Uses .38-Special and 12g rounds depending on the barrel. This one appears to have had it's secondary barrel sealed off and looks to be in pristine condition. Either it's brand new, or its owner takes very good care of it."
- icon_state = "lemat"
- max_shells = 9
- caliber = ".38"
- ammo_type = /obj/item/ammo_casing/a38
- preserve_item = FALSE
-END OF CITADEL CHANGES */
-//////////////////// Energy Weapons ////////////////////
-
-// ------------ Energy Luger ------------
-/obj/item/gun/energy/gun/eluger
- name = "energy Luger"
- desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing for rapid follow-up shots. It also has the ability to toggle between stun and kill."
- icon_state = "elugerstun100"
- item_state = "gun"
- fire_delay = null // Lugers are quite comfortable to shoot, thus allowing for more controlled follow-up shots. Rate of fire similar to a laser carbine.
- battery_lock = 1 // In exchange for balance, you cannot remove the battery. Also there's no sprite for that and I fucking suck at sprites. -Ace
- origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
- modifystate = "elugerstun"
- fire_sound = 'sound/weapons/Taser.ogg'
- firemodes = list(
- list(mode_name="stun", charge_cost=120,projectile_type=/obj/projectile/beam/stun, modifystate="elugerstun", fire_sound='sound/weapons/Taser.ogg'),
- list(mode_name="lethal", charge_cost=240,projectile_type=/obj/projectile/beam/eluger, modifystate="elugerkill", fire_sound='sound/weapons/eluger.ogg'),
- )
-
-//////////////////// Eris Ported Guns ////////////////////
-//HoS Gun
-/*/obj/item/gun/ballistic/lamia
- name = "FS HG .44 \"Lamia\""
- desc = "Uses .44 rounds."
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "Headdeagle"
- item_state = "revolver"
- fire_sound = 'sound/weapons/Gunshot.ogg'
- caliber = ".44"
- magazine_type = /obj/item/ammo_magazine/m44/rubber
- allowed_magazines = list(/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44/rubber)
- load_method = MAGAZINE
- auto_eject = 1
- auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
- origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4)
-
-/obj/item/gun/ballistic/lamia/update_icon()
- cut_overlay()
- if(!ammo_magazine)
- return
- var/ratio = ammo_magazine.stored_ammo.len * 100 / ammo_magazine.max_ammo
- ratio = round(ratio, 33)
- add_overlay("deagle_[ratio]")*/ // Fugly.
-
-
-//Civilian gun
-/obj/item/gun/ballistic/giskard
- name = "\improper \"Giskard\" holdout pistol"
- desc = "The FS HG .380 \"Giskard\" can even fit into the pocket! Uses .380 rounds."
- icon_state = "giskardcivil"
- caliber = ".380"
- magazine_type = /obj/item/ammo_magazine/m380
- allowed_magazines = list(/obj/item/ammo_magazine/m380)
- load_method = MAGAZINE
- w_class = WEIGHT_CLASS_SMALL
- fire_sound = 'sound/weapons/gunshot_pathetic.ogg'
- origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3)
-
-/obj/item/gun/ballistic/giskard/update_icon_state()
- . = ..()
- if(ammo_magazine && ammo_magazine.stored_ammo.len)
- icon_state = "giskardcivil"
- else
- icon_state = "giskardcivil_empty"
-
-//Not so civilian gun
-/obj/item/gun/ballistic/giskard/olivaw
- name = "\improper \"Olivaw\" holdout burst-pistol"
- desc = "The FS HG .380 \"Olivaw\" is a more advanced version of the \"Giskard\". This one seems to have a two-round burst-fire mode. Uses .380 rounds."
- icon_state = "olivawcivil"
- firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=1.2, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="2-round bursts", burst=2, fire_delay=0.2, move_delay=4, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)),
- )
-
-/obj/item/gun/ballistic/giskard/olivaw/update_icon_state()
- . = ..()
- if(ammo_magazine && ammo_magazine.stored_ammo.len)
- icon_state = "olivawcivil"
- else
- icon_state = "olivawcivil_empty"
-
-//Detective gun
-/obj/item/gun/ballistic/revolver/consul
- name = "\improper \"Consul\" Revolver"
- desc = "Are you feeling lucky, punk? Uses .44 rounds."
- icon_state = "inspector"
- item_state = "revolver"
- caliber = ".44"
- ammo_type = /obj/item/ammo_casing/a44/rubber
- handle_casings = CYCLE_CASINGS
- origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
-
-/obj/item/gun/ballistic/revolver/consul/update_overlays()
- . = ..()
- if(loaded.len==0)
- . += "inspector_off"
- else
- . += "inspector_on"
-
-// No idea what this is for.
-/obj/item/gun/ballistic/automatic/sol
- name = "\improper \"Sol\" SMG"
- desc = "The FS 9x19mm \"Sol\" is a compact and reliable submachine gun. Uses 9mm rounds."
- icon_state = "SMG-IS"
- item_state = "wt550"
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BELT
- caliber = "9mm"
- magazine_type = /obj/item/ammo_magazine/m9mm
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm)
- load_method = MAGAZINE
- multi_aim = 1
- burst_delay = 2
- origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
- 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,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
- )
-
-/obj/item/gun/ballistic/automatic/sol/proc/update_charge()
- if(!ammo_magazine)
- return
- var/ratio = ammo_magazine.stored_ammo.len / ammo_magazine.max_ammo
- if(ratio < 0.25 && ratio != 0)
- ratio = 0.25
- ratio = round(ratio, 0.25) * 100
- add_overlay("smg_[ratio]")
-
-/obj/item/gun/ballistic/automatic/sol/update_icon()
- icon_state = (ammo_magazine)? "SMG-IS" : "SMG-IS-empty"
- cut_overlay()
- update_charge()
-
-//HoP gun
-/obj/item/gun/energy/gun/martin
- name = "holdout energy gun"
- desc = "The FS PDW E \"Martin\" is small holdout e-gun. Don't miss!"
- icon_state = "PDW"
- item_state = "gun"
- w_class = WEIGHT_CLASS_SMALL
- projectile_type = /obj/projectile/beam/stun
- charge_cost = 1200
- charge_meter = 0
- modifystate = null
- battery_lock = 1
- fire_sound = 'sound/weapons/Taser.ogg'
- origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
- firemodes = list(
- list(mode_name="stun", projectile_type=/obj/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', charge_cost = 600),
- list(mode_name="lethal", projectile_type=/obj/projectile/beam, fire_sound='sound/weapons/Laser.ogg', charge_cost = 1200),
- )
-
-/obj/item/gun/energy/gun/martin/update_overlays()
- . = ..()
- var/datum/firemode/current_mode = firemodes[sel_mode]
- switch(current_mode.name)
- if("stun")
- . += "taser_pdw"
- if("lethal")
- . += "lazer_pdw"
-
-/////////////////////////////////////////////////////
-//////////////////// Custom Ammo ////////////////////
-/////////////////////////////////////////////////////
-//---------------- Beams ----------------
-/obj/projectile/beam/eluger
- name = "laser beam"
- icon_state = "xray"
- light_color = "#00FF00"
- muzzle_type = /obj/effect/projectile/muzzle/xray
- tracer_type = /obj/effect/projectile/tracer/xray
- impact_type = /obj/effect/projectile/impact/xray
-
-/obj/projectile/beam/imperial
- name = "laser beam"
- fire_sound = 'sound/weapons/mandalorian.ogg'
- icon_state = "darkb"
- light_color = "#8837A3"
- muzzle_type = /obj/effect/projectile/muzzle/darkmatter
- tracer_type = /obj/effect/projectile/tracer/darkmatter
- impact_type = /obj/effect/projectile/impact/darkmatter
-
-/obj/projectile/beam/stun/kin21
- name = "kinh21 stun beam"
- icon_state = "omnilaser"
- light_color = "#0000FF"
- muzzle_type = /obj/effect/projectile/muzzle/laser_omni
- tracer_type = /obj/effect/projectile/tracer/laser_omni
- impact_type = /obj/effect/projectile/impact/laser_omni
-
-//--------------- StG-60 ----------------
-/obj/item/ammo_magazine/m792
- name = "box mag (7.92x33mm Kurz)"
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "stg_30rnd"
- caliber = "7.92x33mm"
- ammo_type = /obj/item/ammo_casing/a792
- max_ammo = 30
- mag_type = MAGAZINE
-
-/obj/item/ammo_casing/a792
- desc = "A 7.92x33mm Kurz casing."
- icon_state = "rifle-casing"
- caliber = "7.92x33mm"
- projectile_type = /obj/projectile/bullet/rifle/a762
-
-/obj/item/ammo_magazine/mtg/empty
- initial_ammo = 0
-
-//------------- Battlerifle -------------
-/obj/item/ammo_magazine/m95
- name = "box mag (9.5x40mm)"
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "battlerifle"
- caliber = "9.5x40mm"
- ammo_type = /obj/item/ammo_casing/a95
- max_ammo = 36
- mag_type = MAGAZINE
- multiple_sprites = 1
-
-/obj/item/ammo_casing/a95
- desc = "A 9.5x40mm bullet casing."
- icon_state = "rifle-casing"
- caliber = "9.5x40mm"
- projectile_type = /obj/projectile/bullet/rifle/a95
-
-/obj/projectile/bullet/rifle/a95
- damage = 40
-
-/obj/item/ammo_magazine/m95/empty
- initial_ammo = 0
-
-//---------------- PDW ------------------
-/obj/item/ammo_magazine/m9mml
- name = "\improper SMG magazine (9mm)"
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "smg"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- materials_base = list(MAT_STEEL = 1800)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/a9mm
- max_ammo = 30
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/m9mml/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/m9mml/ap
- name = "\improper SMG magazine (9mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a9mm/ap
-
-/* Seems to have been de-coded?
-/obj/item/ammo_magazine/m9mml/flash
- name = "\improper SMG magazine (9mm flash)"
- ammo_type = /obj/item/ammo_casing/a9mmf
-
-/obj/item/ammo_magazine/m9mml/rubber
- name = "\improper SMG magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/a9mmr
-
-/obj/item/ammo_magazine/m9mml/practice
- name = "\improper SMG magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/a9mmp
-*/
-
-//.357 special ammo
-/obj/item/ammo_magazine/s357/stun
- name = "speedloader (.357 stun)"
- desc = "A speedloader for .357 revolvers."
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "s357"
- caliber = ".357"
- ammo_type = /obj/item/ammo_casing/a357/stun
-
-
-/obj/item/ammo_casing/a357/stun
- desc = "A .357 stun bullet casing."
- caliber = ".357"
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "stun357"
- projectile_type = /obj/projectile/energy/electrode/stunshot/strong
-
-/obj/item/ammo_magazine/s357/rubber
- name = "speedloader (.357 rubber)"
- desc = "A speedloader for .357 revolvers."
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "r357"
- caliber = ".357"
- ammo_type = /obj/item/ammo_casing/a357/rubber
-
-
-/obj/item/ammo_casing/a357/rubber
- desc = "A .357 rubber bullet casing."
- caliber = ".357"
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "rubber357"
- projectile_type = /obj/projectile/bullet/pistol/rubber/strong
-
-/obj/item/ammo_magazine/s357/flash
- name = "speedloader (.357 flash)"
- desc = "A speedloader for .357 revolvers."
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "f357"
- caliber = ".357"
- ammo_type = /obj/item/ammo_casing/a357/flash
-
-/obj/item/ammo_casing/a357/flash
- desc = "A .357 flash bullet casing."
- caliber = ".357"
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "flash357"
- projectile_type = /obj/projectile/energy/flash/strong
-
-//.380
-/obj/item/ammo_casing/a380
- desc = "A .380 bullet casing."
- caliber = ".380"
- projectile_type = /obj/projectile/bullet/pistol
-
-/obj/item/ammo_magazine/m380
- name = "magazine (.380)"
- icon_state = "9x19p"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- materials_base = list(MAT_STEEL = 480)
- caliber = ".380"
- ammo_type = /obj/item/ammo_casing/a380
- max_ammo = 8
- multiple_sprites = 1
-
-//.44
-/obj/item/ammo_casing/a44/rubber
- icon_state = "r-casing"
- desc = "A .44 rubber bullet casing."
- projectile_type = /obj/projectile/bullet/pistol/rubber/strong
-
-/obj/item/ammo_magazine/m44/rubber
- desc = "A magazine for .44 less-than-lethal ammo."
- ammo_type = /obj/item/ammo_casing/a44/rubber
-
-//.44 speedloaders
-/obj/item/ammo_magazine/s44
- name = "speedloader (.44)"
- desc = "A speedloader for .44 revolvers."
- icon = 'icons/obj/ammo_vr.dmi'
- icon_state = "s357"
- caliber = ".44"
- materials_base = list(MAT_STEEL = 1260)
- ammo_type = /obj/item/ammo_casing/a44
- max_ammo = 6
- multiple_sprites = 1
- mag_type = SPEEDLOADER
-
-/obj/item/ammo_magazine/s44/rubber
- name = "speedloader (.44 rubber)"
- icon_state = "r357"
- ammo_type = /obj/item/ammo_casing/a44/rubber
-
-//Expedition pistol
-/obj/item/gun/energy/frontier
- name = "Expedition Crank Phaser"
- desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization."
- icon_state = "phaser"
- item_state = "phaser"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "phaser", SLOT_ID_LEFT_HAND = "phaser", "SLOT_ID_BELT" = "phaser")
- fire_sound = 'sound/weapons/laser_rifle_1.wav'
- origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_POWER = 4)
- charge_cost = 300
- battery_lock = 1
-
- var/recharging = 0
- var/phase_power = 75
-
- projectile_type = /obj/projectile/beam
- firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/projectile/beam, charge_cost = 300),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/projectile/beam/weaklaser, charge_cost = 60),
- )
-
-/obj/item/gun/energy/frontier/unload_ammo(var/mob/user)
- if(recharging)
- return
- recharging = 1
- update_icon()
- user.visible_message("[user] opens \the [src] and starts pumping the handle.", \
- "You open \the [src] and start pumping the handle.")
- while(recharging)
- if(!do_after(user, 10, src))
- break
- playsound(get_turf(src),'sound/items/change_drill.ogg',25,1)
- if(power_supply.give(phase_power) < phase_power)
- break
-
- recharging = 0
- update_icon()
-
-/obj/item/gun/energy/frontier/update_icon()
- if(recharging)
- icon_state = "[initial(icon_state)]_pump"
- update_held_icon()
- return
- ..()
-
-/obj/item/gun/energy/frontier/emp_act(severity)
- return ..(severity+2)
-
-/obj/item/gun/energy/frontier/legacy_ex_act() //|rugged|
- return
-
-/obj/item/gun/energy/frontier/locked
- desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- pin = /obj/item/firing_pin/explorer
-
-//Phaser Carbine - Reskinned phaser
-/obj/item/gun/energy/frontier/locked/carbine
- name = "Expedition Phaser Carbine"
- desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- icon_state = "carbinekill"
- item_state = "retro"
- item_icons = list(SLOT_ID_LEFT_HAND = 'icons/mob/items/lefthand_guns.dmi', SLOT_ID_RIGHT_HAND = 'icons/mob/items/righthand_guns.dmi')
-
- modifystate = "carbinekill"
- firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/projectile/beam, modifystate="carbinekill", charge_cost = 300),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/projectile/beam/weaklaser, modifystate="carbinestun", charge_cost = 60),
-
- )
-
-/obj/item/gun/energy/frontier/locked/carbine/update_icon_state()
- . = ..()
- if(recharging)
- icon_state = "[modifystate]_pump"
- update_held_icon()
-
-//Expeditionary Holdout Phaser Pistol
-/obj/item/gun/energy/frontier/locked/holdout
- name = "Holdout Phaser Pistol"
- desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- icon = 'icons/obj/gun/energy.dmi'
- icon_state = "holdoutkill"
- item_state = null
- fire_sound = 'sound/weapons/laser_holdout_1.wav'
- phase_power = 100
-
- w_class = WEIGHT_CLASS_SMALL
- charge_cost = 600
- modifystate = "holdoutkill"
- firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/projectile/beam, modifystate="holdoutkill", charge_cost = 600),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/projectile/beam/weaklaser, modifystate="holdoutstun", charge_cost = 120),
- list(mode_name="stun", fire_delay=12, projectile_type=/obj/projectile/beam/stun/med, modifystate="holdoutshock", charge_cost = 300),
- )
-
-/obj/item/gun/energy/frontier/taj
- name = "Adhomai crank laser"
- desc = "The \"Icelance\" crank charged laser rifle, produced by the Hadii-Wrack group for the People's Republic of Adhomai's Grand People's Army."
- icon = 'icons/obj/gun/energy.dmi'
- icon_state = "phaser-taj"
- item_state = "phaser-taj"
- wielded_item_state = "phaser-taj"
- charge_cost = 600
-
- projectile_type = /obj/projectile/beam/midlaser
-
-
- firemodes = list(
- )
-
-/obj/item/gun/energy/frontier/taj/unload_ammo(var/mob/user)
- if(recharging)
- return
- recharging = 1
- update_icon()
- user.visible_message("[user] begins to turn the crank of \the [src].", \
- "You begins to turn the crank of \the [src].")
- while(recharging)
- if(!do_after(user, 10, src))
- break
- playsound(get_turf(src),'sound/items/change_drill.ogg',25,1)
- if(power_supply.give(phase_power) < phase_power)
- break
-
- recharging = 0
- update_icon()
-
-/obj/item/gun/energy/hardlight_bow
- name = "hardlight bow"
- desc = "An experimental, unlicensed design from Haephestus that never actually went anywhere; the idea of a crankable ion weapon was of interest, but the lack of practicality made it undesirable. \n \n \"...and his music was electric.\""
- icon = 'icons/obj/gun/energy.dmi'
- icon_state = "bow_hardlight"
- item_state = "bow_pipe"
- slot_flags = SLOT_BACK | SLOT_BELT
- charge_cost = 1200
- battery_lock = 1
- pin = /obj/item/firing_pin/explorer
- projectile_type = /obj/projectile/ion
-
-
- var/recharging = 0
- var/phase_power = 150
-
-
-/obj/item/gun/energy/hardlight_bow/unload_ammo(var/mob/user)
- if(recharging)
- return
- recharging = 1
- user.visible_message("[user] begins to tighten \the [src]'s electric bowstring.", \
- "You begin to tighten \the [src]'s electric bowstring")
- while(recharging)
- if(!do_after(user, 10, src))
- break
- playsound(get_turf(src),'sound/weapons/hardlight_bow_charge.ogg',25,1)
- if(power_supply.give(phase_power) < phase_power)
- break
-
- recharging = 0
-
-
-
-
diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm
index 4cfb15bcc9b..561cc0e4946 100644
--- a/code/modules/xenoarcheaology/finds/find_spawning.dm
+++ b/code/modules/xenoarcheaology/finds/find_spawning.dm
@@ -323,7 +323,7 @@
//33% chance to be able to reload the gun with human ammunition
if(prob(66))
- new_gun.caliber = "999"
+ new_gun.regex_this_caliber = null
//33% chance to fill it with a random amount of bullets
new_gun.max_shells = rand(1,12)
diff --git a/icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi b/icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi
new file mode 100644
index 00000000000..d763baecaf6
Binary files /dev/null and b/icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi differ
diff --git a/icons/content/factions/corporations/gorlex/items/guns/wild_hunt.dmi b/icons/content/factions/corporations/gorlex/items/guns/wild_hunt.dmi
new file mode 100644
index 00000000000..5c64b9d3fe0
Binary files /dev/null and b/icons/content/factions/corporations/gorlex/items/guns/wild_hunt.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index c2f51ff9d9d..d331db97dd5 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 670767a6eac..1a2826d0120 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/modules/projectiles/casings/a10g.dmi b/icons/modules/projectiles/casings/a10g.dmi
new file mode 100644
index 00000000000..fc4dd598f1f
Binary files /dev/null and b/icons/modules/projectiles/casings/a10g.dmi differ
diff --git a/icons/modules/projectiles/casings/a12_7mm.dmi b/icons/modules/projectiles/casings/a12_7mm.dmi
new file mode 100644
index 00000000000..7ee9b2f4d9c
Binary files /dev/null and b/icons/modules/projectiles/casings/a12_7mm.dmi differ
diff --git a/icons/modules/projectiles/casings/a12g.dmi b/icons/modules/projectiles/casings/a12g.dmi
new file mode 100644
index 00000000000..4e7a968d378
Binary files /dev/null and b/icons/modules/projectiles/casings/a12g.dmi differ
diff --git a/icons/modules/projectiles/casings/arrow.dmi b/icons/modules/projectiles/casings/arrow.dmi
new file mode 100644
index 00000000000..3f6252358b2
Binary files /dev/null and b/icons/modules/projectiles/casings/arrow.dmi differ
diff --git a/icons/modules/projectiles/casings/bio.dmi b/icons/modules/projectiles/casings/bio.dmi
new file mode 100644
index 00000000000..f5c554ef722
Binary files /dev/null and b/icons/modules/projectiles/casings/bio.dmi differ
diff --git a/icons/modules/projectiles/casings/blunderbuss.dmi b/icons/modules/projectiles/casings/blunderbuss.dmi
new file mode 100644
index 00000000000..4d81d57cc12
Binary files /dev/null and b/icons/modules/projectiles/casings/blunderbuss.dmi differ
diff --git a/icons/modules/projectiles/casings/foam.dmi b/icons/modules/projectiles/casings/foam.dmi
new file mode 100644
index 00000000000..5a84873c5d0
Binary files /dev/null and b/icons/modules/projectiles/casings/foam.dmi differ
diff --git a/icons/modules/projectiles/casings/misc.dmi b/icons/modules/projectiles/casings/misc.dmi
new file mode 100644
index 00000000000..cf74d73796c
Binary files /dev/null and b/icons/modules/projectiles/casings/misc.dmi differ
diff --git a/icons/modules/projectiles/casings/modular_cased_unused.dmi b/icons/modules/projectiles/casings/modular_cased_unused.dmi
new file mode 100644
index 00000000000..bf4e01ca840
Binary files /dev/null and b/icons/modules/projectiles/casings/modular_cased_unused.dmi differ
diff --git a/icons/modules/projectiles/casings/modular_caseless_unused.dmi b/icons/modules/projectiles/casings/modular_caseless_unused.dmi
new file mode 100644
index 00000000000..9c403e973da
Binary files /dev/null and b/icons/modules/projectiles/casings/modular_caseless_unused.dmi differ
diff --git a/icons/modules/projectiles/casings/modular_grenades_unused.dmi b/icons/modules/projectiles/casings/modular_grenades_unused.dmi
new file mode 100644
index 00000000000..fdc259f0ee5
Binary files /dev/null and b/icons/modules/projectiles/casings/modular_grenades_unused.dmi differ
diff --git a/icons/modules/projectiles/casings/modular_rocket_unused.dmi b/icons/modules/projectiles/casings/modular_rocket_unused.dmi
new file mode 100644
index 00000000000..923ff5bca67
Binary files /dev/null and b/icons/modules/projectiles/casings/modular_rocket_unused.dmi differ
diff --git a/icons/modules/projectiles/casings/musket.dmi b/icons/modules/projectiles/casings/musket.dmi
new file mode 100644
index 00000000000..c1ded1481b5
Binary files /dev/null and b/icons/modules/projectiles/casings/musket.dmi differ
diff --git a/icons/modules/projectiles/casings/phoron.dmi b/icons/modules/projectiles/casings/phoron.dmi
new file mode 100644
index 00000000000..cf74d73796c
Binary files /dev/null and b/icons/modules/projectiles/casings/phoron.dmi differ
diff --git a/icons/modules/projectiles/casings/slim.dmi b/icons/modules/projectiles/casings/slim.dmi
new file mode 100644
index 00000000000..034c040811d
Binary files /dev/null and b/icons/modules/projectiles/casings/slim.dmi differ
diff --git a/icons/modules/projectiles/casings/syringe.dmi b/icons/modules/projectiles/casings/syringe.dmi
new file mode 100644
index 00000000000..9ba152ac1bb
Binary files /dev/null and b/icons/modules/projectiles/casings/syringe.dmi differ
diff --git a/icons/modules/projectiles/eris_ammo_unused.dmi b/icons/modules/projectiles/eris_ammo_unused.dmi
new file mode 100644
index 00000000000..6134a85748b
Binary files /dev/null and b/icons/modules/projectiles/eris_ammo_unused.dmi differ
diff --git a/icons/modules/projectiles/legacy/ammo_box.dmi b/icons/modules/projectiles/legacy/ammo_box.dmi
new file mode 100644
index 00000000000..92504791e72
Binary files /dev/null and b/icons/modules/projectiles/legacy/ammo_box.dmi differ
diff --git a/icons/modules/projectiles/legacy/microbattery_old.dmi b/icons/modules/projectiles/legacy/microbattery_old.dmi
new file mode 100644
index 00000000000..4a58d39e35d
Binary files /dev/null and b/icons/modules/projectiles/legacy/microbattery_old.dmi differ
diff --git a/icons/modules/projectiles/magazines/bio.dmi b/icons/modules/projectiles/magazines/bio.dmi
new file mode 100644
index 00000000000..042f2eb0239
Binary files /dev/null and b/icons/modules/projectiles/magazines/bio.dmi differ
diff --git a/icons/modules/projectiles/magazines/darts.dmi b/icons/modules/projectiles/magazines/darts.dmi
new file mode 100644
index 00000000000..91c2dbc8382
Binary files /dev/null and b/icons/modules/projectiles/magazines/darts.dmi differ
diff --git a/icons/modules/projectiles/magazines/foam.dmi b/icons/modules/projectiles/magazines/foam.dmi
new file mode 100644
index 00000000000..b6bf61b83f8
Binary files /dev/null and b/icons/modules/projectiles/magazines/foam.dmi differ
diff --git a/icons/modules/projectiles/magazines/modular_box_unused.dmi b/icons/modules/projectiles/magazines/modular_box_unused.dmi
new file mode 100644
index 00000000000..92e268bd881
Binary files /dev/null and b/icons/modules/projectiles/magazines/modular_box_unused.dmi differ
diff --git a/icons/modules/projectiles/magazines/modular_magazine_unused.dmi b/icons/modules/projectiles/magazines/modular_magazine_unused.dmi
new file mode 100644
index 00000000000..b732274adaf
Binary files /dev/null and b/icons/modules/projectiles/magazines/modular_magazine_unused.dmi differ
diff --git a/icons/modules/projectiles/magazines/modular_speedloader_unused.dmi b/icons/modules/projectiles/magazines/modular_speedloader_unused.dmi
new file mode 100644
index 00000000000..f565fbbd2a1
Binary files /dev/null and b/icons/modules/projectiles/magazines/modular_speedloader_unused.dmi differ
diff --git a/icons/modules/projectiles/magazines/modular_stripper_unused.dmi b/icons/modules/projectiles/magazines/modular_stripper_unused.dmi
new file mode 100644
index 00000000000..fc99de5d492
Binary files /dev/null and b/icons/modules/projectiles/magazines/modular_stripper_unused.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_magazine_box.dmi b/icons/modules/projectiles/magazines/old_magazine_box.dmi
new file mode 100644
index 00000000000..8783d89bf93
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_magazine_box.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_magazine_clip.dmi b/icons/modules/projectiles/magazines/old_magazine_clip.dmi
new file mode 100644
index 00000000000..575d5c69435
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_magazine_clip.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_magazine_drum.dmi b/icons/modules/projectiles/magazines/old_magazine_drum.dmi
new file mode 100644
index 00000000000..d6280f158f6
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_magazine_drum.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_magazine_stick.dmi b/icons/modules/projectiles/magazines/old_magazine_stick.dmi
new file mode 100644
index 00000000000..bf40c34c3f7
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_magazine_stick.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_pouch.dmi b/icons/modules/projectiles/magazines/old_pouch.dmi
new file mode 100644
index 00000000000..c18e20ee509
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_pouch.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_speedloader_6.dmi b/icons/modules/projectiles/magazines/old_speedloader_6.dmi
new file mode 100644
index 00000000000..9517e632c44
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_speedloader_6.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_speedloader_7.dmi b/icons/modules/projectiles/magazines/old_speedloader_7.dmi
new file mode 100644
index 00000000000..e5763121ca3
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_speedloader_7.dmi differ
diff --git a/icons/modules/projectiles/magazines/old_stripper.dmi b/icons/modules/projectiles/magazines/old_stripper.dmi
new file mode 100644
index 00000000000..95b49856fa6
Binary files /dev/null and b/icons/modules/projectiles/magazines/old_stripper.dmi differ
diff --git a/icons/modules/projectiles/main_ammo_unused.dmi b/icons/modules/projectiles/main_ammo_unused.dmi
new file mode 100644
index 00000000000..45f27966e0e
Binary files /dev/null and b/icons/modules/projectiles/main_ammo_unused.dmi differ
diff --git a/icons/modules/projectiles/rp_ammo_unused.dmi b/icons/modules/projectiles/rp_ammo_unused.dmi
new file mode 100644
index 00000000000..947b3a8db7c
Binary files /dev/null and b/icons/modules/projectiles/rp_ammo_unused.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
deleted file mode 100644
index 97caca3b4b9..00000000000
Binary files a/icons/obj/ammo.dmi and /dev/null differ
diff --git a/icons/obj/ammo_vr.dmi b/icons/obj/ammo_vr.dmi
deleted file mode 100644
index 3006f7e445e..00000000000
Binary files a/icons/obj/ammo_vr.dmi and /dev/null differ
diff --git a/icons/obj/gun/ballistic.dmi b/icons/obj/gun/ballistic.dmi
index 30257b6709b..e7fa9abdc79 100644
Binary files a/icons/obj/gun/ballistic.dmi and b/icons/obj/gun/ballistic.dmi differ
diff --git a/icons/obj/gun/ballistic/caseless/pellet.dmi b/icons/obj/gun/ballistic/caseless/pellet.dmi
index cae1dd372bd..fc364ca0fd2 100644
Binary files a/icons/obj/gun/ballistic/caseless/pellet.dmi and b/icons/obj/gun/ballistic/caseless/pellet.dmi differ
diff --git a/icons/system/error_32x32.dmi b/icons/system/error_32x32.dmi
new file mode 100644
index 00000000000..147873c6603
Binary files /dev/null and b/icons/system/error_32x32.dmi differ
diff --git a/maps/away_missions/140x140/carpfarm.dmm b/maps/away_missions/140x140/carpfarm.dmm
index 213b11b5a22..aa1c975d271 100644
--- a/maps/away_missions/140x140/carpfarm.dmm
+++ b/maps/away_missions/140x140/carpfarm.dmm
@@ -467,9 +467,9 @@
/area/awaymission/carpfarm/base)
"bE" = (
/obj/structure/closet/crate/secure/weapon,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/dark,
/area/awaymission/carpfarm/base)
diff --git a/maps/away_missions/140x140/snowfield.dmm b/maps/away_missions/140x140/snowfield.dmm
index 8eff3bdd7ed..7911634ff6d 100644
--- a/maps/away_missions/140x140/snowfield.dmm
+++ b/maps/away_missions/140x140/snowfield.dmm
@@ -1375,11 +1375,11 @@
/area/awaymission/snowfield/base)
"dZ" = (
/obj/structure/closet/crate/secure/gear,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/turf/simulated/floor/tiled/dark,
/area/awaymission/snowfield/base)
"ea" = (
diff --git a/maps/away_missions/archive/spacebattle.dmm b/maps/away_missions/archive/spacebattle.dmm
index f7f01c93f51..48106f306f1 100644
--- a/maps/away_missions/archive/spacebattle.dmm
+++ b/maps/away_missions/archive/spacebattle.dmm
@@ -65,7 +65,6 @@
/area/awaymission/spacebattle/syndicate2)
"at" = (
/obj/structure/table/reinforced,
-/obj/item/ammo_magazine/m10x24mm,
/turf/simulated/floor,
/area/awaymission/spacebattle/syndicate2)
"au" = (
@@ -1070,7 +1069,7 @@
/area/awaymission/spacebattle/cruiser)
"gt" = (
/obj/structure/closet/crate/secure/weapon,
-/obj/item/ammo_magazine/s357,
+/obj/item/ammo_magazine/a357/speedloader,
/turf/simulated/floor/plating,
/area/awaymission/spacebattle/cruiser)
"gu" = (
diff --git a/maps/away_missions/archive/zresearchlabs.dmm b/maps/away_missions/archive/zresearchlabs.dmm
index d9a3efa40d2..fe99bb0aae4 100644
--- a/maps/away_missions/archive/zresearchlabs.dmm
+++ b/maps/away_missions/archive/zresearchlabs.dmm
@@ -1755,7 +1755,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/item/ammo_magazine/clip/c45,
+/obj/item/ammo_magazine/a45/clip,
/turf/simulated/floor{
dir = 5
},
@@ -1870,7 +1870,7 @@
/area/awaymission/labs/militarydivision)
"fS" = (
/obj/structure/closet/crate/secure/weapon,
-/obj/item/ammo_magazine/s357,
+/obj/item/ammo_magazine/a357/speedloader,
/turf/simulated/floor{
dir = 5
},
@@ -2847,7 +2847,7 @@
/turf/simulated/floor,
/area/awaymission/labs/militarydivision)
"iu" = (
-/obj/item/ammo_magazine/clip/c9mm{
+/obj/item/ammo_magazine/a9mm/clip{
pixel_x = 25;
pixel_y = -60
},
@@ -6967,13 +6967,13 @@
},
/area/awaymission/labs/security)
"uj" = (
-/obj/item/ammo_magazine/clip/c45,
+/obj/item/ammo_magazine/a45/clip,
/turf/simulated/floor{
dir = 8
},
/area/awaymission/labs/security)
"uk" = (
-/obj/item/ammo_magazine/clip/c45,
+/obj/item/ammo_magazine/a45/clip,
/obj/item/gun/ballistic/silenced{
desc = "A sidearm commonly favored by terrestrial security forces.";
icon_state = "g115 Pistol";
diff --git a/maps/minitest/levels/sector1.dmm b/maps/minitest/levels/sector1.dmm
index 4e2916ded87..bae22c222ba 100644
--- a/maps/minitest/levels/sector1.dmm
+++ b/maps/minitest/levels/sector1.dmm
@@ -466,9 +466,9 @@
/area/awaymission)
"bA" = (
/obj/structure/closet/crate/secure/weapon,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/dark,
/area/awaymission)
diff --git a/maps/rift/levels/rift-05-surface2.dmm b/maps/rift/levels/rift-05-surface2.dmm
index 790678686f4..a62116cdac9 100644
--- a/maps/rift/levels/rift-05-surface2.dmm
+++ b/maps/rift/levels/rift-05-surface2.dmm
@@ -34,8 +34,8 @@
"aaW" = (
/obj/structure/table/rack/shelf/steel,
/obj/effect/floor_decal/industrial/outline/red,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
/obj/machinery/camera/motion/security{
dir = 8
},
@@ -2852,34 +2852,34 @@
pixel_y = 32
},
/obj/structure/table/rack/shelf/steel,
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = -2;
pixel_y = -8
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = -2;
pixel_y = -8
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 4;
pixel_y = 2
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 4;
pixel_y = 2
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_y = 5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_y = 5
},
/obj/structure/cable/green{
@@ -16245,10 +16245,10 @@
/obj/structure/table/steel,
/obj/item/gun/ballistic/shotgun/pump/rifle/practice,
/obj/item/gun/ballistic/shotgun/pump/rifle/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
/obj/machinery/recharger/wallcharger{
pixel_x = 4;
pixel_y = -28
@@ -20787,8 +20787,8 @@
dir = 8
},
/obj/effect/floor_decal/borderfloorblack/cee,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a44,
/obj/item/gun/ballistic/deagle/taj,
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hos)
@@ -34563,18 +34563,18 @@
/obj/machinery/light{
dir = 1
},
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
/turf/simulated/floor/tiled/dark,
/area/security/tactical)
"vSw" = (
diff --git a/maps/rift/levels/rift-06-surface3.dmm b/maps/rift/levels/rift-06-surface3.dmm
index ee6756fafe5..7806faa9b5e 100644
--- a/maps/rift/levels/rift-06-surface3.dmm
+++ b/maps/rift/levels/rift-06-surface3.dmm
@@ -12150,8 +12150,8 @@
name = "gun safe";
req_access = list(1)
},
-/obj/item/ammo_magazine/s357,
-/obj/item/ammo_magazine/s357,
+/obj/item/ammo_magazine/a357/speedloader,
+/obj/item/ammo_magazine/a357/speedloader,
/obj/item/gun/ballistic/revolver/mateba,
/obj/effect/floor_decal/borderfloorblack/full,
/obj/effect/floor_decal/industrial/outline,
@@ -15585,8 +15585,8 @@
/obj/effect/floor_decal/borderfloorblack/full,
/obj/effect/floor_decal/industrial/outline,
/obj/item/gun/ballistic/SVD,
-/obj/item/ammo_magazine/m762svd,
-/obj/item/ammo_magazine/m762svd,
+/obj/item/ammo_magazine/a7_62mm/svd,
+/obj/item/ammo_magazine/a7_62mm/svd,
/obj/item/clothing/suit/space/void/merc/soviet,
/obj/item/clothing/head/helmet/space/void/merc/soviet,
/obj/machinery/camera/motion/security{
diff --git a/maps/rift/levels/rift-11-orbital.dmm b/maps/rift/levels/rift-11-orbital.dmm
index 2d6e875df43..8b39ef2f618 100644
--- a/maps/rift/levels/rift-11-orbital.dmm
+++ b/maps/rift/levels/rift-11-orbital.dmm
@@ -8559,14 +8559,14 @@
"Lh" = (
/obj/structure/table/rack,
/obj/structure/window/reinforced,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/turf/unsimulated/floor/dark,
/area/centcom/specops)
"Lk" = (
@@ -8775,14 +8775,14 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/automatic/lmg,
/obj/item/gun/ballistic/automatic/lmg,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
/turf/unsimulated/floor/dark,
/area/centcom/specops)
"NU" = (
@@ -9426,8 +9426,8 @@
"UL" = (
/obj/structure/table/reinforced,
/obj/item/clothing/accessory/holster/hip,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a44,
/obj/item/gun/ballistic/deagle,
/turf/unsimulated/floor/wood,
/area/centcom/specops)
@@ -9799,14 +9799,14 @@
"Yw" = (
/obj/structure/table/rack,
/obj/structure/window/reinforced,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
/turf/unsimulated/floor/dark,
/area/centcom/specops)
"Yy" = (
@@ -9944,10 +9944,10 @@
dir = 8
},
/obj/structure/table/rack,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/turf/unsimulated/floor/dark,
diff --git a/maps/sectors/admin_planets_192/croatoan.dmm b/maps/sectors/admin_planets_192/croatoan.dmm
index e8e1e426aaa..6e89f80b71a 100644
--- a/maps/sectors/admin_planets_192/croatoan.dmm
+++ b/maps/sectors/admin_planets_192/croatoan.dmm
@@ -5517,8 +5517,8 @@
/area/admin_planet/croatoan/med_storage)
"ti" = (
/obj/structure/table/borosilicate,
-/obj/item/ammo_magazine/s357,
-/obj/item/ammo_magazine/s357,
+/obj/item/ammo_magazine/a357/speedloader,
+/obj/item/ammo_magazine/a357/speedloader,
/turf/simulated/floor/tiled/steel_dirty/red,
/area/admin_planet/croatoan/sec_hos_office)
"tn" = (
@@ -12318,89 +12318,89 @@
/obj/item/storage/box/shotgunammo/large,
/obj/item/storage/box/shotgunammo/large,
/obj/item/storage/box/shotgunammo/large,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m9mmt{
+/obj/item/ammo_magazine/a9mm/top_mount{
pixel_x = 1;
pixel_y = -5
},
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m12gdrum,
-/obj/item/ammo_magazine/m12gdrum,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m45uzi,
-/obj/item/ammo_magazine/m45uzi,
-/obj/item/ammo_magazine/m57x28mm/fiveseven,
-/obj/item/ammo_magazine/m57x28mm/fiveseven,
-/obj/item/ammo_magazine/m57x28mm/ntles,
-/obj/item/ammo_magazine/m57x28mm/ntles,
-/obj/item/ammo_magazine/m57x28mm/smg,
-/obj/item/ammo_magazine/m57x28mm/smg,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a12g/drum,
+/obj/item/ammo_magazine/a12g/drum,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a45/uzi,
+/obj/item/ammo_magazine/a45/uzi,
+/obj/item/ammo_magazine/a5_7mm/five_seven,
+/obj/item/ammo_magazine/a5_7mm/five_seven,
+/obj/item/ammo_magazine/a5_7mm/nt_les,
+/obj/item/ammo_magazine/a5_7mm/nt_les,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg,
/obj/item/ammo_magazine/m5mmcaseless,
/obj/item/ammo_magazine/m5mmcaseless,
-/obj/item/ammo_magazine/m75,
-/obj/item/ammo_magazine/m75,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762garand,
-/obj/item/ammo_magazine/m762garand,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762svd,
-/obj/item/ammo_magazine/m762svd,
-/obj/item/ammo_magazine/m792,
-/obj/item/ammo_magazine/m792,
+/obj/item/ammo_magazine/a75,
+/obj/item/ammo_magazine/a75,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/garand,
+/obj/item/ammo_magazine/a7_62mm/garand,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/svd,
+/obj/item/ammo_magazine/a7_62mm/svd,
+/obj/item/ammo_magazine/a7_92mm,
+/obj/item/ammo_magazine/a7_92mm,
/obj/item/ammo_magazine/m95,
/obj/item/ammo_magazine/m95,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
/obj/machinery/light/small/emergency{
dir = 1
},
diff --git a/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm b/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm
index 782e001fe0d..0ef4463cf9e 100644
--- a/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm
+++ b/maps/sectors/miaphus_192/levels/miaphus_192_beach.dmm
@@ -4727,14 +4727,14 @@
/area/tether_away/beach/station/tram)
"NW" = (
/obj/structure/closet/crate/miningcar,
-/obj/item/ammo_magazine/s357,
-/obj/item/ammo_magazine/clip/c545,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c45,
-/obj/item/ammo_magazine/clip/c9mm,
-/obj/item/ammo_magazine/clip/c10mm,
-/obj/item/ammo_magazine/clip/c12g,
-/obj/item/ammo_magazine/clip/c12g,
+/obj/item/ammo_magazine/a357/speedloader,
+/obj/item/ammo_magazine/a5_56mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a45/clip,
+/obj/item/ammo_magazine/a9mm/clip,
+/obj/item/ammo_magazine/a10mm/clip,
+/obj/item/ammo_magazine/a12g/clip,
+/obj/item/ammo_magazine/a12g/clip,
/turf/simulated/mineral/floor/cave{
name = "dirt"
},
diff --git a/maps/submaps/level_specific/class_d/hiddenbunkerD.dmm b/maps/submaps/level_specific/class_d/hiddenbunkerD.dmm
index 0b8e63b9186..62d190f7b0e 100644
--- a/maps/submaps/level_specific/class_d/hiddenbunkerD.dmm
+++ b/maps/submaps/level_specific/class_d/hiddenbunkerD.dmm
@@ -143,9 +143,9 @@
/area/class_d/Mountain)
"yw" = (
/obj/structure/table/reinforced,
-/obj/item/ammo_magazine/m45tommy,
-/obj/item/ammo_magazine/m45tommy,
-/obj/item/ammo_magazine/m45tommy,
+/obj/item/ammo_magazine/a45/tommy,
+/obj/item/ammo_magazine/a45/tommy,
+/obj/item/ammo_magazine/a45/tommy,
/turf/simulated/floor/tiled,
/area/class_d/Mountain)
"zH" = (
diff --git a/maps/submaps/level_specific/class_d/landing_padD.dmm b/maps/submaps/level_specific/class_d/landing_padD.dmm
index 9101605be00..0cceb7b6e64 100644
--- a/maps/submaps/level_specific/class_d/landing_padD.dmm
+++ b/maps/submaps/level_specific/class_d/landing_padD.dmm
@@ -134,9 +134,9 @@
/obj/item/clothing/shoes/black,
/obj/item/clothing/shoes/black,
/obj/item/gun/ballistic/shotgun/pump/rifle,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/turf/simulated/floor/wood,
/area/class_d/POIs/landing_pad)
"v" = (
diff --git a/maps/submaps/level_specific/class_h/desertsaloon.dmm b/maps/submaps/level_specific/class_h/desertsaloon.dmm
index f1370c50a51..9b3a3cd56e6 100644
--- a/maps/submaps/level_specific/class_h/desertsaloon.dmm
+++ b/maps/submaps/level_specific/class_h/desertsaloon.dmm
@@ -411,10 +411,10 @@
"Zm" = (
/obj/structure/closet/cabinet,
/obj/random/projectile/shotgun,
-/obj/item/ammo_magazine/clip/c12g/pellet,
-/obj/item/ammo_magazine/clip/c12g/beanbag,
-/obj/item/ammo_magazine/clip/c12g/beanbag,
-/obj/item/ammo_magazine/clip/c12g/beanbag,
+/obj/item/ammo_magazine/a12g/clip/pellet,
+/obj/item/ammo_magazine/a12g/clip/beanbag,
+/obj/item/ammo_magazine/a12g/clip/beanbag,
+/obj/item/ammo_magazine/a12g/clip/beanbag,
/turf/simulated/floor/wood/classh,
/area/class_h/POIs/saloon)
"Zt" = (
diff --git a/maps/submaps/level_specific/class_h/highnoonH.dmm b/maps/submaps/level_specific/class_h/highnoonH.dmm
index 2a4604b828d..9564467b745 100644
--- a/maps/submaps/level_specific/class_h/highnoonH.dmm
+++ b/maps/submaps/level_specific/class_h/highnoonH.dmm
@@ -5,9 +5,9 @@
/area/class_h/POIs/WW_Town)
"aN" = (
/obj/structure/table/rack/shelf,
-/obj/item/ammo_magazine/clip/c762/hunter,
-/obj/item/ammo_magazine/clip/c762/hunter,
-/obj/item/ammo_magazine/clip/c762/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
/turf/simulated/floor/wood,
/area/class_h/POIs/WW_Town)
"bT" = (
@@ -149,9 +149,9 @@
/area/class_h/POIs/WW_Town)
"xz" = (
/obj/structure/table/rack/shelf,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/turf/simulated/floor/wood,
/area/class_h/POIs/WW_Town)
"yT" = (
@@ -274,7 +274,7 @@
/area/class_h/POIs/WW_Town)
"SU" = (
/obj/structure/table/rack/shelf,
-/obj/item/ammo_magazine/clip/c762/ap,
+/obj/item/ammo_magazine/a7_62mm/clip/ap,
/turf/simulated/floor/wood,
/area/class_h/POIs/WW_Town)
"SX" = (
diff --git a/maps/submaps/level_specific/class_h/huntercamp.dmm b/maps/submaps/level_specific/class_h/huntercamp.dmm
index 8b69748c0bd..293d19d8a9e 100644
--- a/maps/submaps/level_specific/class_h/huntercamp.dmm
+++ b/maps/submaps/level_specific/class_h/huntercamp.dmm
@@ -103,11 +103,11 @@
"Z" = (
/obj/structure/table/woodentable,
/obj/item/gun/ballistic/contender/taj/a762,
-/obj/item/ammo_magazine/clip/c762/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
/obj/item/storage/firstaid/toxin,
/obj/item/storage/fancy/cigar/taj,
/obj/random/junk,
-/obj/item/ammo_magazine/clip/c762/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
/turf/simulated/mineral/floor/cave,
/area/tether_away/beach/desert/poi/huntercamp)
diff --git a/maps/submaps/level_specific/class_h/landing_padH.dmm b/maps/submaps/level_specific/class_h/landing_padH.dmm
index f8a961e552a..d4a431a29c6 100644
--- a/maps/submaps/level_specific/class_h/landing_padH.dmm
+++ b/maps/submaps/level_specific/class_h/landing_padH.dmm
@@ -113,9 +113,9 @@
/obj/item/clothing/shoes/black,
/obj/item/clothing/shoes/black,
/obj/item/gun/ballistic/shotgun/pump/rifle,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/turf/simulated/floor/wood,
/area/class_h/POIs/landing_pad)
"v" = (
diff --git a/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm b/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm
index 66558a2685e..64e007675fa 100644
--- a/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm
+++ b/maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm
@@ -555,10 +555,10 @@
dir = 5
},
/obj/effect/floor_decal/corner/brown/full,
-/obj/item/ammo_magazine/m9mm/large,
-/obj/item/ammo_magazine/m9mm/large,
-/obj/item/ammo_magazine/m9mm/large,
-/obj/item/ammo_magazine/m9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
/turf/simulated/floor/tiled,
/area/submap/debrisfield_vr/tinyshuttle/crew)
"be" = (
diff --git a/maps/submaps/level_specific/virgo2/DJOutpost1.dmm b/maps/submaps/level_specific/virgo2/DJOutpost1.dmm
index 5cb6f725834..89337ef0403 100644
--- a/maps/submaps/level_specific/virgo2/DJOutpost1.dmm
+++ b/maps/submaps/level_specific/virgo2/DJOutpost1.dmm
@@ -268,7 +268,7 @@
/area/submap/virgo2/DJOutpost1)
"P" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/clip/c762/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
/obj/item/gun/ballistic/shotgun/pump/rifle,
/turf/simulated/floor/wood,
/area/submap/virgo2/DJOutpost1)
diff --git a/maps/submaps/level_specific/virgo2/DoomP.dmm b/maps/submaps/level_specific/virgo2/DoomP.dmm
index d367cdd4e82..678e7b33014 100644
--- a/maps/submaps/level_specific/virgo2/DoomP.dmm
+++ b/maps/submaps/level_specific/virgo2/DoomP.dmm
@@ -348,8 +348,8 @@
"bs" = (
/obj/structure/table/rack,
/obj/item/gun/ballistic/contender,
-/obj/item/ammo_magazine/s357,
-/obj/item/ammo_magazine/s357,
+/obj/item/ammo_magazine/a357/speedloader,
+/obj/item/ammo_magazine/a357/speedloader,
/turf/simulated/floor/tiled/techfloor,
/area/submap/virgo2/DoomP)
"bt" = (
diff --git a/maps/submaps/level_specific/virgo2/Rockybase.dmm b/maps/submaps/level_specific/virgo2/Rockybase.dmm
index efc8891a967..f0642ac9f24 100644
--- a/maps/submaps/level_specific/virgo2/Rockybase.dmm
+++ b/maps/submaps/level_specific/virgo2/Rockybase.dmm
@@ -229,9 +229,9 @@
/obj/item/storage/box/shotgunshells,
/obj/item/storage/box/shotgunshells,
/obj/item/storage/box/shotgunshells,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
/turf/simulated/floor/tiled/techfloor/virgo2,
/area/submap/virgo2/Rockybase)
"aS" = (
diff --git a/maps/submaps/mountains/Rockb1.dmm b/maps/submaps/mountains/Rockb1.dmm
index 6463cee7ab8..1022c3c8236 100644
--- a/maps/submaps/mountains/Rockb1.dmm
+++ b/maps/submaps/mountains/Rockb1.dmm
@@ -26,7 +26,7 @@
icon_state = "cabinet_closed"
},
/obj/item/gun/ballistic/pistol,
-/obj/item/ammo_magazine/m9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
/turf/simulated/floor/lino,
/area/submap/Rockb1)
"h" = (
diff --git a/maps/submaps/mountains/prepper1.dmm b/maps/submaps/mountains/prepper1.dmm
index ae3fa8b5209..148dffd532d 100644
--- a/maps/submaps/mountains/prepper1.dmm
+++ b/maps/submaps/mountains/prepper1.dmm
@@ -97,8 +97,8 @@
"t" = (
/obj/structure/table/rack,
/obj/item/gun/ballistic/shotgun/pump/rifle/lever,
-/obj/item/ammo_magazine/clip/c762,
-/obj/item/ammo_magazine/clip/c762,
+/obj/item/ammo_magazine/a7_62mm/clip,
+/obj/item/ammo_magazine/a7_62mm/clip,
/turf/simulated/floor/plating,
/area/submap/cave/prepper1)
diff --git a/maps/submaps/wilderness/DJOutpost1.dmm b/maps/submaps/wilderness/DJOutpost1.dmm
index f4a9c67cf75..8a6859a515e 100644
--- a/maps/submaps/wilderness/DJOutpost1.dmm
+++ b/maps/submaps/wilderness/DJOutpost1.dmm
@@ -276,7 +276,7 @@
/area/submap/DJOutpost1)
"P" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/clip/c762/hunter,
+/obj/item/ammo_magazine/a7_62mm/clip/hunter,
/obj/item/gun/ballistic/shotgun/pump/rifle,
/turf/simulated/floor/wood,
/area/submap/DJOutpost1)
diff --git a/maps/submaps/wilderness/DoomP.dmm b/maps/submaps/wilderness/DoomP.dmm
index 926d8772ee1..b0b28271456 100644
--- a/maps/submaps/wilderness/DoomP.dmm
+++ b/maps/submaps/wilderness/DoomP.dmm
@@ -364,8 +364,8 @@
"bs" = (
/obj/structure/table/rack,
/obj/item/gun/ballistic/contender,
-/obj/item/ammo_magazine/s357,
-/obj/item/ammo_magazine/s357,
+/obj/item/ammo_magazine/a357/speedloader,
+/obj/item/ammo_magazine/a357/speedloader,
/turf/simulated/floor/tiled/techfloor,
/area/submap/DoomP)
"bt" = (
diff --git a/maps/templates/admin/dhael_centcom.dmm b/maps/templates/admin/dhael_centcom.dmm
index e7cc4bbbc50..247c12e9fe5 100644
--- a/maps/templates/admin/dhael_centcom.dmm
+++ b/maps/templates/admin/dhael_centcom.dmm
@@ -179,14 +179,14 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/turf/unsimulated/floor{
@@ -199,14 +199,14 @@
},
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/turf/unsimulated/floor{
@@ -367,10 +367,10 @@
/obj/structure/window/reinforced,
/obj/item/gun/ballistic/revolver/detective45,
/obj/item/gun/ballistic/revolver/detective45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
+/obj/item/ammo_magazine/a45/speedloader,
+/obj/item/ammo_magazine/a45/speedloader,
+/obj/item/ammo_magazine/a45/speedloader,
+/obj/item/ammo_magazine/a45/speedloader,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -379,10 +379,10 @@
/obj/structure/table/rack,
/obj/structure/window/reinforced,
/obj/item/gun/ballistic/automatic/advanced_smg,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -405,14 +405,14 @@
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -3941,16 +3941,16 @@
"lE" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -7491,8 +7491,8 @@
"tB" = (
/obj/structure/table/reinforced,
/obj/item/clothing/accessory/holster/hip,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a44,
/obj/item/gun/ballistic/deagle,
/turf/unsimulated/floor/wood,
/area/centcom/specops)
@@ -9809,16 +9809,16 @@
"Ds" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
/obj/machinery/button/remote/blast_door{
id = "ArmouryC4";
name = "Armoury Access";
@@ -10455,11 +10455,11 @@
"Fy" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -11278,16 +11278,16 @@
"IE" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -11714,18 +11714,18 @@
"KN" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -12351,16 +12351,16 @@
"NJ" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
/obj/machinery/camera/network/crescent,
/turf/unsimulated/floor{
icon_state = "dark"
@@ -12528,16 +12528,16 @@
"Oq" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -13440,16 +13440,16 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/automatic/z8,
/obj/item/gun/ballistic/automatic/z8,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -14168,14 +14168,14 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/automatic/lmg,
/obj/item/gun/ballistic/automatic/lmg,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
diff --git a/maps/templates/admin/ert.dmm b/maps/templates/admin/ert.dmm
index c9c56d643dc..57ce1c0a1a4 100644
--- a/maps/templates/admin/ert.dmm
+++ b/maps/templates/admin/ert.dmm
@@ -511,12 +511,12 @@
/area/ship/ert/barracks)
"es" = (
/obj/structure/closet/crate,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
@@ -1098,18 +1098,18 @@
/obj/item/gun/ballistic/automatic/pdw,
/obj/item/gun/ballistic/automatic/pdw,
/obj/item/gun/ballistic/automatic/pdw,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
/obj/effect/floor_decal/industrial/outline/grey,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_st)
@@ -2975,18 +2975,18 @@
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_st)
"xi" = (
@@ -2994,12 +2994,12 @@
/obj/effect/floor_decal/industrial/outline/grey,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_st)
"xt" = (
@@ -3584,18 +3584,18 @@
/obj/structure/table/rack/steel,
/obj/item/gun/ballistic/automatic/z8,
/obj/item/gun/ballistic/automatic/z8,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/obj/machinery/light_switch{
dir = 1;
pixel_y = -23
@@ -4781,18 +4781,18 @@
/obj/effect/floor_decal/industrial/outline/grey,
/obj/item/gun/ballistic/automatic/z8,
/obj/item/gun/ballistic/automatic/z8,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_dl)
"Kb" = (
@@ -6039,20 +6039,20 @@
/obj/structure/table/rack/steel,
/obj/item/gun/ballistic/automatic/p90,
/obj/item/gun/ballistic/automatic/p90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
/obj/item/gun/ballistic/automatic/p90,
/obj/item/gun/ballistic/automatic/p90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
/obj/effect/floor_decal/industrial/outline/grey,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_dl)
@@ -6060,10 +6060,10 @@
/obj/structure/table/rack/steel,
/obj/item/gun/ballistic/automatic/lmg,
/obj/item/gun/ballistic/automatic/lmg,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
/obj/effect/floor_decal/industrial/outline/grey,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_dl)
@@ -6095,8 +6095,8 @@
"SD" = (
/obj/structure/table/rack,
/obj/item/gun/ballistic/deagle,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a44,
/turf/simulated/floor/wood,
/area/ship/ert/commander)
"SE" = (
diff --git a/maps/templates/admin/ert_base.dmm b/maps/templates/admin/ert_base.dmm
index 9c11eca30bf..96879d65dce 100644
--- a/maps/templates/admin/ert_base.dmm
+++ b/maps/templates/admin/ert_base.dmm
@@ -500,16 +500,16 @@
"ba" = (
/obj/structure/table/rack/steel,
/obj/item/gun/ballistic/automatic/advanced_smg,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
/obj/item/gun/ballistic/revolver/detective45,
/obj/item/gun/ballistic/revolver/detective45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
+/obj/item/ammo_magazine/a45/speedloader,
+/obj/item/ammo_magazine/a45/speedloader,
+/obj/item/ammo_magazine/a45/speedloader,
+/obj/item/ammo_magazine/a45/speedloader,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"bb" = (
@@ -611,12 +611,12 @@
/obj/structure/table/rack/steel,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"bo" = (
@@ -694,14 +694,14 @@
"bw" = (
/obj/structure/window/reinforced,
/obj/structure/table/rack/steel,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
@@ -720,12 +720,12 @@
/obj/structure/table/rack/steel,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"bz" = (
@@ -1908,8 +1908,8 @@
pixel_y = -35
},
/obj/item/gun/ballistic/deagle,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
+/obj/item/ammo_magazine/a44,
+/obj/item/ammo_magazine/a44,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"dS" = (
diff --git a/maps/templates/admin/kk_mercship.dmm b/maps/templates/admin/kk_mercship.dmm
index e7d2cb37558..16b08549308 100644
--- a/maps/templates/admin/kk_mercship.dmm
+++ b/maps/templates/admin/kk_mercship.dmm
@@ -1131,10 +1131,10 @@
"fK" = (
/obj/structure/table/rack,
/obj/item/gun/ballistic/revolver/consul,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/obj/item/clothing/accessory/holster/armpit,
/turf/simulated/floor/wood,
/area/ship/manta/commander)
@@ -1548,10 +1548,10 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/automatic/c20r,
/obj/item/gun/ballistic/automatic/c20r,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
/obj/effect/floor_decal/techfloor{
dir = 9
},
@@ -1559,8 +1559,8 @@
dir = 8
},
/obj/item/gun/ballistic/automatic/c20r,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
/turf/simulated/floor/tiled/techfloor,
/area/ship/manta/armoury_st)
"hV" = (
@@ -1604,11 +1604,11 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/silenced,
/obj/item/gun/ballistic/silenced,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45/ap,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45/rubber,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45/ap,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45/rubber,
/obj/effect/floor_decal/techfloor{
dir = 5
},
@@ -2267,16 +2267,16 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/automatic/c20r,
/obj/item/gun/ballistic/automatic/c20r,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
/obj/effect/floor_decal/techfloor{
dir = 8
},
/obj/item/gun/ballistic/automatic/c20r,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
/turf/simulated/floor/tiled/techfloor,
/area/ship/manta/armoury_st)
"lk" = (
@@ -2295,11 +2295,11 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm/ap,
/turf/simulated/floor/tiled/techfloor,
/area/ship/manta/armoury_st)
"lq" = (
@@ -3031,11 +3031,11 @@
/obj/structure/table/rack,
/obj/item/gun/ballistic/silenced,
/obj/item/gun/ballistic/silenced,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45/ap,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45/rubber,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45/ap,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45/rubber,
/obj/effect/floor_decal/techfloor{
dir = 4
},
@@ -6715,12 +6715,12 @@
/area/ship/manta/hallways_port)
"HL" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/obj/item/gun/ballistic/revolver/consul,
/obj/effect/floor_decal/techfloor{
dir = 8
@@ -8452,14 +8452,14 @@
/area/ship/manta/recreation)
"RC" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
/obj/item/gun/ballistic/luger,
/obj/item/gun/ballistic/luger/brown,
/obj/effect/floor_decal/techfloor{
@@ -9278,22 +9278,22 @@
/obj/item/gun/ballistic/automatic/bullpup,
/obj/item/gun/ballistic/automatic/bullpup,
/obj/item/gun/ballistic/automatic/bullpup,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m/ap,
-/obj/item/ammo_magazine/m762m/ap,
-/obj/item/ammo_magazine/m762m/ap,
-/obj/item/ammo_magazine/m762m/ap,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
-/obj/item/ammo_magazine/m762m,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
/turf/simulated/floor/tiled/techfloor,
/area/ship/manta/armoury_as)
"Vx" = (
diff --git a/maps/templates/admin/mercbase.dmm b/maps/templates/admin/mercbase.dmm
index 02f76b2c745..59eb33bbafb 100644
--- a/maps/templates/admin/mercbase.dmm
+++ b/maps/templates/admin/mercbase.dmm
@@ -81,16 +81,16 @@
/obj/effect/floor_decal/corner/red{
dir = 5
},
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/turf/unsimulated/floor{
@@ -246,12 +246,12 @@
/obj/effect/floor_decal/corner/red{
dir = 10
},
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/obj/item/gun/ballistic/revolver/consul,
/turf/unsimulated/floor{
icon_state = "dark"
@@ -275,14 +275,14 @@
/obj/effect/floor_decal/corner/red{
dir = 10
},
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
-/obj/item/ammo_magazine/m9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
+/obj/item/ammo_magazine/a9mm,
/obj/item/gun/ballistic/luger,
/obj/item/gun/ballistic/luger/brown,
/turf/unsimulated/floor{
@@ -675,18 +675,18 @@
/area/antag/antag_base)
"be" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
-/obj/item/ammo_magazine/m10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
+/obj/item/ammo_magazine/a10mm,
/obj/item/gun/ballistic/automatic/c20r,
/obj/item/gun/ballistic/automatic/c20r,
/obj/item/gun/ballistic/automatic/c20r,
@@ -814,19 +814,19 @@
/area/antag/antag_base)
"bn" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/m45/rubber,
-/obj/item/ammo_magazine/m45/rubber,
-/obj/item/ammo_magazine/m45/rubber,
-/obj/item/ammo_magazine/m45/rubber,
-/obj/item/ammo_magazine/m45/rubber,
-/obj/item/ammo_magazine/m45/rubber,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
-/obj/item/ammo_magazine/m45,
+/obj/item/ammo_magazine/a45/rubber,
+/obj/item/ammo_magazine/a45/rubber,
+/obj/item/ammo_magazine/a45/rubber,
+/obj/item/ammo_magazine/a45/rubber,
+/obj/item/ammo_magazine/a45/rubber,
+/obj/item/ammo_magazine/a45/rubber,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
+/obj/item/ammo_magazine/a45,
/obj/effect/floor_decal/corner/red{
dir = 9
},
@@ -3346,11 +3346,11 @@
/area/shuttle/mercenary)
"fO" = (
/obj/structure/table/rack,
-/obj/item/ammo_magazine/m380,
-/obj/item/ammo_magazine/m380,
-/obj/item/ammo_magazine/m380,
-/obj/item/ammo_magazine/m380,
-/obj/item/ammo_magazine/m380,
+/obj/item/ammo_magazine/a38,
+/obj/item/ammo_magazine/a38,
+/obj/item/ammo_magazine/a38,
+/obj/item/ammo_magazine/a38,
+/obj/item/ammo_magazine/a38,
/obj/item/gun/ballistic/giskard,
/obj/item/clothing/accessory/holster,
/turf/simulated/shuttle/floor{
diff --git a/maps/templates/shelters/shelter_4.dmm b/maps/templates/shelters/shelter_4.dmm
index 6b7233bf0d2..4995bc145b3 100644
--- a/maps/templates/shelters/shelter_4.dmm
+++ b/maps/templates/shelters/shelter_4.dmm
@@ -108,11 +108,11 @@
},
/obj/structure/closet/secure_closet/personal,
/obj/item/modular_computer/laptop/preset/custom_loadout/elite,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/flash,
/obj/item/gun/ballistic/pistol,
/obj/item/clothing/accessory/storage/black_vest,
/obj/item/material/knife/tacknife/survival,
@@ -234,11 +234,11 @@
"B" = (
/obj/structure/closet/secure_closet/personal,
/obj/item/modular_computer/laptop/preset/custom_loadout/elite,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/flash,
/obj/item/gun/ballistic/pistol,
/obj/item/clothing/accessory/storage/black_vest,
/obj/item/material/knife/tacknife/survival,
@@ -424,16 +424,16 @@
/area/survivalpod)
"T" = (
/obj/structure/closet/crate/secure/weapon,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
/obj/item/cell/device/weapon,
/obj/item/cell/device/weapon,
/obj/item/cell/device/weapon,
diff --git a/maps/templates/shuttles/overmaps/generic/abductor.dmm b/maps/templates/shuttles/overmaps/generic/abductor.dmm
index 1c9c055f1d5..9b0de8d6e28 100644
--- a/maps/templates/shuttles/overmaps/generic/abductor.dmm
+++ b/maps/templates/shuttles/overmaps/generic/abductor.dmm
@@ -882,12 +882,12 @@
/obj/item/ammo_casing/microbattery/medical/omni3,
/obj/item/ammo_casing/microbattery/medical/omni3,
/obj/structure/closet/alien,
-/obj/item/ammo_magazine/cell_mag/advanced,
-/obj/item/ammo_magazine/cell_mag/advanced,
-/obj/item/ammo_magazine/cell_mag/advanced,
-/obj/item/ammo_magazine/cell_mag/advanced,
-/obj/item/gun/ballistic/cell_loaded,
-/obj/item/gun/ballistic/cell_loaded,
+/obj/item/ammo_magazine/microbattery/advanced,
+/obj/item/ammo_magazine/microbattery/advanced,
+/obj/item/ammo_magazine/microbattery/advanced,
+/obj/item/ammo_magazine/microbattery/advanced,
+/obj/item/gun/ballistic/microbattery,
+/obj/item/gun/ballistic/microbattery,
/turf/simulated/shuttle/floor/alienplating,
/area/abductor/interior)
"Zk" = (
diff --git a/maps/templates/shuttles/overmaps/generic/cruiser.dmm b/maps/templates/shuttles/overmaps/generic/cruiser.dmm
index 19ef6ed79ff..5472b593c6c 100644
--- a/maps/templates/shuttles/overmaps/generic/cruiser.dmm
+++ b/maps/templates/shuttles/overmaps/generic/cruiser.dmm
@@ -5113,14 +5113,14 @@
/turf/simulated/floor/tiled/steel_grid,
/area/mothership/armory)
"lD" = (
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
-/obj/item/ammo_magazine/m9mm/large/licensed,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
/obj/item/gun/ballistic/p92x,
@@ -5134,21 +5134,21 @@
/turf/simulated/floor/tiled/steel_grid,
/area/mothership/armory)
"lE" = (
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/rubber,
-/obj/item/ammo_magazine/m9mm/compact/rubber,
-/obj/item/ammo_magazine/m9mm/compact/rubber,
-/obj/item/ammo_magazine/m9mm/compact/practice,
-/obj/item/ammo_magazine/m9mm/compact/practice,
-/obj/item/ammo_magazine/m9mm/compact/practice,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/rubber,
+/obj/item/ammo_magazine/a9mm/compact/rubber,
+/obj/item/ammo_magazine/a9mm/compact/rubber,
+/obj/item/ammo_magazine/a9mm/compact/practice,
+/obj/item/ammo_magazine/a9mm/compact/practice,
+/obj/item/ammo_magazine/a9mm/compact/practice,
/obj/item/gun/ballistic/pistol,
/obj/item/gun/ballistic/pistol,
/obj/item/gun/ballistic/pistol,
@@ -5509,22 +5509,22 @@
/turf/simulated/floor/tiled/steel_ridged,
/area/mothership/bridge)
"mu" = (
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
@@ -5625,24 +5625,24 @@
/turf/simulated/floor/tiled/steel_grid,
/area/mothership/bridge)
"mI" = (
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
/obj/item/gun/ballistic/automatic/p90,
/obj/item/gun/ballistic/automatic/p90,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
/obj/structure/closet/secure_closet/guncabinet{
req_one_access = list(103)
},
@@ -5670,16 +5670,16 @@
},
/obj/item/gun/ballistic/automatic/lmg,
/obj/item/gun/ballistic/automatic/lmg,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
/turf/simulated/floor/tiled/steel_grid,
/area/mothership/armory)
"mL" = (
@@ -6058,16 +6058,16 @@
/obj/item/gun/ballistic/heavysniper,
/obj/item/storage/box/sniperammo,
/obj/item/storage/box/sniperammo,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/obj/item/storage/box/sniperammo,
/obj/item/storage/box/sniperammo,
/turf/simulated/floor/tiled/steel_grid,
diff --git a/maps/templates/shuttles/overmaps/generic/shelter_6.dmm b/maps/templates/shuttles/overmaps/generic/shelter_6.dmm
index 59af7740526..242fc42c382 100644
--- a/maps/templates/shuttles/overmaps/generic/shelter_6.dmm
+++ b/maps/templates/shuttles/overmaps/generic/shelter_6.dmm
@@ -227,46 +227,46 @@
/obj/item/gun/energy/laser,
/obj/item/gun/ballistic/automatic/p90,
/obj/item/gun/ballistic/automatic/p90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/flash,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/flash,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/shotgun/pump/combat,
/obj/item/gun/ballistic/shotgun/pump/combat,
/obj/item/storage/box/shotgunshells/large,
@@ -753,21 +753,21 @@
/obj/item/gun/ballistic/pistol,
/obj/item/gun/ballistic/pistol,
/obj/item/gun/ballistic/pistol,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/flash,
-/obj/item/ammo_magazine/m9mm/compact/rubber,
-/obj/item/ammo_magazine/m9mm/compact/rubber,
-/obj/item/ammo_magazine/m9mm/compact/rubber,
-/obj/item/ammo_magazine/m9mm/compact/practice,
-/obj/item/ammo_magazine/m9mm/compact/practice,
-/obj/item/ammo_magazine/m9mm/compact/practice,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/flash,
+/obj/item/ammo_magazine/a9mm/compact/rubber,
+/obj/item/ammo_magazine/a9mm/compact/rubber,
+/obj/item/ammo_magazine/a9mm/compact/rubber,
+/obj/item/ammo_magazine/a9mm/compact/practice,
+/obj/item/ammo_magazine/a9mm/compact/practice,
+/obj/item/ammo_magazine/a9mm/compact/practice,
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/glasses/graviton,
@@ -1340,31 +1340,31 @@
/obj/item/gun/energy/pulse_rifle,
/obj/item/gun/ballistic/automatic/lmg,
/obj/item/gun/ballistic/automatic/lmg,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
/obj/item/gun/ballistic/automatic/z8,
/obj/item/gun/ballistic/automatic/z8,
/obj/item/gun/ballistic/heavysniper,
/obj/item/storage/box/sniperammo,
/obj/item/storage/box/sniperammo,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/obj/item/storage/box/sniperammo,
/obj/item/storage/box/sniperammo,
/obj/item/modular_computer/laptop,
diff --git a/maps/tether/levels/station2.dmm b/maps/tether/levels/station2.dmm
index 0eb957b45a9..5affacd8781 100644
--- a/maps/tether/levels/station2.dmm
+++ b/maps/tether/levels/station2.dmm
@@ -13492,8 +13492,8 @@
req_access = list(1)
},
/obj/item/gun/ballistic/revolver/consul,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/turf/simulated/floor/tiled/dark,
/area/security/nuke_storage)
"Br" = (
diff --git a/maps/tether/levels/surface1.dmm b/maps/tether/levels/surface1.dmm
index b85f8b96127..5448b6472bc 100644
--- a/maps/tether/levels/surface1.dmm
+++ b/maps/tether/levels/surface1.dmm
@@ -7923,8 +7923,8 @@
/obj/structure/table/reinforced,
/obj/item/gun/energy/laser/practice,
/obj/item/gun/ballistic/shotgun/pump/rifle/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/weaponsrange)
"eff" = (
@@ -35668,20 +35668,20 @@
pixel_x = 2;
pixel_y = -2
},
-/obj/item/ammo_magazine/clip/c762/practice,
-/obj/item/ammo_magazine/clip/c762/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
+/obj/item/ammo_magazine/a7_62mm/clip/practice,
/obj/machinery/recharger/wallcharger{
pixel_x = 4;
pixel_y = -28
},
-/obj/item/ammo_magazine/m45/practice,
-/obj/item/ammo_magazine/m45/practice,
-/obj/item/ammo_magazine/m45/practice,
-/obj/item/ammo_magazine/m45/practice,
-/obj/item/ammo_magazine/m45/practice,
-/obj/item/ammo_magazine/m45/practice,
-/obj/item/ammo_magazine/m9mmt/practice,
-/obj/item/ammo_magazine/m9mmt/practice,
+/obj/item/ammo_magazine/a45/practice,
+/obj/item/ammo_magazine/a45/practice,
+/obj/item/ammo_magazine/a45/practice,
+/obj/item/ammo_magazine/a45/practice,
+/obj/item/ammo_magazine/a45/practice,
+/obj/item/ammo_magazine/a45/practice,
+/obj/item/ammo_magazine/a9mm/top_mount/practice,
+/obj/item/ammo_magazine/a9mm/top_mount/practice,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/weaponsrange)
"tbR" = (
diff --git a/maps/tether/levels/surface2.dmm b/maps/tether/levels/surface2.dmm
index 24a893edf85..7014591b4f5 100644
--- a/maps/tether/levels/surface2.dmm
+++ b/maps/tether/levels/surface2.dmm
@@ -20559,14 +20559,14 @@
pixel_x = 6;
pixel_y = -1
},
-/obj/item/ammo_magazine/m45/flash{
+/obj/item/ammo_magazine/a45/flash{
pixel_y = 9
},
-/obj/item/ammo_magazine/m45/flash{
+/obj/item/ammo_magazine/a45/flash{
pixel_x = 3;
pixel_y = 3
},
-/obj/item/ammo_magazine/m45/flash{
+/obj/item/ammo_magazine/a45/flash{
pixel_y = -3
},
/turf/simulated/floor/tiled/dark,
diff --git a/maps/triumph/levels/deck4.dmm b/maps/triumph/levels/deck4.dmm
index 1c493b97281..9c0530db936 100644
--- a/maps/triumph/levels/deck4.dmm
+++ b/maps/triumph/levels/deck4.dmm
@@ -14688,8 +14688,8 @@
dir = 6
},
/obj/structure/table/rack/shelf/steel,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
/obj/item/gun/ballistic/automatic/z8,
/obj/effect/floor_decal/industrial/outline/grey,
/obj/machinery/light{
@@ -18746,15 +18746,15 @@
/obj/item/gun/ballistic/fiveseven,
/obj/item/gun/ballistic/fiveseven,
/obj/item/gun/ballistic/fiveseven,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
-/obj/item/ammo_magazine/m57x28mm/fiveseven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
+/obj/item/ammo_magazine/a5_7mm/five_seven/ap,
/turf/simulated/floor/tiled/dark,
/area/security/tactical)
"mVP" = (
@@ -23551,18 +23551,18 @@
pixel_y = -7
},
/obj/item/gun/ballistic/automatic/wt550,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
/turf/simulated/floor/tiled/dark,
/area/security/tactical)
"qoS" = (
diff --git a/maps/triumph/levels/flagship.dmm b/maps/triumph/levels/flagship.dmm
index 9a561c6ff19..a9bba780a6c 100644
--- a/maps/triumph/levels/flagship.dmm
+++ b/maps/triumph/levels/flagship.dmm
@@ -221,16 +221,16 @@
"aP" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -2302,14 +2302,14 @@
/obj/item/ammo_casing/rocket,
/obj/item/gun/ballistic/rocket,
/obj/item/gun/ballistic/rocket,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -2863,14 +2863,14 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/turf/unsimulated/floor{
@@ -4478,10 +4478,10 @@
"nV" = (
/obj/structure/table/rack,
/obj/structure/window/reinforced,
-/obj/item/ammo_magazine/m9mmR/saber,
-/obj/item/ammo_magazine/m9mmR/saber,
-/obj/item/ammo_magazine/m9mmR/saber,
-/obj/item/ammo_magazine/m9mmR/saber,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
+/obj/item/ammo_magazine/a9mm/advanced_smg,
/obj/item/silencer,
/obj/item/silencer,
/obj/item/silencer,
@@ -4760,16 +4760,16 @@
"pc" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
-/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
+/obj/item/ammo_magazine/a9mm/large/ap,
/obj/machinery/button/remote/blast_door{
id = "ArmouryC4";
name = "Armoury Access";
@@ -4795,16 +4795,16 @@
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/camera/network/crescent,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
-/obj/item/ammo_magazine/m57x28mmp90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
+/obj/item/ammo_magazine/a5_7mm/p90,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -6250,16 +6250,16 @@
"ts" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
-/obj/item/ammo_magazine/m9mmt,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
+/obj/item/ammo_magazine/a9mm/top_mount,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -10299,18 +10299,18 @@
"Hg" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
-/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
+/obj/item/ammo_magazine/a7_62mm/ap,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -11404,11 +11404,11 @@
"Kq" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw/ap,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
-/obj/item/ammo_magazine/m556saw,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw/ap,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
+/obj/item/ammo_magazine/a5_56mm/saw,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -12486,8 +12486,8 @@
/area/centcom/security)
"NI" = (
/obj/item/clothing/accessory/holster/hip,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/obj/item/gun/ballistic/revolver/combat,
/obj/structure/table/steel_reinforced,
/turf/unsimulated/floor/wood,
@@ -14263,16 +14263,16 @@
"Tg" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
-/obj/item/ammo_magazine/m9mmt/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
+/obj/item/ammo_magazine/a9mm/top_mount/rubber,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -14715,14 +14715,14 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
-/obj/item/ammo_magazine/s44,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
+/obj/item/ammo_magazine/a44/speedloader,
/obj/item/gun/ballistic/revolver/combat,
/obj/item/gun/ballistic/revolver/combat,
/obj/item/gun/ballistic/revolver/combat,
@@ -14961,10 +14961,10 @@
"VI" = (
/obj/structure/table/rack,
/obj/structure/window/reinforced,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
-/obj/item/ammo_magazine/m57x28mm/smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
+/obj/item/ammo_magazine/a5_7mm/harpy_smg/ap,
/obj/item/gun/ballistic/automatic/combat,
/obj/item/gun/ballistic/automatic/combat,
/obj/item/gun/ballistic/automatic/combat,
@@ -15540,14 +15540,14 @@
},
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556/ap,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
-/obj/item/ammo_magazine/m556,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm/ap,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
+/obj/item/ammo_magazine/a5_56mm,
/obj/item/gun/ballistic/automatic/sts35,
/obj/item/gun/ballistic/automatic/sts35,
/turf/unsimulated/floor{