summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2023-12-30 21:58:12 -0800
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2023-12-30 21:58:12 -0800
commitd4bc63a8f8ee37ec2de2f43734a60ca045e517c3 (patch)
treed49d6000c1d82e7add7cfcccf873f85224ab823c
parentFix Mr Lapin meet the Isherwood quest looping. (diff)
downloadcataclysm-bn-d4bc63a8f8ee37ec2de2f43734a60ca045e517c3.tar.xz
Updated to 0.5.1
Removed obsolete mods. Revert removal of Alonso. Revert biodiesel working in petrol engines. Revert hard skill caps. Revert three more broken limb changesets. Revert another ammo rebalance changeset. Revert craftable smokeless gunpowder changeset. Revised book chapters revert patch. Fix some bad terrain in the godco patch. Fix some bad terrain in the prison island patch.
-rw-r--r--External_Tileset_DP_Normal.pngbin42296 -> 0 bytes
-rw-r--r--PKGBUILD199
-rw-r--r--ammo-10_ammo-order-fix.patch92
-rw-r--r--ammo-11_fix-volume-40mm.patch8
-rw-r--r--armor-01_ankle-ammo-pouch-is-not-a-backpack.patch2
-rw-r--r--backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch552
-rw-r--r--backport-02_fix-mass_grave-map-extras-3680.patch61
-rw-r--r--backport-03-2_fix-bugfixes-Fix-light-and-helmet-power-helms-having.patch36
-rw-r--r--backport-03-3_feat-balance-HEAVY_WEAPON_SUPPORT-flag-for-large-mut.patch283
-rw-r--r--backport-03_feat-balance-power-armor-updates-3625.patch386
-rw-r--r--backport-04-2_Add-street-lights-to-remaining-shops-port-change-to-.patch1718
-rw-r--r--backport-04_feat-content-port-game-store-3469.patch550
-rw-r--r--backport-05_fix-farm-mapgen-3715.patch78
-rw-r--r--backport-06_fix-campground-mapgen-3702.patch186
-rw-r--r--backport-07_feat-interface-new-UDP-external-tileset-sprite-for-s.patch64
-rw-r--r--backport-08_feat-Convert-non-pistol-only-energy-weapon-mods-to-b.patch56
-rw-r--r--backport-09_feat-balance-MILITARY_MECH-flag-affects-ID-card-need.patch77
-rw-r--r--etc-01_fix-rubbersplosion.patch19
-rw-r--r--etc-02_add-missing-price-postapoc.patch12
-rw-r--r--foods-01_fix-food-materials.patch12
-rw-r--r--foods-05_fix-missing-price-postapoc.patch4
-rw-r--r--mutations-01_nerf-lightstep.patch2
-rw-r--r--mutations-03_eye-colours.patch186
-rw-r--r--npc-03_godco-update.patch16
-rw-r--r--npc-04_island-prison-update.patch4
-rw-r--r--npc-05_kindred-update.patch2
-rw-r--r--npc-10_bunker-merchant.patch6
-rw-r--r--npc-11_npcs-reload-gas-mask.patch30
-rw-r--r--revert-02_revert-book-revamp.patch2161
-rw-r--r--revert-04_telescopic-lenses.patch2
-rw-r--r--revert-07.5_Use-bismuth-in-recipes-related-ammo-fixes-2952.patch2
-rw-r--r--revert-07_Remove-handload-quality-distinction-1481.patch10
-rw-r--r--revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch32
-rw-r--r--revert-12_fix-i18n-metric-bullets-part-1-rename-.223-5.56x45mm.patch10
-rw-r--r--revert-13_fix-i18n-metric-bullets-part-2-rename-.308-7.62x51mm.patch4
-rw-r--r--revert-14_Removed-unrelated-references-2738.patch188
-rw-r--r--revert-18-Simplify-broken-limb-mending-3054.patch21
-rw-r--r--revert-21_fix-Erased-the-npc-Alonso-from-history-the-game-3582.patch225
-rw-r--r--revert-22_feat-content-Biodiesel-Fuel-for-Gasoline-Engines-371.patch39
-rw-r--r--revert-23_fix-balance-no-more-EXP-gain-when-a-skill-is-maxed-o.patch48
-rw-r--r--revert-24_fix-repair-nanobots-not-working-at-all-on-broken-lim.patch214
-rw-r--r--revert-25_feat-balance-improve-consistency-of-handmade-caseles.patch133
-rw-r--r--revert-26_fix-npc-splints-and-clean-up-iterator-errors-3592.patch67
-rw-r--r--revert-27_fix-NPCs-keep-their-splints-on-3589.patch30
-rw-r--r--revert-28_feat-content-semi-plausible-smokeless-gunpowder-reci.patch62
-rw-r--r--src-01_radio-can-use-ups.patch4
-rw-r--r--src-03_allow-bio-firestarter-on-smoker.patch21
-rw-r--r--src-10_reduced-kcal-during-sleep.patch2
-rw-r--r--src-20_fix-default-mods.patch15
-rw-r--r--terrain-05_community-garden-fertilizer-not-spilled.patch17
-rw-r--r--terrain-11_clean-up-map-extras.patch25
-rw-r--r--terrain-12_add_fmc_stairs.patch11
-rw-r--r--vampirism.patch30
-rw-r--r--weapon-02_Fix-usp45-load-order.patch4
54 files changed, 2011 insertions, 6007 deletions
diff --git a/External_Tileset_DP_Normal.png b/External_Tileset_DP_Normal.png
deleted file mode 100644
index 1b47589..0000000
--- a/External_Tileset_DP_Normal.png
+++ /dev/null
Binary files differ
diff --git a/PKGBUILD b/PKGBUILD
index b562c74..bf37641 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -17,10 +17,10 @@ pkgbase=cataclysm-bn
pkgname=(cataclysm-bn cataclysm-bn-tiles)
pkgname=cataclysm-bn
_pkgname=Cataclysm-BN-cbn
-pkgver=0.4
+pkgver=0.5.1
#pkgver=202310040030
#_pkgver=2023-10-04-0030
-pkgrel=12
+pkgrel=1
pkgdesc="A post-apocalyptic roguelike."
#url="http://cataclysmrl.blogspot.com/"
#url="http://www.cataclysm.glyphgryph.com/"
@@ -37,20 +37,6 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"cataclysm-bn-tiles.desktop"
"icon_128x128.png"
- "backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch"
- "backport-02_fix-mass_grave-map-extras-3680.patch"
- "backport-03_feat-balance-power-armor-updates-3625.patch"
- "backport-03-2_fix-bugfixes-Fix-light-and-helmet-power-helms-having.patch"
- "backport-03-3_feat-balance-HEAVY_WEAPON_SUPPORT-flag-for-large-mut.patch"
- "backport-04_feat-content-port-game-store-3469.patch"
- "backport-04-2_Add-street-lights-to-remaining-shops-port-change-to-.patch"
- "backport-05_fix-farm-mapgen-3715.patch"
- "backport-06_fix-campground-mapgen-3702.patch"
- "backport-07_feat-interface-new-UDP-external-tileset-sprite-for-s.patch"
- "External_Tileset_DP_Normal.png"
- "backport-08_feat-Convert-non-pistol-only-energy-weapon-mods-to-b.patch"
- "backport-09_feat-balance-MILITARY_MECH-flag-affects-ID-card-need.patch"
-
"revert-01_removed-traits.patch"
"revert-02_revert-book-revamp.patch"
"revert-03_generic-nv.patch"
@@ -62,12 +48,19 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"revert-11_Obsoletion-and-removal-of-useless-bathroom-fluff-247.patch"
"revert-12_fix-i18n-metric-bullets-part-1-rename-.223-5.56x45mm.patch"
"revert-13_fix-i18n-metric-bullets-part-2-rename-.308-7.62x51mm.patch"
- "revert-14_Removed-unrelated-references-2738.patch"
"revert-15_Fix-mutant-scenarios-adding-an-obsoleted-trait-2929.patch"
"revert-17_Rivtech-mainline-3092.patch"
"revert-18-Simplify-broken-limb-mending-3054.patch"
"revert-19_Fix-Repair-Nanobots-3308.patch"
"revert-20_Fix-tidy-warnings-3310.patch"
+ "revert-21_fix-Erased-the-npc-Alonso-from-history-the-game-3582.patch"
+ "revert-22_feat-content-Biodiesel-Fuel-for-Gasoline-Engines-371.patch"
+ "revert-23_fix-balance-no-more-EXP-gain-when-a-skill-is-maxed-o.patch"
+ "revert-24_fix-repair-nanobots-not-working-at-all-on-broken-lim.patch"
+ "revert-25_feat-balance-improve-consistency-of-handmade-caseles.patch"
+ "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"
"ammo-10_ammo-order-fix.patch"
"ammo-11_fix-volume-40mm.patch"
@@ -98,7 +91,6 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"meds-01_antibiotics-unhealthy.patch"
"migration-01_remove-ucp.patch"
- #"migration-02_remove-8mm-fmj.patch"
"mission-01_typos.patch"
"mission-02_reorder-gunslinger-quest.patch"
@@ -107,7 +99,6 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"mutations-01_nerf-lightstep.patch"
"mutations-02_fix-evac3-background-visible.patch"
- "mutations-03_eye-colours.patch"
"npc-01_isherwood-update.patch"
"npc-02_tacoma-update.patch"
@@ -128,17 +119,14 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"terrain-02_fix-doors-for-npcs.patch"
"terrain-03_tacoma-clinic-add-missing-floor.patch"
"terrain-04_lumbermill-gasoline-not-spilled.patch"
- "terrain-05_community-garden-fertilizer-not-spilled.patch"
"terrain-07_rehide-redacted.patch"
"terrain-09_make-firestation-shelter-wells-npc-drinkable.patch"
"terrain-10_fix-milbase_minefield.patch"
"terrain-11_clean-up-map-extras.patch"
- "terrain-12_add_fmc_stairs.patch"
"terrain-13_fix-mapgen-palettes.patch"
"tools-01_foldable-bottle-is-container.patch"
"tools-03_shears-use-light-battery.patch"
- "tools-04_normalize-drone-volume.patch"
"vehicles-01_portable-generator-engine.patch"
"vehicles-02_fix-fbi-car-name.patch"
@@ -146,7 +134,6 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"weapon-02_Fix-usp45-load-order.patch"
- "etc-01_fix-rubbersplosion.patch"
"etc-02_add-missing-price-postapoc.patch"
"etc-03_fix-abstracts.patch"
@@ -171,55 +158,49 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"cataclysm-dda-soundpack_jcsoundpack.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-soundpack_jcsoundpack.git/snapshot/cataclysm-dda-soundpack_jcsoundpack-master.tar.xz"
"cataclysm-dda-musicpack_coag-musicpack.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-musicpack_coag-musicpack.git/snapshot/cataclysm-dda-musicpack_coag-musicpack-master.tar.xz"
)
-b2sums=('4d47457c12a539ed6fa1c5b1351f473e43aecfe1e4f2aafd37e7068fc166d95c7f729806dd6c12472e13073a9e35ffb7552deb9f3decc5f56dedcb8a2d257b6a'
+b2sums=('d7321d8f209920f6ea2a7c49aa55620b9a39e08a2d8d727c05581c65ecf56dd7b84995cf31363e110b58bafac3de8cbf3ba383719686f43962dde93faf656aaa'
'069ecde58859b3d44cd687c4b6e718610cefb693ff86e66f199ebfb1b3072023ad2b6f0c28e27ef9c1ce4997f6a5b2ca0d45046996b3ff35a4aeaeb1a7cf9421'
'ad88bc6c1e3c8183a313b5eec42f98d6956afea349feff34a86e4536c9921fa99d2594282caf27de8ebb7ffb56376ed2e76d572227bfd6d8173c7bb1f01e23b8'
'6f70e90359a14e4839d9a2683debb88850e5dd387add911ad68fd87e5512cfcdd435da63e1e370358153673fd5a72a9b1e9c94f1979edb7948b4da8c82407bad'
- '54d896d8f9273ecb8b8643cf560fdad652c52db9733ebebd6944fd9a112ebdcbfa237d90251abcb2a71c9eb3433297bf8c3febaddc055bed6ad47daf898e163b'
- 'f49e5fc7f275de2ed80380c169e22d7dd966d147f7a65d86f958172b25baf3da1aa5eaed0b6ad36756a4ca0ddd467d1e85d8abc6298756582c2d2e7ba45fc4e5'
- 'c7d5c65d71f87439ffece8f230257c03b066f90a9b94194a21a3d7a59057d12e2fbf4378d485623c635d3e077ab864a6e90b1173c899e31004c5315d6a2145fe'
- '20e5409086ab1927df3eab494d804d31d0544cd5444c166b760f7a7d574ea2975ad74d4d974d2e263f557f6a1e9757422dfee95b08f39db94a916372e1a1a2b1'
- 'fd7a7e216e3adda177a19747b5275a7222238c939e0d815e555665adbae18665db46e04691b95022aba14cf133110607dc10f6baf7540517314ebeb1b6bf2d69'
- 'c5368de53a75e45f074acfc062cddcd07fc5615ecef77fe16b37ba7cec1ee7cea6ff1bd3b8fae66d51aab5f6ea43e39c372814064b2de5f4e0774531ace07290'
- '67e6dccd3f6ed1b8ffddb631b8f81a4d1162349f96b7cf6eac2f73f43a2f076c2a9fcdf328c1f130461a14d308deaf19cf9c147eee41313afa823e9d2b5c51e1'
- 'd48d017ccf864d9cfd30051cc3bd94ca53c9a5982cc2d65ece9da487e3c6fcded2b83f95062227d8e778085aa578bfd0ab3c7f5cde095a5def3f7e52973bc5d1'
- '2561b1ee8dac83b1b26049004fb6c5719441977d89af4e56458d464acf315ee1adddb8420ee077a6ab7fb014761540bcd3aef0451452d66b72b4efc6838cf48a'
- 'c7321241e4bbe4bff078eb308a044568adcf57104284446c9f24399b37ac7693ac2203beff0a1e072d3db71380516ec5bdaac7338220886bd45f1cc670b5f2bb'
- 'ba9a966dc826e5190adca3439da8e98eb493072e7df0ea5383e8d3eed7e22041c74368dfff9c8666cd800a552d156b11838aa961db73a485686d8939794189f4'
- '03562be8187854c02003cbb40d021e2457bd6ba346ed0b106c40ad4fe4d700f83f463041c11da1076c2ec4440f2b03c013089c451491598f47ab64750e408205'
- '7bc0e4907e069b40fdf06be91155f6bc99beeed425e20072d7dfa591977504c0959ad42f497cc0f33545c205028e823ef5c9cf568e51180a1fc65c3442812f86'
'fdef1f81084e7b08203b8464f37a00e2efc8b11d423c6e6b82e612392d91047160d2bc472b63c836ebc48adee0b4f2b3434c3e07eed5876275b234e69d7f6b9c'
- 'c2d6d7f74ada2ef54079fdf3759d9875552e2894dc8b753435acc692e705a9b297674eddb4e5a01a9269a84be7a82a8fef7e5762724b4d0f065976e877a05b00'
+ '2b42190f1d7189a38b3424efe64fd1b3921919a4f6fc872462ef684587de94b900e93f159597ab3e6f576268fed3e6966cddc3fa7250e1b746095fd7a2cbf6e9'
'e417a1786fbafb685099431f7f9926201ab80636bf3812da67acc341c7ef2b6a3853734d5b8b1bc355acbd5c0bedefb0401f8854aa5cb00032550afc8a7b9ebe'
- '4563b0454c67b003fc1e266345d609d8cce5d60f5d19e9936f441c3b75a98d7c162959286da9507e79def7544675cba8c9e589cca55ed9a1ed261ac608ac7c1a'
+ '5b0e957a5f80ea878c554711dab2fe6759deb3371532cd0f149cfc7a54ec914f445a4aeeff4263df58c947f03fe7be30f2ef175b9a81708e668fd037f9b8ccf8'
'2d197903715263628e767e867e9b20b9ebd3d85f8983ac8f1e2b534f2b6f8c0470886c79a409f117ad43348aa6aef2a6298925ae27faa32814183ad7677528ac'
- '9ec37dae38c6d2591e84e8c714452b1634c42291a9ca98ff3044fa9c8753331f746528816a04d918a96a733cb2240f1e78387c467a0c47103d4b25316dca380a'
- 'e2b0718a30a96c2189036be28eb04a0a964cd513f71f323fddbf37fbd80c22eabea6dd6189080ee88d7d3a1f795b86eb10d92bce31c053905df3cfd71d0186e8'
+ 'f418feaa3ce18c97cb05694687726d38a5ed49dc5277bbcd49f8f4e12498743b1561207a8cdb509034f8aed48d456ee58fc30da45cd42e2e4fee8e4dd7eb3dac'
+ '8ed59f0237d4becee71c5f79dd434972eda3a02c56c29642f69c8ac7e638d866df633e0e087b4392bb74017b6ea3641fd6155d86f0c71fc188be19e7a81cc23b'
'00b4020df6c0e306b3d16d3caf6abad7357343dfde3c5c901bc8fdc823554f4ae73d46ec47357678da5f3aa18a549dee742df023f37b0f8948a822e712e376b5'
- '5df4497d779d6980a540f0f1dd54959ca403e8b00a9f4bd1a91fee3c41d351e216abb08f1ae6729ca0fcb04efda789804b5df5c86e0003d25998e988254712f7'
- 'd78d2bb16e19d1bcd9b3a46182048f41705cf8ddba89e051aef7f0e28aea52536467fa4a1e39db9f64d7cb53d19882e7e12a77613369a51d8fd937192609d0ff'
- '63d334661bfe5270910de1c9689892aadfabbc5ee1a14508caccfd0639404f337900906fe91dab453ee5036290e485231d9072b977970d438c938ce55f8d2bf3'
- '3999499f63c50ab9fb38edab7592bcba4f8ab9a51b63d96445a9a6af843d5c5a36f36838735528fc42e5eec5c9e375e704fab1aa55df03f5a804e54d247edaa5'
+ '1588c497a7f324cc96ed7aa194a9d99cd5f0ed9dd5db03321f03afcda381b7b2262bbc386f01cb756dd4cd53f73c244012339bb66315ef374a95afcfc2301085'
+ '406130adb1be38e25bf750e10166ea55bd8e5c5e500ea81d8af547131a2eea04ce1e4b415f3fe87f4825aa515186b23e612a4961d2b44f538466044d7ec49624'
+ 'c6854d23ec8eec198e3ee1ca9a7cdb2c8c6f2c20a4e670d6752eb09ec99713dd52d659690e4dce935b11954f7d435d5ea35b4eda23bee3ee5759ef395c18b6ff'
'2de96509a572c1eca36d63f1a049a27583cd0f2df53605b927c9b5112d4e2385bccc82ba1a37af06fe756f96cc1e8c9d4b6cd081ad70651ec09ac57b93cee84f'
'664d6d2d4427040b25d9971fa07b32d3c1343dd60a9702835568ba1e287422ab2659a4a4e324e422755b6c655e324ca203933b6815c7b2e512beb4f15c4a27d8'
- '5442e78f06883134c34d17d08853d86d0574e0a92e083c47b60a6755de957ba23e8fd994fad4356ea13bacdfce9912eab3ccbc45135d78cd3c4fa1c1bd35a753'
+ '9c8c49c7c70a40a195e4cafcb22b7e1fab1e276bc59c186e9b09fd77c525dc63fc64719e0f87083f2761172761c9a6dfaf8ff11b405976502e7f55e9606c42c0'
'dcb8a004230da09e73a340c1acaf3c0071a8c26e3bce9a707b8e1624854aadc9e45f6f3f0d99549ccef5c11a6396dc082691895c437d50188e1b292cb8c10751'
'b4ca2cb0e7c6c908277b178dae1b946ecdc2b88a8b0b4930450758e03c1f280b3740118cee274886693c158cd4604dc8487211b9185538eaa72852b18f0c67f2'
- 'eed0a3489e58a497c5941c182a83fb16d92c708a702da6365b39c81428b6cec1bff8fe78749f9f510cb880166a6851d61195e3066b8c19e2d3d763dd6ef38cfa'
- '5dd5cb90aab682dfad9c46b1fcbe93294b4d9e40f4c3f30a917b25081f7cfc66baa60adbb81584d622f099761eba0eda8f46d6e49df1f82ec3c50a2da61836b3'
+ '677c476df28e0f5d0ddf789bf2b26f2dc49a9d1523ba07f2a0607bb47d00b17c9f7ae86737d5a69f7fb8c7bfc82231a8a1d5b756ae49934adf1eff315c7a9a5b'
+ '80d5920380282ba1c9bd81e8e7055af3c88ff2ecfb1d375ad9f1ddc29b3f61760119b9ec27c14266a020a32d8bdc6f1eb1bce35e847ed87faea0c7623f8b906e'
+ '84b9d7d78ad2ab43f24aed79f6843e7fb8f600bb8edea384fa446f0a70bbbd5bdcc391de8bfa25667d3906df8ae8e9154701bb582e058d77e9326a08de3fc00e'
+ 'bdc83eecf20d82bd314ea6c053c19a990ab25aa067cdec8dab479d59b5169563bf7f368776ca18749918b5ce4a8df4e2a2e700dbbc3a36b38ee61f1b57cd416a'
+ '37c09dab5b6006794023713906e0d5a03824254d156169bc4a0643169b35958821e8d220020dfdb5fb0a587365382a1fcc08ceea6963c974a680901ed91708ba'
+ '6735377f8611451333c8d7f009001aa652af9edeeddfcd0cd163d03ea84607803d260eb1338fa35f688954c3cb75bb7bdc41a5ad0497771815dd16afa86d54b3'
+ '13e61e9144f4d7325c409553c72ea1fca07009939b53491ea24d208fba7539e7f09063911c76e7d45f7e6bda12a61bbde17a75c319a0b79518e6639d520fa4ef'
+ 'c4ee693418d394e3b946aa2b9a5f11c04bb0ff11234f830056963f4a755357552f9a769688a086f56f492ed479cf1a44032cfde45c03627adc5fb55f88f806e6'
+ 'df26a597afe46a35e07f02c32839e2f7f57cf4d4d9bf0e62eb645d1b720f601fe2e9787462a0ab0ba8b788c727b846272a4ca6ecf81f96bb058d070b53633dcc'
+ 'ba2964e64df20167c722e71951db28d039e637397a6be2e7f5312da10ab3c57a1982ec1ae1c37dd361317292b8c519f678472eb06360d4368294e0b636704c15'
'365e1ac9f9ee636f2578f6fd8ab16b6460894cb9b76cf0aee5d8a55f42d882d6ee0b04e80194f4c346bfdb0778e11e30b8c03541b4d351602ccfd63cee7e3cf0'
'6f79418343f29e3758e826417e475d957e0c372fab8c06855f5a86b4636ce6e8c68a770a4a3ec327361ec69d042d627062b2c2db23e5e437cef855683242545e'
- '0884229f513f843099dbd397d96fd8b37aad2d1ae0aee2771f57f54188241d6ed0ede8750780b9564bd9e3dc8d215039d409081a8eb46ce25b90edb196eb6bf4'
+ 'bf952e4c5e8ad3851f2ab5a812fdf65e0a6e7e1726150d7fa6cb582f4408eed85edc7b8cf9dabc07fab62217d14fa7ee5493b45bddb282da44247291e84c990d'
'f4ad4c90cfcf11af42c6cfc6d2027b21af3f58ac274b9bd0852a52ef60b606476766f194b281f6baf12f81647b384a98f745519bb48bc2e4f5fe03984c7c0e65'
'172c611008cb8893a8a8cbf83ef929f5727fbf341f3303c6f38749e3742f96ba7352624112ac231a8df7be9031649e41d54cc52152776e52e3a7a620ea8f33e3'
'1ce956dbcd0af3e16c336ce15995a7df19b8bed78765890304ff9dcaf6d30c602580bef050d6c659fdff945a31dce880f5f4042dfc295cdef44c34155a3e644c'
'804cea67bb0a2fab62dd9cf633d1959a3fe59b3e24f0c2e01a6db951100fa4426ae946a90a93fa7fd6a7d0ece478633d0091144c2fa776858157edec1310f837'
'a611964c224c7751c3afeaadb159135e5ed5d87d3ed254be63b4b12450f4f63f414c90f8e29f3d14c0b854f4c9938bf5d12db69d2e258f1947e353302ca07da7'
- '1666b768d139753acf10539d992774dadfe0d57e587232c983a972c9f5b85f865c823bf4c9f3f240b4755bcd753c7a3b9ee452d480a49d240989479aefd13054'
+ '554bc4acb13f2eb70b14dad095c609cd1515bf462a147511fefb935ad64a4dbffe6aa2a89db7342728a212e4e87f7def120c136d87202dc754700ed62449fa12'
'32975862668e4c28bf345cf9e2e3a2f754f7d7d50208f1d840e3b2ca47da1c19bcff9bdf6dc841ec803c64fd633b479d1d598ee22119589732f7cff1fa6dd6dd'
'7da2d555f4b21da6704675400dc97367ff3e6bb60213d86c972b6740f074bcef98482ad7f759ddbee09f67d0ee8687c26c425d697ab586a784385971aec72bb0'
'c3b8dcce2fe41c8d9dab2d35d56304f426e06f9a6a220fcb2f413ac4aa32c7f466e2001cc7bf0bbf6127aeef55c837bb344f08afbb392f202c4ad8ce83a592a9'
- 'd0a2fcd9b3e88d15f817204c7799b0a2b7cd7f9bb830efc97970e9da466a2f458a414be8de93049078c1e5568238e6ee9c8ec22a296401f6dc569dfcc299b289'
+ 'e85003201457633ab56789aef908ad4e8f9ed4728fc2bceb0344b851bf65f13264dfe9459afd4c1ba69c0d89f83e841f4829dcf6b0f8fb456bc9f2176c66ca87'
'7b4369a2535029e214af7f51f7d6292d91989249374c9969a140f8954dedca2a2c04f626ac0bcf33f9ea8ab1710fadcc79034156405249b885b01e5c53be2188'
'76c816df10aceec8f1a7d1356220eb3f00b16fac455e84eb8aefe76db29cd037dc74fb5cfa344b8d283b188951bd100c26e351ce2e27c16c836a547fe2c99e46'
'417cd957f188b2b06e41d5413bea5f13481c6d5bfa8f184157379d5ac2afa9ba6f7ebc966856f50603f89b9173b6fbfdb3ccf4e3cc0b1bedb53f935591e4a35c'
@@ -229,65 +210,62 @@ b2sums=('4d47457c12a539ed6fa1c5b1351f473e43aecfe1e4f2aafd37e7068fc166d95c7f72980
'536c59b274923d36fbfc6dc39ef373a0d1e497422dea6fcdc16cfacb6b9ba421f14c5d7c4db31bab083199d859ff57ae5b19842f95367cfa39059e7156e96093'
'69891c188f233e5174c2ddabce9371e84fdffdb105345686d71a9d823422969f77f9c44bc6571c6e5a72dbc9b9bdb6abf8c72cf9480bb87dca6f998f62f3de02'
'e466392190e0aa58c02acda287bc8ac6fef30160207d08805ca9acd42b7f024d0680c0a76fcb4f29a7d7ca884920bba3a6714b5ad40f64dd1b40bcf0e2621d26'
- '08f4746882b927bdff6b728630cf1e04a2b79924f694ca2d841e3115c3399feb87a8d363e4d2a0f59179c109cb6be6e840f912aadd44abb0bdb35afd2838cc4d'
+ 'f2ad02ac73e7ab5c26f986b640b88ed10ad30b103d98ede377b3868a3d0f84cabbc4c06f5f6b2e05c18c672370d1c25a7bfe3b3ea5d057ac7f3d7ef35b814c7e'
'ab35d6663b864449d46da4a9e1c51e11956ff4c38e16db58c831b71f7b964fc25b0283122dbc8aa0549f240f01c4a910fb5c6c82937258c6b736c05b54bcf768'
- '0793bb7aa67d3989ef093cc17e6d9dd6d2e3999562fe1039b44f0fb9297623bda49271cb7b17d7fab4dc14299e0e5f13eb8f3711dbffc10bf7ffa68838f0585b'
'75877d9c6090a4e75529b1840f875ef04941a643c2c3b0c2e2a605c0d43d6b7ac23abf7f0316885441b8310f8a39339f2e12c7763b2d9875ee772949e6dcfcaa'
'761938b9d05430a72ff1102671d963e44d647ddb63b9a6e78979f365c6cd1e98b6a3763a4b9667ca75fbf23ee3812b4f09838061e8ba101d89d6f4dbd1104dc0'
- 'bc5e233c9c5b7f799a126d51d672ad510ff4f6f75a573ea8b8e994d6be07375c0b4997acef16dacad555a7f36907a361f6cc4076b97d66c4c567dc9e707bc37e'
- '863676b5168dc2a63ad89a5c9de6f52b65a681954c7a646c2e9a9ca4decad871ab6674df7b8e6d4fa08e90ec0696771a2c5afce358e5e9b729adbd2fc7360aef'
- '6478e17056a909a6674721d496047e5b3abe2deaf355d4a90461daf702281f5c21acc5e4ccee394917f07e6f2065daf9405384061d80cc2e528ddd3369765b98'
+ '3bc768194ae94a95eb8a5f7e1536e81bbb885d9d2f6dd799350d272d2f87d4bfb4ebb5dbd215157b000f29821ce43fc7b0ed45a142329a5ffc207463b054d9fd'
+ 'fa3f9c021097115fd180c83a6640a696240783b165add09b48f624f3b91546aa75bdb05b12a0edfaa009f69f5aaeabb20e2e52267c7d4be4c1d4d8567d8f4eca'
+ '09ad88d1eebdb6433c2429cea4b775384b65d6cd52945e0de536dbac9fb6d9c345bec9bb49ede6fc6ce01a73e8297d3c8901c4e91d1b5a12eebc36ffd8c21ac4'
'49d39404138e5e45fdb05b772636388eb7aada9dab6e549904e4b87053329d9df506ad6f390d73fb25c518299459df657ca6e02142fed9d29f4cd1c5f89734d7'
'246a189a0002e755bbed91257c324d0f34bab724f38a31bad1d5eb8bc5b126ecb3a0af8f69a6d0f5f084930c670d2747942beabab0b684f7f66a13044dec394a'
'739d0a1acbf6cdd1c6e78cac75a792d475b140219ffbf8c44d4db9fa82dc93f0822763be14c81afe69ab167a611a5d89fceb3df39d28b191835e14628c369140'
'f7a9c6d083f73c780be2f7ebf4e5e8deb4001aaca39b73ec9c6a5ef69f0621b45f9c384f32bc1c86cf238052ad77cf4703cc07886ede8bc62f19433d838b282a'
- '88dd4e6a53b948ddd5bdf9a567a116f70047cc6cf5fb695b72b9ab571641e9af52e386c6e0b442c9dd794de39d57b26891dc8bb83e4c92506547f395d340915b'
- '9fbf8cf2aaa18c5cccca24783f40503cf7b7c66731f65450cc312e8b29145c56c23d31d19063dccdf3790ec06480d773d7d64de1672f38b7a4740a8aa0fd4f7d'
+ '88ea84a5affa0d59a613d3806b01912f2728f7f995ee957754a77d8ad3b44033e1bec452d2bb9ac7a79fc6aba1aaee1d452d2ca3fecdd2d1c953d334cbd3beb3'
+ '0449ffab9ecf7183253cfb56c7bf489ca6f0a2002f96caa37f2cdb9c77e51e7f8561589e5179496cfb6760b1e8c34a5aefcce4fe0790cab81db3409582a2c835'
'abafa39e57cf04396b841833215aca427655dd3b56ebc260b8a57d6376360b31a4b1d4493da76ec4dc0129939ab9e23cada70dd6f49e647f02bce12c81f6451a'
'a7449cb77ce47e09177290ffbb99c29c6695177464eb4c8902b605c9edc2bd6288c8dc741b3c772274c2e204c55380b3c37204419c6341c2aaaa30ccb776e2f3'
'8eba2f66280defcc930424d695baff297cff32e91e73f01210bb3f26389ea9e93b4b4d9e2c5a5a048756eff219d51c3fbf3f05690c3c984afcc32c3928df91aa'
'80da2c341d8564a47bc460fcdaf9196ac3bb77f0f2ba56bd71089e80e7481728a3ccbdcfcbc3bf70a9c9e5d9d9b01f2ca6615b67c7ab61003808ce00f6545ba3'
'b8a64accada87ee5be989c5307805610c9b5c0327bc107aab237ac3225dd9e4c51b6c79a2a7de15fe187d3c32d7cbe1c462f9b0e9fb5d5a55a74236c7061e96e'
'85aeb5920ee5879848be4057324153a077fe907bed527ed8f9b80a3c5ee1ef64786f63ee2999f5ba74e80a43e99ded3280ce27759c1f7b73259a6e2b5e584aa8'
- '58a94409205f7b670ab5745b8cbc234a38efd6a6217cef4efb7e397f091092e3e0c7790706b0a42accaa83d7509b8e244a98b9f0ba78349ee85f3164745c3501'
'651de880cefd51665d854414c451cc80a33ed8f34e7559a95514abd81a2f58348c37dd75f272468eefd56562ba8c99093a6dd9af3ea57796a9db15164a40eda3'
'2cdcf9ab03eb92f384caf1a2d90f82c75f880cb6286811e83217c883e421c116e7844ca193a010dc35e12eec46ede3663171a2f45f660ef5a8be95c474f61bfc'
'f830baa8e9d2f2d844520ef3199a7ac62913afb016d40028d99865ba5c6143c08aa8cec9322a67d808fa526954a78416c90cf35ef31cc8dc4dec64950f58adfd'
- 'f87e28d0b11fb19477a4d91d9d761e03293561a04543e405894cd6c1e63c0353626cb91a781410d299dc3ebcb290be6ceb822cb65c9530c356ac9d4787b322b7'
- '032c426a0e3a9d8282f5ce9ce4952bef051e2dedb0e56f90d9e18ccc32ea86acec84e42bcff695888f133a48b48418c59ea985dc9c5b179ca13cf9de44004618'
+ '6ce1b6808b48ba0e64a07d2ff84f0283a7b172e470c8b934ab8824afe2eaf6322927807a985f4a333544f20743f39d75f7b83591ae885fcabb344f6f2476ef74'
'257a9600c893dcba966007b17dffe58f507b52eb8282e624dfe441e5a78bf45210b866b7a5e2ebd6fe8e86a6ac55f427100c52396bb7c05d6e979c9f41a0059a'
'7cae5e42b6e16f3c4bf64dca3c7573c1b552424ff70bb6da0a21f121b53b2546b239c87953a090cd90f46a1c3c124e2fe19c560b1830b11334f8e64c92fb614d'
'4c178d330117886848d232372a25ecf5cac46ad48a6fed580957d295eb1c4266836f4f807593d381f9089b2078c4185ba972f697ab353a850ebf35b6f140a4ac'
- '77bfba77f3548d267dc8142125bf26608c723bbdb2834317b3ea031ac64d9ff49bb4d75e29e2c759c03a662955697576d1c93153e9fb3e5dee86466bc29c78e1'
'74a51f04237fba3caa25b2e0d49659f2e8330ce82288de866943d06b53690f31d48a77a4dd2e57db1f435b715fbca792268f2e191ffb59e57170d327ed41ac0a'
'4a1724784d6b4f113e8c1954d399d07adc941a2e992e1c95ab38dbc5c31940e90ff4cec51d22da3bf971880817b4356e473747303146c2ab1be55ee4565aca41'
'209387731490549d7b3d546ab149cea22e0ea1291356884f358cd87ca7d5425ca9a72f6f2cb7af46956634ffdb1a61d1ebfbfdbb5a2fc9fdc26d29acdc2ab0c0'
- 'a357104e814cde6669ab0b76d8d869ddd7fb03cf38bf1b32993780a31ac07e50cfc5d1af3e87d969ca3f9650ea3aefba3c55bf626c4c40502205a130a86c25a5'
- 'e1d03f68918d03f980f4c2dd966e3788afe63f14e2d18dbd4dab2cdbfa1253e4823c0f5daa3a579e47319a3c2af35bc5af0a390e2ba91fe7621f6db8b1a60994'
- 'e6044d7238be1cba2a083b6eb17335e10be3c8116234c67f006c7b6e5a9e25e107412ae2f5a636b01efa70cb54032f5c3da46ec7f0e92917334e72a492f739f8'
+ '83d5a89f14ff8d79f90e677def2f58b1a8a0430ec16bbe3865315b63b3702e699bae157235e70a4c613e84f05b0f7ecf8de4ecef789cb8146edfbe92020c89f0'
+ '60fac0fd3c098c8a38f634372b889c4ac7d2d61f1e08fd79b6216ee6a7116cadc06b974ab2ea5efc74801a9f4a8ad029dde973d1494f6467c57ac860be64acad'
'b41ce5db19de2f4a5857debe31560b7b8216412e5df795032363839429f732b2d2359b3679a795c55a997913588f7d495c300df402529317ef2d03de24a74273'
- '4a78c71ddc8a7d0a59475427bb0982336338f6328b90e07fb3c131f579f437eb57b43db860e907b12fbf3fa6708689ca3bdd3fdb2430eec1384650bd79944e17'
+ 'ccf74105e4268eaa35ba2a79b21c89ea5ce22f5d23c297688f5731681926536cfe0f430347fb6e6e70cac8110c7c64ca944b696b0248796434cf667db171e058'
'92cde696eec00e6758b58e73e8bc60ad1a73bb2a18d4fdfd24a19b5be715305a047943a02d94a9703c101ca0c769dbeb816f1f28809345bae0fec42fbc27bb34'
- '9fb6d2945184347e5b4f56f022d9b1b40559c1210edd91cb984d2c69e711dd297eab2a06d1e7d4008052fad658a9574ebd933083e7f8f3b3600b271593cbde15'
+ '1d54ef96ff6875878ac6a6992de7e23a7b98cb5b68d7e444c4f02a6628f657ad26efc757fbeaff34fc89d41fa440d8b57bd0eb437a9d04ad1e06a31ba148061c'
'ce82294e480ad42f0001c799fd8131b60024b6097653f3c57564c75e54596616e376f0d7f1cf4e54d8c302a61ef164b4323f795bfa19b2c13ab9e927d37f1600'
'd006a51f306a1397c14111788a23029a894e223a196649cac476acab761479db543bf4537ed5a2f4173ec94af04874b521a1d598ed8e98406cc2cf526d8e0083'
'0cb9f39fd0b87e40bbce50ec7e834803bd0d28ff3c5ad25d2542498cfc5b625e7fc20880e34d325e05c51f411cf91721fe6b5a03565686be6cd6fe88772f80d0'
'f25f01c5b27dced202fe76c1717b9eaec65dfa5f28db1910529f60f5ec21cc89c1a15df26c2dd09066a0d89e3f7d87c790e7886c3c2f0978a25f5ec7d1236099'
'e3302d903d053f25aa666d572f74a8bbd3b65dde40eedcbf46e537ceb2294ac22b3772087fce04c4a780c2f18e855179c6ddc8af12d72a89b82957ce09deb52f'
'4bd44cbe85c53902b8a360509703e3d38e8a5da75dd2c534a77f03ce6440632f6c83c92939069c60473c88ffb3abab0fbf11e39271f44f813b9f6432ea5f9a6b'
- 'f115314dd2bb1da07bba7a90fec5c3acb7ccb5145efaea03d6806942e24d402c9a144a2fd07b82e727a0b79dedd4bdd87de0bbaf0944236563164fb6f117965e'
+ '6f78478f642c18101e9cd24a0c693abaa1348bb5c730c9d29b8f80d6309aa4bf16f6672dbc36161875db81a071256a0a388769c96810a7c67e3687ec750605d8'
'e0a9e8f1129650208f7a5a37680091a6d2abaa60f5d4fd7fc691854d49c9f59317ca18dbe764cb05cacd4a2a95de702bbdd072571862ee0b27bd8df3be7a5764'
'a5e8bca3ccec2990098e8cf1c504ce6bec03cecef03b0450a4396d5b1e0ffc4e91592f40c3e389eea74fc53114cce0f2c1d2237a779e5ec7e6c12b2863d6c731'
- 'dd5aeab5755c68ce7c72a76369b982e8ccabcd103acb46bb992ce96719db36338f8e0b5105b4627659f90ea9a4d8b9b21e2cd734cd08e723c45bcd54209b02be'
- '5247f058961ef5f366774a1dbc80cb2c158d9c1eee18e4523470fe84ec40a7237cd1687d64cffad7e2ac8f572f85da456024119b656295756672e4ae4214dbbe'
+ 'a408f468a4a0b0fea78b3c1cc31be22fc913c0a27052b08e9dde523135ed473008bba6a0245d64ed9863431c3905f6e7663d19e3aa9ba769053a160bcb8bcbfa'
+ '718c242ea5b5e6546ba5a8baba8e26f1250cf41a53f538c20c392636a2430a8966bd6e66c4ca6c7d340303742a8d21ee1e083b9af081c461be3bcaf0c212fb40'
'08323e5a95bc755bec6cc7103f82cdad798e1040d04564c26ad3d1b66252afb950f8c92e444bec638ff01b5f592e374948092f2e890b9b031729f9dda774f8cc'
'a56efdaae0344726debf5b74846edce8df7aa2357fbc7a05a3d369d1f457b02934a0d0ce2330072e03f1ac901e06e333c9393f795c761f8440307e7649ed5596'
- '22cb1ef62d955d4a734434563a278057f91f32c948966d4ba606158c11d86bb3491b06387a5f5eae3640c2210a7ea7dde06f8553c50f4d5144349623434b68e3'
+ '14abb9d0da562fea8a8654e6ca2b12bc948b326e049f1870ba63d76e3753b25e29f42144a222953260ac5375f71dbf524d741e590082c478b3ca555624fb6871'
'b9309da09b165fb57e83f84e3584d2479bd3336ed86e181e5df2d27daa92bd55d03d7f3fc226f03696af5f0f32d8e0e7ecd26ae7e50eed0200d0b0feaad07efb')
prepare() {
# cd "${_pkgname}-${_pkgver}"
cd "${_pkgname}-${pkgver}"
+
+ # Assorted workarounds
sed \
-e 's/-Werror//' \
-e 's/ncursesw5-config/ncursesw6-config/' \
@@ -318,7 +296,7 @@ prepare() {
# Fix version
# sed -i 's|VERSION = unstable|VERSION = "0.2-experimental 2023-10-04-0030"|' Makefile
- sed -i 's|VERSION = unstable|VERSION = "0.4"|' Makefile
+ sed -i 's|VERSION = unstable|VERSION = "0.5.1"|' Makefile
# # # Hotfixes
@@ -326,56 +304,37 @@ prepare() {
# # Adjust default mods
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/src-20_fix-default-mods.patch
- # Backport fix for non-fouling weapons accumulating fouling
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch
-
- # Backport fix for mass grave map extra not generating the corpse pit
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-02_fix-mass_grave-map-extras-3680.patch
-
- # Backport the power armor rebalance
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-03_feat-balance-power-armor-updates-3625.patch
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-03-2_fix-bugfixes-Fix-light-and-helmet-power-helms-having.patch
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-03-3_feat-balance-HEAVY_WEAPON_SUPPORT-flag-for-large-mut.patch
-
- # Backport streetlights and the game store required for it
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-04_feat-content-port-game-store-3469.patch
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-04-2_Add-street-lights-to-remaining-shops-port-change-to-.patch
- # Backport some farm fixes
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-05_fix-farm-mapgen-3715.patch
-
- # Backport some campground fixes
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-06_fix-campground-mapgen-3702.patch
+ # # # Reverts
+ echo "Applying revert patches"
- # Backport some external tileset changes
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-07_feat-interface-new-UDP-external-tileset-sprite-for-s.patch
- cp -f "$srcdir"/External_Tileset_DP_Normal.png data/json/external_tileset/External_Tileset_DP_Normal.png
+ # 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
- # Backport energy weapon mod fixes
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-08_feat-Convert-non-pistol-only-energy-weapon-mods-to-b.patch
+ # Revert hard capping skills at level 10 for now
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-23_fix-balance-no-more-EXP-gain-when-a-skill-is-maxed-o.patch
- # Backport industrial mech incorrectly requiring a military ID card
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-09_feat-balance-MILITARY_MECH-flag-affects-ID-card-need.patch
+ # # Nope, no biodiesel in petrol engines. Altered patch to allow ethanol instead.
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-22_feat-content-Biodiesel-Fuel-for-Gasoline-Engines-371.patch
-
- # # # Reverts
- echo "Applying revert patches"
+ # # I don't get why people are so upset about this guy.
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-21_fix-Erased-the-npc-Alonso-from-history-the-game-3582.patch
# # Revert easy-mode limb mending and related commits
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-27_fix-NPCs-keep-their-splints-on-3589.patch
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-26_fix-npc-splints-and-clean-up-iterator-errors-3592.patch
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-24_fix-repair-nanobots-not-working-at-all-on-broken-lim.patch
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-20_Fix-tidy-warnings-3310.patch
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-19_Fix-Repair-Nanobots-3308.patch
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-18-Simplify-broken-limb-mending-3054.patch
# # Revert mainline craftable rivtech ammo
+ patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-25_feat-balance-improve-consistency-of-handmade-caseles.patch
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-17_Rivtech-mainline-3092.patch
# # More reverts for generic night vision
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-15_Fix-mutant-scenarios-adding-an-obsoleted-trait-2929.patch
- # # More reverts for changes to books
- # Upstream seems to have as serious dislike of in game books.
- patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-14_Removed-unrelated-references-2738.patch
-
# # Yet more bad ammo ideas
# This prevents sorting 223 and 556 ammo into different piles as sorting is assumed wildcard.
# And a second for 308 and 762.
@@ -398,9 +357,10 @@ prepare() {
# Revert Hub 01 basement removal.
patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-06_Obsolete-useless-hub01-basement-1457.patch
-
- # Revert the book changes for now.
- patch -NREp1 --no-backup-if-mismatch -i "$srcdir"/revert-02_revert-book-revamp.patch
+
+ # Revert the removal of book chapters and the generic overhaul of them.
+ patch -Np1 --no-backup-if-mismatch -i "$srcdir"/revert-02_revert-book-revamp.patch
+ rm -f data/json/items/book/bloat.json
# Revert generic night vision.
patch -NRp1 --no-backup-if-mismatch -i "$srcdir"/revert-03_generic-nv.patch
@@ -531,10 +491,6 @@ prepare() {
# Removing item migrations with mods does not seem to work, so here this is.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/migration-01_remove-ucp.patch
- # Remove 8mm FMJ from migration list:
- # Removing item migrations with mods does not seem to work, so here this is.
- #patch -Np1 --no-backup-if-mismatch -i "$srcdir"/migration-02_remove-8mm-fmj.patch
-
# # missions fixes
echo "Applying mission fixes"
@@ -565,9 +521,6 @@ prepare() {
# It was missing "player_display": false
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/mutations-02_fix-evac3-background-visible.patch
- # Port in DDA's eye colours
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/mutations-03_eye-colours.patch
-
# # npc fixes
echo "Applying NPC fixes"
@@ -645,10 +598,6 @@ prepare() {
# The gas pump was placed on top of a tile that didn't allow items inside, causing the gasoline to be shunted to the next valid one.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/terrain-04_lumbermill-gasoline-not-spilled.patch
- # Fix community garden liquid fertilizer being in a pit instead of in the storage tanks:
- # I'm pretty sure that having it all dumped in a pit was not intentional.
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/terrain-05_community-garden-fertilizer-not-spilled.patch
-
# Re-hide something that feels like spoilers.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/terrain-07_rehide-redacted.patch
@@ -664,10 +613,6 @@ prepare() {
# More choice is better than less. You can disable undesired map notes in the map notes settings menu.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/terrain-11_clean-up-map-extras.patch
- # Add missing stairs to the free merchant center:
- # The roof has stairs down, but the main floor lacked a matching stairs up.
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/terrain-12_add_fmc_stairs.patch
-
# Fix mismatched mapgen palettes:
# Fixes light machinery incorrectly appearing under various lab furniture
# All said items define C as the tile in question, but C is already in lab_palette as t_machinery_electronic.
@@ -686,11 +631,6 @@ prepare() {
# Item was unusable without this patch.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/tools-03_shears-use-light-battery.patch
- # Normalize the manhack volumes to that of the base grenade/explosive:
- # I don't see how a c-4 manhack could be 1/4 the volume of a stick of c-4.
- # Grenade hacks were also thrice as big as the base grenade.
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/tools-04_normalize-drone-volume.patch
-
# # vehicle fixes
echo "Applying vehicle fixes"
@@ -716,9 +656,6 @@ prepare() {
# # Uncategorized for now
echo "Applying uncategorized fixes"
- # Fix rubber items dismantling into 10x item volume of rubber:
- # 2023-09-23-0910 attempts to address this, but does not fix a pair of rubber boots exploding into a 156L pile of rubber chunks.
- patch -Np1 --no-backup-if-mismatch -i "$srcdir"/etc-01_fix-rubbersplosion.patch
# Add price_postapoc to a number of items that did not have one set.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/etc-02_add-missing-price-postapoc.patch
diff --git a/ammo-10_ammo-order-fix.patch b/ammo-10_ammo-order-fix.patch
index 8ef8151..65b0d32 100644
--- a/ammo-10_ammo-order-fix.patch
+++ b/ammo-10_ammo-order-fix.patch
@@ -10,8 +10,8 @@
+ "description": "20x66mm caseless shotgun rounds, buckshot type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.",
+ "weight": "56 g",
+ "volume": "250 ml",
-+ "price": 1500,
-+ "price_postapoc": 4000,
++ "price": "15 USD",
++ "price_postapoc": "40 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "material": [ "steel", "powder" ],
+ "symbol": "=",
@@ -45,8 +45,8 @@
+ "type": "AMMO",
+ "name": { "str": "20x66mm flechette" },
+ "description": "20x66mm caseless shotgun rounds, flechette type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.",
-+ "price": 4000,
-+ "price_postapoc": 4000,
++ "price": "40 USD",
++ "price_postapoc": "40 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "count": 10,
+ "//": "Balanced as AP.",
@@ -65,8 +65,8 @@
+ "type": "AMMO",
+ "name": { "str": "20x66mm slug" },
+ "description": "20x66mm caseless shotgun rounds, solid projectile type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.",
-+ "price": 1500,
-+ "price_postapoc": 4000,
++ "price": "15 USD",
++ "price_postapoc": "40 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "//": "Balanced as FMJ",
+ "damage": { "damage_type": "bullet", "amount": 84, "armor_penetration": 21 },
@@ -87,8 +87,8 @@
- "type": "AMMO",
- "name": { "str": "20x66mm flechette" },
- "description": "20x66mm caseless shotgun rounds, flechette type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.",
-- "price": 4000,
-- "price_postapoc": 4000,
+- "price": "40 USD",
+- "price_postapoc": "40 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "count": 10,
- "//": "Balanced as AP.",
@@ -111,8 +111,8 @@
- "description": "20x66mm caseless shotgun rounds, buckshot type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.",
- "weight": "56 g",
- "volume": "250 ml",
-- "price": 1500,
-- "price_postapoc": 4000,
+- "price": "15 USD",
+- "price_postapoc": "40 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "material": [ "steel", "powder" ],
- "symbol": "=",
@@ -139,8 +139,8 @@
- "type": "AMMO",
- "name": { "str": "20x66mm slug" },
- "description": "20x66mm caseless shotgun rounds, solid projectile type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.",
-- "price": 1500,
-- "price_postapoc": 4000,
+- "price": "15 USD",
+- "price_postapoc": "40 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "//": "Balanced as FMJ",
- "damage": { "damage_type": "bullet", "amount": 84, "armor_penetration": 21 },
@@ -404,8 +404,8 @@
+ "description": "8x40mm caseless rounds. Proprietary ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.",
+ "weight": "12 g",
+ "volume": "250 ml",
-+ "price": 225,
-+ "price_postapoc": 8000,
++ "price": "225 cent",
++ "price_postapoc": "80 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "material": [ "plastic", "powder" ],
+ "symbol": "=",
@@ -440,8 +440,8 @@
+ "type": "AMMO",
+ "name": { "str": "8x40mm HVP" },
+ "description": "8x40mm caseless rounds, saboted high-velocity penetrator type. Advanced military grade, armor-piercing ammunition that fires a single depleted uranium flechette. Being caseless rounds, these cannot be disassembled or reloaded.",
-+ "price": 2500,
-+ "price_postapoc": 50000,
++ "price": "25 USD",
++ "price_postapoc": "500 USD",
+ "count": 20,
+ "//": "Balanced as AP, with 25% higher damage and 50% higher arpen",
+ "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 34 } },
@@ -479,8 +479,8 @@
- "description": "8x40mm caseless rounds. Proprietary ammunition for Rivtech firearms. Being caseless rounds, these cannot be disassembled or reloaded.",
- "weight": "12 g",
- "volume": "250 ml",
-- "price": 225,
-- "price_postapoc": 8000,
+- "price": "225 cent",
+- "price_postapoc": "80 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "material": [ "plastic", "powder" ],
- "symbol": "=",
@@ -509,8 +509,8 @@
- "type": "AMMO",
- "name": { "str": "8x40mm HVP" },
- "description": "8x40mm caseless rounds, saboted high-velocity penetrator type. Advanced military grade, armor-piercing ammunition that fires a single depleted uranium flechette. Being caseless rounds, these cannot be disassembled or reloaded.",
-- "price": 2500,
-- "price_postapoc": 50000,
+- "price": "25 USD",
+- "price_postapoc": "500 USD",
- "count": 20,
- "//": "Balanced as AP, with 25% higher damage and 50% higher arpen",
- "relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 34 } },
@@ -547,8 +547,8 @@
+ "description": "A shell filled with metal pellets. Extremely damaging, plus the spread makes it very accurate at short range. Favored by SWAT forces.",
+ "weight": "32 g",
+ "volume": "250 ml",
-+ "price": 500,
-+ "price_postapoc": 800,
++ "price": "5 USD",
++ "price_postapoc": "8 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "material": [ "plastic", "powder" ],
+ "symbol": "=",
@@ -559,7 +559,7 @@
+ "ammo_type": "shot",
+ "casing": "shot_hull",
+ "range": 12,
-+ "damage": { "damage_type": "bullet", "amount": 80, "armor_multiplier": 2.0 },
++ "damage": { "damage_type": "bullet", "amount": 80, "armor_multiplier": 2 },
+ "recoil": 2500,
+ "loudness": 160,
+ "effects": [ "COOKOFF", "SHOT" ]
@@ -577,10 +577,10 @@
+ "type": "AMMO",
+ "name": { "str": "birdshot" },
+ "description": "Weak shotgun ammunition. Designed for hunting birds and other small game, its applications in combat are very limited.",
-+ "price": 100,
-+ "price_postapoc": 400,
++ "price": "1 USD",
++ "price_postapoc": "4 USD",
+ "range": 0,
-+ "damage": { "damage_type": "bullet", "amount": 50, "armor_multiplier": 3.0 },
++ "damage": { "damage_type": "bullet", "amount": 50, "armor_multiplier": 3 },
+ "loudness": 80,
+ "shape": [ "cone", { "half_angle": 15, "length": 8 } ],
+ "extend": { "effects": [ "NOGIB" ] }
@@ -598,8 +598,8 @@
+ "type": "AMMO",
+ "name": { "str": "dragon's breath shell" },
+ "description": "A shotgun shell filled with magnesium pellets or shards, used mostly as a distress flare or pyrotechnics tool. When the round is fired, high temperature sparks and flames shoot out of the barrel, igniting everything in their path.",
-+ "price": 1000,
-+ "price_postapoc": 1600,
++ "price": "10 USD",
++ "price_postapoc": "16 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "damage": { "damage_type": "heat", "amount": 30 },
+ "proportional": { "recoil": 0.6, "loudness": 0.8, "dispersion": 1.2 },
@@ -620,12 +620,12 @@
+ "type": "AMMO",
+ "name": { "str": "flechette shell" },
+ "description": "A shotgun shell filled with tiny steel darts. Extremely damaging, plus the spread makes it very accurate at short range. Slices through most forms of armor with ease.",
-+ "price": 2000,
-+ "price_postapoc": 800,
++ "price": "20 USD",
++ "price_postapoc": "8 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "count": 10,
+ "//": "Balanced as standard AP.",
-+ "relative": { "damage": { "damage_type": "bullet", "amount": -20, "armor_penetration": 30, "armor_multiplier": -1.0 } }
++ "relative": { "damage": { "damage_type": "bullet", "amount": -20, "armor_penetration": 30, "armor_multiplier": -1 } }
+ },
+ {
"id": "reloaded_shot_flechette",
@@ -640,8 +640,8 @@
+ "type": "AMMO",
+ "name": { "str": "shotgun slug" },
+ "description": "A heavy metal slug used with shotguns to give them the range capabilities of a rifle. Extremely damaging but rather inaccurate.",
-+ "price": 400,
-+ "price_postapoc": 400,
++ "price": "4 USD",
++ "price_postapoc": "4 USD",
+ "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+ "dispersion": 80,
+ "//": "Balanced as FMJ",
@@ -663,8 +663,8 @@
- "description": "A shell filled with metal pellets. Extremely damaging, plus the spread makes it very accurate at short range. Favored by SWAT forces.",
- "weight": "32 g",
- "volume": "250 ml",
-- "price": 500,
-- "price_postapoc": 800,
+- "price": "5 USD",
+- "price_postapoc": "8 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "material": [ "plastic", "powder" ],
- "symbol": "=",
@@ -675,7 +675,7 @@
- "ammo_type": "shot",
- "casing": "shot_hull",
- "range": 20,
-- "damage": { "damage_type": "bullet", "amount": 80, "armor_multiplier": 2.0 },
+- "damage": { "damage_type": "bullet", "amount": 80, "armor_multiplier": 2 },
- "recoil": 2500,
- "loudness": 160,
- "effects": [ "COOKOFF", "SHOT" ]
@@ -700,10 +700,10 @@
- "type": "AMMO",
- "name": { "str": "birdshot" },
- "description": "Weak shotgun ammunition. Designed for hunting birds and other small game, its applications in combat are very limited.",
-- "price": 100,
-- "price_postapoc": 400,
+- "price": "1 USD",
+- "price_postapoc": "4 USD",
- "range": 0,
-- "damage": { "damage_type": "bullet", "amount": 50, "armor_multiplier": 3.0 },
+- "damage": { "damage_type": "bullet", "amount": 50, "armor_multiplier": 3 },
- "loudness": 80,
- "shape": [ "cone", { "half_angle": 15, "length": 8 } ],
- "extend": { "effects": [ "NOGIB" ] }
@@ -714,8 +714,8 @@
- "type": "AMMO",
- "name": { "str": "dragon's breath shell" },
- "description": "A shotgun shell filled with magnesium pellets or shards, used mostly as a distress flare or pyrotechnics tool. When the round is fired, high temperature sparks and flames shoot out of the barrel, igniting everything in their path.",
-- "price": 1000,
-- "price_postapoc": 1600,
+- "price": "10 USD",
+- "price_postapoc": "16 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "damage": { "damage_type": "heat", "amount": 30 },
- "proportional": { "recoil": 0.6, "loudness": 0.8, "dispersion": 1.2 },
@@ -729,12 +729,12 @@
- "type": "AMMO",
- "name": { "str": "flechette shell" },
- "description": "A shotgun shell filled with tiny steel darts. Extremely damaging, plus the spread makes it very accurate at short range. Slices through most forms of armor with ease.",
-- "price": 2000,
-- "price_postapoc": 800,
+- "price": "20 USD",
+- "price_postapoc": "8 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "count": 10,
- "//": "Balanced as standard AP.",
-- "relative": { "damage": { "damage_type": "bullet", "amount": -20, "armor_penetration": 30, "armor_multiplier": -1.0 } }
+- "relative": { "damage": { "damage_type": "bullet", "amount": -20, "armor_penetration": 30, "armor_multiplier": -1 } }
- },
- {
"id": "shot_he",
@@ -751,8 +751,8 @@
- "type": "AMMO",
- "name": { "str": "shotgun slug" },
- "description": "A heavy metal slug used with shotguns to give them the range capabilities of a rifle. Extremely damaging but rather inaccurate.",
-- "price": 400,
-- "price_postapoc": 400,
+- "price": "4 USD",
+- "price_postapoc": "4 USD",
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "dispersion": 80,
- "//": "Balanced as FMJ",
diff --git a/ammo-11_fix-volume-40mm.patch b/ammo-11_fix-volume-40mm.patch
index 88c8b32..54bd26a 100644
--- a/ammo-11_fix-volume-40mm.patch
+++ b/ammo-11_fix-volume-40mm.patch
@@ -6,15 +6,15 @@
"name": { "str": "40x46mm grenade" },
- "volume": "250 ml",
+ "volume": "129 ml",
- "price": 10000,
- "price_postapoc": 6000,
+ "price": "100 USD",
+ "price_postapoc": "60 USD",
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
--- a/data/json/items/ammo/40x53mm.json
+++ b/data/json/items/ammo/40x53mm.json
@@ -3,7 +3,7 @@
"name": { "str": "40x53mm grenade" },
- "price": 10000,
- "price_postapoc": 6000,
+ "price": "100 USD",
+ "price_postapoc": "60 USD",
- "volume": "260 ml",
+ "volume": "137 ml",
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
diff --git a/armor-01_ankle-ammo-pouch-is-not-a-backpack.patch b/armor-01_ankle-ammo-pouch-is-not-a-backpack.patch
index 62e703c..6add0fb 100644
--- a/armor-01_ankle-ammo-pouch-is-not-a-backpack.patch
+++ b/armor-01_ankle-ammo-pouch-is-not-a-backpack.patch
@@ -1,7 +1,7 @@
--- a/data/json/items/armor/ammo_pouch.json
+++ b/data/json/items/armor/ammo_pouch.json
@@ -192,7 +192,7 @@
- "price_postapoc": 750,
+ "price_postapoc": "750 cent",
"material": [ "cotton" ],
"symbol": "[",
- "looks_like": "ragpouch",
diff --git a/backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch b/backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch
deleted file mode 100644
index 246f7f6..0000000
--- a/backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch
+++ /dev/null
@@ -1,552 +0,0 @@
-From aa47f05b61e0b044a0a69f7a58db819f3fe18e0a Mon Sep 17 00:00:00 2001
-From: scarf <greenscarf005@gmail.com>
-Date: Mon, 13 Nov 2023 16:09:36 +0900
-Subject: [PATCH] fix(content): `NON_FOULING` flag not working due to typo
- (#3655)
-
-* fix(content): `NON-FOULING` -> `NON_FOULING`
-
-exciting typo fixes
-
-* fix: remove duplicate entries
----
- data/json/ammo_effects.json | 5 -----
- data/json/ammo_effects_simple.json | 2 +-
- data/json/flags.json | 5 -----
- data/json/items/ammo.json | 12 ++++++------
- data/json/items/ammo/metal_rail.json | 4 ++--
- data/json/items/ammo/nail.json | 2 +-
- data/json/items/classes/gun.json | 16 ++++++++--------
- data/json/items/gun/flammable.json | 2 +-
- data/json/items/gun/misc.json | 2 +-
- data/json/items/gun/paintball.json | 2 +-
- data/json/items/gunmod/rail.json | 2 +-
- data/json/items/ranged/spearguns.json | 2 +-
- data/json/obsoletion/items.json | 4 ++--
- data/mods/Aftershock/items/bioparts.json | 2 +-
- data/mods/Aftershock/items/gun/laser.json | 6 +++---
- data/mods/Aftershock/items/weapons.json | 4 ++--
- data/mods/CRT_EXPANSION/items/crt_gun.json | 20 ++++++++++----------
- data/mods/No_Hope/Items/gunmods.json | 2 +-
- data/mods/No_Hope/Items/guns.json | 4 ++--
- data/mods/TEST_DATA/items.json | 2 +-
- src/ranged.cpp | 2 +-
- 21 files changed, 46 insertions(+), 56 deletions(-)
-
-diff --git a/data/json/ammo_effects.json b/data/json/ammo_effects.json
-index 8336dd14554..5f0e85035fe 100644
---- a/data/json/ammo_effects.json
-+++ b/data/json/ammo_effects.json
-@@ -376,10 +376,5 @@
- "id": "RECYCLED",
- "type": "ammo_effect",
- "//": "Nearly-immeasurable chance to fail to fire."
-- },
-- {
-- "id": "NON-FOULING",
-- "type": "ammo_effect",
-- "//": "Doesn't cause gunk to build up."
- }
- ]
-diff --git a/data/json/ammo_effects_simple.json b/data/json/ammo_effects_simple.json
-index beb1191f0be..29042cdbfe7 100644
---- a/data/json/ammo_effects_simple.json
-+++ b/data/json/ammo_effects_simple.json
-@@ -95,7 +95,7 @@
- "//": "Doesn't overkill."
- },
- {
-- "id": "NON-FOULING",
-+ "id": "NON_FOULING",
- "type": "ammo_effect",
- "//": "Doesn't cause gunk to build up."
- },
-diff --git a/data/json/flags.json b/data/json/flags.json
-index 796b16e1262..b121cbb023f 100644
---- a/data/json/flags.json
-+++ b/data/json/flags.json
-@@ -2067,11 +2067,6 @@
- "type": "json_flag",
- "context": [ ]
- },
-- {
-- "id": "NON-FOULING",
-- "type": "json_flag",
-- "context": [ ]
-- },
- {
- "id": "PUMP_RAIL_COMPATIBLE",
- "type": "json_flag",
-diff --git a/data/json/items/ammo.json b/data/json/items/ammo.json
-index 5adfa2d27ed..5b6b37126d7 100644
---- a/data/json/items/ammo.json
-+++ b/data/json/items/ammo.json
-@@ -278,7 +278,7 @@
- "to_hit": -1,
- "qualities": [ [ "HAMMER", 1 ] ],
- "dont_recover_one_in": 80,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ]
- },
- {
- "type": "AMMO",
-@@ -298,7 +298,7 @@
- "dispersion": 14,
- "loudness": 0,
- "count": 10,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ]
- },
- {
- "type": "AMMO",
-@@ -362,7 +362,7 @@
- "loudness": 0,
- "count": 50,
- "dont_recover_one_in": 1000,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ]
- },
- {
- "type": "AMMO",
-@@ -383,7 +383,7 @@
- "count": 500,
- "stack_size": 200,
- "loudness": 9,
-- "effects": [ "NOGIB", "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NOGIB", "NEVER_MISFIRES", "NON_FOULING" ]
- },
- {
- "type": "AMMO",
-@@ -1080,7 +1080,7 @@
- "loudness": 0,
- "to_hit": -1,
- "dont_recover_one_in": 1000,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ]
- },
- {
- "type": "AMMO",
-@@ -1100,6 +1100,6 @@
- "loudness": 0,
- "count": 30,
- "dont_recover_one_in": 1000,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ]
- }
- ]
-diff --git a/data/json/items/ammo/metal_rail.json b/data/json/items/ammo/metal_rail.json
-index f4ac65c5428..ff40c3dd597 100644
---- a/data/json/items/ammo/metal_rail.json
-+++ b/data/json/items/ammo/metal_rail.json
-@@ -19,7 +19,7 @@
- "range": 20,
- "damage": { "damage_type": "stab", "amount": 60, "armor_penetration": 10 },
- "dispersion": 200,
-- "effects": [ "RECYCLED", "NON-FOULING" ]
-+ "effects": [ "RECYCLED", "NON_FOULING" ]
- },
- {
- "id": "steel_rail",
-@@ -35,7 +35,7 @@
- "material": [ "steel" ],
- "color": "light_gray",
- "dispersion": 100,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ],
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ],
- "relative": { "range": 10, "damage": { "damage_type": "stab", "amount": -10, "armor_penetration": 20 } }
- }
- ]
-diff --git a/data/json/items/ammo/nail.json b/data/json/items/ammo/nail.json
-index b90889c036c..33602a8bf5a 100644
---- a/data/json/items/ammo/nail.json
-+++ b/data/json/items/ammo/nail.json
-@@ -29,6 +29,6 @@
- "range": 3,
- "damage": { "damage_type": "stab", "amount": 4, "armor_penetration": 3 },
- "dispersion": 120,
-- "effects": [ "NON-FOULING" ]
-+ "effects": [ "NON_FOULING" ]
- }
- ]
-diff --git a/data/json/items/classes/gun.json b/data/json/items/classes/gun.json
-index 2d8acfc9112..d010aa2dee0 100644
---- a/data/json/items/classes/gun.json
-+++ b/data/json/items/classes/gun.json
-@@ -163,7 +163,7 @@
- "name": { "str": "energy pistol" },
- "looks_like": "v29",
- "//": "No conventional faults because it uses non-conventional systems.",
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ],
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ],
- "valid_mod_locations": [
- [ "accessories", 2 ],
- [ "emitter", 1 ],
-@@ -185,7 +185,7 @@
- "bashing": 7,
- "to_hit": -2,
- "//": "No conventional faults because it uses non-conventional systems.",
-- "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NEVER_JAMS", "NON-FOULING", "NEEDS_NO_LUBE" ],
-+ "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NEVER_JAMS", "NON_FOULING", "NEEDS_NO_LUBE" ],
- "dispersion": 120,
- "reload": 600,
- "valid_mod_locations": [
-@@ -287,7 +287,7 @@
- "name": { "str": "energy rifle" },
- "looks_like": "laser_rifle",
- "//": "No conventional faults because it uses non-conventional systems.",
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ],
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ],
- "valid_mod_locations": [
- [ "accessories", 4 ],
- [ "emitter", 1 ],
-@@ -309,7 +309,7 @@
- "name": { "str": "magnetic rifle" },
- "looks_like": "laser_rifle",
- "//": "No conventional faults because it uses non-conventional systems.",
-- "flags": [ "NEVER_JAMS", "NON-FOULING", "NEEDS_NO_LUBE" ],
-+ "flags": [ "NEVER_JAMS", "NON_FOULING", "NEEDS_NO_LUBE" ],
- "valid_mod_locations": [
- [ "accessories", 4 ],
- [ "grip", 1 ],
-@@ -331,7 +331,7 @@
- "bashing": 8,
- "to_hit": -2,
- "//": "No conventional faults because it uses non-conventional systems.",
-- "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NEVER_JAMS", "NON-FOULING", "NEEDS_NO_LUBE" ],
-+ "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NEVER_JAMS", "NON_FOULING", "NEEDS_NO_LUBE" ],
- "dispersion": 90,
- "reload": 700,
- "valid_mod_locations": [
-@@ -353,7 +353,7 @@
- "name": { "str": "pneumatic rifle" },
- "bashing": 8,
- "//": "No conventional faults because it uses non-conventional systems.",
-- "flags": [ "NEVER_JAMS", "NON-FOULING", "NEEDS_NO_LUBE" ],
-+ "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 ] ],
-@@ -488,7 +488,7 @@
- "bashing": 8,
- "reload": 200,
- "handling": 40,
-- "flags": [ "NO_UNLOAD", "NEVER_JAMS", "NON-FOULING" ],
-+ "flags": [ "NO_UNLOAD", "NEVER_JAMS", "NON_FOULING" ],
- "faults": [ ]
- },
- {
-@@ -501,7 +501,7 @@
- "bashing": 9,
- "skill": "launcher",
- "ammo": "chemical_spray",
-- "flags": [ "FIRE_50", "NEVER_JAMS", "NON-FOULING" ],
-+ "flags": [ "FIRE_50", "NEVER_JAMS", "NON_FOULING" ],
- "valid_mod_locations": [
- [ "accessories", 4 ],
- [ "grip", 1 ],
-diff --git a/data/json/items/gun/flammable.json b/data/json/items/gun/flammable.json
-index 2bece97d622..d334d8ec1e1 100644
---- a/data/json/items/gun/flammable.json
-+++ b/data/json/items/gun/flammable.json
-@@ -41,7 +41,7 @@
- "durability": 9,
- "modes": [ [ "DEFAULT", "semi", 1 ], [ "AUTO", "auto", 4 ] ],
- "valid_mod_locations": [ [ "accessories", 4 ], [ "rail", 1 ], [ "grip", 1 ], [ "sling", 1 ], [ "stock", 1 ], [ "underbarrel", 1 ] ],
-- "extend": { "flags": [ "FIRE_20", "MODE_BURST", "NON-FOULING" ] },
-+ "extend": { "flags": [ "FIRE_20", "MODE_BURST", "NON_FOULING" ] },
- "delete": { "flags": [ "FIRE_100" ] },
- "magazines": [ [ "flammable", [ "rm4502", "rm4504" ] ] ]
- }
-diff --git a/data/json/items/gun/misc.json b/data/json/items/gun/misc.json
-index 322d81404a8..a99b8521541 100644
---- a/data/json/items/gun/misc.json
-+++ b/data/json/items/gun/misc.json
-@@ -32,7 +32,7 @@
- "description": "A water cannon from a fire truck. Mounted on a vehicle, it could be used to stop fires or \"protesters\". Or it could be loaded with something more corrosive, for a lot less firefighting and a lot more excessive force.",
- "price": 50000,
- "material": "steel",
-- "flags": [ "NEVER_JAMS", "MOUNTED_GUN", "NO_RELOAD", "NON-FOULING" ],
-+ "flags": [ "NEVER_JAMS", "MOUNTED_GUN", "NO_RELOAD", "NON_FOULING" ],
- "ammo_effects": [ "JET", "BEANBAG", "NEVER_MISFIRES" ],
- "ammo": [ "water", "acid" ],
- "weight": "24500 g",
-diff --git a/data/json/items/gun/paintball.json b/data/json/items/gun/paintball.json
-index 339e78860c2..59854569841 100644
---- a/data/json/items/gun/paintball.json
-+++ b/data/json/items/gun/paintball.json
-@@ -11,7 +11,7 @@
- "price": 8000,
- "price_postapoc": 50,
- "material": [ "aluminum", "plastic" ],
-- "flags": [ "NEVER_JAMS", "NON-FOULING" ],
-+ "flags": [ "NEVER_JAMS", "NON_FOULING" ],
- "skill": "smg",
- "ammo": "paintball",
- "weight": "1600 g",
-diff --git a/data/json/items/gunmod/rail.json b/data/json/items/gunmod/rail.json
-index c579fea22ad..f65304d5e03 100644
---- a/data/json/items/gunmod/rail.json
-+++ b/data/json/items/gunmod/rail.json
-@@ -23,7 +23,7 @@
- "clip_size": 1
- },
- "dispersion_modifier": 60,
-- "flags": [ "STR_RELOAD", "NON-FOULING" ]
-+ "flags": [ "STR_RELOAD", "NON_FOULING" ]
- },
- {
- "id": "gun_crossbow_mod",
-diff --git a/data/json/items/ranged/spearguns.json b/data/json/items/ranged/spearguns.json
-index 98b818095e9..d5737ffece7 100644
---- a/data/json/items/ranged/spearguns.json
-+++ b/data/json/items/ranged/spearguns.json
-@@ -74,7 +74,7 @@
- "price": 25000,
- "price_postapoc": 1000,
- "material": [ "plastic", "steel" ],
-- "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NON-FOULING" ],
-+ "flags": [ "RELOAD_ONE", "STR_RELOAD", "WATERPROOF_GUN", "UNDERWATER_GUN", "NON_FOULING" ],
- "skill": "rifle",
- "ammo": "fishspear",
- "weight": "3460 g",
-diff --git a/data/json/obsoletion/items.json b/data/json/obsoletion/items.json
-index 8a74f66facb..1b7e98f70f6 100644
---- a/data/json/obsoletion/items.json
-+++ b/data/json/obsoletion/items.json
-@@ -1748,7 +1748,7 @@
- "magazine_well": 1,
- "magazines": [ [ "flammable", [ "aux_pressurized_tank" ] ] ],
- "min_skills": [ [ "weapon", 2 ], [ "launcher", 1 ] ],
-- "flags": [ "FIRE_100", "PUMP_RAIL_COMPATIBLE", "NON-FOULING" ]
-+ "flags": [ "FIRE_100", "PUMP_RAIL_COMPATIBLE", "NON_FOULING" ]
- },
- {
- "type": "recipe",
-@@ -1892,7 +1892,7 @@
- "description": "A double-barreled pneumatic air shotgun handcrafted from scrap. Though it's firepower is lacking compared to more conventional shotguns, this thing can still pack quite a punch. That is, if your target is directly in front of you.",
- "price": 220000,
- "material": [ "steel", "wood" ],
-- "flags": [ "RELOAD_ONE", "STR_RELOAD", "NON-FOULING" ],
-+ "flags": [ "RELOAD_ONE", "STR_RELOAD", "NON_FOULING" ],
- "skill": "shotgun",
- "ammo": "shotcanister",
- "weight": "3410 g",
-diff --git a/data/mods/Aftershock/items/bioparts.json b/data/mods/Aftershock/items/bioparts.json
-index a56c060bc27..0b0f75a52ee 100644
---- a/data/mods/Aftershock/items/bioparts.json
-+++ b/data/mods/Aftershock/items/bioparts.json
-@@ -103,6 +103,6 @@
- "loudness": 4,
- "clip_size": 80,
- "ammo_effects": "ACIDBOMB",
-- "flags": [ "NO_UNLOAD", "NON-FOULING" ]
-+ "flags": [ "NO_UNLOAD", "NON_FOULING" ]
- }
- ]
-diff --git a/data/mods/Aftershock/items/gun/laser.json b/data/mods/Aftershock/items/gun/laser.json
-index 9c772880aa2..11fca695807 100644
---- a/data/mods/Aftershock/items/gun/laser.json
-+++ b/data/mods/Aftershock/items/gun/laser.json
-@@ -15,7 +15,7 @@
- "dispersion": 500,
- "ups_charges": 25,
- "ammo_effects": [ "LASER", "BEANBAG" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
- },
- {
- "id": "afs_sentinel_laser",
-@@ -29,7 +29,7 @@
- "ups_charges": 30,
- "modes": [ [ "MULTI", "trilaser", 3 ] ],
- "ammo_effects": [ "LASER" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
- },
- {
- "id": "afs_sentinel_laser_mon",
-@@ -37,6 +37,6 @@
- "copy-from": "afs_sentinel_laser",
- "name": { "str": "wrist-trilaser" },
- "ups_charges": 0,
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
- }
- ]
-diff --git a/data/mods/Aftershock/items/weapons.json b/data/mods/Aftershock/items/weapons.json
-index 188adf91d10..cdb14e6c75e 100644
---- a/data/mods/Aftershock/items/weapons.json
-+++ b/data/mods/Aftershock/items/weapons.json
-@@ -187,7 +187,7 @@
- "reload": 500,
- "valid_mod_locations": [ [ "accessories", 4 ], [ "sights", 1 ], [ "sling", 1 ], [ "stock", 1 ], [ "underbarrel", 1 ] ],
- "ammo_effects": [ "LASER", "DRAW_AS_LINE" ],
-- "flags": [ "NEVER_JAMS", "FIRE_20", "NON-FOULING" ],
-+ "flags": [ "NEVER_JAMS", "FIRE_20", "NON_FOULING" ],
- "magazines": [
- [ "battery", [ "heavy_battery_cell", "heavy_plus_battery_cell", "heavy_atomic_battery_cell", "heavy_disposable_cell" ] ]
- ]
-@@ -287,6 +287,6 @@
- [ "underbarrel mount", 1 ]
- ],
- "ammo_effects": [ "LASER", "INCENDIARY" ],
-- "flags": [ "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ]
-+ "flags": [ "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
- }
- ]
-diff --git a/data/mods/CRT_EXPANSION/items/crt_gun.json b/data/mods/CRT_EXPANSION/items/crt_gun.json
-index 0d5ab8d9828..0c35599551f 100644
---- a/data/mods/CRT_EXPANSION/items/crt_gun.json
-+++ b/data/mods/CRT_EXPANSION/items/crt_gun.json
-@@ -33,7 +33,7 @@
- [ "underbarrel", 1 ]
- ],
- "ammo_effects": [ "LASER", "INCENDIARY" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING" ]
- },
- {
- "id": "crt_laser_gatling",
-@@ -60,7 +60,7 @@
- "modes": [ [ "DEFAULT", "burst", 12 ] ],
- "valid_mod_locations": [ [ "accessories", 1 ], [ "emitter", 1 ], [ "grip", 1 ], [ "lens", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "stock", 1 ] ],
- "ammo_effects": [ "LASER", "INCENDIARY" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING" ]
- },
- {
- "id": "crt_laser_carbine",
-@@ -96,7 +96,7 @@
- [ "underbarrel", 1 ]
- ],
- "ammo_effects": [ "LASER", "INCENDIARY" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING" ]
- },
- {
- "id": "crt_energy_rifle",
-@@ -132,7 +132,7 @@
- [ "underbarrel", 1 ]
- ],
- "ammo_effects": [ "LASER", "INCENDIARY" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING" ]
- },
- {
- "id": "crt_cqb_si",
-@@ -195,7 +195,7 @@
- [ "underbarrel", 1 ]
- ],
- "ammo_effects": [ "STREAM", "INCENDIARY" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "UNARMED_WEAPON", "DURABLE_MELEE", "NON-FOULING", "PYROMANIAC_WEAPON" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "UNARMED_WEAPON", "DURABLE_MELEE", "NON_FOULING", "PYROMANIAC_WEAPON" ]
- },
- {
- "id": "pelletgun",
-@@ -209,7 +209,7 @@
- "price": 9900,
- "//": "You can get a decent Ruger .177 at walmart for $99",
- "material": [ "steel", "plastic" ],
-- "flags": [ "STR_RELOAD", "NON-FOULING", "NON-FOULING" ],
-+ "flags": [ "STR_RELOAD", "NON_FOULING", "NON_FOULING" ],
- "skill": "rifle",
- "ammo": "pellets",
- "weight": "5023 g",
-@@ -252,7 +252,7 @@
- "reload": 170,
- "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "sights", 1 ] ],
- "ammo_effects": [ "PLASMA", "INCENDIARY", "DRAW_LASER_BEAM" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON-FOULING", "PYROMANIAC_WEAPON" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "NON_FOULING", "PYROMANIAC_WEAPON" ]
- },
- {
- "id": "ds_rivet_gun",
-@@ -308,7 +308,7 @@
- "modes": [ [ "DEFAULT", "semi-auto", 1 ] ],
- "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "sights", 1 ] ],
- "ammo_effects": [ "WIDE", "LASER" ],
-- "flags": [ "NEVER_JAMS", "NO_UNLOAD", "SLOW_WIELD", "NON-FOULING", "PYROMANIAC_WEAPON" ]
-+ "flags": [ "NEVER_JAMS", "NO_UNLOAD", "SLOW_WIELD", "NON_FOULING", "PYROMANIAC_WEAPON" ]
- },
- {
- "id": "ds_pulse_rifle",
-@@ -335,7 +335,7 @@
- "reload": 15,
- "modes": [ [ "BURST", "3 rd.", 3 ] ],
- "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "sights", 1 ], [ "stock", 1 ] ],
-- "ammo_effects": [ "NOGIB", "BEANBAG", "NON-FOULING" ],
-+ "ammo_effects": [ "NOGIB", "BEANBAG", "NON_FOULING" ],
- "flags": [ "NEVER_JAMS" ]
- },
- {
-@@ -364,6 +364,6 @@
- "reload": 450,
- "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "REACH", "em field saw", 5, [ "MELEE", "REACH_ATTACK" ] ] ],
- "ammo_effects": [ "LIGHTNING" ],
-- "flags": [ "NEVER_JAMS", "NON-FOULING" ]
-+ "flags": [ "NEVER_JAMS", "NON_FOULING" ]
- }
- ]
-diff --git a/data/mods/No_Hope/Items/gunmods.json b/data/mods/No_Hope/Items/gunmods.json
-index cf963326d37..7b2f59aacb0 100644
---- a/data/mods/No_Hope/Items/gunmods.json
-+++ b/data/mods/No_Hope/Items/gunmods.json
-@@ -202,6 +202,6 @@
- },
- "dispersion_modifier": 60,
- "min_skills": [ [ "weapon", 2 ], [ "rifle", 1 ] ],
-- "flags": [ "STR_RELOAD", "NON-FOULING" ]
-+ "flags": [ "STR_RELOAD", "NON_FOULING" ]
- }
- ]
-diff --git a/data/mods/No_Hope/Items/guns.json b/data/mods/No_Hope/Items/guns.json
-index a4e65ddea31..f516809673f 100644
---- a/data/mods/No_Hope/Items/guns.json
-+++ b/data/mods/No_Hope/Items/guns.json
-@@ -35,7 +35,7 @@
- [ "underbarrel mount", 1 ]
- ],
- "ammo_effects": [ "LASER", "INCENDIARY" ],
-- "flags": [ "NO_UNLOAD", "NON-FOULING", "NEEDS_NO_LUBE" ]
-+ "flags": [ "NO_UNLOAD", "NON_FOULING", "NEEDS_NO_LUBE" ]
- },
- {
- "id": "bio_blaster_gun",
-@@ -503,7 +503,7 @@
- "description": "A double-barreled pneumatic air shotgun handcrafted from scrap. Though it's firepower is lacking compared to more conventional shotguns, this thing can still pack quite a punch. That is, if your target is directly in front of you.",
- "price": 220000,
- "material": [ "steel", "wood" ],
-- "flags": [ "RELOAD_ONE", "STR_RELOAD", "NON-FOULING" ],
-+ "flags": [ "RELOAD_ONE", "STR_RELOAD", "NON_FOULING" ],
- "skill": "shotgun",
- "ammo": [ "shotcanister" ],
- "weight": "3410 g",
-diff --git a/data/mods/TEST_DATA/items.json b/data/mods/TEST_DATA/items.json
-index 9eed603c8b8..cdbc4dd16d6 100644
---- a/data/mods/TEST_DATA/items.json
-+++ b/data/mods/TEST_DATA/items.json
-@@ -20,7 +20,7 @@
- "to_hit": -2,
- "qualities": [ [ "HAMMER", 1 ] ],
- "dont_recover_one_in": 80,
-- "effects": [ "NEVER_MISFIRES", "NON-FOULING" ]
-+ "effects": [ "NEVER_MISFIRES", "NON_FOULING" ]
- },
- {
- "type": "GENERIC",
-diff --git a/src/ranged.cpp b/src/ranged.cpp
-index 0f8def43a5c..ecdfa6384ea 100644
---- a/src/ranged.cpp
-+++ b/src/ranged.cpp
-@@ -91,7 +91,7 @@ static const ammo_effect_str_id ammo_effect_LIGHTNING( "LIGHTNING" );
- static const ammo_effect_str_id ammo_effect_NO_CRIT( "NO_CRIT" );
- static const ammo_effect_str_id ammo_effect_NO_EMBED( "NO_EMBED" );
- static const ammo_effect_str_id ammo_effect_NO_ITEM_DAMAGE( "NO_ITEM_DAMAGE" );
--static const ammo_effect_str_id ammo_effect_NON_FOULING( "NON-FOULING" );
-+static const ammo_effect_str_id ammo_effect_NON_FOULING( "NON_FOULING" );
- static const ammo_effect_str_id ammo_effect_PLASMA( "PLASMA" );
- static const ammo_effect_str_id ammo_effect_RECYCLED( "RECYCLED" );
- static const ammo_effect_str_id ammo_effect_SHATTER_SELF( "SHATTER_SELF" );
---
-2.42.0
-
diff --git a/backport-02_fix-mass_grave-map-extras-3680.patch b/backport-02_fix-mass_grave-map-extras-3680.patch
deleted file mode 100644
index adf1ad3..0000000
--- a/backport-02_fix-mass_grave-map-extras-3680.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From dc6799623ced84cf03c09b6ba55f4f442e3afb2e Mon Sep 17 00:00:00 2001
-From: 0Monet <146018959+0Monet@users.noreply.github.com>
-Date: Wed, 15 Nov 2023 23:46:19 +0100
-Subject: [PATCH] fix: mass_grave map extras (#3680)
-
-* fix_mass_grave
-
-* mass_grave_casings in itemgroups
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- data/json/itemgroups/Locations_MapExtras/map_extras.json | 5 +++++
- data/json/mapgen/map_extras/mass_grave.json | 8 +-------
- 2 files changed, 6 insertions(+), 7 deletions(-)
-
-diff --git a/data/json/itemgroups/Locations_MapExtras/map_extras.json b/data/json/itemgroups/Locations_MapExtras/map_extras.json
-index c20ad0bf854..70d983adae9 100644
---- a/data/json/itemgroups/Locations_MapExtras/map_extras.json
-+++ b/data/json/itemgroups/Locations_MapExtras/map_extras.json
-@@ -111,5 +111,10 @@
- "subtype": "distribution",
- "id": "map_extra_casings",
- "entries": [ { "item": "rag_bloody" }, { "item": "cigar_butt" }, { "item": "cig_butt" }, { "item": "can_drink_unsealed" } ]
-+ },
-+ {
-+ "type": "item_group",
-+ "id": "mass_grave_casings",
-+ "items": [ [ "223_casing", 60 ], [ "308_casing", 20 ], [ "shot_hull", 20 ] ]
- }
- ]
-diff --git a/data/json/mapgen/map_extras/mass_grave.json b/data/json/mapgen/map_extras/mass_grave.json
-index 4c4f84695c7..429524304cd 100644
---- a/data/json/mapgen/map_extras/mass_grave.json
-+++ b/data/json/mapgen/map_extras/mass_grave.json
-@@ -1,9 +1,4 @@
- [
-- {
-- "id": "mass_grave_casings",
-- "type": "item_group",
-- "items": [ [ "223_casing", 60 ], [ "308_casing", 20 ], [ "shot_hull", 20 ] ]
-- },
- {
- "type": "mapgen",
- "method": "json",
-@@ -35,8 +30,7 @@
- " cccccccccccccccccccccc ",
- " "
- ],
-- "terrain": { "a": "t_pit_corpsed", "b": "t_fence_post", "c": "t_fence_barbed" },
-- "furniture": { },
-+ "terrain": { "a": [ "t_pit_corpsed" ], "b": [ "t_fence_post" ], "c": [ "t_fence_barbed" ] },
- "place_loot": [
- { "group": "everyday_corpse", "x": [ 4, 4 ], "y": [ 8, 8 ] },
- { "group": "everyday_corpse", "chance": 100, "repeat": [ 1 ], "x": [ 4, 4 ], "y": [ 10, 10 ] },
---
-2.42.0
-
diff --git a/backport-03-2_fix-bugfixes-Fix-light-and-helmet-power-helms-having.patch b/backport-03-2_fix-bugfixes-Fix-light-and-helmet-power-helms-having.patch
deleted file mode 100644
index 7d6195e..0000000
--- a/backport-03-2_fix-bugfixes-Fix-light-and-helmet-power-helms-having.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From a77aebb2b4f8ced3ea79d177300a96889a5706b1 Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Mon, 20 Nov 2023 01:13:17 -0600
-Subject: [PATCH] fix(bugfixes): Fix light and helmet power helms having each
- other's power draw (#3726)
-
-fix(bugfixes): Fix light and helmet power helms having each other's power consumption values
----
- data/json/items/armor/power_armor.json | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/data/json/items/armor/power_armor.json b/data/json/items/armor/power_armor.json
-index f428456bc2f..87a44cef65c 100644
---- a/data/json/items/armor/power_armor.json
-+++ b/data/json/items/armor/power_armor.json
-@@ -318,7 +318,7 @@
- "name": { "str": "heavy power armor helmet (active)", "str_pl": "heavy power armor helmets (active)" },
- "description": "An extremely heavy-duty fully enclosed combat helmet for hazardous environments, this was designed to fit with a powered exoskeleton. In the field, soldiers reported that the protection was not worth the awkward size and limited visuals. The environmental controls function best with direct-skin contact.",
- "extend": { "flags": [ "WATCH", "THERMOMETER", "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-- "power_draw": 250000,
-+ "power_draw": 750000,
- "qualities": [ [ "GLARE", 2 ] ],
- "revert_to": "power_armor_helmet_heavy",
- "use_action": {
-@@ -373,7 +373,7 @@
- "name": { "str": "light power armor helmet (active)", "str_pl": "light power armor helmets (active)" },
- "description": "This full-enclosure helmet was designed based on commercial diving equipment, in response to complaints that earlier designs were impossible to use in combat. While still a little more restrictive than regular combat headgear - and frustrating should your nose itch - this one received far better reviews from soldiers. Sadly, civilization ended before they could roll out in significant numbers. The environmental controls function best with direct-skin contact.",
- "extend": { "flags": [ "WATCH", "THERMOMETER", "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-- "power_draw": 750000,
-+ "power_draw": 250000,
- "qualities": [ [ "GLARE", 1 ] ],
- "revert_to": "power_armor_helmet_light",
- "use_action": {
---
-2.42.0
-
diff --git a/backport-03-3_feat-balance-HEAVY_WEAPON_SUPPORT-flag-for-large-mut.patch b/backport-03-3_feat-balance-HEAVY_WEAPON_SUPPORT-flag-for-large-mut.patch
deleted file mode 100644
index 3d84533..0000000
--- a/backport-03-3_feat-balance-HEAVY_WEAPON_SUPPORT-flag-for-large-mut.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-From 70662ffd3884216bea10ecf804af0f8fc05d188c Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Tue, 21 Nov 2023 07:24:44 -0600
-Subject: [PATCH] feat(balance): `HEAVY_WEAPON_SUPPORT` flag for large mutation
- and power armors (#3691)
-
-* feat(balance): Active power armor supports heavy weapons
-
-* Update crt_toolarmor.json
-
-* style(autofix.ci): automated formatting
-
-* Huge > Power Armor
-
-You are huge! That means you have huge guts!
-
-* Update ranged.cpp
-
-* Updates per feedback
-
-1. Renamed flag per Coolthulhu's suggestion.
-2. Also removed some test messages I left in by mistake.
-
-* style(autofix.ci): automated formatting
-
-* Ideas/fixes per feedback
-
-* Rename function per suggestion
-
-Co-Authored-By: scarf <greenscarf005@gmail.com>
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
-Co-authored-by: scarf <greenscarf005@gmail.com>
----
- data/json/flags.json | 8 ++-
- data/json/items/armor/power_armor.json | 6 +--
- .../CRT_EXPANSION/items/crt_toolarmor.json | 5 +-
- .../docs/en/mod/json/reference/json_flags.md | 5 +-
- src/flag.cpp | 1 +
- src/flag.h | 1 +
- src/ranged.cpp | 52 +++++++++----------
- 7 files changed, 44 insertions(+), 34 deletions(-)
-
-diff --git a/data/json/flags.json b/data/json/flags.json
-index b121cbb023f..9764c0c4049 100644
---- a/data/json/flags.json
-+++ b/data/json/flags.json
-@@ -1573,7 +1573,7 @@
- "id": "MOUNTED_GUN",
- "type": "json_flag",
- "context": [ ],
-- "info": "This weapon is <bad>too unwieldy</bad> to fire on its own and <info>must be mounted</info> on a vehicle or furniture (window, table, mound of dirt, etc.) before use, <info>Large or Huge</info> mutants can fire from the hip with <bad>reduced accuracy.</bad>"
-+ "info": "This weapon <bad>can only be fired if mounted</bad> on a vehicle or furniture (window, table, mound of dirt, etc.) to fire, <info>Large or Huge</info> mutants or those with active <info>Power Armor</info> can fire from the hip with <bad>reduced accuracy.</bad>"
- },
- {
- "id": "MYCUS_OK",
-@@ -2037,6 +2037,12 @@
- "type": "json_flag",
- "context": [ ]
- },
-+ {
-+ "id": "HEAVY_WEAPON_SUPPORT",
-+ "type": "json_flag",
-+ "context": [ ],
-+ "info": "This equipment <good>allows you to fire</good> unwieldy weapons without requiring support from mountable terrain, as a <info>Large or Huge</info> mutant could, at the expense of <bad>reduced accuracy.</bad>"
-+ },
- {
- "id": "FIRE_TWOHAND",
- "type": "json_flag",
-diff --git a/data/json/items/armor/power_armor.json b/data/json/items/armor/power_armor.json
-index 87a44cef65c..56f212aa303 100644
---- a/data/json/items/armor/power_armor.json
-+++ b/data/json/items/armor/power_armor.json
-@@ -91,7 +91,7 @@
- "type": "TOOL_ARMOR",
- "name": { "str": "power armor (active)", "str_pl": "suits of power armor (active)" },
- "description": "These were the second wave of military combat exoskeleton, and got a lot of media attention, with popular Navy commercials featuring them heavily. It consists of a muscle-boosting exoskeleton frame with overlayed segmented alloy plating. Despite advancements over the original bulky 'tank suits', the wearer still cannot easily fit through narrow spaces, or sit down comfortably (and it ruins upholstery). There is an integrated chemical resistant bodyglove that precludes wearing other clothing. It is currently turned on, activate it to turn it off.",
-- "extend": { "flags": [ "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-+ "extend": { "flags": [ "CLIMATE_CONTROL", "HEAVY_WEAPON_SUPPORT", "TRADER_AVOID" ] },
- "power_draw": 1500000,
- "revert_to": "power_armor_basic",
- "use_action": {
-@@ -150,7 +150,7 @@
- "type": "TOOL_ARMOR",
- "name": { "str": "heavy power armor (active)", "str_pl": "suits of heavy power armor (active)" },
- "description": "Colloquially known as a 'tank suit' in the media, these bulky exoskeletons, covered in thick segmented armor plates, were tested in military service a few years back and determined to be too heavy and expensive for regular use. Now that it's in your hands, though, you have a massive suit of power armor capable of resisting almost any small arms fire and most other forms of attack. On the other hand, it doubles your effective weight, and it's almost impossible not to bump into things. There is an integrated chemical resistant bodyglove that precludes wearing other clothing. It is currently turned on, activate it to turn it off.",
-- "extend": { "flags": [ "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-+ "extend": { "flags": [ "CLIMATE_CONTROL", "HEAVY_WEAPON_SUPPORT", "TRADER_AVOID" ] },
- "power_draw": 2250000,
- "revert_to": "power_armor_heavy",
- "use_action": {
-@@ -207,7 +207,7 @@
- "type": "TOOL_ARMOR",
- "name": { "str": "light power armor (active)", "str_pl": "suits of light power armor (active)" },
- "description": "The final iteration of military power armor before the fall of civilization, this type - a powered exoskeleton with high-tech segmented plating - was designed for actual widespread combat use and was seen on the front lines during the last days of the cataclysm. Like the heavier suits, it is resistant to most modern weaponry, but it is light and maneuverable, and can fit into normal vehicles and doorways without fuss, a huge advantage over predecessors. Unfortunately, the world ended before it could roll out in significant numbers. There is an integrated chemical resistant bodyglove that precludes wearing other clothing. It is currently turned on, activate it to turn it off.",
-- "extend": { "flags": [ "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-+ "extend": { "flags": [ "CLIMATE_CONTROL", "HEAVY_WEAPON_SUPPORT", "TRADER_AVOID" ] },
- "power_draw": 750000,
- "revert_to": "power_armor_light",
- "use_action": {
-diff --git a/data/mods/CRT_EXPANSION/items/crt_toolarmor.json b/data/mods/CRT_EXPANSION/items/crt_toolarmor.json
-index 708f79d1548..7ea7d2375a2 100644
---- a/data/mods/CRT_EXPANSION/items/crt_toolarmor.json
-+++ b/data/mods/CRT_EXPANSION/items/crt_toolarmor.json
-@@ -117,7 +117,7 @@
- "type": "TOOL_ARMOR",
- "category": "armor",
- "name": { "str": "C.R.I.T. EM vest (off)", "str_pl": "C.R.I.T. EM vests (off)" },
-- "description": "The C.R.I.T. Spec Ops Enhanced Movement vest is embedded with high-tech filaments and reactive servos which protects its wearer and assists in movement at the cost high power usage. It is commonly worn by C.R.I.T. Spec Ops for its ease of use and manuverability. Turn it on for suit mode, extra protection and movement.",
-+ "description": "The C.R.I.T. Spec Ops Enhanced Movement vest is embedded with high-tech filaments and reactive servos which protects its wearer and assists in movement at the cost high of power usage. It is commonly worn by C.R.I.T. Spec Ops for its ease of use and maneuverability. Turn it on for suit mode, extra protection and movement.",
- "weight": "10 kg",
- "volume": "6250 ml",
- "price": 7000000,
-@@ -214,7 +214,8 @@
- "TRADER_AVOID",
- "USE_UPS",
- "NO_UNLOAD",
-- "OUTER"
-+ "OUTER",
-+ "HEAVY_WEAPON_SUPPORT"
- ]
- },
- {
-diff --git a/doc/src/content/docs/en/mod/json/reference/json_flags.md b/doc/src/content/docs/en/mod/json/reference/json_flags.md
-index 39531a105ac..76131e01d11 100644
---- a/doc/src/content/docs/en/mod/json/reference/json_flags.md
-+++ b/doc/src/content/docs/en/mod/json/reference/json_flags.md
-@@ -761,12 +761,15 @@ List of known flags, used in both `terrain.json` and `furniture.json`.
- - `DISABLE_SIGHTS` Prevents use of the base weapon sights
- - `FIRE_100` Uses 100 shots per firing.
- - `FIRE_50` Uses 50 shots per firing.
-+- `HEAVY_WEAPON_SUPPORT` Wearing this will let you hip-fire heavy weapons without needing terrain
-+ support, like Large or Huge mutants can.
- - `FIRE_TWOHAND` Gun can only be fired if player has two free hands.
- - `IRREMOVABLE` Makes so that the gunmod cannot be removed.
- - `MECH_BAT` This is an exotic battery designed to power military mechs.
- - `MOUNTED_GUN` Gun can only be used on terrain / furniture with the "MOUNTABLE" flag, if you're a
- normal human. If you're an oversized mutant (Inconveniently Large, Large, Freakishly Huge, Huge),
-- you can fire it regularly in exchange for dispersion and recoil penalties.
-+ you can fire it regularly in exchange for dispersion and recoil penalties. Wearing something with
-+ the `HEAVY_WEAPON_SUPPORT` flag also works.
- - `NEVER_JAMS` Never malfunctions.
- - `NO_UNLOAD` Cannot be unloaded.
- - `PRIMITIVE_RANGED_WEAPON` Allows using non-gunsmith tools to repair it (but not reinforce).
-diff --git a/src/flag.cpp b/src/flag.cpp
-index 89506e69860..ecac40cd714 100644
---- a/src/flag.cpp
-+++ b/src/flag.cpp
-@@ -117,6 +117,7 @@ const flag_id flag_FIREWOOD( "FIREWOOD" );
- const flag_id flag_FIRE_100( "FIRE_100" );
- const flag_id flag_FIRE_20( "FIRE_20" );
- const flag_id flag_FIRE_50( "FIRE_50" );
-+const flag_id flag_HEAVY_WEAPON_SUPPORT( "HEAVY_WEAPON_SUPPORT" );
- const flag_id flag_FIRE_TWOHAND( "FIRE_TWOHAND" );
- const flag_id flag_FISH_GOOD( "FISH_GOOD" );
- const flag_id flag_FISH_POOR( "FISH_POOR" );
-diff --git a/src/flag.h b/src/flag.h
-index 7441a3742c9..4c244badf71 100644
---- a/src/flag.h
-+++ b/src/flag.h
-@@ -119,6 +119,7 @@ extern const flag_id flag_FIREWOOD;
- extern const flag_id flag_FIRE_100;
- extern const flag_id flag_FIRE_20;
- extern const flag_id flag_FIRE_50;
-+extern const flag_id flag_HEAVY_WEAPON_SUPPORT;
- extern const flag_id flag_FIRE_TWOHAND;
- extern const flag_id flag_FISH_GOOD;
- extern const flag_id flag_FISH_POOR;
-diff --git a/src/ranged.cpp b/src/ranged.cpp
-index ecdfa6384ea..0b933e99187 100644
---- a/src/ranged.cpp
-+++ b/src/ranged.cpp
-@@ -140,9 +140,6 @@ static const bionic_id bio_railgun( "bio_railgun" );
- static const bionic_id bio_targeting( "bio_targeting" );
- static const bionic_id bio_ups( "bio_ups" );
-
--
--static const std::string flag_MOUNTABLE( "MOUNTABLE" );
--
- static const trait_id trait_PYROMANIA( "PYROMANIA" );
- static const trait_id trait_NORANGEDCRIT( "NO_RANGED_CRIT" );
-
-@@ -151,7 +148,7 @@ static constexpr int AIF_DURATION_LIMIT = 10;
-
- static projectile make_gun_projectile( const item &gun );
- static void cycle_action( item &weap, const tripoint &pos );
--bool can_use_bipod( const map &m, const tripoint &pos );
-+bool can_use_heavy_weapon( const Character &who, const map &m, const tripoint &pos );
- dispersion_sources calculate_dispersion( const map &m, const Character &who, const item &gun,
- int at_recoil, bool burst );
-
-@@ -776,8 +773,12 @@ void npc::pretend_fire( npc *source, int shots, item &gun )
- }
- }
-
--bool can_use_bipod( const map &m, const tripoint &pos )
-+bool can_use_heavy_weapon( const Character &who, const map &m, const tripoint &pos )
- {
-+ if( who.is_mounted() && who.mounted_creature->has_flag( MF_RIDEABLE_MECH ) ) {
-+ return true;
-+ }
-+
- // usage of any attached bipod is dependent upon terrain
- if( m.has_flag_ter_or_furn( "MOUNTABLE", pos ) ) {
- return true;
-@@ -793,7 +794,7 @@ bool can_use_bipod( const map &m, const tripoint &pos )
- dispersion_sources calculate_dispersion( const map &m, const Character &who, const item &gun,
- int at_recoil, bool burst )
- {
-- bool bipod = can_use_bipod( m, who.pos() );
-+ bool bipod = can_use_heavy_weapon( who, m, who.pos() );
-
- int gun_recoil = gun.gun_recoil( bipod );
- int eff_recoil = at_recoil + ( burst ? ranged::burst_penalty( who, gun, gun_recoil ) : 0 );
-@@ -939,15 +940,18 @@ int ranged::fire_gun( Character &who, const tripoint &target, int max_shots, ite
- // Reset aim for bows and other reload-and-shoot weapons.
- who.recoil = MAX_RECOIL;
- } else {
-+ // Hack alert: nearly every other use of can_use_heavy_weapon uses const character, except this one and gunmode_checks_weapon.
-+ const Character &shooter = who;
- // Now actually apply recoil for the future shots
- // But only for one shot, because bursts kinda suck
-- int gun_recoil = gun.gun_recoil( can_use_bipod( here, who.pos() ) );
-+ int gun_recoil = gun.gun_recoil( can_use_heavy_weapon( shooter, here, shooter.pos() ) );
-
-- // If user is currently able to fire a mounted gun freely, penalize recoil based on size class.
-- if( gun.has_flag( flag_MOUNTED_GUN ) && !can_use_bipod( here, who.pos() ) ) {
-- if( who.get_size() == MS_HUGE ) {
-+ // If user is currently able to fire a mounted gun freely, penalize dispersion
-+ // HEAVY_WEAPON_SUPPORT flag has highest penalty, Large mutants lower penalty, no penalty for Huge mutants.
-+ if( gun.has_flag( flag_MOUNTED_GUN ) && !can_use_heavy_weapon( shooter, here, shooter.pos() ) ) {
-+ if( who.get_size() == MS_LARGE ) {
- gun_recoil = gun_recoil * 2;
-- } else {
-+ } else if( who.worn_with_flag( flag_HEAVY_WEAPON_SUPPORT ) && ( who.get_size() <= MS_MEDIUM ) ) {
- gun_recoil = gun_recoil * 3;
- }
- }
-@@ -1943,12 +1947,13 @@ dispersion_sources ranged::get_weapon_dispersion( const Character &who, const it
- dispersion.add_multiplier( 4 );
- }
-
-- // If user is currently able to fire a mounted gun freely, penalize dispersion based on size class.
-- if( obj.has_flag( flag_MOUNTED_GUN ) && !can_use_bipod( get_map(), who.pos() ) ) {
-- if( who.get_size() == MS_HUGE ) {
-- dispersion.add_multiplier( 2 );
-- } else {
-- dispersion.add_multiplier( 3 );
-+ // If user is currently able to fire a mounted gun freely, penalize dispersion
-+ // HEAVY_WEAPON_SUPPORT flag has highest penalty, Large mutants lower penalty, no penalty for Huge mutants.
-+ if( obj.has_flag( flag_MOUNTED_GUN ) && !can_use_heavy_weapon( who, get_map(), who.pos() ) ) {
-+ if( who.get_size() == MS_LARGE ) {
-+ dispersion.add_range( 500 );
-+ } else if( who.worn_with_flag( flag_HEAVY_WEAPON_SUPPORT ) && ( who.get_size() <= MS_MEDIUM ) ) {
-+ dispersion.add_range( 1000 );
- }
- }
-
-@@ -3772,16 +3777,9 @@ bool ranged::gunmode_checks_weapon( avatar &you, const map &m, std::vector<std::
- }
-
- if( gmode->has_flag( flag_MOUNTED_GUN ) ) {
--
-- bool mech_mount = false;
-- if( you.is_mounted() && you.mounted_creature->has_flag( MF_RIDEABLE_MECH ) ) {
-- mech_mount = true;
-- }
--
-- const bool v_mountable = static_cast<bool>( m.veh_at( you.pos() ).part_with_feature( "MOUNTABLE",
-- true ) );
-- bool t_mountable = m.has_flag_ter_or_furn( flag_MOUNTABLE, you.pos() );
-- if( !mech_mount && !t_mountable && !v_mountable && !( you.get_size() > MS_MEDIUM ) ) {
-+ const Character &shooter = you;
-+ if( !can_use_heavy_weapon( shooter, m, shooter.pos() ) && !( you.get_size() > MS_MEDIUM ) &&
-+ !you.worn_with_flag( flag_HEAVY_WEAPON_SUPPORT ) ) {
- messages.push_back( string_format(
- _( "You must stand near acceptable terrain or furniture to fire the %s. A table, a mound of dirt, a broken window, etc." ),
- gmode->tname() ) );
---
-2.42.0
-
diff --git a/backport-03_feat-balance-power-armor-updates-3625.patch b/backport-03_feat-balance-power-armor-updates-3625.patch
deleted file mode 100644
index 82e82c5..0000000
--- a/backport-03_feat-balance-power-armor-updates-3625.patch
+++ /dev/null
@@ -1,386 +0,0 @@
-From c2dd98cb3371d174862d729097dea9bbea24c70e Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Fri, 10 Nov 2023 23:34:00 -0600
-Subject: [PATCH] feat(balance): power armor updates (#3625)
-
-Power armor updates
----
- data/json/items/armor/power_armor.json | 50 ++++++++--------
- data/json/monsterdrops/zombie.json | 80 +++++++++++++++++++++++---
- data/json/uncraft/generic.json | 78 +++++++++++++++++++++++++
- 3 files changed, 174 insertions(+), 34 deletions(-)
-
-diff --git a/data/json/items/armor/power_armor.json b/data/json/items/armor/power_armor.json
-index 447ff9425c8..f428456bc2f 100644
---- a/data/json/items/armor/power_armor.json
-+++ b/data/json/items/armor/power_armor.json
-@@ -5,7 +5,7 @@
- "name": { "str": "salvaged power armor" },
- "//": "These are much cheaper than powered suits, because they're extremely heavy and impractical. The good stuff is gone!",
- "description": "This used to be a powered exoskeleton with a set of heavy armor plates, made wearable by the assist of the servos. Now it's just the armor plating and a stripped down chassis: as one might expect, it's a lot harder to wear.",
-- "weight": "12214 g",
-+ "weight": "12 kg",
- "volume": "25 L",
- "price": 70000,
- "price_postapoc": 15000,
-@@ -17,8 +17,8 @@
- "color": "light_gray",
- "covers": [ "torso", "arms", "hands", "legs", "feet" ],
- "coverage": 95,
-- "encumbrance": 40,
-- "storage": "2500 ml",
-+ "encumbrance": 35,
-+ "storage": "4 L",
- "warmth": 50,
- "material_thickness": 8,
- "environmental_protection": 6,
-@@ -29,8 +29,8 @@
- "type": "ARMOR",
- "name": { "str": "salvaged power armor helmet" },
- "description": "This used to be a military-grade full-head helmet with advanced optics and environmental filters. It looks like it was decommissioned or otherwise stripped for parts; now it's a very expensive hat. It's still quite durable, but quite hard to see out of.",
-- "weight": "2416 g",
-- "volume": "5 L",
-+ "weight": "1200 g",
-+ "volume": "2500 ml",
- "price": 30000,
- "price_postapoc": 5000,
- "to_hit": 1,
-@@ -41,7 +41,7 @@
- "color": "light_gray",
- "covers": [ "head", "eyes", "mouth" ],
- "coverage": 95,
-- "encumbrance": 40,
-+ "encumbrance": 35,
- "warmth": 50,
- "material_thickness": 8,
- "environmental_protection": 6,
-@@ -66,8 +66,8 @@
- "covers": [ "torso", "arms", "hands", "legs", "feet" ],
- "coverage": 100,
- "encumbrance": 50,
-- "storage": "2500 ml",
-- "warmth": 90,
-+ "storage": "4 L",
-+ "warmth": 60,
- "material_thickness": 11,
- "environmental_protection": 16,
- "use_action": {
-@@ -151,7 +151,7 @@
- "name": { "str": "heavy power armor (active)", "str_pl": "suits of heavy power armor (active)" },
- "description": "Colloquially known as a 'tank suit' in the media, these bulky exoskeletons, covered in thick segmented armor plates, were tested in military service a few years back and determined to be too heavy and expensive for regular use. Now that it's in your hands, though, you have a massive suit of power armor capable of resisting almost any small arms fire and most other forms of attack. On the other hand, it doubles your effective weight, and it's almost impossible not to bump into things. There is an integrated chemical resistant bodyglove that precludes wearing other clothing. It is currently turned on, activate it to turn it off.",
- "extend": { "flags": [ "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-- "power_draw": 1500000,
-+ "power_draw": 2250000,
- "revert_to": "power_armor_heavy",
- "use_action": {
- "type": "set_transform",
-@@ -170,8 +170,8 @@
- "type": "TOOL_ARMOR",
- "name": { "str": "light power armor", "str_pl": "suits of light power armor" },
- "description": "The final iteration of military power armor before the fall of civilization, this type - a powered exoskeleton with high-tech segmented plating - was designed for actual widespread combat use and was seen on the front lines during the last days of the cataclysm. Like the heavier suits, it is resistant to most modern weaponry, but it is light and maneuverable, and can fit into normal vehicles and doorways without fuss, a huge advantage over predecessors. Unfortunately, the world ended before it could roll out in significant numbers. There is an integrated chemical resistant bodyglove that precludes wearing other clothing.",
-- "weight": "12670 g",
-- "volume": "15 L",
-+ "weight": "25 kg",
-+ "volume": "30 L",
- "price": 11500000,
- "price_postapoc": 40000,
- "to_hit": 1,
-@@ -208,7 +208,7 @@
- "name": { "str": "light power armor (active)", "str_pl": "suits of light power armor (active)" },
- "description": "The final iteration of military power armor before the fall of civilization, this type - a powered exoskeleton with high-tech segmented plating - was designed for actual widespread combat use and was seen on the front lines during the last days of the cataclysm. Like the heavier suits, it is resistant to most modern weaponry, but it is light and maneuverable, and can fit into normal vehicles and doorways without fuss, a huge advantage over predecessors. Unfortunately, the world ended before it could roll out in significant numbers. There is an integrated chemical resistant bodyglove that precludes wearing other clothing. It is currently turned on, activate it to turn it off.",
- "extend": { "flags": [ "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-- "power_draw": 1500000,
-+ "power_draw": 750000,
- "revert_to": "power_armor_light",
- "use_action": {
- "type": "set_transform",
-@@ -220,15 +220,15 @@
- },
- "covers": [ "torso", "arms", "hands", "legs", "feet" ],
- "encumbrance": 0,
-- "weight_capacity_bonus": "12670 g"
-+ "weight_capacity_bonus": "25 kg"
- },
- {
- "id": "power_armor_helmet_basic",
- "type": "TOOL_ARMOR",
- "name": { "str": "power armor helmet" },
- "description": "A fully enclosed combat helmet for hazardous environments, this was designed to fit with a powered exoskeleton, using cameras to expand visual range. In practice, the cameras were unreliable and easily fouled. The environmental controls function best with direct-skin contact.",
-- "weight": "3628 g",
-- "volume": "5 L",
-+ "weight": "5500 g",
-+ "volume": "10 L",
- "price": 2500000,
- "price_postapoc": 7500,
- "to_hit": 1,
-@@ -240,7 +240,7 @@
- "covers": [ "head", "eyes", "mouth" ],
- "coverage": 100,
- "encumbrance": 50,
-- "warmth": 90,
-+ "warmth": 60,
- "material_thickness": 11,
- "environmental_protection": 16,
- "qualities": [ [ "GLARE", 2 ] ],
-@@ -275,15 +275,15 @@
- },
- "covers": [ "head", "eyes", "mouth" ],
- "encumbrance": 10,
-- "weight_capacity_bonus": "3628 g"
-+ "weight_capacity_bonus": "5500 g"
- },
- {
- "id": "power_armor_helmet_heavy",
- "type": "TOOL_ARMOR",
- "name": { "str": "heavy power armor helmet" },
- "description": "An extremely heavy-duty fully enclosed combat helmet for hazardous environments, this was designed to fit with a powered exoskeleton. In the field, soldiers reported that the protection was not worth the awkward size and limited visuals. The environmental controls function best with direct-skin contact.",
-- "weight": "5442 g",
-- "volume": "7 L",
-+ "weight": "7500 g",
-+ "volume": "13 L",
- "price": 3750000,
- "price_postapoc": 10000,
- "to_hit": 1,
-@@ -318,7 +318,7 @@
- "name": { "str": "heavy power armor helmet (active)", "str_pl": "heavy power armor helmets (active)" },
- "description": "An extremely heavy-duty fully enclosed combat helmet for hazardous environments, this was designed to fit with a powered exoskeleton. In the field, soldiers reported that the protection was not worth the awkward size and limited visuals. The environmental controls function best with direct-skin contact.",
- "extend": { "flags": [ "WATCH", "THERMOMETER", "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-- "power_draw": 500000,
-+ "power_draw": 250000,
- "qualities": [ [ "GLARE", 2 ] ],
- "revert_to": "power_armor_helmet_heavy",
- "use_action": {
-@@ -330,15 +330,15 @@
- },
- "covers": [ "head", "eyes", "mouth" ],
- "encumbrance": 20,
-- "weight_capacity_bonus": "5442 g"
-+ "weight_capacity_bonus": "7500 g"
- },
- {
- "id": "power_armor_helmet_light",
- "type": "TOOL_ARMOR",
- "name": { "str": "light power armor helmet" },
- "description": "This full-enclosure helmet was designed based on commercial diving equipment, in response to complaints that earlier designs were impossible to use in combat. While still a little more restrictive than regular combat headgear - and frustrating should your nose itch - this one received far better reviews from soldiers. Sadly, civilization ended before they could roll out in significant numbers. The environmental controls function best with direct-skin contact.",
-- "weight": "1814 g",
-- "volume": "4 L",
-+ "weight": "2500 g",
-+ "volume": "3 L",
- "price": 3750000,
- "price_postapoc": 10000,
- "to_hit": 1,
-@@ -373,7 +373,7 @@
- "name": { "str": "light power armor helmet (active)", "str_pl": "light power armor helmets (active)" },
- "description": "This full-enclosure helmet was designed based on commercial diving equipment, in response to complaints that earlier designs were impossible to use in combat. While still a little more restrictive than regular combat headgear - and frustrating should your nose itch - this one received far better reviews from soldiers. Sadly, civilization ended before they could roll out in significant numbers. The environmental controls function best with direct-skin contact.",
- "extend": { "flags": [ "WATCH", "THERMOMETER", "CLIMATE_CONTROL", "TRADER_AVOID" ] },
-- "power_draw": 500000,
-+ "power_draw": 750000,
- "qualities": [ [ "GLARE", 1 ] ],
- "revert_to": "power_armor_helmet_light",
- "use_action": {
-@@ -385,7 +385,7 @@
- },
- "covers": [ "head", "eyes", "mouth" ],
- "encumbrance": 0,
-- "weight_capacity_bonus": "1814 g"
-+ "weight_capacity_bonus": "2500 g"
- },
- {
- "id": "power_armor_frame",
-diff --git a/data/json/monsterdrops/zombie.json b/data/json/monsterdrops/zombie.json
-index 545c78374cb..bc2a159dbe0 100644
---- a/data/json/monsterdrops/zombie.json
-+++ b/data/json/monsterdrops/zombie.json
-@@ -4,15 +4,77 @@
- "subtype": "collection",
- "id": "mon_zombie_armored_death_drops",
- "entries": [
-- { "item": "power_supply", "count": [ 0, 7 ], "prob": 25 },
-- { "item": "element", "count": [ 0, 3 ], "prob": 40 },
-- { "item": "cable", "charges": [ 0, 12 ], "prob": 60 },
-- { "item": "transponder", "count": [ 0, 1 ], "prob": 25 },
-- { "item": "circuit", "count": [ 0, 8 ], "prob": 40 },
-- { "item": "small_lcd_screen", "count": [ 0, 2 ], "prob": 25 },
-- { "item": "RAM", "count": [ 0, 1 ], "prob": 25 },
-- { "item": "depowered_helmet", "count": [ 0, 1 ], "prob": 20 },
-- { "item": "depowered_armor", "count": [ 0, 1 ], "prob": 20 }
-+ {
-+ "distribution": [
-+ {
-+ "collection": [
-+ { "item": "power_armor_basic", "damage": [ 1, 4 ] },
-+ { "item": "power_armor_helmet_basic", "damage": [ 1, 4 ], "prob": 75 }
-+ ],
-+ "prob": 10
-+ },
-+ {
-+ "collection": [
-+ { "item": "power_armor_light", "damage": [ 1, 4 ] },
-+ { "item": "power_armor_helmet_light", "damage": [ 1, 4 ], "prob": 75 }
-+ ],
-+ "prob": 10
-+ },
-+ {
-+ "collection": [
-+ { "item": "power_armor_heavy", "damage": [ 1, 4 ] },
-+ { "item": "power_armor_helmet_heavy", "damage": [ 1, 4 ], "prob": 75 }
-+ ],
-+ "prob": 5
-+ },
-+ {
-+ "collection": [
-+ {
-+ "distribution": [
-+ {
-+ "collection": [
-+ { "item": "steel_armor", "count": [ 1, 10 ], "prob": 50 },
-+ { "item": "power_supply", "count": [ 1, 7 ], "prob": 50 },
-+ { "item": "element", "count": [ 1, 3 ], "prob": 50 },
-+ { "item": "circuit", "count": [ 1, 8 ], "prob": 50 },
-+ { "item": "small_lcd_screen", "count": [ 1, 2 ], "prob": 50 }
-+ ],
-+ "prob": 10
-+ },
-+ {
-+ "collection": [
-+ { "item": "alloy_sheet", "count": [ 1, 6 ], "prob": 50 },
-+ { "item": "power_supply", "count": [ 1, 4 ], "prob": 50 },
-+ { "item": "element", "count": [ 1, 2 ], "prob": 50 },
-+ { "item": "circuit", "count": [ 1, 7 ], "prob": 50 },
-+ { "item": "e_scrap", "count": [ 1, 4 ], "prob": 50 }
-+ ],
-+ "prob": 10
-+ },
-+ {
-+ "collection": [
-+ { "item": "hard_steel_armor", "count": [ 1, 14 ], "prob": 50 },
-+ { "item": "steel_armor", "count": [ 1, 7 ], "prob": 50 },
-+ { "item": "power_supply", "count": [ 1, 11 ], "prob": 50 },
-+ { "item": "element", "count": [ 1, 3 ], "prob": 50 },
-+ { "item": "circuit", "count": [ 1, 8 ], "prob": 50 },
-+ { "item": "small_lcd_screen", "count": [ 1, 2 ], "prob": 50 }
-+ ],
-+ "prob": 5
-+ }
-+ ]
-+ },
-+ { "item": "cable", "count": [ 1, 12 ], "prob": 50 },
-+ { "item": "transponder", "prob": 50 },
-+ { "item": "RAM", "prob": 50 },
-+ { "item": "depowered_armor", "damage": [ 1, 4 ] },
-+ { "item": "depowered_helmet", "damage": [ 1, 4 ], "prob": 75 }
-+ ],
-+ "prob": 75
-+ }
-+ ]
-+ },
-+ { "group": "pwr_armor_acc", "damage": [ 1, 4 ], "prob": 90 }
- ]
- },
- {
-diff --git a/data/json/uncraft/generic.json b/data/json/uncraft/generic.json
-index 7e696a24e73..969de577ac8 100644
---- a/data/json/uncraft/generic.json
-+++ b/data/json/uncraft/generic.json
-@@ -2453,6 +2453,7 @@
- "tools": [ [ [ "boltcutters", -1 ], [ "toolset", -1 ] ] ],
- "components": [
- [ [ "depowered_armor", 1 ] ],
-+ [ [ "steel_armor", 8 ] ],
- [ [ "power_supply", 6 ] ],
- [ [ "element", 2 ] ],
- [ [ "cable", 12 ] ],
-@@ -2471,6 +2472,7 @@
- "tools": [ [ [ "boltcutters", -1 ], [ "toolset", -1 ] ] ],
- "components": [
- [ [ "depowered_helmet", 1 ] ],
-+ [ [ "steel_armor", 2 ] ],
- [ [ "power_supply", 1 ] ],
- [ [ "element", 1 ] ],
- [ [ "small_lcd_screen", 2 ] ],
-@@ -2478,6 +2480,82 @@
- [ [ "RAM", 1 ] ]
- ]
- },
-+ {
-+ "result": "power_armor_light",
-+ "type": "uncraft",
-+ "skill_used": "fabrication",
-+ "difficulty": 6,
-+ "skills_required": [ "electronics", 4 ],
-+ "time": "1 h",
-+ "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "SCREW", "level": 1 }, { "id": "WRENCH", "level": 1 } ],
-+ "tools": [ [ [ "boltcutters", -1 ], [ "toolset", -1 ] ] ],
-+ "components": [
-+ [ [ "depowered_armor", 1 ] ],
-+ [ [ "alloy_sheet", 5 ] ],
-+ [ [ "power_supply", 4 ] ],
-+ [ [ "element", 2 ] ],
-+ [ [ "cable", 12 ] ],
-+ [ [ "circuit", 6 ] ],
-+ [ [ "transponder", 1 ] ]
-+ ]
-+ },
-+ {
-+ "result": "power_armor_helmet_light",
-+ "type": "uncraft",
-+ "skill_used": "fabrication",
-+ "difficulty": 7,
-+ "skills_required": [ "electronics", 3 ],
-+ "time": "1 h",
-+ "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "SCREW", "level": 1 }, { "id": "WRENCH", "level": 1 } ],
-+ "tools": [ [ [ "boltcutters", -1 ], [ "toolset", -1 ] ] ],
-+ "components": [
-+ [ [ "depowered_helmet", 1 ] ],
-+ [ [ "alloy_sheet", 1 ] ],
-+ [ [ "e_scrap", 4 ] ],
-+ [ [ "circuit", 1 ] ],
-+ [ [ "RAM", 1 ] ]
-+ ]
-+ },
-+ {
-+ "result": "power_armor_heavy",
-+ "type": "uncraft",
-+ "skill_used": "fabrication",
-+ "difficulty": 8,
-+ "skills_required": [ "electronics", 6 ],
-+ "time": "1 h 40 m",
-+ "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "SCREW", "level": 1 }, { "id": "WRENCH", "level": 1 } ],
-+ "tools": [ [ [ "boltcutters", -1 ], [ "toolset", -1 ] ] ],
-+ "components": [
-+ [ [ "depowered_armor", 1 ] ],
-+ [ [ "hard_steel_armor", 12 ] ],
-+ [ [ "steel_armor", 6 ] ],
-+ [ [ "power_supply", 9 ] ],
-+ [ [ "element", 2 ] ],
-+ [ [ "cable", 12 ] ],
-+ [ [ "circuit", 6 ] ],
-+ [ [ "transponder", 1 ] ]
-+ ]
-+ },
-+ {
-+ "result": "power_armor_helmet_heavy",
-+ "type": "uncraft",
-+ "skill_used": "fabrication",
-+ "difficulty": 9,
-+ "skills_required": [ "electronics", 5 ],
-+ "time": "1 h 40 m",
-+ "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "SCREW", "level": 1 }, { "id": "WRENCH", "level": 1 } ],
-+ "tools": [ [ [ "boltcutters", -1 ], [ "toolset", -1 ] ] ],
-+ "components": [
-+ [ [ "depowered_helmet", 1 ] ],
-+ [ [ "hard_steel_armor", 2 ] ],
-+ [ [ "steel_armor", 1 ] ],
-+ [ [ "power_supply", 2 ] ],
-+ [ [ "element", 1 ] ],
-+ [ [ "small_lcd_screen", 2 ] ],
-+ [ [ "circuit", 2 ] ],
-+ [ [ "RAM", 1 ] ]
-+ ]
-+ },
- {
- "result": "processor",
- "type": "uncraft",
---
-2.42.0
-
diff --git a/backport-04-2_Add-street-lights-to-remaining-shops-port-change-to-.patch b/backport-04-2_Add-street-lights-to-remaining-shops-port-change-to-.patch
deleted file mode 100644
index a004c37..0000000
--- a/backport-04-2_Add-street-lights-to-remaining-shops-port-change-to-.patch
+++ /dev/null
@@ -1,1718 +0,0 @@
-From 1c153718ab5ebddf00e83394a51c48692a338b4b Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Thu, 9 Nov 2023 04:58:40 -0600
-Subject: [PATCH] Add street lights to remaining shops, port change to make
- them no longer opaque (#3594)
-
-* Add street lights to remaining shops
-
-* Updoots
-
-* Also port streetlight thing
-
-Co-Authored-By: Fris0uman <41293484+Fris0uman@users.noreply.github.com>
-
----------
-
-Co-authored-by: Fris0uman <41293484+Fris0uman@users.noreply.github.com>
----
- .../furniture-appliances.json | 2 +-
- .../furniture-terrains.json | 4 ++--
- data/json/mapgen/diner.json | 2 +-
- data/json/mapgen/gunsmith.json | 2 +-
- data/json/mapgen/recycle_center.json | 12 +++++++++---
- data/json/mapgen/restaurant.json | 16 ++++++++++++----
- data/json/mapgen/restaurant_fast.json | 8 ++++++--
- data/json/mapgen/s_bookstore.json | 18 ++++++++++++------
- data/json/mapgen/s_candy.json | 8 ++++++--
- data/json/mapgen/s_clothing.json | 19 ++++++++++++-------
- data/json/mapgen/s_coffee.json | 12 +++++++++---
- data/json/mapgen/s_electronics.json | 14 ++++++++++----
- data/json/mapgen/s_furniture.json | 4 +++-
- data/json/mapgen/s_games.json | 4 +++-
- data/json/mapgen/s_gas.json | 14 +++++++++-----
- data/json/mapgen/s_grocery.json | 17 ++++++++++++++---
- data/json/mapgen/s_gun.json | 16 ++++++++++++----
- data/json/mapgen/s_hardware.json | 16 ++++++++++++----
- data/json/mapgen/s_icecream.json | 4 +++-
- data/json/mapgen/s_liquor.json | 4 +++-
- data/json/mapgen/school_1.json | 4 +++-
- data/json/mapgen/smallscrapyard.json | 4 +++-
- data/json/mapgen/smoke_lounge.json | 8 ++++++--
- data/json/mapgen/sports_store.json | 4 +++-
- data/json/mapgen/station_radio.json | 8 ++++++--
- data/json/mapgen/storage_units_large.json | 4 +++-
- data/json/mapgen/storage_units_medium.json | 4 +++-
- data/json/mapgen/storage_units_small.json | 4 +++-
- data/json/mapgen/teashop.json | 8 ++++++--
- data/json/mapgen/thrift.json | 4 +++-
- data/json/mapgen/veterinarian.json | 4 +++-
- data/json/mapgen/vfw.json | 4 +++-
- data/json/mapgen/warehouse.json | 6 ++++--
- .../clothes_store_palette.json | 7 ++++++-
- data/mods/No_Hope/Mapgen/school_1.json | 4 +++-
- 35 files changed, 198 insertions(+), 75 deletions(-)
-
-diff --git a/data/json/furniture_and_terrain/furniture-appliances.json b/data/json/furniture_and_terrain/furniture-appliances.json
-index a0dd071fb08..42707a73da0 100644
---- a/data/json/furniture_and_terrain/furniture-appliances.json
-+++ b/data/json/furniture_and_terrain/furniture-appliances.json
-@@ -260,7 +260,7 @@
- "move_cost_mod": -1,
- "coverage": 40,
- "required_str": -1,
-- "flags": [ "BASHABLE" ],
-+ "flags": [ "BASHABLE", "TRANSPARENT" ],
- "examine_action": "transform",
- "transforms_into": "f_street_light_rewired_on",
- "prompt": "Switch on the street light.",
-diff --git a/data/json/furniture_and_terrain/furniture-terrains.json b/data/json/furniture_and_terrain/furniture-terrains.json
-index 93b8b04c453..c3baf2822a4 100644
---- a/data/json/furniture_and_terrain/furniture-terrains.json
-+++ b/data/json/furniture_and_terrain/furniture-terrains.json
-@@ -722,7 +722,7 @@
- "move_cost_mod": -1,
- "coverage": 40,
- "required_str": -1,
-- "flags": [ "BASHABLE" ],
-+ "flags": [ "BASHABLE", "TRANSPARENT" ],
- "deconstruct": {
- "items": [
- { "item": "pipe", "count": 8 },
-@@ -759,7 +759,7 @@
- "move_cost_mod": -1,
- "coverage": 40,
- "required_str": 32,
-- "flags": [ "BASHABLE" ],
-+ "flags": [ "BASHABLE", "TRANSPARENT" ],
- "bash": {
- "str_min": 30,
- "str_max": 100,
-diff --git a/data/json/mapgen/diner.json b/data/json/mapgen/diner.json
-index 038b6e5caba..9cc0551086a 100644
---- a/data/json/mapgen/diner.json
-+++ b/data/json/mapgen/diner.json
-@@ -38,7 +38,7 @@
- ",": "t_pavement_y",
- "-": "t_wall_w",
- ".": "t_grass",
-- "'": "t_sidewalk",
-+ "'": "t_pavement",
- "=": "t_sidewalk",
- "G": "t_linoleum_gray",
- "H": "t_linoleum_white",
-diff --git a/data/json/mapgen/gunsmith.json b/data/json/mapgen/gunsmith.json
-index e69cc01605e..c0b3988ac7b 100644
---- a/data/json/mapgen/gunsmith.json
-+++ b/data/json/mapgen/gunsmith.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "__________________sss'__",
-+ "__________________sss__'",
- "_,___,___,___,___,sss_%_",
- "_,___,___,___,___,sss_%_",
- "_,___,___,___,___,sss_%_",
-diff --git a/data/json/mapgen/recycle_center.json b/data/json/mapgen/recycle_center.json
-index 6baee912caf..63875d260b1 100644
---- a/data/json/mapgen/recycle_center.json
-+++ b/data/json/mapgen/recycle_center.json
-@@ -4,6 +4,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_table",
- "&": "f_trashcan",
- "P": "f_sign",
-@@ -29,7 +30,7 @@
- { "chance": 50, "repeat": [ 180, 350 ], "item": "recycle_plastic", "x": [ 7, 8 ], "y": [ 11, 19 ] }
- ],
- "rows": [
-- ".........s..............",
-+ ".........s.............'",
- ".........s..............",
- ".........s..............",
- ".........s..............",
-@@ -58,6 +59,7 @@
- "&": "t_floor",
- "+": "t_door_metal_c",
- ".": [ "t_grass", "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "D": "t_door_c",
- "_": "t_thconc_floor",
- "c": "t_floor",
-@@ -140,6 +142,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_table",
- "&": "f_trashcan",
- "C": "f_chair",
-@@ -169,7 +172,7 @@
- ],
- "place_vehicles": [ { "chance": 75, "fuel": 0, "rotation": 270, "status": -1, "vehicle": "forklift", "x": 16, "y": [ 7, 16 ] } ],
- "rows": [
-- ".....cccc...............",
-+ ".....cccc..............'",
- ".....cccc...............",
- ".....cccc...............",
- "..---S++S--|||ww||D|w|..",
-@@ -198,6 +201,7 @@
- "+": "t_chaingate_c",
- "-": "t_chainfence",
- ".": [ "t_grass", "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "D": "t_door_metal_c",
- "P": "t_concrete",
- "S": "t_chainfence",
-@@ -283,6 +287,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_trashcan",
- "P": "f_sign",
-@@ -309,7 +314,7 @@
- ],
- "place_loot": [ { "item": "television", "x": 4, "y": 14, "chance": 100 }, { "item": "stepladder", "x": 8, "y": 13, "chance": 100 } ],
- "rows": [
-- "__________ppppp_________",
-+ "__________ppppp________'",
- "__________ppppp_________",
- "______4___ppppp_____7___",
- "_4________ppppp_________",
-@@ -344,6 +349,7 @@
- "P": "t_concrete",
- "R": "t_recycler",
- "_": [ "t_grass", "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "p": "t_pavement",
- "s": "t_grass",
- "t": "t_thconc_floor",
-diff --git a/data/json/mapgen/restaurant.json b/data/json/mapgen/restaurant.json
-index 033ac5d8031..53f703b94af 100644
---- a/data/json/mapgen/restaurant.json
-+++ b/data/json/mapgen/restaurant.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "____,____,____,____,____",
-+ "____,____,____,____,___'",
- "____,____,____,____,____",
- "____,____,____,____,____",
- "____,____,____,____,____",
-@@ -48,6 +48,7 @@
- "S": "t_linoleum_white",
- "W": "t_window",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "d": "t_pavement",
- "g": "t_linoleum_gray",
- "w": "t_linoleum_white",
-@@ -57,6 +58,7 @@
- "|": "t_wall_r"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_trashcan",
- "B": "f_bench",
-@@ -170,7 +172,7 @@
- "object": {
- "fill_ter": "t_carpet_green",
- "rows": [
-- "ssssssssssssssssssssssss",
-+ "sssssssssssssssssssssss`",
- "ssssssssssssssssssssssss",
- "ssss|-------------|sssss",
- "____|&wlfF|.......|sssss",
-@@ -220,6 +222,7 @@
- "g": "t_wall_glass",
- "l": "t_linoleum_gray",
- "s": "t_sidewalk",
-+ "`": "t_sidewalk",
- "w": "t_linoleum_white",
- "{": "t_linoleum_white",
- "4": "t_gutter_downspout",
-@@ -228,6 +231,7 @@
- "|": "t_wall_y"
- },
- "furniture": {
-+ "`": "f_street_light",
- "#": "f_counter",
- "2": "f_counter",
- "&": "f_trashcan",
-@@ -342,7 +346,7 @@
- "object": {
- "fill_ter": "t_linoleum_white",
- "rows": [
-- "____,____,____,____,____",
-+ "____,____,____,____,___'",
- "____,____,____,____,____",
- "____,____,____,____,____",
- "____,____,____,____,____",
-@@ -385,6 +389,7 @@
- "c": "t_rdoor_b",
- "x": "t_linoleum_white",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "f": "t_linoleum_white",
- "t": "t_linoleum_white",
- "4": "t_gutter_downspout",
-@@ -394,6 +399,7 @@
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "G": "f_oven",
- "x": "f_rack",
-@@ -511,7 +517,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "____,____,____,____,____",
-+ "____,____,____,____,___'",
- "____,____,____,____,____",
- "____,____,____,____,____",
- "____,____,____,____,____",
-@@ -553,6 +559,7 @@
- "S": "t_linoleum_white",
- "W": "t_window",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "d": "t_pavement",
- "g": "t_linoleum_gray",
- "w": "t_linoleum_white",
-@@ -563,6 +570,7 @@
- "|": "t_wall_p"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_trashcan",
- "B": "f_bench",
-diff --git a/data/json/mapgen/restaurant_fast.json b/data/json/mapgen/restaurant_fast.json
-index 5dc4d3f73fd..21cd246c537 100644
---- a/data/json/mapgen/restaurant_fast.json
-+++ b/data/json/mapgen/restaurant_fast.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- ",_____ssssssssssss_____,",
-+ ",_____ssssssssssss_____'",
- ",__,__#### ss ####__,__,",
- ",_,,,_#ssssssssss#__,__,",
- ",__,__#HTHssssHTH#__,__,",
-@@ -45,6 +45,7 @@
- "%": "t_wall_glass",
- "+": "t_door_glass_c",
- ",": "t_pavement_y",
-+ "'": "t_pavement_y",
- "-": "t_wall_w",
- ".": "t_floor",
- "5": "t_wall_glass",
-@@ -66,6 +67,7 @@
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "H": "f_chair",
- "O": "f_woodstove",
- "S": "f_sink",
-@@ -168,7 +170,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "____,,,,,#ssssssssssssss",
-+ "____,,,,,#sssssssssssss'",
- "_________#ss|555++++555|",
- "_________#ss5.HH.HH..hh|",
- "_________#ss5.TT.TT..Th|",
-@@ -216,6 +218,7 @@
- "r": "t_linoleum_gray",
- "d": "t_sidewalk",
- "s": "t_sidewalk",
-+ "'": "t_sidewalk",
- "D": "t_door_locked",
- "t": "t_door_c",
- "w": "t_linoleum_white",
-@@ -224,6 +227,7 @@
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "H": "f_chair",
- "F": "f_arcade_machine",
- "S": "f_sink",
-diff --git a/data/json/mapgen/s_bookstore.json b/data/json/mapgen/s_bookstore.json
-index 625a11737e3..1553c7f116b 100644
---- a/data/json/mapgen/s_bookstore.json
-+++ b/data/json/mapgen/s_bookstore.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
- "*|----OOO-::--OO--OO--|*",
- "*|s.l#.Thf..#ccccccccc|*",
-@@ -45,9 +45,11 @@
- "|": "t_wall_w",
- "4": "t_gutter_downspout",
- "<": "t_ladder_up",
-- "~": "t_sidewalk"
-+ "~": "t_sidewalk",
-+ "'": "t_sidewalk"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "T": "f_table",
- "]": "f_rack",
-@@ -226,7 +228,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
- "**|========::-OO--OO-|**",
-@@ -264,9 +266,11 @@
- "O": "t_window",
- "q": "t_grass",
- "|": "t_wall_w",
-- "~": "t_sidewalk"
-+ "~": "t_sidewalk",
-+ "'": "t_sidewalk"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "T": "f_table",
- "[": "f_rack",
-@@ -433,7 +437,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "~~~qSq~~~~~~~~~~qqq~~~~~",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
-@@ -471,9 +475,11 @@
- "q": "t_dirt",
- "|": "t_wall_w",
- "4": "t_gutter_downspout",
-- "~": "t_sidewalk"
-+ "~": "t_sidewalk",
-+ "'": "t_sidewalk"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "S": "f_statue",
- "T": "f_table",
-diff --git a/data/json/mapgen/s_candy.json b/data/json/mapgen/s_candy.json
-index f3afd458e67..b624abe21ee 100644
---- a/data/json/mapgen/s_candy.json
-+++ b/data/json/mapgen/s_candy.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- ".............dssd.......",
-+ ".............dssd......'",
- "....fD..f.D..dssd....fD.",
- "........D.f..dssd..d....",
- "...uudud.....dssd.d7d...",
-@@ -36,6 +36,7 @@
- "+": "t_door_c",
- "-": "t_wall_glass",
- ".": [ [ "t_grass", 5 ], [ "t_grass_long", 5 ], "t_dirt" ],
-+ "'": "t_dirt",
- "7": "t_tree_apple_harvested",
- "D": "t_dirt",
- "R": "t_railing_v",
-@@ -55,6 +56,7 @@
- "|": "t_wall_y"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_trashcan",
- "B": "f_bench",
-@@ -168,7 +170,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "............ss..........",
-+ "............ss.........'",
- "............ss..........",
- "...d....d...ss.u.u.u.u..",
- "..d7d..d4d..ss|||||||||.",
-@@ -197,6 +199,7 @@
- "+": "t_door_glass_c",
- "-": "t_wall_glass",
- ".": [ [ "t_grass", 5 ], [ "t_grass_long", 5 ], "t_dirt" ],
-+ "'": "t_dirt",
- "4": "t_tree_pine",
- "7": "t_tree_birch_harvested",
- "D": "t_dirt",
-@@ -218,6 +221,7 @@
- "|": "t_brick_wall"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_trashcan",
- "C": "f_chair",
-diff --git a/data/json/mapgen/s_clothing.json b/data/json/mapgen/s_clothing.json
-index f4957f00293..0de27ff1eca 100644
---- a/data/json/mapgen/s_clothing.json
-+++ b/data/json/mapgen/s_clothing.json
-@@ -8,7 +8,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "...........--...........",
-+ "...........--..........'",
- "...........--...........",
- "..##:::::::**:::::::##..",
- "..# y &y&y(y #..",
-@@ -34,6 +34,7 @@
- "....................4..."
- ],
- "palettes": [ "standard_building_palette", "clothes_store_palette" ],
-+ "terrain": { "'": "t_region_groundcover_urban" },
- "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 0, 0 ], "y": [ 23, 23 ], "chance": 2, "repeat": [ 2, 3 ] } ],
- "vehicles": { ".": { "vehicle": "shopping_cart", "chance": 1, "status": 0 } }
- }
-@@ -99,7 +100,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "------------------------",
-+ "-----------------------'",
- "-----.ppp.-----.ppp.----",
- "------------------------",
- "...#:::::::***:::::::#..",
-@@ -186,7 +187,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "------------------------",
-+ "-----------------------'",
- "------------------------",
- "------------------------",
- "..p--####:::++:::#......",
-@@ -274,7 +275,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
- "~~~~11~~~~1111~~~11~~~~~",
- "***|===::----==::==|****",
-@@ -311,11 +312,13 @@
- "i": "t_door_locked_interior",
- "|": "t_wall_w",
- "~": "t_sidewalk",
-+ "'": "t_sidewalk",
- "1": "t_sidewalk",
- "4": "t_gutter_downspout"
- },
- "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_harvest" } },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_counter_gate_c",
- "@": "f_mannequin",
-@@ -409,7 +412,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "------------------------",
-+ "-----------------------'",
- "------------------------",
- "------------------------",
- ".#:::::**::::::**:::::#.",
-@@ -549,7 +552,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "~~~~~~~~~~~~~~~~~~~~~~~~",
- "*****rzr**~~~**rzr******",
- "*****rzr**~~~**rzr******",
-@@ -593,10 +596,12 @@
- "z": "t_shrub",
- "|": "t_brick_wall",
- "~": "t_sidewalk",
-+ "'": "t_sidewalk",
- "R": "t_grass",
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "@": "f_mannequin",
- "H": "f_chair",
-@@ -699,7 +704,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "------------------------",
-+ "-----------------------'",
- "----ppppp------ppppp----",
- "------------------------",
- "..#:::::::#**#:::::::#..",
-diff --git a/data/json/mapgen/s_coffee.json b/data/json/mapgen/s_coffee.json
-index 6b005ff91ba..647ea9e335f 100644
---- a/data/json/mapgen/s_coffee.json
-+++ b/data/json/mapgen/s_coffee.json
-@@ -13,7 +13,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "S___________SSTzzzzzzzTS",
-+ "S___________SSTzzzzzzzT'",
- "S_____,_____SSzMbMbMbMzS",
- "S_____,_____SSSSSSSS/MzS",
- "S_____,_____SSSSSSSS/MzS",
-@@ -59,6 +59,7 @@
- "M": "t_dirt",
- "O": "t_window",
- "S": "t_sidewalk",
-+ "'": "t_sidewalk",
- "U": "t_linoleum_white",
- "V": "t_wall_glass",
- "W": "t_fencegate_c",
-@@ -77,6 +78,7 @@
- "T": "t_tree_coffee"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "%": "f_trashcan",
- "/": "f_bluebell",
-@@ -187,7 +189,7 @@
- "//": "Default fill is floor but some tables are outside",
- "fill_ter": "t_floor",
- "rows": [
-- "_______,,,,,,,ss########",
-+ "_______,,,,,,,s'########",
- "______________ss#pppppp#",
- "______________ssspHTTHp#",
- "______________ssspppppp#",
-@@ -241,11 +243,13 @@
- "p": "t_concrete",
- "r": "t_linoleum_white",
- "s": "t_sidewalk",
-+ "'": "t_sidewalk",
- "x": "t_console_broken",
- "4": "t_gutter_downspout",
- "|": "t_wall_b"
- },
- "furniture": {
-+ "'": "f_street_light",
- "&": "f_trashcan",
- "H": "f_chair",
- "O": "f_oven",
-@@ -333,6 +337,7 @@
- "object": {
- "fill_ter": "t_floor",
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_chair",
- "&": "f_trashcan",
- "+": "f_null",
-@@ -378,7 +383,7 @@
- ],
- "place_toilets": [ { "x": 20, "y": 17 } ],
- "rows": [
-- "______________sss_______",
-+ "______________sss______'",
- "______u__u____sss_______",
- "____uSSuSSSu__sss_SSS___",
- "__||||||----||sss||w||__",
-@@ -414,6 +419,7 @@
- "T": "t_floor",
- "^": "t_floor",
- "_": "t_grass",
-+ "'": "t_dirt",
- "a": "t_floor",
- "b": "t_door_metal_pickable",
- "c": "t_floor",
-diff --git a/data/json/mapgen/s_electronics.json b/data/json/mapgen/s_electronics.json
-index 6bc6965bc10..ab3923027a1 100644
---- a/data/json/mapgen/s_electronics.json
-+++ b/data/json/mapgen/s_electronics.json
-@@ -8,7 +8,7 @@
- "object": {
- "fill_ter": "t_linoleum_gray",
- "rows": [
-- "zs______,______,______sz",
-+ "ss______,______,______s'",
- "zs______,______,______sz",
- "zs______,______,______sz",
- "zs______,______,______sz",
-@@ -50,6 +50,7 @@
- "_": "t_pavement",
- "d": "t_pavement",
- "s": "t_sidewalk",
-+ "'": "t_sidewalk",
- "x": "t_console_broken",
- "z": "t_shrub",
- "|": "t_wall_w",
-@@ -57,6 +58,7 @@
- "<": "t_ladder_up"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "C": "f_displaycase",
- "E": "f_desk",
-@@ -166,8 +168,8 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " xxxxxxx 9 ",
-- " 9 xxxpJpxxx 9 ",
-+ " xxxxxxx 9 '",
-+ " 9 xxxpJpxxx 9 ",
- " xxxxxxxxxxxxxxxx",
- " ------:::-+--:::--- x",
- " 9 |{{{{{y.......#..Y| x",
-@@ -193,6 +195,7 @@
- ],
- "terrain": {
- " ": [ "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- ".": "t_floor",
- "p": "t_grass",
- "J": "t_grass",
-@@ -232,6 +235,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "{": "f_rack",
- "S": "f_stool",
-@@ -331,7 +335,7 @@
- "object": {
- "fill_ter": "t_region_groundcover_urban",
- "rows": [
-- " ____________________ ",
-+ " ____________________ '",
- " *___*___*______*___* ",
- " ---:::---+----:::--- ",
- " |H....#...........R| ",
-@@ -357,6 +361,7 @@
- " ==================== "
- ],
- "terrain": {
-+ "'": "t_region_groundcover_urban",
- "*": "t_pavement_y",
- "+": "t_door_metal_pickable",
- "-": "t_concrete_wall",
-@@ -398,6 +403,7 @@
- ]
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "S": "f_stool",
- "{": "f_rack",
-diff --git a/data/json/mapgen/s_furniture.json b/data/json/mapgen/s_furniture.json
-index 85599da1ad5..8ba0dcd792b 100644
---- a/data/json/mapgen/s_furniture.json
-+++ b/data/json/mapgen/s_furniture.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " ",
-+ " '",
- " |ggggggggg++ggggggggg| ",
- " |.CphpH.c....O.O.&F&.| ",
- " |B.....kc...........y| ",
-@@ -34,6 +34,7 @@
- ],
- "terrain": {
- " ": "t_pavement",
-+ "'": "t_pavement",
- "+": "t_door_c",
- "-": "t_wall_w",
- "D": "t_door_locked",
-@@ -43,6 +44,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_table",
- "&": "f_fridge",
- "B": "f_rack",
-diff --git a/data/json/mapgen/s_games.json b/data/json/mapgen/s_games.json
-index 18b62a01b36..f19b9a4eef6 100644
---- a/data/json/mapgen/s_games.json
-+++ b/data/json/mapgen/s_games.json
-@@ -6,7 +6,7 @@
- "object": {
- "fill_ter": "t_carpet_purple",
- "rows": [
-- "......fg____g____g____gf",
-+ "......fg____g____g____g'",
- "......fg____g____g____gf",
- "......fg____g____g____gf",
- "......fg____g____g____gf",
-@@ -40,6 +40,7 @@
- "_": "t_pavement",
- ".": "t_region_groundcover_urban",
- "f": "t_sidewalk",
-+ "'": "t_sidewalk",
- "g": "t_pavement_y",
- "h": "t_carpet_purple",
- "i": "t_carpet_purple",
-@@ -56,6 +57,7 @@
- "9": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "h": "f_rack_wood",
- "i": "f_counter",
- "ƃ": "f_counter_gate_c",
-diff --git a/data/json/mapgen/s_gas.json b/data/json/mapgen/s_gas.json
-index 5f276fe967f..0ead27e3b96 100644
---- a/data/json/mapgen/s_gas.json
-+++ b/data/json/mapgen/s_gas.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_pavement",
- "rows": [
-- "........................",
-+ ".......................'",
- ".-----..................",
- ".|...|..........sss.....",
- ".|...|...........&s.....",
-@@ -38,11 +38,12 @@
- "+": "t_chaingate_l",
- "-": "t_chainfence_h",
- ".": "t_pavement",
-+ "'": "t_pavement",
- "5": "t_gas_pump",
- "s": "t_little_column",
- "|": "t_chainfence_v"
- },
-- "furniture": { "9": "f_aut_gas_console" },
-+ "furniture": { "'": "f_street_light", "9": "f_aut_gas_console" },
- "signs": { "P": { "signage": "Danger! Do not smoke! Risk of explosion!" } },
- "vendingmachines": { "1": { "item_group": "vending_drink" }, "2": { "item_group": "vending_food" } },
- "place_liquids": [ { "liquid": "gasoline", "x": 3, "y": 3, "repeat": [ 200, 1075 ] } ]
-@@ -56,7 +57,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "____:]:____:____:]:____]",
-+ "____:]:____:____:]:____'",
- "____]]]____:____]]]____]",
- "____!#!____:____!#!____]",
- "____]]]____:____]]]____]",
-@@ -82,7 +83,8 @@
- " 4 ]]]]]]]]]]]]]]]]"
- ],
- "palettes": [ "road" ],
-- "terrain": { "P": "t_sidewalk", "4": "t_gutter_downspout" },
-+ "terrain": { "'": "t_sidewalk", "P": "t_sidewalk", "4": "t_gutter_downspout" },
-+ "furniture": { "'": "f_street_light" },
- "signs": { "P": { "signage": "Wide selection of storage batteries! Discounts!" } },
- "items": { "l": { "item": "cleaning", "chance": 70 }, "&": { "item": "trash_cart", "chance": 50 } },
- "place_loot": [
-@@ -161,7 +163,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "________________________",
-+ "_______________________'",
- "________________________",
- "________________________",
- "________________________",
-@@ -202,10 +204,12 @@
- "O": "t_dirt",
- "[": "t_fence_v",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "~": "t_fence_h",
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "6": "f_table",
- "9": "f_rack",
- ":": "f_dresser",
-diff --git a/data/json/mapgen/s_grocery.json b/data/json/mapgen/s_grocery.json
-index 8fc7ac2924b..458e6612b1a 100644
---- a/data/json/mapgen/s_grocery.json
-+++ b/data/json/mapgen/s_grocery.json
-@@ -6,7 +6,7 @@
- "weight": 500,
- "object": {
- "rows": [
-- "ssssssssssssssssssssssss",
-+ "sssssssssssssssssssssss'",
- "ssWWWWWWWWssssssssssssss",
- "sswsssssssssssssssssssss",
- "sswsssssssssssssssssssss",
-@@ -57,12 +57,14 @@
- "l": "t_linoleum_gray",
- "r": "t_linoleum_white",
- "s": "t_sidewalk",
-+ "'": "t_sidewalk",
- "t": "t_linoleum_white",
- "w": "t_chainfence_v",
- "4": "t_gutter_downspout",
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "7": "f_bookcase",
- "C": "f_crate_c",
-@@ -187,7 +189,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " ",
-+ " '",
- " ",
- " ---:::---++---:::--- ",
- " |..................| ",
-@@ -214,6 +216,7 @@
- ],
- "terrain": {
- " ": [ "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "+": "t_door_c",
- "-": "t_wall_w",
- ".": "t_floor",
-@@ -221,7 +224,15 @@
- "4": "t_gutter_downspout",
- "|": "t_wall_w"
- },
-- "furniture": { "#": "f_counter", "&": "f_glass_fridge", "{": "f_rack", "b": "f_stool", "S": "f_sink", "L": "f_locker" },
-+ "furniture": {
-+ "'": "f_street_light",
-+ "#": "f_counter",
-+ "&": "f_glass_fridge",
-+ "{": "f_rack",
-+ "b": "f_stool",
-+ "S": "f_sink",
-+ "L": "f_locker"
-+ },
- "toilets": { "T": { } },
- "place_items": [
- { "item": "fridgesnacks", "x": 3, "y": [ 10, 15 ], "chance": 80, "repeat": [ 1, 12 ] },
-diff --git a/data/json/mapgen/s_gun.json b/data/json/mapgen/s_gun.json
-index b25e265ffb2..b1efabd10ec 100644
---- a/data/json/mapgen/s_gun.json
-+++ b/data/json/mapgen/s_gun.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " ____________________ ",
-+ " ____________________ '",
- " *___*___*______*___* ",
- " *___*___*______*___* ",
- " *___*___*______*___* ",
-@@ -38,6 +38,7 @@
- ],
- "terrain": {
- " ": [ "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "*": "t_pavement_y",
- "+": "t_door_metal_pickable",
- "-": "t_wall_w",
-@@ -57,6 +58,7 @@
- },
- "toilets": { "&": { } },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "H": "f_counter",
- "S": "f_stool",
-@@ -202,7 +204,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "_ssssssssssssssssssssss_",
-+ "_ssssssssssssssssssssss'",
- "_s@@@@@@@_ssss_@@@@@@@s_",
- "_s||555||_ssss_||555||s_",
- "_s|#####5_ssss_5#####|s_",
-@@ -239,6 +241,7 @@
- "D": "t_door_c",
- "L": "t_door_metal_locked",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "s": "t_sidewalk",
- "|": "t_wall_w",
- "?": "t_console_broken",
-@@ -246,6 +249,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "a": "f_stool",
- "E": "f_desk",
-@@ -346,7 +350,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "_ssssssssssssssssssssss_",
-+ "_ssssssssssssssssssssss'",
- "_s@@xx@@@_ssss_@@@@@@@s_",
- "_s||5l5||_ssss_||555||s_",
- "_s|#lll#5_ssss_5#####|s_",
-@@ -383,6 +387,7 @@
- "D": "t_door_o",
- "L": "t_door_metal_locked",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "p": "t_door_metal_o",
- "s": "t_sidewalk",
- "|": "t_wall_w",
-@@ -391,6 +396,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "E": "f_desk",
- "S": "f_sink",
-@@ -449,7 +455,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "....d...d....dss..dd.d..",
-+ "....d...d....dss..dd.d.'",
- ".......d......ss........",
- "d.............ssd.d.....",
- "..d....d..d.dssss......d",
-@@ -479,6 +485,7 @@
- "+": "t_door_metal_pickable",
- "-": "t_brick_wall",
- ".": "t_grass",
-+ "'": "t_dirt",
- "S": "t_grass",
- "T": "t_dirt",
- "W": "t_wall_w",
-@@ -498,6 +505,7 @@
- "toilets": { ";": { } },
- "place_item": [ { "item": "corpse", "repeat": 1, "x": 19, "y": 12 } ],
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_sandbag_wall",
- "&": "f_trashcan",
- "C": "f_chair",
-diff --git a/data/json/mapgen/s_hardware.json b/data/json/mapgen/s_hardware.json
-index b0c7b87b010..6ad00420a5b 100644
---- a/data/json/mapgen/s_hardware.json
-+++ b/data/json/mapgen/s_hardware.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "________________________",
-+ "_______________________'",
- "________________________",
- "~~~~~~~~~~~_____________",
- "~~~~~~~~~~~_____________",
-@@ -41,12 +41,14 @@
- ";": "t_door_locked",
- "O": "t_window",
- "_": "t_pavement",
-+ "'": "t_pavement",
- "U": "t_pavement",
- "|": "t_wall_w",
- "~": "t_sidewalk",
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "@": "f_locker",
- "[": "f_bookcase",
-@@ -132,7 +134,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "ppppp~~~~~~~~~~~~~~~~~~~",
-+ "ppppp~~~~~~~~~~~~~~~~~~`",
- "ppppp###---##++##---###~",
- "ppppp#b.........v....P#'",
- "ppppp#b.b.b.r..r.o.o.P#'",
-@@ -179,6 +181,7 @@
- "w": "t_chainfence_v",
- "|": "t_chaingate_c",
- "~": "t_sidewalk",
-+ "`": "t_sidewalk",
- "4": "t_gutter_downspout"
- },
- "sealed_item": {
-@@ -188,6 +191,7 @@
- "M": { "item": { "item": "seed_flower" }, "furniture": "f_planter_harvest" }
- },
- "furniture": {
-+ "`": "f_street_light",
- "D": "f_dumpster",
- "H": "f_warehouse_shelf",
- "P": "f_rack",
-@@ -282,7 +286,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "*W^^^WW|-=--:---:---:-|*",
- "*w~~~%~|..............|*",
- "*w~~~v~|..............|*",
-@@ -322,9 +326,11 @@
- "w": "t_chainfence_v",
- "|": "t_wall_w",
- "~": "t_sidewalk",
-+ "'": "t_sidewalk",
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "]": "f_rack",
- "l": "f_stool",
-@@ -416,7 +422,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "~~~~~~~~~~~~~~~~~~~~~~~~",
-+ "~~~~~~~~~~~~~~~~~~~~~~~'",
- "~~~WWWWWWWWW^^WWWWWWW~~~",
- "***w~~~~~~~~~~~~~~~~w***",
- "***w~~~~~~~~~~~~~~~~w***",
-@@ -453,10 +459,12 @@
- "w": "t_chainfence_v",
- "|": "t_wall_w",
- "~": "t_sidewalk",
-+ "'": "t_sidewalk",
- "4": "t_gutter_downspout"
- },
- "toilets": { "&": { } },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "[": "f_table",
- "]": "f_rack",
-diff --git a/data/json/mapgen/s_icecream.json b/data/json/mapgen/s_icecream.json
-index d080aec2899..54be44ee64a 100644
---- a/data/json/mapgen/s_icecream.json
-+++ b/data/json/mapgen/s_icecream.json
-@@ -6,7 +6,7 @@
- "weight": 100,
- "object": {
- "rows": [
-- ".............d__d.......",
-+ ".............d__d......`",
- ".............d__d.......",
- "...D...b.....d__d.......",
- "..bab.DaD...d____d......",
-@@ -38,6 +38,7 @@
- "+": "t_door_glass_c",
- "-": "t_wall_y",
- ".": "t_grass",
-+ "`": "t_dirt",
- "C": "t_sidewalk",
- "D": "t_dirt",
- "T": "t_floor",
-@@ -67,6 +68,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "`": "f_street_light",
- "#": "f_bench",
- "&": "f_sink",
- "C": "f_counter",
-diff --git a/data/json/mapgen/s_liquor.json b/data/json/mapgen/s_liquor.json
-index c3b46ee2a13..e7f1086e8c1 100644
---- a/data/json/mapgen/s_liquor.json
-+++ b/data/json/mapgen/s_liquor.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " ",
-+ " '",
- " ",
- " --:---------+--:-- ",
- " |#..#####....cs..| ",
-@@ -34,6 +34,7 @@
- ],
- "terrain": {
- " ": [ "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "-": "t_wall_g",
- ".": "t_floor",
- ":": "t_window",
-@@ -49,6 +50,7 @@
- "+": "t_door_c"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_rack",
- "&": "f_glass_fridge",
- "c": "f_counter",
-diff --git a/data/json/mapgen/school_1.json b/data/json/mapgen/school_1.json
-index f617810dc9a..ef14e1f33bd 100644
---- a/data/json/mapgen/school_1.json
-+++ b/data/json/mapgen/school_1.json
-@@ -11,7 +11,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "ssssssss_______sssssssssssssssssssssssssssssssssssssssssssssssssssssssss",
-+ "ssssssss_______ssssssss`sssssssssssssssssssssss`sssssssssssssssssssssss`",
- "s$;$ $;$_______$;$ $;$ssssssssssssssssssssssssssssssssssssssssssssssssss",
- "sLLLLLLL_______LLLLLLLss ss ",
- "s_____________________ss ss $;$$$$$;$$$$$$$$;$$$$$;$ ",
-@@ -433,6 +433,7 @@
- "_": "t_pavement",
- "f": "t_chainfence_h",
- "s": "t_sidewalk",
-+ "`": "t_sidewalk",
- "w": "t_window",
- "x": "t_console_broken",
- "|": "t_wall_y",
-@@ -461,6 +462,7 @@
- "j": "t_sewage_pipe"
- },
- "furniture": {
-+ "`": "f_street_light",
- "%": "f_curtain",
- "@": "f_bed",
- "#": "f_bench",
-diff --git a/data/json/mapgen/smallscrapyard.json b/data/json/mapgen/smallscrapyard.json
-index d6366f986e3..b7469fd6aca 100644
---- a/data/json/mapgen/smallscrapyard.json
-+++ b/data/json/mapgen/smallscrapyard.json
-@@ -249,6 +249,7 @@
- "method": "json",
- "object": {
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_wreckage",
- "&": "f_toilet",
- "-": "f_null",
-@@ -284,7 +285,7 @@
- { "chance": 35, "item": "hardware_plumbing", "x": 16, "y": 8 }
- ],
- "rows": [
-- "__._______._.__.____.___",
-+ "__._______._.__.____.__'",
- "_____..._._._.__...____.",
- "_-------.........------_",
- "_|^#................^^|_",
-@@ -324,6 +325,7 @@
- "W": "t_wall_metal",
- "^": "t_dirt",
- "_": "t_grass",
-+ "'": "t_dirt",
- "b": "t_dirt",
- "d": "t_dirt",
- "f": "t_dirt",
-diff --git a/data/json/mapgen/smoke_lounge.json b/data/json/mapgen/smoke_lounge.json
-index d362e1a7ab3..dcb123ec551 100644
---- a/data/json/mapgen/smoke_lounge.json
-+++ b/data/json/mapgen/smoke_lounge.json
-@@ -30,7 +30,7 @@
- { "chance": 25, "item": "floor_trash", "x": 14, "y": 6 }
- ],
- "rows": [
-- "____d______d__1sss1__d__",
-+ "____d______d__1sss1__d_'",
- "_|||--------|||sss|||||_",
- "_|M..........{|TTT|^.#|_",
- "_|M..........{|TTT|.g#|_",
-@@ -62,6 +62,7 @@
- "D": "t_door_c",
- "T": "t_thconc_floor",
- "_": "t_grass",
-+ "'": "t_dirt",
- "a": "t_pavement",
- "1": "t_dirt",
- "d": "t_dirt",
-@@ -72,6 +73,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "S": "f_statue",
- "^": [ "f_indoor_plant_y", "f_indoor_plant" ],
-@@ -176,7 +178,7 @@
- ],
- "fill_ter": "t_floor",
- "rows": [
-- "___d___1sss1____d_______",
-+ "___d___1sss1____d______'",
- "_||---||ttt||||||||||||_",
- "_|{...^|D-D|cccc.^|RY&|d",
- "_|{....|..........+...|_",
-@@ -206,6 +208,7 @@
- "-": "t_wall_glass",
- "D": "t_door_glass_c",
- "_": "t_grass",
-+ "'": "t_dirt",
- "d": "t_dirt",
- "1": "t_dirt",
- "p": "t_pavement",
-@@ -216,6 +219,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_table",
- "C": "f_chair",
- "H": "f_sofa",
-diff --git a/data/json/mapgen/sports_store.json b/data/json/mapgen/sports_store.json
-index 35be3e50755..fc324851d9f 100644
---- a/data/json/mapgen/sports_store.json
-+++ b/data/json/mapgen/sports_store.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- ".`''''`''''`''''`''''`..",
-+ ".`''''`''''`''''`''''`.?",
- ".`''''`''''`''''`''''`..",
- ".`''''`''''`''''`''''`..",
- ".`''''`''''`''''`''''`..",
-@@ -34,6 +34,7 @@
- ],
- "terrain": {
- ".": [ "t_grass", "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "?": "t_dirt",
- " ": "t_floor",
- "'": "t_pavement",
- "`": "t_pavement_y",
-@@ -46,6 +47,7 @@
- "/": "t_door_curtain_c"
- },
- "furniture": {
-+ "?": "f_street_light",
- "#": "f_counter",
- "h": "f_stool",
- "t": "f_treadmill",
-diff --git a/data/json/mapgen/station_radio.json b/data/json/mapgen/station_radio.json
-index dda7f03f220..20a79244477 100644
---- a/data/json/mapgen/station_radio.json
-+++ b/data/json/mapgen/station_radio.json
-@@ -8,7 +8,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " sssssssssssssssssssss ",
-+ " sssssssssssssssssssss'",
- " sssssssFffffffffffffFss",
- " sssssssF____________Fss",
- " ss|----|______&&&&__Fss",
-@@ -46,6 +46,7 @@
- "_": "t_pavement",
- "&": "t_radio_tower",
- "s": "t_sidewalk",
-+ "'": "t_sidewalk",
- "x": "t_console_broken",
- "F": "t_chainfence",
- "f": "t_chainfence",
-@@ -54,6 +55,7 @@
- "<": "t_ladder_up"
- },
- "furniture": {
-+ "'": "f_street_light",
- "o": "f_bookcase",
- "d": "f_desk",
- "h": "f_chair",
-@@ -151,7 +153,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "ss ##w###",
-+ "ss '##w###",
- "ss #ffffffff#xxxP#",
- "sssssssssG________#.h.P#",
- "ss ######________Dc.hP#",
-@@ -178,6 +180,7 @@
- ],
- "terrain": {
- " ": [ "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "+": "t_door_c",
- "=": "t_door_locked_alarm",
- "D": "t_door_locked",
-@@ -199,6 +202,7 @@
- "<": "t_ladder_up"
- },
- "furniture": {
-+ "'": "f_street_light",
- "o": "f_bookcase",
- "d": "f_desk",
- "h": "f_chair",
-diff --git a/data/json/mapgen/storage_units_large.json b/data/json/mapgen/storage_units_large.json
-index de33a51bbd2..f3465e8bf41 100644
---- a/data/json/mapgen/storage_units_large.json
-+++ b/data/json/mapgen/storage_units_large.json
-@@ -163,7 +163,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "rows": [
-- "6622rrrrrrrrrrrrrrrrr226",
-+ "6622rrrrrrrrrrrrrrrrr2'6",
- "..22yrrryrrryrrryrrry22.",
- "..22yrrryrrryrrryrrry22.",
- "..22yrrryrrryrrryrrry22.",
-@@ -195,6 +195,7 @@
- ".": "t_pavement",
- "1": "t_window",
- "2": "t_sidewalk",
-+ "'": "t_sidewalk",
- "U": "t_sidewalk",
- "3": "t_tree_young",
- "4": "t_chaingate_l",
-@@ -209,6 +210,7 @@
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "A": "f_rack",
- "B": "f_toilet",
- "C": "f_counter",
-diff --git a/data/json/mapgen/storage_units_medium.json b/data/json/mapgen/storage_units_medium.json
-index 75acce80edc..66bc96bb28a 100644
---- a/data/json/mapgen/storage_units_medium.json
-+++ b/data/json/mapgen/storage_units_medium.json
-@@ -163,7 +163,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "rows": [
-- "|------------2rrrrrrrrr2",
-+ "|------------2rrrrrrrrr'",
- "|A MM 7y....2yrrryrrry2",
- "|A M 7y....2yrrryrrry2",
- "|A |8....2yrrryrrry2",
-@@ -195,6 +195,7 @@
- ".": "t_pavement",
- "1": "t_window",
- "2": "t_sidewalk",
-+ "'": "t_sidewalk",
- "V": "t_sidewalk",
- "W": "t_sidewalk",
- "3": "t_tree_young",
-@@ -210,6 +211,7 @@
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "A": "f_rack",
- "B": "f_toilet",
- "C": "f_counter",
-diff --git a/data/json/mapgen/storage_units_small.json b/data/json/mapgen/storage_units_small.json
-index cabceb9c453..60de5508575 100644
---- a/data/json/mapgen/storage_units_small.json
-+++ b/data/json/mapgen/storage_units_small.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "rows": [
-- "sssssss..........sssssss",
-+ "sssssss..........ssssss'",
- "sssssss..........sssssss",
- "sssssss..........sssssss",
- "sssssss..........sssssss",
-@@ -43,9 +43,11 @@
- "p": "t_pavement_y",
- "r": "t_pavement",
- "s": "t_sidewalk",
-+ "'": "t_sidewalk",
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_chair",
- "R": "f_rubble",
- "^": "f_rubble",
-diff --git a/data/json/mapgen/teashop.json b/data/json/mapgen/teashop.json
-index 7653f3aabda..204d15c2c39 100644
---- a/data/json/mapgen/teashop.json
-+++ b/data/json/mapgen/teashop.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "...S....................",
-+ "...S...................'",
- ".z.S.z..123123123123123.",
- "...S....SSSSCTCSSSSSCSz.",
- ".z.S.z..SCTCSSSSCTCSTSz.",
-@@ -44,6 +44,7 @@
- ",": "t_floor",
- "-": "t_wall_w",
- ".": [ "t_grass", "t_grass", "t_grass", "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "1": "t_grass",
- "2": "t_grass",
- "3": "t_grass",
-@@ -65,6 +66,7 @@
- "|": "t_wall_w"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "&": "f_dumpster",
- "1": "f_dandelion",
-@@ -171,7 +173,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- ".....SSS.......T.....T..",
-+ ".....SSS.......T.....T.'",
- ".qqqqSSSqqqqqq|||OOO|||.",
- ".q...TSS.T..Tz|c,$$$&C|.",
- ".q.T..SSS@...zOtC,,,,t|T",
-@@ -204,6 +206,7 @@
- ";": "t_linoleum_gray",
- ",": "t_floor",
- ".": [ "t_grass", "t_grass", "t_grass", "t_grass", "t_grass", "t_grass", "t_dirt" ],
-+ "'": "t_dirt",
- "T": [ "t_tree", "t_tree_young", "t_shrub", "t_grass", "t_grass", "t_dirt" ],
- "z": "t_shrub",
- "@": "t_grass",
-@@ -233,6 +236,7 @@
- "q": "t_fence_v"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "Y": "f_rack_coat",
- "&": "f_trashcan",
-diff --git a/data/json/mapgen/thrift.json b/data/json/mapgen/thrift.json
-index baf5ae9c74d..67f576866f5 100644
---- a/data/json/mapgen/thrift.json
-+++ b/data/json/mapgen/thrift.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "rrrrrrrrrrrrrrrrrrrrrrrr",
-+ "rrrrrrrrrrrrrrrrrrrrrrr'",
- "yrrryrrryrrryrrryrrryrrr",
- "yrrryrrryrrryrrryrrryrrr",
- "yrrryrrryrrryrrryrrryrrr",
-@@ -50,12 +50,14 @@
- "g": "t_door_glass_c",
- "o": "t_carpet_purple",
- "r": "t_pavement",
-+ "'": "t_pavement",
- "y": "t_pavement_y",
- "|": "t_wall_w",
- "Z": "t_gutter_downspout",
- "<": "t_ladder_up"
- },
- "furniture": {
-+ "'": "f_street_light",
- "A": "f_rack",
- "C": "f_counter",
- "D": "f_sink",
-diff --git a/data/json/mapgen/veterinarian.json b/data/json/mapgen/veterinarian.json
-index b0c48efca59..a578e78f501 100644
---- a/data/json/mapgen/veterinarian.json
-+++ b/data/json/mapgen/veterinarian.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- " ",
-+ " '",
- " ",
- " ",
- " ",
-@@ -34,6 +34,7 @@
- ],
- "terrain": {
- " ": "t_pavement",
-+ "'": "t_pavement",
- "%": "t_console_broken",
- "*": "t_shrub",
- "+": "t_door_c",
-@@ -56,6 +57,7 @@
- "4": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "#": "f_counter",
- "$": "f_safe_l",
- "?": "f_counter",
-diff --git a/data/json/mapgen/vfw.json b/data/json/mapgen/vfw.json
-index ee75edffd1d..8b64b04b341 100644
---- a/data/json/mapgen/vfw.json
-+++ b/data/json/mapgen/vfw.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "rrrrrrrrrrrrr..33.22.33.",
-+ "rrrrrrrrrrrrr..33.22.33'",
- "yrrryrrryrrry.3..2222..3",
- "yrrryrrryrrry.3.22pp22.3",
- "yrrryrrryrrry..22pXSp22.",
-@@ -37,6 +37,7 @@
- "+": "t_door_c",
- "-": "t_wall_wood",
- ".": [ [ "t_grass", 5 ], [ "t_grass_long", 2 ], "t_dirt", "t_shrub" ],
-+ "'": "t_dirt",
- "X": "t_grass",
- "S": "t_grass",
- "p": "t_grass",
-@@ -53,6 +54,7 @@
- "5": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "A": "f_rack",
- "C": "f_counter",
- "D": "f_sink",
-diff --git a/data/json/mapgen/warehouse.json b/data/json/mapgen/warehouse.json
-index 11afc5094ad..93373ccf10c 100644
---- a/data/json/mapgen/warehouse.json
-+++ b/data/json/mapgen/warehouse.json
-@@ -7,7 +7,7 @@
- "object": {
- "fill_ter": "t_thconc_floor",
- "rows": [
-- "....S.SSSSSSSSSSSS......",
-+ "....S.SSSSSSSSSSSS.....'",
- "zzzzSzSSSSSSSSSSSSzzzzzz",
- ".---3-MMMMMMMMMMMM-----.",
- ".|11 6 w111|.",
-@@ -35,7 +35,7 @@
- "set": [
- { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": 23, "repeat": [ 5, 8 ] },
- { "point": "terrain", "id": "t_tree_pine", "x": [ 0, 5 ], "y": 0, "repeat": [ 0, 1 ] },
-- { "point": "terrain", "id": "t_tree_pine", "x": [ 18, 23 ], "y": 0, "repeat": [ 0, 1 ] },
-+ { "point": "terrain", "id": "t_tree_pine", "x": [ 18, 21 ], "y": 0, "repeat": [ 0, 1 ] },
- { "point": "terrain", "id": "t_shrub", "x": 0, "y": [ 2, 19 ], "repeat": [ 1, 4 ] },
- { "point": "terrain", "id": "t_shrub", "x": 23, "y": [ 2, 19 ], "repeat": [ 1, 4 ] },
- { "point": "terrain", "id": "t_tree_pine", "x": 0, "y": [ 2, 19 ], "repeat": [ 0, 2 ] },
-@@ -45,6 +45,7 @@
- " ": "t_thconc_floor",
- "-": "t_brick_wall",
- ".": "t_grass",
-+ "'": "t_dirt",
- "3": "t_door_locked",
- "M": "t_door_metal_locked",
- "O": "t_window",
-@@ -56,6 +57,7 @@
- "U": "t_gutter_downspout"
- },
- "furniture": {
-+ "'": "f_street_light",
- "1": [ "f_crate_c", "f_cardboard_box" ],
- "2": "f_sink",
- "5": "f_counter",
-diff --git a/data/json/mapgen_palettes/clothes_store_palette.json b/data/json/mapgen_palettes/clothes_store_palette.json
-index 85c11175374..9b2df7292c5 100644
---- a/data/json/mapgen_palettes/clothes_store_palette.json
-+++ b/data/json/mapgen_palettes/clothes_store_palette.json
-@@ -2,8 +2,9 @@
- {
- "type": "palette",
- "id": "clothes_store_palette",
-- "terrain": { "%": "t_console_broken", "p": "t_region_groundcover_urban" },
-+ "terrain": { "'": "t_sidewalk", "%": "t_console_broken", "p": "t_region_groundcover_urban" },
- "furniture": {
-+ "'": "f_street_light",
- "c": "f_counter",
- "C": "f_armchair",
- "s": "f_stool",
-@@ -59,6 +60,7 @@
- "type": "palette",
- "id": "tailor_palette",
- "terrain": {
-+ "'": "t_sidewalk",
- "%": "t_console_broken",
- ";": "t_door_locked",
- "0": "t_window_alarm",
-@@ -66,6 +68,7 @@
- "p": "t_region_groundcover_urban"
- },
- "furniture": {
-+ "'": "f_street_light",
- "c": "f_counter",
- "R": "f_clothing_rail",
- "s": "f_stool",
-@@ -99,6 +102,7 @@
- "type": "palette",
- "id": "furs_palette",
- "terrain": {
-+ "'": "t_sidewalk",
- "%": "t_console_broken",
- ";": "t_door_locked",
- "i": "t_door_locked_interior",
-@@ -107,6 +111,7 @@
- "p": "t_region_groundcover_urban"
- },
- "furniture": {
-+ "'": "f_street_light",
- "c": "f_displaycase",
- "s": "f_stool",
- "d": "f_desk",
-diff --git a/data/mods/No_Hope/Mapgen/school_1.json b/data/mods/No_Hope/Mapgen/school_1.json
-index a914d0bd9f6..76aad2fdff5 100644
---- a/data/mods/No_Hope/Mapgen/school_1.json
-+++ b/data/mods/No_Hope/Mapgen/school_1.json
-@@ -11,7 +11,7 @@
- "object": {
- "fill_ter": "t_floor",
- "rows": [
-- "ssssssss_______sssssssssssssssssssssssssssssssssssssssssssssssssssssssss",
-+ "ssssssss_______ssssssss`sssssssssssssssssssssss`sssssssssssssssssssssss`",
- "s$;$ $;$_______$;$ $;$ssssssssssssssssssssssssssssssssssssssssssssssssss",
- "sLLLLLLL_______LLLLLLLss ss ",
- "s_____________________ss ss $;$$$$$;$$$$$$$$;$$$$$;$ ",
-@@ -426,6 +426,7 @@
- "_": "t_pavement",
- "f": "t_chainfence_h",
- "s": "t_sidewalk",
-+ "`": "t_sidewalk",
- "w": "t_window",
- "|": "t_wall_y",
- "I": "t_column",
-@@ -454,6 +455,7 @@
- "x": "t_console_broken"
- },
- "furniture": {
-+ "`": "f_street_light",
- "%": "f_curtain",
- "@": "f_bed",
- "#": "f_bench",
---
-2.42.0
-
diff --git a/backport-04_feat-content-port-game-store-3469.patch b/backport-04_feat-content-port-game-store-3469.patch
deleted file mode 100644
index ae90ba9..0000000
--- a/backport-04_feat-content-port-game-store-3469.patch
+++ /dev/null
@@ -1,550 +0,0 @@
-From 361b8b6452e14ad5c74fad05e1ad093669103ef4 Mon Sep 17 00:00:00 2001
-From: Zlorthishen <79779913+Zlorthishen@users.noreply.github.com>
-Date: Sun, 22 Oct 2023 21:16:10 -0500
-Subject: [PATCH] feat(content, port): game store (#3469)
-
-* Update fluff.json
-
-* Update overmap_terrain_commercial.json
-
-* Update multitile_city_buildings.json
-
-* Update regional_map_settings.json
-
-* Update activities_hobbies.json
-
-* Update mansion.json
-
-* Update mall_item_groups.json
-
-* style(autofix.ci): automated formatting
-
-* Add files via upload
-
-* Update regional_map_settings.json
-
-* Update activities_hobbies.json
-
-* style(autofix.ci): automated formatting
-
-* Update multitile_city_buildings.json
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- .../Locations_MapExtras/mall_item_groups.json | 12 +-
- .../Locations_MapExtras/mansion.json | 19 +-
- data/json/itemgroups/activities_hobbies.json | 26 ++-
- data/json/items/fluff.json | 176 ++++++++++++++++++
- data/json/mapgen/s_games.json | 139 ++++++++++++++
- .../overmap/multitile_city_buildings.json | 6 +
- .../overmap_terrain_commercial.json | 14 ++
- data/json/regional_map_settings.json | 1 +
- 8 files changed, 384 insertions(+), 9 deletions(-)
- create mode 100644 data/json/mapgen/s_games.json
-
-diff --git a/data/json/itemgroups/Locations_MapExtras/mall_item_groups.json b/data/json/itemgroups/Locations_MapExtras/mall_item_groups.json
-index 0841f79f760..031e545771a 100644
---- a/data/json/itemgroups/Locations_MapExtras/mall_item_groups.json
-+++ b/data/json/itemgroups/Locations_MapExtras/mall_item_groups.json
-@@ -93,19 +93,25 @@
- [ "portable_game", 60 ],
- [ "bat", 60 ],
- [ "backpack", 40 ],
-- [ "pockknife", 20 ],
-+ [ "pockknife", 5 ],
- [ "wristwatch", 20 ],
- [ "teleumbrella", 5 ],
- { "group": "kids_books", "prob": 155 },
-+ { "group": "games", "prob": 170 },
-+ [ "frisbee", 40 ],
-+ [ "disc_golf", 40 ],
-+ [ "magic_8_ball", 30 ],
- [ "novel_pulp", 20 ],
- [ "folding_bicycle", 5 ],
- [ "sunglasses", 25 ],
-- [ "cowboy_hat", 25 ],
-- [ "mp3", 40 ],
- [ "wolfsuit", 5 ],
- [ "dinosuit", 5 ],
- [ "gum", 10 ],
-+ [ "baseball", 40 ],
-+ [ "football", 40 ],
-+ [ "basketball", 50 ],
- [ "talking_doll", 50 ],
-+ [ "marble", 60 ],
- [ "creepy_doll", 1 ],
- [ "jedi_cloak", 5 ],
- [ "clown_suit", 5 ],
-diff --git a/data/json/itemgroups/Locations_MapExtras/mansion.json b/data/json/itemgroups/Locations_MapExtras/mansion.json
-index bd0b6889844..7a8de7a0074 100644
---- a/data/json/itemgroups/Locations_MapExtras/mansion.json
-+++ b/data/json/itemgroups/Locations_MapExtras/mansion.json
-@@ -712,13 +712,21 @@
- "magazine": 100,
- "subtype": "distribution",
- "items": [
-- [ "bat_nerf", 100 ],
-- [ "marble", 60 ],
-+ [ "bat_nerf", 70 ],
-+ [ "marble", 50 ],
- [ "talking_doll", 50 ],
-- [ "fc_hairpin", 50 ],
-- { "group": "kids_books", "prob": 170 },
-- [ "backpack", 40 ],
-+ [ "basketball", 30 ],
-+ [ "fc_hairpin", 30 ],
-+ { "group": "kids_books", "prob": 170, "count": [ 1, 4 ] },
-+ { "group": "games", "prob": 170, "count": [ 1, 2 ] },
-+ [ "backpack", 20 ],
-+ [ "baseball", 30 ],
-+ [ "football", 20 ],
-+ [ "frisbee", 40 ],
-+ [ "disc_golf", 20 ],
-+ [ "radio_car_box", 10 ],
- [ "orangesoda", 30 ],
-+ [ "magic_8_ball", 10 ],
- [ "hairpin", 30 ],
- [ "purple_drink", 20 ],
- [ "candy", 20 ],
-@@ -726,6 +734,7 @@
- [ "rock", 10 ],
- [ "bat", 10 ],
- [ "creepy_doll", 3 ],
-+ [ "portable_game", 5 ],
- [ "whistle", 3 ]
- ]
- },
-diff --git a/data/json/itemgroups/activities_hobbies.json b/data/json/itemgroups/activities_hobbies.json
-index 57e3c00bda2..a6745c4cc5d 100644
---- a/data/json/itemgroups/activities_hobbies.json
-+++ b/data/json/itemgroups/activities_hobbies.json
-@@ -222,8 +222,8 @@
- [ "textbook_traps", 8 ],
- [ "lighter", 60 ],
- [ "ref_lighter", 10 ],
-- [ "electric_lighter", 10 ],
- [ "matches", 60 ],
-+ [ "electric_lighter", 10 ],
- [ "sewing_kit", 47 ],
- [ "tailors_kit", 3 ],
- [ "thread", 40 ],
-@@ -324,5 +324,29 @@
- [ "survival_kit", 30 ],
- [ "premium_survival_kit", 3 ]
- ]
-+ },
-+ {
-+ "type": "item_group",
-+ "id": "games",
-+ "items": [
-+ [ "chess", 50 ],
-+ [ "checkers", 50 ],
-+ [ "deck_of_cards", 50 ],
-+ [ "cards_magic", 50 ],
-+ [ "pictionary", 50 ],
-+ [ "monopoly", 50 ],
-+ [ "dnd", 50 ],
-+ [ "g_warhammer", 50 ],
-+ [ "g_warhammer40k", 50 ],
-+ [ "catan", 50 ],
-+ [ "battleship", 50 ],
-+ [ "clue", 50 ],
-+ [ "metal_RPG_die", 30 ],
-+ [ "RPG_die", 40 ],
-+ [ "character_sheet", 20 ],
-+ [ "scorecard", 10 ],
-+ [ "dnd_handbook", 5 ],
-+ [ "portable_game", 5 ]
-+ ]
- }
- ]
-diff --git a/data/json/items/fluff.json b/data/json/items/fluff.json
-index 1b9438f0d83..b1a6aa3fb1c 100644
---- a/data/json/items/fluff.json
-+++ b/data/json/items/fluff.json
-@@ -59,5 +59,181 @@
- "material": [ "paper" ],
- "symbol": "*",
- "color": "light_gray"
-+ },
-+ {
-+ "id": "chess",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "chess set" },
-+ "description": "A wooden box containing all the equipment needed to play a game of chess.",
-+ "weight": "907 g",
-+ "volume": "2 L",
-+ "price": 7500,
-+ "price_postapoc": 100,
-+ "material": [ "wood" ],
-+ "symbol": "?",
-+ "color": "brown",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "checkers",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "checkers set" },
-+ "description": "A wooden box containing a set of round tokens used to play checkers.",
-+ "weight": "788 g",
-+ "volume": "1500 ml",
-+ "price": 2000,
-+ "price_postapoc": 100,
-+ "material": [ "wood" ],
-+ "symbol": "?",
-+ "color": "brown",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "cards_magic",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "deck of Sorcery cards", "str_pl": "decks of Sorcery cards" },
-+ "description": "A set of cards meant to play the game \"Sorcery.\" Each card has a fun picture of a different monster.",
-+ "weight": "210 g",
-+ "volume": "250 ml",
-+ "price": 2300,
-+ "price_postapoc": 100,
-+ "material": [ "paper" ],
-+ "symbol": "?",
-+ "color": "blue",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "pictionary",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Picturesque", "str_pl": "sets of Picturesque" },
-+ "description": "A game where one draws an image, and the others attempt to guess what it is.",
-+ "weight": "350 g",
-+ "volume": "500 ml",
-+ "price": 1500,
-+ "price_postapoc": 100,
-+ "material": [ "plastic" ],
-+ "symbol": "?",
-+ "color": "yellow",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "monopoly",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Capitalism", "str_pl": "sets of Capitalism" },
-+ "description": "A game where players traverse around the board buying property and swindling their friends.",
-+ "weight": "300 g",
-+ "volume": "500 ml",
-+ "price": 99,
-+ "price_postapoc": 100,
-+ "material": [ "plastic" ],
-+ "symbol": "?",
-+ "color": "red",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "dnd",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Blobs and Bandits", "str_pl": "sets of Blobs and Bandits" },
-+ "description": "A roleplaying game set in the post-apocalypse, so you can pretend to survive the apocalypse while surviving the apocalypse.",
-+ "weight": "680 g",
-+ "volume": "1250 ml",
-+ "price": 12950,
-+ "price_postapoc": 1000,
-+ "material": [ "plastic" ],
-+ "symbol": "?",
-+ "color": "red",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "g_warhammer",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Battlehammer", "str_pl": "sets of Battlehammer" },
-+ "description": "A strategy game featuring a set of tiny figurines of fantasy creatures.",
-+ "weight": "680 g",
-+ "volume": "1250 ml",
-+ "price": 10880,
-+ "price_postapoc": 5000,
-+ "material": [ "plastic" ],
-+ "symbol": "?",
-+ "color": "yellow",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "g_warhammer40k",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Battlehammer 20k", "str_pl": "sets of Battlehammer 20k" },
-+ "description": "A strategy game featuring a set of tiny figurines of grotesque aliens and imperious space marines.",
-+ "weight": "680 g",
-+ "volume": "1250 ml",
-+ "price": 10880,
-+ "price_postapoc": 5000,
-+ "material": [ "plastic" ],
-+ "symbol": "?",
-+ "color": "yellow",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "catan",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Settlers of the Ranch", "str_pl": "sets of Settlers of the Ranch" },
-+ "description": "A strategy game where players build settlements and trade for supplies.",
-+ "weight": "804 g",
-+ "volume": "1250 ml",
-+ "price": 7050,
-+ "price_postapoc": 5000,
-+ "material": [ "wood" ],
-+ "symbol": "?",
-+ "color": "light_blue",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "battleship",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Warships", "str_pl": "sets of Warships" },
-+ "description": "A game where players try to guess where the opponent placed their ships on the board.",
-+ "weight": "450 g",
-+ "volume": "500 ml",
-+ "price": 2000,
-+ "price_postapoc": 1000,
-+ "material": [ "plastic" ],
-+ "symbol": "?",
-+ "color": "blue",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
-+ },
-+ {
-+ "id": "clue",
-+ "type": "GENERIC",
-+ "category": "other",
-+ "name": { "str": "Murder Mystery", "str_pl": "sets of Murder Mystery" },
-+ "description": "A game where players try to figure out who murdered the butler.",
-+ "weight": "370 g",
-+ "volume": "500 ml",
-+ "price": 2480,
-+ "price_postapoc": 1000,
-+ "material": [ "paper" ],
-+ "symbol": "?",
-+ "color": "blue",
-+ "flags": [ "NO_REPAIR" ],
-+ "use_action": "PLAY_GAME"
- }
- ]
-diff --git a/data/json/mapgen/s_games.json b/data/json/mapgen/s_games.json
-new file mode 100644
-index 00000000000..18b62a01b36
---- /dev/null
-+++ b/data/json/mapgen/s_games.json
-@@ -0,0 +1,139 @@
-+[
-+ {
-+ "type": "mapgen",
-+ "method": "json",
-+ "om_terrain": [ "s_games" ],
-+ "object": {
-+ "fill_ter": "t_carpet_purple",
-+ "rows": [
-+ "......fg____g____g____gf",
-+ "......fg____g____g____gf",
-+ "......fg____g____g____gf",
-+ "......fg____g____g____gf",
-+ "......fg____g____g____gf",
-+ "......fg____g____g____gf",
-+ "......ffffffffffffffffff",
-+ "......9##oooo#cc#oooo##.",
-+ ".##o#o## kkkk Ykkkk #.",
-+ ".#hhhhh| #.",
-+ ".# iiƃ#.",
-+ ".# l hh hh i #.",
-+ ".# hhh | lkl hh hh i #.",
-+ ".# hhh | l j A#.",
-+ ".# i #.",
-+ ".# hh hkk i #.",
-+ ".#hhhhh| Y||c|oo||||#.",
-+ ".##o#o###|c||D |;r#.",
-+ ".______9#;;;| ll c;q#.",
-+ "._______c;;;| lkkl |###.",
-+ ".nn_____#;;m| lkkl c;q#.",
-+ ".nn_____#mmm|F ll |;r#.",
-+ ".nn_____######oooo#####.",
-+ "........................"
-+ ],
-+ "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } },
-+ "terrain": {
-+ "|": "t_wall_w",
-+ "#": "t_brick_wall",
-+ "o": "t_window",
-+ "c": "t_door_c",
-+ "_": "t_pavement",
-+ ".": "t_region_groundcover_urban",
-+ "f": "t_sidewalk",
-+ "g": "t_pavement_y",
-+ "h": "t_carpet_purple",
-+ "i": "t_carpet_purple",
-+ "j": "t_console_broken",
-+ "k": "t_carpet_purple",
-+ "l": "t_carpet_purple",
-+ "n": "t_pavement",
-+ "Y": "t_carpet_purple",
-+ ";": "t_linoleum_gray",
-+ "q": "t_linoleum_gray",
-+ "r": "t_linoleum_gray",
-+ "m": "t_linoleum_gray",
-+ "s": "t_carpet_purple",
-+ "9": "t_gutter_downspout"
-+ },
-+ "furniture": {
-+ "h": "f_rack_wood",
-+ "i": "f_counter",
-+ "ƃ": "f_counter_gate_c",
-+ "k": "f_table",
-+ "A": "f_stool",
-+ "l": "f_chair",
-+ "m": "f_crate_c",
-+ "n": "f_dumpster",
-+ "Y": "f_trashcan",
-+ "r": "f_sink",
-+ "s": "f_locker"
-+ },
-+ "toilets": { "q": { } },
-+ "place_vehicles": [
-+ { "vehicle": "car", "x": 9, "y": 2, "chance": 35, "rotation": 270 },
-+ { "vehicle": "scooter_electric", "x": 5, "y": 20, "chance": 35, "rotation": 270 },
-+ { "vehicle": "beetle", "x": 14, "y": 2, "chance": 35, "rotation": 270 },
-+ { "vehicle": "electric_car", "x": 19, "y": 2, "chance": 35, "rotation": 270 }
-+ ],
-+ "place_loot": [
-+ { "group": "magazines", "chance": 50, "repeat": 5, "x": [ 2, 6 ], "y": 9 },
-+ { "group": "bookstore_misc", "chance": 50, "repeat": 5, "x": [ 3, 5 ], "y": 12 },
-+ { "group": "games", "chance": 50, "repeat": 3, "x": [ 3, 5 ], "y": 13 },
-+ { "group": "games", "chance": 50, "repeat": 5, "x": [ 2, 6 ], "y": 16 },
-+ { "group": "games", "chance": 50, "repeat": 4, "x": [ 13, 14 ], "y": [ 11, 12 ] },
-+ { "group": "games", "chance": 50, "repeat": 5, "x": [ 16, 17 ], "y": [ 11, 12 ] },
-+ { "group": "games", "chance": 50, "repeat": 4, "x": [ 9, 12 ], "y": 8 },
-+ { "group": "games", "chance": 50, "repeat": 4, "x": [ 17, 20 ], "y": 8 },
-+ { "group": "games", "chance": 50, "repeat": 5, "x": [ 12, 13 ], "y": 15 },
-+ { "group": "games", "chance": 50, "repeat": 5, "x": [ 15, 17 ], "y": 15 },
-+ { "group": "trash", "chance": 50, "repeat": 5, "x": 11, "y": 16 },
-+ { "group": "trash", "chance": 50, "repeat": 5, "x": 16, "y": 8 },
-+ { "group": "games", "chance": 50, "repeat": 3, "x": [ 9, 11 ], "y": 21 },
-+ { "group": "games", "chance": 50, "repeat": 4, "x": 11, "y": 20 },
-+ { "group": "cleaning_bulk", "chance": 80, "x": 18, "y": 21 },
-+ { "group": "vending_food_items", "chance": 80, "repeat": 4, "x": 19, "y": [ 14, 15 ] },
-+ { "group": "trash", "chance": 50, "repeat": 5, "x": [ 1, 2 ], "y": [ 20, 22 ] },
-+ { "item": "dnd_handbook", "x": 16, "y": 20, "chance": 100 },
-+ { "item": "dnd", "x": 15, "y": 20, "chance": 90 },
-+ { "item": "character_sheet", "x": [ 15, 16 ], "y": [ 19, 20 ], "chance": 80, "repeat": [ 1, 6 ] },
-+ { "item": "metal_RPG_die", "x": 16, "y": 19, "chance": 10 },
-+ { "item": "RPG_die", "x": 15, "y": 19, "chance": 90, "repeat": [ 1, 4 ] }
-+ ]
-+ }
-+ },
-+ {
-+ "type": "mapgen",
-+ "method": "json",
-+ "om_terrain": [ "s_games_roof" ],
-+ "object": {
-+ "fill_ter": "t_flat_roof",
-+ "rows": [
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " ",
-+ " |222222222222223 ",
-+ " |222225..............3 ",
-+ " |...............X.:..3 ",
-+ " |....................3 ",
-+ " |....................3 ",
-+ " |...A...........=&...3 ",
-+ " |....................3 ",
-+ " |....................3 ",
-+ " |....................3 ",
-+ " |....................3 ",
-+ " |-----5|.............3 ",
-+ " |.............3 ",
-+ " |.............3 ",
-+ " |........A....3 ",
-+ " |.............3 ",
-+ " |-------------3 ",
-+ " "
-+ ],
-+ "palettes": [ "roof_palette" ]
-+ }
-+ }
-+]
-diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json
-index cef6a12b31b..4124a2b0778 100644
---- a/data/json/overmap/multitile_city_buildings.json
-+++ b/data/json/overmap/multitile_city_buildings.json
-@@ -3802,5 +3802,11 @@
- { "point": [ 0, 0, 0 ], "overmap": "s_laundromat_1_north" },
- { "point": [ 0, 0, 1 ], "overmap": "s_laundromat_roof_1_north" }
- ]
-+ },
-+ {
-+ "type": "city_building",
-+ "id": "s_games",
-+ "locations": [ "land" ],
-+ "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "s_games_north" }, { "point": [ 0, 0, 1 ], "overmap": "s_games_roof_north" } ]
- }
- ]
-diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json b/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json
-index 1b9abe94e1f..5d3488e6b35 100644
---- a/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json
-+++ b/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json
-@@ -1507,5 +1507,19 @@
- "urban_14_9"
- ],
- "copy-from": "urban_13_3"
-+ },
-+ {
-+ "type": "overmap_terrain",
-+ "id": "s_games",
-+ "name": "gaming store",
-+ "copy-from": "generic_city_building",
-+ "sym": "g",
-+ "color": "cyan"
-+ },
-+ {
-+ "type": "overmap_terrain",
-+ "id": "s_games_roof",
-+ "name": "gaming store roof",
-+ "copy-from": "s_games"
- }
- ]
-diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json
-index a64a7448dc0..b69100f0cc9 100644
---- a/data/json/regional_map_settings.json
-+++ b/data/json/regional_map_settings.json
-@@ -928,6 +928,7 @@
- "shopping_plaza": 125,
- "movie_theater": 75,
- "garage_gas_city": 250,
-+ "s_games": 80,
- "2fmotel_city": 50,
- "cs_car_dealership": 100,
- "cs_car_showroom": 100,
---
-2.42.0
-
diff --git a/backport-05_fix-farm-mapgen-3715.patch b/backport-05_fix-farm-mapgen-3715.patch
deleted file mode 100644
index c737051..0000000
--- a/backport-05_fix-farm-mapgen-3715.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 13714f68ef41c8e2cd43d6bf203065c27fbc2810 Mon Sep 17 00:00:00 2001
-From: 0Monet <146018959+0Monet@users.noreply.github.com>
-Date: Sun, 19 Nov 2023 00:22:30 +0100
-Subject: [PATCH] fix: farm mapgen (#3715)
-
-* fix_farm_mapgen
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- data/json/mapgen/farm.json | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/data/json/mapgen/farm.json b/data/json/mapgen/farm.json
-index eca907206c1..1c3952dbb8e 100644
---- a/data/json/mapgen/farm.json
-+++ b/data/json/mapgen/farm.json
-@@ -24,7 +24,7 @@
- " #__2___________2__# #_1__1_# -6..........H.- F DDDDDDDDDDDDDDDD F ",
- " #__2___________2__# #______# -u...----+----- F F ",
- " #332___________233# #______# --+---kh......- F DDDDDDDDDDDDDDDD F ",
-- " #_____________1___# #_1__1_# -...-.........w F F ",
-+ " #_____________1___# #_1__1_# -b..-.........w F F ",
- " W_________________W #______# -b..+......BB.- F DDDDDDDDDDDDDDDD F ",
- " W_________________W #____ll# -.ST-.....dBBd- F F ",
- " #lll__________O___# ###++### --w------w----- F DDDDDDDDDDDDDDDD F ",
-@@ -80,7 +80,6 @@
- "F F ",
- "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF "
- ],
-- "place_items": [ ],
- "place_item": [
- { "item": "straw_pile", "x": [ 3, 5 ], "y": [ 5, 7 ], "amount": [ 0, 8 ] },
- { "item": "cattlefodder", "x": [ 3, 5 ], "y": [ 5, 7 ], "amount": [ 0, 4 ] },
-@@ -90,11 +89,10 @@
- { "item": "cattlefodder", "x": [ 19, 19 ], "y": [ 10, 15 ], "amount": [ 2, 7 ] }
- ],
- "place_monsters": [
-- { "monster": "GROUP_ZOMBIE", "x": [ 4, 4 ], "y": [ 14, 14 ], "repeat": [ 1, 6 ], "density": 0.2 },
-+ { "monster": "GROUP_ZOMBIE", "x": [ 9, 11 ], "y": [ 12, 14 ], "repeat": [ 1, 6 ], "density": 0.2 },
- { "monster": "GROUP_DOMESTIC", "x": [ 10, 12 ], "y": [ 15, 17 ], "repeat": [ 1, 2 ], "density": 0.2 }
- ],
- "sealed_item": { "D": { "item": { "item": "seed_corn" }, "furniture": "f_plant_seedling" } },
-- "place_nested": [ { "chunks": [ [ "NC_FARMER_spawn", 10 ], [ "null", 90 ] ], "x": 23, "y": 3 } ],
- "palettes": [ "farm" ]
- }
- },
-@@ -123,7 +121,7 @@
- "#_1__1_# -6...........m-",
- "#__Q___# -u...----+-----",
- "#______# --+---mm....mm-",
-- "#_1__1_# -...-.........w",
-+ "#_1__1_# -b..-.........w",
- "#______# -b..+......BB.-",
- "#____ll# -.ST-mm...dBBd-",
- "###++### --w------w-----",
-@@ -131,6 +129,7 @@
- " ",
- "FFFFFFFFFFFFFFFFFFFFFFFF"
- ],
-+ "terrain": { "Q": "t_dirtfloor" },
- "items": {
- ".": { "item": "trash", "chance": 20 },
- "B": [
-@@ -164,6 +163,7 @@
- "u": [ { "item": "kitchen", "chance": 70 }, { "item": "cannedfood", "chance": 40 }, { "item": "softdrugs", "chance": 40 } ],
- "Q": { "item": "farming_tools", "chance": 15 }
- },
-+ "place_nested": [ { "chunks": [ [ "NC_FARMER_spawn", 10 ], [ "null", 90 ] ], "x": 17, "y": 13 } ],
- "palettes": [ "farm" ]
- }
- },
---
-2.42.0
-
diff --git a/backport-06_fix-campground-mapgen-3702.patch b/backport-06_fix-campground-mapgen-3702.patch
deleted file mode 100644
index 0dd5977..0000000
--- a/backport-06_fix-campground-mapgen-3702.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From 0f8ea67a352735ca1b12525b87b8d37b7fe0d284 Mon Sep 17 00:00:00 2001
-From: 0Monet <146018959+0Monet@users.noreply.github.com>
-Date: Fri, 17 Nov 2023 19:36:11 +0100
-Subject: [PATCH] fix: campground mapgen (#3702)
-
-* fix_campground
-
-* fix_waterless_toilets
-
-* style(autofix.ci): automated formatting
-
----------
-
-Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
----
- data/json/mapgen/campground.json | 124 ++++++++++------------
- data/json/mapgen_palettes/campground.json | 4 +-
- 2 files changed, 60 insertions(+), 68 deletions(-)
-
-diff --git a/data/json/mapgen/campground.json b/data/json/mapgen/campground.json
-index 0bd8910b1c4..b4e8ff694f3 100644
---- a/data/json/mapgen/campground.json
-+++ b/data/json/mapgen/campground.json
-@@ -1,68 +1,10 @@
- [
- {
-+ "type": "mapgen",
- "method": "json",
-+ "om_terrain": [ [ "campground_1a", "campground_1b" ], [ "campground_2a", "campground_2b" ] ],
-+ "weight": 100,
- "object": {
-- "items": {
-- ";": [
-- { "item": "dresser", "chance": 5, "repeat": [ 1, 2 ] },
-- { "item": "creepy", "chance": 2 },
-- { "item": "camping", "chance": 5 },
-- { "item": "archery", "chance": 2 }
-- ],
-- ",": [
-- { "item": "dresser", "chance": 5, "repeat": [ 1, 2 ] },
-- { "item": "creepy", "chance": 2 },
-- { "item": "camping", "chance": 5 },
-- { "item": "archery", "chance": 2 }
-- ],
-- "t": [
-- { "item": "barbecue", "chance": 5, "repeat": [ 1, 2 ] },
-- { "item": "misc_smoking", "chance": 2 },
-- { "item": "cannedfood", "chance": 2, "repeat": [ 1, 2 ] }
-- ]
-- },
-- "place_monsters": [
-- { "chance": 50, "density": 1, "monster": "CAMPERS", "x": [ 8, 18 ], "y": [ 7, 22 ] },
-- { "monster": "GROUP_PARK_ANIMAL", "x": [ 2, 17 ], "y": [ 2, 15 ], "repeat": [ 0, 2 ] },
-- { "chance": 50, "density": 1, "monster": "CAMPERS", "x": [ 3, 17 ], "y": [ 32, 46 ] },
-- { "monster": "GROUP_PARK_ANIMAL", "x": [ 2, 17 ], "y": [ 31, 46 ], "repeat": [ 0, 2 ] },
-- { "monster": "GROUP_PARK_ANIMAL", "x": [ 30, 46 ], "y": [ 31, 46 ], "repeat": [ 0, 2 ] }
-- ],
-- "place_vehicles": [
-- { "chance": 25, "fuel": 15, "rotation": 270, "status": -1, "vehicle": "campground_vehicles", "x": 16, "y": 2 },
-- { "chance": 25, "fuel": -1, "rotation": 180, "status": -1, "vehicle": "campground_vehicles", "x": 5, "y": 19 },
-- { "chance": 50, "fuel": 20, "rotation": 0, "status": -1, "vehicle": "lux_rv", "x": 43, "y": 18 },
-- {
-- "chance": 25,
-- "fuel": 15,
-- "rotation": 180,
-- "status": -1,
-- "vehicle": "campground_vehicles",
-- "x": 26,
-- "y": 14
-- },
-- {
-- "chance": 25,
-- "fuel": 15,
-- "rotation": 360,
-- "status": -1,
-- "vehicle": "campground_vehicles",
-- "x": 18,
-- "y": 32
-- },
-- { "chance": 25, "fuel": -1, "rotation": 0, "status": -1, "vehicle": "campground_vehicles", "x": 7, "y": 34 },
-- {
-- "chance": 25,
-- "fuel": -1,
-- "rotation": 270,
-- "status": -1,
-- "vehicle": "campground_vehicles",
-- "x": 17,
-- "y": 40
-- },
-- { "chance": 10, "fuel": -1, "rotation": 0, "status": -1, "vehicle": "rv", "x": 42, "y": 27 },
-- { "chance": 25, "fuel": 15, "rotation": 90, "status": -1, "vehicle": "campground_vehicles", "x": 35, "y": 43 }
-- ],
- "rows": [
- "_____________________ssssss_ss_......sssssssss__",
- "_______sssssssssssssssbbbbs__ss......|ww||||||||",
-@@ -113,11 +55,61 @@
- "______________sssssss#####sssssssss____ssssss___",
- "____________________ssssss______________________"
- ],
-- "palettes": [ "campground_palette" ]
-- },
-- "om_terrain": [ [ "campground_1a", "campground_1b" ], [ "campground_2a", "campground_2b" ] ],
-- "type": "mapgen",
-- "weight": 100
-+ "palettes": [ "campground_palette" ],
-+ "items": {
-+ ";": [
-+ { "item": "dresser", "chance": 5, "repeat": [ 1, 2 ] },
-+ { "item": "creepy", "chance": 2 },
-+ { "item": "camping", "chance": 5 },
-+ { "item": "archery", "chance": 2 }
-+ ],
-+ ",": [
-+ { "item": "dresser", "chance": 5, "repeat": [ 1, 2 ] },
-+ { "item": "creepy", "chance": 2 },
-+ { "item": "camping", "chance": 5 },
-+ { "item": "archery", "chance": 2 }
-+ ],
-+ "t": [
-+ { "item": "barbecue", "chance": 5, "repeat": [ 1, 2 ] },
-+ { "item": "misc_smoking", "chance": 2 },
-+ { "item": "cannedfood", "chance": 2, "repeat": [ 1, 2 ] }
-+ ]
-+ },
-+ "place_monsters": [
-+ { "chance": 50, "density": 1, "monster": "CAMPERS", "x": [ 8, 18 ], "y": [ 7, 22 ] },
-+ { "monster": "GROUP_PARK_ANIMAL", "x": [ 2, 17 ], "y": [ 2, 15 ], "repeat": [ 0, 2 ] },
-+ { "chance": 50, "density": 1, "monster": "CAMPERS", "x": [ 3, 17 ], "y": [ 32, 46 ] },
-+ { "monster": "GROUP_PARK_ANIMAL", "x": [ 2, 17 ], "y": [ 31, 46 ], "repeat": [ 0, 2 ] },
-+ { "monster": "GROUP_PARK_ANIMAL", "x": [ 30, 46 ], "y": [ 31, 46 ], "repeat": [ 0, 2 ] }
-+ ],
-+ "place_vehicles": [
-+ { "chance": 25, "fuel": 15, "rotation": 270, "status": -1, "vehicle": "campground_vehicles", "x": 16, "y": 5 },
-+ { "chance": 25, "fuel": -1, "rotation": 180, "status": -1, "vehicle": "campground_vehicles", "x": 5, "y": 19 },
-+ { "chance": 50, "fuel": 20, "rotation": 0, "status": -1, "vehicle": "lux_rv", "x": 42, "y": 18 },
-+ {
-+ "chance": 25,
-+ "fuel": 15,
-+ "rotation": 180,
-+ "status": -1,
-+ "vehicle": "campground_vehicles",
-+ "x": 26,
-+ "y": 14
-+ },
-+ { "chance": 25, "fuel": 15, "rotation": 90, "status": -1, "vehicle": "campground_vehicles", "x": 22, "y": 31 },
-+ { "chance": 25, "fuel": -1, "rotation": 0, "status": -1, "vehicle": "campground_vehicles", "x": 7, "y": 34 },
-+ {
-+ "chance": 25,
-+ "fuel": -1,
-+ "rotation": 270,
-+ "status": -1,
-+ "vehicle": "campground_vehicles",
-+ "x": 17,
-+ "y": 41
-+ },
-+ { "chance": 10, "fuel": -1, "rotation": 0, "status": -1, "vehicle": "rv", "x": 42, "y": 27 },
-+ { "chance": 25, "fuel": 15, "rotation": 90, "status": -1, "vehicle": "campground_vehicles", "x": 34, "y": 41 }
-+ ]
-+ }
- },
- {
- "method": "json",
-diff --git a/data/json/mapgen_palettes/campground.json b/data/json/mapgen_palettes/campground.json
-index c14a2f34e06..3d659fb5018 100644
---- a/data/json/mapgen_palettes/campground.json
-+++ b/data/json/mapgen_palettes/campground.json
-@@ -32,7 +32,6 @@
- "h": "f_chair",
- "H": "f_camp_chair",
- "#": "f_large_canvas_wall",
-- "&": "f_toilet",
- ";": "f_large_groundsheet",
- ",": "f_center_groundsheet",
- "B": "f_brazier",
-@@ -42,6 +41,7 @@
- "t": "f_table",
- "n": "f_tourist_table",
- "o": "f_firering"
-- }
-+ },
-+ "toilets": { "&": { } }
- }
- ]
---
-2.42.0
-
diff --git a/backport-07_feat-interface-new-UDP-external-tileset-sprite-for-s.patch b/backport-07_feat-interface-new-UDP-external-tileset-sprite-for-s.patch
deleted file mode 100644
index f923ac4..0000000
--- a/backport-07_feat-interface-new-UDP-external-tileset-sprite-for-s.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From fac99a00b26d617ca185d2546dd97f26a8e693b8 Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Tue, 14 Nov 2023 12:56:15 -0600
-Subject: [PATCH] feat (interface): new UDP external tileset sprite for signs
- (#3670)
-
-* feat (interface): new UPD external tileset sprite for signs
-
-* Update external_tileset.md
----
- .../External_Tileset_DP_Normal.json | 3 ++-
- .../External_Tileset_DP_Normal.png | Bin 33382 -> 42296 bytes
- .../reference/graphics/external_tileset.md | 8 +++++++-
- 3 files changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/data/json/external_tileset/External_Tileset_DP_Normal.json b/data/json/external_tileset/External_Tileset_DP_Normal.json
-index d25b8d76ac5..b799eceadbf 100644
---- a/data/json/external_tileset/External_Tileset_DP_Normal.json
-+++ b/data/json/external_tileset/External_Tileset_DP_Normal.json
-@@ -55,5 +55,6 @@
- { "id": "armguard_bronze", "fg": 44 },
-- { "id": "overlay_worn_armguard_bronze", "fg": 45 }
-+ { "id": "overlay_worn_armguard_bronze", "fg": 45 },
-+ { "id": "f_sign", "fg": 47 }
- ],
- "sprite_width": 32,
- "sprite_height": 32
-diff --git a/doc/src/content/docs/en/mod/json/reference/graphics/external_tileset.md b/doc/src/content/docs/en/mod/json/reference/graphics/external_tileset.md
-index 0f11c64a3a8..68adcf2625b 100644
---- a/doc/src/content/docs/en/mod/json/reference/graphics/external_tileset.md
-+++ b/doc/src/content/docs/en/mod/json/reference/graphics/external_tileset.md
-@@ -35,6 +35,8 @@ Links to relevant pull requests, for content covered below:
- [#3221](https://github.com/cataclysmbnteam/Cataclysm-BN/pull/3221)
- - Rewired street lights: [#3273](https://github.com/cataclysmbnteam/Cataclysm-BN/pull/3273)
- - Alternative ear/tail mutation: [#3340](https://github.com/cataclysmbnteam/Cataclysm-BN/pull/3340)
-+- New trees: [#3626](https://github.com/cataclysmbnteam/Cataclysm-BN/pull/3626)
-+- Alternative sign sprite: [#3670](https://github.com/cataclysmbnteam/Cataclysm-BN/pull/3670)
-
- ## Undead People
-
-@@ -72,8 +74,9 @@ Ultica are planned for the future.
- - Buckler, including worn and wielded. Item specific to BN.
- - Battle masks, iron and bronze, including worn sprites. Items specific to BN.
- - Bronze arm guards, including worn sprites. Item specific to BN.
-+- Cacao pods. Item specific to BN.
-
--### External_Tileset_DP_Large.png
-+### External_Tileset_DP_Tall.png
-
- - Off state for utility light. Ability to switch on and off specific to BN.
- - Alien nerve cluster, furniture added to mi-go locations in BN.
-@@ -82,6 +85,9 @@ Ultica are planned for the future.
- - Cherry tree uses summer sprite (plus cherry blossom coloration), summer sprite depicted without
- berries, due to harvest season being moved in BN.
- - Rewired street light, including active state. Furniture specific to BN.
-+- Cocoa tree. Terrain specific to BN.
-+- Cocoa plant. Terrain specific to BN.
-+- Override for sign sprite. Removes lettering on the front specific to DDA.
-
- ### alternative_mutation_tileset.png
-
---
-2.42.0
-
diff --git a/backport-08_feat-Convert-non-pistol-only-energy-weapon-mods-to-b.patch b/backport-08_feat-Convert-non-pistol-only-energy-weapon-mods-to-b.patch
deleted file mode 100644
index 2d9da9e..0000000
--- a/backport-08_feat-Convert-non-pistol-only-energy-weapon-mods-to-b.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 7d7dfe329b14390b4f45b42e8de701d993926641 Mon Sep 17 00:00:00 2001
-From: KheirFerrum <102964889+KheirFerrum@users.noreply.github.com>
-Date: Thu, 16 Nov 2023 02:47:48 +0000
-Subject: [PATCH] feat: Convert non-pistol only energy weapon mods to be
- compatible with all energy weapons. (#3688)
-
-Convert non-pistol only energy weapon mods
-
-Now works with all energy weapons
----
- data/json/items/gunmod/laser_gunmods.json | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/data/json/items/gunmod/laser_gunmods.json b/data/json/items/gunmod/laser_gunmods.json
-index 4d3bde9ff24..82ddd880c05 100644
---- a/data/json/items/gunmod/laser_gunmods.json
-+++ b/data/json/items/gunmod/laser_gunmods.json
-@@ -12,7 +12,7 @@
- "symbol": ":",
- "color": "light_gray",
- "location": "lens",
-- "mod_target_category": [ [ "ENERGY_WEAPONS", "PISTOLS" ], [ "ENERGY_WEAPONS", "RIFLES" ] ],
-+ "mod_target_category": [ [ "ENERGY_WEAPONS" ] ],
- "range_modifier": -25,
- "damage_modifier": { "damage_type": "heat", "amount": 10 },
- "ammo_effects": [ "SHOT" ]
-@@ -30,7 +30,7 @@
- "symbol": ":",
- "color": "light_gray",
- "location": "lens",
-- "mod_target_category": [ [ "ENERGY_WEAPONS", "PISTOLS" ], [ "ENERGY_WEAPONS", "RIFLES" ] ],
-+ "mod_target_category": [ [ "ENERGY_WEAPONS" ] ],
- "range_modifier": 15,
- "damage_modifier": { "damage_type": "heat", "amount": 5 },
- "dispersion_modifier": 15
-@@ -68,7 +68,7 @@
- "symbol": ":",
- "color": "light_gray",
- "location": "emitter",
-- "mod_target_category": [ [ "ENERGY_WEAPONS", "PISTOLS" ], [ "ENERGY_WEAPONS", "RIFLES" ] ],
-+ "mod_target_category": [ [ "ENERGY_WEAPONS" ] ],
- "ups_charges_multiplier": 0.9
- },
- {
-@@ -85,7 +85,7 @@
- "symbol": ":",
- "color": "light_gray",
- "location": "emitter",
-- "mod_target_category": [ [ "ENERGY_WEAPONS", "PISTOLS" ], [ "ENERGY_WEAPONS", "RIFLES" ] ],
-+ "mod_target_category": [ [ "ENERGY_WEAPONS" ] ],
- "range_modifier": 5,
- "damage_modifier": { "damage_type": "heat", "amount": 10 },
- "ups_charges_multiplier": 2.0
---
-2.42.0
-
diff --git a/backport-09_feat-balance-MILITARY_MECH-flag-affects-ID-card-need.patch b/backport-09_feat-balance-MILITARY_MECH-flag-affects-ID-card-need.patch
deleted file mode 100644
index e08411b..0000000
--- a/backport-09_feat-balance-MILITARY_MECH-flag-affects-ID-card-need.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From f73f0d1a09f44aee8c8be75d12fed308ba779997 Mon Sep 17 00:00:00 2001
-From: Chaosvolt <chaosvolt@users.noreply.github.com>
-Date: Fri, 17 Nov 2023 07:09:19 -0600
-Subject: [PATCH] feat(balance): MILITARY_MECH flag affects ID card needed, fix
- duplicate message (#3697)
-
-* feat(balance): MILITARY_MECH flag affects ID card needed, fix duplicate message
-
-* Fix the thing
----
- data/json/monsters/mechsuits.json | 1 -
- src/character.cpp | 1 -
- src/monexamine.cpp | 8 +++++---
- 3 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/data/json/monsters/mechsuits.json b/data/json/monsters/mechsuits.json
-index 3bdc8f061a4..3f169a5c668 100644
---- a/data/json/monsters/mechsuits.json
-+++ b/data/json/monsters/mechsuits.json
-@@ -134,7 +134,6 @@
- "flags": [
- "SEES",
- "HEARS",
-- "MILITARY_MECH",
- "BASHES",
- "PUSH_VEH",
- "PUSH_MON",
-diff --git a/src/character.cpp b/src/character.cpp
-index c5b903133ac..6d8d9335c9c 100644
---- a/src/character.cpp
-+++ b/src/character.cpp
-@@ -1364,7 +1364,6 @@ void Character::mount_creature( monster &z )
- }
- add_msg_if_player( m_good, _( "You hear your %s whir to life." ), z.get_name() );
- }
-- add_msg_if_player( m_good, _( "You hear your %s whir to life." ), z.get_name() );
- }
- // some rideable mechs have night-vision
- recalc_sight_limits();
-diff --git a/src/monexamine.cpp b/src/monexamine.cpp
-index 2dc423d10b1..4be13ab25aa 100644
---- a/src/monexamine.cpp
-+++ b/src/monexamine.cpp
-@@ -58,6 +58,7 @@ static const efftype_id effect_led_by_leash( "led_by_leash" );
- static const efftype_id effect_tied( "tied" );
-
- static const itype_id itype_cash_card( "cash_card" );
-+static const itype_id itype_id_industrial( "id_industrial" );
- static const itype_id itype_id_military( "id_military" );
-
- static const skill_id skill_survival( "survival" );
-@@ -430,10 +431,10 @@ void monexamine::insert_battery( monster &z )
-
- bool monexamine::mech_hack( monster &z )
- {
-- itype_id card_type = itype_id_military;
-+ itype_id card_type = ( z.has_flag( MF_MILITARY_MECH ) ? itype_id_military : itype_id_industrial );
- avatar &you = get_avatar();
- if( you.has_amount( card_type, 1 ) ) {
-- if( query_yn( _( "Swipe your ID card into the mech's security port?" ) ) ) {
-+ if( query_yn( _( "Swipe your %s into the mech's security port?" ), item::nname( card_type ) ) ) {
- you.mod_moves( -100 );
- z.add_effect( effect_pet, 1_turns, num_bp );
- z.friendly = -1;
-@@ -443,7 +444,8 @@ bool monexamine::mech_hack( monster &z )
- return true;
- }
- } else {
-- add_msg( m_info, _( "You do not have the required ID card to activate this mech." ) );
-+ add_msg( m_info, _( "You do not have the required %s to activate this mech." ),
-+ item::nname( card_type ) );
- }
- return false;
- }
---
-2.42.0
-
diff --git a/etc-01_fix-rubbersplosion.patch b/etc-01_fix-rubbersplosion.patch
deleted file mode 100644
index ef06b41..0000000
--- a/etc-01_fix-rubbersplosion.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/data/json/items/ammo.json
-+++ b/data/json/items/ammo.json
-@@ -686,7 +686,7 @@
- "count": 25
- },
- {
-- "type": "AMMO",
-+ "type": "TOOL",
- "id": "chunk_rubber",
- "category": "spare_parts",
- "price": 75,
-@@ -697,7 +697,6 @@
- "material": "rubber",
- "volume": "250 ml",
- "weight": "38 g",
-- "ammo_type": "components",
- "flags": [ "NO_SALVAGE" ]
- },
- {
diff --git a/etc-02_add-missing-price-postapoc.patch b/etc-02_add-missing-price-postapoc.patch
index d74366f..bad63af 100644
--- a/etc-02_add-missing-price-postapoc.patch
+++ b/etc-02_add-missing-price-postapoc.patch
@@ -1,12 +1,10 @@
--- a/data/json/items/gun/223.json
+++ b/data/json/items/gun/223.json
-@@ -118,7 +118,8 @@
- "weight": "3800 g",
+@@ -118,6 +118,7 @@
"volume": "4162 ml",
"barrel_length": "250 ml",
-- "price": 2800000,
-+ "price": 240000,
-+ "price_postapoc": 5000,
+ "price": "28 kUSD",
++ "price_postapoc": "50 USD",
"material": [ "steel", "plastic" ],
"color": "dark_gray",
"ammo": "223",
@@ -26,8 +24,8 @@
@@ -366,6 +375,7 @@
"weight": "190 g",
"volume": "620 ml",
- "price": 8600,
-+ "price_postapoc": 275,
+ "price": "86 USD",
++ "price_postapoc": "275 cent",
"material": [ "steel", "plastic" ],
"symbol": "#",
"color": "light_gray",
diff --git a/foods-01_fix-food-materials.patch b/foods-01_fix-food-materials.patch
index 350dc61..aefbd0f 100644
--- a/foods-01_fix-food-materials.patch
+++ b/foods-01_fix-food-materials.patch
@@ -2,8 +2,8 @@
+++ b/data/json/items/comestibles/bread.json
@@ -183,7 +183,7 @@
"description": "A dense and tasty fried bread treat.",
- "price": 275,
- "price_postapoc": 300,
+ "price": "275 cent",
+ "price_postapoc": "3 USD",
- "material": [ "wheat", "junk" ],
+ "material": [ "veggy", "junk" ],
"primary_material": "wheat",
@@ -25,8 +25,8 @@
+++ b/data/json/items/comestibles/other.json
@@ -80,6 +80,7 @@
"description": "A translucent hexagonal chunk of wax, filled with dense, milky jelly. Though some hold it as a panacea, it doesn't have any medical benefit. Still, it is delicious, and rich with the most beneficial substances the hive can produce.",
- "price": 20000,
- "price_postapoc": 4000,
+ "price": "200 USD",
+ "price_postapoc": "40 USD",
+ "material": "honey",
"volume": "250 ml",
"flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE" ],
@@ -36,8 +36,8 @@
+++ b/data/json/items/comestibles/junkfood.json
@@ -663,7 +663,7 @@
"description": "Plain cornflake cereal. They're not that good, but it beats nothing.",
- "price": 300,
- "price_postapoc": 75,
+ "price": "3 USD",
+ "price_postapoc": "75 cent",
- "material": "junk",
+ "material": "veggy",
"volume": "250 ml",
diff --git a/foods-05_fix-missing-price-postapoc.patch b/foods-05_fix-missing-price-postapoc.patch
index 0ed30ad..ec1e555 100644
--- a/foods-05_fix-missing-price-postapoc.patch
+++ b/foods-05_fix-missing-price-postapoc.patch
@@ -3,8 +3,8 @@
@@ -221,6 +221,7 @@
"calories": 82,
"description": "Fruit slices soaked in a sugar syrup, to preserve freshness and appearance.",
- "price": 450,
-+ "price_postapoc": 50,
+ "price": "450 cent",
++ "price_postapoc": "50 cent",
"material": "fruit",
"volume": "250 ml",
"charges": 4,
diff --git a/mutations-01_nerf-lightstep.patch b/mutations-01_nerf-lightstep.patch
index 8fa46cd..c970e02 100644
--- a/mutations-01_nerf-lightstep.patch
+++ b/mutations-01_nerf-lightstep.patch
@@ -9,7 +9,7 @@
"starting_trait": true,
"category": [ "BIRD", "ELFA", "FELINE" ],
"cancels": [ "CLUMSY" ],
-- "noise_modifier": 0.0
+- "noise_modifier": 0
+ "noise_modifier": 0.4
},
{
diff --git a/mutations-03_eye-colours.patch b/mutations-03_eye-colours.patch
deleted file mode 100644
index 18ff03b..0000000
--- a/mutations-03_eye-colours.patch
+++ /dev/null
@@ -1,186 +0,0 @@
---- a/data/json/npcs/appearance_trait_groups.json
-+++ b/data/json/npcs/appearance_trait_groups.json
-@@ -19,49 +19,49 @@
- "type": "trait_group",
- "id": "Appearance_Irish",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Irish", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Irish", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 }, { "group": "Eye_light", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_Caucasian",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_White", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_White", "prob": 100 }, { "group": "Eye_any", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_Germanic",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Fair", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Fair", "prob": 100 }, { "group": "Skin_Fair", "prob": 100 }, { "group": "Eye_light", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_Latin",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Medium", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Medium", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_African",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Dark", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "group": "Skin_Dark", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_EastAsian",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_SouthAsian",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Dark", "prob": 100 }, { "trait": "SKIN_TAN", "prob": 100 }, { "group": "Eye_dark", "prob": 100 } ]
- },
- {
- "type": "trait_group",
- "id": "Appearance_Mixed",
- "subtype": "collection",
-- "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_Any", "prob": 100 } ]
-+ "traits": [ { "group": "Hair_Any", "prob": 100 }, { "group": "Skin_Any", "prob": 100 }, { "group": "Eye_any", "prob": 100 } ]
- },
- {
- "type": "trait_group",
-@@ -155,6 +155,31 @@
- },
- {
- "type": "trait_group",
-+ "id": "Eye_light",
-+ "subtype": "distribution",
-+ "traits": [ { "trait": "eye_blue", "prob": 55 }, { "trait": "eye_gray", "prob": 25 }, { "trait": "eye_green", "prob": 15 } ]
-+ },
-+ {
-+ "type": "trait_group",
-+ "id": "Eye_dark",
-+ "subtype": "distribution",
-+ "traits": [ { "trait": "eye_brown", "prob": 60 }, { "trait": "eye_hazel", "prob": 20 }, { "trait": "eye_amber", "prob": 20 } ]
-+ },
-+ {
-+ "type": "trait_group",
-+ "id": "Eye_any",
-+ "subtype": "distribution",
-+ "traits": [
-+ { "trait": "eye_brown", "prob": 70 },
-+ { "trait": "eye_hazel", "prob": 9 },
-+ { "trait": "eye_amber", "prob": 8 },
-+ { "trait": "eye_blue", "prob": 8 },
-+ { "trait": "eye_gray", "prob": 3 },
-+ { "trait": "eye_green", "prob": 2 }
-+ ]
-+ },
-+ {
-+ "type": "trait_group",
- "id": "Hair_Black",
- "subtype": "distribution",
- "traits": [
---- a/data/json/mutations/mutation_appearance.json
-+++ b/data/json/mutations/mutation_appearance.json
-@@ -477,6 +513,78 @@
- "types": [ "hair_style" ]
- },
- {
-+ "id": "eye_blue",
-+ "type": "mutation",
-+ "name": { "str": "Eye color: blue" },
-+ "description": "You have blue eyes.",
-+ "points": 0,
-+ "starting_trait": true,
-+ "valid": false,
-+ "purifiable": false,
-+ "player_display": false,
-+ "types": [ "eye_color" ]
-+ },
-+ {
-+ "id": "eye_brown",
-+ "type": "mutation",
-+ "name": { "str": "Eye color: brown" },
-+ "description": "You have brown eyes.",
-+ "points": 0,
-+ "starting_trait": true,
-+ "valid": false,
-+ "purifiable": false,
-+ "player_display": false,
-+ "types": [ "eye_color" ]
-+ },
-+ {
-+ "id": "eye_hazel",
-+ "type": "mutation",
-+ "name": { "str": "Eye color: hazel" },
-+ "description": "You have hazel eyes.",
-+ "points": 0,
-+ "starting_trait": true,
-+ "valid": false,
-+ "purifiable": false,
-+ "player_display": false,
-+ "types": [ "eye_color" ]
-+ },
-+ {
-+ "id": "eye_amber",
-+ "type": "mutation",
-+ "name": { "str": "Eye color: amber" },
-+ "description": "You have amber eyes.",
-+ "points": 0,
-+ "starting_trait": true,
-+ "valid": false,
-+ "purifiable": false,
-+ "player_display": false,
-+ "types": [ "eye_color" ]
-+ },
-+ {
-+ "id": "eye_gray",
-+ "type": "mutation",
-+ "name": { "str": "Eye color: gray" },
-+ "description": "You have gray eyes.",
-+ "points": 0,
-+ "starting_trait": true,
-+ "valid": false,
-+ "purifiable": false,
-+ "player_display": false,
-+ "types": [ "eye_color" ]
-+ },
-+ {
-+ "id": "eye_green",
-+ "type": "mutation",
-+ "name": { "str": "Eye color: green" },
-+ "description": "You have green eyes.",
-+ "points": 0,
-+ "starting_trait": true,
-+ "valid": false,
-+ "purifiable": false,
-+ "player_display": false,
-+ "types": [ "eye_color" ]
-+ },
-+ {
- "id": "SKIN_DARK",
- "type": "mutation",
- "name": { "str": "Skin tone: dark brown" },
---- a/data/json/mutations/mutation_type.json
-+++ b/data/json/mutations/mutation_type.json
-@@ -69,6 +73,10 @@
- },
- {
- "type": "mutation_type",
-+ "id": "eye_color"
-+ },
-+ {
-+ "type": "mutation_type",
- "id": "hair_style"
- },
- {
diff --git a/npc-03_godco-update.patch b/npc-03_godco-update.patch
index 104ef1c..f68459e 100644
--- a/npc-03_godco-update.patch
+++ b/npc-03_godco-update.patch
@@ -652,16 +652,16 @@
+ ",G;G G;*v.......+.ff.g|,F*, ____________ *v...|T+.S|.bnb.bnb.bnb.bnb.v*",
+ ",*;;;;;G|hh..bbb|.||+||,,* ____________F,|..n|||.S|.bnb|bnb.bnb.bnb.|,",
+ "G,G G;G,||||+||||+|..Y||| _____________,||..n|T+..|.bnb^bnb.bnb.bnb.||",
-+ "7 ;;*;;7|???.|1T|.d.....|;;_____________ *|^...|||+||..................|",
++ "7 ;;*;;7|???.|ST|.d.....|;;_____________ *|^...|||+||..................|",
+ " G G7;*G|?n..|..|hd.....+_______________;;|.........|Y.bbbb.bbbb....nh.v",
+ "G;;;,G;;|?...|a.|fd...bb|;;_______________+..g......+..nnnn.nnnn....nh.v",
+ "7,G;G;;G|...^||+|||^..|||, _____________;;|+||||||+||..bbbb.bbbb....nh.v",
+ "G,*;;;;,|hh......g||+||*,, _____________ ,|<..ccss.a|a.................|",
+ ",7 ;;G7*vnn..|fh..@@.M|,F* _____________ ,|||.......U.....bnb.bnb.bnb.||",
-+ ",*G;;*,*vnn..ufdd....Mv*,,,____________ F*|u.OO33..U....|bnb.bnb.bnb.|,",
-+ ",, ;;G,7|hh..udf@.@@.@v**,7,___________ *vu.1122..U.....bnb.bnb.bnb.v*",
++ ",*G;;*,*vnn..ufdd....Mv*,,,____________ F*|u.SSsu..U....|bnb.bnb.bnb.|,",
++ ",, ;;G,7|hh..udf@.@@.@v**,7,___________ *vu.cccu..U.....bnb.bnb.bnb.v*",
+ ",,*;;,*,|....cdh@....@v*,,,,__________* ,*ve.......U.....bnb.bnb.bnb.v*",
-+ ",7 ;;7,*|a1Oe|dh^.@@.a|,F;;;__________ F,|e.4444..|.$$.............^|,",
++ ",7 ;;7,*|acOe|dh^.@@.a|,F;;;__________ F,|e.uuuu..|.$$.............^|,",
+ ",*, ;;,7|||||||||||v|||,;;,*__________ *,,||||||||+|+|||vv||vv||vv||||,",
+ "*,,* ;;;; *,,*7,,7,*77,;;,,7,_________ * HDDD_|<....|,**,,**,***, ,,7",
+ ",,,,* ;;;;;;;;*,,,,,,7;,7,*,, _____________m____+..hnh|,*oooooooooooo,*",
@@ -672,8 +672,8 @@
+ "*,,,,,*,,7,,*,,,*,,,,,*,7 ;;;;________*,,7*,7,*,, * ;;;;;;;;;;;;;;;;; ,,",
+ ",,***,7**,t***7,,7*,*7,,,*,,7________7*,,,*, ooooooooooooooooooooooooo,*",
+ "||vvv||vv||vvv|||||||,,*,,7,,________,,,*7, ;;;;;;;;;;;;;;;;;;;;; ,7,",
-+ "|.....a..Y....^|0lll|*,7,,,*,________*,,,* oooooooooooooooooooooooooo,,,",
-+ "|.0EE..h...EE0.|....|7,,,*,,7________,7,,;;;;;;;;;;;;;;;;;;;;;;;;;;; *,7",
++ "|.....a..Y....^|llll|*,7,,,*,________*,,,* oooooooooooooooooooooooooo,,,",
++ "|.l@@..h...@@l.|....|7,,,*,,7________,7,,;;;;;;;;;;;;;;;;;;;;;;;;;;; *,7",
+ "v.....bnnb.....|.lll|,*,,,77___________* oooooooooooooooooooooooooooo,,",
+ "|.l@@.bnnb.@@l.|+||||,7,,,*,_____________;;;;;;;;;;;;;;;;;;;;;;;;;;;; ,*",
+ "|.....h.h......|.???|*,,7,,,________*,___oooooooooooooooooooooooooooooo,",
@@ -700,8 +700,8 @@
+ "|......bb......|.???|*,*,,7*, ___7 *,,;;;;;;;;;;;;;;;;;;;;;;;;;; ,,,",
+ "|.l@@..nnh.@@l.|+||||7,,,*,,7* __*,, *,,7ooooooooooooooooooooooooooooo,7",
+ "v.....hnn......|.lll|,*,,7,,*, __,7*,,*,,,;;;;;;;;;;;;;;;;;;;;;;;;;;; ,",
-+ "|.0EE..bb..EE0.|....|*,7*,,, ,7___,,*7 7oooooooooooooooooooooooooooooo,*",
-+ "|^.......h....^|0lll|7,*,,7,*,* __*,,,*,,7 *;;;;;;;;;;;;;;;;;;;;;;; ,,7",
++ "|.l@@..bb..@@l.|....|*,7*,,, ,7___,,*7 7oooooooooooooooooooooooooooooo,*",
++ "|^.......h....^|llll|7,*,,7,*,* __*,,,*,,7 *;;;;;;;;;;;;;;;;;;;;;;; ,,7",
+ "||vvv||vv||vvv|||||||,*,7,*,,7, __,7*,,7*,*oooooooooooooooooooooooo ,7,,",
+ "7,***7,***t***,7,*,,*,7*|||v|||v++v|||v||| ;;;;;;;;;;;;;;;;;;;;;;,,,,*",
+ ",,,,,*7,,,,,*,,*,,7,,*,,|T+.+T|^..a|T+.+T|7,7ooooooooooooooooooooooo*7,,",
diff --git a/npc-04_island-prison-update.patch b/npc-04_island-prison-update.patch
index a238ab9..27d9629 100644
--- a/npc-04_island-prison-update.patch
+++ b/npc-04_island-prison-update.patch
@@ -1487,7 +1487,7 @@
+ },
+ "items": {
+ "9": { "item": "SUS_pantry", "chance": 95 },
-+ "0": { "item": "teabag_box", "chance": 95, "repeat": [ 1, 20 ] },
++ "0": { "item": "teashop_bulk_teas", "chance": 95, "repeat": [ 1, 20 ] },
+ "A": { "item": "groce_ingredient", "chance": 95, "repeat": [ 1, 20 ] },
+ "B": { "item": "groce_bread", "chance": 95, "repeat": [ 1, 20 ] },
+ "C": { "item": "groce_cereal", "chance": 95, "repeat": [ 1, 20 ] },
@@ -1644,7 +1644,7 @@
+ "locations": [ "lake_surface" ],
+ "city_distance": [ 3, -1 ],
+ "city_sizes": [ 4, 12 ],
-+ "occurrences": [ 50, 100 ],
++ "occurrences": [ 15, 100 ],
+ "flags": [ "CLASSIC", "LAKE", "UNIQUE" ]
+ },
+ {
diff --git a/npc-05_kindred-update.patch b/npc-05_kindred-update.patch
index f6d18b8..8b728b4 100644
--- a/npc-05_kindred-update.patch
+++ b/npc-05_kindred-update.patch
@@ -1189,7 +1189,7 @@
@@ -33,7 +33,8 @@
"-----------GG-----------"
],
- "palettes": [ "cabin_palette" ],
+ "palettes": [ { "distribution": [ [ "cabin_palette", 1 ], [ "cabin_palette_abandoned", 1 ] ] } ],
- "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": 7, "y": 4 } ]
+ "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": 7, "y": 4 } ],
+ "place_nested": [ { "chunks": [ [ "KINDRED_Darren_Cooper_spawn", 20 ], [ "null", 80 ] ], "x": 12, "y": 14 } ]
diff --git a/npc-10_bunker-merchant.patch b/npc-10_bunker-merchant.patch
index e33a9af..8da5296 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 @@
- "city_sizes": [ 3, -1 ],
- "occurrences": [ 0, 2 ],
- "flags": [ "CLASSIC", "URBAN", "ELECTRIC_GRID" ]
+ { "point": [ 2, -1, 0 ], "connection": "local_road", "from": [ 1, -1, 0 ] }
+ ],
+ "flags": [ "CLASSIC", "URBAN" ]
+ },
+ {
+ "type": "overmap_special",
diff --git a/npc-11_npcs-reload-gas-mask.patch b/npc-11_npcs-reload-gas-mask.patch
index 6c25b02..e56b214 100644
--- a/npc-11_npcs-reload-gas-mask.patch
+++ b/npc-11_npcs-reload-gas-mask.patch
@@ -39,16 +39,6 @@
+ "charges_per_use": 1
},
{
- "id": "mask_fsurvivorxl",
-@@ -1219,7 +1223,8 @@
- "initial_charges": 100,
- "ammo": "gasfilter_m",
- "use_action": "GASMASK",
-- "flags": [ "VARSIZE", "STURDY", "OVERSIZE", "SUN_GLASSES", "SLEEP_IGNORE" ]
-+ "flags": [ "VARSIZE", "STURDY", "OVERSIZE", "SUN_GLASSES", "SLEEP_IGNORE" ],
-+ "charges_per_use": 1
- },
- {
"id": "mask_bunker",
@@ -1248,7 +1253,8 @@
"encumbrance": 20,
@@ -79,16 +69,6 @@
+ "charges_per_use": 1
},
{
- "id": "mask_survivorxl",
-@@ -1361,7 +1369,8 @@
- "environmental_protection": 1,
- "environmental_protection_with_filter": 15,
- "qualities": [ [ "GLARE", 1 ] ],
-- "flags": [ "VARSIZE", "STURDY", "OVERSIZE", "SUN_GLASSES", "SLEEP_IGNORE" ]
-+ "flags": [ "VARSIZE", "STURDY", "OVERSIZE", "SUN_GLASSES", "SLEEP_IGNORE" ],
-+ "charges_per_use": 1
- },
- {
"id": "mask_wsurvivor",
@@ -1389,7 +1398,8 @@
"environmental_protection": 1,
@@ -99,14 +79,4 @@
+ "charges_per_use": 1
},
{
- "id": "mask_wsurvivorxl",
-@@ -1417,7 +1427,8 @@
- "environmental_protection": 1,
- "environmental_protection_with_filter": 15,
- "qualities": [ [ "GLARE", 1 ] ],
-- "flags": [ "VARSIZE", "STURDY", "OVERSIZE", "SUN_GLASSES", "SLEEP_IGNORE" ]
-+ "flags": [ "VARSIZE", "STURDY", "OVERSIZE", "SUN_GLASSES", "SLEEP_IGNORE" ],
-+ "charges_per_use": 1
- },
- {
"id": "goggles_nv",
diff --git a/revert-02_revert-book-revamp.patch b/revert-02_revert-book-revamp.patch
index 6f7b1a3..8822d85 100644
--- a/revert-02_revert-book-revamp.patch
+++ b/revert-02_revert-book-revamp.patch
@@ -1,1578 +1,1357 @@
---- a/data/json/itemgroups/books.json
-+++ b/data/json/itemgroups/books.json
-@@ -184,7 +184,6 @@
- { "item": "novel_swash", "prob": 14 },
- { "item": "novel_western", "prob": 22 },
- { "item": "novel_war", "prob": 20 },
-- { "item": "novel_war2", "prob": 20 },
- { "item": "novel_adventure", "prob": 14 },
- { "item": "novel_experimental", "prob": 1 },
- { "item": "novel_road", "prob": 10 },
-@@ -197,9 +196,7 @@
- { "item": "novel_pulp", "prob": 16 },
- { "item": "novel_thriller", "prob": 18 },
- { "item": "novel_coa", "prob": 5 },
-- { "item": "novel_coa2", "prob": 5 },
- { "item": "novel_crime", "prob": 20 },
-- { "item": "novel_crime2", "prob": 20 },
- { "item": "novel_horror", "prob": 18 },
- { "item": "novel_tragedy", "prob": 8 },
- { "item": "survnote", "prob": 1 }
-@@ -226,7 +223,6 @@
- { "item": "story_book", "prob": 4 },
- { "item": "fairy_tales", "prob": 10 },
- { "item": "novel_coa", "prob": 10 },
-- { "item": "novel_coa2", "prob": 10 },
- { "item": "child_book", "prob": 50 },
- { "item": "manual_dodge_kid", "prob": 20 },
- { "item": "mag_comic", "prob": 20 }
-
---- a/data/json/items/book/bloat.json
-+++ b/data/json/items/book/bloat.json
-@@ -0,0 +1,202 @@
-+[
+--- a/data/json/items/book/misc.json
++++ b/data/json/items/book/misc.json
+@@ -4,46 +4,36 @@
+ "type": "BOOK",
+ "name": { "str": "paperback abstract" },
+ "description": "An ordinary paperback book. Or is it? It is.",
+- "weight": "400 g",
+- "volume": "750 ml",
++ "weight": "371 g",
++ "volume": "700 ml",
+ "price": "750 cent",
+ "price_postapoc": "50 cent",
+ "material": [ "paper" ],
+- "bashing": 5,
+- "intelligence": 6,
+ "symbol": "?",
+ "looks_like": "story_book",
+ "color": "light_cyan",
+ "flags": [ "TINDER", "FLAMMABLE" ],
+- "time": "40 m",
+- "fun": 2
+- },
+- {
+- "id": "mag_comic",
+- "type": "BOOK",
+- "name": { "str": "comic book" },
+- "description": "A super-hero comic.",
+- "copy-from": "paperback_novel",
+- "weight": "60 g",
+- "volume": "200 ml",
+- "price": "3 USD",
+- "bashing": 1,
+ "intelligence": 4,
+ "time": "15 m",
+- "fun": 1
++ "chapters": 16,
++ "fun": 2
+ },
+ {
+- "id": "holybook_bible1",
++ "id": "ZSG",
+ "type": "BOOK",
+- "name": { "str": "King James Bible", "str_pl": "copies of King James Bible" },
+- "description": "An English translation of the Christian Bible, which originated in England in the early 1600s.",
+- "copy-from": "paperback_novel",
+- "price": "550 cent",
+- "color": "dark_gray",
+- "time": "40 m",
++ "name": { "str": "Zombie Survival Guide", "str_pl": "copies of Zombie Survival Guide" },
++ "description": "While this seems like it would be very useful in this situation, the sheer amount of misinformation present makes it practically useless.",
++ "weight": "227 g",
++ "volume": "1 L",
++ "price": "1290 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "green",
+ "intelligence": 7,
+- "fun": 1,
+- "flags": [ "INSPIRATIONAL" ]
++ "time": "18 m",
++ "chapters": 28,
++ "fun": 2
+ },
+ {
+ "id": "black_box_transcript",
+@@ -51,18 +41,32 @@
+ "name": { "str": "black box transcript" },
+ "//": "ooh, military records, probably Classified!",
+ "description": "A full flight log for a military aircraft. Nothing of interest stands out.",
+- "copy-from": "paperback_novel",
++ "weight": "566 g",
++ "volume": "1250 ml",
+ "price": "50 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 5,
++ "material": [ "paper" ],
++ "symbol": "?",
+ "color": "light_green",
+- "fun": -2
++ "intelligence": 8,
++ "time": "30 m",
++ "fun": -1
+ },
+ {
+ "id": "child_book",
+ "type": "BOOK",
+ "name": { "str": "children's book" },
+ "description": "A little book for little readers. The colorful cartoon characters and sweet stories contained herein belong to a different time, before the dead walked and the world moved on.",
+- "copy-from": "paperback_novel",
++ "weight": "52 g",
++ "volume": "250 ml",
+ "price": "550 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_cyan",
++ "time": "4 m",
++ "chapters": 4,
+ "fun": 1
+ },
+ {
+@@ -70,33 +74,66 @@
+ "type": "BOOK",
+ "name": { "str_sp": "Ranch Prospectus" },
+ "description": "A short paper of the economic viability of constructing an agricultural outpost.",
+- "copy-from": "paperback_novel",
+- "price": "30 USD"
++ "weight": "1 g",
++ "volume": "250 ml",
++ "price": "30 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 1,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_cyan",
++ "intelligence": 5,
++ "time": "10 m"
+ },
+ {
+ "id": "decoy_elfa",
+ "type": "BOOK",
+ "name": { "str": "standpipe maintenance log" },
+ "description": "This binder details the scheduled maintenance for several plumbing systems throughout the facility.",
+- "copy-from": "black_box_transcript",
++ "weight": "400 g",
++ "volume": "750 ml",
+ "price": "4 USD",
+- "material": [ "paper", "plastic" ]
++ "price_postapoc": "50 cent",
++ "material": [ "paper", "plastic" ],
++ "symbol": "?",
++ "color": "light_green",
++ "intelligence": 8,
++ "time": "45 m",
++ "fun": -2
+ },
+ {
+ "id": "essay_book",
+ "type": "BOOK",
+ "name": { "str": "book of essays", "str_pl": "books of essays" },
+ "description": "A collection of essays by various authors from around the world, including works by Churchill, Mailer, Eco, and Voltaire.",
+- "copy-from": "paperback_novel",
+- "price": "1250 cent"
++ "weight": "700 g",
++ "volume": "750 ml",
++ "price": "1250 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 10,
++ "time": "26 m",
++ "chapters": 40,
++ "fun": 3
+ },
+ {
+ "id": "fairy_tales",
+ "type": "BOOK",
+ "name": { "str": "book of fairy tales", "str_pl": "books of fairy tales" },
+ "description": "An amusing collection of folklore featuring the usual cast of fairies, goblins, and trolls.",
+- "copy-from": "paperback_novel",
++ "weight": "410 g",
++ "volume": "750 ml",
+ "price": "950 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 6,
++ "time": "18 m",
++ "chapters": 24,
++ "fun": 3,
+ "//": "The ids below represent the Aarne-Thompson System of folklore classification. Do not change.",
+ "snippet_category": [
+ {
+@@ -180,171 +217,577 @@
+ ]
+ },
+ {
++ "id": "guidebook",
++ "type": "BOOK",
++ "name": { "str": "The Hitchhiker's Guide to the Cataclysm", "str_pl": "copies of The Hitchhiker's Guide to the Cataclysm" },
++ "description": "Inscribed on the cover in large, friendly letters, is the message \"Don't Panic\".",
++ "weight": "1764 g",
++ "volume": "1 L",
++ "price": "882 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 2,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "green",
++ "intelligence": 3,
++ "time": "1 m"
++ },
+ {
+ "id": "mycenacean_hymns",
+ "type": "BOOK",
+ "name": { "str": "Mycenacean Hymns", "str_pl": "copies of Mycenacean Hymns" },
+ "description": "A vellum book containing the hymns central to Marloss faith. As the verses lead to each other, the text sings of unity and promised paradise.",
-+ "copy-from": "holybook_bible1"
++ "weight": "368 g",
++ "volume": "1 L",
++ "price": "550 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "cyan",
++ "intelligence": 8,
++ "time": "10 m",
++ "fun": 1,
++ "flags": [ "INSPIRATIONAL" ]
++ },
++ {
++ "abstract": "holybook_abstract",
++ "type": "BOOK",
++ "name": { "str": "Holy Book", "str_pl": "copies of Holy Book" },
++ "description": "This is an abstract used for holy books. If you see this, it is a bug.",
++ "weight": "368 g",
++ "volume": "1 L",
++ "price": "550 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "dark_gray",
++ "intelligence": 8,
++ "time": "10 m",
++ "fun": 1,
++ "flags": [ "INSPIRATIONAL" ]
++ },
++ {
++ "id": "holybook_bible1",
++ "copy-from": "holybook_abstract",
++ "type": "BOOK",
++ "name": { "str": "King James Bible", "str_pl": "copies of King James Bible" },
++ "description": "An English translation of the Christian Bible, which originated in England in the early 1600s."
+ },
+ {
+ "id": "holybook_bible2",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Eastern Orthodox Bible", "str_pl": "copies of Eastern Orthodox Bible" },
+ "description": "An English copy of the Eastern Orthodox translation of The Holy Bible.",
-+ "copy-from": "holybook_bible1"
++ "weight": "428 g",
++ "volume": "1250 ml"
+ },
+ {
+ "id": "holybook_bible3",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Gideon Bible", "str_pl": "copies of Gideon Bible" },
-+ "description": "An English translation of the Christian Bible, distributed free of charge by Gideons International.",
-+ "copy-from": "holybook_bible1"
++ "description": "An English translation of the Christian Bible, distributed free of charge by Gideons International."
++ },
++ {
++ "id": "holybook_bible4",
++ "copy-from": "holybook_abstract",
++ "type": "BOOK",
++ "name": { "str": "Catholic Bible", "str_pl": "copies of Catholic Bible" },
++ "description": "An English copy of the Catholic Bible, including the whole 73 book canon recognized by the Catholic church."
+ },
+ {
+ "id": "holybook_granth",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Guru Granth Sahib", "str_pl": "copies of The Guru Granth Sahib" },
+ "description": "A single-volume copy of the central religious texts of Sikhism.",
-+ "copy-from": "holybook_bible1"
++ "weight": "590 g"
+ },
+ {
+ "id": "holybook_hadith",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Hadith", "str_pl": "copies of Hadith" },
+ "description": "A Muslim religious text containing an account of the sayings and actions of the prophet Muhammad.",
-+ "copy-from": "holybook_bible1"
++ "weight": "398 g",
++ "volume": "500 ml"
+ },
+ {
+ "id": "holybook_kallisti",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Principia Discordia", "str_pl": "copies of Principia Discordia" },
+ "description": "A book that embodies the main beliefs of Discordianism. It seems to primarily concern chaos, and features a card in the back which informs you that you are now a 'genuine and authorized Pope of Discordia'.",
-+ "copy-from": "holybook_bible1"
++ "weight": "292 g",
++ "volume": "150 ml"
+ },
+ {
+ "id": "holybook_kojiki",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Kojiki", "str_pl": "copies of The Kojiki" },
+ "description": "The oldest extant chronicle of Japan's myths and history, the stories contained in the Kojiki are part of the inspiration behind Shinto practices.",
-+ "copy-from": "holybook_bible1"
++ "volume": "600 ml"
+ },
+ {
+ "id": "holybook_mormon",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Book of Mormon", "str_pl": "copies of The Book of Mormon" },
+ "description": "The sacred text of the Latter Day Saint movement of Christianity, originally published in 1830 by Joseph Smith.",
-+ "copy-from": "holybook_bible1"
++ "volume": "600 ml"
+ },
+ {
+ "id": "holybook_pastafarian",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": {
+ "str": "The Gospel of the Flying Spaghetti Monster",
+ "str_pl": "copies of The Gospel of the Flying Spaghetti Monster"
+ },
+ "description": "A book that embodies the main beliefs of the Church of the Flying Spaghetti Monster. It seems to involve a lot of pirates and some sort of invisible drunken monster made of pasta.",
-+ "copy-from": "holybook_bible1"
++ "weight": "292 g",
++ "volume": "500 ml"
+ },
+ {
+ "id": "holybook_quran",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Quran", "str_pl": "copies of Quran" },
+ "description": "An English translation of the Muslim book of holy scriptures, with explanatory notes and commentaries to aid in understanding.",
-+ "copy-from": "holybook_bible1"
++ "weight": "412 g",
++ "volume": "600 ml"
+ },
+ {
+ "id": "holybook_scientology",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Dianetics", "str_pl": "copies of Dianetics" },
+ "description": "This book is the canonical text of Scientology. Written by a science fiction author, it contains self-improvement techniques and musings on psychology called Dianetics.",
-+ "copy-from": "holybook_bible1"
++ "weight": "486 g",
++ "volume": "1300 ml"
+ },
+ {
+ "id": "holybook_slack",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Book of the SubGenius", "str_pl": "copies of The Book of the SubGenius" },
+ "description": "A book about the Church of the SubGenius. It seems to involve a salesman named J. R. \"Bob\" Dobbs and a concept called 'slack'.",
-+ "copy-from": "holybook_bible1"
++ "weight": "292 g",
++ "volume": "600 ml"
+ },
+ {
+ "id": "holybook_sutras",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Sutras of the Buddha", "str_pl": "copies of The Sutras of the Buddha" },
+ "description": "A collection of discourses attributed to the Buddha and his close disciples.",
-+ "copy-from": "holybook_bible1"
++ "weight": "496 g"
+ },
+ {
+ "id": "holybook_talmud",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Talmud", "str_pl": "copies of Talmud" },
+ "description": "One of the central texts of Rabbinic Judaism, the Talmud expounds upon the Hebrew Bible with teachings and opinions of thousands of rabbis.",
-+ "copy-from": "holybook_bible1"
++ "weight": "460 g"
+ },
+ {
+ "id": "holybook_tanakh",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "Tanakh", "str_pl": "copies of Tanakh" },
+ "description": "A single-volume book containing the complete canon of the Jewish Bible.",
-+ "copy-from": "holybook_bible1"
++ "weight": "512 g",
++ "volume": "1800 ml"
+ },
+ {
+ "id": "holybook_tripitaka",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Tripitaka", "str_pl": "copies of The Tripitaka" },
+ "description": "A collection of sacred Buddhist writings describing their canons of scriptures.",
-+ "copy-from": "holybook_bible1"
++ "weight": "513 g"
+ },
+ {
+ "id": "holybook_upanishads",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Upanishads", "str_pl": "copies of The Upanishads" },
+ "description": "A collection of sacred Hindu writings regarding the nature of reality and describing the character and form of human salvation.",
-+ "copy-from": "holybook_bible1"
++ "weight": "482 g",
++ "volume": "750 ml"
+ },
+ {
+ "id": "holybook_vedas",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Four Vedas", "str_pl": "copies of The Four Vedas" },
+ "description": "A single volume containing all four Vedas, which are the oldest scriptures of Hinduism.",
-+ "copy-from": "holybook_bible1"
++ "weight": "540 g",
++ "volume": "1700 ml"
+ },
+ {
+ "id": "holybook_satanic",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
+ "name": { "str": "The Satanic Bible", "str_pl": "copies of The Satanic Bible" },
+ "description": "A collection of essays, observations, and rituals published by Anton LaVey in 1969.",
-+ "copy-from": "holybook_bible1"
-+ },
-+ {
-+ "id": "holybook_havamal",
-+ "type": "BOOK",
-+ "name": { "str": "Hávamál", "str_pl": "copies of Hávamál" },
-+ "description": "An English translation of several Old Norse poems. The poems contain proverbs and stories attributed to the god Odin, many transcribed from oral history.",
-+ "copy-from": "holybook_bible1"
++ "weight": "130 g",
++ "volume": "250 ml"
+ },
+ {
-+ "id": "priest_diary",
++ "id": "holybook_taoism",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
-+ "name": { "str": "priest's diary", "str_pl": "priests' diaries" },
-+ "description": "A small book filled with journal entries in Latin.",
-+ "copy-from": "holybook_bible1",
-+ "price": 1500,
-+ "fun": -1,
-+ "extend": { "flags": [ "MORBID" ] }
++ "name": { "str": "Tao Te Ching", "str_pl": "copies of Tao Te Ching" },
++ "description": "An English translation of the collection of poetry and sayings that guides Taoist thought and actions.",
++ "weight": "513 g"
+ },
+ {
-+ "id": "guidebook",
++ "id": "holybook_confucianism",
++ "copy-from": "holybook_abstract",
+ "type": "BOOK",
-+ "name": { "str": "The Hitchhiker's Guide to the Cataclysm", "str_pl": "copies of The Hitchhiker's Guide to the Cataclysm" },
-+ "description": "Inscribed on the cover in large, friendly letters, is the message \"Don't Panic\".",
-+ "copy-from": "paperback_novel",
-+ "price": 4200
++ "name": { "str": "Lunyu", "str_pl": "copies of the Lunyu" },
++ "description": "An English translation of the most-revered sacred scripture in the Confucian tradition, compiled by the succeeding generations of Confucius's disciples. It is sometimes viewed as a philosophy and sometimes as a religion.",
++ "weight": "513 g"
+ },
+ {
-+ "id": "novel_crime_murdergrape",
++ "id": "holybook_paganism",
++ "copy-from": "holybook_abstract",
++ "//": "ISBN 1-57863-255-2",
+ "type": "BOOK",
-+ "name": { "str": "Murdered by the Grapevine", "str_pl": "copies of Murdered by the Grapevine" },
-+ "description": "This cheap paperback tells the story of a mob boss done in by mere suspicion. She never breaks a confidence, never rats out an accomplice, and never turns her back on a friend. Nonetheless her grip on the reigns of the underworld is eroded by rumor and paranoia.",
-+ "copy-from": "paperback_novel"
-+ },
-+ {
-+ "id": "novel_spy_comefly",
-+ "type": "BOOK",
-+ "name": { "str": "Come Fly the Treacherous Skies", "str_pl": "copies of Come Fly the Treacherous Skies" },
-+ "description": "This tale of intrigue betrays the story of a debonair mechanic driven by a lust for revenge. As she uncovers a sophisticated network of amateur pilots turned smugglers, the good guys and the bad guys begin to all look the same.",
-+ "copy-from": "paperback_novel"
-+ },
-+ {
-+ "id": "novel_spy_rocketsci",
-+ "type": "BOOK",
-+ "name": { "str": "Lies, Damn Lies, and Rocket Science", "str_pl": "copies of Lies, Damn Lies, and Rocket Science" },
-+ "description": "This spy novel tells the story of a jaded rocket scientist looking for redemption in all the wrong places. As selling state secrets becomes her career, she learns there isn't much of difference between a double-agent and a triple-agent.",
-+ "copy-from": "paperback_novel"
-+ },
-+ {
-+ "id": "visions_solitude",
-+ "type": "BOOK",
-+ "name": { "str": "Visions in Solitude", "str_pl": "copies of Visions in Solitude" },
-+ "description": "A small book detailing 'visions' a prisoner had on death row.",
-+ "copy-from": "paperback_novel",
-+ "price": 2900,
-+ "fun": -1,
-+ "flags": [ "MORBID" ]
++ "name": { "str": "Book of Pagan prayer", "str_pl": "copies of Book of Pagan prayer" },
++ "description": "A comprehensive selection of prayers to guide the reader on Pagan and Wiccan worship."
+ },
+ {
-+ "id": "ZSG",
++ "id": "holybook_shamanism",
++ "copy-from": "holybook_abstract",
++ "//": "There's hundreds of shamanistic religions and folk beliefs, we can't model them all.",
+ "type": "BOOK",
-+ "name": { "str": "Zombie Survival Guide", "str_pl": "copies of Zombie Survival Guide" },
-+ "description": "While this seems like it would be very useful in this situation, the sheer amount of misinformation present makes it practically useless.",
-+ "copy-from": "paperback_novel",
-+ "price": 1290
-+ }
-+]
-
---- a/data/json/items/book/misc.json
-+++ b/data/json/items/book/misc.json
-@@ -4,36 +4,46 @@
- "type": "BOOK",
- "name": { "str": "paperback abstract" },
- "description": "An ordinary paperback book. Or is it? It is.",
-- "weight": "371 g",
-- "volume": "700 ml",
-+ "weight": "400 g",
-+ "volume": "750 ml",
- "price": 750,
- "price_postapoc": 50,
- "material": [ "paper" ],
-+ "bashing": 5,
-+ "intelligence": 6,
- "symbol": "?",
- "looks_like": "story_book",
- "color": "light_cyan",
- "flags": [ "TINDER", "FLAMMABLE" ],
-+ "time": "40 m",
-+ "fun": 2
++ "name": { "str": "Book of shamanistic and folk practices", "str_pl": "copies of Book of shamanistic and folk practices" },
++ "description": "A comprehensive book detailing the practices of a single region of shamanistic or folk beliefs."
+ },
+ {
+ "id": "mag_comic",
+ "type": "BOOK",
+ "name": { "str": "comic book" },
+ "description": "A super-hero comic.",
-+ "copy-from": "paperback_novel",
+ "weight": "60 g",
-+ "volume": "200 ml",
-+ "price": 300,
-+ "bashing": 1,
- "intelligence": 4,
- "time": "15 m",
-- "chapters": 16,
-- "fun": 2
-+ "fun": 1
- },
- {
-- "id": "ZSG",
-+ "id": "holybook_bible1",
- "type": "BOOK",
-- "name": { "str": "Zombie Survival Guide", "str_pl": "copies of Zombie Survival Guide" },
-- "description": "While this seems like it would be very useful in this situation, the sheer amount of misinformation present makes it practically useless.",
-- "weight": "227 g",
-- "volume": "1 L",
-- "price": 1290,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "green",
-+ "name": { "str": "King James Bible", "str_pl": "copies of King James Bible" },
-+ "description": "An English translation of the Christian Bible, which originated in England in the early 1600s.",
-+ "copy-from": "paperback_novel",
-+ "price": 550,
-+ "color": "dark_gray",
-+ "time": "40 m",
- "intelligence": 7,
-- "time": "18 m",
-- "chapters": 28,
-- "fun": 2
-+ "fun": 1,
-+ "flags": [ "INSPIRATIONAL" ]
- },
- {
- "id": "black_box_transcript",
-@@ -41,32 +51,18 @@
- "name": { "str": "black box transcript" },
- "//": "ooh, military records, probably Classified!",
- "description": "A full flight log for a military aircraft. Nothing of interest stands out.",
-- "weight": "566 g",
-- "volume": "1250 ml",
-+ "copy-from": "paperback_novel",
- "price": 5000,
-- "price_postapoc": 50,
-- "bashing": 5,
-- "material": [ "paper" ],
-- "symbol": "?",
- "color": "light_green",
-- "intelligence": 8,
-- "time": "30 m",
-- "fun": -1
-+ "fun": -2
- },
- {
- "id": "child_book",
- "type": "BOOK",
- "name": { "str": "children's book" },
- "description": "A little book for little readers. The colorful cartoon characters and sweet stories contained herein belong to a different time, before the dead walked and the world moved on.",
-- "weight": "52 g",
-- "volume": "250 ml",
-+ "copy-from": "paperback_novel",
- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_cyan",
-- "time": "4 m",
-- "chapters": 4,
- "fun": 1
- },
- {
-@@ -74,66 +70,33 @@
- "type": "BOOK",
- "name": { "str_sp": "Ranch Prospectus" },
- "description": "A short paper of the economic viability of constructing an agricultural outpost.",
-- "weight": "1 g",
-- "volume": "250 ml",
-- "price": 3000,
-- "price_postapoc": 50,
-- "bashing": 1,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_cyan",
-- "intelligence": 5,
-- "time": "10 m"
-+ "copy-from": "paperback_novel",
-+ "price": 3000
- },
- {
- "id": "decoy_elfa",
- "type": "BOOK",
- "name": { "str": "standpipe maintenance log" },
- "description": "This binder details the scheduled maintenance for several plumbing systems throughout the facility.",
-- "weight": "400 g",
-- "volume": "750 ml",
-+ "copy-from": "black_box_transcript",
- "price": 400,
-- "price_postapoc": 50,
-- "material": [ "paper", "plastic" ],
-- "symbol": "?",
-- "color": "light_green",
-- "intelligence": 8,
-- "time": "45 m",
-- "fun": -2
-+ "material": [ "paper", "plastic" ]
- },
- {
- "id": "essay_book",
- "type": "BOOK",
- "name": { "str": "book of essays", "str_pl": "books of essays" },
- "description": "A collection of essays by various authors from around the world, including works by Churchill, Mailer, Eco, and Voltaire.",
-- "weight": "700 g",
-- "volume": "750 ml",
-- "price": 1250,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 10,
-- "time": "26 m",
-- "chapters": 40,
-- "fun": 3
-+ "copy-from": "paperback_novel",
-+ "price": 1250
- },
- {
- "id": "fairy_tales",
- "type": "BOOK",
- "name": { "str": "book of fairy tales", "str_pl": "books of fairy tales" },
- "description": "An amusing collection of folklore featuring the usual cast of fairies, goblins, and trolls.",
-- "weight": "410 g",
-- "volume": "750 ml",
-+ "copy-from": "paperback_novel",
- "price": 950,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 6,
-- "time": "18 m",
-- "chapters": 24,
-- "fun": 3,
- "//": "The ids below represent the Aarne-Thompson System of folklore classification. Do not change.",
- "snippet_category": [
- {
-@@ -217,465 +180,54 @@
- ]
- },
- {
-- "id": "guidebook",
-- "type": "BOOK",
-- "name": { "str": "The Hitchhiker's Guide to the Cataclysm", "str_pl": "copies of The Hitchhiker's Guide to the Cataclysm" },
-- "description": "Inscribed on the cover in large, friendly letters, is the message \"Don't Panic\".",
-- "weight": "1764 g",
-- "volume": "1 L",
-- "price": 88200,
-- "price_postapoc": 50,
-- "bashing": 2,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "green",
-- "intelligence": 3,
-- "time": "1 m"
-- },
-- {
-- "id": "mycenacean_hymns",
-- "type": "BOOK",
-- "name": { "str": "Mycenacean Hymns", "str_pl": "copies of Mycenacean Hymns" },
-- "description": "A vellum book containing the hymns central to Marloss faith. As the verses lead to each other, the text sings of unity and promised paradise.",
-- "weight": "368 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "cyan",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_bible1",
-- "type": "BOOK",
-- "name": { "str": "King James Bible", "str_pl": "copies of King James Bible" },
-- "description": "An English translation of the Christian Bible, which originated in England in the early 1600s.",
-- "weight": "368 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_bible2",
-- "type": "BOOK",
-- "name": { "str": "Eastern Orthodox Bible", "str_pl": "copies of Eastern Orthodox Bible" },
-- "description": "An English copy of the Eastern Orthodox translation of The Holy Bible.",
-- "weight": "428 g",
-- "volume": "1250 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_bible3",
-- "type": "BOOK",
-- "name": { "str": "Gideon Bible", "str_pl": "copies of Gideon Bible" },
-- "description": "An English translation of the Christian Bible, distributed free of charge by Gideons International.",
-- "weight": "368 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_granth",
-- "type": "BOOK",
-- "name": { "str": "The Guru Granth Sahib", "str_pl": "copies of The Guru Granth Sahib" },
-- "description": "A single-volume copy of the central religious texts of Sikhism.",
-- "weight": "590 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_hadith",
-- "type": "BOOK",
-- "name": { "str": "Hadith", "str_pl": "copies of Hadith" },
-- "description": "A Muslim religious text containing an account of the sayings and actions of the prophet Muhammad.",
-- "weight": "398 g",
-- "volume": "500 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_kallisti",
-- "type": "BOOK",
-- "name": { "str": "Principia Discordia", "str_pl": "copies of Principia Discordia" },
-- "description": "A book that embodies the main beliefs of Discordianism. It seems to primarily concern chaos, and features a card in the back which informs you that you are now a 'genuine and authorized Pope of Discordia'.",
-- "weight": "292 g",
-- "volume": "150 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_kojiki",
-- "type": "BOOK",
-- "name": { "str": "The Kojiki", "str_pl": "copies of The Kojiki" },
-- "description": "The oldest extant chronicle of Japan's myths and history, the stories contained in the Kojiki are part of the inspiration behind Shinto practices.",
-- "weight": "368 g",
-- "volume": "600 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_mormon",
-- "type": "BOOK",
-- "name": { "str": "The Book of Mormon", "str_pl": "copies of The Book of Mormon" },
-- "description": "The sacred text of the Latter Day Saint movement of Christianity, originally published in 1830 by Joseph Smith.",
-- "weight": "368 g",
-- "volume": "600 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_pastafarian",
-- "type": "BOOK",
-- "name": {
-- "str": "The Gospel of the Flying Spaghetti Monster",
-- "str_pl": "copies of The Gospel of the Flying Spaghetti Monster"
-- },
-- "description": "A book that embodies the main beliefs of the Church of the Flying Spaghetti Monster. It seems to involve a lot of pirates and some sort of invisible drunken monster made of pasta.",
-- "weight": "292 g",
-- "volume": "500 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_quran",
-- "type": "BOOK",
-- "name": { "str": "Quran", "str_pl": "copies of Quran" },
-- "description": "An English translation of the Muslim book of holy scriptures, with explanatory notes and commentaries to aid in understanding.",
-- "weight": "412 g",
-- "volume": "600 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_scientology",
-- "type": "BOOK",
-- "name": { "str": "Dianetics", "str_pl": "copies of Dianetics" },
-- "description": "This book is the canonical text of Scientology. Written by a science fiction author, it contains self-improvement techniques and musings on psychology called Dianetics.",
-- "weight": "486 g",
-- "volume": "1300 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_slack",
-- "type": "BOOK",
-- "name": { "str": "The Book of the SubGenius", "str_pl": "copies of The Book of the SubGenius" },
-- "description": "A book about the Church of the SubGenius. It seems to involve a salesman named J. R. \"Bob\" Dobbs and a concept called 'slack'.",
-- "weight": "292 g",
-- "volume": "600 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_sutras",
-- "type": "BOOK",
-- "name": { "str": "The Sutras of the Buddha", "str_pl": "copies of The Sutras of the Buddha" },
-- "description": "A collection of discourses attributed to the Buddha and his close disciples.",
-- "weight": "496 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_talmud",
-- "type": "BOOK",
-- "name": { "str": "Talmud", "str_pl": "copies of Talmud" },
-- "description": "One of the central texts of Rabbinic Judaism, the Talmud expounds upon the Hebrew Bible with teachings and opinions of thousands of rabbis.",
-- "weight": "460 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_tanakh",
-- "type": "BOOK",
-- "name": { "str": "Tanakh", "str_pl": "copies of Tanakh" },
-- "description": "A single-volume book containing the complete canon of the Jewish Bible.",
-- "weight": "512 g",
-- "volume": "1800 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_tripitaka",
-- "type": "BOOK",
-- "name": { "str": "The Tripitaka", "str_pl": "copies of The Tripitaka" },
-- "description": "A collection of sacred Buddhist writings describing their canons of scriptures.",
-- "weight": "513 g",
-- "volume": "1 L",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_upanishads",
-- "type": "BOOK",
-- "name": { "str": "The Upanishads", "str_pl": "copies of The Upanishads" },
-- "description": "A collection of sacred Hindu writings regarding the nature of reality and describing the character and form of human salvation.",
-- "weight": "482 g",
-- "volume": "750 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_vedas",
-- "type": "BOOK",
-- "name": { "str": "The Four Vedas", "str_pl": "copies of The Four Vedas" },
-- "description": "A single volume containing all four Vedas, which are the oldest scriptures of Hinduism.",
-- "weight": "540 g",
-- "volume": "1700 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "holybook_satanic",
-- "type": "BOOK",
-- "name": { "str": "The Satanic Bible", "str_pl": "copies of The Satanic Bible" },
-- "description": "A collection of essays, observations, and rituals published by Anton LaVey in 1969.",
-- "weight": "130 g",
-- "volume": "250 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-- },
-- {
-- "id": "mag_comic",
-- "type": "BOOK",
-- "name": { "str": "comic book" },
-- "description": "A super-hero comic.",
-- "weight": "60 g",
-- "volume": "250 ml",
-- "price": 300,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_cyan",
-- "time": "7 m",
-- "fun": 2
-- },
-- {
++ "volume": "250 ml",
++ "price": "300 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_cyan",
++ "time": "7 m",
++ "fun": 2
++ },
++ {
"id": "mag_gaming",
"type": "BOOK",
"name": { "str": "Computer Gaming", "str_pl": "issues of Computer Gaming" },
"description": "Reviews of recently released computer games and previews of upcoming titles.",
-- "weight": "60 g",
-- "volume": "250 ml",
-- "price": 300,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "pink",
-- "intelligence": 7,
-- "time": "8 m",
-- "fun": 2
-+ "copy-from": "mag_comic"
+- "copy-from": "mag_comic"
++ "weight": "60 g",
++ "volume": "250 ml",
++ "price": "300 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "pink",
++ "intelligence": 7,
++ "time": "8 m",
++ "fun": 2
},
{
"id": "mag_news",
"type": "BOOK",
"name": { "str": "TIME magazine" },
"description": "Current events concerning a bunch of people who're all (un)dead now.",
-- "weight": "60 g",
-- "volume": "250 ml",
-- "price": 400,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "pink",
-- "intelligence": 7,
-- "time": "10 m",
-- "fun": 2
-+ "copy-from": "mag_comic",
-+ "price": 400
+- "copy-from": "mag_comic",
+- "price": "4 USD"
++ "weight": "60 g",
++ "volume": "250 ml",
++ "price": "400 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "pink",
++ "intelligence": 7,
++ "time": "10 m",
++ "fun": 2
},
{
"id": "mag_porn",
"type": "BOOK",
"name": { "str": "Playboy", "str_pl": "issues of Playboy" },
"description": "You can read it for the articles. Or not.",
-- "weight": "60 g",
-- "volume": "250 ml",
-+ "copy-from": "mag_comic",
- "price": 400,
- "price_postapoc": 250,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "pink",
-- "time": "10 m",
-- "chapters": 4,
-- "fun": 1
-+ "intelligence": 0,
-+ "color": "pink"
+- "copy-from": "mag_comic",
+- "price": "4 USD",
+- "price_postapoc": "250 cent",
+- "intelligence": 0,
+- "color": "pink"
++ "weight": "60 g",
++ "volume": "250 ml",
++ "price": "400 cent",
++ "price_postapoc": 250,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "pink",
++ "time": "10 m",
++ "chapters": 4,
++ "fun": 1
},
{
"id": "necropolis_freq",
"type": "BOOK",
"name": { "str": "frequency list" },
"description": "A notepad with a number of frequencies scribbled on it.",
-- "weight": "1 g",
-- "volume": "250 ml",
-+ "copy-from": "mag_comic",
- "price": 3000,
-- "price_postapoc": 50,
-- "bashing": 1,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_cyan",
-- "intelligence": 2,
-- "time": "10 m"
-+ "fun": -2
+- "copy-from": "mag_comic",
++ "weight": "1 g",
++ "volume": "250 ml",
+ "price": "30 USD",
+- "fun": -2
++ "price_postapoc": "50 cent",
++ "bashing": 1,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_cyan",
++ "intelligence": 2,
++ "time": "10 m"
},
{
"id": "necropolis_datasheet",
++ "copy-from": "necropolis_freq",
"type": "BOOK",
"name": { "str": "reclamation team report" },
- "description": "A short written report on the findings of a team sent to reclaim an underground civil defense shelter. It lists several hazards and technical problems encountered during their exploration of the site, but mentions several military systems they expect could be repaired and used for communication.",
- "copy-from": "necropolis_freq"
+- "description": "A short written report on the findings of a team sent to reclaim an underground civil defense shelter. It lists several hazards and technical problems encountered during their exploration of the site, but mentions several military systems they expect could be repaired and used for communication.",
+- "copy-from": "necropolis_freq"
++ "description": "A short written report on the findings of a team sent to reclaim an underground civil defense shelter. It lists several hazards and technical problems encountered during their exploration of the site, but mentions several military systems they expect could be repaired and used for communication."
},
{
"id": "news_regional",
"type": "BOOK",
"name": { "str": "Rural Digest-Examiner", "str_pl": "issues of Rural Digest-Examiner" },
"description": "A newsweekly covering regional events. There is an article on the winter's snowstorms and several letters to the editor concerning the community response.",
-- "weight": "80 g",
-- "volume": "250 ml",
-- "price": 350,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "pink",
-- "intelligence": 5,
-- "time": "5 m",
-- "fun": 1
-+ "copy-from": "mag_comic",
-+ "price": 350
+- "copy-from": "mag_comic",
+- "price": "350 cent"
++ "weight": "80 g",
++ "volume": "250 ml",
++ "price": "350 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "pink",
++ "intelligence": 5,
++ "time": "5 m",
++ "fun": 1
},
{
"id": "novel_adventure",
-@@ -676,10 +227,7 @@
++ "copy-from": "paperback_novel",
+ "type": "BOOK",
"name": { "str": "adventure novel" },
"description": "The stirring tale of a race against time, in search of a lost city located in the dark heart of the African continent.",
- "copy-from": "paperback_novel",
-- "price": 850,
-- "price_postapoc": 50,
-- "time": "20 m",
-- "fun": 3
-+ "price": 850
+- "copy-from": "paperback_novel",
+- "price": "850 cent"
++ "price": "850 cent",
++ "time": "20 m",
++ "fun": 3
},
{
"id": "novel_buddy",
-@@ -687,158 +235,78 @@
++ "copy-from": "paperback_novel",
+ "type": "BOOK",
"name": { "str": "buddy novel" },
"description": "A gripping tale of two friends struggling to survive on the streets of New York City.",
- "copy-from": "paperback_novel",
-- "weight": "244 g",
-- "volume": "500 ml",
-- "price": 650,
-- "time": "20 m"
-+ "price": 650
+- "copy-from": "paperback_novel",
+- "price": "650 cent"
++ "weight": "244 g",
++ "volume": "500 ml",
++ "price": "650 cent",
++ "time": "20 m"
},
{
"id": "novel_coa",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "coming of age novel" },
"description": "A classic tale about growing up, portraying one young man's funny and poignant experiences with life, love, and sex.",
-- "weight": "187 g",
-- "volume": "500 ml",
-- "price": 750,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 4,
-- "time": "20 m",
-- "chapters": 16,
-- "fun": 2
-- },
-- {
-- "id": "novel_coa2",
-- "type": "BOOK",
-- "name": { "str": "coming of age novel" },
-- "copy-from": "novel_coa",
-- "description": "A graphic novel about a young girl living in Iran during the 1980's, seeing the world change around her as Iraq invaded her country.",
-- "relative": { "time": -4, "chapters": -2, "fun": 1 }
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "187 g",
++ "volume": "500 ml",
++ "time": "20 m",
++ "snippet_category": [
++ {
++ "id": "coa1_1",
++ "text": "A classic tale about growing up, portraying one young man's funny and poignant experiences with life, love, and sex."
++ },
++ {
++ "id": "coa1_2",
++ "text": "A graphic novel about a young girl living in Iran during the 1980's, seeing the world change around her as Iraq invaded her country."
++ }
++ ]
},
{
"id": "novel_crime",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "crime novel" },
"description": "After their diamond heist goes wrong, the surviving criminals begin to suspect that one of them is a police informant.",
-- "weight": "227 g",
-- "volume": "750 ml",
-- "price": 850,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 6,
-- "time": "20 m",
-- "chapters": 24,
-- "fun": 3
-- },
-- {
-- "id": "novel_crime2",
-- "type": "BOOK",
-- "name": { "str": "crime novel" },
-- "copy-from": "novel_crime",
-- "description": "A story about three people in the fictional city of Los Santos, a gangster, an upper-class man, and a psychopath, eventually banding together to pull-off the biggest heist in the city's history",
-- "relative": { "time": -3, "chapters": -3 }
-- },
-- {
-- "id": "novel_crime_murdergrape",
-- "type": "BOOK",
-- "name": { "str": "Murdered by the Grapevine", "str_pl": "copies of Murdered by the Grapevine" },
-- "description": "This cheap paperback tells the story of a mob boss done in by mere suspicion. She never breaks a confidence, never rats out an accomplice, and never turns her back on a friend. Nonetheless her grip on the reigns of the underworld is eroded by rumor and paranoia.",
-- "copy-from": "paperback_novel"
-+ "copy-from": "paperback_novel",
-+ "price": 850
+- "copy-from": "paperback_novel",
+- "price": "850 cent"
++ "weight": "227 g",
++ "volume": "750 ml",
++ "price": "850 cent",
++ "intelligence": 6,
++ "time": "20 m",
++ "chapters": 24,
++ "fun": 3,
++ "snippet_category": [
++ {
++ "id": "crime1_1",
++ "text": "After their diamond heist goes wrong, the surviving criminals begin to suspect that one of them is a police informant."
++ },
++ {
++ "id": "crime1_2",
++ "text": "A story about three people in the fictional city of Los Santos, a gangster, an upper-class man, and a psychopath, eventually banding together to pull-off the biggest heist in the city's history."
++ },
++ {
++ "id": "crime1_3",
++ "text": "This is a copy of Murdered by the Grapevine. This cheap paperback tells the story of a mob boss done in by mere suspicion. She never breaks a confidence, never rats out an accomplice, and never turns her back on a friend. Nonetheless her grip on the reigns of the underworld is eroded by rumor and paranoia."
++ }
++ ]
},
{
"id": "novel_drama",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "drama novel" },
"description": "A real book for real adults.",
-- "copy-from": "paperback_novel",
-- "intelligence": 7,
-- "time": "25 m",
-- "chapters": 28,
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "intelligence": 7,
++ "time": "25 m",
++ "chapters": 28,
++ "fun": 3
},
{
"id": "novel_erotic",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "erotic novel" },
"description": "A hackneyed fictional narrative concealing low-grade literary smut.",
-- "copy-from": "paperback_novel",
-- "weight": "200 g",
-- "volume": "500 ml",
-- "time": "18 m",
-- "chapters": 28
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "200 g",
++ "volume": "500 ml",
++ "time": "18 m",
++ "chapters": 28
},
{
"id": "novel_experimental",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "experimental novel" },
"description": "A bizarre play about the philosophy of existential absurdity. Or maybe it's about two guys waiting for their friend to show up. It's confusing.",
-- "copy-from": "paperback_novel",
-- "weight": "142 g",
-- "volume": "500 ml",
-- "intelligence": 7,
-- "time": "20 m",
-- "chapters": 20
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "142 g",
++ "volume": "500 ml",
++ "intelligence": 7,
++ "time": "20 m",
++ "chapters": 20
},
{
"id": "novel_fantasy",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "fantasy novel" },
"description": "Basic sword & sorcery.",
-- "copy-from": "paperback_novel",
-- "weight": "227 g",
-- "volume": "1 L",
-- "intelligence": 7,
-- "time": "20 m",
-- "chapters": 28,
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "227 g",
++ "volume": "1 L",
++ "intelligence": 7,
++ "time": "20 m",
++ "chapters": 28,
++ "fun": 3
},
{
"id": "novel_horror",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "horror novel" },
"description": "Maybe not the best reading material considering the situation.",
-- "copy-from": "paperback_novel",
-- "weight": "227 g",
-- "intelligence": 7,
-- "time": "18 m",
-- "chapters": 28
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "227 g",
++ "intelligence": 7,
++ "time": "18 m",
++ "chapters": 28
},
{
"id": "novel_mystery",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "mystery novel" },
"description": "A detective investigates an unusual murder in a secluded location.",
-- "copy-from": "paperback_novel",
-- "intelligence": 7,
-- "time": "18 m",
-- "chapters": 28,
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "intelligence": 7,
++ "time": "18 m",
++ "chapters": 28,
++ "fun": 3
},
{
"id": "novel_pulp",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "pulp novel" },
"description": "A hardboiled detective tale filled with hard hitting action and intrigue.",
-- "copy-from": "paperback_novel",
-- "intelligence": 6,
-- "time": "18 m",
-- "chapters": 24,
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "intelligence": 6,
++ "time": "18 m",
++ "chapters": 24,
++ "fun": 3
},
{
"id": "novel_road",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "road novel" },
"description": "A tale about a group of friends who wander the USA in the 1960s against a backdrop of jazz, poetry and drug use.",
-- "copy-from": "paperback_novel",
-- "weight": "244 g",
-- "volume": "500 ml",
-- "time": "20 m",
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "244 g",
++ "volume": "500 ml",
++ "time": "20 m",
++ "fun": 3
},
{
"id": "novel_romance",
-@@ -852,51 +320,23 @@
++ "copy-from": "paperback_novel",
+ "type": "BOOK",
+ "name": { "str": "romance novel" },
+- "description": "Drama and mild smut.",
+- "copy-from": "paperback_novel"
++ "description": "Drama and mild smut."
+ },
+ {
+ "id": "novel_samurai",
"type": "BOOK",
"name": { "str": "samurai novel" },
"description": "The classic tale of a wandering swordsman who comes to a small settlement and is hired to help the townsfolk defend themselves from a band of marauding outlaws.",
-- "weight": "322 g",
-- "volume": "750 ml",
-- "price": 750,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 7,
-- "time": "20 m",
-- "chapters": 28,
-- "fun": 4
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "322 g",
++ "volume": "750 ml",
++ "price": "750 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 7,
++ "time": "20 m",
++ "chapters": 28,
++ "fun": 4
},
{
"id": "novel_satire",
"type": "BOOK",
"name": { "str": "satire novel" },
"description": "A political satire of the pre-apocalypse world. Looking back on it from this side of Armageddon makes it seem all the more ridiculous.",
-- "weight": "520 g",
-- "volume": "750 ml",
-- "price": 850,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 7,
-- "time": "36 m",
-- "chapters": 28,
-- "fun": 2
-+ "copy-from": "paperback_novel",
-+ "price": 850
+- "copy-from": "paperback_novel",
+- "price": "850 cent"
++ "weight": "520 g",
++ "volume": "750 ml",
++ "price": "850 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 7,
++ "time": "36 m",
++ "chapters": 28,
++ "fun": 2
},
{
"id": "novel_scifi",
"type": "BOOK",
"name": { "str": "scifi novel" },
"description": "Aliens, ray guns, and space ships.",
-- "weight": "227 g",
-- "volume": "750 ml",
-+ "copy-from": "paperback_novel",
- "price": 850,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 6,
-- "time": "20 m",
-- "chapters": 24,
-- "fun": 3,
+- "copy-from": "paperback_novel",
++ "weight": "227 g",
++ "volume": "750 ml",
+ "price": "850 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 6,
++ "time": "20 m",
++ "chapters": 24,
++ "fun": 3,
"snippet_category": [
{
"id": "scifi1_1",
-@@ -1047,35 +487,13 @@
+@@ -492,59 +935,111 @@
+ },
+ {
+ "id": "novel_sports",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "sports novel" },
"description": "The dramatic tale of a small-time boxer who gets a rare chance to fight the heavy-weight champion, and seize his one chance to make a better life for himself while impressing the cute girl who works in the pet store.",
-- "copy-from": "paperback_novel",
-- "intelligence": 7,
-- "time": "20 m",
-- "chapters": 28,
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "intelligence": 7,
++ "time": "20 m",
++ "chapters": 28,
++ "fun": 3
},
{
"id": "novel_spy",
"type": "BOOK",
"name": { "str": "spy novel" },
"description": "A tale of intrigue and espionage amongst Nazis, no, Commies, no, Iraqis!",
-- "copy-from": "paperback_novel",
-- "intelligence": 5,
-- "time": "18 m",
-- "chapters": 20,
-- "fun": 3
-- },
-- {
-- "id": "novel_spy_comefly",
-- "type": "BOOK",
-- "name": { "str": "Come Fly the Treacherous Skies", "str_pl": "copies of Come Fly the Treacherous Skies" },
-- "description": "This tale of intrigue betrays the story of a debonair mechanic driven by a lust for revenge. As she uncovers a sophisticated network of amateur pilots turned smugglers, the good guys and the bad guys begin to all look the same.",
- "copy-from": "paperback_novel"
-- },
-- {
-- "id": "novel_spy_rocketsci",
-- "type": "BOOK",
-- "name": { "str": "Lies, Damn Lies, and Rocket Science", "str_pl": "copies of Lies, Damn Lies, and Rocket Science" },
-- "description": "This spy novel tells the story of a jaded rocket scientist looking for redemption in all the wrong places. As selling state secrets becomes her career, she learns there isn't much of difference between a double-agent and a triple-agent.",
- "copy-from": "paperback_novel"
++ "copy-from": "paperback_novel",
++ "intelligence": 5,
++ "time": "18 m",
++ "chapters": 20,
++ "fun": 3,
++ "snippet_category": [
++ { "id": "spy1_1", "text": "A tale of intrigue and espionage amongst Nazis, no, Commies, no, Iraqis!" },
++ {
++ "id": "spy1_2",
++ "text": "This is a copy of Come Fly the Treacherous Skies. A tale of intrigue betrays the story of a debonair mechanic driven by a lust for revenge. As she uncovers a sophisticated network of amateur pilots turned smugglers, the good guys and the bad guys begin to all look the same."
++ },
++ {
++ "id": "spy1_3",
++ "text": "This is a copy of Lies, Damn Lies, and Rocket Science. This spy novel tells the story of a jaded rocket scientist looking for redemption in all the wrong places. As selling state secrets becomes her career, she learns there isn't much of difference between a double-agent and a triple-agent."
++ }
++ ]
},
{
-@@ -1083,74 +501,42 @@
+ "id": "novel_swash",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "swashbuckling novel" },
"description": "An exciting seventeenth century tale of how an enslaved Irish doctor and his comrades-in-chains escape and become heroic pirates of the Robin Hood variety.",
-- "weight": "582 g",
-- "volume": "750 ml",
-- "copy-from": "paperback_novel",
-- "intelligence": 7,
-- "time": "20 m",
-- "chapters": 28,
-- "fun": 4
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "582 g",
++ "volume": "750 ml",
++ "intelligence": 7,
++ "time": "20 m",
++ "chapters": 28,
++ "fun": 4
},
{
"id": "novel_thriller",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "thriller novel" },
"description": "A suspenseful tale of betrayal and revenge.",
-- "copy-from": "paperback_novel",
-- "intelligence": 5,
-- "time": "18 m",
-- "chapters": 20,
-- "fun": 3
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "intelligence": 5,
++ "time": "18 m",
++ "chapters": 20,
++ "fun": 3
},
{
"id": "novel_tragedy",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "tragedy novel" },
"description": "The story of two young lovers whose feuding families threaten to keep them apart.",
-- "copy-from": "paperback_novel",
-- "weight": "263 g",
-- "volume": "1 L",
-- "intelligence": 7,
-- "time": "18 m",
-- "chapters": 28
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "263 g",
++ "volume": "1 L",
++ "intelligence": 7,
++ "time": "18 m",
++ "chapters": 28
},
{
"id": "novel_war",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "war novel" },
"description": "A thrilling narrative of survival in a prisoner of war camp during the Second World War, filled with riveting subplots about rat farming and dysentery.",
-- "copy-from": "paperback_novel",
-- "weight": "686 g",
-- "price_postapoc": 50,
-- "intelligence": 7,
-- "time": "20 m",
-- "chapters": 28,
-- "fun": 3
-- },
-- {
-- "id": "novel_war2",
-- "type": "BOOK",
-- "name": { "str": "war novel" },
-- "copy-from": "novel_war",
-- "description": "A story about a Bosnian citizen who goes through many hardships and near death during the breakup of Yugoslavia.",
-- "relative": { "time": -4, "chapters": -4 }
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "weight": "686 g",
++ "intelligence": 7,
++ "time": "20 m",
++ "chapters": 28,
++ "fun": 3,
++ "snippet_category": [
++ {
++ "id": "war1_1",
++ "text": "A thrilling narrative of survival in a prisoner of war camp during the Second World War, filled with riveting subplots about rat farming and dysentery."
++ },
++ {
++ "id": "war1_2",
++ "text": "A story about a Bosnian citizen who goes through many hardships and near death during the breakup of Yugoslavia."
++ }
++ ]
},
{
"id": "novel_western",
++ "copy-from": "paperback_novel",
"type": "BOOK",
"name": { "str": "western novel" },
"description": "The classic tale of a gunfighting stranger who comes to a small settlement and is hired to help the townsfolk defend themselves from a band of marauding outlaws.",
-- "copy-from": "paperback_novel",
-- "intelligence": 5,
-- "time": "20 m",
-- "chapters": 28,
-- "fun": 4
-+ "copy-from": "paperback_novel"
+- "copy-from": "paperback_novel"
++ "intelligence": 5,
++ "time": "20 m",
++ "chapters": 28,
++ "fun": 4
},
{
"id": "philosophy_book",
"type": "BOOK",
"name": { "str": "book of philosophy", "str_pl": "books of philosophy" },
"description": "A deep discussion of morality with an emphasis on epistemology and logic.",
-+ "copy-from": "paperback_novel",
+- "copy-from": "paperback_novel",
"snippet_category": [
{
"id": "philosophy1",
-@@ -1300,231 +686,92 @@
+@@ -694,59 +1189,137 @@
},
{ "id": "philosophy45", "text": "This is a copy of \"Anti-Capitalist Mentality\" by Ludwig von Mises." }
],
-- "weight": "350 g",
-- "volume": "750 ml",
-- "price": 1250,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 9,
-- "time": "36 m",
-- "chapters": 44,
-- "fun": 3
-+ "price": 1250
+- "price": "1250 cent"
++ "weight": "350 g",
++ "volume": "750 ml",
++ "price": "1250 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 9,
++ "time": "36 m",
++ "chapters": 44,
++ "fun": 3
},
{
"id": "phonebook",
"type": "BOOK",
"name": { "str": "phone book" },
"description": "This hefty volume contains the telephone numbers of individuals, businesses, and utilities in the nearby area, pretty useless during the apocalypse and all.",
-- "weight": "854 g",
-- "volume": "2500 ml",
-- "price": 800,
-- "price_postapoc": 50,
-- "bashing": 2,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "yellow",
-- "intelligence": 4,
-- "time": "1 m",
-- "chapters": 200,
-- "fun": -5
-+ "copy-from": "black_box_transcript",
-+ "weight": "2 kg",
-+ "volume": "1500 ml",
-+ "price": 800
+- "copy-from": "black_box_transcript",
+- "weight": "2 kg",
+- "volume": "1500 ml",
+- "price": "8 USD"
++ "weight": "854 g",
++ "volume": "2500 ml",
++ "price": "8 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 2,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "yellow",
++ "intelligence": 4,
++ "time": "1 m",
++ "chapters": 200,
++ "fun": -5
},
{
"id": "photo_album",
"type": "BOOK",
"name": { "str": "photo album" },
"description": "A leather album full of photos of somebody's family. You don't know any of the people in them, but seeing these pictures still makes you think of happier times.",
-- "weight": "180 g",
-- "volume": "250 ml",
-+ "copy-from": "paperback_novel",
- "price": 3000,
-- "price_postapoc": 50,
+- "copy-from": "paperback_novel",
++ "weight": "180 g",
++ "volume": "250 ml",
+ "price": "30 USD",
++ "price_postapoc": "50 cent",
"material": [ "paper", "leather" ],
-- "symbol": "?",
-- "color": "light_gray",
-- "time": "10 m",
-- "chapters": 4,
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-+ "fun": 1
+- "fun": 1
++ "symbol": "?",
++ "color": "light_gray",
++ "time": "10 m",
++ "chapters": 4,
++ "fun": 1,
++ "flags": [ "INSPIRATIONAL" ]
},
{
"id": "plays_book",
"type": "BOOK",
"name": { "str": "book of plays", "str_pl": "books of plays" },
"description": "A collection of plays by various authors from around the world, including scripts by Wilde, Beckett, Checkov, and Shakespeare.",
-- "weight": "700 g",
-- "volume": "750 ml",
-- "price": 1150,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 9,
-- "time": "18 m",
-- "chapters": 36,
-- "fun": 2
-+ "copy-from": "paperback_novel",
-+ "price": 1150
+- "copy-from": "paperback_novel",
+- "price": "1150 cent"
++ "weight": "700 g",
++ "volume": "750 ml",
++ "price": "1150 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 9,
++ "time": "18 m",
++ "chapters": 36,
++ "fun": 2
},
{
"id": "poetry_book",
"type": "BOOK",
"name": { "str": "book of poetry", "str_pl": "books of poetry" },
"description": "A collection of poetry by various authors from around the world, including writings by Dickinson, Goethe, Thoreau, and Yeats.",
-- "weight": "400 g",
-- "volume": "500 ml",
-- "price": 1050,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 9,
-- "time": "18 m",
-- "chapters": 36,
-- "fun": 2
-- },
-- {
-- "id": "priest_diary",
-- "type": "BOOK",
-- "name": { "str": "priest's diary", "str_pl": "priests' diaries" },
-- "description": "A small book filled with journal entries in Latin.",
-- "weight": "340 g",
-- "volume": "750 ml",
-- "price": 1500,
-- "price_postapoc": 50,
-- "bashing": 3,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_gray",
-- "intelligence": 15,
-- "time": "30 m",
-- "fun": -1,
-- "flags": [ "INSPIRATIONAL", "MORBID" ]
-+ "copy-from": "paperback_novel",
-+ "price": 1050
+- "copy-from": "paperback_novel",
+- "price": "1050 cent"
++ "weight": "400 g",
++ "volume": "500 ml",
++ "price": "1050 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 9,
++ "time": "18 m",
++ "chapters": 36,
++ "fun": 2
++ },
++ {
++ "id": "priest_diary",
++ "type": "BOOK",
++ "name": { "str": "priest's diary", "str_pl": "priests' diaries" },
++ "description": "A small book filled with journal entries in Latin.",
++ "weight": "340 g",
++ "volume": "750 ml",
++ "price": "15 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 3,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_gray",
++ "intelligence": 15,
++ "time": "30 m",
++ "fun": -1,
++ "flags": [ "INSPIRATIONAL", "MORBID" ]
},
{
"id": "record_accounting",
"type": "BOOK",
"name": { "str": "corporate accounting ledger" },
"description": "If you knew what to look for something might stand out…",
-- "weight": "566 g",
-- "volume": "1250 ml",
-- "price": 2000,
-- "price_postapoc": 50,
-- "bashing": 5,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_green",
-- "intelligence": 10,
-- "time": "30 m",
-- "fun": -1
-+ "copy-from": "black_box_transcript",
-+ "price": 2000
+- "copy-from": "black_box_transcript",
+- "price": "20 USD"
++ "weight": "566 g",
++ "volume": "1250 ml",
++ "price": "20 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 5,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_green",
++ "intelligence": 10,
++ "time": "30 m",
++ "fun": -1
},
{
"id": "record_patient",
"type": "BOOK",
"name": { "str_sp": "patient treatment records" },
"description": "A massive stack of medical records that contain every gory detail.",
-- "weight": "680 g",
-- "volume": "1500 ml",
-- "price": 500,
-- "price_postapoc": 50,
-- "bashing": 6,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_green",
-- "intelligence": 8,
-- "time": "30 m",
-- "fun": -1,
-- "flags": [ "MORBID" ]
-+ "copy-from": "paperback_novel",
-+ "price": 500,
-+ "fun": -1,
-+ "flags": [ "MORBID" ]
+- "copy-from": "paperback_novel",
++ "weight": "680 g",
++ "volume": "1500 ml",
+ "price": "5 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 6,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_green",
++ "intelligence": 8,
++ "time": "30 m",
+ "fun": -1,
+ "flags": [ "MORBID" ]
},
- {
- "id": "record_weather",
+@@ -755,31 +1328,92 @@
"type": "BOOK",
"name": { "str_sp": "national weather transcripts" },
"description": "Old weather records are about as interesting as a rock.",
-- "weight": "454 g",
-- "volume": "1750 ml",
-- "price": 500,
-- "price_postapoc": 50,
-- "bashing": 7,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_green",
-- "intelligence": 4,
-- "time": "30 m",
-- "fun": -1
-+ "copy-from": "black_box_transcript",
-+ "price": 500
+- "copy-from": "black_box_transcript",
+- "price": "5 USD"
++ "weight": "454 g",
++ "volume": "1750 ml",
++ "price": "5 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 7,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_green",
++ "intelligence": 4,
++ "time": "30 m",
++ "fun": -1
},
{
"id": "story_book",
"type": "BOOK",
"name": { "str": "big book of short stories", "str_pl": "big books of short stories" },
"description": "This humongous volume contains a vast collection of short stories by different authors, spanning a wide variety of topics and genres.",
-- "weight": "1720 g",
-- "volume": "1 L",
-- "price": 1400,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 7,
-- "time": "48 m",
-- "chapters": 28,
-- "fun": 5
-+ "copy-from": "paperback_novel",
-+ "price": 1400
+- "copy-from": "paperback_novel",
+- "price": "14 USD"
++ "weight": "1720 g",
++ "volume": "1 L",
++ "price": "14 USD",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 7,
++ "time": "48 m",
++ "chapters": 28,
++ "fun": 5
},
{
"id": "tall_tales",
"type": "BOOK",
"name": { "str": "book of tall tales", "str_pl": "books of tall tales" },
"description": "An entertaining collection of early American folklore, featuring tales of larger than life individuals and their amazing adventures.",
-- "weight": "360 g",
-- "volume": "750 ml",
-- "price": 1050,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_blue",
-- "intelligence": 6,
-- "time": "18 m",
-- "chapters": 24,
-- "fun": 3
-- },
-- {
-- "id": "visions_solitude",
-- "type": "BOOK",
-- "name": { "str": "Visions in Solitude", "str_pl": "copies of Visions in Solitude" },
-- "description": "A small book detailing 'visions' a prisoner had on death row.",
-- "weight": "227 g",
-- "volume": "750 ml",
-- "price": 2900,
-- "price_postapoc": 50,
-- "bashing": 3,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "light_cyan",
-- "intelligence": 6,
-- "time": "30 m",
-- "fun": 2,
-- "flags": [ "INSPIRATIONAL", "MORBID" ]
-- },
-- {
-- "id": "holybook_havamal",
-- "type": "BOOK",
-- "name": { "str": "Hávamál", "str_pl": "copies of Hávamál" },
-- "description": "An English translation of several Old Norse poems. The poems contain proverbs and stories attributed to the god Odin, many transcribed from oral history.",
-- "weight": "292 g",
-- "volume": "750 ml",
-- "price": 550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "symbol": "?",
-- "color": "dark_gray",
-- "intelligence": 8,
-- "time": "10 m",
-- "fun": 1,
-- "flags": [ "INSPIRATIONAL" ]
-+ "copy-from": "paperback_novel",
-+ "price": 1050
+- "copy-from": "paperback_novel",
+- "price": "1050 cent"
++ "weight": "360 g",
++ "volume": "750 ml",
++ "price": "1050 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_blue",
++ "intelligence": 6,
++ "time": "18 m",
++ "chapters": 24,
++ "fun": 3
++ },
++ {
++ "id": "visions_solitude",
++ "type": "BOOK",
++ "name": { "str": "Visions in Solitude", "str_pl": "copies of Visions in Solitude" },
++ "description": "A small book detailing 'visions' a prisoner had on death row.",
++ "weight": "227 g",
++ "volume": "750 ml",
++ "price": "29 USD",
++ "price_postapoc": "50 cent",
++ "bashing": 3,
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "light_cyan",
++ "intelligence": 6,
++ "time": "30 m",
++ "fun": 2,
++ "flags": [ "INSPIRATIONAL", "MORBID" ]
++ },
++ {
++ "id": "holybook_havamal",
++ "type": "BOOK",
++ "name": { "str": "Hávamál", "str_pl": "copies of Hávamál" },
++ "description": "An English translation of several Old Norse poems. The poems contain proverbs and stories attributed to the god Odin, many transcribed from oral history.",
++ "weight": "292 g",
++ "volume": "750 ml",
++ "price": "550 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "symbol": "?",
++ "color": "dark_gray",
++ "intelligence": 8,
++ "time": "10 m",
++ "fun": 1,
++ "flags": [ "INSPIRATIONAL" ]
},
{
"type": "BOOK",
"id": "classic_literature",
"name": { "str": "book of classic literature", "str_pl": "books of classic literature" },
"description": "A book of classic literature, timeless and enjoyable but a bit dense to read.",
-+ "copy-from": "paperback_novel",
+- "copy-from": "paperback_novel",
"snippet_category": [
{ "id": "classic1", "text": "This is a copy of Dickens' \"Bleak House\"." },
{ "id": "classic2", "text": "This is a copy of \"Great Expectations\" by Charles Dickens." },
-@@ -1622,24 +868,15 @@
- { "id": "classic53", "text": "This is a copy of \"Mr Midshipman Easy\" by Frederick Marryat." },
- { "id": "classic54", "text": "This is a copy of \"Peter Simple\" by Frederick Marryat." }
+@@ -805,84 +1439,97 @@
+ },
+ {
+ "id": "classic14",
+- "text": "This is a copy of \"Jane Eyre\". The cover art is quite out of place, making it look more like a dime-store romance novel."
++ "text": "This is a paperback copy of the well-known classic \"Dark Days Ahead\", by K. G. Ranade. There are scrawled margin notes all over it, apparently the workings of a confused and feverish mind."
+ },
+ {
+ "id": "classic15",
+- "text": "This is a perfectly preserved hardcover copy of \"The Gunslinger\" by Stephen King, autographed by the author. It contains a certificate of authenticity pronouncing it to be a first edition."
++ "text": "This is a copy of \"Jane Eyre\". The cover art is quite out of place, making it look more like a dime-store romance novel."
+ },
+ {
+ "id": "classic16",
+- "text": "This paperback copy of \"Wuthering Heights\" has a large coffee stain on the first page."
++ "text": "This is a perfectly preserved hardcover copy of \"The Gunslinger\" by Stephen King, autographed by the author. It contains a certificate of authenticity pronouncing it to be a first edition."
+ },
+ {
+ "id": "classic17",
+- "text": "This is a hardbound copy of \"Lady Chatterly's Lover\", by D. H. Lawrence. It has some very explicit illustrations."
++ "text": "This paperback copy of \"Wuthering Heights\" has a large coffee stain on the first page."
+ },
+ {
+ "id": "classic18",
+- "text": "This is a hardbound copy of \"The Catcher in the Rye.\". It has some very nicely done illustrations."
++ "text": "This is a hardbound copy of \"Lady Chatterly's Lover\", by D. H. Lawrence. It has some very explicit illustrations."
+ },
+ {
+ "id": "classic19",
++ "text": "This is a hardbound copy of \"The Catcher in the Rye.\". It has some very nicely done illustrations."
++ },
++ {
++ "id": "classic20",
+ "text": "This is a collection of classic renaissance era stories, headlined by \"Don Quixote\"."
+ },
+- { "id": "classic20", "text": "This is a paperback copy of \"The Fellowship of the Ring\" by Tolkien." },
+- { "id": "classic21", "text": "This is a paperback copy of \"The Two Towers\" by Tolkien." },
+- { "id": "classic22", "text": "This is a paperback copy of \"The Return of the King\" by Tolkien." },
++ { "id": "classic21", "text": "This is a paperback copy of \"The Fellowship of the Ring\" by Tolkien." },
++ { "id": "classic22", "text": "This is a paperback copy of \"The Two Towers\" by Tolkien." },
++ { "id": "classic23", "text": "This is a paperback copy of \"The Return of the King\" by Tolkien." },
+ {
+- "id": "classic23",
++ "id": "classic24",
+ "text": "This is a hardbound collection of George Orwell's works, including \"1984\" and \"Animal Farm\" as well as many of his less infamous titles."
+ },
+ {
+- "id": "classic24",
++ "id": "classic25",
+ "text": "This is a paperback copy of \"Little Women\" by Louisa May Alcott. It appears to have been read a great many times."
+ },
+- { "id": "classic25", "text": "This is a paperback copy of \"Of Mice and Men\" by Steinbeck." },
++ { "id": "classic26", "text": "This is a paperback copy of \"Of Mice and Men\" by Steinbeck." },
+ {
+- "id": "classic26",
++ "id": "classic27",
+ "text": "This is a hefty hardcover copy of \"Run and Run Again\" by Finn Calpay. There is a lengthy forward about the controversy around the book's release."
+ },
+ {
+- "id": "classic27",
++ "id": "classic28",
+ "text": "This is a hardcover copy of \"The Gates Have Opened\" by Arianna Methusalah. You feel like you've read this before, but can't remember where. Something about the book fills you with unease."
+ },
+- { "id": "classic28", "text": "This is a copy of \"The Count of Monte Cristo\" by Dumas." },
+- { "id": "classic29", "text": "This is a copy of \"The Secret Garden\" by Frances Burnett." },
+- { "id": "classic30", "text": "This is a copy of \"Lieutenant Hornblower\" by C.S. Forester." },
+- { "id": "classic31", "text": "This is a copy of \"Master and Commander\" by Patrick O'Brian." },
+- { "id": "classic32", "text": "This is a copy of \"The Warden\" by Anthony Trollope." },
+- { "id": "classic33", "text": "This is a copy of \"The Far Side of the World\" by Patrick O'Brian." },
+- { "id": "classic34", "text": "This is a copy of \"HMS Surprise\" by Patrick O'Brian." },
+- { "id": "classic35", "text": "This is a copy of \"Barchester Towers\" by Anthony Trollope." },
+- { "id": "classic36", "text": "This is a copy of \"The Land Ironclads\" by H.G. Wells." },
+- { "id": "classic37", "text": "This is a copy of \"The Great Boer War\" by Arthur Conan Doyle." },
+- { "id": "classic38", "text": "This is a copy of \"The Crime of the Congo\" by Arthur Conan Doyle." },
+- { "id": "classic39", "text": "This is a copy of \"The Parasite\" by Arthur Conan Doyle." },
+- { "id": "classic40", "text": "This is a copy of \"By Stroke of Sword\" by Andrew Balfour." },
+- { "id": "classic41", "text": "This is a copy of \"The Secret Agent\" by Joseph Conrad." },
+- { "id": "classic42", "text": "This is a copy of \"Lord Jim\" by Joseph Conrad." },
+- { "id": "classic43", "text": "This is a copy of \"Vanity Fair\" by William Makepeace Thackeray." },
+- { "id": "classic44", "text": "This is a copy of \"The Luck of Barry Lyndon\" by William Makepeace Thackeray." },
+- { "id": "classic45", "text": "This is a copy of \"North and South\" by Elizabeth Gaskell." },
+- { "id": "classic46", "text": "This is a copy of \"The Mayor of Casterbridge\" by Thomas Hardy." },
+- { "id": "classic47", "text": "This is a copy of \"Wessex Tales\" by Thomas Hardy." },
+- { "id": "classic48", "text": "This is a copy of \"Far from the Madding Crowd\" by Thomas Hardy." },
+- { "id": "classic49", "text": "This is a copy of \"Captains Courageous\" by Rudyard Kipling." },
+- { "id": "classic50", "text": "This is a copy of \"The Canterbury Tales\" by Geoffrey Chaucer." },
+- { "id": "classic51", "text": "This is a copy of \"Harold, the Last of the Saxons\" by Edward Bulwer-Lytton." },
+- { "id": "classic52", "text": "This is a copy of \"Mr Midshipman Easy\" by Frederick Marryat." },
+- { "id": "classic53", "text": "This is a copy of \"Peter Simple\" by Frederick Marryat." }
++ { "id": "classic29", "text": "This is a copy of \"The Count of Monte Cristo\" by Dumas." },
++ { "id": "classic30", "text": "This is a copy of \"The Secret Garden\" by Frances Burnett." },
++ { "id": "classic31", "text": "This is a copy of \"Lieutenant Hornblower\" by C.S. Forester." },
++ { "id": "classic32", "text": "This is a copy of \"Master and Commander\" by Patrick O'Brian." },
++ { "id": "classic33", "text": "This is a copy of \"The Warden\" by Anthony Trollope." },
++ { "id": "classic34", "text": "This is a copy of \"The Far Side of the World\" by Patrick O'Brian." },
++ { "id": "classic35", "text": "This is a copy of \"HMS Surprise\" by Patrick O'Brian." },
++ { "id": "classic36", "text": "This is a copy of \"Barchester Towers\" by Anthony Trollope." },
++ { "id": "classic37", "text": "This is a copy of \"The Land Ironclads\" by H.G. Wells." },
++ { "id": "classic38", "text": "This is a copy of \"The Great Boer War\" by Arthur Conan Doyle." },
++ { "id": "classic39", "text": "This is a copy of \"The Crime of the Congo\" by Arthur Conan Doyle." },
++ { "id": "classic40", "text": "This is a copy of \"The Parasite\" by Arthur Conan Doyle." },
++ { "id": "classic41", "text": "This is a copy of \"By Stroke of Sword\" by Andrew Balfour." },
++ { "id": "classic42", "text": "This is a copy of \"The Secret Agent\" by Joseph Conrad." },
++ { "id": "classic43", "text": "This is a copy of \"Lord Jim\" by Joseph Conrad." },
++ { "id": "classic44", "text": "This is a copy of \"Vanity Fair\" by William Makepeace Thackeray." },
++ { "id": "classic45", "text": "This is a copy of \"The Luck of Barry Lyndon\" by William Makepeace Thackeray." },
++ { "id": "classic46", "text": "This is a copy of \"North and South\" by Elizabeth Gaskell." },
++ { "id": "classic47", "text": "This is a copy of \"The Mayor of Casterbridge\" by Thomas Hardy." },
++ { "id": "classic48", "text": "This is a copy of \"Wessex Tales\" by Thomas Hardy." },
++ { "id": "classic49", "text": "This is a copy of \"Far from the Madding Crowd\" by Thomas Hardy." },
++ { "id": "classic50", "text": "This is a copy of \"Captains Courageous\" by Rudyard Kipling." },
++ { "id": "classic51", "text": "This is a copy of \"The Canterbury Tales\" by Geoffrey Chaucer." },
++ { "id": "classic52", "text": "This is a copy of \"Harold, the Last of the Saxons\" by Edward Bulwer-Lytton." },
++ { "id": "classic53", "text": "This is a copy of \"Mr Midshipman Easy\" by Frederick Marryat." },
++ { "id": "classic54", "text": "This is a copy of \"Peter Simple\" by Frederick Marryat." }
],
-- "weight": "350 g",
-- "volume": "750 ml",
- "price": 2000,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
-- "looks_like": "tall_tales",
-- "color": "light_blue",
-- "symbol": "?",
-- "intelligence": 7,
-- "time": "28 m",
-- "chapters": 40,
-- "fun": 3
-+ "looks_like": "tall_tales"
++ "weight": "350 g",
++ "volume": "750 ml",
+ "price": "20 USD",
+- "looks_like": "tall_tales"
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
++ "looks_like": "tall_tales",
++ "color": "light_blue",
++ "symbol": "?",
++ "intelligence": 7,
++ "time": "28 m",
++ "chapters": 40,
++ "fun": 3
},
{
"type": "BOOK",
"id": "collector_book",
"name": { "str": "collector's edition book" },
"description": "A unique, valuable book that has been kept as a collector's item.",
-+ "copy-from": "paperback_novel",
+- "copy-from": "paperback_novel",
"snippet_category": [
{ "id": "fancy1", "text": "This is a high-quality leather bound copy of Charles Dickens' \"A Tale of Two Cities\"." },
{ "id": "fancy2", "text": "This is a very old but well-preserved copy of Charles Dickens' \"Oliver Twist\"." },
-@@ -1717,17 +954,8 @@
+@@ -929,36 +1576,49 @@
+ },
+ {
+ "id": "fancy14",
+- "text": "This is a well-kept leather bound copy of \"Oryx and Crake\" by Margaret Atwood. Inscribed in the inner cover is a faded note wishing the owner a happy birthday."
++ "text": "This is a high-quality leather bound copy of the well-known classic \"Dark Days Ahead\", by K. G. Ranade."
+ },
+ {
+ "id": "fancy15",
+- "text": "This is a perfectly preserved hardcover copy of \"The Gunslinger\" by Stephen King, autographed by the author. It contains a certificate of authenticity pronouncing it to be a first edition."
++ "text": "This is a well-kept leather bound copy of \"Oryx and Crake\" by Margaret Atwood. Inscribed in the inner cover is a faded note wishing the owner a happy birthday."
+ },
+ {
+ "id": "fancy16",
+- "text": "This bright orange hardcover copy of \"1984\" by George Orwell has been carefully preserved, and appears to be a first or second edition judging from the publisher's information."
++ "text": "This is a perfectly preserved hardcover copy of \"The Gunslinger\" by Stephen King, autographed by the author. It contains a certificate of authenticity pronouncing it to be a first edition."
+ },
+ {
+ "id": "fancy17",
+- "text": "This is a very nice copy of \"Lady Chatterly's Lover\", probably quite expensive in the days before the apocalypse."
++ "text": "This bright orange hardcover copy of \"1984\" by George Orwell has been carefully preserved, and appears to be a first or second edition judging from the publisher's information."
+ },
+ {
+ "id": "fancy18",
+- "text": "This is a high quality early edition hardcover copy of \"The Handmaid's Tale\" by Margaret Atwood, signed by the author."
++ "text": "This is a very nice copy of \"Lady Chatterly's Lover\", probably quite expensive in the days before the apocalypse."
+ },
+ {
+ "id": "fancy19",
+- "text": "This ancient and worn book looks to be an 18th or early 19th century handwritten copy of \"Don Quixote\". In the days of book traders it would have been worth an absolute fortune. Now it's either a priceless piece of history, some light reading before bed, or excellent kindling."
++ "text": "This is a high quality early edition hardcover copy of \"The Handmaid's Tale\" by Margaret Atwood, signed by the author."
+ },
+ {
+ "id": "fancy20",
++ "text": "This ancient and worn book looks to be an 18th or early 19th century handwritten copy of \"Don Quixote\". In the days of book traders it would have been worth an absolute fortune. Now it's either a priceless piece of history, some light reading before bed, or excellent kindling."
++ },
++ {
++ "id": "fancy21",
"text": "This is a first edition copy of Terry Pratchett's \"The Colour of Magic\". In the inner cover is a handwritten note that reads \"To Chris, thanks for believing I could do it. Best regards, Terry.\""
}
],
-- "weight": "400 g",
-- "volume": "750 ml",
- "price": 4550,
-- "price_postapoc": 50,
-- "material": [ "paper" ],
++ "weight": "400 g",
++ "volume": "750 ml",
+ "price": "4550 cent",
++ "price_postapoc": "50 cent",
++ "material": [ "paper" ],
"looks_like": "tall_tales",
-- "color": "light_blue",
-- "symbol": "?",
-- "intelligence": 7,
-- "time": "28 m",
-- "chapters": 40,
-- "fun": 4
-+ "fun": 3
- },
- ]
- "id": "sa_cryptology_key",
-
---- a/data/json/obsoletion/items.json
-+++ b/data/json/obsoletion/items.json
-@@ -3408,6 +3408,27 @@
- "symbol": "|",
- "color": "brown"
+- "fun": 3
++ "color": "light_blue",
++ "symbol": "?",
++ "intelligence": 7,
++ "time": "28 m",
++ "chapters": 40,
++ "fun": 4
},
-+ {
-+ "id": "novel_coa2",
-+ "type": "BOOK",
-+ "name": { "str": "coming of age novel" },
-+ "copy-from": "novel_coa",
-+ "description": "A graphic novel about a young girl living in Iran during the 1980's, seeing the world change around her as Iraq invaded her country."
-+ },
-+ {
-+ "id": "novel_crime2",
-+ "type": "BOOK",
-+ "name": { "str": "crime novel" },
-+ "copy-from": "novel_crime",
-+ "description": "A story about three people in the fictional city of Los Santos, a gangster, an upper-class man, and a psychopath, eventually banding together to pull-off the biggest heist in the city's history"
-+ },
-+ {
-+ "id": "novel_war2",
-+ "type": "BOOK",
-+ "name": { "str": "war novel" },
-+ "copy-from": "novel_war",
-+ "description": "A story about a Bosnian citizen who goes through many hardships and near death during the breakup of Yugoslavia."
-+ },
{
- "id": "tanning_hide",
- "type": "GENERIC",
+ "id": "sa_cryptology_key",
diff --git a/revert-04_telescopic-lenses.patch b/revert-04_telescopic-lenses.patch
index bbe4ef7..6a31edb 100644
--- a/revert-04_telescopic-lenses.patch
+++ b/revert-04_telescopic-lenses.patch
@@ -48,6 +48,6 @@
"looks_like": "bio_int_enhancer",
- "description": "An array of high-powered, auto-focusing lenses that replaces much of the material in the inner eye. This fixes any vision problems and allows for an increased vision range akin to binoculars.",
+ "description": "An array of high-powered, auto-focusing lenses that replaces your natural lenses. This fixes any mundane vision problems and allows for an increased vision range akin to binoculars. Once installed they will be impossible to remove, having replaced part of your eyes.",
- "price": 500000,
+ "price": "5 kUSD",
"weight": "100 g",
"difficulty": 5
diff --git a/revert-07.5_Use-bismuth-in-recipes-related-ammo-fixes-2952.patch b/revert-07.5_Use-bismuth-in-recipes-related-ammo-fixes-2952.patch
index 2e3c10b..d123347 100644
--- a/revert-07.5_Use-bismuth-in-recipes-related-ammo-fixes-2952.patch
+++ b/revert-07.5_Use-bismuth-in-recipes-related-ammo-fixes-2952.patch
@@ -12,7 +12,7 @@ index 048d32d35c7..fb2961ab382 100644
--- a/data/json/items/ammo/4570.json
+++ b/data/json/items/ammo/4570.json
@@ -46,5 +46,15 @@
- "price_postapoc": 400,
+ "price_postapoc": "4 USD",
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
"relative": { "range": -8, "damage": { "damage_type": "bullet", "amount": -14, "armor_penetration": -25 }, "recoil": -900 }
+ },
diff --git a/revert-07_Remove-handload-quality-distinction-1481.patch b/revert-07_Remove-handload-quality-distinction-1481.patch
index 6b32344..b9b0786 100644
--- a/revert-07_Remove-handload-quality-distinction-1481.patch
+++ b/revert-07_Remove-handload-quality-distinction-1481.patch
@@ -743,7 +743,7 @@ index 94082b3805..360afcdb1c 100644
--- a/data/json/items/ammo/4570.json
+++ b/data/json/items/ammo/4570.json
@@ -44,45 +44,5 @@
- "price_postapoc": 400,
+ "price_postapoc": "4 USD",
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
"relative": { "range": -8, "damage": { "damage_type": "bullet", "amount": -14, "armor_penetration": -25 }, "recoil": -900 }
- },
@@ -980,7 +980,7 @@ index c1a285cb91..5a8901e578 100644
- "copy-from": "5x50dart",
- "type": "AMMO",
- "name": { "str": "5x50mm flechette, reloaded" },
-- "price_postapoc": 1200,
+- "price_postapoc": "12 USD",
- "description": "Designed to defeat modern body armor, the Rivtech 5x50mm flechette round features a biodegradable sabot and a single, fin-stabilized penetrator.",
- "effects": [ "COOKOFF", "RECYCLED" ],
- "relative": { "range": -15, "dispersion": 40 },
@@ -1011,8 +1011,8 @@ index 7f770d227c..685111f200 100644
--- a/data/json/items/ammo/762.json
+++ b/data/json/items/ammo/762.json
@@ -32,24 +32,5 @@
- "price": 150,
- "price_postapoc": 6800,
+ "price": "150 cent",
+ "price_postapoc": "68 USD",
"relative": { "damage": { "damage_type": "bullet", "amount": 4, "armor_penetration": 2 } }
- },
- {
@@ -1614,7 +1614,7 @@ index a3819132f6..b8c26c57dd 100644
+ "copy-from": "5x50dart",
+ "type": "AMMO",
+ "name": { "str": "5x50mm flechette, reloaded" },
-+ "price_postapoc": 1200,
++ "price_postapoc": "12 USD",
+ "description": "Designed to defeat modern body armor, the Rivtech 5x50mm flechette round features a biodegradable sabot and a single, fin-stabilized penetrator. This one has been hand-reloaded.",
+ "effects": [ "COOKOFF", "RECYCLED" ],
+ "relative": { "range": -15, "dispersion": 40 },
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 d77abe5..925a462 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
@@ -275,8 +275,8 @@ index dba9eb592f6..2b4b7874c51 100644
- "description": "A rubber-tipped tool for unclogging pipes, or a club for an immature survivor.",
- "symbol": "p",
- "color": "red",
-- "price": 800,
-- "price_postapoc": 10,
+- "price": "8 USD",
+- "price_postapoc": "10 cent",
- "weight": "590 g",
- "volume": "2100 ml",
- "//": "the volume is pretty bulky, but this is an old fashioned model.",
@@ -291,8 +291,8 @@ index dba9eb592f6..2b4b7874c51 100644
- "description": "This hollow plastic toilet plunger's bell compresses like an accordion. It is efficient at its intended purpose, and complete rubbish as a weapon.",
- "symbol": "p",
- "color": "black",
-- "price": 1590,
-- "price_postapoc": 10,
+- "price": "1590 cent",
+- "price_postapoc": "10 cent",
- "weight": "680 g",
- "volume": "2400 ml",
- "material": "plastic",
@@ -307,8 +307,8 @@ index dba9eb592f6..2b4b7874c51 100644
- "symbol": "~",
- "color": "white",
- "container": "box_medium",
-- "price": 89,
-- "price_postapoc": 180,
+- "price": "89 cent",
+- "price_postapoc": "180 cent",
- "volume": "250 ml",
- "weight": "227 g",
- "material": "paper",
@@ -345,8 +345,8 @@ index dba9eb592f6..2b4b7874c51 100644
- "description": "Zombies cannot be intimidated or humiliated, so this stiff brush is only useful for scouring toilet bowls.",
- "symbol": "p",
- "color": "white",
-- "price": 1700,
-- "price_postapoc": 0,
+- "price": "17 USD",
+- "price_postapoc": "0 cent",
- "volume": "500 ml",
- "weight": "160 g",
- "material": [ "steel", "plastic" ],
@@ -419,8 +419,8 @@ index f2a8063e7ef..e0a1a36ce29 100644
+ "description": "A rubber-tipped tool for unclogging pipes, or a club for an immature survivor.",
+ "symbol": "p",
+ "color": "red",
-+ "price": 800,
-+ "price_postapoc": 10,
++ "price": "8 USD",
++ "price_postapoc": "10 cent",
+ "weight": "590 g",
+ "volume": "2100 ml",
+ "//": "the volume is pretty bulky, but this is an old fashioned model.",
@@ -435,8 +435,8 @@ index f2a8063e7ef..e0a1a36ce29 100644
+ "description": "This hollow plastic toilet plunger's bell compresses like an accordion. It is efficient at its intended purpose, and complete rubbish as a weapon.",
+ "symbol": "p",
+ "color": "black",
-+ "price": 1590,
-+ "price_postapoc": 10,
++ "price": "1590 cent",
++ "price_postapoc": "10 cent",
+ "weight": "680 g",
+ "volume": "2400 ml",
+ "material": "plastic",
@@ -451,8 +451,8 @@ index f2a8063e7ef..e0a1a36ce29 100644
+ "symbol": "~",
+ "color": "white",
+ "container": "box_medium",
-+ "price": 89,
-+ "price_postapoc": 180,
++ "price": "89 cent",
++ "price_postapoc": "180 cent",
+ "volume": "250 ml",
+ "weight": "227 g",
+ "material": "paper",
@@ -481,8 +481,8 @@ index f2a8063e7ef..e0a1a36ce29 100644
+ "description": "Zombies cannot be intimidated or humiliated, so this stiff brush is only useful for scouring toilet bowls.",
+ "symbol": "p",
+ "color": "white",
-+ "price": 1700,
-+ "price_postapoc": 0,
++ "price": "17 USD",
++ "price_postapoc": "0 cent",
+ "volume": "500 ml",
+ "weight": "160 g",
+ "material": [ "steel", "plastic" ],
diff --git a/revert-12_fix-i18n-metric-bullets-part-1-rename-.223-5.56x45mm.patch b/revert-12_fix-i18n-metric-bullets-part-1-rename-.223-5.56x45mm.patch
index ff6f468..705719a 100644
--- a/revert-12_fix-i18n-metric-bullets-part-1-rename-.223-5.56x45mm.patch
+++ b/revert-12_fix-i18n-metric-bullets-part-1-rename-.223-5.56x45mm.patch
@@ -49,7 +49,7 @@ index beaea0d4e9f..254058920f2 100644
+ "description": ".223 Remington ammunition with 36gr JHP bullets. The .223 round has been very popular with civilian shooters for almost a century, finding use in a wide variety of weapons. It generates lower pressure than 5.56x45mm NATO leading to slightly decreased accuracy and recoil.",
"weight": "12 g",
"volume": "250 ml",
- "price": 280,
+ "price": "280 cent",
@@ -27,7 +27,7 @@
"id": "556",
"copy-from": "223",
@@ -57,8 +57,8 @@ index beaea0d4e9f..254058920f2 100644
- "name": { "str": "5.56 NATO M855A1" },
+ "name": { "str": "5.56x45mm NATO M855A1" },
"description": "5.56x45mm ammunition with a 62gr FMJ bullet containing a steel penetrator. Its light weight, high accuracy, and manageable recoil lead to widespread use in the 20th century and it remains popular among militaries and civilians.",
- "price": 290,
- "price_postapoc": 900,
+ "price": "290 cent",
+ "price_postapoc": "9 USD",
@@ -41,7 +41,7 @@
"id": "556_incendiary",
"copy-from": "556",
@@ -149,7 +149,7 @@ index d197c2cade4..5b754865152 100644
+ "description": "This carbine was developed for military use in the early 21st century. It is damaging and accurate, though its rate of fire is a bit slower than competing 5.56x45mm carbines.",
"weight": "3590 g",
"volume": "2 L",
- "price": 234300,
+ "price": "2343 USD",
@@ -179,7 +179,7 @@
"copy-from": "rifle_auto",
"type": "GUN",
@@ -258,7 +258,7 @@ index 4355e98444f..f90219f33a8 100644
+ "description": "The logical extension of Leadworks' autorevolver series, this massive 'sidearm' fires 5.56x45mm NATO to share ammo with a soldier's rifle. The muzzle flash and report of this 5-shot revolver are incredible, producing ballistics similar to .357 Magnum. Similar to other Leadworks products it doesn't accept third-party modifications.",
"weight": "2370 g",
"volume": "750 ml",
- "price": 267000,
+ "price": "2670 USD",
@@ -3971,7 +3971,7 @@
"id": "reloaded_223",
"copy-from": "223",
diff --git a/revert-13_fix-i18n-metric-bullets-part-2-rename-.308-7.62x51mm.patch b/revert-13_fix-i18n-metric-bullets-part-2-rename-.308-7.62x51mm.patch
index 02e1dd2..1b48c17 100644
--- a/revert-13_fix-i18n-metric-bullets-part-2-rename-.308-7.62x51mm.patch
+++ b/revert-13_fix-i18n-metric-bullets-part-2-rename-.308-7.62x51mm.patch
@@ -114,7 +114,7 @@ index 0bc0eecb631..30c25837e42 100644
+ "description": "A homemade lever-action magazine-fed smoothbore rifle. While still a primitive pipe and 2x4 design, some minor improvements have been made, such as being able to accept G3 compatible magazines, and chambering the more powerful 7.62x51mm (.308) rounds.",
"weight": "2311 g",
"volume": "2 L",
- "price": 10000,
+ "price": "100 USD",
@@ -243,7 +243,7 @@
"copy-from": "rifle_manual",
"type": "GUN",
@@ -123,7 +123,7 @@ index 0bc0eecb631..30c25837e42 100644
+ "description": "A very accurate rifle chambered for the powerful 7.62x51mm (.308) round. Its very low ammo capacity is offset by its accuracy and near-complete lack of recoil.",
"weight": "2993 g",
"volume": "3 L",
- "price": 53000,
+ "price": "530 USD",
@@ -264,7 +264,7 @@
"copy-from": "scar_l",
"type": "GUN",
diff --git a/revert-14_Removed-unrelated-references-2738.patch b/revert-14_Removed-unrelated-references-2738.patch
deleted file mode 100644
index 1b793d7..0000000
--- a/revert-14_Removed-unrelated-references-2738.patch
+++ /dev/null
@@ -1,188 +0,0 @@
-From e1ebb6449aeaa27a841a96a5590b6a5df5d1038d Mon Sep 17 00:00:00 2001
-From: AniDemi <60388907+AniDemi@users.noreply.github.com>
-Date: Mon, 1 May 2023 00:23:09 +0200
-Subject: [PATCH 01/13] Removed unrelated references (#2738)
-
-* Removed references
-
-* Revert id change
-
-* Obsoletion and migration
-
-* Quick fix
-
-* Revert 1
-
-* Revert 2
-
-* Revert 3
----
- data/json/items/book/misc.json | 98 ++++++++++++++++------------------
- 1 file changed, 45 insertions(+), 53 deletions(-)
-
-diff --git a/data/json/items/book/misc.json b/data/json/items/book/misc.json
-index 0c3fb6f8994..3842cf0d27a 100644
---- a/data/json/items/book/misc.json
-+++ b/data/json/items/book/misc.json
-@@ -795,78 +795,74 @@
- },
- {
- "id": "classic14",
-- "text": "This is a paperback copy of the well-known classic \"Dark Days Ahead\", by K. G. Ranade. There are scrawled margin notes all over it, apparently the workings of a confused and feverish mind."
-- },
-- {
-- "id": "classic15",
- "text": "This is a copy of \"Jane Eyre\". The cover art is quite out of place, making it look more like a dime-store romance novel."
- },
- {
-- "id": "classic16",
-+ "id": "classic15",
- "text": "This is a perfectly preserved hardcover copy of \"The Gunslinger\" by Stephen King, autographed by the author. It contains a certificate of authenticity pronouncing it to be a first edition."
- },
- {
-- "id": "classic17",
-+ "id": "classic16",
- "text": "This paperback copy of \"Wuthering Heights\" has a large coffee stain on the first page."
- },
- {
-- "id": "classic18",
-+ "id": "classic17",
- "text": "This is a hardbound copy of \"Lady Chatterly's Lover\", by D. H. Lawrence. It has some very explicit illustrations."
- },
- {
-- "id": "classic19",
-+ "id": "classic18",
- "text": "This is a hardbound copy of \"The Catcher in the Rye.\". It has some very nicely done illustrations."
- },
- {
-- "id": "classic20",
-+ "id": "classic19",
- "text": "This is a collection of classic renaissance era stories, headlined by \"Don Quixote\"."
- },
-- { "id": "classic21", "text": "This is a paperback copy of \"The Fellowship of the Ring\" by Tolkien." },
-- { "id": "classic22", "text": "This is a paperback copy of \"The Two Towers\" by Tolkien." },
-- { "id": "classic23", "text": "This is a paperback copy of \"The Return of the King\" by Tolkien." },
-+ { "id": "classic20", "text": "This is a paperback copy of \"The Fellowship of the Ring\" by Tolkien." },
-+ { "id": "classic21", "text": "This is a paperback copy of \"The Two Towers\" by Tolkien." },
-+ { "id": "classic22", "text": "This is a paperback copy of \"The Return of the King\" by Tolkien." },
- {
-- "id": "classic24",
-+ "id": "classic23",
- "text": "This is a hardbound collection of George Orwell's works, including \"1984\" and \"Animal Farm\" as well as many of his less infamous titles."
- },
- {
-- "id": "classic25",
-+ "id": "classic24",
- "text": "This is a paperback copy of \"Little Women\" by Louisa May Alcott. It appears to have been read a great many times."
- },
-- { "id": "classic26", "text": "This is a paperback copy of \"Of Mice and Men\" by Steinbeck." },
-+ { "id": "classic25", "text": "This is a paperback copy of \"Of Mice and Men\" by Steinbeck." },
- {
-- "id": "classic27",
-+ "id": "classic26",
- "text": "This is a hefty hardcover copy of \"Run and Run Again\" by Finn Calpay. There is a lengthy forward about the controversy around the book's release."
- },
- {
-- "id": "classic28",
-+ "id": "classic27",
- "text": "This is a hardcover copy of \"The Gates Have Opened\" by Arianna Methusalah. You feel like you've read this before, but can't remember where. Something about the book fills you with unease."
- },
-- { "id": "classic29", "text": "This is a copy of \"The Count of Monte Cristo\" by Dumas." },
-- { "id": "classic30", "text": "This is a copy of \"The Secret Garden\" by Frances Burnett." },
-- { "id": "classic31", "text": "This is a copy of \"Lieutenant Hornblower\" by C.S. Forester." },
-- { "id": "classic32", "text": "This is a copy of \"Master and Commander\" by Patrick O'Brian." },
-- { "id": "classic33", "text": "This is a copy of \"The Warden\" by Anthony Trollope." },
-- { "id": "classic34", "text": "This is a copy of \"The Far Side of the World\" by Patrick O'Brian." },
-- { "id": "classic35", "text": "This is a copy of \"HMS Surprise\" by Patrick O'Brian." },
-- { "id": "classic36", "text": "This is a copy of \"Barchester Towers\" by Anthony Trollope." },
-- { "id": "classic37", "text": "This is a copy of \"The Land Ironclads\" by H.G. Wells." },
-- { "id": "classic38", "text": "This is a copy of \"The Great Boer War\" by Arthur Conan Doyle." },
-- { "id": "classic39", "text": "This is a copy of \"The Crime of the Congo\" by Arthur Conan Doyle." },
-- { "id": "classic40", "text": "This is a copy of \"The Parasite\" by Arthur Conan Doyle." },
-- { "id": "classic41", "text": "This is a copy of \"By Stroke of Sword\" by Andrew Balfour." },
-- { "id": "classic42", "text": "This is a copy of \"The Secret Agent\" by Joseph Conrad." },
-- { "id": "classic43", "text": "This is a copy of \"Lord Jim\" by Joseph Conrad." },
-- { "id": "classic44", "text": "This is a copy of \"Vanity Fair\" by William Makepeace Thackeray." },
-- { "id": "classic45", "text": "This is a copy of \"The Luck of Barry Lyndon\" by William Makepeace Thackeray." },
-- { "id": "classic46", "text": "This is a copy of \"North and South\" by Elizabeth Gaskell." },
-- { "id": "classic47", "text": "This is a copy of \"The Mayor of Casterbridge\" by Thomas Hardy." },
-- { "id": "classic48", "text": "This is a copy of \"Wessex Tales\" by Thomas Hardy." },
-- { "id": "classic49", "text": "This is a copy of \"Far from the Madding Crowd\" by Thomas Hardy." },
-- { "id": "classic50", "text": "This is a copy of \"Captains Courageous\" by Rudyard Kipling." },
-- { "id": "classic51", "text": "This is a copy of \"The Canterbury Tales\" by Geoffrey Chaucer." },
-- { "id": "classic52", "text": "This is a copy of \"Harold, the Last of the Saxons\" by Edward Bulwer-Lytton." },
-- { "id": "classic53", "text": "This is a copy of \"Mr Midshipman Easy\" by Frederick Marryat." },
-- { "id": "classic54", "text": "This is a copy of \"Peter Simple\" by Frederick Marryat." }
-+ { "id": "classic28", "text": "This is a copy of \"The Count of Monte Cristo\" by Dumas." },
-+ { "id": "classic29", "text": "This is a copy of \"The Secret Garden\" by Frances Burnett." },
-+ { "id": "classic30", "text": "This is a copy of \"Lieutenant Hornblower\" by C.S. Forester." },
-+ { "id": "classic31", "text": "This is a copy of \"Master and Commander\" by Patrick O'Brian." },
-+ { "id": "classic32", "text": "This is a copy of \"The Warden\" by Anthony Trollope." },
-+ { "id": "classic33", "text": "This is a copy of \"The Far Side of the World\" by Patrick O'Brian." },
-+ { "id": "classic34", "text": "This is a copy of \"HMS Surprise\" by Patrick O'Brian." },
-+ { "id": "classic35", "text": "This is a copy of \"Barchester Towers\" by Anthony Trollope." },
-+ { "id": "classic36", "text": "This is a copy of \"The Land Ironclads\" by H.G. Wells." },
-+ { "id": "classic37", "text": "This is a copy of \"The Great Boer War\" by Arthur Conan Doyle." },
-+ { "id": "classic38", "text": "This is a copy of \"The Crime of the Congo\" by Arthur Conan Doyle." },
-+ { "id": "classic39", "text": "This is a copy of \"The Parasite\" by Arthur Conan Doyle." },
-+ { "id": "classic40", "text": "This is a copy of \"By Stroke of Sword\" by Andrew Balfour." },
-+ { "id": "classic41", "text": "This is a copy of \"The Secret Agent\" by Joseph Conrad." },
-+ { "id": "classic42", "text": "This is a copy of \"Lord Jim\" by Joseph Conrad." },
-+ { "id": "classic43", "text": "This is a copy of \"Vanity Fair\" by William Makepeace Thackeray." },
-+ { "id": "classic44", "text": "This is a copy of \"The Luck of Barry Lyndon\" by William Makepeace Thackeray." },
-+ { "id": "classic45", "text": "This is a copy of \"North and South\" by Elizabeth Gaskell." },
-+ { "id": "classic46", "text": "This is a copy of \"The Mayor of Casterbridge\" by Thomas Hardy." },
-+ { "id": "classic47", "text": "This is a copy of \"Wessex Tales\" by Thomas Hardy." },
-+ { "id": "classic48", "text": "This is a copy of \"Far from the Madding Crowd\" by Thomas Hardy." },
-+ { "id": "classic49", "text": "This is a copy of \"Captains Courageous\" by Rudyard Kipling." },
-+ { "id": "classic50", "text": "This is a copy of \"The Canterbury Tales\" by Geoffrey Chaucer." },
-+ { "id": "classic51", "text": "This is a copy of \"Harold, the Last of the Saxons\" by Edward Bulwer-Lytton." },
-+ { "id": "classic52", "text": "This is a copy of \"Mr Midshipman Easy\" by Frederick Marryat." },
-+ { "id": "classic53", "text": "This is a copy of \"Peter Simple\" by Frederick Marryat." }
- ],
- "price": 2000,
- "looks_like": "tall_tales"
-@@ -923,34 +919,30 @@
- },
- {
- "id": "fancy14",
-- "text": "This is a high-quality leather bound copy of the well-known classic \"Dark Days Ahead\", by K. G. Ranade."
-- },
-- {
-- "id": "fancy15",
- "text": "This is a well-kept leather bound copy of \"Oryx and Crake\" by Margaret Atwood. Inscribed in the inner cover is a faded note wishing the owner a happy birthday."
- },
- {
-- "id": "fancy16",
-+ "id": "fancy15",
- "text": "This is a perfectly preserved hardcover copy of \"The Gunslinger\" by Stephen King, autographed by the author. It contains a certificate of authenticity pronouncing it to be a first edition."
- },
- {
-- "id": "fancy17",
-+ "id": "fancy16",
- "text": "This bright orange hardcover copy of \"1984\" by George Orwell has been carefully preserved, and appears to be a first or second edition judging from the publisher's information."
- },
- {
-- "id": "fancy18",
-+ "id": "fancy17",
- "text": "This is a very nice copy of \"Lady Chatterly's Lover\", probably quite expensive in the days before the apocalypse."
- },
- {
-- "id": "fancy19",
-+ "id": "fancy18",
- "text": "This is a high quality early edition hardcover copy of \"The Handmaid's Tale\" by Margaret Atwood, signed by the author."
- },
- {
-- "id": "fancy20",
-+ "id": "fancy19",
- "text": "This ancient and worn book looks to be an 18th or early 19th century handwritten copy of \"Don Quixote\". In the days of book traders it would have been worth an absolute fortune. Now it's either a priceless piece of history, some light reading before bed, or excellent kindling."
- },
- {
-- "id": "fancy21",
-+ "id": "fancy20",
- "text": "This is a first edition copy of Terry Pratchett's \"The Colour of Magic\". In the inner cover is a handwritten note that reads \"To Chris, thanks for believing I could do it. Best regards, Terry.\""
- }
- ],
---
-2.40.0
-
diff --git a/revert-18-Simplify-broken-limb-mending-3054.patch b/revert-18-Simplify-broken-limb-mending-3054.patch
index 12fba7b..70c1259 100644
--- a/revert-18-Simplify-broken-limb-mending-3054.patch
+++ b/revert-18-Simplify-broken-limb-mending-3054.patch
@@ -123,7 +123,7 @@ index 1fe217b8559..333a471d30e 100644
"category": [ "PLANT", "LIZARD" ],
"healing_awake": 0.66,
"healing_resting": 0.5,
-- "mending_modifier": 4.0
+- "mending_modifier": 4
+ "mending_modifier": 0.5
},
{
@@ -136,10 +136,10 @@ index 1fe217b8559..333a471d30e 100644
"types": [ "HEALING" ],
"prereqs": [ "FASTHEALER2" ],
"category": [ "SLIME", "TROGLOBITE" ],
- "healing_awake": 2.0,
+ "healing_awake": 2,
"healing_resting": 1.5,
-- "mending_modifier": 16.0
-+ "mending_modifier": 1.0
+- "mending_modifier": 16
++ "mending_modifier": 1
},
{
"type": "mutation",
@@ -157,8 +157,8 @@ index 1fe217b8559..333a471d30e 100644
+ "prereqs": [ "FASTHEALER" ],
"threshreq": [ "THRESH_LIZARD" ],
"category": [ "LIZARD" ],
-- "mending_modifier": 20.0
-+ "mending_modifier": 1.0
+- "mending_modifier": 20
++ "mending_modifier": 1
},
{
"type": "mutation",
@@ -369,9 +369,8 @@ index 6cb10461791..761e0785f44 100644
} else if( precise ) {
hp_str = string_format( "%d", current_hp );
} else {
-@@ -8431,11 +8437,6 @@ void Character::apply_damage( Creature *source, bodypart_id hurt, int dam,
- put_into_vehicle_or_drop( *this, item_drop_reason::tumbling, { weapon } );
- i_rem( &weapon );
+@@ -8431,10 +8437,5 @@ void Character::apply_damage( Creature *source, bodypart_id hurt, int dam,
+ put_into_vehicle_or_drop( *this, item_drop_reason::tumbling, remove_primary_weapon() );
}
- if( has_effect( effect_mending, part_to_damage->token ) ) {
- effect &e = get_effect( effect_mending, part_to_damage->token );
@@ -557,9 +556,9 @@ index 36b63dd2bb4..9c31869540d 100644
- if( is_limb_broken( convert_bp( bp ) ) && !has_effect( effect_mending, bp ) &&
+ if( is_limb_broken( convert_bp( bp ).id() ) &&
+ !worn_with_flag( flag_SPLINT, convert_bp( bp ).id() ) &&
- it.covers( convert_bp( bp ).id() ) ) {
+ it->covers( convert_bp( bp ).id() ) ) {
reason = _( "Thanks, I'll wear that now." );
- return !!wear_item( it, false );
+ return wear_item( std::move( it ), false );
diff --git a/src/panels.cpp b/src/panels.cpp
index 41983b82ae5..9c8ae1701bc 100644
--- a/src/panels.cpp
diff --git a/revert-21_fix-Erased-the-npc-Alonso-from-history-the-game-3582.patch b/revert-21_fix-Erased-the-npc-Alonso-from-history-the-game-3582.patch
new file mode 100644
index 0000000..d8974c6
--- /dev/null
+++ b/revert-21_fix-Erased-the-npc-Alonso-from-history-the-game-3582.patch
@@ -0,0 +1,225 @@
+From d0bdffe94a1222aa26e9d6c2952e80f2b760278c Mon Sep 17 00:00:00 2001
+From: AniDemi <60388907+AniDemi@users.noreply.github.com>
+Date: Tue, 7 Nov 2023 02:03:29 +0100
+Subject: [PATCH 063/318] fix: Erased the npc Alonso from history (the game)
+ (#3582)
+
+* Rewrite the records, alonso never existed
+
+* Obsolete npc dialogue
+
+* style(autofix.ci): automated formatting
+
+---------
+
+Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
+---
+ .../mapgen/refugee_center/refugee_center.json | 1 -
+ .../surface_refugees/NPC_Jenny_Forcette.json | 4 +-
+ data/json/obsoletion/npc.json | 58 +++++++++++++++++++
+ .../npc_dialogue.json} | 58 -------------------
+ .../npc_dialogue.json} | 0
+ data/mods/DinoMod/snippets/grave_labels.json | 3 +-
+ data/mods/No_Hope/Mapgen/refugee_center.json | 1 -
+ 7 files changed, 61 insertions(+), 64 deletions(-)
+ rename data/json/{npcs/refugee_center/surface_refugees/NPC_Alonso_Lautrec.json => obsoletion/npc_dialogue.json} (78%)
+ rename data/mods/DinoMod/{NPC/NPC_Alonso_Lautrec.json => obsolete/npc_dialogue.json} (100%)
+
+diff --git a/data/json/mapgen/refugee_center/refugee_center.json b/data/json/mapgen/refugee_center/refugee_center.json
+index fbcc14991b9..ded6de4059c 100644
+--- a/data/json/mapgen/refugee_center/refugee_center.json
++++ b/data/json/mapgen/refugee_center/refugee_center.json
+@@ -137,7 +137,6 @@
+ { "class": "refugee_AleeshaSeward", "x": 35, "y": 7 },
+ { "class": "refugee_PabloNunez", "x": 35, "y": 12 },
+ { "class": "refugee_DanaNunez", "x": 35, "y": 13 },
+- { "class": "refugee_AlonsoLautrec", "x": 40, "y": 23 },
+ { "class": "refugee_MangalpreetSingh", "x": 40, "y": 5 },
+ { "class": "refugee_MandeepSingh", "x": 41, "y": 5 },
+ { "class": "refugee_GuneetSingh", "x": 43, "y": 4 },
+diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Jenny_Forcette.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Jenny_Forcette.json
+index 45ddbb7bbbf..cb5b65dd1ef 100644
+--- a/data/json/npcs/refugee_center/surface_refugees/NPC_Jenny_Forcette.json
++++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Jenny_Forcette.json
+@@ -324,8 +324,8 @@
+ "id": "TALK_REFUGEE_JENNY_Refugees2_Others",
+ "dynamic_line": {
+ "days_since_cataclysm": 80,
+- "yes": "Vanessa… I'm doing my best, I really am, but we just do not get along. One of these days one of us is probably going to brain the other with a tire iron, and I'm just grateful I spend more time around the tire irons. Uyen and Rhyzaea are both excellent people, and I genuinely like them, but I can't stand this ongoing political bullshit they've got going on. Alonso is just a… he's… there's no polite word for what he is. A lot of the others are fine with it, and okay, sure, I guess. John is a walking stereotype, but he's a great poker buddy. I admit I kinda like him.",
+- "no": "Vanessa… well, she's nice, I guess. I gotta say, she kinda drives me nuts, but we're in this together so I try not to be too harsh. Uyen and Rhyzaea both seem to want to run the show here, but I try to stay out of those politics and just focus on building stuff. I don't see much good coming of it. Alonso is fine, he's clearly interested in me, and also in every other single person here. Not my thing, in a group this small. John is a walking stereotype, I imagine there must be more depth to him, but I haven't seen it yet."
++ "yes": "Vanessa… I'm doing my best, I really am, but we just do not get along. One of these days one of us is probably going to brain the other with a tire iron, and I'm just grateful I spend more time around the tire irons. Uyen and Rhyzaea are both excellent people, and I genuinely like them, but I can't stand this ongoing political bullshit they've got going on. John is a walking stereotype, but he's a great poker buddy. I admit I kinda like him.",
++ "no": "Vanessa… well, she's nice, I guess. I gotta say, she kinda drives me nuts, but we're in this together so I try not to be too harsh. Uyen and Rhyzaea both seem to want to run the show here, but I try to stay out of those politics and just focus on building stuff. I don't see much good coming of it. John is a walking stereotype, I imagine there must be more depth to him, but I haven't seen it yet."
+ },
+ "responses": [
+ { "text": "What was it you said earlier?", "topic": "TALK_NONE" },
+diff --git a/data/json/obsoletion/npc.json b/data/json/obsoletion/npc.json
+index 7f067301878..b8560dd46fc 100644
+--- a/data/json/obsoletion/npc.json
++++ b/data/json/obsoletion/npc.json
+@@ -78,5 +78,63 @@
+ { "item": "5x50_100_mag", "count": 2, "charges": 100, "ammo-item": "5x50heavy" },
+ { "item": "5x50heavy", "count": 8 }
+ ]
++ },
++ {
++ "type": "npc",
++ "id": "refugee_AlonsoLautrec",
++ "name_unique": "Alonso Lautrec",
++ "gender": "male",
++ "name_suffix": "refugee",
++ "class": "NC_REFUGEE_Alonso",
++ "attitude": 0,
++ "mission": 7,
++ "chat": "TALK_DONE",
++ "faction": "free_merchants"
++ },
++ {
++ "type": "npc_class",
++ "id": "NC_REFUGEE_Alonso",
++ "name": { "str": "Refugee" },
++ "job_description": "I'm just trying to survive.",
++ "common": false,
++ "//": "Alonso wants to be the town bicycle, but isn't getting as much interest as he'd hoped. He'll trade a morale bonus for condoms.",
++ "bonus_str": { "rng": [ -2, 1 ] },
++ "bonus_dex": { "rng": [ -2, 4 ] },
++ "bonus_int": { "rng": [ -2, 2 ] },
++ "bonus_per": { "rng": [ -2, 2 ] },
++ "worn_override": "REFUGEE_Alonso_worn",
++ "carry_override": "REFUGEE_Alonso_carried",
++ "weapon_override": "REFUGEE_Alonso_wield",
++ "traits": [ { "trait": "PRETTY" }, { "group": "Appearance_demographics" } ],
++ "skills": [
++ { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ 0, -5 ] } ] } ] } },
++ { "skill": "barter", "bonus": { "rng": [ 0, 1 ] } }
++ ]
++ },
++ {
++ "type": "item_group",
++ "id": "REFUGEE_Alonso_worn",
++ "subtype": "collection",
++ "entries": [
++ { "item": "boxer_briefs" },
++ { "item": "socks" },
++ { "item": "tshirt" },
++ { "item": "pants_leather" },
++ { "item": "jacket_leather" },
++ { "item": "fancy_sunglasses" },
++ { "item": "dress_shoes" }
++ ]
++ },
++ {
++ "type": "item_group",
++ "id": "REFUGEE_Alonso_carried",
++ "subtype": "collection",
++ "entries": [ { "item": "mag_porn" }, { "item": "vibrator" }, { "item": "condom" } ]
++ },
++ {
++ "type": "item_group",
++ "id": "REFUGEE_Alonso_wield",
++ "subtype": "collection",
++ "entries": [ { "item": "cudgel" } ]
+ }
+ ]
+diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Alonso_Lautrec.json b/data/json/obsoletion/npc_dialogue.json
+similarity index 78%
+rename from data/json/npcs/refugee_center/surface_refugees/NPC_Alonso_Lautrec.json
+rename to data/json/obsoletion/npc_dialogue.json
+index 136c879b117..459467b71a9 100644
+--- a/data/json/npcs/refugee_center/surface_refugees/NPC_Alonso_Lautrec.json
++++ b/data/json/obsoletion/npc_dialogue.json
+@@ -1,62 +1,4 @@
+ [
+- {
+- "type": "npc",
+- "id": "refugee_AlonsoLautrec",
+- "name_unique": "Alonso Lautrec",
+- "gender": "male",
+- "name_suffix": "refugee",
+- "class": "NC_REFUGEE_Alonso",
+- "attitude": 0,
+- "mission": 7,
+- "chat": "TALK_REFUGEE_Alonso_1",
+- "faction": "free_merchants"
+- },
+- {
+- "type": "npc_class",
+- "id": "NC_REFUGEE_Alonso",
+- "name": { "str": "Refugee" },
+- "job_description": "I'm just trying to survive.",
+- "common": false,
+- "//": "Alonso wants to be the town bicycle, but isn't getting as much interest as he'd hoped. He'll trade a morale bonus for condoms.",
+- "bonus_str": { "rng": [ -2, 1 ] },
+- "bonus_dex": { "rng": [ -2, 4 ] },
+- "bonus_int": { "rng": [ -2, 2 ] },
+- "bonus_per": { "rng": [ -2, 2 ] },
+- "worn_override": "REFUGEE_Alonso_worn",
+- "carry_override": "REFUGEE_Alonso_carried",
+- "weapon_override": "REFUGEE_Alonso_wield",
+- "traits": [ { "trait": "PRETTY" }, { "group": "Appearance_demographics" } ],
+- "skills": [
+- { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ 0, -5 ] } ] } ] } },
+- { "skill": "barter", "bonus": { "rng": [ 0, 1 ] } }
+- ]
+- },
+- {
+- "type": "item_group",
+- "id": "REFUGEE_Alonso_worn",
+- "subtype": "collection",
+- "entries": [
+- { "item": "boxer_briefs" },
+- { "item": "socks" },
+- { "item": "tshirt" },
+- { "item": "pants_leather" },
+- { "item": "jacket_leather" },
+- { "item": "fancy_sunglasses" },
+- { "item": "dress_shoes" }
+- ]
+- },
+- {
+- "type": "item_group",
+- "id": "REFUGEE_Alonso_carried",
+- "subtype": "collection",
+- "entries": [ { "item": "mag_porn" }, { "item": "vibrator" }, { "item": "condom" } ]
+- },
+- {
+- "type": "item_group",
+- "id": "REFUGEE_Alonso_wield",
+- "subtype": "collection",
+- "entries": [ { "item": "cudgel" } ]
+- },
+ {
+ "type": "talk_topic",
+ "//": "common talk responses",
+diff --git a/data/mods/DinoMod/NPC/NPC_Alonso_Lautrec.json b/data/mods/DinoMod/obsolete/npc_dialogue.json
+similarity index 100%
+rename from data/mods/DinoMod/NPC/NPC_Alonso_Lautrec.json
+rename to data/mods/DinoMod/obsolete/npc_dialogue.json
+diff --git a/data/mods/DinoMod/snippets/grave_labels.json b/data/mods/DinoMod/snippets/grave_labels.json
+index 72fdc095b39..c40d3bdb567 100644
+--- a/data/mods/DinoMod/snippets/grave_labels.json
++++ b/data/mods/DinoMod/snippets/grave_labels.json
+@@ -14,8 +14,7 @@
+ "Life did not find a way.",
+ "The greatest dinosaur expert of our times. Crushed to death by an apatosaurus.",
+ "Fool hid in a cardboard box from a deinonychus, shouting Dino Dave! Didn't work.",
+- "Here lies a dinosaur, don't know what kind. Hated shovels.",
+- "Alonso did not know her, but she was beautiful and majestic and she deserved the proper burial. Alonso will remember this dinosaur for some of the time."
++ "Here lies a dinosaur, don't know what kind. Hated shovels."
+ ]
+ }
+ ]
+diff --git a/data/mods/No_Hope/Mapgen/refugee_center.json b/data/mods/No_Hope/Mapgen/refugee_center.json
+index 30f4a0e7374..d848a2ef941 100644
+--- a/data/mods/No_Hope/Mapgen/refugee_center.json
++++ b/data/mods/No_Hope/Mapgen/refugee_center.json
+@@ -137,7 +137,6 @@
+ { "class": "refugee_AleeshaSeward", "x": 35, "y": 7 },
+ { "class": "refugee_PabloNunez", "x": 35, "y": 12 },
+ { "class": "refugee_DanaNunez", "x": 35, "y": 13 },
+- { "class": "refugee_AlonsoLautrec", "x": 40, "y": 23 },
+ { "class": "refugee_MangalpreetSingh", "x": 40, "y": 5 },
+ { "class": "refugee_MandeepSingh", "x": 41, "y": 5 },
+ { "class": "refugee_GuneetSingh", "x": 43, "y": 4 },
+--
+2.42.0
+
diff --git a/revert-22_feat-content-Biodiesel-Fuel-for-Gasoline-Engines-371.patch b/revert-22_feat-content-Biodiesel-Fuel-for-Gasoline-Engines-371.patch
new file mode 100644
index 0000000..9a0d32b
--- /dev/null
+++ b/revert-22_feat-content-Biodiesel-Fuel-for-Gasoline-Engines-371.patch
@@ -0,0 +1,39 @@
+From 1de404eef929a870584e71ea7cc8cf7c50a05963 Mon Sep 17 00:00:00 2001
+From: Chorus System <ohinchy@gmail.com>
+Date: Sat, 18 Nov 2023 19:06:26 -0500
+Subject: [PATCH 139/318] feat(content): Biodiesel Fuel for Gasoline Engines
+ (#3716)
+
+* Added alcohol fuels to engine
+
+Made gasoline and JP8 engines capable of using ethanol, methanol, and denatured alcohol as fuel.
+
+* style(autofix.ci): automated formatting
+
+* Replace ethanol with biodiesel
+
+* style(autofix.ci): automated formatting
+
+---------
+
+Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
+---
+ data/json/vehicleparts/combustion.json | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/json/vehicleparts/combustion.json b/data/json/vehicleparts/combustion.json
+index 2ecedc733b5..8d2d492f47c 100644
+--- a/data/json/vehicleparts/combustion.json
++++ b/data/json/vehicleparts/combustion.json
+@@ -31,7 +31,7 @@
+ "copy-from": "engine_combustion",
+ "type": "vehicle_part",
+ "fuel_type": "gasoline",
+- "fuel_options": [ "gasoline", "avgas", "chem_ethanol" ],
++ "fuel_options": [ "gasoline", "avgas", "biodiesel" ],
+ "//2": "TODO: remove when injectors are implemented",
+ "m2c": 60,
+ "//": "30% energy efficiency",
+--
+2.42.0
+
diff --git a/revert-23_fix-balance-no-more-EXP-gain-when-a-skill-is-maxed-o.patch b/revert-23_fix-balance-no-more-EXP-gain-when-a-skill-is-maxed-o.patch
new file mode 100644
index 0000000..b40bc5e
--- /dev/null
+++ b/revert-23_fix-balance-no-more-EXP-gain-when-a-skill-is-maxed-o.patch
@@ -0,0 +1,48 @@
+From d437a5a6e57cb27bca6685cd88186fd97c372ef8 Mon Sep 17 00:00:00 2001
+From: Chaosvolt <chaosvolt@users.noreply.github.com>
+Date: Thu, 23 Nov 2023 16:31:11 -0600
+Subject: [PATCH 154/318] fix(balance): no more EXP gain when a skill is maxed
+ out (#3720)
+
+---
+ src/character.cpp | 2 +-
+ src/skill.cpp | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/character.cpp b/src/character.cpp
+index 6d8d9335c9c..707cce4f12d 100644
+--- a/src/character.cpp
++++ b/src/character.cpp
+@@ -3920,7 +3920,7 @@ void Character::practice( const skill_id &id, int amount, int cap, bool suppress
+
+ if( !level.can_train() && !in_sleep_state() ) {
+ // If leveling is disabled, don't train, don't drain focus, don't print anything
+- // Leaving as a skill method rather than global for possible future skill cap setting
++ // This also checks if your skill level is maxed out at the cap of 10.
+ return;
+ }
+
+diff --git a/src/skill.cpp b/src/skill.cpp
+index 8964c80487f..5404cb204b1 100644
+--- a/src/skill.cpp
++++ b/src/skill.cpp
+@@ -9,6 +9,7 @@
+
+ #include "cata_utility.h"
+ #include "debug.h"
++#include "game_constants.h"
+ #include "item.h"
+ #include "json.h"
+ #include "options.h"
+@@ -310,7 +311,7 @@ void SkillLevel::readBook( int minimumGain, int maximumGain, int maximumLevel )
+
+ bool SkillLevel::can_train() const
+ {
+- return get_option<float>( "SKILL_TRAINING_SPEED" ) > 0.0;
++ return ( get_option<float>( "SKILL_TRAINING_SPEED" ) > 0.0 && _level < MAX_SKILL );
+ }
+
+ const SkillLevel &SkillLevelMap::get_skill_level_object( const skill_id &ident ) const
+--
+2.42.0
+
diff --git a/revert-24_fix-repair-nanobots-not-working-at-all-on-broken-lim.patch b/revert-24_fix-repair-nanobots-not-working-at-all-on-broken-lim.patch
new file mode 100644
index 0000000..c1de272
--- /dev/null
+++ b/revert-24_fix-repair-nanobots-not-working-at-all-on-broken-lim.patch
@@ -0,0 +1,214 @@
+From 5da2793a2a464a997b19c9b156cdb6baaaacb081 Mon Sep 17 00:00:00 2001
+From: scarf <greenscarf005@gmail.com>
+Date: Wed, 6 Dec 2023 11:35:40 +0900
+Subject: [PATCH 213/318] fix: repair nanobots not working at all on broken
+ limbs (#3787)
+
+fix: make nanobot work regardless of splint
+---
+ data/json/bionics.json | 2 +-
+ data/json/items/bionics.json | 2 +-
+ src/bionics.cpp | 47 ++++++++++++++++++++----------------
+ src/character.cpp | 11 +++------
+ src/regen.cpp | 35 +++++++++++++++++++++++++++
+ src/regen.h | 18 ++++++++++++++
+ 6 files changed, 85 insertions(+), 30 deletions(-)
+ create mode 100644 src/regen.cpp
+ create mode 100644 src/regen.h
+
+diff --git a/data/json/bionics.json b/data/json/bionics.json
+index 2e4b121ce7f..824be5bad23 100644
+--- a/data/json/bionics.json
++++ b/data/json/bionics.json
+@@ -661,7 +661,7 @@
+ "id": "bio_nanobots",
+ "type": "bionic",
+ "name": { "str": "Repair Nanobots" },
+- "description": "Inside your body is a fleet of tiny dormant robots. While activated they will reduce the intensity of one bleed effect every 30 seconds, and heal all injured body parts by 1 HP (or broken limbs by 1%) every 2 minutes if you have 3 kJ bionic power and 5 kcal per body part. Broken limbs must still be splinted (unless you have specific mutations) to benefit. If you don't have enough, they will prioritize based on the resources you have.",
++ "description": "Inside your body is a fleet of tiny dormant robots. While activated they will reduce the intensity of one bleed effect every 30 seconds, and heal all injured body parts by 1 HP (or broken limbs by 1%) every 2 minutes if you have 3 kJ bionic power and 5 kcal per body part. If you don't have enough, they will prioritize based on the resources you have.",
+ "occupied_bodyparts": [ [ "torso", 10 ] ],
+ "flags": [ "BIONIC_TOGGLED", "BIONIC_NPC_USABLE", "BIONIC_SLEEP_FRIENDLY" ],
+ "act_cost": "300 J",
+diff --git a/data/json/items/bionics.json b/data/json/items/bionics.json
+index 8e06717899b..5a5c9e5a037 100644
+--- a/data/json/items/bionics.json
++++ b/data/json/items/bionics.json
+@@ -610,7 +610,7 @@
+ "type": "BIONIC_ITEM",
+ "name": { "str": "Repair Nanobots CBM" },
+ "looks_like": "bio_int_enhancer",
+- "description": "A fleet of tiny dormant robots. While activated they will reduce the intensity of one bleed effect every 30 seconds, and heal all injured body parts by 1 HP (or broken limbs by 1%) every 2 minutes if you have 3 kJ bionic power and 5 kcal per body part. Broken limbs must still be splinted (unless you have specific mutations) to benefit. If you don't have enough, they will prioritize based on the resources you have.",
++ "description": "A fleet of tiny dormant robots. While activated they will reduce the intensity of one bleed effect every 30 seconds, and heal all injured body parts by 1 HP (or broken limbs by 1%) every 2 minutes if you have 3 kJ bionic power and 5 kcal per body part. If you don't have enough, they will prioritize based on the resources you have.",
+ "price": "9500 USD",
+ "weight": "200 g",
+ "difficulty": 6
+diff --git a/src/bionics.cpp b/src/bionics.cpp
+index 63d72584731..28e79490d37 100644
+--- a/src/bionics.cpp
++++ b/src/bionics.cpp
+@@ -68,6 +68,7 @@
+ #include "point.h"
+ #include "projectile.h"
+ #include "requirements.h"
++#include "regen.h"
+ #include "rng.h"
+ #include "sounds.h"
+ #include "string_formatter.h"
+@@ -1662,28 +1663,32 @@ void Character::process_bionic( bionic &bio )
+ }
+ }
+ if( calendar::once_every( 2_minutes ) ) {
+- std::vector<bodypart_id> damaged_hp_parts;
+- for( const bodypart_id &bp : get_all_body_parts( true ) ) {
+- const int hp_cur = get_part_hp_cur( bp );
+- if( !is_limb_broken( bp ) && hp_cur < get_part_hp_max( bp ) ) {
+- damaged_hp_parts.push_back( bp );
+- }
+- }
+- if( !damaged_hp_parts.empty() ) {
+- // Essential parts are considered 10 HP lower than non-essential parts for the purpose of determining priority.
+- // I'd use the essential_value, but it's tied up in the heal_actor class of iuse_actor.
+- std::sort( damaged_hp_parts.begin(), damaged_hp_parts.end(),
+- [this]( const bodypart_id & a, const bodypart_id & b ) {
+- return ( get_part_hp_cur( a ) - a->essential * 10 ) < ( get_part_hp_cur( b ) - b->essential * 10 );
+- } );
+- for( bodypart_id &bpid : damaged_hp_parts ) {
+- if( !can_use_bionic() ) {
+- return;
+- }
+- heal( bpid, 1 );
+- mod_power_level( -bio.info().power_trigger );
+- mod_stored_kcal( -bio.info().kcal_trigger );
++ // Essential parts are considered 10 HP lower than non-essential parts for the purpose of determining priority.
++ // I'd use the essential_value, but it's tied up in the heal_actor class of iuse_actor.
++ const auto effective_hp = [this]( const bodypart_id & bp ) -> int {
++ return get_part_hp_cur( bp ) - bp->essential * 10;
++ };
++ const auto should_heal = [this]( const bodypart_id & bp ) -> bool {
++ return get_part_hp_cur( bp ) < get_part_hp_max( bp );
++ };
++ const auto sort_by = [effective_hp]( const bodypart_id & a, const bodypart_id & b ) -> bool {
++ return effective_hp( a ) < effective_hp( b );
++ };
++ const auto damaged_parts = [this, should_heal, sort_by]() {
++ const auto xs = get_all_body_parts( true );
++ auto ys = std::vector<bodypart_id> {};
++ std::copy_if( xs.begin(), xs.end(), std::back_inserter( ys ), should_heal );
++ std::sort( ys.begin(), ys.end(), sort_by );
++ return ys;
++ };
++
++ for( bodypart_id &bp : damaged_parts() ) {
++ if( !can_use_bionic() ) {
++ return;
+ }
++ heal_adjusted( *this, bp, 1 );
++ mod_power_level( -bio.info().power_trigger );
++ mod_stored_kcal( -bio.info().kcal_trigger );
+ }
+ }
+ }
+diff --git a/src/character.cpp b/src/character.cpp
+index 9b6c15ce40c..25be749aa56 100644
+--- a/src/character.cpp
++++ b/src/character.cpp
+@@ -1,5 +1,4 @@
+ #include "character.h"
+-#include "bodypart.h"
+ #include "character_encumbrance.h"
+
+ #include <algorithm>
+@@ -82,6 +81,7 @@
+ #include "profession.h"
+ #include "recipe_dictionary.h"
+ #include "ret_val.h"
++#include "regen.h"
+ #include "rng.h"
+ #include "scent_map.h"
+ #include "skill.h"
+@@ -5068,14 +5068,11 @@ void Character::regen( int rate_multiplier )
+ float heal_rate = healing_rate( rest ) * to_turns<int>( 5_minutes );
+ const float broken_regen_mod = clamp( mutation_value( "mending_modifier" ), 0.25f, 1.0f );
+ if( heal_rate > 0.0f ) {
+- const int base_heal = roll_remainder( rate_multiplier * heal_rate );
+- const int broken_heal = roll_remainder( base_heal * broken_regen_mod );
++ const int heal = roll_remainder( rate_multiplier * heal_rate );
+
+ for( const bodypart_id &bp : get_all_body_parts() ) {
+- const bool is_broken = is_limb_broken( bp ) &&
+- !worn_with_flag( flag_SPLINT, bp );
+- heal( bp, is_broken ? broken_heal : base_heal );
+- mod_part_healed_total( bp, is_broken ? broken_heal : base_heal );
++ const int actually_healed = heal_adjusted( *this, bp, heal );
++ mod_part_healed_total( bp, actually_healed );
+ }
+ } else if( heal_rate < 0.0f ) {
+ int rot_rate = roll_remainder( rate_multiplier * -heal_rate );
+diff --git a/src/regen.cpp b/src/regen.cpp
+new file mode 100644
+index 00000000000..f8446c4243d
+--- /dev/null
++++ b/src/regen.cpp
+@@ -0,0 +1,35 @@
++#include "regen.h"
++#include "character.h"
++#include "rng.h"
++
++const flag_id flag_SPLINT( "SPLINT" );
++
++namespace
++{
++
++/// Limb is broken without splint
++auto has_broken_limb_penalty( const Character &c, const bodypart_id &bp ) -> bool
++{
++ return c.is_limb_broken( bp )
++ && !c.worn_with_flag( flag_SPLINT, bp );
++}
++
++/// Broken limbs without splint heal slower up to 25%
++auto mending_modifier( const Character &c ) -> float
++{
++ return clamp( c.mutation_value( "mending_modifier" ), 0.25f, 1.0f );
++}
++
++} // namespace
++
++auto heal_adjusted( Character &c, const bodypart_id &bp, const int heal ) -> int
++{
++ const float broken_regen_mod = mending_modifier( c );
++ const int broken_heal = roll_remainder( heal * broken_regen_mod );
++ const bool is_broken = has_broken_limb_penalty( c, bp );
++ const int actual_heal = is_broken ? broken_heal : heal;
++
++ c.heal( bp, actual_heal );
++
++ return actual_heal;
++}
+diff --git a/src/regen.h b/src/regen.h
+new file mode 100644
+index 00000000000..671a8a0e75d
+--- /dev/null
++++ b/src/regen.h
+@@ -0,0 +1,18 @@
++#pragma once
++#ifndef CATA_SRC_REGEN_H
++#define CATA_SRC_REGEN_H
++
++#include "type_id.h"
++
++class Character;
++
++/// like heal, but actually takes account of
++/// - whether limb suffers from being broken without splint
++/// - `mending_modifier`
++///
++/// @return actually healed amount. used for `mod_part_healed_total`
++///
++/// TODO: merge into `Character::heal`?
++auto heal_adjusted( Character &c, const bodypart_id &bp, const int heal ) -> int;
++
++#endif // CATA_SRC_REGEN_H
+--
+2.42.0
+
diff --git a/revert-25_feat-balance-improve-consistency-of-handmade-caseles.patch b/revert-25_feat-balance-improve-consistency-of-handmade-caseles.patch
new file mode 100644
index 0000000..563e693
--- /dev/null
+++ b/revert-25_feat-balance-improve-consistency-of-handmade-caseles.patch
@@ -0,0 +1,133 @@
+From 2af4ddb342e4b947a6682f675d2df2f2477c7d01 Mon Sep 17 00:00:00 2001
+From: YeOldeMiller <36291373+YeOldeMiller@users.noreply.github.com>
+Date: Wed, 13 Dec 2023 06:32:55 +0300
+Subject: [PATCH 251/318] feat(balance): improve consistency of handmade
+ caseless ammo recipes (#3875)
+
+* Improve consistency of handmade caseless ammo recipes
+
+* 8x40 HVP ammo recipe: replace extra metals with flechettes
+
+* Remove nails from 20x66 flechette recipe
+---
+ data/json/recipes/ammo/rifle.json | 21 +++++++++++----------
+ data/json/recipes/ammo/shot.json | 12 +++++++++---
+ 2 files changed, 20 insertions(+), 13 deletions(-)
+
+diff --git a/data/json/recipes/ammo/rifle.json b/data/json/recipes/ammo/rifle.json
+index 64b2d43cdf6..68c1af6aa2d 100644
+--- a/data/json/recipes/ammo/rifle.json
++++ b/data/json/recipes/ammo/rifle.json
+@@ -424,7 +424,7 @@
+ [ "platinum_small", 4 ]
+ ],
+ [ [ "copper", 40 ] ],
+- [ [ "smrifle_primer", 1 ], [ "lgpistol_primer", 1 ] ]
++ [ [ "smrifle_primer", 40 ], [ "lgpistol_primer", 40 ] ]
+ ]
+ },
+ {
+@@ -456,7 +456,7 @@
+ [ "platinum_small", 4 ]
+ ],
+ [ [ "copper", 80 ] ],
+- [ [ "smrifle_primer", 1 ], [ "lgpistol_primer", 1 ] ]
++ [ [ "smrifle_primer", 40 ], [ "lgpistol_primer", 40 ] ]
+ ]
+ },
+ {
+@@ -479,16 +479,17 @@
+ [ [ "gunpowder", 400 ] ],
+ [ [ "oxy_powder", 120 ] ],
+ [ [ "lead", 80 ] ],
++ [ [ "combatnail", 40 ] ],
+ [
+- [ "gold_small", 40 ],
+- [ "silver_small", 40 ],
+- [ "tin", 40 ],
+- [ "bismuth", 40 ],
+- [ "solder_wire", 40 ],
+- [ "platinum_small", 40 ]
++ [ "gold_small", 4 ],
++ [ "silver_small", 4 ],
++ [ "tin", 4 ],
++ [ "bismuth", 4 ],
++ [ "solder_wire", 4 ],
++ [ "platinum_small", 4 ]
+ ],
+ [ [ "copper", 80 ] ],
+- [ [ "smrifle_primer", 1 ], [ "lgpistol_primer", 1 ] ]
++ [ [ "smrifle_primer", 40 ], [ "lgpistol_primer", 40 ] ]
+ ]
+ },
+ {
+@@ -521,7 +522,7 @@
+ [ "platinum_small", 4 ]
+ ],
+ [ [ "copper", 40 ] ],
+- [ [ "smrifle_primer", 1 ], [ "lgpistol_primer", 1 ] ]
++ [ [ "smrifle_primer", 40 ], [ "lgpistol_primer", 40 ] ]
+ ]
+ },
+ {
+diff --git a/data/json/recipes/ammo/shot.json b/data/json/recipes/ammo/shot.json
+index 9caa13c0daf..738d8086014 100644
+--- a/data/json/recipes/ammo/shot.json
++++ b/data/json/recipes/ammo/shot.json
+@@ -652,6 +652,7 @@
+ "skills_required": [ "cooking", 2 ],
+ "difficulty": 8,
+ "time": 45000,
++ "charges": 20,
+ "batch_time_factors": [ 60, 5 ],
+ "book_learn": [ [ "recipe_caseless", 5 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 } ],
+@@ -662,7 +663,8 @@
+ [ [ "oxy_powder", 60 ] ],
+ [ [ "gunpowder", 120 ] ],
+ [ [ "lead", 160 ] ],
+- [ [ "gold_small", 5 ], [ "silver_small", 5 ], [ "tin", 5 ], [ "bismuth", 5 ], [ "solder_wire", 5 ] ]
++ [ [ "gold_small", 5 ], [ "silver_small", 5 ], [ "tin", 5 ], [ "bismuth", 5 ], [ "solder_wire", 5 ] ],
++ [ [ "shotgun_primer", 20 ] ]
+ ]
+ },
+ {
+@@ -674,6 +676,7 @@
+ "skills_required": [ "cooking", 2 ],
+ "difficulty": 8,
+ "time": 45000,
++ "charges": 20,
+ "batch_time_factors": [ 60, 5 ],
+ "book_learn": [ [ "recipe_caseless", 5 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 } ],
+@@ -691,7 +694,8 @@
+ [ "bismuth", 10 ],
+ [ "solder_wire", 10 ]
+ ],
+- [ [ "nail", 240 ], [ "combatnail", 240 ] ]
++ [ [ "combatnail", 240 ] ],
++ [ [ "shotgun_primer", 20 ] ]
+ ]
+ },
+ {
+@@ -703,6 +707,7 @@
+ "skills_required": [ "cooking", 2 ],
+ "difficulty": 8,
+ "time": 45000,
++ "charges": 20,
+ "batch_time_factors": [ 60, 5 ],
+ "book_learn": [ [ "recipe_caseless", 5 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 } ],
+@@ -713,7 +718,8 @@
+ [ [ "oxy_powder", 80 ] ],
+ [ [ "gunpowder", 160 ] ],
+ [ [ "lead", 240 ] ],
+- [ [ "gold_small", 8 ], [ "silver_small", 8 ], [ "tin", 8 ], [ "bismuth", 8 ], [ "solder_wire", 8 ] ]
++ [ [ "gold_small", 8 ], [ "silver_small", 8 ], [ "tin", 8 ], [ "bismuth", 8 ], [ "solder_wire", 8 ] ],
++ [ [ "shotgun_primer", 20 ] ]
+ ]
+ }
+ ]
+--
+2.42.0
+
diff --git a/revert-26_fix-npc-splints-and-clean-up-iterator-errors-3592.patch b/revert-26_fix-npc-splints-and-clean-up-iterator-errors-3592.patch
new file mode 100644
index 0000000..f302dc8
--- /dev/null
+++ b/revert-26_fix-npc-splints-and-clean-up-iterator-errors-3592.patch
@@ -0,0 +1,67 @@
+From 17831b78d407a5abfc9389b35202b807ce5df8c4 Mon Sep 17 00:00:00 2001
+From: joveeater <joveasarus@gmail.com>
+Date: Wed, 8 Nov 2023 00:18:59 +0000
+Subject: [PATCH 065/318] fix: npc splints and clean up iterator errors (#3592)
+
+* Fix splints and clean up iterator errors
+
+* style(autofix.ci): automated formatting
+
+---------
+
+Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
+---
+ src/item.cpp | 1 +
+ src/npcmove.cpp | 13 ++++++++++++-
+ 3 files changed, 13 insertions(+), 8 deletions(-)
+
+diff --git a/src/item.cpp b/src/item.cpp
+index 3674560e548..d772312c36a 100644
+--- a/src/item.cpp
++++ b/src/item.cpp
+@@ -483,6 +483,7 @@ item &item::operator=( const item &source )
+ invlet = source.invlet;
+ active = source.active;
+ activated_by = source.activated_by;
++ is_favorite = source.is_favorite;
+
+ contents.clear_items();
+
+diff --git a/src/npcmove.cpp b/src/npcmove.cpp
+index c3470703e8a..3a0cd430288 100644
+--- a/src/npcmove.cpp
++++ b/src/npcmove.cpp
+@@ -4736,6 +4736,7 @@ bool npc::adjust_worn()
+ return false;
+ };
+
++ item *splint = nullptr;
+ for( auto &elem : worn ) {
+ if( !elem->has_flag( flag_SPLINT ) ) {
+ continue;
+@@ -4744,11 +4745,21 @@ bool npc::adjust_worn()
+ if( !covers_broken( *elem, elem->get_side() ) ) {
+ const bool needs_change = covers_broken( *elem, opposite_side( elem->get_side() ) );
+ // Try to change side (if it makes sense), or take off.
+- if( ( needs_change && change_side( *elem ) ) || takeoff( *elem ) ) {
++ if( needs_change && change_side( *elem ) ) {
+ return true;
+ }
++
++ if( can_takeoff( *elem ).success() ) {
++ splint = elem;
++ break;
++ }
++
+ }
+ }
++ if( splint ) {
++ takeoff( *splint );
++ return true;
++ }
+
+ return false;
+ }
+--
+2.42.0
+
diff --git a/revert-27_fix-NPCs-keep-their-splints-on-3589.patch b/revert-27_fix-NPCs-keep-their-splints-on-3589.patch
new file mode 100644
index 0000000..3bf0731
--- /dev/null
+++ b/revert-27_fix-NPCs-keep-their-splints-on-3589.patch
@@ -0,0 +1,30 @@
+From a3aaf76f252bc45f1e3b4da3fbf43e9208aefcb6 Mon Sep 17 00:00:00 2001
+From: KheirFerrum <102964889+KheirFerrum@users.noreply.github.com>
+Date: Wed, 8 Nov 2023 00:19:01 +0000
+Subject: [PATCH 066/318] fix: NPCs keep their splints on (#3589)
+
+* Use is_limb_broken like a normal function.
+
+* Update npcmove.cpp
+---
+ src/npcmove.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/npcmove.cpp b/src/npcmove.cpp
+index 3a0cd430288..2db92b4c253 100644
+--- a/src/npcmove.cpp
++++ b/src/npcmove.cpp
+@@ -4728,8 +4728,8 @@ bool npc::adjust_worn()
+ }
+ const auto covers_broken = [this]( const item & it, side s ) {
+ const body_part_set covered = it.get_covered_body_parts( s );
+- for( const std::pair<const bodypart_str_id, bodypart> &elem : get_body() ) {
+- if( elem.second.get_hp_cur() <= 0 && covered.test( elem.first ) ) {
++ for( const bodypart_str_id &bp_id : covered ) {
++ if( is_limb_broken( bp_id ) && covered.test( bp_id ) ) {
+ return true;
+ }
+ }
+--
+2.42.0
+
diff --git a/revert-28_feat-content-semi-plausible-smokeless-gunpowder-reci.patch b/revert-28_feat-content-semi-plausible-smokeless-gunpowder-reci.patch
new file mode 100644
index 0000000..f0e3aa0
--- /dev/null
+++ b/revert-28_feat-content-semi-plausible-smokeless-gunpowder-reci.patch
@@ -0,0 +1,62 @@
+From 49e4e2b3257d90ffc66b4e8fa2e7666b1440b751 Mon Sep 17 00:00:00 2001
+From: YeOldeMiller <36291373+YeOldeMiller@users.noreply.github.com>
+Date: Thu, 26 Oct 2023 03:22:35 +0300
+Subject: [PATCH 015/318] feat(content): semi-plausible smokeless gunpowder
+ recipe (#3503)
+
+* Introduce a semi-plausible smokeless gunpowder recipe
+
+* style(autofix.ci): automated formatting
+
+* Define id_suffix for gunpowder recipe, add ether to components
+
+* Remove obsolete gunpowder recipe from Craftable Gun Pack mod
+
+* Revert "Define id_suffix for gunpowder recipe"
+
+* Reapply ether addition for gunpowder recipe
+
+---------
+
+Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
+---
+ data/json/recipes/ammo/components.json | 23 ++++++++++++++++++++++
+ 2 files changed, 23 insertions(+), 21 deletions(-)
+
+diff --git a/data/json/recipes/ammo/components.json b/data/json/recipes/ammo/components.json
+index 3a29dfb5156..7610be60b25 100644
+--- a/data/json/recipes/ammo/components.json
++++ b/data/json/recipes/ammo/components.json
+@@ -44,6 +44,29 @@
+ "tools": [ [ [ "hotplate", 5 ], [ "toolset", 5 ] ] ],
+ "components": [ [ [ "oxy_powder", 5 ] ], [ [ "lye_powder", 5 ] ], [ [ "charcoal", 1 ], [ "coal_lump", 1 ] ] ]
+ },
++ {
++ "type": "recipe",
++ "result": "gunpowder",
++ "category": "CC_AMMO",
++ "subcategory": "CSC_AMMO_COMPONENTS",
++ "skill_used": "cooking",
++ "skills_required": [ "fabrication", 6 ],
++ "difficulty": 8,
++ "time": "2 h 40 m",
++ "charges": 200,
++ "book_learn": [ [ "textbook_anarch", 7 ], [ "adv_chemistry", 8 ], [ "textbook_chemistry", 8 ] ],
++ "batch_time_factors": [ 50, 3 ],
++ "qualities": [ { "id": "CHEM", "level": 3 } ],
++ "tools": [ [ [ "surface_heat", 250, "LIST" ] ], [ [ "pastaextruder", -1 ] ] ],
++ "components": [
++ [ [ "cotton_ball", 5 ] ],
++ [ [ "chem_nitric_acid", 3 ] ],
++ [ [ "acid", 3 ], [ "chem_sulphuric_acid", 2 ] ],
++ [ [ "ether", 125 ] ],
++ [ [ "water", 9 ], [ "water_clean", 9 ] ],
++ [ [ "edible_tallow_lard", 2, "LIST" ], [ "tallow_tainted", 2 ], [ "cooking_oil", 16 ], [ "cooking_oil2", 16 ] ]
++ ]
++ },
+ {
+ "type": "recipe",
+ "result": "exploding_arrow_warhead",
+--
+2.42.0
+
diff --git a/src-01_radio-can-use-ups.patch b/src-01_radio-can-use-ups.patch
index 0d811a5..d75e8dc 100644
--- a/src-01_radio-can-use-ups.patch
+++ b/src-01_radio-can-use-ups.patch
@@ -18,8 +18,8 @@
+ if( !it->units_sufficient( *p ) || !( it->has_flag( flag_USE_UPS ) &&
+ p->has_enough_charges( *it, false ) ) ) {
p->add_msg_if_player( m_info, _( "Your tactical tonfa is out of power." ) );
- it->convert( itype_shocktonfa_off ).active = false;
- } else {
+ it->convert( itype_shocktonfa_off );
+ it->active = false;
@@ -4099,7 +4102,8 @@
int iuse::mp3( player *p, item *it, bool, const tripoint & )
{
diff --git a/src-03_allow-bio-firestarter-on-smoker.patch b/src-03_allow-bio-firestarter-on-smoker.patch
index 21043e6..5210727 100644
--- a/src-03_allow-bio-firestarter-on-smoker.patch
+++ b/src-03_allow-bio-firestarter-on-smoker.patch
@@ -12,31 +12,28 @@
add_msg( _( "This kiln is ready to be fired, but you have no fire source." ) );
return;
} else {
-@@ -4950,11 +4953,23 @@
+@@ -4950,10 +4953,21 @@
return;
}
- p.use_charges( itype_fire, 1 );
- for( auto &it : here.i_at( examp ) ) {
-- if( it.has_flag( flag_SMOKABLE ) ) {
-- it.process_rot( examp );
-- it.set_flag( flag_PROCESSING );
+- if( it->has_flag( flag_SMOKABLE ) ) {
+- it->set_flag( flag_PROCESSING );
+ const bool has_bionic_firestarter = p.has_bionic( bio_lighter ) &&
+ p.enough_power_for( bio_lighter );
+
+ if( has_bionic_firestarter ) {
-+ for( auto &it : g->m.i_at( examp ) ) {
-+ if( it.has_flag( flag_SMOKABLE ) ) {
-+ it.process_rot( examp );
-+ it.set_flag( flag_PROCESSING );
++ for( auto &it : here.i_at( examp ) ) {
++ if( it->has_flag( flag_SMOKABLE ) ) {
++ it->set_flag( flag_PROCESSING );
+ }
+ }
+ } else {
+ p.use_charges( itype_fire, 1 );
-+ for( auto &it : g->m.i_at( examp ) ) {
-+ if( it.has_flag( flag_SMOKABLE ) ) {
-+ it.process_rot( examp );
-+ it.set_flag( flag_PROCESSING );
++ for( auto &it : here.i_at( examp ) ) {
++ if( it->has_flag( flag_SMOKABLE ) ) {
++ it->set_flag( flag_PROCESSING );
+ }
}
}
diff --git a/src-10_reduced-kcal-during-sleep.patch b/src-10_reduced-kcal-during-sleep.patch
index d376754..20d83f2 100644
--- a/src-10_reduced-kcal-during-sleep.patch
+++ b/src-10_reduced-kcal-during-sleep.patch
@@ -10,4 +10,4 @@
+ }
if( is_hibernating() ) {
// Hunger and thirst advance *much* more slowly whilst we hibernate.
- rates.hunger *= ( 1.0f / 7.0f );
+ // This will slow calories consumption enough to go through the 7 days of hibernation
diff --git a/src-20_fix-default-mods.patch b/src-20_fix-default-mods.patch
index 8867b39..d96549e 100644
--- a/src-20_fix-default-mods.patch
+++ b/src-20_fix-default-mods.patch
@@ -1,10 +1,14 @@
--- a/data/mods/default.json
+++ b/data/mods/default.json
-@@ -1,9 +1,20 @@
+@@ -1,8 +1,19 @@
[
- "bn",
+- "bn",
- "no_npc_food",
- "novitamins",
++ "bn",
+ "No_Rail_Stations",
+- "no_reviving_zombies",
+- "limit_fungal_growth"
+ "bn_restore_crows_turrets",
+ "martial_arts_update",
+ "bn_restore_removed_traits",
@@ -19,10 +23,5 @@
+ "survivorheadgear_crafting",
+ "hk_loadout",
+ "m26_mass",
-+ "restore_reactor_core_expansion",
- "No_Rail_Stations",
-- "elevated_bridges",
-- "no_reviving_zombies",
-- "limit_fungal_growth"
-+ "elevated_bridges"
++ "restore_reactor_core_expansion"
]
diff --git a/terrain-05_community-garden-fertilizer-not-spilled.patch b/terrain-05_community-garden-fertilizer-not-spilled.patch
deleted file mode 100644
index dfc3d29..0000000
--- a/terrain-05_community-garden-fertilizer-not-spilled.patch
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/data/json/mapgen/garden_community.json
-+++ b/data/json/mapgen/garden_community.json
-@@ -141,10 +141,10 @@
- "|": "f_null"
- },
- "place_liquids": [
-- { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 4, "y": 4 },
-- { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 4, "y": 5 },
-- { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 5, "y": 4 },
-- { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 5, "y": 5 }
-+ { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 9, "y": 9 },
-+ { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 10, "y": 9 },
-+ { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 9, "y": 10 },
-+ { "liquid": "fertilizer_liquid", "chance": 1, "amount": [ 2, 3 ], "x": 10, "y": 10 }
- ],
- "items": { "D": { "item": "hydro", "chance": 15 }, "#": { "item": "hydro", "chance": 15 } },
- "place_items": [
diff --git a/terrain-11_clean-up-map-extras.patch b/terrain-11_clean-up-map-extras.patch
index c418dda..fbee684 100644
--- a/terrain-11_clean-up-map-extras.patch
+++ b/terrain-11_clean-up-map-extras.patch
@@ -6,27 +6,18 @@
"type": "map_extra",
- "name": "Portal",
+ "name": "Shimmering Portal",
- "description": "Portal is here.",
+ "description": "A portal is here.",
"generator": { "generator_method": "map_extra_function", "generator_id": "mx_portal" },
"sym": "P",
@@ -139,7 +139,7 @@
{
"id": "mx_portal_in",
"type": "map_extra",
-- "name": "Portal In",
+- "name": "Portal",
+ "name": "Tear in Reality",
- "description": "Another portal is here.",
+ "description": "A portal is here.",
"generator": { "generator_method": "map_extra_function", "generator_id": "mx_portal_in" },
"sym": "P",
-@@ -170,7 +170,7 @@
- "id": "mx_spider",
- "type": "map_extra",
- "name": "Spiders",
-- "description": "This area is covered with webs. Probably spiders are nearby",
-+ "description": "This area is covered with webs. Probably spiders are nearby.",
- "generator": { "generator_method": "map_extra_function", "generator_id": "mx_spider" },
- "sym": "S",
- "color": "yellow",
@@ -239,16 +239,22 @@
{
"id": "mx_trees",
@@ -64,7 +55,7 @@
},
@@ -295,7 +302,9 @@
"name": "Burned Ground",
- "description": "Burned ground is here.",
+ "description": "This area has been burned down.",
"generator": { "generator_method": "map_extra_function", "generator_id": "mx_burned_ground" },
- "sym": "."
+ "sym": ".",
@@ -74,8 +65,8 @@
{
"id": "mx_point_burned_ground",
@@ -303,7 +312,9 @@
- "name": "Burned Ground (Point)",
- "description": "Burned ground is here.",
+ "name": "Burned Ground",
+ "description": "This area has been burned down.",
"generator": { "generator_method": "map_extra_function", "generator_id": "mx_point_burned_ground" },
- "sym": "."
+ "sym": ".",
@@ -86,7 +77,7 @@
"id": "mx_marloss_pilgrimage",
@@ -321,21 +332,29 @@
"name": "Casings",
- "description": "Several spent casings are here.",
+ "description": "A shootout happened here.",
"generator": { "generator_method": "map_extra_function", "generator_id": "mx_casings" },
- "sym": "C"
+ "sym": "C",
@@ -97,7 +88,7 @@
"id": "mx_looters",
"type": "map_extra",
"name": "Looters",
- "description": "Some looters gathering everything not nailed down.",
+ "description": "Some looters are gathering everything not nailed down.",
- "generator": { "generator_method": "map_extra_function", "generator_id": "mx_looters" }
+ "generator": { "generator_method": "map_extra_function", "generator_id": "mx_looters" },
+ "sym": "L",
diff --git a/terrain-12_add_fmc_stairs.patch b/terrain-12_add_fmc_stairs.patch
deleted file mode 100644
index 6e4c39c..0000000
--- a/terrain-12_add_fmc_stairs.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/data/json/mapgen/refugee_center/refugee_center.json
-+++ b/data/json/mapgen/refugee_center/refugee_center.json
-@@ -179,7 +179,7 @@
- "......_______,,________,________ss..## # #D ###### D# # ##..ss_________,________,,_______......",
- "......_______,,________,________ss..##~#~#rr# #####P hh#EEEE#S d##### #rr#~#~##..ss_________,________,,_______......",
- "......_______,,________,________ss..######### #>>>#l TT#EEEE#S c#>>># #########..ss_________,________,,_______......",
-- "......_________________,________ss..## #L L# # #l hh#EEEE#cccc# # #L L# ##..ss_________,_________________......",
-+ "......_________________,________ss..## #L L# #< #l hh#EEEE#cccc# <# #L L# ##..ss_________,_________________......",
- "......_______,,________,________ss..###+##+##++##=##11111#EEE6#1111##=##++##+##+###..ss_________,________,,_______......",
- "......_______,,________,________ss..## P ## ## ##..ss_________,________,,_______......",
- "......_______,,________,________ss..!1 1!..ss_________,________,,_______......",
diff --git a/vampirism.patch b/vampirism.patch
index 26c90a3..0299e0d 100644
--- a/vampirism.patch
+++ b/vampirism.patch
@@ -68,15 +68,9 @@
if( !( has_trait( trait_NOPAIN ) ) ) {
add_msg_if_player( m_bad, _( "Your heart spasms painfully and stops." ) );
} else {
-@@ -4879,11 +4879,12 @@
- }
- g->events().send<event_type::dies_from_drug_overdose>( getID(), effect_jetinjector );
- set_part_hp_cur( bodypart_id( "torso" ), 0 );
-- } else if( get_effect_dur( effect_adrenaline ) > 50_minutes ) {
-+ } else if( ( get_effect_dur( effect_adrenaline ) > 50_minutes ) &&
-+ !( has_trait( trait_VAMP_SKIN ) ) ) {
- add_msg_if_player( m_bad, _( "Your heart spasms and stops." ) );
- g->events().send<event_type::dies_from_drug_overdose>( getID(), effect_adrenaline );
+@@ -4879,7 +4879,7 @@
+ }
+ g->events().send<event_type::dies_from_drug_overdose>( getID(), effect_jetinjector );
set_part_hp_cur( bodypart_id( "torso" ), 0 );
- } else if( get_effect_int( effect_drunk ) > 4 ) {
+ } else if( ( get_effect_int( effect_drunk ) > 4 ) && !( has_trait( trait_VAMP_SKIN ) ) ) {
@@ -506,7 +500,7 @@
@@ -2492,12 +2492,15 @@
}
- if( killer == &g->u && ( !guaranteed_hostile() || hit_by_player ) ) {
+ if( get_killer() == &g->u && ( !guaranteed_hostile() || hit_by_player ) ) {
+ bool vampire = g->u.has_trait( trait_THRESH_REAL_VAMP );
bool cannibal = g->u.has_trait( trait_CANNIBAL );
bool psycho = g->u.has_trait( trait_PSYCHOPATH ) || g->u.has_trait( trait_KILLER );
@@ -542,16 +536,6 @@
add_msg_if_player( m_bad,
_( "Your heart spasms painfully and stops, dragging you back to reality as you die." ) );
} else {
-@@ -1065,6 +1065,9 @@
- // Determine the strength of effects or dreams based upon category strength
- int strength = 0; // Category too weak for any effect or dream
- if( crossed_threshold() ) {
-+ if( has_trait( trait_THRESH_REAL_VAMP ) ) {
-+ highcat = "REAL_VAMP";
-+ }
- strength = 4; // Post-human.
- } else if( highest >= 20 && highest < 35 ) {
- strength = 1; // Low strength
--- a/src/suffer.cpp
+++ b/src/suffer.cpp
@@ -565,9 +549,9 @@
static const trait_id trait_WEB_SPINNER( "WEB_SPINNER" );
static const trait_id trait_WEB_WEAVER( "WEB_WEAVER" );
@@ -251,7 +251,8 @@
-
- void Character::suffer_while_underwater()
- {
+ if( has_trait( trait_DEBUG_STAMINA ) ) {
+ return;
+ }
- if( !has_trait( trait_GILLS ) && !has_trait( trait_GILLS_CEPH ) ) {
+ if( !has_trait( trait_GILLS ) && !has_trait( trait_GILLS_CEPH ) &&
+ !has_trait( trait_VAMP_SKIN ) ) {
diff --git a/weapon-02_Fix-usp45-load-order.patch b/weapon-02_Fix-usp45-load-order.patch
index 68db5e9..0469e75 100644
--- a/weapon-02_Fix-usp45-load-order.patch
+++ b/weapon-02_Fix-usp45-load-order.patch
@@ -12,8 +12,8 @@
"weight": "930 g",
- "ammo": "45",
+ "volume": "500 ml",
-+ "price": 68000,
- "price_postapoc": 2500,
++ "price": "680 USD",
+ "price_postapoc": "25 USD",
- "ranged_damage": { "damage_type": "bullet", "amount": 0 },
+ "to_hit": -2,
+ "material": [ "steel", "plastic" ],