130 lines
7.2 KiB
Markdown
130 lines
7.2 KiB
Markdown
# Content Matrix Authority
|
|
|
|
> Revision: `abg-v2-content-r1`
|
|
>
|
|
> Scope: generated recruits and combat content for the design-only
|
|
> recruit-line auto-battler defined by `.agent-taskgraph/spec.md` revision
|
|
> `design-spec-r2`.
|
|
|
|
## Authority And Boundaries
|
|
|
|
The frozen specification and later integrated product rules outrank this
|
|
package. This package owns identities, catalog relationships, content-facing
|
|
triggers, tradeoffs, counters, and production briefs. It does not own combat
|
|
formulas, prices, save transactions, UI layouts, runtime code, or final media.
|
|
|
|
All names and rules here are independently authored for Aetherbound Guild.
|
|
Authorized private reference material informed only the need for readable
|
|
party order, role telegraphs, equipment decisions, milestone pivots, and
|
|
separate gameplay and production ledgers. No reference names, prose, formulas,
|
|
layouts, progression topology, code, or commercial assets are reproduced.
|
|
|
|
The former authored-cast and social-story assumptions, multi-lane formation,
|
|
and fixed deployment-size assumptions are obsolete. Achievements and
|
|
collection screen content are intentionally outside this Goal and require a
|
|
later frozen contract; their removed legacy document is not replaced by
|
|
invented scope.
|
|
|
|
## Package Map
|
|
|
|
| Authority | Exact owned content |
|
|
|---|---|
|
|
| [RECRUIT_GENERATION.md](RECRUIT_GENERATION.md) | Generated name, modular appearance, rolls, profession, trait, equipment, level, price tier, rarity, and duplicate rules |
|
|
| [PROFESSION_CATALOG.md](PROFESSION_CATALOG.md) | 12 base, 24 regular advanced, and 6 hidden hybrid professions |
|
|
| [TRAIT_CATALOG.md](TRAIT_CATALOG.md) | 36 one-per-recruit mechanical traits |
|
|
| [EQUIPMENT_CATALOG.md](EQUIPMENT_CATALOG.md) | 320 unit equipment identities |
|
|
| [ARTIFACT_CATALOG.md](ARTIFACT_CATALOG.md) | 60 run-wide rule modifiers |
|
|
| [REGION_CATALOG.md](REGION_CATALOG.md) | 8 regions, progression pressure, encounter grammar, and production ledger |
|
|
| [ENEMY_CATALOG.md](ENEMY_CATALOG.md) | 100 ordinary/elite enemies and 16 bosses |
|
|
|
|
## Stable ID Namespaces
|
|
|
|
| Pattern | Meaning | Required total |
|
|
|---|---|---:|
|
|
| `PF-B01..PF-B12` | Base profession | 12 |
|
|
| `PF-A01..PF-A24` | Regular advanced profession | 24 |
|
|
| `PF-H01..PF-H06` | Hidden hybrid profession | 6 |
|
|
| `TR-001..TR-036` | Recruit trait | 36 |
|
|
| `EQ-001..EQ-320` | Equipment | 320 |
|
|
| `AR-001..AR-060` | Artifact | 60 |
|
|
| `RG-01..RG-08` | Region | 8 |
|
|
| `EN-Rx-yy` | Ordinary or elite enemy assigned to region `x` | 100 total |
|
|
| `BO-Rx-yy` | Boss assigned to region `x` | 16 total |
|
|
|
|
IDs are immutable after owner approval. Renaming display text does not change
|
|
an ID. Rarity, level, palette, portrait part, animation frame, and elite combat
|
|
state never create another identity.
|
|
|
|
## Shared Content Vocabulary
|
|
|
|
The vocabulary is semantic so integration can map it to the core system's
|
|
numeric formulas without content inventing a second simulator.
|
|
|
|
| Term | Content meaning |
|
|
|---|---|
|
|
| front / center / rear band | Semantic order preference: front is nearest the enemy, rear is farthest, and center is between; integrated core rules own segmentation and short-line ties |
|
|
| foremost / rearmost | Living unit nearest the front or rear end of its line |
|
|
| neighbor | Immediately adjacent living unit after collapse is resolved |
|
|
| behind / ahead | Relative order, never a separate lane |
|
|
| reach N | May select through at most `N-1` intervening living units; `line` reaches any legal unit |
|
|
| step / swap / push / pull | Discrete order changes resolved by the core movement transaction |
|
|
| collapse | The deterministic closing of a vacant position after death, dismissal is never a battle action |
|
|
| reserve | Owned recruit not currently deployed; not a hidden battle slot |
|
|
| cadence | One unit's basic-action timing cycle |
|
|
| wind-up | Telegraph interval before an action resolves |
|
|
| interrupt | A declared cancellation rule, never an implied chance |
|
|
| marked / guarded / hindered / exposed | Visible content tags whose numeric implementation belongs to core rules |
|
|
| Parts, Focus, Verse, Remedy, Guard | Profession-local meters or tokens; each profession row defines gain and spend behavior |
|
|
| behavior class `B` | Changes targeting, timing, reach, order, resource flow, status rules, or profession behavior |
|
|
| tradeoff class `T` | Changes a choice through a visible conditional benefit and cost but does not rewrite a core hook |
|
|
|
|
Equipment must have at least 160 `B` rows. Artifacts never attach to one unit:
|
|
they modify shop, route, reward, loss, formation, encounter, or other run-wide
|
|
rules. A row is filler if its display name can change without changing a
|
|
trigger, legal target, counterfactual, or production brief.
|
|
|
|
## Production Brief Codes
|
|
|
|
Every identity carries a compact production brief. These are planning counts,
|
|
not generated or final assets.
|
|
|
|
| Code | Required deliverable |
|
|
|---|---|
|
|
| `I` | Inventory/preview icon plus monochrome accessibility silhouette |
|
|
| `O` | Modular actor overlay or held-object layer |
|
|
| `A` | Reusable animation family and identity-specific timing note |
|
|
| `V` | VFX cue with reduced-motion state and non-color shape cue |
|
|
| `S` | SFX event role, caption token, and speed-safe mix note |
|
|
| `P` | Portrait/body-part family or enemy silhouette kit |
|
|
| `E` | Environment layer, hazard cue, or encounter prop |
|
|
| `M` | Music-state or boss transition requirement |
|
|
|
|
A row such as `I/O/V/S` requests all four deliverables. Reuse keys appear in
|
|
the row text; reuse never permits identical threat silhouettes where the
|
|
player must distinguish behavior.
|
|
|
|
## Automated Acceptance Checks
|
|
|
|
Run from the repository root. The first command verifies exact unique totals
|
|
from the defining authorities; the second verifies contiguous numeric
|
|
namespaces; the third rejects legacy requirements inside the product-facing
|
|
content authorities.
|
|
|
|
```sh
|
|
ruby -e 'x={"PROFESSION_CATALOG.md"=>[/^\| `(PF-B\d{2})`/,12,/^\| `(PF-A\d{2})`/,24,/^\| `(PF-H\d{2})`/,6],"TRAIT_CATALOG.md"=>[/^\| `(TR-\d{3})`/,36],"EQUIPMENT_CATALOG.md"=>[/^\| `(EQ-\d{3})`/,320],"ARTIFACT_CATALOG.md"=>[/^\| `(AR-\d{3})`/,60],"REGION_CATALOG.md"=>[/^\| `(RG-\d{2})`/,8],"ENEMY_CATALOG.md"=>[/^\| `(EN-R\d-\d{2})`/,100,/^\| `(BO-R\d-\d{2})`/,16]}; x.each{|f,a| s=File.read("docs/content/#{f}"); a.each_slice(2){|r,n| abort "#{f}: #{r}" unless s.scan(r).flatten.uniq.length==n}}'
|
|
```
|
|
|
|
```sh
|
|
ruby -e 's=File.read("docs/content/EQUIPMENT_CATALOG.md"); a=s.scan(/^\| `EQ-(\d{3})`/).flatten.map(&:to_i); abort "equipment gap" unless a==(1..320).to_a; s=File.read("docs/content/ARTIFACT_CATALOG.md"); a=s.scan(/^\| `AR-(\d{3})`/).flatten.map(&:to_i); abort "artifact gap" unless a==(1..60).to_a; s=File.read("docs/content/TRAIT_CATALOG.md"); a=s.scan(/^\| `TR-(\d{3})`/).flatten.map(&:to_i); abort "trait gap" unless a==(1..36).to_a'
|
|
```
|
|
|
|
```sh
|
|
! rg -ni '\b(fixed (hero|protagonist)|relationship|affinity|romance|personal[- ]arc|three[- ]lane|six-unit|Directive|Anchor|Cache)\b|front/rear grid' docs/content/{RECRUIT_GENERATION,PROFESSION_CATALOG,TRAIT_CATALOG,EQUIPMENT_CATALOG,ARTIFACT_CATALOG,REGION_CATALOG,ENEMY_CATALOG}.md
|
|
```
|
|
|
|
Integration must additionally resolve every backticked ID against these
|
|
namespaces, compare product hook names, and independently review whether each
|
|
row changes an actual decision. Exact counts are a necessary gate, not proof of
|
|
fun, comprehension, balance, visual quality, listening quality, or owner
|
|
approval.
|