From 002dda4bf3e87e5a630da4abee7771e18425fdf7 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sun, 4 Aug 2024 15:31:26 -0400 Subject: [PATCH] projectiles v8 - ammo & magazines (#6637) completely overhauls ammo, magazines, and calibers; makes things a lot more standardized and efficient. --- citadel.dme | 81 +- code/__DEFINES/projectiles/ammo_casing.dm | 39 +- code/__DEFINES/projectiles/ammo_magazine.dm | 27 + code/__DEFINES/projectiles/system.dm | 15 + code/datums/design/designs/ammo/lmg.dm | 2 +- code/datums/design/designs/ammo/pistol.dm | 32 +- code/datums/design/designs/ammo/revolver.dm | 20 +- code/datums/design/designs/ammo/rife.dm | 14 +- code/datums/design/designs/ammo/shotgun.dm | 8 +- code/datums/design/designs/ammo/smg.dm | 18 +- code/datums/outfits/horror_killers.dm | 2 +- code/datums/outfits/outfit.dm | 4 +- code/datums/outfits/pirates.dm | 4 +- code/datums/outfits/tournament.dm | 2 +- .../recipes_weapon_and_ammo.dm | 4 +- code/datums/uplink/ammunition.dm | 42 +- code/game/antagonist/outsider/commando.dm | 2 +- .../gorlex/items/guns/phoron_spitter.dm | 71 + .../gorlex/items/guns/wild_hunt.dm | 50 + .../nanotrasen-supply/contraband.dm | 8 +- .../nanotrasen/nanotrasen-supply/medical.dm | 4 +- .../nanotrasen/nanotrasen-supply/munitions.dm | 8 +- .../nanotrasen-supply/recreation.dm | 6 +- code/game/machinery/recharger.dm | 29 +- code/game/machinery/vending/security.dm | 2 +- code/game/objects/items/gunbox.dm | 32 +- code/game/objects/items/storage/boxes.dm | 19 +- code/game/objects/items/storage/lockbox.dm | 12 +- .../game/objects/items/storage/uplink_kits.dm | 4 +- code/game/objects/objs.dm | 4 +- code/game/objects/random/guns_and_ammo.dm | 215 +-- code/game/objects/random/mapping.dm | 12 +- code/game/objects/random/misc.dm | 63 +- .../crates_lockers/closets/secure/explorer.dm | 4 +- .../closets/secure/guncabinet.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 20 +- .../crates_lockers/closets/syndicate.dm | 2 +- code/game/objects/structures/loot_piles.dm | 3 +- code/modules/awaymissions/loot_vr.dm | 58 +- code/modules/examine/descriptions/weapons.dm | 5 - code/modules/flufftext/Hallucination.dm | 2 +- .../modules/materials/definitions/misc/wax.dm | 2 +- .../simple_mob/subtypes/humanoid/clown.dm | 8 +- .../subtypes/humanoid/mercs/mercs.dm | 8 +- .../simple_mob/subtypes/humanoid/russian.dm | 1 - .../projectiles/ammunition/ammo_caliber.dm | 69 + .../projectiles/ammunition/ammo_casing.dm | 35 +- .../projectiles/ammunition/ammo_magazine.dm | 432 ++++++ .../projectiles/ammunition/calibers/README.md | 17 + .../ammunition/calibers/normal/a10g.dm | 33 + .../ammunition/calibers/normal/a10mm.dm | 48 + .../ammunition/calibers/normal/a12_7mm.dm | 18 + .../ammunition/calibers/normal/a12g.dm | 289 ++++ .../ammunition/calibers/normal/a357.dm | 86 ++ .../ammunition/calibers/normal/a38.dm | 75 + .../ammunition/calibers/normal/a44.dm | 89 ++ .../ammunition/calibers/normal/a45.dm | 229 +++ .../ammunition/calibers/normal/a5_56mm.dm | 164 +++ .../ammunition/calibers/normal/a5_7mm.dm | 173 +++ .../ammunition/calibers/normal/a5mm.dm | 36 + .../ammunition/calibers/normal/a75.dm | 51 + .../ammunition/calibers/normal/a7_62mm.dm | 202 +++ .../ammunition/calibers/normal/a7_92mm.dm | 21 + .../ammunition/calibers/normal/a9_5mm.dm | 33 + .../ammunition/calibers/normal/a9mm.dm | 208 +++ .../ammunition/calibers/special/arrow.dm | 51 + .../calibers/special/biomatter-wax.dm | 31 + .../ammunition/calibers/special/biomatter.dm | 47 + .../calibers/special/blunderbuss.dm | 18 + .../ammunition/calibers/special/cap.dm | 24 + .../ammunition/calibers/special/dart.dm | 71 + .../ammunition/calibers/special/foam.dm | 137 ++ .../calibers/special/microbattery.dm | 4 + .../ammunition/calibers/special/musket.dm | 19 + .../ammunition/calibers/special/pellet.dm | 36 + .../ammunition/calibers/special/rocket.dm | 15 + code/modules/projectiles/ammunition/rounds.dm | 734 ---------- .../projectiles/{pins.dm => firing_pin.dm} | 2 +- code/modules/projectiles/gun.dm | 18 +- code/modules/projectiles/gun_item_renderer.dm | 13 +- code/modules/projectiles/guns/ballistic.dm | 177 ++- .../guns/ballistic/microbattery}/medigun.dm | 20 +- .../ballistic/microbattery}/medigun_cells.dm | 0 .../microbattery/microbattery-casing.dm | 33 + .../microbattery/microbattery-magazine.dm | 50 + .../ballistic/microbattery/microbattery.dm} | 157 +- .../guns/ballistic/microbattery}/revolver.dm | 24 +- .../ballistic/microbattery}/revolver_cells.dm | 0 .../projectiles/guns/energy/frontier.dm | 126 ++ .../guns/energy/special/hardlight_bow.dm | 30 + .../projectiles/guns/launcher/syringe_gun.dm | 2 +- .../guns/legacy_vr_guns}/bsharpoon.dm | 0 .../guns/legacy_vr_guns}/crestrose.dm | 6 +- .../guns/legacy_vr_guns/custom_guns.dm | 272 ++++ .../guns/legacy_vr_guns}/dominator.dm | 0 .../guns/legacy_vr_guns}/gunsword.dm | 0 .../guns/legacy_vr_guns}/protector.dm | 0 .../guns/legacy_vr_guns}/pummeler.dm | 0 .../guns/legacy_vr_guns}/secutor.dm | 0 .../guns/legacy_vr_guns}/sickshot.dm | 0 .../projectiles/guns/projectile/automatic.dm | 176 +-- .../projectiles/guns/projectile/boltaction.dm | 32 +- .../projectiles/guns/projectile/bow.dm | 4 +- .../projectiles/guns/projectile/caseless.dm | 89 +- .../guns/projectile/caseless/pellet.dm | 30 +- .../projectiles/guns/projectile/contender.dm | 28 +- .../projectiles/guns/projectile/dartgun.dm | 90 +- .../projectiles/guns/projectile/musket.dm | 8 +- .../projectiles/guns/projectile/pistol.dm | 143 +- .../projectiles/guns/projectile/revolver.dm | 34 +- .../projectiles/guns/projectile/rocket.dm | 2 +- .../projectiles/guns/projectile/semiauto.dm | 12 +- .../projectiles/guns/projectile/shotgun.dm | 16 +- .../projectiles/guns/projectile/sniper.dm | 12 +- .../modules/projectiles/magazines/magazine.dm | 255 ---- .../modules/projectiles/magazines/smartmag.dm | 226 --- .../modules/projectiles/magazines/unsorted.dm | 1259 ----------------- .../modules/projectiles/projectile/bullets.dm | 2 +- code/modules/projectiles/unsorted/magnetic.dm | 7 +- code/modules/random_map/drop/drop_types.dm | 10 +- code/modules/research/designs/medical.dm | 2 +- code/modules/research/designs/weapons.dm | 44 +- code/modules/vore/fluffstuff/custom_boxes.dm | 6 +- code/modules/vore/fluffstuff/custom_guns.dm | 879 ------------ .../xenoarcheaology/finds/find_spawning.dm | 2 +- .../gorlex/items/guns/phoron_spitter.dmi | Bin 0 -> 2947 bytes .../gorlex/items/guns/wild_hunt.dmi | Bin 0 -> 1212 bytes icons/mob/items/lefthand_guns.dmi | Bin 133089 -> 131895 bytes icons/mob/items/righthand_guns.dmi | Bin 138305 -> 137253 bytes icons/modules/projectiles/casings/a10g.dmi | Bin 0 -> 398 bytes icons/modules/projectiles/casings/a12_7mm.dmi | Bin 0 -> 2178 bytes icons/modules/projectiles/casings/a12g.dmi | Bin 0 -> 3449 bytes icons/modules/projectiles/casings/arrow.dmi | Bin 0 -> 1540 bytes icons/modules/projectiles/casings/bio.dmi | Bin 0 -> 290 bytes .../projectiles/casings/blunderbuss.dmi | Bin 0 -> 527 bytes icons/modules/projectiles/casings/foam.dmi | Bin 0 -> 454 bytes icons/modules/projectiles/casings/misc.dmi | Bin 0 -> 182 bytes .../casings/modular_cased_unused.dmi | Bin 0 -> 2409 bytes .../casings/modular_caseless_unused.dmi | Bin 0 -> 1053 bytes .../casings/modular_grenades_unused.dmi | Bin 0 -> 987 bytes .../casings/modular_rocket_unused.dmi | Bin 0 -> 619 bytes icons/modules/projectiles/casings/musket.dmi | Bin 0 -> 313 bytes icons/modules/projectiles/casings/phoron.dmi | Bin 0 -> 182 bytes icons/modules/projectiles/casings/slim.dmi | Bin 0 -> 1299 bytes icons/modules/projectiles/casings/syringe.dmi | Bin 0 -> 559 bytes .../modules/projectiles/eris_ammo_unused.dmi | Bin 0 -> 8748 bytes icons/modules/projectiles/legacy/ammo_box.dmi | Bin 0 -> 1450 bytes .../projectiles/legacy/microbattery_old.dmi | Bin 0 -> 3888 bytes icons/modules/projectiles/magazines/bio.dmi | Bin 0 -> 2010 bytes icons/modules/projectiles/magazines/darts.dmi | Bin 0 -> 530 bytes icons/modules/projectiles/magazines/foam.dmi | Bin 0 -> 1354 bytes .../magazines/modular_box_unused.dmi | Bin 0 -> 4238 bytes .../magazines/modular_magazine_unused.dmi | Bin 0 -> 8445 bytes .../magazines/modular_speedloader_unused.dmi | Bin 0 -> 4200 bytes .../magazines/modular_stripper_unused.dmi | Bin 0 -> 1137 bytes .../magazines/old_magazine_box.dmi | Bin 0 -> 1073 bytes .../magazines/old_magazine_clip.dmi | Bin 0 -> 430 bytes .../magazines/old_magazine_drum.dmi | Bin 0 -> 898 bytes .../magazines/old_magazine_stick.dmi | Bin 0 -> 10936 bytes .../projectiles/magazines/old_pouch.dmi | Bin 0 -> 474 bytes .../magazines/old_speedloader_6.dmi | Bin 0 -> 1825 bytes .../magazines/old_speedloader_7.dmi | Bin 0 -> 1211 bytes .../projectiles/magazines/old_stripper.dmi | Bin 0 -> 1998 bytes .../modules/projectiles/main_ammo_unused.dmi | Bin 0 -> 25935 bytes icons/modules/projectiles/rp_ammo_unused.dmi | Bin 0 -> 19078 bytes icons/obj/ammo.dmi | Bin 62729 -> 0 bytes icons/obj/ammo_vr.dmi | Bin 8812 -> 0 bytes icons/obj/gun/ballistic.dmi | Bin 92570 -> 91271 bytes icons/obj/gun/ballistic/caseless/pellet.dmi | Bin 1359 -> 1324 bytes icons/system/error_32x32.dmi | Bin 0 -> 209 bytes maps/away_missions/140x140/carpfarm.dmm | 6 +- maps/away_missions/140x140/snowfield.dmm | 10 +- maps/away_missions/archive/spacebattle.dmm | 3 +- maps/away_missions/archive/zresearchlabs.dmm | 10 +- maps/minitest/levels/sector1.dmm | 6 +- maps/rift/levels/rift-05-surface2.dmm | 56 +- maps/rift/levels/rift-06-surface3.dmm | 8 +- maps/rift/levels/rift-11-orbital.dmm | 60 +- maps/sectors/admin_planets_192/croatoan.dmm | 114 +- .../miaphus_192/levels/miaphus_192_beach.dmm | 16 +- .../level_specific/class_d/hiddenbunkerD.dmm | 6 +- .../level_specific/class_d/landing_padD.dmm | 6 +- .../level_specific/class_h/desertsaloon.dmm | 8 +- .../level_specific/class_h/highnoonH.dmm | 14 +- .../level_specific/class_h/huntercamp.dmm | 4 +- .../level_specific/class_h/landing_padH.dmm | 6 +- .../debrisfield_vr/tinycarrier.dmm | 8 +- .../level_specific/virgo2/DJOutpost1.dmm | 2 +- maps/submaps/level_specific/virgo2/DoomP.dmm | 4 +- .../level_specific/virgo2/Rockybase.dmm | 6 +- maps/submaps/mountains/Rockb1.dmm | 2 +- maps/submaps/mountains/prepper1.dmm | 4 +- maps/submaps/wilderness/DJOutpost1.dmm | 2 +- maps/submaps/wilderness/DoomP.dmm | 4 +- maps/templates/admin/dhael_centcom.dmm | 238 ++-- maps/templates/admin/ert.dmm | 156 +- maps/templates/admin/ert_base.dmm | 60 +- maps/templates/admin/kk_mercship.dmm | 122 +- maps/templates/admin/mercbase.dmm | 108 +- maps/templates/shelters/shelter_4.dmm | 40 +- .../shuttles/overmaps/generic/abductor.dmm | 12 +- .../shuttles/overmaps/generic/cruiser.dmm | 150 +- .../shuttles/overmaps/generic/shelter_6.dmm | 142 +- maps/tether/levels/station2.dmm | 4 +- maps/tether/levels/surface1.dmm | 24 +- maps/tether/levels/surface2.dmm | 6 +- maps/triumph/levels/deck4.dmm | 46 +- maps/triumph/levels/flagship.dmm | 218 +-- 208 files changed, 5184 insertions(+), 5270 deletions(-) create mode 100644 code/__DEFINES/projectiles/ammo_magazine.dm create mode 100644 code/__DEFINES/projectiles/system.dm create mode 100644 code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm create mode 100644 code/game/content/factions/corporations/gorlex/items/guns/wild_hunt.dm create mode 100644 code/modules/projectiles/ammunition/ammo_caliber.dm create mode 100644 code/modules/projectiles/ammunition/ammo_magazine.dm create mode 100644 code/modules/projectiles/ammunition/calibers/README.md create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a10g.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a10mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a12_7mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a12g.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a357.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a38.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a44.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a45.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a5_56mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a5mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a75.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a7_62mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a9_5mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/normal/a9mm.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/arrow.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/biomatter-wax.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/biomatter.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/blunderbuss.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/cap.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/dart.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/foam.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/microbattery.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/musket.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/pellet.dm create mode 100644 code/modules/projectiles/ammunition/calibers/special/rocket.dm delete mode 100644 code/modules/projectiles/ammunition/rounds.dm rename code/modules/projectiles/{pins.dm => firing_pin.dm} (99%) rename code/modules/{vore/fluffstuff/guns/cell_loaded => projectiles/guns/ballistic/microbattery}/medigun.dm (87%) rename code/modules/{vore/fluffstuff/guns/cell_loaded => projectiles/guns/ballistic/microbattery}/medigun_cells.dm (100%) create mode 100644 code/modules/projectiles/guns/ballistic/microbattery/microbattery-casing.dm create mode 100644 code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm rename code/modules/{vore/fluffstuff/guns/cell_loaded/cell_loaded.dm => projectiles/guns/ballistic/microbattery/microbattery.dm} (51%) rename code/modules/{vore/fluffstuff/guns/cell_loaded => projectiles/guns/ballistic/microbattery}/revolver.dm (84%) rename code/modules/{vore/fluffstuff/guns/cell_loaded => projectiles/guns/ballistic/microbattery}/revolver_cells.dm (100%) create mode 100644 code/modules/projectiles/guns/energy/frontier.dm create mode 100644 code/modules/projectiles/guns/energy/special/hardlight_bow.dm rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/bsharpoon.dm (100%) rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/crestrose.dm (90%) create mode 100644 code/modules/projectiles/guns/legacy_vr_guns/custom_guns.dm rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/dominator.dm (100%) rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/gunsword.dm (100%) rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/protector.dm (100%) rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/pummeler.dm (100%) rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/secutor.dm (100%) rename code/modules/{vore/fluffstuff/guns => projectiles/guns/legacy_vr_guns}/sickshot.dm (100%) delete mode 100644 code/modules/projectiles/magazines/magazine.dm delete mode 100644 code/modules/projectiles/magazines/smartmag.dm delete mode 100644 code/modules/projectiles/magazines/unsorted.dm delete mode 100644 code/modules/vore/fluffstuff/custom_guns.dm create mode 100644 icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi create mode 100644 icons/content/factions/corporations/gorlex/items/guns/wild_hunt.dmi create mode 100644 icons/modules/projectiles/casings/a10g.dmi create mode 100644 icons/modules/projectiles/casings/a12_7mm.dmi create mode 100644 icons/modules/projectiles/casings/a12g.dmi create mode 100644 icons/modules/projectiles/casings/arrow.dmi create mode 100644 icons/modules/projectiles/casings/bio.dmi create mode 100644 icons/modules/projectiles/casings/blunderbuss.dmi create mode 100644 icons/modules/projectiles/casings/foam.dmi create mode 100644 icons/modules/projectiles/casings/misc.dmi create mode 100644 icons/modules/projectiles/casings/modular_cased_unused.dmi create mode 100644 icons/modules/projectiles/casings/modular_caseless_unused.dmi create mode 100644 icons/modules/projectiles/casings/modular_grenades_unused.dmi create mode 100644 icons/modules/projectiles/casings/modular_rocket_unused.dmi create mode 100644 icons/modules/projectiles/casings/musket.dmi create mode 100644 icons/modules/projectiles/casings/phoron.dmi create mode 100644 icons/modules/projectiles/casings/slim.dmi create mode 100644 icons/modules/projectiles/casings/syringe.dmi create mode 100644 icons/modules/projectiles/eris_ammo_unused.dmi create mode 100644 icons/modules/projectiles/legacy/ammo_box.dmi create mode 100644 icons/modules/projectiles/legacy/microbattery_old.dmi create mode 100644 icons/modules/projectiles/magazines/bio.dmi create mode 100644 icons/modules/projectiles/magazines/darts.dmi create mode 100644 icons/modules/projectiles/magazines/foam.dmi create mode 100644 icons/modules/projectiles/magazines/modular_box_unused.dmi create mode 100644 icons/modules/projectiles/magazines/modular_magazine_unused.dmi create mode 100644 icons/modules/projectiles/magazines/modular_speedloader_unused.dmi create mode 100644 icons/modules/projectiles/magazines/modular_stripper_unused.dmi create mode 100644 icons/modules/projectiles/magazines/old_magazine_box.dmi create mode 100644 icons/modules/projectiles/magazines/old_magazine_clip.dmi create mode 100644 icons/modules/projectiles/magazines/old_magazine_drum.dmi create mode 100644 icons/modules/projectiles/magazines/old_magazine_stick.dmi create mode 100644 icons/modules/projectiles/magazines/old_pouch.dmi create mode 100644 icons/modules/projectiles/magazines/old_speedloader_6.dmi create mode 100644 icons/modules/projectiles/magazines/old_speedloader_7.dmi create mode 100644 icons/modules/projectiles/magazines/old_stripper.dmi create mode 100644 icons/modules/projectiles/main_ammo_unused.dmi create mode 100644 icons/modules/projectiles/rp_ammo_unused.dmi delete mode 100644 icons/obj/ammo.dmi delete mode 100644 icons/obj/ammo_vr.dmi create mode 100644 icons/system/error_32x32.dmi diff --git a/citadel.dme b/citadel.dme index 5a9d261dab1c..f46817ae9d79 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 607dbe251c8f..87427678b773 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_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(casing_flags, list( - BITFIELD(CASING_DELETE), +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 000000000000..4acb0ad2309c --- /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 000000000000..fafd60aac2ca --- /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 574e86711430..a88fe827deab 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 fbc59829f718..87364154cad3 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 b82d458525cf..255872489a6c 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 7ce908494522..c132d142bc77 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 dabe1b82cb42..6e4b94e753b6 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 8c268b582b5c..68a9a3411da4 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 d28dfa48ff33..87ce4e992701 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 5c2ef580402b..e9f5223c5e08 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 81f725cb4c1d..3208e284a182 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 04cd481c78fe..25b64c6ebda3 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 7bd926e0b30a..12f5948ba16e 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 94bd64cee26e..407768b7ecf2 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 77aecd941ee0..6093faca4f10 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 000000000000..c42d565c7656 --- /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 000000000000..0994de35363f --- /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 bed7fbd69281..18172ed42cab 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 5c11413b3a01..9e7848402f26 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 75134297cde2..d3fc78511e77 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 51120d081856..7c9fefcb365f 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 a1124b7d4465..b016f4d0a5c3 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 96ef3f0bfbc9..d00588d040f6 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 ebfbe0ad04b2..7744108a0dcf 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 517fd0870f0a..a8d3e994287a 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 6212bf3ec1dc..558830cbd480 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 ea34163b60e0..710acf38d926 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 afa68ab234f6..03056c176db8 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 8e41e4311d0a..979b442f766f 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 54078e01f6a7..d6e34c541f6a 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 f4aad4afb1de..6a874a3abaed 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 2ef79c88ac1d..5e94c4ef3dea 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 6907b9d21a73..dab0d7d5a4ee 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 970aeacdb3d7..dfe4064a21ea 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 513d3867a2cc..e0b788d4508b 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 8f87d062a4d2..a18bd0046e62 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 3d628ac9890d..5658cd480691 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 00b5c0d192f2..835d35882dcc 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 6dcd35967de5..e553eba475a4 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 8cc4191d3a43..eb574802497d 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 3992079f92b9..e9e9ee7e338a 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 bfac17fedee4..59acf04dd4dc 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 618e4efce109..7de7e01468eb 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 000000000000..4bc9635dff49 --- /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 a5131b48e330..ce1f082a8592 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 000000000000..8c8b9f9ba867 --- /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 000000000000..689d84a5f172 --- /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 000000000000..44041b188443 --- /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 000000000000..a131c151e343 --- /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 000000000000..af32018f1b82 --- /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 000000000000..d9c38f66505e --- /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 000000000000..4769438fca46 --- /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 000000000000..95965578d4f1 --- /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 000000000000..e2b5cfa7d3c0 --- /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 000000000000..09763abc03a4 --- /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 000000000000..f316dad8b2fb --- /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 000000000000..c15269588f64 --- /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 000000000000..012491f1f1a6 --- /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 000000000000..9dd237c118f7 --- /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 000000000000..a8f169accf52 --- /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 000000000000..ab02a61e8c9c --- /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 000000000000..ad928b1f24f0 --- /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 000000000000..7c38d166c294 --- /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 000000000000..3b065aa758b9 --- /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 000000000000..2d53f3d37087 --- /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 000000000000..44e5556d5d01 --- /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 000000000000..61294cbe13ee --- /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 000000000000..3550ad9a3081 --- /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 000000000000..151bef61bc94 --- /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 000000000000..0379c401ac94 --- /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 000000000000..894ffcd4c0d6 --- /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 000000000000..6aed4b07d22a --- /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 000000000000..749c074bcc44 --- /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 000000000000..d0e2bc2d67ff --- /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 e43c6248cb0e..000000000000 --- 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 d8aef4eafd08..bc63a65de4f1 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 171bf1e45e97..c2e5bfd281cd 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 3838f77d4d7b..a41a6fc61ad8 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 717c55ad9750..5dde19d70d80 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!")) + 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 - 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!")) + 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 - 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)) - 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 55d42b558703..e0c51d4bf7d6 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 000000000000..34e251db4e36 --- /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 000000000000..dbcb829cd3c9 --- /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 507156a9c101..849ee6ff1a1f 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 2e545edf3daa..7ecdbf4d0f7c 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 000000000000..ded27a270018 --- /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 000000000000..1b6ce64b3a92 --- /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 3542155b7d5c..9393ff5c7233 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 158e6f38fb4f..c3570b14781c 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 000000000000..f7ef0beaa8d1 --- /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 f7e8c4edfb02..b7adad88eba9 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 2f11bfa5cb00..3022077da2dc 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 397abce2ee4d..20c24f1e6b27 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 9d424ef08c6c..baaea211fcd1 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 83b721c9b72b..7d16ae438385 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 fb9f38223370..9152fcd550a2 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 6a96b6ffe293..164d129f016e 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/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 +/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 + + 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 a17b875a4afc..bd8e2340831d 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 c2798f3b1202..f69f269aeb50 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 accf92724242..b2f97239d876 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 9e58df29ac5f..184ef55b5483 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 f93a515685b1..d7c0ab90690b 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 32f77895c863..ec3d65b1dccb 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 1b5b38c2fd5e..63cbc51cdfa8 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 c03ca5d1ad78..000000000000 --- 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 9b2f96e96829..000000000000 --- 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 12af5d2212d8..000000000000 --- 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 19d02f162838..c6d6b9ef8960 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 fb3cecc666ec..2da277715f02 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 0b7db3ee822f..9bd0d665fd50 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 31ba401b0a4c..44babf4b377e 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 dc0a9de724b1..350c6ea1ae39 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 58d18f6cf71d..2d22f778eda4 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 c63aab7a1642..000000000000 --- 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 4cfb15bcc9b3..561cc0e49466 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 0000000000000000000000000000000000000000..d763baecaf60bac5cf4e74f2ca1376645e6855ad GIT binary patch literal 2947 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
JQ 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 WYPVS5htal!Zg5rYd!=`+U;YoqnP-3i diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi index 670767a6eac31ceeaad561fc78c20ad635688ef2..1a2826d0120edee1aead741ad169677af08b5406 100644 GIT binary patch delta 15427 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 delta 16401 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 CPEqdw diff --git a/icons/modules/projectiles/casings/a10g.dmi b/icons/modules/projectiles/casings/a10g.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fc4dd598f1f5d183726f9f9c194b2fbc460e8b62 GIT binary patch literal 398 zcmV;90df9`P)0XQ z0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5$KjWGhl zFbKq4Cm|TSCjWnJp_w@bZ*6WB5~V!*(Y+RVsmVpgw_5iVer)(6<3x6Gp5X;E=F|ih zxDQyM*4|z?qW`@QFGSq@CNc^7Lpk#)_PhJM;_HGx5?>NuN8-!Zzd~OX`Bs=RoD+hiRY#+qd;MV2CCY06{Y8^Z{XZ1vJmV#YqQjJ-&fgu#$R5sJu~ zGhiUafX1_pd7?@xnk5k3e!bWe>m+Qqph%+ zhW0acr13dHW6=A>-ULg?8)4?{BiQj&v91={MAQ3jK7Q~-eMjfL?=bXegk z3G45$1nW6mN3;{&Bp}>8P@P9W%4DqI^thN7s$@E;vfq?>H{lvsFh5PszCmERrvU;X z4a56~pra5iN8!(trQk{ARr$06EdA({Zsb_J450Q4p?6NqccOeD?~bToA%Z3fv+;%S zMt0@qxKTQ8IpR=$N+#p5{Uy`wZtgsOH3m<9kn+5iw9Lvd13FSt*A}K1DW%OE=s)iF zdz$!?^3%KWD_9|zk%Y0AqeCN&M^YzqzRdc&UZ9^t>M9&LDv3Q_8fjkSw?$Xi`P-I9 zUJM+5+j=M;5Lu)nE1ntqEGPVeZeMu3zLNMAbj(VSdMPgJipgeC22&V$L(bna4KFSj(&gL20!)xw= zD`mCN<3--XE`V88>)Kh6jgMqswQ`X+;m40= zr6zQIQ+ZYZpeXdxqs=HA6brYCnXs09hi;-Ax3%*TZ~c zgjO!1t89cp0`ICgC(rJ;PY&oAHsDF@MTa&R`54L}{Z++|i0%Ce1lTIKPBdsCli8c6 z>ejYf4ie^$0`i3Zx=LIeevy>_+WnI&vg`_1vRv#$D{i2iQWzP)Pn~^R7xo;fyef{j zus?o6{O!}^}(+6qa z55Kpyud@@DYYINGH6lPgO#C%GH4AzHo~qydT7Fef`h%C1X)zJQ{@+*x0`L5DUjF`2 zA{?{}|I<^$hE0-PttF(z4zaD;G+BZSLzXTv9&s>`26embO3_>(!ob7NAAerPH3aT` z$kbZTdEk3_7Q_L4QR#wJP%B}G-u%j+ST1mb-4tQu}u5lk+E6V@1Q5l4^_%Y*Sbga4u|a*P0?#cO?Eo4lX7O2{d)IZ6u`?>7)M|}_M{)l9J6BMy7b1`S+d&#z@=SQ5&%#VcyWH9G;zGih zQLz-CO=Q_kgic!ZJ2)uZWHHN@ytgzxgA7Aq7rww&(lqRR)Rm+rhO;wRG_&5$!6)B> zn|;L70mo!lho^_WQK= z5q74Xk?Q7NAzx5+N)$(H%g+GQHoKrLJOwM4YjaZHpCWQ8?$<}w@7VSxoFTG0h6mRj zlgD2hN;IOr{pxZ15>c&E#8cGs48;g(>288<#U>qg>7GoWBz53n6w63Bd8qjs}F22KwYVP#R`4+&c7;L zrQqb_Y#W=t;05yI8ceBXE7QZ7vSfIP5f4^{lE)Tn`5%|DLURK6-_%u4wfa%BMs4^b za}9IE{rVH5C+Sa_`%znFzf5WG?RH&mFZTM$*t%{yTDm-k7GYb*GmFitg2tXC?U9Nl z4W#2qOIz-gR4l9+PhW3H%&1?drpRf?zk*y|et!y5gXqi0oZt$O zR5|9HuMka;C6cb#KxD)nqn7>Gkm0-ALQ9rP^>-EFz_hIH<&nU9PECedQ{G>#A$Fnh zeF(ZKCNyq#^aw?3b-Gj1u(=b}F~-mJtO|-Wg96G1RXe3?^z-sC&p&W_&}`KU6jlN`jrCr)@WDbnwiRwwuOMgkm<$m^7?>T1H036Wwh$<{^|eU8 z=ebmEAsB(BrOc`&arF?fPuWl{!_0&6in6_=tqjEfOFWCObSpXaiH}<8(We4nVPb1s IW8@L{7Y()p?f?J) literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/casings/a12g.dmi b/icons/modules/projectiles/casings/a12g.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4e7a968d3782753d6093e7d2641a8c4a8b1ece6d GIT binary patch literal 3449 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 literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/casings/blunderbuss.dmi b/icons/modules/projectiles/casings/blunderbuss.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4d81d57cc12db4e73c77cda4e5bfee1fea5aa433 GIT binary patch literal 527 zcmV+q0`UEbP)>n2H&9B7ii)?d z05kvq00DGTPE!Ct=GbNc004J-R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+DW^0qCABE2w76J_ zi!&v&s2C_}$igNJ>2LLpTDWoklToC{O0R%}zK~zYI z?UT_C!Y~L$*LGuV6`lY8v%+OjGtfofH1eQX&fNiv9fp7XV5O9E(ytG=pqz@-I8CMa z#2z025ug$ZcDM%STGv3#TklV~jyKoCu`;X11(dgbICW;#crIo-i=mokn*h&Z=%(3n z{61RFvvfC23iu^A>28`(FfQmWhB*|B7jzdxiv?WJT?XMN9NlG*Ek}an^cL;Th20^6 zH+{Fah@*whZ^z)*q+I8>V+hu$0nAU~62LJ(g-fsi=BH>0#xXyIOF)3tuxi|l;9^)c zF_&{98^rzBA2~FEK&}|!uGps&yySAfamgn|lRP-V4jfFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM z;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+C9$YPiHkEOv#1!Phl?|03DF* z0wMr1 wvf2m80+hB7NOl1cfa3N6Iv8yqjDnE{0DG7tMXm(B>i_@%07*qoM6N<$f<&vQ00000 literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/casings/misc.dmi b/icons/modules/projectiles/casings/misc.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bf4e01ca840724ef26355f9b07597c0caa8b7dbe GIT binary patch literal 2409 zcmXX|2~<Sr6z@A)DF z|7lTmcx0y67H>j9=LqIf=LY-68!We2QNIq~5BScGkS+LVPUJyqKtg7GMp7CziINHc zS=B#W2}>^Ybtn-SKQEcC9%Lumr-=S4{>6Qh!ZY~Svn%RWo&E`iQf(Vs70>)eiW6;fFP}Wv`RlDwPil?u{fo+?-J9|Da?(YW4@y6uejH#I_? z%hAfwDf8=e5|egUVi3NZO0BIc`93+p=4DJE{tb|Uwt189Zb$9EgUC*7BRDt9p5G5+ zmZaotIjR1{Nw@KrZPN1-R(Jb%;L`c$jb-KJ7r(~+i?iW8ZQ=^{TpuHPQSY%`A2?ag?GWDBo_kvT<47=Zgw@xZNjug=ZD-mv|x(M zU`*-Kkb4`gC&eWrrgUP+{Q)i1A^S^+0$J^OGgz9uCT%MKp!bIa_(f(_E3S(Q#=Ji) z4EY`?wpm+mdqboH2Yz??w4c4)~T7dh;D-@WMI?iX}Z$x?Gl zoT;fxVd9o5T2|@ptCLQ(L8oh5O1o5OVOyN{4J~A#8vvs=LssdU-yE1&^k8&5sZ#73 z;|0Xchl_AGb;3!iNE=gIx@zZfeBHY4Rx6Y+kh2UW+|5Cugh3oM%IgTb#dB?bq(u4i zqrXb2fg_4pho^AYD+kR(#B1d~oXK9A`PTy^X_GvZkx&}S07=$y>vgts;CiO#P=w16 zjv#bGz=^r|$EHNPNuvP&2mGsD6Vliv2RFben)FVy^F>w*Q3L~s7T$5j$FE)EZQTTA z9?Ye6%Cj}bAX(T`>|MV8gf`Pe{PLBw*n_Miz{NC)ww$3CV>)?H|*r;n%J;e z+{QJkbCt$9fs!M4d|RJ?-n*-8dD6&A)UIyw+DNy39pQD@=ui|LUL=kJj{KVuqr-C2D z@&V-ws1>V|R!*?6kMcSjXg)j}2z`x~0d^ulL$?WTz$i`Zymlq&Ujg6T$T>JvAbz&@QL$ZRCJtN)=sm z5`io1X(oepTbijM_BpQ%|<#6sdC?Fsi@hh%0?=sL&+2HOB431Dv{l+RAB|O zMr~0i1=@(bt^KJHLpej==+>c;D0`+H_t46Xh_8O3hpWD+mOK(Cv)hh z^3*eN!jQbw6xNI6X%>ccU9xV57l}2r{tjI_>W7&1?OfjQ+c?NGpR*cxI`tJt4_}@0 zAhk5}Ox;pR2JEWZzGP3m#EKawxq`P=TMxNN_Db#=p)nkceJx3&*NN9MB|A)%9@RMN z4#f@D?aZQ&AxR4w7MWG6&h%b?gSZk)hu)mZ4Mj5X`BDuAta)X^!9K+~=Ij!sM6d21 z1buv^IY^!H>&2~@@ilWQU3M$HB#nM?Ia=5O;S_C6zZHbnaIB#zGf{ByjONyI|MBL% z%w<0t{M>6@?x!K4rbXup*)}W0(hHmJQ0_Qz>OwyT$Zj)cv(gkhcGVQ2K0UcS#Dgc* zsLW1sA5zQjOc3r|cc2lfqDyYam=YDEc0tW5&}ImZC3OAoT_=}C@N;RWxr}z@{6~6? zf;>ueX-XZqZExH4f#;jnZ%tXlvaO%-{f$+Msoo{`Va3$F%~nSb3E&RE1IaQ9fqKDl zN-f%SCmv9TL zkZeDm6BW92@&AP9qf@eD_>)Bmr;GV1HvVsT1DoMS5rG~|| z>o&@YG<{EAOAcD{2d7Z;q)OU-Bw(lmc07bOMffakz5KsRoqE-8*?~ x7p0kd%0d_|g#0amu@HIf>fCoDYu_rw`dVsOlxACby5&~`gzOFvXxeqG;BOI(IUxW5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9c403e973da7a8a4cd84416403392a25d5108f89 GIT binary patch literal 1053 zcmV+&1mgRNP)P)t-sz`(!@ zFaRPtXj?2KRC6#NlET46J}gfOIAn`-DJA8l#{d8S*L%8HC?Z8ZG0A2@tCC@aoKAwm z*o;gra9=&Zz`)RDPw}Hf*1wXc5AJgS0004WQchCV=-0C=30lFbUjFc5^#%~LFTR{XnqP@C$4O^S`^t&}#kfvP15_4N%39)&$D%)mDT z13QK--=lyyMK);b%<}5qGE{hb` z0&EFvM__vb>qz4!uGbGwnMh7_F8R zfN=z!fN=z!K*kP`B?SAGEFsvhWeFwoor1lGt8eyjox6uiN=iyfN=iy_-jw{LpD*y| zOWuCce}TZ?Px&lh_g^9K{|{dU%>IW=(`2INc{T;;!^IS!4;NElT9(CfnAdex93r5< zTrTW@1cvMN$__|?`K(~^Spf+!pB0b*^H~82c>ab2Jby<5p5Gt=&u@`H;3I*+M*@M5 z1OgukL_QFRd>|0{Kp^sgz_e{Pf8P<`0s5wid`)0z+sM}i-0&fv2S99dx4%x_`1MAC45W3ID$?<<9`%zd_!Q+`XV4p2=QqLx+SFcoPaE$ z6BLjor1qnNy@zLg51-;O>;oSh!y)jEyC5wuyo{0sj=qkMevlmfBr7Q?DJl8=$-PXn zFPq%!H2b>EeNbdSIC7s<*-x&2e=v@t37`)bvriu`Spwtjc4G$w*zWf`JD~plcs$r4 zRe<@dfB?*A1=MFgE2Ii|euo4+e?bDCzorTVJ`xCgBoO$i0+9~{A|D7uexktGb&;7c1O;RX!Tv5wNbNr*;MTC`gJZY_J~)PZ;Ah+g79hRGqn~6YCCB9* XeuP;}RvA*100000NkvXXu0mjf<`>zl literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fdc259f0ee52225dca4f2b29fc0066d494b54fca GIT binary patch literal 987 zcmV<110?*3P)C0001)P)t-sz`(#x zRal3TiNL+FH8w~cA}}^KO&&~GWxcT!l8Fv3P0;7+az!e*gfQycgWk41MO7&^HYvcp zes+>bRX-`fnnsdwNJK6uR4Po(L{_IWTQxp=e6-m=dBGqXU2ZQaKPWQEPbTrBM5Nj4=J0BrCqGVnuAmtv??jEYk3WOq2JU_1ApJF#f#9e;oC;Etxyuw z3YsS&bt%4W7p$^ArV@0^s$(=Gp8LP}&f!R+<6x2_6^@@D!!%#wNOLF~GksSyJ&7`! z*qcO$op2zL4;=>UP5dV5Y+@Jvh$QSI24iV=FnJ1BaXJNi$s6Z?Ph0|*_3vl=0Vt=s zBd0h2VgLXE@kvBMRCt{2n$d28Komp)6-5D2thHK2u!06!Yybb_x_&_K7;iRflR2*w zyeF_e%jVPd4?B$=kuMEC)1PJ!na@M7@1Hb*4p z`8ctc6G8|fgxoe(OceMcMj?4|jrUIRgRcwLlLRSE{E z+rj$k1)48F*Qwvz{|23Fz zyZ<+4e%(k0gb+dqA?|5gxAVKt?#uD~u61e9x)!*6U$2*+zjO87a42w<1@sq_0c|IL z0{a53neS2nePinaaDeu1xK_aW*{}6i{PY6WzcGU6`-Bh&`~utSJ;GD(s9692002ov JPDHLkV1lyO!yy0w literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..923ff5bca67c6a1ebcb975688635618f4f5ffa9f GIT binary patch literal 619 zcmV-x0+juUP)<;!YG0wwiLxv^N+IO$`UU`l~;0fKuAR3(k!gyP660rZ@wxJLmwEix=i zo zcOuaJ04@ZcU?94-9LfZgF}|9Bzuz0ACVVFQ_tw_dT4QaRnwmFIN{Wh#JIGvY00001bW%=J06^y0W&i*H zcY0J)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/casings/slim.dmi b/icons/modules/projectiles/casings/slim.dmi new file mode 100644 index 0000000000000000000000000000000000000000..034c040811df67ece8fd2fe345745b50a22418b1 GIT binary patch literal 1299 zcmXw12~bm46#Zx=E=_QS8jNwqsZ5oKBTG;)pc6(Yq6kP8g5W3-C?*k7Kp+WAsila~ zBBYT(s1?voAt;*)`XdYpmI$p8qAX1ym{<@#&KdGqGpdFR}F?z_d|hYw;` z;#UFyfDH+zMgV|A0(t_MFGVx0>!O3vD>VF2RFG6E6`tJR#>c7D3AF`Snc@ThC>kGh z0f-O~3IV!MK?mrbz?o1C$^ZZa0O$pmb_0MAB`Q1tp(lVK3IxT}6!$8kMxQvaBMwIb zfw~uTH0aHaI?kphrk_qrX0el*3;@Uyl`9|Oy0)yA&Tp(PXh|?)ahB;WU<=@xe4(g^p(|)J&nRRP^+4Y0&6O7 z-0C5{$yl6RF8z8ol%Sn(lq4gX_9R{~<;tbAN>6#D*WR%4xxw2*ni!js?Yn7$L|?TD zXUWR;N8YyOH!Xc)mQR|Q7C%{c*tEFL#w9Yg#A?qN8KTvBp&ycscP2i8J6avd62wCUx@OcQbK7}blSBl@CeJnK1@J+y z0mz3-W$ptzO@c$r;l-8y0Ia_#2OV)g|L@ntBpw83%KJUU#AbuJ8nm!xtJDv5f^NyF zR{JA8R87p$XG&1B-_#uEH5yGF^JXW#KNxGN`a>tU=+f@SUDkjo2+Ga>Yx{gv8eRN_ zY7$Es>e;cuH>Z&V*-uu6(wuq9-jHiZ976p|#%^>zJ~w^DP_(dNf;H;(YFsMA zGH5&!n3K&P_<@kLiFvL{9T&;Vvc=@fjqg)y9}nhbc!L(VDSjOjSu-Pwe{@lxkYVS@ zD?U}rBTW$wov1K;DI4;O*+9+;vy=_IrHrP(VQKD8F1TSCc!*Z9#?WyJgVzgOUGBMW zoy^>UZPW=M&6+ST2@m!VQeiV>V@5#cPdlX9%(+kdCq2MY&!bp+CG&g?NC`L#L&JhT zrE;8yaEE@4*Ag#tIQDm>O7PFhsR8-bPL>d|zA|fJUVq!i% zK0G`;G&D3hIXOl~MuLKZFfcH=78b%FAj~c<*GNd)Qc^1`D<~)^CMG5$BO@s(DNIaE z85tQJ9UVG4IvgAv8yg$QCMLfhAIK^y(Ka^5B_-EIMaU^Bz8V_9z`*7`Om+YO00DGT zPE!Ct=GbNc004n{R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5f zFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSxUwiSFFjQ^IkBjuC^IEJRf&r; zC9|j)C}+sUnO2mTn+jp$)}fo012Pz)(F8@KvVyCh3)pP{F#$0h^E)mN0002GNkl;A7U_K9*NH=XZUdJg}q-~z?~0R9j0u=RqmsNR5- z#Q{Y*4|Sv2YI_D0RR}QM>Grf=A%8&G3m9YigJC=xPo}fLK<*aK7fZcbZ??N+e@IIL zC5Pzv3DToUPg!=(k~lEnaJk;@k17j&=RaTiUE_QJ0002^5=F(Ab4v&jQjkQ%o!3ty xrIZYr&!n9|&Ko-CwjUJm_X%+mDpYIn}lG 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 V4P|hR`IR4V(ddd{>3OH9{{kEBW<~%2 literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/legacy/ammo_box.dmi b/icons/modules/projectiles/legacy/ammo_box.dmi new file mode 100644 index 0000000000000000000000000000000000000000..92504791e724b73497f86c6045d25426c7b00d42 GIT binary patch literal 1450 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 literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/magazines/darts.dmi b/icons/modules/projectiles/magazines/darts.dmi new file mode 100644 index 0000000000000000000000000000000000000000..91c2dbc8382c52559b5334c39f08ae9fef38758c GIT binary patch literal 530 zcmV+t0`2{YP)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRL zOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DJ8L}q*&KfiHkEOv#1y-V#vjrR+N~V3SpzF zBTkjB36biIiBxAqq&h<))fo_{F1|Q7F(-#uS3*@2=~k#}B3%qsjnm!A3a)-G;OGYc zheMMXUa3W00002>Nkl+N3SV|iGG*ALH2mGk*jh zG%yaZ=YS^HHyYF%?Hq8qdOW|*3)@tm Uw=*CEwg3PC07*qoM6N<$f)JzJy#N3J literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/magazines/foam.dmi b/icons/modules/projectiles/magazines/foam.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b6bf61b83f85b8bf5a748bea65f09d6988da3d81 GIT binary patch literal 1354 zcmV-Q1-1H#P)005u}0{{R3yb+fl00021P)t-sz`($k zk^f;?|J2g|PE=SkX8!=0Gk}1AA}A|za&kjSOlD?gI6XjzhleaMGcqzVRaI3L{}2VY z0iXY!D?KNBm2GH)Sxjm>I7u#5O#ehYDRg5nZD#++#s5r3DROBxpqu|>ST_JZ05gvg z7<&dDX#)kM0UQ_@2FU?}|9>V=-0C=2@ zlT8bPKoCIB?yng1Y-o8cC|pu76ZO(53|C!PGj^Bi=jR7R1mfIgmdE2Ab}Ts1V;F;f z3dxg6#k)If!CN`Rc=1v<{jymTqhY*m^t32lXx5MBgDc$$+ck+%a;f?!ml%~SS~ku9 zpo0Y^?=)UJ(#vku)(Gc7;atebFS=|Ms6v4%6!=1cFSP9)BoWl4DHxJ6;56_Vn(AXc(-~*Mv+d#tlc?19e18+%0K~#90 z?U-v<;xH6N5esx=92A+Nj!)#_YaB-h{Qv)K(hxDy^LP%ZUSm<*tV54|4y2xiV}rhV=<5!(G}? ztf%i#$lS%S#sb|8>lNe;YrVrRhBX(+8`dvK8`ge@Il~AFqz&T`d^ao#MsbIg;eJ>A z88(QaKxx?7?{;Io!_u&8@Dm&Kdh`Kd^G}AxkHOx-L62G=I%kPqu+i()n*#tq)ExHv zH5(-4Z~DWdq)$&J==FlZ2W4`4J}3N`xd}Vp8~hYxSvC}y4CtJj&-vz3Aj{PG7C|D< z=W_{hLY^NoIkjF13>C)~L3=KL2M{O7oG|3pzYEAW7$IoSw_qp*PEJlp!PC=UmRz0C zWeod_p>@3yI6FHh1urfxZTa$qgfTo~4DIVxgI8B{gV)!#Jhg;OKXF{4ZRx- zZ8*r71~aa~z=l$QYA|CP3~N|LgFy`k;z2<-IOH1)X($C`gU5D3*`PTOZn$djm=Mex zwB+k25MKNxzJOw|7i~-0XxBeE$2aUj;#1t_uWh@a6SIzY2o3{9Pbp8g!aI zg%+e5beZ1;7mT~XA=9AK{EiTO{r9S01wmV`3&;lj=66Oz`g4xUHG#ZA-}#-%P&`>D z>raY__H}{DmjVOTp!fXFWXL>f9UjGv3g>qK0000000000_}a|p+zTbQwQaNE{)+0000000000 z;A=z7@uC=A6sKDX>+om07{+f)?9-|361|{xNEVBr70mYl0ATC<2d3B^$#F_LRsaA1 M07*qoM6N<$f&vq7IRF3v literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..92e268bd8818add41ca9c2ca19f843c1a979a1fb GIT binary patch literal 4238 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 b8wC#9pC4Q3d4A&l`uwDw)3NeDeG~p4STyHT literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f565fbbd2a1d74c75bed1eae013d69954a11b314 GIT binary patch literal 4200 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fc99de5d492373e45c6c753323f60a0e65a4173e GIT binary patch literal 1137 zcmV-%1djWOP)a|0QlHoTP!4ce1P1b8*nlJACkg2WQ&5r*djV;RC6#aPYHya zP75#qg^83_R%W}w$uu}U$!0V=-0C=30)lEwSF%ZV_^X5|w?OCxedh?)es)24&x+!{-l}0z< zOPC4u>pNKRCiFQ3X5h~pewR$?*4{f$ZRgA(vE;8$x~Ap%g=xO?zK*&q=B61_ejDp? zkvi0*<7DO5mVAg5gI=LsZ(DkF@geLY*{99g-ML5`yX{=xyWlCTsJn4K>a*K^Vw!zs z(L*!Syz=moj`QDnshmqm{QNRVI=y~Bn<4QWi5Ez`MB+;%zB)Z-M1v6xMl=}FU_^rv zjq!kRXbpI14S;A3h-eLvXbqSMLL!KWARvNx2*M$VMnN&i8>|`k9>bVyx`FAR6))NUCc9g2(Cs}#ny&Ks zMMOkoN9rZZ%il}-%HK=+D$q-MD$`45c0LD>O7)UiUEVICqy0Lw|G#1H7s(iWsCkVwWDKDF087RQ+z*gsj7)ex zK#?)DW?cDxAp8X+A|fIpk^*%NH2_@$4P&1}!`SE0u=bLk?%|_^UeeF}K8KEIdP$IR zGvC4dB%K+|c=!mNxprpejKMpsAmhk8q|bQve1|16e!n};UnFDnsb)3SkTHPv11uRM za6dqjF*4)*07b^onsMd(f$$fQh=_=YNDBV{<}uJU&@lEnG>m-?4QnsyX<33t3B9DB z z4H*MyKfsbP0`~(X86yw8AE3w>S~ISEKd=P9fJ8(@L_|`cuAv5?YoKB5b7&a*92(YM zl0-r;Nr9%9G^(L9Lu%;Epb9dM;Llh@L_|bHfFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5f zFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+(bUvT*Hnp%GbOXA7${)K#hF%= zn41b=qbf5YPMI-r%8ZCpW=Nbe1A@wO%?yYz45W$(v&>D2F$<^)r&-Dhu6{1yC<6d5 zO>(N=yK!v*00ON^L_t(&f$f(MQ{pfX#p@N2DyDx9J&P1X>z#53mhb=NZj%-vG}%bD zx!#Oz$LE_j7B50fJ0s%xV#*r1sw9mVHDvLxZ{n(v0(yt{NE&Sb$zWj5E>@vf=_O4 za0A!`pW(=aChmN~Pb4rfOgJ!1NaOVZG2u{OKuq9<9}*ZM1^5Jxc)-7;MFPN;1umKi z9P!}jKL#~+&b_?6yu3OP`%oO)aB~0T=u&hr@h@+Hy59#uY%qXx@_rx0vd-n?{XRA% zY~s}Yo;W{wzmLIwblO1h53x*V z;K%(vYG5)^Z#FDGzV2EH$ed-l&H%RAU_6u5PC({aKGPY%b~}vEvRMvg#Vwmb0u1AM zma)?c!~~kcb@dz)U>KieiOK+FyOk4eCvfrz9<&B*_j@*H^MVxxyyxtpoq)`l-hgca zyg|Asigc0AS<+5G<~jp}{T`+|OqeJVkT_z%cE9HhV8X>BU8oa~I7`q3Z1(#z6HptV z?DwJpOqiyHNZ_=A%+&@+`@JaI2ogw=7~`zP$>KBZC0d-x$%>)sk}a3;<_%i&nRo{d zq`!9Ob1yG1FRxmUt4DaPo}T+@UzV%#OIdXko$W2L2cf7fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TB zGg33tGfE(w;*!LYR3K9+J+UY;FGbfviHkEOv#1y-WXQ#tR+N~V3SpxwG$&S}8Lo+8_s{wD$;Lvy{|$JnQd zzY8bRwp~1taLWh$_82Z%U*jK8ES^xk5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d6280f158f6a5089d631207f2e85d1054b053b4d GIT binary patch literal 898 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
qb!V3hd^G!<_tpw@rYBxbdp0mwAQA_ zr>pzpUg}RtRiGd{X9Ql!8LyibNbkEa5#&TUK8ni93EkP4X=IZyeOuL6Ni{tD{uHw6 z{Tw8Fpg={60q4@ydk_T``m;r*kV!r^#meeU9V$5EDXqC`_{NTm!)MFH0FD|#Lonyo zydn`cb#!!S1Gj$0cgC^N8ls}Tm_>lsmiI^Ci(VjughmU^m!JOm0K2`-kfKTd5VYWM z^+WPioA*Ff3)3qCrw_=?jN&l=0ZL&**Wz6&;X60qsq@CM3Tpom;qcDxTwGj?bTrEF z<0j{cU(?uR{SVW5I&nioLr77Bq=%(dpv*3E^Om%}a{;-l8PqUM8KLBcb5A#LwQOIQ zPQ_@uxw*ATpu(@_OFnW2+r&?lcNPR6vua7iprX<2`Po%2#6+t}@Pd~oMZQQr`qN2H zR99bT3no|2{d25-&8KLJ=>ew-eQxW6=H1ZS&7@;^mG_PvbxG#a#PGt3mFZjM)RX6y zHixy{dS72Ij7b6KD?yHSsOdqNm)B+B6NF8Jju(Da_rtC7j~}Hu)g2rh%#9NHv_buQ zvf3$5QbcT1V$P`#NVAuNH@PTv4)U(Hb0&P%XU+rr=}zC11e=I!AFDm5uHJ?!-Js?m zj?9`|2FLy!&o;iCpzgGX*S^b|G%>yD7|%6RkUje_7%x>;TPx40{%t0dvHac_zRH$8 zra#@R+aSuDwdf7tAV!w(zw$eXZqK7JwxdJY`%0$!$+`-BWBB%%wY5h9Po6l#C%`FQ zuS9EdYAXHojl!a`>kwq(KC@-={6BiBV%f7(0?NJs1FJwAihAq{BN}wr#$(BTU<%g_ fyQOK53Q<}k-1>N8iU-`03f#~$)veHWeEPotwiB`x literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/magazines/old_pouch.dmi b/icons/modules/projectiles/magazines/old_pouch.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c18e20ee509e5fb969226358ce3ab82a57bf727f GIT binary patch literal 474 zcmV<00VV#4P)YUls}00DGTPE!Ct=GbNc004`6R9JLG zWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TB zGg33tGfE(w;*!LYR3KBSI3vF#y);iZIVZC~*FcGjGbOXA7${-L#hF%=n41b=V^?lS znsOu3lpB+#+=Mjcxrs&DnR)5BG$|{%`niAu6aWJVWk9`X{{H{~0MkiCK~zYI?Ub<% z!axuN*HmEB!PfvC&;Sv2kU1rENa}7eANct*cyAH^LW0d!^4;ie{Re!lx~`SHTCk03 z-M-mH1+T|u9~HcQ>TtL#czq3m8H#x{2Fd)?AxAP_gHR~x(=l~$<&X+05I&Uj+|l}1 zd!IkBz6L=}TD}@6f5?7R@>awGN3xmtzk|L%KREh^fnm601oDP$frBuPSB;Pt&?{kw zrf+yL1AD`ZEpdXKffDSN-b*?WoJpq{oJp?{o+iCU_$RF=Enf|kKV&6!13xd=1*%cV QegFUf07*qoM6N<$f|tk0T>t<8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9517e632c44abfe40bf1f1559407a42498a12221 GIT binary patch literal 1825 zcmZ{l4K&mHAIE>}x~nnjA9a;%b-HPJ*z(ZzbQ#BD5n|$BbSF>OjE0F>AxrLMMp2ku z4|%+l#}<{pHe^HQDWr#CWG+#RJ1Xt}tNU=y|D6B*p3nFDIp_O5=ktBP&+Gf}v%9M! z9JU(<0012C|rqZxw{Z>JRWbyP6zYvu>cSZ015!e2UqT8ss}nl z$0mr$Ok-Dq&((};%~W`>3Gl=O$TtC6+u9Uho1a%Gp6oxQPru5neb7EPHy34YSRdgG z1U~`t6@`1Wrcg*yMt&n$PKoN_>Iq9?m~3u7zD_G1ygI-}Ne7m}`^6R}&0!6WHD4vb3I!gt)vK$!u@ej0|1S`^>)U zrt!V&4P0jUp@oa%;&1T)O%q$Fl9j476AI9Du!YiazpSU-EI~J`xtmql&C2a&rFOGo z8~ir62jZFDc%~zs`5m6AhiC4>GohhY6FFSuR%E8KunAbfBw53enGm6@(+sw>k0U-5 zw6Ld~oK%_`%0*)w1Q1))tH>H4!G3vX8629MTcyD znoaE&1Aq!1?_fuW<1FScL`g7eDK7xAb7;xkRq-W-z?W2UL(AFKB|zUuis>lo&mKHt zf1xa0bxSgGOR~r*H#hgyx%=}8MzNB#*XNdd7h(%IYL?O~D!q?MYtpJmhEXe0c$fY< zT#oXQAB^76TI|i{5^amhQtOr^^CTVVhma0B{;&YC+o$&Bh^0Sf#slEe zCW^mNG+cde`Mv?N@T|D~-*6L2E30SO1X82Ku<(Upa^>(D3Jl|9H&*Ux%1B4u>@L-O zG8vVmpKD-j;k%&`6gg#kl-;!DMu3FQ*|qUo=H)@bmH2_&*%9^l#p+XR?}ydD<}MDk zJ`bXQU1t(x@s-`SKZ08Epsj5w;^>*Rl!i-7omvHpzc+n5a6peCvhe2z)1zf0PeZe^ zZO>!Q@(}~N;B;b{;VsRdHiE>Xdj9yl1&V;bVzwYFS6H^Bfg+7Pv>s z)@77NVPNDwUiaq`KS=V{b)`7*yF7P|_n-m0I=_+QGLpC1TB9Fmi`+jMQ(=$_68a-V zgy!bvS4&H0FZq*;tRf$8M##ti_2czyJ1M7rG9flr{ttdOMTM#Q1jZ+M>4A*X6R^*e z$`53mkq7dAmYJofDiNgLGon5UcF!+VS-rtpCk&a__#fkpowWEgkhBMr_c#S;qV;2U zRstv$4XZ4dK^>!VAEURGMD;Oc7p;7Q+HZuC&bb6_+LO!>FKuo0&L~Gq@4838 z7UgL4uN9(~w0if5g=OenL1@Y7Gq@*m_Cp9=x7HnAXpWfq!s3Jo`tb79ap4W1I*Lz> zvRN;giDO2d>L9O2`#KKG_y!EKqsSoQPo7DY<#XH6za(p;;!j`GmXxOp*Y|spY=r3_ zR|UMefOfKt&th>iTjSKj>ij-vjo-bHcb1F|pqdvvqAI$m4*2_ zhKZnhm^@=lCyM7G<2R!6uH7o1WdwZ@MYa*9{V9rK*OLW&R?@NvUM{eZ*(>{OmKbsZZk+6kd;`k)}j=oyJYo-TTP5J!2kor@+1_Mp+%()jo$k`GfzR2`yy1DVl(1pJBsJkHgj)}EOBUoJ*|fB*mh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e5763121ca3cc7cd2169c4391e94343c9108e9af GIT binary patch literal 1211 zcmV;s1VsCZP)005u}0{{R3yb+fl0000sP)t-sz`(#F zC@TN}060BBayTuvj}Bx@2e58S*WX}*j51DCScZ*}0A|bpng4r+jIO%E=;-Lcz`!P? zkoN!p00DGTPE!Ct=GbNc0078(R9JLGWpiV4X>fFDZ*Bkpc$|&X%L>9U5QX7&@)V(6 zE4`^JH_{?q*mtNjnm{j-M#Z<8-r00Uo1L_t(|ob8<9a-%Q|giFd@?m|j=|EF!B9b(y% zEy<=%Cc88F)6awj1sirm-`*eyf}khUa2noMC4V2sKb!vc;dg&0*5NRm&;P#lzXyLB zgSP^o_#y`-VE8Z|%Xh8k@AeS~2%H@M0X#T?-v)jT;c`*(cn7U{a3rT;`)mU)Q({o! zL4gk8yn(4;(7;&(2F{m|G2rBU3H4mq0aIcp=MCt&P$K3c@p86=22S>{b4G`8G7VmN4c+G!L}P7ghOPYB1)p!FKtg zF274k9P_xu4fDlqB1^uXY&xd?EIe@F%MXXNLNU)R6(zop^X7}xAkTC2aEb47=ZmDo z%m7kC2j9n4=8OIFKjecD1VIo4K@h8AKG&O<;;+uUyMZFV7V^2?JoL}ze|>o}AkF{! za&isv`Cn&#Ka)~E$9+L#9*&9mK2Gfa<4Vw$r`NHee~{lnTb>%U^bfKnYRr=oH|-xJ z(-_Os{ag4x&fWiauMf}jOGSy_(s=Z2KD(JZ$Qt>4wDia^Sh*k zMs9M*=5u5sEb!9ymGdB*&&_jwDX8T}gUksaJ7~|#4oQi*wRFng&X5v1xL(NrAP9Ob ZeE}2-g<{6e60raP002ovPDHLkV1nGnUi<(6 literal 0 HcmV?d00001 diff --git a/icons/modules/projectiles/magazines/old_stripper.dmi b/icons/modules/projectiles/magazines/old_stripper.dmi new file mode 100644 index 0000000000000000000000000000000000000000..95b49856fa6d1128e532d19cb4a96df9ff929786 GIT binary patch literal 1998 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 *+n2O)emoJUf4gyjHrN$ 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 UeP2Eoc)k>ar>mdKI;Vst0H=a9mH+?% literal 0 HcmV?d00001 diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi deleted file mode 100644 index 97caca3b4b97d6d9f78207f683947436e9cc429e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62729 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 diff --git a/icons/obj/ammo_vr.dmi b/icons/obj/ammo_vr.dmi deleted file mode 100644 index 3006f7e445ee211b892c4ae351da8886286bd10f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8812 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 diff --git a/icons/obj/gun/ballistic.dmi b/icons/obj/gun/ballistic.dmi index 30257b6709b0b43a8e537e72684bf1e8b9adb2c9..e7fa9abdc797ce51161e0de6956d122cdbb52d34 100644 GIT binary patch delta 9497 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 delta 10806 zcmbWdWmr^E|1P}gE&)Xvkx)`WBpty(1qn%MNkQq9m<@xJN()G%q|)8YAR!?wT|+kv zUBk@TJkS4quk+!YFXy_}%$j}JNuX^n`j z2(G0Kv{Fqz^LB~6qS~6LY@Tk&kwsLx7~C7GkT`Ja#J%=jI?7Fy{h2Hy?alWClvQs@ z3@Z>K24M45f_h!`-=xh)XaXh0F&6O_eGdIzXK=JrX_Iy$QuY%RUVG<6B98E!Uqj1p9KTwyh{Y#E!_(!rqyXgv=t^h04 zLklgPEVi?+HwJ0y7(#_f4ywgIBEJGO<(n8sb6#NRm2LyPKJ7mZw3 zNgZBE1}S=S-o9{XfA->i`|#JXFU5kTiT;}A1ERaHR5C_b9=hec^N~bH+x%{S`)9qG z;fcGU+{+b3`2|$?BlQY(enu=C!ir zb2`dWgj`*T$X6->UFVh6P?hp>wP$}yl1{IX*$hWy)?*`vY(h9j(O@T-TT66BF@$d~ zd*EPxd#=k4l@wuLvjF6)_FpA$PE>XI6JRmb;qzwAR?p=RO{0@6HFZ8&+?ilu_MXo+ z<#*aoX;fM)4SXkOesP1zCTmQ7Uc!b%M(ke;35uw?V$0EYd>$(%=o%Rwe6s#cm>_sf z68%{v?dS#H>D*$toj>?j_DyVxoPe!*)0JI<*FUv*CIN-KpAWGD2raiVACahiX^ia(AKYD_4Z56+D1*eu#cXO;kTLp254pECh8fm5)_<|5~4l9gTnq16*ogxC(C`7 zF}XTH&VHJrdo7hWUfA;v^t*{K6HGoM8h2!~<=(L8rLnBH&uX52?JC>oAlXoAY)SUjfTJ@WsD)H}8&EGumHH0mQk*8pZhDjed#=n zb85xAt;N(f!`h^;%{Kh4rIhYwX~+YcD;(V@2{U!J@wZ#xL8Jix`-&rSy1NIyi<|)Q za8Q%Fi!L|WYnx*qW=Y5JhuafkyIITLqe-5uZ|@hcuf2X*TkeAfKHO^aaz63zsHYQO zHqrKqXo`}H)%buu9mu#Q!zg9m>2s@Vgxqk*5maVs^ojrRp60;8{ITYAp5EDKRoOe# zH__#3ST_DOkY-o)?i&vJ&l1~2drdxzRPX$qw59wfZIQ#wt9)z?aX2qrlJ7Zz`D(#W zm0+XrlRC?X;OHnHQIbxR==J`*J@-z)>O1jS=Yy}+x7NR!8PnjNIsN7jU1Id*2qAj% zn~5w9qwb78eySxOK{`DnHTd0j^G~0^M*`Tz!U|)>1$e-ocWjvmML~-v4E;xtrlY7wMlUJ3&qDs9t4T^L|UbpxzS!$yBPO|^8<84ouigTBS_N&`q z4>JAJ!hefw1d@?glaUid!a(iBo%5aB&y%a3J4*J)e>Kb|M;MYakK26pmivMZHQ3ms zcE~~nW@Mf-IJ!!+xwmeO|M2MbYM;yTuuPZ^S7ml{i>y-?qMjGLru>m|(BXxOSk}u4 z{+C0NJw7<{o%OE5=M$ENRi}Pwx#|;fafh#KiyXnz#vRI~<7tnIi$UCh#q=)9GTUN&a(j>>hL|G1=#+uhtw?rnrjAinCDA2HT|~jSqH-Gg^tZx zLPf{*TS2h_WFr85%W+vg?S~_Qmid~8uv0SdB&Ki$pJiHl1EcJ-YZ>iupzEeOs0k>LFGfxdUY!6+(u zouWCqD&%DQkJCl&d(?3C6cw;qc;4=qVUa=UW^J8w;*$Y1fD5qvmL|H_xATAC%$S`x z;n~A0gM+VpPnQx1su}Y!A_?gsn1^%8v57|As`l1-uZkH=KAc*`M<=dTiqb9p#9sul z{3bwIdd>@d79cfAmMK{)7N*`X@ewd-6y*T{`JO zTv2M?@B=CLe z{lEv}73DXd48cI0@4w+;5*n#R0lfYZ-QmTbmg=>T`*&>HZ

(4-OzUyNjMEDiY`x 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 BWW4|Y delta 1265 zcmVfFDZ*Bkpc$}5WISRut5JurzbBZ6kc5t>* zO^`7v>?;HZPb`5qq#?`gQ@9HRli3h4{u zpaw!24TI7bp>WPIU+rGBPF5;zY;3HhFWie&Q50ETjIixG7z2f|IMS42U(6vjFJw-L zbXH<6Dtp)7UL;%-^G9v&lH0Fkzt0w-ce(Z$nEvE=iK5uv{)zcD(&|4hwQZ zFq_}n+KQQ(8KJ+w-_&H*lW!M}(u2u?pzz*Q;=n(Dd}UauD}m#e0r z?d|QV38ffz`b6MyCk$UfaJqCI^Cg>OluIO+)xt?E|^> z(2J3g5v;7NARG=KdbLsKQ{j+hSr0t31_1c!FW}?%`*3G&9;-|Ke)0ROx>gpG|2Jon2LxXzCiU$5o?DgP&Sc6JW!0Che!LQhYR?%97>K=6bI ziQ5@;ipE6v9xe0d&i3K_^~K^JTnRs4)PU6hfoA}^$<3chkqD(+x15D@kmw^g$-fkMfFFPO&UAl!f+R^g0C<~n zB!ew{z@o}GgQ6&Ub8|C9QH0a!gxl=~0JOEWq5TCn?rq-3*4CD(JHVl;D(Rr9^Ua`X zT5-}3BbiJh8jaT6CVv}hg4x+wVRv^InM|hYy|2e7psFgy$H&cW!dw|=jlsdevj4`+ zPJ96tKnyQI#IOKjSOAmx116IQ1QdVcc>J#%Orz@KtrCq!%L=1nvDi~n;#i7l0hRUf z!>5euU?8Of_KT>T_{#H7n+Q`&kfJF1t!I0y9!|J1bP`|v-h#JIg%FFyYslA6~owzu%8+Hj7j$rKeIU+eO6VaeZ!XuC9L^%X`4* zpMHYVZa1bT{($^y8-SzBwi``%cXzQ=Je$qp*M;By^JTH6r3Fr>v#vHw-2sKCS&kx^ zOj_=YmHfrUMNln^>+9=SUS6)N4b#=pg|h6fuCB5tL{wD;V7*Mcp8TbyC5WPk&%XGw zYFWIuc^{!r=!xB!EtjV^sy;d1DwX*jkEhA$bUrM-D4yhrFTl?S5W}B@iD3c6umECM b05Sgp*?D;MYu%J@00000NkvXXu0mjfUk7$G diff --git a/icons/system/error_32x32.dmi b/icons/system/error_32x32.dmi new file mode 100644 index 0000000000000000000000000000000000000000..147873c6603c53c3b7a3537ab13125a8e748aede GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T>mqi0WxbXoc98$l&X-3 z5|`BC)e_1!5cyiE*d|0q;uX!^CUx2 zPwx&3;~?Y9#$F0@9!)wjDMTUIv$NY+b@K{|6DCg{`DlBc@on8ORW#;r%mFnfhFRMs zxNBE8Is@$!^K@|x;h346@Pog_MZiT%*^8I+86(5nz4iw;<>q(;RWNwE`njxgN@xNA D1?5S2 literal 0 HcmV?d00001 diff --git a/maps/away_missions/140x140/carpfarm.dmm b/maps/away_missions/140x140/carpfarm.dmm index 213b11b5a225..aa1c975d2714 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 8eff3bdd7edc..7911634ff6df 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 f7f01c93f512..48106f306f10 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 d9a3efa40d21..fe99bb0aae4a 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 4e2916ded870..bae22c222bab 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 790678686f40..a62116cdac90 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 ee6756fafe50..7806faa9b5ee 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 2d6e875df433..8b39ef2f618d 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 e8e1e426aaa6..6e89f80b71a0 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 782e001fe0dd..0ef4463cf9e7 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 0b8e63b91861..62d190f7b0ed 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 9101605be00d..0cceb7b6e64f 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 f1370c50a516..9b3a3cd56e6d 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 2a4604b828dd..9564467b745f 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 8b69748c0bdd..293d19d8a9eb 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 f8a961e552a1..d4a431a29c60 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 66558a2685e2..64e007675fa0 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 5cb6f7258340..89337ef0403a 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 d367cdd4e82d..678e7b330142 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 efc8891a967d..f0642ac9f246 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 6463cee7ab8f..1022c3c82369 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 ae3fa8b5209c..148dffd532d7 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 f4a9c67cf75c..8a6859a515e4 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 926d8772ee11..b0b282714568 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 e7cc4bbbc509..247c12e9fe5e 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 c9c56d643dce..57ce1c0a1a4d 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 9c11eca30bff..96879d65dce4 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 e7d2cb375585..16b08549308f 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 02f76b2c7457..59eb33bbafb5 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 6b7233bf0d2f..4995bc145b32 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 1c9c055f1d5c..9b0de8d6e288 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 19ef6ed79ff6..5472b593c6ca 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 59af7740526a..242fc42c3824 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 0eb957b45a93..5affacd87810 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 b85f8b961277..5448b6472bc7 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 24a893edf85e..7014591b4f50 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 1c493b972813..9c0530db9361 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 9a561c6ff19b..a9bba780a6c5 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{