# Narrative Systems — Asset Creation Sheet (11 assets)

> **UE5 Path:** `Content/Framework/Narrative/`

---

## Components (attach to player pawn or GameState)

### BPC_NarrativeStateSystem
| Variable | Type | Default |
|----------|------|---------|
| `ActiveFlags` | `Array<GameplayTag>` | Empty |
| `CurrentChapter` | GameplayTag | Empty |
| `CurrentPhase` | GameplayTag | Empty |

**SetFlag(Tag):** Add to ActiveFlags → broadcast OnNarrativeFlagSet

### BPC_ObjectiveSystem
| Variable | Type | Default |
|----------|------|---------|
| `ActiveObjectives` | `Array<GameplayTag>` | Empty |
| `CompletedObjectives` | `Array<GameplayTag>` | Empty |

**ActivateObjective(Tag):** → Add to Active → broadcast OnObjectiveActivated → GS_CoreGameState.AddObjective(Tag)

### BPC_DialoguePlaybackSystem
| Variable | Type |
|----------|------|
| `DialogueQueue` | `Array<FDialogueLine>` |
| `bIsPlaying` | Boolean |
| `bAutoAdvance` | Boolean |

**PlayDialogue(DialogueData):** → Show subtitles → play VO → advance queue

### BPC_DialogueChoiceSystem
| Variable | Type |
|----------|------|
| `CurrentChoices` | `Array<FDialogueChoice>` |
| `SelectedChoiceIndex` | Integer |

**PresentChoices(Choices):** → Show WBP_DialogueChoice widget → wait for selection → return

### BPC_BranchingConsequenceSystem
| Variable | Type |
|----------|------|
| `PendingConsequences` | `Array<FDialogueChoice>` |

**ExecuteConsequence(Choice):** → Grant items, set narrative flags, change relationships, trigger cutscenes

### BPC_TrialScenarioSystem
| Variable | Type | Default |
|----------|------|---------|
| `TrialTimer` | Float | `0.0` |
| `bTrialActive` | Boolean | `false` |
| `TrialSuccessThreshold` | Float | `60.0` |

### BPC_CutsceneBridge
| Variable | Type |
|----------|------|
| `CurrentCutscene` | `DA_CutsceneData` |
| `bCutscenePlaying` | Boolean |

**PlayCutscene(Data):** → Set phase to Cutscene → play Sequence → on finish → restore phase

### BPC_LoreUnlockSystem
| Variable | Type |
|----------|------|
| `UnlockedLore` | `Array<GameplayTag>` |

**UnlockLore(Tag):** → Add to unlocked → show notification → add to journal

### BPC_EndingAccumulator
| Variable | Type |
|----------|------|
| `EndingConditions` | `TMap<GameplayTag, Float>` |
| `DominantEnding` | GameplayTag |

---

## Data Assets (create instances per content)

| Asset | Purpose |
|-------|---------|
| `DA_DialogueData` | Dialogue lines, speaker, VO, conditions |
| `DA_CutsceneData` | Level sequence, milestone flags, skip policy |
| `DA_ObjectiveData` | Title, description, prerequisites, rewards |
| `DA_TrialData` | Timer, success conditions, failure consequences |

---

## Actor — BP_NarrativeTriggerVolume
**Parent:** `TriggerVolume`

| Variable | Type |
|----------|------|
| `TriggerTag` | GameplayTag |
| `bTriggerOnce` | Boolean |
| `NarrativeActions` | `Array<S_NarrativeAction>` |

**OnOverlapBegin:** → Execute narrative actions (set flag, start dialogue, activate objective, play cutscene)

---

## Test These
- [ ] Walk into trigger → dialogue starts → subtitles show
- [ ] Dialogue choices appear → select option → consequence fires
- [ ] Objective activates → shows in HUD objective display
- [ ] Trial scenario starts → timer counts down → succeed/fail
