BP2AI - Documentation Showcase
Ability activation system with
47 nodes, 12 functions, and 4 levels of nesting.
You can copy the raw markdown Output already in Confluence Markdown or other Markdown supportive texteditors to get basic readable formatting of the logic flow
AI Prompt
Analyze this BP2AI trace and generate CONCISE technical documentation for developers. Focus on practical implementation, not theory.
Requirements:
- Keep total length under 800 words
- Write for busy developers who need quick answers
- Focus on "what it does" and "how to use it"
- Include only essential information
Structure (in this order):
- Quick Overview (2-3 sentences): What this system does and why you'd use it
- Key Functions (table format): Function name, inputs, outputs, purpose (1 line each)
- Critical Setup Requirements: What variables/data you must have
- Usage Pattern (1 simple example): How to trigger the system
Avoid:
- Long explanations of obvious concepts
- Theoretical architecture discussions
- Multiple examples
- Future enhancement speculation
- Performance optimization advice
- Detailed error handling sections
Write like a senior developer explaining to another developer in 5 minutes. Format this as Confluence markup with dark theme styling using simple panels (bgColor=#333333), basic headings, tables, code blocks, and note callouts - keep colors minimal and text clean
Ability System Blueprint Trace
**Trace Start: ActivatePlayerAbility
Custom Event** (CustomEvent)
```blueprint
* Event ActivatePlayerAbility Args: (AbilityID:int, PlayerRef :BP_FirstPersonCharacter, TargetLocation:Vector)
* Call Function: [ValidateAbilityActivation](#bp-showcase-validateabilityactivation)(AbilityID=ActivatePlayerAbility.AbilityID, Player=ActivatePlayerAbility.PlayerRef )
* If (([ValidateAbilityActivation](#bp-showcase-validateabilityactivation)(AbilityID=ActivatePlayerAbility.AbilityID, Player=ActivatePlayerAbility.PlayerRef )).isValid )
|-- true:
| * Collapsed Graph: [ProcessAbilityEffects Collapsed Graph](#bp-showcase-processabilityeffects-collapsed-graph)(AbilityID=ActivatePlayerAbility.AbilityID, TargetLocation=ActivatePlayerAbility.TargetLocation)
| * Call Custom Event: [NotifyGameSystems ](#bp-showcase-notifygamesystems)()
| * [Path ends after call to custom event "NotifyGameSystems "]
L-- false:
* PrintString((InString=ability cant be used))
* [Path ends]
```
---
## Referenced Graphs
### Functions
#### `BP_Showcase.CalculateAbilityDamage`
**Inputs:**
* `AbilityID ` (int)
**Execution Flow:**
```blueprint
* Event CalculateAbilityDamage
* If (Map_Find(Key=ValueFrom(CalculateAbilityDamage.AbilityID ), TargetMap=AbilityDefinitions))
|-- true:
| * Set BaseDamage:double = ((Map_Find(Key=ValueFrom(CalculateAbilityDamage.AbilityID ), TargetMap=AbilityDefinitions)).Value).BaseDamage
| * Set FinalDamage:double = (((Map_Find(Key=ValueFrom(CalculateAbilityDamage.AbilityID ), TargetMap=AbilityDefinitions)).Value).BaseDamage * 1.25)
| * Return(FinalDamage=(((Map_Find(Key=ValueFrom(CalculateAbilityDamage.AbilityID ), TargetMap=AbilityDefinitions)).Value).BaseDamage * 1.25))
L-- false:
* PrintString((InString=Unknown ability, using default damage))
* Return(FinalDamage=10)
```
**Outputs:**
* `FinalDamage` (double) = (((`Map_Find`(`Key`=ValueFrom(`CalculateAbilityDamage`.`AbilityID `), `TargetMap`=`AbilityDefinitions`)).`Value`).`BaseDamage` * 1.25)
---
#### `BP_Showcase.CheckAbilityCooldown`
**Inputs:**
* `AbilityID ` (int)
* `Player` (BP_FirstPersonCharacter)
**Execution Flow:**
```blueprint
* Event CheckAbilityCooldown
* Call Function: [GetAbilityLastUsedTime](#bp-showcase-getabilitylastusedtime)(AbilityID=ValueFrom(CheckAbilityCooldown.AbilityID ), Player=ValueFrom(CheckAbilityCooldown.Player))
* Macro: [Get Ability Cooldown Duration](#bp-showcase-get-ability-cooldown-duration)(AbilityID=ValueFrom(CheckAbilityCooldown.AbilityID ))
* If (((GetGameTimeInSeconds() - ([GetAbilityLastUsedTime](#bp-showcase-getabilitylastusedtime)(AbilityID=ValueFrom(CheckAbilityCooldown.AbilityID ), Player=ValueFrom(CheckAbilityCooldown.Player))).TimeStamp) >= GetAbilityCooldownDuration.Duration (Macro Inputs: AbilityID=ValueFrom(CheckAbilityCooldown.AbilityID ))))
|-- true:
| * Return(isReady=true)
L-- false:
* Return(isReady=false)
```
**Outputs:**
* `isReady ` (bool) = true
---
#### `BP_Showcase.CheckAbilityRequirements`
**Inputs:**
* `AbilityID ` (int)
* `Player` (BP_FirstPersonCharacter)
**Execution Flow:**
```blueprint
* Event CheckAbilityRequirements
* Macro: [Get Ability Mana Cost](#bp-showcase-get-ability-mana-cost)(AbilityID=ValueFrom(CheckAbilityRequirements.AbilityID ))
* If ((CurrentMana >= GetAbilityManaCost.ManaCost (Macro Inputs: AbilityID=ValueFrom(CheckAbilityRequirements.AbilityID ))))
|-- true:
| * Return(MeetsRequirements=true)
L-- false:
* Return(MeetsRequirements=false)
```
**Outputs:**
* `MeetsRequirements ` (bool) = true
---
#### `BP_Showcase.GetAbilityLastUsedTime`
**Inputs:**
* `AbilityID ` (int)
* `Player` (BP_FirstPersonCharacter)
**Execution Flow:**
```blueprint
* Event GetAbilityLastUsedTime
* If (Map_Find(Key=ValueFrom(GetAbilityLastUsedTime.AbilityID ), TargetMap=AbilityCooldownTimestamps))
|-- true:
| * Return(TimeStamp=(Map_Find(Key=ValueFrom(GetAbilityLastUsedTime.AbilityID ), TargetMap=AbilityCooldownTimestamps)).Value)
L-- false:
* Return(TimeStamp=0)
```
**Outputs:**
* `TimeStamp` (double) = (`Map_Find`(`Key`=ValueFrom(`GetAbilityLastUsedTime`.`AbilityID `), `TargetMap`=`AbilityCooldownTimestamps`)).`Value`
---
#### `BP_Showcase.ValidateAbilityActivation`
**Inputs:**
* `AbilityID ` (int)
* `Player` (BP_FirstPersonCharacter)
**Execution Flow:**
```blueprint
* Event ValidateAbilityActivation
* Call Function: [CheckAbilityCooldown](#bp-showcase-checkabilitycooldown)(AbilityID=ValueFrom(ValidateAbilityActivation.AbilityID ), Player=ValueFrom(ValidateAbilityActivation.Player))
* If (([CheckAbilityCooldown](#bp-showcase-checkabilitycooldown)(AbilityID=ValueFrom(ValidateAbilityActivation.AbilityID ), Player=ValueFrom(ValidateAbilityActivation.Player))).isReady )
|-- true:
| * Call Function: [CheckAbilityRequirements](#bp-showcase-checkabilityrequirements)(AbilityID=ValueFrom(ValidateAbilityActivation.AbilityID ), Player=ValueFrom(ValidateAbilityActivation.Player))
| * Return(isValid=([CheckAbilityRequirements](#bp-showcase-checkabilityrequirements)(AbilityID=ValueFrom(ValidateAbilityActivation.AbilityID ), Player=ValueFrom(ValidateAbilityActivation.Player))).MeetsRequirements )
L-- false:
* Return(isValid=false)
```
**Outputs:**
* `isValid ` (bool) = ([`CheckAbilityRequirements`](#bp-showcase-checkabilityrequirements)(`AbilityID`=ValueFrom(`ValidateAbilityActivation`.`AbilityID `), `Player`=ValueFrom(`ValidateAbilityActivation`.`Player`))).`MeetsRequirements `
---
### Callable Custom Events
#### `BP_Showcase.NotifyGameSystems `
**Inputs:**
* `OutputDelegate` (delegate)
**Execution Flow:**
```blueprint
* Event NotifyGameSystems
* Call Custom Event: [UpdatePlayerUi](#bp-showcase-updateplayerui)()
* Call Custom Event: [PlayAbilitySound](#bp-showcase-playabilitysound)()
* PrintString((InString=BroadcasttoOtherSystems))
* [Path ends]
```
**Outputs:**
* `OutputDelegate` (delegate) = `NotifyGameSystems `.`OutputDelegate`
---
#### `BP_Showcase.PlayAbilitySound`
**Inputs:**
* `OutputDelegate` (delegate)
**Execution Flow:**
```blueprint
* Event PlayAbilitySound
* PrintString((InString=(DA_AbilityOne.WeaponName + Conv_DoubleToString(InDouble=(DA_AbilityOne.WeaponData ).CooldownDuration))))
* [Path ends]
```
**Outputs:**
* `OutputDelegate` (delegate) = `PlayAbilitySound`.`OutputDelegate`
---
#### `BP_Showcase.UpdatePlayerUi`
**Inputs:**
* `OutputDelegate` (delegate)
**Execution Flow:**
```blueprint
* Event UpdatePlayerUi
* PrintString((InString=PlayerUI to be declared))
* [Path ends]
```
**Outputs:**
* `OutputDelegate` (delegate) = `UpdatePlayerUi`.`OutputDelegate`
---
### Collapsed Graphs
#### `BP_Showcase.ProcessAbilityEffects Collapsed Graph`
**Inputs:**
* `AbilityID` (int)
* `TargetLocation` (Vector)
**Execution Flow:**
```blueprint
* Tunnel (Inputs)
* Call Function: [CalculateAbilityDamage](#bp-showcase-calculateabilitydamage)(AbilityID=ValueFrom(Tunnel.AbilityID))
* Set Damage:double = ([CalculateAbilityDamage](#bp-showcase-calculateabilitydamage)(AbilityID=ValueFrom(Tunnel.AbilityID))).FinalDamage
* Niagara:NiagaraFunctionLibrary.SpawnSystemAtLocation((bAutoActivate=true, bAutoDestroy=true, bPreCullCheck=true, Location=ValueFrom(Tunnel.TargetLocation), PoolingMethod=Niagara:ENCPoolMethod::[Default Value], Rotation=Rotator(P=0, Y=0, R=0), Scale=Vector(X=1, Y=1, Z=1), SystemTemplate=DirectionalBurst))
* PrintString((InString=ProcessAbilityEffects))
* Tunnel (Outputs)
```
**Outputs:**
*(No distinct data outputs)*
---
### Executable Macros
#### `BP_Showcase.Get Ability Cooldown Duration`
**Inputs:**
* `AbilityID` (int)
**Execution Flow:**
```blueprint
* Tunnel (Inputs)
* ExecIn:
* If (Map_Find(Key=ValueFrom(Tunnel.AbilityID), TargetMap=AbilityDefinitions))
|-- true:
| * Tunnel (Outputs)
L-- false:
* PrintString((InString=No Ability Found))
* [Path ends]
```
**Outputs:**
* `Duration ` (double) = ((`Map_Find`(`Key`=ValueFrom(Tunnel.`AbilityID`), `TargetMap`=`AbilityDefinitions`)).`Value`).`CooldownDuration`
---
#### `BP_Showcase.Get Ability Mana Cost`
**Inputs:**
* `AbilityID` (int)
**Execution Flow:**
```blueprint
* Tunnel (Inputs)
* ExecIn:
* If (Map_Find(Key=ValueFrom(Tunnel.AbilityID), TargetMap=AbilityDefinitions))
|-- true:
| * Tunnel (Outputs)
L-- false:
* PrintString((InString=Ability Not found))
* [Path ends]
```
**Outputs:**
* `ManaCost ` (double) = ((`Map_Find`(`Key`=ValueFrom(Tunnel.`AbilityID`), `TargetMap`=`AbilityDefinitions`)).`Value`).`ManaCost`
AI Documentation Comparison
Criteria | Claude | Gemini | ChatGPT | Winner |
---|---|---|---|---|
Prompt Adherence | 10/10 | 8/10 | 10/10 | Claude/ChatGPT |
Length Control | 10/10 | 9/10 | 10/10 | Claude/ChatGPT |
Professional Formatting | 10/10 | 7/10 | 9/10 | Claude |
Function Completeness | 7/10 | 6/10 | 10/10 | ChatGPT |
Practical Value | 9/10 | 8/10 | 9/10 | Claude/ChatGPT |
Trace Accuracy | 9/10 | 9/10 | 9/10 | Tie |
Developer Readability | 10/10 | 7/10 | 9/10 | Claude |
Setup Clarity | 9/10 | 8/10 | 8/10 | Claude |
Flow Inspector

π Get Started
Ready to unlock AI analysis for your Blueprint workflows?
Join the beta testing program and experience professional Blueprint-to-AI translation.
Videos and Images Β©Epic Games / JSFILMS / tharlevfx / Peyton Varney
Add comment
Comments