← Back to my work 2022 - 2024 / Co-founder, Lead Programmer & Game Designer

Lumi: Starbound Adventure

A platformer where you can pick up the platforms and make your own way through the world.

Building Lumi

I co-founded Dreaming Giants and worked as lead programmer and game designer on Lumi, with a team that grew to five. I handled the Unreal Engine 5 programming and worked closely with the team on the game's direction, from its central mechanic to how it felt to move through the world.

My co-director and I spent the first three months building an initial prototype, with my co-director handling music, sound effects, and business development alongside my programming and design work. We then joined Tranzfuser, giving us four more months to develop the game. Winning Tranzfuser secured a UK Games Fund grant and another six months of funded development.

Overall, we spent around a year and a half on Lumi, working through several rounds of funding and the uncertainty in between. Across three game expos, we put the game in players' hands and used their reactions to refine it.

Download the Lumi demo
Visitors playing Lumi at a game expo, with the game's artwork behind the stand
Putting Lumi in players' hands at a public showcase

Project challenge

Finding the game in its platforms

Lumi began as an item-based platformer, drawing on games we loved such as Ratchet & Clank, Mario Sunshine, and Banjo-Kazooie. We experimented with different mechanics in a playground level, but as we moved away from the item-based approach, we were still looking for something that gave the game its own identity.

A very early look at the prototype

The turning point was giving players the ability to pick up and move the platforms themselves. I implemented the mechanic, and the positive feedback gave us a direction to build around. Players could arrange their own route through the world, which shaped our approach to level design: puzzles should allow different solutions.

Making platform rotation feel understandable took more thought than the final code suggested. I needed to work out what players expected their input to do as they looked at an object from different angles. I used quaternion rotations, with a world-up axis for horizontal turns and the camera's right axis for vertical turns, then animated those rotations through Blueprint timelines.

We kept testing how players understood the interaction, including at public showcases. The response was positive, and platform manipulation became the mechanic around which we built Lumi's world.

Project challenge

Making ledge grabbing work beyond the blockout

Ledge grabbing worked well while Lumi's world was made of simple blocky shapes. Once the environment art introduced slopes and uneven rock surfaces, those same interactions started breaking. We wanted players to climb around a world where platforms could be moved and rotated, so the system needed to handle a wide range of approaches.

Lumi's environment art shown as a concept sketch, finished scene, and mesh views
Developing the look of Lumi's world

I worked with our environment artist to give grabbable rocks clearer, more deliberate edges while keeping their natural appearance. In the code, I also added some tolerance to what counted as a valid grab. That let us refine the art and the interaction together.

A rock ledge with a partial wireframe overlay showing its shape and edges
Working with the environment artist on grabbable rock shapes

Getting onto the ledge introduced another problem. As the character moved upwards, the rounded collision capsule caught against the edge and pushed them backwards. I explored several approaches, including an animated climb, but the range of platform orientations made a dynamic ledge jump a more practical fit for our small team and limited development time.

I settled on briefly disabling the character's collision during the upward launch. Starting the jump from zero velocity limited sideways movement during that window, and Unreal's physics resolved small overlaps afterwards. This gave us a way to climb onto ledges across different orientations without authoring a separate animation for every situation.

The system still had room for refinement, but it brought ledge grabbing into the finished environments and supported the freedom we wanted players to have.

Project challenge

Spotting a camera problem at public showcases

For much of development, Lumi's camera had no automatic turning assistance. Our regular playtesters hadn't raised it as a major issue, but watching people play at public showcases revealed a problem we'd been missing.

Even players comfortable with dual-stick controls struggled to line up precise jumps to their side. They would turn the camera, attempt a jump, and discover that the view still wasn't helping them judge the landing. Spring platforms made this especially apparent, because players had to orient themselves quickly after being launched.

I added a simple horizontal turning assist to help the camera follow the player's direction as they moved and bounced through the world. I kept it gentle because precise platforming needed the player to retain control of the view.

I left the vertical angle under the player's control. Players weren't showing the same difficulty there, and Lumi's tall environments often required looking up or down for an extended period. Automatically resetting that angle was frustrating. The final approach addressed the sideways alignment we'd observed while preserving the view players chose for vertical exploration.

Looking back

Eventually, our funding ran out, and we couldn't find further backing to keep developing Lumi. We were a team of young immigrants in the UK, all fresh graduates, and needed to find other sources of income. It was difficult to stop after putting so much into the game.

Lumi was a fun idea and a game I loved working on. I still look back fondly on those early days, building something together and watching people discover what they could do with it.