diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 10fde28bef9..a2baaa8dc20 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1643,8 +1643,8 @@ /obj/structure/rack, /obj/effect/decal/cleanable/dirt, /obj/item/storage/toolbox/mechanical, -/obj/item/ammo_box/c38, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, @@ -3666,7 +3666,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/spawner/random/contraband/permabrig_weapon, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/tile/dark_red/anticorner, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research) diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index acfff23fc4d..f6091bb08a6 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -5135,8 +5135,8 @@ /obj/item/spess_knife, /obj/item/clothing/suit/armor/vest/old, /obj/item/gun/ballistic/rifle/boltaction, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) "BU" = ( diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 4921760709f..b656d7b4a94 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -2113,8 +2113,8 @@ /area/awaymission/snowdin/post/hydro) "hZ" = ( /obj/item/gun/ballistic/rifle/boltaction, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/structure/closet/secure_closet{ icon_state = "sec"; name = "security officer's locker"; diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 30382d60bb4..dc12a19cd57 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -27753,7 +27753,7 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, /obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka, /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index f9e4027e127..f79ba93d622 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -43380,7 +43380,7 @@ /obj/item/lazarus_injector, /obj/item/gun/energy/disabler, /obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/item/clothing/neck/stethoscope, /obj/item/book{ desc = "An undeniably handy book."; diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index dfcce8dc3b2..11fb4bc5caa 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -9129,8 +9129,8 @@ /area/centcom/central_command_areas/courtroom) "QY" = ( /obj/item/storage/box/handcuffs, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, +/obj/item/ammo_box/speedloader/c357, /obj/item/gun/ballistic/revolver/mateba, /obj/structure/table/reinforced, /obj/machinery/firealarm/directional/south, diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 0a3c0e39fec..cf5ca9feafe 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -45154,7 +45154,7 @@ /obj/structure/safe/vault, /obj/item/clothing/head/costume/bearpelt, /obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/dim/directional/east, diff --git a/_maps/minigame/basketball/soviet_bear.dmm b/_maps/minigame/basketball/soviet_bear.dmm index a612daa3653..f636344c4c0 100644 --- a/_maps/minigame/basketball/soviet_bear.dmm +++ b/_maps/minigame/basketball/soviet_bear.dmm @@ -6,9 +6,9 @@ /area/centcom/basketball) "aw" = ( /obj/structure/table, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -348,9 +348,9 @@ /area/centcom/basketball) "Bd" = ( /obj/structure/table, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /turf/open/floor/iron/dark, /area/centcom/basketball) "BJ" = ( diff --git a/_maps/minigame/deathmatch/arena_station.dmm b/_maps/minigame/deathmatch/arena_station.dmm index 1e2b1b57be7..c3fb3ed3903 100644 --- a/_maps/minigame/deathmatch/arena_station.dmm +++ b/_maps/minigame/deathmatch/arena_station.dmm @@ -876,7 +876,7 @@ /area/deathmatch) "Kz" = ( /obj/effect/spawner/random/trash/box, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /turf/open/indestructible/plating, /area/deathmatch) "KC" = ( diff --git a/_maps/minigame/deathmatch/train.dmm b/_maps/minigame/deathmatch/train.dmm index 3f0619d1ab4..d35de7b1a6e 100644 --- a/_maps/minigame/deathmatch/train.dmm +++ b/_maps/minigame/deathmatch/train.dmm @@ -34,7 +34,7 @@ locked = 0 }, /obj/effect/decal/cleanable/fuel_pool/hivis, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 6 }, @@ -242,7 +242,7 @@ locked = 0 }, /obj/effect/decal/cleanable/fuel_pool/hivis, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, @@ -617,7 +617,7 @@ /area/deathmatch) "EX" = ( /obj/structure/lattice/catwalk, -/obj/item/ammo_box/c38/match, +/obj/item/ammo_box/speedloader/c38/match, /turf/open/chasm/true/no_smooth/fake_motion_sand/fast, /area/deathmatch) "Fa" = ( @@ -932,7 +932,7 @@ locked = 0 }, /obj/effect/decal/cleanable/fuel_pool/hivis, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, diff --git a/_maps/minigame/deathmatch/underground_arena.dmm b/_maps/minigame/deathmatch/underground_arena.dmm index 4d776acb0b4..cd8d535ad71 100644 --- a/_maps/minigame/deathmatch/underground_arena.dmm +++ b/_maps/minigame/deathmatch/underground_arena.dmm @@ -564,7 +564,7 @@ /area/deathmatch) "Kb" = ( /obj/structure/table/reinforced, -/obj/item/ammo_box/strilka310/surplus, +/obj/item/ammo_box/speedloader/strilka310/surplus, /turf/open/indestructible/dark/smooth_large, /area/deathmatch) "Kr" = ( diff --git a/_maps/modular_generic/jungle_m_armory.dmm b/_maps/modular_generic/jungle_m_armory.dmm index 39090181945..0ba60740059 100644 --- a/_maps/modular_generic/jungle_m_armory.dmm +++ b/_maps/modular_generic/jungle_m_armory.dmm @@ -242,7 +242,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner/end/flip{ dir = 8 diff --git a/_maps/modular_generic/station_s_vault.dmm b/_maps/modular_generic/station_s_vault.dmm index 774d50d3152..3a621492bb2 100644 --- a/_maps/modular_generic/station_s_vault.dmm +++ b/_maps/modular_generic/station_s_vault.dmm @@ -77,7 +77,7 @@ /obj/effect/turf_decal/trimline/dark_blue/corner{ dir = 8 }, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/item/gun/ballistic/revolver/golden, /turf/open/floor/iron/smooth_corner{ dir = 8 diff --git a/_maps/shuttles/hunter_psyker.dmm b/_maps/shuttles/hunter_psyker.dmm index 476e58ce6f8..2c744e09ec0 100644 --- a/_maps/shuttles/hunter_psyker.dmm +++ b/_maps/shuttles/hunter_psyker.dmm @@ -147,25 +147,25 @@ "gE" = ( /obj/effect/turf_decal/tile/dark_blue/diagonal_edge, /obj/structure/table/reinforced/plasmarglass, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -5; pixel_y = 4 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -1; pixel_y = 4 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = 3; pixel_y = 4 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -8 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -4 }, -/obj/item/ammo_box/c38/match, +/obj/item/ammo_box/speedloader/c38/match, /turf/open/floor/iron/white/diagonal, /area/shuttle/hunter) "gW" = ( diff --git a/_maps/shuttles/hunter_russian.dmm b/_maps/shuttles/hunter_russian.dmm index 3f3f24fee57..46840f7cdd7 100644 --- a/_maps/shuttles/hunter_russian.dmm +++ b/_maps/shuttles/hunter_russian.dmm @@ -173,10 +173,10 @@ /obj/structure/closet/crate/secure/weapon{ name = "surplus crate" }, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /turf/open/floor/pod/dark, /area/shuttle/hunter/russian) "qF" = ( @@ -611,7 +611,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/gun/ballistic/automatic/pistol, /obj/item/ammo_box/magazine/m9mm, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/item/crowbar, /turf/open/floor/pod/dark, /area/shuttle/hunter/russian) diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index b95c32be7d1..e5780fed0cb 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -802,18 +802,18 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_y = -5; pixel_x = 5 }, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_x = 5 }, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_x = -5; pixel_y = -5 }, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_x = -5 }, /obj/item/gun/ballistic/rifle/boltaction/prime{ diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 7f8ab9909db..5dd8929572b 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -2221,11 +2221,11 @@ pixel_y = 4 }, /obj/item/ammo_box/c10mm, -/obj/item/ammo_box/a357{ +/obj/item/ammo_box/speedloader/c357{ icon_state = "357-7"; pixel_y = 3 }, -/obj/item/ammo_box/a357{ +/obj/item/ammo_box/speedloader/c357{ icon_state = "357-7"; pixel_x = 2 }, @@ -2376,7 +2376,7 @@ /obj/item/storage/lockbox/medal{ req_access = list("syndicate_leader") }, -/obj/item/ammo_box/a357{ +/obj/item/ammo_box/speedloader/c357{ icon_state = "357-7"; pixel_x = 2 }, diff --git a/_maps/virtual_domains/meta_central.dmm b/_maps/virtual_domains/meta_central.dmm index ee1bfe8d10f..a9879576f73 100644 --- a/_maps/virtual_domains/meta_central.dmm +++ b/_maps/virtual_domains/meta_central.dmm @@ -4083,7 +4083,7 @@ /area/virtual_domain) "Il" = ( /obj/structure/lattice, -/obj/item/ammo_box/strilka310/surplus, +/obj/item/ammo_box/speedloader/strilka310/surplus, /turf/open/space/basic, /area/virtual_domain) "Io" = ( diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index a340e522896..7d9276b08c7 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -236,16 +236,22 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( // Ammo box multiload defines /// Ammo box does not accept multiload in or out, e.g. ammo box CANNOT transfer multiple casings in one action, either IN or OUT. #define AMMO_BOX_MULTILOAD_NONE 0 -/// Ammo box accepts multiload going in, e.g. ammo box can transfer multiple casings IN at once. +/// Ammo box accepts multiload going in, e.g. a magazine being fed from a stripper clip. #define AMMO_BOX_MULTILOAD_IN (1 << 0) -/// Ammo box accepts multiload going out, e.g. ammo box can transfer multiple casings OUT at once. +/// Ammo box can multiload going out to other ammo boxes, but not loaded magazines, e.g. an ammo box feeding into an unloaded magazine. #define AMMO_BOX_MULTILOAD_OUT (1 << 1) +/// Ammo box can multiload going out into loaded magazines, e.g. a speedloader feeding into a revolver's cylinder or a stripper clip feeding into a loaded magazine. +#define AMMO_BOX_MULTILOAD_OUT_LOADED (1 << 2) /// Ammo box accepts multiload in AND out, e.g. ammo box can transfer multiple casings IN at once *and* OUT at once. -#define AMMO_BOX_MULTILOAD_BOTH AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT +/// Ammo boxes are assumed to have some variety of magazine loading assistance. +#define AMMO_BOX_MULTILOAD_BOTH (AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT) +/// Ammo box can accept multiloads, AND can give multiloads to boxes that are loaded or not loaded. Individual stripper clips would count for this. +#define AMMO_BOX_MULTILOAD_ALL (AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT | AMMO_BOX_MULTILOAD_OUT_LOADED) DEFINE_BITFIELD(ammo_box_multiload, list( "LOAD_IN" = AMMO_BOX_MULTILOAD_IN, "LOAD_OUT" = AMMO_BOX_MULTILOAD_OUT, + "LOAD_OUT_LOADED" = AMMO_BOX_MULTILOAD_OUT_LOADED, )) #define SUPPRESSED_NONE 0 diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 40f21f4b189..180079cf65a 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -29,6 +29,9 @@ /obj/item/organ = "ORGAN", /obj/item/mod/control = "MODSUIT", /obj/item/mod/module = "MODSUIT_MOD", + /obj/item/ammo_box = "AMMOBOX", + /obj/item/ammo_box/magazine = "AMMOBOX_MAGAZINE", + /obj/item/ammo_box/speedloader = "AMMOBOX_SPEEDLOADER", /obj/item/gun = "GUN", /obj/item/gun/magic = "GUN_MAGIC", /obj/item/gun/energy = "GUN_ENERGY", diff --git a/code/datums/storage/subtypes/belts.dm b/code/datums/storage/subtypes/belts.dm index 37b47169c28..3f3470a0e4c 100644 --- a/code/datums/storage/subtypes/belts.dm +++ b/code/datums/storage/subtypes/belts.dm @@ -323,7 +323,7 @@ /datum/storage/unfathomable_curio/New(atom/parent, max_slots, max_specific_storage, max_total_storage, rustle_sound, remove_rustle_sound) . = ..() set_holdable(list( - /obj/item/ammo_box/strilka310/lionhunter, + /obj/item/ammo_box/speedloader/strilka310/lionhunter, /obj/item/heretic_labyrinth_handbook, /obj/item/bodypart, // Bodyparts are often used in rituals. /obj/item/clothing/neck/eldritch_amulet, diff --git a/code/datums/storage/subtypes/holsters.dm b/code/datums/storage/subtypes/holsters.dm index b3a3189f9ad..e82007fea71 100644 --- a/code/datums/storage/subtypes/holsters.dm +++ b/code/datums/storage/subtypes/holsters.dm @@ -55,9 +55,7 @@ /obj/item/ammo_box/magazine/m45, /obj/item/ammo_box/magazine/m50, /obj/item/gun/ballistic/revolver, - /obj/item/ammo_box/c38, // Revolver speedloaders. - /obj/item/ammo_box/a357, - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader, // Speedloaders, which includes stripper clips on a technicality. /obj/item/ammo_box/magazine/toy/pistol, /obj/item/gun/energy/e_gun/mini, /obj/item/gun/energy/disabler, @@ -84,9 +82,7 @@ /obj/item/ammo_box/magazine/m45, /obj/item/ammo_box/magazine/m50, /obj/item/gun/ballistic/revolver, - /obj/item/ammo_box/c38, - /obj/item/ammo_box/a357, - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader, /obj/item/ammo_box/magazine/toy/pistol, /obj/item/gun/energy/recharge/ebow, /obj/item/gun/energy/e_gun/mini, @@ -107,9 +103,7 @@ holdables = list( /obj/item/gun, // ALL guns. /obj/item/ammo_box/magazine, // ALL magazines. - /obj/item/ammo_box/c38, //There isn't a speedloader parent type, so I just put these three here by hand. - /obj/item/ammo_box/a357, //I didn't want to just use /obj/item/ammo_box, because then this could hold huge boxes of ammo. - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader, // ALL speedloaders (there's 3 types at time of writing so it's probably fine) /obj/item/ammo_casing, // For shotgun shells, rockets, launcher grenades, and a few other things. /obj/item/grenade, // All regular grenades, the big grenade launcher fires these. ) diff --git a/code/datums/storage/subtypes/pockets.dm b/code/datums/storage/subtypes/pockets.dm index 9fc26b542d1..20772274674 100644 --- a/code/datums/storage/subtypes/pockets.dm +++ b/code/datums/storage/subtypes/pockets.dm @@ -213,7 +213,7 @@ /obj/item/reagent_containers/cup/glass/bottle/vodka, /obj/item/reagent_containers/cup/glass/bottle/molotov, /obj/item/reagent_containers/cup/glass/drinkingglass, - /obj/item/ammo_box/strilka310 + /obj/item/ammo_box/speedloader/strilka310 )) ///Void cloak pocket @@ -231,7 +231,7 @@ . = ..() set_holdable( can_hold_list = list( - /obj/item/ammo_box/strilka310/lionhunter, + /obj/item/ammo_box/speedloader/strilka310/lionhunter, /obj/item/bodypart, // Bodyparts are often used in rituals. They're also often normal sized, so you can only fit one. /obj/item/clothing/neck/eldritch_amulet, /obj/item/clothing/neck/heretic_focus, diff --git a/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm b/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm index 84b19f59ee0..bebdab726b0 100644 --- a/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm +++ b/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm @@ -10,7 +10,7 @@ /obj/effect/spawner/random/sakhno/ammo name = ".310 Strilka stripper clip spawner" loot = list( - /obj/item/ammo_box/strilka310/surplus = 80, - /obj/item/ammo_box/strilka310 = 10, + /obj/item/ammo_box/speedloader/strilka310/surplus = 80, + /obj/item/ammo_box/speedloader/strilka310 = 10, /obj/item/food/rationpack = 1, ) diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index 6461a76d040..379d8b1c3bf 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -57,7 +57,7 @@ /obj/item/storage/belt/holster/detective/full/PopulateContents() generate_items_inside(list( - /obj/item/ammo_box/c38 = 2, + /obj/item/ammo_box/speedloader/c38 = 2, /obj/item/gun/ballistic/revolver/c38/detective = 1, ), src) @@ -99,7 +99,7 @@ /obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents() generate_items_inside(list( - /obj/item/ammo_box/a357 = 2, + /obj/item/ammo_box/speedloader/c357 = 2, /obj/item/gun/ballistic/revolver/cowboy/nuclear = 1, ), src) diff --git a/code/game/objects/items/storage/toolboxes/weapons.dm b/code/game/objects/items/storage/toolboxes/weapons.dm index a16e4b9cfbf..b1e13ba58b5 100644 --- a/code/game/objects/items/storage/toolboxes/weapons.dm +++ b/code/game/objects/items/storage/toolboxes/weapons.dm @@ -39,10 +39,10 @@ name = ".310 Strilka ammo box (Surplus?)" desc = "It contains a few clips. Goddamn, this thing smells awful. \ Has this been sitting in a warehouse for the last several centuries?" - ammo_to_spawn = /obj/item/ammo_box/strilka310 + ammo_to_spawn = /obj/item/ammo_box/speedloader/strilka310 /obj/item/storage/toolbox/ammobox/strilka310/surplus - ammo_to_spawn = /obj/item/ammo_box/strilka310/surplus + ammo_to_spawn = /obj/item/ammo_box/speedloader/strilka310/surplus /obj/item/storage/toolbox/ammobox/wt550m9 name = "4.6x30mm ammo box" @@ -196,7 +196,7 @@ /obj/item/storage/toolbox/guncase/revolver name = "revolver gun case" weapon_to_spawn = /obj/item/gun/ballistic/revolver/badass/nuclear - extra_to_spawn = /obj/item/ammo_box/a357 + extra_to_spawn = /obj/item/ammo_box/speedloader/c357 /obj/item/storage/toolbox/guncase/sword_and_board name = "energy sword and shield weapon case" diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 709f3e190b3..53548989384 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -79,8 +79,8 @@ if(KIT_GUN) new /obj/item/gun/ballistic/revolver(src) // 13 tc - new /obj/item/ammo_box/a357(src) // 4tc - new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/speedloader/c357(src) // 4tc + new /obj/item/ammo_box/speedloader/c357(src) new /obj/item/storage/belt/holster/chameleon(src) // 1 tc new /obj/item/card/emag/doorjack(src) // 3 tc replaced the emag with the doorjack new /obj/item/grenade/c4(src) // 1 tc diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm index a0a811fc6c8..c82d4230b0a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm @@ -14,8 +14,8 @@ new /obj/item/ammo_box/magazine/m50(src) new /obj/item/gun/ballistic/automatic/pistol/deagle(src) else - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/speedloader/c357(src) + new /obj/item/ammo_box/speedloader/c357(src) new /obj/item/gun/ballistic/revolver/mateba(src) /obj/structure/closet/secure_closet/ert_com/populate_contents_immediate() diff --git a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm index 422c576ed9e..65e22b1ed6c 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm @@ -42,7 +42,7 @@ gloves = /obj/item/clothing/gloves/tackler/combat head = /obj/item/clothing/head/helmet/alt shoes = /obj/item/clothing/shoes/russian - l_pocket = /obj/item/ammo_box/strilka310 + l_pocket = /obj/item/ammo_box/speedloader/strilka310 r_pocket = /obj/item/restraints/handcuffs/cable/zipties id = /obj/item/card/id/advanced/bountyhunter diff --git a/code/modules/antagonists/heretic/items/hunter_rifle.dm b/code/modules/antagonists/heretic/items/hunter_rifle.dm index 43f55b8b77f..b328c3215fc 100644 --- a/code/modules/antagonists/heretic/items/hunter_rifle.dm +++ b/code/modules/antagonists/heretic/items/hunter_rifle.dm @@ -174,10 +174,10 @@ return ..() // Extra ammunition can be made with a heretic ritual. -/obj/item/ammo_box/strilka310/lionhunter +/obj/item/ammo_box/speedloader/strilka310/lionhunter name = "stripper clip (.310 hunter)" desc = "A stripper clip of mysterious, atypical ammo. It doesn't fit into normal ballistic rifles." - icon_state = "310_strip" + icon_state = "lionhunter_strip" ammo_type = /obj/item/ammo_casing/strilka310/lionhunter max_ammo = 3 multiple_sprites = AMMO_BOX_PER_BULLET diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index 814e8522cdd..8f9a595859f 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -79,7 +79,7 @@ required_atoms = list( /obj/item/ammo_casing = 3, ) - result_atoms = list(/obj/item/ammo_box/strilka310/lionhunter) + result_atoms = list(/obj/item/ammo_box/speedloader/strilka310/lionhunter) cost = 0 research_tree_icon_path = 'icons/obj/weapons/guns/ammo.dmi' diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm index 0da85853f51..f17d02903ec 100644 --- a/code/modules/bitrunning/outfits.dm +++ b/code/modules/bitrunning/outfits.dm @@ -43,7 +43,7 @@ /// Corresponding ammo var/list/corresponding_ammo = list( /obj/item/ammo_box/magazine/m9mm, - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader/strilka310, /obj/item/ammo_box/magazine/uzim9mm, /obj/item/ammo_box/magazine/m50, /obj/item/food/pizzaslice/dank, // more silly, less destructive diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index a19a544e22d..4e05e97b3fa 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -17,21 +17,21 @@ desc = "Contains one speedloader of .38 DumDum ammunition, good for embedding in soft targets." cost = PAYCHECK_CREW * 2 access_view = ACCESS_WEAPONS - contains = list(/obj/item/ammo_box/c38/dumdum) + contains = list(/obj/item/ammo_box/speedloader/c38/dumdum) /datum/supply_pack/goody/match38 name = ".38 Match Grade Speedloader Single-Pack" desc = "Contains one speedloader of match grade .38 ammunition, perfect for showing off trickshots." cost = PAYCHECK_CREW * 2 access_view = ACCESS_WEAPONS - contains = list(/obj/item/ammo_box/c38/match) + contains = list(/obj/item/ammo_box/speedloader/c38/match) /datum/supply_pack/goody/rubber name = ".38 Rubber Speedloader Single-Pack" desc = "Contains one speedloader of bouncy rubber .38 ammunition, for when you want to bounce your shots off anything and everything." cost = PAYCHECK_CREW * 1.5 access_view = ACCESS_WEAPONS - contains = list(/obj/item/ammo_box/c38/match/bouncy) + contains = list(/obj/item/ammo_box/speedloader/c38/match/bouncy) /datum/supply_pack/goody/dumdum38br name = ".38 DumDum Magazine Single-Pack" diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index ccbca24f818..d98d1b2ee11 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -224,8 +224,8 @@ cost = CARGO_CRATE_VALUE * 12 contains = list( /obj/item/food/rationpack, - /obj/item/ammo_box/strilka310, - /obj/item/ammo_box/strilka310/surplus, + /obj/item/ammo_box/speedloader/strilka310, + /obj/item/ammo_box/speedloader/strilka310/surplus, /obj/effect/spawner/random/armory/strilka, /obj/item/gun_maintenance_supplies, /obj/item/clothing/suit/armor/vest/russian, diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index 409c746aad5..41942e1ba47 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -11,9 +11,9 @@ access_view = ACCESS_ARMORY contains = list(/obj/item/storage/box/beanbag = 3, /obj/item/storage/box/rubbershot = 3, - /obj/item/ammo_box/c38/trac, - /obj/item/ammo_box/c38/hotshot, - /obj/item/ammo_box/c38/iceblox, + /obj/item/ammo_box/speedloader/c38/trac, + /obj/item/ammo_box/speedloader/c38/hotshot, + /obj/item/ammo_box/speedloader/c38/iceblox, ) crate_name = "ammo crate" @@ -321,7 +321,7 @@ desc = "Contains four tracking implants and three tracking speedloaders of tracing .38 ammo." cost = CARGO_CRATE_VALUE * 4.5 contains = list(/obj/item/storage/box/trackimp, - /obj/item/ammo_box/c38/trac = 3, + /obj/item/ammo_box/speedloader/c38/trac = 3, ) crate_name = "tracking implant crate" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index f6774e9b2aa..62655f3153c 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -304,8 +304,8 @@ glasses = /obj/item/clothing/glasses/sunglasses gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/sneakers/black - l_pocket = /obj/item/ammo_box/strilka310 - r_pocket = /obj/item/ammo_box/strilka310 + l_pocket = /obj/item/ammo_box/speedloader/strilka310 + r_pocket = /obj/item/ammo_box/speedloader/strilka310 l_hand = /obj/item/gun/ballistic/rifle/boltaction /datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visuals_only = FALSE) @@ -434,7 +434,7 @@ back = /obj/item/mod/control/pre_equipped/apocryphal box = /obj/item/storage/box/survival/centcom backpack_contents = list( - /obj/item/ammo_box/a357 = 1, + /obj/item/ammo_box/speedloader/c357 = 1, /obj/item/flashlight = 1, /obj/item/grenade/c4/x4 = 1, /obj/item/storage/box/flashbangs = 1, diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 2aa79e3706b..2730af4c636 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -221,7 +221,7 @@ sec_briefcase.contents += new /obj/item/stack/spacecash/c1000 sec_briefcase.contents += new /obj/item/gun/energy/recharge/ebow sec_briefcase.contents += new /obj/item/gun/ballistic/revolver/mateba - sec_briefcase.contents += new /obj/item/ammo_box/a357 + sec_briefcase.contents += new /obj/item/ammo_box/speedloader/c357 sec_briefcase.contents += new /obj/item/grenade/c4/x4 var/obj/item/modular_computer/pda/heads/pda = H.belt @@ -247,7 +247,7 @@ head = /obj/item/clothing/head/hats/centhat mask = /obj/item/cigarette/cigar/cohiba shoes = /obj/item/clothing/shoes/combat/swat - l_pocket = /obj/item/ammo_box/a357 + l_pocket = /obj/item/ammo_box/speedloader/c357 r_pocket = /obj/item/lighter /datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visuals_only = FALSE) diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index 32d66ba3831..bc27f6b0282 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -176,7 +176,7 @@ backpack_contents = list( /obj/item/grenade/smokebomb = 2, - /obj/item/ammo_box/strilka310 = 2, + /obj/item/ammo_box/speedloader/strilka310 = 2, ) /datum/outfit/deathmatch_loadout/battler/druid @@ -1071,8 +1071,8 @@ belt = /obj/item/storage/belt/unfathomable_curio gloves = null shoes = /obj/item/clothing/shoes/winterboots/ice_boots - l_pocket = /obj/item/ammo_box/strilka310/lionhunter - r_pocket = /obj/item/ammo_box/strilka310/lionhunter + l_pocket = /obj/item/ammo_box/speedloader/strilka310/lionhunter + r_pocket = /obj/item/ammo_box/speedloader/strilka310/lionhunter back = /obj/item/gun/ballistic/rifle/lionhunter // for his neutral b, he wields a gun diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 31307efcde1..cb987f0cc91 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -29,12 +29,12 @@ mail_goodies = list( /obj/item/storage/fancy/cigarettes = 25, - /obj/item/ammo_box/c38 = 20, - /obj/item/ammo_box/c38/dumdum = 5, - /obj/item/ammo_box/c38/hotshot = 5, - /obj/item/ammo_box/c38/iceblox = 5, - /obj/item/ammo_box/c38/match = 5, - /obj/item/ammo_box/c38/trac = 5, + /obj/item/ammo_box/speedloader/c38 = 20, + /obj/item/ammo_box/speedloader/c38/dumdum = 5, + /obj/item/ammo_box/speedloader/c38/hotshot = 5, + /obj/item/ammo_box/speedloader/c38/iceblox = 5, + /obj/item/ammo_box/speedloader/c38/match = 5, + /obj/item/ammo_box/speedloader/c38/trac = 5, /obj/item/card/id/advanced/plainclothes = 5, /obj/item/storage/belt/holster/detective/full = 1, ) diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 13a3496c609..2cf5997d32b 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -47,10 +47,10 @@ . = ..() if(check_holidays(GARBAGEDAY)) backpack_contents += list(/obj/item/gun/ballistic/revolver) - r_pocket = /obj/item/ammo_box/a357 + r_pocket = /obj/item/ammo_box/speedloader/c357 /datum/outfit/job/janitor/get_types_to_preload() . = ..() if(check_holidays(GARBAGEDAY)) . += /obj/item/gun/ballistic/revolver - . += /obj/item/ammo_box/a357 + . += /obj/item/ammo_box/speedloader/c357 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index f708ec04f6c..f5c123866b3 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -30,7 +30,7 @@ var/multiple_sprite_use_base = FALSE ///String, used for checking if ammo of different types but still fits can fit inside it; generally used for magazines var/caliber - /// Determines whether ammo boxes can multiload in or out. + /// Determines whether ammo boxes can multiload in or out. See code/__DEFINES/combat.dm for details. var/ammo_box_multiload = AMMO_BOX_MULTILOAD_BOTH ///Whether the magazine should start with nothing in it @@ -189,7 +189,17 @@ if(did_load) other_box.stored_ammo -= casing num_loaded++ - if(!did_load || !(ammo_box_multiload & AMMO_BOX_MULTILOAD_IN) || !(other_box.ammo_box_multiload & AMMO_BOX_MULTILOAD_OUT)) + // failed to load (full already? ran out of ammo?) + if(!did_load) + break + // this box can't accept being multiloaded into + if(!(ammo_box_multiload & AMMO_BOX_MULTILOAD_IN)) + break + // the other box can't give multiple bullets in one go to an unloaded magazine + if(!isgun(loc) && !(other_box.ammo_box_multiload & AMMO_BOX_MULTILOAD_OUT)) + break + // the other box can't give multiple bullets in one go to a loaded magazine + if(isgun(loc) && !(other_box.ammo_box_multiload & AMMO_BOX_MULTILOAD_OUT_LOADED)) break if(num_loaded) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 42e0ee45e88..4d099d7f34f 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -1,108 +1,3 @@ -/obj/item/ammo_box/a357 - name = "speed loader (.357)" - desc = "Designed to quickly reload revolvers." - icon_state = "357" - ammo_type = /obj/item/ammo_casing/c357 - max_ammo = 7 - caliber = CALIBER_357 - multiple_sprites = AMMO_BOX_PER_BULLET - item_flags = NO_MAT_REDEMPTION - ammo_band_icon = "+357_ammo_band" - ammo_band_color = null - -/obj/item/ammo_box/a357/match - name = "speed loader (.357 Match)" - desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." - ammo_type = /obj/item/ammo_casing/c357/match - ammo_band_color = "#77828a" - -/obj/item/ammo_box/a357/phasic - name = "speed loader (.357 Phasic)" - desc = "Designed to quickly reload revolvers. Holds phasic ammo, also known as 'Ghost Lead', allowing it to pass through non-organic material." - ammo_type = /obj/item/ammo_casing/c357/phasic - ammo_band_color = "#693a6a" - -/obj/item/ammo_box/a357/heartseeker - name = "speed loader (.357 Heartseeker)" - desc = "Designed to quickly reload revolvers. Holds heartseeker ammo, which veers into targets with exceptional precision using \ - an unknown method. It apparently predicts movement using neural pulses in the brain, but that's less marketable. \ - As seen in the hit NTFlik horror-space western film, Forget-Me-Not! Brought to you by Roseus Galactic!" - ammo_type = /obj/item/ammo_casing/c357/heartseeker - ammo_band_color = "#a91e1e" - -/obj/item/ammo_box/c38 - name = "speed loader (.38)" - desc = "Designed to quickly reload revolvers." - icon_state = "38" - base_icon_state = "38" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 6 - caliber = CALIBER_38 - multiple_sprites = AMMO_BOX_PER_BULLET - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - ammo_band_icon = "+38_ammo_band" - ammo_band_color = null - -/obj/item/ammo_box/c38/update_icon_state() - . = ..() - icon_state = "[base_icon_state]-base" - -/obj/item/ammo_box/c38/update_overlays() - . = ..() - if(!LAZYLEN(stored_ammo)) - return - for(var/inserted_ammo in 1 to stored_ammo.len) - var/obj/item/ammo_casing/c38/boolet = stored_ammo[inserted_ammo] - . += "38-[boolet::lead_or_laser]-[inserted_ammo]" - -/obj/item/ammo_box/c38/trac - name = "speed loader (.38 TRAC)" - desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body." - ammo_type = /obj/item/ammo_casing/c38/trac - ammo_band_color = COLOR_AMMO_TRACK - -/obj/item/ammo_box/c38/match - name = "speed loader (.38 Match)" - desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." - ammo_type = /obj/item/ammo_casing/c38/match - ammo_band_color = COLOR_AMMO_MATCH - -/obj/item/ammo_box/c38/match/bouncy - name = "speed loader (.38 Rubber)" - desc = "Designed to quickly reload revolvers. These rounds are incredibly bouncy and MOSTLY nonlethal, making them great to show off trickshots with." - ammo_type = /obj/item/ammo_casing/c38/match/bouncy - ammo_band_color = COLOR_AMMO_RUBBER - -/obj/item/ammo_box/c38/true - name = "speed loader (.38 True Strike)" - desc = "Designed to quickly reload revolvers. Bullets bounce towards new targets with surprising accuracy." - ammo_type = /obj/item/ammo_casing/c38/match/true - ammo_band_color = COLOR_AMMO_TRUESTRIKE - -/obj/item/ammo_box/c38/dumdum - name = "speed loader (.38 DumDum)" - desc = "Designed to quickly reload revolvers. These rounds expand on impact, allowing them to shred the target and cause massive bleeding. Very weak against armor and distant targets." - ammo_type = /obj/item/ammo_casing/c38/dumdum - ammo_band_color = COLOR_AMMO_DUMDUM - -/obj/item/ammo_box/c38/hotshot - name = "speed loader (.38 Hot Shot)" - desc = "Designed to quickly reload revolvers. Hot Shot bullets contain an incendiary payload." - ammo_type = /obj/item/ammo_casing/c38/hotshot - ammo_band_color = COLOR_AMMO_HOTSHOT - -/obj/item/ammo_box/c38/iceblox - name = "speed loader (.38 Iceblox)" - desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload." - ammo_type = /obj/item/ammo_casing/c38/iceblox - ammo_band_color = COLOR_AMMO_ICEBLOX - -/obj/item/ammo_box/c38/flare - name = "speed loader (.38 Flare)" - desc = "Designed to quickly reload revolvers. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see." - ammo_type = /obj/item/ammo_casing/c38/flare - ammo_band_color = COLOR_AMMO_HELLFIRE - /obj/item/ammo_box/c9mm name = "ammo box (9mm)" icon_state = "9mmbox" @@ -142,25 +37,6 @@ /obj/item/ammo_box/rocket/can_load(mob/user) return FALSE -/obj/item/ammo_box/strilka310 - name = "stripper clip (.310 Strilka)" - desc = "A stripper clip." - icon_state = "310_strip" - ammo_type = /obj/item/ammo_casing/strilka310 - max_ammo = 5 - caliber = CALIBER_STRILKA310 - multiple_sprites = AMMO_BOX_PER_BULLET - -/obj/item/ammo_box/strilka310/surplus - name = "stripper clip (.310 Surplus)" - ammo_type = /obj/item/ammo_casing/strilka310/surplus - -/obj/item/ammo_box/strilka310/phasic - name = "stripper clip (.310 Phasic)" - desc = "A stripper clip filled with phasic bullets, hastily developed after an incident where a misfire resulted in the destruction of Atrakor Silverscale's priceless Vigoxian Fabergé egg. \ - These fancy bullets pass right though valuables until they end up in a far less expensive human skull." - ammo_type = /obj/item/ammo_casing/strilka310/phasic - /obj/item/ammo_box/n762 name = "ammo box (7.62x38mmR)" icon_state = "10mmbox" diff --git a/code/modules/projectiles/boxes_magazines/speedloaders.dm b/code/modules/projectiles/boxes_magazines/speedloaders.dm new file mode 100644 index 00000000000..0fe437f05b9 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/speedloaders.dm @@ -0,0 +1,134 @@ +/obj/item/ammo_box/speedloader + name = "speed loader (base type)" + desc = "This shouldn't be here. Report this to a coder, thanks!" + multiple_sprites = AMMO_BOX_PER_BULLET + ammo_box_multiload = (AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT_LOADED) + // You can feed ammo in from a box (assuming someone ever codes a relevant ammo box), + // you can feed ammo out to a revolver's cylinder, + // but you can't use it to teleport six bullets into a detached rifle magazine. + +/obj/item/ammo_box/speedloader/c357 + name = "speed loader (.357)" + desc = "Designed to quickly reload seven-chamber .357 revolvers." + icon_state = "357" + ammo_type = /obj/item/ammo_casing/c357 + max_ammo = 7 + caliber = CALIBER_357 + item_flags = NO_MAT_REDEMPTION + ammo_band_icon = "+357_ammo_band" + ammo_band_color = null + +/obj/item/ammo_box/speedloader/c357/match + name = "speed loader (.357 Match)" + desc = parent_type::desc + " Match rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c357/match + ammo_band_color = "#77828a" + +/obj/item/ammo_box/speedloader/c357/phasic + name = "speed loader (.357 Phasic)" + desc = parent_type::desc + " Phasic rounds, also known as 'Ghost Lead', are specially manufactured to pass through non-organic material. Somehow." + ammo_type = /obj/item/ammo_casing/c357/phasic + ammo_band_color = "#693a6a" + +/obj/item/ammo_box/speedloader/c357/heartseeker + name = "speed loader (.357 Heartseeker)" + desc = parent_type::desc + " Heartseeker rounds veer into targets with exceptional precision using an unknown method. \ + It apparently predicts movement using neural pulses in the brain, but that's less marketable. \ + As seen in the hit NTFlik horror-space western film, Forget-Me-Not, brought to you by Roseus Galactic!" + ammo_type = /obj/item/ammo_casing/c357/heartseeker + ammo_band_color = "#a91e1e" + +/obj/item/ammo_box/speedloader/c38 + name = "speed loader (.38)" + desc = "Designed to quickly reload six-chamber .38 Special revolvers." + icon_state = "38" + base_icon_state = "38" + ammo_type = /obj/item/ammo_casing/c38 + max_ammo = 6 + caliber = CALIBER_38 + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) + ammo_band_icon = "+38_ammo_band" + ammo_band_color = null + +/obj/item/ammo_box/speedloader/c38/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-base" + +/obj/item/ammo_box/speedloader/c38/update_overlays() + . = ..() + if(!LAZYLEN(stored_ammo)) + return + for(var/inserted_ammo in 1 to stored_ammo.len) + var/obj/item/ammo_casing/c38/boolet = stored_ammo[inserted_ammo] + . += "38-[boolet::lead_or_laser]-[inserted_ammo]" + +/obj/item/ammo_box/speedloader/c38/trac + name = "speed loader (.38 TRAC)" + desc = parent_type::desc + " TRAC bullets embed a tracking implant within the target's body." + ammo_type = /obj/item/ammo_casing/c38/trac + ammo_band_color = COLOR_AMMO_TRACK + +/obj/item/ammo_box/speedloader/c38/match + name = "speed loader (.38 Match)" + desc = parent_type::desc + " Match bullets are manufactured within extremely tight tolerances, making them easy to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c38/match + ammo_band_color = COLOR_AMMO_MATCH + +/obj/item/ammo_box/speedloader/c38/match/bouncy + name = "speed loader (.38 Rubber)" + desc = parent_type::desc + " Rubber rounds are incredibly bouncy and MOSTLY less-lethal, making them great to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c38/match/bouncy + ammo_band_color = COLOR_AMMO_RUBBER + +/obj/item/ammo_box/speedloader/c38/true + name = "speed loader (.38 True Strike)" + desc = parent_type::desc + " True Strike bullets bounce towards new targets with surprising accuracy after ricocheting." + ammo_type = /obj/item/ammo_casing/c38/match/true + ammo_band_color = COLOR_AMMO_TRUESTRIKE + +/obj/item/ammo_box/speedloader/c38/dumdum + name = "speed loader (.38 DumDum)" + desc = parent_type::desc + " DumDum bullets expand on impact, reducing outright stopping power but \ + shredding targets and causing massive bleeding in close range, \ + at the cost of suffering greatly against armor and distant targets." + ammo_type = /obj/item/ammo_casing/c38/dumdum + ammo_band_color = COLOR_AMMO_DUMDUM + +/obj/item/ammo_box/speedloader/c38/hotshot + name = "speed loader (.38 Hot Shot)" + desc = parent_type::desc + " Hot Shot bullets contain an incendiary payload that ignites struck targets." + ammo_type = /obj/item/ammo_casing/c38/hotshot + ammo_band_color = COLOR_AMMO_HOTSHOT + +/obj/item/ammo_box/speedloader/c38/iceblox + name = "speed loader (.38 Iceblox)" + desc = parent_type::desc + " Iceblox bullets contain a cryogenic payload that lower the body temperature of struck targets." + ammo_type = /obj/item/ammo_casing/c38/iceblox + ammo_band_color = COLOR_AMMO_ICEBLOX + +/obj/item/ammo_box/speedloader/c38/flare + name = "speed loader (.38 Flare)" + desc = parent_type::desc + " Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see." + ammo_type = /obj/item/ammo_casing/c38/flare + ammo_band_color = COLOR_AMMO_HELLFIRE + +/obj/item/ammo_box/speedloader/strilka310 + name = "stripper clip (.310 Strilka)" + desc = "A five-round stripper clip for .310 Strilka rifles." + icon_state = "310_strip" + ammo_type = /obj/item/ammo_casing/strilka310 + max_ammo = 5 + ammo_box_multiload = AMMO_BOX_MULTILOAD_ALL + caliber = CALIBER_STRILKA310 + +/obj/item/ammo_box/speedloader/strilka310/surplus + name = "stripper clip (.310 Surplus)" + desc = parent_type::desc + " This one has a few spots of rust where there's not excessive amounts of gun grease." + ammo_type = /obj/item/ammo_casing/strilka310/surplus + +/obj/item/ammo_box/speedloader/strilka310/phasic + name = "stripper clip (.310 Phasic)" + desc = parent_type::desc + " These should come with phasic bullets, \ + hastily developed after an incident where a misfire resulted in the destruction of Atrakor Silverscale's priceless Vigoxian Fabergé egg. \ + These fancy bullets pass right though valuables until they end up in a far less expensive human skull." + ammo_type = /obj/item/ammo_casing/strilka310/phasic diff --git a/code/modules/research/designs/autolathe/security_designs.dm b/code/modules/research/designs/autolathe/security_designs.dm index 4115a33f424..c6a96542ef3 100644 --- a/code/modules/research/designs/autolathe/security_designs.dm +++ b/code/modules/research/designs/autolathe/security_designs.dm @@ -27,7 +27,7 @@ id = "c38" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3) - build_path = /obj/item/ammo_box/c38 + build_path = /obj/item/ammo_box/speedloader/c38 category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index d0a54cb7d4a..66f550b9055 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -21,7 +21,7 @@ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/item/ammo_box/c38/trac + build_path = /obj/item/ammo_box/speedloader/c38/trac category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -36,7 +36,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, ) - build_path = /obj/item/ammo_box/c38/hotshot + build_path = /obj/item/ammo_box/speedloader/c38/hotshot category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -51,7 +51,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, ) - build_path = /obj/item/ammo_box/c38/iceblox + build_path = /obj/item/ammo_box/speedloader/c38/iceblox category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -63,7 +63,7 @@ id = "c38_rubber" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3) - build_path = /obj/item/ammo_box/c38/match/bouncy + build_path = /obj/item/ammo_box/speedloader/c38/match/bouncy category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -78,7 +78,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT * 1.5, ) - build_path = /obj/item/ammo_box/c38/true + build_path = /obj/item/ammo_box/speedloader/c38/true category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -94,7 +94,7 @@ /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/item/ammo_box/c38/flare + build_path = /obj/item/ammo_box/speedloader/c38/flare category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) diff --git a/code/modules/uplink/uplink_items/ammunition.dm b/code/modules/uplink/uplink_items/ammunition.dm index 7000fb7e9a7..63853d55745 100644 --- a/code/modules/uplink/uplink_items/ammunition.dm +++ b/code/modules/uplink/uplink_items/ammunition.dm @@ -51,7 +51,7 @@ name = ".357 Speed Loader" desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ For when you really need a lot of things dead." - item = /obj/item/ammo_box/a357 + item = /obj/item/ammo_box/speedloader/c357 cost = 4 purchasable_from = ~(UPLINK_ALL_SYNDIE_OPS | UPLINK_SPY) //nukies get their own version uplink_item_flags = SYNDIE_TRIPS_CONTRABAND diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index ed38ef0ac8e..1b83a572ddd 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -218,7 +218,7 @@ name = ".357 Speed Loader (Revolver)" desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ For when you really need a lot of things dead. Unlike field agents, operatives get a premium price for their speedloaders!" - item = /obj/item/ammo_box/a357 + item = /obj/item/ammo_box/speedloader/c357 purchasable_from = parent_type::purchasable_from | UPLINK_SPY /datum/uplink_item/ammo_nuclear/special/revolver/phasic @@ -226,7 +226,7 @@ desc = "A speed loader that contains seven additional .357 Magnum phasic rounds; usable with the Syndicate revolver. \ These bullets are made from an experimental alloy, 'Ghost Lead', that allows it to pass through almost any non-organic material. \ The name is a misnomer. It doesn't contain any lead whatsoever!" - item = /obj/item/ammo_box/a357/phasic + item = /obj/item/ammo_box/speedloader/c357/phasic purchasable_from = parent_type::purchasable_from | UPLINK_SPY /datum/uplink_item/ammo_nuclear/special/revolver/heartseeker @@ -234,7 +234,7 @@ desc = "A speed loader that contains seven additional .357 Magnum heartseeker rounds; usable with the Syndicate revolver. \ Able to veer straight into targets! Don't miss a shot with heartseeker! As seen in the hit NTFlik horror-space western film, Forget-Me-Not! \ Brought to you by Roseus Galactic!" - item = /obj/item/ammo_box/a357/heartseeker + item = /obj/item/ammo_box/speedloader/c357/heartseeker cost = 3 purchasable_from = parent_type::purchasable_from | UPLINK_SPY diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index 37533a6cdeb..79250688cc4 100644 Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 10335a32699..b96b8f04410 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5820,6 +5820,7 @@ #include "code\modules\projectiles\ammunition\special\syringe.dm" #include "code\modules\projectiles\boxes_magazines\_box_magazine.dm" #include "code\modules\projectiles\boxes_magazines\ammo_boxes.dm" +#include "code\modules\projectiles\boxes_magazines\speedloaders.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" #include "code\modules\projectiles\boxes_magazines\external\lmg.dm" #include "code\modules\projectiles\boxes_magazines\external\pistol.dm" diff --git a/tools/UpdatePaths/92854_speedloaders.txt b/tools/UpdatePaths/92854_speedloaders.txt new file mode 100644 index 00000000000..233c1e2a5e2 --- /dev/null +++ b/tools/UpdatePaths/92854_speedloaders.txt @@ -0,0 +1,3 @@ +/obj/item/ammo_box/a357/@SUBTYPES : /obj/item/ammo_box/speedloader/c357/@SUBTYPES{@OLD} +/obj/item/ammo_box/c38/@SUBTYPES : /obj/item/ammo_box/speedloader/c38/@SUBTYPES{@OLD} +/obj/item/ammo_box/strilka310/@SUBTYPES : /obj/item/ammo_box/speedloader/strilka310/@SUBTYPES{@OLD} diff --git a/tools/UpdatePaths/Scripts/92854_speedloaders.txt b/tools/UpdatePaths/Scripts/92854_speedloaders.txt new file mode 100644 index 00000000000..233c1e2a5e2 --- /dev/null +++ b/tools/UpdatePaths/Scripts/92854_speedloaders.txt @@ -0,0 +1,3 @@ +/obj/item/ammo_box/a357/@SUBTYPES : /obj/item/ammo_box/speedloader/c357/@SUBTYPES{@OLD} +/obj/item/ammo_box/c38/@SUBTYPES : /obj/item/ammo_box/speedloader/c38/@SUBTYPES{@OLD} +/obj/item/ammo_box/strilka310/@SUBTYPES : /obj/item/ammo_box/speedloader/strilka310/@SUBTYPES{@OLD}