Enhance narrative systems with detailed implementation guides and data-driven structures
- Updated BPC_NarrativeStateSystem with a comprehensive manual implementation guide, including class setup, variable initialization, and function breakdowns. - Expanded BPC_ObjectiveSystem documentation to include a manual implementation guide and detailed function descriptions. - Added a manual implementation guide for BPC_DialoguePlaybackSystem, outlining class setup and function nodes. - Introduced a manual implementation guide for BPC_DialogueChoiceSystem, detailing choice presentation and selection processes. - Enhanced BPC_BranchingConsequenceSystem documentation with a manual implementation guide for consequence evaluation. - Updated BPC_TrialScenarioSystem with a manual implementation guide for scenario management. - Expanded BPC_LoreUnlockSystem documentation to include a manual implementation guide for lore entry management. - Added a manual implementation guide for BP_NarrativeTriggerVolume, detailing trigger volume setup and action execution. - Enhanced BPC_EndingAccumulator documentation with a manual implementation guide for ending evaluation. - Updated BPC_HitReactionSystem with a manual implementation guide for hit reaction management. - Added a manual implementation guide for BPC_RecoilSystem, detailing recoil application and recovery processes. - Introduced DT_ProjectTags.csv to define gameplay tags for various systems, enhancing data-driven design capabilities.
This commit is contained in:
@@ -111,4 +111,80 @@ None required. Flat Tag maps suffice.
|
||||
| [`SS_SaveManager`](../05-save/28_SS_SaveManager.md) | [`I_Persistable`](../01-core/29_I_Persistable.md) | Flag persistence across sessions |
|
||||
|
||||
### Reuse Notes
|
||||
The entire system is tag-driven and fully generic. The `Narrative.Flag.*` and `Narrative.Phase.*` namespaces are empty by default — fill them per project with game-specific flags. Add new numeric value types (reputation, corruption, etc.) by simply calling `SetValue` with the appropriate tag. No code/blueprint changes needed.
|
||||
The entire system is tag-driven and fully generic. The `Narrative.Flag.*` and `Narrative.Phase.*` namespaces are empty by default — fill them per project with game-specific flags. Add new numeric value types (reputation, corruption, etc.) by simply calling `SetValue` with the appropriate tag. No code/blueprint changes needed.
|
||||
|
||||
---
|
||||
|
||||
## Manual Implementation Guide
|
||||
|
||||
### Class Setup
|
||||
1. Create Blueprint Class: Parent = `ActorComponent`, Name = `BPC_NarrativeStateSystem`
|
||||
2. Add to Player Character or GameState (if shared)
|
||||
3. Implement Interface: `I_Persistable`
|
||||
|
||||
### Variable Init (BeginPlay)
|
||||
```
|
||||
Event BeginPlay
|
||||
├─ Set NarrativeFlags = empty Map<GameplayTag, Boolean>
|
||||
├─ Set NarrativeValues = empty Map<GameplayTag, Float>
|
||||
├─ Set NarrativeHistory = empty Array<GameplayTag>
|
||||
├─ Set MaxHistorySize = 500
|
||||
└─ If implementing I_Persistable: register with SS_SaveManager
|
||||
```
|
||||
|
||||
### Function Node-by-Node
|
||||
|
||||
#### `SetFlag(Tag: GameplayTag, Value: Boolean)` → `void`
|
||||
```
|
||||
Step 1: OldValue = NarrativeFlags.Find(Tag) or false
|
||||
Step 2: NarrativeFlags.Add(Tag, Value) ← Map Add (overwrites if exists)
|
||||
Step 3: If Value == true AND OldValue == false:
|
||||
NarrativeHistory.Add(Tag)
|
||||
If NarrativeHistory.Length > MaxHistorySize: Remove oldest entry
|
||||
Step 4: Fire OnFlagChanged(Tag, Value)
|
||||
Step 5: Notify I_Persistable: Mark dirty for save
|
||||
```
|
||||
**Nodes:** `Map Find`, `Map Add`, `Array Add`, `Array Length`, `Remove Index 0`
|
||||
|
||||
#### `SetValue(Tag, Value: Float)` → `void`
|
||||
```
|
||||
Step 1: NarrativeValues.Add(Tag, Value)
|
||||
Step 2: Fire OnValueChanged(Tag, Value)
|
||||
```
|
||||
|
||||
#### `GetFlag(Tag)` → `Boolean` *(Pure)*
|
||||
```
|
||||
NarrativeFlags.Find(Tag) → if found: return value, else: return false
|
||||
```
|
||||
|
||||
#### `HasAllFlags(Tags: Array<GameplayTag>)` → `Boolean`
|
||||
```
|
||||
ForEach Tags:
|
||||
If GetFlag(ArrayElement) == false → Return false
|
||||
Return true
|
||||
```
|
||||
|
||||
#### `CollectState()` → `S_WorldObjectState` *(I_Persistable)*
|
||||
```
|
||||
Step 1: Create S_WorldObjectState
|
||||
Step 2: Serialize NarrativeFlags: ForEach → store (Tag, Value) as string pairs in CustomData
|
||||
Step 3: Serialize NarrativeValues similarly
|
||||
Step 4: Return struct
|
||||
```
|
||||
|
||||
#### `RestoreState(Data: S_WorldObjectState)` *(I_Persistable)*
|
||||
```
|
||||
Step 1: Clear NarrativeFlags, NarrativeValues, NarrativeHistory
|
||||
Step 2: Parse CustomData → ForEach entry → NarrativeFlags.Add(Tag, BoolValue)
|
||||
Step 3: Parse values → NarrativeValues.Add(Tag, FloatValue)
|
||||
```
|
||||
|
||||
### Build Checklist
|
||||
- [ ] Create BPC_NarrativeStateSystem, add to Player Character
|
||||
- [ ] Define variables: NarrativeFlags (Map), NarrativeValues (Map), NarrativeHistory (Array), MaxHistorySize
|
||||
- [ ] Implement SetFlag/GetFlag with map operations
|
||||
- [ ] Implement SetValue/GetValue for numeric values
|
||||
- [ ] Implement HasAllFlags/HasAnyFlags for batch queries
|
||||
- [ ] Implement CollectState/RestoreState for I_Persistable
|
||||
- [ ] Create OnFlagChanged/OnValueChanged event dispatchers
|
||||
- [ ] Test: call SetFlag → verify OnFlagChanged fires → other systems react
|
||||
Reference in New Issue
Block a user