Falcon's Eye: The Making-Over of Nethack

Nethack is one of the oldest
and most acclaimed games in the history of open source software. It's
also, quite frankly, dull looking. This single-player, Dungeons &
Dragons-inspired game presents immersive dungeons, though it
represents walls, monsters, items, and everything else with simple
ASCII characters. Your player character, for example, is
@.

Enthusiasts of NetHack with programming skills have devised various
graphical overlays to enhance the game's look. These "windowing
interfaces" essentially replace each ASCII characters with a bitmapped
image. Your @ becomes a graphic of a warrior or wizard,
and the various keyboard symbols that comprise a map are replaced with
colorful tiles to form what actually looks like a dungeon layout. Most
of these interfaces perform a make-over of NetHack with flat, 2D graphics, but some
also present a pseudo-3d look.

Falcon's Eye
aims for a much more sophisticated transformation, visually and
otherwise. It overlays the ASCII characters with detailed graphics
presented in an isometric 3D perspective -- accompanied with
animation, sound effects, and music -- for the dungeons, player
characters, creatures, and items. This particular windowing interface
also adds mouse support, tooltip information for creatures and items,
shortcuts for several keyboard commands, and many customization
options. Falcon's Eye coats NetHack with so much eye candy that it
makes the visually minimalist game look, sound, and play almost like a
commercially produced role-playing title.

NetHack's steep learning curve and crude non-graphics turn away
many users. That motivated Jaakko Peltonen, the 25-year-old from
Finland who created Falcon's Eye. He works as a researcher of neural
networks at Helsinki University of Technology. "Text-based games may
not seem so appealing to computer gamers nowadays. On the other hand,
I knew that NetHack's game content was varied and interesting," says
Peltonen. "It seemed natural to upgrade the graphics, in order to
better appreciate the game play."

Working with NetHack's Friendliness Toward User Interfaces

Peltonen originally developed a self-standing engine for displaying
isometric graphics, then grafted it onto NetHack so he could
incorporate his other creative skills -- drawing and sound
composing. Falcon's Eye has, thus far, been solely his work in terms
of its design, artwork, and programming. However, many people have
sent him suggestions, bug reports and fixes. Others submit art and
sound effects, which are usually added to the latest releases.

While there are several patches
available which alter NetHack's game play, Falcon's Eye itself doesn't
provide such changes. It does add some helpful features, like a
path-finding "autopilot" algorithm to help the player character
navigate long distances, but the windowing interface remains strictly
compatible with the official releases of NetHack. "If Falcon's Eye
were to have changes [to NetHack], they might be redundant or
contradict other modifications. NetHack has been developed over many
years, so many people prefer the game play in its current form," says
Peltonen.

He was pleasantly surprised to discover how well NetHack's code had
been arranged to accommodate different user interfaces. NetHack
assumes very little about the user interface: the game tells which
dungeon maps and messages to display and what to ask from the player,
but leaves the implementation details to the interface. "This
versatility helped a lot to create Falcon's Eye," says Peltonen. "If
NetHack had been tied to a character-based interface, I might have
needed to work around it a lot. Thankfully, this was not the
case."

Like NetHack itself, Falcon's Eye is programmed in C, except for a
few system-dependent functions that require C++. It uses various
graphics, sound and input libraries: SDL
for the Linux and BeOS versions and DirectX for Windows. Aside from
linking with these libraries, the code of Falcon's Eye is
original.

One challenge in designing Falcon's Eye was making its code
"system-independent" as much as possible, so it could be used under
different operating systems. "[Achieving] this is often difficult with
game programs, since they use graphics and sound extensively," says
Peltonen. "As a result, Falcon's Eye has 'wrapper functions' for all
the graphics, sound, input tasks it needs. These then call DirectX,
SDL or whatever is needed."

Peltonen managed to narrow down such system-dependent code to a few
files. To port his NetHack GUI to another operating system, you only
need to create new versions of these files, instead of having to
rewrite everything.

Implementing the mouse interface was another programming
challenge. The NetHack game control scheme is oriented toward the
keyboard, so Falcon's Eye's code has to incorporate work-arounds to
make mouse inputting work. "If you right-click an in-game creature or
item, Falcon's Eye opens a context menu with possible actions, such as
'Open' or 'Kick'. NetHack doesn't have built-in support for such
menus, so Falcon's Eye creates them on its own, and translates your
choices to keyboard commands," explains Peltonen.

It's Another Way to Look at NetHack

In future versions, Peltonen plans to add more options for
user-customization of Falcon's Eye. The current release allows you to
configure the keyboard commands and add sound effects without the need
of programming skills. But he wants to make it so players can also
create their own graphics for the game.

Some have reported difficulty compiling and installing Falcon's
Eye, which its creator admits should be a simpler process. This is
because NetHack has several options available for its installation,
which, combined with Falcon's Eye's own, can make getting the game up
and running more complicated than it ought to be. "The default
settings are often enough, but I still hope to make the installation
and customization easier in the future," says Peltonen.

As dazzling as his Falcon's Eye is, he doesn't mean for it to
replace the other, more established NetHack windowing
interfaces. Instead, he sees it as another novel method for players to
see and interact with NetHack. Though he's not working on such a
thing, Peltonen envisions that an application or patch for NetHack
which would enable the NetHacker to switch from Falcon's Eye to
another NetHack GUI would be beneficial to the NetHack community.

"Ideally, one could switch between these various interfaces at will
during the game, much like some computer programs have changeable
'skins,'" says Peltonen. "That way, players who are accustomed to one
interface could still view how a particular game situation would look
in the other interfaces. Currently, this isn't possible, but
hopefully it will be in the future."

Getting Away from the Heart of NetHack?

Falcon's Eye doesn't just show a different "view" of
NetHack. Though the game play itself is technically the same, you have
to keep reminding yourself of this as you play because it simply
"feels" different from NetHack. This raises the question of how much
the candy-coating alters a player's perception of the game. NetHack's
ardent fans love it for focusing squarely on game play. In a way,
it's a reduction of computer gaming to its basic elements, right down
to the ASCII symbols. With GUIs like Falcon's Eye, how much becomes
too much, detracting from the heart of NetHack?

"One could in theory create a full 3D interface with a
rotating/zooming view and so on," says Peltonen. "Would such additions
improve or harm game play? The overall experience is what matters. I
believe the graphical overlays are a useful middle ground, each with
different amounts of changes. All [of them] leave room for the
player's imagination as well."