Halo engine "still had 1992's Marathon code in it": devs discuss messy codebase of AAA games
No game engine is perfect. And sometimes developers may have a hard time working with specific frameworks due to a large amount of legacy code or lack of good documentation.
Halo 5: Guardians
It all started with a post on Reddit by iOS developer Garciawilton, who asked people with experience working on AAA games whether their codebases were often messy.
The most popular comment was written by Randy Knapp, staff UI engineer at Theorycraft Games. He previously served as gameplayer/UI programmer and senior software engineer at Respawn Entertainment, PopCap Games, 343 Industries, and ArenaNet. So he shared his thoughts on some of the engines he has worked with.
Guild Wars 2, which uses ArenaNet’s proprietary engine, received the most praise for having strict coding standards and “really good in-house design tools.” However, Knapp didn’t like the UI engine because it wasn’t data-driven, making it difficult to iterate on.
The developer has mixed feelings about his work on Apex Legends, which was built using a heavily modified version of Valve’s Source engine. “Respawn ripped it to shreds and rebuilt it how they liked. It has hardly any OOP [object-oriented programming] in it. Massive files of just structs and global functions. At first I thought it was weird, but after a couple years I actually liked it,” Knapp wrote, adding that the UI framework was horrible, and he built a “brand new UI framework, which ended up pretty awesome.”
Speaking of Halo 5: Guardians, he described his experience with the engine using only these emojis: “🤢🤮🤮🤮🤮🤮🤮🤮🤮🤢🤢🤮🤮🤮” Knapp noted that the developers were so scared of losing the “Halo feel” that they didn’t remove anything, so there was a lot of bad legacy code.
Prior to Halo Infinite, all major games in the series were built with various versions of Bungie’s Blam engine. And when Knapp worked on Guardians, it “still had 1992’s Marathon code in it.” There were also three different script virtual machines running concurrently: Lua, Havok Script, and interpreted C#. The developer also criticized the UI framework, adding that “I can’t believe any Halo game ever shipped.”
Another developer, user slindan, said the visual scripting codebase in Battlefield 4 was a “complete mess.” There were also some fun stuff too, when the team tried to solve even simple problems: “[I] remember us making a throwing knife and it kept spinning on the floor after it was thrown, and the programmer who made it said, ‘Well it either has to be a grenade [object] which makes it spin on the floor, or a bullet [object] which will make it disappear. Which do you prefer?'”
Developer Robert Nystrom recalled his work on the Madden NFL series. Although some parts of the codebase were nice, there was “so much awful decrepit C++” that he wrote a book called “Game Programming Patterns” as a “therapy exercise.”
Many developers in the thread agreed that the biggest issue with AAA codebases is the amount of legacy things. User KingGruau, who worked at Ubisoft on three projects, noted that he saw one game that “evolved the engine from Watch Dogs 2 and it still had some tech from Far Cry 1.” Rainbow Six Siege, on the other hand, had the “cleanest AAA codebase” because it is a live service project, and devs have to make sure the engine doesn’t turn into a complete mess.
“Documentation is another hot topic,” another Ubisoft dev, C_Cabreira, added. “No one wants to write documentation in an engine that changes on a daily basis.”