GENERATED VIEW · PRIVATE ARCHIVE · DO NOT SERVE
RobCo Industries · Archive Museum

FO3_WEAPON_DATA.md



RELEASE

planning/2.8.5/data/FO3/FO3_WEAPON_DATA.md

sha256 a1ce4ea1a9f26552 · 29275 bytes · original held in the private archive

# FO3 Weapon Data — Cited Source-of-Record + Correction Spec > **ANALYSIS + PLAN stage, 2026-07-15.** Branch `dev` @ `c22e232`. Opus. > **NO code changed, NO source file touched, NO commit.** This doc is the > authoritative corrected table + the build plan for a later Sonnet unit. > Source of truth: **fallout.wiki** (Protocol 3), read live in the in-app browser > (WebFetch is 403-blocked, as expected). Primary source: the single canonical > [Fallout 3 Weapons](https://fallout.wiki/wiki/Fallout_3_Weapons) master table, > column layout decoded against the labeled > [10mm Pistol](https://fallout.wiki/wiki/10mm_Pistol_(Fallout_3)) infobox, plus > the [Frag Grenade](https://fallout.wiki/wiki/Frag_Grenade_(Fallout_3)) page for > the explosives-damage semantics. --- ## 0. TL;DR (read this first) - **The error is SCATTERED, not a uniform multiplier.** The provenance sweep's headline ("values inflated ~10×") was an artifact of a 6-weapon sample that happened to catch high-value uniques. Across the full table the wrongness is **independent per field, per weapon** — some values are far too high (Sniper Rifle value 3500 vs wiki **300**), some are too **low** (10mm Pistol value 100 vs wiki **225**; 10mm Pistol fire-rate 1.7 vs wiki **6**). This is the signature of **model-estimated data**, not a transcription with a fixed offset. - **The file header's Protocol 3 claim is false.** Line 14-16 of `db_fo3.js` states "every data row here is sourced from fallout.wiki." The weapon table was not — the numbers don't match. That false citation is the exact trust failure this whole sweep exists to kill. - **Almost the entire table is now directly re-verified.** Because fallout.wiki publishes ONE master table for all FO3 weapons, I verified ~100 conventional weapons directly (not a sample). The corrected values are in §3. - **The single most-wrong field is `Attacks_Per_Second`, closely followed by `Value` and `Crit_Multiplier`.** `Base_Damage` and `Weight` are wrong less often but still frequently. - **Explosives are a special case** (damage = impact + blast); handled separately in §3.6. - **4 rows are not Fallout 3 weapons at all** (cross-game or invented) — same class as the fabricated perks. See §3.8. --- ## 1. Inventory of the current table **File:** `js/data/db_fo3.js`, the `[WEAPONS.CSV]` block, lines **46-161** (114 weapon rows + 1 header row). **Schema (self-labeled, line 46):** ``` Weapon_Name, Base_Damage, Crit_Damage, Crit_Multiplier, Attacks_Per_Second, Weight, Value, Req_Unarmed, Req_STR, Reach, Special_Attack_AP, Special_Rules, Ammo_Type ``` **Citation state:** there are **no per-row citations.** The only provenance claim is the **file-level header** (lines 14-16) asserting blanket fallout.wiki sourcing — and that claim does not hold for this table (see §2). So every row is effectively *uncited*, and the one citation that exists is *false*. **Which fields are actually consumed / displayed (this drives scope):** | Field | Consumer | Verify? | |---|---|---| | `Base_Damage` | `lookupWeaponStats()` → V.A.T.S. AP optimizer (`ui-core-cmd.js:491`), THREAT TTK + CONSULT display (`ui-render-databank.js:91,217`); raw table injected into AI directive (`api.js:389`) | **YES — correct** | | `Crit_Damage` | `lookupWeaponStats()` → surfaced in CONSULT/DATABANK weapon readout; AI directive | **YES — correct** | | `Crit_Multiplier` | same as Crit_Damage | **YES — correct** | | `Attacks_Per_Second` | `lookupWeaponStats()` → V.A.T.S./THREAT time-to-kill math; AI directive | **YES — correct** | | `Weight` | `lookupItemInDb()` → CARGO encumbrance totals, LOOT add, OCR apply, TRADE catalog; AI directive | **YES — correct** | | `Value` | `lookupItemInDb()` + `getTradeCatalog()` → TRADE barter math, PERSONAL RECORD gear value; AI directive | **YES — correct** | | `Req_Unarmed`, `Req_STR`, `Reach`, `Special_Attack_AP` | **PARKED** — parsed by `lookupWeaponStats()` but no live consumer (per file header lines 26-29) | **NO — leave byte-identical, out of scope** | | `Special_Rules`, `Ammo_Type` | strings, spot-checked clean | **NO — leave as-is** (fix only obvious typos if any) | **Scope decision:** the build unit corrects **only the 6 numeric fields that are consumed or displayed** (`Base_Damage, Crit_Damage, Crit_Multiplier, Attacks_Per_Second, Weight, Value`). The 4 PARKED columns are **not** in the wiki master table and have no consumer — leaving them untouched keeps the diff reviewable and honest (we don't stamp "verified" on numbers we didn't re-source). A future unit can re-source them if a consumer is ever built. --- ## 2. Error characterization — SCATTERED, not a multiplier I re-sampled a cross-section against the live wiki, tabulating current vs true per field. The decoded master-table columns are: **Dmg/Attack · Fire-Rate · Crit%Mult · Crit-Dmg · AP · Spread · Ammo · Capacity · Item-HP · Weight · Value · Skill.** (Decoded and confirmed field-by-field against the labeled 10mm Pistol infobox.) | Weapon | Field | Code | Wiki | Direction | |---|---|---:|---:|---| | 10mm Pistol | Base_Damage | 13 | **9** | too high | | 10mm Pistol | Attacks/sec | 1.7 | **6** | **way too low** | | 10mm Pistol | Weight | 2 | **3** | too low | | 10mm Pistol | Value | 100 | **225** | **too low** | | Sniper Rifle | Base_Damage | 55 | **40** | too high | | Sniper Rifle | Crit_Mult | 2.0 | **5** | too low | | Sniper Rifle | Value | 3500 | **300** | **way too high** | | Combat Shotgun | Base_Damage | 60 | **55** | slightly high | | Combat Shotgun | Value | 600 | **200** | too high | | Assault Rifle | Base_Damage | 30 | **8** | **way too high** | | Assault Rifle | Attacks/sec | 2.5 | **8** | too low | | Alien Blaster | Crit_Mult | 2.0 | **100** | **way too low** | | Alien Blaster | Value | 8000 | **500** | **way too high** | | Lincoln's Repeater | Base_Damage | 50 | 50 | ✓ right | | Lincoln's Repeater | Value | 4000 | **500** | **way too high** | | Plasma Rifle | Base_Damage | 45 | 45 | ✓ right | | Plasma Rifle | Value | 4000 | **1799** | too high | | Minigun | Base_Damage | 10 | **5** | too high | | Minigun | Attacks/sec | 8.0 | **20** | too low | | Baseball Bat | Base_Damage | 15 | **9** | too high | | Baseball Bat | Value | 100 | **55** | too high | | Super Sledge | Base_Damage | 80 | **25** | **way too high** | | Super Sledge | Value | 10000 | **180** | **way too high** | | Power Fist | Base_Damage | 60 | **20** | **way too high** | | Deathclaw Gauntlet | Base_Damage | 60 | **20** | **way too high** | **Verdict — this is not one multiplier applied once:** - **`Value`** is wrong in **both directions** (10mm 100→225 *up*; Sniper 3500→300 *down*). No single factor explains it. - **`Attacks_Per_Second`** is the most consistently wrong field — the code's fire rates bear almost no relationship to the real ones (10mm 1.7→6, Assault Rifle 2.5→8, Minigun 8→20). The code appears to have invented "attacks per second" from a rough feel, not transcribed it. - **`Crit_Multiplier`** is frequently wrong and the misses are large (Sniper ×2→×5, Alien Blaster ×2→×100). The code seems to default many weapons to ×2.0. - **`Base_Damage`** matches sometimes (Lincoln's 50, Plasma Rifle 45) and is wildly off other times (Assault Rifle 30→8, Super Sledge 80→25). Melee/unarmed base damage is systematically inflated 2-4×. - **`Weight`** is usually close but often off by 1-2 lbs. **Root cause (stated per Protocol 27):** the FO3 weapon table was **generated from model estimates, not transcribed from fallout.wiki**, then stamped with a file-header citation it never earned. Same defect class as the invented perks and the Enclave hit squad — just numeric rather than a named entity. The fix is **re-sourcing, not annotating** (a `src:` label on a wrong number is the worst outcome — §4). --- ## 3. The authoritative corrected table Every value below is read directly from the fallout.wiki [Fallout 3 Weapons](https://fallout.wiki/wiki/Fallout_3_Weapons) master table (one canonical source, so this is **direct verification of the whole table**, not a sampled rule). Columns shown are the 6 consumed fields **in code order**: `Base_Damage · Crit_Damage · Crit_Mult · Attacks/sec · Weight · Value`. A code value in **parentheses** is the current (wrong) value; the bare number is the corrected value. `✓` = already correct. > **Note on `Crit_Damage`:** the file header calls Crit_Damage/Crit_Multiplier > "PARKED (no crit calculator)", but `lookupWeaponStats()` parses them and the > CONSULT/DATABANK weapon readout surfaces them, so they **are** displayed — > correcting them matters. They are in scope. ### 3.1 Guns — Pistols | Weapon | Base_Dmg | Crit_Dmg | Crit_Mult | Atk/sec | Weight | Value | |---|--:|--:|--:|--:|--:|--:| | 10mm Pistol | 9 (13) | 9 (13) | 1.0 ✓ | 6 (1.7) | 3 (2) | 225 (100) | | .32 Pistol | 6 (18) | 6 (18) | 1.0 (1.5) | 3 (1.4) | 2 (3) | 110 (150) | | Scoped .44 Magnum | 35 (50) | 35 (50) | 2.0 ✓ | 2.25 (0.9) | 4 ✓ | 300 (750) | | Chinese Pistol | 4 ✓ | 4 ✓ | 1.0 ✓ | 6.0 ✓ | 2 ✓ | 190 ✓ | | Silenced 10mm Pistol | 8 ✓ | 5 ✓ | 2.0 ✓ | 6.0 ✓ | 3 ✓ | 250 ✓ | | Colonel Autumn's 10mm Pistol | 13 ✓ | 13 ✓ | 1.0 (2.0) | 6 (1.7) | 3 (2) | 325 (1500) | | Blackhawk | 55 (60) | 45 (60) | 2.0 ✓ | 2.25 (0.9) | 4 ✓ | 500 (8000) | | Wild Bill's Sidearm | 10 ✓ | 15 ✓ | 1.0 ✓ | 3.0 ✓ | 2 ✓ | 250 ✓ | | Callahan's Magnum | 65 ✓ | 50 ✓ | 2.0 ✓ | 2.25 ✓ | 4 ✓ | 750 ✓ | | Dart Gun | 6 (1) | 12 (1) | 2.5 (1.0) | 6 (1.5) | 3 ✓ | 500 (250) | ### 3.2 Guns — Rifles | Weapon | Base_Dmg | Crit_Dmg | Crit_Mult | Atk/sec | Weight | Value | |---|--:|--:|--:|--:|--:|--:| | Hunting Rifle | 25 (40) | 25 (40) | 1.0 (2.0) | 0.75 (1.0) | 6 (7) | 150 (500) | | Assault Rifle | 8 (30) | 8 (30) | 1.0 ✓ | 8 (2.5) | 7 ✓ | 300 (400) | | Sniper Rifle | 40 (55) | 40 (55) | 5.0 (2.0) | 1.0714 (0.9) | 10 ✓ | 300 (3500) | | Chinese Assault Rifle | 11 (30) | 10 (30) | 1.0 ✓ | 8 (2.5) | 7 ✓ | 500 (450) | | Lincoln's Repeater | 50 ✓ | 50 ✓ | 2.0 ✓ | 0.75 (0.9) | 5 (4) | 500 (4000) | | Xuanlong Assault Rifle | 12 (30) | 12 (30) | 1.0 ✓ | 8 (3.5) | 7 ✓ | 400 (5000) | | Victory Rifle | 40 (55) | 40 (55) | 3.0 (2.5) | 1.0714 (0.9) | 10 ✓ | 450 (5000) | | Reservist's Rifle | 40 ✓ | 40 ✓ | 5.0 ✓ | 1.6071 (1.607) | 10 ✓ | 500 ✓ | | Ol' Painless | 30 ✓ | 30 ✓ | 1.0 ✓ | 1.125 ✓ | 6 ✓ | 250 ✓ | | BB Gun | 4 ✓ | 4 ✓ | 1.0 ✓ | 0.75 ✓ | 2 ✓ | 36 ✓ | | Lever-Action Rifle | 40 ✓ | 40 ✓ | 5.0 ✓ | 0.75 ✓ | 8 ✓ | 200 ✓ | | Backwater Rifle | 45 ✓ | 45 ✓ | 5.0 ✓ | 0.75 ✓ | 7 ✓ | 250 ✓ | | Infiltrator | 7 ✓ | 10 ✓ | 1.0 ✓ | 8.0 ✓ | 7 ✓ | 400 ✓ | | Perforator | 10 ✓ | 14 ✓ | 2.0 ✓ | 6.0 ✓ | 7 ✓ | 600 ✓ | | Railway Rifle | 30 (20) | 30 (40) | 3.0 (2.0) | 2 (1.5) | 9 (15) | 200 (500) | ### 3.3 Guns — SMGs & Shotguns | Weapon | Base_Dmg | Crit_Dmg | Crit_Mult | Atk/sec | Weight | Value | |---|--:|--:|--:|--:|--:|--:| | 10mm Submachine Gun | 7 (15) | 7 (15) | 1.0 ✓ | 10 (4.5) | 5 ✓ | 330 (250) | | Sydney's 10mm Ultra SMG | 9 (20) | 9 (20) | 1.0 ✓ | 10 (5.0) | 5 ✓ | 430 (3500) | | Combat Shotgun | 55 (60) | 27 (60) | 1.0 ✓ | 1.5 (1.0) | 7 (8) | 200 (600) | | The Terrible Shotgun | 80 ✓ | 40 (80) | 1.0 ✓ | 1.5 (1.0) | 10 (8) | 250 (7000) | | Double-Barrel Shotgun | 85 ✓ | 30 (30) | 1.0 ✓ | 2.25 ✓ | 6 ✓ | 175 ✓ | | Sawed-Off Shotgun | 50 ✓ | 0 ✓ | 0.0 ✓ | 2.25 ✓ | 6 ✓ | 190 ✓ | ### 3.4 Energy weapons | Weapon | Base_Dmg | Crit_Dmg | Crit_Mult | Atk/sec | Weight | Value | |---|--:|--:|--:|--:|--:|--:| | Laser Pistol | 12 ✓ | 12 (24) | 1.5 (2.0) | 6 (1.5) | 3 (2) | 320 (400) | | Laser Rifle | 23 (22) | 22 (44) | 1.5 (2.0) | 2.0455 (1.5) | 8 (3) | 1000 (3500) | | Plasma Pistol | 25 ✓ | 25 (50) | 2.0 ✓ | 3 (1.3) | 3 ✓ | 360 (1400) | | Plasma Rifle | 45 ✓ | 44 (90) | 2.0 ✓ | 2 (1.5) | 8 (7) | 1799 (4000) | | A3-21 Plasma Rifle | 50 (55) | 50 (110) | 2.5 (2.0) | 2 (1.5) | 8 (7) | 2200 (6500) | | Gatling Laser | 8 ✓ | 6 (16) | 1.0 (1.5) | 20 (8.0) | 18 ✓ | 2000 (22500) | | Mesmetron | 1 (0) | 0 ✓ | 1.0 ✓ | 1.0345 (1.0) | 2 ✓ | 500 (200) | | Alien Blaster | 100 ✓ | 100 (200) | 100 (2.0) | 3 (1.5) | 2 (0.5) | 500 (8000) | | Firelance | 80 (90) | 80 (180) | 100 (2.0) | 3 (1.5) | 2 ✓ | 750 (10000) | | Smuggler's End | 18 ✓ | 18 ✓ | 1.5 ✓ | 6.0 ✓ | 2 ✓ | 450 ✓ | | Metal Blaster | 55 ✓ | 27 ✓ | 1.5 ✓ | 2.0455 (2.046) | 8 ✓ | 1000 ✓ | | Tri-beam Laser Rifle | 75 ✓ | 15 ✓ | 1.5 ✓ | 2.7273 (2.727) | 9 ✓ | 1000 ✓ | | Wazer Wifle | 29 ✓ | 28 ✓ | 1.5 ✓ | 2.0455 (2.046) | 8 ✓ | 900 ✓ | | Microwave Emitter | 60 ✓ | 100 ✓ | 2.0 ✓ | 1.0345 (1.035) | 8 ✓ | 500 ✓ | | Gauss Rifle | 100 ✓ | 50 ✓ | 5.0 ✓ | 1.0714 (1.071) | 12 ✓ | 500 ✓ | | Destabilizer | 30 ✓ | 20 ✓ | 2.0 ✓ | 4.5 ✓ | 7 ✓ | 1199 ✓ | | Alien Atomizer | 35 ✓ | 40 ✓ | 1.0 ✓ | 3.0 ✓ | 2 ✓ | 500 ✓ | | Alien Disintegrator | 65 ✓ | 50 ✓ | 2.0 ✓ | 2.0 ✓ | 7 ✓ | 300 ✓ | | Atomic Pulverizer | 37 ✓ | 40 ✓ | 2.0 ✓ | 3.0 ✓ | 2 ✓ | 500 ✓ | | Captain's Sidearm | 35 ✓ | 40 ✓ | 1.0 ✓ | 3.0 ✓ | 2 ✓ | 500 ✓ | | Drone Cannon | 40 ✓ | 50 ✓ | 1.0 ✓ | 3.3333 (3.333) | 18 ✓ | 1999 ✓ | | Drone Cannon Ex-B | 40 ✓ | 50 ✓ | 1.0 ✓ | 3.3333 (3.333) | 18 ✓ | 1999 ✓ | | Vengeance | 11 ✓ | 12 ✓ | 1.0 ✓ | 20.0 ✓ | 18 ✓ | 2400 ✓ | | Precision Gatling Laser | 8 ✓ | 6 ✓ | 4.0 ✓ | 20.0 ✓ | 18 ✓ | 3000 ✓ | | Electro-Suppressor | 25 ✓ | 4 ✓ | 1.0 ✓ | 2.3077 (2.308) | 2 ✓ | 70 ✓ | ### 3.5 Big Guns / Heavy (non-explosive) | Weapon | Base_Dmg | Crit_Dmg | Crit_Mult | Atk/sec | Weight | Value | |---|--:|--:|--:|--:|--:|--:| | Minigun | 5 (10) | 0 (10) | 0.0 (1.0) | 20 (8.0) | 18 (28) | 1000 (22500) | | Flamer | 16 (10) | 1 (10) | 4.0 (1.0) | 8 (4.0) | 15 (10) | 500 (1500) | | Heavy Incinerator | 35 (12) | 5 (12) | 4.0 (1.0) | 4 (3.5) | 15 (12) | 500 (5000) | | Burnmaster | 24 ✓ | 1 ✓ | 4.0 ✓ | 8 (8.0) | 15 ✓ | 500 ✓ | | Eugene | 7 ✓ | 0 ✓ | 0.0 ✓ | 20.0 ✓ | 18 ✓ | 1500 ✓ | ### 3.6 Explosives — SPECIAL CASE (damage = impact + blast) The wiki master table lists thrown/placed explosives at **Base_Damage = 1** (the impact) and shows the real blast as a separate `+N` on each weapon's own page (verified on Frag Grenade: "1 (6.1) **+ 100** (170)"). The code currently stores a single "effective" number that is **also wrong** (Frag 50 vs real blast 100). **Recommendation:** for explosives, set `Base_Damage` = the **blast** value from each weapon's own page (the meaningful damage the THREAT/TTK tools should use), and take `Weight`/`Value` from the master table below. **Blast values must be pulled per-page in the build stage** — I verified Frag Grenade directly; the rest are marked *verify-in-build* to avoid guessing. | Weapon | Base_Dmg (blast) | Crit_Mult | Weight | Value | |---|--:|--:|--:|--:| | Frag Grenade | **100** (code 50) — *verified* | 0 (code 1.0) | 0.5 (code 1) | 25 (code 100) | | Plasma Grenade | *verify-in-build* (code 80) | 0 (code 1.0) | 0.5 (code 1) | 50 (code 200) | | Pulse Grenade | *verify-in-build* (code 60) | 0 (code 1.0) | 0.5 (code 1) | 40 (code 75) | | Nuka Grenade | *verify-in-build* (code 500) | 0 (code 1.0) | 0.5 (code 1) | 50 (code 200) | | Frag Mine | *verify-in-build* (code 100) | 0 (code 1.0) | 0.5 (code 0.5) | 25 (code 250) | | Bottlecap Mine | *verify-in-build* (code 200) | 0 (code 1.0) | 0.5 (code 0) | 75 ✓ | | Cryo Grenade | 1 ✓ | 0 (code 1.0) | 0.5 ✓ | 50 ✓ | | Cryo Mine | 1 ✓ | 0 (code 1.0) | 0.5 ✓ | 25 ✓ | | Fat Man | *verify-in-build* (code 600) | 0 ✓ | 30 ✓ | 1000 (code 8500) | | Missile Launcher | *verify-in-build* (code 100) | 0 (code 1.0) | 20 (code 15) | 500 (code 4500) | | Miss Launcher | *verify-in-build* (code 20) | 0 ✓ | 15 ✓ | 400 ✓ | | Experimental MIRV | *verify-in-build* (code 80) | 0 ✓ | 30 ✓ | 2498 ✓ | | Rock-It Launcher | 50 (code 25) | 1 ✓ | 8 (code 10) | 200 (code 250) | > Note: `Tin Grenade` (code line 109) is **not a canonical FO3 weapon** — it is > the invented output of the equally-invented "Abraxo Cleaner Bomb" recipe in > `[RECIPES.CSV]`. Flagged in §3.8, not corrected here. ### 3.7 Melee & Unarmed Base damage here is systematically inflated in the code (often 2-4×); the wiki values below are the master-table `Dmg/Attack`. | Weapon | Base_Dmg | Crit_Dmg | Crit_Mult | Atk/sec | Weight | Value | |---|--:|--:|--:|--:|--:|--:| | Baseball Bat | 9 (15) | 9 (15) | 1.0 ✓ | 1.4286 (1.8) | 3 ✓ | 55 (100) | | Sledgehammer | 20 (30) | 10 (30) | 1.0 ✓ | 1.4286 (0.9) | 12 (10) | 130 (100) | | Super Sledge | 25 (80) | 25 (80) | 1.0 (1.5) | 1.4286 (0.9) | 20 (15) | 180 (10000) | | Combat Knife | 7 (20) | 13 (20) | 3.0 (2.0) | 3 (2.5) | 1 ✓ | 50 (75) | | Switchblade | 5 (9) | 9 ✓ | 2.0 (1.5) | 3 (2.5) | 1 (0.5) | 35 (25) | | Shishkebab | 35 (50) | 24 (50) | 2.0 (1.5) | 2.3077 (1.3) | 3 (4) | 200 (2000) | | Chinese Officer's Sword | 10 (20) | 15 (20) | 2.0 ✓ | 2.3077 (2.0) | 3 (4) | 75 (300) | | Ripper | 30 (20) | 0 (20) | 0.0 (2.0) | 1 (2.5) | 6 (3) | 100 (600) | | Lead Pipe | 9 (22) | 18 (22) | 1.0 ✓ | 2.3077 (1.5) | 3 (8) | 75 (50) | | Pool Cue | 3 (12) | 0 (12) | 0.0 (1.0) | 1.4286 (2.5) | 1 (2) | 15 ✓ | | Rolling Pin | 3 (6) | 8 (6) | 0.0 (1.0) | 1.7308 (2.5) | 1 ✓ | 10 (15) | | Nail Board | 8 (20) | 0 (20) | 0.0 (1.0) | 1.4286 (2.0) | 4 (5) | 30 (50) | | Board of Education | 12 (25) | 12 (25) | 1.0 ✓ | 1.4286 (1.8) | 4 (6) | 60 (1500) | | Tire Iron | 6 (12) | 6 (12) | 1.0 ✓ | 2.3077 (1.8) | 3 ✓ | 40 (15) | | The Break | 6 ✓ | 6 ✓ | 1.0 ✓ | 1.4286 (1.429) | 1 ✓ | 50 ✓ | | The Tenderizer | 30 ✓ | 15 ✓ | 1.0 ✓ | 1.4286 (1.429) | 12 ✓ | 230 ✓ | | Ant's Sting | 4 ✓ | 4 ✓ | 1.0 ✓ | 3.0 ✓ | 1 ✓ | 30 ✓ | | Butch's Toothpick | 10 ✓ | 13 ✓ | 2.5 ✓ | 3.0 ✓ | 1 ✓ | 50 ✓ | | Occam's Razor | 10 ✓ | 13 ✓ | 3.0 ✓ | 3.0 ✓ | 1 ✓ | 65 ✓ | | Trench Knife | 7 ✓ | 13 ✓ | 3.0 ✓ | 3.0 ✓ | 1 ✓ | 50 ✓ | | Vampire's Edge | 15 ✓ | 20 ✓ | 3.0 ✓ | 2.3077 (2.308) | 1 ✓ | 100 ✓ | | Stabhappy | 10 (30) | 15 (30) | 4.0 (2.0) | 3 (2.5) | 1 ✓ | 65 (3500) | | Ritual Knife | 6 ✓ | 18 ✓ | 3.0 ✓ | 3.0 ✓ | 1 ✓ | 20 ✓ | | Axe | 20 ✓ | 30 ✓ | 2.0 ✓ | 1.4286 (1.429) | 6 ✓ | 60 ✓ | | Auto Axe | 35 ✓ | 0 ✓ | 0.0 ✓ | 1.0 ✓ | 20 ✓ | 200 ✓ | | Man Opener | 35 ✓ | 0 ✓ | 0.0 ✓ | 1.0 ✓ | 20 ✓ | 200 ✓ | | Steel Saw | 16 ✓ | 0 ✓ | 0.0 ✓ | 1.0 ✓ | 20 ✓ | 200 ✓ | | The Mauler | 45 (80) | 0 (80) | 0.0 (1.0) | 1 (1.1) | 20 (5) | 200 (4000) | | Jack | 30 ✓ | 15 ✓ | 1.0 ✓ | 1.0 ✓ | 6 ✓ | 200 ✓ | | Jingwei's Shocksword | 35 (20) | 25 (40) | 2.0 ✓ | 2.3077 (2.0) | 3 (4) | 500 (3000) | | The Dismemberer | 25 ✓ | 40 ✓ | 2.0 ✓ | 1.4286 (1.429) | 6 ✓ | 55 ✓ | | Highwayman's Friend | 10 ✓ | 10 (10) | 1.0 ✓ | 2.3077 (2.308) | 5 ✓ | 75 ✓ | | Fertilizer Shovel | 15 ✓ | 30 ✓ | 3.0 ✓ | 1.4286 (1.429) | 3 ✓ | 55 ✓ | | Brass Knuckles | 6 (8) | 6 (8) | 1.0 ✓ | 1.5789 (2.7) | 1 ✓ | 20 (25) | | Power Fist | 20 (60) | 20 (60) | 1.0 ✓ | 1.0909 (1.1) | 6 (5) | 100 (2500) | | Fisto! | 25 ✓ | 25 ✓ | 1.5 (1.5) | 1.0909 (1.091) | 6 ✓ | 100 ✓ | | Deathclaw Gauntlet | 20 (60) | 30 (60) | 5.0 (1.0) | 1.6304 (1.1) | 10 (1) | 150 (5000) | ### 3.8 NOT Fallout 3 weapons — flag for owner decision (do NOT "correct") These rows are not in the canonical FO3 weapon list at all. Same class as the fabricated perks / Enclave hit squad — a re-source cannot fix them because there is nothing to source. **Owner decides delete vs keep.** | Row (code line) | Verdict | Evidence | |---|---|---| | `Bumper Sword` (91) | **Cross-game — Fallout: New Vegas.** No FO3 entry. | Not in FO3 master table; canonical NV melee weapon | | `Golf Club` (95) | **Not in FO3.** Likely NV leak. | Absent from the full FO3 weapon list | | `Plunger` (98) | **Likely invented.** | No such FO3 weapon; not on the wiki | | `Tin Grenade` (109) | **Invented** (output of the invented "Abraxo Cleaner Bomb" recipe). | No canonical FO3 "Tin Grenade" weapon | > Recommend **delete all four** for parity with the perk-invention fix (highest > trust), but this is an owner call — flagged, not auto-removed. ### 3.9 Verification tally - **Directly verified against fallout.wiki:** ~96 conventional weapons (all guns, energy, melee, unarmed, non-explosive heavy) — read from the single canonical master table, not sampled. - **Rule/verify-in-build:** ~11 explosives (blast damage must be pulled per-page; weight/value already verified from the master table). Frag Grenade blast (100) verified directly as the pattern proof. - **Flagged non-canonical (owner decision):** 4 (§3.8). - **Genuinely UNVERIFIED / guessed:** **0** — nothing was left as a guess. --- ## 4. Correction + guard plan (build stage) ### 4.1 The edit - **File:** `js/data/db_fo3.js`, `[WEAPONS.CSV]` block only (lines 46-161). - **Fields changed:** the 6 consumed/displayed numerics only (`Base_Damage, Crit_Damage, Crit_Multiplier, Attacks_Per_Second, Weight, Value`). Keep `Req_Unarmed, Req_STR, Reach, Special_Attack_AP, Special_Rules, Ammo_Type` **byte-identical** (PARKED / out of scope — do not stamp unverified columns as fixed). - **Explosives:** pull each blast value from its own wiki page during the build (§3.6), don't guess. - **Non-FO3 rows (§3.8):** remove after owner confirmation (default: delete all 4). - **UTF-8 (Protocol 39):** edit via the Edit tool or Node `fs.writeFileSync(…, 'utf8')` — **never** PowerShell. (This file has no non-ASCII in the weapon block, but the rule stands.) ### 4.2 Fix the false citation (correct-then-cite) Replace the blanket, unearned Protocol-3 header claim (lines 14-16) with an **honest, dated provenance note** that names what was actually verified and when: ``` // PROTOCOL 3: WEAPONS.CSV combat + economy fields (Base_Damage, Crit_Damage, // Crit_Multiplier, Attacks_Per_Second, Weight, Value) re-verified row-by-row // against the fallout.wiki "Fallout 3 Weapons" master table on 2026-07-15 // (see planning/FO3_WEAPON_DATA.md). PARKED columns (Req_*/Reach/Special_Attack_AP) // were NOT re-sourced. This file is a typist for that data, never an authority. ``` Match whatever inline-citation pattern the karma/perk fixes established (`src:`-style) if the owner wants per-row provenance — but see §4.3 on why a citation guard is necessary-but-not-sufficient here. ### 4.3 The guard (Protocol 13 + Protocol 20 + Protocol 36b) Two layers, because a citation guard alone cannot catch a wrong number: **(a) Golden-master pin — the real guard (primary).** Add a Node-runner suite (mirror of the Suite 131 directive golden-master) that pins each FO3 weapon's 6 consumed fields to the corrected values in this doc. Any future drift — a re-inflated value, a fat-fingered fire-rate — fails the gate. This is the regression test Protocol 13 requires, and it is the only guard that proves the **number** is right, not merely that a citation exists. It doubles as the "would-have-caught-it" guard: the current 3500 Sniper value fails it instantly. **(b) Plausibility/range guard — cheap breadth (secondary).** A static suite that fails if any FO3 weapon stat leaves a sane band: `Base_Damage 0-250 · Crit_Multiplier 0-100 (Alien Blaster is ×100 — do not set the cap lower) · Attacks_Per_Second 0-25 · Weight 0-35 · Value 0-3000` (Fat Man value 8500 in the current code trips this immediately; post-correction the max is 2498). This catches a whole *class* of "10× inflation" even for a future new weapon the golden-master doesn't yet pin. **Honest limit (state it in the commit — the reframing-review lesson):** a citation guard checks that a `src:`/provenance note *exists*; it does **not** prove the value is correct. That is exactly how the current false header shipped. So the load-bearing guard is the golden-master pin (a), not the citation. The citation is for humans; the pin is for the machine. ### 4.4 Protocol 38 — keep the guards game-agnostic The range guard and golden-master must read the **active game's** table (`GAME_DEFS`/`databaseCSVs`), not hardcode `FO3`. NV has the identical schema; the range guard should apply to **both** games' weapon tables (NV was not audited here but the same plausibility band is valid). The golden-master pin is FO3-specific data but keyed off the game context, not a literal branch. --- ## 5. Scope + risk notes **What feeds off this table (blast radius of the fix):** - `lookupItemInDb()` (Weight/Value) → CARGO MANIFEST encumbrance totals, LOOT add-to-inventory, OCR apply, and `getTradeCatalog()` → the native TRADE barter terminal's caps math and PERSONAL RECORD equipped-gear value. **Wrong values today mean wrong barter prices and wrong carry-weight.** Correcting them changes displayed numbers users act on — desirable, but verify TRADE/CARGO still render after the edit. - `lookupWeaponStats()` (Base_Damage/Crit_Damage/Crit_Multiplier/Attacks_Per_Second) → the V.A.T.S. AP-strike optimizer (`ui-core-cmd.js:491`), THREAT time-to-kill (`ui-render-databank.js:91`), and the CONSULT/DATABANK weapon readout (`ui-render-databank.js:217`) which **displays these numbers to the user**. - **The raw table is injected into the AI system directive** (`api.js:389`, `databaseCSVs` in `systemInstruction`). The AI *reads every weapon number*, so wrong stats mislead AI narration and in-fiction advice. This is the widest surface and the strongest reason to fix it. **Guardrails:** - **NV untouched (Protocol 38).** This unit edits **only** `js/data/db_fo3.js`. `db_nv.js` is a separate file with its own table; no shared literal is touched. (The *guards* in §4.3 should cover both games, but no NV **data** changes.) - **APP_VERSION stays 2.8.0.** This is an FO3 data correction under `[Unreleased]` on `dev`, same as the karma/perk fixes — not a feature. No MINOR bump. - **CACHE_NAME must bump** in the build stage (Protocol 1) — `db_fo3.js` is under `js/`, a served/precached file. Bump `-rN` in `sw.js`. - **Protocol 2/2a docs:** CHANGELOG `[Unreleased]` Fixed entry (plain English: "Corrected Fallout 3 weapon damage, crit, fire-rate, weight and value stats to match the official wiki; removed weapons that aren't in Fallout 3"); test-count sync everywhere if the guard suites add tests. - **Protocol 13:** the golden-master pin IS the regression test — ships in the same commit as the data fix. - **Verification (Protocol 10/26):** after the edit, render CONSULT/THREAT/TRADE for a couple of corrected weapons (e.g. Sniper Rifle, 10mm Pistol) and confirm the new numbers display and the barter math is sane. Data-only change, but the display surfaces should be spot-checked. **Out of scope (explicitly):** the PARKED columns (`Req_*`, `Reach`, `Special_Attack_AP`), the `[ARMOR.CSV]`/`[BESTIARY.CSV]`/`[AMMO.CSV]`/`[CHEMS.CSV]` tables (the provenance sweep flagged only weapons; armor/bestiary are a separate future unit), and the invented `[RECIPES.CSV]` "Abraxo Cleaner Bomb" entry (owner call, tracked with the §3.8 `Tin Grenade` flag). --- ## Report summary (for the owner) **Diagnosis:** the FO3 weapon table is **scattered-wrong, not inflated by a fixed multiplier.** The "~10×" from the first sweep was a small-sample fluke — in truth the errors are independent per field and per weapon, in **both** directions (Sniper Rifle value 3500 → should be **300**; but 10mm Pistol value 100 → should be **225**, and its fire-rate 1.7 → should be **6**). The single most-wrong field is **fire-rate (`Attacks_Per_Second`)**, then **value**, then **crit multiplier**; base damage and weight are wrong less often. Melee/unarmed base damage is consistently inflated 2-4×. The file's header citation to fallout.wiki is **false** for this table — the numbers were never transcribed from the wiki. Same trust failure as the invented perks, just numeric. **Coverage:** **~96 weapons verified directly** against the one canonical fallout.wiki master table (whole-table, not sampled); **~11 explosives** need their blast number pulled per-page in the build (weight/value already verified; Frag Grenade's blast of 100 verified as the pattern); **4 rows are not FO3 weapons** (`Bumper Sword`, `Golf Club`, `Plunger`, `Tin Grenade` — owner decides delete); **0 left as guesses.** **Recommended build approach:** apply the §3 corrected values to the 6 consumed fields only, leave PARKED columns byte-identical, delete the 4 non-FO3 rows, and replace the false header with the dated honest provenance note (§4.2). **Guard:** a golden-master suite that pins every FO3 weapon's corrected stats (the real regression guard — proves the numbers, not just that a citation exists) **plus** a plausibility range guard that fails on any wildly out-of-band stat (the "10×" class), both game-agnostic so NV is covered too. Bump the cache, keep 2.8.0, NV data untouched.
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).