A Spirit Tale
A VR fitness game for the Oculus Quest: draw symbols, defeat enemies, and follow a spirits story. Built in Unity by a team of six.
About
A Spirit Tale is a VR fitness game for the Oculus Quest, developed by a team of six over four months as part of my Bachelor’s Praxisprojekt at HTW Berlin (WS 2020/21). Inspired by Beat Saber, players defeat enemies through physical movement: punching, imitating poses, and drawing symbols in 3D space.
Players start in an apartment and select from three culturally-inspired levels (Japanese, Medieval, Oriental), each with its own storyline, music, and masked final boss. Levels begin in black-and-white and slowly regain colour as enemies are defeated. Locomotion is teleportation-only, by design, to prevent motion sickness.
Team: Bartholomäus Berresheim, Juri Wiechmann, Marie Lencer, Nima Azimihashemi, Nuri Son, Pauline Röhr Supervisor: Prof. Dr.-Ing. David Strippgen
I came into this project with no Unity, C#, or game development experience and had never used a VR headset. I brought agile project management experience and strong Git skills from my internship, both of which turned out to matter a lot.
My Role
I took on a dual role as developer and de facto project lead. As the only team member with professional development experience, I stepped in to provide structure: set up Discord, Trello, and Google Docs, introduced the team to agile practices, moderated sprint meetings, and kept the backlog populated. At the halfway point I ran a formal retrospective (using the Miro template I used at work) where the team identified communication issues and agreed on improvements. By the end of the project the team was largely self-organising, which I consider the biggest success on the project management side.
Technical Contributions
Symbol Drawing
Symbol drawing is the finishing move of every enemy encounter. Once a boxing or posing enemy is worn down, the player retraces a symbol in 3D space with the controller pointer to land the final blow.
I designed and built the mechanic from scratch. I modelled four symbols (circle, S, spiral, triangle) in Maya and
built a collision-based recognition system in Unity: SymbolPoints placed inside each mesh detect pointer hits and
spawn particle effects, giving the player visual feedback of their progress. All points reached means the symbol is
cleared.
Circular symbols needed a special case: I implemented a subclass that resets the first hit point after the second contact, requiring it to be touched twice, so completing a circle actually feels like a circle.
Story Integration
I designed and built the StoryController, which places floating parchment story pieces in front of the player between
enemy encounters. The pieces bob gently, are positioned at a comfortable reading distance, and include a small point
light for contrast. I contributed the initial ideas for two of the three level stories, which the writing team then
developed further.
UI and Scene Transitions
I built the pause, game over, and victory screens. Standard Unity UI does not translate cleanly to VR, and scene loading caused visible lag on the Quest that could cause motion sickness.
My solution was a black sphere with an Unlit shader rendering backfaces. Placing the player controller inside it makes the world disappear completely. I used this for both the in-game menus (UI canvases on a virtual screen in front of the player) and as a fade-to-black transition wrapper between every scene load.
Project Setup and Git Infrastructure
- Set up the Unity project with the Oculus Integration Package and VR player controller
- Configured Oculus Link for in-editor debugging
- Defined the team’s Git workflow (feature branches, PR review on every merge) and wrote development guidelines in the README
- Resolved merge conflicts in voice calls throughout the project
- Cleaned up a bloated repository, reducing a commit from 6,000+ files to ~3,000
- Assembled integration builds by screen-sharing with feature authors
What We Would Build Next
The original Quest’s performance limits were the main constraint on scope. The team had a number of ideas that didn’t make it in:
- Additional maps: a galleon on a ghost-ship ocean, a sci-fi flying-car city, underwater Atlantis
- New enemy types: sword/axe slashing along coloured lines, distance combat with a bow, a speed mode for rapid pose memorisation
- Expanded symbol library and multiplayer mode
Showtime
The project was presented at HTW Berlin’s Showtime event. I contributed to the showtime website (tech stack section), prepared a live gameplay stream over Oculus Link with Zoom audio routing, and played the game live for the audience.