
Gtech capstone project · 4 people
Etheria’s End
An adventure across floating islands, with a grappling hook to reach them and a few creatures along the way. The four of us built it in Unreal Engine.
- My role
- Co-lead · AI and C++ systems
- Format
- PC · Single player · Action RPG
- Project status
- Playable demo
- Technologies
01The project
An adventure built by the four of us.
In Etheria, we follow Kael as he sets out to save his childhood friend Maelys. To cross the floating islands, we use a grappling hook, a glider and the wind columns we find along the way.
This was our capstone project at Gtech. We made a demo you can play from start to finish, with an introduction, a village, a quest, combat and a dungeon. I mainly worked on the AI and C++ systems, alongside some game design and sound design.
How you play
- 01
Explore
Climb, swing and glide between islands.
- 02
Solve
Find your own way through puzzles with several solutions.
- 03
Fight
Read the danger and pick your moment.
- 04
Rest
Heal and save at a campfire.
02My work
What I built for Etheria.
I was a co-lead on the project. I worked on the AI and C++ systems, and also contributed to game design and sound design.
Enemy behaviours
I worked on the different enemy states: sleeping, patrolling, chasing the player and fighting. Their behaviour also shapes how you discover the world, with calmer creatures early on and more aggressive ones in dangerous areas.
Creatures that reach their destination
I worked on movement using NavMesh and RVO avoidance. When a creature gets stuck, the system detects the problem and calculates a new path. It is the kind of detail you barely notice when it works, and really notice when it is missing.
Co-lead, game design and sound
Being a co-lead also meant helping with game design decisions and sound design. I like moving from how a creature behaves to what the player sees and hears, rather than working on just one part of a game.
03Under the hood
The enemy that would not wake up.
To save updates, we disabled Tick on sleeping enemies. Except waking up also depended on Tick. The enemy fell asleep just fine, but then kept us waiting.
AI states
Take a closer lookLet it sleep without losing the wake-up call.
The enemy stops running its per-frame logic. Timers keep checking whether it should wake up, independently of Tick.
FTimerManagerWait until the character is ready.
OnPossess could run before the character’s BeginPlay. We delayed the start of the patrol to let initialisation finish.
OnPossess → initialisation → patrolFind a path, even after getting stuck.
NavMesh calculates movement paths, while RVO helps creatures avoid each other. If one gets stuck, its path is recalculated.
NavMesh / RVO / replanningConnect the game’s reactions.
Events connect quests and effects to behaviour. When a creature dies, an animation montage is followed by a Niagara effect and then its dissolution.
Event DispatchersSelect a state to see how it works.
How the code is organised
- BaseAIController
- Decisions and navigation
- BaseAICharacter
- Shared creature base
- AIMovementComponent
- Movement and avoidance
- AIAnimationComponent
- Readable movement
C++ handles the game logic. Blueprints let us tune it and put it into the game. Interfaces and Event Dispatchers allow the systems to communicate.
Some development choices
Waking up relied on the disabled Tick
Sleeping disabled the very Tick that checked the wake-up conditions.
We moved those checks to FTimerManager. The enemy can stop updating while still having a way to wake up.
The patrol started too early
OnPossess could run before the possessed character’s BeginPlay.
We delayed it until initialisation had finished. The problem was the order of events, rather than the path the enemy was trying to follow.
04In pictures
The project on screen.
5 imagesClick to enlarge ↗
A few images from our demo. The grappling hook and glider are part of the team’s work. The AI settings show more directly the part I worked on.
Among the islands
A glimpse of the world we explore with Kael.
A less peaceful encounter
Creatures and their behaviours during combat.
The grappling hook
Reach the ruins, build momentum and find another route.
A little altitude
The glider and wind columns let us travel from island to island.
AI settings
Hostility, behaviour and navigation can be adjusted in the editor.
Video coming soonA journey through Etheria
A clip from the demo will join these images soon.
05Outcome and team
A finished demo, with more ideas for later.
We completed a demo that is playable from start to finish. Not everything we imagined made it in, including the Golem boss. We chose to finish the existing route properly first.
What is in place
- A component-based C++ foundation.
- Enemies with sleeping, navigation and combat behaviours.
- A playable route connecting exploration, a quest, a puzzle and a dungeon.
Where the project stands
- We postponed the Golem to leave time for the rest of the demo.
- Combat and progression still need balancing.
- For later: more puzzles and dungeons, and automated builds earlier in development.
We finished a demo that you can play from beginning to end. That let us see what really worked once all the systems came together.
The team
- Léo Queiros Da Silva
- Co-lead · AI, C++ systems, game design and sound design
- Shailendra Blondel
- Lead · Architecture and C++ systems
- Mathias Rebecca
- Co-lead · Narrative, level design and cinematics
- Maurad Bahri
- Development · VFX, UI and UX
Want to talk about this project?
Let’s talk
