summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2023-11-13 15:14:12 -0800
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2023-11-13 15:14:12 -0800
commit9a3d0215484427507cf426f825cb4a1992376020 (patch)
treef6c2c34a060c7cbe51b0f2d8dc1a5fee7cbb6234
parentRebuild for tileset. (diff)
downloadcataclysm-bn-9a3d0215484427507cf426f825cb4a1992376020.tar.xz
Add patch to reduce experience gain from lockpicking.
Backport fix for energy weapons becoming dirty.
-rw-r--r--PKGBUILD17
-rw-r--r--backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch552
-rw-r--r--src-12_lower-lockpicking-experience.patch16
3 files changed, 582 insertions, 3 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 2f64ad5..3ff1174 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -20,7 +20,7 @@ _pkgname=Cataclysm-BN-cbn
pkgver=0.4
#pkgver=202310040030
#_pkgver=2023-10-04-0030
-pkgrel=4
+pkgrel=6
pkgdesc="A post-apocalyptic roguelike."
#url="http://cataclysmrl.blogspot.com/"
#url="http://www.cataclysm.glyphgryph.com/"
@@ -37,6 +37,8 @@ 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"
+
"revert-01_removed-traits.patch"
"revert-02_revert-book-revamp.patch"
"revert-03_generic-nv.patch"
@@ -147,6 +149,7 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/cataclysmbnteam/Cataclysm-B
"src-09_npc-eat-from-further-camp.patch"
"src-10_reduced-kcal-during-sleep.patch"
"src-11_fix-tacoma-farmfield.patch"
+ "src-12_lower-lockpicking-experience.patch"
"src-20_fix-default-mods.patch"
"vampirism.patch"
@@ -160,6 +163,7 @@ b2sums=('4d47457c12a539ed6fa1c5b1351f473e43aecfe1e4f2aafd37e7068fc166d95c7f72980
'069ecde58859b3d44cd687c4b6e718610cefb693ff86e66f199ebfb1b3072023ad2b6f0c28e27ef9c1ce4997f6a5b2ca0d45046996b3ff35a4aeaeb1a7cf9421'
'ad88bc6c1e3c8183a313b5eec42f98d6956afea349feff34a86e4536c9921fa99d2594282caf27de8ebb7ffb56376ed2e76d572227bfd6d8173c7bb1f01e23b8'
'6f70e90359a14e4839d9a2683debb88850e5dd387add911ad68fd87e5512cfcdd435da63e1e370358153673fd5a72a9b1e9c94f1979edb7948b4da8c82407bad'
+ '54d896d8f9273ecb8b8643cf560fdad652c52db9733ebebd6944fd9a112ebdcbfa237d90251abcb2a71c9eb3433297bf8c3febaddc055bed6ad47daf898e163b'
'fdef1f81084e7b08203b8464f37a00e2efc8b11d423c6e6b82e612392d91047160d2bc472b63c836ebc48adee0b4f2b3434c3e07eed5876275b234e69d7f6b9c'
'c2d6d7f74ada2ef54079fdf3759d9875552e2894dc8b753435acc692e705a9b297674eddb4e5a01a9269a84be7a82a8fef7e5762724b4d0f065976e877a05b00'
'e417a1786fbafb685099431f7f9926201ab80636bf3812da67acc341c7ef2b6a3853734d5b8b1bc355acbd5c0bedefb0401f8854aa5cb00032550afc8a7b9ebe'
@@ -249,11 +253,12 @@ b2sums=('4d47457c12a539ed6fa1c5b1351f473e43aecfe1e4f2aafd37e7068fc166d95c7f72980
'4bd44cbe85c53902b8a360509703e3d38e8a5da75dd2c534a77f03ce6440632f6c83c92939069c60473c88ffb3abab0fbf11e39271f44f813b9f6432ea5f9a6b'
'f115314dd2bb1da07bba7a90fec5c3acb7ccb5145efaea03d6806942e24d402c9a144a2fd07b82e727a0b79dedd4bdd87de0bbaf0944236563164fb6f117965e'
'e0a9e8f1129650208f7a5a37680091a6d2abaa60f5d4fd7fc691854d49c9f59317ca18dbe764cb05cacd4a2a95de702bbdd072571862ee0b27bd8df3be7a5764'
+ 'a5e8bca3ccec2990098e8cf1c504ce6bec03cecef03b0450a4396d5b1e0ffc4e91592f40c3e389eea74fc53114cce0f2c1d2237a779e5ec7e6c12b2863d6c731'
'dd5aeab5755c68ce7c72a76369b982e8ccabcd103acb46bb992ce96719db36338f8e0b5105b4627659f90ea9a4d8b9b21e2cd734cd08e723c45bcd54209b02be'
'5247f058961ef5f366774a1dbc80cb2c158d9c1eee18e4523470fe84ec40a7237cd1687d64cffad7e2ac8f572f85da456024119b656295756672e4ae4214dbbe'
- 'de178a6a4de28168c95897453b3a6159baf02055c63a6f922bd1edd09c981b3339e9aee16acec5aca5dd3a778c726c04d3e9477b6b5d526e49d0a2e008ea5113'
+ 'f470b9f81c10697d5199f5cc672e687e4095d9f1e14e939dad0b5aed889fa868aee0e73c82935a41eb7f0b24d54a9b2d4ae126a45149baa0509cd0d0fff76721'
'a56efdaae0344726debf5b74846edce8df7aa2357fbc7a05a3d369d1f457b02934a0d0ce2330072e03f1ac901e06e333c9393f795c761f8440307e7649ed5596'
- 'd6e3f2be3c37bf02c2a526323eb9b828ddf025e4d11d7f064a488102348d193d10a7186148088edc27c4e5316e8d62e96693b77b28cb78322fab79d94b8d262a'
+ '22cb1ef62d955d4a734434563a278057f91f32c948966d4ba606158c11d86bb3491b06387a5f5eae3640c2210a7ea7dde06f8553c50f4d5144349623434b68e3'
'b9309da09b165fb57e83f84e3584d2479bd3336ed86e181e5df2d27daa92bd55d03d7f3fc226f03696af5f0f32d8e0e7ecd26ae7e50eed0200d0b0feaad07efb')
prepare() {
@@ -296,6 +301,7 @@ prepare() {
echo "Applying hotfixes"
# # Adjust default mods
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/src-20_fix-default-mods.patch
+ patch -Np1 --no-backup-if-mismatch -i "$srcdir"/backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch
# # # Reverts
@@ -555,6 +561,11 @@ prepare() {
# I can only reason it is a typo.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/npc-12_fix-eddie-requiring-1000-clay.patch
+ # Reduce the mechanical skill experience from lockpicking:
+ # With lock_roll being 1-120 and used in place of difficulty,
+ # it often caused a level up with every lock, even at very high skill levels
+ patch -Np1 --no-backup-if-mismatch -i "$srcdir"/src-12_lower-lockpicking-experience.patch
+
# Assorted typos in NPC dialogue.
# Fix Jack Isherwood mission listing 10 jars, when it is actually 20.
patch -Np1 --no-backup-if-mismatch -i "$srcdir"/npc-20_dialogue-fixes.patch
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
new file mode 100644
index 0000000..246f7f6
--- /dev/null
+++ b/backport-01_fix-content-NON_FOULING-flag-not-working-due-to-typo.patch
@@ -0,0 +1,552 @@
+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/src-12_lower-lockpicking-experience.patch b/src-12_lower-lockpicking-experience.patch
new file mode 100644
index 0000000..375731c
--- /dev/null
+++ b/src-12_lower-lockpicking-experience.patch
@@ -0,0 +1,16 @@
+--- a/src/activity_actor.cpp
++++ b/src/activity_actor.cpp
+@@ -1174,10 +1174,11 @@
+ }
+
+ if( !perfect ) {
++ who.practice( skill_mechanics, 6, 12 );
++ } else {
+ // You don't gain much skill since the item does all the hard work for you
+- xp_gain += std::pow( 2, who.get_skill_level( skill_mechanics ) ) + 1;
++ who.practice( skill_mechanics, 3, 12 );
+ }
+- who.practice( skill_mechanics, xp_gain );
+
+ if( !perfect && g->m.has_flag( "ALARMED", target ) && ( lock_roll + dice( 1, 30 ) ) > pick_roll ) {
+ sounds::sound( who.pos(), 40, sounds::sound_t::alarm, _( "an alarm sound!" ),