# Competitive research database

Open [the browser](competitive.html), download [SQLite](competitive-data.sqlite), [complete JSON](competitive-data.json), or [attribute CSV](raw-skill-attributes.csv). The original [community guide](guide.html) remains the move-text and training reference.

## What was added

The exporter reads every indexed asset ending `_x.xfbin` or `prm.bin.xfbin`: 542 decoded assets, 1,813 skill XML nodes, 48,762 individual attributes, 58 distinct attribute names, 13,182 slot records including empty/END entries, 2,756 named non-END slots, and 678 damage-identifier spans. All 1,548 authored commands and 184 internal groups are included. These are inventory counts, not playable-character or measured-move counts.

Two asset chunk names differ from their embedded XML IDs. Both identities are retained in `skills`; the summary lists the discrepancies. Zero selected assets failed decoding. This does not establish complete executable or runtime coverage.

All source values are extracted from the supplied build. No number was copied from another Storm game. The earlier 196 skill nodes remain in the larger dataset; the new inventory does not presume that previously unassociated nodes belong to a localized move.

## Effective damage is still unresolved

`Hit.damageId` is a reference, not an amount. `Hit.hitPoint` is an authored field whose effective meaning has not been validated; it must not be relabeled attack damage or fighter health. `DAMAGE_ID_NONE` likewise does not establish zero damage for an entire action. Binary spans start at an identifier and end at the next identifier or chunk end: those boundaries are not a decoded numeric record schema.

The Naruto pilot contains three observed candidate-health decreases of approximately 0.6 on an observed 100-point scale. Guard conditions, authoritative storage, units and action identity are not sufficiently established for canonical damage. It is preserved in metadata as an observation, not joined to an invented command or used to rank fighters. No verified damage amounts or frame timings are published.

## Useful queries

SQLite is a real portable database, requiring no server. It contains assets, skills, attributes, slots, damage_identifiers, command_associations, commands, groups, metrics and metadata. `damage_references` joins literal XML damage references to identifier spans. Missing metrics are SQL NULL; they are never zero.

```sql
-- Find every damage reference and its source, including unresolved identifiers.
SELECT * FROM damage_references WHERE damage_id LIKE '%2ASM%';

-- Inspect literal projectile slots for Naruto without assuming runtime dispatch.
SELECT asset, slot, file, skill_id, offset
FROM slots
WHERE asset = '2nrtprm.bin.xfbin' AND slot LIKE '%SYURIKEN%';

-- Find raw collision-radius settings. Units and live overrides remain unvalidated.
SELECT asset, skill_id, path, raw_value
FROM attributes WHERE variable = 'Hit.radius';

-- Join previously established authored-role associations to source attributes.
SELECT DISTINCT c.character, c.name, a.variable, a.raw_value, a.asset, a.path
FROM commands c
JOIN command_associations x ON x.command_id = c.id
JOIN attributes a ON a.asset = x.asset AND a.skill_id = x.skill_id
WHERE a.variable = 'Hit.damageId';

-- Inspect unfilled damage measurements explicitly.
SELECT command_id, status FROM metrics
WHERE metric = 'damage' AND value IS NULL;
```

Association rows are editorial links from character code and authored input role, not observed runtime dispatch. Do not sum rows after joining shared skills: one node can be referenced by multiple commands or effects. SQL row counts do not represent hit counts.

## Measurements that support competitive decisions

| Decision | Required observations | Conditions that must remain attached |
|---|---|---|
| Punish an unsafe move | Defender actionable update minus attacker actionable update after block; candidate punish startup and reach | Spacing, guard contact, pushback, hitstop convention, mode |
| Choose a combo route | Net damage, resource use, escape tests, success and failure counts | Defender, form, resources, scaling, wall/stage, input sequence |
| Win projectile exchanges | Spawn/contact events, collision outcome, tracking, recovery | Both projectiles, range, direction, grounded/aerial state |
| Decide whether to spend chakra | Measured route damage and cost, remaining resources, failed-route cost | Starting resources, opponent resources, substitutions and supports |
| Evaluate an awakening | Entry/exit windows, changed actions, damage and defensive behavior | Exact form, health threshold, duration, build and options |
| Build matchup conclusions | Repeated interactions plus representative match outcomes | Player skill, stage, rules, build, character variants and sample size |

For each timing value, record a validated simulation-update source and inclusive/exclusive boundaries. Startup ends at first active collision; recovery ends at the chosen actionable boundary. Cinematic release, cancel eligibility and freely actionable states may differ. Presented FPS and a script `FRAME_ELAPSED` argument do not establish these values.

The ordered experiments and acceptance criteria are in [the health pilot](health-pilot.html). The local [measurement protocol](../work/MEASUREMENT-SESSION.md) explains fresh-process calibration and read-only sampling. Existing community submissions can be recorded in Player Lab; they must remain separate from published independently checked metrics.

## Melee-level infrastructure target

[Project Slippi](https://github.com/project-slippi/project-slippi) separates replay/metadata capture from the library that computes statistics. The relevant pattern is a reproducible event record with a documented schema, followed by derived statistics that can be recomputed. This project now has an expanded source database; it does not yet have comparable gameplay replay capture.

To reach that level, this port needs build-matched actor IDs, accepted inputs, positions, collision events, health/resource changes, actionable states and simulation updates in one trace. Validate representative ground, projectile, puppet and transformation cases before roster-wide automation. A tier list must remain an interpretation backed by matchup evidence, not a score generated from unvalidated raw fields.

Rebuild with `python outputs/tools/competitive_database.py`. This reads original assets and writes only workspace outputs. The JSON summary contains SHA-256 values for the database, JSON and CSV. The existing PDF and older ZIP are historical partial releases and do not contain this expansion.
