Overview
Engine: EGO 4.0
Tools: Atlassian Suite, Proprietary Toolsets
Full-Team Size: ~100-200
Strike Team Size: ~7-9
Design Team Size: ~4-7
Role: Mid-Level System Designer (2 Years Industry Experience)
Duration: Feb. 2020 - Dec. 2020
Coming off a freshly canceled project with a very tight-knit design team was challenging so early in my career, and especially at the beginning of 2020. I was lucky to find a temporary home and to join in the great Design team over at Codemasters in the endeavour to ship Grid: Legends. While on the project I was able to perform two exploratory feature designs, and learn a heck of a lot from some very talented Senior Devs on how to articulate and frame my philosophy and design approach when creating systems.
Please note: Due to the nature of co-dev work at the time, I was unable to retain access to my work and documentation as we did not receive permission from the client to do so. Therefore, any media shown is representative of the final iterations of content visible in the final product, and not necessarily reflective of its state at the time I worked and contributed to it.
My work on the project:
Nemesis
Index
Notice the distinct red warning flag, indicating a Nemesis is present. In this case the player chose to skip holding the door open for Valentin Manzi.
Image Credit: Motorworldhype.com
“I would burn down 1,000 race tracks if it meant {Player} loses this race.” -The Nemesis, probably
Image Credit: RacingGames.gg
“I would burn down 1,000 race tracks if it meant {Player} loses this race.” -The Nemesis, probably
Image Credit: Nintendolife.com
At the end of the day a bit of good clean driving with a competetive opponent is tough to beat.
Image Credit: RacingGames.gg
The Pitch
Imagine a line of people, one after the other, holding the door open for each other as they all enter a building. The first person holds open the door for the second person to go through. The third person then swaps with the first person and lets them through. The fourth then for the third, and so on. Now imagine the next person in line didn’t bother swapping out, and instead just walked straight into the building. It might peeve the person who was supposed to enter next. In fact, it might peeve them enough to make them want to get back at you. Now imagine that exact same petty human retaliation, but at 200 miles per hour on a tight street circuit. That is the core of the Nemesis system.
The Nemesis system in Grid: Legends is how dynamic and radiant exploration into the social mechanics of racing manifested. It spawns from a simple thought: “Wouldn’t it be cool if your behaviour in the race could be recognized by the AI, and acted upon?”
It’s a feature in pursuit of a rare-thing in sports oriented games, immersion. Yet it was something I felt strongly about, and was delighted to learn had also been present in the prequel: Grid (2019)
Emergent Narrative… in Racing?
There were many times when I played Need For Speed: Most Wanted while growing up that the actual names of my opponents didn’t matter. Racing has always been at the mercy of ‘random car #4’ not really being a compelling enemy to fight against, or triumph over. The Nemesis system sought to change this idea.
The pursuit of the perfect lap in a vacuum is a mathematical measurement of what are the perfect inputs. AI adds the spice to this dish, and by a degree allows racing to become elevated. No longer are you racing against ‘random car #4’ you’re suddenly racing against your Nemesis, Johnny Grid, and he’s trying to put you into the wall at nearly 200 miles per hour.
Now the players assessment of how to take a turn gains a new dimension it didn’t before. Instead of a pure measurement of speed and momentum, there’s also a real social element the player must ask themselves. Are they going to risk late-breaking a corner for that position if it means there’s going to be a mini-boss chasing them down for the rest of the race?
This sheer semi-predictable unpredictability was the vision I was seeking to bring up-to-date in this next Grid installment.
What does a Nemesis do?
With the vision and fantasy clear in my mind, I set out to try and define the parameters which would define how a Nemesis was created, and how they could act from then-on.
From previous titles, nearly all the basics were already baked into the behaviour tree. Repeatedly hitting, bumping, or ramming an AI opponent could define them as your Nemesis. This meant their behaviour tree swapped from a standard driver, to a Nemesis driver.
While a Nemesis, the goal became to get in the players way. While behind the player, the AI should no longer hesitate to dive-bomb into a corner if it meant taking out the players vehicle on the way down. They should also detect when the player is trying to pass and swerve to block them from getting through.
The balancing for this was also very tricky to define. My main concern was having a title flash across the screen telling the player they’d made a new enemy, and then notice absolutely no change for the rest of the race.
While the tuning in the shipping product ended up being slightly too sensitive (the AI was often more concerned with ending the player's bloodline than actually winning the race) this over-correction was a far better systems outcome than a feature the player never noticed.
Allies
Grid: Legends wanted to expand on the previous game’s iteration of the feature. The team wanted to consider not only how the Nemesis system might be improved, but what if it could also function in the opposite direction? What if you could choose to hold open the door for an extra person, and make an ally instead of an enemy?
While it ultimately didn’t make the final cut of the game, it was important to try and understand and define the different behaviors that could be reasonable for the AI to take if you gave them a clean opportunity as well.
When I sat down to think about it, it was a challenge. Aside from just being more generous with respecting the player’s space, would it even make sense for the AI to yield a preferred racing line as a ‘Thank You’ for an action the player took twelve laps earlier? Would players be able to connect and understand how this consequence to an earlier action they took related?
Maybe this feature evolution would be better fit improving an already built system, instead of trying to make an entirely brand new one. What else are teammates for?
Please note: Due to the nature of co-dev work at the time, I was unable to retain access to my work and documentation as we did not receive permission from the client to do so. Therefore, any media shown is representative of the final iterations of content visible in the final product, and not necessarily reflective of its state at the time I worked and contributed to it.
Team Orders
You don’t have to love everyone on your team, but you do have to race with them.
Image Credit: GTPlanet.net
I for one would love to send Yume Tanaka into Valentin at 150mph after getting spun out by my Nemesis.
Image Credit: TheGamer.com
There’s actually upgrade trees for every part of your racing team, not just your teammate.
Image Credit: Gamepur.com
The window for reading a novel of UI instruction while blasting through the city streets is not as high as you would guess.
Image Credit: GameTyrant.com
Wherever GRID goes next, I’m happy I contributed to their journey.
Image Credit: TheGamer.com
What is a Teammate?
If the Nemesis system is about the chaotic liability of making enemies at 200 miles per hour, Team Orders are about the fragile tactical advantage of managing a friendly driver under the exact same pressure. Fortunately or not, high-stakes racing shares many similarities with Chess. Following the groundwork laid by the behavioral systems of Grid (2019), the studio wanted to explore how a teammate could evolve from a basic teammate into a dynamic utility.
My role here wasn't to lead a dev team through a full production cycle. Instead, I took on the messy ideation phase by building a framework and initial vision for a Senior to later build upon and lead through development when the production time came around.
Expanding The Playbook
Previous titles in the franchise had already established the controller’s D-Pad as the reliable low cognitive load input for teammate communication. However, the existing legacy system was largely a one-trick pony, restricted to basic, polite requests like "please let me by." Leadership wanted to blow the playbook wide open, and so that was my greenlight to explore.
While keeping the default "Let Me Pass" and "Defend" options as our baseline layout, I proposed a third, more aggressive tactical behavior: Attack. The logic behind Attack was directly tied to our social systems. If an aggressive Nemesis was actively trying to put the player into a concrete wall, the player could ask their teammate to help absorb the psychological and physical heat. It shifted the teammate from a mere obstacle into an extension of the players wrath.
The Career Evolution
One of the earliest systemic questions we faced was whether a teammate should be allowed to… er, “politely refuse” an order. From a pure player-agency standpoint, having an AI teammate flat-out tell you to kick rocks during a critical championship race feels deeply frustrating. I decided that the teammate should always obey but their actual mechanical proficiency at executing that order should scale.
Internally, it made the most systemic sense to tie the AI’s execution capability directly to the player's career progression. As you invest resources into your racing team, both you and your wingman grow as drivers. A rookie teammate ordered to "Defend" a corner might miss a braking zone and leave the inside lane wide open. A fully upgraded, veteran teammate, however, would position their vehicle perfectly, aggressively suffocating the racing line like a seasoned pro.
Simplicity is Best-icity
The single biggest headache of this design phase wasn't technical mapping; it was a battle against complexity. In a strategy game, you have the luxury of time to issue complex, nested commands (check out my page on CIV VII!). In a split-second racing game, you absolutely do not. You cannot give a driver a button that says, "Okay, in three laps, bottle up the traffic on the hairpin so I can pull away."
The challenge was identifying highly specific, complex driving behaviors that weren't already built into the engine, filtering out the absurd ones (no driving backward and flipping the bird to third place) and compressing them into a UI layer that required zero thinking to use. The communication had to be immediate, using one or two words max. If the player has to read a menu while taking a corner at triple-digit speeds, the layout had failed.
The Outcome
I left the project before this feature could be driven across the finish line 🥁, and the final shipping version of the game didn't ultimately lean as heavily into these advanced multi-layered mechanics as the design team had originally fantasized about during our initial sessions. Production realities often trim raw ambition, and the final product favored a safer, more familiar execution.
But that is the reality of core system design. True design maturity means understanding that an ideation phase that leaves behind a foundation which can be easily evaluated and rejected is normal and okay. It proved we could conceptualize dense team dynamics, design within strict UI constraints, and deliver construction materials which could get used the next time GRID hits the production floor.