Night Race is a physics-based top-down arcade runner. The player controls a car on an infinite procedurally generated road, dodging obstacles, performing tricks in the air, and collecting pickups, all while a camera advances at increasing speed, shrinking the margin for error. The goal is to beat your own highscore.
Marec CHARNAY - Producing
Pierre-Louis FAURE - Game Design
Lucas THEKAL - Programming
Jonathan BEVIERE - Lead 3D
Anouck MERCIER - Lead 3D
Mayssam MNASRI - 3D Artist
Léonie OLIVIER - 3D Artist
Antonin LEVY - 3D Artist
Camille PANAZOL - 3D Artist
Matteo DUBARRY - 3D Artist
Working with Datatables for Level Patterns taught me how to separate data from logic, making iteration significantly faster when adjusting difficulty curves.
Collaborating with artists revealed how different their production constraints are from design ones — understanding their pipeline early saved us from several costly late-stage revisions.
Digging into Unreal's Character parameters gave me a practical understanding of how engine-side variables interact, which made physics tuning more deliberate and less trial-and-error.
Iterating on the 3Cs showed me that feel cannot be designed on paper. Only repeated playtesting with honest feedback reveals what's actually wrong.
Structuring documentation for a short project taught me to prioritise clarity over completeness: a one-page reference the team actually reads is worth more than a thorough doc nobody opens.
Documentation
System Design
Balancing
Gamefeel
Pattern Design/Integration
The design goal for the controller was deliberate: slightly slippery and hard to master at first, but deeply satisfying once the player internalises its behaviour. Achieving that required a structured iterative process across three vehicle states : on the ground, in the air, and in slow motion.
Since I was discovering Unreal Engine at the time, I needed to figure out what the different forces do, and how they interact with each other.
For each state, I tracked every physics parameter in a spreadsheet alongside a score out of 10 after each test. Parameters were adjusted one at a time and colour-coded to flag the size of each change, making it easy to isolate which variables were actually driving the feel.
I also had to take care of a big part of the Level design. It was quite different from a simple level since the game would use procedural generation. The way it works is by using a pool of premade patterns, that it cycles as the player progresses. The main challenge was to create enough patterns for the game to feel satisfying and not too repetitive in the short time we had.
When designing the patterns, our main concern was to always have 2 possible paths on each one. One path would be easier but would not award as many coins or opportunities for stunts.
Since we were running out of time, we decided to add a system that would mirror a pattern. This effectively doubled our pattern pool, making the game much less repetitive.
Easy/Hard path
Example of pattern mirroring