AI Substrate — Logic Driver Pro as fuzzy system (Track D)
Status: Design lock · 2026-10-26
Scope: Shared AI substrate only — GFP, controller, fuzzy-in-LD contract, Squad + Agent shape, product-brain boundaries.
Out of scope: Unreal graph authoring · full UT2004 bot catalog (Track A) · monster pack behaviors (Track B) · campaign/world patrol catalogs (Track C)
Authority: FS-WLD-001 · FS-AI-* (this pass) · Architecture Map TFAAI · Demo sandbox C (docs/22-demo.md)
Locked decisions:
- Build order: D (this) → A MP bots → B monster groups → C campaign / world patrol.
- Multiplayer arena bots and Campaign/World AI are different product brains. Shared substrate only — not graphs, goals, or difficulty semantics.
- Logic Driver Pro is the fuzzy system (continuous desirability on the blackboard + soft selection + hysteresis). Not a hard outer C++ brain that bypasses LD.
- Team shape: Squad/Team LD graph + Agent LD graphs (same structural pattern for bot teams and monster packs; different assets and vocabularies).
1. Why three product brains
Section titled “1. Why three product brains”| Brain | Consumer | Job | Difficulty semantics |
|---|---|---|---|
| MP Bot (Track A) | Ladder / Progressive MP / fill bots | Arena combat, mode objectives, team play | UT2004 ladder (exact feel — Track A) |
| Monster Group (Track B) | Open world, dungeons, raids, Demo sandbox C | Pack tactics vs fireteam / players | Area Difficulty + Grunt/Elite/Boss DAs (FS-CMP-006, FS-WLD-001) |
| Campaign / World Patrol (Track C) | Story missions, open-world ambient | Routes, scripted beats, sector presence | Mission / sector authored — not UT2004 labels |
Forbidden: one Deathmatch LD graph reused as world monsters or story escorts.
2. GFP and classes
Section titled “2. GFP and classes”| Piece | Owner | Role |
|---|---|---|
Logical module TFAAI |
GFP TFAAI (Runtime) | Substrate only |
| Depends on | TFACore (+ engine perception / nav as needed) | Downward only |
| Enabled by | Experiences (MP bot fill, world encounters, Demo C) | Not Boot Active |
ATFAAIController |
TFAAI | Hosts LD runners, perception bridge, move requests |
UTFAFuzzyMembership (util / subsystem helper) |
TFAAI | Raw metrics → soft scores; difficulty remaps curves |
UTFAAISquadCoordinator |
TFAAI | Owns one Squad LD instance per team / pack / patrol cell |
UTFAAIAgentBrain (component on controller) |
TFAAI | Owns Agent LD instance; reads squad blackboard intents |
DA_TFA_AIDifficultyProfile |
TFAAI | Curve multipliers + reaction / accuracy / aggression hooks — product-specific row semantics |
DA_TFA_AIBlackboardContract (optional lock asset) |
TFAAI | Documents shared key names; product brains may add keys, never redefine shared ones |
Does not own: damage pipeline, gunfeel, OmniVisor, economy. AI pawns remain ATFACharacter + GAS via TFACombat (FS-WLD-001).
TFAWorld encounter director and MP Experiences enable TFAAI; they do not reimplement fuzzy selection.
3. Fuzzy-in-Logic-Driver contract
Section titled “3. Fuzzy-in-Logic-Driver contract”Logic Driver must function as a fuzzy system:
- Sense — Perception / nav / mode queries produce raw metrics (distance, LOS time, HP ratio, objective pressure, ammo pressure, ally density).
- Fuzzify — Membership functions (Low / Med / High style curves, or continuous traps) emit desirability scores in [0, 1] onto the LD blackboard.
- Squad soft-select — Squad LD chooses among intent states using those scores + hysteresis (enter threshold > exit threshold, or minimum dwell time) so intents do not thrash.
- Agent soft-select — Agent LD chooses tactics constrained by current squad intent scores (agents may soft-override only within authored allowance).
- Difficulty remap —
DA_TFA_AIDifficultyProfilescales curve steepness, reaction delay, aim cone, aggression bias without replacing the SM with boolean-only transitions.
Not allowed:
- Hard-only boolean transitions as the sole decision path for high-level goals.
- An outer Goal picker that never writes soft scores into LD and only teleports LD into named states.
- Client-authoritative intent selection Online (server owns AI decisions; clients may predict presentation only).
3.1 Soft selection sketch
Section titled “3.1 Soft selection sketch”For candidate intents / tactics (i):
- Score (S_i) from blackboard (already fuzzified).
- Apply hysteresis: if current intent is (c), keep (c) while (S_c \ge S_{\text{best}} - H) and dwell time not elapsed.
- Else select (\arg\max S_i) (optional: weighted random among top-K for lower difficulties — product brain decides; substrate provides the hook).
4. Squad + Agent shape
Section titled “4. Squad + Agent shape”Mode / Encounter DA │ ▼ Squad LD (one per team | pack | patrol cell) │ writes soft intent scores + role assignments ▼ Shared blackboard (squad-scoped) │ ├── Agent LD (pawn A) ├── Agent LD (pawn B) └── Agent LD (pawn …) │ ▼ ATFAAIController → ATFACharacter (GAS / move)| Layer | Owns | Does not own |
|---|---|---|
| Squad LD | Team / pack intent vocabulary, role assignment, objective pressure fusion | Per-pawn aim, reload micro-timing |
| Agent LD | Local tactics under intents (strafe, take cover, push, retreat, focus fire) | Rewriting squad objective without allowance |
| Substrate | Fuzzy util, BB key contract, runners, difficulty DA type | Product graph assets |
Same structural pattern for MP teams and monster packs. Different LD assets and intent names.
5. Shared blackboard key contract (substrate)
Section titled “5. Shared blackboard key contract (substrate)”Product brains may add keys. They must not redefine these shared names with different meanings.
| Key family | Examples (names illustrative) | Notes |
|---|---|---|
| Threat | Threat.Nearest, Threat.Focus, Threat.LOS |
Soft scores preferred over bools |
| Vitality | Self.HP, Self.Armor, Self.Shield |
Normalized 0–1 bands |
| Pressure | Pressure.Ammo, Pressure.Suppression |
|
| Squad intent | Intent.Primary, Intent.PrimaryScore, Intent.SecondaryScore |
Soft |
| Role | Role.Tag, Role.Weight |
Grunt/Elite/Boss or bot specialty |
| Hysteresis | Lock.IntentUntil, Lock.TacticUntil |
Timestamps / dwell |
| Difficulty | Diff.Reaction, Diff.Accuracy, Diff.Aggression |
Fed from profile DA |
6. Explicitly not shared across product brains
Section titled “6. Explicitly not shared across product brains”- LD graph assets (MP vs Monster vs Patrol)
- Goal / intent vocabulary (
CaptureFlag≠HoldSector≠AmbushLane) - Team strategy tables per game mode
- UT2004 difficulty labels and feel (MP bots only — Track A)
- Campaign scripted beats / world ambient schedules (Track C)
- Monster pack composition tables (Track B)
7. Authority
Section titled “7. Authority”| Domain | Solo | Online |
|---|---|---|
| Fuzzy scores, squad intent, agent tactic selection | Local authority | Server only |
| Pawn move / fire requests from AI | Local | Server simulates AI controllers |
| Presentation (anim telegraph) | Client | Client from replicated pose / cues |
AI never applies a second damage pipeline. Hits still go through FS-DMG / TFACombat.
8. Roadmap — Tracks A / B / C (stubs)
Section titled “8. Roadmap — Tracks A / B / C (stubs)”Full specs deferred. Outlines:
- 2026-10-26-ai-track-a-mp-bots-outline.md — UT2004 difficulty + per-mode team strategies
- 2026-10-26-ai-track-b-monster-groups-outline.md — Pack AI + Demo sandbox C
- 2026-10-26-ai-track-c-campaign-world-patrol-outline.md — Patrol directors ≠ arena bots
9. Success criteria (Track D)
Section titled “9. Success criteria (Track D)”- Designer: “LD is fuzzy via blackboard scores + soft selection,” and can point to Squad vs Agent.
- Engineer: names GFP TFAAI,
ATFAAIController, and what the three product brains must not share. - FS + Architecture Map no longer imply one AI class covers bots and world monsters beyond pawn / damage.
10. Spec self-review
Section titled “10. Spec self-review”- No TBD placeholders for substrate shape; product catalogs deferred to A/B/C by design.
- Consistent with FS-WLD-001 (shared character + no second damage pipeline).
- Scope is substrate only — not a combined AI encyclopedia.