From cfa170b7c6fbdb593bfc6251086ba9692d6f519b Mon Sep 17 00:00:00 2001 From: thgvr Date: Mon, 29 Jul 2024 20:40:19 -0700 Subject: [PATCH 01/31] Initial ammostack commit --- .../{_ammunition.dm => _ammo_casing.dm} | 135 ++++++++++++++---- .../ammunition/ballistic/pistol.dm | 1 + .../projectiles/ammunition/ballistic/rifle.dm | 1 - .../boxes_magazines/_box_magazine.dm | 8 +- .../projectiles/boxes_magazines/ammo_stack.dm | 87 +++++++++++ code/modules/projectiles/guns/ballistic.dm | 13 +- shiptest.dme | 5 +- 7 files changed, 211 insertions(+), 39 deletions(-) rename code/modules/projectiles/ammunition/{_ammunition.dm => _ammo_casing.dm} (53%) create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stack.dm diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm similarity index 53% rename from code/modules/projectiles/ammunition/_ammunition.dm rename to code/modules/projectiles/ammunition/_ammo_casing.dm index b216296cfe8d..50fbef5b4def 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -30,16 +30,114 @@ /// Disable for things like rockets or other heavy ammunition that should only appear right-side up. var/auto_rotate = TRUE - var/pellets = 1 //Pellets for spreadshot - var/variance = 0 //Variance for inaccuracy fundamental to the casing - var/randomspread = FALSE //Randomspread for automatics - var/delay = 0 //Delay for energy weapons - var/click_cooldown_override = 0 //Override this to make your gun have a faster fire rate, in tenths of a second. 4 is the default gun cooldown. - - var/list/bounce_sfx_override // if true, overrides the bouncing sfx from the turf to this one + ///Pellets for spreadshot + var/pellets = 1 + ///Variance for inaccuracy fundamental to the casing + var/variance = 0 + ///Randomspread for automatics + var/randomspread = FALSE + ///Delay for energy weapons + var/delay = 0 + ///Override this to make your gun have a faster fire rate, in tenths of a second. 4 is the default gun cooldown. + var/click_cooldown_override = 0 + ///If true, overrides the bouncing sfx from the turf to this one + var/list/bounce_sfx_override var/bullet_per_box + ///What this casing can be stacked into. + var/obj/item/ammo_box/magazine/stack_type = /obj/item/ammo_box/magazine/ammo_stack + ///TRUE if the ammo stack is generic and we should give it info based on the casing + var/generic_stacking = TRUE + ///Maximum stack size of ammunition + var/stack_size = 20 + +/obj/item/ammo_casing/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/ammo_box) && user.is_holding(src)) + add_fingerprint(user) + var/obj/item/ammo_box/ammo_box = attacking_item + var/obj/item/ammo_casing/other_casing = ammo_box.get_round(TRUE) + + if(try_stacking(other_casing, user)) + ammo_box.stored_ammo -= other_casing + ammo_box.update_ammo_count() + return + + else if(istype(attacking_item, /obj/item/ammo_box/magazine/ammo_stack)) + add_fingerprint(user) + var/obj/item/ammo_box/magazine/ammo_stack = attacking_item + if(isturf(loc)) + var/boolets = 0 + for(var/obj/item/ammo_casing/bullet in loc) + if(bullet == src) + continue + if(!bullet.BB) + continue + if(length(ammo_stack.stored_ammo) >= ammo_stack.max_ammo) + break + if(ammo_stack.give_round(bullet, FALSE)) + boolets++ + break + if((boolets <= 0) && BB && !(length(ammo_stack.stored_ammo) >= ammo_stack.max_ammo)) + if(ammo_stack.give_round(src, FALSE)) + boolets++ + if(boolets > 0) + ammo_stack.update_ammo_count() + to_chat(user, span_notice("You collect [boolets] round\s. [ammo_stack] now contains [length(ammo_stack.stored_ammo)] round\s.")) + else + to_chat(user, span_warning("You fail to collect anything!")) + return + + else if(istype(attacking_item, /obj/item/ammo_casing)) + try_stacking(attacking_item, user) + return + + return ..() + +/obj/item/ammo_casing/proc/try_stacking(obj/item/ammo_casing/other_casing, mob/living/user) + if(user) + add_fingerprint(user) + if(!other_casing.stack_type) + if(user) + to_chat(user, span_warning("[other_casing] can't be stacked.")) + return + if(!stack_type) + if(user) + to_chat(user, span_warning("[src] can't be stacked.")) + return + if(caliber != other_casing.caliber) + if(user) + to_chat(user, span_warning("I can't stack different calibers.")) + return + if(stack_type != other_casing.stack_type) + if(user) + to_chat(user, span_warning("I can't stack [other_casing] with [src].")) + return + if(!BB || !other_casing.BB) + if(user) + to_chat(user, span_warning("I can't stack empty casings.")) + return + if((item_flags & IN_STORAGE) || (other_casing.item_flags & IN_STORAGE)) + if(user) + to_chat(user, span_warning("Can't stack casings while they are inside storage.")) + return + var/obj/item/ammo_box/magazine/ammo_stack/ammo_stack = other_casing.stack_with(src) + if(user) + user.put_in_hands(ammo_stack) + to_chat(user, span_notice("[src] has been stacked with [other_casing].")) + return ammo_stack + +/obj/item/ammo_casing/proc/stack_with(obj/item/ammo_casing/other_casing) + var/obj/item/ammo_box/magazine/ammo_stack/ammo_stack = new stack_type(drop_location()) + if(generic_stacking) + ammo_stack.name = "handful of [caliber] rounds" + ammo_stack.base_icon_state = initial(icon_state) + ammo_stack.caliber = caliber + ammo_stack.max_ammo = stack_size + ammo_stack.give_round(src) + ammo_stack.give_round(other_casing) + ammo_stack.update_ammo_count() + return ammo_stack /obj/item/ammo_casing/spent name = "spent bullet casing" @@ -77,28 +175,6 @@ if(!BB) BB = new projectile_type(src, src) -/obj/item/ammo_casing/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/ammo_box)) - var/obj/item/ammo_box/box = I - if(isturf(loc)) - var/boolets = 0 - for(var/obj/item/ammo_casing/bullet in loc) - if (box.stored_ammo.len >= box.max_ammo) - break - if (bullet.BB) - if (box.give_round(bullet, 0)) - boolets++ - else - continue - if (boolets > 0) - box.update_appearance() - to_chat(user, "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.") - else - to_chat(user, "You fail to collect anything!") - else - return ..() - - /obj/item/ammo_casing/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) bounce_away(FALSE, NONE) . = ..() @@ -111,7 +187,6 @@ var/angle_of_movement = !isnull(shooter) ? (rand(-3000, 3000) / 100) + dir2angle(turn(shooter.dir, 180)) : rand(-3000, 3000) / 100 AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(400, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = bounce_sfx_override) - /obj/item/ammo_casing/proc/bounce_away(still_warm = FALSE, bounce_delay = 3) if(!heavy_metal) return diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 0f37b5426d2d..63a95e072a80 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -87,6 +87,7 @@ caliber = ".45" projectile_type = /obj/projectile/bullet/c45 bullet_per_box = 50 + stack_size = 12 /obj/item/ammo_casing/c45/surplus name = ".45 surplus bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index b3875292fba2..c0f30b2ead06 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -15,7 +15,6 @@ caliber = "8x50mmR" projectile_type = /obj/projectile/bullet/a8_50rhp - // 8x58mm Caseless (SSG-669C) /obj/item/ammo_casing/caseless/a858 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 3b1bdbc6eb1c..72ff229216d8 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -26,7 +26,7 @@ ///String, used for checking if ammo of different types but still fits can fit inside it; generally used for magazines var/caliber ///Allows multiple bullets to be loaded in from one click of another box/magazine - var/multiload = TRUE + var/multiload = FALSE ///Whether or not an ammo box skips the do_after process (e.g. speedloaders) var/instant_load = FALSE ///Whether the magazine should start with nothing in it @@ -93,9 +93,11 @@ /obj/item/ammo_box/attackby(obj/item/attacking_obj, mob/user, params, silent = FALSE, replace_spent = FALSE) var/num_loaded = 0 + if(!can_load(user)) return - if(istype(attacking_obj, /obj/item/ammo_box)) + + if(istype(attacking_obj, /obj/item/ammo_box/magazine/ammo_stack)) var/obj/item/ammo_box/attacking_box = attacking_obj for(var/obj/item/ammo_casing/casing_to_insert in attacking_box.stored_ammo) if(!((instant_load && attacking_box.instant_load) || (stored_ammo.len >= max_ammo) || do_after(user, 1 SECONDS, attacking_box))) @@ -198,6 +200,7 @@ var/list/L = stored_ammo.Copy() if(drop_list) stored_ammo.Cut() + update_ammo_count() return L ///drops the entire contents of the magazine on the floor @@ -206,6 +209,7 @@ for(var/obj/item/ammo in stored_ammo) ammo.forceMove(turf_mag) stored_ammo -= ammo + update_ammo_count() /obj/item/ammo_box/magazine/handle_atom_del(atom/A) stored_ammo -= A diff --git a/code/modules/projectiles/boxes_magazines/ammo_stack.dm b/code/modules/projectiles/boxes_magazines/ammo_stack.dm new file mode 100644 index 000000000000..e3558e6ac9da --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stack.dm @@ -0,0 +1,87 @@ +/** + * The ammo stack object itself, making this a magazine was the easiest way to handle it + * Practically every casing type needs an associated ammo stack type, because that was the easiest + * way for me to handle it. + */ +/obj/item/ammo_box/magazine/ammo_stack + name = "ammo stack" + desc = "A stack of ammo." + icon_state = "pistol-brass" + base_icon_state = "pistol-brass" + item_flags = NO_PIXEL_RANDOM_DROP + multiple_sprites = AMMO_BOX_ONE_SPRITE + multiload = FALSE + start_empty = TRUE + max_ammo = 12 + +/obj/item/ammo_box/magazine/ammo_stack/update_icon(updates) + icon = initial(icon) + cut_overlays() + return ..() + +/obj/item/ammo_box/magazine/ammo_stack/update_icon_state() + . = ..() + cut_overlays() + icon_state = "" + + for(var/casing in stored_ammo) + var/image/bullet = image(initial(icon), src, "[base_icon_state]") + bullet.pixel_x = rand(-8, 8) + bullet.pixel_y = rand(-8, 8) + add_overlay(bullet) + return UPDATE_ICON_STATE | UPDATE_OVERLAYS + +/obj/item/ammo_box/magazine/ammo_stack/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + var/loc_before_del = loc + while(LAZYLEN(stored_ammo)) + var/obj/item/ammo = get_round(FALSE) + ammo.forceMove(loc_before_del) + ammo.throw_at(loc_before_del) + check_for_del() + +/obj/item/ammo_box/magazine/ammo_stack/handle_atom_del(atom/A) + . = ..() + check_for_del() + +/obj/item/ammo_box/magazine/ammo_stack/empty_magazine() + . = ..() + check_for_del() + +/obj/item/ammo_box/magazine/ammo_stack/update_ammo_count() + . = ..() + check_for_del() + +/obj/item/ammo_box/magazine/ammo_stack/proc/check_for_del() + . = FALSE + if((ammo_count(TRUE) <= 0) && !QDELETED(src)) + qdel(src) + return TRUE + +/obj/item/ammo_box/magazine/ammo_stack/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = 0) + var/num_loaded = 0 + if(!can_load(user)) + return + if(istype(A, /obj/item/ammo_box)) + var/obj/item/ammo_box/AM = A + for(var/obj/item/ammo_casing/AC in AM.stored_ammo) + var/did_load = give_round(AC, replace_spent) + if(did_load) + AM.stored_ammo -= AC + num_loaded++ + if(!did_load || !multiload) + break + if(num_loaded) + AM.update_ammo_count() + if(istype(A, /obj/item/ammo_casing)) + var/obj/item/ammo_casing/AC = A + if(give_round(AC, replace_spent)) + user.transferItemToLoc(AC, src, TRUE) + num_loaded++ + AC.update_appearance() + + if(num_loaded) + if(!silent) + to_chat(user, span_notice("You load [num_loaded] shell\s into \the [src]!")) + playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) + update_ammo_count() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 7c75d8fe9f56..bbbb7c709c4d 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -195,9 +195,11 @@ /obj/item/gun/ballistic/attackby(obj/item/A, mob/user, params) . = ..() - if (.) + + if(.) return - if (!internal_magazine && istype(A, /obj/item/ammo_box/magazine)) + + if(!internal_magazine && istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if (!magazine) insert_magazine(user, AM) @@ -207,7 +209,8 @@ else to_chat(user, "There's already a [magazine_wording] in \the [src].") return - if (istype(A, /obj/item/ammo_casing) || istype(A, /obj/item/ammo_box)) + + if(istype(A, /obj/item/ammo_casing) || istype(A, /obj/item/ammo_box/magazine/ammo_stack)) if (bolt_type == BOLT_TYPE_NO_BOLT || internal_magazine) if (chambered && !chambered.BB) chambered.on_eject(shooter = user) @@ -221,9 +224,11 @@ A.update_appearance() update_appearance() return - if (can_be_sawn_off) + + if(can_be_sawn_off) if (sawoff(user, A)) return + return FALSE ///Prefire empty checks for the bolt drop diff --git a/shiptest.dme b/shiptest.dme index c0d9a7d4df66..ca55661e5662 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1869,9 +1869,9 @@ #include "code\modules\buildmode\submodes\basic.dm" #include "code\modules\buildmode\submodes\boom.dm" #include "code\modules\buildmode\submodes\copy.dm" -#include "code\modules\buildmode\submodes\lightmaker.dm" #include "code\modules\buildmode\submodes\delete.dm" #include "code\modules\buildmode\submodes\fill.dm" +#include "code\modules\buildmode\submodes\lightmaker.dm" #include "code\modules\buildmode\submodes\map_export.dm" #include "code\modules\buildmode\submodes\outfit.dm" #include "code\modules\buildmode\submodes\proccall.dm" @@ -2994,7 +2994,7 @@ #include "code\modules\power\tesla\generator.dm" #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\projectile.dm" -#include "code\modules\projectiles\ammunition\_ammunition.dm" +#include "code\modules\projectiles\ammunition\_ammo_casing.dm" #include "code\modules\projectiles\ammunition\_firing.dm" #include "code\modules\projectiles\ammunition\ballistic\lmg.dm" #include "code\modules\projectiles\ammunition\ballistic\pistol.dm" @@ -3022,6 +3022,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\ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm" #include "code\modules\projectiles\boxes_magazines\external\gauss.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" From b4aad1eaad90f8fa89cfbbed43c0d382d5c81f2f Mon Sep 17 00:00:00 2001 From: thgvr Date: Sun, 29 Sep 2024 00:59:44 -0700 Subject: [PATCH 02/31] commit 2 --- .../boxes_magazines/_box_magazine.dm | 13 ++++---- .../projectiles/boxes_magazines/ammo_stack.dm | 32 ++++++++----------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 72ff229216d8..33d22b602646 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -40,7 +40,7 @@ . = ..() if(!base_icon_state) base_icon_state = icon_state - if (!bullet_cost) + if(!bullet_cost) for (var/material in custom_materials) var/material_amount = custom_materials[material] LAZYSET(base_cost, material, (material_amount * 0.10)) @@ -55,7 +55,7 @@ ///gets a round from the magazine, if keep is TRUE the round will stay in the gun /obj/item/ammo_box/proc/get_round(keep = FALSE) - if (!stored_ammo.len) + if(!stored_ammo.len) return null else var/b = stored_ammo[stored_ammo.len] @@ -70,7 +70,7 @@ if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type)) return FALSE - if (stored_ammo.len < max_ammo) + if(stored_ammo.len < max_ammo) stored_ammo += R R.forceMove(src) return TRUE @@ -116,15 +116,14 @@ var/obj/item/ammo_casing/casing_to_insert = attacking_obj if(give_round(casing_to_insert, replace_spent)) user.transferItemToLoc(casing_to_insert, src, TRUE) - if(!silent) - playsound(casing_to_insert, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) num_loaded++ + casing_to_insert.update_appearance() update_ammo_count() - if(num_loaded) if(!silent) - to_chat(user, "You load [num_loaded] cartridge\s into \the [src]!") + to_chat(user, span_notice("You load [num_loaded] cartridge\s into \the [src]!")) + playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) return num_loaded /obj/item/ammo_box/attack_self(mob/user) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stack.dm b/code/modules/projectiles/boxes_magazines/ammo_stack.dm index e3558e6ac9da..faa747aaab8d 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stack.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stack.dm @@ -6,6 +6,7 @@ /obj/item/ammo_box/magazine/ammo_stack name = "ammo stack" desc = "A stack of ammo." + icon = 'icons/obj/ammo_bullets.dmi' icon_state = "pistol-brass" base_icon_state = "pistol-brass" item_flags = NO_PIXEL_RANDOM_DROP @@ -18,34 +19,25 @@ icon = initial(icon) cut_overlays() return ..() - +// thgvr todo: doesn't support shotshells/different icon files, fix that /obj/item/ammo_box/magazine/ammo_stack/update_icon_state() . = ..() cut_overlays() icon_state = "" - for(var/casing in stored_ammo) var/image/bullet = image(initial(icon), src, "[base_icon_state]") - bullet.pixel_x = rand(-8, 8) - bullet.pixel_y = rand(-8, 8) + bullet.pixel_x = rand(-6, 6) + bullet.pixel_y = rand(-6, 6) add_overlay(bullet) return UPDATE_ICON_STATE | UPDATE_OVERLAYS /obj/item/ammo_box/magazine/ammo_stack/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - var/loc_before_del = loc - while(LAZYLEN(stored_ammo)) - var/obj/item/ammo = get_round(FALSE) - ammo.forceMove(loc_before_del) - ammo.throw_at(loc_before_del) - check_for_del() - -/obj/item/ammo_box/magazine/ammo_stack/handle_atom_del(atom/A) - . = ..() - check_for_del() - -/obj/item/ammo_box/magazine/ammo_stack/empty_magazine() . = ..() + var/loc_before_del = loc + while(LAZYLEN(stored_ammo)) + var/obj/item/ammo = get_round(FALSE) + ammo.forceMove(loc_before_del) + ammo.throw_at(loc_before_del) check_for_del() /obj/item/ammo_box/magazine/ammo_stack/update_ammo_count() @@ -55,13 +47,14 @@ /obj/item/ammo_box/magazine/ammo_stack/proc/check_for_del() . = FALSE if((ammo_count(TRUE) <= 0) && !QDELETED(src)) - qdel(src) - return TRUE +// qdel(src) thgvr todo: this needs to exist so there isn't a + return /obj/item/ammo_box/magazine/ammo_stack/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = 0) var/num_loaded = 0 if(!can_load(user)) return + if(istype(A, /obj/item/ammo_box)) var/obj/item/ammo_box/AM = A for(var/obj/item/ammo_casing/AC in AM.stored_ammo) @@ -73,6 +66,7 @@ break if(num_loaded) AM.update_ammo_count() + if(istype(A, /obj/item/ammo_casing)) var/obj/item/ammo_casing/AC = A if(give_round(AC, replace_spent)) From cb094d67d61f3c60e91a55e72849c32d98cca6b6 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sun, 29 Sep 2024 08:23:30 -0700 Subject: [PATCH 03/31] stupid idiot commit --- .../projectiles/ammunition/_ammo_casing.dm | 10 ++--- .../ammunition/ballistic/shotgun.dm | 2 +- .../boxes_magazines/_box_magazine.dm | 33 ++++++++++++--- .../projectiles/boxes_magazines/ammo_stack.dm | 39 +++++++++--------- .../boxes_magazines/premade_ammo_stacks.dm | 16 +++++++ icons/obj/ammo_bullets.dmi | Bin 2226 -> 3184 bytes shiptest.dme | 1 + 7 files changed, 70 insertions(+), 31 deletions(-) create mode 100644 code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 50fbef5b4def..684ce193e384 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -85,7 +85,7 @@ ammo_stack.update_ammo_count() to_chat(user, span_notice("You collect [boolets] round\s. [ammo_stack] now contains [length(ammo_stack.stored_ammo)] round\s.")) else - to_chat(user, span_warning("You fail to collect anything!")) + to_chat(user, span_warning("You can't stack any more!")) return else if(istype(attacking_item, /obj/item/ammo_casing)) @@ -107,19 +107,19 @@ return if(caliber != other_casing.caliber) if(user) - to_chat(user, span_warning("I can't stack different calibers.")) + to_chat(user, span_warning("You can't stack different calibers.")) return if(stack_type != other_casing.stack_type) if(user) - to_chat(user, span_warning("I can't stack [other_casing] with [src].")) + to_chat(user, span_warning("You can't stack [other_casing] with [src].")) return if(!BB || !other_casing.BB) if(user) - to_chat(user, span_warning("I can't stack empty casings.")) + to_chat(user, span_warning("You can't stack empty casings.")) return if((item_flags & IN_STORAGE) || (other_casing.item_flags & IN_STORAGE)) if(user) - to_chat(user, span_warning("Can't stack casings while they are inside storage.")) + to_chat(user, span_warning("You can't stack casings while they are inside storage.")) return var/obj/item/ammo_box/magazine/ammo_stack/ammo_stack = other_casing.stack_with(src) if(user) diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 9f6a8c169ecd..1b91f8d8cbb0 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -3,11 +3,11 @@ /obj/item/ammo_casing/shotgun name = "shotgun slug" desc = "A 12-gauge lead slug." - icon = 'icons/obj/ammo_shotshells.dmi' icon_state = "slug" caliber = "12ga" custom_materials = list(/datum/material/iron=4000) projectile_type = /obj/projectile/bullet/slug + stack_size = 8 //Not too big of a handful, not too small bullet_per_box = 25 bounce_sfx_override = 'sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg' diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 33d22b602646..adcc0306bef7 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -40,6 +40,7 @@ . = ..() if(!base_icon_state) base_icon_state = icon_state + if(!bullet_cost) for (var/material in custom_materials) var/material_amount = custom_materials[material] @@ -47,11 +48,31 @@ material_amount *= 0.90 // 10% for the container material_amount /= max_ammo - LAZYSET(bullet_cost, material, material_amount) + LAZYSET(bullet_cost, material, material_amount). + if(!start_empty) - for(var/i = 1, i <= max_ammo, i++) - stored_ammo += new ammo_type(src) - update_ammo_count() + top_off(starting = TRUE) + + update_appearance() + +/** + * top_off is used to refill the magazine to max, in case you want to increase the size of a magazine with VV then refill it at once + * + * Arguments: + * * load_type - if you want to specify a specific ammo casing type to load, enter the path here, otherwise it'll use the basic [/obj/item/ammo_box/var/ammo_type]. Must be a compatible round + * * starting - Relevant for revolver cylinders, if FALSE then we mind the nulls that represent the empty cylinders (since those nulls don't exist yet if we haven't initialized when this is TRUE) + */ +/obj/item/ammo_box/proc/top_off(load_type, starting=FALSE) + if(!load_type) //this check comes first so not defining an argument means we just go with default ammo + load_type = ammo_type + + var/obj/item/ammo_casing/round_check = load_type + if(!starting && (caliber && initial(round_check.caliber) != caliber) || (!caliber && load_type != ammo_type)) + stack_trace("Tried loading unsupported ammocasing type [load_type] into ammo box [type].") + return + + for(var/i = max(1, stored_ammo.len), i <= max_ammo, i++) + stored_ammo += new round_check(src) ///gets a round from the magazine, if keep is TRUE the round will stay in the gun /obj/item/ammo_box/proc/get_round(keep = FALSE) @@ -100,7 +121,7 @@ if(istype(attacking_obj, /obj/item/ammo_box/magazine/ammo_stack)) var/obj/item/ammo_box/attacking_box = attacking_obj for(var/obj/item/ammo_casing/casing_to_insert in attacking_box.stored_ammo) - if(!((instant_load && attacking_box.instant_load) || (stored_ammo.len >= max_ammo) || do_after(user, 1 SECONDS, attacking_box))) + if(!((instant_load && attacking_box.instant_load) || (stored_ammo.len >= max_ammo) || do_after(user, 1 SECONDS, attacking_box, timed_action_flags = IGNORE_USER_LOC_CHANGE))) break var/did_load = give_round(casing_to_insert, replace_spent) if(!did_load) @@ -136,7 +157,7 @@ if(!(user.is_holding(src) || H.l_store == src || H.r_store == src) || !user.put_in_hands(A)) //incase they're using TK A.bounce_away(FALSE, NONE) playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) - to_chat(user, "You remove a round from [src]!") + to_chat(user, span_notice("You remove a round from [src]!")) update_ammo_count() /// Updates the materials and appearance of this ammo box diff --git a/code/modules/projectiles/boxes_magazines/ammo_stack.dm b/code/modules/projectiles/boxes_magazines/ammo_stack.dm index faa747aaab8d..80fa86c3d785 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stack.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stack.dm @@ -5,7 +5,7 @@ */ /obj/item/ammo_box/magazine/ammo_stack name = "ammo stack" - desc = "A stack of ammo." + desc = "A pile of live rounds." icon = 'icons/obj/ammo_bullets.dmi' icon_state = "pistol-brass" base_icon_state = "pistol-brass" @@ -19,15 +19,16 @@ icon = initial(icon) cut_overlays() return ..() -// thgvr todo: doesn't support shotshells/different icon files, fix that + /obj/item/ammo_box/magazine/ammo_stack/update_icon_state() . = ..() cut_overlays() icon_state = "" for(var/casing in stored_ammo) var/image/bullet = image(initial(icon), src, "[base_icon_state]") - bullet.pixel_x = rand(-6, 6) - bullet.pixel_y = rand(-6, 6) + bullet.pixel_x = rand(-8, 8) + bullet.pixel_y = rand(-8, 8) + bullet.transform = bullet.transform.Turn(round(45 * rand(0, 32) / 2)) add_overlay(bullet) return UPDATE_ICON_STATE | UPDATE_OVERLAYS @@ -38,7 +39,7 @@ var/obj/item/ammo = get_round(FALSE) ammo.forceMove(loc_before_del) ammo.throw_at(loc_before_del) - check_for_del() + update_ammo_count() /obj/item/ammo_box/magazine/ammo_stack/update_ammo_count() . = ..() @@ -46,33 +47,33 @@ /obj/item/ammo_box/magazine/ammo_stack/proc/check_for_del() . = FALSE - if((ammo_count(TRUE) <= 0) && !QDELETED(src)) -// qdel(src) thgvr todo: this needs to exist so there isn't a + if((ammo_count() <= 0) && !QDELETED(src)) + qdel(src) return -/obj/item/ammo_box/magazine/ammo_stack/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = 0) +/obj/item/ammo_box/magazine/ammo_stack/attackby(obj/item/handful, mob/user, params, silent = FALSE, replace_spent = 0) var/num_loaded = 0 if(!can_load(user)) return - if(istype(A, /obj/item/ammo_box)) - var/obj/item/ammo_box/AM = A - for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - var/did_load = give_round(AC, replace_spent) + if(istype(handful, /obj/item/ammo_box)) + var/obj/item/ammo_box/ammo_box = handful + for(var/obj/item/ammo_casing/casing in ammo_box.stored_ammo) + var/did_load = give_round(casing, replace_spent) if(did_load) - AM.stored_ammo -= AC + ammo_box.stored_ammo -= casing num_loaded++ if(!did_load || !multiload) break if(num_loaded) - AM.update_ammo_count() + ammo_box.update_ammo_count() - if(istype(A, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/AC = A - if(give_round(AC, replace_spent)) - user.transferItemToLoc(AC, src, TRUE) + if(istype(handful, /obj/item/ammo_casing)) + var/obj/item/ammo_casing/casing = handful + if(give_round(casing, replace_spent)) + user.transferItemToLoc(casing, src, TRUE) num_loaded++ - AC.update_appearance() + casing.update_appearance() if(num_loaded) if(!silent) diff --git a/code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm b/code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm new file mode 100644 index 000000000000..ccf4e4e8eeda --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm @@ -0,0 +1,16 @@ +/obj/item/ammo_box/magazine/ammo_stack/prefilled + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) + . = ..() + var/obj/item/ammo_casing/casing_to_copy = new ammo_type() + var/obj/item/ammo_box/magazine/ammo_stack/current_stack = casing_to_copy.stack_with(new ammo_type()) + //top_off already works off of ammo_type var, shouldn't need redundancy here + src.top_off() + //Just in case top_off misbehaves + if(length(current_stack.stored_ammo) > current_stack.max_ammo) + casing_to_copy = current_stack.get_round(keep = FALSE) + qdel(casing_to_copy) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/buckshot + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + max_ammo = 8 //should mirror stack_size on the casing diff --git a/icons/obj/ammo_bullets.dmi b/icons/obj/ammo_bullets.dmi index 087cdd4c771e38e83cb64652514ec57690fc445c..b3e431ecec64291956ce2461586e06b31035d332 100644 GIT binary patch delta 3063 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 Date: Sun, 29 Sep 2024 10:37:38 -0700 Subject: [PATCH 04/31] more stuff --- .../mecha/equipment/weapons/mecha_ammo.dm | 2 +- code/game/objects/items/RCD.dm | 2 +- code/game/objects/items/shrapnel.dm | 2 +- code/game/objects/items/toys.dm | 2 +- code/game/objects/items/weaponry.dm | 2 +- .../projectiles/ammunition/_ammo_casing.dm | 6 +- .../ammunition/ballistic/revolver.dm | 1 - .../ammunition/ballistic/shotgun.dm | 4 + .../boxes_magazines/_box_magazine.dm | 2 +- .../_ammo_stack.dm} | 2 +- .../prefab_stacks/_premade_stacks.dm | 17 + .../prefab_stacks/premade_lmg_stacks.dm | 15 + .../prefab_stacks/premade_pistol_stacks.dm | 342 ++++++++++++++++++ .../prefab_stacks/premade_rifle_stacks.dm | 51 +++ .../prefab_stacks/premade_smg_stacks.dm | 29 ++ .../prefab_stacks/premade_sniper_stacks.dm | 9 + .../prefab_stacks/shotshell_stacks.dm | 18 + .../boxes_magazines/premade_ammo_stacks.dm | 16 - code/modules/vending/security.dm | 4 +- icons/obj/ammo.dmi | Bin 52043 -> 0 bytes icons/obj/ammo_bullets.dmi | Bin 3184 -> 0 bytes icons/obj/ammunition/ammo.dmi | Bin 0 -> 37936 bytes icons/obj/ammunition/ammo_boxes.dmi | Bin 0 -> 6570 bytes icons/obj/ammunition/ammo_bullets.dmi | Bin 0 -> 3295 bytes .../obj/{ => ammunition}/ammo_shotshells.dmi | Bin shiptest.dme | 9 +- 26 files changed, 504 insertions(+), 31 deletions(-) rename code/modules/projectiles/boxes_magazines/{ammo_stack.dm => ammo_stacks/_ammo_stack.dm} (98%) create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_lmg_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_sniper_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm delete mode 100644 code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm delete mode 100644 icons/obj/ammo.dmi delete mode 100644 icons/obj/ammo_bullets.dmi create mode 100644 icons/obj/ammunition/ammo.dmi create mode 100644 icons/obj/ammunition/ammo_boxes.dmi create mode 100644 icons/obj/ammunition/ammo_bullets.dmi rename icons/obj/{ => ammunition}/ammo_shotshells.dmi (100%) diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/game/mecha/equipment/weapons/mecha_ammo.dm index 73597ff21e49..cfbcdbf029f3 100644 --- a/code/game/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/game/mecha/equipment/weapons/mecha_ammo.dm @@ -83,7 +83,7 @@ /obj/item/mecha_ammo/tank_shell name = "anti-armor missile" desc = "A large missle, intended to be loaded into a Type 207." - icon = 'icons/obj/ammo_bullets.dmi' + icon = 'icons/obj/ammunition/ammo_bullets.dmi' icon_state = "srm-8" rounds = 1 throw_range = 0 diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 7548625b31f6..883265896fe5 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -575,7 +575,7 @@ RLD /obj/item/rcd_ammo name = "compressed matter cartridge" desc = "Highly compressed matter for the RCD." - icon = 'icons/obj/ammo.dmi' + icon = 'icons/obj/ammunition/ammo.dmi' icon_state = "rcd" item_state = "rcdammo" w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/shrapnel.dm b/code/game/objects/items/shrapnel.dm index 959649c8c59b..249ee7dc41ed 100644 --- a/code/game/objects/items/shrapnel.dm +++ b/code/game/objects/items/shrapnel.dm @@ -20,7 +20,7 @@ /obj/item/shrapnel/bullet // bullets name = "bullet" - icon = 'icons/obj/ammo_bullets.dmi' + icon = 'icons/obj/ammunition/ammo_bullets.dmi' icon_state = "pistol-brass" item_flags = NONE diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 5ce082d79dc9..cc529596fae4 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -245,7 +245,7 @@ /obj/item/toy/ammo/gun name = "capgun ammo" desc = "Make sure to recyle the box in an autolathe when it gets empty." - icon = 'icons/obj/ammo.dmi' + icon = 'icons/obj/ammunition/ammo.dmi' icon_state = "357OLD-7" w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron=10, /datum/material/glass=10) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index a76334a0b7ea..2d6912f2830a 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -342,7 +342,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/throwing_star/magspear name = "magnetic spear" desc = "A reusable spear that is typically loaded into kinetic spearguns." - icon = 'icons/obj/ammo_bullets.dmi' + icon = 'icons/obj/ammunition/ammo_bullets.dmi' icon_state = "magspear" throwforce = 25 //kills regular carps in one hit force = 10 diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 684ce193e384..b4d44c938b91 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -1,7 +1,7 @@ /obj/item/ammo_casing name = "bullet casing" desc = "A bullet casing." - icon = 'icons/obj/ammo_bullets.dmi' + icon = 'icons/obj/ammunition/ammo_bullets.dmi' icon_state = "pistol-brass" flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT @@ -50,7 +50,7 @@ ///TRUE if the ammo stack is generic and we should give it info based on the casing var/generic_stacking = TRUE ///Maximum stack size of ammunition - var/stack_size = 20 + var/stack_size = 12 /obj/item/ammo_casing/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/ammo_box) && user.is_holding(src)) @@ -151,7 +151,7 @@ pixel_y = base_pixel_y + rand(-10, 10) item_flags |= NO_PIXEL_RANDOM_DROP if(auto_rotate) - transform = transform.Turn(pick(0, 90, 180, 270)) + transform = transform.Turn(round(45 * rand(0, 32) / 2)) update_appearance() /obj/item/ammo_casing/Destroy() diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index e235e00b98f6..c7411def95de 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -62,7 +62,6 @@ desc = "A .38 surplus bullet casing." projectile_type = /obj/projectile/bullet/c38/surplus - /obj/item/ammo_casing/c38/trac name = ".38 TRAC bullet casing" desc = "A .38 \"TRAC\" bullet casing." diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 1b91f8d8cbb0..92dcb0735416 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -28,6 +28,7 @@ name = "beanbag slug" desc = "A weak beanbag slug for riot control." icon_state = "beanbag" + caliber = "12ga beanbag" custom_materials = list(/datum/material/iron=250) projectile_type = /obj/projectile/bullet/slug/beanbag @@ -35,6 +36,7 @@ name = "rubber shot" desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." icon_state = "rubber" + caliber = "12ga rubber" projectile_type = /obj/projectile/bullet/pellet/rubbershot pellets = 8 variance = 25 @@ -44,12 +46,14 @@ name = "incendiary slug" desc = "An incendiary-coated shotgun slug." icon_state = "incendiary" + caliber = "12ga incendiary" projectile_type = /obj/projectile/bullet/incendiary/shotgun /obj/item/ammo_casing/shotgun/improvised name = "improvised shell" desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." icon_state = "improvised" + caliber = "improvised 12ga" projectile_type = /obj/projectile/bullet/pellet/improvised custom_materials = list(/datum/material/iron=250) pellets = 10 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index adcc0306bef7..80998e926648 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -4,7 +4,7 @@ /obj/item/ammo_box name = "ammo box (null_reference_exception)" desc = "A box of ammo." - icon = 'icons/obj/ammo.dmi' + icon = 'icons/obj/ammunition/ammo.dmi' flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT item_state = "syringe_kit" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stack.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm similarity index 98% rename from code/modules/projectiles/boxes_magazines/ammo_stack.dm rename to code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm index 80fa86c3d785..852798ec11ac 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stack.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm @@ -6,7 +6,7 @@ /obj/item/ammo_box/magazine/ammo_stack name = "ammo stack" desc = "A pile of live rounds." - icon = 'icons/obj/ammo_bullets.dmi' + icon = 'icons/obj/ammunition/ammo_bullets.dmi' icon_state = "pistol-brass" base_icon_state = "pistol-brass" item_flags = NO_PIXEL_RANDOM_DROP diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm new file mode 100644 index 000000000000..635ae96faf38 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -0,0 +1,17 @@ +/obj/item/ammo_box/magazine/ammo_stack/prefilled + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) + + var/obj/item/ammo_casing/to_copy = ammo_type + src.top_off() + caliber = to_copy.caliber + base_icon_state = to_copy.icon_state + name = "handful of [to_copy.caliber] rounds" + update_appearance() + . = ..() + +/obj/item/storage/box/ammo //base type, don't use this! + name = "box of default ammo" + icon_state = "9mmbox" + illustration = null + foldable = null diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_lmg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_lmg_stacks.dm new file mode 100644 index 000000000000..b98da1f81000 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_lmg_stacks.dm @@ -0,0 +1,15 @@ +// 7.12x82mm (L6 SAW) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/mm712x82 + ammo_type = /obj/item/ammo_casing/mm712x82 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/mm712x82/ap + ammo_type = /obj/item/ammo_casing/mm712x82/ap + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/mm712x82/hp + ammo_type = /obj/item/ammo_casing/mm712x82/hp + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/mm712x82/incendiary + ammo_type = /obj/item/ammo_casing/mm712x82/inc + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/mm712x82/match + ammo_type = /obj/item/ammo_casing/mm712x82/match diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm new file mode 100644 index 000000000000..8f75ad2fc207 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -0,0 +1,342 @@ +// 10mm (Stechkin) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm + ammo_type = /obj/item/ammo_casing/c10mm + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/surplus + ammo_type = /obj/item/ammo_casing/c10mm/surplus + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap + ammo_type = /obj/item/ammo_casing/c10mm/ap + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp + ammo_type = /obj/item/ammo_casing/c10mm/hp + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary + ammo_type = /obj/item/ammo_casing/c10mm/inc + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber + ammo_type = /obj/item/ammo_casing/c10mm/rubber + +// 9MM (Commander + SABR) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + ammo_type = /obj/item/ammo_casing/c9mm + +/obj/item/storage/box/ammo/c9mm + name = "box of 9mm ammo" + desc = "A box of standard 9mm ammo." + icon_state = "9mmbox" + +/obj/item/storage/box/ammo/c9mm/PopulateContents() + ..() + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + ammo_type = /obj/item/ammo_casing/c9mm/surplus + +/obj/item/storage/box/ammo/c9mm/surplus + name = "box of surplus 9mm ammo" + desc = "A box of low-quality 9mm ammo." + icon_state = "9mmbox-surplus" + +/obj/item/storage/box/ammo/c9mm/surplus/PopulateContents() + ..() + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + ammo_type = /obj/item/ammo_casing/c9mm/ap + +/obj/item/storage/box/ammo/c9mm/ap + name = "box of AP 9mm ammo" + desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "9mmbox-ap" + +/obj/item/storage/box/ammo/c9mm/ap/PopulateContents() + ..() + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + ammo_type = /obj/item/ammo_casing/c9mm/hp + +/obj/item/storage/box/ammo/c9mm/hp + name = "box of HP 9mm ammo" + desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "9mmbox-hp" + +/obj/item/storage/box/ammo/c9mm/hp/PopulateContents() + ..() + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + ammo_type = /obj/item/ammo_casing/c9mm/inc + +/obj/item/storage/box/ammo/c9mm/incendiary + name = "box of incendiary 9mm ammo" + desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "9mmbox-incendiary" + +/obj/item/storage/box/ammo/c9mm/incendiary/PopulateContents() + ..() + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + ammo_type = /obj/item/ammo_casing/c9mm/rubber + +/obj/item/storage/box/ammo/c9mm/rubber + name = "box of rubber 9mm ammo" + desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "9mmbox-rubbershot" + +/obj/item/storage/box/ammo/c9mm/rubber/PopulateContents() + ..() + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + +// .45 (Candor + C20R) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 + ammo_type = /obj/item/ammo_casing/c45 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus + ammo_type = /obj/item/ammo_casing/c45/surplus + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap + ammo_type = /obj/item/ammo_casing/c45/ap + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp + ammo_type = /obj/item/ammo_casing/c45/hp + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary + ammo_type = /obj/item/ammo_casing/c45/inc + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber + ammo_type = /obj/item/ammo_casing/c45/rubber + +// .50 AE (Desert Eagle) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a50AE + ammo_type = /obj/item/ammo_casing/a50AE + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a50AE/hp + ammo_type = /obj/item/ammo_casing/a50AE/hp + +// .22 LR (Himehabu) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr + ammo_type = /obj/item/ammo_casing/c22lr + +// .357 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 + ammo_type = /obj/item/ammo_casing/c45 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match + ammo_type = /obj/item/ammo_casing/a357/match + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp + ammo_type = /obj/item/ammo_casing/a357/hp + +// .45-70 (Hunting Revolver, Beacon) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 + ammo_type = /obj/item/ammo_casing/a4570 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match + ammo_type = /obj/item/ammo_casing/a4570/match + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp + ammo_type = /obj/item/ammo_casing/a4570/hp + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive + ammo_type = /obj/item/ammo_casing/a4570/explosive + +// .38 Special + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 + ammo_type = /obj/item/ammo_casing/c38 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus + ammo_type = /obj/item/ammo_casing/c38/surplus + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/trac + ammo_type = /obj/item/ammo_casing/c38/trac + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/match + ammo_type = /obj/item/ammo_casing/c38/match + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/bouncy + ammo_type = /obj/item/ammo_casing/c38/match/bouncy + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/dumdum + ammo_type = /obj/item/ammo_casing/c38/dumdum + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/hotshot + ammo_type = /obj/item/ammo_casing/c38/hotshot + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/iceblox + ammo_type = /obj/item/ammo_casing/c38/iceblox + +// 44 Roumain + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum + ammo_type = /obj/item/ammo_casing/a44roum + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber + ammo_type = /obj/item/ammo_casing/a44roum/rubber + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp + ammo_type = /obj/item/ammo_casing/a44roum/hp + +/obj/item/ammo_box/c10mm + name = "ammo box (10mm)" + desc = "A box of standard 10mm ammo." + icon_state = "10mmbox" + ammo_type = /obj/item/ammo_casing/c10mm + max_ammo = 50 + +/obj/item/ammo_box/c10mm/surplus + name = "ammo box (10mm surplus)" + desc = "A box of low-quality 10mm ammo." + icon_state = "10mmbox-surplus" + ammo_type = /obj/item/ammo_casing/c10mm/surplus + +/obj/item/ammo_box/c10mm/rubbershot + name = "ammo box (10mm rubbershot)" + desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "10mmbox-rubbershot" + ammo_type = /obj/item/ammo_casing/c9mm/rubber + +/obj/item/ammo_box/c10mm/ap + name = "ammo box (10mm armor-piercing)" + desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "10mmbox-ap" + ammo_type = /obj/item/ammo_casing/c10mm/ap + +/obj/item/ammo_box/c10mm/hp + name = "ammo box (10mm hollow point)" + desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "10mmbox-hp" + ammo_type = /obj/item/ammo_casing/c10mm/hp + +/obj/item/ammo_box/c10mm/fire + name = "ammo box (10mm incendiary)" + desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "10mmbox-incendiary" + ammo_type = /obj/item/ammo_casing/c10mm/inc + + + + + + + + + + + + + + + + + + + + + + + +/obj/item/ammo_box/c38_box + name = "ammo box (.38)" + desc = "A box of standard .38 Special ammo." + icon_state = "38box" + ammo_type = /obj/item/ammo_casing/c38 + max_ammo = 50 + +/obj/item/ammo_box/c38_box/surplus + name = "ammo box (.38 surplus)" + desc = "A box of low-quality .38 Special ammo." + icon_state = "38box-surplus" + ammo_type = /obj/item/ammo_casing/c38/surplus + +/obj/item/ammo_box/a12g + name = "ammo box (12g buckshot)" + desc = "A box of 12-gauge buckshot shells, devastating at close range." + icon_state = "12gbox-buckshot" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + max_ammo = 25 + +/obj/item/ammo_box/a12g/slug + name = "ammo box (12g slug)" + desc = "A box of 12-gauge slugs, for improved accuracy and penetration." + icon_state = "12gbox-slug" + ammo_type = /obj/item/ammo_casing/shotgun + +/obj/item/ammo_box/a12g/beanbag + name = "ammo box (12g beanbag)" + desc = "A box of 12-gauge beanbag shells, for incapacitating targets." + icon_state = "12gbox-beanbag" + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +/obj/item/ammo_box/a12g/rubbershot + name = "ammo box (12g rubbershot)" + desc = "A box of 12-gauge rubbershot shells, designed for riot control." + icon_state = "12gbox-rubbershot" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + + + +/obj/item/ammo_box/c45 + name = "ammo box (.45)" + desc = "A box of standard .45 ammo." + icon_state = "45box" + ammo_type = /obj/item/ammo_casing/c45 + max_ammo = 50 + +/obj/item/ammo_box/c45/surplus + name = "ammo box (.45 surplus)" + desc = "A box of low-quality .45 ammo." + icon_state = "45box-surplus" + ammo_type = /obj/item/ammo_casing/c45/surplus + +/obj/item/ammo_box/c45/rubbershot + name = "ammo box (.45 rubbershot)" + desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "45box-rubbershot" + ammo_type = /obj/item/ammo_casing/c45/rubber + +/obj/item/ammo_box/c45/ap + name = "ammo box (.45 armor-piercing)" + desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "45box-ap" + ammo_type = /obj/item/ammo_casing/c45/ap + +/obj/item/ammo_box/c45/hp + name = "ammo box (.45 hollow point)" + desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "45box-hp" + ammo_type = /obj/item/ammo_casing/c45/hp + +/obj/item/ammo_box/c45/fire + name = "ammo box (.45 incendiary)" + desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "45box-incendiary" + ammo_type = /obj/item/ammo_casing/c45/inc diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm new file mode 100644 index 000000000000..128cd0213610 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -0,0 +1,51 @@ +// 8x50mmR (Illestren Hunting Rifle) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r + ammo_type = /obj/item/ammo_casing/a8_50r + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp + ammo_type = /obj/item/ammo_casing/a8_50rhp + +// 8x58mm Caseless (SSG-669C) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a858 + ammo_type = /obj/item/ammo_casing/caseless/a858 + +// .300 Magnum (Smile Rifle) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 + ammo_type = /obj/item/ammo_casing/a300 + +// 5.56x39mm (M-90gl Carbine & P-16) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_39 + ammo_type = /obj/item/ammo_casing/a556_39 + +// 5.45x39mm (SKM-24v) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a545_39 + ammo_type = /obj/item/ammo_casing/a545_39 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a545_39/recycled + ammo_type = /obj/item/ammo_casing/a545_39/recycled + +// 7.62x40mm CLIP (SKM Rifles) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 + ammo_type = /obj/item/ammo_casing/a762_40 + +// .300 Blackout (Polymer Survivor Rifle) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk + ammo_type = /obj/item/ammo_casing/aac_300blk + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk/recycled + ammo_type = /obj/item/ammo_casing/aac_300blk/recycled + +//.308 (M514 EBR & CM-GAL-S) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 + ammo_type = /obj/item/ammo_casing/a308 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/caseless/c299 + ammo_type = /obj/item/ammo_casing/caseless/c299 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm new file mode 100644 index 000000000000..041c4ac00c2c --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -0,0 +1,29 @@ +// 4.6x30mm (WT-550 Automatic Rifle & SKM-24v) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm + ammo_type = /obj/item/ammo_casing/c46x30mm + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm/ap + ammo_type = /obj/item/ammo_casing/c46x30mm/ap + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm/incendiary + ammo_type = /obj/item/ammo_casing/c46x30mm/inc + +// 4.73x33mm caseless (Solar) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c47x33mm + ammo_type = /obj/item/ammo_casing/c47x33mm + +// 5.56mm HITP caseless (Pistole C) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm + ammo_type = /obj/item/ammo_casing/c556mm + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus + ammo_type = /obj/item/ammo_casing/c556mm/surplus + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap + ammo_type = /obj/item/ammo_casing/c556mm/ap + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp + ammo_type = /obj/item/ammo_casing/c556mm/hp + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot + ammo_type = /obj/item/ammo_casing/c556mm/rubbershot diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_sniper_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_sniper_stacks.dm new file mode 100644 index 000000000000..8ee54bcd9099 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_sniper_stacks.dm @@ -0,0 +1,9 @@ +// .50 BMG (Sniper) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/p50 + ammo_type = /obj/item/ammo_casing/p50 + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/p50/soporific + ammo_type = /obj/item/ammo_casing/p50/soporific + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/p50/penetrator + ammo_type = /obj/item/ammo_casing/p50/penetrator diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm new file mode 100644 index 000000000000..2b4d0e6538a2 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm @@ -0,0 +1,18 @@ +// Shotshells +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun + max_ammo = 8 //make sure these values are consistent across the board with stack_size variable. + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary + ammo_type = /obj/item/ammo_casing/shotgun/incendiary + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/improvised + ammo_type = /obj/item/ammo_casing/shotgun/improvised diff --git a/code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm b/code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm deleted file mode 100644 index ccf4e4e8eeda..000000000000 --- a/code/modules/projectiles/boxes_magazines/premade_ammo_stacks.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/ammo_box/magazine/ammo_stack/prefilled - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) - . = ..() - var/obj/item/ammo_casing/casing_to_copy = new ammo_type() - var/obj/item/ammo_box/magazine/ammo_stack/current_stack = casing_to_copy.stack_with(new ammo_type()) - //top_off already works off of ammo_type var, shouldn't need redundancy here - src.top_off() - //Just in case top_off misbehaves - if(length(current_stack.stored_ammo) > current_stack.max_ammo) - casing_to_copy = current_stack.get_round(keep = FALSE) - qdel(casing_to_copy) - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/buckshot - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 8 //should mirror stack_size on the casing diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 911eaed20652..3dfb8f625c0d 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -12,8 +12,8 @@ /obj/item/assembly/flash/handheld = 5, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, - /obj/item/ammo_box/c9mm/rubbershot = 3, - /obj/item/ammo_box/c9mm = 1, + /obj/item/storage/box/ammo/9mm/rubber = 3, + /obj/item/storage/box/ammo/9mm = 1, /obj/item/stock_parts/cell/gun = 3, /obj/item/clothing/glasses/sunglasses = 2) premium = list( diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi deleted file mode 100644 index 86001423aeba0b1f33d254ecc7c9c791931210e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52043 zcmYJabzD>b`#yeXkOn0r1_II{qBNsZK`{s^r9n!%HcCQ;p%T&{3MeQkAOZtP=@gKb zW;CNVw*Ah0ecs>SAH*Iz_c_nFpZ9%T*L|OaJH~qS7cO4_0D#^=U)vM_NY#ly)RX`K zIA%`W1OUoMA@|Mwv>kozpSgPbxq5j5Kv4FV%-dem3QVzs`{hi3P-6KQj*^C6b9h<#{KcE}H;)40I9@dK@MOT8=rf}T=h$WCHh#r}P*fY5-_r7}j@;>0 z{|vV8{$9a#PrMIRZ+|ZI_xe7tuqrazR{5DAT3Y|+chk|1sHGS0+V8k=xpO(|CaxL5 zPf}k(-4*JChb!M4&GXnidaK*&T@nI7Aovks!HdN!`%h+eY$L$ zqR3H}%L+WaWW`!u3x1ZI3OQAj#uG|pNc-3X2Gsn9=>5<2_g-k1hR_zyr16H`z?~}) zRIC@%6W*p6JZw)GdlX3Lu$@ZcO^~5q?`x9H_dV%}7?=|$Q-YV%t<&A4JC7(Wg?K+d zBKukeYf1ghSpNq@VrB(BrT5=px%*k6_kNgqz$3)BxE2SD!pow!Pnv>S0;`l}M4vlY z(ucH2_A&n<`#PUAl27OmfW+So~E3-KBHE! z@k)@!UdSF$z}Lj_V3|tt`ugcsrT$G$g{DHRLb4>K@vbCU@eyhXJziuoI=nNA{`L4) zw$5lP+~Au;siwHdIc5J5Lmw^`+M#HWN4WjE^l{>p6wg7d-};!lK?rS)pyWd>(vEVW z#Y?TUQ4?CyYpw?rYTmd<@DCB^C5ju`@>NpfS> z`xakd*?vdzy{&Y0SAW~#o8_UXAIi=arra?9SIW^@+D`k7sJYAdeb##oPwM>M4?-np z#`F`^1mfCk=)=(h>MuuZ+K!aMa=pqPpeMpGPMEw{ftsedjzCgvkid#?N+}Xw4IW4sLYUF-;%r}f?IEwR}r>l2!8yJI^~Z6 z9Te?P!{@d?NFiF{iaM{T6)ZDf9SxH{6imEvVV&o}6MnTq;?mN!+43a?#mN0`@$s694Tv1FCI(hN0qWAn&m zdW@0L<7s0^?p`3tq08k@drY;q$6>g5t*dy+;qrb1H6(42_8~v)wI#c7hGUi3YyKyL zqa7CfRq`TRRRbI~&Iu3t0ENHj>Ji`C56L1^f2mI%JnMNOi@RFMkur4#=dMQ*rkJq|9meaqVqYTy zp0-U@3$yUphRJ9sv-}b>Q?GPaI{F=QGiOPbE~o8l{p62Bym-L-8;!3Hd4_gfy$4=f zJW83$IL0@I*_a5!EfM1G%wM3*Q%2Im&J>NNFC>OHjC8%wY}&93LzOL|@9iT^PRb?h z8T@)bYHj3d$B{DPr;n*^qLw8*`qZ{Npy!L>S=6!ZKgiVAT^QxQ)|uJr5%wcn{5(>lj* zzDADxLW^iW3U_r(+|Q7_+e03TqW zt#Lmnd#fot=>Aa#fxuAm@m-9dgKP#gU$1%!H^7m&EH)ah{w*qx_O=@zMH#Er(ve)@z1WCs?&u~7c z+1bH{tBWePWOpb0`)^!d>+5sBnxVL+b`lO(6DDDy=8s|0{QH8&2}z_ zu8$^R`u9~*KFLty3&oL!mEJ2mOqO+F88sW9Y%AL0nZWC>=|y?5qQS2|ykQA#q4Juo zq@6$8_e#MM&Z4Cki*#u9Qsw097S1N-_2X9)S%^A1A1d?>c6FOK}iE!kyhm*;r$ zW3IuTee0uzjWqZv?nY>5{F~KPw(a>d$EqSH19^$>%-d#hq8gK$(I4`fz{vrA~EdpASCOP^J;Nl0PZmAzMf#T3zNpM`w$>mzy{_Js6qmLx8 z@bjf~M%DJmJiPw7AElv!K_b%UMK14&k-e2 zx6Pvh?mX}%1Ng3w7O4~!cO_s{cc0iTG_De;t8u6_>9-HRruC)*q@L6y3$OLyUxN1x zh%+s>t(i!Ix9#`a<$;8XI_ZH zYOVy{xQS>9Uw5q#`=kNS@*)@2Q23jBqbaCJ-*6Y@xiWGA@rPfuOc0~e;@5M}ue3B` zUofcb*I6~z;Upb%^b@>-H~cXh#kP8c-#kCON8dm9Sz(`U{^kCVY?_w};8vUg?CJ#z z=6FX;ki7UBxtCQErUY^yKfa!a3A|LE^;fCnt=>kLp-squhhJ?N^qfyh*wqhNz^e#nk!^BIy{!F_QiTmn~x+r1Usrzf4#h8k!T%Eb6~bk~Y0e%@`2Odb6PKMdi* ztFL^lT!-vi*?EMslXMHo&KoIsSsI05y-4}h8kuoWU91ic!ZEi|!|hIEeqpGZ5COw< z7|XMrM-p#2N+9F2Bg9EtdJ)zUJOq7%h{|O%r>I=BYkEC~yLTUEt87y)5Cs0*F&9{I zw7Iky%FC=b7#CFQkC18|GcSSazT7p|o27OoM|aiD2NoN_!_LNE1>Dhx;wsn8WYwEj z%6H~oRuqA8YweX!D0jS6yDx~fv;Ga8T5-W#1%GO#Fa=3x*x zn&*g|!rS45k1YZmbFW^<*!CT~GzDtUw7-svTi5sQw3wUu(&cfB(=Hpc&))AG64LCqjq!)&sB}vf+x)5X)zlR zS{!s~w!CYDXI*{}-m%WO@9dSuDp}3|lruQPGNqj(xAfCPBW!q@r44P}U`K_BpU+mo zXe`n3n>m_p77M@iFOX;^goPetj<@VG_TYrO8X?8bgvh zeh!;1J9B>0;r07m9*tUJR0iC(apWy=-i^%lG5$=&z^#J@NZEuQOwuFa1fLhAKwtuA z?Uf4`{QDSdL^$2oOCjm$Z4}%59(G)-IQ%D6v~2C&EZn{pE;!ai0wzr;&ayiE6aC9N z&d^+~8{oN5eso70ipyla3y^n{+^U~BY!h#j3a7zfRMt_4)7eh^1_!9AaH^x65e(Z3ZTajj-EGehBvhaN^&g|#SP?~JL zx%+7zUJWtfYsaw7==&^KL6nq?H$#3ttj5JKy_f&~{kqVwS%Dgt+AR_zQSL|nO9ORWh-mMtSx@ez(|S*Y+BfPF$|uTm6t_7-Sh92 z8ut2{2i_?m_F5K64|w(L{p|7?>0fzeGx)(Tw_TKGzlH+p$Y2;pFiv#>@SUlnO?K`XjQ_^Yl2Jo71w>QZeB`S|RZGBAJY4cfHet zySeBlDzE6K8q)v3l=#j&HIfYI)RXRGFA1!G8dqb+2a~$RL)&K7Vr3<=opTr#YBFpB z<&Rl6Jevs~nU}Wa$KggU6^)tptPQ*!SW8_bJawZ0Kz!!ig{FDe=yZdUL9GxQdKrbk zmQErj{v|anJXjP6c3$h{ny%#!Z=knU&4HoTi@^!k@PQleAeuHvHWkolq2{i*d{17E z_fL7~aodD#Gp36Pza2y~n0-bbl!kxJ;Y-5Am#&h;>vizR#?q>2CO0i3(N{qSifedp zjQkw@cTHME@5-;#!1dZ|AM)@)$61LA6s8(JG_u#@Oqe_^+)_7B8cR{G8M+7Xon+Rd z(7Ew@s#52ma}X!eXG}O_5fK3WG32gVV6NY@Dhh)0J#o*_J&GD`k2}8;5~0AXX)AgZ zvJ1O@q5%Sd9#PIeN%Hn5Uvq$nT;Ad;d){4qQ(bzJD_om1e`Y3QWb64HGhq$CFK%jr z2#Y)-S_9R-d_h%+{rC_Q@@V-@a-?)V8qd%Tjj3C#~azHsy=%m zT9;29ajtVwRK#Cyz%Krk8Hjq5xIJ6)^3Ij^5>Wtfaz2r_?+RpO+(e@l_P=Z80m&x0 zrAL&JFpPaG)cY%Ac=*A9bH``@qEiYGyOG_8RZ5SPa(`4~F2>Y$_pO8J0|Z22x3B_Y zkufEuBRxWFC*<{R z5JK^&!SxNFzu)=?#gSw{!-wdNV(7#3@Ni!6NLM@=Z>ZlVYs-jDs$~V1BW`Vvb734o zEK?hgdrYNHJl-$IFCcnX0xyTCCpC5``A2*Z(nH8Uc74z=Z@io6F`Y6Ul0^C*Ni!;2 zz4W^rPY>dx#wptKur;QL#l$bCJnOF+it_O02WI0l5r3Zh`z%o{1GlzLJ7C5Nv4FnqGt_BYw%>C5VOP=_Lpk0W!DWFTsrH%B%Q zD3kU0L?eH%IO-k|h8Sm#7ifDLym8D3Qr6-0%Xi<7zpNUuGzcGqxQNIB=-gppdOdg; zmW+R-JmMV3KB4dOKilF#HFxE||}mBHHAy&=)!B zdfp5fRG^=)CAAbK!9ZvyQ?UcwM9=G&orfRxNp z`kUk+b!!+&tX|=e7hSVs5QuxHrAcKL?^4;t9wCRyGoV{Q_tGN2S@@>+=za`WJ&dbqYGvKg-~1wJuL9Ve`-i44FeljYyRz$pigHZmz$wesq+ z<(;Yh%1-+)lk)C@b84wOXDuPvEm-Aw;uxK<;ngkZQRp15<#ZEX0DqNBj|Y9yd(3%i zgCV?^*NrsQZXE%EdVfE!_6WKhP>6-}9hdepg2$T?Hh<9{!QL@9$v53f^de#~eY3mtA16S*ir?|-J36E%(vWDdBi&(yfmip zFpe8|{)bS=?)dRr56#1HqdQ>wRDhl5KeI*f54j<|XkzjEyHv4ovg!0cq(xSVoA7lP zWeqSTa&1v{nt`yApOWbFsW~QPeS{@t+6vUGN>*v2pMdiXJW!p-lMT}r`xBz;w?mmU zK|2(Rs?!#8J!Zk4p-FORf>|(-hGv-_y{F-oj zP-;zD4LaJy0Mre*Xh=W|3#$pW>yIHxY{%xqn_yJLn*_tu2V}@UM{xM>nIP5h$*Uw6 z#)1S*ja^;Y%3DMfZ_tx{4>#58GU(roq)q?&TE@E6tS}G1M}r1k8%{;GhVjGk41t(t z^-KqDpm#t+13aUBaj~3vs2l+$(XdBN7J!+MMJq45pCBtB|L8kznh<;e81nP0yJ`z= z#G!bFx6o2?X2S$NO&IcXD8sHInZ4*w7+usI( zfGnPa^}hrjpXQeq{F6p}sL1$;Nxq$jpFSFr_&_Ikj4o;8as&OLS`r{AE6w9*tICqs*UMzQ68<@RgO$X1 zyAg%s{SitCt#EV@fXWYg&8ErQH~`xEbj%M}{lM`Y&)Hm1S0kNkau)`Im&(mc zR&JYU*l1kl_6YaR4l$vL(iC;(WIm5~OiWCitag@XVSRhY#)ctF(x^HIWEWjk^BY^8 zo0_yk@XLw`>a$HZ4(!MLy*a-9&c34Z-zcRE@p}868uXhf$1r^V#f&jk>>OA`=QO?#uo4XSweyV z$K}h~PoBJ~>T~Kf4Y{&j3|GMtJeGO^o6hskvOvom=4v1GkS2F>l&*#fZgXEqW|#nK zB&3B{Y49NP;+*a(xW1nW3;(_)#$Om~L;vg+ zz%gkKwjNXfD28YlB!vACDAW@x7ww7+*|ibKlBBiHF_yb|Q%pJM;NY2K)BM3*LuN}% z&Vc8bAnb$6F_v*QDu>JR<7+3~V))h>;}|5R*Vt`vg>x@Y(Y^vX6xGmiLyRD7$cK)* zd(KRy{-khzIDqs!g^tezafO^P32HOnpC$?RSR)9F9G+kM$N_}`bfH&^@{mW#d}_tk zD*cEp!&jiN46~5^gAL)QFkl22h-@-%G zcUmJu?do@R!>0i>T6q91j#JBcJ3t1e{ALpN%OL)-1hrt%jb!qc`=}b+Dwp!%Fo!|Rp43k$ZJI<77w2t-vruL;)k7dis4Vs zqEmCkkb9TvmAYa<^rDZ3#@ob2{e80-Y(lq%WcnI}BIJW|S-XOm(MtfJLge0w%AGBMu<{~ns)CvzKQ;y$}L3O-f1&y#D7_R+_C)4&y9me7GVNFOQvd@ zd-%}F(5E~Cqm~&da2c8z->(q>LnCfOfv_jNq`(#@sn~_$!t=DS`$^Z}_X}HqLkx&Q zvStYyAUy2XMlW16&Rq8oRXN2{S{)>x^oB!|uH*ELjv)s&Kh$VkeW_B6wlRWZUrm03 zvemOk;Tg7ehYcmJidP|LFLH=N-5w|fKKzZn`3A$F>iP8P{iNLaX*?UyG9G*xj0F7Q ztNWYf2ItiCwy7_FxEl@~&ZcTak5#U-H>v%t3Om-m6;NB~xAqntw}>bqXDcCe>93#c zLJOdCcF3CSKX2Y$A8+!5b@*_L3j?g|C_+Fi#J~< zkaPwzG64_D8G-BzryOgqzfZ842(p+>u`%57nhPXEOjBZV8Qu+j5 zj{}7pXuUPYhe@vH)t7(ON8>q;;&^}#BCy=wb|x@hV`c76Nx5||?aL2GF$PuTM&oAb zyib;#v+Yn1EA;`;_;Kg4+IC4O>0 z?h?>p`hPb?yc%AS1~?k`NMz33&MxmY^HAZNJdA4^m4L4hRjQzB*RG^Ik~)%} zX^UGIKsvTkI|}FL(wLX#Kyd}wj^wR$%ayXX&M^fOV4VlL40H$LdHgv$U!B3%5njj! zI>*j)P_ed8h^@{gSGV4|UW;}vLVi181t357J3mCA82?_3Ft9nvn^qlhe;zwYb1D_6 zz}=IiKKrV4d;rAPUDeR{ckLqM(?KA;G!5CsLCL#&8+*K@^1P>}SGC=DKUU;|Q`em- z`BC6?^$lo{1uX-*<;T4q5-7mLT$tC+5IP+@h<*4&?N{md;FBT^qI{Qn^nS)46r<=$ z(K^(_>B-JfAScZ)+>V)lR)`^HpS!WlbU2M-cTpc=^ z&oa3+Cl?P&;HTpVFbxOnoGqq;C-mJa5+e<&6%D|2=2I0Wd$gLKgvwV%neYt+_XJ zfM7H}SO&O41ne`+2O=^=q@KJ_`aj4{yf%i3CGg)R@4Y>au5A3-)G?iX|1C2x-jF7h zAGwNAM!H(Yxs8gCzsUf>^gjzAIXZ87`J$k3@q*tY+8Tza&#M$_>3Pzq-SeW9^tT>{ zOn!?)h8y#>_uC|(*BFvW1!9<@+)LTdw&^jdo*&F*&v~bJeU_f{c!``$NLf+>`jrlL zPrTTH1>1>iNQR%vQiYdZizuMIx1=ymWDRBr9}cMZQ^AqW*u@^4n&lz;e^}f+lt+C?>Do;XMNKb@qZI(FA?^s0$q2U ziG^REo)>4df^}VFK)n+3qHAqRa_+?58gBBm8!YNF&YcL|w~}Xc4%qFyaV+b27MSKm z0i3U)vr1#!oQ!18E zR>O&0gE*{9Y#*N-y|C6dG$aLTvR$risfK-CHP|RW%X{wO{92SaI-!Yhsas-O6aB>4 zd3fkdNtZ5>=C@MYHA)M(cun9_fdBZTEZ#d*#jwS6K9He!+A>NlKsRz$Ts>s3S(+lu zYE6+niN}K!C=;W~3{~qqh9VQubmD3*&=)g*Ed9uRvX8oj**)D9*8L@W?uJnE_isbQ z@w;DU;?A@CdNq=-!ES6Wba~d10aaC15m)qe$@#(0bV#Ms;ZevlN)af$sAj832!!Wi zz1ahvR*xQl(SFnKiDfN42+kC8X7_?ZZp=~>MfcUSU#A}$?9%)ao9J@(DJaJO*9)*_ zH5rcPIBi~Nzeok*Gz3xu(TVMd+PYs_wWZu!_tPh&{$jwx zHzw>XB4qc~>K<0z?(Mw)@&OGD;7Fq}#p*DP!9I5l-Ab11y((!{&-5eUSF4GmqtJ^G z#>b|Z)}H~2kK{HwJt>H{yBX?EzYZPPs&i29TQ6q@Dfry;xM?Rpc+kO6vjZ(Y)126Ue-i6>vlvLP9-N(dFEsFqsulyR9VI392l1va;S~S!Isjn*BvIga(+0n!0xe~H z-4kBAOb)$O1_3{KEG#TsTwPn`ckA*iL@w#^qOJ*29~|Y0Vnkrz5W8lUDoTQAs`-h!QI$1K zEbr5CTS*F;&9(BylYhjSN6%NOnFO|=)IV5M4Wo9*0d#}4{$R!5tWfEm`R{P(&CkgF zp`Dn6@88~38^IE*UKnciK5oXtr%gSA6eUDOX(T0|iH>;IEmh`yTgW;gt43xd93hVE zMn8GpfB10oVba0TQahAP2l`x@P(3-#(6@{KQi=EarICzMV+X`5w0;bNHM`%EwnfWP z+&KsAVeqy^@=6l5JMbY?0?0upn9FyWD=;t-Wk3?gW)w21*ABA1BxuS6e6>%w2!pKs z&U{$fQ&HFaOI-blZalR%W%u^JNJd7~hfgDABeLAee`3guYE3^I8dd4P*Dm7aT%8`W zN|t-TVv+y4N>zY)H-j(qwe@9g?ih=Ve07+>b&bgL5QiuhJ`zUUXq_Nd;(P7%v#0em zJLx6_-WxZ*c`G#uz(5ufdc5^;XJTv&(^L_HbJ0ltP4tpdT1gE=ymaF!3&_#w0sXIy z0-*NQb~GUfyEuZXeUWIgzlv#XULy7*jhx!A!{F=*on>I zECqV*dqg{@p3DUs^U|a~uH=*ab>&+jiK_wIC$FKmLvcLsGN5`F?u#Aj%u@5v?AtK7 zD-OT0lddvyN^K)OOO%MCK)YKp9Bz_asM*g+^Egx{-39|gVr~@3K&}`XF4LbKz4Rh- z5PZdo2k`8=i-^k#p|dFvbEZS-cAfiNAO{2?x3eCQA z$1dG;)Ytp#$wkbj4Z0{aUDQ`59Hq^Oy(E)p@UV;MDmzJpd#Tud=WqF@ z5Sg)7M!>w<*={g*w$Le}vl@AIUjR_QeVeADK>Na2v?jX^ zgIFWVNyr<5zL+;rBmH#G_rulf&KiW8#{B+G$KbC0lay&kWJzjf(#~%o>U^jkX@qOW zlz^JlWiXP`+;0%8H8XtsMy=C7)t|)_IN!FPG_87E+IM`}B#fa&F;F@p;lQ43NI8hN z>k&f|#)gyp8uf@cbpt8K+ydAE@j5-{`4{DY$EYOhp6D?yTlF~+Y*L7;rzgmnd3HVE zM!$fBqe2S)rEy44NjBGh9$IgqoaXV^=q&XNnHGGx@Mn>ulYQ%Z9gPWOwY{E#H2Y1k z@OsjZf2I4lnLB1S;M^K$>FtmgK^@e3YU$t|${m|)Y6D}B@EpW}2vD0E+PyzBeHuf? zlkpjBNjybe%G1?CaRTaEsC$M}?llYcDwz48K!Kv8QhCAFP?^=oN!svJ{GE_6&5g)} zKtlW*zNeV&d++W&Sov0V^2)cJr#cPPFX1&?2z8!wxfkd~0YTaujQb*_z350VKGb}i=cD8CnL9rDUW^0|HnBg9|@rDP;-HrrIF zmrR`|3Q)ufkX|`DP(NSU8%{Q~Yxefz(2H}up>!*Q$_4CiLMmuYKy=F* zny3_(NjxRtu!iS}Ynn(1@b`C#dG=!c~qcu8z7p6DItB_+n zYiy%r%2bo@`&<;pOrAQQeeFF+JgAf9e+qmtL)4GhFByS4e%6|>L+lsr%xpP~Nco+5 znIMwloc_!(6Fu6ffe@>p!=p8S?Cn=<HWP2XFc1o$F!5Yx&pPoNthNOG4Tsz5j!OM5~n&$$*Dr=9f=pz zIzPjs?s~mq((FF9+uy%hKFw&G3K=1f4-tr>b2ckpY}J!EePmoCC@3UU@Z-ny-h#aZ zrkul72!!H)dyoIh-Vd8(Q0Lugw*KZxG`A}$z(vjDyk&J3|0-+GmMjQ7JP*0Sh0udu zR|kQ;oK8xowo~^>^IUv>+dA<}K{=2JXj0Q;%xRo)+t6>br?~q=?~+ zMnJtVY=8J9#Zh-BW&;5wlw8+hvk#cKYS1bI*omA|L+Eo zATHe4uzips9KPE+y*FAH8wew`PAAjhm(B|zvOLM`7-)@+>2J4;G zmxfA(WALYFDvzk0ot@5~&uOp8$;Bw9cFAC~GGaZ!dI-oF?SFYWFugy9p3L~J@9glN z;MGjzfdvR}2p6z7_0yn7Ng&`Sv2(-@NJ&YFNlRn%3k+=g2hW0sLjGny=He&L2@e9D zs0elZxOf03Tg)k@x~dAWo55l!RcW3GyXanx!k->eZIe{7Pkn4{)mWh#8X1Z5n)A{C zS2s!Jcl7OIwc&49Z-I;3RYc&j_0V|oKP-KA&62FEF;)A-ihrB>7gD#nm4bi@VpofN<5*O4dYF+;4Jgki5tXk~- zL0tIFQ}aRcp}}Dd(D4YThlsUXg}Tl(j`3B)XfMx@>vYM+w=TAFL^GaC`+ zhln(qg86ykRWg=W$s-P;hoXmN`JGP3^)$f|fEMm13K_`>P1fBN=H4KO5?_@b5)@!| zhuN+}X5r7-ygsaG8$~sBOMR=U0a{l0K2Rhiu#*5f_F#-_xJMzIqZ@C2-%)K`|2+_G3b4(j}9>!7vHI1BNoxs|BIbD`Td z46Iyv2Poe#L5>i|1D;1OMRJaT3ld^tro1OGqqj~%9GI?V+fjg;1J7JCny-6)`p;E~ z9aAB~)WAJfHBBNr>NftiS$p^qzJRM$%GQ zc-w_br4$=l04me|H2=hjLQ(xpv5(H?x2MiVpvUK#avH3lh~YGPGw3FXL9(m_TfHhT z$X#N$!!{tHFejqTEAb0&iVOj|*?$)Q0vV`rXsa?`AyzKC&7)P-W3)A3_*=i87*GL0 zDosGd@$uW(kKs$RV14v8iyW|dwqr;G$ik~SQW7~qcS78dl`S)@RJeAHMoTNYySJB2 zit%Q}RFz$|V?kx*Yp|xtNk%RaNeq;7Ak~tX4{lvQ0lnpdWuA_L<-x&0a(X(|>-~zU z^I{uz)Vgp?@?@tp5CR4_SFmH{^l#zr#xpVOFi~ocx)B&=Av+2V#35|y0jV-EW+KOt zuW$$_v0gB$MsDhiM20K-Nk1Qg%)?qUm7B}RRh>?0I1`G@K7TyVUYze<{@$6EK-_wd zb3@AYMS5|;P*;kp_vhomEw?FtBmY-F8-IFC`+H{J@z*UVe_`b@mfdGUV51)O+OH;W zQv=j`Vqx;PFhgw5s2q?NT z99{<kVN!$D* z75v#61D7Prpyp$-`975@m&)~P`#CfTfpEU|UuqP_&UNz}d?3o5HKw{YhXY}#tBVU0 zs6V5soCiHuMkXgY&{wKdo7oY?X2H9bsV#lRIPmahXg>;hafuM`9KFkh7UZKb%@i^k zXrIBJoNA$%9mB!o8eC+ve%-#je4ZW5>7(VH+W|s?tHQzCDyq3QLICwex*>=f$UkjJ zQrOBxZK8$Ugknl)GD%ouShc{KpxzS~mm!e{R%be$ol6_^nNxS2pNCCQT$wy@x%T5C zv4qoQB-$fEC?R38gPBl*XJ6AKIV8@j(_(OGRvHwJ?%uoivb|k!45ZentFPL(Ov#CH zT>7I(^*KLLDUvMK!Gx(mUfE4_=;c85>H;p1d+6QF;^O|`#IrAZN;ZWaYdgp+R zXjoeAIwH4%l&|Gnzz4J8d{v}*e_K_ykiBPXgbF92It)<-+o%4!=isfOQwMPDyYG2f zq%q-RhvX#q#L;H<>)04-{>oqRZ3}vus@fLeg1OLAQuPJ?9@fww|AZVJ)%zJROh1}+ zo5nHCN#3fvyTY)U2iOY7r=g(t7raIC z;@OTMcy8BD(V?GVwWx@MS+F&^#mm{L2AE0QJ-ia{B2J(K>4uh-j{~0bI?Q| z*|xZMIcj?!{eJN|WFa9B8Sw+z#0GdTcBChBuB_2?Nn>nhybE}Q{bi|6xX#WJURi}G zIc9oV9wR!y+!T-(S<+W=PwR4=w!^KQYQ)p$>gGKPa>z6G|HzPCkMdS0gljKYK!`l zbX|K<$~8gbm0FE(*o`YV&xf4gVc$T^>3U2_Am5|5B0W zlS{W_TZ!o>=9SPth|Mp!^Z$VJe;qP^87S2S_7=1ljTqI?GSlreVA%4})jkAnG?_}S ztkIbSK!d+lUPnqbyFO=0c{-2Dl-i+!gqSONFXR`M*X>tPt%m0Kp* z)&A>*O^c6hO;1TR@)a)yfcYP{)kH0(zF_I5&pzRr(g(2@Z}Wlb=*@N8#V{n*J=0~2 z=evzZ_9{m`?abwnvw5}bXEmoy=|a5|1`{@q5?rG5-Agw=%*H_<_gsojf%G;m=ciy=%V>9WSN2xGBVgg5dIsgO&sA zYf~)?u(vg8^1j|rYST?kH(ZZx)2$)e#;bIYB#FnRESZ8`q0oLP}R-RU@VO14SKEx>idwrW7D+-k#-6Fa-w7CJ&V z!xp7fu;{n-E8@UV{G)(GKl(8#s~3&gPo)t{_k}?s*fL}3+R>BhoxK^etQNb5KYiHF z`Idky)&QIHTM5D7>l^9uFIc;>NC2Go(NEVrRdk8u z9s^n|5VQkdjVFs7shZSKKB9y7mbNzA&tQxU+zQknXEdx<;~B^Hf5nBKbxz-HqWf1z z(dGeoyxe|{|1z*_WFI{T?STjn%bQ?*Kx~T7$J$D10#(_J!hH?>L-z8j&>|8ZR{rc{ zV;;#ij=c)5zrF)_gTy$~cc9I{NodMKXL*7mqp8n^RWNR4VKr>fZVzQ(@b1l%yQJ?$ zMcIV3(Bo9F7X;X8o&c0WikO~7Xd&HOeWlOoJp-YD$VABdW7=0}qSIQouyDj) zS1(ju4Kq=8`zoqq`}2NSs5N~vCfYX0(U06Ve4*G-oxEG)HFfrT8W=hD1VRafEwb|f z%jW&tJ9@gh7mW3An+4c=qfdKe1;7S#P5l~e73RPDMOP)~5I){Hij9>CCLwEjtiLVGS^^WS^YSg zF?I;GlXQwBmJGn|P#BJzB7l>5LAw_YJs&*XB!fQiM0ErW0wi}#Gd4K2Y+5(Q&4e*H zk#^jUR9uxrCImt>t0H`+m+Jd*l^Ht^`58B82|~cWGYisD5>+xtBnrp2Qu|s}-3`4% z!g3n^`g)b%d?DZi{R80vZ6WUo^N|cz^^HRy2(%x7_yBUeSJkZ9M8Z%J5SK3T1dM3%gE6RA{^DO{y9+k0lFAZ0C}UhG^dfcC4d&!-%c?I@s)Gk@wLgmt zSYOxQe?+yO_59lZe^tw8>2RJb_+kAsdf@m4g-B^OJZGVTjN^`&A~Jl7a6>2CLZB zIv;xR>RGHjt&wY7dcezyaNg4*N@SGGsV%Qm4nuEYc&tT!Wl@6I<(ph1nVrIteYtrA zXli9qyhBoDCh>1tTu6eo@0<#eR3!thXsXwb-Neg>(bBb8zPMM!h@<=edPKAG!C?Ep zLNi#4ZY2syU>TN5SW^%*@8lS#sQy6r(s8WoyDIONyK-miO%gj+InYK{mnqUD;PZ{; zHNRZn#4~jffi@+#8q<6CXn~-W)PDYO z|K#_j=hs-tAD9iMb2I3*_$MT^32W7vk2L)bR%vqaf+}vVInaPw9mwE5Oqo{r?v+g> zHPJh3!SFN6rYR|LDR)GL^r`HXI9OT{N|PiJVDlN!QuFjt%UV~=03)Vw~q<+APS+k#z%DRz28laukTQ#ZLwpwu8QxcP{!$Z>jToD-kWz)95T_^(zz z!IKJ!k8bVgf%+1VoSjVyaB!?s5%nP;BIC?g*TagFW3v^mdZssNR84&6_s4$X4^K*# zm9>+$L{5r;F-c3*k)_+juj96BuX$Kn6Gx|byqmyQA@H$|O<xD|*18(4NdLmw~%-JhvIv#kVx z>;Swx1>0PHGM9JkhPNox;5i4&j!Bpxu=izKL2+~GKRk4G;W(&K*O#8|2&f>7u)T9# zW-K}~l8%lJUAUwjS7jCcNJhY`{;6DL9qq(qFEAMFIF&IcC1*7tLZTkM`JE??j(f6B z;A#~Vq}j}=wJN!D$-G_vd?kUIk`i-GW@y)p^kwXTuawZxrplVCti(e@>qRDmI~S?{ zxk0?aDWxFDAWbDWZ6Xot1jTI^I_%L~DLj3XCwo%CFZbZAL6@q^sNHy(|BtS>j;gAQ zx`)rDkuIfE3F(qScXvp0>A2MI@VxIkzQ4XP&~br# z&pCUaefFAbt~nP5{uj@Xjk^Fwh7mSMTLPhb-CrTQdt#MlE{Cpt*@t?ZVsh5BJEPt- zDgcbdm{(<-<5XyLcXYYMVuXX&kG=g@E7oFdD^xx{CIc(`F72*w%>G~o`wo7Ug$!$7)MDRHu0*}0ts9nJ2#>0{*c12lv$fv0C?@A8L`33-72 zztsxeg`fevH-=IY4EmE(UXk!b>wkO zVAexP(wLb(@5Un)^NLUPJ>cVWcONCvy0CH5ke!hdW~aa6-@E+H)358$FPHLjv5o_# zlD7l_wMuA;QB~XF$?B|{z=HZJ!5!c@`qDqAN-l@qoReJtvkzDdADiX(sI%@$&6&bG zzIj;l8AqkUM20F)*9ZfSFYnq>rFNWMW$)e=Jkd;G8g_EPE|*q%5QHiQMYh%U!0^_& zCx38XIRtVRyxqCbH=X?~{m?#m1S~-w;mAxub*;kHlJXY*epg$m#J_Pmhc?%PvU5`~=h9-%CIGxWs`3 z4SkQESgjPNi>WXWCbfSc`;_9UM0?pP7KoEwyAA@&CB4oGP1&<8jP6$Bt#_09S|Lk5 z%V9Hh)=&C>tn)|1j<S5Xh|lV?pr`_p=m*4nwVrX z?ImX$gZi_tJqEVRj-Uo=ctBxY|9yPC1>hTV^~%_|*2nkiq(!>&)^nl8LNc0gB~m5l zA{Te;Pun>6FMm54&^1mAg%9+Ms{8;A#w}}gWvD^}| zp!TMaNig96hZ>a^^vWi%jN$_$tsc)^3N~)EM%G*A+UUsmatl6_CY9^>_e{IyJt)Sl zpPYLP9c3gZzZe%51Bn8Alg(DtkpJ=}&W_!>=U%R>FrW`I>gsw=0T*F~P?aT&#Bb^- zf0tSy(`9IXL-rfie&M|@EudKL3A$isQNuZ01IV31S;oFLcHU^jt%0IA{IhSgmb2Jj zdd&ZO+~qJ=|3@h|s(KyQFAz7pd)C*Z1R$VF8fT(;lj<_$HXY*w0=@{Mq0$y;8Bb*o zG!m1@>H0im+E~0fN`CsFfipo6cg|l`(fZJ={Dzp@RFCK%4T6rnc(N3?s$s|2-cK``PP3 z_MdMrNIe%a%nzFj#)L>y#fJuk^mG#!K>9<**ckuv0KJtt{lBaeUp7!EZmmm7>bsnh zc&7k5)rb=LJv!-zlM8dy5O^odgBGls(c(J}vyJ~N^K_A1-5tNX+moeQ%c9aRVNqYP zv(5}$O5bc-zgz^H2apcy@jOIHX5EdxU`^}(pFrghE?fY0JAXl)mJvdhnLc75`8Pox zJYSncz)E&j{yP26MF$wk!E6~cse+E{0jtki^NWzm!O^DT_p#@FFBReXMI?4=d?}D8 zIodiB=u|%zp}T9)EkdZr#IZAQ9he+QrMY=Ht1R8VlMl|{mI_#|Xpwf}(g4F`U?l5* ziniVrSKG>x?Jp6}!TT@W$2?J15d8HNXD2roG1vyJv}`MCR&Jsh2MddoE1w1Y)CXc9 zF4i67SA`F}>%|Gnmvm@hG-a8Qi^22zomAZC%ubNN$|2bTVfvCk-MEoTtcvMh?4*}djyX9(! z0QxKSJE|G4_F*9~Kadn)CF72U)3WnCr6S(fO{4D8L3NmkcU#pxChgzC{!V1!b6d7_?o2j?b`PE#4!I`un{N zKHHa?pfh#Uu}0$KwATZ^G|7(7#I2g@Cxp*9tp=?3mX4rk*Y}PO04`Pv^XX2@L(&jO z7TM<%n2))Ii#|6<+qD^vY|05p6G{+rO`qKLP`h8}C(FuEd zH{&f(PXaKsafw-T&|X{ES#|D>ETi1{)XNvExEfDPs1W}`WM(N%U~|cqR(250y1tmW zHoGg!^{!w7$M>8?C-A)Rjm1pe3#>=XlcN~t9u0IwiepCEP2#NloSVB>JI;hzpnn`+ zNY`(6m%g~jot27zrg(AM(oF8rzD*r$_rb+|U+f5W2kF>w%smv zX(n=2%=QIaacqDMPiW2QjvOoIPTG>K?rsMT84q7z4)a=3!yY_R*Bu6vx zpwF?S40N<`RmX`g1&^y>+{Zz8?-yDH^#g$d zP7Nj4nxd(FtEhJbwn@1XI=27YQ+q#=vT+<+3p zcLTOMT9V1Rh>`4t}X|@%Ue0%^aKeW<1OBF zl>s>hfCl({JmbOQrOy5)MIFtBJod)0^d3}P;mWRC9<`ok9C?c`ll*&5i2TW{N+&V1 z84bn5BcmT%J%air<^A8k>IJ1~WI!A9HEuf!HL8IuHcs*e=mG}4%2x5tT>S>%(Mg%a zclQzy+3*s+bMsmv+{<*ss+*d~Cw>KF->LF$5!{MBmdXv0zPaaLDzKw=d~cvcgMmJ^;R76l~i-Dcarkh&MWrhDy`YK9aiv zirLD>)x<37XuMg~V0Vz5n%|h|-nWEBU;3Th=>lR-4qj|I#4#x=DvodEFbY|OYgqo3 z9-jQG?>FKzHL$Q|exH8{ghl0oxyWYJYu_BQX}-D^k|R&_y~kE;)F&Gbrix-1n586` zG#r6?&hcoEkDwFzWpNQQ7QzlrHrO==-@1mvF1VroFWTT`M2>W9N=hIIrdq`faLuJt z82tn?mn0AwR(cWq2J~%zH~kor{QS>SYs#Hf3pGzCAKUwv*clek7XD$M=gi=@{qrA` z#rU9?3U;sfe7=c3o`D&R0?HCH0?v$pL! zOBbB4tls8iiUETqr5$TDYg=ggX`r&0HC@+cVcp*OxP6{O4m?l)C_ znH-wUn6Fdu0`C+R-}_TYn3&Lk>(D;uf%<=xGw;GbSq)wyo(|iCzE^`v3~H(ijLA6& zy!I`UdOq@p7U;XGqm_C)JO9J!a$k4t3zFD{1r_=y!+=8<0h%-JOSs#jtro&5;`*1l(ZYn3YoF;Al%9=7S{a>lK({)^RsOk-og zJzCdFIlV6ypboo7mlY9Vto@v~H;y-{l2*|ursIEj7ei?$2_w00p#qB@2$WyMyl$=- z`q$R$^u4Zk<*)x{E5Ck7BP}a>h?VgRTcw>YmPk_%{5RVbR^q}wO9LR1X2j7)OohacP&=qcDGZqwwy zJuZqT73{sBGQ)nvLoYN}7&k2i&kkjk{qBIB1x#uWyfY zxBE0i?m@Ya7Ah4TMbI-);H0E(43@W>*=<1n^_ps}OjZ(k-stk2e`^a53374-?$mkS zF&W+?tc?EMmT$qRg>QaM>5h}JFZE#v%Y48lsb&Y2bDoOj7;kfXB!T6Rqu{KueDCNe z^*neBLyh*u&0C|Y0via?G5OLkgxR#(R=vt^rX=LnGt7{C~azfIt7*+wr1e4pV{#F?YpFiY!}g-+vpL#{q=~fW;3vbP5|yoR?bE*wiLSRzYj)h zX3q_0vX{qL(M}K1b<)NoW^N~(&qCfcAyb*cq19|Hk#E{)lkN#<-QVYkBJz4XN<^MU zWIh(^QT(ncqgx%z_RzDHz!RKTe(J5zN@4QS!g1}f(1x~UE$jI)@8tgZY5K(tG`l#< zP8Rn>tCNj)b0q)%2F=YKtWf6kP^$-HC`FpIw@;=buK1b!N8SWjdDJt&bdoKSA}X z&{8gBe8KCdzhFM;<9VUDXtK28Ttv6#6e5fhQ`Q>>KIzTVRAMf~zKc9q0EQSy!*Dz{ zyluEH)_)`k&Fx#*^K>vCVbiRm!M@5KQc=|9|J6Sj+(d2rPO3fA+T0+20T=E{}?Sw!q)-ZpB_Dpu$CTuO%tM zV4mLN#wWu*YDQ4xPR8dU2gb~+~0=44@36$-Sb@LRnlbSTv)@fFk; zGF}-Ahws4BY5;bk&uvxm$<)Oz|MlZhue!l)hNHmKE3KL0TV#nAi5M7^TlH!Y+yE+D zxas;0Wo~p;$j_fiiay4;x>w8yfl~C5`^9aCy#wS|1U15iT3S9FgUdI)jRs3!!8F5D z>6fK6iK5k0s}FJ771Nh1x%)cC39Y67P$oaxf!;nR8)SfxFqs;3xPz@iy!UjP5@*OuG>Di?Z>P>18wk3-6!ccT8710(P(#eI&wqVEHc3m%Gr%7G&pZ7%{#O93zX?s8 z4eMk1wD11p2-YMS?p_AXI&c5uh5W(Y7t}Nyv-Osi`ldU-X^TU?{j;(v?Fu)Wv$Lmv z?>ei{x)7TGfxPt4fT1b8^VRH?enLeWHl+ke(mq|gs-^&$5^9WFg;qYBUur7knWiLf zDW+-C3LhG01Np!GY>#_0#lJ}1CdYUR4~9d%GKuZyr(ka+1Q{ytB3G(dwFj`@o6{G4 zX{~>6!5fit=vK|eQwO%<`&c}KXAXMRkM=z=t}dF1M%kx#clplFFu=wFIc!5EC#-ML zYACTxi^Md*(AZ&KT;g_&suJmDuu68E5(jxEox_!&UpS(De4CUniRJ$+;^}SXFT4&1Y3J$HqN${xCZ8C(bJ6o9bcbg ze}|hp$Y0@|t)moaR%d`CeZxEp^_$ybmtg$DD1vBTeJ}1NF}gdEsePS_oMI_I!Hf1R z34MIr?s6DxZ6R*{g|Ydap~sW0!z;*dScouGl`O?%3CAt_92eA1lQ<`U&1(ESP(SyW zvsB-Yjk<|rFG|l@Z4F($-r~6M;H^@9!0)mmQN*>x-Q06n2jT1H3qpWH^#2=zkv-_ZqWQojPZ!}h&{_{-yH4`A_hQMss z@`B9Aiw{&gxDBBaM&!34wR~Z`SXqwbN>O{T_ooK>Nw%Vfk>2j}d2Um|9>$JYrAh(_ zxS!^kE(^_p=UkXCG|roIk_>RUv_=l!qVois_dRAeSI0!G3tv6h4ULf^eD7O8c#W~9 z6zd!Mo_9=#$mCnfcXw;y>5SZI4b zd9hi7UJK#m!s=09VFW9Fp2s?NV&bR%+x=39ZZ?MyuM5;G#=7L<=4An1eAk%9wjrdy zkEkrqiXWPqYsX1<;EsDL2@A0hBWuU_&;B)n3f6XCY1o#dtNzOKFHJ_)L?YxqNdGw^ zE7B1=ny#e2?Zko8N>F@wA2a5+6GJMZ9Ll!odWPc+WhEt3nU6)Fp{Lh*CsjhnwX9=- zT;|>OcGQ>ubz|y=@A0Hr38k|-EO?%@go?bvboCTEb^Yy4{P_o^B_cTK&??r<_W6Uz zS_N;?rvM`-((w8gG4sNjrxEeoLf)rS0pXL$4JdN^vzn_4A!)+nhMK$FcTq@?wyl9} z#R(WY{$`A~u~)p)#J0oJ_1IlIwr<6tU}%WtpsC8rGAw7uA>P)|0&S;P*lEjq3Ke#C zhf$&$pnI}->f@Xr)I79Q!Z@9HPPN_zzHk%O@BAB235x-jh$!IbOfM}c?m?I)iDEWn zah|k1G7XD*xuRClojkkFfOs9dd8EJk$eqdMa^1;W+9cg9X<|6Ca z?rSrCf>y_n69s|4a&k2|zeb)O_o;D7mW56~#-zeETYOZmx!xqF9#7*0rj)2Fk^Ra$ zRc+it=}YFBG@PEv16Rl4Y06gw1$RyYo;L#MzV82ezlo9w9YoX&`ksINRgBJxOQ+yS zfS~>L3CDpj3h0jY~3X2DtjTvh?GVp%>6(wrgij12Z5;pm4 z<^JcpvE*Vs@TFb2x1%LWKlXvt+T?7a`fWE5hl{|e z-(C*GXnOyl$uL`_awH?9#S56YeDi{uf`w3IbLvzLzfBr3=_q+1HdS>P)-$ ze3=`{uJ?8uLJJbjgHzygowx!;eJk3IuG zK+SJ?J{TAn6xB1k`Ep<|h6L_eXA`R^=WLU>#pk0BcV+Q-Z}_jcF_-8=c6JXI`Ld5s zpR8GBd3geSRjoJ|#lK|)rEk}%fwg*k>0?FZ8_3dj*WTHf2r(5pEk9QNOck9KzZXHTD6fl$<|UCPt1FzUbp#A8t6UE#L8- zlSAJ=h#ew-Oe#lOZ9p+|Z*Q(AWxc7ZPwwcDf!2&~hc4tTD`m~_<>L1k}TxVOI|Kd&19N>HJ>7p>< zH%)?t1T~OXN?{@N+JDPrOvlH%_eJMy&m0H1LK~f-l$6?+7+5j;yopBh`n62;whgnW z=Q6x&btC$%$}^aam$$f=ow3PA;PEk95G3veRXPPR=X-F?;YiCw;{q@yO4b4+IwyTx zDLsSzPn+Oc3Pmn`-ln^vl>$MaF8sZzMtQ^KoQC0RtRpgVxn<$Id8X;}&~$Q0)GXFgYSLtJgl^L@00=1{-i&2V1}q_qy)h3cl0ghwy?fGXZY_`ns$;cR_gRi2bW|k&QEv|^cL-|RfgrezSS9mJ|zUS5sNS8jkaLflQqaW+0 zt?)r-;VM&%8M32zA=?+vSsD<5pQkaE8>?~oMVTYuNzNl!UlaB|16yh!myeru_4J^d zQ2gOPEbr2m{ZVsQQ;i?DcCvG1foN!BU<97)fg?xVFho;~zQAld=o3%d-j#>|>^TG= zm+yDb$`~@X%P?KEe__fWcwU=#lG?nE0|2r*^xkd>>4R`pQZ9YN%+OEAV#HkI@2>U9`iNSz`{;6>UTjEP40?Qo;;U? z*+|_2F0-g;37v?{6a?z*^32zfKjl-7BGEG8x4W1x#N9`}*SePsbz_)3{{sSov$}n@1g<$1$BC zC})16uNA_WQ1jqp>uHc_q`Yd6W#uM z|IUmnOU;A?Rp;#&-&pjM(+JR!^Z`9DyEc;i71?F+=T2MGPp&edI5f^v71wk5%*P+~ zDB@+hAwYk_@P=gXM{Ca}h=IZVm-^lE**NpPmQ{IwvON!ecZxKUF}rbwd&6-m>uW-Y z$9c$#+TaYu3%hp*Ou}py<)1|df2*C0vuAju8@J>)Q*b&s?3ll>!#_E3`RjEpC^{`Z zru9Nt7t0RXv)QB@ST3-eCL@*QG0wFD4i7Jx=XvWLdZ4&c>>S+n`4DdW_{PtTd>>lD zH_AHRtb%yoie5hRHTSwR0v`fOZI4#tkIUzOLw9$`xbiqG2`LR8IDu6k4}&>J>8Osi zhS$0dc(xJn)&#{Q*bw z{w1hjc+Um-$D?WpKkym;5l}yz8FfJ~-724bj>>#bN-g`|Kkw3CB+81Yz{8Uii%=h~ zrp6gR2Kc7@=6A}5Nh*HIFcva>7a3eH+PRmc*WuxC+4hO!OlljKB~iv z|983?mYIZpW8cfxsuVi~HxufDjr^7Ql8o{cL3FbE=7w%;Tzw}9>n)}mj(&RB`}{O*rKpkcE%Z4Q^=#+FUA>q zs5|MyPX)={PaHHfF!SO~Fm1vqG2uG3{0B1DNo!cop{AlkKRMOp;-gK(C;^{`Nt zR&gh5@{HtR2(TR8g5BHL7~5p{CQX?~UPQ8*{=`K6ZF6b$PJ$E$- zrRWOt1?Lwy*OG)w&>K=M7_;EIu19KK(~jWWr7vH_C&F3a>m@1rEsN?p%FMDj*P1w8 zx+?@@RSuz1VSZ=h0vRrv2tc$qdRyJl_#10?R~53-=x~`(lH%d&!%+iy!cWJ_ekaom zk}(d^PHSS@-XGIO2Cz{9;ii0o+9@Lbt#WQ&fMYn0&FfS?=3hg)?XxRgA2}bgavvC! zjJfUeP<%y~0aS$#*~h|C(8B6_1q6_e4&SR!{IL0*QOYUct$_{ge)J5<s#Q;gw`J!a?_(IWxo-;89PFhdWx9$DsJVnG zpCXHGx@&R@z0iU!*?u3gXVmpM20yI~B4BJ{OvpNjB6x6iyBu@WedX;`IjJ>M{>LJP zmk;Z0kbt(RX=p+)X*t|=Qzq1hz_!iAfV~YZImO@e3D_*CV+7U}KTqKr_ML|H_G7C_ zeSG|;;&Hq|LAAk$sVk;RFc7<0F3K&ZZD|J8jRoWLOJZrt^G>{+WA@mF^Xa3CIo0_1tWP5Z!Vn z6)F*tpL7bh*!kGk>2;^U5f?2#xfSNfWv_OF7iQAcM?6c=J)O6w)wT$Pjlm&PfV+Ye zr|UZlj*Y7Kk04ZfvnkQn|1N}%NrHR6je`!WN7n%3GSftln?>6RRrBG*IXmJ!;KNG# zO=`TLzT7)l#ByK$+mLsz^YluobUeA}---tDuoI7JAZ@`@cC$qV(OSayWmb_ztWltC zKY}MaF%b>;tw|b9R`fgMcV%KQ^FIaB!QHzFD!1YsNxkgV&Tb3}eFN0^78Mk85auk{ zhq!UaUk#T9kyvo~oX-gm8~LWCDbL4Z(l}})Bm|#MlZ${aa#2F-Tb}1mlV{Pu+!L|n z<3vT5DzV9+yFE0s=RzZOh^6{@Tft$ely*($QI6IkZdhVFne6Xs^WBUf;SlSUniqg- zlRe6(-n#re9`ZjHT87!GEQc_`I*LTqw46K*p$wbiI}di5_LhJq9lyAi?;~YIjahd(w#Fx_zZv8^k8pXMr8^I)gm2h5O=ioi7RBU(Dz&)M>uf?B!KSst?0YcuF zU|=j1yA-?LQt>u-8_up5l@gt0A9cn1RhloO4+nR-Ik4HB3QxA3*7?{520JvLe1vUU z`Q}eF*nMwuvPLd0=OTTCNncB}{`msm;fIu5!@M8xP+F{ntV{+Hzn|R^xOHxL4Fg)~ znix`WuZu9hm>;IcIu?vKzm-7Z!gSyBoz!0|XSag(!O@v_QdRQ=0;cBxxT9HWi%By- zUN@XCA=X&g2p1Nd7nHi~MmS4;@aH*19K4>a0p(d_b8Oy!RkvdGqNO{Ns0uE z9qKco8lXgF&n`3E|4vJKnV98SzU%Rb;RI>|^k6WXo4~nuf7ROdqAWYhuN+o(Vg#OF zN{Q_FQPeS~X6<(`^l1Wo>+p>CQ*KJisiGHam;q@-WUuuRCK7B|G_HKMU|tQWJAo4= z@6#PxQvTJ-Lpb^(%k||ex%?SYWcK@qaaG5sX&4uC+x)JS;6Q{w*ize}JMRX8H8(5~P7 zF(wBa2B>AAKN5rUjg@$St2}ecW99Z(Z*#Ee)tPnKVM6t==Eo|7Gv}OL)C>efF9oSo zbatqn1>>{n?VZlQ zy0|4~gqy03uSzccvo$=^vG|A;aY?OH4w+x%8+mWw_;6k}QX%jWYj(Sz8CeQmP#Nsu zkB!-iISRj8t`|7d3A*`edYK-~wZZf)Sro=YXa}v(AqVu8z?9?;Tk~JDZ7BM$_t_Rh z+1%W#Fx*?)(jgRX`{m)V`j)v#SAA4_qT#C$s~_yWOh6~mS(YWV%jDw-i24`zF!?kx zgTa)boH9oBdbQ`R#rJ?#_O#!0Xp2 zp@E}I(6L|2ctg`>VuA*WXn>RwF3vr8nU*p}!d1@Olv3GUZu{v$bl$|_?++WIpT-W| zCJGqtbDeeFrH*c>oY0nm7l@^tqmn^LsQ=8lfhdim5wQVWQQ$OV(Ler+{Bj#hFR!s>aP zn)@AGW%pL>@@K;821pW^Y}Uj)TOa=skO)Z1DHBC-HIBH-qrBwhRtRtF>gvut5MM!? zm60(7@z}ayrlScBPP-)ucD_2B=3cd*Jj6UWBeh7F!LHzDwZaZXU4{t#>sR>uPlJ=! zr@G5u+$!Z9JG*V?^TS0$$17>_gM!UgN zvR`AhhMIc=besn%I;NevMpcw&?Yb-0+JUH}(R;$zgQ^w{zr6Wh?_WulhVO*Ke`0Q}Gf5~~$>^{ZMLkS(E2pnf_i#P!Spwhp=keO7+X;S+S|W)t&o zepVsK>kaMvdoWig0oNbQsMp>R-ar7PW2zb}5Pd-+N#g^o7>3^m?5+oWaeW3n5gjhD z@4cs-#xk4_uCVds2x=5u%QFYK6F0DW(%XX5=Jns9waeYqaf7w)p8=|RxdA18Ax*U`+%GF|K&bDew`@zvODJv_=>fjyL!Q7uMhw>yV)mR00qtR?4E2x1U%=>%Cw zH_>n25JL7$#L04))E93Fs}{PIkC)xezO6m329aQ|6^k{>a*2Fxc{H$HAg-VSITyee zY+^ED`1@0Z+eL0kk#w%tl&fH-JwG`kD{q~_^Kk~K!TE*PBSG&=jMNP~iM371yTjHM zjq-F(D@tH25NNwy=yte_+6?Igxojf(aO5M$Kxd*!cM&bF23HV0;# zJW@TVlGrf5aP#C~;x-ZohseqefG)JSlme$#nB7uzkIY6$=xVOmmv?bFEvp0aioZ5o zS27U9NrDg}!=!KW9WSy!ORQg>z>*EkO((m%dkJk*C)8L}89Vl;t#ETk0?N(YV9&ajv(RBZYU@@^; zagGL*;R9IfVqgLV%bBHrPqfk=FAY%CX-}Zx@)J`X#v(m+LP`Eud~H9q#0@fUFBB)P zf_CebX9iyg|Kx$BMvshoD>r2>UR07P31k~iJ??bIAWSPns>J89M+agL*|fMT|%f=~+ zzU}b3&6Sd$f+7=;-k@U;U@*wwZy_^^0DCkv47@;Jrfo+Y20mzN($dqmfItlzo0jDhzkUIR(EfMH|CtRej4}5YCA(4ct-Rga{IvV3N08aZ~=BB zKeZ9)=)Eodotl%1@f=}C!H<(3n`HOvOE*;#YE7T~L^fhf_{!~Ab2woe1Vh~r$)G6a z*+!Z_!nMyMm^2AYe8w0cW{p%*mh?=Ih(M3u@9jn$l4T#Dm8c*lb&ZQahp$Jp5Du7S zL+O>S&d*ni(rx20A-lIY+=5w#7OzdcUpEXd$V5dGmX=;EID&Pgz3ERD(VXMw6IWQM z9Aqj3)7)Q847hZ4wsl%DMt-CpIg7a*z`xBi2~``B5VJA;{Qu3B4^bKIpxvjwnjPxd zuFw2eF<_5A-*;!S8S7~fOuK*6-L*87E~UiPwC@aF}Od3NH}c!b-{ zZ98b|M84*I3I1ajc6eGOYqL(hC?|Vm3 zphwWffbVp%_rW496~atX4!4{@1c>yu3m;8BdL?lD(B;u94!*eeM6?O31#co?Ixwy~ zal(_Z`_nLR$>dK#n{5LVIh{;TTUH7ZU|T7k*&1^GMB6~tR0*jEiVrW5N}M&pQrmDI zRCO2eP8~NFvoJ?e-M~h&TsfrVA|RJu&KB70n~*Z)nmyN@?=n(JIf+ZB6wtHLtNQ^& z!@zlObE?1jFmsDJQoUcqj2Tyd?~iO-(Z;5~a}2j6a-5*)ja0^U-#=592o!7*^BLbR zu2h!2vGjie5O9L6;Qd=2g3k#pX;w2oljAT(t{Arj8kPJ(W;Dvo`y-OzUS|ZeR^G1!^#JRCti_nod6+kHdC$0++IY z+l-qdJ>`qgis3;;2*7v@@JAkjRul z6}k)q$HbJ8p8S zY21#B9Pi=(Z|Yg3(HAULm62D0A+n5lET?d?>X72ql93*AlfHbl#Kc5?4bAAc7Mw+e z0DJ;$F+6U*DuW%kTP6y-Qh^8P8br0yn_D~LEA#Pw4MR%J^|^;%Jn(VFsm@%z&|EC{ zA~NccwW8pbE0DW%$X}5$|UmY;9P3xirN(tmN?#+(Z664 z>fmX?n>VLfIr}OuZF^ZcbI|L{n{NJ@Dc8qDvYhW5jVH}iOUy%_5lA?Uh%d8~)A5*f zpdbr|Mtgny*}tPhCV;h4#G4Sn1dQEO!aeYbztCi;nv?0?6=R#zpIk}c?jdxZOU5l<$MCQ?Q-iWpZ(r?g00)mG*fW? z11(H&secSS@_$Jf6tgq(h_O56_AVR2mT5P!v)8U*l&=HLdYK#rJuc`aZe znsAP8oFnm6)a#&jOUGV@BXPzOcibX@kQ)3d55@%31u);?+EYoJ;jBvSt;2u!bY$Ev z>ip(?{CON5Zk|c;ptN=ZBqRPmH{XIl=Dhn?^rZ`!a;#HNmEt0`6FnjK>#i=Q>cFlp zB#V~9LZT1_S1Z!g%Hc-!(3tv0Ry(V&xw)DL1(hZ8jT66wUa%4T8_o`rZMkRVl1GwA zL3slB$6~i*8@pPR@T~Rkd@IHJ*y@CmBLI;-^A zX!T*i%IzAHecP^ujm0Ffg1zhH~R_ZjgtO?9p>T5eZk zs_vUFitdI>o-Tm+55)LjrJ4+gO-l{Bb`!dU%|$)Vox6^;{hnWn#!}+U8krW3=?J?4e1CNk#Y1$ej7j>jwHT*AXlj^rhkv<#2#DE8$6?7Ar12*XeEBvK z_n%qO>g1n+lo~H&Y>L->-AHj@Sr?a{%P~+DtaJmunqypm^;`|5(B;92TjYnbX=*+( zT`q>K>)~)1Ej=6d7u3tO;UI+qla)XA=+P7+{$O|mpcZeO+iS_|YzK;XKl_4XQv=5~ z$Q;?zA3)JJ_?*g{UgjkogCUpJDEBOIlOn=CikquDG0bm_N5L9?V>M5jJ1t zT(9-@>uhl~XY|1WmzTFj`Lb(=y*il8Q$2%sGm&)s9y8K*|B3h%Os2*$0e+-0q%~|b znKbHFI&rXmfdGJ85de62zy)=l;lzlWOnvY9mhewUl&S3JF~S+8pHu+*~G`6}g1*300B$*6a=68$oFCZBYQ84a*dsx@}57`Zuh^- z8&Nd?LkjpOWH~;u4qY?naENWlgg~~X2{tV)-hfvf3o(ANUiA9QZy^EM!I`yd+dx)* zBw&Zl;N_>~pJS?YUFTb1k4VMW=P;(kbNN=WBIQharRqKm;Awu>bRPB|-Htwkos|Dr z%r=+n8{$xa0GlRuW${6zacpYJ59AMQZ$D^~*U(UP@XHE57+k;lEcQUQcoCA#tcc6( zWqKi4lKOF6(A4osc%z{aS@Vg~VehELTw(Z1WO6v*f$cg|`D+LzHFTV+9G*yYYcp1b zE-9IZ2yj$#kS_EKsx6HLTelGs6qKQSFKI6k$hOZV0W-AArwmQ|tHDb&bwfOQ5Zr@l zz;CFxgX+%6|CE}6wj+uQfLg>29Pj2?XNd4c;TLb>L?Tq1Omsa2Kx4%TvDD{8x87!c zIP^uIQ73StO3Xr<0P362>o=LMcB9aoH|sI1_0%`f*LnwFmoD?y-OP3l^4|nv{*c-C z2AYEj^!SYY_M9e}G0n@Df z=Idz%;JfyL=(^wk6_~KK%_Ot&i6F}cVh?(mui5h#?4~e{z2Eeo+T#E-d-b*z2|GAW zvj@-yvG6t#@m+c>9B*ykKWS`apKov&+dkXf-4zEFO+XH~G@cbN(_c^!f-IIH%4@LB zFOfAL|Mg%8?=Sh^dJ9Ybr$NaFo1Z3xQI2dF?iwv#)y{P^_#CXC-nNL`%UHng8&tqm z#JbgOpb}d|b=%E3aB=AG<});K9lr(xd;bA_S)4fFWATRdX-S2L;Vn^C5^De48HiiK z911?Km;m9A(}YQ_tc#~VEo))WvIdDAl$QnCO)L1gSl4|yhtM{l@ zPnY<`sSAZrE;SKz;36a>ta2s<3(>F%l8~Nb6ZY?|KZ?_{$a+z{w3qaAg_4_6U!WD4 z+8*H~3GGEx;M{~NMj-$tnv737W-v5-Cx*crK6-V0nynAI%P#*}r7d_}EvzI)4v$bZ z8|bhZ^eE!02PXvBeA(a5(LQyKxLU#>^~TW~El#J}=!JEC@3!9;P?dT&RY z-h&k{c9r%jO?%CPRml=G0pg3)b~(jgo=R$1Z=lZSsK@%;1@y%^?ADJd(T@(e?XoDW37(7ZrW0>+8cq zSj|2;2^Pffii{Hk|0;R^x8Z3T^Y5hNkHH0Ej2EuZV*%yqdWVTtN0J@U5m=IOVM}Tp z^*cW-L#RLdo(2Io1DjTvF3q{&*wxgvle4qAOKBgb3aH0wx+~Tamhl&!y6-ElkX}L! zpTYyiaoC_`bR4-q>@;7>Y2ooy5)$r4z?*d1gWluS@YTFm-5VxBt#09Kaj~K~dW2`% zUIYs?Ojfk`j+=89RY1oTuyQW$MMB(BVH(D5SvMkcelyi4!!%es_EpEYxR<_aSm*(QGfpYLkyjSd- zaYTOvj7o~5qm|Y3*_$p9{doOQ;daQ+F@t-_bntMiK@|%$ngchK9rX2@Y$u0|X zDTD?(UXR}#M@@D|?kVu*4cOcWl$!zls$O7@1){h=v?2z^O`FJXX*rhC{&kkZ>W6Y)$rmT7c$unYele zdL}vv&J+76+^BRBPV{f|M608@jvNG=^$=P#{~a7t-@z_R5P?Y_)AC77dDhFv<*0A7 zF)OOxwBvO5;W58jy0vX^OI zmmu_f*))X&`mL$|+(4f2t`Yv=XrGd@aywGc*x0;`lE*UUZel9+6Uh8NR*D|pAb<*t z&aZ2vPywqmi40)dc1ly7O_on5KR;VO|KX+`zW3AphIy1PwA72^0|;_i1xM=Ub#ycA zYk53*#egS>tk|KhVKz~!MQCaY{$CIpExgqIulBtO2pF>r>Cuj@y@99GrJ!-YVOd9H zj8X$10;XqO(>6L6;l`d9b>K*hEzdka-d=PN$(>6Ks70Vd>p&_ZQmonRm#hHMEE?g{ z0YG3KNDi*+C#+4o`5!_3#CrdS#-Aj1on?^M%71awhBNTOVcH#q??cbQtxQV$G5Qt4 z?MB|n%{_>^*(kA8-*=%IE$(o5x%OBqrfC3W>7)Xyl6*WPHA$;lb_(Dyagp;6x?i&j~w?FYLqfCHnEzd@!?|QG8 ztrM~R4}u?fW9x5$Ht+y#6u6Pz_#ixExL+MJ`?s+kgdIstViNX{lw|q?E-dzFXgr<~ z61ax07X1Gj`|hZwy5`+OFM@!mG$j-f6r~7?h!8}Y(ggwOMWq*|mn3v~>8SMHQMv*a zx`?3k8j5s~PAGvuAmr}&e&7AwweJ1ny3oXgbIz_a&&+;i=EB-T2e#82{=*f$zi1IE zBi&FyDvEm{m$+4S8fr$Bi!SBDy;>chfNovPVlEL=bOI8gmE^b)Mo=?3?V-Pq9rg6} z_@&@np{%=v0TCG!-VNg?I?(|52NyPe1MbB2PfG2VY3cr%gFBm9O4cTL@oT%Q%W$S ze>FdS-iy`W&-A>ipZKx@tj2T;A?)%^-8^O(e^*0QYNPPa z$kjJA^L^zFW0)<5a$=v@OwAEqF^k7hVrV7S$s1&gD zMhq;R%H`eg@07uGzV4wIL_zUrP?WHV1-i1!~isL#BD5#$BK6!D$%6}TnABAjyj&tl=4 zGYc6>IH?R`yb6aMz6Y4VjbVY}ATNaL>oGTi+uZsGQW)6+BcDu$P`H ztm0jcn8N33#wu~htySaxI}gfWzoaY&mP&f(aqXujQgls>137XkXuv1to`%O6 zC27qSX1j%26$$5t2gL8rz9Az&09y;WwW50|40~S(ewObZn`r{{GH^sBIObWyN$pmS z$zF-CgQfQh%&z_#x7th|YJ2z0c8!EwHsQ(c9xw+f{ZA8aX5q#lvg51})hs^omY1xT z2z?_=p{jjbAwu{0u`{De;%Jj|j z(I&xyiQ8wLw@F4`PuKJFH;0E^q7;-{D6mN*zJu|k32sbiA_B$@E#MEMi{=kLI-y2; z(!aHSx|5%Fh|^zP(eE`PI2nh%9Im*Ep5}ZQD;Ej1G??qCVMQ~qu4K^PCD#Mnt^u~* z5>?TKbuc%_(JjNj*Lf(4t?8~^0)n8gA6QJSev$|2L3D{+FfcFF!pK|JFknnZSww|w zjTEUefYr3Tl7=8WLHxOs=rX#js}g?VxWu-?Zxw~Oz3c1Q#^^k49#U1Yn6`8c{Ejs znu?JACr|*RKIR^L>3nmjc-Y|3ON6wsR_0GJ3|GjQmA`|zGRASD?5%z=A#LB579vqM z$wF+`QyOQws^)P2dJ!AS#ZdV^KBo-xvywg9lA3mFN{b=y zc;?ld=jE9VK2_4y`7Q~KU$e4{r-Zb5@TJ*f=>D0-3IGFsRGv+~;Bh-OG~3uXz0lNO z6&R&i*kFw&U(7AV$#m;?a`%`UEo~{oc~NIR;O79Ffuz~4;h!RD`Mmq59~aOVuF(ec z#{RwR0bCCd1R9WU+V(a4 z&OHyn(gpDZamBLmOx=W(m!%LJpgNxAu!9NqBgPygBE-O_7INX(trvhJ`>opqD>&Wf z*XsDswlOjA6*n7*lh6TM2T1g@nq4@xx^>skYL{n9H>bS!n8=2+^+uRpA;`CudlSEw zS+DTaIxo68#7|`e9zV-~0wQkqcbJd-<8efxbJ~f}g(c^`W2HDFD3Z53pfog+aI{C1 zQkZ^$Apnn6)3Lb-o(cY$0TfSUGh57sf2yU2DsR1DU?ZSnZ&N@A4;=ER@%0sO^Tz8c zs&&#oL^ZUAveuiyY0xz^+W?Ufa(%gm`Lf)bg$Jn)U>et z-ll>wX`zIg{Q^7J2AVu`=pb#c&{(A6IQxsaCNA;;k@V!)UlH~zTD{`f51@<^R2>Z& zw>zIC?6tHL@L0y=Q{jM^@5EG~Up~?Fn{^Q)^92 zUFa=mMQI6#`G-747f}RQeGvq%UGkBUlB|Iv0_vGC46$<5G`_pt!1?b)t_5NbS0%vw zkU^qN2Unq)_;&7ZouZ8qD%^gmRq18c?3Vtc(dis;$nYiFR7NnZ^qmyRS;Y_%p%{R{8K36Q|F6QknD>?s1%y<&Ey46k{ulfn;I*K_DWn`I7uW=ya=lWFI z$+^!XnAMvU`4ve>T?>jY)U(0O&lvkLbET-_^oo<81KtF|>_GfnE1!bnxavTiguhvP zE-c^WLeJrDz?7bf*+ce953cmxC0+oBG+T#(5SffOH#b~(;uJpW`J8ml2tBt3LDmg+ zSu5V0zue?;i@&wD4OH6)_AoMc_d)NaDGL6&FVfS8yK%(x0AaU z?CKe^abZHnG|6f7yg>C~n6C3bbq@)jTrglbRDDSEGbydxVg!SRemX#-ti;!K%Aiiv z7l&%Bq+!)%PV~dpf}(p3dpy2-dkTP+x9I(~IGI5CL%Yah=pFa1vd0%R@qyc(f1JQ- z%gP;1D7ZU%w@x~hY~@w0T(;z`^~cCE%fZ!gMSe@WtRf7TNI`Jv)5=vpjlcxS&)T29 zaE<=PEtt0&`STcc5nMLY(7z6eD+XCK{x8Av3Y)R3YZ`$o!{{{f!IBCoDt*t-^?H6f|E5NEwL zgr)%OWE=EpEi~KVoia242+LnjhGcp>jP7aB_~yZ^7OcOnlr=~7p@YxifpLOZ@_-Cx z{mo@EbYgTN!1F!5uZgs*;Co!-W@e_k#66rrWO*Ltul`rz7%?1*jCUSOlX zNr`?Loh|B6JW3&B&U*LSz!fQ)=ge2}Nus98g3PX`ME0t@mr+#(uS<}?0xQSIoY%p< zT!=QovU$4WxP>dpn7qwU<8>lrf^BmCwVUh4jpr<((~*NRHMrrs=V=IOuk>FIYkh>R z8BDK9wX(n&l-_wx_l!~qFp3O$QU4jhu9|o<8t)c= zq`M{m&MWiY(LEw#I19cMmQ5hTt2E#n{fS34KLXvK9?VGG_b6zL8gLn~L`L;B<+mQQ z=fH;oet!meb~LUNT-K>Z$T-&Yx?tpE?X1_{^SVrSBpTlnS_6|j|4&J@x1}LHGy~q; z9`NRnx#6ac9w{M)lA&R;cwg?usJa32rhYxHC)3q2B zWl*cC9%dq~@n#IZ)qAbTj@x`J%m3t1&zc6t-GxUQ&)cc-LqfVnRvOJq1MbfVX5o9h zKNJJW(Nf$^*k~LN#TtQ2k;liqp$7hl@husD%G!IfQ#yzrFo;~z?ZpbV&*SsLCKnce z6DNG@_XZ_Nufre40vtJ3{C>Dld{335usT&yeC&Mfi-Y8T$w=BT8^g-0Ot}hXtb9cv z*D}6w>s#g7D@r?x5A!CDV@{YX-#1o$A|vi~JMm04HI8Wv9Sus6PhIhb#51pqTDr9_6I_-b@$&-H?S}!Yp8}l44Vii|{ z^IF*5$8LP_-`mSIAU>b8;n@Ku(IG+cT!)-dhwkmJ^`AOS$6ruR7F4eYD=Ld#{KCRI zmhvf=q2F$EpyV-^{rQRs(BJdT z?h^amy*+s#vpDL@;Xna2D=VTtSYDXgv4n|p4uJS;_X}cq*gcETM#iB1h%0#!cT4G_ z26hEfTl@Wj0N{lq`~!3F9_^h3B+wzyQJ2d>_OjMg39+;nzz}XS zopuYlh7{yNe<=K-6i_-Kdic*NoWOLrhep<%5z_q4fjmHwJYA%-Pupf0^7E^B;H!Cl zpL9t2*DX_l{1-CvP*eQ>fXDy(bFvFI-ciYYGQimw1Mkl)#pGfM;zZ~0<8|N&n#};* zZS}DcOp7)h-;k}JePBRaGbt#K6hPzf3VGrvqiqP#XB;kkL-=3tDUY*Z1}$UxmFzo-O4pcX>Dl4X)L`s)$uEP?R%L@gyTS%ESphtf5$@gcd~C-bMu=6vWqA-%gAS zRc8y`r0A*D&4=;e5Kgsmi(7a1Q{h9mjVm`{b;l8kRGfPQd~vGmKvQUO%jkxyy=2d2 zf;PG}B{Qa2wI$v6Qr4Q)P`E>~A+!@2$rX0+;2FUcJVbHwxy4aoL-9MimOQv|1OT^t zcPy^19Q7_-VfENRRbng42}S=2C+MA;t{HIsEmqL(bmUMl8*%uWnr(&2f{?!r&S0Iq zKb(uq0=&5Tb;D?t^v=n|PCL1B%)O_eyC6P{Othtlrf(tLzk0+xK$Iz)G>==6fJUD0 zLgw4eB%>Vtv4F^U6ZHOXlmIWMEF@%hn*xAu9UV@Qf@5~lJGw=U&qBl8u9ulMX$r|*IBPDze!ZpT4$0PZd&6 z^Jx+an+GmfZ($Lw+v|74*X#bJmED1a5*=QsMR=dV9Jycpu@z649ZNFMt8+;{tDH^uq)nghnbzFBIAUm)gV%!z; ztQg~B8WVNSIWQ#g6L>6uc|>MA9X@u)bGNJ%CQ?AxcK&5n+zEvKB$~o_S5y-|w=Quv zGRwSNOmS-e)LRhbngx@878r5UVTndJN*Yv>02G z&WqIy7{cd!TZ#kX`sxTa>=@xIp`biF`jt_Yjqo?JH=ity*RoH5KzKa9xwuzyGwTQTbwYxWsr!@s`%?_* zPhNa%49+R<4F-`lWNGM!yEm_m_xTYl*9KUw7nm({9BJ?o0*iVdJ$ZS*b->Kqj62?} zJY3ZQtis~I)x9|?>6J!=rejwS?|_tUn&WQ z6s-r-R;?~~NTaxS9(|+M5tW(R7Fg=Z?1=h2b3joNXxZId(^!-bcYT2A+49MlO1r*7 zlZ7;oKz#XeLx{V2p|fWH)LGyVlB*%NzHHqV7n|??*8j^GNa{f2A=x1WHj@6YJzpci zUNVV=L1jJ^>Uq8S580Zd8DRIRaEej{@C~%C2Khe-WqdlSq}=sIQ1!a-0$Uc4jRL#Y z%2<_1>?T8-5_)w+E2kXL>cQbDg1XLY=xBsx4u*^^q%P_epp}yfw$VxkMr?ZTo69zc zJx24BRVU+y4!7oYa^YG@oj(C%gYs>uwpFShao-%DUJp7(lxW00xx5T4XjiQbIi;$P z)@!%yE)$Vq!pGJW`yO#qE9tdd$TW5doKe`W)ixK z*f^^%t$A;1T2)%pr*w}cb`gGenz*Qz)K9nU+|m|vvu}B|l#FM8c7Bu$@_+)~v7fSF z0`l|d<+X<2N&ft+sBLI#O$rif|4tqieapVZNcMwJKA*SySVZvk+BpA= zG*2qkx**^Y8t5MD!fE3Du{HP|9Z?X9Z}&WAv;=6znVORd-6;~pVFs)hM8xXB$1>dW zEva@@jed&R#9gasYDyww91EU547*xBv4m?ZU8!rj2)(}|W5VJZSjmqx#PCD~>XJf$ ziikQNEWC;REd2R}TY-`*Uf9L~|Kqoo)V8LBMah&TjN7rg{5tc- zVzN&7PYXtJL;7F#1OSC8-t2rgsN2Ke)mC8})kvCr+kFd>->YS=({WsX{J3Fi_iLjQ zmLnSgG^pO;pq5ZeUgDLxy&`W^Ny~geirSw+7VmRs5LQaj3>?qfbr1Y_j%;}`9j*Y< zD$y7mq0PPp_cA1md~`>H*Wm=b6=myDg^S}4Rs$}w@ESQ_Z%HnVVSkTbRnozpYJKFM zMFF`dRh;KLm3V~Jo9(S7^!p#5eW;Hk#6~8f%B9V#O^#8WMbU+>FF5UgJ&YgjU##tk z;35JnSKh4GGhdrc(?kJ(qJF=_F@*waqQq3uL~D1Zut22?u4;9 z8uc!b43OyeFv&bA-@L6a{EE+SEc{;vS_;e75L14Pl8b1Ek(e%jAta~bJbrHBeIkfH z!fb?Vq)P>Xl>%H}^tySO2CcaYQ}p?WX8?#AHd^Mnbc+#2M_>>2nKqmbZ&Cy#yNEuS zbB^kgf3KpuCnPeG?z8zE-Zw5WK%@ETA7zQY_}?`#i%gkQZakDb(s3XJ!iO=JW%)sC zg`C?(?-h)kISMg(eybI-i#~YYW(?O@YtUXRF$E-n%qu+7DE#me37kJ#jZ{JcmvLO? z`M1{1>=YOr$r~z)E&ODdswO8ot;tQ6ddgb81CXd_JA3Z;r>reks4TalRdR&+U}gMu z5JjE++2|eyyD32X-aKq)=#^oQYTC069LbDF!k)w^s%PHNL5qXq{nH%~nZE<`gC;H1 z3F@rHT2oS8na%x=wjPNc`~7(?ii~{OO{ZS~Wc)($AZccBPYO`f%J$f1I``0i5(jTC zTJV2>kBOajIUL%7{`oH#!1aTb`G3sU`!>LQJ#TpGwsidzTtX5|L`U5?ZGMO)O?I-1)48}amq)06{^_r~XkW7R ze8JXqsU>p%x!~PsT0oDm8zyTY)HEdH#|>M11W`|lo_?z_>%KgMWh?h4@do%B$mIbK zVBu`IwM*r*osGp#(id!UkTIiXC=`wcukQVOhp_+e`XG>0G1sf^kujvu{ z7teI=U92#Jcy2KR6W9b>m){b448Z+B_Aycx#Lf*loi7^0J&GBT3!HgJt%E3wH+M74 z{`TuEBHR0>{Dx^#A9Cx=Bh2|o&EblvLb4hDi*3DO%WIF=^4NFK^83TB{i&j}%UUuJ zB(wPpUa$7v=iK8~$Q@#*mY-%70^0_3HhVbq6)%zd-5-7z$_0;Vv3~7ygS;#a zo-HZYcFG1D6IqMaW?hIpVZ^Mf^h$A)UtXLoXlnWU(V9k<)qpuNKpm{BOd+dF#qif|-}O5IfBEf9EAkW0Hh{B4lVc!4K-+r_ zeNlAjy}57WrTl54odKf(V#?jznduh}?qo-~@WV(}G*krz=M0p@L=nwdz<$uW~E~Ek_Ia!B$&69P5lJRkbL`%?Vsg7hgm|Pu^wiuSr#w zujra|VuXjlQG#yB3&QgkZ@s>-SXCmTIw0r-eSvd~Ga;Iy)=ve|bU(7{MRO{rzc763 z3yEFJA)#`Kn-*&t0#BmH4DUku?i;L3z9OeDBc|h2+=n`A2COq{ncm`i))0IAkDh*k zM@1eV+Y>Fe zr+dOHYk5D$g08&+B-P$DUM2VBmIu9Qff^-d@gqMS0tR-UTL7NS_U}P0s{C#lat$B| z0~Ud^LLydPk}<;+)gHpv z4Prsor+y|9(jwe!dRm?7P*amTydc3xE%VfnHj`49F*oIkSOkgC0}jsKCUXP|lEN(i z#%>N8TKuKBFbC7UCmpEKS|K^)9&~UCDDTFmvu$-|-cQXTq#^gNTk4sCbalt^dj30I z=0Sxq!8}1Mf9Wyzx)47R4Jj~b;=A^ZM;PIR!d}>en|tXXYE=FTFr~wJ3jfTVYbz1_ zYM*brajk6-E<@j9|8C1)C@Oo~vC#F0g2KK93wno0$YMM{x z#8C~5C*_YxFVV9mB2|Ov?+P;9z6ZRs!}lwa%O}`RWfy;<$U2i&?%>~thGcgvrkjx! z4Tq_JveL8QAgK;sN_hIwwcS^Ty72qIwj>55c{nfLx?Z&Xi@i;lClyxaL`MXXqCZ^J zm?;=XI7{J%4q`!l!4|BP`$c9r&?QF!8n`kki{bRw$sM;e!>^h+@gNa$Ku5F)k|g{~ zN8DrQzJ5dS2On!z&i>Yut}M<|JR?hpB`tzF3mGS^dJ0}c*CG2M)A6uNI}+smB9V!P zZOXa6UZ3shb;+<>B@(4zo7;Gzlp1Pzb{?ca@_(5aDVNuT!~ByPY2doxPb?aF%sPoC zcWjxG&ktv|{`HoR3~EHUUTpo7XPp#NfrO^J7kI8}Moyvmc!YQ&=Z8;@Gc5D1kwG zbXJv{YzIwSkiSI7!kONMiR(R9#R<$8kjeJ$ z*n7hsWirpQX#uBsJ84J~1`l1Rk_asvJej5h(Y&_5YBOgD1oQu#AS+Ifd7g7vWx|#; zU2}RL@b^HNs}P%ASSV_mo*)qO5LqU9K}vn)#RSgC&bw&|1iXLyQ2j2b$W2_AI39W# z0Iej2oo4*#r_4+)ejD?8y1SD@oavcOO)mCPpAG`z ztn4}NH?i>eb!mL1G`W~{(9p}zBv%@KEY_+EXnLZ=m2$s8}kae=(7O)TZct2UO@#aTt>)g_!^7C7_vd@+8)m0uG zE~XxhCWTLkxh>fF3>>_$b=h~)){(xJs{2TPako}@S`=rja*BHzB|Vs^y!;iUm->7> zAPl^dPy}0#ym-Jy+Wy1cfBkc$bP$zVLW%n?z@hp>MyE1snF+w1>Q$q=pMgtU_zlWB z0>f7ANBe|JGkW8=WfcQkF)qQl-?988*t~)zer1rqA=g!p#hNI9P^Z`lhm;G_&$+m7 znlUoh9iSXew2z;yEe%xPJ;P_-Q#jndyxzEse$a4S)TrhlA|x0 z`1(8X=;6V2FYC2HFKuiYdUC{x(CNaA?3^5^zx#_n3j`iJ$}wXBTajH#5cvJA8fq6Th?EfS~n-R!v(ivkihlK*~WmH)c)R6aK7k?rFm;yp( zhS_V%7nU{99*#2WtPur~F5&^etHFD*-w=e}b7w%M{?6Ay1insvC40giVkPnT+1#KR zu-8eR*EUY#Q30I?LVEqESNZ!smTSvH#(egWz>iqNKH>c+H5D=l__X5X6>MlhMmz;r-h@hVA(MVkGb!vz9mrMFIg$6m7=YD_rW=LQA(1@e!x-O%O zweUg2dBJcW@qiXZQYlYbX7Z;L&t-A3Zr2WkH{WCxM?MpZ9 z)@Nvs{|HgbK9l`|!@ee-7TM)m`6s}Lyg)c~K*DX?rDlUNH@a_jTz4Gjwp-nAnE)*= zM3F()(s%EdDLVQbMhclXcFi}aRwSco)N>LcGW!)Ka28&Djk9>)C`8KjTi%^6a|>&w zW^0wF8N^wW@YbB1vB0h?&2NOypEeTQRA~EJ^DLnQ^Mx+JciY9*(_;0zoD&@TO2ubP zA2Pl^A#(O<1`0dTiYfW73_FP8mQ^PEeeZ2D>?%8bz;`7AE6nRNRJ}PZpPFDtF~jlH zJL#C#KLJX)vd3a_?9X-j+azS1MNRk+ndLH=h?-1_PJ8hrZI$kmxcg$cm$n=tLgmis zkqdp~yz!S=7<_2%lG&3cG2t74<(WzQU*qvJgD7<1Tx z?eHUt=q2>(e6P4$b*<-|MK>8~Iw1ROe)61OrWlLa z<{M?-={GGNSk%(1Q{Hl!p$r(K7&h9pP*tbm+uAn4D6b2$aN9kF3G|LUkIiaYfH~*W{WDo?Dc7KD$ui^~X_IS1K3;n<9o~D%Whei5G);!@ zAF4E6XzFcl@2$5erjqq#FbI5nOh^m#JZ;x3&lRqvS$ODlWRa+a8&2JIC3P=%px*i z7;k1_?~yFGOg5u~pO?jyJQdROwZCPj^#1V8sqHaPb)+oP414&>@2h`wt<&apC2tGf zw@v!a9~OE!%66yIv_-!+s`2!&?>~mEG4#U?S*NzC^Qv~wG_Kyhh^=GKGB5tUBT8j?WMnME=oJjh zysP{G#?dIjY*WYCKj?5AGy74a^K5_RE@86!pe2KKRuuBJnB@}yvvNV!@Kv6QQJf4f z({l$B2OB}9yRk^W1ODjsSt?4hlIGH{6sPydE%M)AeJy!GPGneA^??T3 zHz=i`rbZ$kqSdB2SGRMr`MlY}cr{Pu+Zy$?wPQBJ7vi_v`fIMbT|xXYda9Wc979o8 zX<4vs|4mizoT&rPLDjf>7A0_i20T)u^UA6FT!-?M#h!u&vX^5cPe3+n>77?_hp%+RxWa-bMCPRIESB)(YrY?(A zPI7MpTG^(KhD6!Cj~WIAZiv_LK3`thP71SF88!B~XAJAXF?Y>&ez9DX8rSoO&F)w@ zzus>=Ngu>`vU2|}YCvjxU!rXF!j=1-rB-XEeqwI@Qlq{}M~Xu< z(&UKB!K%ec-iyb}+c@}^l*>7=W%5k*$ZBTuPI5O9Rp$ys@R44{lyw1-l858^StG7u zXA~(PzB*^ukC{$tP140oe3*|Kxi5Huvlr*1PIyuKBENm;>UZ%3Ik&R?fnGLI_5NCf zm=qnAR0w=O{s}RJ2FKfA;cA?0dnkG`G4DEMB-BkjYI6LcwOLD~$Z0z;)G9Z;U2K!q z=toRH6fiW_r$aZc>0m#KY=re0_z6m|+i!oGo7H>UFtQ^_}F)7FYQ5aio17FTPgf4B7Ea}b+*N|^IaEb`-5$S2K(08 zv8IlOhtVo@8MFgYay3)-O|&P9k1eVR53=6nxz^D~6dVv6brGlMVlinpU*Km-ua{u` z-tdg9)ZtE*vRj-LV}^Wa-~ql;*KYV#nZ2bg^S*sfN{h=0Zpy3B_^rw4UJ6noKbsd*3eRqzWEqCWzh-V3`UjDy*AR|aEph)|-}qHn z+o(u$y*20y|2NJ5b~~A$S^sh1Sm-;}BTyW7bGt5|ZO@ysV4C1|_0h(+i1*Y+yiu2cE9ZP?+8+U@u%c4HULW7-1SgC^Acbf57qG$6WB{o6$Vze$**zPE4= zyjsQef9>X<9rtP&$!U%tQx4>D3i#^VGw-@_4zlNZCB?+h3h07PdQg>Ck zy2Q@bGaJi+!(W%_$p9( z$ui&aqLUKZ)d5E)zZfW-!i%zD?PELWhH3ia7!WUNRa?-DEp~R6kUSlipoya7q!Hpo z^3Oxj+;42`j5Ix{VV6cL)G8EPQxZX*a%Tc-L76O@SE5_I`$vgKO@kPtyV&P2ieO#xTk%Cq(A0k&+5n2 zJZnofLQ?Q3tOp=3*+RB=^e|pLiUid@$Q5gmu@cBkS9OYXw}5df?tp3MttS&|XPYM} zuKjl23Nh>^DR-}_xypP$;$|?yl14rZ7J4t7!OUz|s%*0Ns4h*XftWr0B0%o9SwYQ_ zv~NCDd*g>j-b=jwmrK??7qmna6U)yIu}$=7shlh*NM;y(I?^~hsH!T|!EJW0844fe zj9o3~q2STS9Nq4DPm_Jdifw9ovXn}0_=qX2;Ucf6Jlr`^9$o=+QHu&aXM5qAgczwF zGuLjgjG#hwFh#)CgH3e{cNvBCkmZ3**{~$!*3ge#gwW@fz;D&JhYXjWlZtlUDy(-D z4k$}>QVGvUzEj0y?3vy&^$^!bl}l5)yswQlqxx`Ci=S)Q z2au+tN*9ORC+7!sH&wq^8RL+Di>K25BVEc7|F;hJQ`-L&05)0=fHGeeX=BbE;)(5TPekZbzM98s&qJvDuEn3%LsA>z) z-YQ0i^Jj&PWzL9!@4Y|S`wdB0;#ZPZXnwb7m2#sbElIya)s(EW5Px|2BAjDbJ^Akg zdS{B>y}R-!20ot5O(W!IQrj*#5mWQx>?4J6yAO|?wa=);wv1M#sNO-Ifv1X}alv4M zB!usGzJ=p$wZ89g{Cz|K9qUd)m9<3w&`|#M&febGl=;|OyfpHBTMtxKGc2&Mx} z_kMJd+|Qb(CivXFzDYL>`jITLN8EPYJa)-^f~y7=3aaTEjD4ABRBPbiNTG*1eubEL--bXr@zxxt1FGn;SN!3tdGX@#dp6@Pd-wE1ljTW{XJ4FL(COd9>i ztkb}oO9BEdv#vb6yq4Nryd@o-7bCymj?bQcMd5}yyz*l)s`YdFi+JsRPZz&eP*^uRM?zQ%=|M|NOAc$f{bFOzC$=bJqv6iznMHIbvaG?^ zIds6S#K@o3)>KSklPWPeIXp9y8#KX3oB3^WGW+VLdjBMXTeFCDa&jp?$&Y{MrAt&q z5*VJ?7<13d>P@nQEZqM0r_6j4q7t;6()Rg}%*~kyogH`hDH#K>1@PQ)HOf1ULD?WV zW_Tj`m5AR{-k?@8$~`WFZqNk|=taTIV@QsB+A9N(+Gbs|8yYTlcXy9FJhC}|+2c8H z-`9bHf_sC{iYbLeL^K_?7>dcXt*rPO3H!#kGkWgb(|+{m^~ilt^}UNvhP80o3^{gB zzVzrB<-MOje|m3zSpsF)9hU`aZ-PR?mqJE4$5O-yr7^kY&dhpdW-$i`-XOUakDMGg z6!-dd(A&3Xp)ErLGc#xJrZ93IC7l`fJF& zjxtNTlYwx(bHq273rbFJ%qD>z^{xuxH~K+Nq#$Z}r}ptV{LxWA8eQb!!502r3^Ia- zCMPd$mv4o{jov2>UW3RttOPB6Qd~*1|K2gEh4_7Iww0y~>~G=t47!P7((O1XLt}Cv zRdf1$Pt-+|GvE$o(X`zIFa_0oFoqNTqTy|kVgv&ebG85B%g-hv*!_KS?TKUX4*Zm9 zXuG(GnuxF^ikgFN(J4zg%8Z;(k`*y#iLGDW+)UgTiW>iVf4sV^M&R{TQ2KlNIa0nm zMB>Jcb2nM3e>{ISw?VM_Zsc`2N+w$oyr~1_Mt5sig40q{A^b|y!yY2oex*h=^mKG| zM$P0o)S?7 zYHA6lb)KQv6lu3V7Oi;3dl_JVlVk3kezK@U8y`3s#52amOA-dLddz2k?JEbtc%n!` zab2NO{c}SDg-VR1()#7=qe|gOy!B7m1~Kc&ZDu~+rycVZmW3VuqNZP&A2-=1UlozV z4#LzC9KZ)bQEIvxk(GK%GP&!tF$(%mQz{QXc+fO+A)LKaiUww22jP^* z;0D5C&`wK{`G6K`9Z$!5>AVHBKr!ak3HA?o+z0SwE-1^&S2{l?n!w&F7g^bpR{R{f9W;OpH_Z8T$jR$54+zQ{at`uXwkHc_weyoU1qNnZ8qsZkt*5eoR@lkqzn z9~nJfZT*6spqHv7fI6{#`dg0Srg858m}~K6sfU`|rVrPqKF!rn8~=>5Q?f0V$#3{J z_6p7p9nO>lvJtTDx$yaY%fwC0Lc4*2{VVyuO{3v2IuH?X8*vIp@fec@^nZLAV5NA8 zmOS8{(i;s#k80o3+mI2EVFJ?9Ptwc}`#GWJtzKp}+l<+v@sQZ%B6t`967yWxv&DQ> z1vhNZhBHgId0i=s6`?XSjUAaJQb4Yghvv2j_bV^?*eR9h@00a)=Gt|)q?JdW zw1NL=)I?$KOg>v}|4gwOTD<$I1_}^wN-Hdr_^7@vs@L>5dGF|s$QV+>E}|N4nELdf zRhkIhWUVFt$RQ0@hG;J=Jlz1Dx7S~geE7{1lHbcyi{D-K?Ue230d9qdNr_j1B;VNB zuyuAGF?)08qu4u%Q-LE1BG(z~)UvkHd_w0j$4=MN?eb>Sxe83xzdgA%6o+8=&}1;y z|ot-?B^+t`vUSn5E?f6OaJQZ zWZaN^>$I`zRTxdK>7Ucs^y1NIXBg*)*n9i9t4E&_eNKLgAi*-iZ~R1ap{VZeoPn}I zo`Kguk3C{Z3v>YexP_y@1!ix|3o7ziMwh_aB!(0k2(;i z@pt06o*naxwhWJuI?&~42SMq-dcsP|80TR=bmqk2GmKD;uuMQ)UGpi<)zfxITQq)w zRN2@?`k4Xg&P2wWPhr99n8*7r7rS>W{`~y-VlcjZ$WiuG3AMG1=KxiDKx!4-t_y|R z|Jck#Gk&8%H!^~J*RJXtOw*`z|5a+DDn2@2zzB)5i=Ra|p+=-DF}8Rz53?qJzw7ov z2lsiwg0$Z=Fiva#07hiw!OUh`&5QXzmAKj1&lVIeNg~%DPx)bFAu$v3`IlcH=;QP5 zZ((~}-|WwEJE5E}yp{R(pb{oW?y5&OB^-mq7aYM3pgE4@ zGBw;pV9G z$fJM?jD5sr-jyODxIO@rIoR_y56@);B6bI^f8OlJ;ZDR>7>=~F77wY){H7y1uQaNW z1#H)mQW*q{UlvlxlYeDQb)FXNRz6xf0Wy7R*oWglky}<7C%Fq40^b|2byB-Ty-U~W zZ|v?s&{)%*;F>kxtp(9nTzJO`HG7BEgoI{^QxiaOo$&s_T^^6E^R^nB=S?E#AVkeN zZ|Nr$hCHk$fD%vILDYW$}e)w6u9KD8h7LRunV+;BDNNc^i16w_Qx!soa0 z^H7ar$15uJxa4`xF*+V# k2GRa=i=^cKPi?zR+>d(6ELJP=5CVT5C}}E|D_8{mFGtFS<^TWy diff --git a/icons/obj/ammo_bullets.dmi b/icons/obj/ammo_bullets.dmi deleted file mode 100644 index b3e431ecec64291956ce2461586e06b31035d332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3184 zcmY*b2{aVy7az?t5@RdtD4}?nEFol?A-fv;8U|%w$~;-dSSBG`mQo>WDwHK#h%7UT zL=0lcGGiZ07-o{O%-?(e<-Pwo-*@jh_k8EOzu!II{oOCo+|&?!Ozao{000{s=~)5* zY_5k}`zY`*^6t2;(V^=$M_TK*x3^O8(=opepHEHWTrvhUf@s|gNg}=S;|O`LE(3~RC}KX+Fy6Z#HHQ2?PVw_E6&a9 zsd^#J7S{dn^wBqnX~8lw;KyVuG(gEnpw{L4I2d*Z zDFS%H=h&Ak?2^wERBWy30?{dg!yojN+#D|^FqyA}kp}W8P9jkduA$!pZqR@` zFq5?Bqs|HQJ7~y^3v5Kz@JxE+zXm*vR>^!sPx_#j)Tfpax-N%SOfTYT9wR8DJ&~D& z)|TXBxuY56^=19o%Jk-H6T4wiyCNtcR{| z+O6nPKri1?D+l6hpOG6lE0i^LZP8?_stl_kHuPX(om`iy-g&t|TeQ(&^VIv@OFdbS z2%m+-m-F_)sU}(;gvWI(0cTPPscU|{N(-aZoVp@E7YG1w@)_%0vBu>7$OGFA8HvPQ zb1Z&E2TG|5PSzhe^2ElBi%a3C6pLl}<0YX6J?A_@x}iLeU|`;4p2^5*$T;^t+geWN zsAMePU*@c5BGsmdl;F&YtKWOzQ3RW1R_vOQ$lf!Iw{?Zij<I7~^V&s#5Uby&WeExoei6*qKZumQ>beIC-P~hwE>IGZtcc zE|N^S0azzvJK+?(?V1rBu^S8ez%vfeS*Bh8ewP&NU-gcydMNWbgF-VY?o!hR$yRdo zcPYc`+3;YVyfhE&>fI1;I5tWxL>pFjDsPnS2eIkj{Qu6Q^BAHQR;ompd52dwXYN&k zh2DZ&qX!p5Q_N#3@QK8oNh0m~7QLZYOUOAnuk}GiP6tle9%MKSNoh6C#FyWzpxOKc zRs+9RGeETXB~`K*tnj3xI>hNGXR6!Ef`X1~ui$y5tBqX$E&X4qXU>|RZ3^BruaBCY zd#+jl31>Y@%X|t)Ks24dj0B`)cBb~%Fyi~yA7Ol!LACo_2-cb>NrR;jJ%7h--G$z* zA`FiZnQV_!AAN=cSMY+u2C?)d7hyQUkEbDSgu|WVOQoSYdK#QM$zGal&YnZ3s^}?V z3C{m0G%eyW93lkU^(QO_|nNIT(=c9ZXi8 z93^0zO$JlkcWk*_f}9*XdSE{%7G*}pe!j+6ci>*fbNL|D>)E;?;#e%HW@P}JdeX%N zeyS&`aG+ftiIU*1VzbS=PhzG-9lxj)440VW5p^H-!N}LMDH2?Ro*JPPxphGH4B23Q z54F-gP}w~o1i4vJ4K^aX>a1p%Gi5L7_ye6|@g4^WvSj^_2gOeg)Gz7OlH=PpOi-aw zSxJ4Hw*P&7I_5tkZf`z@7vyMq^e@VojcvW}w)#&9l4UY@@W83o{{l|#N4-4j%hvl> z2f<67po8B$`>wPMNfvBSGrVr!YKhj2aWX}R@$jNUfp%#1jwT7<;|WRwZj}2JUzk#r zD3VSGdv3Mz$4s`{<2_^C%veo~5U%djGiiZNg)}fvq|FoO;C-N7mGs!9`2FxCJX*Xz zC_w2TpHCBWB}O!0s{L4H`nTvY%9>22YtgQSSS5uDYWsxxEk^XRIJnDbJ)_&W0=wbP zWzt&pb|!Yfo10P1v1AfhP+*f5fOZ#ZyC=Q%<+vq|2I7!q8s8pxh>x}q=Fg&%=Y;Zz zJNENlasOx#v)FkT@~wcj+VkYf>Aee%Q7H?_#!(I5mG@iQP=4c;!tQ-|_b*JQrt0V= z4#u!eZsB&1ZVRb{GYl6|h#wYIi&ieKcc>M0>PKU4g`c$B2)Q3j*7kOl?_dV<+M%Bw zs>lFXW=Y#uY2YivzPsoj>AZKM91E^1xV*EC^e(o0|SB4;)dke3$>c$PUhIEWPZ zO>NT<;v2g_fAhZYhV;oi)OarjNrtrxu0pw2Ug~7Eei-Y@Ls@u;|8J>U?v zm~HV(0Na@Gp5k+ali6YEV#qm)AQC#^jebj#24yfH;E?9sMqblNS5n8Fs-gK5RO~o; z@(T6_g;*30+&S=fU%vrltsI^qVK!cLQY zry=`Ur(kW6z2sCm4K#c0jR!$F3jY}rf6*^Gla=4~yGGt9*eH*4z@sXqn`0F{`Lov+ zMt^heMs0FI`HvcIXI1y1*&6$M!xYKH?ProS;?9d1%4{FiBS2{NbkA&ZY6h=FVF$ys zB<578x_F9FNN>`3{B(U7124^|!MYX{urbF+ouX(eHEx9J)tGP(0vk~xcVB^;wY0ty z!V2t#*=pS~y65=BoZc>eq)d<663*Xj14?h|a~va45Dwsjk4#thjr0gYqO+bvms-q8 zuHR>mDO?p)G$NEw47sM8l!xFhSBdGiO2l1b&xE=74a*YA zB_id=?lY(7R32sH^@Y>8Ww2+XqSWf5Fh{|a=@!0Er@=~*v})1SiL~fZ*02lUBjrLf zulZ?2csQ>XFswL>K4(&5fcD zNUsBrLE7-z3pWL=E_Rhu|zx3G)~%JQ-=^9P7^Amho9h{T#{W#{K(qTYCo4cmm2 z;k23#oY9eyk@Wq;6RWFxy($3&j7Gj;YHo8%r~9nLc8=c91@#Mg+ts!4sMzKdWwXUE zznL`NvB~iwW_pyhtMBwRch7Hsi_^#TMF}dQ(Bv-uo9!MHO!V diff --git a/icons/obj/ammunition/ammo.dmi b/icons/obj/ammunition/ammo.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b2e6a608e6ae8960427898f3df812aec60d972e6 GIT binary patch literal 37936 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 Z77;(@pXSi&HfurP<>R$?XO(9-`+v?dKso>b literal 0 HcmV?d00001 diff --git a/icons/obj/ammunition/ammo_boxes.dmi b/icons/obj/ammunition/ammo_boxes.dmi new file mode 100644 index 0000000000000000000000000000000000000000..842b5755ed6782f970c06d9cad135adde040cf32 GIT binary patch literal 6570 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 literal 0 HcmV?d00001 diff --git a/icons/obj/ammo_shotshells.dmi b/icons/obj/ammunition/ammo_shotshells.dmi similarity index 100% rename from icons/obj/ammo_shotshells.dmi rename to icons/obj/ammunition/ammo_shotshells.dmi diff --git a/shiptest.dme b/shiptest.dme index 25e890c2a6eb..24cabf11110b 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3022,9 +3022,14 @@ #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\ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm" -#include "code\modules\projectiles\boxes_magazines\premade_ammo_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\_ammo_stack.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\_premade_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_lmg_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_pistol_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_rifle_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_smg_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\shotshell_stacks.dm" #include "code\modules\projectiles\boxes_magazines\external\gauss.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" #include "code\modules\projectiles\boxes_magazines\external\lmg.dm" From eb1489c0dd70e29c68153eb13732fbe113700594 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sun, 29 Sep 2024 10:47:09 -0700 Subject: [PATCH 05/31] a --- .../ammo_stacks/prefab_stacks/_premade_stacks.dm | 1 + .../ammo_stacks/prefab_stacks/premade_smg_stacks.dm | 12 ++++++------ code/modules/vending/security.dm | 2 -- shiptest.dme | 8 +------- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm index 635ae96faf38..0ebc20b3a5ef 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -12,6 +12,7 @@ /obj/item/storage/box/ammo //base type, don't use this! name = "box of default ammo" + icon = 'icons/obj/ammunition/ammo_boxes.dmi' icon_state = "9mmbox" illustration = null foldable = null diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index 041c4ac00c2c..9bf8a48bff52 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -10,20 +10,20 @@ // 4.73x33mm caseless (Solar) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c47x33mm - ammo_type = /obj/item/ammo_casing/c47x33mm + ammo_type = /obj/item/ammo_casing/caseless/c47x33mm // 5.56mm HITP caseless (Pistole C) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm - ammo_type = /obj/item/ammo_casing/c556mm + ammo_type = /obj/item/ammo_casing/caseless/c556mm /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus - ammo_type = /obj/item/ammo_casing/c556mm/surplus + ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap - ammo_type = /obj/item/ammo_casing/c556mm/ap + ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp - ammo_type = /obj/item/ammo_casing/c556mm/hp + ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot - ammo_type = /obj/item/ammo_casing/c556mm/rubbershot + ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 3dfb8f625c0d..1930e17de897 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -12,8 +12,6 @@ /obj/item/assembly/flash/handheld = 5, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, - /obj/item/storage/box/ammo/9mm/rubber = 3, - /obj/item/storage/box/ammo/9mm = 1, /obj/item/stock_parts/cell/gun = 3, /obj/item/clothing/glasses/sunglasses = 2) premium = list( diff --git a/shiptest.dme b/shiptest.dme index 24cabf11110b..ca55661e5662 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3022,14 +3022,8 @@ #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\ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\_ammo_stack.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\_premade_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_lmg_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_pistol_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_rifle_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_smg_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\shotshell_stacks.dm" #include "code\modules\projectiles\boxes_magazines\external\gauss.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" #include "code\modules\projectiles\boxes_magazines\external\lmg.dm" From 98f0c9abd65e73d7ce89b48ff02eee8073f27be2 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 09:58:48 -0700 Subject: [PATCH 06/31] unused var, no sushi stacks --- .../projectiles/ammunition/_ammo_casing.dm | 15 ++++++--------- .../boxes_magazines/ammo_stacks/_ammo_stack.dm | 2 +- .../ammo_stacks/prefab_stacks/_premade_stacks.dm | 3 +-- shiptest.dme | 9 ++++++++- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index b4d44c938b91..23afe19ea294 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -47,8 +47,6 @@ ///What this casing can be stacked into. var/obj/item/ammo_box/magazine/stack_type = /obj/item/ammo_box/magazine/ammo_stack - ///TRUE if the ammo stack is generic and we should give it info based on the casing - var/generic_stacking = TRUE ///Maximum stack size of ammunition var/stack_size = 12 @@ -105,15 +103,15 @@ if(user) to_chat(user, span_warning("[src] can't be stacked.")) return - if(caliber != other_casing.caliber) + if(name != other_casing.name) //Has to match exactly if(user) - to_chat(user, span_warning("You can't stack different calibers.")) + to_chat(user, span_warning("You can't stack different types of ammunition.")) return if(stack_type != other_casing.stack_type) if(user) to_chat(user, span_warning("You can't stack [other_casing] with [src].")) return - if(!BB || !other_casing.BB) + if(!BB || !other_casing.BB) //maybe allow empty casing stacking at a later date, when there's a feature to recycle casings if(user) to_chat(user, span_warning("You can't stack empty casings.")) return @@ -129,10 +127,9 @@ /obj/item/ammo_casing/proc/stack_with(obj/item/ammo_casing/other_casing) var/obj/item/ammo_box/magazine/ammo_stack/ammo_stack = new stack_type(drop_location()) - if(generic_stacking) - ammo_stack.name = "handful of [caliber] rounds" - ammo_stack.base_icon_state = initial(icon_state) - ammo_stack.caliber = caliber + ammo_stack.name = "handful of [name]s" //"handful of .9mm bullet casings" + ammo_stack.base_icon_state = other_casing.icon_state + ammo_stack.caliber = caliber ammo_stack.max_ammo = stack_size ammo_stack.give_round(src) ammo_stack.give_round(other_casing) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm index 852798ec11ac..f1e84780cb1e 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/_ammo_stack.dm @@ -28,7 +28,7 @@ var/image/bullet = image(initial(icon), src, "[base_icon_state]") bullet.pixel_x = rand(-8, 8) bullet.pixel_y = rand(-8, 8) - bullet.transform = bullet.transform.Turn(round(45 * rand(0, 32) / 2)) + bullet.transform = bullet.transform.Turn(round(45 * rand(0, 32) / 2)) //this is the equation Eris uses on their bullet stacks add_overlay(bullet) return UPDATE_ICON_STATE | UPDATE_OVERLAYS diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm index 0ebc20b3a5ef..6f9ae74e61f9 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -1,12 +1,11 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled /obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) - var/obj/item/ammo_casing/to_copy = ammo_type src.top_off() caliber = to_copy.caliber base_icon_state = to_copy.icon_state - name = "handful of [to_copy.caliber] rounds" + name = "handful of [name]s" update_appearance() . = ..() diff --git a/shiptest.dme b/shiptest.dme index ca55661e5662..15bb024014c5 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3022,8 +3022,15 @@ #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\ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\_ammo_stack.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\_premade_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_lmg_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_pistol_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_rifle_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_smg_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_sniper_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\shotshell_stacks.dm" #include "code\modules\projectiles\boxes_magazines\external\gauss.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" #include "code\modules\projectiles\boxes_magazines\external\lmg.dm" From 8922a4264f838ca4f04f80383ea4768bde1c5f38 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 12:13:32 -0700 Subject: [PATCH 07/31] Fully working + Updatepaths --- .../BeachRuins/beach_ancient_ruin.dmm | 1 + .../BeachRuins/beach_fishing_hut.dmm | 2 +- .../BeachRuins/beach_treasure_cove.dmm | 9 +- .../icemoon_underground_abandoned_village.dmm | 2 +- .../JungleRuins/jungle_interceptor.dmm | 2 +- .../LavaRuins/lavaland_crashed_starwalker.dmm | 4 +- .../lavaland_surface_lava_canyon.dmm | 1 + .../RockRuins/rockplanet_budgetcuts.dmm | 1 + .../RockRuins/rockplanet_distillery.dmm | 2 +- .../RockRuins/rockplanet_harmfactory.dmm | 5 +- .../whitesands_surface_camp_combination.dmm | 2 +- .../SpaceRuins/corporate_mining.dmm | 6 +- _maps/RandomRuins/SpaceRuins/onehalf.dmm | 8 +- _maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 4 +- _maps/RandomRuins/SpaceRuins/spacemall.dmm | 4 +- .../WasteRuins/wasteplanet_lab.dmm | 4 +- .../WasteRuins/wasteplanet_pandora.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 6 +- .../independent/independent_dwayne.dmm | 6 +- .../independent/independent_rigger.dmm | 2 +- .../independent/independent_shetland.dmm | 2 +- _maps/shuttles/inteq/inteq_hound.dmm | 2 +- _maps/shuttles/inteq/inteq_valor.dmm | 10 +- _maps/shuttles/inteq/inteq_vaquero.dmm | 1 + .../shuttles/nanotrasen/nanotrasen_heron.dmm | 20 +- .../shuttles/nanotrasen/nanotrasen_ranger.dmm | 10 +- _maps/shuttles/pirate/pirate_tortuga.dmm | 7 +- _maps/shuttles/roumain/srm_elder.dmm | 14 +- _maps/shuttles/solgov/solgov_chronicle.dmm | 2 +- _maps/shuttles/solgov/solgov_inkwell.dmm | 2 +- _maps/shuttles/solgov/solgov_paracelsus.dmm | 2 +- .../syndicate/syndicate_gorlex_hyena.dmm | 6 +- .../syndicate/syndicate_gorlex_komodo.dmm | 2 +- .../syndicate/syndicate_twinkleshine.dmm | 4 +- code/modules/antagonists/gang/outfits.dm | 8 +- .../clothing/outfits/ert/frontiersmen_ert.dm | 10 +- .../hostile/mining_mobs/hivelord_outfits.dm | 4 +- .../projectiles/ammunition/_ammo_casing.dm | 2 +- .../ammunition/ballistic/pistol.dm | 2 +- .../projectiles/boxes_magazines/ammo_boxes.dm | 658 +++++++++--------- .../prefab_stacks/_premade_stacks.dm | 11 +- .../prefab_stacks/premade_gauss_stacks.dm | 41 ++ .../prefab_stacks/premade_pistol_stacks.dm | 471 ++++++++----- .../prefab_stacks/premade_rifle_stacks.dm | 62 +- .../prefab_stacks/premade_smg_stacks.dm | 66 ++ .../prefab_stacks/premade_stacks_misc.dm | 26 + .../prefab_stacks/shotshell_stacks.dm | 47 ++ shiptest.dme | 2 + tools/UpdatePaths/Scripts/3456_ammoboxes.txt | 71 ++ 49 files changed, 1017 insertions(+), 621 deletions(-) create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm create mode 100644 tools/UpdatePaths/Scripts/3456_ammoboxes.txt diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index be52f6a67f46..00da7d5c7a20 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -374,6 +374,7 @@ }, /obj/item/gun/energy/lasercannon{ pixel_y = 5; + }, /obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, diff --git a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm index ab5a6bb58d84..797106c343f8 100644 --- a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm @@ -282,7 +282,7 @@ /turf/open/floor/plating/asteroid/sand, /area/overmap_encounter/planetoid/cave/explored) "mq" = ( -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/structure/closet/crate/wooden, /turf/open/floor/wood, /area/ruin/beach) diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 6e70a81ace49..233b87585e65 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -666,13 +666,8 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/item/ammo_box/c38_box{ - pixel_x = 10; - pixel_y = 8 - }, -/obj/item/ammo_box/c38_box{ - pixel_x = 10 - }, +/obj/item/storage/box/ammo/c38, +/obj/item/storage/box/ammo/c38, /obj/structure/sign/poster/contraband/energy_swords{ pixel_x = -32 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 06d6a8e9fd27..9a89666f99f6 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -383,7 +383,7 @@ "EF" = ( /obj/effect/decal/cleanable/blood/gibs/torso, /obj/structure/safe, -/obj/item/ammo_box/a12g/slug, +/obj/item/storage/box/ammo/a12g_slug, /obj/item/kitchen/knife/combat, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm index 057b0cbdbe8f..97c478357964 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm @@ -3050,7 +3050,7 @@ /obj/item/clothing/under/rank/security/officer/blueshirt, /obj/item/clothing/gloves/combat, /obj/item/clothing/shoes/jackboots, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, /obj/machinery/light/small/broken/directional/north, /obj/effect/turf_decal/corner/transparent/bar/three_quarters{ dir = 4 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm index 138b1e9d31ed..29723481ebea 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm @@ -92,7 +92,7 @@ name = "armory locker"; req_one_access_txt = "1" }, -/obj/item/ammo_box/a12g, +/obj/item/storage/box/ammo/a12g_buckshot, /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered/crashed_starwalker) "bL" = ( @@ -942,7 +942,7 @@ /obj/effect/turf_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/crate/secure/gear, -/obj/item/ammo_box/c10mm/surplus, +/obj/item/storage/box/ammo/c10mm_surplus, /obj/item/weaponcrafting/stock, /obj/item/weaponcrafting/stock{ pixel_x = -6 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index 3efc7429d803..c739b5383772 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -888,6 +888,7 @@ "zb" = ( /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner{ loot = list(/obj/item/melee/transforming/cleaving_saw,/obj/item/gun/energy/kinetic_accelerator,/obj/item/keycard/gatedrop/lavacanyon); + }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/overmap_encounter/planetoid/cave/explored) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index b837eff979f7..794618753c64 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -2746,6 +2746,7 @@ "WY" = ( /obj/structure/frame/computer{ dir = 1; + }, /obj/effect/turf_decal/corner/opaque/red/diagonal, /turf/open/floor/plasteel/tech/techmaint, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm index 0c592a0ac3b4..b97243ffd586 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm @@ -3086,7 +3086,7 @@ pixel_x = -3 }, /obj/item/ammo_box/magazine/illestren_a850r, -/obj/item/ammo_box/c9mm/ap, +/obj/item/storage/box/ammo/c9mm/ap, /obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/co9mm{ start_empty = 1 diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index 8a79949e34b1..98e88d1728ce 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -256,10 +256,7 @@ pixel_x = 5; pixel_y = 7 }, -/obj/item/ammo_box/foambox/riot{ - pixel_x = -3; - pixel_y = -3 - }, +/obj/item/storage/box/ammo/foam_darts/riot, /obj/structure/cable{ icon_state = "4-8" }, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index f59cff023b4a..fca360a36661 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -1302,7 +1302,7 @@ "XP" = ( /obj/structure/table, /obj/item/trash/can, -/obj/item/ammo_box/c45/surplus, +/obj/item/storage/box/ammo/c45_surplus, /turf/open/floor/concrete, /area/ruin) "XS" = ( diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 1c1d689c267a..8a67c83ec183 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -2035,10 +2035,6 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) -"TO" = ( -/obj/structure/spawner/burrow/asteroid, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/space) "TR" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 8 @@ -2803,7 +2799,7 @@ Al Al Al VM -TO +Iv Al Al Al diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 85f087ec38a9..0ee697760b25 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -2034,12 +2034,6 @@ }, /turf/open/space, /area/space/nearstation) -"Ra" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/onehalf) "Rv" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/airless{ @@ -3328,7 +3322,7 @@ UM cp ZX Gv -Ra +Gv cU YE bU diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index b76ae63a86e7..8eacf19414a7 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -2694,8 +2694,8 @@ /obj/structure/closet/crate/secure/weapon{ name = "Ammo Crate" }, -/obj/item/ammo_box/c9mm/surplus, -/obj/item/ammo_box/c9mm/surplus, +/obj/item/storage/box/ammo/c9mm_surplus, +/obj/item/storage/box/ammo/c9mm_surplus, /obj/item/ammo_box/magazine/co9mm, /obj/item/ammo_box/magazine/co9mm, /turf/open/floor/plasteel, diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index 0f5d01fb7de8..c6c1bb9483e4 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -320,7 +320,7 @@ /obj/item/toy/talking/AI{ pixel_x = 20 }, -/obj/item/ammo_box/foambox/riot, +/obj/item/storage/box/ammo/foam_darts/riot, /obj/item/gun/ballistic/shotgun/toy, /turf/open/floor/light, /area/ruin/space/has_grav/spacemall/shop2) @@ -2437,7 +2437,7 @@ /area/ruin/space/has_grav/spacemall) "jm" = ( /obj/structure/rack, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, /obj/item/ammo_box/magazine/co9mm{ pixel_x = 5 }, diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm index b90bfbe776bd..74881aac4697 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm @@ -118,13 +118,13 @@ /area/ruin/powered) "gw" = ( /obj/structure/table, -/obj/item/ammo_box/c45, +/obj/item/storage/box/ammo/c45, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/mono/white, /area/ruin/powered) "gx" = ( /obj/structure/table, -/obj/item/ammo_box/c9mm/rubbershot, +/obj/item/storage/box/ammo/c9mm_rubber, /turf/open/floor/plasteel/mono/white, /area/ruin/powered) "gz" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index f422e4ef1eb8..7f6f09962757 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -23,7 +23,7 @@ /area/ruin/wasteplanet) "bc" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, /turf/open/floor/plating/wasteplanet, /area/ruin/wasteplanet) "bd" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index ff8c37d19e96..f3c8f14c3529 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3043,10 +3043,6 @@ /obj/structure/table/wood, /turf/open/floor/plasteel, /area/wizard_station) -"aEX" = ( -/obj/structure/table/wood, -/turf/open/floor/plasteel, -/area/wizard_station) "aEY" = ( /obj/structure/table/wood, /obj/item/bikehorn/golden{ @@ -23766,7 +23762,7 @@ auE aEc auE aAx -aEX +aEW aqZ aqZ aGr diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index 668e1e164530..0d23bec2cf4d 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -1640,9 +1640,9 @@ /obj/item/kinetic_crusher, /obj/effect/turf_decal/box, /obj/item/vending_refill/mining_equipment, -/obj/item/ammo_box/c38_box, -/obj/item/ammo_box/c38_box, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, +/obj/item/storage/box/ammo/c38, +/obj/item/storage/box/ammo/c38, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index 42a9f999f3f7..b02d71325d33 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -4132,7 +4132,7 @@ name = "ammunition locker"; req_access_txt = "1" }, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/item/ammo_box/magazine/m45/rubber, /obj/item/ammo_box/magazine/m45/rubber, /obj/item/ammo_box/magazine/m45, diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index f147aeb82276..a1f0d155bd79 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -3390,7 +3390,7 @@ req_access_txt = "1"; req_ship_access = 1 }, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/effect/turf_decal/box, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, diff --git a/_maps/shuttles/inteq/inteq_hound.dmm b/_maps/shuttles/inteq/inteq_hound.dmm index da82ccbf26b7..2930db2d34f8 100644 --- a/_maps/shuttles/inteq/inteq_hound.dmm +++ b/_maps/shuttles/inteq/inteq_hound.dmm @@ -50,7 +50,7 @@ pixel_x = -11; pixel_y = 5 }, -/obj/item/ammo_box/a762_40/inteq{ +/obj/item/storage/box/ammo/a762_40/inteq{ pixel_x = 5; pixel_y = 12 }, diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index 0b41578dd31b..8c994477dad4 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -4887,14 +4887,8 @@ /obj/effect/turf_decal/corner/opaque/yellow, /obj/structure/rack, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/ammo_box/c9mm/rubbershot{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/item/ammo_box/c9mm{ - pixel_x = -2; - pixel_y = 2 - }, +/obj/item/storage/box/ammo/c9mm_rubber, +/obj/item/storage/box/ammo/c9mm, /obj/machinery/light/small/directional/north, /obj/structure/sign/poster/official/safety_report{ pixel_x = 32 diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index 9e8f7d6c81f5..da37f649eba2 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -266,6 +266,7 @@ /obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ pixel_x = -4; pixel_y = 5; + }, /obj/item/gun/ballistic/automatic/pistol/commander/inteq, /obj/item/gun/ballistic/automatic/pistol/commander/inteq{ diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index 0a0c9dead99f..3896264ed190 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -13071,22 +13071,10 @@ pixel_x = 5; pixel_y = 4 }, -/obj/item/ammo_box/c9mm{ - pixel_x = 4; - pixel_y = -6 - }, -/obj/item/ammo_box/c9mm{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/ammo_box/c9mm{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/ammo_box/c9mm/ap{ - pixel_y = 17; - pixel_x = 4 - }, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm/ap, /obj/item/stock_parts/cell/gun{ pixel_x = -3; pixel_y = -5 diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 342ffb8fa928..89eb847f1019 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -187,8 +187,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/belt/security/webbing, /obj/item/storage/pistolcase/commander, @@ -3127,9 +3127,9 @@ pixel_x = 7; pixel_y = -20 }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm/rubbershot, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm_rubber, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/pistolcase/commander, /obj/item/storage/pistolcase/egun, diff --git a/_maps/shuttles/pirate/pirate_tortuga.dmm b/_maps/shuttles/pirate/pirate_tortuga.dmm index 4bc354b31b5c..11314e99af91 100644 --- a/_maps/shuttles/pirate/pirate_tortuga.dmm +++ b/_maps/shuttles/pirate/pirate_tortuga.dmm @@ -667,10 +667,7 @@ /area/ship/security/armory) "hU" = ( /obj/structure/rack, -/obj/item/ammo_box/c45{ - pixel_x = -9; - pixel_y = 8 - }, +/obj/item/storage/box/ammo/c45, /obj/item/storage/toolbox/ammo/a762_40{ pixel_x = 5; pixel_y = 6 @@ -3141,7 +3138,7 @@ /obj/item/clothing/shoes/jackboots{ pixel_y = -13 }, -/obj/item/ammo_box/c38_box/surplus, +/obj/item/storage/box/ammo/c38_surplus, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/nanoweave, /area/ship/crew/crewtwo) diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index 5ef138ad19db..3c6f7ec802f4 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -337,18 +337,12 @@ pixel_y = 14; pixel_x = 5 }, -/obj/item/ammo_box/c38_box{ - pixel_x = -6; - pixel_y = 7 - }, +/obj/item/storage/box/ammo/c38, /obj/item/ammo_box/magazine/illestren_a850r{ pixel_x = 8; pixel_y = 6 }, -/obj/item/ammo_box/c38_box{ - pixel_x = -6; - pixel_y = 1 - }, +/obj/item/storage/box/ammo/c38, /obj/item/ammo_box/magazine/illestren_a850r{ pixel_x = 8 }, @@ -2025,7 +2019,7 @@ pixel_x = -7 }, /obj/item/storage/backpack/satchel/leather, -/obj/item/ammo_box/a44roum, +/obj/item/storage/box/ammo/a44roum, /obj/item/storage/pistolcase/montagne, /obj/item/clothing/accessory/waistcoat/roumain, /turf/open/floor/wood/mahogany, @@ -2698,7 +2692,7 @@ /obj/item/gun/ballistic/revolver/detective, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/item/clothing/head/cowboy/sec/roumain/colligne, /obj/item/clothing/suit/armor/roumain/colligne, /obj/structure/closet/secure_closet/collignes, diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index 012261bda246..63ffd6f57805 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -273,7 +273,7 @@ /obj/item/spacecash/bundle/loadsamoney, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/carpet/royalblue, /area/ship/crew/office) "cg" = ( diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index 86781cc2e251..bfb513b5bc64 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -5860,7 +5860,7 @@ /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/wood/maple, /area/ship/crew/dorm/dormtwo) "LJ" = ( diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index 1235af6da913..c055c60f9308 100644 --- a/_maps/shuttles/solgov/solgov_paracelsus.dmm +++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm @@ -3582,7 +3582,7 @@ /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/carpet/royalblue, /area/ship/crew) "IZ" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index ae46dc0286f3..0f0d0fa2ec63 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -65,7 +65,7 @@ /obj/item/ammo_box/a357/match, /obj/item/pen/edagger, /obj/item/storage/pistolcase/a357, -/obj/item/ammo_box/a357_box, +/obj/item/storage/box/ammo/a357, /turf/open/floor/carpet/black, /area/ship/bridge) "bJ" = ( @@ -301,8 +301,8 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/industrial/outline, -/obj/item/ammo_box/a12g, -/obj/item/ammo_box/c10mm, +/obj/item/storage/box/ammo/a12g_buckshot, +/obj/item/storage/box/ammo/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) "fC" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index bfbdc4e43e04..fce641e8daf8 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -2880,7 +2880,7 @@ }, /obj/item/ammo_box/magazine/m10mm, /obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/c10mm, +/obj/item/storage/box/ammo/c10mm, /obj/item/clothing/gloves/tackler/combat/insulated, /obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 1adef58948fe..3cc496ae3b38 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -121,7 +121,7 @@ name = "Armory Access"; req_access = list(3,150) }, -/obj/item/ammo_box/c10mm, +/obj/item/storage/box/ammo/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security) "aE" = ( @@ -7332,7 +7332,7 @@ }, /obj/item/storage/belt/sabre/solgov, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/mineral/plastitanium, /area/ship/bridge) "Qv" = ( diff --git a/code/modules/antagonists/gang/outfits.dm b/code/modules/antagonists/gang/outfits.dm index ae16ec956470..714da806cba1 100644 --- a/code/modules/antagonists/gang/outfits.dm +++ b/code/modules/antagonists/gang/outfits.dm @@ -31,9 +31,7 @@ backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, - /obj/item/shield/riot/tele = 1, - /obj/item/ammo_box/magazine/m45 = 3, - /obj/item/ammo_box/c45 = 2) + /obj/item/shield/riot/tele = 1) /datum/outfit/families_police/beatcop/armored @@ -65,9 +63,7 @@ backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, - /obj/item/shield/riot/tele = 1, - /obj/item/ammo_box/magazine/smgm9mm = 3, - /obj/item/ammo_box/c9mm = 2) + /obj/item/shield/riot/tele = 1) /datum/outfit/families_police/beatcop/military name = "Families: Space Military" diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index b3a2b20f687c..7133f6bbd762 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -89,11 +89,11 @@ var/loops = rand(1,3) for(var/i in 1 to loops) var/ammotype = pick(list( - /obj/item/ammo_box/c8x50mm_box, - /obj/item/ammo_box/c45, - /obj/item/ammo_box/a357_box, - /obj/item/ammo_box/c45, - /obj/item/ammo_box/a4570, + /obj/item/storage/box/ammo/a8_50r, + /obj/item/storage/box/ammo/c45, + /obj/item/storage/box/ammo/a357, + /obj/item/storage/box/ammo/c45, + /obj/item/storage/box/ammo/a4570, /obj/item/stock_parts/cell/gun/mini)) backpack_contents += ammotype diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm index 09d85a664e86..fefb26d24c0e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -463,8 +463,8 @@ /obj/item/assembly/flash/handheld = 5, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, - /obj/item/ammo_box/c9mm/rubbershot = 3, - /obj/item/ammo_box/c9mm = 1, + /obj/item/storage/box/ammo/c9mm_rubber = 3, + /obj/item/storage/box/ammo/c9mm = 1, /obj/item/stock_parts/cell/gun = 3, /obj/item/coin/antagtoken = 1, /obj/item/grenade/stingbang = 1 diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 23afe19ea294..19e1965939b9 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -167,7 +167,7 @@ desc = "[initial(desc)][BB ? null : " This one is spent."]" return ..() -//proc to magically refill a casing with a new projectile +///Proc to magically refill a casing with a new projectile /obj/item/ammo_casing/proc/newshot() //For energy weapons, syringe gun, shotgun shells and wands (!). if(!BB) BB = new projectile_type(src, src) diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 63a95e072a80..c9105f0a4adb 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -58,7 +58,7 @@ name = "9mm armor-piercing bullet casing" desc = "A 9mm armor-piercing bullet casing." bullet_skin = "ap" - projectile_type =/obj/projectile/bullet/c9mm/ap + projectile_type = /obj/projectile/bullet/c9mm/ap /obj/item/ammo_casing/c9mm/hp name = "9mm hollow point bullet casing" diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 955856704ac6..afa2baed7324 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -26,55 +26,54 @@ desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." ammo_type = /obj/item/ammo_casing/a357/hp -/obj/item/ammo_box/a357_box - name = "ammo box (.357)" - desc = "A box of standard .357 ammo." - icon_state = "357box" - ammo_type = /obj/item/ammo_casing/a357 - max_ammo = 50 - -/obj/item/ammo_box/a357_box/match - name = "ammo box (.357)" - desc = "A box of match .357 ammo." - icon_state = "357box-match" - ammo_type = /obj/item/ammo_casing/a357/match - max_ammo = 50 - -/obj/item/ammo_box/a357_box/hp - name = "ammo box (.357)" - desc = "A box of hollow point .357 ammo." - icon_state = "357box-hp" - ammo_type = /obj/item/ammo_casing/a357/hp - max_ammo = 50 +// /obj/item/ammo_box/a357_box +// name = "ammo box (.357)" +// desc = "A box of standard .357 ammo." +// icon_state = "357box" +// ammo_type = /obj/item/ammo_casing/a357 +// max_ammo = 50 + +// /obj/item/ammo_box/a357_box/match +// name = "ammo box (.357)" +// desc = "A box of match .357 ammo." +// icon_state = "357box-match" +// ammo_type = /obj/item/ammo_casing/a357/match +// max_ammo = 50 + +// /obj/item/ammo_box/a357_box/hp +// name = "ammo box (.357)" +// desc = "A box of hollow point .357 ammo." +// icon_state = "357box-hp" +// ammo_type = /obj/item/ammo_casing/a357/hp +// max_ammo = 50 // .45-70 Ammo Holders (Hunting Revolver) -/obj/item/ammo_box/a4570 - name = "ammo box (.45-70)" - desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." - icon_state = "4570" - ammo_type = /obj/item/ammo_casing/a4570 - max_ammo = 12 - -/obj/item/ammo_box/a4570/match - name = "ammo box (.45-70 match)" - desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." - icon_state = "4570-match" - ammo_type = /obj/item/ammo_casing/a4570/match +// /obj/item/ammo_box/a4570 +// name = "ammo box (.45-70)" +// desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." +// icon_state = "4570" +// ammo_type = /obj/item/ammo_casing/a4570 +// max_ammo = 12 +// /obj/item/ammo_box/a4570/match +// name = "ammo box (.45-70 match)" +// desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." +// icon_state = "4570-match" +// ammo_type = /obj/item/ammo_casing/a4570/match -/obj/item/ammo_box/a4570/hp - name = "ammo box (.45-70 hollow point)" - desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." - icon_state = "4570-hp" - ammo_type = /obj/item/ammo_casing/a4570/hp +// /obj/item/ammo_box/a4570/hp +// name = "ammo box (.45-70 hollow point)" +// desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." +// icon_state = "4570-hp" +// ammo_type = /obj/item/ammo_casing/a4570/hp -/obj/item/ammo_box/a4570/explosive - name = "ammo box (.45-70 explosive)" - desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." - icon_state = "4570-explosive" - ammo_type = /obj/item/ammo_casing/a4570/explosive +// /obj/item/ammo_box/a4570/explosive +// name = "ammo box (.45-70 explosive)" +// desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." +// icon_state = "4570-explosive" +// ammo_type = /obj/item/ammo_casing/a4570/explosive // .38 special Speed Loaders (Colt Detective Special) @@ -139,7 +138,7 @@ // .308 Stripper Clip (Vickland) /obj/item/ammo_box/vickland_a308 - name = "stripper clip (.308)" + name = "stripper clip (.308)" desc = "A 5-round stripper clip for the Vickland Battle Rifle. The Vickland itself has a 10 round capacity, so keep in mind two of these are needed to fully reload it. These rounds do good damage with significant armor penetration." icon_state = "stripper_308-5" base_icon_state = "stripper_308" @@ -149,7 +148,6 @@ w_class = WEIGHT_CLASS_TINY instant_load = TRUE - // .300 Magnum Stripper Clip (Scout) /obj/item/ammo_box/a300 @@ -192,185 +190,185 @@ // Ammo Boxes -/obj/item/ammo_box/c38_box - name = "ammo box (.38)" - desc = "A box of standard .38 Special ammo." - icon_state = "38box" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 50 - -/obj/item/ammo_box/c38_box/surplus - name = "ammo box (.38 surplus)" - desc = "A box of low-quality .38 Special ammo." - icon_state = "38box-surplus" - ammo_type = /obj/item/ammo_casing/c38/surplus - -/obj/item/ammo_box/a12g - name = "ammo box (12g buckshot)" - desc = "A box of 12-gauge buckshot shells, devastating at close range." - icon_state = "12gbox-buckshot" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 25 - -/obj/item/ammo_box/a12g/slug - name = "ammo box (12g slug)" - desc = "A box of 12-gauge slugs, for improved accuracy and penetration." - icon_state = "12gbox-slug" - ammo_type = /obj/item/ammo_casing/shotgun - -/obj/item/ammo_box/a12g/beanbag - name = "ammo box (12g beanbag)" - desc = "A box of 12-gauge beanbag shells, for incapacitating targets." - icon_state = "12gbox-beanbag" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -/obj/item/ammo_box/a12g/rubbershot - name = "ammo box (12g rubbershot)" - desc = "A box of 12-gauge rubbershot shells, designed for riot control." - icon_state = "12gbox-rubbershot" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - -/obj/item/ammo_box/c9mm - name = "ammo box (9mm)" - desc = "A box of standard 9mm ammo." - icon_state = "9mmbox" - ammo_type = /obj/item/ammo_casing/c9mm - max_ammo = 50 - -/obj/item/ammo_box/c9mm/surplus - name = "ammo box (9mm surplus)" - desc = "A box of low-quality 9mm ammo." - icon_state = "9mmbox-surplus" - ammo_type = /obj/item/ammo_casing/c9mm/surplus - -/obj/item/ammo_box/c9mm/rubbershot - name = "ammo box (9mm rubbershot)" - desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "9mmbox-rubbershot" - ammo_type = /obj/item/ammo_casing/c9mm/rubber - -/obj/item/ammo_box/c9mm/ap - name = "ammo box (9mm armor-piercing)" - desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "9mmbox-ap" - ammo_type = /obj/item/ammo_casing/c9mm/ap - -/obj/item/ammo_box/c9mm/hp - name = "ammo box (9mm hollow point)" - desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "9mmbox-hp" - ammo_type = /obj/item/ammo_casing/c9mm/hp - -/obj/item/ammo_box/c9mm/fire - name = "ammo box (9mm incendiary)" - desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "9mmbox-incendiary" - ammo_type = /obj/item/ammo_casing/c9mm/inc - -/obj/item/ammo_box/c10mm - name = "ammo box (10mm)" - desc = "A box of standard 10mm ammo." - icon_state = "10mmbox" - ammo_type = /obj/item/ammo_casing/c10mm - max_ammo = 50 - -/obj/item/ammo_box/c10mm/surplus - name = "ammo box (10mm surplus)" - desc = "A box of low-quality 10mm ammo." - icon_state = "10mmbox-surplus" - ammo_type = /obj/item/ammo_casing/c10mm/surplus - -/obj/item/ammo_box/c10mm/rubbershot - name = "ammo box (10mm rubbershot)" - desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "10mmbox-rubbershot" - ammo_type = /obj/item/ammo_casing/c9mm/rubber - -/obj/item/ammo_box/c10mm/ap - name = "ammo box (10mm armor-piercing)" - desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "10mmbox-ap" - ammo_type = /obj/item/ammo_casing/c10mm/ap - -/obj/item/ammo_box/c10mm/hp - name = "ammo box (10mm hollow point)" - desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "10mmbox-hp" - ammo_type = /obj/item/ammo_casing/c10mm/hp - -/obj/item/ammo_box/c10mm/fire - name = "ammo box (10mm incendiary)" - desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "10mmbox-incendiary" - ammo_type = /obj/item/ammo_casing/c10mm/inc - -/obj/item/ammo_box/c45 - name = "ammo box (.45)" - desc = "A box of standard .45 ammo." - icon_state = "45box" - ammo_type = /obj/item/ammo_casing/c45 - max_ammo = 50 - -/obj/item/ammo_box/c45/surplus - name = "ammo box (.45 surplus)" - desc = "A box of low-quality .45 ammo." - icon_state = "45box-surplus" - ammo_type = /obj/item/ammo_casing/c45/surplus - -/obj/item/ammo_box/c45/rubbershot - name = "ammo box (.45 rubbershot)" - desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "45box-rubbershot" - ammo_type = /obj/item/ammo_casing/c45/rubber - -/obj/item/ammo_box/c45/ap - name = "ammo box (.45 armor-piercing)" - desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "45box-ap" - ammo_type = /obj/item/ammo_casing/c45/ap - -/obj/item/ammo_box/c45/hp - name = "ammo box (.45 hollow point)" - desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "45box-hp" - ammo_type = /obj/item/ammo_casing/c45/hp - -/obj/item/ammo_box/c45/fire - name = "ammo box (.45 incendiary)" - desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "45box-incendiary" - ammo_type = /obj/item/ammo_casing/c45/inc - -/obj/item/ammo_box/c556mmHITP - name = "ammo box (5.56mm HITP caseless)" - desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." - icon_state = "556mmHITPbox" - ammo_type = /obj/item/ammo_casing/caseless/c556mm - max_ammo = 50 - -/obj/item/ammo_box/c556mmHITP/surplus - name = "ammo box (5.56mm HITP caseless surplus)" - desc = "A box of low-quality 5.56mm HITP caseless ammo." - icon_state = "556mmHITPbox-surplus" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus - -/obj/item/ammo_box/c556mmHITP/rubbershot - name = "ammo box (5.56mm HITP caseless rubbershot)" - desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "556mmHITPbox-rubbershot" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot - -/obj/item/ammo_box/c556mmHITP/ap - name = "ammo box (5.56mm HITP caseless armor-piercing)" - desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "556mmHITPbox-ap" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap - -/obj/item/ammo_box/c556mmHITP/hp - name = "ammo box (5.56mm HITP caseless hollow point)" - desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "556mmHITPbox-hp" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp +// /obj/item/ammo_box/c38_box +// name = "ammo box (.38)" +// desc = "A box of standard .38 Special ammo." +// icon_state = "38box" +// ammo_type = /obj/item/ammo_casing/c38 +// max_ammo = 50 + +// /obj/item/ammo_box/c38_box/surplus +// name = "ammo box (.38 surplus)" +// desc = "A box of low-quality .38 Special ammo." +// icon_state = "38box-surplus" +// ammo_type = /obj/item/ammo_casing/c38/surplus + +// /obj/item/ammo_box/a12g +// name = "ammo box (12g buckshot)" +// desc = "A box of 12-gauge buckshot shells, devastating at close range." +// icon_state = "12gbox-buckshot" +// ammo_type = /obj/item/ammo_casing/shotgun/buckshot +// max_ammo = 25 + +// /obj/item/ammo_box/a12g/slug +// name = "ammo box (12g slug)" +// desc = "A box of 12-gauge slugs, for improved accuracy and penetration." +// icon_state = "12gbox-slug" +// ammo_type = /obj/item/ammo_casing/shotgun + +// /obj/item/ammo_box/a12g/beanbag +// name = "ammo box (12g beanbag)" +// desc = "A box of 12-gauge beanbag shells, for incapacitating targets." +// icon_state = "12gbox-beanbag" +// ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +// /obj/item/ammo_box/a12g/rubbershot +// name = "ammo box (12g rubbershot)" +// desc = "A box of 12-gauge rubbershot shells, designed for riot control." +// icon_state = "12gbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + +// /obj/item/ammo_box/c9mm +// name = "ammo box (9mm)" +// desc = "A box of standard 9mm ammo." +// icon_state = "9mmbox" +// ammo_type = /obj/item/ammo_casing/c9mm +// max_ammo = 50 + +// /obj/item/ammo_box/c9mm/surplus +// name = "ammo box (9mm surplus)" +// desc = "A box of low-quality 9mm ammo." +// icon_state = "9mmbox-surplus" +// ammo_type = /obj/item/ammo_casing/c9mm/surplus + +// /obj/item/ammo_box/c9mm/rubbershot +// name = "ammo box (9mm rubbershot)" +// desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "9mmbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/c9mm/rubber + +// /obj/item/ammo_box/c9mm/ap +// name = "ammo box (9mm armor-piercing)" +// desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "9mmbox-ap" +// ammo_type = /obj/item/ammo_casing/c9mm/ap + +// /obj/item/ammo_box/c9mm/hp +// name = "ammo box (9mm hollow point)" +// desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "9mmbox-hp" +// ammo_type = /obj/item/ammo_casing/c9mm/hp + +// /obj/item/ammo_box/c9mm/fire +// name = "ammo box (9mm incendiary)" +// desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." +// icon_state = "9mmbox-incendiary" +// ammo_type = /obj/item/ammo_casing/c9mm/inc + +// /obj/item/ammo_box/c10mm +// name = "ammo box (10mm)" +// desc = "A box of standard 10mm ammo." +// icon_state = "10mmbox" +// ammo_type = /obj/item/ammo_casing/c10mm +// max_ammo = 50 + +// /obj/item/ammo_box/c10mm/surplus +// name = "ammo box (10mm surplus)" +// desc = "A box of low-quality 10mm ammo." +// icon_state = "10mmbox-surplus" +// ammo_type = /obj/item/ammo_casing/c10mm/surplus + +// /obj/item/ammo_box/c10mm/rubbershot +// name = "ammo box (10mm rubbershot)" +// desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "10mmbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/c9mm/rubber + +// /obj/item/ammo_box/c10mm/ap +// name = "ammo box (10mm armor-piercing)" +// desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "10mmbox-ap" +// ammo_type = /obj/item/ammo_casing/c10mm/ap + +// /obj/item/ammo_box/c10mm/hp +// name = "ammo box (10mm hollow point)" +// desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "10mmbox-hp" +// ammo_type = /obj/item/ammo_casing/c10mm/hp + +// /obj/item/ammo_box/c10mm/fire +// name = "ammo box (10mm incendiary)" +// desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." +// icon_state = "10mmbox-incendiary" +// ammo_type = /obj/item/ammo_casing/c10mm/inc + +// /obj/item/ammo_box/c45 +// name = "ammo box (.45)" +// desc = "A box of standard .45 ammo." +// icon_state = "45box" +// ammo_type = /obj/item/ammo_casing/c45 +// max_ammo = 50 + +// /obj/item/ammo_box/c45/surplus +// name = "ammo box (.45 surplus)" +// desc = "A box of low-quality .45 ammo." +// icon_state = "45box-surplus" +// ammo_type = /obj/item/ammo_casing/c45/surplus + +// /obj/item/ammo_box/c45/rubbershot +// name = "ammo box (.45 rubbershot)" +// desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "45box-rubbershot" +// ammo_type = /obj/item/ammo_casing/c45/rubber + +// /obj/item/ammo_box/c45/ap +// name = "ammo box (.45 armor-piercing)" +// desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "45box-ap" +// ammo_type = /obj/item/ammo_casing/c45/ap + +// /obj/item/ammo_box/c45/hp +// name = "ammo box (.45 hollow point)" +// desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "45box-hp" +// ammo_type = /obj/item/ammo_casing/c45/hp + +// /obj/item/ammo_box/c45/fire +// name = "ammo box (.45 incendiary)" +// desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." +// icon_state = "45box-incendiary" +// ammo_type = /obj/item/ammo_casing/c45/inc + +// /obj/item/ammo_box/c556mmHITP +// name = "ammo box (5.56mm HITP caseless)" +// desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." +// icon_state = "556mmHITPbox" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm +// max_ammo = 50 + +// /obj/item/ammo_box/c556mmHITP/surplus +// name = "ammo box (5.56mm HITP caseless surplus)" +// desc = "A box of low-quality 5.56mm HITP caseless ammo." +// icon_state = "556mmHITPbox-surplus" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus + +// /obj/item/ammo_box/c556mmHITP/rubbershot +// name = "ammo box (5.56mm HITP caseless rubbershot)" +// desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "556mmHITPbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot + +// /obj/item/ammo_box/c556mmHITP/ap +// name = "ammo box (5.56mm HITP caseless armor-piercing)" +// desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "556mmHITPbox-ap" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap + +// /obj/item/ammo_box/c556mmHITP/hp +// name = "ammo box (5.56mm HITP caseless hollow point)" +// desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "556mmHITPbox-hp" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp /obj/item/ammo_box/a40mm name = "ammo box (40mm grenades)" @@ -380,44 +378,93 @@ multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_NORMAL -/obj/item/ammo_box/a762_40 - name = "ammo box (7.62x40mm CLIP)" - icon_state = "a762_40box_big" - ammo_type = /obj/item/ammo_casing/a762_40 - max_ammo = 120 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/ammo_box/a762_40/inteq - icon_state = "a762_40box_big_inteq" - -/obj/item/ammo_box/a308 - name = "ammo box (.308)" - icon_state = "a308box" - ammo_type = /obj/item/ammo_casing/a308 - max_ammo = 30 - -/obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships - icon_state = "a308box-HP" - -/obj/item/ammo_box/foambox - name = "ammo box (Foam Darts)" - icon = 'icons/obj/guns/toy.dmi' - icon_state = "foambox" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - max_ammo = 40 - custom_materials = list(/datum/material/iron = 500) - -/obj/item/ammo_box/foambox/riot - icon_state = "foambox_riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - custom_materials = list(/datum/material/iron = 50000) - -/obj/item/ammo_box/c22lr_box - name = "ammo box (.22 LR)" - desc = "A box of standard .22 LR ammo." - icon_state = "22lrbox" - ammo_type = /obj/item/ammo_casing/c22lr - max_ammo = 75 +// /obj/item/ammo_box/a762_40 +// name = "ammo box (7.62x40mm CLIP)" +// icon_state = "a762_40box_big" +// ammo_type = /obj/item/ammo_casing/a762_40 +// max_ammo = 120 +// w_class = WEIGHT_CLASS_NORMAL + +// /obj/item/ammo_box/a762_40/inteq +// icon_state = "a762_40box_big_inteq" + +// /obj/item/ammo_box/a308 +// name = "ammo box (.308)" +// icon_state = "a308box" +// ammo_type = /obj/item/ammo_casing/a308 +// max_ammo = 30 + +// /obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships +// icon_state = "a308box-HP" + +// /obj/item/ammo_box/foambox +// name = "ammo box (Foam Darts)" +// icon = 'icons/obj/guns/toy.dmi' +// icon_state = "foambox" +// ammo_type = /obj/item/ammo_casing/caseless/foam_dart +// max_ammo = 40 +// custom_materials = list(/datum/material/iron = 500) + +// /obj/item/ammo_box/foambox/riot +// icon_state = "foambox_riot" +// ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot +// custom_materials = list(/datum/material/iron = 50000) + +// /obj/item/ammo_box/c22lr_box +// name = "ammo box (.22 LR)" +// desc = "A box of standard .22 LR ammo." +// icon_state = "22lrbox" +// ammo_type = /obj/item/ammo_casing/c22lr +// max_ammo = 75 + +// /obj/item/ammo_box/c46x30mm_box +// name = "ammo box (4.6x30mm)" +// desc = "A box of standard 4.6x30mm ammo." +// icon_state = "46x30mmbox" +// ammo_type = /obj/item/ammo_casing/c46x30mm +// max_ammo = 50 + +// /obj/item/ammo_box/c8x50mm_box +// name = "ammo box (8x50mm)" +// desc = "A box of standard 8x50mm ammo." +// icon_state = "8x50mmbox" +// ammo_type = /obj/item/ammo_casing/a8_50r +// max_ammo = 20 + +// /obj/item/ammo_box/ferropelletbox +// name = "ammo box (ferromagnetic pellets)" +// desc = "A box of ferromagnetic pellets." +// icon_state = "ferropelletsbox" +// ammo_type = /obj/item/ammo_casing/caseless/gauss +// max_ammo = 50 + +// /obj/item/ammo_box/ferroslugbox +// name = "ammo box (ferromagnetic slugs)" +// desc = "A box of standard ferromagnetic slugs." +// icon_state = "ferroslugsbox" +// ammo_type = /obj/item/ammo_casing/caseless/gauss/slug +// max_ammo = 20 + +// /obj/item/ammo_box/ferrolancebox +// name = "ammo box (ferromagnetic lances)" +// desc = "A box of standard ferromagnetic lances." +// icon_state = "ferrolancesbox" +// ammo_type = /obj/item/ammo_casing/caseless/gauss/lance +// max_ammo = 50 + +// /obj/item/ammo_box/c8x50mmhp_box +// name = "ammo box (8x50mm)" +// desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." +// icon_state = "8x50mmbox-hp" +// ammo_type = /obj/item/ammo_casing/a8_50rhp +// max_ammo = 20 + +// /obj/item/ammo_box/a300_box +// name = "ammo box (.300 Magnum)" +// desc = "A box of standard .300 Magnum ammo." +// icon_state = "300box" +// ammo_type = /obj/item/ammo_casing/a300 +// max_ammo = 20 /obj/item/ammo_box/a44roum_speedloader name = "speed loader (.44)" @@ -435,72 +482,23 @@ /obj/item/ammo_box/a44roum_speedloader/empty start_empty = TRUE -/obj/item/ammo_box/c46x30mm_box - name = "ammo box (4.6x30mm)" - desc = "A box of standard 4.6x30mm ammo." - icon_state = "46x30mmbox" - ammo_type = /obj/item/ammo_casing/c46x30mm - max_ammo = 50 - -/obj/item/ammo_box/c8x50mm_box - name = "ammo box (8x50mm)" - desc = "A box of standard 8x50mm ammo." - icon_state = "8x50mmbox" - ammo_type = /obj/item/ammo_casing/a8_50r - max_ammo = 20 - -/obj/item/ammo_box/ferropelletbox - name = "ammo box (ferromagnetic pellets)" - desc = "A box of ferromagnetic pellets." - icon_state = "ferropelletsbox" - ammo_type = /obj/item/ammo_casing/caseless/gauss - max_ammo = 50 - -/obj/item/ammo_box/ferroslugbox - name = "ammo box (ferromagnetic slugs)" - desc = "A box of standard ferromagnetic slugs." - icon_state = "ferroslugsbox" - ammo_type = /obj/item/ammo_casing/caseless/gauss/slug - max_ammo = 20 - -/obj/item/ammo_box/ferrolancebox - name = "ammo box (ferromagnetic lances)" - desc = "A box of standard ferromagnetic lances." - icon_state = "ferrolancesbox" - ammo_type = /obj/item/ammo_casing/caseless/gauss/lance - max_ammo = 50 - -/obj/item/ammo_box/c8x50mmhp_box - name = "ammo box (8x50mm)" - desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." - icon_state = "8x50mmbox-hp" - ammo_type = /obj/item/ammo_casing/a8_50rhp - max_ammo = 20 - -/obj/item/ammo_box/a300_box - name = "ammo box (.300 Magnum)" - desc = "A box of standard .300 Magnum ammo." - icon_state = "300box" - ammo_type = /obj/item/ammo_casing/a300 - max_ammo = 20 - -/obj/item/ammo_box/a44roum - name = "ammo box (.44 roumain)" - desc = "A box of standard .44 roumain ammo." - icon_state = "a44roum" - ammo_type = /obj/item/ammo_casing/a44roum - max_ammo = 50 - -/obj/item/ammo_box/a44roum/rubber - name = "ammo box (.44 roumain rubber)" - desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "a44roum-rubber" - ammo_type = /obj/item/ammo_casing/a44roum/rubber - max_ammo = 50 - -/obj/item/ammo_box/a44roum/hp - name = "ammo box (.44 roumain hollow point)" - desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." - icon_state = "a44roum-hp" - ammo_type = /obj/item/ammo_casing/a44roum/hp - max_ammo = 50 +// /obj/item/ammo_box/a44roum +// name = "ammo box (.44 roumain)" +// desc = "A box of standard .44 roumain ammo." +// icon_state = "a44roum" +// ammo_type = /obj/item/ammo_casing/a44roum +// max_ammo = 50 + +// /obj/item/ammo_box/a44roum/rubber +// name = "ammo box (.44 roumain rubber)" +// desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "a44roum-rubber" +// ammo_type = /obj/item/ammo_casing/a44roum/rubber +// max_ammo = 50 + +// /obj/item/ammo_box/a44roum/hp +// name = "ammo box (.44 roumain hollow point)" +// desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." +// icon_state = "a44roum-hp" +// ammo_type = /obj/item/ammo_casing/a44roum/hp +// max_ammo = 50 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm index 6f9ae74e61f9..f20c38cf1739 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -1,13 +1,16 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled /obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) + make_stack() + update_appearance() + . = ..() + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/proc/make_stack() var/obj/item/ammo_casing/to_copy = ammo_type src.top_off() caliber = to_copy.caliber - base_icon_state = to_copy.icon_state - name = "handful of [name]s" - update_appearance() - . = ..() + base_icon_state = "[initial(to_copy.icon_state)][to_copy.bullet_skin ? "-[to_copy.bullet_skin]" : ""]" + name = "handful of [to_copy.name]s" /obj/item/storage/box/ammo //base type, don't use this! name = "box of default ammo" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm new file mode 100644 index 000000000000..ac82cf6bcebd --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm @@ -0,0 +1,41 @@ +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet + ammo_type = /obj/item/ammo_casing/caseless/gauss + +/obj/item/storage/box/ammo/ferropellet + name = "box of ferromagnetic pellets" + desc = "A box of ferromagnetic pellets for gauss firearms." + icon_state = "ferropelletsbox" + +/obj/item/storage/box/ammo/ferropellet/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug + ammo_type = /obj/item/ammo_casing/caseless/gauss/slug + +/obj/item/storage/box/ammo/ferroslug + name = "box of ferromagnetic slugs" + desc = "A box of standard ferromagnetic slugs for gauss firearms." + icon_state = "ferroslugsbox" + +/obj/item/storage/box/ammo/ferroslug/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance + ammo_type = /obj/item/ammo_casing/caseless/gauss/lance + +/obj/item/storage/box/ammo/ferrolance + name = "box of ferromagnetic lances" + desc = "A box of standard ferromagnetic lances for gauss firearms." + icon_state = "ferrolancesbox" + +/obj/item/storage/box/ammo/ferrolance/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index 8f75ad2fc207..d7389389ebe6 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -3,21 +3,87 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm ammo_type = /obj/item/ammo_casing/c10mm +/obj/item/storage/box/ammo/c10mm + name = "box of 10mm ammo" + desc = "A box of standard 10mm ammo." + icon_state = "10mmbox" + +/obj/item/storage/box/ammo/c10mm/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/surplus ammo_type = /obj/item/ammo_casing/c10mm/surplus +/obj/item/storage/box/ammo/c10mm_surplus + name = "box of surplus 10mm ammo" + desc = "A box of low-quality 10mm ammo." + icon_state = "10mmbox-surplus" + +/obj/item/storage/box/ammo/c10mm_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap ammo_type = /obj/item/ammo_casing/c10mm/ap +/obj/item/storage/box/ammo/c10mm_ap + name = "box of AP 10mm ammo" + desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "10mmbox-ap" + +/obj/item/storage/box/ammo/c10mm_ap/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp ammo_type = /obj/item/ammo_casing/c10mm/hp +/obj/item/storage/box/ammo/c10mm_hp + name = "box of HP 10mm ammo" + desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "10mmbox-hp" + +/obj/item/storage/box/ammo/c10mm_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary ammo_type = /obj/item/ammo_casing/c10mm/inc +/obj/item/storage/box/ammo/c10mm_incendiary + name = "box of incendiary 10mm ammo" + desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "10mmbox-incendiary" + +/obj/item/storage/box/ammo/c10mm_incendiary/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber ammo_type = /obj/item/ammo_casing/c10mm/rubber +/obj/item/storage/box/ammo/c10mm_rubber + name = "box of rubber 10mm ammo" + desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "10mmbox-rubbershot" + +/obj/item/storage/box/ammo/c10mm_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber = 4) + generate_items_inside(items_inside,src) + // 9MM (Commander + SABR) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm @@ -30,27 +96,25 @@ /obj/item/storage/box/ammo/c9mm/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus ammo_type = /obj/item/ammo_casing/c9mm/surplus -/obj/item/storage/box/ammo/c9mm/surplus +/obj/item/storage/box/ammo/c9mm_surplus name = "box of surplus 9mm ammo" desc = "A box of low-quality 9mm ammo." icon_state = "9mmbox-surplus" -/obj/item/storage/box/ammo/c9mm/surplus/PopulateContents() +/obj/item/storage/box/ammo/c9mm_surplus/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus = 48) + generate_items_inside(items_inside,src) -/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/storage/box/ammo/c9mm/ap @@ -58,78 +122,140 @@ desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." icon_state = "9mmbox-ap" -/obj/item/storage/box/ammo/c9mm/ap/PopulateContents() +/obj/item/storage/box/ammo/c9mm_ap/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp ammo_type = /obj/item/ammo_casing/c9mm/hp -/obj/item/storage/box/ammo/c9mm/hp +/obj/item/storage/box/ammo/c9mm_hp name = "box of HP 9mm ammo" desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." icon_state = "9mmbox-hp" -/obj/item/storage/box/ammo/c9mm/hp/PopulateContents() +/obj/item/storage/box/ammo/c9mm_hp/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_hp = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary ammo_type = /obj/item/ammo_casing/c9mm/inc -/obj/item/storage/box/ammo/c9mm/incendiary +/obj/item/storage/box/ammo/c9mm_incendiary name = "box of incendiary 9mm ammo" desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." icon_state = "9mmbox-incendiary" -/obj/item/storage/box/ammo/c9mm/incendiary/PopulateContents() +/obj/item/storage/box/ammo/c9mm_incendiary/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber ammo_type = /obj/item/ammo_casing/c9mm/rubber -/obj/item/storage/box/ammo/c9mm/rubber +/obj/item/storage/box/ammo/c9mm_rubber name = "box of rubber 9mm ammo" desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." icon_state = "9mmbox-rubbershot" -/obj/item/storage/box/ammo/c9mm/rubber/PopulateContents() +/obj/item/storage/box/ammo/c9mm_rubber/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber = 4) + generate_items_inside(items_inside,src) // .45 (Candor + C20R) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 ammo_type = /obj/item/ammo_casing/c45 +/obj/item/storage/box/ammo/c45 + name = "box of .45 ammo" + desc = "A box of standard .45 ammo." + icon_state = "45box" + +/obj/item/storage/box/ammo/c45/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus ammo_type = /obj/item/ammo_casing/c45/surplus +/obj/item/storage/box/ammo/c45_surplus + name = "box of surplus .45 ammo" + desc = "A box of low-quality .45 ammo." + icon_state = "45box-surplus" + +/obj/item/storage/box/ammo/c45_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap ammo_type = /obj/item/ammo_casing/c45/ap +/obj/item/storage/box/ammo/c45_ap + name = "box of AP .45 ammo" + desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "45box-ap" + +/obj/item/storage/box/ammo/c45_ap/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp ammo_type = /obj/item/ammo_casing/c45/hp +/obj/item/storage/box/ammo/c45_hp + name = "box of HP .45 ammo" + desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "45box-hp" + +/obj/item/storage/box/ammo/c45_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary ammo_type = /obj/item/ammo_casing/c45/inc +/obj/item/storage/box/ammo/c45_incendiary + name = "box of incendiary .45 ammo" + desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "45box-incendiary" + +/obj/item/storage/box/ammo/c45_incendiary/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber ammo_type = /obj/item/ammo_casing/c45/rubber +/obj/item/storage/box/ammo/c45_rubber + name = "box of incendiary .45 ammo" + desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "45box-rubbershot" + +/obj/item/storage/box/ammo/c45_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber = 4) + generate_items_inside(items_inside,src) + // .50 AE (Desert Eagle) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a50AE @@ -143,39 +269,149 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr ammo_type = /obj/item/ammo_casing/c22lr +/obj/item/storage/box/ammo/c22lr + name = "box of .22 LR ammo" + desc = "A box of standard .22 LR ammo." + icon_state = "22lrbox" + +/obj/item/storage/box/ammo/c22lr/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr = 4) + generate_items_inside(items_inside,src) + // .357 /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 - ammo_type = /obj/item/ammo_casing/c45 + ammo_type = /obj/item/ammo_casing/a357 + +/obj/item/storage/box/ammo/a357 + name = "box of .357 ammo" + desc = "A box of standard .357 ammo." + icon_state = "22lrbox" + +/obj/item/storage/box/ammo/a357/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match ammo_type = /obj/item/ammo_casing/a357/match +/obj/item/storage/box/ammo/a357_match + name = "box of match .357 ammo" + desc = "A box of match .357 ammo." + icon_state = "357box-match" + +/obj/item/storage/box/ammo/a357_match/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp ammo_type = /obj/item/ammo_casing/a357/hp +/obj/item/storage/box/ammo/a357_hp + name = "box of HP .357 ammo" + desc = "A box of hollow point .357 ammo." + icon_state = "357box-hp" + +/obj/item/storage/box/ammo/a357_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp = 4) + generate_items_inside(items_inside,src) + // .45-70 (Hunting Revolver, Beacon) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 ammo_type = /obj/item/ammo_casing/a4570 +/obj/item/storage/box/ammo/a4570 + name = "box of .45-70 ammo" + desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." + icon_state = "4570" + +/obj/item/storage/box/ammo/a4570/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match ammo_type = /obj/item/ammo_casing/a4570/match +/obj/item/storage/box/ammo/a4570_match + name = "box of HP match .45-70 ammo" + desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + icon_state = "4570-match" + +/obj/item/storage/box/ammo/a4570_match/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp ammo_type = /obj/item/ammo_casing/a4570/hp +/obj/item/storage/box/ammo/a4570_hp + name = "box of HP .45-70 ammo" + desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." + icon_state = "4570-hp" + +/obj/item/storage/box/ammo/a4570_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive ammo_type = /obj/item/ammo_casing/a4570/explosive +/obj/item/storage/box/ammo/a4570_explosive + name = "box of explosive .45-70 ammo" + desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." + icon_state = "4570-explosive" + +/obj/item/storage/box/ammo/a4570_explosive/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive = 4) + generate_items_inside(items_inside,src) + // .38 Special /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 ammo_type = /obj/item/ammo_casing/c38 +/obj/item/storage/box/ammo/c38 + name = "box of .38 ammo" + desc = "A box of standard .38 Special ammo." + icon_state = "38box" + +/obj/item/storage/box/ammo/c38/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus ammo_type = /obj/item/ammo_casing/c38/surplus +/obj/item/storage/box/ammo/c38_surplus + name = "box of surplus .38 ammo" + desc = "A box of low-quality .38 Special ammo." + icon_state = "38box-surplus" + +/obj/item/storage/box/ammo/c38_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/trac ammo_type = /obj/item/ammo_casing/c38/trac @@ -199,144 +435,41 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum ammo_type = /obj/item/ammo_casing/a44roum -/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber - ammo_type = /obj/item/ammo_casing/a44roum/rubber - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp - ammo_type = /obj/item/ammo_casing/a44roum/hp - -/obj/item/ammo_box/c10mm - name = "ammo box (10mm)" - desc = "A box of standard 10mm ammo." - icon_state = "10mmbox" - ammo_type = /obj/item/ammo_casing/c10mm - max_ammo = 50 - -/obj/item/ammo_box/c10mm/surplus - name = "ammo box (10mm surplus)" - desc = "A box of low-quality 10mm ammo." - icon_state = "10mmbox-surplus" - ammo_type = /obj/item/ammo_casing/c10mm/surplus - -/obj/item/ammo_box/c10mm/rubbershot - name = "ammo box (10mm rubbershot)" - desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "10mmbox-rubbershot" - ammo_type = /obj/item/ammo_casing/c9mm/rubber - -/obj/item/ammo_box/c10mm/ap - name = "ammo box (10mm armor-piercing)" - desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "10mmbox-ap" - ammo_type = /obj/item/ammo_casing/c10mm/ap - -/obj/item/ammo_box/c10mm/hp - name = "ammo box (10mm hollow point)" - desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "10mmbox-hp" - ammo_type = /obj/item/ammo_casing/c10mm/hp - -/obj/item/ammo_box/c10mm/fire - name = "ammo box (10mm incendiary)" - desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "10mmbox-incendiary" - ammo_type = /obj/item/ammo_casing/c10mm/inc - - - - - - - - - - - - - - - - - - - - - - - -/obj/item/ammo_box/c38_box - name = "ammo box (.38)" - desc = "A box of standard .38 Special ammo." - icon_state = "38box" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 50 - -/obj/item/ammo_box/c38_box/surplus - name = "ammo box (.38 surplus)" - desc = "A box of low-quality .38 Special ammo." - icon_state = "38box-surplus" - ammo_type = /obj/item/ammo_casing/c38/surplus - -/obj/item/ammo_box/a12g - name = "ammo box (12g buckshot)" - desc = "A box of 12-gauge buckshot shells, devastating at close range." - icon_state = "12gbox-buckshot" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 25 - -/obj/item/ammo_box/a12g/slug - name = "ammo box (12g slug)" - desc = "A box of 12-gauge slugs, for improved accuracy and penetration." - icon_state = "12gbox-slug" - ammo_type = /obj/item/ammo_casing/shotgun - -/obj/item/ammo_box/a12g/beanbag - name = "ammo box (12g beanbag)" - desc = "A box of 12-gauge beanbag shells, for incapacitating targets." - icon_state = "12gbox-beanbag" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -/obj/item/ammo_box/a12g/rubbershot - name = "ammo box (12g rubbershot)" - desc = "A box of 12-gauge rubbershot shells, designed for riot control." - icon_state = "12gbox-rubbershot" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - +/obj/item/storage/box/ammo/a44roum + name = "box of .44 roumain ammo" + desc = "A box of standard .44 roumain ammo." + icon_state = "a44roum" +/obj/item/storage/box/ammo/a44roum/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum = 4) + generate_items_inside(items_inside,src) -/obj/item/ammo_box/c45 - name = "ammo box (.45)" - desc = "A box of standard .45 ammo." - icon_state = "45box" - ammo_type = /obj/item/ammo_casing/c45 - max_ammo = 50 +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber + ammo_type = /obj/item/ammo_casing/a44roum/rubber -/obj/item/ammo_box/c45/surplus - name = "ammo box (.45 surplus)" - desc = "A box of low-quality .45 ammo." - icon_state = "45box-surplus" - ammo_type = /obj/item/ammo_casing/c45/surplus +/obj/item/storage/box/ammo/a44roum_rubber + name = "box of rubber .44 roumain ammo" + desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "a44roum-rubber" -/obj/item/ammo_box/c45/rubbershot - name = "ammo box (.45 rubbershot)" - desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "45box-rubbershot" - ammo_type = /obj/item/ammo_casing/c45/rubber +/obj/item/storage/box/ammo/a44roum_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/rubber = 4) + generate_items_inside(items_inside,src) -/obj/item/ammo_box/c45/ap - name = "ammo box (.45 armor-piercing)" - desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "45box-ap" - ammo_type = /obj/item/ammo_casing/c45/ap +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp + ammo_type = /obj/item/ammo_casing/a44roum/hp -/obj/item/ammo_box/c45/hp - name = "ammo box (.45 hollow point)" - desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "45box-hp" - ammo_type = /obj/item/ammo_casing/c45/hp +/obj/item/storage/box/ammo/a44roum_hp + name = "box of HP .44 roumain ammo" + desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "a44roum-rubber" -/obj/item/ammo_box/c45/fire - name = "ammo box (.45 incendiary)" - desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "45box-incendiary" - ammo_type = /obj/item/ammo_casing/c45/inc +/obj/item/storage/box/ammo/a44roum_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/hp = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm index 128cd0213610..7e0d24b9eca0 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -3,9 +3,31 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r ammo_type = /obj/item/ammo_casing/a8_50r +/obj/item/storage/box/ammo/a8_50r + name = "box of 8x50mm ammo" + desc = "A box of standard 8x50mm ammo." + icon_state = "8x50mmbox" + +/obj/item/storage/box/ammo/a8_50r/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp ammo_type = /obj/item/ammo_casing/a8_50rhp +/obj/item/storage/box/ammo/a8_50r_hp + name = "box of HP 8x50mm ammo" + desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." + icon_state = "8x50mmbox-hp" + +/obj/item/storage/box/ammo/a8_50r_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp = 4) + generate_items_inside(items_inside,src) + // 8x58mm Caseless (SSG-669C) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a858 @@ -16,6 +38,17 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 ammo_type = /obj/item/ammo_casing/a300 +/obj/item/storage/box/ammo/a300 + name = "box of .300 magnum ammo" + desc = "A box of standard .300 Magnum ammo." + icon_state = "300box" + +/obj/item/storage/box/ammo/a300/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 = 4) + generate_items_inside(items_inside,src) + // 5.56x39mm (M-90gl Carbine & P-16) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_39 @@ -34,6 +67,20 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 ammo_type = /obj/item/ammo_casing/a762_40 +/obj/item/storage/box/ammo/a762_40 + name = "box of 7.62x40mm CLIP ammo" + desc = "A box of standard 7.62x40mm CLIP ammo." + icon_state = "a762_40box_big" + +/obj/item/storage/box/ammo/a762_40/inteq + icon_state = "a762_40box_big_inteq" + +/obj/item/storage/box/ammo/a762_40/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 = 4) + generate_items_inside(items_inside,src) + // .300 Blackout (Polymer Survivor Rifle) /obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk @@ -47,5 +94,16 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 ammo_type = /obj/item/ammo_casing/a308 -/obj/item/ammo_box/magazine/ammo_stack/prefilled/caseless/c299 - ammo_type = /obj/item/ammo_casing/caseless/c299 +/obj/item/storage/box/ammo/a308 + name = "box of .308 ammo" + desc = "A box of standard .308 ammo." + icon_state = "a308box" + +/obj/item/storage/box/ammo/a308/hunterspride + icon_state = "a308box-HP" + +/obj/item/storage/box/ammo/a308/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index 9bf8a48bff52..5a6c99d8297c 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -2,6 +2,17 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm ammo_type = /obj/item/ammo_casing/c46x30mm +/obj/item/storage/box/ammo/c46x30mm + name = "box of 4.6x30mm ammo" + desc = "A box of standard 4.6x30mm ammo." + icon_state = "46x30mmbox" + +/obj/item/storage/box/ammo/c46x30mm/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm/ap ammo_type = /obj/item/ammo_casing/c46x30mm/ap @@ -16,14 +27,69 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm ammo_type = /obj/item/ammo_casing/caseless/c556mm +/obj/item/storage/box/ammo/c556mm + name = "box of 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." + icon_state = "556mmHITPbox" + +/obj/item/storage/box/ammo/c556mm/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus +/obj/item/storage/box/ammo/c556mm_surplus + name = "box of surplus 5.56mm HITP caseless ammo" + desc = "A box of low-quality 5.56mm HITP caseless ammo." + icon_state = "556mmHITPbox-surplus" + +/obj/item/storage/box/ammo/c556mm_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap +/obj/item/storage/box/ammo/c556mm_ap + name = "box of AP 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "556mmHITPbox-ap" + +/obj/item/storage/box/ammo/c556mm_ap/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp +/obj/item/storage/box/ammo/c556mm_hp + name = "box of HP 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "556mmHITPbox-hp" + +/obj/item/storage/box/ammo/c556mm_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot + +/obj/item/storage/box/ammo/c556mm_rubber + name = "box of rubber 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "556mmHITPbox-rubbershot" + +/obj/item/storage/box/ammo/c556mm_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm new file mode 100644 index 000000000000..e0cd61a885b6 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm @@ -0,0 +1,26 @@ +/obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts + ammo_type = /obj/item/ammo_casing/c10mm/foam_dart + +/obj/item/storage/box/ammo/foam_darts + name = "box of foam darts" + icon = 'icons/obj/guns/toy.dmi' + icon_state = "foambox" + +/obj/item/storage/box/ammo/foam_darts/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot + ammo_type = /obj/item/ammo_casing/c10mm/foam_dart/riot + +/obj/item/storage/box/ammo/foam_darts/riot + name = "box of foam darts" + icon_state = "foambox_riot" + +/obj/item/storage/box/ammo/foam_darts/riot/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm index 2b4d0e6538a2..bf201a2f2656 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm @@ -5,12 +5,59 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot ammo_type = /obj/item/ammo_casing/shotgun/buckshot +/obj/item/storage/box/ammo/a12g_buckshot + name = "box of 12ga buckshot" + desc = "A box of 12-gauge buckshot shells, devastating at close range." + icon_state = "12gbox-buckshot" + +/obj/item/storage/box/ammo/a12g_buckshot/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/slug + ammo_type = /obj/item/ammo_casing/shotgun + +/obj/item/storage/box/ammo/a12g_slug + name = "box of 12ga slugs" + desc = "A box of 12-gauge slugs, for improved accuracy and penetration." + icon_state = "12gbox-slug" + +/obj/item/storage/box/ammo/a12g_slug/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/slug = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag ammo_type = /obj/item/ammo_casing/shotgun/beanbag +/obj/item/storage/box/ammo/a12g_beanbag + name = "box of 12ga beanbags" + desc = "A box of 12-gauge beanbag shells, for incapacitating targets." + icon_state = "12gbox-beanbag" + +/obj/item/storage/box/ammo/a12g_beanbag/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber ammo_type = /obj/item/ammo_casing/shotgun/rubbershot +/obj/item/storage/box/ammo/a12g_rubbershot + name = "box of 12ga beanbags" + desc = "A box of 12-gauge rubbershot shells, designed for riot control." + icon_state = "12gbox-rubbershot" + +/obj/item/storage/box/ammo/a12g_beanbag/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary ammo_type = /obj/item/ammo_casing/shotgun/incendiary diff --git a/shiptest.dme b/shiptest.dme index 15bb024014c5..f9094aa0dff9 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3025,11 +3025,13 @@ #include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\_ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\_premade_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_gauss_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_lmg_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_pistol_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_rifle_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_smg_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_sniper_stacks.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_stacks_misc.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\shotshell_stacks.dm" #include "code\modules\projectiles\boxes_magazines\external\gauss.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" diff --git a/tools/UpdatePaths/Scripts/3456_ammoboxes.txt b/tools/UpdatePaths/Scripts/3456_ammoboxes.txt new file mode 100644 index 000000000000..ebebd3a1e730 --- /dev/null +++ b/tools/UpdatePaths/Scripts/3456_ammoboxes.txt @@ -0,0 +1,71 @@ +oldpath : newpath + +/obj/item/ammo_box/c10mm : /obj/item/storage/box/ammo/c10mm +/obj/item/ammo_box/c10mm/surplus : /obj/item/storage/box/ammo/c10mm_surplus +/obj/item/ammo_box/c10mm/ap : /obj/item/storage/box/ammo/c10mm_ap +/obj/item/ammo_box/c10mm/hp : /obj/item/storage/box/ammo/c10mm_hp +/obj/item/ammo_box/c10mm/fire: /obj/item/storage/box/ammo/c10mm_incendiary +/obj/item/ammo_box/c10mm/rubbershot : /obj/item/storage/box/ammo/c10mm_rubber + +/obj/item/ammo_box/c9mm : /obj/item/storage/box/ammo/c9mm +/obj/item/ammo_box/c9mm/surplus : /obj/item/storage/box/ammo/c9mm_surplus +/obj/item/ammo_box/c9mm/ap : /obj/item/storage/box/ammo/c9mm/ap +/obj/item/ammo_box/c9mm/hp : /obj/item/storage/box/ammo/c9mm_hp +/obj/item/ammo_box/c9mm/fire : /obj/item/storage/box/ammo/c9mm_incendiary +/obj/item/ammo_box/c9mm/rubbershot : /obj/item/storage/box/ammo/c9mm_rubber + +/obj/item/ammo_box/c45 : /obj/item/storage/box/ammo/c45 +/obj/item/ammo_box/c45/surplus : /obj/item/storage/box/ammo/c45_surplus +/obj/item/ammo_box/c45/ap : /obj/item/storage/box/ammo/c45_ap +/obj/item/ammo_box/c45/hp : /obj/item/storage/box/ammo/c45_hp +/obj/item/ammo_box/c45/fire : /obj/item/storage/box/ammo/c45_incendiary +/obj/item/ammo_box/c45/rubbershot : /obj/item/storage/box/ammo/c45_rubber + +/obj/item/ammo_box/c22lr_box : /obj/item/storage/box/ammo/c22lr + +/obj/item/ammo_box/a357_box : /obj/item/storage/box/ammo/a357 +/obj/item/ammo_box/a357_box/match : /obj/item/storage/box/ammo/a357_match +/obj/item/ammo_box/a357_box/hp : /obj/item/storage/box/ammo/a357_hp + +/obj/item/ammo_box/a4570 : /obj/item/storage/box/ammo/a4570 +/obj/item/ammo_box/a4570/match : /obj/item/storage/box/ammo/a4570_match +/obj/item/ammo_box/a4570/hp : /obj/item/storage/box/ammo/a4570_hp +/obj/item/ammo_box/a4570/explosive : /obj/item/storage/box/ammo/a4570_explosive + +/obj/item/ammo_box/c38_box : /obj/item/storage/box/ammo/c38 +/obj/item/ammo_box/c38_box/surplus : /obj/item/storage/box/ammo/c38_surplus + +/obj/item/ammo_box/a44roum : /obj/item/storage/box/ammo/a44roum +/obj/item/ammo_box/a44roum/hp : /obj/item/storage/box/ammo/a44roum_hp +/obj/item/ammo_box/a44roum/rubber : /obj/item/storage/box/ammo/a44roum_rubber + +/obj/item/ammo_box/a12g : /obj/item/storage/box/ammo/a12g_buckshot +/obj/item/ammo_box/a12g/slug : /obj/item/storage/box/ammo/a12g_slug +/obj/item/ammo_box/a12g/beanbag : /obj/item/storage/box/ammo/a12g_beanbag +/obj/item/ammo_box/a12g/rubbershot : /obj/item/storage/box/ammo/a12g_rubbershot + +/obj/item/ammo_box/c46x30mm_box : /obj/item/storage/box/ammo/c46x30mm + +/obj/item/ammo_box/c556mmHITP : /obj/item/storage/box/ammo/c556mm +/obj/item/ammo_box/c556mmHITP/surplus : /obj/item/storage/box/ammo/c556mm_surplus +/obj/item/ammo_box/c556mmHITP/ap : /obj/item/storage/box/ammo/c556mm_ap +/obj/item/ammo_box/c556mmHITP/hp : /obj/item/storage/box/ammo/c556mm_hp +/obj/item/ammo_box/c556mmHITP/rubbershot : /obj/item/storage/box/ammo/c556mm_rubber + +/obj/item/ammo_box/c8x50mm_box : /obj/item/storage/box/ammo/a8_50r +/obj/item/ammo_box/c8x50mmhp_box : /obj/item/storage/box/ammo/a8_50r_hp + +/obj/item/ammo_box/a300_box : /obj/item/storage/box/ammo/a300 + +/obj/item/ammo_box/a762_40 : /obj/item/storage/box/ammo/a762_40 +/obj/item/ammo_box/a762_40/inteq : /obj/item/storage/box/ammo/a762_40/inteq + +/obj/item/ammo_box/a308 : /obj/item/storage/box/ammo/a308 +/obj/item/ammo_box/a308/hunterspride : /obj/item/storage/box/ammo/a308/hunterspride + +/obj/item/ammo_box/ferropelletbox : /obj/item/storage/box/ammo/ferropellet +/obj/item/ammo_box/ferroslugbox : /obj/item/storage/box/ammo/ferroslug +/obj/item/ammo_box/ferrolancebox : /obj/item/storage/box/ammo/ferrolance + +/obj/item/ammo_box/foambox : /obj/item/storage/box/ammo/foam_darts +/obj/item/ammo_box/foambox/riot : /obj/item/storage/box/ammo/foam_darts/riot \ No newline at end of file From 3e1c2c0f236749f127af6c00374ffdfc8f05cffa Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 12:40:58 -0700 Subject: [PATCH 08/31] Revert "Fully working + Updatepaths" This reverts commit 8922a4264f838ca4f04f80383ea4768bde1c5f38. --- .../BeachRuins/beach_ancient_ruin.dmm | 1 - .../BeachRuins/beach_fishing_hut.dmm | 2 +- .../BeachRuins/beach_treasure_cove.dmm | 9 +- .../icemoon_underground_abandoned_village.dmm | 2 +- .../JungleRuins/jungle_interceptor.dmm | 2 +- .../LavaRuins/lavaland_crashed_starwalker.dmm | 4 +- .../lavaland_surface_lava_canyon.dmm | 1 - .../RockRuins/rockplanet_budgetcuts.dmm | 1 - .../RockRuins/rockplanet_distillery.dmm | 2 +- .../RockRuins/rockplanet_harmfactory.dmm | 5 +- .../whitesands_surface_camp_combination.dmm | 2 +- .../SpaceRuins/corporate_mining.dmm | 6 +- _maps/RandomRuins/SpaceRuins/onehalf.dmm | 8 +- _maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 4 +- _maps/RandomRuins/SpaceRuins/spacemall.dmm | 4 +- .../WasteRuins/wasteplanet_lab.dmm | 4 +- .../WasteRuins/wasteplanet_pandora.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 6 +- .../independent/independent_dwayne.dmm | 6 +- .../independent/independent_rigger.dmm | 2 +- .../independent/independent_shetland.dmm | 2 +- _maps/shuttles/inteq/inteq_hound.dmm | 2 +- _maps/shuttles/inteq/inteq_valor.dmm | 10 +- _maps/shuttles/inteq/inteq_vaquero.dmm | 1 - .../shuttles/nanotrasen/nanotrasen_heron.dmm | 20 +- .../shuttles/nanotrasen/nanotrasen_ranger.dmm | 10 +- _maps/shuttles/pirate/pirate_tortuga.dmm | 7 +- _maps/shuttles/roumain/srm_elder.dmm | 14 +- _maps/shuttles/solgov/solgov_chronicle.dmm | 2 +- _maps/shuttles/solgov/solgov_inkwell.dmm | 2 +- _maps/shuttles/solgov/solgov_paracelsus.dmm | 2 +- .../syndicate/syndicate_gorlex_hyena.dmm | 6 +- .../syndicate/syndicate_gorlex_komodo.dmm | 2 +- .../syndicate/syndicate_twinkleshine.dmm | 4 +- code/modules/antagonists/gang/outfits.dm | 8 +- .../clothing/outfits/ert/frontiersmen_ert.dm | 10 +- .../hostile/mining_mobs/hivelord_outfits.dm | 4 +- .../projectiles/ammunition/_ammo_casing.dm | 2 +- .../ammunition/ballistic/pistol.dm | 2 +- .../projectiles/boxes_magazines/ammo_boxes.dm | 658 +++++++++--------- .../prefab_stacks/_premade_stacks.dm | 11 +- .../prefab_stacks/premade_gauss_stacks.dm | 41 -- .../prefab_stacks/premade_pistol_stacks.dm | 471 +++++-------- .../prefab_stacks/premade_rifle_stacks.dm | 62 +- .../prefab_stacks/premade_smg_stacks.dm | 66 -- .../prefab_stacks/premade_stacks_misc.dm | 26 - .../prefab_stacks/shotshell_stacks.dm | 47 -- shiptest.dme | 2 - tools/UpdatePaths/Scripts/3456_ammoboxes.txt | 71 -- 49 files changed, 621 insertions(+), 1017 deletions(-) delete mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm delete mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm delete mode 100644 tools/UpdatePaths/Scripts/3456_ammoboxes.txt diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index 00da7d5c7a20..be52f6a67f46 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -374,7 +374,6 @@ }, /obj/item/gun/energy/lasercannon{ pixel_y = 5; - }, /obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, diff --git a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm index 797106c343f8..ab5a6bb58d84 100644 --- a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm @@ -282,7 +282,7 @@ /turf/open/floor/plating/asteroid/sand, /area/overmap_encounter/planetoid/cave/explored) "mq" = ( -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box, /obj/structure/closet/crate/wooden, /turf/open/floor/wood, /area/ruin/beach) diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 233b87585e65..6e70a81ace49 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -666,8 +666,13 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/item/storage/box/ammo/c38, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/ammo_box/c38_box{ + pixel_x = 10 + }, /obj/structure/sign/poster/contraband/energy_swords{ pixel_x = -32 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 9a89666f99f6..06d6a8e9fd27 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -383,7 +383,7 @@ "EF" = ( /obj/effect/decal/cleanable/blood/gibs/torso, /obj/structure/safe, -/obj/item/storage/box/ammo/a12g_slug, +/obj/item/ammo_box/a12g/slug, /obj/item/kitchen/knife/combat, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm index 97c478357964..057b0cbdbe8f 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm @@ -3050,7 +3050,7 @@ /obj/item/clothing/under/rank/security/officer/blueshirt, /obj/item/clothing/gloves/combat, /obj/item/clothing/shoes/jackboots, -/obj/item/storage/box/ammo/c9mm, +/obj/item/ammo_box/c9mm, /obj/machinery/light/small/broken/directional/north, /obj/effect/turf_decal/corner/transparent/bar/three_quarters{ dir = 4 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm index 29723481ebea..138b1e9d31ed 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm @@ -92,7 +92,7 @@ name = "armory locker"; req_one_access_txt = "1" }, -/obj/item/storage/box/ammo/a12g_buckshot, +/obj/item/ammo_box/a12g, /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered/crashed_starwalker) "bL" = ( @@ -942,7 +942,7 @@ /obj/effect/turf_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/crate/secure/gear, -/obj/item/storage/box/ammo/c10mm_surplus, +/obj/item/ammo_box/c10mm/surplus, /obj/item/weaponcrafting/stock, /obj/item/weaponcrafting/stock{ pixel_x = -6 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index c739b5383772..3efc7429d803 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -888,7 +888,6 @@ "zb" = ( /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner{ loot = list(/obj/item/melee/transforming/cleaving_saw,/obj/item/gun/energy/kinetic_accelerator,/obj/item/keycard/gatedrop/lavacanyon); - }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/overmap_encounter/planetoid/cave/explored) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index 794618753c64..b837eff979f7 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -2746,7 +2746,6 @@ "WY" = ( /obj/structure/frame/computer{ dir = 1; - }, /obj/effect/turf_decal/corner/opaque/red/diagonal, /turf/open/floor/plasteel/tech/techmaint, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm index b97243ffd586..0c592a0ac3b4 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm @@ -3086,7 +3086,7 @@ pixel_x = -3 }, /obj/item/ammo_box/magazine/illestren_a850r, -/obj/item/storage/box/ammo/c9mm/ap, +/obj/item/ammo_box/c9mm/ap, /obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/co9mm{ start_empty = 1 diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index 98e88d1728ce..8a79949e34b1 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -256,7 +256,10 @@ pixel_x = 5; pixel_y = 7 }, -/obj/item/storage/box/ammo/foam_darts/riot, +/obj/item/ammo_box/foambox/riot{ + pixel_x = -3; + pixel_y = -3 + }, /obj/structure/cable{ icon_state = "4-8" }, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index fca360a36661..f59cff023b4a 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -1302,7 +1302,7 @@ "XP" = ( /obj/structure/table, /obj/item/trash/can, -/obj/item/storage/box/ammo/c45_surplus, +/obj/item/ammo_box/c45/surplus, /turf/open/floor/concrete, /area/ruin) "XS" = ( diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 8a67c83ec183..1c1d689c267a 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -2035,6 +2035,10 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) +"TO" = ( +/obj/structure/spawner/burrow/asteroid, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/space) "TR" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 8 @@ -2799,7 +2803,7 @@ Al Al Al VM -Iv +TO Al Al Al diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 0ee697760b25..85f087ec38a9 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -2034,6 +2034,12 @@ }, /turf/open/space, /area/space/nearstation) +"Ra" = ( +/obj/structure/frame/computer{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/onehalf) "Rv" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/airless{ @@ -3322,7 +3328,7 @@ UM cp ZX Gv -Gv +Ra cU YE bU diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index 8eacf19414a7..b76ae63a86e7 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -2694,8 +2694,8 @@ /obj/structure/closet/crate/secure/weapon{ name = "Ammo Crate" }, -/obj/item/storage/box/ammo/c9mm_surplus, -/obj/item/storage/box/ammo/c9mm_surplus, +/obj/item/ammo_box/c9mm/surplus, +/obj/item/ammo_box/c9mm/surplus, /obj/item/ammo_box/magazine/co9mm, /obj/item/ammo_box/magazine/co9mm, /turf/open/floor/plasteel, diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index c6c1bb9483e4..0f5d01fb7de8 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -320,7 +320,7 @@ /obj/item/toy/talking/AI{ pixel_x = 20 }, -/obj/item/storage/box/ammo/foam_darts/riot, +/obj/item/ammo_box/foambox/riot, /obj/item/gun/ballistic/shotgun/toy, /turf/open/floor/light, /area/ruin/space/has_grav/spacemall/shop2) @@ -2437,7 +2437,7 @@ /area/ruin/space/has_grav/spacemall) "jm" = ( /obj/structure/rack, -/obj/item/storage/box/ammo/c9mm, +/obj/item/ammo_box/c9mm, /obj/item/ammo_box/magazine/co9mm{ pixel_x = 5 }, diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm index 74881aac4697..b90bfbe776bd 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm @@ -118,13 +118,13 @@ /area/ruin/powered) "gw" = ( /obj/structure/table, -/obj/item/storage/box/ammo/c45, +/obj/item/ammo_box/c45, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/mono/white, /area/ruin/powered) "gx" = ( /obj/structure/table, -/obj/item/storage/box/ammo/c9mm_rubber, +/obj/item/ammo_box/c9mm/rubbershot, /turf/open/floor/plasteel/mono/white, /area/ruin/powered) "gz" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index 7f6f09962757..f422e4ef1eb8 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -23,7 +23,7 @@ /area/ruin/wasteplanet) "bc" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/storage/box/ammo/c9mm, +/obj/item/ammo_box/c9mm, /turf/open/floor/plating/wasteplanet, /area/ruin/wasteplanet) "bd" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index f3c8f14c3529..ff8c37d19e96 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3043,6 +3043,10 @@ /obj/structure/table/wood, /turf/open/floor/plasteel, /area/wizard_station) +"aEX" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel, +/area/wizard_station) "aEY" = ( /obj/structure/table/wood, /obj/item/bikehorn/golden{ @@ -23762,7 +23766,7 @@ auE aEc auE aAx -aEW +aEX aqZ aqZ aGr diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index 0d23bec2cf4d..668e1e164530 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -1640,9 +1640,9 @@ /obj/item/kinetic_crusher, /obj/effect/turf_decal/box, /obj/item/vending_refill/mining_equipment, -/obj/item/storage/box/ammo/c38, -/obj/item/storage/box/ammo/c38, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box, +/obj/item/ammo_box/c38_box, +/obj/item/ammo_box/c38_box, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index b02d71325d33..42a9f999f3f7 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -4132,7 +4132,7 @@ name = "ammunition locker"; req_access_txt = "1" }, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box, /obj/item/ammo_box/magazine/m45/rubber, /obj/item/ammo_box/magazine/m45/rubber, /obj/item/ammo_box/magazine/m45, diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index a1f0d155bd79..f147aeb82276 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -3390,7 +3390,7 @@ req_access_txt = "1"; req_ship_access = 1 }, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box, /obj/effect/turf_decal/box, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, diff --git a/_maps/shuttles/inteq/inteq_hound.dmm b/_maps/shuttles/inteq/inteq_hound.dmm index 2930db2d34f8..da82ccbf26b7 100644 --- a/_maps/shuttles/inteq/inteq_hound.dmm +++ b/_maps/shuttles/inteq/inteq_hound.dmm @@ -50,7 +50,7 @@ pixel_x = -11; pixel_y = 5 }, -/obj/item/storage/box/ammo/a762_40/inteq{ +/obj/item/ammo_box/a762_40/inteq{ pixel_x = 5; pixel_y = 12 }, diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index 8c994477dad4..0b41578dd31b 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -4887,8 +4887,14 @@ /obj/effect/turf_decal/corner/opaque/yellow, /obj/structure/rack, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/storage/box/ammo/c9mm_rubber, -/obj/item/storage/box/ammo/c9mm, +/obj/item/ammo_box/c9mm/rubbershot{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/ammo_box/c9mm{ + pixel_x = -2; + pixel_y = 2 + }, /obj/machinery/light/small/directional/north, /obj/structure/sign/poster/official/safety_report{ pixel_x = 32 diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index da37f649eba2..9e8f7d6c81f5 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -266,7 +266,6 @@ /obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ pixel_x = -4; pixel_y = 5; - }, /obj/item/gun/ballistic/automatic/pistol/commander/inteq, /obj/item/gun/ballistic/automatic/pistol/commander/inteq{ diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index 3896264ed190..0a0c9dead99f 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -13071,10 +13071,22 @@ pixel_x = 5; pixel_y = 4 }, -/obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm/ap, +/obj/item/ammo_box/c9mm{ + pixel_x = 4; + pixel_y = -6 + }, +/obj/item/ammo_box/c9mm{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/ammo_box/c9mm{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/ammo_box/c9mm/ap{ + pixel_y = 17; + pixel_x = 4 + }, /obj/item/stock_parts/cell/gun{ pixel_x = -3; pixel_y = -5 diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 89eb847f1019..342ffb8fa928 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -187,8 +187,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/belt/security/webbing, /obj/item/storage/pistolcase/commander, @@ -3127,9 +3127,9 @@ pixel_x = 7; pixel_y = -20 }, -/obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm_rubber, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm/rubbershot, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/pistolcase/commander, /obj/item/storage/pistolcase/egun, diff --git a/_maps/shuttles/pirate/pirate_tortuga.dmm b/_maps/shuttles/pirate/pirate_tortuga.dmm index 11314e99af91..4bc354b31b5c 100644 --- a/_maps/shuttles/pirate/pirate_tortuga.dmm +++ b/_maps/shuttles/pirate/pirate_tortuga.dmm @@ -667,7 +667,10 @@ /area/ship/security/armory) "hU" = ( /obj/structure/rack, -/obj/item/storage/box/ammo/c45, +/obj/item/ammo_box/c45{ + pixel_x = -9; + pixel_y = 8 + }, /obj/item/storage/toolbox/ammo/a762_40{ pixel_x = 5; pixel_y = 6 @@ -3138,7 +3141,7 @@ /obj/item/clothing/shoes/jackboots{ pixel_y = -13 }, -/obj/item/storage/box/ammo/c38_surplus, +/obj/item/ammo_box/c38_box/surplus, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/nanoweave, /area/ship/crew/crewtwo) diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index 3c6f7ec802f4..5ef138ad19db 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -337,12 +337,18 @@ pixel_y = 14; pixel_x = 5 }, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box{ + pixel_x = -6; + pixel_y = 7 + }, /obj/item/ammo_box/magazine/illestren_a850r{ pixel_x = 8; pixel_y = 6 }, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box{ + pixel_x = -6; + pixel_y = 1 + }, /obj/item/ammo_box/magazine/illestren_a850r{ pixel_x = 8 }, @@ -2019,7 +2025,7 @@ pixel_x = -7 }, /obj/item/storage/backpack/satchel/leather, -/obj/item/storage/box/ammo/a44roum, +/obj/item/ammo_box/a44roum, /obj/item/storage/pistolcase/montagne, /obj/item/clothing/accessory/waistcoat/roumain, /turf/open/floor/wood/mahogany, @@ -2692,7 +2698,7 @@ /obj/item/gun/ballistic/revolver/detective, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, -/obj/item/storage/box/ammo/c38, +/obj/item/ammo_box/c38_box, /obj/item/clothing/head/cowboy/sec/roumain/colligne, /obj/item/clothing/suit/armor/roumain/colligne, /obj/structure/closet/secure_closet/collignes, diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index 63ffd6f57805..012261bda246 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -273,7 +273,7 @@ /obj/item/spacecash/bundle/loadsamoney, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/storage/box/ammo/ferroslug, +/obj/item/ammo_box/ferroslugbox, /turf/open/floor/carpet/royalblue, /area/ship/crew/office) "cg" = ( diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index bfb513b5bc64..86781cc2e251 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -5860,7 +5860,7 @@ /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/storage/box/ammo/ferroslug, +/obj/item/ammo_box/ferroslugbox, /turf/open/floor/wood/maple, /area/ship/crew/dorm/dormtwo) "LJ" = ( diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index c055c60f9308..1235af6da913 100644 --- a/_maps/shuttles/solgov/solgov_paracelsus.dmm +++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm @@ -3582,7 +3582,7 @@ /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/storage/box/ammo/ferroslug, +/obj/item/ammo_box/ferroslugbox, /turf/open/floor/carpet/royalblue, /area/ship/crew) "IZ" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index 0f0d0fa2ec63..ae46dc0286f3 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -65,7 +65,7 @@ /obj/item/ammo_box/a357/match, /obj/item/pen/edagger, /obj/item/storage/pistolcase/a357, -/obj/item/storage/box/ammo/a357, +/obj/item/ammo_box/a357_box, /turf/open/floor/carpet/black, /area/ship/bridge) "bJ" = ( @@ -301,8 +301,8 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/industrial/outline, -/obj/item/storage/box/ammo/a12g_buckshot, -/obj/item/storage/box/ammo/c10mm, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) "fC" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index fce641e8daf8..bfbdc4e43e04 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -2880,7 +2880,7 @@ }, /obj/item/ammo_box/magazine/m10mm, /obj/item/ammo_box/magazine/m10mm, -/obj/item/storage/box/ammo/c10mm, +/obj/item/ammo_box/c10mm, /obj/item/clothing/gloves/tackler/combat/insulated, /obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 3cc496ae3b38..1adef58948fe 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -121,7 +121,7 @@ name = "Armory Access"; req_access = list(3,150) }, -/obj/item/storage/box/ammo/c10mm, +/obj/item/ammo_box/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security) "aE" = ( @@ -7332,7 +7332,7 @@ }, /obj/item/storage/belt/sabre/solgov, /obj/item/storage/pistolcase/modelh, -/obj/item/storage/box/ammo/ferroslug, +/obj/item/ammo_box/ferroslugbox, /turf/open/floor/mineral/plastitanium, /area/ship/bridge) "Qv" = ( diff --git a/code/modules/antagonists/gang/outfits.dm b/code/modules/antagonists/gang/outfits.dm index 714da806cba1..ae16ec956470 100644 --- a/code/modules/antagonists/gang/outfits.dm +++ b/code/modules/antagonists/gang/outfits.dm @@ -31,7 +31,9 @@ backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, - /obj/item/shield/riot/tele = 1) + /obj/item/shield/riot/tele = 1, + /obj/item/ammo_box/magazine/m45 = 3, + /obj/item/ammo_box/c45 = 2) /datum/outfit/families_police/beatcop/armored @@ -63,7 +65,9 @@ backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, - /obj/item/shield/riot/tele = 1) + /obj/item/shield/riot/tele = 1, + /obj/item/ammo_box/magazine/smgm9mm = 3, + /obj/item/ammo_box/c9mm = 2) /datum/outfit/families_police/beatcop/military name = "Families: Space Military" diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index 7133f6bbd762..b3a2b20f687c 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -89,11 +89,11 @@ var/loops = rand(1,3) for(var/i in 1 to loops) var/ammotype = pick(list( - /obj/item/storage/box/ammo/a8_50r, - /obj/item/storage/box/ammo/c45, - /obj/item/storage/box/ammo/a357, - /obj/item/storage/box/ammo/c45, - /obj/item/storage/box/ammo/a4570, + /obj/item/ammo_box/c8x50mm_box, + /obj/item/ammo_box/c45, + /obj/item/ammo_box/a357_box, + /obj/item/ammo_box/c45, + /obj/item/ammo_box/a4570, /obj/item/stock_parts/cell/gun/mini)) backpack_contents += ammotype diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm index fefb26d24c0e..09d85a664e86 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -463,8 +463,8 @@ /obj/item/assembly/flash/handheld = 5, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, - /obj/item/storage/box/ammo/c9mm_rubber = 3, - /obj/item/storage/box/ammo/c9mm = 1, + /obj/item/ammo_box/c9mm/rubbershot = 3, + /obj/item/ammo_box/c9mm = 1, /obj/item/stock_parts/cell/gun = 3, /obj/item/coin/antagtoken = 1, /obj/item/grenade/stingbang = 1 diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 19e1965939b9..23afe19ea294 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -167,7 +167,7 @@ desc = "[initial(desc)][BB ? null : " This one is spent."]" return ..() -///Proc to magically refill a casing with a new projectile +//proc to magically refill a casing with a new projectile /obj/item/ammo_casing/proc/newshot() //For energy weapons, syringe gun, shotgun shells and wands (!). if(!BB) BB = new projectile_type(src, src) diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index c9105f0a4adb..63a95e072a80 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -58,7 +58,7 @@ name = "9mm armor-piercing bullet casing" desc = "A 9mm armor-piercing bullet casing." bullet_skin = "ap" - projectile_type = /obj/projectile/bullet/c9mm/ap + projectile_type =/obj/projectile/bullet/c9mm/ap /obj/item/ammo_casing/c9mm/hp name = "9mm hollow point bullet casing" diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index afa2baed7324..955856704ac6 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -26,54 +26,55 @@ desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." ammo_type = /obj/item/ammo_casing/a357/hp -// /obj/item/ammo_box/a357_box -// name = "ammo box (.357)" -// desc = "A box of standard .357 ammo." -// icon_state = "357box" -// ammo_type = /obj/item/ammo_casing/a357 -// max_ammo = 50 - -// /obj/item/ammo_box/a357_box/match -// name = "ammo box (.357)" -// desc = "A box of match .357 ammo." -// icon_state = "357box-match" -// ammo_type = /obj/item/ammo_casing/a357/match -// max_ammo = 50 - -// /obj/item/ammo_box/a357_box/hp -// name = "ammo box (.357)" -// desc = "A box of hollow point .357 ammo." -// icon_state = "357box-hp" -// ammo_type = /obj/item/ammo_casing/a357/hp -// max_ammo = 50 +/obj/item/ammo_box/a357_box + name = "ammo box (.357)" + desc = "A box of standard .357 ammo." + icon_state = "357box" + ammo_type = /obj/item/ammo_casing/a357 + max_ammo = 50 + +/obj/item/ammo_box/a357_box/match + name = "ammo box (.357)" + desc = "A box of match .357 ammo." + icon_state = "357box-match" + ammo_type = /obj/item/ammo_casing/a357/match + max_ammo = 50 + +/obj/item/ammo_box/a357_box/hp + name = "ammo box (.357)" + desc = "A box of hollow point .357 ammo." + icon_state = "357box-hp" + ammo_type = /obj/item/ammo_casing/a357/hp + max_ammo = 50 // .45-70 Ammo Holders (Hunting Revolver) -// /obj/item/ammo_box/a4570 -// name = "ammo box (.45-70)" -// desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." -// icon_state = "4570" -// ammo_type = /obj/item/ammo_casing/a4570 -// max_ammo = 12 +/obj/item/ammo_box/a4570 + name = "ammo box (.45-70)" + desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." + icon_state = "4570" + ammo_type = /obj/item/ammo_casing/a4570 + max_ammo = 12 + +/obj/item/ammo_box/a4570/match + name = "ammo box (.45-70 match)" + desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + icon_state = "4570-match" + ammo_type = /obj/item/ammo_casing/a4570/match -// /obj/item/ammo_box/a4570/match -// name = "ammo box (.45-70 match)" -// desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." -// icon_state = "4570-match" -// ammo_type = /obj/item/ammo_casing/a4570/match -// /obj/item/ammo_box/a4570/hp -// name = "ammo box (.45-70 hollow point)" -// desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." -// icon_state = "4570-hp" -// ammo_type = /obj/item/ammo_casing/a4570/hp +/obj/item/ammo_box/a4570/hp + name = "ammo box (.45-70 hollow point)" + desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." + icon_state = "4570-hp" + ammo_type = /obj/item/ammo_casing/a4570/hp -// /obj/item/ammo_box/a4570/explosive -// name = "ammo box (.45-70 explosive)" -// desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." -// icon_state = "4570-explosive" -// ammo_type = /obj/item/ammo_casing/a4570/explosive +/obj/item/ammo_box/a4570/explosive + name = "ammo box (.45-70 explosive)" + desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." + icon_state = "4570-explosive" + ammo_type = /obj/item/ammo_casing/a4570/explosive // .38 special Speed Loaders (Colt Detective Special) @@ -138,7 +139,7 @@ // .308 Stripper Clip (Vickland) /obj/item/ammo_box/vickland_a308 - name = "stripper clip (.308)" + name = "stripper clip (.308)" desc = "A 5-round stripper clip for the Vickland Battle Rifle. The Vickland itself has a 10 round capacity, so keep in mind two of these are needed to fully reload it. These rounds do good damage with significant armor penetration." icon_state = "stripper_308-5" base_icon_state = "stripper_308" @@ -148,6 +149,7 @@ w_class = WEIGHT_CLASS_TINY instant_load = TRUE + // .300 Magnum Stripper Clip (Scout) /obj/item/ammo_box/a300 @@ -190,185 +192,185 @@ // Ammo Boxes -// /obj/item/ammo_box/c38_box -// name = "ammo box (.38)" -// desc = "A box of standard .38 Special ammo." -// icon_state = "38box" -// ammo_type = /obj/item/ammo_casing/c38 -// max_ammo = 50 - -// /obj/item/ammo_box/c38_box/surplus -// name = "ammo box (.38 surplus)" -// desc = "A box of low-quality .38 Special ammo." -// icon_state = "38box-surplus" -// ammo_type = /obj/item/ammo_casing/c38/surplus - -// /obj/item/ammo_box/a12g -// name = "ammo box (12g buckshot)" -// desc = "A box of 12-gauge buckshot shells, devastating at close range." -// icon_state = "12gbox-buckshot" -// ammo_type = /obj/item/ammo_casing/shotgun/buckshot -// max_ammo = 25 - -// /obj/item/ammo_box/a12g/slug -// name = "ammo box (12g slug)" -// desc = "A box of 12-gauge slugs, for improved accuracy and penetration." -// icon_state = "12gbox-slug" -// ammo_type = /obj/item/ammo_casing/shotgun - -// /obj/item/ammo_box/a12g/beanbag -// name = "ammo box (12g beanbag)" -// desc = "A box of 12-gauge beanbag shells, for incapacitating targets." -// icon_state = "12gbox-beanbag" -// ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -// /obj/item/ammo_box/a12g/rubbershot -// name = "ammo box (12g rubbershot)" -// desc = "A box of 12-gauge rubbershot shells, designed for riot control." -// icon_state = "12gbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - -// /obj/item/ammo_box/c9mm -// name = "ammo box (9mm)" -// desc = "A box of standard 9mm ammo." -// icon_state = "9mmbox" -// ammo_type = /obj/item/ammo_casing/c9mm -// max_ammo = 50 - -// /obj/item/ammo_box/c9mm/surplus -// name = "ammo box (9mm surplus)" -// desc = "A box of low-quality 9mm ammo." -// icon_state = "9mmbox-surplus" -// ammo_type = /obj/item/ammo_casing/c9mm/surplus - -// /obj/item/ammo_box/c9mm/rubbershot -// name = "ammo box (9mm rubbershot)" -// desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "9mmbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/c9mm/rubber - -// /obj/item/ammo_box/c9mm/ap -// name = "ammo box (9mm armor-piercing)" -// desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "9mmbox-ap" -// ammo_type = /obj/item/ammo_casing/c9mm/ap - -// /obj/item/ammo_box/c9mm/hp -// name = "ammo box (9mm hollow point)" -// desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "9mmbox-hp" -// ammo_type = /obj/item/ammo_casing/c9mm/hp - -// /obj/item/ammo_box/c9mm/fire -// name = "ammo box (9mm incendiary)" -// desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." -// icon_state = "9mmbox-incendiary" -// ammo_type = /obj/item/ammo_casing/c9mm/inc - -// /obj/item/ammo_box/c10mm -// name = "ammo box (10mm)" -// desc = "A box of standard 10mm ammo." -// icon_state = "10mmbox" -// ammo_type = /obj/item/ammo_casing/c10mm -// max_ammo = 50 - -// /obj/item/ammo_box/c10mm/surplus -// name = "ammo box (10mm surplus)" -// desc = "A box of low-quality 10mm ammo." -// icon_state = "10mmbox-surplus" -// ammo_type = /obj/item/ammo_casing/c10mm/surplus - -// /obj/item/ammo_box/c10mm/rubbershot -// name = "ammo box (10mm rubbershot)" -// desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "10mmbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/c9mm/rubber - -// /obj/item/ammo_box/c10mm/ap -// name = "ammo box (10mm armor-piercing)" -// desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "10mmbox-ap" -// ammo_type = /obj/item/ammo_casing/c10mm/ap - -// /obj/item/ammo_box/c10mm/hp -// name = "ammo box (10mm hollow point)" -// desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "10mmbox-hp" -// ammo_type = /obj/item/ammo_casing/c10mm/hp - -// /obj/item/ammo_box/c10mm/fire -// name = "ammo box (10mm incendiary)" -// desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." -// icon_state = "10mmbox-incendiary" -// ammo_type = /obj/item/ammo_casing/c10mm/inc - -// /obj/item/ammo_box/c45 -// name = "ammo box (.45)" -// desc = "A box of standard .45 ammo." -// icon_state = "45box" -// ammo_type = /obj/item/ammo_casing/c45 -// max_ammo = 50 - -// /obj/item/ammo_box/c45/surplus -// name = "ammo box (.45 surplus)" -// desc = "A box of low-quality .45 ammo." -// icon_state = "45box-surplus" -// ammo_type = /obj/item/ammo_casing/c45/surplus - -// /obj/item/ammo_box/c45/rubbershot -// name = "ammo box (.45 rubbershot)" -// desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "45box-rubbershot" -// ammo_type = /obj/item/ammo_casing/c45/rubber - -// /obj/item/ammo_box/c45/ap -// name = "ammo box (.45 armor-piercing)" -// desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "45box-ap" -// ammo_type = /obj/item/ammo_casing/c45/ap - -// /obj/item/ammo_box/c45/hp -// name = "ammo box (.45 hollow point)" -// desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "45box-hp" -// ammo_type = /obj/item/ammo_casing/c45/hp - -// /obj/item/ammo_box/c45/fire -// name = "ammo box (.45 incendiary)" -// desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." -// icon_state = "45box-incendiary" -// ammo_type = /obj/item/ammo_casing/c45/inc - -// /obj/item/ammo_box/c556mmHITP -// name = "ammo box (5.56mm HITP caseless)" -// desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." -// icon_state = "556mmHITPbox" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm -// max_ammo = 50 - -// /obj/item/ammo_box/c556mmHITP/surplus -// name = "ammo box (5.56mm HITP caseless surplus)" -// desc = "A box of low-quality 5.56mm HITP caseless ammo." -// icon_state = "556mmHITPbox-surplus" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus - -// /obj/item/ammo_box/c556mmHITP/rubbershot -// name = "ammo box (5.56mm HITP caseless rubbershot)" -// desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "556mmHITPbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot - -// /obj/item/ammo_box/c556mmHITP/ap -// name = "ammo box (5.56mm HITP caseless armor-piercing)" -// desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "556mmHITPbox-ap" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap - -// /obj/item/ammo_box/c556mmHITP/hp -// name = "ammo box (5.56mm HITP caseless hollow point)" -// desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "556mmHITPbox-hp" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp +/obj/item/ammo_box/c38_box + name = "ammo box (.38)" + desc = "A box of standard .38 Special ammo." + icon_state = "38box" + ammo_type = /obj/item/ammo_casing/c38 + max_ammo = 50 + +/obj/item/ammo_box/c38_box/surplus + name = "ammo box (.38 surplus)" + desc = "A box of low-quality .38 Special ammo." + icon_state = "38box-surplus" + ammo_type = /obj/item/ammo_casing/c38/surplus + +/obj/item/ammo_box/a12g + name = "ammo box (12g buckshot)" + desc = "A box of 12-gauge buckshot shells, devastating at close range." + icon_state = "12gbox-buckshot" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + max_ammo = 25 + +/obj/item/ammo_box/a12g/slug + name = "ammo box (12g slug)" + desc = "A box of 12-gauge slugs, for improved accuracy and penetration." + icon_state = "12gbox-slug" + ammo_type = /obj/item/ammo_casing/shotgun + +/obj/item/ammo_box/a12g/beanbag + name = "ammo box (12g beanbag)" + desc = "A box of 12-gauge beanbag shells, for incapacitating targets." + icon_state = "12gbox-beanbag" + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +/obj/item/ammo_box/a12g/rubbershot + name = "ammo box (12g rubbershot)" + desc = "A box of 12-gauge rubbershot shells, designed for riot control." + icon_state = "12gbox-rubbershot" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + +/obj/item/ammo_box/c9mm + name = "ammo box (9mm)" + desc = "A box of standard 9mm ammo." + icon_state = "9mmbox" + ammo_type = /obj/item/ammo_casing/c9mm + max_ammo = 50 + +/obj/item/ammo_box/c9mm/surplus + name = "ammo box (9mm surplus)" + desc = "A box of low-quality 9mm ammo." + icon_state = "9mmbox-surplus" + ammo_type = /obj/item/ammo_casing/c9mm/surplus + +/obj/item/ammo_box/c9mm/rubbershot + name = "ammo box (9mm rubbershot)" + desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "9mmbox-rubbershot" + ammo_type = /obj/item/ammo_casing/c9mm/rubber + +/obj/item/ammo_box/c9mm/ap + name = "ammo box (9mm armor-piercing)" + desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "9mmbox-ap" + ammo_type = /obj/item/ammo_casing/c9mm/ap + +/obj/item/ammo_box/c9mm/hp + name = "ammo box (9mm hollow point)" + desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "9mmbox-hp" + ammo_type = /obj/item/ammo_casing/c9mm/hp + +/obj/item/ammo_box/c9mm/fire + name = "ammo box (9mm incendiary)" + desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "9mmbox-incendiary" + ammo_type = /obj/item/ammo_casing/c9mm/inc + +/obj/item/ammo_box/c10mm + name = "ammo box (10mm)" + desc = "A box of standard 10mm ammo." + icon_state = "10mmbox" + ammo_type = /obj/item/ammo_casing/c10mm + max_ammo = 50 + +/obj/item/ammo_box/c10mm/surplus + name = "ammo box (10mm surplus)" + desc = "A box of low-quality 10mm ammo." + icon_state = "10mmbox-surplus" + ammo_type = /obj/item/ammo_casing/c10mm/surplus + +/obj/item/ammo_box/c10mm/rubbershot + name = "ammo box (10mm rubbershot)" + desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "10mmbox-rubbershot" + ammo_type = /obj/item/ammo_casing/c9mm/rubber + +/obj/item/ammo_box/c10mm/ap + name = "ammo box (10mm armor-piercing)" + desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "10mmbox-ap" + ammo_type = /obj/item/ammo_casing/c10mm/ap + +/obj/item/ammo_box/c10mm/hp + name = "ammo box (10mm hollow point)" + desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "10mmbox-hp" + ammo_type = /obj/item/ammo_casing/c10mm/hp + +/obj/item/ammo_box/c10mm/fire + name = "ammo box (10mm incendiary)" + desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "10mmbox-incendiary" + ammo_type = /obj/item/ammo_casing/c10mm/inc + +/obj/item/ammo_box/c45 + name = "ammo box (.45)" + desc = "A box of standard .45 ammo." + icon_state = "45box" + ammo_type = /obj/item/ammo_casing/c45 + max_ammo = 50 + +/obj/item/ammo_box/c45/surplus + name = "ammo box (.45 surplus)" + desc = "A box of low-quality .45 ammo." + icon_state = "45box-surplus" + ammo_type = /obj/item/ammo_casing/c45/surplus + +/obj/item/ammo_box/c45/rubbershot + name = "ammo box (.45 rubbershot)" + desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "45box-rubbershot" + ammo_type = /obj/item/ammo_casing/c45/rubber + +/obj/item/ammo_box/c45/ap + name = "ammo box (.45 armor-piercing)" + desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "45box-ap" + ammo_type = /obj/item/ammo_casing/c45/ap + +/obj/item/ammo_box/c45/hp + name = "ammo box (.45 hollow point)" + desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "45box-hp" + ammo_type = /obj/item/ammo_casing/c45/hp + +/obj/item/ammo_box/c45/fire + name = "ammo box (.45 incendiary)" + desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "45box-incendiary" + ammo_type = /obj/item/ammo_casing/c45/inc + +/obj/item/ammo_box/c556mmHITP + name = "ammo box (5.56mm HITP caseless)" + desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." + icon_state = "556mmHITPbox" + ammo_type = /obj/item/ammo_casing/caseless/c556mm + max_ammo = 50 + +/obj/item/ammo_box/c556mmHITP/surplus + name = "ammo box (5.56mm HITP caseless surplus)" + desc = "A box of low-quality 5.56mm HITP caseless ammo." + icon_state = "556mmHITPbox-surplus" + ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus + +/obj/item/ammo_box/c556mmHITP/rubbershot + name = "ammo box (5.56mm HITP caseless rubbershot)" + desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "556mmHITPbox-rubbershot" + ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot + +/obj/item/ammo_box/c556mmHITP/ap + name = "ammo box (5.56mm HITP caseless armor-piercing)" + desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "556mmHITPbox-ap" + ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap + +/obj/item/ammo_box/c556mmHITP/hp + name = "ammo box (5.56mm HITP caseless hollow point)" + desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "556mmHITPbox-hp" + ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp /obj/item/ammo_box/a40mm name = "ammo box (40mm grenades)" @@ -378,93 +380,44 @@ multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_NORMAL -// /obj/item/ammo_box/a762_40 -// name = "ammo box (7.62x40mm CLIP)" -// icon_state = "a762_40box_big" -// ammo_type = /obj/item/ammo_casing/a762_40 -// max_ammo = 120 -// w_class = WEIGHT_CLASS_NORMAL - -// /obj/item/ammo_box/a762_40/inteq -// icon_state = "a762_40box_big_inteq" - -// /obj/item/ammo_box/a308 -// name = "ammo box (.308)" -// icon_state = "a308box" -// ammo_type = /obj/item/ammo_casing/a308 -// max_ammo = 30 - -// /obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships -// icon_state = "a308box-HP" - -// /obj/item/ammo_box/foambox -// name = "ammo box (Foam Darts)" -// icon = 'icons/obj/guns/toy.dmi' -// icon_state = "foambox" -// ammo_type = /obj/item/ammo_casing/caseless/foam_dart -// max_ammo = 40 -// custom_materials = list(/datum/material/iron = 500) - -// /obj/item/ammo_box/foambox/riot -// icon_state = "foambox_riot" -// ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot -// custom_materials = list(/datum/material/iron = 50000) - -// /obj/item/ammo_box/c22lr_box -// name = "ammo box (.22 LR)" -// desc = "A box of standard .22 LR ammo." -// icon_state = "22lrbox" -// ammo_type = /obj/item/ammo_casing/c22lr -// max_ammo = 75 - -// /obj/item/ammo_box/c46x30mm_box -// name = "ammo box (4.6x30mm)" -// desc = "A box of standard 4.6x30mm ammo." -// icon_state = "46x30mmbox" -// ammo_type = /obj/item/ammo_casing/c46x30mm -// max_ammo = 50 - -// /obj/item/ammo_box/c8x50mm_box -// name = "ammo box (8x50mm)" -// desc = "A box of standard 8x50mm ammo." -// icon_state = "8x50mmbox" -// ammo_type = /obj/item/ammo_casing/a8_50r -// max_ammo = 20 - -// /obj/item/ammo_box/ferropelletbox -// name = "ammo box (ferromagnetic pellets)" -// desc = "A box of ferromagnetic pellets." -// icon_state = "ferropelletsbox" -// ammo_type = /obj/item/ammo_casing/caseless/gauss -// max_ammo = 50 - -// /obj/item/ammo_box/ferroslugbox -// name = "ammo box (ferromagnetic slugs)" -// desc = "A box of standard ferromagnetic slugs." -// icon_state = "ferroslugsbox" -// ammo_type = /obj/item/ammo_casing/caseless/gauss/slug -// max_ammo = 20 - -// /obj/item/ammo_box/ferrolancebox -// name = "ammo box (ferromagnetic lances)" -// desc = "A box of standard ferromagnetic lances." -// icon_state = "ferrolancesbox" -// ammo_type = /obj/item/ammo_casing/caseless/gauss/lance -// max_ammo = 50 - -// /obj/item/ammo_box/c8x50mmhp_box -// name = "ammo box (8x50mm)" -// desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." -// icon_state = "8x50mmbox-hp" -// ammo_type = /obj/item/ammo_casing/a8_50rhp -// max_ammo = 20 - -// /obj/item/ammo_box/a300_box -// name = "ammo box (.300 Magnum)" -// desc = "A box of standard .300 Magnum ammo." -// icon_state = "300box" -// ammo_type = /obj/item/ammo_casing/a300 -// max_ammo = 20 +/obj/item/ammo_box/a762_40 + name = "ammo box (7.62x40mm CLIP)" + icon_state = "a762_40box_big" + ammo_type = /obj/item/ammo_casing/a762_40 + max_ammo = 120 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/ammo_box/a762_40/inteq + icon_state = "a762_40box_big_inteq" + +/obj/item/ammo_box/a308 + name = "ammo box (.308)" + icon_state = "a308box" + ammo_type = /obj/item/ammo_casing/a308 + max_ammo = 30 + +/obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships + icon_state = "a308box-HP" + +/obj/item/ammo_box/foambox + name = "ammo box (Foam Darts)" + icon = 'icons/obj/guns/toy.dmi' + icon_state = "foambox" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart + max_ammo = 40 + custom_materials = list(/datum/material/iron = 500) + +/obj/item/ammo_box/foambox/riot + icon_state = "foambox_riot" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot + custom_materials = list(/datum/material/iron = 50000) + +/obj/item/ammo_box/c22lr_box + name = "ammo box (.22 LR)" + desc = "A box of standard .22 LR ammo." + icon_state = "22lrbox" + ammo_type = /obj/item/ammo_casing/c22lr + max_ammo = 75 /obj/item/ammo_box/a44roum_speedloader name = "speed loader (.44)" @@ -482,23 +435,72 @@ /obj/item/ammo_box/a44roum_speedloader/empty start_empty = TRUE -// /obj/item/ammo_box/a44roum -// name = "ammo box (.44 roumain)" -// desc = "A box of standard .44 roumain ammo." -// icon_state = "a44roum" -// ammo_type = /obj/item/ammo_casing/a44roum -// max_ammo = 50 - -// /obj/item/ammo_box/a44roum/rubber -// name = "ammo box (.44 roumain rubber)" -// desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "a44roum-rubber" -// ammo_type = /obj/item/ammo_casing/a44roum/rubber -// max_ammo = 50 - -// /obj/item/ammo_box/a44roum/hp -// name = "ammo box (.44 roumain hollow point)" -// desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." -// icon_state = "a44roum-hp" -// ammo_type = /obj/item/ammo_casing/a44roum/hp -// max_ammo = 50 +/obj/item/ammo_box/c46x30mm_box + name = "ammo box (4.6x30mm)" + desc = "A box of standard 4.6x30mm ammo." + icon_state = "46x30mmbox" + ammo_type = /obj/item/ammo_casing/c46x30mm + max_ammo = 50 + +/obj/item/ammo_box/c8x50mm_box + name = "ammo box (8x50mm)" + desc = "A box of standard 8x50mm ammo." + icon_state = "8x50mmbox" + ammo_type = /obj/item/ammo_casing/a8_50r + max_ammo = 20 + +/obj/item/ammo_box/ferropelletbox + name = "ammo box (ferromagnetic pellets)" + desc = "A box of ferromagnetic pellets." + icon_state = "ferropelletsbox" + ammo_type = /obj/item/ammo_casing/caseless/gauss + max_ammo = 50 + +/obj/item/ammo_box/ferroslugbox + name = "ammo box (ferromagnetic slugs)" + desc = "A box of standard ferromagnetic slugs." + icon_state = "ferroslugsbox" + ammo_type = /obj/item/ammo_casing/caseless/gauss/slug + max_ammo = 20 + +/obj/item/ammo_box/ferrolancebox + name = "ammo box (ferromagnetic lances)" + desc = "A box of standard ferromagnetic lances." + icon_state = "ferrolancesbox" + ammo_type = /obj/item/ammo_casing/caseless/gauss/lance + max_ammo = 50 + +/obj/item/ammo_box/c8x50mmhp_box + name = "ammo box (8x50mm)" + desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." + icon_state = "8x50mmbox-hp" + ammo_type = /obj/item/ammo_casing/a8_50rhp + max_ammo = 20 + +/obj/item/ammo_box/a300_box + name = "ammo box (.300 Magnum)" + desc = "A box of standard .300 Magnum ammo." + icon_state = "300box" + ammo_type = /obj/item/ammo_casing/a300 + max_ammo = 20 + +/obj/item/ammo_box/a44roum + name = "ammo box (.44 roumain)" + desc = "A box of standard .44 roumain ammo." + icon_state = "a44roum" + ammo_type = /obj/item/ammo_casing/a44roum + max_ammo = 50 + +/obj/item/ammo_box/a44roum/rubber + name = "ammo box (.44 roumain rubber)" + desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "a44roum-rubber" + ammo_type = /obj/item/ammo_casing/a44roum/rubber + max_ammo = 50 + +/obj/item/ammo_box/a44roum/hp + name = "ammo box (.44 roumain hollow point)" + desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." + icon_state = "a44roum-hp" + ammo_type = /obj/item/ammo_casing/a44roum/hp + max_ammo = 50 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm index f20c38cf1739..6f9ae74e61f9 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -1,16 +1,13 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled /obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) - make_stack() - update_appearance() - . = ..() - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/proc/make_stack() var/obj/item/ammo_casing/to_copy = ammo_type src.top_off() caliber = to_copy.caliber - base_icon_state = "[initial(to_copy.icon_state)][to_copy.bullet_skin ? "-[to_copy.bullet_skin]" : ""]" - name = "handful of [to_copy.name]s" + base_icon_state = to_copy.icon_state + name = "handful of [name]s" + update_appearance() + . = ..() /obj/item/storage/box/ammo //base type, don't use this! name = "box of default ammo" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm deleted file mode 100644 index ac82cf6bcebd..000000000000 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet - ammo_type = /obj/item/ammo_casing/caseless/gauss - -/obj/item/storage/box/ammo/ferropellet - name = "box of ferromagnetic pellets" - desc = "A box of ferromagnetic pellets for gauss firearms." - icon_state = "ferropelletsbox" - -/obj/item/storage/box/ammo/ferropellet/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet = 4) - generate_items_inside(items_inside,src) - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug - ammo_type = /obj/item/ammo_casing/caseless/gauss/slug - -/obj/item/storage/box/ammo/ferroslug - name = "box of ferromagnetic slugs" - desc = "A box of standard ferromagnetic slugs for gauss firearms." - icon_state = "ferroslugsbox" - -/obj/item/storage/box/ammo/ferroslug/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug = 4) - generate_items_inside(items_inside,src) - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance - ammo_type = /obj/item/ammo_casing/caseless/gauss/lance - -/obj/item/storage/box/ammo/ferrolance - name = "box of ferromagnetic lances" - desc = "A box of standard ferromagnetic lances for gauss firearms." - icon_state = "ferrolancesbox" - -/obj/item/storage/box/ammo/ferrolance/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance = 4) - generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index d7389389ebe6..8f75ad2fc207 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -3,87 +3,21 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm ammo_type = /obj/item/ammo_casing/c10mm -/obj/item/storage/box/ammo/c10mm - name = "box of 10mm ammo" - desc = "A box of standard 10mm ammo." - icon_state = "10mmbox" - -/obj/item/storage/box/ammo/c10mm/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/surplus ammo_type = /obj/item/ammo_casing/c10mm/surplus -/obj/item/storage/box/ammo/c10mm_surplus - name = "box of surplus 10mm ammo" - desc = "A box of low-quality 10mm ammo." - icon_state = "10mmbox-surplus" - -/obj/item/storage/box/ammo/c10mm_surplus/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap ammo_type = /obj/item/ammo_casing/c10mm/ap -/obj/item/storage/box/ammo/c10mm_ap - name = "box of AP 10mm ammo" - desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "10mmbox-ap" - -/obj/item/storage/box/ammo/c10mm_ap/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp ammo_type = /obj/item/ammo_casing/c10mm/hp -/obj/item/storage/box/ammo/c10mm_hp - name = "box of HP 10mm ammo" - desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "10mmbox-hp" - -/obj/item/storage/box/ammo/c10mm_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary ammo_type = /obj/item/ammo_casing/c10mm/inc -/obj/item/storage/box/ammo/c10mm_incendiary - name = "box of incendiary 10mm ammo" - desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "10mmbox-incendiary" - -/obj/item/storage/box/ammo/c10mm_incendiary/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber ammo_type = /obj/item/ammo_casing/c10mm/rubber -/obj/item/storage/box/ammo/c10mm_rubber - name = "box of rubber 10mm ammo" - desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "10mmbox-rubbershot" - -/obj/item/storage/box/ammo/c10mm_rubber/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber = 4) - generate_items_inside(items_inside,src) - // 9MM (Commander + SABR) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm @@ -96,25 +30,27 @@ /obj/item/storage/box/ammo/c9mm/PopulateContents() ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm = 4) - generate_items_inside(items_inside,src) + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus ammo_type = /obj/item/ammo_casing/c9mm/surplus -/obj/item/storage/box/ammo/c9mm_surplus +/obj/item/storage/box/ammo/c9mm/surplus name = "box of surplus 9mm ammo" desc = "A box of low-quality 9mm ammo." icon_state = "9mmbox-surplus" -/obj/item/storage/box/ammo/c9mm_surplus/PopulateContents() +/obj/item/storage/box/ammo/c9mm/surplus/PopulateContents() ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus = 48) - generate_items_inside(items_inside,src) + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus -/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/storage/box/ammo/c9mm/ap @@ -122,140 +58,78 @@ desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." icon_state = "9mmbox-ap" -/obj/item/storage/box/ammo/c9mm_ap/PopulateContents() +/obj/item/storage/box/ammo/c9mm/ap/PopulateContents() ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap = 4) - generate_items_inside(items_inside,src) + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp ammo_type = /obj/item/ammo_casing/c9mm/hp -/obj/item/storage/box/ammo/c9mm_hp +/obj/item/storage/box/ammo/c9mm/hp name = "box of HP 9mm ammo" desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." icon_state = "9mmbox-hp" -/obj/item/storage/box/ammo/c9mm_hp/PopulateContents() +/obj/item/storage/box/ammo/c9mm/hp/PopulateContents() ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_hp = 4) - generate_items_inside(items_inside,src) + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary ammo_type = /obj/item/ammo_casing/c9mm/inc -/obj/item/storage/box/ammo/c9mm_incendiary +/obj/item/storage/box/ammo/c9mm/incendiary name = "box of incendiary 9mm ammo" desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." icon_state = "9mmbox-incendiary" -/obj/item/storage/box/ammo/c9mm_incendiary/PopulateContents() +/obj/item/storage/box/ammo/c9mm/incendiary/PopulateContents() ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary = 4) - generate_items_inside(items_inside,src) + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber ammo_type = /obj/item/ammo_casing/c9mm/rubber -/obj/item/storage/box/ammo/c9mm_rubber +/obj/item/storage/box/ammo/c9mm/rubber name = "box of rubber 9mm ammo" desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." icon_state = "9mmbox-rubbershot" -/obj/item/storage/box/ammo/c9mm_rubber/PopulateContents() +/obj/item/storage/box/ammo/c9mm/rubber/PopulateContents() ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber = 4) - generate_items_inside(items_inside,src) + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber // .45 (Candor + C20R) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 ammo_type = /obj/item/ammo_casing/c45 -/obj/item/storage/box/ammo/c45 - name = "box of .45 ammo" - desc = "A box of standard .45 ammo." - icon_state = "45box" - -/obj/item/storage/box/ammo/c45/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus ammo_type = /obj/item/ammo_casing/c45/surplus -/obj/item/storage/box/ammo/c45_surplus - name = "box of surplus .45 ammo" - desc = "A box of low-quality .45 ammo." - icon_state = "45box-surplus" - -/obj/item/storage/box/ammo/c45_surplus/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap ammo_type = /obj/item/ammo_casing/c45/ap -/obj/item/storage/box/ammo/c45_ap - name = "box of AP .45 ammo" - desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "45box-ap" - -/obj/item/storage/box/ammo/c45_ap/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp ammo_type = /obj/item/ammo_casing/c45/hp -/obj/item/storage/box/ammo/c45_hp - name = "box of HP .45 ammo" - desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "45box-hp" - -/obj/item/storage/box/ammo/c45_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary ammo_type = /obj/item/ammo_casing/c45/inc -/obj/item/storage/box/ammo/c45_incendiary - name = "box of incendiary .45 ammo" - desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "45box-incendiary" - -/obj/item/storage/box/ammo/c45_incendiary/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber ammo_type = /obj/item/ammo_casing/c45/rubber -/obj/item/storage/box/ammo/c45_rubber - name = "box of incendiary .45 ammo" - desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "45box-rubbershot" - -/obj/item/storage/box/ammo/c45_rubber/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber = 4) - generate_items_inside(items_inside,src) - // .50 AE (Desert Eagle) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a50AE @@ -269,149 +143,39 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr ammo_type = /obj/item/ammo_casing/c22lr -/obj/item/storage/box/ammo/c22lr - name = "box of .22 LR ammo" - desc = "A box of standard .22 LR ammo." - icon_state = "22lrbox" - -/obj/item/storage/box/ammo/c22lr/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr = 4) - generate_items_inside(items_inside,src) - // .357 /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 - ammo_type = /obj/item/ammo_casing/a357 - -/obj/item/storage/box/ammo/a357 - name = "box of .357 ammo" - desc = "A box of standard .357 ammo." - icon_state = "22lrbox" - -/obj/item/storage/box/ammo/a357/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 = 4) - generate_items_inside(items_inside,src) + ammo_type = /obj/item/ammo_casing/c45 /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match ammo_type = /obj/item/ammo_casing/a357/match -/obj/item/storage/box/ammo/a357_match - name = "box of match .357 ammo" - desc = "A box of match .357 ammo." - icon_state = "357box-match" - -/obj/item/storage/box/ammo/a357_match/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp ammo_type = /obj/item/ammo_casing/a357/hp -/obj/item/storage/box/ammo/a357_hp - name = "box of HP .357 ammo" - desc = "A box of hollow point .357 ammo." - icon_state = "357box-hp" - -/obj/item/storage/box/ammo/a357_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp = 4) - generate_items_inside(items_inside,src) - // .45-70 (Hunting Revolver, Beacon) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 ammo_type = /obj/item/ammo_casing/a4570 -/obj/item/storage/box/ammo/a4570 - name = "box of .45-70 ammo" - desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." - icon_state = "4570" - -/obj/item/storage/box/ammo/a4570/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match ammo_type = /obj/item/ammo_casing/a4570/match -/obj/item/storage/box/ammo/a4570_match - name = "box of HP match .45-70 ammo" - desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." - icon_state = "4570-match" - -/obj/item/storage/box/ammo/a4570_match/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp ammo_type = /obj/item/ammo_casing/a4570/hp -/obj/item/storage/box/ammo/a4570_hp - name = "box of HP .45-70 ammo" - desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." - icon_state = "4570-hp" - -/obj/item/storage/box/ammo/a4570_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive ammo_type = /obj/item/ammo_casing/a4570/explosive -/obj/item/storage/box/ammo/a4570_explosive - name = "box of explosive .45-70 ammo" - desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." - icon_state = "4570-explosive" - -/obj/item/storage/box/ammo/a4570_explosive/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive = 4) - generate_items_inside(items_inside,src) - // .38 Special /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 ammo_type = /obj/item/ammo_casing/c38 -/obj/item/storage/box/ammo/c38 - name = "box of .38 ammo" - desc = "A box of standard .38 Special ammo." - icon_state = "38box" - -/obj/item/storage/box/ammo/c38/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus ammo_type = /obj/item/ammo_casing/c38/surplus -/obj/item/storage/box/ammo/c38_surplus - name = "box of surplus .38 ammo" - desc = "A box of low-quality .38 Special ammo." - icon_state = "38box-surplus" - -/obj/item/storage/box/ammo/c38_surplus/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/trac ammo_type = /obj/item/ammo_casing/c38/trac @@ -435,41 +199,144 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum ammo_type = /obj/item/ammo_casing/a44roum -/obj/item/storage/box/ammo/a44roum - name = "box of .44 roumain ammo" - desc = "A box of standard .44 roumain ammo." - icon_state = "a44roum" - -/obj/item/storage/box/ammo/a44roum/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber ammo_type = /obj/item/ammo_casing/a44roum/rubber -/obj/item/storage/box/ammo/a44roum_rubber - name = "box of rubber .44 roumain ammo" - desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "a44roum-rubber" - -/obj/item/storage/box/ammo/a44roum_rubber/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/rubber = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp ammo_type = /obj/item/ammo_casing/a44roum/hp -/obj/item/storage/box/ammo/a44roum_hp - name = "box of HP .44 roumain ammo" - desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "a44roum-rubber" +/obj/item/ammo_box/c10mm + name = "ammo box (10mm)" + desc = "A box of standard 10mm ammo." + icon_state = "10mmbox" + ammo_type = /obj/item/ammo_casing/c10mm + max_ammo = 50 -/obj/item/storage/box/ammo/a44roum_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/hp = 4) - generate_items_inside(items_inside,src) +/obj/item/ammo_box/c10mm/surplus + name = "ammo box (10mm surplus)" + desc = "A box of low-quality 10mm ammo." + icon_state = "10mmbox-surplus" + ammo_type = /obj/item/ammo_casing/c10mm/surplus + +/obj/item/ammo_box/c10mm/rubbershot + name = "ammo box (10mm rubbershot)" + desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "10mmbox-rubbershot" + ammo_type = /obj/item/ammo_casing/c9mm/rubber + +/obj/item/ammo_box/c10mm/ap + name = "ammo box (10mm armor-piercing)" + desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "10mmbox-ap" + ammo_type = /obj/item/ammo_casing/c10mm/ap + +/obj/item/ammo_box/c10mm/hp + name = "ammo box (10mm hollow point)" + desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "10mmbox-hp" + ammo_type = /obj/item/ammo_casing/c10mm/hp + +/obj/item/ammo_box/c10mm/fire + name = "ammo box (10mm incendiary)" + desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "10mmbox-incendiary" + ammo_type = /obj/item/ammo_casing/c10mm/inc + + + + + + + + + + + + + + + + + + + + + + + +/obj/item/ammo_box/c38_box + name = "ammo box (.38)" + desc = "A box of standard .38 Special ammo." + icon_state = "38box" + ammo_type = /obj/item/ammo_casing/c38 + max_ammo = 50 + +/obj/item/ammo_box/c38_box/surplus + name = "ammo box (.38 surplus)" + desc = "A box of low-quality .38 Special ammo." + icon_state = "38box-surplus" + ammo_type = /obj/item/ammo_casing/c38/surplus + +/obj/item/ammo_box/a12g + name = "ammo box (12g buckshot)" + desc = "A box of 12-gauge buckshot shells, devastating at close range." + icon_state = "12gbox-buckshot" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + max_ammo = 25 + +/obj/item/ammo_box/a12g/slug + name = "ammo box (12g slug)" + desc = "A box of 12-gauge slugs, for improved accuracy and penetration." + icon_state = "12gbox-slug" + ammo_type = /obj/item/ammo_casing/shotgun + +/obj/item/ammo_box/a12g/beanbag + name = "ammo box (12g beanbag)" + desc = "A box of 12-gauge beanbag shells, for incapacitating targets." + icon_state = "12gbox-beanbag" + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +/obj/item/ammo_box/a12g/rubbershot + name = "ammo box (12g rubbershot)" + desc = "A box of 12-gauge rubbershot shells, designed for riot control." + icon_state = "12gbox-rubbershot" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + + + +/obj/item/ammo_box/c45 + name = "ammo box (.45)" + desc = "A box of standard .45 ammo." + icon_state = "45box" + ammo_type = /obj/item/ammo_casing/c45 + max_ammo = 50 + +/obj/item/ammo_box/c45/surplus + name = "ammo box (.45 surplus)" + desc = "A box of low-quality .45 ammo." + icon_state = "45box-surplus" + ammo_type = /obj/item/ammo_casing/c45/surplus + +/obj/item/ammo_box/c45/rubbershot + name = "ammo box (.45 rubbershot)" + desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "45box-rubbershot" + ammo_type = /obj/item/ammo_casing/c45/rubber + +/obj/item/ammo_box/c45/ap + name = "ammo box (.45 armor-piercing)" + desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "45box-ap" + ammo_type = /obj/item/ammo_casing/c45/ap + +/obj/item/ammo_box/c45/hp + name = "ammo box (.45 hollow point)" + desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "45box-hp" + ammo_type = /obj/item/ammo_casing/c45/hp + +/obj/item/ammo_box/c45/fire + name = "ammo box (.45 incendiary)" + desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "45box-incendiary" + ammo_type = /obj/item/ammo_casing/c45/inc diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm index 7e0d24b9eca0..128cd0213610 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -3,31 +3,9 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r ammo_type = /obj/item/ammo_casing/a8_50r -/obj/item/storage/box/ammo/a8_50r - name = "box of 8x50mm ammo" - desc = "A box of standard 8x50mm ammo." - icon_state = "8x50mmbox" - -/obj/item/storage/box/ammo/a8_50r/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp ammo_type = /obj/item/ammo_casing/a8_50rhp -/obj/item/storage/box/ammo/a8_50r_hp - name = "box of HP 8x50mm ammo" - desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." - icon_state = "8x50mmbox-hp" - -/obj/item/storage/box/ammo/a8_50r_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp = 4) - generate_items_inside(items_inside,src) - // 8x58mm Caseless (SSG-669C) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a858 @@ -38,17 +16,6 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 ammo_type = /obj/item/ammo_casing/a300 -/obj/item/storage/box/ammo/a300 - name = "box of .300 magnum ammo" - desc = "A box of standard .300 Magnum ammo." - icon_state = "300box" - -/obj/item/storage/box/ammo/a300/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 = 4) - generate_items_inside(items_inside,src) - // 5.56x39mm (M-90gl Carbine & P-16) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_39 @@ -67,20 +34,6 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 ammo_type = /obj/item/ammo_casing/a762_40 -/obj/item/storage/box/ammo/a762_40 - name = "box of 7.62x40mm CLIP ammo" - desc = "A box of standard 7.62x40mm CLIP ammo." - icon_state = "a762_40box_big" - -/obj/item/storage/box/ammo/a762_40/inteq - icon_state = "a762_40box_big_inteq" - -/obj/item/storage/box/ammo/a762_40/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 = 4) - generate_items_inside(items_inside,src) - // .300 Blackout (Polymer Survivor Rifle) /obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk @@ -94,16 +47,5 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 ammo_type = /obj/item/ammo_casing/a308 -/obj/item/storage/box/ammo/a308 - name = "box of .308 ammo" - desc = "A box of standard .308 ammo." - icon_state = "a308box" - -/obj/item/storage/box/ammo/a308/hunterspride - icon_state = "a308box-HP" - -/obj/item/storage/box/ammo/a308/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 = 4) - generate_items_inside(items_inside,src) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/caseless/c299 + ammo_type = /obj/item/ammo_casing/caseless/c299 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index 5a6c99d8297c..9bf8a48bff52 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -2,17 +2,6 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm ammo_type = /obj/item/ammo_casing/c46x30mm -/obj/item/storage/box/ammo/c46x30mm - name = "box of 4.6x30mm ammo" - desc = "A box of standard 4.6x30mm ammo." - icon_state = "46x30mmbox" - -/obj/item/storage/box/ammo/c46x30mm/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm/ap ammo_type = /obj/item/ammo_casing/c46x30mm/ap @@ -27,69 +16,14 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm ammo_type = /obj/item/ammo_casing/caseless/c556mm -/obj/item/storage/box/ammo/c556mm - name = "box of 5.56mm HITP caseless ammo" - desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." - icon_state = "556mmHITPbox" - -/obj/item/storage/box/ammo/c556mm/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus -/obj/item/storage/box/ammo/c556mm_surplus - name = "box of surplus 5.56mm HITP caseless ammo" - desc = "A box of low-quality 5.56mm HITP caseless ammo." - icon_state = "556mmHITPbox-surplus" - -/obj/item/storage/box/ammo/c556mm_surplus/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap -/obj/item/storage/box/ammo/c556mm_ap - name = "box of AP 5.56mm HITP caseless ammo" - desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "556mmHITPbox-ap" - -/obj/item/storage/box/ammo/c556mm_ap/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp -/obj/item/storage/box/ammo/c556mm_hp - name = "box of HP 5.56mm HITP caseless ammo" - desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "556mmHITPbox-hp" - -/obj/item/storage/box/ammo/c556mm_hp/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot - -/obj/item/storage/box/ammo/c556mm_rubber - name = "box of rubber 5.56mm HITP caseless ammo" - desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "556mmHITPbox-rubbershot" - -/obj/item/storage/box/ammo/c556mm_rubber/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot = 4) - generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm deleted file mode 100644 index e0cd61a885b6..000000000000 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts - ammo_type = /obj/item/ammo_casing/c10mm/foam_dart - -/obj/item/storage/box/ammo/foam_darts - name = "box of foam darts" - icon = 'icons/obj/guns/toy.dmi' - icon_state = "foambox" - -/obj/item/storage/box/ammo/foam_darts/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts = 4) - generate_items_inside(items_inside,src) - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot - ammo_type = /obj/item/ammo_casing/c10mm/foam_dart/riot - -/obj/item/storage/box/ammo/foam_darts/riot - name = "box of foam darts" - icon_state = "foambox_riot" - -/obj/item/storage/box/ammo/foam_darts/riot/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot = 4) - generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm index bf201a2f2656..2b4d0e6538a2 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm @@ -5,59 +5,12 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot ammo_type = /obj/item/ammo_casing/shotgun/buckshot -/obj/item/storage/box/ammo/a12g_buckshot - name = "box of 12ga buckshot" - desc = "A box of 12-gauge buckshot shells, devastating at close range." - icon_state = "12gbox-buckshot" - -/obj/item/storage/box/ammo/a12g_buckshot/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot = 4) - generate_items_inside(items_inside,src) - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/slug - ammo_type = /obj/item/ammo_casing/shotgun - -/obj/item/storage/box/ammo/a12g_slug - name = "box of 12ga slugs" - desc = "A box of 12-gauge slugs, for improved accuracy and penetration." - icon_state = "12gbox-slug" - -/obj/item/storage/box/ammo/a12g_slug/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/slug = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag ammo_type = /obj/item/ammo_casing/shotgun/beanbag -/obj/item/storage/box/ammo/a12g_beanbag - name = "box of 12ga beanbags" - desc = "A box of 12-gauge beanbag shells, for incapacitating targets." - icon_state = "12gbox-beanbag" - -/obj/item/storage/box/ammo/a12g_beanbag/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber ammo_type = /obj/item/ammo_casing/shotgun/rubbershot -/obj/item/storage/box/ammo/a12g_rubbershot - name = "box of 12ga beanbags" - desc = "A box of 12-gauge rubbershot shells, designed for riot control." - icon_state = "12gbox-rubbershot" - -/obj/item/storage/box/ammo/a12g_beanbag/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber = 4) - generate_items_inside(items_inside,src) - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary ammo_type = /obj/item/ammo_casing/shotgun/incendiary diff --git a/shiptest.dme b/shiptest.dme index f9094aa0dff9..15bb024014c5 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3025,13 +3025,11 @@ #include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\_ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\_premade_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_gauss_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_lmg_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_pistol_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_rifle_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_smg_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_sniper_stacks.dm" -#include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_stacks_misc.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\shotshell_stacks.dm" #include "code\modules\projectiles\boxes_magazines\external\gauss.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" diff --git a/tools/UpdatePaths/Scripts/3456_ammoboxes.txt b/tools/UpdatePaths/Scripts/3456_ammoboxes.txt deleted file mode 100644 index ebebd3a1e730..000000000000 --- a/tools/UpdatePaths/Scripts/3456_ammoboxes.txt +++ /dev/null @@ -1,71 +0,0 @@ -oldpath : newpath - -/obj/item/ammo_box/c10mm : /obj/item/storage/box/ammo/c10mm -/obj/item/ammo_box/c10mm/surplus : /obj/item/storage/box/ammo/c10mm_surplus -/obj/item/ammo_box/c10mm/ap : /obj/item/storage/box/ammo/c10mm_ap -/obj/item/ammo_box/c10mm/hp : /obj/item/storage/box/ammo/c10mm_hp -/obj/item/ammo_box/c10mm/fire: /obj/item/storage/box/ammo/c10mm_incendiary -/obj/item/ammo_box/c10mm/rubbershot : /obj/item/storage/box/ammo/c10mm_rubber - -/obj/item/ammo_box/c9mm : /obj/item/storage/box/ammo/c9mm -/obj/item/ammo_box/c9mm/surplus : /obj/item/storage/box/ammo/c9mm_surplus -/obj/item/ammo_box/c9mm/ap : /obj/item/storage/box/ammo/c9mm/ap -/obj/item/ammo_box/c9mm/hp : /obj/item/storage/box/ammo/c9mm_hp -/obj/item/ammo_box/c9mm/fire : /obj/item/storage/box/ammo/c9mm_incendiary -/obj/item/ammo_box/c9mm/rubbershot : /obj/item/storage/box/ammo/c9mm_rubber - -/obj/item/ammo_box/c45 : /obj/item/storage/box/ammo/c45 -/obj/item/ammo_box/c45/surplus : /obj/item/storage/box/ammo/c45_surplus -/obj/item/ammo_box/c45/ap : /obj/item/storage/box/ammo/c45_ap -/obj/item/ammo_box/c45/hp : /obj/item/storage/box/ammo/c45_hp -/obj/item/ammo_box/c45/fire : /obj/item/storage/box/ammo/c45_incendiary -/obj/item/ammo_box/c45/rubbershot : /obj/item/storage/box/ammo/c45_rubber - -/obj/item/ammo_box/c22lr_box : /obj/item/storage/box/ammo/c22lr - -/obj/item/ammo_box/a357_box : /obj/item/storage/box/ammo/a357 -/obj/item/ammo_box/a357_box/match : /obj/item/storage/box/ammo/a357_match -/obj/item/ammo_box/a357_box/hp : /obj/item/storage/box/ammo/a357_hp - -/obj/item/ammo_box/a4570 : /obj/item/storage/box/ammo/a4570 -/obj/item/ammo_box/a4570/match : /obj/item/storage/box/ammo/a4570_match -/obj/item/ammo_box/a4570/hp : /obj/item/storage/box/ammo/a4570_hp -/obj/item/ammo_box/a4570/explosive : /obj/item/storage/box/ammo/a4570_explosive - -/obj/item/ammo_box/c38_box : /obj/item/storage/box/ammo/c38 -/obj/item/ammo_box/c38_box/surplus : /obj/item/storage/box/ammo/c38_surplus - -/obj/item/ammo_box/a44roum : /obj/item/storage/box/ammo/a44roum -/obj/item/ammo_box/a44roum/hp : /obj/item/storage/box/ammo/a44roum_hp -/obj/item/ammo_box/a44roum/rubber : /obj/item/storage/box/ammo/a44roum_rubber - -/obj/item/ammo_box/a12g : /obj/item/storage/box/ammo/a12g_buckshot -/obj/item/ammo_box/a12g/slug : /obj/item/storage/box/ammo/a12g_slug -/obj/item/ammo_box/a12g/beanbag : /obj/item/storage/box/ammo/a12g_beanbag -/obj/item/ammo_box/a12g/rubbershot : /obj/item/storage/box/ammo/a12g_rubbershot - -/obj/item/ammo_box/c46x30mm_box : /obj/item/storage/box/ammo/c46x30mm - -/obj/item/ammo_box/c556mmHITP : /obj/item/storage/box/ammo/c556mm -/obj/item/ammo_box/c556mmHITP/surplus : /obj/item/storage/box/ammo/c556mm_surplus -/obj/item/ammo_box/c556mmHITP/ap : /obj/item/storage/box/ammo/c556mm_ap -/obj/item/ammo_box/c556mmHITP/hp : /obj/item/storage/box/ammo/c556mm_hp -/obj/item/ammo_box/c556mmHITP/rubbershot : /obj/item/storage/box/ammo/c556mm_rubber - -/obj/item/ammo_box/c8x50mm_box : /obj/item/storage/box/ammo/a8_50r -/obj/item/ammo_box/c8x50mmhp_box : /obj/item/storage/box/ammo/a8_50r_hp - -/obj/item/ammo_box/a300_box : /obj/item/storage/box/ammo/a300 - -/obj/item/ammo_box/a762_40 : /obj/item/storage/box/ammo/a762_40 -/obj/item/ammo_box/a762_40/inteq : /obj/item/storage/box/ammo/a762_40/inteq - -/obj/item/ammo_box/a308 : /obj/item/storage/box/ammo/a308 -/obj/item/ammo_box/a308/hunterspride : /obj/item/storage/box/ammo/a308/hunterspride - -/obj/item/ammo_box/ferropelletbox : /obj/item/storage/box/ammo/ferropellet -/obj/item/ammo_box/ferroslugbox : /obj/item/storage/box/ammo/ferroslug -/obj/item/ammo_box/ferrolancebox : /obj/item/storage/box/ammo/ferrolance - -/obj/item/ammo_box/foambox : /obj/item/storage/box/ammo/foam_darts -/obj/item/ammo_box/foambox/riot : /obj/item/storage/box/ammo/foam_darts/riot \ No newline at end of file From f2d98033c41e376d849429a69a3c2aec8f8e09cf Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 12:50:28 -0700 Subject: [PATCH 09/31] Fixes --- code/game/objects/items/melee/weaponry.dm | 2 +- code/modules/antagonists/gang/outfits.dm | 11 +- .../clothing/outfits/ert/frontiersmen_ert.dm | 10 +- .../hostile/mining_mobs/hivelord_outfits.dm | 4 +- .../projectiles/ammunition/_ammo_casing.dm | 2 +- .../ammunition/ballistic/pistol.dm | 2 +- .../projectiles/boxes_magazines/ammo_boxes.dm | 743 ++++++++---------- .../prefab_stacks/_premade_stacks.dm | 12 +- .../prefab_stacks/premade_gauss_stacks.dm | 41 + .../prefab_stacks/premade_pistol_stacks.dm | 471 +++++++---- .../prefab_stacks/premade_rifle_stacks.dm | 62 +- .../prefab_stacks/premade_shotshell_stacks.dm | 65 ++ .../prefab_stacks/premade_smg_stacks.dm | 66 ++ .../prefab_stacks/premade_stacks_misc.dm | 26 + .../prefab_stacks/shotshell_stacks.dm | 18 - icons/obj/ammunition/ammo_shotshells.dmi | Bin 3149 -> 0 bytes shiptest.dme | 4 +- tools/UpdatePaths/3456_ammoboxes.txt | 69 ++ 18 files changed, 994 insertions(+), 614 deletions(-) create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm delete mode 100644 code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm delete mode 100644 icons/obj/ammunition/ammo_shotshells.dmi create mode 100644 tools/UpdatePaths/3456_ammoboxes.txt diff --git a/code/game/objects/items/melee/weaponry.dm b/code/game/objects/items/melee/weaponry.dm index 11c1b118570b..131e5e1aab20 100644 --- a/code/game/objects/items/melee/weaponry.dm +++ b/code/game/objects/items/melee/weaponry.dm @@ -75,7 +75,7 @@ /obj/item/throwing_star/magspear name = "magnetic spear" desc = "A reusable spear that is typically loaded into kinetic spearguns." - icon = 'icons/obj/ammo_bullets.dmi' + icon = 'icons/obj/ammunition/ammo_bullets.dmi' icon_state = "magspear" throwforce = 25 //kills regular carps in one hit force = 10 diff --git a/code/modules/antagonists/gang/outfits.dm b/code/modules/antagonists/gang/outfits.dm index 77c091d2126a..f76bf026e12c 100644 --- a/code/modules/antagonists/gang/outfits.dm +++ b/code/modules/antagonists/gang/outfits.dm @@ -30,10 +30,7 @@ backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, - /obj/item/shield/riot/tele = 1, - /obj/item/ammo_box/magazine/m45 = 3, - /obj/item/ammo_box/c45 = 2) - + /obj/item/shield/riot/tele = 1) /datum/outfit/families_police/beatcop/armored name = "Families: Armored Beat Cop" @@ -53,8 +50,7 @@ backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, - /obj/item/shield/riot/tele = 1, - /obj/item/storage/box/lethalshot = 2) + /obj/item/shield/riot/tele = 1) /datum/outfit/families_police/beatcop/fbi name = "Families: Space FBI Officer" @@ -65,8 +61,7 @@ /obj/item/storage/box/teargas = 1, /obj/item/storage/box/flashbangs = 1, /obj/item/shield/riot/tele = 1, - /obj/item/ammo_box/magazine/smgm9mm = 3, - /obj/item/ammo_box/c9mm = 2) + /obj/item/ammo_box/magazine/smgm9mm = 3) /datum/outfit/families_police/beatcop/military name = "Families: Space Military" diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index 8401455bf7d8..5a4710ac644d 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -89,11 +89,11 @@ var/loops = rand(1,3) for(var/i in 1 to loops) var/ammotype = pick(list( - /obj/item/ammo_box/c8x50mm_box, - /obj/item/ammo_box/c45, - /obj/item/ammo_box/a357_box, - /obj/item/ammo_box/c45, - /obj/item/ammo_box/a4570, + /obj/item/storage/box/ammo/a8_50r, + /obj/item/storage/box/ammo/c45, + /obj/item/storage/box/ammo/a357, + /obj/item/storage/box/ammo/c45, + /obj/item/storage/box/ammo/a4570, /obj/item/stock_parts/cell/gun/mini)) backpack_contents += ammotype diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm index 4869d4a95c1c..86224e131747 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -461,8 +461,8 @@ /obj/item/assembly/flash/handheld = 5, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, - /obj/item/ammo_box/c9mm/rubbershot = 3, - /obj/item/ammo_box/c9mm = 1, + /obj/item/storage/box/ammo/c9mm_rubber = 3, + /obj/item/storage/box/ammo/c9mm = 1, /obj/item/stock_parts/cell/gun = 3, /obj/item/coin/antagtoken = 1, /obj/item/grenade/stingbang = 1 diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 23afe19ea294..19e1965939b9 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -167,7 +167,7 @@ desc = "[initial(desc)][BB ? null : " This one is spent."]" return ..() -//proc to magically refill a casing with a new projectile +///Proc to magically refill a casing with a new projectile /obj/item/ammo_casing/proc/newshot() //For energy weapons, syringe gun, shotgun shells and wands (!). if(!BB) BB = new projectile_type(src, src) diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 5c2e4919dca0..80248255dcaf 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -58,7 +58,7 @@ name = "9mm armor-piercing bullet casing" desc = "A 9mm armor-piercing bullet casing." bullet_skin = "ap" - projectile_type =/obj/projectile/bullet/c9mm/ap + projectile_type = /obj/projectile/bullet/c9mm/ap /obj/item/ammo_casing/c9mm/hp name = "9mm hollow point bullet casing" diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 5b78f1fc93a1..afa2baed7324 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -2,12 +2,12 @@ /obj/item/ammo_box/a357 name = "speed loader (.357)" - desc = "A 6-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." - icon_state = "speedloader_357-6" + desc = "A 7-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." + icon_state = "speedloader_357-7" base_icon_state = "speedloader_357" ammo_type = /obj/item/ammo_casing/a357 caliber = ".357" - max_ammo = 6 + max_ammo = 7 multiple_sprites = AMMO_BOX_PER_BULLET item_flags = NO_MAT_REDEMPTION w_class = WEIGHT_CLASS_TINY @@ -18,63 +18,62 @@ /obj/item/ammo_box/a357/match name = "speed loader (.357 match)" - desc = "A 6-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + desc = "A 7-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." ammo_type = /obj/item/ammo_casing/a357/match /obj/item/ammo_box/a357/hp name = "speed loader (.357 hollow point)" - desc = "A 6-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." + desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." ammo_type = /obj/item/ammo_casing/a357/hp -/obj/item/ammo_box/a357_box - name = "ammo box (.357)" - desc = "A box of standard .357 ammo." - icon_state = "357box" - ammo_type = /obj/item/ammo_casing/a357 - max_ammo = 50 +// /obj/item/ammo_box/a357_box +// name = "ammo box (.357)" +// desc = "A box of standard .357 ammo." +// icon_state = "357box" +// ammo_type = /obj/item/ammo_casing/a357 +// max_ammo = 50 -/obj/item/ammo_box/a357_box/match - name = "ammo box (.357)" - desc = "A box of match .357 ammo." - icon_state = "357box-match" - ammo_type = /obj/item/ammo_casing/a357/match - max_ammo = 50 +// /obj/item/ammo_box/a357_box/match +// name = "ammo box (.357)" +// desc = "A box of match .357 ammo." +// icon_state = "357box-match" +// ammo_type = /obj/item/ammo_casing/a357/match +// max_ammo = 50 -/obj/item/ammo_box/a357_box/hp - name = "ammo box (.357)" - desc = "A box of hollow point .357 ammo." - icon_state = "357box-hp" - ammo_type = /obj/item/ammo_casing/a357/hp - max_ammo = 50 +// /obj/item/ammo_box/a357_box/hp +// name = "ammo box (.357)" +// desc = "A box of hollow point .357 ammo." +// icon_state = "357box-hp" +// ammo_type = /obj/item/ammo_casing/a357/hp +// max_ammo = 50 // .45-70 Ammo Holders (Hunting Revolver) -/obj/item/ammo_box/a4570 - name = "ammo box (.45-70)" - desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." - icon_state = "4570" - ammo_type = /obj/item/ammo_casing/a4570 - max_ammo = 18 +// /obj/item/ammo_box/a4570 +// name = "ammo box (.45-70)" +// desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." +// icon_state = "4570" +// ammo_type = /obj/item/ammo_casing/a4570 +// max_ammo = 12 -/obj/item/ammo_box/a4570/match - name = "ammo box (.45-70 match)" - desc = "A 18-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." - icon_state = "4570-match" - ammo_type = /obj/item/ammo_casing/a4570/match +// /obj/item/ammo_box/a4570/match +// name = "ammo box (.45-70 match)" +// desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." +// icon_state = "4570-match" +// ammo_type = /obj/item/ammo_casing/a4570/match +// /obj/item/ammo_box/a4570/hp +// name = "ammo box (.45-70 hollow point)" +// desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." +// icon_state = "4570-hp" +// ammo_type = /obj/item/ammo_casing/a4570/hp -/obj/item/ammo_box/a4570/hp - name = "ammo box (.45-70 hollow point)" - desc = "A 18-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." - icon_state = "4570-hp" - ammo_type = /obj/item/ammo_casing/a4570/hp - -/obj/item/ammo_box/a4570/explosive - name = "ammo box (.45-70 explosive)" - desc = "A 18-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." - icon_state = "4570-explosive" - ammo_type = /obj/item/ammo_casing/a4570/explosive +// /obj/item/ammo_box/a4570/explosive +// name = "ammo box (.45-70 explosive)" +// desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." +// icon_state = "4570-explosive" +// ammo_type = /obj/item/ammo_casing/a4570/explosive // .38 special Speed Loaders (Colt Detective Special) @@ -113,13 +112,13 @@ ammo_type = /obj/item/ammo_casing/c38/dumdum /obj/item/ammo_box/c38/hotshot - name = "speed loader (.38 hearth)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These hearthwine bullets contain an incendiary payload that set targets alight." + name = "speed loader (.38 hot shot)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These hot shot bullets contain an incendiary payload that set targets alight." ammo_type = /obj/item/ammo_casing/c38/hotshot /obj/item/ammo_box/c38/iceblox - name = "speed loader (.38 chilled)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These icewine bullets contain a cryogenic payload that chills targets." + name = "speed loader (.38 iceblox)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These iceblox bullets contain a cryogenic payload that chills targets." ammo_type = /obj/item/ammo_casing/c38/iceblox /obj/item/ammo_box/c38/empty @@ -136,13 +135,10 @@ multiple_sprites = AMMO_BOX_PER_BULLET instant_load = TRUE -/obj/item/ammo_box/a858/empty - start_empty = TRUE - // .308 Stripper Clip (Vickland) /obj/item/ammo_box/vickland_a308 - name = "stripper clip (.308)" + name = "stripper clip (.308)" desc = "A 5-round stripper clip for the Vickland Battle Rifle. The Vickland itself has a 10 round capacity, so keep in mind two of these are needed to fully reload it. These rounds do good damage with significant armor penetration." icon_state = "stripper_308-5" base_icon_state = "stripper_308" @@ -152,9 +148,6 @@ w_class = WEIGHT_CLASS_TINY instant_load = TRUE -/obj/item/ammo_box/vickland_a308/empty - start_empty = TRUE - // .300 Magnum Stripper Clip (Scout) /obj/item/ammo_box/a300 @@ -169,22 +162,19 @@ /obj/item/ammo_box/a300/empty start_empty = TRUE -// 7.62 Stripper Clip (Polymer Survivor Rifle) +// .300 Blackout Stripper Clip (Polymer Survivor Rifle) -/obj/item/ammo_box/a762_stripper - name = "stripper clip (7.62)" +/obj/item/ammo_box/aac_300blk_stripper + name = "stripper clip (.300 BLK)" desc = "A 5-round stripper clip for makeshift bolt-action rifles. These rounds do good damage with good armor penetration." - icon_state = "stripper_308-5" - base_icon_state = "stripper_308" - ammo_type = /obj/item/ammo_casing/a762_40 - caliber = "7.62x40mm" + icon_state = "300m" + ammo_type = /obj/item/ammo_casing/aac_300blk + caliber = ".300 BLK" max_ammo = 5 multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_TINY instant_load = TRUE -/obj/item/ammo_box/a762_stripper/empty - start_empty = TRUE // Ferromagnetic Pellet Speed Loader (Claris) /obj/item/ammo_box/amagpellet_claris @@ -200,203 +190,185 @@ // Ammo Boxes -/obj/item/ammo_box/c38_box - name = "ammo box (.38)" - desc = "A box of standard .38 Special ammo." - icon_state = "38box" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 50 - -/obj/item/ammo_box/c38_box/surplus - name = "ammo box (.38 surplus)" - desc = "A box of low-quality .38 Special ammo." - icon_state = "38box-surplus" - ammo_type = /obj/item/ammo_casing/c38/surplus - -/obj/item/ammo_box/c38_box/hotshot - name = "ammo box (.38 hearth)" - desc = "An unorthodox .38 Special cartridge infused with hearthwine. Catches the target on fire." - icon_state = "38hotshot" - ammo_type = /obj/item/ammo_casing/c38/hotshot - -/obj/item/ammo_box/c38_box/iceblox - name = "ammo box (.38 chilled)" - desc = "An unorthodox .38 Special cartridge infused with icewine. Chills the target, slowing them down." - icon_state = "38iceblox" - ammo_type = /obj/item/ammo_casing/c38/iceblox - -/obj/item/ammo_box/a12g - name = "ammo box (12g buckshot)" - desc = "A box of 12-gauge buckshot shells, devastating at close range." - icon_state = "12gbox-buckshot" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 25 - -/obj/item/ammo_box/a12g/slug - name = "ammo box (12g slug)" - desc = "A box of 12-gauge slugs, for improved accuracy and penetration." - icon_state = "12gbox-slug" - ammo_type = /obj/item/ammo_casing/shotgun - -/obj/item/ammo_box/a12g/beanbag - name = "ammo box (12g beanbag)" - desc = "A box of 12-gauge beanbag shells, for incapacitating targets." - icon_state = "12gbox-beanbag" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -/obj/item/ammo_box/a12g/rubbershot - name = "ammo box (12g rubbershot)" - desc = "A box of 12-gauge rubbershot shells, designed for riot control." - icon_state = "12gbox-rubbershot" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - -/obj/item/ammo_box/a12g/blanks - name = "ammo box (12g blanks)" - desc = "A box of 12-gauge blank shells, designed for training." - icon_state ="12gbox-slug" - ammo_type = /obj/item/ammo_casing/shotgun/blank - -/obj/item/ammo_box/c9mm - name = "ammo box (9mm)" - desc = "A box of standard 9mm ammo." - icon_state = "9mmbox" - ammo_type = /obj/item/ammo_casing/c9mm - max_ammo = 50 - -/obj/item/ammo_box/c9mm/surplus - name = "ammo box (9mm surplus)" - desc = "A box of low-quality 9mm ammo." - icon_state = "9mmbox-surplus" - ammo_type = /obj/item/ammo_casing/c9mm/surplus - -/obj/item/ammo_box/c9mm/rubbershot - name = "ammo box (9mm rubbershot)" - desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "9mmbox-rubbershot" - ammo_type = /obj/item/ammo_casing/c9mm/rubber - -/obj/item/ammo_box/c9mm/ap - name = "ammo box (9mm armor-piercing)" - desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "9mmbox-ap" - ammo_type = /obj/item/ammo_casing/c9mm/ap - -/obj/item/ammo_box/c9mm/hp - name = "ammo box (9mm hollow point)" - desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "9mmbox-hp" - ammo_type = /obj/item/ammo_casing/c9mm/hp - -/obj/item/ammo_box/c9mm/fire - name = "ammo box (9mm incendiary)" - desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "9mmbox-incendiary" - ammo_type = /obj/item/ammo_casing/c9mm/inc - -/obj/item/ammo_box/c10mm - name = "ammo box (10mm)" - desc = "A box of standard 10mm ammo." - icon_state = "10mmbox" - ammo_type = /obj/item/ammo_casing/c10mm - max_ammo = 50 - -/obj/item/ammo_box/c10mm/surplus - name = "ammo box (10mm surplus)" - desc = "A box of low-quality 10mm ammo." - icon_state = "10mmbox-surplus" - ammo_type = /obj/item/ammo_casing/c10mm/surplus - -/obj/item/ammo_box/c10mm/rubbershot - name = "ammo box (10mm rubbershot)" - desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "10mmbox-rubbershot" - ammo_type = /obj/item/ammo_casing/c10mm/rubber - -/obj/item/ammo_box/c10mm/ap - name = "ammo box (10mm armor-piercing)" - desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "10mmbox-ap" - ammo_type = /obj/item/ammo_casing/c10mm/ap - -/obj/item/ammo_box/c10mm/hp - name = "ammo box (10mm hollow point)" - desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "10mmbox-hp" - ammo_type = /obj/item/ammo_casing/c10mm/hp - -/obj/item/ammo_box/c10mm/fire - name = "ammo box (10mm incendiary)" - desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "10mmbox-incendiary" - ammo_type = /obj/item/ammo_casing/c10mm/inc - -/obj/item/ammo_box/c45 - name = "ammo box (.45)" - desc = "A box of standard .45 ammo." - icon_state = "45box" - ammo_type = /obj/item/ammo_casing/c45 - max_ammo = 50 - -/obj/item/ammo_box/c45/surplus - name = "ammo box (.45 surplus)" - desc = "A box of low-quality .45 ammo." - icon_state = "45box-surplus" - ammo_type = /obj/item/ammo_casing/c45/surplus - -/obj/item/ammo_box/c45/rubbershot - name = "ammo box (.45 rubbershot)" - desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "45box-rubbershot" - ammo_type = /obj/item/ammo_casing/c45/rubber - -/obj/item/ammo_box/c45/ap - name = "ammo box (.45 armor-piercing)" - desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "45box-ap" - ammo_type = /obj/item/ammo_casing/c45/ap - -/obj/item/ammo_box/c45/hp - name = "ammo box (.45 hollow point)" - desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "45box-hp" - ammo_type = /obj/item/ammo_casing/c45/hp - -/obj/item/ammo_box/c45/fire - name = "ammo box (.45 incendiary)" - desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "45box-incendiary" - ammo_type = /obj/item/ammo_casing/c45/inc - -/obj/item/ammo_box/c556mmHITP - name = "ammo box (5.56mm HITP caseless)" - desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." - icon_state = "556mmHITPbox" - ammo_type = /obj/item/ammo_casing/caseless/c556mm - max_ammo = 50 - -/obj/item/ammo_box/c556mmHITP/surplus - name = "ammo box (5.56mm HITP caseless surplus)" - desc = "A box of low-quality 5.56mm HITP caseless ammo." - icon_state = "556mmHITPbox-surplus" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus - -/obj/item/ammo_box/c556mmHITP/rubbershot - name = "ammo box (5.56mm HITP caseless rubbershot)" - desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "556mmHITPbox-rubbershot" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot - -/obj/item/ammo_box/c556mmHITP/ap - name = "ammo box (5.56mm HITP caseless armor-piercing)" - desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "556mmHITPbox-ap" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap - -/obj/item/ammo_box/c556mmHITP/hp - name = "ammo box (5.56mm HITP caseless hollow point)" - desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "556mmHITPbox-hp" - ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp +// /obj/item/ammo_box/c38_box +// name = "ammo box (.38)" +// desc = "A box of standard .38 Special ammo." +// icon_state = "38box" +// ammo_type = /obj/item/ammo_casing/c38 +// max_ammo = 50 + +// /obj/item/ammo_box/c38_box/surplus +// name = "ammo box (.38 surplus)" +// desc = "A box of low-quality .38 Special ammo." +// icon_state = "38box-surplus" +// ammo_type = /obj/item/ammo_casing/c38/surplus + +// /obj/item/ammo_box/a12g +// name = "ammo box (12g buckshot)" +// desc = "A box of 12-gauge buckshot shells, devastating at close range." +// icon_state = "12gbox-buckshot" +// ammo_type = /obj/item/ammo_casing/shotgun/buckshot +// max_ammo = 25 + +// /obj/item/ammo_box/a12g/slug +// name = "ammo box (12g slug)" +// desc = "A box of 12-gauge slugs, for improved accuracy and penetration." +// icon_state = "12gbox-slug" +// ammo_type = /obj/item/ammo_casing/shotgun + +// /obj/item/ammo_box/a12g/beanbag +// name = "ammo box (12g beanbag)" +// desc = "A box of 12-gauge beanbag shells, for incapacitating targets." +// icon_state = "12gbox-beanbag" +// ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +// /obj/item/ammo_box/a12g/rubbershot +// name = "ammo box (12g rubbershot)" +// desc = "A box of 12-gauge rubbershot shells, designed for riot control." +// icon_state = "12gbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + +// /obj/item/ammo_box/c9mm +// name = "ammo box (9mm)" +// desc = "A box of standard 9mm ammo." +// icon_state = "9mmbox" +// ammo_type = /obj/item/ammo_casing/c9mm +// max_ammo = 50 + +// /obj/item/ammo_box/c9mm/surplus +// name = "ammo box (9mm surplus)" +// desc = "A box of low-quality 9mm ammo." +// icon_state = "9mmbox-surplus" +// ammo_type = /obj/item/ammo_casing/c9mm/surplus + +// /obj/item/ammo_box/c9mm/rubbershot +// name = "ammo box (9mm rubbershot)" +// desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "9mmbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/c9mm/rubber + +// /obj/item/ammo_box/c9mm/ap +// name = "ammo box (9mm armor-piercing)" +// desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "9mmbox-ap" +// ammo_type = /obj/item/ammo_casing/c9mm/ap + +// /obj/item/ammo_box/c9mm/hp +// name = "ammo box (9mm hollow point)" +// desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "9mmbox-hp" +// ammo_type = /obj/item/ammo_casing/c9mm/hp + +// /obj/item/ammo_box/c9mm/fire +// name = "ammo box (9mm incendiary)" +// desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." +// icon_state = "9mmbox-incendiary" +// ammo_type = /obj/item/ammo_casing/c9mm/inc + +// /obj/item/ammo_box/c10mm +// name = "ammo box (10mm)" +// desc = "A box of standard 10mm ammo." +// icon_state = "10mmbox" +// ammo_type = /obj/item/ammo_casing/c10mm +// max_ammo = 50 + +// /obj/item/ammo_box/c10mm/surplus +// name = "ammo box (10mm surplus)" +// desc = "A box of low-quality 10mm ammo." +// icon_state = "10mmbox-surplus" +// ammo_type = /obj/item/ammo_casing/c10mm/surplus + +// /obj/item/ammo_box/c10mm/rubbershot +// name = "ammo box (10mm rubbershot)" +// desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "10mmbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/c9mm/rubber + +// /obj/item/ammo_box/c10mm/ap +// name = "ammo box (10mm armor-piercing)" +// desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "10mmbox-ap" +// ammo_type = /obj/item/ammo_casing/c10mm/ap + +// /obj/item/ammo_box/c10mm/hp +// name = "ammo box (10mm hollow point)" +// desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "10mmbox-hp" +// ammo_type = /obj/item/ammo_casing/c10mm/hp + +// /obj/item/ammo_box/c10mm/fire +// name = "ammo box (10mm incendiary)" +// desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." +// icon_state = "10mmbox-incendiary" +// ammo_type = /obj/item/ammo_casing/c10mm/inc + +// /obj/item/ammo_box/c45 +// name = "ammo box (.45)" +// desc = "A box of standard .45 ammo." +// icon_state = "45box" +// ammo_type = /obj/item/ammo_casing/c45 +// max_ammo = 50 + +// /obj/item/ammo_box/c45/surplus +// name = "ammo box (.45 surplus)" +// desc = "A box of low-quality .45 ammo." +// icon_state = "45box-surplus" +// ammo_type = /obj/item/ammo_casing/c45/surplus + +// /obj/item/ammo_box/c45/rubbershot +// name = "ammo box (.45 rubbershot)" +// desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "45box-rubbershot" +// ammo_type = /obj/item/ammo_casing/c45/rubber + +// /obj/item/ammo_box/c45/ap +// name = "ammo box (.45 armor-piercing)" +// desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "45box-ap" +// ammo_type = /obj/item/ammo_casing/c45/ap + +// /obj/item/ammo_box/c45/hp +// name = "ammo box (.45 hollow point)" +// desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "45box-hp" +// ammo_type = /obj/item/ammo_casing/c45/hp + +// /obj/item/ammo_box/c45/fire +// name = "ammo box (.45 incendiary)" +// desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." +// icon_state = "45box-incendiary" +// ammo_type = /obj/item/ammo_casing/c45/inc + +// /obj/item/ammo_box/c556mmHITP +// name = "ammo box (5.56mm HITP caseless)" +// desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." +// icon_state = "556mmHITPbox" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm +// max_ammo = 50 + +// /obj/item/ammo_box/c556mmHITP/surplus +// name = "ammo box (5.56mm HITP caseless surplus)" +// desc = "A box of low-quality 5.56mm HITP caseless ammo." +// icon_state = "556mmHITPbox-surplus" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus + +// /obj/item/ammo_box/c556mmHITP/rubbershot +// name = "ammo box (5.56mm HITP caseless rubbershot)" +// desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "556mmHITPbox-rubbershot" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot + +// /obj/item/ammo_box/c556mmHITP/ap +// name = "ammo box (5.56mm HITP caseless armor-piercing)" +// desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." +// icon_state = "556mmHITPbox-ap" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap + +// /obj/item/ammo_box/c556mmHITP/hp +// name = "ammo box (5.56mm HITP caseless hollow point)" +// desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." +// icon_state = "556mmHITPbox-hp" +// ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp /obj/item/ammo_box/a40mm name = "ammo box (40mm grenades)" @@ -406,51 +378,93 @@ multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_NORMAL -/obj/item/ammo_box/a762_40 - name = "ammo box (7.62x40mm CLIP)" - icon_state = "a762_40box_big" - ammo_type = /obj/item/ammo_casing/a762_40 - max_ammo = 120 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/ammo_box/a762_40/inteq - icon_state = "a762_40box_big_inteq" - -/obj/item/ammo_box/a556_42 - name = "ammo box (5.56x42mm CLIP)" - icon_state = "a556_42box_big" - ammo_type = /obj/item/ammo_casing/a556_42 - max_ammo = 120 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/ammo_box/a308 - name = "ammo box (.308)" - icon_state = "a308box" - ammo_type = /obj/item/ammo_casing/a308 - max_ammo = 30 - -/obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships - icon_state = "a308box-HP" - -/obj/item/ammo_box/foambox - name = "ammo box (Foam Darts)" - icon = 'icons/obj/guns/toy.dmi' - icon_state = "foambox" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart - max_ammo = 40 - custom_materials = list(/datum/material/iron = 500) - -/obj/item/ammo_box/foambox/riot - icon_state = "foambox_riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - custom_materials = list(/datum/material/iron = 50000) - -/obj/item/ammo_box/c22lr_box - name = "ammo box (.22 LR)" - desc = "A box of standard .22 LR ammo." - icon_state = "22lrbox" - ammo_type = /obj/item/ammo_casing/c22lr - max_ammo = 75 +// /obj/item/ammo_box/a762_40 +// name = "ammo box (7.62x40mm CLIP)" +// icon_state = "a762_40box_big" +// ammo_type = /obj/item/ammo_casing/a762_40 +// max_ammo = 120 +// w_class = WEIGHT_CLASS_NORMAL + +// /obj/item/ammo_box/a762_40/inteq +// icon_state = "a762_40box_big_inteq" + +// /obj/item/ammo_box/a308 +// name = "ammo box (.308)" +// icon_state = "a308box" +// ammo_type = /obj/item/ammo_casing/a308 +// max_ammo = 30 + +// /obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships +// icon_state = "a308box-HP" + +// /obj/item/ammo_box/foambox +// name = "ammo box (Foam Darts)" +// icon = 'icons/obj/guns/toy.dmi' +// icon_state = "foambox" +// ammo_type = /obj/item/ammo_casing/caseless/foam_dart +// max_ammo = 40 +// custom_materials = list(/datum/material/iron = 500) + +// /obj/item/ammo_box/foambox/riot +// icon_state = "foambox_riot" +// ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot +// custom_materials = list(/datum/material/iron = 50000) + +// /obj/item/ammo_box/c22lr_box +// name = "ammo box (.22 LR)" +// desc = "A box of standard .22 LR ammo." +// icon_state = "22lrbox" +// ammo_type = /obj/item/ammo_casing/c22lr +// max_ammo = 75 + +// /obj/item/ammo_box/c46x30mm_box +// name = "ammo box (4.6x30mm)" +// desc = "A box of standard 4.6x30mm ammo." +// icon_state = "46x30mmbox" +// ammo_type = /obj/item/ammo_casing/c46x30mm +// max_ammo = 50 + +// /obj/item/ammo_box/c8x50mm_box +// name = "ammo box (8x50mm)" +// desc = "A box of standard 8x50mm ammo." +// icon_state = "8x50mmbox" +// ammo_type = /obj/item/ammo_casing/a8_50r +// max_ammo = 20 + +// /obj/item/ammo_box/ferropelletbox +// name = "ammo box (ferromagnetic pellets)" +// desc = "A box of ferromagnetic pellets." +// icon_state = "ferropelletsbox" +// ammo_type = /obj/item/ammo_casing/caseless/gauss +// max_ammo = 50 + +// /obj/item/ammo_box/ferroslugbox +// name = "ammo box (ferromagnetic slugs)" +// desc = "A box of standard ferromagnetic slugs." +// icon_state = "ferroslugsbox" +// ammo_type = /obj/item/ammo_casing/caseless/gauss/slug +// max_ammo = 20 + +// /obj/item/ammo_box/ferrolancebox +// name = "ammo box (ferromagnetic lances)" +// desc = "A box of standard ferromagnetic lances." +// icon_state = "ferrolancesbox" +// ammo_type = /obj/item/ammo_casing/caseless/gauss/lance +// max_ammo = 50 + +// /obj/item/ammo_box/c8x50mmhp_box +// name = "ammo box (8x50mm)" +// desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." +// icon_state = "8x50mmbox-hp" +// ammo_type = /obj/item/ammo_casing/a8_50rhp +// max_ammo = 20 + +// /obj/item/ammo_box/a300_box +// name = "ammo box (.300 Magnum)" +// desc = "A box of standard .300 Magnum ammo." +// icon_state = "300box" +// ammo_type = /obj/item/ammo_casing/a300 +// max_ammo = 20 /obj/item/ammo_box/a44roum_speedloader name = "speed loader (.44)" @@ -468,98 +482,23 @@ /obj/item/ammo_box/a44roum_speedloader/empty start_empty = TRUE -/obj/item/ammo_box/c57x39mm_box - name = "ammo box (5.7x39mm)" - desc = "A box of standard 5.7x39mm ammo." - icon_state = "57x39mmbox" - ammo_type = /obj/item/ammo_casing/c57x39mm - max_ammo = 50 - - -/obj/item/ammo_box/c46x30mm_box - name = "ammo box (4.6x30mm)" - desc = "A box of standard 4.6x30mm ammo." - icon_state = "46x30mmbox" - ammo_type = /obj/item/ammo_casing/c46x30mm - max_ammo = 50 - -/obj/item/ammo_box/c8x50mm_box - name = "ammo box (8x50mm)" - desc = "A box of standard 8x50mm ammo." - icon_state = "8x50mmbox" - ammo_type = /obj/item/ammo_casing/a8_50r - max_ammo = 25 - -/obj/item/ammo_box/ferropelletbox - name = "ammo box (ferromagnetic pellets)" - desc = "A box of ferromagnetic pellets." - icon_state = "ferropelletsbox" - ammo_type = /obj/item/ammo_casing/caseless/gauss - max_ammo = 50 - -/obj/item/ammo_box/ferroslugbox - name = "ammo box (ferromagnetic slugs)" - desc = "A box of standard ferromagnetic slugs." - icon_state = "ferroslugsbox" - ammo_type = /obj/item/ammo_casing/caseless/gauss/slug - max_ammo = 20 - -/obj/item/ammo_box/ferrolancebox - name = "ammo box (ferromagnetic lances)" - desc = "A box of standard ferromagnetic lances." - icon_state = "ferrolancesbox" - ammo_type = /obj/item/ammo_casing/caseless/gauss/lance - max_ammo = 50 - -/obj/item/ammo_box/c8x50mmhp_box - name = "ammo box (8x50mm)" - desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." - icon_state = "8x50mmbox-hp" - ammo_type = /obj/item/ammo_casing/a8_50rhp - max_ammo = 20 - -/obj/item/ammo_box/a300_box - name = "ammo box (.300 Magnum)" - desc = "A box of standard .300 Magnum ammo." - icon_state = "300box" - ammo_type = /obj/item/ammo_casing/a300 - max_ammo = 20 - -/obj/item/ammo_box/a65clip_box - name = "ammo box (6.5x57mm CLIP)" - desc = "A box of standard 6.5x57mm CLIP ammo." - icon_state = "65box" - ammo_type = /obj/item/ammo_casing/a65clip - max_ammo = 20 - -/obj/item/ammo_box/a65clip_box/syndicate - icon_state = "65box_sa" - -/obj/item/ammo_box/a44roum - name = "ammo box (.44 roumain)" - desc = "A box of standard .44 roumain ammo." - icon_state = "a44roum" - ammo_type = /obj/item/ammo_casing/a44roum - max_ammo = 50 - -/obj/item/ammo_box/a44roum/rubber - name = "ammo box (.44 roumain rubber)" - desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "a44roum-rubber" - ammo_type = /obj/item/ammo_casing/a44roum/rubber - max_ammo = 50 - -/obj/item/ammo_box/a44roum/hp - name = "ammo box (.44 roumain hollow point)" - desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." - icon_state = "a44roum-hp" - ammo_type = /obj/item/ammo_casing/a44roum/hp - max_ammo = 50 - -/obj/item/ammo_box/c299 - name = "ammo box (.299 Eoehoma caseless)" - desc = "A box of .299 Eoehoma caseless, for use with the E-40 hybrid assault rifle." - icon_state = "299box" - ammo_type = /obj/item/ammo_casing/caseless/c299 - max_ammo = 120 - w_class = WEIGHT_CLASS_NORMAL // This is a lot of ammo +// /obj/item/ammo_box/a44roum +// name = "ammo box (.44 roumain)" +// desc = "A box of standard .44 roumain ammo." +// icon_state = "a44roum" +// ammo_type = /obj/item/ammo_casing/a44roum +// max_ammo = 50 + +// /obj/item/ammo_box/a44roum/rubber +// name = "ammo box (.44 roumain rubber)" +// desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." +// icon_state = "a44roum-rubber" +// ammo_type = /obj/item/ammo_casing/a44roum/rubber +// max_ammo = 50 + +// /obj/item/ammo_box/a44roum/hp +// name = "ammo box (.44 roumain hollow point)" +// desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." +// icon_state = "a44roum-hp" +// ammo_type = /obj/item/ammo_casing/a44roum/hp +// max_ammo = 50 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm index 6f9ae74e61f9..912526c1a93c 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -1,16 +1,20 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled /obj/item/ammo_box/magazine/ammo_stack/prefilled/Initialize(mapload) + make_stack() + update_appearance() + . = ..() + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/proc/make_stack() var/obj/item/ammo_casing/to_copy = ammo_type src.top_off() caliber = to_copy.caliber - base_icon_state = to_copy.icon_state - name = "handful of [name]s" - update_appearance() - . = ..() + base_icon_state = "[initial(to_copy.icon_state)][to_copy.bullet_skin ? "-[to_copy.bullet_skin]" : ""]" + name = "handful of [to_copy.name]s" /obj/item/storage/box/ammo //base type, don't use this! name = "box of default ammo" + desc = "How peculiar." icon = 'icons/obj/ammunition/ammo_boxes.dmi' icon_state = "9mmbox" illustration = null diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm new file mode 100644 index 000000000000..ac82cf6bcebd --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm @@ -0,0 +1,41 @@ +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet + ammo_type = /obj/item/ammo_casing/caseless/gauss + +/obj/item/storage/box/ammo/ferropellet + name = "box of ferromagnetic pellets" + desc = "A box of ferromagnetic pellets for gauss firearms." + icon_state = "ferropelletsbox" + +/obj/item/storage/box/ammo/ferropellet/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug + ammo_type = /obj/item/ammo_casing/caseless/gauss/slug + +/obj/item/storage/box/ammo/ferroslug + name = "box of ferromagnetic slugs" + desc = "A box of standard ferromagnetic slugs for gauss firearms." + icon_state = "ferroslugsbox" + +/obj/item/storage/box/ammo/ferroslug/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance + ammo_type = /obj/item/ammo_casing/caseless/gauss/lance + +/obj/item/storage/box/ammo/ferrolance + name = "box of ferromagnetic lances" + desc = "A box of standard ferromagnetic lances for gauss firearms." + icon_state = "ferrolancesbox" + +/obj/item/storage/box/ammo/ferrolance/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index 8f75ad2fc207..d7389389ebe6 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -3,21 +3,87 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm ammo_type = /obj/item/ammo_casing/c10mm +/obj/item/storage/box/ammo/c10mm + name = "box of 10mm ammo" + desc = "A box of standard 10mm ammo." + icon_state = "10mmbox" + +/obj/item/storage/box/ammo/c10mm/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/surplus ammo_type = /obj/item/ammo_casing/c10mm/surplus +/obj/item/storage/box/ammo/c10mm_surplus + name = "box of surplus 10mm ammo" + desc = "A box of low-quality 10mm ammo." + icon_state = "10mmbox-surplus" + +/obj/item/storage/box/ammo/c10mm_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap ammo_type = /obj/item/ammo_casing/c10mm/ap +/obj/item/storage/box/ammo/c10mm_ap + name = "box of AP 10mm ammo" + desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "10mmbox-ap" + +/obj/item/storage/box/ammo/c10mm_ap/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/ap = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp ammo_type = /obj/item/ammo_casing/c10mm/hp +/obj/item/storage/box/ammo/c10mm_hp + name = "box of HP 10mm ammo" + desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "10mmbox-hp" + +/obj/item/storage/box/ammo/c10mm_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary ammo_type = /obj/item/ammo_casing/c10mm/inc +/obj/item/storage/box/ammo/c10mm_incendiary + name = "box of incendiary 10mm ammo" + desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "10mmbox-incendiary" + +/obj/item/storage/box/ammo/c10mm_incendiary/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/incendiary = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber ammo_type = /obj/item/ammo_casing/c10mm/rubber +/obj/item/storage/box/ammo/c10mm_rubber + name = "box of rubber 10mm ammo" + desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "10mmbox-rubbershot" + +/obj/item/storage/box/ammo/c10mm_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c10mm/rubber = 4) + generate_items_inside(items_inside,src) + // 9MM (Commander + SABR) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm @@ -30,27 +96,25 @@ /obj/item/storage/box/ammo/c9mm/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus ammo_type = /obj/item/ammo_casing/c9mm/surplus -/obj/item/storage/box/ammo/c9mm/surplus +/obj/item/storage/box/ammo/c9mm_surplus name = "box of surplus 9mm ammo" desc = "A box of low-quality 9mm ammo." icon_state = "9mmbox-surplus" -/obj/item/storage/box/ammo/c9mm/surplus/PopulateContents() +/obj/item/storage/box/ammo/c9mm_surplus/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus = 48) + generate_items_inside(items_inside,src) -/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/storage/box/ammo/c9mm/ap @@ -58,78 +122,140 @@ desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." icon_state = "9mmbox-ap" -/obj/item/storage/box/ammo/c9mm/ap/PopulateContents() +/obj/item/storage/box/ammo/c9mm_ap/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp ammo_type = /obj/item/ammo_casing/c9mm/hp -/obj/item/storage/box/ammo/c9mm/hp +/obj/item/storage/box/ammo/c9mm_hp name = "box of HP 9mm ammo" desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." icon_state = "9mmbox-hp" -/obj/item/storage/box/ammo/c9mm/hp/PopulateContents() +/obj/item/storage/box/ammo/c9mm_hp/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_hp = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary ammo_type = /obj/item/ammo_casing/c9mm/inc -/obj/item/storage/box/ammo/c9mm/incendiary +/obj/item/storage/box/ammo/c9mm_incendiary name = "box of incendiary 9mm ammo" desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." icon_state = "9mmbox-incendiary" -/obj/item/storage/box/ammo/c9mm/incendiary/PopulateContents() +/obj/item/storage/box/ammo/c9mm_incendiary/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber ammo_type = /obj/item/ammo_casing/c9mm/rubber -/obj/item/storage/box/ammo/c9mm/rubber +/obj/item/storage/box/ammo/c9mm_rubber name = "box of rubber 9mm ammo" desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." icon_state = "9mmbox-rubbershot" -/obj/item/storage/box/ammo/c9mm/rubber/PopulateContents() +/obj/item/storage/box/ammo/c9mm_rubber/PopulateContents() ..() - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber - new /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/rubber = 4) + generate_items_inside(items_inside,src) // .45 (Candor + C20R) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 ammo_type = /obj/item/ammo_casing/c45 +/obj/item/storage/box/ammo/c45 + name = "box of .45 ammo" + desc = "A box of standard .45 ammo." + icon_state = "45box" + +/obj/item/storage/box/ammo/c45/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45 = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus ammo_type = /obj/item/ammo_casing/c45/surplus +/obj/item/storage/box/ammo/c45_surplus + name = "box of surplus .45 ammo" + desc = "A box of low-quality .45 ammo." + icon_state = "45box-surplus" + +/obj/item/storage/box/ammo/c45_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/surplus = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap ammo_type = /obj/item/ammo_casing/c45/ap +/obj/item/storage/box/ammo/c45_ap + name = "box of AP .45 ammo" + desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "45box-ap" + +/obj/item/storage/box/ammo/c45_ap/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/ap = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp ammo_type = /obj/item/ammo_casing/c45/hp +/obj/item/storage/box/ammo/c45_hp + name = "box of HP .45 ammo" + desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "45box-hp" + +/obj/item/storage/box/ammo/c45_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary ammo_type = /obj/item/ammo_casing/c45/inc +/obj/item/storage/box/ammo/c45_incendiary + name = "box of incendiary .45 ammo" + desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." + icon_state = "45box-incendiary" + +/obj/item/storage/box/ammo/c45_incendiary/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/incendiary = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber ammo_type = /obj/item/ammo_casing/c45/rubber +/obj/item/storage/box/ammo/c45_rubber + name = "box of incendiary .45 ammo" + desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "45box-rubbershot" + +/obj/item/storage/box/ammo/c45_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c45/rubber = 4) + generate_items_inside(items_inside,src) + // .50 AE (Desert Eagle) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a50AE @@ -143,39 +269,149 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr ammo_type = /obj/item/ammo_casing/c22lr +/obj/item/storage/box/ammo/c22lr + name = "box of .22 LR ammo" + desc = "A box of standard .22 LR ammo." + icon_state = "22lrbox" + +/obj/item/storage/box/ammo/c22lr/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr = 4) + generate_items_inside(items_inside,src) + // .357 /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 - ammo_type = /obj/item/ammo_casing/c45 + ammo_type = /obj/item/ammo_casing/a357 + +/obj/item/storage/box/ammo/a357 + name = "box of .357 ammo" + desc = "A box of standard .357 ammo." + icon_state = "22lrbox" + +/obj/item/storage/box/ammo/a357/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357 = 4) + generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match ammo_type = /obj/item/ammo_casing/a357/match +/obj/item/storage/box/ammo/a357_match + name = "box of match .357 ammo" + desc = "A box of match .357 ammo." + icon_state = "357box-match" + +/obj/item/storage/box/ammo/a357_match/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/match = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp ammo_type = /obj/item/ammo_casing/a357/hp +/obj/item/storage/box/ammo/a357_hp + name = "box of HP .357 ammo" + desc = "A box of hollow point .357 ammo." + icon_state = "357box-hp" + +/obj/item/storage/box/ammo/a357_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a357/hp = 4) + generate_items_inside(items_inside,src) + // .45-70 (Hunting Revolver, Beacon) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 ammo_type = /obj/item/ammo_casing/a4570 +/obj/item/storage/box/ammo/a4570 + name = "box of .45-70 ammo" + desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." + icon_state = "4570" + +/obj/item/storage/box/ammo/a4570/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match ammo_type = /obj/item/ammo_casing/a4570/match +/obj/item/storage/box/ammo/a4570_match + name = "box of HP match .45-70 ammo" + desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + icon_state = "4570-match" + +/obj/item/storage/box/ammo/a4570_match/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/match = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp ammo_type = /obj/item/ammo_casing/a4570/hp +/obj/item/storage/box/ammo/a4570_hp + name = "box of HP .45-70 ammo" + desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." + icon_state = "4570-hp" + +/obj/item/storage/box/ammo/a4570_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive ammo_type = /obj/item/ammo_casing/a4570/explosive +/obj/item/storage/box/ammo/a4570_explosive + name = "box of explosive .45-70 ammo" + desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." + icon_state = "4570-explosive" + +/obj/item/storage/box/ammo/a4570_explosive/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570/explosive = 4) + generate_items_inside(items_inside,src) + // .38 Special /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 ammo_type = /obj/item/ammo_casing/c38 +/obj/item/storage/box/ammo/c38 + name = "box of .38 ammo" + desc = "A box of standard .38 Special ammo." + icon_state = "38box" + +/obj/item/storage/box/ammo/c38/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38 = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus ammo_type = /obj/item/ammo_casing/c38/surplus +/obj/item/storage/box/ammo/c38_surplus + name = "box of surplus .38 ammo" + desc = "A box of low-quality .38 Special ammo." + icon_state = "38box-surplus" + +/obj/item/storage/box/ammo/c38_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/surplus = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/trac ammo_type = /obj/item/ammo_casing/c38/trac @@ -199,144 +435,41 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum ammo_type = /obj/item/ammo_casing/a44roum -/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber - ammo_type = /obj/item/ammo_casing/a44roum/rubber - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp - ammo_type = /obj/item/ammo_casing/a44roum/hp - -/obj/item/ammo_box/c10mm - name = "ammo box (10mm)" - desc = "A box of standard 10mm ammo." - icon_state = "10mmbox" - ammo_type = /obj/item/ammo_casing/c10mm - max_ammo = 50 - -/obj/item/ammo_box/c10mm/surplus - name = "ammo box (10mm surplus)" - desc = "A box of low-quality 10mm ammo." - icon_state = "10mmbox-surplus" - ammo_type = /obj/item/ammo_casing/c10mm/surplus - -/obj/item/ammo_box/c10mm/rubbershot - name = "ammo box (10mm rubbershot)" - desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "10mmbox-rubbershot" - ammo_type = /obj/item/ammo_casing/c9mm/rubber - -/obj/item/ammo_box/c10mm/ap - name = "ammo box (10mm armor-piercing)" - desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "10mmbox-ap" - ammo_type = /obj/item/ammo_casing/c10mm/ap - -/obj/item/ammo_box/c10mm/hp - name = "ammo box (10mm hollow point)" - desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "10mmbox-hp" - ammo_type = /obj/item/ammo_casing/c10mm/hp - -/obj/item/ammo_box/c10mm/fire - name = "ammo box (10mm incendiary)" - desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "10mmbox-incendiary" - ammo_type = /obj/item/ammo_casing/c10mm/inc - - - - - - - - - - - - - - - - - - - - - - - -/obj/item/ammo_box/c38_box - name = "ammo box (.38)" - desc = "A box of standard .38 Special ammo." - icon_state = "38box" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 50 - -/obj/item/ammo_box/c38_box/surplus - name = "ammo box (.38 surplus)" - desc = "A box of low-quality .38 Special ammo." - icon_state = "38box-surplus" - ammo_type = /obj/item/ammo_casing/c38/surplus - -/obj/item/ammo_box/a12g - name = "ammo box (12g buckshot)" - desc = "A box of 12-gauge buckshot shells, devastating at close range." - icon_state = "12gbox-buckshot" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 25 - -/obj/item/ammo_box/a12g/slug - name = "ammo box (12g slug)" - desc = "A box of 12-gauge slugs, for improved accuracy and penetration." - icon_state = "12gbox-slug" - ammo_type = /obj/item/ammo_casing/shotgun - -/obj/item/ammo_box/a12g/beanbag - name = "ammo box (12g beanbag)" - desc = "A box of 12-gauge beanbag shells, for incapacitating targets." - icon_state = "12gbox-beanbag" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -/obj/item/ammo_box/a12g/rubbershot - name = "ammo box (12g rubbershot)" - desc = "A box of 12-gauge rubbershot shells, designed for riot control." - icon_state = "12gbox-rubbershot" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - +/obj/item/storage/box/ammo/a44roum + name = "box of .44 roumain ammo" + desc = "A box of standard .44 roumain ammo." + icon_state = "a44roum" +/obj/item/storage/box/ammo/a44roum/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum = 4) + generate_items_inside(items_inside,src) -/obj/item/ammo_box/c45 - name = "ammo box (.45)" - desc = "A box of standard .45 ammo." - icon_state = "45box" - ammo_type = /obj/item/ammo_casing/c45 - max_ammo = 50 +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber + ammo_type = /obj/item/ammo_casing/a44roum/rubber -/obj/item/ammo_box/c45/surplus - name = "ammo box (.45 surplus)" - desc = "A box of low-quality .45 ammo." - icon_state = "45box-surplus" - ammo_type = /obj/item/ammo_casing/c45/surplus +/obj/item/storage/box/ammo/a44roum_rubber + name = "box of rubber .44 roumain ammo" + desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "a44roum-rubber" -/obj/item/ammo_box/c45/rubbershot - name = "ammo box (.45 rubbershot)" - desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." - icon_state = "45box-rubbershot" - ammo_type = /obj/item/ammo_casing/c45/rubber +/obj/item/storage/box/ammo/a44roum_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/rubber = 4) + generate_items_inside(items_inside,src) -/obj/item/ammo_box/c45/ap - name = "ammo box (.45 armor-piercing)" - desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." - icon_state = "45box-ap" - ammo_type = /obj/item/ammo_casing/c45/ap +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp + ammo_type = /obj/item/ammo_casing/a44roum/hp -/obj/item/ammo_box/c45/hp - name = "ammo box (.45 hollow point)" - desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." - icon_state = "45box-hp" - ammo_type = /obj/item/ammo_casing/c45/hp +/obj/item/storage/box/ammo/a44roum_hp + name = "box of HP .44 roumain ammo" + desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "a44roum-rubber" -/obj/item/ammo_box/c45/fire - name = "ammo box (.45 incendiary)" - desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." - icon_state = "45box-incendiary" - ammo_type = /obj/item/ammo_casing/c45/inc +/obj/item/storage/box/ammo/a44roum_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/hp = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm index 128cd0213610..7e0d24b9eca0 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -3,9 +3,31 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r ammo_type = /obj/item/ammo_casing/a8_50r +/obj/item/storage/box/ammo/a8_50r + name = "box of 8x50mm ammo" + desc = "A box of standard 8x50mm ammo." + icon_state = "8x50mmbox" + +/obj/item/storage/box/ammo/a8_50r/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp ammo_type = /obj/item/ammo_casing/a8_50rhp +/obj/item/storage/box/ammo/a8_50r_hp + name = "box of HP 8x50mm ammo" + desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." + icon_state = "8x50mmbox-hp" + +/obj/item/storage/box/ammo/a8_50r_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r/hp = 4) + generate_items_inside(items_inside,src) + // 8x58mm Caseless (SSG-669C) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a858 @@ -16,6 +38,17 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 ammo_type = /obj/item/ammo_casing/a300 +/obj/item/storage/box/ammo/a300 + name = "box of .300 magnum ammo" + desc = "A box of standard .300 Magnum ammo." + icon_state = "300box" + +/obj/item/storage/box/ammo/a300/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 = 4) + generate_items_inside(items_inside,src) + // 5.56x39mm (M-90gl Carbine & P-16) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_39 @@ -34,6 +67,20 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 ammo_type = /obj/item/ammo_casing/a762_40 +/obj/item/storage/box/ammo/a762_40 + name = "box of 7.62x40mm CLIP ammo" + desc = "A box of standard 7.62x40mm CLIP ammo." + icon_state = "a762_40box_big" + +/obj/item/storage/box/ammo/a762_40/inteq + icon_state = "a762_40box_big_inteq" + +/obj/item/storage/box/ammo/a762_40/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 = 4) + generate_items_inside(items_inside,src) + // .300 Blackout (Polymer Survivor Rifle) /obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk @@ -47,5 +94,16 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 ammo_type = /obj/item/ammo_casing/a308 -/obj/item/ammo_box/magazine/ammo_stack/prefilled/caseless/c299 - ammo_type = /obj/item/ammo_casing/caseless/c299 +/obj/item/storage/box/ammo/a308 + name = "box of .308 ammo" + desc = "A box of standard .308 ammo." + icon_state = "a308box" + +/obj/item/storage/box/ammo/a308/hunterspride + icon_state = "a308box-HP" + +/obj/item/storage/box/ammo/a308/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm new file mode 100644 index 000000000000..bf201a2f2656 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm @@ -0,0 +1,65 @@ +// Shotshells +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun + max_ammo = 8 //make sure these values are consistent across the board with stack_size variable. + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + +/obj/item/storage/box/ammo/a12g_buckshot + name = "box of 12ga buckshot" + desc = "A box of 12-gauge buckshot shells, devastating at close range." + icon_state = "12gbox-buckshot" + +/obj/item/storage/box/ammo/a12g_buckshot/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/slug + ammo_type = /obj/item/ammo_casing/shotgun + +/obj/item/storage/box/ammo/a12g_slug + name = "box of 12ga slugs" + desc = "A box of 12-gauge slugs, for improved accuracy and penetration." + icon_state = "12gbox-slug" + +/obj/item/storage/box/ammo/a12g_slug/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/slug = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +/obj/item/storage/box/ammo/a12g_beanbag + name = "box of 12ga beanbags" + desc = "A box of 12-gauge beanbag shells, for incapacitating targets." + icon_state = "12gbox-beanbag" + +/obj/item/storage/box/ammo/a12g_beanbag/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + +/obj/item/storage/box/ammo/a12g_rubbershot + name = "box of 12ga beanbags" + desc = "A box of 12-gauge rubbershot shells, designed for riot control." + icon_state = "12gbox-rubbershot" + +/obj/item/storage/box/ammo/a12g_beanbag/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary + ammo_type = /obj/item/ammo_casing/shotgun/incendiary + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/improvised + ammo_type = /obj/item/ammo_casing/shotgun/improvised diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index 9bf8a48bff52..5a6c99d8297c 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -2,6 +2,17 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm ammo_type = /obj/item/ammo_casing/c46x30mm +/obj/item/storage/box/ammo/c46x30mm + name = "box of 4.6x30mm ammo" + desc = "A box of standard 4.6x30mm ammo." + icon_state = "46x30mmbox" + +/obj/item/storage/box/ammo/c46x30mm/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm/ap ammo_type = /obj/item/ammo_casing/c46x30mm/ap @@ -16,14 +27,69 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm ammo_type = /obj/item/ammo_casing/caseless/c556mm +/obj/item/storage/box/ammo/c556mm + name = "box of 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." + icon_state = "556mmHITPbox" + +/obj/item/storage/box/ammo/c556mm/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus +/obj/item/storage/box/ammo/c556mm_surplus + name = "box of surplus 5.56mm HITP caseless ammo" + desc = "A box of low-quality 5.56mm HITP caseless ammo." + icon_state = "556mmHITPbox-surplus" + +/obj/item/storage/box/ammo/c556mm_surplus/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/surplus = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap +/obj/item/storage/box/ammo/c556mm_ap + name = "box of AP 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." + icon_state = "556mmHITPbox-ap" + +/obj/item/storage/box/ammo/c556mm_ap/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/ap = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp +/obj/item/storage/box/ammo/c556mm_hp + name = "box of HP 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." + icon_state = "556mmHITPbox-hp" + +/obj/item/storage/box/ammo/c556mm_hp/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/hp = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot + +/obj/item/storage/box/ammo/c556mm_rubber + name = "box of rubber 5.56mm HITP caseless ammo" + desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." + icon_state = "556mmHITPbox-rubbershot" + +/obj/item/storage/box/ammo/c556mm_rubber/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm new file mode 100644 index 000000000000..e0cd61a885b6 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm @@ -0,0 +1,26 @@ +/obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts + ammo_type = /obj/item/ammo_casing/c10mm/foam_dart + +/obj/item/storage/box/ammo/foam_darts + name = "box of foam darts" + icon = 'icons/obj/guns/toy.dmi' + icon_state = "foambox" + +/obj/item/storage/box/ammo/foam_darts/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot + ammo_type = /obj/item/ammo_casing/c10mm/foam_dart/riot + +/obj/item/storage/box/ammo/foam_darts/riot + name = "box of foam darts" + icon_state = "foambox_riot" + +/obj/item/storage/box/ammo/foam_darts/riot/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm deleted file mode 100644 index 2b4d0e6538a2..000000000000 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/shotshell_stacks.dm +++ /dev/null @@ -1,18 +0,0 @@ -// Shotshells -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun - max_ammo = 8 //make sure these values are consistent across the board with stack_size variable. - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/beanbag - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary - ammo_type = /obj/item/ammo_casing/shotgun/incendiary - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/improvised - ammo_type = /obj/item/ammo_casing/shotgun/improvised diff --git a/icons/obj/ammunition/ammo_shotshells.dmi b/icons/obj/ammunition/ammo_shotshells.dmi deleted file mode 100644 index 55b00cdd0b21797c4f752dd63dc42530a6d6b336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3149 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 Date: Sat, 5 Oct 2024 12:51:05 -0700 Subject: [PATCH 10/31] UpdatePaths --- .../BeachRuins/beach_ancient_ruin.dmm | 1 + .../BeachRuins/beach_fishing_hut.dmm | 2 +- .../BeachRuins/beach_treasure_cove.dmm | 9 ++------- .../icemoon_underground_abandoned_village.dmm | 2 +- .../JungleRuins/jungle_interceptor.dmm | 2 +- .../LavaRuins/lavaland_crashed_starwalker.dmm | 4 ++-- .../lavaland_surface_lava_canyon.dmm | 1 + .../RockRuins/rockplanet_budgetcuts.dmm | 1 + .../RockRuins/rockplanet_distillery.dmm | 2 +- .../RockRuins/rockplanet_harmfactory.dmm | 5 +---- .../whitesands_surface_camp_combination.dmm | 2 +- _maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 4 ++-- _maps/RandomRuins/SpaceRuins/spacemall.dmm | 4 ++-- .../WasteRuins/wasteplanet_lab.dmm | 4 ++-- .../WasteRuins/wasteplanet_pandora.dmm | 2 +- .../independent/independent_dwayne.dmm | 6 +++--- .../shuttles/independent/independent_kilo.dmm | 4 ++-- .../independent/independent_rigger.dmm | 2 +- .../independent/independent_shetland.dmm | 2 +- _maps/shuttles/inteq/inteq_hound.dmm | 5 +---- _maps/shuttles/inteq/inteq_valor.dmm | 10 ++-------- .../shuttles/nanotrasen/nanotrasen_heron.dmm | 20 ++++--------------- .../shuttles/nanotrasen/nanotrasen_ranger.dmm | 10 +++++----- _maps/shuttles/pirate/pirate_tortuga.dmm | 7 ++----- _maps/shuttles/roumain/srm_elder.dmm | 14 ++++--------- _maps/shuttles/solgov/solgov_chronicle.dmm | 2 +- _maps/shuttles/solgov/solgov_inkwell.dmm | 2 +- _maps/shuttles/solgov/solgov_paracelsus.dmm | 2 +- .../syndicate/syndicate_gorlex_hyena.dmm | 6 +++--- .../syndicate/syndicate_gorlex_komodo.dmm | 2 +- .../syndicate/syndicate_twinkleshine.dmm | 4 ++-- .../{ => Scripts}/3456_ammoboxes.txt | 0 32 files changed, 54 insertions(+), 89 deletions(-) rename tools/UpdatePaths/{ => Scripts}/3456_ammoboxes.txt (100%) diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index cfe522aeb415..6d0ac796457d 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -374,6 +374,7 @@ }, /obj/item/gun/energy/lasercannon{ pixel_y = 5; + }, /obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, diff --git a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm index ed6c353d26d7..ae2c9498da9f 100644 --- a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm @@ -282,7 +282,7 @@ /turf/open/floor/plating/asteroid/sand, /area/overmap_encounter/planetoid/cave/explored) "mq" = ( -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/structure/closet/crate/wooden, /turf/open/floor/wood, /area/ruin/beach) diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 997f6bb56703..839e87815f93 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -666,13 +666,8 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/item/ammo_box/c38_box{ - pixel_x = 10; - pixel_y = 8 - }, -/obj/item/ammo_box/c38_box{ - pixel_x = 10 - }, +/obj/item/storage/box/ammo/c38, +/obj/item/storage/box/ammo/c38, /obj/structure/sign/poster/contraband/energy_swords{ pixel_x = -32 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 29710e094f64..42aa6b288469 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -383,7 +383,7 @@ "EF" = ( /obj/effect/decal/cleanable/blood/gibs/torso, /obj/structure/safe, -/obj/item/ammo_box/a12g/slug, +/obj/item/storage/box/ammo/a12g_slug, /obj/item/melee/knife/combat, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm index aab9b566f78e..f6efbca453e2 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm @@ -3050,7 +3050,7 @@ /obj/item/clothing/under/rank/security/officer/blueshirt, /obj/item/clothing/gloves/combat, /obj/item/clothing/shoes/jackboots, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, /obj/machinery/light/small/broken/directional/north, /obj/effect/turf_decal/corner/transparent/bar/three_quarters{ dir = 4 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm index 4d63ae26b5bb..8f3921ed0520 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm @@ -92,7 +92,7 @@ name = "armory locker"; req_one_access_txt = "1" }, -/obj/item/ammo_box/a12g, +/obj/item/storage/box/ammo/a12g_buckshot, /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered/crashed_starwalker) "bL" = ( @@ -942,7 +942,7 @@ /obj/effect/turf_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/crate/secure/gear, -/obj/item/ammo_box/c10mm/surplus, +/obj/item/storage/box/ammo/c10mm_surplus, /obj/item/weaponcrafting/stock, /obj/item/weaponcrafting/stock{ pixel_x = -6 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index 92fa7dfb9203..08b9f3a1940a 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -884,6 +884,7 @@ "zb" = ( /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner{ loot = list(/obj/item/melee/transforming/cleaving_saw,/obj/item/gun/energy/kinetic_accelerator,/obj/item/keycard/gatedrop/lavacanyon); + }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/overmap_encounter/planetoid/cave/explored) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index ef9240170e41..091a3e3bd786 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -2746,6 +2746,7 @@ "WY" = ( /obj/structure/frame/computer{ dir = 1; + }, /obj/effect/turf_decal/corner/opaque/red/diagonal, /turf/open/floor/plasteel/tech/techmaint, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm index 2fd3caa4c42f..3926cffbbf81 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm @@ -3086,7 +3086,7 @@ pixel_x = -3 }, /obj/item/ammo_box/magazine/illestren_a850r, -/obj/item/ammo_box/c9mm/ap, +/obj/item/storage/box/ammo/c9mm/ap, /obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/co9mm{ start_empty = 1 diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index a86efe2e9744..a47ad168fb72 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -1862,10 +1862,7 @@ pixel_x = 5; pixel_y = 7 }, -/obj/item/ammo_box/foambox/riot{ - pixel_x = -3; - pixel_y = -3 - }, +/obj/item/storage/box/ammo/foam_darts/riot, /obj/structure/cable{ icon_state = "4-8" }, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index b903fd3cce78..c7b060634951 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -1301,7 +1301,7 @@ "XP" = ( /obj/structure/table, /obj/item/trash/can, -/obj/item/ammo_box/c45/surplus, +/obj/item/storage/box/ammo/c45_surplus, /turf/open/floor/concrete, /area/ruin) "XS" = ( diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index 3d05cfb13d35..e126234531f2 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -2694,8 +2694,8 @@ /obj/structure/closet/crate/secure/weapon{ name = "Ammo Crate" }, -/obj/item/ammo_box/c9mm/surplus, -/obj/item/ammo_box/c9mm/surplus, +/obj/item/storage/box/ammo/c9mm_surplus, +/obj/item/storage/box/ammo/c9mm_surplus, /obj/item/ammo_box/magazine/co9mm, /obj/item/ammo_box/magazine/co9mm, /turf/open/floor/plasteel, diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index db3f30c15f76..6b75031ae8ba 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -320,7 +320,7 @@ /obj/item/toy/talking/AI{ pixel_x = 20 }, -/obj/item/ammo_box/foambox/riot, +/obj/item/storage/box/ammo/foam_darts/riot, /obj/item/gun/ballistic/shotgun/toy, /turf/open/floor/light, /area/ruin/space/has_grav/spacemall/shop2) @@ -2434,7 +2434,7 @@ /area/ruin/space/has_grav/spacemall) "jm" = ( /obj/structure/rack, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, /obj/item/ammo_box/magazine/co9mm{ pixel_x = 5 }, diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm index aa5797d05a95..dba9f5e3c3c9 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm @@ -118,13 +118,13 @@ /area/ruin/powered) "gw" = ( /obj/structure/table, -/obj/item/ammo_box/c45, +/obj/item/storage/box/ammo/c45, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/mono/white, /area/ruin/powered) "gx" = ( /obj/structure/table, -/obj/item/ammo_box/c9mm/rubbershot, +/obj/item/storage/box/ammo/c9mm_rubber, /turf/open/floor/plasteel/mono/white, /area/ruin/powered) "gz" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index 934b648c0bd6..adab5732e0c1 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -23,7 +23,7 @@ /area/ruin/wasteplanet) "bc" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, /turf/open/floor/plating/wasteplanet, /area/ruin/wasteplanet) "bd" = ( diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index d1cc698c0c92..7f8e7b569c68 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -272,9 +272,9 @@ dir = 9 }, /obj/effect/decal/cleanable/dirt, -/obj/item/ammo_box/c38_box, -/obj/item/ammo_box/c38_box, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, +/obj/item/storage/box/ammo/c38, +/obj/item/storage/box/ammo/c38, /obj/structure/closet/crate/secure/plasma{ name = "ammo crate"; desc = "A secure ammo crate." diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index 35f955ff0b3d..f9504be9d31e 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -661,7 +661,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/item/ammo_box/a12g/rubbershot, +/obj/item/storage/box/ammo/a12g_rubbershot, /obj/item/gun/ballistic/shotgun/doublebarrel/presawn{ spawnwithmagazine = 0 }, @@ -1875,7 +1875,7 @@ icon_state = "9-10" }, /obj/effect/decal/cleanable/oil, -/obj/item/ammo_box/a12g, +/obj/item/storage/box/ammo/a12g_buckshot, /obj/item/gun/ballistic/shotgun/doublebarrel/no_mag, /turf/open/floor/plasteel/patterned, /area/ship/cargo) diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index d6cb54aed39c..d87ae083832b 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -4132,7 +4132,7 @@ name = "ammunition locker"; req_access_txt = "1" }, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/item/ammo_box/magazine/m45/rubber, /obj/item/ammo_box/magazine/m45/rubber, /obj/item/ammo_box/magazine/m45, diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index 3bf95ea99b6f..75784c301eda 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -3475,7 +3475,7 @@ req_access_txt = "1"; req_ship_access = 1 }, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/effect/turf_decal/box, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, diff --git a/_maps/shuttles/inteq/inteq_hound.dmm b/_maps/shuttles/inteq/inteq_hound.dmm index da82ccbf26b7..42c34c5a418e 100644 --- a/_maps/shuttles/inteq/inteq_hound.dmm +++ b/_maps/shuttles/inteq/inteq_hound.dmm @@ -50,10 +50,7 @@ pixel_x = -11; pixel_y = 5 }, -/obj/item/ammo_box/a762_40/inteq{ - pixel_x = 5; - pixel_y = 12 - }, +/obj/item/storage/box/ammo/a762_40/inteq, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ pixel_x = -7; pixel_y = 6 diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index 3f709a261b15..d35bcb7a808a 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -5074,14 +5074,8 @@ /obj/effect/turf_decal/corner/opaque/yellow, /obj/structure/rack, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/ammo_box/c9mm/rubbershot{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/item/ammo_box/c9mm{ - pixel_x = -2; - pixel_y = 2 - }, +/obj/item/storage/box/ammo/c9mm_rubber, +/obj/item/storage/box/ammo/c9mm, /obj/machinery/light/small/directional/north, /obj/structure/sign/poster/official/safety_report{ pixel_x = 32 diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index a5673c22d7bc..a02ec78fc9e6 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -13072,22 +13072,10 @@ pixel_x = 5; pixel_y = 4 }, -/obj/item/ammo_box/c9mm{ - pixel_x = 4; - pixel_y = -6 - }, -/obj/item/ammo_box/c9mm{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/ammo_box/c9mm{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/ammo_box/c9mm/ap{ - pixel_y = 17; - pixel_x = 4 - }, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm/ap, /obj/item/stock_parts/cell/gun{ pixel_x = -3; pixel_y = -5 diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 07b8722e5e7b..d70424c08c84 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -1750,11 +1750,11 @@ /obj/structure/chair/handrail{ dir = 4 }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm/rubbershot, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm_rubber, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 10 }, diff --git a/_maps/shuttles/pirate/pirate_tortuga.dmm b/_maps/shuttles/pirate/pirate_tortuga.dmm index fc08d44db510..3e48d25a962c 100644 --- a/_maps/shuttles/pirate/pirate_tortuga.dmm +++ b/_maps/shuttles/pirate/pirate_tortuga.dmm @@ -667,10 +667,7 @@ /area/ship/security/armory) "hU" = ( /obj/structure/rack, -/obj/item/ammo_box/c45{ - pixel_x = -9; - pixel_y = 8 - }, +/obj/item/storage/box/ammo/c45, /obj/item/storage/toolbox/ammo/a762_40{ pixel_x = 5; pixel_y = 6 @@ -3141,7 +3138,7 @@ /obj/item/clothing/shoes/jackboots{ pixel_y = -13 }, -/obj/item/ammo_box/c38_box/surplus, +/obj/item/storage/box/ammo/c38_surplus, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/nanoweave, /area/ship/crew/crewtwo) diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index 0e501c62ed57..23c64f4681a6 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -337,18 +337,12 @@ pixel_y = 14; pixel_x = 5 }, -/obj/item/ammo_box/c38_box{ - pixel_x = -6; - pixel_y = 7 - }, +/obj/item/storage/box/ammo/c38, /obj/item/ammo_box/magazine/illestren_a850r{ pixel_x = 8; pixel_y = 6 }, -/obj/item/ammo_box/c38_box{ - pixel_x = -6; - pixel_y = 1 - }, +/obj/item/storage/box/ammo/c38, /obj/item/ammo_box/magazine/illestren_a850r{ pixel_x = 8 }, @@ -2025,7 +2019,7 @@ pixel_x = -7 }, /obj/item/storage/backpack/satchel/leather, -/obj/item/ammo_box/a44roum, +/obj/item/storage/box/ammo/a44roum, /obj/item/storage/pistolcase/montagne, /obj/item/clothing/accessory/waistcoat/roumain, /turf/open/floor/wood/mahogany, @@ -2698,7 +2692,7 @@ /obj/item/gun/ballistic/revolver/detective, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, -/obj/item/ammo_box/c38_box, +/obj/item/storage/box/ammo/c38, /obj/item/clothing/head/cowboy/sec/roumain/colligne, /obj/item/clothing/suit/armor/roumain/colligne, /obj/structure/closet/secure_closet/collignes, diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index bacabd6cc23c..f08281a47103 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -273,7 +273,7 @@ /obj/item/spacecash/bundle/loadsamoney, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/carpet/royalblue, /area/ship/crew/office) "cg" = ( diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index 27427f9bbfa2..1a38d735246b 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -5934,7 +5934,7 @@ /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/wood/maple, /area/ship/crew/dorm/dormtwo) "LJ" = ( diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index 9cfda7a14c0d..e062f70d011d 100644 --- a/_maps/shuttles/solgov/solgov_paracelsus.dmm +++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm @@ -3582,7 +3582,7 @@ /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/carpet/royalblue, /area/ship/crew) "IZ" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index 66133d79d47a..84ace94a70a2 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -65,7 +65,7 @@ /obj/item/ammo_box/a357/match, /obj/item/pen/edagger, /obj/item/storage/pistolcase/a357, -/obj/item/ammo_box/a357_box, +/obj/item/storage/box/ammo/a357, /turf/open/floor/carpet/black, /area/ship/bridge) "bJ" = ( @@ -301,8 +301,8 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/industrial/outline, -/obj/item/ammo_box/a12g, -/obj/item/ammo_box/c10mm, +/obj/item/storage/box/ammo/a12g_buckshot, +/obj/item/storage/box/ammo/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) "fC" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index c466f5351f9c..4b42a90bbb26 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -5387,7 +5387,7 @@ }, /obj/item/ammo_box/magazine/m10mm_ringneck, /obj/item/ammo_box/magazine/m10mm_ringneck, -/obj/item/ammo_box/c10mm, +/obj/item/storage/box/ammo/c10mm, /obj/item/clothing/gloves/tackler/combat/insulated, /obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 29f4bc28922b..3a3438c8f2f8 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -7376,7 +7376,7 @@ }, /obj/item/storage/belt/sabre/solgov, /obj/item/storage/pistolcase/modelh, -/obj/item/ammo_box/ferroslugbox, +/obj/item/storage/box/ammo/ferroslug, /turf/open/floor/mineral/plastitanium, /area/ship/bridge) "Qv" = ( @@ -8879,7 +8879,7 @@ name = "Armory Access"; req_access = list(3,150) }, -/obj/item/ammo_box/c10mm, +/obj/item/storage/box/ammo/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security) "YJ" = ( diff --git a/tools/UpdatePaths/3456_ammoboxes.txt b/tools/UpdatePaths/Scripts/3456_ammoboxes.txt similarity index 100% rename from tools/UpdatePaths/3456_ammoboxes.txt rename to tools/UpdatePaths/Scripts/3456_ammoboxes.txt From 7fc7c6eda1c8c6fab70d2a8114e2732583931eb0 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 14:04:41 -0700 Subject: [PATCH 11/31] Repathing --- code/game/objects/items/storage/ammo_can.dm | 52 +++++++++ code/game/objects/items/storage/backpack.dm | 4 +- code/game/objects/items/storage/belt.dm | 4 +- code/game/objects/items/storage/toolbox.dm | 52 --------- .../blackmarket/blackmarket_items/ammo.dm | 8 +- code/modules/cargo/packs/ammo.dm | 99 +++++++++--------- .../clothing/outfits/ert/frontiersmen_ert.dm | 6 +- code/modules/mining/abandoned_crates.dm | 2 +- .../projectiles/boxes_magazines/ammo_boxes.dm | 20 +++- ..._stacks_misc.dm => premade_misc_stacks.dm} | 4 +- .../prefab_stacks/premade_pistol_stacks.dm | 32 +++++- .../prefab_stacks/premade_rifle_stacks.dm | 59 +++++++++-- .../prefab_stacks/premade_shotshell_stacks.dm | 14 +++ .../prefab_stacks/premade_smg_stacks.dm | 16 +++ .../research/designs/autolathe_designs.dm | 14 +-- .../research/designs/weapon_designs.dm | 46 ++++---- code/modules/uplink/uplink_items.dm | 2 +- code/modules/vending/liberation_toy.dm | 4 +- code/modules/vending/toys.dm | 2 +- icons/obj/ammunition/ammo_boxes.dmi | Bin 6570 -> 7431 bytes shiptest.dme | 3 +- 21 files changed, 271 insertions(+), 172 deletions(-) create mode 100644 code/game/objects/items/storage/ammo_can.dm rename code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/{premade_stacks_misc.dm => premade_misc_stacks.dm} (87%) diff --git a/code/game/objects/items/storage/ammo_can.dm b/code/game/objects/items/storage/ammo_can.dm new file mode 100644 index 000000000000..7962621674ad --- /dev/null +++ b/code/game/objects/items/storage/ammo_can.dm @@ -0,0 +1,52 @@ +//No idea why this is a toolbox but I'm not fixing that right now +/obj/item/storage/toolbox/ammo + name = "ammo can" + desc = "A metal container for storing multiple boxes of ammunition or grenades." + icon_state = "ammobox" + item_state = "ammobox" + drop_sound = 'sound/items/handling/ammobox_drop.ogg' + pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' + material_flags = NONE + has_latches = FALSE + +/obj/item/storage/toolbox/ammo/a850r/PopulateContents() + name = "ammo can (8x50mmR)" + icon_state = "ammobox_850" + for(var/i in 1 to 4) + new /obj/item/storage/box/ammo/a8_50r(src) + +/obj/item/storage/toolbox/ammo/a762_40/PopulateContents() + name = "ammo can (7.62x40mm CLIP)" + icon_state = "ammobox_762" + for (var/i in 1 to 4) + new /obj/item/storage/box/ammo/a762_40(src) + +/obj/item/storage/toolbox/ammo/a308/PopulateContents() + name = "ammo can (.308)" + icon_state = "ammobox_308" + for (var/i in 1 to 4) + new /obj/item/storage/box/ammo/a308(src) + +/obj/item/storage/toolbox/ammo/c45/PopulateContents() + name = "ammo can (.45)" + icon_state = "ammobox_45" + for (var/i in 1 to 4) + new /obj/item/storage/box/ammo/c45(src) + +/obj/item/storage/toolbox/ammo/c9mm/PopulateContents() + name = "ammo can (9mm)" + icon_state = "ammobox_9mm" + for (var/i in 1 to 4) + new /obj/item/storage/box/ammo/c9mm(src) + +/obj/item/storage/toolbox/ammo/c10mm/PopulateContents() + name = "ammo can (10mm)" + icon_state = "ammobox_10mm" + for (var/i in 1 to 4) + new /obj/item/storage/box/ammo/c10mm(src) + +/obj/item/storage/toolbox/ammo/shotgun/PopulateContents() + name = "ammo can (12ga)" + icon_state = "ammobox_12ga" + for (var/i in 1 to 4) + new /obj/item/storage/box/ammo/a12g_buckshot(src) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index eb72fe31c5ec..7883cf1052fc 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -642,7 +642,7 @@ new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/storage/firstaid/tactical(src) new /obj/item/gun/ballistic/automatic/toy(src) - new /obj/item/ammo_box/foambox/riot(src) + new /obj/item/storage/box/ammo/foam_darts/riot(src) /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, a Donksoft assault rifle, box of riot grade darts, a dart pistol, and a box of syringes." @@ -653,7 +653,7 @@ new /obj/item/gun/syringe/syndicate(src) new /obj/item/gun/ballistic/automatic/toy(src) new /obj/item/storage/box/syringes(src) - new /obj/item/ammo_box/foambox/riot(src) + new /obj/item/storage/box/ammo/foam_darts/riot(src) new /obj/item/grenade/chem_grenade/bioterrorfoam(src) if(prob(5)) new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 52a6fdf8738e..82303bafc149 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -285,7 +285,6 @@ /obj/item/ammo_box/magazine, /obj/item/ammo_box/c38, //speed loaders don't have a common path like magazines. pain. /obj/item/ammo_box/a357, //some day we should refactor these into an ammo_box/speedloader type - /obj/item/ammo_box/a4570, //but not today /obj/item/ammo_box/a858, //oh boy stripper clips too /obj/item/ammo_box/vickland_a308, /obj/item/ammo_box/a300, @@ -299,7 +298,8 @@ /obj/item/clothing/gloves, /obj/item/restraints/legcuffs/bola, /obj/item/holosign_creator/security, - /obj/item/stock_parts/cell/gun //WS edit Gun cells fit where they should and not where they dont + /obj/item/stock_parts/cell/gun, + /obj/item/ammo_box/magazine/ammo_stack, //handfuls of bullets )) /obj/item/storage/belt/security/full/PopulateContents() diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index e0768391dae5..0ee29e08e052 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -225,58 +225,6 @@ new /obj/item/stack/cable_coil/cyan(src) new /obj/item/stack/cable_coil/white(src) -/obj/item/storage/toolbox/ammo - name = "ammo can" - desc = "A metal container for storing multiple boxes of ammunition or grenades." - icon_state = "ammobox" - item_state = "ammobox" - drop_sound = 'sound/items/handling/ammobox_drop.ogg' - pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' - material_flags = NONE - has_latches = FALSE - -/obj/item/storage/toolbox/ammo/a850r/PopulateContents() - name = "ammo can (8x50mmR)" - icon_state = "ammobox_850" - for(var/i in 1 to 4) - new /obj/item/ammo_box/c8x50mm_box(src) - -/obj/item/storage/toolbox/ammo/a762_40/PopulateContents() - name = "ammo can (7.62x40mm CLIP)" - icon_state = "ammobox_762" - for (var/i in 1 to 4) - new /obj/item/ammo_box/a762_40(src) - -/obj/item/storage/toolbox/ammo/a308/PopulateContents() - name = "ammo can (.308)" - icon_state = "ammobox_308" - for (var/i in 1 to 4) - new /obj/item/ammo_box/a308(src) - -/obj/item/storage/toolbox/ammo/c45/PopulateContents() - name = "ammo can (.45)" - icon_state = "ammobox_45" - for (var/i in 1 to 4) - new /obj/item/ammo_box/c45(src) - -/obj/item/storage/toolbox/ammo/c9mm/PopulateContents() - name = "ammo can (9mm)" - icon_state = "ammobox_9mm" - for (var/i in 1 to 4) - new /obj/item/ammo_box/c9mm(src) - -/obj/item/storage/toolbox/ammo/c10mm/PopulateContents() - name = "ammo can (10mm)" - icon_state = "ammobox_10mm" - for (var/i in 1 to 4) - new /obj/item/ammo_box/c10mm(src) - -/obj/item/storage/toolbox/ammo/shotgun/PopulateContents() - name = "ammo can (12ga)" - icon_state = "ammobox_12ga" - for (var/i in 1 to 4) - new /obj/item/ammo_box/a12g(src) - /obj/item/storage/toolbox/infiltrator name = "insidious case" desc = "Bearing the emblem of the Syndicate, this case contains a full infiltrator stealth suit, and has enough room to fit weaponry if necessary." diff --git a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm index d5489edeb3e0..434a80c6416d 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm @@ -28,7 +28,7 @@ /datum/blackmarket_item/ammo/himehabu_box name = ".22 LR Ammo Box" desc = "A 75 round ammo box of .22 LR. Trust me, you'll need every shot." - item = /obj/item/ammo_box/c22lr_box + item = /obj/item/storage/box/ammo/c22lr price_min = 100 price_max = 300 @@ -39,7 +39,7 @@ /datum/blackmarket_item/ammo/a357_box name = ".357 Ammo Box" desc = "A 50 round ammo box of .357." - item = /obj/item/ammo_box/a357_box + item = /obj/item/storage/box/ammo/a357 price_min = 150 price_max = 500 @@ -60,7 +60,7 @@ /datum/blackmarket_item/ammo/c299 name = "Eoehoma .299 Caseless Ammo Box" desc = "This ammunition for the E-40 Hybrid Rifle is probably worth more than the people you're shooting it at." - item = /obj/item/ammo_box/c299 + item = /obj/item/storage/box/ammo/c299 price_min = 300 price_max = 700 @@ -253,7 +253,7 @@ /datum/blackmarket_item/ammo/a4570hp name = ".45-70 Hollow Point Ammo Box" desc = "Put the hollow in hollow point by blowing a crater in some random sod with this devastating .45-70 cartridge." - item = /obj/item/ammo_box/a4570/hp + item = /obj/item/storage/box/ammo/a4570_hp price_min = 600 price_max = 1000 diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index a7ab407b428e..396b1c5845d9 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -39,13 +39,13 @@ /datum/supply_pack/ammo/a357_mag name = ".357 Speedloader Crate" desc = "Contains a .357 speedloader for revolvers, containing seven rounds." - contains = list(/obj/item/ammo_box/a357) + contains = list(/obj/item/storage/box/ammo/a357) cost = 750 /datum/supply_pack/ammo/mag_556mm name = "5.56 Pistole C Magazine Crate" desc = "Contains a 5.56mm magazine for the Pistole C, containing twelve rounds." - contains = list(/obj/item/ammo_box/magazine/pistol556mm) + contains = list(/obj/item/storage/box/ammo/c556mm) cost = 750 faction = FACTION_SOLGOV @@ -62,21 +62,21 @@ /datum/supply_pack/ammo/buckshot name = "Buckshot Crate" - desc = "Contains a box of twenty-five buckshot shells for use in lethal persuasion." + desc = "Contains a box of 32 buckshot shells for use in lethal persuasion." cost = 500 - contains = list(/obj/item/ammo_box/a12g) + contains = list(/obj/item/storage/box/ammo/a12g_buckshot) /datum/supply_pack/ammo/slugs name = "Shotgun Slug Crate" - desc = "Contains a box of twenty-five slug shells for use in lethal persuasion." + desc = "Contains a box of 32 slug shells for use in lethal persuasion." cost = 500 - contains = list(/obj/item/ammo_box/a12g/slug) - + contains = list(/obj/item/storage/box/ammo/a12g_slug +) /datum/supply_pack/ammo/blank_shells name = "Blank Shell Crate" desc = "Contains a box of blank shells." cost = 500 - contains = list(/obj/item/ammo_box/a12g/blanks) + contains = list(/obj/item/storage/box/ammo/a12g_blank) /datum/supply_pack/ammo/blank_ammo_disk name = "Blank Ammo Design Disk Crate" @@ -92,9 +92,9 @@ /datum/supply_pack/ammo/rubbershot name = "Rubbershot Crate" - desc = "Contains a box of twenty-five rubbershot shells for use in crowd control or training." + desc = "Contains a box of 32 rubbershot shells for use in crowd control or training." cost = 500 - contains = list(/obj/item/ammo_box/a12g/rubbershot) + contains = list(/obj/item/storage/box/ammo/a12g_rubbershot) /* .38 ammo @@ -104,8 +104,8 @@ name = ".38 Ammo Boxes Crate" desc = "Contains two 50 round ammo boxes for refilling .38 weapons." cost = 250 - contains = list(/obj/item/ammo_box/c38_box, - /obj/item/ammo_box/c38_box) + contains = list(/obj/item/storage/box/ammo/c38, + /obj/item/storage/box/ammo/c38) crate_name = "ammo crate" /datum/supply_pack/ammo/match @@ -196,133 +196,133 @@ /datum/supply_pack/ammo/a762_ammo_box name = "7.62x40mm CLIP Ammo Box Crate" desc = "Contains a one hundred and twenty-round 7.62x40mm CLIP box for the SKM rifles." - contains = list(/obj/item/ammo_box/a762_40) + contains = list(/obj/item/storage/box/ammo/a762_40) cost = 500 /datum/supply_pack/ammo/a556_ammo_box name = "5.56x42mm CLIP Ammo Box Crate" desc = "Contains a one hundred and twenty-round 5.56x42mm CLIP box for most newer rifles." - contains = list(/obj/item/ammo_box/a556_42) + contains = list(/obj/item/storage/box/ammo/a556_42) cost = 450 /datum/supply_pack/ammo/a357_ammo_box name = ".357 Ammo Box Crate" desc = "Contains a fifty-round .357 box for revolvers such as the Scarborough Revolver and the HP Firebrand." - contains = list(/obj/item/ammo_box/a357_box) + contains = list(/obj/item/storage/box/ammo/a357) cost = 250 /datum/supply_pack/ammo/c556mmHITP_ammo_box name = "5.56 Caseless Ammo Box Crate" desc = "Contains a fifty-round 5.56mm caseless box for SolGov sidearms like the Pistole C." - contains = list(/obj/item/ammo_box/c556mmHITP) + contains = list(/obj/item/storage/box/ammo/c556mm) cost = 250 /datum/supply_pack/ammo/c45_ammo_box name = ".45 Ammo Box Crate" desc = "Contains a fifty-round .45 box for pistols and SMGs like the Candor or the C-20r." - contains = list(/obj/item/ammo_box/c45) + contains = list(/obj/item/storage/box/ammo/c45) cost = 250 /datum/supply_pack/ammo/c10mm_ammo_box name = "10mm Ammo Box Crate" desc = "Contains a fifty-round 10mm box for pistols and SMGs like the Ringneck or the SkM-44(k)." - contains = list(/obj/item/ammo_box/c10mm) + contains = list(/obj/item/storage/box/ammo/c10mm) cost = 250 /datum/supply_pack/ammo/c9mm_ammo_box name = "9mm Ammo Box Crate" desc = "Contains a fifty-round 9mm box for pistols and SMGs such as the Commander or Saber." - contains = list(/obj/item/ammo_box/c9mm) + contains = list(/obj/item/storage/box/ammo/c9mm) cost = 200 /datum/supply_pack/ammo/a308_ammo_box name = "308 Ammo Box Crate" desc = "Contains a thirty-round .308 box for DMRs such as the SsG-04 and CM-GAL-S." - contains = list(/obj/item/ammo_box/a308) + contains = list(/obj/item/storage/box/ammo/a308) cost = 500 /datum/supply_pack/ammo/c9mmap_ammo_box name = "9mm AP Ammo Box Crate" desc = "Contains a fifty-round 9mm box loaded with armor piercing ammo." - contains = list(/obj/item/ammo_box/c9mm/ap) + contains = list(/obj/item/storage/box/ammo/c9mm/ap) cost = 400 /datum/supply_pack/ammo/a357match_ammo_box name = ".357 Match Ammo Box Crate" desc = "Contains a fifty-round .357 match box for better performance against armor." - contains = list(/obj/item/ammo_box/a357_box/match) + contains = list(/obj/item/storage/box/ammo/a357_match) cost = 500 /datum/supply_pack/ammo/c556mmHITPap_ammo_box name = "5.56 caseless AP Ammo Box Crate" desc = "Contains a fifty-round 5.56mm caseless boxloaded with armor piercing ammo." - contains = list(/obj/item/ammo_box/c556mmHITP/ap) + contains = list(/obj/item/storage/box/ammo/c556mm_ap) cost = 500 /datum/supply_pack/ammo/c45ap_ammo_box name = ".45 AP Ammo Box Crate" desc = "Contains a fifty-round .45 box loaded with armor piercing ammo." - contains = list(/obj/item/ammo_box/c45/ap) + contains = list(/obj/item/storage/box/ammo/c45_ap) cost = 500 /datum/supply_pack/ammo/c10mmap_ammo_box name = "10mm AP Ammo Box Crate" desc = "Contains a fifty-round 10mm box loaded with armor piercing ammo." - contains = list(/obj/item/ammo_box/c10mm/ap) + contains = list(/obj/item/storage/box/ammo/c10mm_ap) cost = 500 /datum/supply_pack/ammo/c9mmhp_ammo_box name = "9mm HP Ammo Box Crate" desc = "Contains a fifty-round 9mm box loaded with hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/c9mm/hp) + contains = list(/obj/item/storage/box/ammo/c9mm_hp) cost = 400 /datum/supply_pack/ammo/a357hp_ammo_box name = ".357 HP Ammo Box Crate" desc = "Contains a fifty-round .357 box loaded with hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/a357_box/hp) + contains = list(/obj/item/storage/box/ammo/a357_hp) cost = 500 /datum/supply_pack/ammo/c10mmhp_ammo_box name = "10mm HP Ammo Box Crate" desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/c10mm/hp) + contains = list(/obj/item/storage/box/ammo/c10mm_hp) cost = 500 + /datum/supply_pack/ammo/c45hp_ammo_box name = ".45 HP Ammo Box Crate" desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/c45/hp) + contains = list(/obj/item/storage/box/ammo/c45_hp) cost = 500 /datum/supply_pack/ammo/c556mmhitphp_ammo_box name = "5.56 Caseless HP Ammo Box Crate" desc = "Contains a fifty-round 5.56mm caseless box loaded with hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/c556mmHITP/hp) + contains = list(/obj/item/storage/box/ammo/c556mm_hp) cost = 500 /datum/supply_pack/ammo/c9mmrubber_ammo_box name = "9mm Rubber Ammo Box Crate" desc = "Contains a fifty-round 9mm box loaded with less-than-lethal rubber rounds." - contains = list(/obj/item/ammo_box/c9mm/rubbershot) + contains = list(/obj/item/storage/box/ammo/c9mm_rubber) cost = 200 /datum/supply_pack/ammo/c10mmrubber_ammo_box name = "10mm Rubber Ammo Box Crate" desc = "Contains a fifty-round 10mm box loaded with less-than-lethal rubber rounds." - contains = list(/obj/item/ammo_box/c10mm/rubbershot) + contains = list(/obj/item/storage/box/ammo/c10mm_rubber) cost = 250 /datum/supply_pack/ammo/c45mmrubber_ammo_box name = ".45 Rubber Ammo Box Crate" desc = "Contains a fifty-round .45 box loaded with less-than-lethal rubber rounds." - contains = list(/obj/item/ammo_box/c45/rubbershot) + contains = list(/obj/item/storage/box/ammo/c45_rubber) cost = 250 - /datum/supply_pack/ammo/c556HITPrubber_ammo_box name = "5.56 Caseless Rubber Ammo Box Crate" desc = "Contains a fifty-round 5.56 caseless box loaded with less-than-lethal rubber rounds." - contains = list(/obj/item/ammo_box/c556mmHITP/rubbershot) + contains = list(/obj/item/storage/box/ammo/c556mm_rubber) cost = 250 /datum/supply_pack/ammo/guncell @@ -340,84 +340,83 @@ /datum/supply_pack/ammo/c57x39mm_boxcrate name = "5.7x39mm Ammo Box Crate" desc = "Contains a fifty-round 5.7x39mm box for PDWs such as the Sidewinder." - contains = list(/obj/item/ammo_box/c57x39mm_box) + contains = list(/obj/item/storage/box/ammo/c57x39) cost = 250 /datum/supply_pack/ammo/c46x30mm_boxcrate name = "4.6x30mm Ammo Box Crate" desc = "Contains a fifty-round 4.6x30mm box for PDWs such as the WT-550." - contains = list(/obj/item/ammo_box/c46x30mm_box) + contains = list(/obj/item/storage/box/ammo/c46x30mm) cost = 250 /datum/supply_pack/ammo/c8x50mm_boxcrate name = "8x50mm Ammo Box Crate" desc = "Contains a twenty-round 8x50mm ammo box for rifles such as the Illestren." - contains = list(/obj/item/ammo_box/c8x50mm_box) + contains = list(/obj/item/storage/box/ammo/a8_50r) cost = 250 /datum/supply_pack/ammo/c8x50mm_boxhp_boxcrate name = "8x50mm Hollow Point Crate" desc = "Contains a twenty-round 8x50mm ammo box loaded with hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/c8x50mmhp_box) + contains = list(/obj/item/storage/box/ammo/a8_50r_hp) cost = 500 /datum/supply_pack/ammo/a300_box name = ".300 Ammo Box Crate" desc = "Contains a twenty-round .300 Magnum ammo box for sniper rifles such as the HP Scout." - contains = list(/obj/item/ammo_box/a300_box) + contains = list(/obj/item/storage/box/ammo/a300) cost = 400 /datum/supply_pack/ammo/a65clip_box name = "6.5x57mm CLIP Ammo Box Crate" desc = "Contains a twenty-round 6.5x57mm CLIP ammo box for various sniper rifles such as the CM-F90 and the Boomslang series." - contains = list(/obj/item/ammo_box/a65clip_box) + contains = list(/obj/item/storage/box/ammo/a65clip) cost = 400 - /datum/supply_pack/ammo/a4570_box name = ".45-70 Ammo Box Crate" desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition." - contains = list(/obj/item/ammo_box/a4570) + contains = list(/obj/item/storage/box/ammo/a4570) cost = 500 /datum/supply_pack/ammo/a4570_box/match name = ".45-70 Match Crate" desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition, that travels faster, pierces armour better, and ricochets off targets." - contains = list(/obj/item/ammo_box/a4570/match) + contains = list(/obj/item/storage/box/ammo/a4570_match) cost = 750 /datum/supply_pack/ammo/ferropelletboxcrate name = "Ferromagnetic Pellet Box Crate" desc = "Contains a fifty-round ferromagnetic pellet ammo box for gauss guns such as the Claris." - contains = list(/obj/item/ammo_box/ferropelletbox) + contains = list(/obj/item/storage/box/ammo/ferropellet) cost = 250 /datum/supply_pack/ammo/ferroslugboxcrate name = "Ferromagnetic Slug Box Crate" desc = "Contains a twenty-round ferromagnetic slug for gauss guns such as the Model-H." - contains = list(/obj/item/ammo_box/ferroslugbox) + contains = list(/obj/item/storage/box/ammo/ferroslug) cost = 250 /datum/supply_pack/ammo/ferrolanceboxcrate name = "Ferromagnetic Lance Box Crate" desc = "Contains a fifty-round box for high-powered gauss guns such as the GAR assault rifle." - contains = list(/obj/item/ammo_box/ferrolancebox) + contains = list(/obj/item/storage/box/ammo/ferrolance) cost = 250 /datum/supply_pack/ammo/a44roum name = ".44 Roumain Ammo Box Crate" desc = "Contains a fifty-round box of .44 roumain ammo for revolvers such as the Shadow and Montagne." - contains = list(/obj/item/ammo_box/a44roum) + contains = list(/obj/item/storage/box/ammo/a44roum) cost = 250 /datum/supply_pack/ammo/a44roum_rubber name = ".44 Roumain Rubber Ammo Box Crate" desc = "Contains a fifty-round box of .44 roumain ammo loaded with less-than-lethal rubber rounds." - contains = list(/obj/item/ammo_box/a44roum/rubber) + contains = list(/obj/item/storage/box/ammo/a44roum_rubber) cost = 250 /datum/supply_pack/ammo/a44roum_hp name = ".44 Roumain Hollow Point Ammo Box Crate" desc = "Contains a fifty-round box of .44 roumain hollow point ammo, great against unarmored targets." - contains = list(/obj/item/ammo_box/a44roum/hp) + contains = list(/obj/item/storage/box/ammo/a44roum_hp) cost = 500 diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index 5a4710ac644d..b685e0e4b8bb 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -220,7 +220,11 @@ l_hand = /obj/item/flamethrower/full/tank - backpack_contents = list(/obj/item/gun/ballistic/shotgun/doublebarrel/presawn=1,/obj/item/ammo_box/a12g=1,/obj/item/extinguisher=2,/obj/item/radio=1) + backpack_contents = list( + /obj/item/gun/ballistic/shotgun/doublebarrel/presawn=1, \ + /obj/item/storage/box/ammo/a12g_slug = 1, \ + /obj/item/extinguisher = 2, \ + /obj/item/radio=1) /datum/outfit/job/frontiersmen/ert/sentry_lmg diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 406259246db1..4d5a07d4130f 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -232,7 +232,7 @@ new /obj/item/gun/ballistic/automatic/toy/pistol(src) new /obj/item/gun/ballistic/automatic/toy(src) new /obj/item/gun/ballistic/automatic/toy(src) - new /obj/item/ammo_box/foambox(src) + new /obj/item/storage/box/ammo/foam_darts(src) if(98) for(var/i in 1 to 3) new /mob/living/simple_animal/hostile/poison/bees/toxin(src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index afa2baed7324..9df0d5b76b74 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -135,6 +135,9 @@ multiple_sprites = AMMO_BOX_PER_BULLET instant_load = TRUE +/obj/item/ammo_box/a858/empty + start_empty = TRUE + // .308 Stripper Clip (Vickland) /obj/item/ammo_box/vickland_a308 @@ -148,6 +151,9 @@ w_class = WEIGHT_CLASS_TINY instant_load = TRUE +/obj/item/ammo_box/vickland_a308/empty + start_empty = TRUE + // .300 Magnum Stripper Clip (Scout) /obj/item/ammo_box/a300 @@ -164,17 +170,21 @@ start_empty = TRUE // .300 Blackout Stripper Clip (Polymer Survivor Rifle) -/obj/item/ammo_box/aac_300blk_stripper - name = "stripper clip (.300 BLK)" +/obj/item/ammo_box/a762_stripper + name = "stripper clip (7.62)" desc = "A 5-round stripper clip for makeshift bolt-action rifles. These rounds do good damage with good armor penetration." - icon_state = "300m" - ammo_type = /obj/item/ammo_casing/aac_300blk - caliber = ".300 BLK" + icon_state = "stripper_308-5" + base_icon_state = "stripper_308" + ammo_type = /obj/item/ammo_casing/a762_40 + caliber = "7.62x40mm" max_ammo = 5 multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_TINY instant_load = TRUE +/obj/item/ammo_box/a762_stripper/empty + start_empty = TRUE + // Ferromagnetic Pellet Speed Loader (Claris) /obj/item/ammo_box/amagpellet_claris diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_misc_stacks.dm similarity index 87% rename from code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm rename to code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_misc_stacks.dm index e0cd61a885b6..a24599138238 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_stacks_misc.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_misc_stacks.dm @@ -1,5 +1,5 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts - ammo_type = /obj/item/ammo_casing/c10mm/foam_dart + ammo_type = /obj/item/ammo_casing/caseless/foam_dart /obj/item/storage/box/ammo/foam_darts name = "box of foam darts" @@ -13,7 +13,7 @@ generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/foam_darts/riot - ammo_type = /obj/item/ammo_casing/c10mm/foam_dart/riot + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot /obj/item/storage/box/ammo/foam_darts/riot name = "box of foam darts" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index d7389389ebe6..6d44fba40abc 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -139,7 +139,7 @@ /obj/item/storage/box/ammo/c9mm_hp/PopulateContents() ..() var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_hp = 4) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp = 4) generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/incendiary @@ -427,9 +427,31 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/hotshot ammo_type = /obj/item/ammo_casing/c38/hotshot -/obj/item/ammo_box/magazine/ammo_stack/prefilled/iceblox +/obj/item/storage/box/ammo/c38_hotshot + name = "box of .38 hearth ammo" + desc = "An unorthodox .38 Special cartridge infused with hearthwine. Catches the target on fire." + icon_state = "38hotshot" + +/obj/item/storage/box/ammo/c38_hotshot/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/hotshot = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/iceblox ammo_type = /obj/item/ammo_casing/c38/iceblox +/obj/item/storage/box/ammo/c38_iceblox + name = "box of .38 chilled ammo" + desc = "An unorthodox .38 Special cartridge infused with icewine. Chills the target, slowing them down." + icon_state = "38iceblox" + +/obj/item/storage/box/ammo/c38_iceblox/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/iceblox = 4) + generate_items_inside(items_inside,src) + // 44 Roumain /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum @@ -443,7 +465,7 @@ /obj/item/storage/box/ammo/a44roum/PopulateContents() ..() var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum = 4) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum = 4) generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber @@ -457,7 +479,7 @@ /obj/item/storage/box/ammo/a44roum_rubber/PopulateContents() ..() var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/rubber = 4) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/rubber = 4) generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp @@ -471,5 +493,5 @@ /obj/item/storage/box/ammo/a44roum_hp/PopulateContents() ..() var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c38/a44roum/hp = 4) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a44roum/hp = 4) generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm index 7e0d24b9eca0..f9e0d882a1e8 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -49,10 +49,21 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 = 4) generate_items_inside(items_inside,src) -// 5.56x39mm (M-90gl Carbine & P-16) +// 5.56x42mm CLIP (CM82, Hydra variants) -/obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_39 - ammo_type = /obj/item/ammo_casing/a556_39 +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_42 + ammo_type = /obj/item/ammo_casing/a556_42 + +/obj/item/storage/box/ammo/a556_42 + name = "box of 5.56x42mm CLIP ammo" + desc = "A box of standard 5.56x42mm CLIP ammo." + icon_state = "a556_42box_big" + +/obj/item/storage/box/ammo/a556_42/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_42 = 4) + generate_items_inside(items_inside,src) // 5.45x39mm (SKM-24v) @@ -81,14 +92,6 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 = 4) generate_items_inside(items_inside,src) -// .300 Blackout (Polymer Survivor Rifle) - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk - ammo_type = /obj/item/ammo_casing/aac_300blk - -/obj/item/ammo_box/magazine/ammo_stack/prefilled/aac_300blk/recycled - ammo_type = /obj/item/ammo_casing/aac_300blk/recycled - //.308 (M514 EBR & CM-GAL-S) /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 @@ -107,3 +110,37 @@ var/static/items_inside = list( /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 = 4) generate_items_inside(items_inside,src) + + +//.299 Eoehoma Caseless (E-40) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c299 + ammo_type = /obj/item/ammo_casing/caseless/c299 + +/obj/item/storage/box/ammo/c299 + name = "box of .299 Eoehoma caseless ammo" + desc = "A box of .299 Eoehoma caseless, for use with the E-40 hybrid assault rifle." + icon_state = "299box" + +/obj/item/storage/box/ammo/c299/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c299 = 4) + generate_items_inside(items_inside,src) + + +//6.5x57mm CLIP + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/a65clip + ammo_type = /obj/item/ammo_casing/a65clip + +/obj/item/storage/box/ammo/a65clip + name = "box of 6.5x57mm CLIP ammo" + desc = "A box of standard 6.5x57mm CLIP ammo." + icon_state = "65box" + +/obj/item/storage/box/ammo/a65clip/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/a65clip = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm index bf201a2f2656..616e64f5a4e0 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm @@ -58,6 +58,20 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/rubber = 4) generate_items_inside(items_inside,src) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/blank + ammo_type = /obj/item/ammo_casing/shotgun/blank + +/obj/item/storage/box/ammo/a12g_blank + name = "box of 12ga blanks" + desc = "A box of 12-gauge blank shells, designed for training." + icon_state = "12gbox-slug" //needs icon + +/obj/item/storage/box/ammo/a12g_blank/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/blank = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary ammo_type = /obj/item/ammo_casing/shotgun/incendiary diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index 5a6c99d8297c..4e7d5f65d292 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -93,3 +93,19 @@ var/static/items_inside = list( /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm/rubbershot = 4) generate_items_inside(items_inside,src) + +// 5.7x39mm (Asp and Sidewinder) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c57x39 + ammo_type = /obj/item/ammo_casing/c57x39mm + +/obj/item/storage/box/ammo/c57x39 + name = "box of 5.7x39mm ammo" + desc = "A box of standard 5.7x39mm ammo." + icon_state = "57x39mmbox" + +/obj/item/storage/box/ammo/c57x39/PopulateContents() + ..() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c57x39 = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 0b679dfcc4bf..658978fa9ed4 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -761,7 +761,7 @@ id = "foam_dart" build_type = AUTOLATHE materials = list(/datum/material/iron = 500) - build_path = /obj/item/ammo_box/foambox + build_path = /obj/item/storage/box/ammo/foam_darts category = list("initial", "Misc") /datum/design/handcuffs @@ -785,7 +785,7 @@ id = "c38_surplus" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c38_box/surplus + build_path = /obj/item/storage/box/ammo/c38_surplus category = list("initial", "Security", "Ammo") /datum/design/beanbag_slug @@ -817,7 +817,7 @@ id = "riot_darts" build_type = AUTOLATHE materials = list(/datum/material/iron = 50000) //Comes with 40 darts - build_path = /obj/item/ammo_box/foambox/riot + build_path = /obj/item/storage/box/ammo/foam_darts/riot category = list("initial", "Security") /datum/design/c10mm_surplus @@ -825,7 +825,7 @@ id = "c10mm-surplus" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c10mm/surplus + build_path = /obj/item/storage/box/ammo/c10mm_surplus category = list("initial", "Security", "Ammo") /datum/design/c45_surplus @@ -833,7 +833,7 @@ id = "c45-surplus" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c45/surplus + build_path = /obj/item/storage/box/ammo/c45_surplus category = list("initial", "Security", "Ammo") /datum/design/c9mm_surplus @@ -841,7 +841,7 @@ id = "c9mm-surplus" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c9mm/surplus + build_path = /obj/item/storage/box/ammo/c9mm_surplus category = list("initial", "Security", "Ammo") /datum/design/c556mmHITP_surplus @@ -849,7 +849,7 @@ id = "c556mmHITP-surplus" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c556mmHITP/surplus + build_path = /obj/item/storage/box/ammo/c556mm_surplus category = list("initial", "Security", "Ammo") /datum/design/generic_ammo_box diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 1c3edc8b7c32..a07f9d96dd80 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -288,8 +288,6 @@ category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -//Shiptest edit - standard ammunition - /datum/design/buckshot_shell name = "Buckshot Shell" id = "buckshot_shell" @@ -304,7 +302,7 @@ id = "c38" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c38_box + build_path = /obj/item/storage/box/ammo/c38 category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -313,7 +311,7 @@ id = "c9mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c9mm + build_path = /obj/item/storage/box/ammo/c9mm category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -322,7 +320,7 @@ id = "c10mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c10mm + build_path = /obj/item/storage/box/ammo/c10mm category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -331,7 +329,7 @@ id = "c45" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c45 + build_path = /obj/item/storage/box/ammo/c45 category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -340,19 +338,17 @@ id = "c556mmHITP" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c556mmHITP + build_path = /obj/item/storage/box/ammo/c556mm category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -// WS edit - not so free rubbershot - /datum/design/rubbershot9mm name = "Rubbershot 9mm ammo box" desc = "A box full of less-than-lethal 9mm ammunition." id = "rubbershot9mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c9mm/rubbershot + build_path = /obj/item/storage/box/ammo/c9mm_rubber category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -362,7 +358,7 @@ id = "rubbershot10mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c10mm/rubbershot + build_path = /obj/item/storage/box/ammo/c10mm_rubber category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -372,7 +368,7 @@ id = "rubbershot45" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c45/rubbershot + build_path = /obj/item/storage/box/ammo/c45_rubber category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS @@ -382,7 +378,7 @@ id = "rubbershot556mmHITP" build_type = PROTOLATHE materials = list(/datum/material/iron = 18000) - build_path = /obj/item/ammo_box/c556mmHITP/rubbershot + build_path = /obj/item/storage/box/ammo/c556mm_rubber category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -392,7 +388,7 @@ id = "ap9mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/uranium = 1000) - build_path = /obj/item/ammo_box/c9mm/ap + build_path = /obj/item/storage/box/ammo/c9mm/ap category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -402,7 +398,7 @@ id = "ap10mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/uranium = 1000) - build_path = /obj/item/ammo_box/c10mm/ap + build_path = /obj/item/storage/box/ammo/c10mm_ap category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -412,7 +408,7 @@ id = "ap45" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/uranium = 1000) - build_path = /obj/item/ammo_box/c45/ap + build_path = /obj/item/storage/box/ammo/c45_ap category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS @@ -422,7 +418,7 @@ id = "ap556mmHITP" build_type = PROTOLATHE materials = list(/datum/material/iron = 18000, /datum/material/uranium = 1000) - build_path = /obj/item/ammo_box/c556mmHITP/ap + build_path = /obj/item/storage/box/ammo/c556mm_ap category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -432,7 +428,7 @@ id = "hp9mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/silver = 1000) - build_path = /obj/item/ammo_box/c9mm/hp + build_path = /obj/item/storage/box/ammo/c9mm_hp category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -442,7 +438,7 @@ id = "hp10mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/silver = 1000) - build_path = /obj/item/ammo_box/c10mm/hp + build_path = /obj/item/storage/box/ammo/c10mm_hp category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -452,7 +448,7 @@ id = "hp45" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/silver = 1000) - build_path = /obj/item/ammo_box/c45/hp + build_path = /obj/item/storage/box/ammo/c45_hp category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS @@ -462,7 +458,7 @@ id = "hp556mmHITP" build_type = PROTOLATHE materials = list(/datum/material/iron = 18000, /datum/material/silver = 1000) - build_path = /obj/item/ammo_box/c556mmHITP/hp + build_path = /obj/item/storage/box/ammo/c556mm_hp category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -472,7 +468,7 @@ id = "inc9mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/plasma = 5000) - build_path = /obj/item/ammo_box/c9mm/fire + build_path = /obj/item/storage/box/ammo/c9mm_incendiary category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -482,7 +478,7 @@ id = "inc10mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/plasma = 5000) - build_path = /obj/item/ammo_box/c10mm/fire + build_path = /obj/item/storage/box/ammo/c10mm_incendiary category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY @@ -492,7 +488,7 @@ id = "inc45" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/plasma = 5000) - build_path = /obj/item/ammo_box/c45/fire + build_path = /obj/item/storage/box/ammo/c45_incendiary category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS @@ -737,5 +733,5 @@ id = "c9mmautolathe" build_type = AUTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c9mm + build_path = /obj/item/storage/box/ammo/c9mm category = list("Imported") diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 877f1f11d854..b672fe681884 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -869,7 +869,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/ammo/toydarts name = "Box of Riot Darts" desc = "A box of 40 Donksoft riot darts, for reloading any compatible foam dart magazine. Don't forget to share!" - item = /obj/item/ammo_box/foambox/riot + item = /obj/item/storage/box/ammo/foam_darts/riot cost = 2 surplus = 0 illegal_tech = FALSE diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 06069e4db764..931611da1df9 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -10,14 +10,14 @@ /obj/item/gun/ballistic/automatic/toy/pistol = 10, /obj/item/gun/ballistic/shotgun/toy = 10, /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, + /obj/item/storage/box/ammo/foam_darts = 20, /obj/item/toy/foamblade = 10, /obj/item/toy/balloon/syndicate = 10, /obj/item/clothing/suit/syndicatefake = 5, /obj/item/clothing/head/syndicatefake = 5) //OPS IN DORMS oh wait it's just an assistant contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/ammo_box/foambox/riot = 20, + /obj/item/storage/box/ammo/foam_darts/riot = 20, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5, /obj/item/toy/cards/deck/syndicate = 10) //Gambling and it hurts, making it a +18 item diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index 08af917aa86a..898844a31c09 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -12,7 +12,7 @@ /obj/item/gun/ballistic/automatic/toy/pistol = 10, /obj/item/gun/ballistic/shotgun/toy = 10, /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, + /obj/item/storage/box/ammo/foam_darts = 20, /obj/item/toy/foamblade = 10, /obj/item/toy/balloon/syndicate = 10, /obj/item/clothing/suit/syndicatefake = 5, diff --git a/icons/obj/ammunition/ammo_boxes.dmi b/icons/obj/ammunition/ammo_boxes.dmi index 842b5755ed6782f970c06d9cad135adde040cf32..f820e5e0cadf8599681ca6fb380b07c77c36b4bb 100644 GIT binary patch literal 7431 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 i1|06lGEtyh{ZQU3>EPV_1O literal 6570 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 Date: Sat, 5 Oct 2024 14:16:09 -0700 Subject: [PATCH 12/31] fixes --- .../nanotrasen/nanotrasen_harrier.dmm | 6 +++--- icons/obj/ammunition/ammo.dmi | Bin 37936 -> 19548 bytes icons/obj/ammunition/ammo_boxes.dmi | Bin 7431 -> 6468 bytes icons/obj/ammunition/ammo_bullets.dmi | Bin 3295 -> 3390 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm b/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm index 9e5d93f7af77..72bd430d743b 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm @@ -5189,9 +5189,9 @@ /obj/item/reagent_containers/spray/pepper, /obj/item/ammo_box/magazine/co9mm, /obj/item/ammo_box/magazine/co9mm, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm/rubbershot, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm, +/obj/item/storage/box/ammo/c9mm_rubber, /obj/effect/turf_decal/trimline/opaque/vired/line, /obj/item/storage/belt/security, /obj/item/melee/knife/survival, diff --git a/icons/obj/ammunition/ammo.dmi b/icons/obj/ammunition/ammo.dmi index b2e6a608e6ae8960427898f3df812aec60d972e6..5f01c46755c3d3298c3cbda48acb97283b5cf165 100644 GIT binary patch literal 19548 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 Z77;(@pXSi&HfurP<>R$?XO(9-`+v?dKso>b diff --git a/icons/obj/ammunition/ammo_boxes.dmi b/icons/obj/ammunition/ammo_boxes.dmi index f820e5e0cadf8599681ca6fb380b07c77c36b4bb..ac963d46212bb98403879c7bb5c52c5409424e9d 100644 GIT binary patch delta 6237 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 n!@~7=Dog%34x4_u2j92)MC%uePdei_0br+Z delta 7208 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 QcN}n0*I4JZwoCZ`0A~27l>h($ diff --git a/icons/obj/ammunition/ammo_bullets.dmi b/icons/obj/ammunition/ammo_bullets.dmi index 5486bc9786ded01d89ebed97958b97573205a8f5..25ea909762aabe87477e7d5f56203343ac49b436 100644 GIT binary patch delta 3176 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 T+H3y&DS#|3Y|X38JmUWclbtd! delta 3080 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 Wz~G=<+qb_x$j-*Wy28rm&i?>)?i1?( From ea8c9eaee9d1d237de05f8838585947c027cd2a7 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 14:31:12 -0700 Subject: [PATCH 13/31] More fixes --- .../projectiles/boxes_magazines/ammo_boxes.dm | 2 +- icons/obj/ammunition/ammo.dmi | Bin 19548 -> 20173 bytes tools/UpdatePaths/Scripts/3456_ammoboxes.txt | 69 ------------------ 3 files changed, 1 insertion(+), 70 deletions(-) delete mode 100644 tools/UpdatePaths/Scripts/3456_ammoboxes.txt diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 9df0d5b76b74..e81eb77e3b46 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -3,7 +3,7 @@ /obj/item/ammo_box/a357 name = "speed loader (.357)" desc = "A 7-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." - icon_state = "speedloader_357-7" + icon_state = "speedloader_357-6" base_icon_state = "speedloader_357" ammo_type = /obj/item/ammo_casing/a357 caliber = ".357" diff --git a/icons/obj/ammunition/ammo.dmi b/icons/obj/ammunition/ammo.dmi index 5f01c46755c3d3298c3cbda48acb97283b5cf165..85e8e368fac84d8290a72ac24c632da377bc2bcf 100644 GIT binary patch delta 19657 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 z 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 MpLIA>Y3&{VZ!H)`XaE2J delta 19043 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 Date: Sat, 5 Oct 2024 14:37:15 -0700 Subject: [PATCH 14/31] linter From 52ed41f903e273482cc52e7c68c50b81396ea7e5 Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 18:17:28 -0700 Subject: [PATCH 15/31] linter? From 865b20f5cbd971645f52575ee249cb98b8e4b7f6 Mon Sep 17 00:00:00 2001 From: thgvr <81882910+thgvr@users.noreply.github.com> Date: Sat, 5 Oct 2024 18:19:38 -0700 Subject: [PATCH 16/31] Update _maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm Signed-off-by: thgvr <81882910+thgvr@users.noreply.github.com> --- _maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm | 1 - 1 file changed, 1 deletion(-) diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index 6d0ac796457d..cfe522aeb415 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -374,7 +374,6 @@ }, /obj/item/gun/energy/lasercannon{ pixel_y = 5; - }, /obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, From 139838913e9ebe03ee6ec14267ca65a4035aa6ec Mon Sep 17 00:00:00 2001 From: thgvr <81882910+thgvr@users.noreply.github.com> Date: Sat, 5 Oct 2024 18:19:45 -0700 Subject: [PATCH 17/31] Update _maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm Signed-off-by: thgvr <81882910+thgvr@users.noreply.github.com> --- _maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm | 1 - 1 file changed, 1 deletion(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index 08b9f3a1940a..92fa7dfb9203 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -884,7 +884,6 @@ "zb" = ( /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner{ loot = list(/obj/item/melee/transforming/cleaving_saw,/obj/item/gun/energy/kinetic_accelerator,/obj/item/keycard/gatedrop/lavacanyon); - }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/overmap_encounter/planetoid/cave/explored) From 37b60d8e5e54520e72351b17d4186835c5f6962b Mon Sep 17 00:00:00 2001 From: thgvr <81882910+thgvr@users.noreply.github.com> Date: Sat, 5 Oct 2024 18:19:49 -0700 Subject: [PATCH 18/31] Update _maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm Signed-off-by: thgvr <81882910+thgvr@users.noreply.github.com> --- _maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm | 1 - 1 file changed, 1 deletion(-) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index 091a3e3bd786..ef9240170e41 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -2746,7 +2746,6 @@ "WY" = ( /obj/structure/frame/computer{ dir = 1; - }, /obj/effect/turf_decal/corner/opaque/red/diagonal, /turf/open/floor/plasteel/tech/techmaint, From 9685f9428c4440beeaefcc9f23eba1f5ee6e530d Mon Sep 17 00:00:00 2001 From: thgvr Date: Sat, 5 Oct 2024 18:26:39 -0700 Subject: [PATCH 19/31] ok --- .../projectiles/boxes_magazines/_box_magazine.dm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 6ca088220aa2..f75769cb3a84 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -55,13 +55,12 @@ update_appearance() -/** - * top_off is used to refill the magazine to max, in case you want to increase the size of a magazine with VV then refill it at once - * - * Arguments: - * * load_type - if you want to specify a specific ammo casing type to load, enter the path here, otherwise it'll use the basic [/obj/item/ammo_box/var/ammo_type]. Must be a compatible round - * * starting - Relevant for revolver cylinders, if FALSE then we mind the nulls that represent the empty cylinders (since those nulls don't exist yet if we haven't initialized when this is TRUE) - */ +/* + * top_off is used to refill the magazine to max, in case you want to increase the size of a magazine with VV then refill it at once + * Arguments: + * load_type - if you want to specify a specific ammo casing type to load, enter the path here, otherwise it'll use the basic [/obj/item/ammo_box/var/ammo_type]. Must be a compatible round + * starting - Relevant for revolver cylinders, if FALSE then we mind the nulls that represent the empty cylinders (since those nulls don't exist yet if we haven't initialized when this is TRUE) + */ /obj/item/ammo_box/proc/top_off(load_type, starting=FALSE) if(!load_type) //this check comes first so not defining an argument means we just go with default ammo load_type = ammo_type From 33b3ac6744ea9f28e2cc156b21e272c510e40813 Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 8 Oct 2024 12:30:18 -0700 Subject: [PATCH 20/31] fix CI hopefully --- code/game/atoms.dm | 4 ++++ code/modules/cargo/exports.dm | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a140ec099085..52583aed6c5f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1127,6 +1127,7 @@ VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") VV_DROPDOWN_OPTION(VV_HK_RADIATE, "Radiate") VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters") + VV_DROPDOWN_OPTION(VV_HK_SELL, "Export Item") /atom/vv_do_topic(list/href_list) . = ..() @@ -1198,6 +1199,9 @@ var/client/C = usr.client C?.open_filter_editor(src) + if(href_list[VV_HK_SELL] && check_rights(R_ADMIN|R_DEBUG) && check_rights(R_VAREDIT)) + export_item_and_contents(src, allowed_categories = ALL, apply_elastic = FALSE) + /atom/vv_get_header() . = ..() var/refid = REF(src) diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index be3ec7a26599..165cfb6c1196 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -59,7 +59,8 @@ then the player gets the profit from selling his own wasted time. if(!dry_run && (sold || delete_unsold)) if(ismob(thing)) thing.investigate_log("deleted through cargo export",INVESTIGATE_CARGO) - qdel(thing) + if(!dry_run) + qdel(AM) return report From fac50f5481feec93a0edf0c4f345354c1bc23625 Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 8 Oct 2024 12:35:35 -0700 Subject: [PATCH 21/31] oops --- code/__DEFINES/vv.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 602473b6086d..e52d9af56251 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -92,6 +92,7 @@ #define VV_HK_AUTO_RENAME "auto_rename" #define VV_HK_RADIATE "radiate" #define VV_HK_EDIT_FILTERS "edit_filters" +#define VV_HK_SELL "sell_item" #define VV_HK_EDIT_PARTICLES "edit_particles" // /obj From 467169f0cfa6de9231ec85a1f93d5d28af0ef104 Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 8 Oct 2024 12:43:24 -0700 Subject: [PATCH 22/31] How --- code/modules/cargo/packs/ammo.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 396b1c5845d9..ca3ad23727a6 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -1,6 +1,7 @@ /datum/supply_pack/ammo group = "Ammunition" crate_type = /obj/structure/closet/crate/secure/gear + crate_name = "ammo crate" /* Pistol ammo @@ -420,3 +421,9 @@ desc = "Contains a fifty-round box of .44 roumain hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/a44roum_hp) cost = 500 + +/datum/supply_pack/ammo/c22lr + name = ".22 LR Ammo Box Crate" + desc = "Contains a fifty-round ammo box for refilling .22 LR weapons." + contains = list(/obj/item/storage/box/ammo/c22lr) + cost = 250 From 2add6f7a6e40507784d334c782d60c43b161f5a2 Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 8 Oct 2024 13:05:21 -0700 Subject: [PATCH 23/31] ...? --- code/game/objects/items/weaponry.dm | 759 ---------------------------- 1 file changed, 759 deletions(-) delete mode 100644 code/game/objects/items/weaponry.dm diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm deleted file mode 100644 index 2d6912f2830a..000000000000 --- a/code/game/objects/items/weaponry.dm +++ /dev/null @@ -1,759 +0,0 @@ -/obj/item/banhammer - desc = "A banhammer." - name = "banhammer" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "toyhammer" - slot_flags = ITEM_SLOT_BELT - throwforce = 0 - force = 1 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - attack_verb = list("banned") - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - -/* -oranges says: This is a meme relating to the english translation of the ss13 russian wiki page on lurkmore. -mrdoombringer sez: and remember kids, if you try and PR a fix for this item's grammar, you are admitting that you are, indeed, a newfriend. -for further reading, please see: https://github.com/tgstation/tgstation/pull/30173 and https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=%2F%2Flurkmore.to%2FSS13&edit-text=&act=url -*/ -/obj/item/banhammer/attack(mob/M, mob/user) - if(user.zone_selected == BODY_ZONE_HEAD) - M.visible_message("[user] is stroking the head of [M] with a banhammer.", "[user] is stroking your head with a banhammer.", "You hear a banhammer stroking a head.") - else - M.visible_message("[M] has been banned FOR NO REISIN by [user]!", "You have been banned FOR NO REISIN by [user]!", "You hear a banhammer banning someone.") - playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much - if(user.a_intent != INTENT_HELP) - return ..(M, user) - -/obj/item/sord - name = "\improper SORD" - desc = "This thing is so unspeakably shitty you are having a hard time even holding it." - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 2 - throwforce = 1 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/claymore - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon_state = "claymore" - item_state = "claymore" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - hitsound = 'sound/weapons/bladeslice.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 40 - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - -/obj/item/claymore/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 105) - -/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS - desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." - flags_1 = CONDUCT_1 - item_flags = DROPDEL //WOW BRO YOU LOST AN ARM, GUESS WHAT YOU DONT GET YOUR SWORD ANYMORE //I CANT BELIEVE SPOOKYDONUT WOULD BREAK THE REQUIREMENTS - slot_flags = null - block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY - light_range = 3 - attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS - var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE - var/obj/item/disk/nuclear/nuke_disk //OUR STORED NUKE DISK - -/obj/item/claymore/highlander/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER) - START_PROCESSING(SSobj, src) - -/obj/item/claymore/highlander/Destroy() - if(nuke_disk) - nuke_disk.forceMove(get_turf(src)) - nuke_disk.visible_message("The nuke disk is vulnerable!") - nuke_disk = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/claymore/highlander/process() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) - H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS - else - if(!(flags_1 & ADMIN_SPAWNED_1)) - qdel(src) - - -/obj/item/claymore/highlander/pickup(mob/living/user) - . = ..() - to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") - user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") - user.ignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/dropped(mob/living/user) - . = ..() - user.unignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/examine(mob/user) - . = ..() - . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." - if(nuke_disk) - . += "It's holding the nuke disk!" - -/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user) - . = ..() - if(!QDELETED(target) && iscarbon(target) && target.stat == DEAD && target.mind && target.mind.special_role == "highlander") - user.fully_heal(admin_revive = FALSE) //STEAL THE LIFE OF OUR FALLEN FOES - add_notch(user) - target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!") - target.dust() - -/obj/item/claymore/highlander/attack_self(mob/living/user) - var/closest_victim - var/closest_distance = 255 - for(var/mob/living/carbon/human/H in GLOB.player_list - user) - if(H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) - closest_victim = H - if(!closest_victim) - to_chat(user, "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.") - return - to_chat(user, "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].") - -/obj/item/claymore/highlander/IsReflect() - return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? - -/obj/item/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE - notches++ - force++ - var/new_name = name - switch(notches) - if(1) - to_chat(user, "Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.") - to_chat(user, "You feel your fallen foe's soul entering your blade, restoring your wounds!") - new_name = "notched claymore" - if(2) - to_chat(user, "Another falls before you. Another soul fuses with your own. Another notch in the blade.") - new_name = "double-notched claymore" - add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY) - if(3) - to_chat(user, "You're beginning to relish the thrill of battle.") - new_name = "triple-notched claymore" - add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY) - if(4) - to_chat(user, "You've lost count of how many you've killed.") - new_name = "many-notched claymore" - add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY) - if(5) - to_chat(user, "Five voices now echo in your mind, cheering the slaughter.") - new_name = "battle-tested claymore" - add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY) - if(6) - to_chat(user, "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.") - new_name = "battle-scarred claymore" - add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY) - if(7) - to_chat(user, "Kill. Butcher. Conquer.") - new_name = "vicious claymore" - add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY) - if(8) - to_chat(user, "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE.") - new_name = "bloodthirsty claymore" - add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) - if(9) - to_chat(user, "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.") - new_name = "gore-stained claymore" - add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY) - if(10) - user.visible_message("[user]'s eyes light up with a vengeful fire!", \ - "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") - user.update_icons() - new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" - icon_state = "claymore_gold" - item_state = "cultblade" - remove_atom_colour(ADMIN_COLOUR_PRIORITY) - - name = new_name - playsound(user, 'sound/items/screwdriver2.ogg', 50, TRUE) - -/obj/item/katana - name = "katana" - desc = "Woefully underpowered in D20." - icon_state = "katana" - item_state = "katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 10 - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - supports_variations = VOX_VARIATION - -/obj/item/katana/cursed - name = "ominous katana" - desc = "A japanese single-edged blade, once used to contain an ancient evil. The being within is grateful for being released, but beware: generosity has a price." - icon_state = "ominous_katana" - item_state = "ominous_katana" - icon = 'icons/obj/lavaland/artefacts.dmi' - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 35 - armour_penetration = 30 - max_integrity = 500 - resistance_flags = FIRE_PROOF | ACID_PROOF - var/essence = 0//Used for blade abilities, mainly heals(If I can safely implement this I will nerf the damage slightly, and boost the selfdam) - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - - -/obj/item/katana/cursed/examine(mob/user) - . = ..() - . += "To cut into the flesh of your target with this weapon is to feed the gluttonous emptiness within. Burn the blood of your enemies to replenish your own spent essence." - -/obj/item/katana/cursed/attack(mob/living/target, mob/living/user) - . = ..() - if(isliving(target) && target.stat != DEAD) - essence += rand(15, 20) - -/obj/item/katana/cursed/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - -/obj/item/katana/cursed/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/katana/cursed/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul()) - to_chat(user, "You feel a terrible chill as the emptiness within [src] devours on your life force!") - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - ..() - -/obj/item/wirerod - name = "wired rod" - desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." - icon_state = "wiredrod" - item_state = "rods" - flags_1 = CONDUCT_1 - force = 9 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=75) - attack_verb = list("hit", "bludgeoned", "whacked", "bonked") - -/obj/item/wirerod/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/shard)) - var/obj/item/spear/S = new /obj/item/spear - - remove_item_from_storage(user) - if (!user.transferItemToLoc(I, S)) - return - S.CheckParts(list(I)) - qdel(src) - - user.put_in_hands(S) - to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") - - else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP))) - var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod - - remove_item_from_storage(user) - - to_chat(user, "You fasten [I] to the top of the rod with the cable.") - - qdel(I) - qdel(src) - - user.put_in_hands(P) - else - return ..() - - -/obj/item/throwing_star - name = "throwing star" - desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts." - icon_state = "throwingstar" - item_state = "eshield0" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - force = 2 - throwforce = 20 //20 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 28 damage on hit due to guaranteed embedding - throw_speed = 4 - embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15) - armour_penetration = 40 - - w_class = WEIGHT_CLASS_SMALL - sharpness = IS_SHARP - custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) - resistance_flags = FIRE_PROOF - -/obj/item/throwing_star/stamina - name = "shock throwing star" - desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm." - throwforce = 5 - embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3) - -/obj/item/throwing_star/toy - name = "toy throwing star" - desc = "An aerodynamic disc strapped with adhesive for sticking to people, good for playing pranks and getting yourself killed by security." - sharpness = IS_BLUNT - force = 0 - throwforce = 0 - embedding = list("pain_mult" = 0, "jostle_pain_mult" = 0, "embed_chance" = 100, "fall_chance" = 0) - -/obj/item/throwing_star/magspear - name = "magnetic spear" - desc = "A reusable spear that is typically loaded into kinetic spearguns." - icon = 'icons/obj/ammunition/ammo_bullets.dmi' - icon_state = "magspear" - throwforce = 25 //kills regular carps in one hit - force = 10 - throw_range = 0 //throwing these invalidates the speargun - attack_verb = list("stabbed", "ripped", "gored", "impaled") - embedding = list("pain_mult" = 8, "embed_chance" = 100, "fall_chance" = 0, "impact_pain_mult" = 15) //55 damage+embed on hit - -/obj/item/phone - name = "red phone" - desc = "Should anything ever go wrong..." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "red_phone" - force = 3 - throwforce = 2 - throw_speed = 3 - throw_range = 4 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("called", "rang") - hitsound = 'sound/weapons/ring.ogg' - - -/obj/item/cane - name = "cane" - desc = "A cane used by a true gentleman. Or a clown." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - -/obj/item/staff - name = "wizard staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - armour_penetration = 100 - attack_verb = list("bludgeoned", "whacked", "disciplined") - resistance_flags = FLAMMABLE - -/obj/item/staff/broom - name = "broom" - desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' - icon_state = "broom" - resistance_flags = FLAMMABLE - -/obj/item/staff/stick - name = "stick" - desc = "A great tool to drag someone else's drinks across the bar." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ectoplasm - name = "ectoplasm" - desc = "Spooky." - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm" - - -/obj/item/ectoplasm/angelic - icon = 'icons/obj/wizard.dmi' - icon_state = "angelplasm" - -/obj/item/mounted_chainsaw - name = "mounted chainsaw" - desc = "A chainsaw that has replaced your arm." - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - force = 24 - throwforce = 0 - throw_range = 0 - throw_speed = 0 - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 1 - -/obj/item/mounted_chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/mounted_chainsaw/Destroy() - var/obj/item/bodypart/part - new /obj/item/chainsaw(get_turf(src)) - if(iscarbon(loc)) - var/mob/living/carbon/holder = loc - var/index = holder.get_held_index_of_item(src) - if(index) - part = holder.hand_bodyparts[index] - . = ..() - if(part) - part.drop_limb() - -/obj/item/statuebust - name = "bust" - desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it - icon = 'icons/obj/statue.dmi' - icon_state = "bust" - force = 15 - throwforce = 10 - throw_speed = 5 - throw_range = 2 - attack_verb = list("busted") - var/impressiveness = 45 - -/obj/item/statuebust/Initialize() - . = ..() - AddComponent(/datum/component/art, impressiveness) - AddElement(/datum/element/beauty, 1000) - -/obj/item/statuebust/hippocratic - name = "hippocrates bust" - desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." - icon_state = "hippocratic" - impressiveness = 50 - -/obj/item/melee/skateboard - name = "improvised skateboard" - desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." - icon_state = "skateboard" - item_state = "skateboard" - force = 12 - throwforce = 4 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("smacked", "whacked", "slammed", "smashed") - ///The vehicle counterpart for the board - var/board_item_type = /obj/vehicle/ridden/scooter/skateboard - -/obj/item/melee/skateboard/attack_self(mob/user) - var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasnt my fault - S.buckle_mob(user) - qdel(src) - -/obj/item/melee/skateboard/pro - name = "skateboard" - desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made." - icon_state = "skateboard2" - item_state = "skateboard2" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro - custom_premium_price = 500 - -/obj/item/melee/skateboard/hoverboard - name = "hoverboard" - desc = "A blast from the past, so retro!" - icon_state = "hoverboard_red" - item_state = "hoverboard_red" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard - custom_premium_price = 2015 - -/obj/item/melee/skateboard/hoverboard/admin - name = "\improper Board Of Directors" - desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." - icon_state = "hoverboard_nt" - item_state = "hoverboard_nt" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin - -/obj/item/melee/baseball_bat - name = "baseball bat" - desc = "There ain't a skull in the league that can withstand a swatter." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 12 - throwforce = 12 - attack_verb = list("beat", "smacked") - custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5) - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - -/obj/item/melee/baseball_bat/homerun - name = "home run bat" - desc = "This thing looks dangerous... Dangerously good at baseball, that is." - homerun_able = 1 - -/obj/item/melee/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, "You're already ready to do a home run!") - ..() - return - to_chat(user, "You begin gathering strength...") - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE) - if(do_after(user, 90, target = src)) - to_chat(user, "You gather power! Time for a home run!") - homerun_ready = 1 - ..() - -/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(homerun_ready) - user.visible_message("It's a home run!") - target.throw_at(throw_target, rand(8,10), 14, user) - SSexplosions.medturf += throw_target - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) - homerun_ready = 0 - return - else if(!target.anchored) - target.throw_at(throw_target, rand(1,2), 2, user, gentle = TRUE) - -/obj/item/melee/baseball_bat/ablative - name = "metal baseball bat" - desc = "This bat is made of highly reflective, highly armored material." - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - force = 12 - throwforce = 15 - -/obj/item/melee/baseball_bat/bone - name = "bone club" - desc = "A long and hard shaft of rock solid bone." // I am the master of comedy - icon_state = "baseball_bat_bone" - item_state = "baseball_bat_bone" - -/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers - var/picksound = rand(1,2) - var/turf = get_turf(src) - if(picksound == 1) - playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, TRUE) - if(picksound == 2) - playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, TRUE) - return 1 - -/obj/item/melee/flyswatter - name = "flyswatter" - desc = "Useful for killing insects of all sizes." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "flyswatter" - item_state = "flyswatter" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 1 - throwforce = 1 - attack_verb = list("swatted", "smacked") - hitsound = 'sound/effects/snap.ogg' - w_class = WEIGHT_CLASS_SMALL - //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. - var/list/strong_against - -/obj/item/melee/flyswatter/Initialize() - . = ..() - strong_against = typecacheof(list( - /mob/living/simple_animal/hostile/poison/bees/, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/hostile/cockroach, - /obj/item/queen_bee - )) - - -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(is_type_in_typecache(target, strong_against)) - new /obj/effect/decal/cleanable/insectguts(target.drop_location()) - to_chat(user, "You easily splat the [target].") - if(istype(target, /mob/living/)) - var/mob/living/bug = target - bug.death(1) - else - qdel(target) - -/obj/item/proc/can_trigger_gun(mob/living/user) - if(!user.can_use_guns(src)) - return FALSE - return TRUE - -/obj/item/extendohand - name = "extendo-hand" - desc = "Futuristic tech has allowed these classic spring-boxing toys to essentially act as a fully functional hand-operated hand prosthetic." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "extendohand" - item_state = "extendohand" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 0 - throwforce = 5 - reach = 2 - var/min_reach = 2 - -/obj/item/extendohand/acme - name = "\improper ACME Extendo-Hand" - desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." - -/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user) - var/dist = get_dist(M, user) - if(dist < min_reach) - to_chat(user, "[M] is too close to use [src] on.") - return - M.attack_hand(user) - -/obj/item/gohei - name = "gohei" - desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things. Now used by the station's valued weeaboos." - force = 5 - throwforce = 5 - hitsound = "swing_hit" - attack_verb = list("whacked", "thwacked", "walloped", "socked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "gohei" - item_state = "gohei" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - -//HF blade -/obj/item/vibro_weapon - icon_state = "hfrequency0" - base_icon_state = "hfrequency" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "vibro sword" - desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." - armour_penetration = 100 - block_chance = 30 - force = 20 - throwforce = 20 - throw_speed = 4 - sharpness = IS_SHARP - attack_verb = list("cut", "sliced", "diced") - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/weapons/bladeslice.ogg' - var/wielded = FALSE // track wielded status on item - -/obj/item/vibro_weapon/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/vibro_weapon/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 20, 105) - AddComponent(/datum/component/two_handed, force_multiplier=2, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/vibro_weapon/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/vibro_weapon/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/vibro_weapon/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(wielded || attack_type != PROJECTILE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) - return 1 - else - owner.visible_message("[owner] parries [attack_text] with [src]!") - return 1 - return 0 - -/obj/item/claymore/bone - name = "Bone Sword" - desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." - icon_state = "bone_sword" - item_state = "bone_sword" - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 15 - throwforce = 10 - armour_penetration = 15 - - -/obj/item/vibro_weapon/weak - armour_penetration = 10 - block_chance = 10 - force = 15 - throwforce = 20 - From d5d3b3dcdd799d7a71d9014fd4af52aadd454d8a Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 8 Oct 2024 14:56:08 -0700 Subject: [PATCH 24/31] more --- .../projectiles/ammunition/_ammo_casing.dm | 2 - .../projectiles/ammunition/ballistic/lmg.dm | 1 - .../ammunition/ballistic/pistol.dm | 6 - .../ammunition/ballistic/revolver.dm | 3 - .../projectiles/ammunition/ballistic/rifle.dm | 9 -- .../ammunition/ballistic/shotgun.dm | 3 +- .../projectiles/ammunition/ballistic/smg.dm | 4 - .../ammunition/ballistic/sniper.dm | 1 - .../projectiles/ammunition/caseless/foam.dm | 1 - .../prefab_stacks/premade_shotshell_stacks.dm | 2 +- .../prefab_stacks/premade_smg_stacks.dm | 1 + .../boxes_magazines/generic_ammo_box.dm | 104 +++++++++--------- .../research/designs/autolathe_designs.dm | 14 +-- 13 files changed, 62 insertions(+), 89 deletions(-) diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 19e1965939b9..57b6e9b27b57 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -43,8 +43,6 @@ ///If true, overrides the bouncing sfx from the turf to this one var/list/bounce_sfx_override - var/bullet_per_box - ///What this casing can be stacked into. var/obj/item/ammo_box/magazine/stack_type = /obj/item/ammo_box/magazine/ammo_stack ///Maximum stack size of ammunition diff --git a/code/modules/projectiles/ammunition/ballistic/lmg.dm b/code/modules/projectiles/ammunition/ballistic/lmg.dm index d46001951ba4..90030e7b0944 100644 --- a/code/modules/projectiles/ammunition/ballistic/lmg.dm +++ b/code/modules/projectiles/ammunition/ballistic/lmg.dm @@ -6,7 +6,6 @@ icon_state = "rifle-steel" caliber = "7.12x82mm" projectile_type = /obj/projectile/bullet/mm712x82 - bullet_per_box = 100 /obj/item/ammo_casing/mm712x82/ap name = "7.12x82mm armor-piercing bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 80248255dcaf..08ea32d2bc16 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -6,7 +6,6 @@ icon_state = "pistol-steel" caliber = "10mm" projectile_type = /obj/projectile/bullet/c10mm - bullet_per_box = 50 /obj/item/ammo_casing/c10mm/surplus name = "10mm surplus bullet casing" @@ -46,7 +45,6 @@ icon_state = "pistol-brass" caliber = "9mm" projectile_type = /obj/projectile/bullet/c9mm - bullet_per_box = 50 /obj/item/ammo_casing/c9mm/surplus name = "9mm surplus bullet casing" @@ -86,7 +84,6 @@ icon_state = "pistol-steel" caliber = ".45" projectile_type = /obj/projectile/bullet/c45 - bullet_per_box = 50 stack_size = 12 /obj/item/ammo_casing/c45/surplus @@ -126,7 +123,6 @@ desc = "A .50 AE bullet casing." caliber = ".50 AE" projectile_type = /obj/projectile/bullet/a50AE - bullet_per_box = 20 /obj/item/ammo_casing/a50AE/hp name = ".50 AE hollow point bullet casing" @@ -139,5 +135,3 @@ desc = "A .22 LR bullet casing." projectile_type = /obj/projectile/bullet/c22lr caliber = "22lr" - bullet_per_box = 75 - diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index 43f750844ea4..32a9ef2f123d 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -6,7 +6,6 @@ caliber = ".357" icon_state = "magnum-brass" projectile_type = /obj/projectile/bullet/a357 - bullet_per_box = 50 /obj/item/ammo_casing/a357/match name = ".357 match bullet casing" @@ -29,7 +28,6 @@ caliber = ".45-70" icon_state = "magnum-brass" projectile_type = /obj/projectile/bullet/a4570 - bullet_per_box = 12 /obj/item/ammo_casing/a4570/match name = ".45-70 match bullet casing" @@ -55,7 +53,6 @@ desc = "A .38 Special bullet casing." caliber = ".38" projectile_type = /obj/projectile/bullet/c38 - bullet_per_box = 50 /obj/item/ammo_casing/c38/surplus name = ".38 surplus bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 4c07398630f2..a3ef6798a52c 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -6,7 +6,6 @@ icon_state = "rifle-brass" caliber = "8x50mmR" projectile_type = /obj/projectile/bullet/a8_50r - bullet_per_box = 20 /obj/item/ammo_casing/a8_50rhp name = "8x50mmR hollow point bullet casing" @@ -23,7 +22,6 @@ icon_state = "caseless" caliber = "a858" projectile_type = /obj/projectile/bullet/a858 - bullet_per_box = 20 // .300 Magnum (Smile Rifle) @@ -33,7 +31,6 @@ icon_state = "rifle-steel" caliber = "a300" projectile_type = /obj/projectile/bullet/a300 - bullet_per_box = 20 // 5.56x42mm CLIP (CM82, Hydra variants) @@ -43,8 +40,6 @@ icon_state = "rifle-brass" caliber = "5.56x42mm" projectile_type = /obj/projectile/bullet/a556_42 - bullet_per_box = 80 - // 5.45x39mm (SKM-24v) /obj/item/ammo_casing/a545_39 @@ -54,7 +49,6 @@ caliber = "5.45x39mm" randomspread = TRUE projectile_type = /obj/projectile/bullet/a545_39 - bullet_per_box = 80 /obj/item/ammo_casing/a545_39/recycled name = "recycled 5.45x39mm bullet casing" @@ -71,7 +65,6 @@ icon_state = "rifle-brass" caliber = "7.62x40mm" projectile_type = /obj/projectile/bullet/a762_40 - bullet_per_box = 80 //.308 (M514 EBR & CM-GAL-S) @@ -81,7 +74,6 @@ icon_state = "rifle-brass" caliber = ".308" projectile_type = /obj/projectile/bullet/a308 - bullet_per_box = 20 /obj/item/ammo_casing/caseless/c299 name = ".299 Eoehoma caseless bullet casing" @@ -89,7 +81,6 @@ icon_state = "caseless" caliber = ".299 caseless" projectile_type = /obj/projectile/bullet/c299 - bullet_per_box = 100 /obj/item/ammo_casing/a65clip name = "6.5x57mm CLIP bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 35a3c4ddb4d6..2bf041a0e661 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -7,8 +7,7 @@ caliber = "12ga" custom_materials = list(/datum/material/iron=4000) projectile_type = /obj/projectile/bullet/slug - stack_size = 8 //Not too big of a handful, not too small - bullet_per_box = 25 + stack_size = 8 //Make sure this matches max_ammo variable on prefilled stacks (magazine/ammo_stack/prefilled) bounce_sfx_override = 'sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg' diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm index 39086b8cc66f..f7591d4be582 100644 --- a/code/modules/projectiles/ammunition/ballistic/smg.dm +++ b/code/modules/projectiles/ammunition/ballistic/smg.dm @@ -6,7 +6,6 @@ icon_state = "rifle-steel" caliber = "5.7x39mm" projectile_type = /obj/projectile/bullet/c57x39mm - bullet_per_box = 50 // 4.6x30mm (WT-550 Automatic Rifle & SKM-24v) @@ -16,7 +15,6 @@ icon_state = "rifle-brass" caliber = "4.6x30mm" projectile_type = /obj/projectile/bullet/c46x30mm - bullet_per_box = 50 /obj/item/ammo_casing/c46x30mm/ap name = "4.6x30mm armor-piercing bullet casing" @@ -29,7 +27,6 @@ desc = "A 4.6x30mm incendiary bullet casing." bullet_skin = "incen" projectile_type = /obj/projectile/bullet/incendiary/c46x30mm - bullet_per_box = 50 // 4.73x33mm caseless (Solar) @@ -39,7 +36,6 @@ icon_state = "caseless" caliber = "4.73x33mm caseless" projectile_type = /obj/projectile/bullet/c47x33mm - bullet_per_box = 50 // 5.56mm HITP caseless (Pistole C) diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm index e4b668c2228f..af7369204e6d 100644 --- a/code/modules/projectiles/ammunition/ballistic/sniper.dm +++ b/code/modules/projectiles/ammunition/ballistic/sniper.dm @@ -6,7 +6,6 @@ icon_state = "big-steel" caliber = ".50 BMG" projectile_type = /obj/projectile/bullet/p50 - bullet_per_box = 20 /obj/item/ammo_casing/p50/soporific name = ".50 BMG soporific bullet casing" diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm index 0051680fd1e8..3c71d31eb5ed 100644 --- a/code/modules/projectiles/ammunition/caseless/foam.dm +++ b/code/modules/projectiles/ammunition/caseless/foam.dm @@ -9,7 +9,6 @@ custom_materials = list(/datum/material/iron = 11.25) harmful = FALSE var/modified = FALSE - bullet_per_box = 40 /obj/item/ammo_casing/caseless/foam_dart/update_icon_state() . = ..() diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm index 616e64f5a4e0..f67800330724 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm @@ -1,6 +1,6 @@ // Shotshells /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun - max_ammo = 8 //make sure these values are consistent across the board with stack_size variable. + max_ammo = 8 //make sure these values are consistent across the board with stack_size variable on respective ammo_casing /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/buckshot ammo_type = /obj/item/ammo_casing/shotgun/buckshot diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index 4e7d5f65d292..e095f350b462 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -1,6 +1,7 @@ // 4.6x30mm (WT-550 Automatic Rifle & SKM-24v) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c46x30mm ammo_type = /obj/item/ammo_casing/c46x30mm + max_ammo = 15 /obj/item/storage/box/ammo/c46x30mm name = "box of 4.6x30mm ammo" diff --git a/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm b/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm index 2c88824623e2..ca5bcb7a877f 100644 --- a/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm +++ b/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm @@ -1,53 +1,53 @@ -/obj/item/ammo_box/generic - name = "generic ammo box" - desc = "A generic, unbranded box of ammo. It doesn't have great capacity, but it can hold a variety of different calibers." - max_ammo = 20 - start_empty = TRUE - icon_state = "generic-ammo" - /// Does the box currently have an ammo type set? - var/ammo_set = FALSE - /// Name of the currently set ammo type - var/ammo_name - -/obj/item/ammo_box/generic/update_ammo_count() - . = ..() - if(LAZYLEN(stored_ammo) == 0) - ammo_set = FALSE - ammo_type = /obj/item/ammo_casing - -/obj/item/ammo_box/generic/proc/update_max_ammo(obj/item/ammo_casing/ammo) - if(ammo.bullet_per_box) - max_ammo = round(ammo.bullet_per_box) - else - max_ammo = 10 - - return - -/obj/item/ammo_box/generic/attackby(obj/item/attacking_obj, mob/user, params, silent, replace_spent) - . = ..() - - if(!ammo_set && istype(attacking_obj, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/ammo_load = attacking_obj.type - ammo_type = ammo_load - ammo_set = TRUE - ammo_name = attacking_obj.name - update_max_ammo(attacking_obj) - to_chat(user, span_notice("You set the box to hold [attacking_obj]!")) - - if(istype(attacking_obj, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, span_notice("You scribble illegibly on the cover of [src]!")) - return - var/inputvalue = stripped_input(user, "What would you like to label the box?", "Box Labelling", "", MAX_NAME_LEN) - - if(!inputvalue) - return - - if(user.canUseTopic(src, BE_CLOSE)) - name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]" - -/obj/item/ammo_box/generic/examine(mob/user) - . = ..() - . += span_notice("[ammo_set ? "It's set to hold [ammo_name]\s. The box can hold up to [max_ammo] rounds." : "It doesn't have an ammo type set. Use a bullet on the box to set it."]") - . += span_notice("You can use a pen on it to rename the box.") +// /obj/item/ammo_box/generic +// name = "generic ammo box" +// desc = "A generic, unbranded box of ammo. It doesn't have great capacity, but it can hold a variety of different calibers." +// max_ammo = 20 +// start_empty = TRUE +// icon_state = "generic-ammo" +// /// Does the box currently have an ammo type set? +// var/ammo_set = FALSE +// /// Name of the currently set ammo type +// var/ammo_name + +// /obj/item/ammo_box/generic/update_ammo_count() +// . = ..() +// if(LAZYLEN(stored_ammo) == 0) +// ammo_set = FALSE +// ammo_type = /obj/item/ammo_casing + +// /obj/item/ammo_box/generic/proc/update_max_ammo(obj/item/ammo_casing/ammo) +// if(ammo.bullet_per_box) +// max_ammo = round(ammo.bullet_per_box) +// else +// max_ammo = 10 + +// return + +// /obj/item/ammo_box/generic/attackby(obj/item/attacking_obj, mob/user, params, silent, replace_spent) +// . = ..() + +// if(!ammo_set && istype(attacking_obj, /obj/item/ammo_casing)) +// var/obj/item/ammo_casing/ammo_load = attacking_obj.type +// ammo_type = ammo_load +// ammo_set = TRUE +// ammo_name = attacking_obj.name +// update_max_ammo(attacking_obj) +// to_chat(user, span_notice("You set the box to hold [attacking_obj]!")) + +// if(istype(attacking_obj, /obj/item/pen)) +// if(!user.is_literate()) +// to_chat(user, span_notice("You scribble illegibly on the cover of [src]!")) +// return +// var/inputvalue = stripped_input(user, "What would you like to label the box?", "Box Labelling", "", MAX_NAME_LEN) + +// if(!inputvalue) +// return + +// if(user.canUseTopic(src, BE_CLOSE)) +// name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]" + +// /obj/item/ammo_box/generic/examine(mob/user) +// . = ..() +// . += span_notice("[ammo_set ? "It's set to hold [ammo_name]\s. The box can hold up to [max_ammo] rounds." : "It doesn't have an ammo type set. Use a bullet on the box to set it."]") +// . += span_notice("You can use a pen on it to rename the box.") diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 658978fa9ed4..bf58499d4951 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -852,13 +852,13 @@ build_path = /obj/item/storage/box/ammo/c556mm_surplus category = list("initial", "Security", "Ammo") -/datum/design/generic_ammo_box - name = "Generic Ammo Box" - id = "ammo-generic" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 1500) - build_path = /obj/item/ammo_box/generic - category = list("initial", "Security", "Ammo") +// /datum/design/generic_ammo_box +// name = "Generic Ammo Box" +// id = "ammo-generic" +// build_type = AUTOLATHE | PROTOLATHE +// materials = list(/datum/material/iron = 1500) +// build_path = /obj/item/ammo_box/generic +// category = list("initial", "Security", "Ammo") /datum/design/ammo_can name = "Ammo Can" From 263f43ebbd431b340ad14a64fed763b03ec4269f Mon Sep 17 00:00:00 2001 From: thgvr Date: Wed, 9 Oct 2024 18:02:56 -0700 Subject: [PATCH 25/31] more changes --- .../structures/crates_lockers/closets/secure/security.dm | 4 ++-- code/modules/projectiles/ammunition/ballistic/pistol.dm | 1 + code/modules/projectiles/ammunition/ballistic/smg.dm | 1 + .../ammo_stacks/prefab_stacks/premade_pistol_stacks.dm | 3 ++- 4 files changed, 6 insertions(+), 3 deletions(-) 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 23aa2df0ab5a..77497b671617 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -328,10 +328,10 @@ ..() for(var/i in 1 to 3) new /obj/item/storage/box/lethalshot(src) - new /obj/item/ammo_box/magazine/co9mm(src) //WS edit - begin - better safe than sorry new /obj/item/ammo_box/magazine/co9mm(src) new /obj/item/ammo_box/magazine/co9mm(src) - new /obj/item/ammo_box/magazine/co9mm(src) //WS edit - end + new /obj/item/ammo_box/magazine/co9mm(src) + new /obj/item/ammo_box/magazine/co9mm(src) /obj/structure/closet/secure_closet/labor_camp_security name = "labor camp security locker" diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 08ea32d2bc16..172ebfda0674 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -45,6 +45,7 @@ icon_state = "pistol-brass" caliber = "9mm" projectile_type = /obj/projectile/bullet/c9mm + stack_size = 15 /obj/item/ammo_casing/c9mm/surplus name = "9mm surplus bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm index f7591d4be582..5e0602da6db2 100644 --- a/code/modules/projectiles/ammunition/ballistic/smg.dm +++ b/code/modules/projectiles/ammunition/ballistic/smg.dm @@ -15,6 +15,7 @@ icon_state = "rifle-brass" caliber = "4.6x30mm" projectile_type = /obj/projectile/bullet/c46x30mm + stack_size = 15 /obj/item/ammo_casing/c46x30mm/ap name = "4.6x30mm armor-piercing bullet casing" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index 6d44fba40abc..8413d6cbbbc3 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -88,6 +88,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm ammo_type = /obj/item/ammo_casing/c9mm + max_ammo = 15 /obj/item/storage/box/ammo/c9mm name = "box of 9mm ammo" @@ -288,7 +289,7 @@ /obj/item/storage/box/ammo/a357 name = "box of .357 ammo" desc = "A box of standard .357 ammo." - icon_state = "22lrbox" + icon_state = "357box" /obj/item/storage/box/ammo/a357/PopulateContents() ..() From 2c5eb5b44b33ef556e2c9995f7a29431f0b5c9d6 Mon Sep 17 00:00:00 2001 From: thgvr Date: Wed, 9 Oct 2024 18:26:19 -0700 Subject: [PATCH 26/31] More --- code/modules/cargo/packs/ammo.dm | 74 ++++++++++--------- .../ammunition/ballistic/revolver.dm | 1 + .../projectiles/ammunition/ballistic/rifle.dm | 12 +++ .../prefab_stacks/_premade_stacks.dm | 2 +- .../prefab_stacks/premade_pistol_stacks.dm | 1 + .../prefab_stacks/premade_rifle_stacks.dm | 10 ++- .../prefab_stacks/premade_smg_stacks.dm | 1 + 7 files changed, 62 insertions(+), 39 deletions(-) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index ca3ad23727a6..42668225bb26 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -40,7 +40,7 @@ /datum/supply_pack/ammo/a357_mag name = ".357 Speedloader Crate" desc = "Contains a .357 speedloader for revolvers, containing seven rounds." - contains = list(/obj/item/storage/box/ammo/a357) + contains = list(/obj/item/ammo_box/a357) cost = 750 /datum/supply_pack/ammo/mag_556mm @@ -196,43 +196,45 @@ /datum/supply_pack/ammo/a762_ammo_box name = "7.62x40mm CLIP Ammo Box Crate" - desc = "Contains a one hundred and twenty-round 7.62x40mm CLIP box for the SKM rifles." - contains = list(/obj/item/storage/box/ammo/a762_40) + desc = "Contains two 60-round 7.62x40mm CLIP boxes for the SKM rifles." + contains = list(/obj/item/storage/box/ammo/a762_40, + /obj/item/storage/box/ammo/a762_40) cost = 500 /datum/supply_pack/ammo/a556_ammo_box name = "5.56x42mm CLIP Ammo Box Crate" - desc = "Contains a one hundred and twenty-round 5.56x42mm CLIP box for most newer rifles." - contains = list(/obj/item/storage/box/ammo/a556_42) + desc = "Contains two 60-round 5.56x42mm CLIP boxes for most newer rifles." + contains = list(/obj/item/storage/box/ammo/a556_42, + /obj/item/storage/box/ammo/a556_42) cost = 450 /datum/supply_pack/ammo/a357_ammo_box name = ".357 Ammo Box Crate" - desc = "Contains a fifty-round .357 box for revolvers such as the Scarborough Revolver and the HP Firebrand." + desc = "Contains a 48-round .357 box for revolvers such as the Scarborough Revolver and the HP Firebrand." contains = list(/obj/item/storage/box/ammo/a357) cost = 250 /datum/supply_pack/ammo/c556mmHITP_ammo_box name = "5.56 Caseless Ammo Box Crate" - desc = "Contains a fifty-round 5.56mm caseless box for SolGov sidearms like the Pistole C." + desc = "Contains a 48-round 5.56mm caseless box for SolGov sidearms like the Pistole C." contains = list(/obj/item/storage/box/ammo/c556mm) cost = 250 /datum/supply_pack/ammo/c45_ammo_box name = ".45 Ammo Box Crate" - desc = "Contains a fifty-round .45 box for pistols and SMGs like the Candor or the C-20r." + desc = "Contains a 48-round .45 box for pistols and SMGs like the Candor or the C-20r." contains = list(/obj/item/storage/box/ammo/c45) cost = 250 /datum/supply_pack/ammo/c10mm_ammo_box name = "10mm Ammo Box Crate" - desc = "Contains a fifty-round 10mm box for pistols and SMGs like the Ringneck or the SkM-44(k)." + desc = "Contains a 48-round 10mm box for pistols and SMGs like the Ringneck or the SkM-44(k)." contains = list(/obj/item/storage/box/ammo/c10mm) cost = 250 /datum/supply_pack/ammo/c9mm_ammo_box name = "9mm Ammo Box Crate" - desc = "Contains a fifty-round 9mm box for pistols and SMGs such as the Commander or Saber." + desc = "Contains a 48-round 9mm box for pistols and SMGs such as the Commander or Saber." contains = list(/obj/item/storage/box/ammo/c9mm) cost = 200 @@ -244,85 +246,85 @@ /datum/supply_pack/ammo/c9mmap_ammo_box name = "9mm AP Ammo Box Crate" - desc = "Contains a fifty-round 9mm box loaded with armor piercing ammo." + desc = "Contains a 48-round 9mm box loaded with armor piercing ammo." contains = list(/obj/item/storage/box/ammo/c9mm/ap) cost = 400 /datum/supply_pack/ammo/a357match_ammo_box name = ".357 Match Ammo Box Crate" - desc = "Contains a fifty-round .357 match box for better performance against armor." + desc = "Contains a 48-round .357 match box for better performance against armor." contains = list(/obj/item/storage/box/ammo/a357_match) cost = 500 /datum/supply_pack/ammo/c556mmHITPap_ammo_box name = "5.56 caseless AP Ammo Box Crate" - desc = "Contains a fifty-round 5.56mm caseless boxloaded with armor piercing ammo." + desc = "Contains a 48-round 5.56mm caseless boxloaded with armor piercing ammo." contains = list(/obj/item/storage/box/ammo/c556mm_ap) cost = 500 /datum/supply_pack/ammo/c45ap_ammo_box name = ".45 AP Ammo Box Crate" - desc = "Contains a fifty-round .45 box loaded with armor piercing ammo." + desc = "Contains a 48-round .45 box loaded with armor piercing ammo." contains = list(/obj/item/storage/box/ammo/c45_ap) cost = 500 /datum/supply_pack/ammo/c10mmap_ammo_box name = "10mm AP Ammo Box Crate" - desc = "Contains a fifty-round 10mm box loaded with armor piercing ammo." + desc = "Contains a 48-round 10mm box loaded with armor piercing ammo." contains = list(/obj/item/storage/box/ammo/c10mm_ap) cost = 500 /datum/supply_pack/ammo/c9mmhp_ammo_box name = "9mm HP Ammo Box Crate" - desc = "Contains a fifty-round 9mm box loaded with hollow point ammo, great against unarmored targets." + desc = "Contains a 48-round 9mm box loaded with hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/c9mm_hp) cost = 400 /datum/supply_pack/ammo/a357hp_ammo_box name = ".357 HP Ammo Box Crate" - desc = "Contains a fifty-round .357 box loaded with hollow point ammo, great against unarmored targets." + desc = "Contains a 48-round .357 box loaded with hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/a357_hp) cost = 500 /datum/supply_pack/ammo/c10mmhp_ammo_box name = "10mm HP Ammo Box Crate" - desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets." + desc = "Contains a 48-round 10mm box loaded with hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/c10mm_hp) cost = 500 /datum/supply_pack/ammo/c45hp_ammo_box name = ".45 HP Ammo Box Crate" - desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets." + desc = "Contains a 48-round 10mm box loaded with hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/c45_hp) cost = 500 /datum/supply_pack/ammo/c556mmhitphp_ammo_box name = "5.56 Caseless HP Ammo Box Crate" - desc = "Contains a fifty-round 5.56mm caseless box loaded with hollow point ammo, great against unarmored targets." + desc = "Contains a 48-round 5.56mm caseless box loaded with hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/c556mm_hp) cost = 500 /datum/supply_pack/ammo/c9mmrubber_ammo_box name = "9mm Rubber Ammo Box Crate" - desc = "Contains a fifty-round 9mm box loaded with less-than-lethal rubber rounds." + desc = "Contains a 48-round 9mm box loaded with less-than-lethal rubber rounds." contains = list(/obj/item/storage/box/ammo/c9mm_rubber) cost = 200 /datum/supply_pack/ammo/c10mmrubber_ammo_box name = "10mm Rubber Ammo Box Crate" - desc = "Contains a fifty-round 10mm box loaded with less-than-lethal rubber rounds." + desc = "Contains a 48-round 10mm box loaded with less-than-lethal rubber rounds." contains = list(/obj/item/storage/box/ammo/c10mm_rubber) cost = 250 /datum/supply_pack/ammo/c45mmrubber_ammo_box name = ".45 Rubber Ammo Box Crate" - desc = "Contains a fifty-round .45 box loaded with less-than-lethal rubber rounds." + desc = "Contains a 48-round .45 box loaded with less-than-lethal rubber rounds." contains = list(/obj/item/storage/box/ammo/c45_rubber) cost = 250 /datum/supply_pack/ammo/c556HITPrubber_ammo_box name = "5.56 Caseless Rubber Ammo Box Crate" - desc = "Contains a fifty-round 5.56 caseless box loaded with less-than-lethal rubber rounds." + desc = "Contains a 48-round 5.56 caseless box loaded with less-than-lethal rubber rounds." contains = list(/obj/item/storage/box/ammo/c556mm_rubber) cost = 250 @@ -340,25 +342,25 @@ /datum/supply_pack/ammo/c57x39mm_boxcrate name = "5.7x39mm Ammo Box Crate" - desc = "Contains a fifty-round 5.7x39mm box for PDWs such as the Sidewinder." + desc = "Contains a 48-round 5.7x39mm box for PDWs such as the Sidewinder." contains = list(/obj/item/storage/box/ammo/c57x39) cost = 250 /datum/supply_pack/ammo/c46x30mm_boxcrate name = "4.6x30mm Ammo Box Crate" - desc = "Contains a fifty-round 4.6x30mm box for PDWs such as the WT-550." + desc = "Contains a 60-round 4.6x30mm box for PDWs such as the WT-550." contains = list(/obj/item/storage/box/ammo/c46x30mm) cost = 250 /datum/supply_pack/ammo/c8x50mm_boxcrate name = "8x50mm Ammo Box Crate" - desc = "Contains a twenty-round 8x50mm ammo box for rifles such as the Illestren." + desc = "Contains a 30-round 8x50mm ammo box for rifles such as the Illestren." contains = list(/obj/item/storage/box/ammo/a8_50r) cost = 250 /datum/supply_pack/ammo/c8x50mm_boxhp_boxcrate name = "8x50mm Hollow Point Crate" - desc = "Contains a twenty-round 8x50mm ammo box loaded with hollow point ammo, great against unarmored targets." + desc = "Contains a 30y-round 8x50mm ammo box loaded with hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/a8_50r_hp) cost = 500 @@ -376,19 +378,19 @@ /datum/supply_pack/ammo/a4570_box name = ".45-70 Ammo Box Crate" - desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition." + desc = "Contains a 20-round box containing devastatingly powerful .45-70 caliber ammunition." contains = list(/obj/item/storage/box/ammo/a4570) cost = 500 /datum/supply_pack/ammo/a4570_box/match name = ".45-70 Match Crate" - desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition, that travels faster, pierces armour better, and ricochets off targets." + desc = "Contains a 20-round box containing devastatingly powerful .45-70 caliber ammunition, that travels faster, pierces armour better, and ricochets off targets." contains = list(/obj/item/storage/box/ammo/a4570_match) cost = 750 /datum/supply_pack/ammo/ferropelletboxcrate name = "Ferromagnetic Pellet Box Crate" - desc = "Contains a fifty-round ferromagnetic pellet ammo box for gauss guns such as the Claris." + desc = "Contains a 48-round ferromagnetic pellet ammo box for gauss guns such as the Claris." contains = list(/obj/item/storage/box/ammo/ferropellet) cost = 250 @@ -400,30 +402,30 @@ /datum/supply_pack/ammo/ferrolanceboxcrate name = "Ferromagnetic Lance Box Crate" - desc = "Contains a fifty-round box for high-powered gauss guns such as the GAR assault rifle." + desc = "Contains a 48-round box for high-powered gauss guns such as the GAR assault rifle." contains = list(/obj/item/storage/box/ammo/ferrolance) cost = 250 /datum/supply_pack/ammo/a44roum name = ".44 Roumain Ammo Box Crate" - desc = "Contains a fifty-round box of .44 roumain ammo for revolvers such as the Shadow and Montagne." + desc = "Contains a 48-round box of .44 roumain ammo for revolvers such as the Shadow and Montagne." contains = list(/obj/item/storage/box/ammo/a44roum) cost = 250 /datum/supply_pack/ammo/a44roum_rubber name = ".44 Roumain Rubber Ammo Box Crate" - desc = "Contains a fifty-round box of .44 roumain ammo loaded with less-than-lethal rubber rounds." + desc = "Contains a 48-round box of .44 roumain ammo loaded with less-than-lethal rubber rounds." contains = list(/obj/item/storage/box/ammo/a44roum_rubber) cost = 250 /datum/supply_pack/ammo/a44roum_hp name = ".44 Roumain Hollow Point Ammo Box Crate" - desc = "Contains a fifty-round box of .44 roumain hollow point ammo, great against unarmored targets." + desc = "Contains a 48-round box of .44 roumain hollow point ammo, great against unarmored targets." contains = list(/obj/item/storage/box/ammo/a44roum_hp) cost = 500 /datum/supply_pack/ammo/c22lr name = ".22 LR Ammo Box Crate" - desc = "Contains a fifty-round ammo box for refilling .22 LR weapons." + desc = "Contains a 48-round ammo box for refilling .22 LR weapons." contains = list(/obj/item/storage/box/ammo/c22lr) cost = 250 diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index 32a9ef2f123d..5b6e8b2e0961 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -28,6 +28,7 @@ caliber = ".45-70" icon_state = "magnum-brass" projectile_type = /obj/projectile/bullet/a4570 + stack_size = 5 /obj/item/ammo_casing/a4570/match name = ".45-70 match bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index a3ef6798a52c..f3e3b7ab4118 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -6,6 +6,7 @@ icon_state = "rifle-brass" caliber = "8x50mmR" projectile_type = /obj/projectile/bullet/a8_50r + stack_size = 10 /obj/item/ammo_casing/a8_50rhp name = "8x50mmR hollow point bullet casing" @@ -13,6 +14,7 @@ icon_state = "rifle-brass-hollow" caliber = "8x50mmR" projectile_type = /obj/projectile/bullet/a8_50rhp + stack_size = 10 // 8x58mm Caseless (SSG-669C) @@ -22,6 +24,7 @@ icon_state = "caseless" caliber = "a858" projectile_type = /obj/projectile/bullet/a858 + stack_size = 10 // .300 Magnum (Smile Rifle) @@ -31,6 +34,7 @@ icon_state = "rifle-steel" caliber = "a300" projectile_type = /obj/projectile/bullet/a300 + stack_size = 5 // 5.56x42mm CLIP (CM82, Hydra variants) @@ -40,6 +44,8 @@ icon_state = "rifle-brass" caliber = "5.56x42mm" projectile_type = /obj/projectile/bullet/a556_42 + stack_size = 5 + // 5.45x39mm (SKM-24v) /obj/item/ammo_casing/a545_39 @@ -49,6 +55,7 @@ caliber = "5.45x39mm" randomspread = TRUE projectile_type = /obj/projectile/bullet/a545_39 + stack_size = 15 /obj/item/ammo_casing/a545_39/recycled name = "recycled 5.45x39mm bullet casing" @@ -56,6 +63,7 @@ bullet_skin = "surplus" caliber = "5.45x39mm" projectile_type = /obj/projectile/bullet/a545_39 + stack_size = 15 // 7.62x40mm CLIP (SKM Rifles) @@ -65,6 +73,7 @@ icon_state = "rifle-brass" caliber = "7.62x40mm" projectile_type = /obj/projectile/bullet/a762_40 + stack_size = 15 //.308 (M514 EBR & CM-GAL-S) @@ -74,6 +83,7 @@ icon_state = "rifle-brass" caliber = ".308" projectile_type = /obj/projectile/bullet/a308 + stack_size = 10 /obj/item/ammo_casing/caseless/c299 name = ".299 Eoehoma caseless bullet casing" @@ -81,6 +91,7 @@ icon_state = "caseless" caliber = ".299 caseless" projectile_type = /obj/projectile/bullet/c299 + stack_size = 10 /obj/item/ammo_casing/a65clip name = "6.5x57mm CLIP bullet casing" @@ -88,3 +99,4 @@ icon_state = "big-brass" caliber = "6.5CLIP" projectile_type = /obj/projectile/bullet/a65clip + stack_size = 5 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm index 912526c1a93c..8a28920efe6a 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/_premade_stacks.dm @@ -14,7 +14,7 @@ /obj/item/storage/box/ammo //base type, don't use this! name = "box of default ammo" - desc = "How peculiar." + desc = "A box of ammunition. Not for consumption." icon = 'icons/obj/ammunition/ammo_boxes.dmi' icon_state = "9mmbox" illustration = null diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index 8413d6cbbbc3..704ef9a7a78f 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -329,6 +329,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a4570 ammo_type = /obj/item/ammo_casing/a4570 + max_ammo = 5 /obj/item/storage/box/ammo/a4570 name = "box of .45-70 ammo" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm index f9e0d882a1e8..4af71670598d 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -2,6 +2,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a8_50r ammo_type = /obj/item/ammo_casing/a8_50r + max_ammo = 10 /obj/item/storage/box/ammo/a8_50r name = "box of 8x50mm ammo" @@ -37,6 +38,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a300 ammo_type = /obj/item/ammo_casing/a300 + max_ammo = 5 /obj/item/storage/box/ammo/a300 name = "box of .300 magnum ammo" @@ -53,6 +55,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_42 ammo_type = /obj/item/ammo_casing/a556_42 + max_ammo = 5 /obj/item/storage/box/ammo/a556_42 name = "box of 5.56x42mm CLIP ammo" @@ -69,6 +72,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a545_39 ammo_type = /obj/item/ammo_casing/a545_39 + max_ammo = 10 /obj/item/ammo_box/magazine/ammo_stack/prefilled/a545_39/recycled ammo_type = /obj/item/ammo_casing/a545_39/recycled @@ -77,6 +81,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a762_40 ammo_type = /obj/item/ammo_casing/a762_40 + max_ammo = 15 /obj/item/storage/box/ammo/a762_40 name = "box of 7.62x40mm CLIP ammo" @@ -96,6 +101,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 ammo_type = /obj/item/ammo_casing/a308 + max_ammo = 10 /obj/item/storage/box/ammo/a308 name = "box of .308 ammo" @@ -111,11 +117,11 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a308 = 4) generate_items_inside(items_inside,src) - //.299 Eoehoma Caseless (E-40) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c299 ammo_type = /obj/item/ammo_casing/caseless/c299 + max_ammo = 10 /obj/item/storage/box/ammo/c299 name = "box of .299 Eoehoma caseless ammo" @@ -128,11 +134,11 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c299 = 4) generate_items_inside(items_inside,src) - //6.5x57mm CLIP /obj/item/ammo_box/magazine/ammo_stack/prefilled/a65clip ammo_type = /obj/item/ammo_casing/a65clip + max_ammo = 5 /obj/item/storage/box/ammo/a65clip name = "box of 6.5x57mm CLIP ammo" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm index e095f350b462..d550f5e461ba 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_smg_stacks.dm @@ -27,6 +27,7 @@ // 5.56mm HITP caseless (Pistole C) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c556mm ammo_type = /obj/item/ammo_casing/caseless/c556mm + max_ammo = 15 /obj/item/storage/box/ammo/c556mm name = "box of 5.56mm HITP caseless ammo" From 071f53528f7cf745f1b4194b863b576e37dc53ec Mon Sep 17 00:00:00 2001 From: thgvr Date: Wed, 9 Oct 2024 18:40:29 -0700 Subject: [PATCH 27/31] more --- code/modules/projectiles/ammunition/ballistic/rifle.dm | 4 ++-- .../ammo_stacks/prefab_stacks/premade_rifle_stacks.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index f3e3b7ab4118..04545410300b 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -34,7 +34,7 @@ icon_state = "rifle-steel" caliber = "a300" projectile_type = /obj/projectile/bullet/a300 - stack_size = 5 + stack_size = 15 // 5.56x42mm CLIP (CM82, Hydra variants) @@ -91,7 +91,7 @@ icon_state = "caseless" caliber = ".299 caseless" projectile_type = /obj/projectile/bullet/c299 - stack_size = 10 + stack_size = 5 /obj/item/ammo_casing/a65clip name = "6.5x57mm CLIP bullet casing" diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm index 4af71670598d..d22f62ec2165 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_rifle_stacks.dm @@ -55,7 +55,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a556_42 ammo_type = /obj/item/ammo_casing/a556_42 - max_ammo = 5 + max_ammo = 15 /obj/item/storage/box/ammo/a556_42 name = "box of 5.56x42mm CLIP ammo" @@ -121,7 +121,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c299 ammo_type = /obj/item/ammo_casing/caseless/c299 - max_ammo = 10 + max_ammo = 5 /obj/item/storage/box/ammo/c299 name = "box of .299 Eoehoma caseless ammo" From 8ca3de4beca93f83587a108fab825a00e1943d97 Mon Sep 17 00:00:00 2001 From: thgvr Date: Wed, 9 Oct 2024 18:58:01 -0700 Subject: [PATCH 28/31] fix hopefully --- code/modules/projectiles/boxes_magazines/_box_magazine.dm | 1 + code/modules/projectiles/guns/ballistic/revolver.dm | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index f75769cb3a84..57fb71d17f32 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -166,6 +166,7 @@ if(num_loaded) to_chat(user, "You load [num_loaded] cartridge\s into \the [to_load]!") return + /obj/item/ammo_box/attack_self(mob/user) var/obj/item/ammo_casing/A = get_round() if(!A) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index e0e389ce7f4a..281ade1acd2a 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -259,8 +259,8 @@ if(num_loaded) to_chat(user, "You load [num_loaded] [cartridge_wording]\s into [src].") - attacking_box.update_appearance() - update_appearance() + attacking_box.update_ammo_count() + update_ammo_count() return TRUE else return ..() From b033c759896bbdebda1f8d39776c1181e4931c3e Mon Sep 17 00:00:00 2001 From: thgvr Date: Wed, 9 Oct 2024 19:01:24 -0700 Subject: [PATCH 29/31] lol --- code/modules/projectiles/guns/ballistic/revolver.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 281ade1acd2a..e0e389ce7f4a 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -259,8 +259,8 @@ if(num_loaded) to_chat(user, "You load [num_loaded] [cartridge_wording]\s into [src].") - attacking_box.update_ammo_count() - update_ammo_count() + attacking_box.update_appearance() + update_appearance() return TRUE else return ..() From 577410f6cbee0dd1b2d72eff86eb01a0478fd4a0 Mon Sep 17 00:00:00 2001 From: thgvr Date: Thu, 10 Oct 2024 10:44:02 -0700 Subject: [PATCH 30/31] Forgot this --- .../projectiles/boxes_magazines/ammo_boxes.dm | 514 ------------------ .../boxes_magazines/ammo_loaders.dm | 176 ++++++ .../boxes_magazines/generic_ammo_box.dm | 53 -- .../research/designs/autolathe_designs.dm | 8 - shiptest.dme | 3 +- 5 files changed, 177 insertions(+), 577 deletions(-) delete mode 100644 code/modules/projectiles/boxes_magazines/ammo_boxes.dm create mode 100644 code/modules/projectiles/boxes_magazines/ammo_loaders.dm delete mode 100644 code/modules/projectiles/boxes_magazines/generic_ammo_box.dm diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm deleted file mode 100644 index e81eb77e3b46..000000000000 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ /dev/null @@ -1,514 +0,0 @@ -// .357 Speed Loaders (Syndicate Revolver) - -/obj/item/ammo_box/a357 - name = "speed loader (.357)" - desc = "A 7-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." - icon_state = "speedloader_357-6" - base_icon_state = "speedloader_357" - ammo_type = /obj/item/ammo_casing/a357 - caliber = ".357" - max_ammo = 7 - multiple_sprites = AMMO_BOX_PER_BULLET - item_flags = NO_MAT_REDEMPTION - w_class = WEIGHT_CLASS_TINY - instant_load = TRUE - -/obj/item/ammo_box/a357/empty - start_empty = TRUE - -/obj/item/ammo_box/a357/match - name = "speed loader (.357 match)" - desc = "A 7-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." - ammo_type = /obj/item/ammo_casing/a357/match - -/obj/item/ammo_box/a357/hp - name = "speed loader (.357 hollow point)" - desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." - ammo_type = /obj/item/ammo_casing/a357/hp - -// /obj/item/ammo_box/a357_box -// name = "ammo box (.357)" -// desc = "A box of standard .357 ammo." -// icon_state = "357box" -// ammo_type = /obj/item/ammo_casing/a357 -// max_ammo = 50 - -// /obj/item/ammo_box/a357_box/match -// name = "ammo box (.357)" -// desc = "A box of match .357 ammo." -// icon_state = "357box-match" -// ammo_type = /obj/item/ammo_casing/a357/match -// max_ammo = 50 - -// /obj/item/ammo_box/a357_box/hp -// name = "ammo box (.357)" -// desc = "A box of hollow point .357 ammo." -// icon_state = "357box-hp" -// ammo_type = /obj/item/ammo_casing/a357/hp -// max_ammo = 50 - - -// .45-70 Ammo Holders (Hunting Revolver) - -// /obj/item/ammo_box/a4570 -// name = "ammo box (.45-70)" -// desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." -// icon_state = "4570" -// ammo_type = /obj/item/ammo_casing/a4570 -// max_ammo = 12 - -// /obj/item/ammo_box/a4570/match -// name = "ammo box (.45-70 match)" -// desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." -// icon_state = "4570-match" -// ammo_type = /obj/item/ammo_casing/a4570/match - -// /obj/item/ammo_box/a4570/hp -// name = "ammo box (.45-70 hollow point)" -// desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." -// icon_state = "4570-hp" -// ammo_type = /obj/item/ammo_casing/a4570/hp - -// /obj/item/ammo_box/a4570/explosive -// name = "ammo box (.45-70 explosive)" -// desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." -// icon_state = "4570-explosive" -// ammo_type = /obj/item/ammo_casing/a4570/explosive - - -// .38 special Speed Loaders (Colt Detective Special) - -/obj/item/ammo_box/c38 - name = "speed loader (.38 special)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These rounds do okay damage, but struggle against armor." - icon_state = "speedloader_38-6" - base_icon_state = "speedloader_38" - ammo_type = /obj/item/ammo_casing/c38 - caliber = ".38" - max_ammo = 6 - multiple_sprites = AMMO_BOX_PER_BULLET - custom_materials = list(/datum/material/iron = 15000) - w_class = WEIGHT_CLASS_TINY - instant_load = TRUE - -/obj/item/ammo_box/c38/trac - name = "speed loader (.38 TRAC)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These TRAC rounds do pitiful damage, but embed a tracking device in targets hit." - ammo_type = /obj/item/ammo_casing/c38/trac - -/obj/item/ammo_box/c38/match - name = "speed loader (.38 match)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." - ammo_type = /obj/item/ammo_casing/c38/match - -/obj/item/ammo_box/c38/match/bouncy - name = "speed loader (.38 rubber)" - desc = "A 6-round speed loader for quickly reloading .38 special 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 - -/obj/item/ammo_box/c38/dumdum - name = "speed loader (.38 dum-dum)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These dum-dum bullets shatter on impact and embed in the target's innards. However, they're nearly ineffective against armor and do okay damage." - ammo_type = /obj/item/ammo_casing/c38/dumdum - -/obj/item/ammo_box/c38/hotshot - name = "speed loader (.38 hot shot)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These hot shot bullets contain an incendiary payload that set targets alight." - ammo_type = /obj/item/ammo_casing/c38/hotshot - -/obj/item/ammo_box/c38/iceblox - name = "speed loader (.38 iceblox)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These iceblox bullets contain a cryogenic payload that chills targets." - ammo_type = /obj/item/ammo_casing/c38/iceblox - -/obj/item/ammo_box/c38/empty - start_empty = TRUE - -// 8x58mm Stripper Clip (SSG-669C) - -/obj/item/ammo_box/a858 - name = "stripper clip (8x58mm)" - desc = "A 5-round stripper clip for the SSG-669C rifle. These rounds do good damage with significant armor penetration." - icon_state = "enbloc_858" - ammo_type = /obj/item/ammo_casing/caseless/a858 - max_ammo = 5 - multiple_sprites = AMMO_BOX_PER_BULLET - instant_load = TRUE - -/obj/item/ammo_box/a858/empty - start_empty = TRUE - -// .308 Stripper Clip (Vickland) - -/obj/item/ammo_box/vickland_a308 - name = "stripper clip (.308)" - desc = "A 5-round stripper clip for the Vickland Battle Rifle. The Vickland itself has a 10 round capacity, so keep in mind two of these are needed to fully reload it. These rounds do good damage with significant armor penetration." - icon_state = "stripper_308-5" - base_icon_state = "stripper_308" - ammo_type = /obj/item/ammo_casing/a308 - max_ammo = 5 - multiple_sprites = AMMO_BOX_PER_BULLET - w_class = WEIGHT_CLASS_TINY - instant_load = TRUE - -/obj/item/ammo_box/vickland_a308/empty - start_empty = TRUE - -// .300 Magnum Stripper Clip (Scout) - -/obj/item/ammo_box/a300 - name = "stripper clip (.300 Magnum)" - desc = "A 5-round stripper clip for the Scout Rifle. These rounds do great damage with significant armor penetration." - icon_state = "300m" - ammo_type = /obj/item/ammo_casing/a300 - max_ammo = 5 - multiple_sprites = AMMO_BOX_PER_BULLET - w_class = WEIGHT_CLASS_TINY - instant_load = TRUE - -/obj/item/ammo_box/a300/empty - start_empty = TRUE -// .300 Blackout Stripper Clip (Polymer Survivor Rifle) - -/obj/item/ammo_box/a762_stripper - name = "stripper clip (7.62)" - desc = "A 5-round stripper clip for makeshift bolt-action rifles. These rounds do good damage with good armor penetration." - icon_state = "stripper_308-5" - base_icon_state = "stripper_308" - ammo_type = /obj/item/ammo_casing/a762_40 - caliber = "7.62x40mm" - max_ammo = 5 - multiple_sprites = AMMO_BOX_PER_BULLET - w_class = WEIGHT_CLASS_TINY - instant_load = TRUE - -/obj/item/ammo_box/a762_stripper/empty - start_empty = TRUE - -// Ferromagnetic Pellet Speed Loader (Claris) - -/obj/item/ammo_box/amagpellet_claris - name = "\improper Claris speed loader (ferromagnetic pellet)" - desc = "A 22-round speed loader for quickly reloading the Claris rifle. Ferromagnetic pellets do okay damage with significant armor penetration." - icon_state = "claris-sl-1" - base_icon_state = "claris-sl" - ammo_type = /obj/item/ammo_casing/caseless/gauss - max_ammo = 22 - multiple_sprites = AMMO_BOX_FULL_EMPTY - item_flags = NO_MAT_REDEMPTION - instant_load = TRUE - -// Ammo Boxes - -// /obj/item/ammo_box/c38_box -// name = "ammo box (.38)" -// desc = "A box of standard .38 Special ammo." -// icon_state = "38box" -// ammo_type = /obj/item/ammo_casing/c38 -// max_ammo = 50 - -// /obj/item/ammo_box/c38_box/surplus -// name = "ammo box (.38 surplus)" -// desc = "A box of low-quality .38 Special ammo." -// icon_state = "38box-surplus" -// ammo_type = /obj/item/ammo_casing/c38/surplus - -// /obj/item/ammo_box/a12g -// name = "ammo box (12g buckshot)" -// desc = "A box of 12-gauge buckshot shells, devastating at close range." -// icon_state = "12gbox-buckshot" -// ammo_type = /obj/item/ammo_casing/shotgun/buckshot -// max_ammo = 25 - -// /obj/item/ammo_box/a12g/slug -// name = "ammo box (12g slug)" -// desc = "A box of 12-gauge slugs, for improved accuracy and penetration." -// icon_state = "12gbox-slug" -// ammo_type = /obj/item/ammo_casing/shotgun - -// /obj/item/ammo_box/a12g/beanbag -// name = "ammo box (12g beanbag)" -// desc = "A box of 12-gauge beanbag shells, for incapacitating targets." -// icon_state = "12gbox-beanbag" -// ammo_type = /obj/item/ammo_casing/shotgun/beanbag - -// /obj/item/ammo_box/a12g/rubbershot -// name = "ammo box (12g rubbershot)" -// desc = "A box of 12-gauge rubbershot shells, designed for riot control." -// icon_state = "12gbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - -// /obj/item/ammo_box/c9mm -// name = "ammo box (9mm)" -// desc = "A box of standard 9mm ammo." -// icon_state = "9mmbox" -// ammo_type = /obj/item/ammo_casing/c9mm -// max_ammo = 50 - -// /obj/item/ammo_box/c9mm/surplus -// name = "ammo box (9mm surplus)" -// desc = "A box of low-quality 9mm ammo." -// icon_state = "9mmbox-surplus" -// ammo_type = /obj/item/ammo_casing/c9mm/surplus - -// /obj/item/ammo_box/c9mm/rubbershot -// name = "ammo box (9mm rubbershot)" -// desc = "A box of 9mm rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "9mmbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/c9mm/rubber - -// /obj/item/ammo_box/c9mm/ap -// name = "ammo box (9mm armor-piercing)" -// desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "9mmbox-ap" -// ammo_type = /obj/item/ammo_casing/c9mm/ap - -// /obj/item/ammo_box/c9mm/hp -// name = "ammo box (9mm hollow point)" -// desc = "A box of 9mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "9mmbox-hp" -// ammo_type = /obj/item/ammo_casing/c9mm/hp - -// /obj/item/ammo_box/c9mm/fire -// name = "ammo box (9mm incendiary)" -// desc = "A box of 9mm incendiary ammo, designed to ignite targets at the cost of initial damage." -// icon_state = "9mmbox-incendiary" -// ammo_type = /obj/item/ammo_casing/c9mm/inc - -// /obj/item/ammo_box/c10mm -// name = "ammo box (10mm)" -// desc = "A box of standard 10mm ammo." -// icon_state = "10mmbox" -// ammo_type = /obj/item/ammo_casing/c10mm -// max_ammo = 50 - -// /obj/item/ammo_box/c10mm/surplus -// name = "ammo box (10mm surplus)" -// desc = "A box of low-quality 10mm ammo." -// icon_state = "10mmbox-surplus" -// ammo_type = /obj/item/ammo_casing/c10mm/surplus - -// /obj/item/ammo_box/c10mm/rubbershot -// name = "ammo box (10mm rubbershot)" -// desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "10mmbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/c9mm/rubber - -// /obj/item/ammo_box/c10mm/ap -// name = "ammo box (10mm armor-piercing)" -// desc = "A box of 10mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "10mmbox-ap" -// ammo_type = /obj/item/ammo_casing/c10mm/ap - -// /obj/item/ammo_box/c10mm/hp -// name = "ammo box (10mm hollow point)" -// desc = "A box of 10mm hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "10mmbox-hp" -// ammo_type = /obj/item/ammo_casing/c10mm/hp - -// /obj/item/ammo_box/c10mm/fire -// name = "ammo box (10mm incendiary)" -// desc = "A box of 10mm incendiary ammo, designed to ignite targets at the cost of initial damage." -// icon_state = "10mmbox-incendiary" -// ammo_type = /obj/item/ammo_casing/c10mm/inc - -// /obj/item/ammo_box/c45 -// name = "ammo box (.45)" -// desc = "A box of standard .45 ammo." -// icon_state = "45box" -// ammo_type = /obj/item/ammo_casing/c45 -// max_ammo = 50 - -// /obj/item/ammo_box/c45/surplus -// name = "ammo box (.45 surplus)" -// desc = "A box of low-quality .45 ammo." -// icon_state = "45box-surplus" -// ammo_type = /obj/item/ammo_casing/c45/surplus - -// /obj/item/ammo_box/c45/rubbershot -// name = "ammo box (.45 rubbershot)" -// desc = "A box of .45 rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "45box-rubbershot" -// ammo_type = /obj/item/ammo_casing/c45/rubber - -// /obj/item/ammo_box/c45/ap -// name = "ammo box (.45 armor-piercing)" -// desc = "A box of .45 armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "45box-ap" -// ammo_type = /obj/item/ammo_casing/c45/ap - -// /obj/item/ammo_box/c45/hp -// name = "ammo box (.45 hollow point)" -// desc = "A box of .45 hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "45box-hp" -// ammo_type = /obj/item/ammo_casing/c45/hp - -// /obj/item/ammo_box/c45/fire -// name = "ammo box (.45 incendiary)" -// desc = "A box of .45 incendiary ammo, designed to ignite targets at the cost of initial damage." -// icon_state = "45box-incendiary" -// ammo_type = /obj/item/ammo_casing/c45/inc - -// /obj/item/ammo_box/c556mmHITP -// name = "ammo box (5.56mm HITP caseless)" -// desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." -// icon_state = "556mmHITPbox" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm -// max_ammo = 50 - -// /obj/item/ammo_box/c556mmHITP/surplus -// name = "ammo box (5.56mm HITP caseless surplus)" -// desc = "A box of low-quality 5.56mm HITP caseless ammo." -// icon_state = "556mmHITPbox-surplus" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus - -// /obj/item/ammo_box/c556mmHITP/rubbershot -// name = "ammo box (5.56mm HITP caseless rubbershot)" -// desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "556mmHITPbox-rubbershot" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot - -// /obj/item/ammo_box/c556mmHITP/ap -// name = "ammo box (5.56mm HITP caseless armor-piercing)" -// desc = "A box of 5.56mm HITP caseless armor-piercing ammo, designed to penetrate through armor at the cost of total damage." -// icon_state = "556mmHITPbox-ap" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap - -// /obj/item/ammo_box/c556mmHITP/hp -// name = "ammo box (5.56mm HITP caseless hollow point)" -// desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." -// icon_state = "556mmHITPbox-hp" -// ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp - -/obj/item/ammo_box/a40mm - name = "ammo box (40mm grenades)" - icon_state = "40mm" - ammo_type = /obj/item/ammo_casing/a40mm - max_ammo = 4 - multiple_sprites = AMMO_BOX_PER_BULLET - w_class = WEIGHT_CLASS_NORMAL - -// /obj/item/ammo_box/a762_40 -// name = "ammo box (7.62x40mm CLIP)" -// icon_state = "a762_40box_big" -// ammo_type = /obj/item/ammo_casing/a762_40 -// max_ammo = 120 -// w_class = WEIGHT_CLASS_NORMAL - -// /obj/item/ammo_box/a762_40/inteq -// icon_state = "a762_40box_big_inteq" - -// /obj/item/ammo_box/a308 -// name = "ammo box (.308)" -// icon_state = "a308box" -// ammo_type = /obj/item/ammo_casing/a308 -// max_ammo = 30 - -// /obj/item/ammo_box/a308/hunterspride //just an alternative graphic for srm ships -// icon_state = "a308box-HP" - -// /obj/item/ammo_box/foambox -// name = "ammo box (Foam Darts)" -// icon = 'icons/obj/guns/toy.dmi' -// icon_state = "foambox" -// ammo_type = /obj/item/ammo_casing/caseless/foam_dart -// max_ammo = 40 -// custom_materials = list(/datum/material/iron = 500) - -// /obj/item/ammo_box/foambox/riot -// icon_state = "foambox_riot" -// ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot -// custom_materials = list(/datum/material/iron = 50000) - -// /obj/item/ammo_box/c22lr_box -// name = "ammo box (.22 LR)" -// desc = "A box of standard .22 LR ammo." -// icon_state = "22lrbox" -// ammo_type = /obj/item/ammo_casing/c22lr -// max_ammo = 75 - -// /obj/item/ammo_box/c46x30mm_box -// name = "ammo box (4.6x30mm)" -// desc = "A box of standard 4.6x30mm ammo." -// icon_state = "46x30mmbox" -// ammo_type = /obj/item/ammo_casing/c46x30mm -// max_ammo = 50 - -// /obj/item/ammo_box/c8x50mm_box -// name = "ammo box (8x50mm)" -// desc = "A box of standard 8x50mm ammo." -// icon_state = "8x50mmbox" -// ammo_type = /obj/item/ammo_casing/a8_50r -// max_ammo = 20 - -// /obj/item/ammo_box/ferropelletbox -// name = "ammo box (ferromagnetic pellets)" -// desc = "A box of ferromagnetic pellets." -// icon_state = "ferropelletsbox" -// ammo_type = /obj/item/ammo_casing/caseless/gauss -// max_ammo = 50 - -// /obj/item/ammo_box/ferroslugbox -// name = "ammo box (ferromagnetic slugs)" -// desc = "A box of standard ferromagnetic slugs." -// icon_state = "ferroslugsbox" -// ammo_type = /obj/item/ammo_casing/caseless/gauss/slug -// max_ammo = 20 - -// /obj/item/ammo_box/ferrolancebox -// name = "ammo box (ferromagnetic lances)" -// desc = "A box of standard ferromagnetic lances." -// icon_state = "ferrolancesbox" -// ammo_type = /obj/item/ammo_casing/caseless/gauss/lance -// max_ammo = 50 - -// /obj/item/ammo_box/c8x50mmhp_box -// name = "ammo box (8x50mm)" -// desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of armor penetration." -// icon_state = "8x50mmbox-hp" -// ammo_type = /obj/item/ammo_casing/a8_50rhp -// max_ammo = 20 - -// /obj/item/ammo_box/a300_box -// name = "ammo box (.300 Magnum)" -// desc = "A box of standard .300 Magnum ammo." -// icon_state = "300box" -// ammo_type = /obj/item/ammo_casing/a300 -// max_ammo = 20 - -/obj/item/ammo_box/a44roum_speedloader - name = "speed loader (.44)" - desc = "Designed to quickly reload revolvers." - icon_state = "speedloader_38-6" - base_icon_state = "speedloader_38" - ammo_type = /obj/item/ammo_casing/a44roum - caliber = ".44 Roumain" - max_ammo = 6 - multiple_sprites = AMMO_BOX_PER_BULLET - custom_materials = list(/datum/material/iron = 15000) - w_class = WEIGHT_CLASS_TINY - instant_load = TRUE - -/obj/item/ammo_box/a44roum_speedloader/empty - start_empty = TRUE - -// /obj/item/ammo_box/a44roum -// name = "ammo box (.44 roumain)" -// desc = "A box of standard .44 roumain ammo." -// icon_state = "a44roum" -// ammo_type = /obj/item/ammo_casing/a44roum -// max_ammo = 50 - -// /obj/item/ammo_box/a44roum/rubber -// name = "ammo box (.44 roumain rubber)" -// desc = "A box of .44 roumain rubbershot ammo, designed to disable targets without causing serious damage." -// icon_state = "a44roum-rubber" -// ammo_type = /obj/item/ammo_casing/a44roum/rubber -// max_ammo = 50 - -// /obj/item/ammo_box/a44roum/hp -// name = "ammo box (.44 roumain hollow point)" -// desc = "A box of .44 roumain hollow point ammo, designed to cause massive damage at the cost of armor penetration." -// icon_state = "a44roum-hp" -// ammo_type = /obj/item/ammo_casing/a44roum/hp -// max_ammo = 50 diff --git a/code/modules/projectiles/boxes_magazines/ammo_loaders.dm b/code/modules/projectiles/boxes_magazines/ammo_loaders.dm new file mode 100644 index 000000000000..e659d530ab73 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/ammo_loaders.dm @@ -0,0 +1,176 @@ +// .357 Speed Loaders + +/obj/item/ammo_box/a357 + name = "speed loader (.357)" + desc = "A 7-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." + icon_state = "speedloader_357-6" + base_icon_state = "speedloader_357" + ammo_type = /obj/item/ammo_casing/a357 + caliber = ".357" + max_ammo = 7 + multiple_sprites = AMMO_BOX_PER_BULLET + item_flags = NO_MAT_REDEMPTION + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE + +/obj/item/ammo_box/a357/empty + start_empty = TRUE + +/obj/item/ammo_box/a357/match + name = "speed loader (.357 match)" + desc = "A 7-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + ammo_type = /obj/item/ammo_casing/a357/match + +/obj/item/ammo_box/a357/hp + name = "speed loader (.357 hollow point)" + desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." + ammo_type = /obj/item/ammo_casing/a357/hp + +// .38 special Speed Loaders + +/obj/item/ammo_box/c38 + name = "speed loader (.38 special)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These rounds do okay damage, but struggle against armor." + icon_state = "speedloader_38-6" + base_icon_state = "speedloader_38" + ammo_type = /obj/item/ammo_casing/c38 + caliber = ".38" + max_ammo = 6 + multiple_sprites = AMMO_BOX_PER_BULLET + custom_materials = list(/datum/material/iron = 15000) + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE + +/obj/item/ammo_box/c38/trac + name = "speed loader (.38 TRAC)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These TRAC rounds do pitiful damage, but embed a tracking device in targets hit." + ammo_type = /obj/item/ammo_casing/c38/trac + +/obj/item/ammo_box/c38/match + name = "speed loader (.38 match)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + ammo_type = /obj/item/ammo_casing/c38/match + +/obj/item/ammo_box/c38/match/bouncy + name = "speed loader (.38 rubber)" + desc = "A 6-round speed loader for quickly reloading .38 special 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 + +/obj/item/ammo_box/c38/dumdum + name = "speed loader (.38 dum-dum)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These dum-dum bullets shatter on impact and embed in the target's innards. However, they're nearly ineffective against armor and do okay damage." + ammo_type = /obj/item/ammo_casing/c38/dumdum + +/obj/item/ammo_box/c38/hotshot + name = "speed loader (.38 hot shot)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These hot shot bullets contain an incendiary payload that set targets alight." + ammo_type = /obj/item/ammo_casing/c38/hotshot + +/obj/item/ammo_box/c38/iceblox + name = "speed loader (.38 iceblox)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These iceblox bullets contain a cryogenic payload that chills targets." + ammo_type = /obj/item/ammo_casing/c38/iceblox + +/obj/item/ammo_box/c38/empty + start_empty = TRUE + +// 8x58mm Stripper Clip + +/obj/item/ammo_box/a858 + name = "stripper clip (8x58mm)" + desc = "A 5-round stripper clip for the SSG-669C rifle. These rounds do good damage with significant armor penetration." + icon_state = "enbloc_858" + ammo_type = /obj/item/ammo_casing/caseless/a858 + max_ammo = 5 + multiple_sprites = AMMO_BOX_PER_BULLET + instant_load = TRUE + +/obj/item/ammo_box/a858/empty + start_empty = TRUE + +// .308 Stripper Clip + +/obj/item/ammo_box/vickland_a308 + name = "stripper clip (.308)" + desc = "A 5-round stripper clip for the Vickland Battle Rifle. The Vickland itself has a 10 round capacity, so keep in mind two of these are needed to fully reload it. These rounds do good damage with significant armor penetration." + icon_state = "stripper_308-5" + base_icon_state = "stripper_308" + ammo_type = /obj/item/ammo_casing/a308 + max_ammo = 5 + multiple_sprites = AMMO_BOX_PER_BULLET + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE + +/obj/item/ammo_box/vickland_a308/empty + start_empty = TRUE + +// .300 Magnum Stripper Clip + +/obj/item/ammo_box/a300 + name = "stripper clip (.300 Magnum)" + desc = "A 5-round stripper clip for the Scout Rifle. These rounds do great damage with significant armor penetration." + icon_state = "300m" + ammo_type = /obj/item/ammo_casing/a300 + max_ammo = 5 + multiple_sprites = AMMO_BOX_PER_BULLET + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE + +/obj/item/ammo_box/a300/empty + start_empty = TRUE + +// .300 Blackout Stripper Clip + +/obj/item/ammo_box/a762_stripper + name = "stripper clip (7.62)" + desc = "A 5-round stripper clip for makeshift bolt-action rifles. These rounds do good damage with good armor penetration." + icon_state = "stripper_308-5" + base_icon_state = "stripper_308" + ammo_type = /obj/item/ammo_casing/a762_40 + caliber = "7.62x40mm" + max_ammo = 5 + multiple_sprites = AMMO_BOX_PER_BULLET + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE + +/obj/item/ammo_box/a762_stripper/empty + start_empty = TRUE + +// Ferromagnetic Pellet Speed Loader + +/obj/item/ammo_box/amagpellet_claris + name = "\improper Claris speed loader (ferromagnetic pellet)" + desc = "A 22-round speed loader for quickly reloading the Claris rifle. Ferromagnetic pellets do okay damage with significant armor penetration." + icon_state = "claris-sl-1" + base_icon_state = "claris-sl" + ammo_type = /obj/item/ammo_casing/caseless/gauss + max_ammo = 22 + multiple_sprites = AMMO_BOX_FULL_EMPTY + item_flags = NO_MAT_REDEMPTION + instant_load = TRUE + +/obj/item/ammo_box/a40mm + name = "ammo box (40mm grenades)" + icon_state = "40mm" + ammo_type = /obj/item/ammo_casing/a40mm + max_ammo = 4 + multiple_sprites = AMMO_BOX_PER_BULLET + w_class = WEIGHT_CLASS_NORMAL + +// .44 Roumain speedloader + +/obj/item/ammo_box/a44roum_speedloader + name = "speed loader (.44)" + desc = "Designed to quickly reload revolvers." + icon_state = "speedloader_38-6" + base_icon_state = "speedloader_38" + ammo_type = /obj/item/ammo_casing/a44roum + caliber = ".44 Roumain" + max_ammo = 6 + multiple_sprites = AMMO_BOX_PER_BULLET + custom_materials = list(/datum/material/iron = 15000) + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE + +/obj/item/ammo_box/a44roum_speedloader/empty + start_empty = TRUE diff --git a/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm b/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm deleted file mode 100644 index ca5bcb7a877f..000000000000 --- a/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm +++ /dev/null @@ -1,53 +0,0 @@ -// /obj/item/ammo_box/generic -// name = "generic ammo box" -// desc = "A generic, unbranded box of ammo. It doesn't have great capacity, but it can hold a variety of different calibers." -// max_ammo = 20 -// start_empty = TRUE -// icon_state = "generic-ammo" -// /// Does the box currently have an ammo type set? -// var/ammo_set = FALSE -// /// Name of the currently set ammo type -// var/ammo_name - -// /obj/item/ammo_box/generic/update_ammo_count() -// . = ..() -// if(LAZYLEN(stored_ammo) == 0) -// ammo_set = FALSE -// ammo_type = /obj/item/ammo_casing - -// /obj/item/ammo_box/generic/proc/update_max_ammo(obj/item/ammo_casing/ammo) -// if(ammo.bullet_per_box) -// max_ammo = round(ammo.bullet_per_box) -// else -// max_ammo = 10 - -// return - -// /obj/item/ammo_box/generic/attackby(obj/item/attacking_obj, mob/user, params, silent, replace_spent) -// . = ..() - -// if(!ammo_set && istype(attacking_obj, /obj/item/ammo_casing)) -// var/obj/item/ammo_casing/ammo_load = attacking_obj.type -// ammo_type = ammo_load -// ammo_set = TRUE -// ammo_name = attacking_obj.name -// update_max_ammo(attacking_obj) -// to_chat(user, span_notice("You set the box to hold [attacking_obj]!")) - -// if(istype(attacking_obj, /obj/item/pen)) -// if(!user.is_literate()) -// to_chat(user, span_notice("You scribble illegibly on the cover of [src]!")) -// return -// var/inputvalue = stripped_input(user, "What would you like to label the box?", "Box Labelling", "", MAX_NAME_LEN) - -// if(!inputvalue) -// return - -// if(user.canUseTopic(src, BE_CLOSE)) -// name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]" - -// /obj/item/ammo_box/generic/examine(mob/user) -// . = ..() -// . += span_notice("[ammo_set ? "It's set to hold [ammo_name]\s. The box can hold up to [max_ammo] rounds." : "It doesn't have an ammo type set. Use a bullet on the box to set it."]") -// . += span_notice("You can use a pen on it to rename the box.") - diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index bf58499d4951..5ac2370dc694 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -852,14 +852,6 @@ build_path = /obj/item/storage/box/ammo/c556mm_surplus category = list("initial", "Security", "Ammo") -// /datum/design/generic_ammo_box -// name = "Generic Ammo Box" -// id = "ammo-generic" -// build_type = AUTOLATHE | PROTOLATHE -// materials = list(/datum/material/iron = 1500) -// build_path = /obj/item/ammo_box/generic -// category = list("initial", "Security", "Ammo") - /datum/design/ammo_can name = "Ammo Can" id = "ammo-can" diff --git a/shiptest.dme b/shiptest.dme index eb4d1b39b6a2..f4cb0a479ab4 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3019,8 +3019,7 @@ #include "code\modules\projectiles\ammunition\special\magic.dm" #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\generic_ammo_box.dm" +#include "code\modules\projectiles\boxes_magazines\ammo_loaders.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\_ammo_stack.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\_premade_stacks.dm" #include "code\modules\projectiles\boxes_magazines\ammo_stacks\prefab_stacks\premade_gauss_stacks.dm" From 60efdf55e4db00adb6ac5a5e5f4fd875ae4bce6d Mon Sep 17 00:00:00 2001 From: thgvr Date: Fri, 11 Oct 2024 19:19:14 -0700 Subject: [PATCH 31/31] a --- code/modules/cargo/packs/ammo.dm | 2 +- code/modules/projectiles/ammunition/ballistic/pistol.dm | 4 +++- code/modules/projectiles/boxes_magazines/ammo_loaders.dm | 8 ++++---- .../ammo_stacks/prefab_stacks/premade_pistol_stacks.dm | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 42668225bb26..716cb51d1e97 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -426,6 +426,6 @@ /datum/supply_pack/ammo/c22lr name = ".22 LR Ammo Box Crate" - desc = "Contains a 48-round ammo box for refilling .22 LR weapons." + desc = "Contains a 60-round ammo box for refilling .22 LR weapons." contains = list(/obj/item/storage/box/ammo/c22lr) cost = 250 diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 172ebfda0674..9e1f880ffe1b 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -130,9 +130,11 @@ desc = "A .50 AE hollow point bullet casing." projectile_type = /obj/projectile/bullet/a50AE/hp -// .22 LR (Himehabu) +// .22 LR (Himehabu, Pounder) + /obj/item/ammo_casing/c22lr name = ".22 LR bullet casing" desc = "A .22 LR bullet casing." projectile_type = /obj/projectile/bullet/c22lr caliber = "22lr" + stack_size = 15 diff --git a/code/modules/projectiles/boxes_magazines/ammo_loaders.dm b/code/modules/projectiles/boxes_magazines/ammo_loaders.dm index e659d530ab73..70d9480493c6 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_loaders.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_loaders.dm @@ -2,12 +2,12 @@ /obj/item/ammo_box/a357 name = "speed loader (.357)" - desc = "A 7-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." + desc = "A 6-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor." icon_state = "speedloader_357-6" base_icon_state = "speedloader_357" ammo_type = /obj/item/ammo_casing/a357 caliber = ".357" - max_ammo = 7 + max_ammo = 6 multiple_sprites = AMMO_BOX_PER_BULLET item_flags = NO_MAT_REDEMPTION w_class = WEIGHT_CLASS_TINY @@ -18,12 +18,12 @@ /obj/item/ammo_box/a357/match name = "speed loader (.357 match)" - desc = "A 7-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + desc = "A 6-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." ammo_type = /obj/item/ammo_casing/a357/match /obj/item/ammo_box/a357/hp name = "speed loader (.357 hollow point)" - desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." + desc = "A 6-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones." ammo_type = /obj/item/ammo_casing/a357/hp // .38 special Speed Loaders diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index 704ef9a7a78f..68ea1a7faeb5 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -265,7 +265,7 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/a50AE/hp ammo_type = /obj/item/ammo_casing/a50AE/hp -// .22 LR (Himehabu) +// .22 LR (Himehabu, Pounder) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c22lr ammo_type = /obj/item/ammo_casing/c22lr