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
@ 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."
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.
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."
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."
Howard Wen is a freelance writer who has contributed frequently to O'Reilly Network and written for Salon.com, Playboy.com, and Wired, among others.
Return to ONLamp.com.
Copyright © 2009 O'Reilly Media, Inc.