A 3D action roguelite built with Unreal Engine 5.7 and C++, featuring a stylish combo-based combat system inspired by Hades, Devil May Cry, Dead Cells, and Furi.
Flow Slayer is a skill-based action game where players fight through a series of arenas in short runs (30–40 min). The core mechanic revolves around Flow/Momentum — sustaining combos builds power and eventually grants damage immunity, while taking hits or dashing costs Flow.
- Fast-paced combat with 20+ chainable attacks — ground combos, dash attacks, launchers, aerial moves
- Air combat system with launchers, juggles, and aerial slams
- Lock-on targeting with dynamic camera behavior
- Run-based progression with XP, level-ups, and milestone upgrades
- Pure skill expression — the combat system rewards mastery, not stat grinding
Built around a modular FSCombatComponent (~95% C++, Blueprints only for asset wiring):
- Combo Chaining — Animation-driven combo windows allow seamless attack transitions
- Chorded Input — Each attack has its own
UInputActionwith Chorded Actions configured in the editor via a strict 3-layer input pipeline — no manual key-state checks in code - Motion Warping — Dynamic target tracking during attacks for satisfying hit connection
- Hitstop — Frame-perfect time dilation on hit for impactful feedback
- Knockback Physics — Directional knockback with horizontal and vertical force vectors
[Enhanced Input] → InputManagerComponent (UInputAction*)
→ FlowSlayerCharacter (TMap<UInputAction*, EAttackType>)
→ FSCombatComponent (TMap<EAttackType, FCombo*>)
→ Animation Montage
InputManagerComponent has no dependency on combat types — FlowSlayerCharacter is the only bridge between input and combat domains.
- Gains on hit landed, loses on dash or damage received
- Four tiers with escalating effects — max tier grants full damage immunity
- Drives all resource decisions (heal cost, dash cost, upgrade eligibility)
- Launcher attacks send enemies airborne with trajectory peak detection
- Reduced gravity during aerial combos via animation notifies
- Enemies freeze briefly at apex, creating juggle windows
- RunManager — singleton orchestrator for arena transitions and run completion
- FSArenaManager — per-arena encounter: spawn budget, max-alive cap, dynamic escalation, owns its exit portal
- AArenaPortal — placed in the level, hidden until arena clear; teleports player via a
DestinationActorreference - ProgressionComponent — 30 levels per run, XP curve
60 + (n-1)*5, milestone events every 5 levels
Source/FlowSlayer/
├── FlowSlayerCharacter.h/cpp // Player — orchestrates all components
├── Public/
│ ├── CombatData.h // EAttackType, FAttackData, FCombo (shared types)
│ ├── FSCombatComponent.h // Combo state machine, attack execution
│ ├── FSFlowComponent.h // Flow/Momentum resource
│ ├── FSLockOnComponent.h // Lock-on acquisition and switching
│ ├── DashComponent.h // Dash movement, cooldown, flow cost
│ ├── HealthComponent.h // HP, death event
│ ├── ProgressionComponent.h // XP, level-up, milestones
│ ├── InputManagerComponent.h // Enhanced Input → UInputAction* delegates
│ ├── FSArenaManager.h // Arena encounter + exit portal ownership
│ ├── RunManager.h // Run orchestration, arena transitions
│ ├── ArenaPortal.h // Teleportation actor, hidden until arena clear
│ ├── AFSSpawnZone.h // Enemy spawn zone
│ ├── FSEnemy.h / FSEnemy_*.h // Enemy base + archetypes
│ └── AnimNotifyState_*.h // Gameplay timing via animation notifies
└── Private/ // Implementations
In Progress:
- Death screen + run reset
- Reward chest on arena clear
- Upgrade screen at milestone level-up
Planned:
- Modular weapon craft (Blade + Handle + Gem)
- More types of ennemies
- Boss / Elite ennemies
Andreas Chatti