|
Features

Postmortem: Big Huge Games' Rise of Nations
What Went
Right
1.
Prototype method of game design. Part of the core vision for
Rise of Nations involved introducing gameplay innovations
inspired by our experience making turn-based games into the "classic"
real time strategy mix. We had 10 to 15 "wild" ideas about
what might take realtime strategy in new directions, but we knew
that only some, maybe only a small few, were going to work, and
we didn't know which ones. It was essential that we find out as
soon as possible which ideas were worth implementing, and we knew
from experience that the only sure way to accomplish this is to
throw the ideas into a playable prototype right from the beginning.
We
got a playable solo prototype running within the first month, and
a fully playable multiplayer version more than two years prior to
ship. We could throw new ideas in and see the results almost immediately:
some concepts needed a little tweaking to be fun, while others got
trashed almost as soon as they went in. The value of prototyping
is that core concepts end up being continuously refined over years,
while providing lots of time to balance the game.
As
part of the prototype approach to design, we make sure that everyone
in the company is playing the game on a regular basis. After each
daily play session, a member of the design team compiles everyone's
feedback and sends a summary to the rest of the designers. However,
we found that we had to be willing to wade through some resistance
to new features or gameplay tweaks. People would get very attached
to certain strategies for playing or even just conventions of RTS
games of which they were hesitant to let go.
2.
Choosing the right publisher. Over the years, the production
values and polish levels on RTS games have risen along with the
popularity of the genre. Given the scope of the competition we were
up against, a major concern for us was finding a publisher who would
be willing to invest the resources necessary in a new company to
produce a product that could go head-to-head with the "big
boys" - in essence, finding a publisher who shared our culture
and values. Our task was made somewhat easier by the fact that the
core team had already notched a couple of million-sellers with other
companies, but we still had difficulty in selling publishers on
our business model.
In
early 2000, when the company began, the industry was in the throes
of online mania and at the height of the Internet bubble. The "smart"
money was flowing to online game sites and massively multiplayer
titles. However, in our pitch meeting with Microsoft, we were impressed
with their approach: when we asked them which of our five proposals
they were most interested in, they just asked us which game we'd
be most interested in making. They seemed more interested in the
team than in the specific proposal, which in our experience is a
great approach to produce top-quality games.
Once
we signed on board with Microsoft, we were amazed at the level of
support they gave us. When we thought of Microsoft, we took their
marketing and sales capabilities for granted, but we were equally
impressed by the quality of their development support. Two key groups
really helped us polish our game: the play-balancers and the usability
labs. Throughout much of the last eight months of the project we
had four to six full-time play-testers assigned to the project whose
sole job was helping to balance the game. These guys were expert-level
RTS players who could smoke the designers after very little time
with the game. They helped us find and fix all kinds of broken strategies
and degenerate gameplay, and ensured a much more balanced game for
hardcore players right out of the gate.
The
usability labs took care of the other end of the spectrum, the casual
players who aren't as familiar with the ins and outs of RTS games.
Between the various tutorials, core gameplay, and the Conquer the
World single-player campaign, members of Big Huge took up five weeks
of the usability labs as we watched beginner-level players struggle
through basic game concepts. Our programmers were there in the labs,
coding changes on the fly, able to put a new version up for the
next subject. Usability's input resulted in hundreds of changes
to the game, making it more streamlined and easy to jump into. It's
hard to overstate the contribution both the play-test and usability
groups made to the final product.
3.
Disciplined hiring process. We started the company with a proven
method of developing strategy games through prototyping, and soon
afterward we had a publisher that shared our vision and complemented
our strengths. What we didn't have, and what would certainly be
the biggest single factor in achieving our goals, was a full team.
From
the start of the company, we took great care in selecting our staff,
adopting an interview system that we thought worked well for Ensemble
Studios. All candidates that make it through two rounds of phone
interviews are brought to Big Huge and interviewed by every person
on staff. After each interview the company meets and discusses the
candidate's strengths and weaknesses, at which point anyone can
veto a hire for any reason.
Although
this process has gotten more time-consuming and difficult as the
company has grown, the end result has been well worth the effort.
A major advantage of this system is ensuring that every new hire
can work and play well with others; if they can impress through
multiple interviews with a diverse set of people, then we can have
confidence that they will fit in from day one. Perhaps most importantly,
it ensures that none of our full-timers has the experience of being
introduced to someone they've never met before in their life as
". . . And here's who you'll be working with on such-and-such
for the next year."
4.
Developing powerful in-house tools. Our programmers worked from
the philosophy that taking a little extra time initially to develop
a good tool or algorithm pays off manyfold in time saved over the
course of the project, while improving the quality of the final
product. We also learned not to rely exclusively on one particular
tool but rather to use an array of tools to help narrow down a problem.
Following are some of the internal tools and techniques which paid
the biggest dividends for us:
The
section profiler. Our lead programmer, Jason Coleman, created
an interactive visual profiler, which helped us identify the correct
time segments to bring optimization resources to bear, particularly
when trying to identify intermittent spikes in performance that
would ordinarily be averaged out when running a profiler over many
game frames. Our programmers mark the beginnings and ends of key
sections of our code as belonging to one of about 20 color-coded
categories (such as render units, network, pathfinding, and so on).
Then, as the game runs, the programmers have access to an interactive
graphic window with slider bars for time and scale. The profile
chart changes color each time the program moves from one section
to another, and longer times in a particular section of course result
in longer blocks of a particular color. It is easy to spot spikes
in a particular section and then, using our "recorded game"
feature to repeat a game precisely, a more powerful profiling tool
such as VTune can be brought to bear on just that particular time
segment, thereby avoiding the "averaging out" effect.
The section profiler also helps us spot sections that are being
entered too often, even if not for very long.
The
parameter window. Graphics programmer Jason Bestimt created
an interactive "parameter window" module, which allows
our programmers to register as many variables as they'd like as
parameters, which can then be interactively controlled during the
game with their choice of slider bars, combo boxes, or edit boxes,
using a special pop-up console without causing performance degradation.
Being able, for instance, to pull up an interactive page that controls
all of the render states for any desired graphics element made for
great progress on special effects. For example, the nuclear blast
effect could be fine-tuned without having to repeatedly recompile
(or even rerun) the game: the programmer and artist just sat there
and pulled on the slider bars until it looked just right.
The
Const System for multiplayer. One of the great nightmares of
creating multiplayer strategy games is keeping the game world synchronized
across each of the player's machines. Game code and random number
generators must run in virtual lockstep across every machine in
the game, or the whole game world shatters and goes out of sync
- the multiplayer programmer's worst-case scenario which effectively
ends gameplay. Interaction with the outside world (such as the commands
players give to their units) must be carefully propagated to all
machines before they can be safely executed or even safely "seen"
by code that can write to the game state. The smallest unintentional
bypassing of this rule can result in disaster (such as a graphics
routine that accidentally uses the game-side random number generator,
or an input routine that directly affects the game world without
passing it through the network protocols).
To
avoid most of the potential catastrophes of this type we created
the "Const System," essentially a compiler-assisted firewall
between the game-world side of the code and the I/O (graphics and
interface) side of the code. There's game-side data (the simulation)
and non-game-side data (everything else). Game-side is allowed read-write
access to itself but write-only access to the non-game-side (rendering,
for example). Non-game-side is allowed read-write access to itself
but read-only (const) access to the game-side (user input isn't
allowed to directly modify the game-state).
The
real compiler tricks involved the fact that C++ doesn't have an
inherent notion of write-only (new standard, anyone?). Also, once
this was worked out, all remaining sync issues involved either the
occasional, foolhardy overriding of the system, or bugs such as
uninitialized data or memory overwrites. Two sets of macros (one
each for game and interface access) made this scheme mostly transparent
to programmers. The end result was that many of the potentially
thorniest multiplayer bugs became easy-to-find "compile errors"
instead of nearly impossible-to-find intermittent out-of-syncs.
5.
Great third-party productivity tools. One of the great life-changers
for our team was Xoreax's Incredibuild tool. Essentially it lets
us turn every machine on our company network into a vast compile
farm - the tool automatically makes use of free cycles on everyone's
machines to compile our game at jaw-dropping speeds. Even when Rise
of Nations was in gold release, our entire game could compile, including
all of the libraries, in just under two minutes. Optimizations added
an entire extra 15 seconds to the process. Linking the code, the
one step which must be performed entirely on the programmer's own
machine, took an extra 45 seconds. So, in other words, the final
release of Rise of Nations that we delivered to Microsoft
probably compiled and linked in around three minutes.
The
ability to compile (and recompile) the code so quickly led not only
to greatly speeded debugging and development, it also resulted in
much cleaner code: programmers no longer feared changing header
files with the half-hour-plus recompile formerly associated with
such an action, so they no longer felt tempted to resort to messy
workarounds and hacks just to avoid a full recompile. An amusing
side-note is that programmers who had structured their lives around
using long compiles to grab drinks, chat, and play chess suddenly
had to rethink their whole day.
Other
tools well-loved by our programming team include the Visual Assist
and Workspace Whiz add-ons to Microsoft's Developer Studio. These
two tools add a ton of little improvements to the development environment
that end up completely changing the way programmers use Dev Studio.
Features include toggling directly from .CPP to .H files, opening
any file in your workspace (without needing to provide a path),
and automatic grammar correction. Our programmers always comment
about how sad they are when they have to debug on a machine without
these tools installed.
From
the standpoint of task organization, the lifesaver for us was Alexsys'
Team software. This system replaced our "Post-It note"
method of project management with an extremely configurable setup
and easy access to tasks. One of the greatest features of Team is
its capacity to send e-mail alerts whenever a task is created or
modified. As a company we use e-mail a lot, and having a project
management system that essentially forced everyone to stay current
with tasks was invaluable.
______________________________________________________
|