Mark Darrah on lessons learned from Baldur's Gate: "If you look for perfection, you're never going to ship"
Prominent game developer and former BioWare producer Mark Darrah has shared his memories of creating the first Baldur’s Gate. Here are the lessons he learned during the process, including the importance of not chasing imaginary perfection.
Darrah officially became part of BioWare in 1997 when he joined the studio as a programmer. Despite doing some minor work on Shattered Steel in 1996, Baldur’s Gate was the first game that he was properly involved in. So in a new retrospective YouTube video, Darrah took a look back at the title’s development and shared some insights.
Writing the BGScript language and creating Biff the Understudy
The first thing Darrah worked on as a programmer was the conversation system for Baldur’s Gate. It was intended to be speaker-focused, meaning that everything that one person says all gathers together. But this also means that all files should cross-link to each other, making it difficult to visualize even a single conversation using this structure.
So Darrah wrote BGScript, a scripting language designed for the conversation system to determine which lines would fire at a given moment. He noted that it was very limited and simple — “basically just an if-test,” — but it ended up being used for many other purposes such as the AI of the creatures for the combat system.
That’s how Darrah learned a very valuable lesson: “If you make a scripting language, it is going to be used for things that you didn’t intend it to be used for.”
Another interesting thing related to the conversation system was Biff the Understudy, a special character that spawns if an NPC is missing (for example, someone died) and replaces them and says their lines.
Darrah created Biff the Understudy as a backup just in case. Although it wasn’t the best solution, it helped him learn another lesson: “You probably should put those suspenders on.”
I know you're really clever. I know you've handled all the cases, but it doesn't really cost that much to have that extra little check. Now this isn't always true. If you're in the middle of your graphic loop, you probably don't want to be doing constant null checks for things that are running a billion times a frame. But in most cases, assuming that you're a little bit less clever than you think you are is probably going to serve you well. Former executive producer at BioWare
How did Mark Darrah create the 2DA file format?
When working on Baldur’s Gate, Darrah didn’t initially design it as a complex file format that it evolved into over time. In this game, 2DA (two-dimensional array) was just a flat text file meant to be “easy to read and easy to use.”
2DA, which was originally intended to be read and parsed into another file format, allowed Darrah and other developers to quickly add new data into the game. And one ofthe main reasons for creating it was the AD&D 2nd edition rules that Baldur’s Gate was based on. It had a lot of tables, and this format helped devs handle all this data.
The main issue is that 2DAs might be used incorrectly. If these files start referencing each other, they turn into four-dimensional arrays, “tesseracts of data”, making everything more complicated. As Dararh pointed out, it is better to create a proper editor that “allows people to manage their data properly.” And 2DAs suits best for simpler purposes.
2DA is also connected with “override folders”, a concept that BioWare used in all of its games until switching to Unreal Engine. “It’s an folder in the hierarchy of the game where if you put files, they would be read and used preferentially over the files that were built into the data structure,” Darrah explained.
Override folders can speed things up and give the project the agility it lacks when you have to package everything together. For example, Baldur’s Gate had the end screen system, so BioWare just threw the list of screens and texts for each of them into the override folder to trigger them at specific times within the game.
“It can get overused and you get cases where people never update their game and just throw more and more and more into the override folder, which starts to drag down your speed,” Darrah noted. “But I do think it is something that is useful and I miss it in modern engines.”
Shipping the game without perfecting it, and why lack of experience might be a blessing
According to Darrah, Baldur’s Gate shipped in debug mode because there was a specific crash that happened only in the release versions of the game. So BioWare just tried to optimize the debug version as best as it could to finally ship the project.
The studio only figured out what the problem was when it was working on the sequel. “There was a piece of uninitialized memory that was being nulled out by the debug mode. That’s what was causing the crash,” Darrah explained.
Another issue was Microsoft Foundation Class (MFC) library, which was mostly used for debug purposes. It wasn’t a very efficient set of classes in the main AI loop that handles combat and runs on every single creature/character every single frame. For example, there was a separate check for Minsc, which resulted in frame rate drops — and BioWare only managed to fix it in Baldur’s Gate II.
The studio could spend much more time polishing the game, but the reality is that sometimes you as a developer just have to stop. This is another lesson that Darrah learned while making Baldur’s Gate: “Sometimes you just do what you need to do to ship.”
There is no such thing as a perfect game, there is no such thing as done. Sometimes you just need to get the game into the state where it can be shipped. You might come back later and see that you've made mistakes, and you might fix those. But if you look for perfection, you're never going to find it and you're never going to ship. Former executive producer at BioWare
Although the BioWare team at the time had little to no experience in game development, the lack of knowledge actually allowed them to make things that otherwise people would have considered impossible.
This game also came out at a time when CRPGs were largely considered a dead genre. Darrah thinks Baldur’s Gate and Diablo eventually became the two titles that returned computer RPGs into an important position within the games industry.
“I do think that willing to work on things that you don’t have experience with can be incredibly powerful and freeing in terms of allowing you to do things you wouldn’t otherwise do,” he said.
For more information about the development of Baldur’s Gate, including crunch, designing gameplay loops, and how Darrah learned to control his emotions as a leader, watch the full video below.