Add to these gloomy initial conditions the fact that the game from which our shared technology was derived slipped more than six months from the initially estimated date, that several developers quit during the project, that we didn't bring the full team up to strength until six months from the final ship date, and that we struggled with financial and business problems during the entire project. Having learned this, you might anticipate the worst. Strangely, System Shock 2 shipped within two months of its targeted date and will, I hope, be recognized as a sequel worthy of its esteemed ancestor.
Let's step back and trace the origins of the companies and the project. Looking Glass Studios is familiar to many as the creator of a series of highly innovative titles including the original System Shock, the Ultima Underworld series, the Flight Unlimited line and Terra Nova, among others. Three years ago, Ken Levine, Rob Fermier and I were developers at Looking Glass, struggling with the aftermath of Voyager, an aborted Star Trek: Voyager-licensed project. At the time, Looking Glass was in financial and creative disarray after a series of titles that, though critically acclaimed, had failed to meet sales expectations, the latest being Terra Nova and British Open Championship Golf. Frustration with the 18 months wasted on Voyager and a certain amount of hubris prompted three of us to strike out on our own to test our game design and management ideas. We wanted to nail down a rigorous and technologically feasible design, focus on game play, and force ourselves to make decisions rather than allow ourselves to stagnate in indecision. We wanted to run a project.
Concept sketch of the Psi-Reaver (left)
So we formed Irrational Games. After some misadventures with other development contracts, we unexpectedly found ourselves back at work with Looking Glass as a company rather than as employees. Initially, our brief was to prepare a prototype based on the still-in-development Thief technology recast as a science-fiction game. The scope of the project was very wide, but we quickly decided to follow in the footsteps of the original System Shock. Our initial design problem was how to construct such a game without the luxury of the actual System Shock license, since no publisher had yet been signed. Our initial prototype was developed by the three of us working with a series of contract artists. Our focus was on the core game-play elements: an object-rich world containing lots of interactive items, a story conveyed through recorded logs (not interaction with living NPCs), and game play realized through simple, reusable elements. This focus enticed Electronic Arts into signing on as our publisher early in 1998 - a fantastic break for us. It meant we could now utilize the real System Shock name and characters.
Immediately, we went back to our original design, threw away some of the crazier ideas that had been percolating and began integrating more of the rich System Shock universe into the title. That was the point at which the real development began.
It's the Engine, Stupid
Nothing impacted the development of System Shock 2 as much as the existing technology we got from Looking Glass. This fact cannot be classified monolithically under the heading of "what went wrong" or "what went right," however, because it went both wrong and right. The technology we used was the so-called "Dark Engine," which was essentially technology developed as a result of Looking Glass's Thief: The Dark Project (for more about its development, see "Looking Glass's Thief: The Dark Project," Postmortem, July 1999).
The Thief technology was developed with an eye toward reuse, and I will refer to it in this article as an "engine." However, it is not an engine in the same sense as Quake's, Unreal's, and LithTech. The Dark Engine was never delivered to the System Shock team as a finished piece of code, nor were we ever presented with a final set of APIs that the engine was to implement. Instead, we worked with the same code base as the Thief team for most of the project (excluding a brief window of time when we made a copy of the source code while the Thief team prepared to ship the game). Remarkably, it is still possible to compile a hybrid executable out of this tree that can play both Thief and System Shock 2 based on a variable in a configuration file.
This intimate sharing of code both helped and hurt us. We had direct access to the ongoing bug-fixes and engine enhancements flowing from the Thief team. It exposed us to bugs that the Thief team introduced, but it also gave us the ability to fix bugs and add new features to the engine. Because we had this power, we were sometimes expected to fix engine problems ourselves rather than turning them over to Looking Glass programmers, which wasn't always to our benefit. At times we longed for a finished and frozen engine with an unalterable API that was rigidly defined and implemented - the perfect black box. But being able to tamper with the engine allowed us to change it to support System Shock-specific features in ways that a general engine never could.