GDC 2023 featured a number of fantastic programming talks ranging from highly technical advice to easy-to-follow principles and workflows. While the Game Developer staff wasn't able to attend every programming talk (unfortunately, that's impossible, and we'll be looking on vault for the rest of the year), here are a few highlights from our coverage. We've included deep dives on the modular system of "maneuvers" that Double Fine's coders used to create epic boss fights in Psychonauts 2, optimizing Marvel's Spider-Man for PC, the nuts and bolts of designing an expressive match-up system, and the use of procedural generation to create "layered" battles in Mario + Rabbids: Sparks of Hope. We've also included interviews with IGF-nominated and winning developers and folks behind the technical implementation of a few of Alt.Ctrl.GDC's most fascinating creators.
So, open up your favorite IDE and take notes! (Or comments, whatever you prefer.)
Using procedural generation to deliver "layered battles" in Mario + Rabbids: Sparks of Hope
Speaking at GDC 2023, Ubisoft Paris level designer Frédéric Giraud explained how the team generated multiple qualitative tactical battles for Sparks of Hope.
"We needed to build our levels and tag the different layers that comprised them. This way we could create a library of assets to generate battles from. Our levels are composed first by topography."
"We created one level per environment in the game. We have around 10 environments in the game, so it resulted in 10 levels. All of those levels are structured in six different 'grounds' that can either be shown or hidden, which is equal to up to 63 ground combinations. All of those combinations are composed into a library, and for each of them, we tagged them with keywords in terms of shape and elevation."
"The team created three different navigation layers for each topography, with one layer leaning on natural connectors such as bridges and slopes, another using navigations tools that extent movements such as pipes and trampolines, and the final layer mixing both. "For each of the different layers of navigation, we tagged them with keywords in order to explain how they help the player to move through the map," continues Giraud."
How Marvel's Spider-Man optimized its web-swings for PC gamers
Renowned PC-porting studio Nixxes reflects on its first project for Sony, speaks directly to #stutterstruggle.
"Nixxes programmer Michiel Roza described the first steps his team takes on any port, in line with its seven years of porting console-focused code to the Direct3D 12 API. After playing the game in question and examining its raw code, the team differentiates what it sees and parses it in three chunks: platform-agnostic code; platform-specific code; and code that appears to be cross-platform-capable but needs tuning. He mentioned a few "crude" tools that Nixxes could begin porting to accelerate various calls, which was no insult for what the console version's developers at Insomniac Games had left them; everything else had to be made from scratch."
"When pressed on how long it took to get D312 graphical calls running on PC, fellow Nixxes programmer Rebecca Fernandez O'Shea described the team's process of stopping every function in the game's codebase, then cobbling together and running separate functions one-by-one until they finally saw an image appear on a computer monitor. O'Shea estimated that this process took six weeks, and Roza recalled his delight at what he saw appear: 'Look, a triangle!'"
Using a modular system of maneuvers to design Psychonauts 2's boss fights in a hurry
Double Fine gameplay programmer Rebecca Vessal showed off the highly modular "maneuver" system the team designed to make the game's larger-than-life boss encounters on a tight schedule.
"Using the system, the teams were able to repurpose attacks (such as projectile or melee attacks), tweaking all the variables as needed for the boss in question, and even for the specific phase of the boss. The system was lightweight enough to allow for dialogue to be plugged in at appropriate times, and for some light randomization in terms of attack patterns (within the accepted parameters), which all followed a pattern of telegraph, attack, and recovery, all of which could have chains and sub-chains of behavior and animations."
How Skala surprised its own creator with its scale-shifting mechanics
Skala allows players to change the size and shape of the world and everything in it, asking them to solve puzzles by stretching and growing things.
"The game was built with a custom engine based on C and Opengl. At first, the only reason for this was that I like writing engines, but for this particular game it turned out to be especially useful. There were a lot of bugs caused by floating-point precision issues, and the way that objects can change size created a lot of situations that I'm not sure regular physics systems could have handled."
"So, by writing everything myself, I gained the control over the code I needed to deal with these types [of] issues effectively. It probably would have been possible to create the game with an already existing game engine, but I think that it would have been much more difficult."
Designing efficient systems for expressive matchmaking
Here are some practical strategies for creating and implementing a flexible and practical matchmaking system.
"Some of the biggest problems that arise in this process are that the algorithms for matchmaking are game-specific and ever-changing, and must evolve as the size of the player base grows or new content is added in. The goal is to select the most appropriate matches based on specific parameters, minimize the player's wait times, scale efficiently to the volume of players, and easily change those criteria over time as the base grows and changes."
Avoiding nuclear disaster with the connectors & pedals of Atomik
Atomik gives players a complex series of buttons, connections, keys, and pedals to keep a nuclear reactor from melting down. Better read the manual quickly.
"I have never worked with physical and electronic elements before, so it was a fun experience! It gave me the opportunity to learn about Arduino and realize that it really wasn’t that much different or complicated than what I was used to. But for a controller like this, the focus was much more on what feels great to manipulate—whether we should use a simple button or a pedal you have to press with your feet."
Read more programming coverage from Game Developer here.