summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2024-04-09 12:41:03 -0700
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2024-04-09 12:41:03 -0700
commit73129732813573834acbb441513b8d43775584e8 (patch)
treeb21fa0279524f069d9e82b283b047edc2ada4761
parentUpdated default mods. (diff)
downloadcataclysm-bn-73129732813573834acbb441513b8d43775584e8.tar.xz
Updated to 0.6.0
Revert weapon mount obsoletion Revert nether healing being too obvious Fix meat scrap description Fix missing rebuilt recon laser recipe Add patch to nerf fungal blossom spawn rate
-rw-r--r--PKGBUILD102
-rw-r--r--faction-01_more-factions.patch81
-rw-r--r--foods-07_fix-meat-scrap-description.patch19
-rw-r--r--hotfix-01_fix-monsters-ignore-mechs-that-aren-t-being-piloted-.patch27
-rw-r--r--hotfix-02_fix-Prevents-reloading-from-deleting-containers-4104.patch63
-rw-r--r--hotfix-03_fix-Fix-overlapping-text-in-look-around.-4156.patch105
-rw-r--r--hotfix-04_fix-uaf-in-safe-references-4165.patch48
-rw-r--r--hotfix-05_feat-balance-closed-glass-windows-block-scent-4114.patch415
-rw-r--r--hotfix-06_fix-two-cases-of-NPCs-printing-messages-in-odd-conte.patch44
-rw-r--r--hotfix-07_fix-allow-card-readers-to-despawn-riot-turrets-too-4.patch36
-rw-r--r--hotfix-09_fix-NPCs-no-longer-magically-aware-of-explosives-the.patch28
-rw-r--r--npc-06_lapin-update.patch9
-rw-r--r--npc-09_broker-takes-more-foods.patch3
-rw-r--r--npc-10_bunker-merchant.patch6
-rw-r--r--npc-20_dialogue-fixes.patch9
-rw-r--r--recipes-02_recon-mech-laser-typo.patch20
-rw-r--r--revert-06_Obsolete-useless-hub01-basement-1457.patch21
-rw-r--r--revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch2
-rw-r--r--revert-30_feat-content-weapon-mount-obsoletion-part-1-4179.patch1957
-rw-r--r--revert-31_restore-vague-nether-healing.patch51
-rw-r--r--src-15_slow-down-fungal-blossoms.patch20
-rw-r--r--tools-04_normalize-drone-volume.patch56
-rw-r--r--vampirism.patch9
23 files changed, 2143 insertions, 988 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 7cb0950..c2fbede 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -15,10 +15,10 @@ pkgname=(cataclysm-bn cataclysm-bn-tiles)
pkgname=cataclysm-bn
#_pkgname=Cataclysm-BN-cbn
_pkgname=Cataclysm-BN
-pkgver=0.5.2
+pkgver=0.6.0
#pkgver=202310040030
#_pkgver=2023-10-04-0030
-pkgrel=6
+pkgrel=1
pkgdesc="A post-apocalyptic roguelike."
#url="http://cataclysmrl.blogspot.com/"
#url="http://www.cataclysm.glyphgryph.com/"
@@ -58,15 +58,9 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"revert-26_fix-npc-splints-and-clean-up-iterator-errors-3592.patch"
"revert-27_fix-NPCs-keep-their-splints-on-3589.patch"
"revert-28_feat-content-semi-plausible-smokeless-gunpowder-reci.patch"
-
- "hotfix-01_fix-monsters-ignore-mechs-that-aren-t-being-piloted-.patch"
- "hotfix-02_fix-Prevents-reloading-from-deleting-containers-4104.patch"
- "hotfix-03_fix-Fix-overlapping-text-in-look-around.-4156.patch"
- "hotfix-04_fix-uaf-in-safe-references-4165.patch"
- "hotfix-05_feat-balance-closed-glass-windows-block-scent-4114.patch"
- "hotfix-06_fix-two-cases-of-NPCs-printing-messages-in-odd-conte.patch"
- "hotfix-07_fix-allow-card-readers-to-despawn-riot-turrets-too-4.patch"
- "hotfix-09_fix-NPCs-no-longer-magically-aware-of-explosives-the.patch"
+ #"revert-29_feat-balance-port-Mainline-Nonperishable-Overhaul-s-.patch"
+ "revert-30_feat-content-weapon-mount-obsoletion-part-1-4179.patch"
+ "revert-31_restore-vague-nether-healing.patch"
"ammo-10_ammo-order-fix.patch"
"ammo-11_fix-volume-40mm.patch"
@@ -89,6 +83,7 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"foods-04_allow-canned-corn-as-veggy.patch"
"foods-05_fix-missing-price-postapoc.patch"
"foods-06_sealed-foods-not-full.patch"
+ "foods-07_fix-meat-scrap-description.patch"
"itemgroups-01_hk46-is-milspec.patch"
"itemgroups-02_add-missing-mre.patch"
@@ -121,6 +116,7 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"npc-20_dialogue-fixes.patch"
"recipes-01_4570-dragon-can-be-dismantled.patch"
+ "recipes-02_recon-mech-laser-typo.patch"
"terrain-02_fix-doors-for-npcs.patch"
"terrain-03_tacoma-clinic-add-missing-floor.patch"
@@ -157,11 +153,12 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"src-12_lower-lockpicking-experience.patch"
"src-13_searchlights-with-plut-gen-furn.patch"
"src-14_fix-npc_melee-calculations.patch"
+ "src-15_slow-down-fungal-blossoms.patch"
"src-20_fix-default-mods.patch"
"vampirism.patch"
)
-b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061aa9e8b4090346c30040e8fb6e582648ededbd14534e32d44bbac1a1546'
+b2sums=('1a311f72d159194d8737b75a484d015caf75a1920b1e9eaa0bdbcd9c0bb8aceda1f59a58cca68e63c907fe9b960208788c8f58169e4abde01b418e704d307189'
'069ecde58859b3d44cd687c4b6e718610cefb693ff86e66f199ebfb1b3072023ad2b6f0c28e27ef9c1ce4997f6a5b2ca0d45046996b3ff35a4aeaeb1a7cf9421'
'ad88bc6c1e3c8183a313b5eec42f98d6956afea349feff34a86e4536c9921fa99d2594282caf27de8ebb7ffb56376ed2e76d572227bfd6d8173c7bb1f01e23b8'
'6f70e90359a14e4839d9a2683debb88850e5dd387add911ad68fd87e5512cfcdd435da63e1e370358153673fd5a72a9b1e9c94f1979edb7948b4da8c82407bad'
@@ -169,11 +166,11 @@ b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061a
'2b42190f1d7189a38b3424efe64fd1b3921919a4f6fc872462ef684587de94b900e93f159597ab3e6f576268fed3e6966cddc3fa7250e1b746095fd7a2cbf6e9'
'e417a1786fbafb685099431f7f9926201ab80636bf3812da67acc341c7ef2b6a3853734d5b8b1bc355acbd5c0bedefb0401f8854aa5cb00032550afc8a7b9ebe'
'5b0e957a5f80ea878c554711dab2fe6759deb3371532cd0f149cfc7a54ec914f445a4aeeff4263df58c947f03fe7be30f2ef175b9a81708e668fd037f9b8ccf8'
- '2d197903715263628e767e867e9b20b9ebd3d85f8983ac8f1e2b534f2b6f8c0470886c79a409f117ad43348aa6aef2a6298925ae27faa32814183ad7677528ac'
+ '36d8e081f0c374202942a6f5c50781768e45ac1c7df4b7861ef63577ec5f86c160518f2aec8b3cf9d0507061ed177286e38ef8015e7d0636c85faa2eb93f876c'
'4a03288ecc9bb0f342add15413bdc060cb071105d35a4f53d4cce121956e4d95e2b7a9ab9dd9fbf1009c5f54c34776e1f724c3fd171eb5b6ff41db0dbe2fce07'
'8ed59f0237d4becee71c5f79dd434972eda3a02c56c29642f69c8ac7e638d866df633e0e087b4392bb74017b6ea3641fd6155d86f0c71fc188be19e7a81cc23b'
'aaf108d56813472ba3e53b63fabc49adbbec01008e0df17f3fecf821784221f03c77eb822858983437dce993913eaa3679217830b101e54d57c6976c52559717'
- '1588c497a7f324cc96ed7aa194a9d99cd5f0ed9dd5db03321f03afcda381b7b2262bbc386f01cb756dd4cd53f73c244012339bb66315ef374a95afcfc2301085'
+ 'ddc40a941dae720ae89c3f21bf2a153959e449aaeac27e532714501e656b60ff78950c78f48de3c99ff4d02905c944eafaaeddb04d8ed0a4cad604f96a442204'
'406130adb1be38e25bf750e10166ea55bd8e5c5e500ea81d8af547131a2eea04ce1e4b415f3fe87f4825aa515186b23e612a4961d2b44f538466044d7ec49624'
'c6854d23ec8eec198e3ee1ca9a7cdb2c8c6f2c20a4e670d6752eb09ec99713dd52d659690e4dce935b11954f7d435d5ea35b4eda23bee3ee5759ef395c18b6ff'
'2de96509a572c1eca36d63f1a049a27583cd0f2df53605b927c9b5112d4e2385bccc82ba1a37af06fe756f96cc1e8c9d4b6cd081ad70651ec09ac57b93cee84f'
@@ -187,14 +184,8 @@ b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061a
'6735377f8611451333c8d7f009001aa652af9edeeddfcd0cd163d03ea84607803d260eb1338fa35f688954c3cb75bb7bdc41a5ad0497771815dd16afa86d54b3'
'13e61e9144f4d7325c409553c72ea1fca07009939b53491ea24d208fba7539e7f09063911c76e7d45f7e6bda12a61bbde17a75c319a0b79518e6639d520fa4ef'
'c4ee693418d394e3b946aa2b9a5f11c04bb0ff11234f830056963f4a755357552f9a769688a086f56f492ed479cf1a44032cfde45c03627adc5fb55f88f806e6'
- '32714f9869cbf44847c5cd2d4b4d6e69a47450a3dd2bd92a195686d938162a86717c4e1c28dab48d8b62fbe0271e0eead5ea9c727aa547787643172fe3b48751'
- '54ed3733d646b549b4db8eded9aeb08de1df328c63c4a535971cf03de172349421b4e96d495995ea5abd2cf63b2df46c2fee9d526eea414bd9463e920802fe78'
- '29bc7e4f9ca7437930a43455be8d1166ff2b7bbaaa58209692d4a15fa7c4b19a4b185881d9a1c5abafe363de31f31fe44585da24dbeecaba183e884539443228'
- 'af8d397d3b42ec0ff461337c19e470dd05b367a362cff092dbe6083841fee062cf899799e69db11fba05179775ac398f8ef3bf79a9f0e25b8774350451e73363'
- 'b388513e6e2d67b3c6ae4f7c27d59bcd78fac9909e887fa4c58932052c0f3355b1dad23abfe404ca2bec82e278759e5be5982abb8b5b1dc7c908c51f7a510d05'
- '8dd1ade1242764bb7b69bf3b564f4e0ad7a2a53e4153a421f2b901c811daa038508e6eae21cd25d48f1c685024229a286e57f9357a04608332b3c8de1cb904e2'
- 'f6a8421d0aaf32e1062ce9b90b4a699b66374ddd6a3f7bd1705b476d2e74c627f594b99006c6f88389c444f7ed3a5d87fc2b323b2331c4221706120d6eb52abb'
- 'c1cdb13cf76e0f3b879c463258701a8ef268097323f6befcda1a1027be19256daf38ad4d80d982347e36570a5df4339a3020159b7498a997e0e26998fdaa564d'
+ '290151179775e23b19a2ee9524b0719301b1661b76404c24341f4f5ab76df11adc6bf5e75fdd0347d59cbb203c37398a17711ea95ac9f845369ed9168dba789f'
+ '23f20b618c3a8d16080ad36a664e3cdf048b4e3b0b36d4d2145c385d299ec92f9c1d2c3ae2e87f62ce39067bf1d627df5ce87353957d414c358b5f2fc0b57eea'
'df26a597afe46a35e07f02c32839e2f7f57cf4d4d9bf0e62eb645d1b720f601fe2e9787462a0ab0ba8b788c727b846272a4ca6ecf81f96bb058d070b53633dcc'
'ba2964e64df20167c722e71951db28d039e637397a6be2e7f5312da10ab3c57a1982ec1ae1c37dd361317292b8c519f678472eb06360d4368294e0b636704c15'
'365e1ac9f9ee636f2578f6fd8ab16b6460894cb9b76cf0aee5d8a55f42d882d6ee0b04e80194f4c346bfdb0778e11e30b8c03541b4d351602ccfd63cee7e3cf0'
@@ -202,7 +193,7 @@ b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061a
'bf952e4c5e8ad3851f2ab5a812fdf65e0a6e7e1726150d7fa6cb582f4408eed85edc7b8cf9dabc07fab62217d14fa7ee5493b45bddb282da44247291e84c990d'
'f4ad4c90cfcf11af42c6cfc6d2027b21af3f58ac274b9bd0852a52ef60b606476766f194b281f6baf12f81647b384a98f745519bb48bc2e4f5fe03984c7c0e65'
'172c611008cb8893a8a8cbf83ef929f5727fbf341f3303c6f38749e3742f96ba7352624112ac231a8df7be9031649e41d54cc52152776e52e3a7a620ea8f33e3'
- '1ce956dbcd0af3e16c336ce15995a7df19b8bed78765890304ff9dcaf6d30c602580bef050d6c659fdff945a31dce880f5f4042dfc295cdef44c34155a3e644c'
+ '58472d7cb093bd983833033bceededcc8c55b15ab2fdea10784c8292a30084e16c0f37a94006c8fa61dcbf9d00c2869503955972f746f592f3f851aec8f2f977'
'804cea67bb0a2fab62dd9cf633d1959a3fe59b3e24f0c2e01a6db951100fa4426ae946a90a93fa7fd6a7d0ece478633d0091144c2fa776858157edec1310f837'
'a611964c224c7751c3afeaadb159135e5ed5d87d3ed254be63b4b12450f4f63f414c90f8e29f3d14c0b854f4c9938bf5d12db69d2e258f1947e353302ca07da7'
'554bc4acb13f2eb70b14dad095c609cd1515bf462a147511fefb935ad64a4dbffe6aa2a89db7342728a212e4e87f7def120c136d87202dc754700ed62449fa12'
@@ -211,6 +202,7 @@ b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061a
'c3b8dcce2fe41c8d9dab2d35d56304f426e06f9a6a220fcb2f413ac4aa32c7f466e2001cc7bf0bbf6127aeef55c837bb344f08afbb392f202c4ad8ce83a592a9'
'e85003201457633ab56789aef908ad4e8f9ed4728fc2bceb0344b851bf65f13264dfe9459afd4c1ba69c0d89f83e841f4829dcf6b0f8fb456bc9f2176c66ca87'
'7b4369a2535029e214af7f51f7d6292d91989249374c9969a140f8954dedca2a2c04f626ac0bcf33f9ea8ab1710fadcc79034156405249b885b01e5c53be2188'
+ '3480ccaa4bc7c64e17d2f7904b39d98c8a3557a4af7d811c8860fa77d3b78055343fd7e4442ce6d1a11e8528496df2cdce03749d0ed046ed8b2cb94a4fd11dde'
'76c816df10aceec8f1a7d1356220eb3f00b16fac455e84eb8aefe76db29cd037dc74fb5cfa344b8d283b188951bd100c26e351ce2e27c16c836a547fe2c99e46'
'417cd957f188b2b06e41d5413bea5f13481c6d5bfa8f184157379d5ac2afa9ba6f7ebc966856f50603f89b9173b6fbfdb3ccf4e3cc0b1bedb53f935591e4a35c'
'dae75d9cd00f1f3ceabf257f1d82d245ace6582cf7ea98a40c1d1eb9b7e1832cb2a0c13f25c814a05a70931c42a06694a67829ea55554cc680eaa8ddf16c84a8'
@@ -226,15 +218,16 @@ b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061a
'3bc768194ae94a95eb8a5f7e1536e81bbb885d9d2f6dd799350d272d2f87d4bfb4ebb5dbd215157b000f29821ce43fc7b0ed45a142329a5ffc207463b054d9fd'
'fa3f9c021097115fd180c83a6640a696240783b165add09b48f624f3b91546aa75bdb05b12a0edfaa009f69f5aaeabb20e2e52267c7d4be4c1d4d8567d8f4eca'
'09ad88d1eebdb6433c2429cea4b775384b65d6cd52945e0de536dbac9fb6d9c345bec9bb49ede6fc6ce01a73e8297d3c8901c4e91d1b5a12eebc36ffd8c21ac4'
- '49d39404138e5e45fdb05b772636388eb7aada9dab6e549904e4b87053329d9df506ad6f390d73fb25c518299459df657ca6e02142fed9d29f4cd1c5f89734d7'
+ '4a914e5120c223e6c1e221c692a1da7e67c13c2afbe273c54e214f7c4391805a13ee21fab5441104976caa5ee2eb8bdaccec89349b4e2eb823060e198f28d15a'
'246a189a0002e755bbed91257c324d0f34bab724f38a31bad1d5eb8bc5b126ecb3a0af8f69a6d0f5f084930c670d2747942beabab0b684f7f66a13044dec394a'
'739d0a1acbf6cdd1c6e78cac75a792d475b140219ffbf8c44d4db9fa82dc93f0822763be14c81afe69ab167a611a5d89fceb3df39d28b191835e14628c369140'
- 'eeb7565ca52f3be3b6ae3396bd48c06722f32b3e0a6f2ba9abdda89e658ec05393f7849d13134006889da11e0a02dc7e7603b8b354576e0021a3f0a593b75b46'
- '88ea84a5affa0d59a613d3806b01912f2728f7f995ee957754a77d8ad3b44033e1bec452d2bb9ac7a79fc6aba1aaee1d452d2ca3fecdd2d1c953d334cbd3beb3'
+ '21130b85c325a5789e8fa60b9cd69c889d41153c20b6a3d38465a43e57c37e35ec4f0319aafb1611c333108f066520370d8423111b208d200d62f7aecd626f27'
+ 'd5fcf6d5c7984d08cd6992809b3259f90196af5e8e4953754c04f722fea06ae995e1d51fbbea8cb462b7f896026c709928252413dbda4cec553684a6d2b5fca8'
'0449ffab9ecf7183253cfb56c7bf489ca6f0a2002f96caa37f2cdb9c77e51e7f8561589e5179496cfb6760b1e8c34a5aefcce4fe0790cab81db3409582a2c835'
'abafa39e57cf04396b841833215aca427655dd3b56ebc260b8a57d6376360b31a4b1d4493da76ec4dc0129939ab9e23cada70dd6f49e647f02bce12c81f6451a'
- 'a7449cb77ce47e09177290ffbb99c29c6695177464eb4c8902b605c9edc2bd6288c8dc741b3c772274c2e204c55380b3c37204419c6341c2aaaa30ccb776e2f3'
+ 'a549cd452cd709d7f6d7e13c77f0224785a100823c9aec3fb9ed4833efafe9e57a4c978f79a0e9b96a9adf5ac87a88b9273fae6219569482a88ae6730c1ac840'
'8eba2f66280defcc930424d695baff297cff32e91e73f01210bb3f26389ea9e93b4b4d9e2c5a5a048756eff219d51c3fbf3f05690c3c984afcc32c3928df91aa'
+ 'd2a88e1769a1b43e0ee52acd8797988597cdf88b535f1769afc86bbae36ae79ed8bfd7c7fa6d553ceba24b935aae5ead275d388d4b02169393a4fd4003c517df'
'80da2c341d8564a47bc460fcdaf9196ac3bb77f0f2ba56bd71089e80e7481728a3ccbdcfcbc3bf70a9c9e5d9d9b01f2ca6615b67c7ab61003808ce00f6545ba3'
'b8a64accada87ee5be989c5307805610c9b5c0327bc107aab237ac3225dd9e4c51b6c79a2a7de15fe187d3c32d7cbe1c462f9b0e9fb5d5a55a74236c7061e96e'
'85aeb5920ee5879848be4057324153a077fe907bed527ed8f9b80a3c5ee1ef64786f63ee2999f5ba74e80a43e99ded3280ce27759c1f7b73259a6e2b5e584aa8'
@@ -265,8 +258,9 @@ b2sums=('9daaba287ef99aa3b33b6f3fbb129b97a2b4dcc265dd7affa08ccee1bdd41b4568e061a
'a5e8bca3ccec2990098e8cf1c504ce6bec03cecef03b0450a4396d5b1e0ffc4e91592f40c3e389eea74fc53114cce0f2c1d2237a779e5ec7e6c12b2863d6c731'
'c0ccf5af2fbf0c9bb59bd226ce17084658cbe6bc859bd8a76c292845dbf57679ac08de339d4cb90736bfa48fcc9f2f734c3fadaa5b91b0fc6e58d157c848a328'
'f10ba62a41e6c0f627b501b907c879ae66e480e90e2ca324d09ba084a6fc0f25e33b384847558f00feb992efcba44eb355ed202351597c5a10a3480bd659f88d'
+ 'c22a81615cd95c01c8722f4be7866f58f488890e518cd74e80f14d65fa3e9889b20666c729cfb317bb55e498d70e13c86b7ba3a61299f667820d4277b2c69c4e'
'5c605faf9fd815e39427722bf6f953cebbe77945e82b7415b7fecfba51978788298fac179ab0b26d28fc948679356f34dc2c475361c82d0149f9a9be04192ff1'
- 'e3799c733e213f336df765fc1b4f33eb695b07998c9752fdd40d59e7fa687be415d3f48b9964b38810892f247d681df6ba33117f36342cf61fe03f8aa61320e9')
+ '7eebe8aa88a72c1e756740e14cb70d8526fc486dd31b2e2e096365d4ef9c5a568c11113288561489996ff58580399bbb9725a3eaf574700791b39333aa388ee2')
prepare() {
# cd "${_pkgname}-${_pkgver}"
@@ -309,31 +303,6 @@ prepare() {
# # # Hotfixes
echo "Applying hotfixes"
- # Fix monsters attacking idle mechsuits
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-01_fix-monsters-ignore-mechs-that-aren-t-being-piloted-.patch
-
- # Fix containers being deleted when reloading empties a container
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-02_fix-Prevents-reloading-from-deleting-containers-4104.patch
-
- # Fix overlapping text when looking around
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-03_fix-Fix-overlapping-text-in-look-around.-4156.patch
-
- # Fix safe reference error on throwing explosives. fix for error on save and quit still MIA.
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-04_fix-uaf-in-safe-references-4165.patch
-
- # Fix zombies having a psychic sense of smell
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-05_feat-balance-closed-glass-windows-block-scent-4114.patch
-
- # Fix player being given a wakeup from noise notice when it happens to npcs
- # also reduces npc 'move please' chat spam when following the player
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-06_fix-two-cases-of-NPCs-printing-messages-in-odd-conte.patch
-
- # Fix card readers not despawning riot turrets
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-07_fix-allow-card-readers-to-despawn-riot-turrets-too-4.patch
-
- # Fix npcs detecting explosives using psychic powers
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/hotfix-09_fix-NPCs-no-longer-magically-aware-of-explosives-the.patch
-
# # Adjust default mods
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/src-20_fix-default-mods.patch
@@ -342,6 +311,17 @@ prepare() {
# # # Reverts
echo "Applying revert patches"
+ # Revert change to nether healing notification:
+ # It should remain vague and not use explicit numbers.
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-31_restore-vague-nether-healing.patch
+
+ # Revert no gun mount slots patch
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-30_feat-content-weapon-mount-obsoletion-part-1-4179.patch
+
+ # Revert easy-mode changes making numerous food never rot
+ # offload to recipe rebalance mod
+ #patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-29_feat-balance-port-Mainline-Nonperishable-Overhaul-s-.patch
+
# Revert craftable smokeless gunpowder. Not realistic and makes black powder obsolete.
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-28_feat-content-semi-plausible-smokeless-gunpowder-reci.patch
@@ -492,6 +472,10 @@ prepare() {
# And one spawning double-full.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/foods-06_sealed-foods-not-full.patch
+ # Fix cooked meat scrap description:
+ # The description for cooked scrap of mutant meat was incorrectly used for cooked scrap of non-mutant meat.
+ patch -Np1 --no-backup-if-mismatch -i "$srcdir"/foods-07_fix-meat-scrap-description.patch
+
# # itemgroups fixes
echo "Applying itemgroup fixes"
@@ -608,6 +592,10 @@ prepare() {
# Fix reloaded 45-70 rounds and reloaded dragon shot not allowing dismantling when every other non-caseless round does.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/recipes-01_4570-dragon-can-be-dismantled.patch
+ # Fix the rebuilt gatling laser recipe incorrectly being listed twice:
+ # The second is obviously supposed to be the missing rebuilt recon laser recipe.
+ patch -Np1 --no-backup-if-mismatch -i "$srcdir"/recipes-02_recon-mech-laser-typo.patch
+
# # terrain and overmap fixes
echo "Applying terrain and overmap fixes"
@@ -744,6 +732,14 @@ prepare() {
# Without this, npcs in melee range will never take any action and be swiftly slain.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/src-14_fix-npc_melee-calculations.patch
+ # Slow down fungal blossoms:
+ # This patch reduces the transform chance. It was so high compared to 'vulnerable' young trees,
+ # I can only conclude the 100 was meant to be 1000, and thus 8% chance instead of 80%
+ # Without this patch, x_in_y is 100, fungal blossoms increase their numbers by roughly a factor of 10 every 60 seconds. 10->100->1000 in two minutes, yikes.
+ # With x_in_y changed to 1000, fungal blossoms increase their numbers by roughly double every 60 seconds.
+ # With x_in_y changed to 2000, fungal blossoms increase their numbers by roughly half every 60 seconds.
+ patch -Np1 --no-backup-if-mismatch -i "$srcdir"/src-15_slow-down-fungal-blossoms.patch
+
# # # Additional changes
echo "Applying vampirism patch"
diff --git a/faction-01_more-factions.patch b/faction-01_more-factions.patch
index e3165af..07c2f23 100644
--- a/faction-01_more-factions.patch
+++ b/faction-01_more-factions.patch
@@ -8,92 +8,13 @@
"likes_u": -200,
"respects_u": 0,
"known_by_u": false,
-@@ -578,5 +579,130 @@
+@@ -578,5 +579,51 @@
"marloss": { "kill on sight": true }
},
"description": "A small group of churchgoers that formed a community in the woods. They welcome anyone in their faction, but hate the unnatural."
+ },
+ {
+ "type": "faction",
-+ "id": "lapin",
-+ "name": "Rabbit Enthusiasts",
-+ "likes_u": 30,
-+ "respects_u": 20,
-+ "known_by_u": false,
-+ "size": 1,
-+ "power": 1,
-+ "currency": "fur",
-+ "food_supply": 87500,
-+ "wealth": 82500,
-+ "relations": {
-+ "free_merchants": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": true,
-+ "defends your space": false,
-+ "knows your voice": true
-+ },
-+ "old_guard": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": false,
-+ "defends your space": false,
-+ "knows your voice": false
-+ },
-+ "tacoma_commune": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": true,
-+ "defends your space": false
-+ },
-+ "lobby_beggars": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": true,
-+ "defends your space": false
-+ },
-+ "no_faction": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": true,
-+ "defends your space": false,
-+ "knows your voice": true
-+ },
-+ "wasteland_scavengers": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": true,
-+ "defends your space": false,
-+ "knows your voice": true
-+ },
-+ "isherwood_family": {
-+ "kill on sight": false,
-+ "watch your back": false,
-+ "share my stuff": false,
-+ "guard your stuff": false,
-+ "lets you in": true,
-+ "defends your space": false,
-+ "knows your voice": true
-+ },
-+ "hells_raiders": { "kill on sight": true },
-+ "marloss": { "kill on sight": true }
-+ },
-+ "description": "Mr Lapin and any acolytes he may have gathered in the apocalypse."
-+ },
-+ {
-+ "type": "faction",
+ "id": "fisherman_family",
+ "name": "Fisherman Family",
+ "likes_u": 0,
diff --git a/foods-07_fix-meat-scrap-description.patch b/foods-07_fix-meat-scrap-description.patch
new file mode 100644
index 0000000..668a3a9
--- /dev/null
+++ b/foods-07_fix-meat-scrap-description.patch
@@ -0,0 +1,19 @@
+--- a/data/json/items/comestibles/carnivore.json
++++ b/data/json/items/comestibles/carnivore.json
+@@ -311,7 +311,7 @@
+ "copy-from": "meat_scrap",
+ "type": "COMESTIBLE",
+ "name": { "str": "cooked scrap of meat", "str_pl": "cooked scraps of meat" },
+- "description": "This is a tiny scrap of cooked mutant meat. It is small enough that it's hard to tell how disgusting it is.",
++ "description": "This is a tiny scrap of cooked meat. It's not much, but it'll do in a pinch.",
+ "spoils_in": "2 days",
+ "parasites": 0,
+ "fun": 0,
+@@ -338,6 +338,7 @@
+ "type": "COMESTIBLE",
+ "copy-from": "mutant_meat_scrap",
+ "name": { "str": "cooked scrap of mutant meat", "str_pl": "cooked scraps of mutant meat" },
++ "description": "This is a tiny scrap of cooked mutant meat. It is small enough that it's hard to tell how disgusting it is.",
+ "looks_like": "meat_scrap_cooked",
+ "spoils_in": "2 days",
+ "parasites": 0,
diff --git a/hotfix-01_fix-monsters-ignore-mechs-that-aren-t-being-piloted-.patch b/hotfix-01_fix-monsters-ignore-mechs-that-aren-t-being-piloted-.patch
deleted file mode 100644
index a03a172..0000000
--- a/hotfix-01_fix-monsters-ignore-mechs-that-aren-t-being-piloted-.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 8618c68bafe113d8c6e301e8eb23d7df2292d91d Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Tue, 9 Jan 2024 17:56:09 -0600
-Subject: [PATCH] fix: monsters ignore mechs that aren't being piloted (#4083)
-
----
- src/monster.cpp | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/monster.cpp b/src/monster.cpp
-index 5cadb78107f..1c8c755f760 100644
---- a/src/monster.cpp
-+++ b/src/monster.cpp
-@@ -1223,6 +1223,10 @@ Attitude monster::attitude_to( const Creature &other ) const
- if( m == this ) {
- return Attitude::A_FRIENDLY;
- }
-+ // Ignore inactive mechs
-+ if( m->has_flag( MF_RIDEABLE_MECH ) && !m->has_effect( effect_ridden ) ) {
-+ return Attitude::A_NEUTRAL;
-+ }
-
- static const string_id<monfaction> faction_zombie( "zombie" );
- auto faction_att = faction.obj().attitude( m->faction );
---
-2.43.0
-
diff --git a/hotfix-02_fix-Prevents-reloading-from-deleting-containers-4104.patch b/hotfix-02_fix-Prevents-reloading-from-deleting-containers-4104.patch
deleted file mode 100644
index 5414c95..0000000
--- a/hotfix-02_fix-Prevents-reloading-from-deleting-containers-4104.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From db0b41135105d165ead640d4d4d46d220491c873 Mon Sep 17 00:00:00 2001
-From: joveeater <joveasarus@gmail.com>
-Date: Sat, 13 Jan 2024 12:21:59 +0000
-Subject: [PATCH] fix: Prevents reloading from deleting containers (#4104)
-
-* Prevents reloading from deleting containers
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- src/item.cpp | 24 ++++++++++--------------
- 1 file changed, 10 insertions(+), 14 deletions(-)
-
-diff --git a/src/item.cpp b/src/item.cpp
-index 25051aeb76c..b4667994e17 100644
---- a/src/item.cpp
-+++ b/src/item.cpp
-@@ -8186,9 +8186,7 @@ bool item::reload( player &u, item &loc, int qty )
- }
- }
-
-- detached_ptr<item> to_reload = item::spawn( *ammo );
-- to_reload->charges = qty;
-- ammo->charges -= qty;
-+ detached_ptr<item> to_reload = ammo->split( qty );
- bool merged = false;
- for( item *it : contents.all_items_top() ) {
- if( it->merge_charges( std::move( to_reload ) ) ) {
-@@ -8246,19 +8244,17 @@ bool item::reload( player &u, item &loc, int qty )
- ammo->charges -= qty;
- charges += qty;
- }
-- }
--
-- // we have transfered ammo from the container to the item
-- // therefore, we erase the 0-charge item inside container
-- // TODO: why don't we just remove 0-charge items?
-- if( ammo->charges == 0 && !ammo->has_flag( flag_SPEEDLOADER ) ) {
-- if( container != nullptr && !container->contents.empty() ) {
-- container->remove_item( container->contents.front() );
-- u.inv_restack( ); // emptied containers do not stack with non-empty ones
-- } else {
-- loc.detach();
-+ // we have transfered ammo from the container to the item
-+ // therefore, we erase the 0-charge item inside container
-+ // TODO: why don't we just remove 0-charge items?
-+ if( ammo->charges == 0 && !ammo->has_flag( flag_SPEEDLOADER ) ) {
-+ ammo->detach();
-+ if( container != nullptr ) {
-+ u.inv_restack();
-+ }
- }
- }
-+
- return true;
- }
-
---
-2.43.0
-
diff --git a/hotfix-03_fix-Fix-overlapping-text-in-look-around.-4156.patch b/hotfix-03_fix-Fix-overlapping-text-in-look-around.-4156.patch
deleted file mode 100644
index 586a7b3..0000000
--- a/hotfix-03_fix-Fix-overlapping-text-in-look-around.-4156.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From 273f51063c1c1cf254c9ad0184655418f4126535 Mon Sep 17 00:00:00 2001
-From: richardnlarge <richard.n.large@gmail.com>
-Date: Wed, 24 Jan 2024 20:23:11 -0500
-Subject: [PATCH] fix: Fix overlapping text in look-around. (#4156)
-
-* Prevent overlapping lines in look-around panel.
-
-Lines were being drawn on top of one another, making text unreadable.
-
-fixes #4140, fixes #3945
-
-* Fix cursor placement for printing visibility text.
-
-"point" constructor takes (x, y) and was being fed (y, x).
----
- src/game.cpp | 35 ++++++++++++++++-------------------
- 1 file changed, 16 insertions(+), 19 deletions(-)
-
-diff --git a/src/game.cpp b/src/game.cpp
-index 9d68459be86..47c2c92b189 100644
---- a/src/game.cpp
-+++ b/src/game.cpp
-@@ -5863,7 +5863,7 @@ void game::print_visibility_info( const catacurses::window &w_look, int column,
- break;
- }
-
-- mvwprintw( w_look, point( line, column ), visibility_message );
-+ mvwprintw( w_look, point( column, line ), visibility_message );
- line += 2;
- }
-
-@@ -5872,7 +5872,6 @@ void game::print_terrain_info( const tripoint &lp, const catacurses::window &w_l
- int &line )
- {
- const int max_width = getmaxx( w_look ) - column - 1;
-- int lines;
-
- const auto fmt_tile_info = []( const tripoint & lp ) {
- map &here = get_map();
-@@ -5897,23 +5896,23 @@ void game::print_terrain_info( const tripoint &lp, const catacurses::window &w_l
- std::string tile = string_format( "(%s) %s", area_name, fmt_tile_info( lp ) );
-
- if( m.impassable( lp ) ) {
-- lines = fold_and_print( w_look, point( column, line ), max_width, c_light_gray,
-+ line += fold_and_print( w_look, point( column, line ), max_width, c_light_gray,
- _( "%s; Impassable" ),
- tile );
- } else {
-- lines = fold_and_print( w_look, point( column, line ), max_width, c_light_gray,
-+ line += fold_and_print( w_look, point( column, line ), max_width, c_light_gray,
- _( "%s; Movement cost %d" ),
- tile, m.move_cost( lp ) * 50 );
-
- const auto ll = get_light_level( std::max( 1.0,
- LIGHT_AMBIENT_LIT - m.ambient_light_at( lp ) + 1.0 ) );
-- mvwprintw( w_look, point( column, ++lines ), _( "Lighting: " ) );
-+ mvwprintw( w_look, point( column, line++ ), _( "Lighting: " ) );
- wprintz( w_look, ll.second, ll.first );
- }
-
- std::string signage = m.get_signage( lp );
- if( !signage.empty() ) {
-- trim_and_print( w_look, point( column, ++lines ), max_width, c_dark_gray,
-+ trim_and_print( w_look, point( column, line++ ), max_width, c_dark_gray,
- // NOLINTNEXTLINE(cata-text-style): the question mark does not end a sentence
- u.has_trait( trait_ILLITERATE ) ? _( "Sign: ???" ) : _( "Sign: %s" ), signage );
- }
-@@ -5924,23 +5923,21 @@ void game::print_terrain_info( const tripoint &lp, const catacurses::window &w_l
- std::string tile_below = fmt_tile_info( below );
-
- if( !m.has_floor_or_support( lp ) ) {
-- fold_and_print( w_look, point( column, ++lines ), max_width, c_dark_gray,
-- _( "Below: %s; No support" ),
-- tile_below );
-+ line += fold_and_print( w_look, point( column, line ), max_width, c_dark_gray,
-+ _( "Below: %s; No support" ),
-+ tile_below );
- } else {
-- fold_and_print( w_look, point( column, ++lines ), max_width, c_dark_gray,
-- _( "Below: %s; Walkable" ),
-- tile_below );
-+ line += fold_and_print( w_look, point( column, line ), max_width, c_dark_gray,
-+ _( "Below: %s; Walkable" ),
-+ tile_below );
- }
- }
-
-- int map_features = fold_and_print( w_look, point( column, ++lines ), max_width, c_dark_gray,
-- m.features( lp ) );
-- fold_and_print( w_look, point( column, ++lines ), max_width, c_light_gray, _( "Coverage: %d%%" ),
-- m.coverage( lp ) );
-- if( line < lines ) {
-- line = lines + map_features - 1;
-- }
-+ line += fold_and_print( w_look, point( column, line ), max_width, c_dark_gray,
-+ m.features( lp ) );
-+ line += fold_and_print( w_look, point( column, line ), max_width, c_light_gray,
-+ _( "Coverage: %d%%" ),
-+ m.coverage( lp ) );
- }
-
- void game::print_fields_info( const tripoint &lp, const catacurses::window &w_look, int column,
---
-2.43.0
-
diff --git a/hotfix-04_fix-uaf-in-safe-references-4165.patch b/hotfix-04_fix-uaf-in-safe-references-4165.patch
deleted file mode 100644
index adbaaf0..0000000
--- a/hotfix-04_fix-uaf-in-safe-references-4165.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 05a7e9e3f647cf77c2782f8f24b05a8d37117ccc Mon Sep 17 00:00:00 2001
-From: joveeater <joveasarus@gmail.com>
-Date: Sat, 27 Jan 2024 10:39:58 +0000
-Subject: [PATCH] fix: uaf in safe references (#4165)
-
-* Fixes a uaf in safe references
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- src/safe_reference.h | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/safe_reference.h b/src/safe_reference.h
-index 7334885bc67..552aeb6e300 100644
---- a/src/safe_reference.h
-+++ b/src/safe_reference.h
-@@ -154,6 +154,7 @@ class safe_reference
- } else {
- rec->mem_count--;
- rec = rec->target.redirect;
-+ rec->mem_count++;
- }
- }
- }
-@@ -368,13 +369,12 @@ class safe_reference
- if( sec_rec->id == ID_NONE ) {
- sec_rec->id = REDIRECTED_MASK;
- sec_rec->target.redirect = pri_rec;
-- }
--
-- //They both have an id
-- if( pri_rec->id != ID_NONE && sec_rec->id != ID_NONE ) {
-+ pri_rec->mem_count++;
-+ } else {
- //This is the worse case, we actually need a redirect
- sec_rec->id = sec_rec->id | REDIRECTED_MASK;
- sec_rec->target.redirect = pri_rec;
-+ pri_rec->mem_count++;
- }
- }
-
---
-2.43.0
-
diff --git a/hotfix-05_feat-balance-closed-glass-windows-block-scent-4114.patch b/hotfix-05_feat-balance-closed-glass-windows-block-scent-4114.patch
deleted file mode 100644
index cd77189..0000000
--- a/hotfix-05_feat-balance-closed-glass-windows-block-scent-4114.patch
+++ /dev/null
@@ -1,415 +0,0 @@
-From 0d6982046ab8f46207d99185c39474b9e9d08c20 Mon Sep 17 00:00:00 2001
-From: RoyalFox <112293514+RoyalFox2140@users.noreply.github.com>
-Date: Mon, 15 Jan 2024 20:30:09 -0500
-Subject: [PATCH] feat(balance): closed glass windows block scent (#4114)
-
-* no_scent added to glass windows
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- .../terrain-windows.json | 91 +++++++++----------
- 1 file changed, 43 insertions(+), 48 deletions(-)
-
-diff --git a/data/json/furniture_and_terrain/terrain-windows.json b/data/json/furniture_and_terrain/terrain-windows.json
-index 07727f607d2..ca50fc1e6f3 100644
---- a/data/json/furniture_and_terrain/terrain-windows.json
-+++ b/data/json/furniture_and_terrain/terrain-windows.json
-@@ -9,7 +9,7 @@
- "move_cost": 0,
- "coverage": 60,
- "roof": "t_flat_roof",
-- "flags": [ "TRANSPARENT", "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "BLOCK_WIND" ],
-+ "flags": [ "TRANSPARENT", "FLAMMABLE", "NOITEM", "NO_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "BLOCK_WIND" ],
- "deconstruct": { "ter_set": "t_window_empty", "items": [ { "item": "glass_sheet", "count": 1 } ] },
- "bash": {
- "str_min": 3,
-@@ -142,7 +142,7 @@
- "symbol": "\"",
- "color": "dark_gray",
- "move_cost": 0,
-- "delete": { "flags": [ "TRANSPARENT", "REDUCE_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL" ] },
-+ "delete": { "flags": [ "TRANSPARENT", "NO_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL" ] },
- "extend": { "flags": [ "WALL" ] },
- "bash": {
- "items": [ { "item": "glass_shard", "count": [ 1, 3 ] } ],
-@@ -182,7 +182,7 @@
- "color": "light_gray",
- "move_cost": 4,
- "extend": { "flags": [ "OPENCLOSE_INSIDE", "MOUNTABLE", "THIN_OBSTACLE", "SMALL_PASSAGE", "WINDOW" ] },
-- "delete": { "flags": [ "REDUCE_SCENT", "BARRICADABLE_WINDOW", "BLOCK_WIND" ] },
-+ "delete": { "flags": [ "NO_SCENT", "BARRICADABLE_WINDOW", "BLOCK_WIND" ] },
- "curtain_transform": "t_window_no_curtains",
- "examine_action": "curtains",
- "close": "t_window_domestic",
-@@ -206,7 +206,7 @@
- "move_cost": 0,
- "coverage": 95,
- "extend": { "flags": [ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "WINDOW" ] },
-- "delete": { "flags": [ "TRANSPARENT", "REDUCE_SCENT", "BARRICADABLE_WINDOW" ] },
-+ "delete": { "flags": [ "TRANSPARENT", "BARRICADABLE_WINDOW" ] },
- "curtain_transform": "t_window_no_curtains",
- "open": "t_window_domestic",
- "examine_action": "curtains",
-@@ -361,7 +361,7 @@
- "move_cost": 0,
- "coverage": 95,
- "roof": "t_flat_roof",
-- "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ],
-+ "flags": [ "FLAMMABLE", "NOITEM", "NO_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ],
- "bash": {
- "str_min": 3,
- "str_max": 30,
-@@ -384,7 +384,7 @@
- "move_cost": 0,
- "coverage": 95,
- "roof": "t_flat_roof",
-- "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ],
-+ "flags": [ "FLAMMABLE", "NOITEM", "NO_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ],
- "bash": {
- "str_min": 12,
- "str_max": 30,
-@@ -432,7 +432,7 @@
- "message": "You finish cutting the metal.",
- "byproducts": [ { "item": "rebar", "count": [ 1, 4 ] } ]
- },
-- "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ],
-+ "flags": [ "NOITEM", "NO_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ],
- "oxytorch": {
- "result": "t_window_empty",
- "duration": "4 seconds",
-@@ -543,15 +543,7 @@
- },
- "roof": "t_flat_roof",
- "oxytorch": { "result": "t_window_domestic", "duration": "9 seconds", "byproducts": [ { "item": "rebar", "count": [ 1, 2 ] } ] },
-- "flags": [
-- "NOITEM",
-- "OPENCLOSE_INSIDE",
-- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-- "CONNECT_TO_WALL",
-- "BLOCK_WIND",
-- "WINDOW"
-- ],
-+ "flags": [ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "NO_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND", "WINDOW" ],
- "curtain_transform": "t_window_bars",
- "examine_action": "curtains",
- "open": "t_window_bars_domestic",
-@@ -593,7 +585,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -625,7 +617,7 @@
- "color": "light_green",
- "move_cost": 0,
- "roof": "t_flat_roof",
-- "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ],
-+ "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ],
- "bash": {
- "str_min": 100,
- "str_max": 400,
-@@ -644,7 +636,7 @@
- "color": "light_red",
- "move_cost": 0,
- "roof": "t_flat_roof",
-- "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ],
-+ "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ],
- "bash": {
- "str_min": 100,
- "str_max": 400,
-@@ -663,7 +655,7 @@
- "color": "light_blue",
- "move_cost": 0,
- "roof": "t_flat_roof",
-- "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ],
-+ "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "BARRICADABLE_WINDOW", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ],
- "bash": {
- "str_min": 100,
- "str_max": 400,
-@@ -701,7 +693,7 @@
- "BARRICADABLE_WINDOW",
- "THIN_OBSTACLE",
- "BLOCK_WIND",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "WINDOW"
- ],
- "deconstruct": {
-@@ -743,7 +735,7 @@
- "message": "You finish cutting the metal.",
- "byproducts": [ { "item": "pipe", "count": [ 1, 12 ] }, { "item": "sheet_metal", "count": 4 } ]
- },
-- "flags": [ "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "BARRICADABLE_WINDOW_CURTAINS", "BLOCK_WIND", "REDUCE_SCENT", "WINDOW" ],
-+ "flags": [ "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "BARRICADABLE_WINDOW_CURTAINS", "BLOCK_WIND", "NO_SCENT", "WINDOW" ],
- "curtain_transform": "t_window_bars",
- "examine_action": "curtains",
- "open": "t_metal_grate_window_with_curtain_open",
-@@ -782,7 +774,7 @@
- "THIN_OBSTACLE",
- "BARRICADABLE_WINDOW_CURTAINS",
- "BLOCK_WIND",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "WINDOW"
- ],
- "oxytorch": {
-@@ -969,7 +961,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1047,7 +1039,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -1093,7 +1085,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1186,7 +1178,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1264,7 +1256,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -1310,7 +1302,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1403,7 +1395,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1481,7 +1473,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -1527,7 +1519,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1620,7 +1612,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1699,7 +1691,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -1745,6 +1737,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "MOUNTABLE",
-+ "NO_SCENT",
- "BARRICADABLE_WINDOW_CURTAINS",
- "CONNECT_TO_WALL",
- "THIN_OBSTACLE",
-@@ -1840,7 +1833,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -1918,7 +1911,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -1964,7 +1957,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -2057,7 +2050,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -2135,7 +2128,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -2181,6 +2174,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "MOUNTABLE",
-+ "NO_SCENT",
- "BARRICADABLE_WINDOW_CURTAINS",
- "CONNECT_TO_WALL",
- "THIN_OBSTACLE",
-@@ -2276,7 +2270,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -2352,7 +2346,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -2398,7 +2392,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -2491,7 +2485,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -2569,7 +2563,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -2663,6 +2657,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "MOUNTABLE",
-+ "NO_SCENT",
- "BARRICADABLE_WINDOW_CURTAINS",
- "CONNECT_TO_WALL",
- "THIN_OBSTACLE",
-@@ -3167,7 +3162,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -3244,7 +3239,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND",
- "WINDOW"
-@@ -3290,7 +3285,7 @@
- "NOITEM",
- "OPENCLOSE_INSIDE",
- "BARRICADABLE_WINDOW_CURTAINS",
-- "REDUCE_SCENT",
-+ "NO_SCENT",
- "CONNECT_TO_WALL",
- "BLOCK_WIND"
- ],
-@@ -3376,7 +3371,7 @@
- "color": "light_gray",
- "move_cost": 0,
- "roof": "t_metal_flat_roof",
-- "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "BLOCK_WIND", "REDUCE_SCENT" ],
-+ "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "BLOCK_WIND", "NO_SCENT" ],
- "bash": {
- "str_min": 50,
- "str_max": 75,
---
-2.43.0
-
diff --git a/hotfix-06_fix-two-cases-of-NPCs-printing-messages-in-odd-conte.patch b/hotfix-06_fix-two-cases-of-NPCs-printing-messages-in-odd-conte.patch
deleted file mode 100644
index 3ef0e24..0000000
--- a/hotfix-06_fix-two-cases-of-NPCs-printing-messages-in-odd-conte.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From dea4a4901e2420aab13a60c40f7ed18e52be9197 Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Thu, 11 Jan 2024 19:41:48 -0600
-Subject: [PATCH] fix: two cases of NPCs printing messages in odd contexts
- (#4098)
-
-fix: fix two cases of NPCs printing messages in odd contexts
----
- src/npcmove.cpp | 5 ++++-
- src/sounds.cpp | 2 +-
- 2 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/src/npcmove.cpp b/src/npcmove.cpp
-index b7ee6f6df0e..d55ff473d70 100644
---- a/src/npcmove.cpp
-+++ b/src/npcmove.cpp
-@@ -2365,7 +2365,10 @@ void npc::move_to( const tripoint &pt, bool no_bashing, std::set<tripoint> *nomo
- // other npcs should not try to move into this npc anymore,
- // so infinite loop can be avoided.
- realnomove->insert( pos() );
-- say( "<let_me_pass>" );
-+ // Don't spam player with messages over followers blunder into each other.
-+ if( !np->is_following() ) {
-+ say( "<let_me_pass>" );
-+ }
- np->move_away_from( pos(), true, realnomove );
- // if we moved NPC, readjust their path, so NPCs don't jostle each other out of their activity paths.
- if( np->attitude == NPCATT_ACTIVITY ) {
-diff --git a/src/sounds.cpp b/src/sounds.cpp
-index bed0803fd61..d59207f6cb3 100644
---- a/src/sounds.cpp
-+++ b/src/sounds.cpp
-@@ -497,7 +497,7 @@ void sounds::process_sound_markers( player *p )
- !p->has_effect( effect_narcosis ) ) {
- //Not kidding about sleep-through-firefight
- p->wake_up();
-- add_msg( m_warning, _( "Something is making noise." ) );
-+ p->add_msg_if_player( m_warning, _( "Something is making noise." ) );
- } else {
- continue;
- }
---
-2.43.0
-
diff --git a/hotfix-07_fix-allow-card-readers-to-despawn-riot-turrets-too-4.patch b/hotfix-07_fix-allow-card-readers-to-despawn-riot-turrets-too-4.patch
deleted file mode 100644
index 17416a3..0000000
--- a/hotfix-07_fix-allow-card-readers-to-despawn-riot-turrets-too-4.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From cc76e12a7b9ff5ed7810943e4c55424dbe8fc759 Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Mon, 8 Jan 2024 17:25:06 -0600
-Subject: [PATCH] fix: allow card readers to despawn riot turrets too (#4077)
-
----
- data/json/monsters/turrets.json | 13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/data/json/monsters/turrets.json b/data/json/monsters/turrets.json
-index f74755395a3..40aadfa159e 100644
---- a/data/json/monsters/turrets.json
-+++ b/data/json/monsters/turrets.json
-@@ -130,7 +130,18 @@
- ],
- "death_drops": { },
- "death_function": [ "BROKEN" ],
-- "flags": [ "SEES", "NOHEAD", "ELECTRONIC", "COLDPROOF", "IMMOBILE", "NO_BREATHE", "DROPS_AMMO", "BIOPROOF" ]
-+ "flags": [
-+ "SEES",
-+ "NOHEAD",
-+ "ELECTRONIC",
-+ "COLDPROOF",
-+ "IMMOBILE",
-+ "NO_BREATHE",
-+ "DROPS_AMMO",
-+ "ID_CARD_DESPAWN",
-+ "CONSOLE_DESPAWN",
-+ "BIOPROOF"
-+ ]
- },
- {
- "id": "mon_turret_light",
---
-2.43.0
-
diff --git a/hotfix-09_fix-NPCs-no-longer-magically-aware-of-explosives-the.patch b/hotfix-09_fix-NPCs-no-longer-magically-aware-of-explosives-the.patch
deleted file mode 100644
index 315594a..0000000
--- a/hotfix-09_fix-NPCs-no-longer-magically-aware-of-explosives-the.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 3552f9a79d6c3ea29b1fb694c6d6839704ca64af Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Thu, 11 Jan 2024 19:39:05 -0600
-Subject: [PATCH] fix: NPCs no longer magically aware of explosives they can't
- see (#4097)
-
----
- src/npcmove.cpp | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/npcmove.cpp b/src/npcmove.cpp
-index 9569a31f099..b7ee6f6df0e 100644
---- a/src/npcmove.cpp
-+++ b/src/npcmove.cpp
-@@ -315,6 +315,10 @@ std::vector<sphere> npc::find_dangerous_explosives() const
- continue;
- }
-
-+ if( !sees( elem->position() ) ) {
-+ continue; // We can't worry about what we can't see.
-+ }
-+
- const explosion_iuse *actor = dynamic_cast<const explosion_iuse *>( use->get_actor_ptr() );
- const int safe_range = actor->explosion.safe_range();
-
---
-2.43.0
-
diff --git a/npc-06_lapin-update.patch b/npc-06_lapin-update.patch
index b1938f4..779640a 100644
--- a/npc-06_lapin-update.patch
+++ b/npc-06_lapin-update.patch
@@ -1,14 +1,5 @@
--- a/data/json/npcs/holdouts/Mr_Lapin.json
+++ b/data/json/npcs/holdouts/Mr_Lapin.json
-@@ -11,7 +11,7 @@
- "mission": 7,
- "mission_offered": "MISSION_Warrener_LOG_1",
- "chat": "TALK_WARRENER",
-- "faction": "no_faction"
-+ "faction": "lapin"
- },
- {
- "type": "npc_class",
@@ -47,6 +47,7 @@
{ "text": "Heard anything about the outside world?", "topic": "TALK_WARRENER_WORLD" },
{ "text": "You look different?", "topic": "TALK_WARRENER_MUTATION" },
diff --git a/npc-09_broker-takes-more-foods.patch b/npc-09_broker-takes-more-foods.patch
index 0c226c5..14af7c2 100644
--- a/npc-09_broker-takes-more-foods.patch
+++ b/npc-09_broker-takes-more-foods.patch
@@ -1,6 +1,6 @@
--- a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_broker.json
+++ b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_broker.json
-@@ -88,20 +88,141 @@
+@@ -88,20 +88,142 @@
"dynamic_line": "Excellent. What've you brought us?",
"repeat_responses": {
"for_item": [
@@ -126,6 +126,7 @@
+ "pine_wine",
+ "pistachio_roasted",
+ "pork_beans",
++ "potted_meat",
+ "powder_eggs",
+ "ravioli",
+ "drink_rumcola",
diff --git a/npc-10_bunker-merchant.patch b/npc-10_bunker-merchant.patch
index 8da5296..4ec3c31 100644
--- a/npc-10_bunker-merchant.patch
+++ b/npc-10_bunker-merchant.patch
@@ -347,9 +347,9 @@
--- a/data/json/overmap/overmap_special/specials.json
+++ b/data/json/overmap/overmap_special/specials.json
@@ -7151,5 +7151,19 @@
- { "point": [ 2, -1, 0 ], "connection": "local_road", "from": [ 1, -1, 0 ] }
- ],
- "flags": [ "CLASSIC", "URBAN" ]
+ "city_sizes": [ 4, -1 ],
+ "occurrences": [ 0, 2 ],
+ "flags": [ "CLASSIC", "WILDERNESS", "ELECTRIC_GRID" ]
+ },
+ {
+ "type": "overmap_special",
diff --git a/npc-20_dialogue-fixes.patch b/npc-20_dialogue-fixes.patch
index e09f581..d5bd3cc 100644
--- a/npc-20_dialogue-fixes.patch
+++ b/npc-20_dialogue-fixes.patch
@@ -33,15 +33,6 @@
--- a/data/json/npcs/refugee_center/surface_refugees/NPC_Boris_Borichenko.json
+++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Boris_Borichenko.json
-@@ -376,7 +376,7 @@
- {
- "id": "MISSION_REFUGEE_Boris_WORKSPACE",
- "type": "mission_definition",
-- "name": { "str": "Bring Boris some tools." },
-+ "name": { "str": "Bring a circular saw" },
- "difficulty": 1,
- "value": 0,
- "goal": "MGOAL_FIND_ITEM",
@@ -406,7 +406,7 @@
{
"id": "MISSION_REFUGEE_Boris_LAPTOP",
diff --git a/recipes-02_recon-mech-laser-typo.patch b/recipes-02_recon-mech-laser-typo.patch
new file mode 100644
index 0000000..98bcf87
--- /dev/null
+++ b/recipes-02_recon-mech-laser-typo.patch
@@ -0,0 +1,20 @@
+--- a/data/json/recipes/weapon/ranged.json
++++ b/data/json/recipes/weapon/ranged.json
+@@ -754,7 +754,7 @@
+ },
+ {
+ "type": "recipe",
+- "result": "gatling_mech_laser_rebuilt",
++ "result": "recon_mech_laser_rebuilt",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_RANGED",
+ "skill_used": "electronics",
+@@ -764,7 +764,7 @@
+ "autolearn": true,
+ "using": [ [ "welding_standard", 5 ], [ "steel_tiny", 2 ] ],
+ "qualities": [ { "id": "SAW_M_FINE", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ],
+- "components": [ [ [ "gatling_mech_laser_salvaged", 1 ] ], [ [ "battery_ups", 1 ] ], [ [ "cable", 25 ] ] ]
++ "components": [ [ [ "recon_mech_laser_salvaged", 1 ] ], [ [ "battery_ups", 1 ] ], [ [ "cable", 25 ] ] ]
+ },
+ {
+ "type": "recipe",
diff --git a/revert-06_Obsolete-useless-hub01-basement-1457.patch b/revert-06_Obsolete-useless-hub01-basement-1457.patch
index c106c70..a214370 100644
--- a/revert-06_Obsolete-useless-hub01-basement-1457.patch
+++ b/revert-06_Obsolete-useless-hub01-basement-1457.patch
@@ -555,15 +555,12 @@ index 93e999c36a..74d3c55ee5 100644
- }
}
]
-diff --git a/data/json/obsoletion/map.json b/data/json/obsoletion/map.json
-new file mode 100644
-index 0000000000..4b48616c30
---- /dev/null
+--- a/data/json/obsoletion/map.json
+++ b/data/json/obsoletion/map.json
-@@ -0,0 +1,519 @@
-+[
-+ {
-+ "type": "mapgen",
+@@ -1,6 +1,523 @@
+ [
+ {
+ "type": "mapgen",
+ "om_terrain": [
+ [ "robofachq_exe_a0", "robofachq_exe_a1", "robofachq_exe_a2", "robofachq_exe_a3" ],
+ [ "robofachq_exe_b0", "robofachq_exe_b1", "robofachq_exe_b2", "robofachq_exe_b3" ]
@@ -1078,8 +1075,12 @@ index 0000000000..4b48616c30
+ ]
+ }
+ }
-+ }
-+]
++ },
++ {
++ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "bunker_mech_spawn",
+ "weight": 25,
diff --git a/data/json/npcs/robofac/NPC_Ulysses_Rourke.json b/data/json/obsoletion/npc.json
similarity index 100%
rename from data/json/npcs/robofac/NPC_Ulysses_Rourke.json
diff --git a/revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch b/revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch
index 925a462..5867ada 100644
--- a/revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch
+++ b/revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch
@@ -36,7 +36,7 @@ index 2dfb60740ef..b1bfc7941a4 100644
@@ -1158,9 +1158,7 @@
[ "toolbox", 5 ],
[ "apron_leather", 10 ],
- [ "bio_meteorologist", 10 ],
+ [ "bio_infolink", 10 ],
- [ "chem_aluminium_sulphate", 20 ],
- [ "plunger_toilet", 10 ],
- [ "plunger_futuristic", 5 ]
diff --git a/revert-30_feat-content-weapon-mount-obsoletion-part-1-4179.patch b/revert-30_feat-content-weapon-mount-obsoletion-part-1-4179.patch
new file mode 100644
index 0000000..fdc3225
--- /dev/null
+++ b/revert-30_feat-content-weapon-mount-obsoletion-part-1-4179.patch
@@ -0,0 +1,1957 @@
+From 0aca66e98ed0dc699179a24760160768146e2304 Mon Sep 17 00:00:00 2001
+From: Chorus System <ohinchy@gmail.com>
+Date: Mon, 5 Feb 2024 11:32:43 -0500
+Subject: [PATCH 094/231] feat(content): weapon mount obsoletion, part 1
+ (#4179)
+
+* Mount-ed Combat
+
+Removed all basegame weapon mount mod slots, replacing them with the corresponding mod slots of that type.
+
+* Mod mounts
+
+Removed weapon mount mod locations from modded weapons, replacing them with corresponding weapon mod locations.
+
+* style(autofix.ci): automated formatting
+
+* Obsoleted mount weapon mods
+
+* Changed ranged burst balance test
+
+Modified ranged burst balance test via RoyalFox's recommendation.
+
+---------
+
+Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
+Co-authored-by: Chaosvolt <chaosvolt@users.noreply.github.com>
+---
+ data/json/items/classes/gun.json | 65 +++----
+ data/json/items/classes/range.json | 2 +-
+ data/json/items/gun/20x66mm.json | 2 +-
+ data/json/items/gun/22.json | 6 +-
+ data/json/items/gun/223.json | 18 +-
+ data/json/items/gun/3006.json | 6 +-
+ data/json/items/gun/308.json | 16 +-
+ data/json/items/gun/38.json | 19 +-
+ data/json/items/gun/40.json | 2 +-
+ data/json/items/gun/40x46mm.json | 20 +-
+ data/json/items/gun/40x53mm.json | 4 +-
+ data/json/items/gun/410shot.json | 10 +-
+ data/json/items/gun/44.json | 4 +-
+ data/json/items/gun/44paper.json | 4 +-
+ data/json/items/gun/454.json | 4 +-
+ data/json/items/gun/4570.json | 16 +-
+ data/json/items/gun/45colt.json | 6 +-
+ data/json/items/gun/50.json | 8 +-
+ data/json/items/gun/500.json | 8 +-
+ data/json/items/gun/66mm.json | 9 +-
+ data/json/items/gun/762.json | 20 +-
+ data/json/items/gun/762x25.json | 2 +-
+ data/json/items/gun/84x246mm.json | 4 +-
+ data/json/items/gun/9mm.json | 28 +--
+ data/json/items/gun/atgm.json | 2 +-
+ data/json/items/gun/blunderbuss.json | 9 +-
+ data/json/items/gun/combination.json | 2 +-
+ data/json/items/gun/flammable.json | 8 +-
+ data/json/items/gun/flintlock.json | 23 +--
+ data/json/items/gun/misc.json | 2 +-
+ data/json/items/gun/nail.json | 2 +-
+ data/json/items/gun/paintball.json | 9 +-
+ data/json/items/gun/rpg.json | 4 +-
+ data/json/items/gun/shot.json | 122 ++++++------
+ data/json/items/gun/shotpaper.json | 8 +-
+ data/json/items/gun/signal_flare.json | 9 +-
+ data/json/items/gun/ups.json | 10 +-
+ data/json/items/ranged/crossbows.json | 9 +-
+ data/json/items/ranged/pneumatic.json | 6 +-
+ data/json/items/ranged/spearguns.json | 4 +-
+ data/json/not_really_obsolete.json | 4 +-
+ data/json/obsoletion/items.json | 24 +--
+ .../{items/gunmod => obsoletion}/mount.json | 0
+ data/json/obsoletion/recipes.json | 35 ++++
+ data/json/recipes/weapon/mods.json | 182 ------------------
+ data/mods/Aftershock/items/obsolete.json | 4 +-
+ data/mods/Aftershock/items/weapons.json | 10 +-
+ data/mods/Generic_Guns/firearms/obsolete.json | 8 +-
+ .../Magiclysm/items/enchanted_ranged.json | 6 +-
+ data/mods/No_Hope/Items/guns.json | 43 ++---
+ tests/ranged_burst_balance_test.cpp | 2 +-
+ 51 files changed, 306 insertions(+), 524 deletions(-)
+ rename data/json/{items/gunmod => obsoletion}/mount.json (100%)
+
+diff --git a/data/json/items/classes/gun.json b/data/json/items/classes/gun.json
+index d010aa2dee0..8ec6c586c89 100644
+--- a/data/json/items/classes/gun.json
++++ b/data/json/items/classes/gun.json
+@@ -93,10 +93,10 @@
+ [ "grip", 1 ],
+ [ "mechanism", 2 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -129,9 +129,9 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+- [ "stock mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "stock", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -145,15 +145,7 @@
+ "delete": { "flags": [ "NEVER_JAMS" ] },
+ "//": "Slower reloads, no unloading. Base, unskilled person should take 1.5 seconds per chamber. No underbarrel mods, that's where the ram goes.",
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ],
+- "valid_mod_locations": [
+- [ "accessories", 2 ],
+- [ "barrel", 1 ],
+- [ "bore", 1 ],
+- [ "grip", 1 ],
+- [ "stock mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ]
+- ]
++ "valid_mod_locations": [ [ "accessories", 2 ], [ "barrel", 1 ], [ "bore", 1 ], [ "grip", 1 ], [ "stock", 1 ], [ "rail", 1 ], [ "sights", 1 ] ]
+ },
+ {
+ "abstract": "pistol_energy",
+@@ -188,14 +180,7 @@
+ "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NEVER_JAMS", "NON_FOULING", "NEEDS_NO_LUBE" ],
+ "dispersion": 120,
+ "reload": 600,
+- "valid_mod_locations": [
+- [ "accessories", 2 ],
+- [ "grip", 1 ],
+- [ "sights", 1 ],
+- [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
+- ],
++ "valid_mod_locations": [ [ "accessories", 2 ], [ "grip", 1 ], [ "sights", 1 ], [ "stock", 1 ], [ "rail", 1 ], [ "underbarrel", 1 ] ],
+ "faults": [ ]
+ },
+ {
+@@ -271,10 +256,10 @@
+ [ "muzzle", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ],
+ "flags": [ "RELOAD_EJECT" ]
+@@ -340,8 +325,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "faults": [ ]
+ },
+@@ -356,7 +341,7 @@
+ "flags": [ "NEVER_JAMS", "NON_FOULING", "NEEDS_NO_LUBE" ],
+ "dispersion": 350,
+ "reload": 600,
+- "valid_mod_locations": [ [ "accessories", 3 ], [ "sling", 1 ], [ "grip", 1 ], [ "mechanism", 4 ], [ "stock", 1 ], [ "rail mount", 1 ] ],
++ "valid_mod_locations": [ [ "accessories", 3 ], [ "sling", 1 ], [ "grip", 1 ], [ "mechanism", 4 ], [ "stock", 1 ], [ "rail", 1 ] ],
+ "faults": [ ]
+ },
+ {
+@@ -375,14 +360,14 @@
+ [ "barrel", 1 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -415,15 +400,15 @@
+ [ "barrel", 1 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+ [ "loading port", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -475,7 +460,7 @@
+ "dispersion": 300,
+ "reload": 400,
+ "handling": 60,
+- "valid_mod_locations": [ [ "brass catcher", 1 ], [ "sling", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ] ],
++ "valid_mod_locations": [ [ "brass catcher", 1 ], [ "sling", 1 ], [ "rail", 1 ], [ "sights", 1 ] ],
+ "flags": [ "MOUNTED_GUN" ],
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ]
+ },
+diff --git a/data/json/items/classes/range.json b/data/json/items/classes/range.json
+index 0909d41652c..e887e7e5e73 100644
+--- a/data/json/items/classes/range.json
++++ b/data/json/items/classes/range.json
+@@ -77,7 +77,7 @@
+ "name": { "str": "base slingshot" },
+ "skill": "archery",
+ "ammo": "pebble",
+- "valid_mod_locations": [ [ "grip mount", 1 ], [ "underbarrel mount", 1 ] ],
++ "valid_mod_locations": [ [ "grip", 1 ], [ "underbarrel", 1 ] ],
+ "extend": { "flags": [ "BELT_CLIP" ] }
+ },
+ {
+diff --git a/data/json/items/gun/20x66mm.json b/data/json/items/gun/20x66mm.json
+index ef5f400ea73..fcd4ba7d58d 100644
+--- a/data/json/items/gun/20x66mm.json
++++ b/data/json/items/gun/20x66mm.json
+@@ -92,7 +92,7 @@
+ [ "rail", 1 ],
+ [ "sights", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "20x66mm", [ "20x66_10_mag" ] ] ],
+ "flags": [ "WATERPROOF_GUN", "NEVER_JAMS" ]
+diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json
+index 501c3df55a5..9a9f792cae7 100644
+--- a/data/json/items/gun/22.json
++++ b/data/json/items/gun/22.json
+@@ -67,9 +67,9 @@
+ [ "bore", 1 ],
+ [ "grip", 1 ],
+ [ "mechanism", 2 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ],
+ "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ]
+diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json
+index 848fe53ce0a..1b6d7c727d9 100644
+--- a/data/json/items/gun/223.json
++++ b/data/json/items/gun/223.json
+@@ -123,13 +123,13 @@
+ [ "barrel", 1 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "magazine", 1 ],
+ [ "muzzle", 1 ],
+- [ "sights mount", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "underbarrel mount", 1 ],
++ [ "underbarrel", 1 ],
+ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "223", [ "famasmag" ] ] ]
+@@ -435,10 +435,10 @@
+ [ "muzzle", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "223", [ "ruger20", "ruger5", "ruger10", "ruger30", "ruger90", "ruger100", "ruger_makeshiftmag" ] ] ]
+ },
+@@ -586,9 +586,9 @@
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+ [ "underbarrel", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ]
+ ],
+ "magazines": [
+ [
+diff --git a/data/json/items/gun/3006.json b/data/json/items/gun/3006.json
+index 96248a6de79..3963fd1197a 100644
+--- a/data/json/items/gun/3006.json
++++ b/data/json/items/gun/3006.json
+@@ -79,10 +79,10 @@
+ [ "muzzle", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "3006", [ "3006_clip" ] ] ],
+ "flags": [ "RELOAD_ONE" ]
+diff --git a/data/json/items/gun/308.json b/data/json/items/gun/308.json
+index e32022184b3..87677a5128a 100644
+--- a/data/json/items/gun/308.json
++++ b/data/json/items/gun/308.json
+@@ -122,10 +122,10 @@
+ [ "muzzle", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "308", [ "m14mag", "m14smallmag", "m14_makeshiftmag" ] ] ]
+ },
+@@ -232,9 +232,9 @@
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "308", [ "g3_makeshiftmag", "g3mag", "g3bigmag" ] ] ]
+ },
+@@ -302,8 +302,8 @@
+ [ "stock", 1 ],
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
+ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "NEVER_JAMS" ]
+diff --git a/data/json/items/gun/38.json b/data/json/items/gun/38.json
+index e71fa7eaf06..c79c06b26b6 100644
+--- a/data/json/items/gun/38.json
++++ b/data/json/items/gun/38.json
+@@ -21,14 +21,7 @@
+ "blackpowder_tolerance": 60,
+ "clip_size": 2,
+ "reload": 200,
+- "valid_mod_locations": [
+- [ "accessories", 4 ],
+- [ "grip", 1 ],
+- [ "sights", 1 ],
+- [ "underbarrel", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ]
+- ],
++ "valid_mod_locations": [ [ "accessories", 4 ], [ "grip", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ], [ "rail", 1 ], [ "stock", 1 ] ],
+ "delete": { "flags": "NEVER_JAMS" }
+ },
+ {
+@@ -55,9 +48,9 @@
+ [ "bore", 1 ],
+ [ "grip", 1 ],
+ [ "mechanism", 2 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -121,7 +114,7 @@
+ [ "mechanism", 4 ],
+ [ "rail", 1 ],
+ [ "sights", 1 ],
+- [ "stock mount", 1 ],
++ [ "stock", 1 ],
+ [ "underbarrel", 1 ]
+ ]
+ },
+@@ -154,7 +147,7 @@
+ [ "mechanism", 4 ],
+ [ "rail", 1 ],
+ [ "sights", 1 ],
+- [ "stock mount", 1 ],
++ [ "stock", 1 ],
+ [ "underbarrel", 1 ]
+ ]
+ }
+diff --git a/data/json/items/gun/40.json b/data/json/items/gun/40.json
+index 498b7189c15..922be16a0ef 100644
+--- a/data/json/items/gun/40.json
++++ b/data/json/items/gun/40.json
+@@ -191,7 +191,7 @@
+ [ "sights", 1 ],
+ [ "stock", 1 ],
+ [ "underbarrel", 1 ],
+- [ "rail mount", 1 ]
++ [ "rail", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ],
+ "delete": { "faults": "fault_gun_chamber_spent" }
+diff --git a/data/json/items/gun/40x46mm.json b/data/json/items/gun/40x46mm.json
+index 5e5af532fca..a3e217b890b 100644
+--- a/data/json/items/gun/40x46mm.json
++++ b/data/json/items/gun/40x46mm.json
+@@ -21,10 +21,10 @@
+ [ "barrel", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -68,10 +68,10 @@
+ [ "barrel", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -95,10 +95,10 @@
+ [ "barrel", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/gun/40x53mm.json b/data/json/items/gun/40x53mm.json
+index ffe7978e13b..0ed451e6df0 100644
+--- a/data/json/items/gun/40x53mm.json
++++ b/data/json/items/gun/40x53mm.json
+@@ -24,8 +24,8 @@
+ [ "brass catcher", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "modes": [ [ "DEFAULT", "semi", 1, "NPC_AVOID" ], [ "AUTO", "auto", 2, "NPC_AVOID" ] ],
+ "magazines": [ [ "40x53mm", [ "belt40mm" ] ] ],
+diff --git a/data/json/items/gun/410shot.json b/data/json/items/gun/410shot.json
+index f485eb15c46..8e4bdec9554 100644
+--- a/data/json/items/gun/410shot.json
++++ b/data/json/items/gun/410shot.json
+@@ -41,12 +41,12 @@
+ [ "bore", 1 ],
+ [ "muzzle", 1 ],
+ [ "mechanism", 1 ],
+- [ "sights mount", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "stock mount", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "stock", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "extend": { "flags": [ "NEVER_JAMS" ] }
+ }
+diff --git a/data/json/items/gun/44.json b/data/json/items/gun/44.json
+index cc4deed8ff4..d2b4d1c3f21 100644
+--- a/data/json/items/gun/44.json
++++ b/data/json/items/gun/44.json
+@@ -62,8 +62,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/gun/44paper.json b/data/json/items/gun/44paper.json
+index e3fdcabb226..483e2eecb4d 100644
+--- a/data/json/items/gun/44paper.json
++++ b/data/json/items/gun/44paper.json
+@@ -41,8 +41,8 @@
+ [ "grip", 1 ],
+ [ "stock", 1 ],
+ [ "underbarrel", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ]
++ [ "rail", 1 ],
++ [ "sights", 1 ]
+ ],
+ "built_in_mods": [ "lemat_revolver_shotgun" ]
+ }
+diff --git a/data/json/items/gun/454.json b/data/json/items/gun/454.json
+index 9b134a715b8..b35e2aa131e 100644
+--- a/data/json/items/gun/454.json
++++ b/data/json/items/gun/454.json
+@@ -24,8 +24,8 @@
+ [ "mechanism", 4 ],
+ [ "rail", 1 ],
+ [ "sights", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/gun/4570.json b/data/json/items/gun/4570.json
+index 62036e1bc6e..c54a6612423 100644
+--- a/data/json/items/gun/4570.json
++++ b/data/json/items/gun/4570.json
+@@ -23,9 +23,9 @@
+ [ "muzzle", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE" ]
+ },
+@@ -53,9 +53,9 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -85,9 +85,9 @@
+ [ "muzzle", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -107,7 +107,7 @@
+ "ammo": "4570",
+ "dispersion": 400,
+ "blackpowder_tolerance": 80,
+- "valid_mod_locations": [ [ "brass catcher", 1 ], [ "rail mount", 1 ], [ "sights", 1 ] ],
++ "valid_mod_locations": [ [ "brass catcher", 1 ], [ "rail", 1 ], [ "sights", 1 ] ],
+ "modes": [ [ "DEFAULT", "single", 1 ], [ "AUTO", "burst", 3 ] ],
+ "//": "If speedloaders get fixed to allow topping off a partially-loaded gun, adding the more common Bruce feed (40 round feed tray topped off with 20-round blocks) would be an option.",
+ "magazines": [ [ "4570", [ "gatlingdrum240" ] ] ],
+diff --git a/data/json/items/gun/45colt.json b/data/json/items/gun/45colt.json
+index db54e498372..e6a2b6a6250 100644
+--- a/data/json/items/gun/45colt.json
++++ b/data/json/items/gun/45colt.json
+@@ -23,9 +23,9 @@
+ [ "bore", 1 ],
+ [ "grip", 1 ],
+ [ "mechanism", 2 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/gun/50.json b/data/json/items/gun/50.json
+index 0920cb6f218..dad0ca0fa82 100644
+--- a/data/json/items/gun/50.json
++++ b/data/json/items/gun/50.json
+@@ -46,8 +46,8 @@
+ [ "sling", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "50", [ "belt50" ] ] ],
+ "flags": [ "MOUNTED_GUN" ]
+@@ -84,8 +84,8 @@
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+ [ "grip", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ ],
+ "clip_size": 1,
+diff --git a/data/json/items/gun/500.json b/data/json/items/gun/500.json
+index 0954d54fb7a..58f0ed4665f 100644
+--- a/data/json/items/gun/500.json
++++ b/data/json/items/gun/500.json
+@@ -27,8 +27,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -56,8 +56,8 @@
+ [ "mechanism", 4 ],
+ [ "rail", 1 ],
+ [ "sights", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ }
+ ]
+diff --git a/data/json/items/gun/66mm.json b/data/json/items/gun/66mm.json
+index dd89b475912..effed9c7242 100644
+--- a/data/json/items/gun/66mm.json
++++ b/data/json/items/gun/66mm.json
+@@ -43,13 +43,6 @@
+ "durability": 9,
+ "clip_size": 1,
+ "reload": 150,
+- "valid_mod_locations": [
+- [ "accessories", 1 ],
+- [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
+- ]
++ "valid_mod_locations": [ [ "accessories", 1 ], [ "sling", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ] ]
+ }
+ ]
+diff --git a/data/json/items/gun/762.json b/data/json/items/gun/762.json
+index a21d1e6d8fa..2b516169168 100644
+--- a/data/json/items/gun/762.json
++++ b/data/json/items/gun/762.json
+@@ -24,11 +24,11 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ]
+ },
+@@ -100,11 +100,11 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ]
+ },
+@@ -134,11 +134,11 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ]
+ }
+diff --git a/data/json/items/gun/762x25.json b/data/json/items/gun/762x25.json
+index 397d57e9a93..2a34af4ea9e 100644
+--- a/data/json/items/gun/762x25.json
++++ b/data/json/items/gun/762x25.json
+@@ -30,7 +30,7 @@
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+ [ "underbarrel", 1 ],
+- [ "rail mount", 1 ]
++ [ "rail", 1 ]
+ ],
+ "magazines": [ [ "762x25", [ "ppshmag", "ppshdrum" ] ] ]
+ },
+diff --git a/data/json/items/gun/84x246mm.json b/data/json/items/gun/84x246mm.json
+index 29c8d5d810f..a3b1bcbbd97 100644
+--- a/data/json/items/gun/84x246mm.json
++++ b/data/json/items/gun/84x246mm.json
+@@ -25,8 +25,8 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/gun/9mm.json b/data/json/items/gun/9mm.json
+index a3db7b059ac..dea9a3429f9 100644
+--- a/data/json/items/gun/9mm.json
++++ b/data/json/items/gun/9mm.json
+@@ -117,9 +117,9 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ]
+ ],
+@@ -142,9 +142,9 @@
+ [ "brass catcher", 1 ],
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ]
+ ],
+@@ -173,8 +173,8 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "underbarrel", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ]
+@@ -199,9 +199,9 @@
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "sights", 1 ],
+- [ "underbarrel mount", 1 ],
++ [ "underbarrel", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ]
+ ],
+@@ -385,10 +385,10 @@
+ [ "muzzle", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "9mm", [ "stenmag", "survivor9mm_mag" ] ] ]
+ },
+diff --git a/data/json/items/gun/atgm.json b/data/json/items/gun/atgm.json
+index d08f2aa7a30..706e60049c6 100644
+--- a/data/json/items/gun/atgm.json
++++ b/data/json/items/gun/atgm.json
+@@ -19,7 +19,7 @@
+ "clip_size": 1,
+ "reload": 600,
+ "loudness": 200,
+- "valid_mod_locations": [ [ "sling", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ], [ "underbarrel mount", 1 ] ],
++ "valid_mod_locations": [ [ "sling", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ] ],
+ "extend": { "flags": [ "RELOAD_EJECT", "MOUNTED_GUN" ] }
+ }
+ ]
+diff --git a/data/json/items/gun/blunderbuss.json b/data/json/items/gun/blunderbuss.json
+index 9b95f5f0763..f123f83524e 100644
+--- a/data/json/items/gun/blunderbuss.json
++++ b/data/json/items/gun/blunderbuss.json
+@@ -19,14 +19,7 @@
+ "clip_size": 1,
+ "reload": 300,
+ "barrel_length": "500 ml",
+- "valid_mod_locations": [
+- [ "sling", 1 ],
+- [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
+- ],
++ "valid_mod_locations": [ [ "sling", 1 ], [ "stock", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ] ],
+ "faults": [ ]
+ }
+ ]
+diff --git a/data/json/items/gun/combination.json b/data/json/items/gun/combination.json
+index 3287be03365..22e6bf7fa5f 100644
+--- a/data/json/items/gun/combination.json
++++ b/data/json/items/gun/combination.json
+@@ -28,7 +28,7 @@
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+ [ "underbarrel", 1 ],
+- [ "rail mount", 1 ]
++ [ "rail", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/gun/flammable.json b/data/json/items/gun/flammable.json
+index 9068ff03e6b..3ba14725f14 100644
+--- a/data/json/items/gun/flammable.json
++++ b/data/json/items/gun/flammable.json
+@@ -17,10 +17,10 @@
+ [ "accessories", 1 ],
+ [ "grip", 1 ],
+ [ "sling", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "stock", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "flammable", [ "pressurized_tank" ] ] ]
+ },
+diff --git a/data/json/items/gun/flintlock.json b/data/json/items/gun/flintlock.json
+index de0bc8717f9..90b94fd59ae 100644
+--- a/data/json/items/gun/flintlock.json
++++ b/data/json/items/gun/flintlock.json
+@@ -9,11 +9,11 @@
+ "valid_mod_locations": [
+ [ "accessories", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "volume": "2250 ml",
+ "weight": "3600 g",
+@@ -55,14 +55,7 @@
+ "blackpowder_tolerance": 96,
+ "clip_size": 1,
+ "reload": 600,
+- "valid_mod_locations": [
+- [ "accessories", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
+- ],
++ "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "stock", 1 ], [ "underbarrel", 1 ] ],
+ "flags": [ "NEVER_JAMS" ]
+ },
+ {
+@@ -91,9 +84,9 @@
+ [ "accessories", 1 ],
+ [ "sling", 1 ],
+ [ "underbarrel", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "stock", 1 ]
+ ],
+ "extend": { "flags": [ "DURABLE_MELEE" ] }
+diff --git a/data/json/items/gun/misc.json b/data/json/items/gun/misc.json
+index 54884ef07a8..ec4d43f9286 100644
+--- a/data/json/items/gun/misc.json
++++ b/data/json/items/gun/misc.json
+@@ -19,7 +19,7 @@
+ "clip_size": 1,
+ "reload": 800,
+ "loudness": 200,
+- "valid_mod_locations": [ [ "sling", 1 ], [ "grip mount", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ], [ "underbarrel mount", 1 ] ]
++ "valid_mod_locations": [ [ "sling", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ] ]
+ },
+ {
+ "id": "watercannon",
+diff --git a/data/json/items/gun/nail.json b/data/json/items/gun/nail.json
+index bedf605cf5b..6df29b41a28 100644
+--- a/data/json/items/gun/nail.json
++++ b/data/json/items/gun/nail.json
+@@ -18,6 +18,6 @@
+ "loudness": 5,
+ "clip_size": 20,
+ "reload": 50,
+- "valid_mod_locations": [ [ "grip mount", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ], [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ]
++ "valid_mod_locations": [ [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "stock", 1 ], [ "underbarrel", 1 ] ]
+ }
+ ]
+diff --git a/data/json/items/gun/paintball.json b/data/json/items/gun/paintball.json
+index 6eea43e32fe..f1e584dc959 100644
+--- a/data/json/items/gun/paintball.json
++++ b/data/json/items/gun/paintball.json
+@@ -23,13 +23,6 @@
+ "durability": 7,
+ "clip_size": 50,
+ "reload": 50,
+- "valid_mod_locations": [
+- [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
+- ]
++ "valid_mod_locations": [ [ "sling", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "stock", 1 ], [ "underbarrel", 1 ] ]
+ }
+ ]
+diff --git a/data/json/items/gun/rpg.json b/data/json/items/gun/rpg.json
+index 44e881691c8..3ffb55be6e7 100644
+--- a/data/json/items/gun/rpg.json
++++ b/data/json/items/gun/rpg.json
+@@ -24,8 +24,8 @@
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ }
+ ]
+diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json
+index d170049a3b3..a599c10aae7 100644
+--- a/data/json/items/gun/shot.json
++++ b/data/json/items/gun/shot.json
+@@ -24,11 +24,11 @@
+ "valid_mod_locations": [
+ [ "accessories", 1 ],
+ [ "grip", 1 ],
+- [ "stock mount", 1 ],
++ [ "stock", 1 ],
+ [ "mechanism", 4 ],
+- [ "sights mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "sights", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -50,7 +50,7 @@
+ "burst": 6,
+ "reload": 200,
+ "handling": 30,
+- "valid_mod_locations": [ [ "accessories", 4 ], [ "sights", 1 ], [ "rail mount", 1 ] ],
++ "valid_mod_locations": [ [ "accessories", 4 ], [ "sights", 1 ], [ "rail", 1 ] ],
+ "magazines": [ [ "shot", [ "shotbelt_20" ] ] ],
+ "flags": [ "MOUNTED_GUN" ]
+ },
+@@ -96,10 +96,10 @@
+ [ "barrel", 1 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "underbarrel", 2 ]
+@@ -128,10 +128,10 @@
+ [ "barrel", 1 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "underbarrel", 2 ]
+@@ -157,11 +157,11 @@
+ [ "mechanism", 4 ],
+ [ "sling", 1 ],
+ [ "barrel", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "loading port", 1 ],
+ [ "brass catcher", 1 ],
+ [ "sights", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "NEEDS_UNFOLD" ]
+ },
+@@ -236,14 +236,14 @@
+ [ "accessories", 2 ],
+ [ "sling", 1 ],
+ [ "barrel", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "loading port", 1 ],
+ [ "brass catcher", 1 ],
+ [ "mechanism", 4 ],
+ [ "sights", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "extend": { "flags": [ "RELOAD_ONE" ] }
+ },
+@@ -261,12 +261,12 @@
+ "valid_mod_locations": [
+ [ "accessories", 2 ],
+ [ "sling", 1 ],
+- [ "stock mount", 1 ],
++ [ "stock", 1 ],
+ [ "barrel", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "extend": { "flags": [ "RELOAD_ONE" ] }
+ },
+@@ -291,13 +291,13 @@
+ "valid_mod_locations": [
+ [ "accessories", 2 ],
+ [ "sling", 1 ],
+- [ "stock mount", 1 ],
++ [ "stock", 1 ],
+ [ "barrel", 1 ],
+ [ "muzzle", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ]
+ },
+@@ -347,11 +347,11 @@
+ [ "grip", 1 ],
+ [ "loading port", 1 ],
+ [ "mechanism", 4 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -394,10 +394,10 @@
+ [ "barrel", 1 ],
+ [ "stock", 1 ],
+ [ "mechanism", 4 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "loading port", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "extend": { "flags": [ "RELOAD_ONE" ] }
+ },
+@@ -423,10 +423,10 @@
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+ [ "barrel", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "RELOAD_EJECT", "NEVER_JAMS" ]
+ },
+@@ -452,10 +452,10 @@
+ [ "mechanism", 4 ],
+ [ "barrel", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "shot", [ "saiga10mag", "saiga30mag" ] ] ]
+ },
+@@ -496,12 +496,12 @@
+ [ "bore", 1 ],
+ [ "muzzle", 1 ],
+ [ "mechanism", 1 ],
+- [ "sights mount", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "extend": { "flags": [ "NEVER_JAMS" ] }
+ },
+@@ -533,11 +533,11 @@
+ [ "brass catcher", 1 ],
+ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "RELOAD_EJECT", "NEVER_JAMS" ]
+ },
+@@ -562,14 +562,14 @@
+ [ "accessories", 4 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 2 ],
+ [ "muzzle", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE" ]
+ },
+@@ -595,11 +595,11 @@
+ [ "accessories", 2 ],
+ [ "bore", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "mechanism", 4 ],
+ [ "muzzle", 1 ],
+ [ "underbarrel", 2 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ]
+ ],
+@@ -628,9 +628,9 @@
+ [ "muzzle", 1 ],
+ [ "grip", 1 ],
+ [ "brass catcher", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "modes": [ [ "DEFAULT", "semi", 1 ], [ "AUTO", "auto", 5 ] ],
+ "magazines": [ [ "shot", [ "USAS10mag", "USAS20mag" ] ] ]
+@@ -657,14 +657,14 @@
+ "modes": [ [ "DEFAULT", "single", 1 ] ],
+ "valid_mod_locations": [
+ [ "accessories", 2 ],
+- [ "stock mount", 1 ],
++ [ "stock", 1 ],
+ [ "mechanism", 2 ],
+ [ "barrel", 1 ],
+- [ "grip mount", 1 ],
++ [ "grip", 1 ],
+ [ "brass catcher", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE" ]
+ },
+@@ -694,9 +694,9 @@
+ [ "muzzle", 1 ],
+ [ "sling", 1 ],
+ [ "brass catcher", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
+ [ "underbarrel", 1 ]
+ ],
+ "default_mods": [ "sword_bayonet" ],
+diff --git a/data/json/items/gun/shotpaper.json b/data/json/items/gun/shotpaper.json
+index f5cf170037f..27105ff1bfa 100644
+--- a/data/json/items/gun/shotpaper.json
++++ b/data/json/items/gun/shotpaper.json
+@@ -22,12 +22,12 @@
+ [ "accessories", 2 ],
+ [ "barrel", 1 ],
+ [ "muzzle", 1 ],
+- [ "sights mount", 1 ],
++ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "NEVER_JAMS" ]
+ }
+diff --git a/data/json/items/gun/signal_flare.json b/data/json/items/gun/signal_flare.json
+index b359f251261..9592711086c 100644
+--- a/data/json/items/gun/signal_flare.json
++++ b/data/json/items/gun/signal_flare.json
+@@ -17,14 +17,7 @@
+ "durability": 7,
+ "loudness": 40,
+ "clip_size": 1,
+- "valid_mod_locations": [
+- [ "accessories", 4 ],
+- [ "grip", 1 ],
+- [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
+- ],
++ "valid_mod_locations": [ [ "accessories", 4 ], [ "grip", 1 ], [ "stock", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ] ],
+ "extend": { "flags": [ "WATERPROOF_GUN", "PYROMANIAC_WEAPON" ] },
+ "faults": [ ]
+ }
+diff --git a/data/json/items/gun/ups.json b/data/json/items/gun/ups.json
+index c291ad20b75..f0936360820 100644
+--- a/data/json/items/gun/ups.json
++++ b/data/json/items/gun/ups.json
+@@ -122,11 +122,11 @@
+ [ "emitter", 1 ],
+ [ "lens", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "LASER", "INCENDIARY" ]
+ },
+diff --git a/data/json/items/ranged/crossbows.json b/data/json/items/ranged/crossbows.json
+index 30df24032c4..7626ebfa1f0 100644
+--- a/data/json/items/ranged/crossbows.json
++++ b/data/json/items/ranged/crossbows.json
+@@ -338,14 +338,7 @@
+ "dispersion": 375,
+ "durability": 6,
+ "reload": 800,
+- "valid_mod_locations": [
+- [ "accessories", 4 ],
+- [ "dampening", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ],
+- [ "mechanism", 1 ]
+- ]
++ "valid_mod_locations": [ [ "accessories", 4 ], [ "dampening", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ], [ "mechanism", 1 ] ]
+ },
+ {
+ "id": "compositecrossbow",
+diff --git a/data/json/items/ranged/pneumatic.json b/data/json/items/ranged/pneumatic.json
+index 3249c93783c..1bbe5f657af 100644
+--- a/data/json/items/ranged/pneumatic.json
++++ b/data/json/items/ranged/pneumatic.json
+@@ -27,9 +27,9 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/items/ranged/spearguns.json b/data/json/items/ranged/spearguns.json
+index a1d95fbe962..13fe8e90d0c 100644
+--- a/data/json/items/ranged/spearguns.json
++++ b/data/json/items/ranged/spearguns.json
+@@ -94,8 +94,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/data/json/not_really_obsolete.json b/data/json/not_really_obsolete.json
+index b745c6c2840..aa615cfaf2e 100644
+--- a/data/json/not_really_obsolete.json
++++ b/data/json/not_really_obsolete.json
+@@ -148,8 +148,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "PLASMA", "EXPLOSIVE", "FLAME" ]
+ },
+diff --git a/data/json/obsoletion/items.json b/data/json/obsoletion/items.json
+index 74d09d98e1c..95c7d704106 100644
+--- a/data/json/obsoletion/items.json
++++ b/data/json/obsoletion/items.json
+@@ -386,7 +386,7 @@
+ "range": -2,
+ "dispersion": 300,
+ "clip_size": 100,
+- "valid_mod_locations": [ [ "sling", 1 ], [ "stock", 1 ], [ "rail mount", 1 ] ],
++ "valid_mod_locations": [ [ "sling", 1 ], [ "stock", 1 ], [ "rail", 1 ] ],
+ "relative": { "reload": 4 }
+ },
+ {
+@@ -461,7 +461,7 @@
+ [ "rail", 1 ],
+ [ "sights", 1 ],
+ [ "stock", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "LASER", "INCENDIARY" ],
+ "flags": [ "NO_UNLOAD" ]
+@@ -1246,9 +1246,9 @@
+ [ "muzzle", 1 ],
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "blackpowder_tolerance": 60,
+ "relative": { "durability": -3 },
+@@ -1915,8 +1915,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -1943,7 +1943,7 @@
+ "durability": 7,
+ "clip_size": 1,
+ "reload": 800,
+- "valid_mod_locations": [ [ "sling", 1 ], [ "grip mount", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ], [ "underbarrel mount", 1 ] ]
++ "valid_mod_locations": [ [ "sling", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "underbarrel", 1 ] ]
+ },
+ {
+ "id": "coilgun",
+@@ -1974,8 +1974,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "nail", [ "nailmag" ] ] ]
+ },
+@@ -1999,8 +1999,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [ [ "nail", [ "nailmag" ] ] ],
+ "relative": { "weight": 1000, "volume": 6, "range": 3, "ranged_damage": { "damage_type": "stab", "amount": 4 } },
+diff --git a/data/json/items/gunmod/mount.json b/data/json/obsoletion/mount.json
+similarity index 100%
+rename from data/json/items/gunmod/mount.json
+rename to data/json/obsoletion/mount.json
+diff --git a/data/json/obsoletion/recipes.json b/data/json/obsoletion/recipes.json
+index 9bd16374c34..ae6d33169e4 100644
+--- a/data/json/obsoletion/recipes.json
++++ b/data/json/obsoletion/recipes.json
+@@ -3239,6 +3239,41 @@
+ "result": "linuxtshirtuncraft",
+ "obsolete": true
+ },
++ {
++ "type": "recipe",
++ "result": "grip_mount",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "stock_mount",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "underbarrel_mount",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "rail_mount",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "sights_mount_pistol",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "sights_mount_launcher",
++ "obsolete": true
++ },
++ {
++ "type": "recipe",
++ "result": "sights_mount",
++ "obsolete": true
++ },
+ {
+ "type": "recipe",
+ "result": "welder_crude",
+diff --git a/data/json/recipes/weapon/mods.json b/data/json/recipes/weapon/mods.json
+index 1ac272e0e65..059185de546 100644
+--- a/data/json/recipes/weapon/mods.json
++++ b/data/json/recipes/weapon/mods.json
+@@ -738,188 +738,6 @@
+ "tools": [ [ [ "large_repairkit", 25 ], [ "small_repairkit", 45 ] ] ],
+ "components": [ [ [ "offset_sights", 1 ] ], [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ]
+ },
+- {
+- "result": "sights_mount",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 4 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ]
+- },
+- {
+- "result": "sights_mount_launcher",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 4 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ]
+- },
+- {
+- "result": "sights_mount_pistol",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 4 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ]
+- },
+- {
+- "result": "rail_mount",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 4 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ]
+- },
+- {
+- "result": "underbarrel_mount",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 4 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ]
+- },
+- {
+- "result": "stock_mount",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 5 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 3 ] ] ]
+- },
+- {
+- "result": "grip_mount",
+- "type": "recipe",
+- "category": "CC_WEAPON",
+- "subcategory": "CSC_WEAPON_MODS",
+- "skill_used": "fabrication",
+- "difficulty": 3,
+- "skills_required": [ [ "gun", 5 ] ],
+- "time": "30 m",
+- "book_learn": [
+- [ "mag_guns", 4 ],
+- [ "mag_pistol", 4 ],
+- [ "mag_shotgun", 4 ],
+- [ "mag_smg", 4 ],
+- [ "mag_rifle", 4 ],
+- [ "manual_gun", 4 ],
+- [ "manual_pistol", 4 ],
+- [ "manual_shotgun", 4 ],
+- [ "manual_smg", 4 ],
+- [ "manual_rifle", 4 ]
+- ],
+- "using": [ [ "soldering_standard", 15 ] ],
+- "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "SAW_M_FINE", "level": 1 } ],
+- "tools": [ [ [ "large_repairkit", 10 ], [ "small_repairkit", 30 ] ] ],
+- "components": [ [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 3 ] ] ]
+- },
+ {
+ "type": "recipe",
+ "result": "tele_sight",
+diff --git a/data/mods/Aftershock/items/obsolete.json b/data/mods/Aftershock/items/obsolete.json
+index 17f2bb22534..f6806ad84f2 100644
+--- a/data/mods/Aftershock/items/obsolete.json
++++ b/data/mods/Aftershock/items/obsolete.json
+@@ -356,8 +356,8 @@
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+ [ "sights", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "TRAIL" ]
+ }
+diff --git a/data/mods/Aftershock/items/weapons.json b/data/mods/Aftershock/items/weapons.json
+index 77652ecf40d..be8ba0b5b91 100644
+--- a/data/mods/Aftershock/items/weapons.json
++++ b/data/mods/Aftershock/items/weapons.json
+@@ -250,11 +250,11 @@
+ [ "emitter", 1 ],
+ [ "lens", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "LASER", "INCENDIARY" ],
+ "flags": [ "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
+diff --git a/data/mods/Generic_Guns/firearms/obsolete.json b/data/mods/Generic_Guns/firearms/obsolete.json
+index fcf88b10709..5345ecfa464 100644
+--- a/data/mods/Generic_Guns/firearms/obsolete.json
++++ b/data/mods/Generic_Guns/firearms/obsolete.json
+@@ -32,10 +32,10 @@
+ [ "muzzle", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "magazines": [
+ [ "ammo_pistol", [ "pistol_magnum_mag", "pistol_magnum_mag_hc" ] ],
+diff --git a/data/mods/Magiclysm/items/enchanted_ranged.json b/data/mods/Magiclysm/items/enchanted_ranged.json
+index 3701be94ecf..c5f2bcc1bee 100644
+--- a/data/mods/Magiclysm/items/enchanted_ranged.json
++++ b/data/mods/Magiclysm/items/enchanted_ranged.json
+@@ -51,10 +51,10 @@
+ [ "mechanism", 1 ],
+ [ "barrel", 1 ],
+ [ "grip", 1 ],
+- [ "rail mount", 1 ],
++ [ "rail", 1 ],
+ [ "sights", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ]
+ },
+diff --git a/data/mods/No_Hope/Items/guns.json b/data/mods/No_Hope/Items/guns.json
+index 67194e3f282..fe93f821dec 100644
+--- a/data/mods/No_Hope/Items/guns.json
++++ b/data/mods/No_Hope/Items/guns.json
+@@ -28,11 +28,11 @@
+ [ "emitter", 1 ],
+ [ "lens", 1 ],
+ [ "sling", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "sights mount", 1 ],
+- [ "stock mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "sights", 1 ],
++ [ "stock", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "LASER", "INCENDIARY" ],
+ "flags": [ "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
+@@ -88,8 +88,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ],
+ "ammo_effects": [ "PLASMA", "EXPLOSIVE", "FLAME" ],
+ "flags": [ "USE_UPS", "NO_UNLOAD", "PYROMANIAC_WEAPON", "NEVER_JAMS" ]
+@@ -140,14 +140,7 @@
+ "blackpowder_tolerance": 56,
+ "clip_size": 6,
+ "built_in_mods": [ "lead_holo_sight", "lead_laser_sight" ],
+- "valid_mod_locations": [
+- [ "accessories", 2 ],
+- [ "sights", 1 ],
+- [ "underbarrel", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ]
+- ]
++ "valid_mod_locations": [ [ "accessories", 2 ], [ "sights", 1 ], [ "underbarrel", 1 ], [ "grip", 1 ], [ "rail", 1 ], [ "stock", 1 ] ]
+ },
+ {
+ "id": "l_long_45",
+@@ -182,9 +175,9 @@
+ [ "sling", 1 ],
+ [ "underbarrel", 1 ],
+ [ "muzzle", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "stock", 1 ]
+ ],
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ],
+ "flags": [ "RELOAD_ONE" ]
+@@ -238,9 +231,9 @@
+ [ "sights", 1 ],
+ [ "underbarrel", 1 ],
+ [ "muzzle", 1 ],
+- [ "grip mount", 1 ],
+- [ "rail mount", 1 ],
+- [ "stock mount", 1 ]
++ [ "grip", 1 ],
++ [ "rail", 1 ],
++ [ "stock", 1 ]
+ ],
+ "flags": [ "DURABLE_MELEE" ]
+ },
+@@ -487,8 +480,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+@@ -526,8 +519,8 @@
+ [ "sights", 1 ],
+ [ "sling", 1 ],
+ [ "stock", 1 ],
+- [ "rail mount", 1 ],
+- [ "underbarrel mount", 1 ]
++ [ "rail", 1 ],
++ [ "underbarrel", 1 ]
+ ]
+ },
+ {
+diff --git a/tests/ranged_burst_balance_test.cpp b/tests/ranged_burst_balance_test.cpp
+index d6f787ba11e..44e261799ce 100644
+--- a/tests/ranged_burst_balance_test.cpp
++++ b/tests/ranged_burst_balance_test.cpp
+@@ -102,7 +102,7 @@ TEST_CASE( "average_burst_bipod", "[ranged] [balance]" )
+ standard_npc shooter( "Shooter", shooter_pos, {}, 5, 10, 8, 8, 8 );
+ check_burst_penalty( shooter, "m249", {}, 40, true );
+ check_burst_penalty( shooter, "m240", {}, 90, true );
+- check_burst_penalty( shooter, "m2browning", {"underbarrel_mount", "bipod"}, 160, true );
++ check_burst_penalty( shooter, "m2browning", {"bipod"}, 160, true );
+ check_burst_penalty( shooter, "m1918", {"bipod"}, 160, true );
+ }
+
+--
+2.43.0
+
diff --git a/revert-31_restore-vague-nether-healing.patch b/revert-31_restore-vague-nether-healing.patch
new file mode 100644
index 0000000..e7b03cf
--- /dev/null
+++ b/revert-31_restore-vague-nether-healing.patch
@@ -0,0 +1,51 @@
+
+---
+ src/monster.cpp | 34 +++---
+ 13 files changed, 184 insertions(+), 44 deletions(-)
+
+diff --git a/src/monster.cpp b/src/monster.cpp
+index 665d82321e8..c8c7d4d1c2b 100644
+--- a/src/monster.cpp
++++ b/src/monster.cpp
+@@ -2819,25 +2825,23 @@ void monster::process_effects_internal()
+ regeneration_amount = 0;
+ }
+ const int healed_amount = heal( round( regeneration_amount ) );
+- if( healed_amount > 0 && one_in( 2 ) && g->u.sees( *this ) ) {
+- add_msg( m_debug, ( "Regen: %s" ), healed_amount );
+- std::string healing_format_string;
+- if( healed_amount >= 50 ) {
+- healing_format_string = _( "The %s is visibly regenerating!" );
+- } else if( healed_amount >= 10 ) {
+- healing_format_string = _( "The %s seems a little healthier." );
+- } else {
+- healing_format_string = _( "The %s is healing slowly." );
+- }
+- add_msg( m_warning, healing_format_string, name() );
++ if( healed_amount > 0 && g->u.sees( *this ) ) {
++ add_msg( m_warning, _( "The %1$s regenerates %2$s damage." ), name(), healed_amount );
+ }
+
+ if( type->regenerates_in_dark ) {
+ const float light = g->m.ambient_light_at( pos() );
+- // Magic number 10000 was chosen so that a floodlight prevents regeneration in a range of 20 tiles
+- if( heal( static_cast<int>( 50.0 * std::exp( - light * light / 10000 ) ) > 0 && one_in( 2 ) &&
+- g->u.sees( *this ) ) ) {
+- add_msg( m_warning, _( "The %s uses the darkness to regenerate." ), name() );
++ add_msg( m_debug, _( "%1$s local light level: %2$s" ), name(), light );
++ // Requires standing in a properly dark tile, scales as it gets darker
++ if( light < 11.0f && one_in( 2 ) && hp < type->hp ) {
++ // Regen will max out at 50 at 6.0 light (barely able to craft), or top off to max HP
++ int dark_regen_amount = std::min( static_cast<int>( 110.0f - ( light * 10.0f ) ), type->hp - hp );
++ dark_regen_amount = std::min( dark_regen_amount, 50 );
++ heal( round( dark_regen_amount ) );
++ if( dark_regen_amount > 0 && g->u.sees( *this ) ) {
++ add_msg( m_warning, _( "The %1$s uses the darkness to regenerate %2$s damage." ), name(),
++ dark_regen_amount );
++ }
+ }
+ }
+
+--
+2.43.0
+
diff --git a/src-15_slow-down-fungal-blossoms.patch b/src-15_slow-down-fungal-blossoms.patch
new file mode 100644
index 0000000..b3c3832
--- /dev/null
+++ b/src-15_slow-down-fungal-blossoms.patch
@@ -0,0 +1,20 @@
+--- a/src/fungal_effects.cpp
++++ b/src/fungal_effects.cpp
+@@ -167,7 +167,7 @@
+ } else if( m.has_flag( flag_YOUNG, p ) ) {
+ if( x_in_y( growth * 10, 500 ) ) {
+ if( m.get_field_intensity( p, fd_fungal_haze ) != 0 ) {
+- if( x_in_y( growth * 10, 800 ) ) { // young trees are vulnerable
++ if( x_in_y( growth * 10, 1600 ) ) { // young trees are vulnerable
+ m.ter_set( p, t_fungus );
+ if( gm.place_critter_at( mon_fungal_blossom, p ) && gm.u.sees( p ) ) {
+ add_msg( m_warning, _( "The young tree blooms forth into a fungal blossom!" ) );
+@@ -183,7 +183,7 @@
+ } else if( m.has_flag( flag_TREE, p ) ) {
+ if( one_in( 10 ) ) {
+ if( m.get_field_intensity( p, fd_fungal_haze ) != 0 ) {
+- if( x_in_y( growth * 10, 100 ) ) {
++ if( x_in_y( growth * 10, 2000 ) ) {
+ m.ter_set( p, t_fungus );
+ if( gm.place_critter_at( mon_fungal_blossom, p ) && gm.u.sees( p ) ) {
+ add_msg( m_warning, _( "The tree blooms forth into a fungal blossom!" ) );
diff --git a/tools-04_normalize-drone-volume.patch b/tools-04_normalize-drone-volume.patch
deleted file mode 100644
index 6e3eb14..0000000
--- a/tools-04_normalize-drone-volume.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/data/json/items/corpses/inactive_bots.json
-+++ b/data/json/items/corpses/inactive_bots.json
-@@ -5,7 +5,7 @@
- "name": { "str": "inactive EMP hack" },
- "description": "This is an inactive EMP hack. EMP hacks are fist-sized robots that fly through the air. This one contains an EMP grenade and attacks by flying at its target and detonating. Use this item to reprogram and release the EMP hack. Electronics and computer skill determines if the targeting matrix is reprogrammed successfully.",
- "weight": "3750 g",
-- "volume": "750 ml",
-+ "volume": "250 ml",
- "price": 64500,
- "price_postapoc": 3000,
- "to_hit": -3,
-@@ -31,7 +31,7 @@
- "name": { "str": "inactive C-4 hack" },
- "description": "This is an inactive C-4 hack. C-4 hacks are fist-sized robots that fly through the air. This one contains some C-4 and attacks by flying at its target and detonating. Use this item to reprogram and activate the C-4 hack. Electronics and computer skill determines if the targeting matrix is reprogrammed successfully.",
- "weight": "4920 g",
-- "volume": "250 ml",
-+ "volume": "1 L",
- "price": 67500,
- "price_postapoc": 3000,
- "to_hit": -3,
-@@ -57,7 +57,7 @@
- "name": { "str": "inactive flashbang hack" },
- "description": "This is an inactive flashbang hack. Flashbang hacks are fist-sized robots that fly through the air. This one contains a flashbang and attacks by flying at its target and detonating. Use this item to reprogram and activate the flashbang hack. Electronics and computer skill determines if the targeting matrix is reprogrammed successfully.",
- "weight": "3590 g",
-- "volume": "750 ml",
-+ "volume": "250 ml",
- "price": 59500,
- "price_postapoc": 500,
- "to_hit": -3,
-@@ -83,7 +83,7 @@
- "name": { "str": "inactive tear gas hack" },
- "description": "This is an inactive tear gas hack. Tear gas hacks are fist-sized robots that fly through the air. This one contains a tear gas canister and attacks by flying at its target and releasing tear gas. Use this item to reprogram and activate the tear gas hack. Electronics and computer skill determines if the targeting matrix is reprogrammed successfully.",
- "weight": "4410 g",
-- "volume": "750 ml",
-+ "volume": "250 ml",
- "price": 60500,
- "price_postapoc": 500,
- "to_hit": -3,
-@@ -157,7 +157,7 @@
- "name": { "str": "inactive manhack" },
- "description": "This is an inactive manhack. Manhacks are fist-sized robots that fly through the air. They are covered with whirring blades and attack by throwing themselves against their target. Use this item to reprogram and activate the manhack. Electronics and computer skill determines if the targeting matrix is reprogrammed successfully.",
- "weight": "4450 g",
-- "volume": "750 ml",
-+ "volume": "250 ml",
- "price": 60000,
- "price_postapoc": 500,
- "to_hit": -3,
-@@ -183,7 +183,7 @@
- "name": { "str": "inactive mininuke hack" },
- "description": "This is an inactive mininuke hack. Many times as large as a normal manhack, a mininuke hack contains a mininuke and attack by flying at their target and detonating. Use this item to reprogram and activate the mininuke hack. Electronics and computer skill determines if the targeting matrix is reprogrammed successfully.",
- "weight": "26370 g",
-- "volume": "18750 ml",
-+ "volume": "16 L",
- "price": 2677500,
- "price_postapoc": 10000,
- "to_hit": -3,
diff --git a/vampirism.patch b/vampirism.patch
index 2d20f87..f4d9509 100644
--- a/vampirism.patch
+++ b/vampirism.patch
@@ -671,6 +671,15 @@
"phase": "gas",
"display_items": false,
"display_field": true,
+@@ -577,7 +577,7 @@
+ "outdoor_age_speedup": "3 minutes",
+ "dirty_transparency_cache": true,
+ "has_fume": true,
+- "immunity_data": { "body_part_env_resistance": [ [ "mouth", 15 ] ] },
++ "immunity_data": { "body_part_env_resistance": [ [ "mouth", 15 ] ], "traits": [ "VAMP_SKIN" ] },
+ "priority": 8,
+ "half_life": "10 minutes",
+ "phase": "gas",
@@ -956,7 +956,7 @@
"outdoor_age_speedup": "5 minutes",
"dirty_transparency_cache": true,