summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2023-01-13 09:12:42 -0800
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2023-01-13 09:12:42 -0800
commit0d8fb8ce2e6f161cdd6212ce9eafdcd2f14cfc11 (patch)
tree033e065151ad10dfc32121654f8505c4bc2ced7e
parentUpdated to 2022-12-09-0202 (diff)
downloadcataclysm-bn-0d8fb8ce2e6f161cdd6212ce9eafdcd2f14cfc11.tar.xz
Updated to 2022-12-17-1221
-rw-r--r--PKGBUILD23
-rw-r--r--jc_stop-sleeping-on-tables.patch8
-rw-r--r--npc-02_tacoma-update.patch174
-rw-r--r--revert-01_removed-traits.patch39
-rw-r--r--revert-09_undo-yet-more-ammo-balancing.patch744
5 files changed, 780 insertions, 208 deletions
diff --git a/PKGBUILD b/PKGBUILD
index a8bf879..50304be 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -15,8 +15,8 @@ pkgbase=cataclysm-bn
pkgname=(cataclysm-bn cataclysm-bn-tiles)
pkgname=cataclysm-bn
_pkgname=Cataclysm-BN-cbn-experimental
-pkgver=202212090202
-_pkgver=2022-12-09-0202
+pkgver=202212171221
+_pkgver=2022-12-17-1221
pkgrel=1
pkgdesc="A post-apocalyptic roguelike."
#url="http://cataclysmrl.blogspot.com/"
@@ -41,6 +41,7 @@ source=("$pkgname-$_pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-
"revert-06_Obsolete-useless-hub01-basement-1457.patch"
"revert-07_Remove-handload-quality-distinction-1481.patch"
"revert-08_undo-rifle-balance-pass.patch"
+ "revert-09_undo-yet-more-ammo-balancing.patch"
"ammo-01_inconsistent-ammo-names.patch"
"ammo-02_fix-20x66mm-loudness.patch"
@@ -132,17 +133,18 @@ source=("$pkgname-$_pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-
"cataclysm-dda-soundpack_jcsoundpack.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-soundpack_jcsoundpack.git/snapshot/cataclysm-dda-soundpack_jcsoundpack-master.tar.xz"
"cataclysm-dda-musicpack_coag-musicpack.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-musicpack_coag-musicpack.git/snapshot/cataclysm-dda-musicpack_coag-musicpack-master.tar.xz"
)
-b2sums=('fbbf0ce6509f51a2673aed479b56edd86f56b60019fddd185109fc91f66dee5cc6859e82d80141bda19c99712ab1f0cfd26d97f5a9253b652c21112ed75f5c54'
+b2sums=('bfd55c6268b988a32d50f3704011c492c54ea0f9088186d438767392296b6fa95919f197cb1ca9c2d4624701d41840ab07f63f59b246e07c478dd1593f551cf3'
'069ecde58859b3d44cd687c4b6e718610cefb693ff86e66f199ebfb1b3072023ad2b6f0c28e27ef9c1ce4997f6a5b2ca0d45046996b3ff35a4aeaeb1a7cf9421'
'ad88bc6c1e3c8183a313b5eec42f98d6956afea349feff34a86e4536c9921fa99d2594282caf27de8ebb7ffb56376ed2e76d572227bfd6d8173c7bb1f01e23b8'
'6f70e90359a14e4839d9a2683debb88850e5dd387add911ad68fd87e5512cfcdd435da63e1e370358153673fd5a72a9b1e9c94f1979edb7948b4da8c82407bad'
- '839c92715bfd1f63d94d6d252813a19e6093ded3e45f9efbbc4953ab85adfb886bcdfcfa41c9bb9ed422c0a32917a1ac75f98019e7de946b840e345cd3969d19'
+ '1de2211ce631a43e343de2c630e525cc46f30be4983737a5c046e2e7bd4d2d67a5b31a57ba78f58c980d1ed6d26f90683fc4fa91530ceddf6b8d5012a31e8e9b'
'f3549372dec640f5fc51d2c7e2c439e34dc5e9b0cbabfc689d6d449814cfd997413360a363ace85835aec5a1fc2dd8e4bb2c54135fb63f617efdb00565d1616e'
'e417a1786fbafb685099431f7f9926201ab80636bf3812da67acc341c7ef2b6a3853734d5b8b1bc355acbd5c0bedefb0401f8854aa5cb00032550afc8a7b9ebe'
'4563b0454c67b003fc1e266345d609d8cce5d60f5d19e9936f441c3b75a98d7c162959286da9507e79def7544675cba8c9e589cca55ed9a1ed261ac608ac7c1a'
'2d197903715263628e767e867e9b20b9ebd3d85f8983ac8f1e2b534f2b6f8c0470886c79a409f117ad43348aa6aef2a6298925ae27faa32814183ad7677528ac'
'b31b1899cb4d42e1c748be93ac164f8492339683695a34df30c15b734e3fa800b3cfcd1e95bd381501b427e20e45bdca9e9501fa81377d505f22d5549be947e4'
'0ac92184f85d8b3dceee4a210b2f7f367aeb14c609d468e87205d0eb630e1b6bad6903b863ea61c3a032b665b2316871b6c70aa8508c604a7237a378fae39d92'
+ '52cbb536e1c25d28f76d9e5aa63aec29c2ee9219c8f4ab820bdf437d748b6c8a0382edf826fccee8088fef90d75125698a603f19f5b3f1ac78f1dd1dbd52e347'
'ea9e227eff0a9470a06effc35d8e991c0e21d5521e0325317ab36760b5bb3256676fee29dd948fcc7f4b09ce9235c2d859cd22d6839ebf14deb369cdf97b20f0'
'6dbcf4833dabb68443e50a644cc26309785593f757f7484771a101873aeb02d2e8f3869c0679132a6883ea86bd5fd47494281d0f70dcae9f4bec9b06a7d69b19'
'124893f23b7d865709fa87a9fade8fb01e596c1f31b0811ab32d5e730e1101c62af672eaf5fe9cdefa338fc25164407023f4c7dcc7cacdb0c86b4713180d345d'
@@ -167,7 +169,7 @@ b2sums=('fbbf0ce6509f51a2673aed479b56edd86f56b60019fddd185109fc91f66dee5cc6859e8
'ab35d6663b864449d46da4a9e1c51e11956ff4c38e16db58c831b71f7b964fc25b0283122dbc8aa0549f240f01c4a910fb5c6c82937258c6b736c05b54bcf768'
'0793bb7aa67d3989ef093cc17e6d9dd6d2e3999562fe1039b44f0fb9297623bda49271cb7b17d7fab4dc14299e0e5f13eb8f3711dbffc10bf7ffa68838f0585b'
'24c5f9ee5553b66ac937785b3312378adbca096888b05da8b0cdc9c0586ee51e9a3754615cc03a659cfe70ba2f48f7ce0359025c816c887c7691424c685f5f96'
- '6b822bae693a2e8043db5a2c2ea8fe5d164d81461b62c11d04b78959d2a43ebbd0a73967a1dd60afa33eb0cc5df2cb2e0e0818fac9a9691edd3d1d97b537d6f6'
+ '3bc022d32238400b88a56bc77123fffabd41633394232f3e1db22bd143fc5646bb03bcd0f91629688ddcc8e5cd6d23630a28bfbcebd0db0f676781b385a584ca'
'613a9d7a7a512cdf7dc1f1121ecaec7272efe740f5494ce425c3781d41a0ec92e044142d82a28c6445416e84699131745c6872c9b33cb5b93528d0197745455a'
'71bd229c0ee32703e3fc44021939f2909adca148035e6bfac44f35cb68cd8e03c01b477bfb29fe05f568728f27bd5b6311a267338d05cdbd5680af0900324c08'
'd3d582336519191f73c8cf3c7bbb0a8df8ecbb333d864a32ad4b263daaeb193f771aa4b9cbf00ab929b4296da6db31fd575bdb2b337148147a76e25459f703ad'
@@ -199,15 +201,15 @@ b2sums=('fbbf0ce6509f51a2673aed479b56edd86f56b60019fddd185109fc91f66dee5cc6859e8
'3f65bf65f730101b215a38101e2a01b4be85746ec5e691d0f1e0f43f1ea1fd47de203299fe7c505160fe831987bd091879243878d91b88ed9ab14712837bd786'
'ce82294e480ad42f0001c799fd8131b60024b6097653f3c57564c75e54596616e376f0d7f1cf4e54d8c302a61ef164b4323f795bfa19b2c13ab9e927d37f1600'
'd006a51f306a1397c14111788a23029a894e223a196649cac476acab761479db543bf4537ed5a2f4173ec94af04874b521a1d598ed8e98406cc2cf526d8e0083'
- 'd723fcc6cce65aa296bc519a07a5d003122ad698a73a3d046dac3780ea5a00fef28f78da251bb46f80f2e0577baa26a6ae13cabf525f22a7a742435e95716dae'
+ '0cb9f39fd0b87e40bbce50ec7e834803bd0d28ff3c5ad25d2542498cfc5b625e7fc20880e34d325e05c51f411cf91721fe6b5a03565686be6cd6fe88772f80d0'
'f25f01c5b27dced202fe76c1717b9eaec65dfa5f28db1910529f60f5ec21cc89c1a15df26c2dd09066a0d89e3f7d87c790e7886c3c2f0978a25f5ec7d1236099'
'e3302d903d053f25aa666d572f74a8bbd3b65dde40eedcbf46e537ceb2294ac22b3772087fce04c4a780c2f18e855179c6ddc8af12d72a89b82957ce09deb52f'
'4bd44cbe85c53902b8a360509703e3d38e8a5da75dd2c534a77f03ce6440632f6c83c92939069c60473c88ffb3abab0fbf11e39271f44f813b9f6432ea5f9a6b'
'f115314dd2bb1da07bba7a90fec5c3acb7ccb5145efaea03d6806942e24d402c9a144a2fd07b82e727a0b79dedd4bdd87de0bbaf0944236563164fb6f117965e'
'fbe96133bb6aedadc8e846c2495cda5c06b9cc76663e06b236a7721ede96798207f857ae8e0d4b672166ef7e16f024bba14422fb5481fd132ada7117e52fffb5'
- '8c94ebe48348cd861d4d0efe4ac77ff9f7183689ac16a44203e5260459ed9838dbae53f5f8d68c601bd23b8e0e7cf6596ee48d5d3b2e29a8ddbb474f5830aec1'
+ 'cd63e596c9de88c23690a778372e5d68f03d7f9595cb9d20b644a7da95a70155aa3ad1e58cf68cf9a22cd76acdf5673662b2bfaa46961d0279bda32bf6b44308'
'a56efdaae0344726debf5b74846edce8df7aa2357fbc7a05a3d369d1f457b02934a0d0ce2330072e03f1ac901e06e333c9393f795c761f8440307e7649ed5596'
- 'f03bc29b1c01fe152cc1fe85a5eb375f82474ff5f7da8c7476533243253cac564ff0d7465b3f8ad2d2c1e13208d6c35750244782cfbcdfe2df73f6fcbdaf370a'
+ '14ef4cc6b05f8d9b0d6196c4b6f35cc8083bdf4820c19c320551158b47b570ee6b385f3d6b9888f614fb9d5325265feae810a2c5fff4a0deb42b01612bad6517'
'b9309da09b165fb57e83f84e3584d2479bd3336ed86e181e5df2d27daa92bd55d03d7f3fc226f03696af5f0f32d8e0e7ecd26ae7e50eed0200d0b0feaad07efb')
prepare() {
@@ -241,7 +243,7 @@ prepare() {
sed -i 's|cataclysm-dda|cataclysm-bn|' src/path_info.cpp
# Fix version
- sed -i 's|VERSION = unstable|VERSION = "0.1-experimental 2022-12-09-0202"|' Makefile
+ sed -i 's|VERSION = unstable|VERSION = "0.1-experimental 2022-12-17-1221"|' Makefile
# # # Hotfixes
@@ -250,6 +252,9 @@ prepare() {
# # # Reverts
echo "Applying revert patches"
+ # Revert yet more ammo rebalancing
+ patch -NREp1 -i "$srcdir"/revert-09_undo-yet-more-ammo-balancing.patch
+
# Revert balance pass of rifle ammunition.
patch -NREp1 -i "$srcdir"/revert-08_undo-rifle-balance-pass.patch
diff --git a/jc_stop-sleeping-on-tables.patch b/jc_stop-sleeping-on-tables.patch
index d60e950..eb3dc41 100644
--- a/jc_stop-sleeping-on-tables.patch
+++ b/jc_stop-sleeping-on-tables.patch
@@ -1,6 +1,6 @@
---- a/src/character.cpp
-+++ b/src/character.cpp
-@@ -5328,20 +5328,24 @@
+--- a/src/character_functions.cpp
++++ b/src/character_functions.cpp
+@@ -215,20 +215,24 @@
}
}
// Not in a vehicle, start checking furniture/terrain/traps at this point in decreasing order
@@ -28,7 +28,7 @@
- comfort += 0 + trap_at_pos.comfort;
} else {
// Not a comfortable sleeping spot
- comfort -= g->m.move_cost( p );
+ comfort -= here.move_cost( p );
--- a/src/mapdata.h
+++ b/src/mapdata.h
@@ -407,7 +407,7 @@
diff --git a/npc-02_tacoma-update.patch b/npc-02_tacoma-update.patch
index 5d62332..5ae2622 100644
--- a/npc-02_tacoma-update.patch
+++ b/npc-02_tacoma-update.patch
@@ -184,177 +184,3 @@
"responses": [ { "text": "Uhm.", "topic": "TALK_RANCH_ILL_1" } ]
}
]
---- a/data/json/npcs/tacoma_ranch/mission_mapgen_tacoma_commune.json
-+++ b/data/json/npcs/tacoma_ranch/mission_mapgen_tacoma_commune.json
-@@ -441,26 +441,26 @@
- "object": {
- "mapgensize": [ 20, 20 ],
- "rows": [
-- " ",
-- " ",
-- " ",
-- "........ .......",
-- "........ .......",
-- ".....................",
-- ".....................",
-- ".....................",
-- ".....................",
-- ".....................",
-- "........ .......",
-- " ",
-- " ",
-- " ",
-- " ",
-- " ",
-- " ",
-- " ",
-- " ",
-- " "
-+ " ",
-+ " ",
-+ " ",
-+ "........ .......",
-+ "........ .......",
-+ "....................",
-+ "....................",
-+ "....................",
-+ "....................",
-+ "....................",
-+ "........ .......",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " "
- ],
- "terrain": { ".": "t_dirt" }
- }
-@@ -554,7 +554,6 @@
- " ",
- " ",
- " ",
-- " ",
- " "
- ],
- "terrain": { "w": "t_wall", ".": "t_floor", "+": "t_door_c", "[": "t_window_boarded_noglass", "c": "t_floor", "t": "t_floor" },
-@@ -617,22 +616,22 @@
- "object": {
- "mapgensize": [ 16, 16 ],
- "rows": [
-- "wwwwww ",
-- "w....wwwwwwwwwww ",
-- "w....w.........w ",
-- "w..............w ",
-- "w....w.........w ",
-- "wwwwww.........w ",
-- " w.........w ",
-- " ..........w ",
-- " w.........w ",
-- " www.....www ",
-- " w.....w ",
-- " w.....w ",
-- " w...... ",
-- " w.....w ",
-- " wwwwwww ",
-- " "
-+ "wwwwww ",
-+ "w....wwwwwwwwwww",
-+ "w....w.........w",
-+ "w..............w",
-+ "w....w.........w",
-+ "wwwwww.........w",
-+ " w.........w",
-+ " ..........w",
-+ " w.........w",
-+ " www.....www",
-+ " w.....w ",
-+ " w.....w ",
-+ " w...... ",
-+ " w.....w ",
-+ " wwwwwww ",
-+ " "
- ],
- "terrain": { "w": "t_wall_half", ".": "t_dirt" }
- }
-@@ -644,22 +643,22 @@
- "object": {
- "mapgensize": [ 16, 16 ],
- "rows": [
-- "wwwwww ",
-- "w....wwww000wwww ",
-- "0....w.........w ",
-- "0..............w ",
-- "w....w.........0 ",
-- "wwwwww.........0 ",
-- " w.........w ",
-- " ..........w ",
-- " w.........w ",
-- " www.....www ",
-- " w.....w ",
-- " w.....w ",
-- " 0...... ",
-- " w.....w ",
-- " wwwwwww ",
-- " "
-+ "wwwwww ",
-+ "w....wwww000wwww",
-+ "0....w.........w",
-+ "0..............w",
-+ "w....w.........0",
-+ "wwwwww.........0",
-+ " w.........w",
-+ " ..........w",
-+ " w.........w",
-+ " www.....www",
-+ " w.....w ",
-+ " w.....w ",
-+ " 0...... ",
-+ " w.....w ",
-+ " wwwwwww ",
-+ " "
- ],
- "terrain": { "w": "t_wall", ".": "t_dirtfloor", "0": "t_window_frame" }
- }
-@@ -671,22 +670,22 @@
- "object": {
- "mapgensize": [ 16, 16 ],
- "rows": [
-- "wwwwww ",
-- "w....wwww[[[wwww ",
-- "[....w........rw ",
-- "[.............rw ",
-- "w....w..cc.cc.r[ ",
-- "wwwwww..cc.cc.r[ ",
-- " w..cc.cc.rw ",
-- " +..cc.cc.rw ",
-- " w........rw ",
-- " www.....www ",
-- " w.....w ",
-- " w..c..w ",
-- " [..c..+ ",
-- " w..c..w ",
-- " wwwwwww ",
-- " "
-+ "wwwwww ",
-+ "w....wwww[[[wwww",
-+ "[....w........rw",
-+ "[.............rw",
-+ "w....w..cc.cc.r[",
-+ "wwwwww..cc.cc.r[",
-+ " w..cc.cc.rw",
-+ " +..cc.cc.rw",
-+ " w........rw",
-+ " www.....www",
-+ " w.....w ",
-+ " w..c..w ",
-+ " [..c..+ ",
-+ " w..c..w ",
-+ " wwwwwww ",
-+ " "
- ],
- "terrain": {
- "w": "t_wall",
diff --git a/revert-01_removed-traits.patch b/revert-01_removed-traits.patch
index cfe8c5d..fd5b772 100644
--- a/revert-01_removed-traits.patch
+++ b/revert-01_removed-traits.patch
@@ -48,26 +48,31 @@
{
"type": "trait_group",
---- a/src/player.cpp
-+++ b/src/player.cpp
-@@ -84,6 +84,7 @@
- static const activity_id ACT_READ( "ACT_READ" );
+--- a/src/character_turn.cpp
++++ b/src/character_turn.cpp
+@@ -42,6 +42,7 @@
+ static const trait_id trait_FAT( "FAT" );
+ static const trait_id trait_FELINE_FUR( "FELINE_FUR" );
+ static const trait_id trait_FUR( "FUR" );
++static const trait_id trait_INFIMMUNE( "INFIMMUNE" );
+ static const trait_id trait_INSECT_ARMS_OK( "INSECT_ARMS_OK" );
+ static const trait_id trait_INSECT_ARMS( "INSECT_ARMS" );
+ static const trait_id trait_LIGHTFUR( "LIGHTFUR" );
+@@ -60,6 +61,7 @@
+ static const trait_id trait_WHISKERS_RAT( "WHISKERS_RAT" );
+ static const trait_id trait_WHISKERS( "WHISKERS" );
- static const efftype_id effect_adrenaline( "adrenaline" );
+static const efftype_id effect_bite( "bite" );
- static const efftype_id effect_blind( "blind" );
static const efftype_id effect_bloodworms( "bloodworms" );
- static const efftype_id effect_boomered( "boomered" );
-@@ -93,14 +94,16 @@
- static const efftype_id effect_drunk( "drunk" );
+ static const efftype_id effect_brainworms( "brainworms" );
+ static const efftype_id effect_darkness( "darkness" );
+@@ -69,11 +71,13 @@
static const efftype_id effect_fungus( "fungus" );
static const efftype_id effect_happy( "happy" );
-+static const efftype_id effect_infected( "infected" );
static const efftype_id effect_irradiated( "irradiated" );
++static const efftype_id effect_infected( "infected" );
static const efftype_id effect_masked_scent( "masked_scent" );
- static const efftype_id effect_meth( "meth" );
static const efftype_id effect_narcosis( "narcosis" );
- static const efftype_id effect_nausea( "nausea" );
static const efftype_id effect_onfire( "onfire" );
static const efftype_id effect_paincysts( "paincysts" );
static const efftype_id effect_pkill( "pkill" );
@@ -75,15 +80,7 @@
static const efftype_id effect_sad( "sad" );
static const efftype_id effect_sleep_deprived( "sleep_deprived" );
static const efftype_id effect_sleep( "sleep" );
-@@ -125,6 +128,7 @@
- static const trait_id trait_FAT( "FAT" );
- static const trait_id trait_FELINE_FUR( "FELINE_FUR" );
- static const trait_id trait_FUR( "FUR" );
-+static const trait_id trait_INFIMMUNE( "INFIMMUNE" );
- static const trait_id trait_INSECT_ARMS( "INSECT_ARMS" );
- static const trait_id trait_INSECT_ARMS_OK( "INSECT_ARMS_OK" );
- static const trait_id trait_INSOMNIA( "INSOMNIA" );
-@@ -1660,6 +1664,12 @@
+@@ -566,6 +570,12 @@
remove_effect( effect_tapeworm );
add_msg_if_player( m_good, _( "Your bowels gurgle as something inside them dies." ) );
}
diff --git a/revert-09_undo-yet-more-ammo-balancing.patch b/revert-09_undo-yet-more-ammo-balancing.patch
new file mode 100644
index 0000000..0b64fcf
--- /dev/null
+++ b/revert-09_undo-yet-more-ammo-balancing.patch
@@ -0,0 +1,744 @@
+From 30517b3811fa707a3dcfb0849efb0cfd4977c98d Mon Sep 17 00:00:00 2001
+From: Chaosvolt <chaosvolt@users.noreply.github.com>
+Date: Mon, 12 Dec 2022 08:08:09 -0600
+Subject: [PATCH 148/177] Ammo rebalance project, part 7 (#2121)
+
+* [WIP] Ammo rebalance project, part 7
+
+* Typofix
+
+Doi
+
+* Update 40x46mm, casing description stuff
+
+* And do 40x53mm
+
+* Obsolete/migrate redundant 8mm ammo
+
+* Re-add comment that got ate by merge conflict fix
+
+* Updates per feedback
+---
+ .../itemgroups/Weapons_Mods_Ammo/ammo.json | 1 -
+ data/json/itemgroups/military.json | 4 +-
+ data/json/items/ammo/20x66mm.json | 6 +-
+ data/json/items/ammo/40x46mm.json | 57 ++++++++-----------
+ data/json/items/ammo/40x53mm.json | 29 +++-------
+ data/json/items/ammo/5x50.json | 8 ++-
+ data/json/items/ammo/8x40mm.json | 23 ++++----
+ data/json/items/ammo/flintlock.json | 5 +-
+ data/json/items/ammo/shot.json | 10 ++--
+ data/json/items/ammo/shotpaper.json | 2 +-
+ data/json/items/generic/casing.json | 8 +--
+ data/json/items/handloaded_bullets.json | 8 ++-
+ data/json/items/migration.json | 15 +++++
+ data/json/obsoletion/recipes.json | 10 ++++
+ data/json/professions.json | 4 +-
+ data/json/recipes/ammo/shot.json | 4 +-
+ .../blacklists/item_blacklist.json | 1 -
+ .../Generic_Guns/ammo/gg_ammo_migration.json | 3 -
+ .../Generic_Guns/recipes/recipe_obsolete.json | 7 +--
+ data/mods/No_Rivtech_Guns/modinfo.json | 1 -
+ .../more_classes_scenarios/cs_classes.json | 6 +-
+ doc/GAME_BALANCE.md | 6 +-
+ 22 files changed, 110 insertions(+), 108 deletions(-)
+
+diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/ammo.json b/data/json/itemgroups/Weapons_Mods_Ammo/ammo.json
+index c10de498fb4..63682ca9ef1 100644
+--- a/data/json/itemgroups/Weapons_Mods_Ammo/ammo.json
++++ b/data/json/itemgroups/Weapons_Mods_Ammo/ammo.json
+@@ -246,7 +246,6 @@
+ { "item": "762_51_incendiary", "prob": 10 },
+ { "item": "762_51", "prob": 40 },
+ { "item": "8mm_caseless", "prob": 30 },
+- { "item": "8mm_fmj", "prob": 30 },
+ { "item": "8mm_hvp", "prob": 10 },
+ { "item": "8mm_inc", "prob": 20 },
+ { "item": "8mm_jhp", "prob": 10 },
+diff --git a/data/json/itemgroups/military.json b/data/json/itemgroups/military.json
+index 67766ba566a..8f564eb87aa 100644
+--- a/data/json/itemgroups/military.json
++++ b/data/json/itemgroups/military.json
+@@ -226,7 +226,7 @@
+ { "item": "8mm_caseless", "prob": 2 },
+ { "item": "rm99_pistol", "prob": 1 },
+ { "item": "8mm_jhp", "prob": 2 },
+- { "item": "8mm_fmj", "prob": 2 },
++ { "item": "8mm_hvp", "prob": 2 },
+ { "item": "laser_rifle", "prob": 1 },
+ { "item": "rm103a_pistol", "prob": 1 },
+ { "item": "laser_sight", "prob": 15 },
+@@ -388,7 +388,7 @@
+ { "item": "50_mk211", "prob": 1 },
+ { "item": "50ss", "prob": 8 },
+ { "item": "50_incendiary", "prob": 8 },
+- { "item": "8mm_fmj", "prob": 6 },
++ { "item": "8mm_jhp", "prob": 6 },
+ { "item": "8mm_inc", "prob": 6 },
+ { "item": "8mm_caseless", "prob": 6 },
+ { "item": "m202_flash", "prob": 15 },
+diff --git a/data/json/items/ammo/20x66mm.json b/data/json/items/ammo/20x66mm.json
+index 8acdf92f7af..51999520c8b 100644
+--- a/data/json/items/ammo/20x66mm.json
++++ b/data/json/items/ammo/20x66mm.json
+@@ -84,7 +84,8 @@
+ "price_postapoc": 4000,
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "count": 10,
+- "relative": { "damage": { "damage_type": "bullet", "amount": -10, "armor_penetration": 20 } }
++ "//": "Balanced as AP.",
++ "relative": { "damage": { "damage_type": "bullet", "amount": -18, "armor_penetration": 36 } }
+ },
+ {
+ "id": "20x66_frag",
+@@ -142,7 +143,8 @@
+ "price": 1500,
+ "price_postapoc": 4000,
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+- "damage": { "damage_type": "bullet", "amount": 39, "armor_penetration": 8 },
++ "//": "Balanced as FMJ",
++ "damage": { "damage_type": "bullet", "amount": 48, "armor_penetration": 21 },
+ "relative": { "range": 12 },
+ "proportional": { "dispersion": 1.3 },
+ "delete": { "effects": [ "SHOT" ] }
+diff --git a/data/json/items/ammo/40x46mm.json b/data/json/items/ammo/40x46mm.json
+index 530278fd5d8..352b67d154c 100644
+--- a/data/json/items/ammo/40x46mm.json
++++ b/data/json/items/ammo/40x46mm.json
+@@ -22,7 +22,7 @@
+ "id": "40x46mm_m1006",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm M1006" },
++ "name": { "str": "40x46mm M1006 stun" },
+ "description": "A low velocity less-lethal 40x46mm round with a foam and plastic projectile intended to cause pain and disorientation to the target. May still injure or kill.",
+ "weight": "68 g",
+ "damage": { "damage_type": "bash", "amount": 20 },
+@@ -33,7 +33,7 @@
+ "id": "40x46mm_m433",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm M433" },
++ "name": { "str": "40x46mm M433 HEDP" },
+ "description": "A low velocity 40x46mm HEDP grenade. It can penetrate 2 inches of steel armor and fragmentation of the projectile body also makes it suitable for use against infantry.",
+ "weight": "230 g",
+ "damage": { "damage_type": "bullet", "amount": 200, "armor_penetration": 30 },
+@@ -44,11 +44,11 @@
+ "id": "40x46mm_m576",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm M576" },
++ "name": { "str": "40x46mm M576 buckshot" },
+ "description": "A 40x46mm buckshot load, designed for use in thick vegetation or room clearing.",
+ "weight": "120 g",
+ "range": 12,
+- "damage": { "damage_type": "bullet", "amount": 120, "armor_penetration": 4 },
++ "damage": { "damage_type": "bullet", "amount": 120 },
+ "recoil": 1000,
+ "casing": "40x46mm_m199_casing",
+ "extend": { "effects": [ "SHOT" ] }
+@@ -57,7 +57,7 @@
+ "id": "40x46mm_m651",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm M651" },
++ "name": { "str": "40x46mm M651 teargas" },
+ "description": "A low velocity 40mm tear gas canister. It is effective for riot control and driving infantry from entrenched positions",
+ "weight": "290 g",
+ "damage": { "damage_type": "bullet", "amount": 15 },
+@@ -69,37 +69,25 @@
+ "id": "40x46mm_buckshot_m118",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm buckshot" },
+- "description": "An improvised 40x46mm buckshot load somewhat resembling M576.",
++ "name": { "str": "improvised 40x46mm buckshot" },
++ "description": "An improvised 40x46mm buckshot load somewhat resembling M576. Aside from using the M118 casing normally used by HEDP shells, it performs as well as buckshot loads using the intended M199 casing.",
+ "weight": "120 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 90, "armor_penetration": 4 },
++ "damage": { "damage_type": "bullet", "amount": 120 },
+ "recoil": 1000,
+ "casing": "40x46mm_m118_casing",
+ "extend": { "effects": [ "SHOT" ] }
+ },
+- {
+- "id": "40x46mm_buckshot_m199",
+- "copy-from": "40x46mm_grenade",
+- "type": "AMMO",
+- "name": { "str": "40x46mm buckshot" },
+- "description": "An improvised 40x46mm buckshot load somewhat resembling M576.",
+- "weight": "120 g",
+- "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 90, "armor_penetration": 4 },
+- "recoil": 1000,
+- "casing": "40x46mm_m199_casing",
+- "extend": { "effects": [ "SHOT" ] }
+- },
+ {
+ "id": "40x46mm_slug_m118",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm slug" },
+- "description": "An improvised 40x46mm load resembling an oversized shotgun slug.",
++ "name": { "str": "improvised 40x46mm slug" },
++ "description": "An improvised 40x46mm load resembling an oversized shotgun slug. Aside from using the M118 casing normally used by HEDP shells, it performs as well as slugs using the M199 casing.",
+ "weight": "120 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 120, "armor_penetration": 6 },
++ "//": "Balanced as FMJ.",
++ "damage": { "damage_type": "bullet", "amount": 96, "armor_penetration": 42 },
+ "recoil": 1000,
+ "casing": "40x46mm_m118_casing"
+ },
+@@ -107,11 +95,12 @@
+ "id": "40x46mm_slug_m199",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm slug" },
+- "description": "An improvised 40x46mm load resembling an oversized shotgun slug.",
++ "name": { "str": "improvised 40x46mm slug" },
++ "description": "An improvised 40x46mm load resembling an oversized shotgun slug, loaded into the M199 casing used by M576 buckshot shells.",
+ "weight": "120 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 120, "armor_penetration": 6 },
++ "//": "Balanced as FMJ.",
++ "damage": { "damage_type": "bullet", "amount": 96, "armor_penetration": 42 },
+ "recoil": 1000,
+ "casing": "40x46mm_m199_casing"
+ },
+@@ -119,11 +108,12 @@
+ "id": "40x46mm_flechette_m118",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm flechette" },
+- "description": "An improvised 40x46mm flechette load containing 70 steel darts.",
++ "name": { "str": "improvised 40x46mm flechette" },
++ "description": "An improvised 40x46mm flechette load containing 70 steel darts. Aside from using the M118 casing normally used by HEDP shells, it performs as well as flechette shells using the M199 casing.",
+ "weight": "120 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 75, "armor_penetration": 6 },
++ "//": "Balanced as AP.",
++ "damage": { "damage_type": "bullet", "amount": 84, "armor_penetration": 72 },
+ "recoil": 1000,
+ "casing": "40x46mm_m118_casing",
+ "extend": { "effects": [ "SHOT" ] }
+@@ -132,11 +122,12 @@
+ "id": "40x46mm_flechette_m199",
+ "copy-from": "40x46mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x46mm flechette" },
+- "description": "An improvised 40x46mm flechette load containing 70 steel darts.",
++ "name": { "str": "improvised 40x46mm flechette" },
++ "description": "An improvised 40x46mm flechette load containing 70 steel darts, loaded into the M199 casing used by M576 buckshot shells.",
+ "weight": "120 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 75, "armor_penetration": 6 },
++ "//": "Balanced as AP.",
++ "damage": { "damage_type": "bullet", "amount": 84, "armor_penetration": 72 },
+ "recoil": 1000,
+ "casing": "40x46mm_m199_casing",
+ "extend": { "effects": [ "SHOT" ] }
+diff --git a/data/json/items/ammo/40x53mm.json b/data/json/items/ammo/40x53mm.json
+index 4541de0dab2..aeb0d2e732e 100644
+--- a/data/json/items/ammo/40x53mm.json
++++ b/data/json/items/ammo/40x53mm.json
+@@ -22,11 +22,12 @@
+ "id": "40x53mm_m1001",
+ "copy-from": "40x53mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x53mm M1001" },
++ "name": { "str": "40x53mm M1001 flechette" },
+ "description": "40x53mm canister shot loaded with 17 grain flechettes.",
+ "weight": "340 g",
+ "volume": "137 ml",
+- "damage": { "damage_type": "bullet", "amount": 150, "armor_penetration": 10 },
++ "//": "Balanced as AP.",
++ "damage": { "damage_type": "bullet", "amount": 91, "armor_penetration": 78 },
+ "recoil": 1000,
+ "casing": "40x53mm_m169_casing",
+ "extend": { "effects": [ "SHOT" ] }
+@@ -35,7 +36,7 @@
+ "id": "40x53mm_m430a1",
+ "copy-from": "40x53mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x53mm M430A1" },
++ "name": { "str": "40x53mm M430A1 HEDP" },
+ "description": "A high velocity 40x53mm HEDP grenade. It can penetrate 3 inches of steel armor and fragmentation of the projectile body also makes it suitable for use against infantry.",
+ "weight": "340 g",
+ "volume": "132 ml",
+@@ -47,11 +48,11 @@
+ "id": "40x53mm_buckshot_m169",
+ "copy-from": "40x53mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x53mm buckshot" },
++ "name": { "str": "improvised 40x53mm buckshot" },
+ "description": "An improvised 40x53mm buckshot load somewhat resembling M576.",
+ "weight": "340 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 100, "armor_penetration": 4 },
++ "damage": { "damage_type": "bullet", "amount": 130 },
+ "recoil": 1200,
+ "casing": "40x53mm_m169_casing",
+ "extend": { "effects": [ "SHOT" ] }
+@@ -60,25 +61,13 @@
+ "id": "40x53mm_slug_m169",
+ "copy-from": "40x53mm_grenade",
+ "type": "AMMO",
+- "name": { "str": "40x53mm slug" },
++ "name": { "str": "improvised 40x53mm slug" },
+ "description": "An improvised 40x53mm load resembling an oversized shotgun slug.",
+ "weight": "340 g",
+ "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 130, "armor_penetration": 6 },
++ "//": "Balanced as FMJ.",
++ "damage": { "damage_type": "bullet", "amount": 104, "armor_penetration": 46 },
+ "recoil": 1200,
+ "casing": "40x53mm_m169_casing"
+- },
+- {
+- "id": "40x53mm_flechette_m169",
+- "copy-from": "40x53mm_grenade",
+- "type": "AMMO",
+- "name": { "str": "40x53mm flechette" },
+- "description": "An improvised 40x53mm flechette load containing 100 steel darts.",
+- "weight": "340 g",
+- "range": 10,
+- "damage": { "damage_type": "bullet", "amount": 85, "armor_penetration": 6 },
+- "recoil": 1200,
+- "casing": "40x53mm_m169_casing",
+- "extend": { "effects": [ "SHOT" ] }
+ }
+ ]
+diff --git a/data/json/items/ammo/5x50.json b/data/json/items/ammo/5x50.json
+index efd00754091..49ba3eb858e 100644
+--- a/data/json/items/ammo/5x50.json
++++ b/data/json/items/ammo/5x50.json
+@@ -15,7 +15,8 @@
+ "ammo_type": "5x50",
+ "casing": "5x50_hull",
+ "range": 60,
+- "damage": { "damage_type": "bullet", "amount": 20, "armor_penetration": 30 },
++ "//": "Balanced as AP",
++ "damage": { "damage_type": "bullet", "amount": 30, "armor_penetration": 26 },
+ "dispersion": 60,
+ "recoil": 400,
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+@@ -31,7 +32,8 @@
+ "weight": "9 g",
+ "price": 1688,
+ "price_postapoc": 2400,
+- "relative": { "range": -10, "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 20 }, "dispersion": 20 },
+- "proportional": { "recoil": 1.1 }
++ "//": "Balanced as AP, with 25% higher damage and 50% higher arpen",
++ "relative": { "range": -10, "damage": { "damage_type": "bullet", "amount": 8, "armor_penetration": 13 } },
++ "proportional": { "dispersion": 1.5, "recoil": 1.5 }
+ }
+ ]
+diff --git a/data/json/items/ammo/8x40mm.json b/data/json/items/ammo/8x40mm.json
+index 25d9b16a37b..8ca62a1bfb3 100644
+--- a/data/json/items/ammo/8x40mm.json
++++ b/data/json/items/ammo/8x40mm.json
+@@ -27,7 +27,7 @@
+ "stack_size": 40,
+ "ammo_type": "8x40mm",
+ "range": 42,
+- "damage": { "damage_type": "bullet", "amount": 42, "armor_penetration": 18 },
++ "damage": { "damage_type": "bullet", "amount": 45, "armor_penetration": 25 },
+ "dispersion": 75,
+ "recoil": 2200,
+ "effects": [ "NEVER_MISFIRES" ]
+@@ -39,15 +39,12 @@
+ "name": { "str": "8x40mm sporting" },
+ "description": "8x40mm caseless rounds, light sporting load sold for civilian use. Proprietary ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.",
+ "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] },
+- "proportional": { "price": 0.8, "damage": { "damage_type": "bullet", "amount": 0.5 }, "dispersion": 1.2, "recoil": 0.5 }
+- },
+- {
+- "id": "8mm_fmj",
+- "copy-from": "8mm_caseless",
+- "type": "AMMO",
+- "name": { "str": "8x40mm FMJ" },
+- "description": "8x40mm caseless rounds, full metal jacket. Military grade ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.",
+- "relative": { "damage": { "damage_type": "bullet", "amount": -5, "armor_penetration": 10 } }
++ "proportional": {
++ "price": 0.8,
++ "damage": { "damage_type": "bullet", "amount": 0.5, "armor_penetration": 0.5 },
++ "dispersion": 1.2,
++ "recoil": 0.5
++ }
+ },
+ {
+ "id": "8mm_hvp",
+@@ -58,7 +55,9 @@
+ "price": 2500,
+ "price_postapoc": 50000,
+ "count": 20,
+- "relative": { "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": 20 } }
++ "//": "Balanced as AP, with 25% higher damage and 50% higher arpen",
++ "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 34 } },
++ "proportional": { "dispersion": 1.5, "recoil": 1.5 }
+ },
+ {
+ "id": "8mm_inc",
+@@ -76,6 +75,6 @@
+ "type": "AMMO",
+ "name": { "str": "8x40mm JHP" },
+ "description": "8x40mm caseless rounds, jacketed hollowpoint. Military grade ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.",
+- "relative": { "damage": { "damage_type": "bullet", "amount": 5, "armor_penetration": -10 } }
++ "relative": { "damage": { "damage_type": "bullet", "amount": 11, "armor_penetration": -22 } }
+ }
+ ]
+diff --git a/data/json/items/ammo/flintlock.json b/data/json/items/ammo/flintlock.json
+index f7fc54e73da..c51ab370e4a 100644
+--- a/data/json/items/ammo/flintlock.json
++++ b/data/json/items/ammo/flintlock.json
+@@ -15,7 +15,8 @@
+ "stack_size": 10,
+ "ammo_type": "flintlock",
+ "range": 6,
+- "damage": { "damage_type": "bullet", "amount": 50 },
++ "//": "Balanced as FMJ",
++ "damage": { "damage_type": "bullet", "amount": 50, "armor_penetration": 22 },
+ "dispersion": 90,
+ "recoil": 1500,
+ "loudness": 70,
+@@ -37,7 +38,7 @@
+ "stack_size": 10,
+ "ammo_type": "flintlock",
+ "range": 4,
+- "damage": { "damage_type": "bullet", "amount": 45 },
++ "damage": { "damage_type": "bullet", "amount": 63 },
+ "dispersion": 20,
+ "recoil": 1500,
+ "loudness": 90,
+diff --git a/data/json/items/ammo/shot.json b/data/json/items/ammo/shot.json
+index 619ab4ab64c..351347b7fc6 100644
+--- a/data/json/items/ammo/shot.json
++++ b/data/json/items/ammo/shot.json
+@@ -30,7 +30,7 @@
+ "copy-from": "shot_flechette",
+ "type": "AMMO",
+ "name": { "str": "flechette shell, black powder" },
+- "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 },
++ "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8, "armor_penetration": 0.8 }, "dispersion": 1.2 },
+ "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] },
+ "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] }
+ },
+@@ -39,7 +39,7 @@
+ "copy-from": "shot_slug",
+ "type": "AMMO",
+ "name": { "str": "shotgun slug, black powder" },
+- "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8 }, "dispersion": 1.2 },
++ "proportional": { "price": 0.6, "damage": { "damage_type": "bullet", "amount": 0.8, "armor_penetration": 0.8 }, "dispersion": 1.2 },
+ "extend": { "effects": [ "RECYCLED", "MUZZLE_SMOKE", "BLACKPOWDER" ] },
+ "delete": { "effects": [ "NEVER_MISFIRES" ], "flags": [ "IRREPLACEABLE_CONSUMABLE" ] }
+ },
+@@ -123,7 +123,8 @@
+ "price_postapoc": 800,
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "count": 10,
+- "relative": { "damage": { "damage_type": "bullet", "amount": -6, "armor_penetration": 12 } }
++ "//": "Balanced as standard AP.",
++ "relative": { "damage": { "damage_type": "bullet", "amount": -15, "armor_penetration": 30 } }
+ },
+ {
+ "id": "shot_he",
+@@ -168,7 +169,8 @@
+ "price_postapoc": 400,
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "dispersion": 100,
+- "relative": { "range": 12, "damage": { "damage_type": "bullet", "armor_penetration": 6 } },
++ "//": "Balanced as FMJ",
++ "relative": { "range": 12, "damage": { "damage_type": "bullet", "amount": -10, "armor_penetration": 18 } },
+ "proportional": { "recoil": 1.4 },
+ "delete": { "effects": [ "SHOT" ] }
+ }
+diff --git a/data/json/items/ammo/shotpaper.json b/data/json/items/ammo/shotpaper.json
+index f9915b9cf2e..40ec4081298 100644
+--- a/data/json/items/ammo/shotpaper.json
++++ b/data/json/items/ammo/shotpaper.json
+@@ -44,7 +44,7 @@
+ "type": "AMMO",
+ "name": { "str": ".62 paper cartridge" },
+ "description": "A paper cartridge containing a premeasured amount of black powder and a .605 inch lead ball.",
+- "relative": { "range": 12, "damage": { "damage_type": "bullet", "armor_penetration": 4 } },
++ "relative": { "range": 12, "damage": { "damage_type": "bullet", "amount": -8, "armor_penetration": 14 } },
+ "delete": { "effects": [ "SHOT" ] },
+ "dispersion": 100
+ }
+diff --git a/data/json/items/generic/casing.json b/data/json/items/generic/casing.json
+index 510b4ba9c1f..f486ad3126a 100644
+--- a/data/json/items/generic/casing.json
++++ b/data/json/items/generic/casing.json
+@@ -148,7 +148,7 @@
+ "type": "GENERIC",
+ "category": "spare_parts",
+ "name": { "str": "40x46mm M212 casing" },
+- "description": "A large canister from a spent 40mm cartridge.",
++ "description": "A large canister from a spent 40mm cartridge, used by M1006 stun rounds. Not very useful now that the world has ended; less-lethal rounds aren't very useful against undead, and it likely won't tolerate higher pressures.",
+ "weight": "50 g",
+ "volume": "55ml",
+ "material": "steel",
+@@ -160,7 +160,7 @@
+ "type": "GENERIC",
+ "category": "spare_parts",
+ "name": { "str": "40x46mm M118 casing" },
+- "description": "A large canister from a spent 40mm cartridge.",
++ "description": "A large canister from a spent 40mm cartridge, used by M433 HEDP rounds. It could be repurposed for makeshift buckshot and other handloads.",
+ "weight": "50 g",
+ "volume": "58ml",
+ "material": "steel",
+@@ -172,7 +172,7 @@
+ "type": "GENERIC",
+ "category": "spare_parts",
+ "name": { "str": "40x46mm M199 casing" },
+- "description": "A large canister from a spent 40mm cartridge.",
++ "description": "A large canister from a spent 40mm cartridge, used by M576 buckshot rounds. It could be reused to make new buckshot or other makeshift handloads.",
+ "weight": "50 g",
+ "volume": "59ml",
+ "material": "steel",
+@@ -184,7 +184,7 @@
+ "type": "GENERIC",
+ "category": "spare_parts",
+ "name": { "str": "40x46mm M195 casing" },
+- "description": "A large canister from a spent 40mm cartridge.",
++ "description": "A large canister from a spent 40mm cartridge, used by M651 teargas rounds. Not very useful now that the world has ended; less-lethal rounds aren't very useful against undead, and it likely won't tolerate higher pressures.",
+ "weight": "50 g",
+ "volume": "45ml",
+ "material": "steel",
+diff --git a/data/json/items/handloaded_bullets.json b/data/json/items/handloaded_bullets.json
+index 1d6da22013b..937239328dd 100644
+--- a/data/json/items/handloaded_bullets.json
++++ b/data/json/items/handloaded_bullets.json
+@@ -13,7 +13,8 @@
+ "weight": "3 g",
+ "bashing": 1,
+ "ammo_type": "blunderbuss",
+- "damage": { "damage_type": "bullet", "amount": 60, "armor_penetration": 8 },
++ "//": "Half the expected armor pernetration, additionally all blinderbuss rounds have an armor multiplier.",
++ "damage": { "damage_type": "bullet", "amount": 44, "armor_penetration": 12, "armor_multiplier": 1.5 },
+ "range": 12,
+ "dispersion": 60,
+ "recoil": 840,
+@@ -33,7 +34,7 @@
+ "weight": "2 g",
+ "bashing": 1,
+ "ammo_type": "blunderbuss",
+- "damage": { "damage_type": "bullet", "amount": 60 },
++ "damage": { "damage_type": "bullet", "amount": 55, "armor_multiplier": 1.5 },
+ "range": 6,
+ "recoil": 780,
+ "effects": [ "COOKOFF", "SHOT", "RECYCLED" ]
+@@ -52,7 +53,8 @@
+ "weight": "3 g",
+ "bashing": 1,
+ "ammo_type": "blunderbuss",
+- "damage": { "damage_type": "bullet", "amount": 53, "armor_penetration": 12 },
++ "//": "Balanced as standard FMJ to allow lower damage but more penetration over shot.",
++ "damage": { "damage_type": "bullet", "amount": 44, "armor_penetration": 24, "armor_multiplier": 1.5 },
+ "range": 10,
+ "recoil": 840,
+ "effects": [ "COOKOFF", "SHOT", "RECYCLED" ]
+diff --git a/data/json/items/migration.json b/data/json/items/migration.json
+index ed67da394f0..31158a8187c 100644
+--- a/data/json/items/migration.json
++++ b/data/json/items/migration.json
+@@ -1740,5 +1740,20 @@
+ "id": "rubber_armor_horse",
+ "type": "MIGRATION",
+ "replace": "rubber_armor_medium_quadruped"
++ },
++ {
++ "id": "40x46mm_buckshot_m199",
++ "type": "MIGRATION",
++ "replace": "40x46mm_m576"
++ },
++ {
++ "id": "40x53mm_flechette_m169",
++ "type": "MIGRATION",
++ "replace": "40x53mm_m1001"
++ },
++ {
++ "id": "8mm_fmj",
++ "type": "MIGRATION",
++ "replace": "8mm_caseless"
+ }
+ ]
+diff --git a/data/json/obsoletion/recipes.json b/data/json/obsoletion/recipes.json
+index c0c56cead36..8e1335380e2 100644
+--- a/data/json/obsoletion/recipes.json
++++ b/data/json/obsoletion/recipes.json
+@@ -3147,5 +3147,15 @@
+ "type": "recipe",
+ "result": "rubber_armor_horse_from_scratch",
+ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "40x46mm_buckshot_m199",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "40x53mm_flechette_m169",
++ "obsolete": true
+ }
+ ]
+diff --git a/data/json/professions.json b/data/json/professions.json
+index cd30799fa83..f84f94b6d33 100644
+--- a/data/json/professions.json
++++ b/data/json/professions.json
+@@ -45,8 +45,8 @@
+ "subtype": "collection",
+ "id": "army_mags_rm11b",
+ "entries": [
+- { "item": "8x40_10_mag", "ammo-item": "8mm_fmj", "charges": 10 },
+- { "item": "8x40_10_mag", "ammo-item": "8mm_fmj", "charges": 10 }
++ { "item": "8x40_10_mag", "ammo-item": "8mm_caseless", "charges": 10 },
++ { "item": "8x40_10_mag", "ammo-item": "8mm_caseless", "charges": 10 }
+ ]
+ },
+ {
+diff --git a/data/json/recipes/ammo/shot.json b/data/json/recipes/ammo/shot.json
+index 80a7881ea64..27b7bb17832 100644
+--- a/data/json/recipes/ammo/shot.json
++++ b/data/json/recipes/ammo/shot.json
+@@ -149,7 +149,7 @@
+ ]
+ },
+ {
+- "result": "40x53mm_flechette_m169",
++ "result": "40x53mm_m1001",
+ "type": "recipe",
+ "category": "CC_AMMO",
+ "subcategory": "CSC_AMMO_SHOT",
+@@ -197,7 +197,7 @@
+ ]
+ },
+ {
+- "result": "40x46mm_buckshot_m199",
++ "result": "40x46mm_m576",
+ "type": "recipe",
+ "category": "CC_AMMO",
+ "subcategory": "CSC_AMMO_SHOT",
+diff --git a/data/mods/Dark-Skies-Above/blacklists/item_blacklist.json b/data/mods/Dark-Skies-Above/blacklists/item_blacklist.json
+index b3c43dcce30..5f4a73db8fa 100644
+--- a/data/mods/Dark-Skies-Above/blacklists/item_blacklist.json
++++ b/data/mods/Dark-Skies-Above/blacklists/item_blacklist.json
+@@ -26,7 +26,6 @@
+ "8mm_bootleg",
+ "8mm_caseless",
+ "8mm_civilian",
+- "8mm_fmj",
+ "8mm_inc",
+ "8mm_jhp",
+ "8x40_10_mag",
+diff --git a/data/mods/Generic_Guns/ammo/gg_ammo_migration.json b/data/mods/Generic_Guns/ammo/gg_ammo_migration.json
+index 675f5ba932d..8e61d596190 100644
+--- a/data/mods/Generic_Guns/ammo/gg_ammo_migration.json
++++ b/data/mods/Generic_Guns/ammo/gg_ammo_migration.json
+@@ -147,7 +147,6 @@
+ "556_incendiary",
+ "762_m43",
+ "8mm_caseless",
+- "8mm_fmj",
+ "8mm_hvp",
+ "8mm_inc",
+ "reloaded_556",
+@@ -260,11 +259,9 @@
+ "id": [
+ "40x46mm_m576",
+ "40x46mm_buckshot_m118",
+- "40x46mm_buckshot_m199",
+ "40x46mm_flechette_m118",
+ "40x46mm_flechette_m199",
+ "40x53mm_m1001",
+- "40x53mm_flechette_m169",
+ "40x53mm_buckshot_m169"
+ ],
+ "type": "MIGRATION",
+diff --git a/data/mods/Generic_Guns/recipes/recipe_obsolete.json b/data/mods/Generic_Guns/recipes/recipe_obsolete.json
+index e4e3796a108..8653252ae1d 100644
+--- a/data/mods/Generic_Guns/recipes/recipe_obsolete.json
++++ b/data/mods/Generic_Guns/recipes/recipe_obsolete.json
+@@ -366,7 +366,7 @@
+ },
+ {
+ "type": "recipe",
+- "result": "40x46mm_buckshot_m199",
++ "result": "40x46mm_m576",
+ "obsolete": true
+ },
+ {
+@@ -399,11 +399,6 @@
+ "result": "40x53mm_slug_m169",
+ "obsolete": true
+ },
+- {
+- "type": "recipe",
+- "result": "40x53mm_flechette_m169",
+- "obsolete": true
+- },
+ {
+ "type": "recipe",
+ "result": "shot_paper_00",
+diff --git a/data/mods/No_Rivtech_Guns/modinfo.json b/data/mods/No_Rivtech_Guns/modinfo.json
+index 716658fe996..983a1d1d2e4 100644
+--- a/data/mods/No_Rivtech_Guns/modinfo.json
++++ b/data/mods/No_Rivtech_Guns/modinfo.json
+@@ -14,7 +14,6 @@
+ "items": [
+ "8mm_caseless",
+ "8mm_bootleg",
+- "8mm_fmj",
+ "8mm_jhp",
+ "8mm_inc",
+ "5x50dart",
+diff --git a/data/mods/more_classes_scenarios/cs_classes.json b/data/mods/more_classes_scenarios/cs_classes.json
+index d10e81bd771..95a92381547 100644
+--- a/data/mods/more_classes_scenarios/cs_classes.json
++++ b/data/mods/more_classes_scenarios/cs_classes.json
+@@ -4,8 +4,8 @@
+ "subtype": "collection",
+ "id": "army_mags_rm2000",
+ "entries": [
+- { "item": "8x40_10_mag", "ammo-item": "8mm_fmj", "charges": 10 },
+- { "item": "8x40_10_mag", "ammo-item": "8mm_fmj", "charges": 10 }
++ { "item": "8x40_10_mag", "ammo-item": "8mm_caseless", "charges": 10 },
++ { "item": "8x40_10_mag", "ammo-item": "8mm_caseless", "charges": 10 }
+ ]
+ },
+ {
+@@ -53,7 +53,7 @@
+ { "item": "kukri", "container-item": "sheath" },
+ {
+ "item": "rm2000_smg",
+- "ammo-item": "8mm_fmj",
++ "ammo-item": "8mm_caseless",
+ "charges": 25,
+ "contents-item": [ "shoulder_strap", "suppressor", "holo_sight" ]
+ },
+diff --git a/doc/GAME_BALANCE.md b/doc/GAME_BALANCE.md
+index 966b2861ff3..5a51a530d5c 100644
+--- a/doc/GAME_BALANCE.md
++++ b/doc/GAME_BALANCE.md
+@@ -272,12 +272,12 @@ If the resulting base damage is below specific thresholds, apply one of three mu
+
+ For liminal cases where the base damage is 20, 30, or 40 there is room for discretion regarding which balance increase to apply, if any. Discretion should be exercised based on which solution makes that ammunition distinct from other ammunition of similar power, as having two different ammotypes with identical power should be avoided.
+
+-As for terminal ballistics, hollowpoints variant should be at least 25% more effective against a completely unarmored target, in order for the difference to be considered relevant. Conversely, the base FMJ variation should have a combined damage and armor penetration whose total is at least 25% greater than the damage of the hollowpoint variant. This recommendation will inform how much armor penetration the two variants should have. Armor-piercing variants have seven-eigths the damage of the standard FMJ variant, and a level of penetration identical to its damage.
++As for terminal ballistics, hollowpoints variant should be at least 25% more effective against a completely unarmored target, in order for the difference to be considered relevant. Conversely, the base FMJ variation should have a combined damage and armor penetration whose total is at least 15% greater than the damage of the hollowpoint variant. This recommendation will inform how much armor penetration the two variants should have. Armor-piercing variants have seven-eigths the damage of the standard FMJ variant, and enough penetration to make the combined value 30% higher than the damage of hollowpoint.
+
+ The relative combined damage plus armor penetration for each variant can likewise be summarized as follows:
+ 1. Hollowpoints are considered to have 100% combined damage (example: 100 damage, 0 arpen)
+-2. Standard/FMJ variants are considered to have 125% combined damage, 80% damage and 45% arpen (example: 80 damage, 45 arpen)
+-3. AP vairants are considered to have 140% combined damage, 70% damage and 70% arpen (example: 70 damage, 70 arpen)
++2. Standard/FMJ variants are considered to have 115% combined damage, 80% damage and 35% arpen (example: 80 damage, 35 arpen)
++3. AP variants are considered to have 130% combined damage, 70% damage and 60% arpen (example: 70 damage, 60 arpen)
+
+ # LIQUIDS:
+ Multi-charge items are weighed by the charge/use. If you have an item that contains 40 uses, it'll weigh 40x as much (when found in-game) as you entered in the JSON. Liquids are priced by the 250mL unit, but handled in containers. This can cause problems if you create something that comes in (say) a gallon jug (15 charges) and price it at the cost of a jug's worth: it'll be 15x as expensive as intended.
+--
+2.39.0
+