FORTS — SOURCE-OF-TRUTH DATA (raw CSV)
======================================================================

Patch: 1.38.2 r22447   Build: 24769223

Every file in this archive is plain UTF-8 CSV with a header row, one row per record,
and a Patch column on every row so a file separated from this archive still says
which build it describes. Column headers are the same human-readable labels the
companion workbook uses. Nothing here is presentation — join it, filter it and
render it however your project needs.

WHERE THESE NUMBERS COME FROM
----------------------------------------------------------------------
This automates a pipeline these people built by hand; it does not replace
their work. It was built against Endo's dump mod, which is where these
numbers first became readable. The stats here are now generated from the
game's own data files, with the dump kept as a cross-check.

CREDITS — the work this dataset builds on
----------------------------------------------------------------------
  EarthWork Games
      Forts and its DLCs (Moonshot, High Seas, Firebird)

  Endo
      'Dump - Main Tables' mod — pioneering community stat documentation

  Thonio
      BetterLog — community logging tool

  SamsterBirdies
      forts-modding-tools (community modding utilities)

  42 / 42scientist
      the 'Forts Variables' community spreadsheet this evolves beyond, and the
      observed projectile shoot-down / destruction tables the 'Shooting Down
      Shells' tab verifies

  serpent et al.
      mod authors whose work informed this; attribution always honored

  Gonnetzz / Guuntezza
      AsfFeed (github.com/Gonnetzz/AsfFeed) — the ArchiSteamFarm plugin that
      showed Forts' public lobby list and ranked leaderboards can be read over
      SteamKit2, and the approach this site's rankings feed follows. Beyond
      the plugin, his deep general Forts knowledge and the insight from his
      earlier work uncovering how the game works internally, generously
      shared, materially helped this project.

  I am myself
      The Forts ranking Discord bot behind this site's entire rankings and
      leaderboard section — that whole ranked-activity feature rests on his
      work — together with his broad general Forts knowledge, generously
      shared. He also donated his bot's complete season-43 dataset — the
      leaderboard log and per-player opponent records — which recovered the
      ranked history lost to a power outage and now backfills the entire
      season on the site.

TERMS OF USE
----------------------------------------------------------------------
  The COMPILATION is CC BY 4.0 (Creative Commons Attribution 4.0 International):
  https://creativecommons.org/licenses/by/4.0/ . That covers the part this project
  authored -- the extraction, the schema, the column names, the ordering and these
  notes. Use it for anything, including commercially; credit forts-tools.com and
  keep a link back to https://forts-tools.com/data , where this bundle is published.

  It does NOT and cannot cover the underlying material. Forts, and the game data
  these tables describe, belong to EarthWork Games. The community work named above
  belongs to its authors. If you republish any of this, carry the credits with it.

FILES
----------------------------------------------------------------------
  weapons.csv   (44 rows, 33 columns)
    Every weapon: cost, build/scrap time, hit points, mass, hitbox, repair and
    sell values, and what must be built first.

  devices.csv   (32 rows, 33 columns)
    Every device (economy, defence, utility) on the same columns as weapons.

  materials.csv   (20 rows, 29 columns)
    Structural materials: cost, reclaim, strength, length limits and the
    beam/fire behaviour of each.

  projectiles.csv   (126 rows, 36 columns)
    The complete projectile ledger — damage, splash, penetration, anti-air,
    fire behaviour, and the arc numbers (gravity, drag, mass).

  tech_edges.csv   (113 rows, 8 columns)
    The upgrade / downgrade graph: which item turns into which, and what that
    costs or refunds.

  item_meta.csv   (96 rows, 6 columns)
    The join table: every item's in-game display name, what kind of thing it
    is, whether you can build it, and which content unlocks it.

  commanders.csv   (16 rows, 10 columns)
    All 16 commanders: faction, which DLC they need, and the commander gauge
    numbers behind their activation.

  commander_content.csv   (16 rows, 6 columns)
    Per commander: the content their pick adds, and the double-edged downsides
    the in-game card does not spell out.

  commander_rules.csv   (168 rows, 5 columns)
    Each commander's abilities in words — one row per ability, marked
    always-on or on-activation.

  commander_script_mods.csv   (1142 rows, 11 columns)
    The exact per-item modifier each commander applies — what changes, how, by
    how much, and whether it is always on or only while activated.
     (197 of 1378 source records are not published here — see NOTES)
     (39 exact duplicate records in the game's own data collapsed to one row each)
     NOTE: 5 row(s) in this file appear as ONE row on the companion workbook's
     Commander Numeric Effects tab. Two separate engine records can share a
     display name; this file keeps both because its Save Name column tells
     them apart, and the workbook, which has no such column, shows one. That
     difference of 5 row(s) is the only one between the two.

  interactions.csv   (126 rows, 7 columns)
    The emergent rules in plain language — Firebeam conversions, EMP, magnetic
    fields, smoke, fire, commander interactions, engine rules.
     (9 of 135 source records are not published here — see NOTES)

  weapon_firing.csv   (43 rows, 49 columns)
    Per weapon: aim behaviour, firing arc, burst shape, reload and per-shot
    cost. Columns marked (skirmish & MP) are the values competitive play
    actually loads; the (campaign) twin is the base file value before the
    skirmish overlay.

  weapon_draw.csv   (43 rows, 18 columns)
    Sustained firing DRAW — what a weapon costs per second when it is kept
    firing, which is the number the late-game energy problem is made of.

  weapon_heat.csv   (3 rows, 10 columns)
    The overheat cycle for the weapons that have one.

  device_wind.csv   (6 rows, 13 columns)
    Wind / depth parameters — the placement numbers that decide what a power
    device actually earns where you put it.

  device_economy.csv   (14 rows, 8 columns)
    Per-device income and storage.

  device_cost.csv   (40 rows, 11 columns)
    Build economy for devices and ammunition types.

  game_constants.csv   (15 rows, 3 columns)
    Game-wide engine constants: repair and reclaim rates, the build tilt cap,
    starting economy, fire-group size.
     (expanded from 8 source records: one record can describe several constants)

  damage_curves.csv   (881 rows, 7 columns)
    The dense per-time-step samples behind the workbook's damage-curve chart
    pages — one row per (weapon, time, damage/second) point. A ramping beam is
    0.01 s apart; a flat beam is emitted as two endpoint rows. The area under
    each weapon's samples is the real damage a full burst deals.

HOW THE FILES JOIN
----------------------------------------------------------------------
  Every item — weapon, device or material — has one stable Save Name, and that is
  the join key. item_meta.csv maps it to the in-game display name and says what
  kind of thing it is, so it is the table to start from. tech_edges.csv joins two
  items by From Save Name / To Save Name. weapon_firing.csv, weapon_draw.csv and
  weapon_heat.csv join weapons.csv on Save Name. projectiles.csv is joined from
  weapon_firing.csv's Projectile Save Name. The commander files join each other on
  the Commander column, and reach items through Target Save Name.

NOTES
----------------------------------------------------------------------
  * Patch stamp. Every table generated per build carries this build's stamp. These
    files are curated metadata that does not change with a patch, and inherit it:
    commander_content.csv, interactions.csv, item_meta.csv.
  * Blank vs zero. A blank cell means the game data sets no value for that field
    and the engine default applies — it does NOT mean zero, and the two are not
    interchangeable. Zero is written as 0.
  * Flag columns read yes / blank rather than 1 / 0.
  * Campaign vs skirmish. Several firing values are re-tuned for skirmish and
    multiplayer. Where that happens both are given: the column marked
    (skirmish & MP) is what competitive play loads, and (campaign) is the base
    value before that. A row's Re-tuned in skirmish & MP column says which rows
    this applies to.
  * Records not published, and why — three separate reasons, never one number:
      - commander_script_mods: 197 of the game's own records are not
        published here. Each of them sets engine wiring that the game's data
        gives no player-readable form to: an internal reference to another
        item, an animation or sound timing, or an entry in a commander's own
        configuration table. They are omitted rather than published as raw
        internals.
        This is NOT a claim that they hold no numbers. 184 of the 197 carry a
        numeric value, and at least one of those is a real gameplay effect (a
        commander adding one round to a rapid-fire weapon's burst). Enumerated
        2026-08-24. The companion workbook omits exactly the same records, so
        the two surfaces agree with each other; neither carries these numbers.
      - interactions: tactics and plays. This file lists engine MECHANICS; the
        plays built on top of them are deliberately not part of this dataset.
      - game_constants ships MORE rows than the game has records, because one
        engine record can describe several separate constants.
    Exact duplicate records in the game's own data are collapsed to one row.
  * Verified. A row in interactions.csv whose Verified column reads 'unverified' is
    reported behaviour that is not yet pinned down in the game's own data. Everything
    else in that file is.

