Page cover

Oubliette

A roguelike FPS where players plummet through randomly-generated chasms.

Summary

Game Design

  • Designed core systems including procedural generation, combat mechanics, AI behavior, player progression, and upgrade systems

  • Created comprehensive design documentation for a 17-person multidisciplinary team

  • Presented and pitched project updates to industry professionals and investors

Programming

  • Engineered major game systems including the procedural level generator, player controller, and combat framework

  • Managed 3 additional programmers, establishing coding standards and delegating feature development

  • Built scalable, modular systems to support rapid iteration and intuitive content editing

Producing

  • Led a team of 17 developers and artists across all production disciplines

  • Organized weekly sprints and team meetings, coordinating department workflows

  • Managed project scope, timeline, and budget allocation

  • Resolved technical and design issues as they arose, preserving the team's momentum

Introduction

Oubliette started as my final-year master's project in Games Design and Development at the National Film and Television School. This project was a huge undertaking, culminating in thousands of hours of work across multiple disciplines.

This game came from a place of love. I'm an avid fan of run-n-gun boomer shooters, and wanted to create something that made players feel powerful and skilled. I also wanted to move the format in an unexpected direction and make something visually and mechanically disctinct. Something that would make people stop and ask: "What is that?".

What makes run-n-gun shooters so compelling is their relentless demand for player attention. You're constantly tracking threats, managing resources, and reacting in a split-second. I wanted to amplify that intensity, and what better way to do that than to remove the thing most players take for granted in any game? The floor.

What Is Oubliette?

A roguelike first person shooter where the majority of the action takes place as the player falls. Dodge obstacles, fight enemies, and discover secrets as you navigate your vertical descent. As you progress, you will be offered various opportunities to improve your character's stats, giving them anything from movement and health upgrades to brand new abilities.

Setting

Oubliette is set beneath post-war Paris, during the 1950s. You play as Madeleine, a misanthropic detective with an obsessive need to find answers to odd cases. Following a lead into the catacombs beneath the city, she tumbles into a strange underground system of vertical drops. Guided by her curiosity, she ventures downwards.

Gameplay

All elements of Oubliette are designed around 2 core pillars: intrigue and intensity. I want them hooked by distinct gameplay and odd environments. The game’s design tries to balance risk and reward which forces the player to make quick decisions as they hurtle through the game’s cramped spaces. At its best, players shouldn't even want to look away, not even for a second.

A noun-verb diagram of Oubliette's core gameplay, and how its various features/systems relate to one another. I found this type of diagram particularly useful in clarifying what I should start designing first, and how I should approach implementing certain features.

However, intensity and curiosity alone would probably not be enough to sustain entertaining gameplay for very long. Oubliette is deliberately uncomfortable at first; frequent FPS players have an easier time adapting to the unusual way of moving, but falling is an inherently vulnerable state for anyone to be in. It’s hard to slow your descent, and you can’t reverse course. The lack of control can become frustrating, and the novelty would wear off quickly.

This is actually where our third pillar comes in: control.

Control

So, our player can strafe slowly around while falling, look in any direction; and they can shoot—basic FPS stuff. But they’re not very useful on their own when you’ve literally cut the ground from underneath their feet.

One of the first major design challenges was figuring out how to give control back to the player after stripping away their most fundamental expectation: solid ground.

Attempt #1: The Hand Cannon

Gun recoil as a form of movement was going to be one of the core selling points of Oubliette, but it turned out to be quite a failure. Below is an early prototype of this mechanic alongside a barebones version of the level generator:

The concept: our player would wield a massive handgun that could kill enemies and launch you back when fired. In precarious situations, you could aim away from danger, fire, and blast yourself to safety. If you timed it right, you could even fire downwards to break your fall. It felt really great to do; about 10% of the time.

For the other 90% however, players would shoot an enemy, forget about the recoil, and get launched into another obstacle or enemy. Since shooting is unavoidable in a game like this, this recoil mechanic created a frustrating tax on basic combat.

I had considered the recoil mechanic to be a major part of the game’s identity at that point, but the evidence was clear: even I rarely used it as intended. This feature had to go.

In theory, shooting at the ground to break your fall would’ve been really cool. In practice, it punished the players for doing something they constantly needed to do.

Attempt #2: Advanced Moveset

I reworked the character controller, adding new ways the player could interact with the environment. They could now slide down walls to slow their descent, then launch off to reposition themselves quickly. This gave them a way to catch their breath in tight situations and even land on obstacles. I also gave the player a simple dash, giving them a sudden burst of speed to create space and dodge hazards quickly.

Wall sliding and jumping were now very powerful new movement abilities. A little too powerful in fact. To prevent players from leisurely cruising down the walls of the entire level, I added stamina. Special movement abilities (dashing, wall sliding, wall jumping) deplete a shared resource which regenerates slowly over time. Players now have to be selective about when they use their movement abilities.

For wall sliding, I also added some friction delay: depending on your speed, it takes time to slow down to a safe velocity. This meant you couldn't instantly break your fall, but it also gave more weight to the player controller, and actually felt a lot better.

Upgrades

Progression is important in any game, especially in roguelikes. Upgrades gave the player a way to modify the gameplay to suit their playstyle as they continued falling deeper. Whether they wanted to prioritise graceful dodging with stamina and movement upgrades, or stack health and shields to tank damage, I wanted to make sure there was enough variety to experiment and make the run their own.

At the end of every level, players interact with a Shrine to either take an upgrade or restore up to 3 hearts of health.

I also introduced Anomalies: rare, random upgrades found mid-level that require a health sacrifice. In exchange, players gain powerful effects like Vampiric Bullets, which lets them passively heal by killing enemies. Anomalies are visually and thematically jarring, pulled from another reality, designed to feel ominous and unpredictable compared to the reliability of Shrines. Below is a vending machine, one such example of an anomaly you may cross on your journey through the chasms:

Be careful, it bites.

I'm currently balancing and expanding the Anomaly system with unique sacrifice mechanics for each different anomaly. Each one should offer high-risk, high-reward gambles that can define a run.

Environment

Levels in Oubliette are procedurally generated at runtime. Pure randomness can be good for variety, but it also creates problems: awkward obstacle placements that are either frustrating to navigate or visually incoherent. For a game that relied on calculated, precise movement and interesting environments, generated chaos wouldn’t cut it.

The answer was modular level pieces with predetermined spawn points for each obstacle. Each section is hand-crafted to ensure traversability, but the obstacles within that section are randomly selected based on difficulty.This gave me far more control over pacing and flow while maintaining that sense of replayability which is so important for roguelikes.

The level generator works in two layers:

  1. The generator component: Selects and stacks modular pieces randomly, ensuring a start and end piece.

  2. Chasm section logic: Each piece independently handles its own obstacle spawning, deciding on type and quantity based on the difficulty curve.

(Left) A chasm section showing all possible obstacle positions. (Right) Example of what pieces might activate at runtime

This approach allowed me to design a more specific player experience while maintaining the the unpredictability of a roguelike game. Once this system was set up, it became easy to create a number of section pieces, which I could edit and iterate on.

Level Design

Clarity was exceptionally important. Players move fast through tight, 10×10 meter shafts, which leaves little room for error, especially for newcomers still adapting to Oubliette’s style of gameplay. Clear visual communication was essential so players could focus on planning their trajectory.

The challenge was doing this while maintaining the game’s dark and gritty aesthetic, which involved a strategic use of lighting and materials. Obstacles were made slightly emissive to pop out against the environment, while walls and edges remained subdued but still textured and detailed.

I intentionally wanted the wall textures detailed and rough rather than simple. This does create a busier visual space, but seeing that detail rush past you as you fall dramatically amplifies the sensation of speed. I managed the potential distraction of visual noise through careful use of lighting, modifications to the game’s shader, and obstacle spacing.

Another early Oubliette prototype. Even though it was only a placeholder, I could already tell that without more detailed textures, the descent would feel a lot slower.
Note that in both this fotoage and the one above, the player is moving at roughly the same vertical velocity.

Other visual effects , such as the animated vignette and adaptive FOV, also helped in creating this sensation of speed. But the wall texture was key; it turned the environment into a clear speed indicator.

The Importance of Rest

There's only so long a player can maintain intense focus. That's why each level in Oubliette is designed to be traversable in 3-4 minutes. That might not sound like a long time, but the relentless, high-speed freefall can make even short bursts exhausting.

This is one of the main reasons I punctuated generated levels with Saferooms; calm endpoints where players can do things at their own pace: explore, pick an upgrade, or just catch their breath.

Some players don't spend long here, and want to get straight back into the action, so the design supports that with minimal friction. But for others, even 10-20 seconds of breathing space provides a needed mental reset before diving back in.

Enemies

All enemy/player models and animations were created by Kristof Firnigel

Alongside obstacles, enemies are the foundation of what makes Oubliette intense. Inspired by the alien, often unsettling characteristics of deep-sea creatures, each of the 3 enemy types are designed to prevent the player from getting too comfortable.

Hope

This abomination scuttles down the walls, relentlessly keeping pace with the player’s descent. Hope attacks by lunging across the shaft, then resuming its pursuit on the opposite wall. I programmed it to pathfind around generated obstacles when possible, but it will crash through anything it can't avoid. It will constantly be switching speeds and positions on the wall, making it harder to hit.

Hope forces players to monitor their peripherals, splitting attention between threats below and threats closing in from the sides.

Peace

Peace bursts from the walls without warning, punishing players who hug the edges or over-rely on wall sliding. This enemy ensures no position near the edges of the level feels safe for long. Constant repositioning is key to avoiding this enemy’s grasp.

Tranquility

Probably the most shocking enemy, which is often encountered last. Tranquility announces itself with a bloodcurdling scream, giving players a few seconds before a grotesque, toothy mass erupts from the darkness below. It can be shot, but often dodging is the smarter play. A threat from beneath, but one that careens toward the player at a much faster speed than the level’s static obstacles.

Narrative

Deep beneath Paris, past the metro and the catacombs, lies something sinister: a massive system of artificial tunnels spiraling into the earth like roots. Something that should, by all accounts, not exist.

I wanted Oubliette to have an interesting story to match the strange tone of the game. As our player progresses, they will not only learn more about our protagonist Madeleine, but also about the people who came before her, and what this underground system even is.

Madeleine

Madeleine is voiced by Léna Laprès

The protagonist of Oubliette: a solitary, cynical misanthrope and a brilliant detective. As our player descends, they will gradually learn more about Madeleine, and what drives her to dive headfirst into such a hostile environment to pursue answers at any cost.

Humans are naturally drawn to each other, we like to have someone to relate to. Despite Madeleine's coldness, she also helps ground the player. She acts as a secondary lens through which we can process the game's story. There's also something compelling about watching someone such as Madeleine react to what she sees. How does someone so rational respond when faced with something that defies all logic?

Codex Entries

Scattered randomly throughout the game's generated levels are collectable dictaphones. On them: audio entries by Dr. Fairfax, a British archeologist who went missing in the system years ago. Over the course of the player's many runs, these dictaphones will help give context to the systems of Oubliette, occasionally offering hints to secrets hidden within the chasms.

Dr Fairfax is voiced by Tracy Wiles

Art & Audio

Oubliette's aesthetic began with shader experimentation. I wanted stark contrast between light and dark to help guide the player and create sharp, dramatic shadows, cast through doorways and across jagged geometry.

A subtle animated noise was added to the gradients, mimicking the flicker of torchlight and creating an ominous tension: as if the light is almost fighting its way through the indifferent darkness.

Illustrations

All 2D illustrations were created by Hélène Siret

Presentation can make or break a game, and I wanted to get it right with Oubliette from the start. Working closely with Oubliette's 2D artist, Hélène Siret, Oubliette's world was gracefully brought to life through a stellar cutscene sequence and beautifully rendered character art. The illustrations are the first thing players see, and set the tone of the game before a button is even pressed.

Madeleine could've gone in many different directions. You may recognise some of her disctinct features scattered throughought these renditions.

Madeleine needed to be memorable. Her design is sharp, stylish, and unmistakably hers. She's the face and soul of Oubliette; and her dramatic pose on the official poster consistently draws people to our booth at conventions and festivals.

User Interface

Oubliette's UI art was created by Mason Soleski

Speaking of visual identity, the design Oubliette's UI was very carfeully considered. Players needed critical information at a glance, without breaking the gothic-noir aesthetic.

An early layout of the UI. From the beginning, I wanted health to be easy and obvious to see.
A more updated version of the UI, with both health and ammo being clear. Other features include the stamina bar (bottom middle) and the player state (bottom left)

One of major priorities was making sure the players were instantly able to know how close they were to death. Health occupies a significant portion of screen real estate which ensures easy reference for the player during frantic freefall where attention is split across multiple areas on and off the screen.

One of the more unique UI elements was the inclusion of a player state indicator (bottom left):

Like many design choices in Oubliette, this was done to make Madeleine's state as clear as possible to the player.

The player constantly shifts between states: falling, standing, and wall sliding. In some situations, sound and visual feedback may not be quite enough to efficiently and quickly communicate what the player is actually doing, especially during Oublette's chaotic combat. Playtesting revealed this UI element was especially valuable during the transition from freefall to wall sliding. Because of the slide's friction delay, players needed confirmation they'd successfully attached, particularly at high speeds where the difference between sliding and falling could mean death.

A strict black and white colour palette was adopted across most of the UI. This felt a lot more readable and tonally consistent with the game's visuals. The only exception was upgrade menus, where we needed to remind the player about what kind of upgrades they were dealing with, and how dangerous they potentially were.

Regular upgrades: Found at the end of every level. Safe and reliable.
Anomaly upgrades: Hidden and dangerous. Requires sacrificing a point of life to gain.

Music

All music for Oubliette was composed by Beatrice de Trenqualye and Harpal Mudhar

Oubliette's beating heart. It was absoutely essential for this game to have a soundtrack that could keep pace with its intensity. It needed something that kept the player on edge, immersed them in the action, and communicated different levels of danger. I wanted music to be a communication tool.

A screenshot of the project file from of of Oubliette's gameplay tracks.

The game keeps an eye on the player's health, dynamically shifting between 3 threat levels. Each gameplay track has 3 distinct variations that seamlessly transition based on the player's state. This was all handled through FMOD, Oubliette's audio middleware.

Tracks are selected randomly at the start of each level, with spatial triggers cueing transitions to context-specific music; such as the player's arrival at the end of a level or entry into special areas.

Sound Design

Oubliette's sound effects and design were largely realised thanks to Thomas Moss and Benet Serra

At risk of sounding reptitive: clarity is always key in Oubliette. If a game system can communicate information to the player, it should. Sound design was one of the most powerful tools we used for this.

The most obvious example of this was Madeleine's voice lines. She audibly communicates when she's been hit, healed, or taken an upgrade. This was an easy way to give our character more life while giving our player additional confirmation of their actions or what just happened.

Enemy audio was even more important. Each enemy has a unique sound signature which is directional. The best way to tell if an enemy like Hope is near you is the moment you hear its repulsive scuttling as it pursues you down the level. As mentioned in the Enemies section with fast enemies like Tranquility, key sounds are played to announce the approach of a serious danger. Audio is an important survival tool.

Interestingly, Oubliette has little environmental ambience. The music and sound effects are the atmosphere. In the presence of an Anomaly, when most sounds and music fall away, the silence becomes oppressive. The player's focus narrows entirely to the Anomaly's distinct sound, which turns out to be quite unsettling.

Gameplay

If you want to see how all these elements have combined to create Oubliette, please take a peek at the gameplay video below. I also have a short developer's commentary available to watch if you're interested in learning a little more about my design choices.

Gameplay Video

Developer Commentary

Last updated