"Through Arcane Eyes" is a technical vertical slice developed in Unreal Engine 5.8. It serves as a portfolio demonstration of high-level C++ architecture, modern UI patterns (MVVM + Common UI), and advanced shader techniques.
You play as Ant — a humanoid living tree, roots for legs and branches for arms — stranded in a ruined factory world of floating cube islands. The land is broken, rusted, and overgrown. By activating Arcane Vision (the Spectral Shift), Ant perceives what could exist: hidden geometry, dormant connections, paths yet to grow. The goal is to restore the land — crossing and linking the separated islands by growing roots, vines, and trees between them.
- Engine: Unreal Engine 5.8 (C++ 20)
- Input: Enhanced Input System (Modular Mapping Contexts)
- UI Architecture: Common UI (Input Routing) + UMG Viewmodel (Data Binding)
- Rendering: Post-Process Materials, Global Distance Fields, Stencil Buffers, Substrate Materials
- Gameplay: GAS (Gameplay Ability System) — Arcane toggle, root-growth channel, Mana attribute, Gameplay Tags
- Camera: Close over-the-shoulder third-person, blending to a pulled-back Arcane framing (
GameplayCameras) - Animation: Control Rig procedural tree motion — root drift, trunk bend, Arcane reach (planned, M5)
- World Gen: Hand-authored islands with PCG-generated detail and scatter (planned, M4)
- Testing: UE Automation Tests — pure game logic covered headlessly
- Workflow: Git, GitHub Actions for CI/CD (planned), Obsidian (Knowledge Management)
Note on Motion Matching:
PoseSearchwas evaluated and deliberately dropped. It is data-hungry and tuned for naturalistic humanoid locomotion — close to the opposite of what a walking tree needs. Control Rig produces distinctive, non-humanoid motion from far less source animation. TheUAF/AnimNext stack was also assessed and rejected: every module ships underEngine/Plugins/Experimental/in 5.8.
To demonstrate clean separation of concerns, the input is split into three layers:
- Base Layer: Standard locomotion (WASD/Mouse), pushed by
ATaePlayerController::BeginPlay. - Arcane Layer:
IMC_Arcaneis pushed and popped on theEnhancedInputLocalPlayerSubsystembyUGA_SpectralShiftitself — so the context's lifetime is exactly the ability's, and no code has to remember to clean it up. - Logic: All input lives in the controller, never in the character. Actions are typed
TObjectPtr<UInputAction>properties validated byIsDataValid, so a missing binding surfaces as an editor error rather than a silent runtime no-op.
The HUD does not use Tick or standard Event Construct binding.
- Viewmodel: A C++ UMVVMViewModelBase class tracks mana and vision states using the FIELD_NOTIFY macro.
- Common UI: Used for the "Victory" and "Pause" menus to manage input focus and UI layering automatically.
- The Vision: A custom Post-Process pass — animated plasma overlay with DDX/DDY depth edge detection and chromatic aberration — activates when Arcane Vision is toggled.
- The Hidden Path: Actors use Gameplay Tags and a centralized
UTaeStateComponent. When theArcane.Visiontag is granted, dormant root connections reveal themselves as ghosts — the land Ant must restore.
The core verb of the game. Arcane Vision is both the diagnostic and the workshop.
- See — entering Arcane pulls the camera back and reveals the ghost root network between islands.
- Grow — standing at an
ATaeRootAnchor, Ant channels (UGA_GrowRoot) and the root materialises segment by segment along a spline while mana drains. - Persist — growth is permanent and partial. Release early and progress is kept; return later and resume. Mana pressure interrupts, it never punishes.
- Cross — at full growth the root becomes solid and walkable in normal mode.
State lives with the thing it describes: ATaeRootPath owns its own GrowthAlpha and ETaeConnectionState; ATaeWorldManager is a registry that counts and broadcasts. GAS owns the verb, plain actor state owns the world — a root path is a float and an enum, so giving it an ASC would buy nothing.
A single ArcaneBlendAlpha on UTaeArcaneSubsystem drives the post-process weight, the camera blend, and (later) the UI overlay from one interpolator, so the three can never disagree on timing.
Two resources, two verbs — Look and Plant.
- Mana fuels both seeing and growing, and regenerates only near land you have already restored. It is the pressure that gives Forest mode a purpose. (Shipped in M2.)
- Saplings are not currency. Each is a specific living thing you found, revealed only through Arcane Vision, and it gates where you can grow rather than how much. (Planned, M3.)
Mana is one attribute with three flows — vision drain, growth drain, and grove regen — all of them periodic Gameplay Effects that carry their rate through a SetByCaller, so designers tune in units per second while GAS receives the per-period magnitude it actually applies. Running dry grants Arcane.Exhausted, which ejects you from Arcane Vision and will not let you back in until mana climbs past a 25% recovery floor. The hysteresis is the point: without it you flicker in and out of vision at the bottom of the bar.
Completing a connection re-runs that region's PCG graph: vegetation spawns, rust recedes, and new saplings appear where there was nothing. You never farm — you heal, and healing produces. The world you restore is what pays for restoring more of it. (Planned, M4.)
Full design in the restoration economy spec.
Sprint 1 — Core Vertical Slice ✅ Complete
| Day | Focus | Status |
|---|---|---|
| Day 1 | Core Framework | ✅ Done |
| Day 2 | GAS + Spectral Shaders | ✅ Done |
| Day 3 | Grid + Third-Person Camera | ✅ Done |
| Day 4 | Data-Driven UI | ✅ Done |
| Day 5 | Portal & Polish | ✅ Done |
Sprint 2 — Milestones
Day-based planning was retired: the labels stopped describing reality. Milestones are now gated on a recordable demo rather than a calendar. Full design in the connection loop spec.
| Milestone | Focus | Status |
|---|---|---|
| M1 | Connection Loop Playable | ✅ Done |
| M2 | Mana Has Teeth — resource economy, GAS effects | ✅ Done |
| M3 | Arcane As A Sense — Slate overlay + sapling reveal | ⬜ Not started |
| M4 | The World Heals — PCG restoration | ⬜ Not started |
| M5 | Progression & Polish — win state, save, audio, Control Rig | ⬜ Not started |
M1 gate: reveal a broken root in Arcane Vision, channel it to half growth, release, return, finish it, then walk across it in normal mode — verified in-editor.
M2 gate: a ten-row PIE table over the whole economy — vision drain, growth drain, grove regen, exhaustion entry, and recovery past the 25% floor — verified in-editor. Balance tuning and the demo clip are deliberately sequenced after the visual pass: how an economy reads depends on what the world looks like while you spend it.
Detailed status, including what became of the retired Day 6–9 plan, is in docs/Roadmap.md.
| File | Contents |
|---|---|
| docs/superpowers/specs/2026-08-11-restoration-economy-design.md | Current design authority. Resource economy, core loop, and the M2–M5 sequencing |
| docs/superpowers/specs/2026-08-10-connection-loop-design.md | Connection loop and growth mechanic — still authoritative for M1; its milestone ordering is superseded |
| docs/superpowers/specs/2026-08-11-m2-mana-economy-design.md | M2 design: the mana attribute, the three flows, exhaustion hysteresis, the grove |
| docs/superpowers/plans/2026-08-10-m1-connection-loop.md | M1 implementation plan, with corrections applied during execution |
| docs/superpowers/plans/2026-08-11-m2-mana-economy.md | M2 implementation plan — 12 tasks, TDD throughout |
| docs/Architecture.md | Start here for the code. Class hierarchy, tags, module deps, data-flow diagrams, testing strategy |
| docs/Roadmap.md | Sprint 1 build log + milestone status (Days 6–9 retired — the doc records what became of each) |
| docs/SpectralVision.md | Spectral Shift system: GameplayTags, StateComponent, Post-Process pipeline |
| docs/UIArchitecture.md | MVVM ViewModel, Common UI stack, widget conventions |
| docs/LevelGeneration.md | Level dressing design: ATaeClutterScatter, interactable spawners (island approach superseded by the spec's hybrid PCG) |
| docs/VisualAssets.md | Sourcing pass for rock/ruin/clutter meshes, with per-pack licence notes |
| docs/AudioAssets.md | Candidate source files per sound cue |
| CONTRIBUTING.md | Commit format, code style, naming conventions |
| AGENTS.md | Guide for AI agents working in this codebase |
Arcane Vision is the mechanical expression of Ant's nature — a living thing that senses the latent life in a dead world. In normal mode the factory islands look rusted and disconnected; through Arcane Eyes, the hidden geometry of what could grow becomes visible and physical.
Note to Recruiters: The vision state is driven by a Gameplay Tag Container (Arcane.Vision), not a boolean. This means the system naturally supports additional modes (Thermal, Chronal, etc.) without touching base actor code — each mode is just a new tag + a new GA_ ability that grants it.
- Clone the repository.
- Right-click ThroughArcaneEyes.uproject -> Generate Visual Studio project files.
- Build the solution in Development Editor configuration.
- Play in Editor (PIE).
Copyright © 2026 Helen Allien Poe.
This project is dual licensed, because a game repository is two different things:
| Part | Licence |
|---|---|
Source code — Source/, Tools/, Config/, build files |
Apache License 2.0 |
Game content — everything in Content/, plus the name, art, story and world |
All Rights Reserved |
Read the code, learn from it, reuse it under Apache 2.0. The game itself is a commercial work and is not licensed for reuse.
Third-party content is governed by its own terms — see NOTICE.
The Stickman placeholder character is a free Fab asset by Atlant Games, under the Fab Standard License, which permits sharing with collaborators through a private repository but not public redistribution. It is therefore not tracked in this repository. Download it from the listing into Content/Character/Stickman/ before opening the project, or the character references will be unresolved.
The source code is public for portfolio and educational viewing only. Redistribution, commercial use, or inclusion in other projects is not permitted.