Penguin
Diff: HowToLinuxGamersHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToLinuxGamersHOWTO.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Tuesday, October 26, 2004 10:24:26 am by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:06:58 am by perry Revert
@@ -1,2584 +1 @@
-The Linux Gamers' HOWTO  
-!!!The Linux Gamers' HOWTO  
-!Peter Jay Salzman  
-  
- p@dirac.org  
-  
-  
-  
-  
-Copyright (c) 2001 by Peter Jay Salzman  
-  
-  
-  
-v..9.13, 2002-05-08  
-  
-  
-  
-__Abstract__  
-  
-  
-  
- The same questions get asked repeatedly on Linux related mailing lists and news  
-groups. Many of them arise because people don't know as much as they should about how  
-things "work" on Linux, at least, as far as games go. Gaming can be a tough pursuit; it  
-requires knowledge from an incredibly vast range of topics from compilers to libraries to  
-system administration to networking to XFree86 administration ... you get the picture.  
-Every aspect of your computer plays a role in gaming. It's a demanding topic, but this fact  
-is shadowed by the primary goal of gaming: to have fun and blow off some steam.  
-  
-  
-  
- This document is a stepping stone to get the most common problems resolved and to  
-give people the knowledge to begin thinking intelligently about what is going on with their  
-games. Just as with anything else on Linux, you need to know a little more about what's  
-going on behind the scenes with your system to be able to keep your games healthy or to  
-diagnose and fix them when they're not.  
-  
-----; __Table of Contents__; 1. Administra: ; 1.1. Authorship and Copyright; 1.2. Acknowledgements; 1.3. Latest Version and Translations; 2. Definitions: Types Of Games: ; 2.1. Arcade style; 2.2. Card, logic and board games; 2.3. Text Adventure (aka Interactive Fiction); 2.4. Graphical Adventures; 2.5. Simulation (aka Sims); 2.6. Strategy (aka Strats); 2.7. First Person Shooter (aka FPS); 2.8. Side Scrollers; 2.9. Third Person Shooters; 2.10. Role Playing Game (aka RPG); 3. Libraries: ; 3.1. What is Glide2?; 3.2. What is Glide3?; 3.3. What is OpenGL?; 3.4. What is Mesa?; 3.5. What is DRI?; 3.6. What is GLX?; 3.7. What is Utah GLX?; 3.8. What is xlib?; 3.9. What is SDL (Simple !DirectMedia Layer)?; 3.10. What is GGI?; 3.11. What is SVGAlib? Frame buffer? Console?; 3.12. What is OpenAL?; 3.13. What is DirectX?; 4. Definitions: Video Card and 3D Terminology: ; 4.1. Textures; 4.2. T8L: Transform and Lighting; 4.3. AA: Anti Aliasing; 4.4. FSAA: Full Screen Anti-Aliasing; 4.5. Mip Mapping; 4.6. Texture Filtering; 4.7. Point Sampling Texture Filtering; 4.8. Bilinear Texture Filtering; 4.9. Trilinear Texture Filtering; 4.10. Anisotropic Texture Filtering; 4.11. Z Buffering; 5. XFree86 and You: ; 5.1. Getting information about your X system; 6. Various Topics: ; 6.1. Memory Type Register Ranges; 6.2. Milking performance from your system for all it's worth; 6.3. About libraries on Linux; 7. When Bad Things Happen To Good People: ; 7.1. RTFM!; 7.2. Look For Updates and Patches; 7.3. Newsgroups; 7.4. Google Group Search; 7.5. Debugging: call traces and core files; 7.6. Saved Games; 7.7. What to do when a file or library isn't being found  
-(better living through strace); 7.8. Hosed consoles; 8. Hardware: ; 8.1. Which video card is the best?; 8.2. Which sound card is best?; 9. Miscellaneous Problems: ; 9.1. Hardware Acceleration Problems; 9.2. Hardware acceleration works only for the root user; 9.3. Why isn't my sound working?; 10. Emulation and Virtual Machines: ; 10.1. Apple 8-bit; 10.2. DOS; 10.3. Win16; 10.4. Win32; 11. Interpreters: ; 11.1. SCUMM Engine (!LucasArts); 11.2. AGI: Adventure Gaming Interface (Sierra); 11.3. SCI: SCript Interpreter or Sierra Creative Interpreter (Sierra); 11.4. Infocom Adventures (Infocom, Activision); 11.5. Scott Adams Adventures (Adventure International); 11.6. Ultima 7 (Origin, Electronic Arts); 12. Websites: ; 12.1. Meta gaming websites; 12.2. Commercial Linux Game Websites; 12.3. Other Websites Of Note  
-!!!1. Administra  
-  
- If you have ideas, corrections or questions relating to this HOWTO, please email me. By  
-receiving feedback on this howto (even if I don't have the time to answer), you make me feel  
-like I'm doing something useful. In turn, it motivates me to write more and add to this  
-document. You can reach me at `p@dirac.orgb. My web page is www.dirac.org/p and my Linux pages are at www.dirac.org/linux. Please do send comments and suggestions for this  
-howto. Even if I don't take your suggestions, your input is graciously received.  
-  
-  
-  
- I assume a working knowledge of Linux, so I use some topics like runlevels and modules  
-without defining them. If there are enough questions (or even protests!) I'll add more basic  
-information to this document.  
-  
-----  
-!!1.1. Authorship and Copyright  
-  
- This document is copyright (c) 2001 Peter Jay Salzman, `p@dirac.orgb.  
-Permission is granted to copy, distribute and/or modify this document under the terms of  
-the GNU Free Documentation License, Version 1.1, except for the provisions I list in the  
-next paragraph. I hate HOWTO's that include the license; it's a tree killer. You can  
-read the GNU FDL at www.gnu.org/copyleft/fdl.html.  
-  
-  
-  
-  
- If you want to create a derivative work or publish this HOWTO for commercial  
-purposes, contact me first. This will give me a chance to give you the most recent  
-version. I'd also appreciate either a copy of whatever it is you're doing or a  
-spinach, garlic, mushroom, feta cheese and artichoke heart pizza.  
-  
-----  
-!!1.2. Acknowledgements  
-  
- Thanks to Mike Phillips who commented extensively on the howto. Thanks to Dmitry  
-Samoyloff, `dsamoyloff@yandex.rub, for translating this document into Russian.  
-It blew my mind when he told me that he was translating my words to Russian.  
-  
-----  
-!!1.3. Latest Version and Translations  
-  
-The latest version can be found at cvs.sourceforge.net/cgi-bin/viewcvs.cgi/lgh/LG-HOWTO, but this is my own  
-personal working copy. You can get the most recent polished version (whatever that  
-means!) from www.linuxdoc.org and www.dirac.org/linux/writing.  
-  
-  
-  
- Dmitry Samoyloff, `dsamoyloff@mail.rub, is the maintainer of the  
-Russian translation of this HOWTO. The most recent version can be found at linuxgames.hut.ru/data/docs/HOWTO/LG-HOWTO-ru.html.  
-  
-----  
-!!!2. Definitions: Types Of Games  
-  
- Not everyone knows the different types of games that are out there,  
-so in an effort to form a common language that we can all use, I'll run  
-through each game type and provide a very brief history.  
-  
-----  
-!!2.1. Arcade style  
-  
- Although arcade games had their heydey in the 80's, they are nonetheless very  
-popular. Nothing will ever replace walking into a dark, crowded and noisy arcade gallery,  
-popping a quarter into your favorite machine and playing an old fashioned game of Space  
-Invaders. Arcade style games attempt to simulate the arcade games themselves. There is  
-such a vast number of these things that it's nearly impossible to enumerate them all, but  
-they include clones of Asteroids, Space Invaders, Pac-Man, Missile Command and Galaxian.  
-  
-  
-----  
-!!2.2. Card, logic and board games  
-  
- Computer based card games simulate a card game (poker, solitaire, etc); the type of  
-game you'd play on a table top with friends, but the program simulates your opponent(s).  
-  
-  
-  
-  
- Logic games usually simulate some well known logic puzzle like Master Mind or the  
-game where you have put sliding numbered tiles in order inside a box.  
-  
-  
-  
- Computer based board games simulate some kind of board game you'd play on a table  
-top with friends, like monopoly, Mille Bourne, chess or checkers. The program simulates  
-your opponent.  
-  
-----  
-!!2.3. Text Adventure (aka Interactive Fiction)  
-  
- Once upon a time, when Apple ] [[, Commodore, and Atari ruled the world, text  
-adventures were the game of choice of `intelligent folk'. They were self contained  
-executables on disks (even casettes). These days we're a bit more sophisticated than  
-that. Now there's usually a data file and an interpreter. The interpreter reads data  
-files and provides the gaming interface. The data file is the actual game, and is often  
-implemented by a scripting language. So for example, you you could have the two Scott  
-Adams datafiles "The Count.dat" and "Voodoo Castle.dat". To  
-actually play the games, you'd invoke the scottfree interpreter with the name of the  
-datafile you wish to play.  
-  
-  
-  
- The first adventure game was Adventure (actually "ADVENT",  
-written on a PDP-1 in 1972). You can play adventure yourself (actually, a  
-descendent); it comes with "bsd games" on most Linux distros.  
-  
-  
-  
- They became popularized by Scott Adams, who is widely considered to be the father  
-of text adventuring. You can play Scott Adams adventures using  
-scottfree, the game file interpreter written by Alan Cox, and  
-the old data files, which are now shareware and can be download from Scott Adams' website.  
-  
-  
-  
-  
- Text adventures climaxed in the 80's with Infocom. There are many Infocom  
-interpreters available for Linux; the most popular one being  
-frotz. You still need the data files, and these are all still  
-owned and considered commercial property by Activision.  
-  
-  
-  
- As computer graphics became easier and more powerful, text adventures gave  
-rise to graphic adventures. The death of interactive fiction more or less coincided  
-with the bankruptcy of Infocom.  
-  
-----  
-!!2.4. Graphical Adventures  
-  
- Graphical adventures are, at heart, text adventures on steroids. The degree to  
-which they use graphics varies widely. Back in the 80's, they were little more than text  
-adventures which showed a screen of static graphics. When you picked up an item, the  
-background would be redrawn without the item appearing. The canonical example would be  
-the so-called `Hi-Res Adventures' like The Wizard And The Princess. Later on, the  
-sophisticated graphical adventures had your character roaming around the screen, and you  
-could even use a mouse, but the interface remained purely text.  
-  
-  
-  
- Next there are the `point and click adventures' which basically have no text  
-interface at all, and often have dynamic graphics, like a cat wandering around the room  
-while you're deciding what to do next. In these games, you point at an object (say, a  
-book) and can choose from a pull-down list of functions. Kind of like object oriented  
-adventuring. :) There aren't many graphical adventures written natively for Linux. The  
-only one I can think of is Hopkins FBI (which happens to be my favorite game for Linux).  
-  
-  
-----  
-!!2.5. Simulation (aka Sims)  
-  
- Simulations strive to immerse the player behind the controls of something  
-they normally wouldn't have access to. This could be something real like a fighter  
-jet or something imaginary like a mechanized warrior combat unit. In either case,  
-sims strive for realism.  
-  
-  
-  
- Some sims have little or no strategy. They simply put you in a cockpit to give you  
-the thrill of piloting a plane. Some of them are considerably more complex, and there's  
-often a fine line between sims and strats (see the next section). A good example would be  
-Heavy Gear III or Flight Gear. These days sims and strats are nearly indestinguishable,  
-but a long time ago, sims were all real time while strats were all turn based. This is  
-somewhat awkward for modern day use, since a game like Warcraft which everyone knows as a  
-strat, would be a sim by definition.  
-  
-----  
-!!2.6. Strategy (aka Strats)  
-  
- Strategy games have their roots in old Avalon type board games like Panzer  
-Leader and old war strategy games published by SSI. Generally, they simulate some  
-kind of scenario. The scenario can be peaceful, like running a successful city or  
-illegal drug selling operation (!SimCity or !DrugWars). The scenario can also be  
-total all-out war strategy game like Myth II. The types of games usually take a long  
-time to complete and require a lot of brainpower.  
-  
-  
-  
- Strats can be further divided into two classes: real time and turn based.  
-Real time strats are based on the concept of you-snooze-you-lose. For example,  
-you're managing a city and a fire erupts somewhere. The more time it takes for you  
-mobilize the fire fighters, the more damage the fire does. Turn based strats are  
-more like chess---the computer takes a turn and then the player takes a turn.  
-  
-  
-----  
-!!2.7. First Person Shooter (aka FPS)  
-  
- What light through yonder window breaks? It must be the flash of the double  
-barreled shotgun! We have a long and twisted history with FPS games which started when id  
-Games released the code for Doom. The code base has forked and merged numerous times.  
-Other previously closed engines opened up, many engines are playable via emulators, many  
-commercial FPS games were released for Linux and there are quite a number of FPS engines  
-which started life as open source projects. Although you may not be able to play your  
-''favorite'' FPS under Linux (Half-Life plays great under winex) Linux  
-definitely has no deficiency here!  
-  
-  
-  
- First person shooters are characterized by two things. First, you pretty much blow  
-up everything you see. Second, the action takes place in first person. That is, look  
-through the eyes of the character who's doing all the shooting. You may even see your  
-hands or weapon at the bottom of the screen. Some are set in fantasy (Hexen), others are  
-science fiction (Quake II), and some are set in the present day `real world' (Soldier Of  
-Fortune).  
-  
-  
-  
- Just like text adventures, FPS fit the engine/datafile format. The engine refers to  
-the actual game itself (Doom, Quake, Heretic2) and plays out the maps and bad guys  
-outlined by the datafile (doom2.wad, pak0.pak, etc). Many FPS games allow people to write  
-their own non-commercial datafile. There are hundreds, even thousands of non-commercial  
-Doom datafiles that you can download for free off the net. Often, companies discard  
-their engines and put them into the open source community so we can hack and improve them.  
-However, the original data files are kept proprietary. To this day, you still have to  
-purchase doom.wad.  
-  
-----  
-!!2.8. Side Scrollers  
-  
- Side scrollers are similar to FPS but you view your character as a 2D figure who  
-runs around various screens shooting at things or performing tasks. Examples would be  
-Abuse for Linux and the original Duke Nukem. They don't necessarily have to be violent,  
-like xscavenger, a clone of the old 8-bit game Lode Runner.  
-  
-  
-----  
-!!2.9. Third Person Shooters  
-  
- Similar to FPS, but you view your character in third person and in 3D. On modern  
-third person shooters you can usually do some really kick-butt maneuvers like Jackie Chan  
-style back flips and side rolls. The canonical example would be Tomb Raider. On the  
-Linux platform, we have Heretic 2 and Heavy Metal FAKK.  
-  
-----  
-!!2.10. Role Playing Game (aka RPG)  
-  
- Anyone who has played games like Dungeons 8 Dragons or Call of Cthulhu knows  
-exactly what an RPG is. You play a character, sometimes more than one, characterized by  
-traits (eg strength, dexterity), skills (eg explosives, basket weaving, mechanics) and  
-properties (levels, cash). As you play, the character becomes more powerful and the game  
-adjusts itself accordingly, so instead of fighting orcs, at high levels you start fighting  
-black dragons. The rewards increase correspondingly. At low levels you might get some  
-gold pieces as a reward for winning a battle. At high levels, you might get a magic sword  
-or a kick-butt assault rifle.  
-  
-  
-  
- RPG's generally have a quest with a well defined ending. In nethack you need  
-to retrieve the amulet of Yendor for your god. In Ultima II, you destroy the evil  
-sorceress Minax. At some point, your character becomes powerful enough that you can  
-`go for it' and try to complete the quest.  
-  
-  
-  
- The canonical RPG on Linux is Rogue (the ncurses library can be traced back to the  
-screen handling routines that were written for Rogue!) and its infinite variants like  
-Zangband and Nethack (which has infinite variants itself). Some of them are quite  
-complicated and are great feats of programming. There seems to be a deficiency of  
-commercial RPGs on Linux. If you don't count all the rogue variants, there also seems to  
-deficiency of open source RPGs as well.  
-  
-  
-  
- While the insanely popular Ultima series, written by Richard Garriot (aka Lord  
-British) for Origin, was not the first RPG, it popularized and propelled the RPG genre  
-into mainstream. Ultima I was released in 1987 and was the game that launched 9  
-(depending on how you want to count them) very popular sequels, finishing with Ultima IX:  
-Ascension. You can play Ultima VII under Linux with Exult.  
-  
-----  
-!!!3. Libraries  
-  
- We'll run through the different gaming libraries you'll see under Linux.  
-  
-----  
-!!3.1. What is Glide2?  
-  
- Glide2 is an low level graphics API plus driver that accesses 3D hardware accelerated  
-functions on 3dfx's Voodoo I, II and III cards, under XFree86 3.*.  
-  
-  
-  
- A program can ONLY use the special hardware accelerated features of these cards by  
-using the Glide2 library in one of two ways:  
-  
-  
-  
-  
-  
-  
-*  
-  
-directly: written natively using Glide2 (Myth II, Descent III)  
-  
-  
-*  
-*  
-  
-indirectly: uses Mesa built with a Glide2 backend to simulate OpenGL  
-(Rune, Deux Ex, Unreal Tournament)  
-  
-  
-*  
-  
- 3dfx opened up the specifications and source code to the open source community.  
-This allowed Daryll Strauss to port Glide2 to Linux which enabled XFree86 3.* users to use  
-Voodoo I, II and III cards under Linux.  
-  
-  
-  
- Since Glide2 accesses the video board directly, applications that use Glide2 will  
-either need to be run by root. A way around this was to create the kernel 3dfx module.  
-This module (and the corresponding device /dev/3dfx) allows Glide2 hardware acceleration for  
-non-root users of non-setuid graphics applications.  
-  
-  
-  
- Unfortunately, Glide2 is also a dead issue. It's only used for Voodoo I, II, III  
-boards (which are becoming outdated), under XFree86 3.* (most people use XFree86 4.*).  
-And since 3dfx is now a defunct company, it's a sure bet that no more work will be done on  
-Glide2 and no more games will be written using Glide2.  
-  
-----  
-!!3.2. What is Glide3?  
-  
- Glide3 is not a direct API used to program a game with, unlike Glide2. It exists  
-only to support DRI on Voodoo III, IV and V boards under XFree86 4.*. None of the games  
-which use Glide2 will work with Glide3. This shouldn't be a surprise since Glide2 and Glide  
-3 support different video boards and different versions of XFree86. The only video card  
-that can use both Glide2 (under XFree86 3.*) and Glide3 (under XFree86 4.*) is the Voodoo  
-III. It's reported that a Voodoo III using Glide2 will outperform a Voodoo III using  
-Glide3.  
-  
-  
-  
- When you use a Voodoo III, IV or V under XFree86 4.*, you want to use a version of  
-Mesa (see Section 3.4) which was compiled to use Glide3 as a backend to ensure  
-hardware accelerated OpenGL on your system.  
-  
-----  
-!!3.3. What is OpenGL?  
-  
- OpenGL is a high level graphics programming API originally developed by SGI, and it  
-became an industry standard for 2D and 3D graphics programming. It is defined and  
-maintained by the Architectural Revision Board (ARB), an organization whose include SGI,  
-IBM, DEC, and Microsoft. OpenGL provides a powerful, complete and generic feature set for  
-2D and 3D graphics operations.  
-  
-  
-  
- There are 3 canonical parts to OpenGL:  
-  
-  
-  
-  
-  
-  
-*  
-  
- GL: The OpenGL core calls  
-  
-  
-*  
-*  
-  
- GLU: The utility calls  
-  
-  
-*  
-*  
-  
- GLUT: Tools for system independent window event handling (mouse event  
-handling, keyboard events, etc.).  
-  
-  
-*  
-  
- OpenGL is not only an API, it's also an implementation, written by SGI. The  
-implementation tries to use hardware acceleration for various graphics operations whenever  
-available, which depends on what videocard you have in you computer. If hardware  
-acceleration is not possible for a specific task, OpenGL falls back on software rendering.  
-This means that when you get OpenGL from SGI, if you want any kind of hardware acceleration  
-at all, it must be OpenGL written and compiled specifically for some graphics card.  
-Otherwise, all you'll get is software rendering. The same thing is true for OpenGL clones,  
-like Mesa.  
-  
-  
-  
- OpenGL is the open source equivalent to Direct3D, a component of DirectX (Section 3.13). The important difference being that since OpenGL is open (and DirectX is  
-closed), games written in OpenGL are much easier to port to Linux while games written using  
-DirectX at this point in time are impossible to port to Linux.  
-  
-----  
-!!3.4. What is Mesa?  
-  
- Mesa `www.mesa3d.orgb is a free  
-implementation of the OpenGL API, designed and written by Brian Paul. While it's not  
-officially certified (that would take more money than an open source project has), it's an  
-almost fully compliant OpenGL implementation conforming to the ARB specifications. It's  
-reported that Mesa is even faster than SGI's own OpenGL implementation.  
-  
-  
-  
- Just like OpenGL, Mesa makes use of hardware acceleration whenever possible. When a  
-particular graphics task isn't able to be hardware accelerated by the video card, it's  
-software rendered; the task is done by your computer's CPU instead. This means that there  
-are different builds of Mesa depending on what kind of video card you have. Each build uses  
-a different library as a backend renderer. For example, if you have a Voodoo I, II or III  
-card under XFree86 3.*, you'd use mesa+glide2 (written by David Bucciarelli) which is the  
-Mesa implementation of OpenGL that uses Glide2 as a backend to render for graphical  
-operations.  
-  
-----  
-!!3.5. What is DRI?  
-  
- Graphics rendering has 3 players: the client application (like Quake 3), the X server  
-and the hardware (the graphics card). Previously, client applications were prohibited from  
-writing directly to hardware, and there was a good reason for this. A program that is  
-allowed to directly write to hardware can crash the system in any number of ways. Rather  
-than trusting programmers to write totally bug free, cooperative programs that access  
-hardware, Linux simply disallowed it. However, that changed with X 4.* with DRI (Direct  
-Rendering Infrastructure `www.dri.sourceforge.netb. DRI allows X clients to write 3D  
-rendering information directly to the video card in a safe and cooperative manner.  
-  
-  
-  
- DRI gets the X server out of the way so the 3D driver (Mesa or OpenGL) can talk  
-directly to the hardware. This speeds things up. The 3D rendering information doesn't even  
-have to be hardware accelerated. On a technical note, this has a number of virtues.  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
- Vertex data doesn't have to be encoded/decoded via GLX.  
-  
-  
-*  
-*  
-  
- Graphics data doesn't have to be sent over a socket to the X server.  
-  
-  
-  
-*  
-*  
-  
- On single processor machines the CPU doesn't have to change context  
-between X and its client to render the graphics.  
-  
-  
-*----  
-!!3.6. What is GLX?  
-  
- GLX is the X extension used by OpenGL programs, it is the glue between the platform  
-independent OpenGL and platform dependent X.  
-  
-----  
-!!3.7. What is Utah GLX?  
-  
- Utah-GLX is the precursor to DRI. It makes some different design decisions,  
-regarding separation of data and methods of accessing the video card. (For instance, it  
-relies on root privileges rather than creating the kernel infrastructure necessary for  
-secure access). It provides support for (at this time) a couple cards which are not  
-well-supported in DRI. Particularly, the ATI Rage Pro family, S3 Virge (although anyone  
-using this for gaming is, well, nuts), and an open source TNT/TNT2 driver (which is very  
-incomplete). The TNT/TNT2 driver is based on reverse-engineering of the obfuscated source  
-code release of the X 3.3 drivers by nVidia. However, they're really incomplete, and  
-effectively, unusable.  
-  
-  
-  
- As a side note, until the G400 stuff is *really* fixed in DRI, it's also the better  
-G400 support-but hopefully that will not be an issue by the time this HOWTO is  
-published.  
-  
-----  
-!!3.8. What is xlib?  
-  
- Every once in awhile you'll see some sicko (said with respect) write a game in xlib.  
-It is a set of C libraries which comprise the lowest level programming interface for  
-XFree86. Any graphics programming in X ultimately makes use of the xlib library.  
-  
-  
-  
- It's not an understatement to say that xlib is arcane and complicated. A program  
-that simply connects to an X server, puts up a window and does nothing else could be a  
-complicated 40 line program with arcane and very long named functions. Because of this,  
-there are lots of libraries which hide the details of xlib programming. Some of these  
-libraries focus on drawing in windows (like SDL). Other libraries are more concerned with  
-widgets within windows (eg pulldown menus, radio buttons and text boxes); these types of  
-libraries are called widget sets. Gtk is the canonical widget set on Linux, but there are  
-many others like fltk (a small C++ widget set), Xaw, Qt (the widget set of KDE), and Motif  
-(the widget set used by Netscape). Motif used to be king of the Unix world, but was very  
-expensive to license. The Open Group opened up Motif's license for non-commercial use, but  
-it was too little too late. People now use Lesstif, a Motif clone.  
-  
-----  
-!!3.9. What is SDL (Simple !DirectMedia Layer)?  
-  
- SDL `www.libsdl.orgb is a library by Loki  
-Software's Sam Lantiga (graduate of UCD, yeah!). It's actually a meta-library, meaning that  
-not only is it a graphics library which hides the details of xlib programming, it provides  
-an easy interface for sound, music and event handling. It's LGPL'd and provides joystick  
-and OpenGL support as well. The 40 line arcane program I mentioned in the xlib section can  
-easily be written in 6 lines of straightforward code using SDL.  
-  
-  
-  
- The most striking part of SDL is that it's a cross platform library. Except for a  
-few details about header files and compiling, a program written in SDL will compile under  
-Linux, MS Windows, BeOS, MacOS, MacOS X, Solaris, IRIX, FreeBSD, QNX and OSF. There are SDL  
-extentions written by various people to do things like handle any graphics format you care  
-to mention, play mpegs, display truetype fonts, sprite handling and just about everything  
-under the sun. SDL is an example of what all graphics libraries should strive for.  
-  
-  
-  
-  
- Sam had an ulterior motive for writing such a cool library. He's was the lead  
-programmer for Loki Software, which used SDL in all of its games except for Quake3.  
-  
-----  
-!!3.10. What is GGI?  
-  
- GGI `www.ggi-project.orgb is a project which  
-aims to implement the graphics abstraction layer in lower level code, putting graphics hardware  
-support in one place, bringing higher stability and portability to graphics applications and  
-replacing SVGAlib, fb, and X servers dealing directly with hardware. Judging from their  
-screenshots, this is quite a powerful library.  
-  
-  
-  
- GGI was supposed to have a kernel module inserted into the Linux source code but  
-Linus thought their code wasn't ready for production kernels. There was brief talk about  
-making *BSD their main platform. I'm not sure if they ever went through with this.  
-  
-----  
-!!3.11. What is SVGAlib? Frame buffer? Console?  
-  
- The console is the dark non-graphical screen you look at when your computer first  
-boots up (and you don't have have xdm or  
-gdm running). This is opposed to the X environment which has all  
-sorts of GUI things like xterms. It's a common misconception that X means graphics and  
-console means no graphics. There are certainly graphics on the console-we will  
-discuss the two most common ways to achieve this.  
-  
-  
-  
- SVGAlib is a graphics library that lets you draw graphics on the the console. There  
-are many graphical applications and games that use SVGAlib like  
-zgv (a console graphical image viewer),  
-prboom and hhexen. I happen to be a  
-fan of this library and of graphical console games in general; they are extremely fast,  
-fullscreen and compelling. There are three downsides to SVGAlib. First, SVGAlib  
-executables need to be run by root or be setuid root, however, the library releases root  
-status immediately after the executable begins to run. Secondly, SVGAlib is video card  
-dependent-if your video card isn't supported by SVGAlib, you're out of luck. Third,  
-SVGAlib is Linux only. Games written in SVGAlib will only work on Linux.  
-  
-  
-  
- Frame buffers are consoles implemented by a graphics mode rather than a BIOS text  
-mode. Why would you want to simulate text mode from a graphical environment? This allows  
-us to run graphical things in console, like allowing us to choose what font we want the  
-console to display (which is normally determined by BIOS). Imagine having a console font of  
-Comic Sans MS? There's a good Frame Buffer howto available from LDP.  
-  
-----  
-!!3.12. What is OpenAL?  
-  
- OpenAL `www.openal.orgb aims to be for  
-sound what OpenGL is for graphics. Jointly developed by Loki Software and Creative Labs, it  
-sets out to be a vendor neutral and cross platform API for audio. It is licensed LGPL and  
-the specs can be had for free from the OpenAL website. OpenAL is fully functional, but now  
-that Loki Software is no more its future development is questionable.  
-  
-----  
-!!3.13. What is DirectX?  
-  
- DirectX is a collection of closed source and proprietary multimedia API's, first  
-developed by Microsoft in 1995, for its various Windows OS's. It would be a mistake to  
-say something like "DirectX is like OpenGL" or "DirectX is like SDL", as is commonly said in  
-DirectX tutorials and books. Multimedia API's are more centralized on Windows than they are on  
-Linux. A more accurate statement would be something like "DirectX is like DRI, OpenGL and SDL  
-combined". As of February 2002, the most recent version of DirectX is 8.1. The components of  
-DirectX are:  
-  
-  
-  
-  
-  
-; !DirectDraw:  
-  
- !DirectDraw gives direct access to video memory, like DRI, so you can directly  
-blit 2D graphics to the video card rather than blitting the 2D graphics to main memory and  
-then blitting from main memory to the video card. !DirectDraw is kind of like the graphical  
-component of SDL, but direct access to video card memory is done by DRI rather than SDL. This  
-is why a game can easily take out a Windows system but should never take out a Linux system.  
-  
-  
-; Direct3D (D3D):  
-  
- Direct3D, like OpenGL, provides a 3D graphics API. Whereas OpenGL is open  
-source, lower level and compiles under a multitude of operating systems, D3D is proprietary,  
-higher level and only compiles on Windows. Unfortunately, most Windows game programmers  
-choose D3D over OpenGL and D3D is poorly supported by API translators, like wine, and  
-practically unsupported by virtual machines, like vmware, under Linux. D3D first appeared in  
-DirectX 2, released in 1996.  
-  
-; DirectXAudio:  
-  
- Direct Audio is a combination of 2 audio API's, !DirectSound and !DirectMusic,  
-which allows direct access to the sound card for sound and music playback.  
-  
-; !DirectInput:  
-  
- !DirectInput gives support for gaming input devices such as joysticks.  
-  
-; !DirectPlay:  
-  
- !DirectPlay gives support for simplified networking for multiplayer gaming.  
-  
-; !DirectShow:  
-  
- !DirectShow provides support for movie files like AVI and MPG. It was a  
-separate API from DirectX, but was integrated with DirectX 8.  
-  
-; !DirectSetup:  
-  
- This API provides a way to install DirectX from within an application. It  
-was designed to simplify game installation.  
-  
-  
-  
- DirectX is "kind of" supported by winex (Section 10.4.3), poorly supported by  
-wine (Section 10.4.1), barely supported by vmware (Section 10.4.5) and  
-unsupported by Win4Lin (Section 10.4.4).  
-  
-  
-  
- One comment about portability. Each component of DirectX has multiple corresponding  
-library on Linux. Moreover, a game writer which uses libraries like OpenGL, GGI or SDL will  
-write a game which will trivially compile on Windows, Linux and a multitude of other OS's. Yet  
-game companies persist using DirectX and therefore limit their audience to Windows users only.  
-If you're a game writer, please consider using cross platform libraries and stay away from  
-DirectX.  
-  
-  
-  
- A company named realtechVR started an open source project called the "DirectX Port"  
-`http://www.v3x.net/directxb which, like wine, provides  
-a Direct3D emulation layer that implements Direct3D calls. The project was focused on the BeOS  
-platform, but is now focused on MacOS and Linux. The DirectX Port is open source and you can  
-get their latest cvs from their sourceforge page at `http://sourceforge.net/projects/dxglwrapb.  
-  
-----  
-!!!4. Definitions: Video Card and 3D Terminology  
-  
- We'll cover videocard and 3D graphics terminology. This stuff isn't crucial to actually  
-getting a game working, but may help in deciding what hardware and software options are best for  
-you.  
-  
-----  
-!!4.1. Textures  
-  
- A rendered scene is basically made up of polygons and lines. A texture is a 2D image  
-(usually a bitmap) covering the polygons of a 3D world. Think of it as a coat of paint for  
-the polygons.  
-  
-----  
-!!4.2. T8L: Transform and Lighting  
-  
- The T8L is the process of translating all the 3D world information (position,  
-distance, and light sources) into the 2D image that is actually displayed on screen.  
-  
-----  
-!!4.3. AA: Anti Aliasing  
-  
- Anti aliasing is the smoothing of jagged edges along a rendered curve or polygon.  
-Pixels are square objects, so drawing an angled line or curve with them results in a `stair  
-step' effect, also called the jaggies. This is when pixels make, what should be a smooth  
-curve or line, jagged. AA uses CPU intensive filtering to smooth out these  
-jagged edges. This improves a game's visuals, but can also dramatically degrade  
-performance.  
-  
-  
-  
- AA is used in a number of situations. For instance, when you magnify a picture,  
-you'll notice lines that were once smooth are now jagged (try it with The Gimp). Font  
-rendering is another big application for AA.  
-  
-  
-  
- AA can be done either by the application itself (as with The Gimp or the XFree86 font  
-system) or by hardware, if your video card supports it. Since AA is CPU intensive, it's  
-more desirable to perform it in hardware, but if we're talking about semi-static  
-applications, like The Gimp, this really isn't an issue. For dynamic situations, like  
-games, doing AA in hardware can be crucial.  
-  
-----  
-!!4.4. FSAA: Full Screen Anti-Aliasing  
-  
- FSAA usually involves drawing a magnified version of the entire screen in a separate  
-framebuffer, performing AA on the entire image and rescaling it back to the normal  
-resolution. As you can imagine, this is extremely CPU intensive. You will never see non  
-hardware accelerated FSAA.  
-  
-----  
-!!4.5. Mip Mapping  
-  
- Mip mapping is a technique where several scaled copies of the same  
-texture are stored in the video card memory to represent the texture at  
-different distances. When the texture is far away a smaller version of  
-the texture (mip map) is used. When the texture is near, a bigger one is  
-used. Mip mapping can be used regardless of filtering method (see  
-below). Mip mapping reduces memory bandwidth requirements since the  
-images are in hardware, but it also offers better quality in the rendered  
-image.  
-  
-----  
-!!4.6. Texture Filtering  
-  
- Texture filtering is the fundamental feature required to present sweet 3D graphics.  
-It's used for a number of purposes, like making adjacent textures blend smoothly and making  
-textures viewed from an angle (think of looking at a billboard from an extreme angle) look  
-realistic. There are several common texture filtering techniques including point-sampling,  
-bilinear, trilinear and anisotropic filtering.  
-  
-  
-  
- One thing to keep in mind is that when I talk about `performance hits', the  
-performance hit depends on what resolution you're running at. For instance, at a low  
-resolution you may get only a very slight hit by using trilinear filtering instead of  
-bilinear filtering. But at high resolutions, the performance hit may be enormous. Also,  
-I'm not aware of any card that uses anisotropic texture filtering. TNT drivers claim they  
-do, but I've read that these drivers still use trilinear filtering when actually rendering  
-an image to the screen.  
-  
-----  
-!!4.7. Point Sampling Texture Filtering  
-  
- Point sampling is rare these days, but if you run a game with `software rendering'  
-(which you'd need to do if you run a 3D accelerated game without a 3D accelerated board)  
-you're likely to see it used.  
-  
-----  
-!!4.8. Bilinear Texture Filtering  
-  
- Bilinear filtering is a computationally cheap but low quality texture filtering. It  
-approximates the gaps between textures by sampling the color of the four closest (above,  
-below, left and right) texels. All modern 3D accelerated video cards can do bilinear  
-filtering in hardware with no performance hit.  
-  
-----  
-!!4.9. Trilinear Texture Filtering  
-  
- Trilinear filtering is a high quality bilinear filter which uses the four closest  
-pixels in the second most suitable mip map to produce smoother transitions between mip map  
-levels. Trilinear filtering samples eight pixels and interpolates these before rendering,  
-twice as much as bi-linear does. Trilinear filtering always uses mip mapping. Trilinear  
-filtering eliminates the banding effect that appears between adjacent MIP map levels. Most  
-modern 3D accelerated video cards can do trilinear filtering in hardware with no performance  
-hit.  
-  
-----  
-!!4.10. Anisotropic Texture Filtering  
-  
- Anisotropic filtering is the best but most CPU intensive of the three common texture  
-filtering methods. Trilinear filtering is capable of producing fine visuals, but it only  
-samples from a square area which in some cases is not the ideal way. Anisotropic (meaning  
-`from any direction') samples from more than 8 pixels. The number of sampled pixels and  
-which sampled pixels it uses depends on the viewing angle of the surface relative to your  
-screen. It shines when viewing alphanumeric characters at an angle.  
-  
-----  
-!!4.11. Z Buffering  
-  
- A Z buffer is a portion of RAM which represents the distance between the viewer (you)  
-and each pixel of an object. Many modern 3D accelerated cards have a Z buffer in their  
-video RAM, which speeds things up considerably, but Z buffering can also be done by the  
-application's rendering engine.  
-  
-  
-  
- Every object has a stacking order, like a deck of cards. When objects are rendered  
-into a 2D frame buffer, the rendering engine removes hidden surfaces by using the Z buffer.  
-There are two approaches to this. Dumb engines draw far objects first and close objects  
-last, obscuring objects below them in the Z buffer. Smart engines calculate what portions  
-of objects will be obscured by objects above them and simply not render the portions that  
-you won't see anyhow. For complicated textures this is a huge savings in processor work.  
-  
-  
-----  
-!!!5. XFree86 and You  
-  
- If you're going to game under X, it's crucial that you know a bit about X. The "X  
-Window User HOWTO", and especially "man XF86Config" are ''required'' reading.  
-Don't short change yourself; read them. They have an extremely high "information to space"  
-ratio. Many problems can be fixed easily if you know your way around  
-XF86Config (or XF86Config-4).  
-  
-----  
-!!5.1. Getting information about your X system  
-!5.1.1. Probeonly  
-  
- One of the best diagnostic tools and sources of information about your X system is  
-__probeonly__ output. To use it, kill X if it's already running and from a  
-console, type:  
-  
-  
- X -probeonly 2b X.out  
-  
-  
- Yes, that's a single dash; so much for standards. The output of X goes to stderr,  
-so we have to redirect stderr with "2b" to a file named X.out. This file will have almost  
-everything there is to know about your X system. It's crucial that you know the  
-difference between the various markers you'll see in probeonly output:  
-  
-  
- (--) probed (**) from config file (==) default setting  
-(++) from command line (!!) notice (II) informational  
-(WW) warning (EE) error (??) unknown.  
-  
-  
- Here's an example of some information I gleaned from my output:  
-  
-  
-  
-I'm running at 16 bpp color:  
-  
-  
- (**) TDFX(): Depth 16, (--) framebuffer bpp 16  
-  
-  
-X has detected what my videocard chipset and videoram are:  
-  
-  
- (--) Chipset 3dfx Voodoo5 found  
-(--) TDFX(): VideoRAM: 32768 kByte Mapping 65536 kByte  
-----  
-!5.1.2. Getting info about your setup: xvidtune  
-  
- xvidtune is your friend when your X screen is shifted a  
-little bit too far to the right, or if the vertical length is too small to fit on your  
-monitor. However, it's a great diagnostic tool also. It'll give you:  
-  
-  
-  
-  
-  
-  
-*  
-  
-the hsync/vsync range specified in your XF86Config file  
-  
-  
-  
-*  
-*  
-  
-the 4 horizontal and 4 vertical numbers which defines  
-your videomode (the 1st horizontal/vertical numbers gives the screen  
-resolution). These 8 numbers will tell you which modeline your X  
-uses. See the XFree86 Video Modetiming Howto for more  
-information.  
-  
-  
-*  
-*  
-  
-the "dot clock" your videocard is running at.  
-  
-  
-*----  
-!5.1.3. Getting info about your setup: xwininfo  
-  
- xwininfo tells you all sorts of information about X windows.  
-And actually, your "background" or "root" window is considered a window  
-too. So when xwininfo asks you to click on the window you want the  
-information on, click on your background. It'll tell you things like:  
-  
-  
-  
-  
-__: __Screen resolution  
-  
-  
-  
-__: __Width and Height  
-  
-  
-  
-__: __color bpp  
-  
-  
-  
-__: __Depth  
-  
-  
-  
- and a few other things which are interesting but not immediately  
-relevent to our subject, like "Window Gravity State" which tells where  
-new windows tend to be placed by the window manager.  
-  
-----  
-!5.1.4. Other sources of information  
-  
- __xdpyinfo__ gives cool stuff, like X version and  
-loaded extensions (invaluable when trying to see what's missing, like  
-GLX, DRI, XFree86-!VidMode, etc.).  
-  
-----  
-!5.1.5. Getting information about your 3D system  
-  
- glxinfo gives lots of useful information about OpenGL (whether  
-direct rendering is being used or not, the currently installed versions  
-of glx and mesa), vendor/renderer strings, the GL library files being  
-used and more.  
-  
-----  
-!!!6. Various Topics  
-!!6.1. Memory Type Register Ranges  
-  
- Starting with Pentium class processors and including Athlon, K6-2  
-and other CPUs, there are Memory Type Register Ranges (MTRR) which  
-control how the processor accesses ranges of memory locations.  
-Basically, it turns many smaller separate writes to the video card into a  
-single write (a burst). This increases efficiency in writing to the  
-video card and can speed up your graphics by 250% or more.  
-  
-  
-  
- See /usr/src/linux/Documentation/mtrr.txt for details. Note that  
-since this file was written, XFree86 has been patched to automatically  
-detect your video RAM base address and size and set up the MTRRs.  
-  
-  
-----  
-!!6.2. Milking performance from your system for all it's worth  
-  
-  
-  
-  
-*  
-  
-If for some reason you're using X 3.3, follow the instructions  
-given by mtrr.txt (see section 5.1) to set up your MTRRs. X 4.0 does this  
-automatically for you.  
-  
-  
-*  
-*  
-  
-Don't run a window manager (wm). Some wm's like twm don't  
-take up much CPU cycles, but still rob you of performance. Some window managers  
-like enlightenment will definitely produce a noticeable slow down. To run a game  
-without a wm, you modify .xinitrc in your home directory. Here is what my .xinitrc  
-looks like:  
-  
-  
- #quake3 +set r_gldriver libGR.so.1  
-#/usr/local/games/!SinDemo/Sin  
-#exec ut  
-#lsdldoom -server 2  
-#exec tribes2  
-exec /usr/bin/enlightenment  
-  
-  
- This file tells X what client to run upon starting. Usually this is your wm,  
-and/or a desktop manager (GNOME or KDE). Comment out the lines containing a wm and  
-desktop manager with a pound sign (#) and place your game on a new line with any  
-command line arguments you want to pass. If the game is not located in your $PATH,  
-give its full path name. Note that this is for people who use `startx' to start X.  
-  
-  
-  
-  
- I never use things like gdm or run-level 5 (so I'm not positive here), but I  
-suspect that if you do, you'll need to do things a bit differently. My best guess is  
-to go to single user mode (run-level 1) by:  
-  
-  
- # telinit 1  
-  
-  
- then edit .xinitrc, then go back to run-level 5 by  
-  
-  
- # telinit 5  
-  
-  
- Then when you stop playing, go to run-level 1, modify .xinitrc then go back to  
-run-level 5. I don't use this stuff, so I'm not sure, but you may need to kill gdm.  
-I'd appreciate some feedback on this.  
-  
-  
-  
-Kill all not-essential processes. Of course you'll have to do this as root. A  
-better way to do this than typing "ps ax", getting ntpd's pid, and sending it a  
-SIGKILL (with kill -9) is to make use of pidof:  
-  
-  
- # kill -9 `pidof ntpd`  
-  
-  
- However, an even better alternative is to use the startup scripts on your  
-system. On Debian, the startup scripts for run-level 2 are located in /etc/rc2.d/.  
-You can kill a service in an orderly manner by sending its startup scrip the `stop'  
-command:  
-  
-  
- # cd /etc/rc2.d  
-# ./ntpd stop  
-  
-  
- Another (radical) option is to simply put yourself in single-user mode with  
-  
-  
-  
- # telinit 1  
-  
-  
- This will even get rid of getty; your system will be running nothing which is  
-absolutely crucial to its operation. You'll have something like 10 processes running.  
-The downside is that you'll have to play the game as root. But your process table  
-will be a ghost town, and all that extra CPU will go straight to your game.  
-  
-  
-  
-*----  
-!!6.3. About libraries on Linux  
-  
- A common problem you'll see in gaming is a library file not being  
-found. They're kind of mysterious and have funny names, so we'll go over  
-libraries on Linux for a bit. There are two types of libraries, static  
-and dynamic. When you compile a program, by default,  
-__gcc__ uses dynamic libraries, but you can make  
-__gcc__ use static libraries instead by using the  
--static switch. Unless you plan on compiling your  
-games from source code, you'll mainly be interested in dynamic libraries.  
-  
-  
-----  
-!6.3.1. Dynamic libraries  
-  
- Dynamic libraries, also called a "shared library", provide object  
-code for an application while it's running. That is, code gets linked into the  
-executable at run time, as opposed to compile time. They're analagous to the  
-.dll's used by Windows. The program responsible for linking code  
-"on the fly" is called __/etc/ld.so__, and the dynamic  
-libraries themselves usually end with .so with a version number,  
-like:  
-  
-  
- /usr/lib/libSDL.so  
-/lib/libm.so.3  
-  
-  
- When using __gcc__, you refer to these libraries by shaving  
-off the strings lib, .so and all version  
-numbers. So to use these two libraries, you would pass __gcc__ the  
--lSDL -lm options. __gcc__ will then `place a  
-memo inside the executable' that says to look at the files /usr/lib/libSDL.so and /lib/libm.so.3 whenever an  
-SDL or math function is used.  
-  
-----  
-!6.3.2. Static libraries  
-  
- In contrast to dynamic libraries which provide code while the application  
-runs, static libraries contain code which gets linked (inserted) into the program  
-while it's being compiled. No code gets inserted at run time; the code is  
-completely self-contained. Static libraries usually end with .a  
-followed by a version number, like:  
-  
-  
- /usr/lib/libSDL.a  
-/usr/lib/libm.a  
-  
-  
- The .a files are really an archive of a bunch of  
-.o (object) files archived together, similar to a tar file. You  
-can use the __nm__ to see what functions a static library contains:  
-  
-  
-  
- % nm /usr/lib/libm.a  
-...  
-e_atan2.o:  
-00000000 T __ieee754_atan2  
-e_atanh.o:  
-00000000 T __ieee754_atanh  
-00000000 r half  
-00000010 r limit  
-00000018 r ln2_2  
-...  
-  
-  
-When using __gcc__, you refer to these libraries by shaving off  
-the strings "lib", ".a" and all version numbers. So to use  
-these two libraries, you would pass __gcc__ the -lSDL  
--lm options. __gcc__ will then `bolt on' code from  
- /usr/lib/SDL.a and /usr/lib/libm.a  
-whenever it sees a math function during the compilation process.  
-  
-----  
-!6.3.3. How are library files found  
-  
- If you compile your own games, your biggest problem with libraries will  
-either be that __gcc__ can't find a static library or perhaps the  
-library doesn't exist on your system. When playing games from binary, your library  
-woes will be either be that __ld.so__ can't find the library or the  
-library doesn't exist on your system. So it makes some sense to talk about how  
-__gcc__ and __ld.so__ go about finding libraries in  
-the first place.  
-  
-  
-  
- __gcc__ looks for libraries in the ``standard system  
-directories'' plus any directories you specify with the -L  
-option. You can find what these standard system directories are with  
-__gcc -print-search-dirs__  
-  
-  
-  
- __ld.so__ looks to a binary hash contained in a file named  
-/etc/ld.so.cache for a list of directories that contain  
-available dynamic libraries. Since it contains binary data, you cannot modify this  
-file directly. However, the file is generated from a text file  
-/etc/ld.so.conf which you can edit. This file contains a list  
-of directories that you want __ld.so__ to search for dynamic  
-libraries. If you want to start putting dynamic libraries in  
-/home/joecool/privatelibs, you'd add this directory to  
-/etc/ld.so.conf. Your change doesn't actually make it into  
-/etc/ld.so.cache until you run __ldconfig__;  
-once it's run, __ld.so__ will begin to look for libraries in your  
-private directory.  
-  
-  
-  
- Also, even if you just add extra libraries to your system, you must update  
-ld.so.cache to reflect the presense of the new libraries.  
-  
-  
-----  
-!!!7. When Bad Things Happen To Good People  
-  
- Of course we can't cover every Bad Thing that happens, but I'll outline some  
-items of common sense.  
-  
-  
-  
- There are two types of bad things: random and repeatable. It's very difficult  
-to diagnose or fix random problems that you don't have any control over when they happen  
-or not. However, if the problem is repeatable "it happens when I press the left arrow  
-key twice", then you're in business.  
-  
-----  
-!!7.1. RTFM!  
-  
- Read the friendly manual. The `manual' can take on a few forms. For open source  
-games there's the readme files that come with the game. Commercial games will have a  
-printed manual and maybe some readme files on the CD the game came on. Don't forget to  
-browse the CD your game came on for helpful tips and advice.  
-  
-  
-  
- Don't forget the game's website. The game's author has probably seen people with  
-your exact same problem many times over and might put information specific to that game  
-on the website. A prime example of this is Loki Software's online FAQs located at  
-faqs.lokigames.com.  
-  
-----  
-!!7.2. Look For Updates and Patches  
-  
- If you're playing an open source game that you compiled, make sure you have  
-the newest version by checking the game's website. If your game came from a distro  
-make sure there's not an update rpm/deb for the game.  
-  
-  
-  
- Commercial game companies like Loki release patches for their games. Often a game  
-will have MANY patches (Myth2) and some games are unplayable without them (Heretic2).  
-Check the game's website for patches whether you have a problem running the game or not;  
-there may be an update for a security problem that you may not even be aware of.  
-  
-  
-  
- By the way, Loki now has a utility that searches for Loki Software on your hard  
-drive and automatically updates them. Check out updates.lokigames.com.  
-  
-----  
-!!7.3. Newsgroups  
-  
- If you don't know what netnews (Usenet) is, then this is definitely worth 30  
-minutes of your time to learn about. Install a newsreader. I prefer console tools more,  
-so I use tin, but slrn is also popular. Netscape has a nice graphical "point and click"  
-newsreader too.  
-  
-  
-  
- For instance, I can browse Loki Software's news server with __tin -g  
-news.lokigames.com__. You can also specify which news server to use using the  
-$NNTP environment variable or with the file  
-/etc/nntpserver.  
-  
-----  
-!!7.4. Google Group Search  
-  
- Every post made to Usenet gets archived at Google's database at groups.google.com. This archive used to be at www.deja.com, but was bought by Google. Many people still know  
-the archive as "deja".  
-  
-  
-  
- It's almost certain that whatever problem you have with Linux, gaming related or  
-not, has already been asked about and answered on Usenet. Not once, not twice, but many  
-times over. If you don't understand the first response you see (or if it doesn't work),  
-then try one of the other many replies. If the page is not in a language you can  
-understand, there are many translation sites which will convert the text into whatever  
-language you like, including www.freetranslation.com  
-and translation.lycos.com. My web browser of choice,  
-Opera (available at www.opera.com allows you to use  
-the right mouse button to select a portion of text and left click the selection to  
-translate it into another language. Very useful when a Google group search yields a page  
-in German which looks useful and my girlfriend (who reads German well) isn't around.  
-  
-  
-  
-  
- The Google group search has a basic and advanced search page. Don't bother with  
-the simple search. The advanced search is at groups.google.com/advanced_group_search  
-  
-  
-  
- It's easy to use. For example, if my problem was that Quake III crashed everytime  
-Lucy jumps, I would enter "linux quake3 crash lucy jumps" in the "Find messages with all  
-of the words" textbox.  
-  
-  
-  
- There are fields for which newsgroup you want to narrow your search to. Take the  
-time to read and understand what each field means. I promise you. You won't be  
-disappointed with this service. Use it, and you'll be a much happier person. Do note  
-that they don't archive private newsgroups, like Loki Software's news server. However,  
-so many people use Usenet, it almost doesn't matter.  
-  
-----  
-!!7.5. Debugging: call traces and core files  
-  
- This is generally not something you'll do for commercial games. For open source  
-games, you can help the author by giving a corefile or stack trace. Very quickly, a core  
-file (aka core dump) is a file that holds the "state" of the program at the moment it  
-crashes. It holds valuable clues for the programmer to the nature of the crash -- what  
-caused it and what the program was doing when it happened. If you want to learn more  
-about core files, I have a great gdb tutorial at www.dirac.org/linux.  
-  
-  
-  
- At the *very* least, the author will be interested in the call stack when the game  
-crashed. Here is how you can get the call stack at barf-time:  
-  
-  
-  
- Sometimes distros set up their OS so that core files (which are mainly useful to  
-programmers) aren't generated. The first step is to make your system allow unlimited  
-coresizes:  
-  
-  
- ulimit -c unlimited  
-  
-  
- You will now have to recompile the program and pass the -g option to gcc  
-(explaining this is beyond the scope of this document). Now, run the game and do  
-whatever you did to crash the program and dump a core again. Run the debugger with the  
-core file as the 2nd argument:  
-  
-  
- $ gdb !CoolGameExecutable core  
-  
-  
- And at the (gdb) prompt, type "backtrace". You'll see something like:  
-  
-  
- #0 printf (format=0x80484a4 "z is %d.\n") at printf.c:30  
-#1 0x8048431 in display (z=5) at try1.c:11  
-#2 0x8048406 in main () at try1.c:6  
-  
-  
- It may be quite long, but use your mouse to cut and paste this information into a  
-file. Email the author and tell him:  
-  
-  
-  
-  
-  
-  
-#  
-  
-The game's name  
-  
-  
-#  
-#  
-  
-Any error message that appears on the screen when the game  
-crashes.  
-  
-  
-#  
-#  
-  
-What causes the crash and whether it's a repeatable crash or  
-not.  
-  
-  
-#  
-#  
-  
-The call stack  
-  
-  
-#  
-  
- If you have good bandwidth, ask the author if he would like the core file that his  
-program dumped. If he says yes, then send it. Remember to ask first, because core files  
-can get very, very big.  
-  
-----  
-!!7.6. Saved Games  
-  
- If your game allows for saved games, then sending the author a copy of the saved  
-game is useful because it helps the tech reproduce whatever is going wrong. For  
-commercial games, this option is more fruitful than sending a core file or call stack  
-since commercial games can't be recompiled to include debugging information. You should  
-definitely ask before sending a save game file because they tend to get long, but a  
-company like Loki Software has lots of bandwidth. Mike Phillips (formerly of Loki  
-Software) mentioned that sending in saved games to Loki is definitely a good thing.  
-  
-  
-  
-  
- Needless to say, this only applies if your game crashes reproducably at a certain  
-point. If the game segfaults every time you run it, or is incredibly slow, a saved game  
-file won't be of much help.  
-  
-----  
-!!7.7. What to do when a file or library isn't being found  
-(better living through strace)  
-  
- Sometimes you'll see error messages that indicate a file wasn't found. The file  
-could be a library:  
-  
-  
- % ./exult  
-./exult: error while loading shared libraries: libSDL-1.2.so.: cannot load shared object  
-file: No such file or directory  
-  
-  
- or it could be some kind of data file, like a wad or map file:  
-  
-  
- % qf-client-sdl  
-IP address 192.168..2:27001 UDP Initialized Error: W_!LoadWadFile: couldn't load gfx.wad  
-  
-  
- Suppose gfx.wad is already on my system, but couldn't be found because it isn't in  
-the right directory. Then where IS the right directory? Wouldn't it be helpful to know  
-where these programs looked for the missing files?  
-  
-  
-  
- This is where strace shines. strace tells you what system calls are being made,  
-with what arguments, and what their return values are. In my `Kernel Module Programming  
-Guide' (due to be released to LDP soon), I outline everything you may want to know about  
-strace. But here's a brief outline using the canonical example of what strace looks  
-like. Give the command:  
-  
-  
- strace -o ./LS_LOG /bin/ls  
-  
-  
- The -o option sends strace's output to a file; here, LS_LOG. The last argument to  
-strace is the program we're inspecting, here, "ls". Look at the contents of LS_LOG.  
-Pretty impressive, eh? Here is a typical line:  
-  
-  
- open(".", O_RDONLY|O_NONBLOCK|0x18000) = 4  
-  
-  
- We used the open() system call to open "." with various  
-arguments, and "4" is the return value of the call. What does this have to do with  
-files not being found?  
-  
-  
-  
- Suppose I want to watch the !StateOfMind demo because I can't ever seem to get  
-enough of it. One day I try to run it and something bad happens:  
-  
-  
- % ./mind.i86_linux.glibc2.1  
-Loading 8 massaging...  
-Error:Can't open data file 'mind.dat'.  
-  
-  
- Let's use strace to find out where the program was looking for the data file.  
-  
-  
-  
- strace ./mind.i86_linux.glibc2.1 2b ./!StateOfMind_LOG  
-  
-  
- Pulling out vim and searching for all occurances of "mind.dat", I find the  
-following lines:  
-  
-  
- open("/usr/share/mind.dat",O_RDONLY) = -1 ENOENT (No such file)  
-write(2, "Error:", 6Error:) = 6  
-write(2, "Can\'t open data file \'mind.dat\'."..., ) = 33  
-  
-  
- It was looking for mind.dat in only one directory. Clearly,  
-mind.dat isn't in /usr/share. Now we can try to locate  
-mind.dat and move it into /usr/share, or  
-better, create a symbolic link.  
-  
-  
-  
- This method works for libraries too. Suppose the library libmp3.so.2 is in  
-/usr/local/include but your new game "Kill-Metallica" can't find it. You can use strace  
-to determine where Kill-Metallica was looking for the library and make a symlink of  
-/usr/local/include/libmp3.so.2 to wherever Kill-Metallica was looking for the library  
-file.  
-  
-  
-  
- strace is a very powerful utility. When diagnosing why things aren't being found,  
-it's your best ally, and is even faster than looking at source code. As a last note, you  
-can't look up information in source code of commercial games from Lokisoft or Tribsoft.  
-But you can still use strace with them!  
-  
-----  
-!!7.8. Hosed consoles  
-  
- Sometimes a game will exit abnormally and your console will get `hosed'. There  
-are a few definitions of a hosed console. The text characters could look like gibberish.  
-Your normally nice black screen could look like a quasi-graphics screen. When you press  
-ENTER, a newline doesn't get echo'ed to the screen. Sometimes, certain  
-keys of the keyboard won't respond. Logging out and back in won't work, but there are a  
-few things that will:  
-  
-  
-  
-  
-  
-  
-*  
-  
- At the prompt, type "reset". This should clear up many problems,  
-including consoles hosed by an SVGAlib or ncurses based game.  
-  
-  
-*  
-*  
-  
- Try running the game again and normally. Once I had to kill Quake III  
-in a hurry, so I gave it the 3 fingered salute. The console was hosed with a  
-quasi-graphics screen. Running Quake III and quitting normally fixed the  
-problem.  
-  
-  
-*  
-*  
-  
- The commands deallocvt and openvt will work for most of the other  
-problems you'll have. __deallocvt N__ kills terminal  
-N entirely, so that Alt-FN doesn't even work  
-anymore. __openvt -c N__ starts it back up.  
-  
-  
-*  
-*  
-  
-If certain keys on your keyboard don't work, be creative. If you want  
-to reboot but the `o' key doesn't work, try using halt. One method I've come up with  
-is typing a command at the prompt and using characters on the screen with mouse  
-cut/paste. For example, you can type "ps ax", and you're sure to have an `h', `a', `l'  
-and a `t' somewhere on the screen. you can use the mouse to cut and paste the word  
-"halt".  
-  
-  
-*  
-*  
-  
-The most regrettable option is a reboot. If you can, an orderly  
-shutdown is preferable; use "halt" or "shutdown". If you can't, ssh in from a another  
-machine. That sometimes works when your console is very badly hosed. In the worst  
-case scenario, hit the reset or power switch.  
-  
-  
-*  
-  
- Note that if you use a journalling filesystem like ext3, reiserfs or xfs, hitting  
-the power switch isn't all that bad. You're still supposed to shutdown in an orderly  
-fasion, but the filesystem integrity will be maintained. You won't see an fsck for the  
-partitions that use the journalling filesystem.  
-  
-----  
-!!!8. Hardware  
-  
- I'm no Tom's Hardware or Anandtech, and don't have access to all the  
-wealth of hardware that's out there. Contributions and information to fill  
-out this section would is welcome. This stuff changes very often, and  
-peoples' experience with hardware would be useful.  
-  
-----  
-!!8.1. Which video card is the best?  
-  
- If you're using Linux, you must be smart enough to know that  
-there isn't a plain answer to this question. There seem to be 3  
-choices for hardware accelerated 3D these days:  
-  
-  
-  
-  
-  
-  
-#  
-  
-3dfx: Voodoo cards  
-  
-  
-#  
-#  
-  
-Nvidia: !GeForce  
-  
-  
-#  
-#  
-  
-ATI: Radeon  
-  
-  
-#  
-  
- According to Tom's Hardware and Anadtech, the Radeon is king  
-when playing at very high resolution (as in 1600x1200), at 32bpp, in  
-Windows. Otherwise the !GeForce is king. There are two problems with  
-this. We don't normally play at 1600x1200/32bb, and we don't play on  
-Windows (at least I don't).  
-  
-  
-  
- There aren't many recent video card benchmarks out for Linux. The most recent one  
-I've seen is from March 2001 at www.linuxhardware.org/features/01/03/19/0357219.shtml.  
-Considering the dearth of benchmarks out there, this needs to be taken as a canonical  
-benchmark, so I simply quote their conclusion:  
-  
-  
-  
- At this point the performance numbers tell a pretty simple story, if  
-it's raw speed you are looking for, the !GeForce 2 is your choice. There is very little  
-performance drawback to running your favorite games in Linux instead of Windows with this  
-card. It provides a truly impressive performace across the board. The Radeon's performance  
-will almost definitely improve as the DRI drivers mature, but for now, especially for the  
-impatient, it is simply not a good choice for the hard core 3d gamer.  
-  
-  
-  
- If, however, you are a graphics designer, and want a card with  
-impeccable 2d image quality, with 3d graphics only a secondary  
-priority, the Radeon is your best bet. The DRI drivers, even in their  
-current state, are quite usable. For 2d only users, XFree86 4..2  
-provides production quality 2d drivers. The !GeForce thoroughly trounced  
-the Radeon in the Xmark performance test, so if you aren't running at a  
-ultra high resolution, or aren't that picky, the !GeForce is once again  
-a better pick.  
-  
-  
-  
- Now for my own input. The Radeon is a pretty amazing card. It's what I use, and I  
-have yet to see a game that needs more power than the Radeon is able to provide. However,  
-the OpenGL renderer for the Radeon is buggy, although the only games I've seen that suffer  
-greatly are Loki Software's Heavy Metal (which is, regrettably, unplayable) and Soldier Of  
-Fortune. Hopefully the people doing Mesa for the Radeon will fix this very soon since the  
-Radeon is the best option for people who don't want to rely on the closed source,  
-proprietary !GeForce.  
-  
-  
-  
- Now about the Voodoo cards. Unfortunately, 3dfx was bought out by nVidia, so these  
-cards are a dead end market. If you're out to play the bleeding edge games like Rune or  
-Tribes2, you'll want the Voodoo 3, 4 or 5. Preferably the 4 or 5. I think the Voodoo 5  
-is basically a Voodoo 4 with a second processer. However, this processor is not utilized  
-by the Linux driver, and rumor says that the Linux 3dfx driver will never support it. So  
-as far as Linux is concerned, the Voodoo 4 and 5 are the same card. All the drivers,  
-Glide2 library and OpenGL renderers for the Voodoo cards were open sourced by 3dfx before  
-they when under. It is an embarrasment to the Linux and open source community in general  
-that this company failed.  
-  
-----  
-!!8.2. Which sound card is best?  
-  
- Now that Linux is beginning to mature, this question isn't as important as it used  
-to be. Once upon a time, soundcards without onboard MIDI chips (most PCI sound cards)  
-didn't do MIDI. This was mostly a problem for things like xdoom or lxdoom using musserv.  
-These days we have MIDI emulators like Timidity and libraries like SDL which don't require  
-hardware MIDI support. Frankly, I've had many cards and I can't tell the difference  
-between any of them for gaming. If you want to do things like convert a record LP to  
-digital format, then your choice of a soundcard with a professional grade A/D converter is  
-absolutely crucial. For this HOWTO, we'll assume that you're more of a gamer than a  
-studio recording engineer.  
-  
-  
-  
- Your decision should be based on what will be the easiest to configure. If you  
-already have a card and it works well, that's good enough. If you're in the market to buy  
-a sound card, get something that will take you a second to configure. PCI cards are much  
-easier to deal with than ISA since you don't need to tell their drivers about which system  
-resources (IRQ, DMA, I/O addresses) to use. Some ISA cards ARE plug-n-play, like the  
-Creative AWE-64, and the Linux kernel has come a long way in auto configuring them.  
-  
-  
-  
-  
- My personal recommendation is any card which has the es1370 or es1371 chip, which  
-uses the es1370 and es1371 sound drivers on Linux. These cards include the older Ensoniq  
-es1370 and newer Creative PCI-128. These cards are extremely cheap and trivial to get  
-working under Linux.  
-  
-  
-  
- I used to be quite a big fan of the Creative Soundblaster AWE 32, AWE 64 and AWE 64  
-gold soundcards. They are ISA, but are plug-n-play. A couple of issues to note. First,  
-the Creative AWE HOWTO is very out of date. Second, AFAIK, Creative never released a  
-Linux driver that uses the AWE 64's extra 32 voices (and they never released programming  
-information for it either). So to a Linux users, the AWE 64 and 32 are nearly identical  
-sound cards. If anyone has more information about the differences that a Linux user would  
-see between the AWE 64 and 32, I'd like to hear from you.  
-  
-  
-  
- The Creative Soundblaster Live! is an extremely popular PCI sound card these days.  
-I've never owned one, so I cannot comment here. However, there have been numerous reports  
-about serious problems with the Live! and AMD motherboards that use the 686b southbridge.  
-A google search should turn up alot of information on this problem.  
-  
-  
-  
- A more relevent issue is speakers, but even here the difference isn't huge. I've  
-had expensive Altec Lansing speakers perform only slightly better than el-cheapo speakers.  
-You get what you pay for with speakers, but don't expect a huge difference. You'll want  
-to get something with a separate sub-woofer; this does make a difference at a cost of  
-extra power and connector wires.  
-  
-----  
-!!!9. Miscellaneous Problems  
-!!9.1. Hardware Acceleration Problems  
-  
- XFree86 4.0 provides a more centralized and self-contained approach  
-to video. Much of the funkyness like kernel modules for non-root access of  
-video boards is, thankfully, gone.  
-  
-----  
-!9.1.1. Hardware acceleration isn't working at all  
-  
- If you're getting like 1 fps, then your system isn't using  
-hardware 3D acceleration. There's one of two things that can be going  
-on.  
-  
-  
-  
-  
-  
-  
-#  
-  
-Your 3D system is misconfigured (more likely)  
-  
-  
-#  
-#  
-  
-Game X is misconfigured (less likely)  
-  
-  
-#  
-  
- The first step is to figure out which one is happening.  
-  
-  
-  
-  
-  
-  
-#  
-  
-If you have X 4.0 (X 3.* users procede to step 2), look at  
-the the output of __X -probeonly__. You'll see:  
-  
-  
- (II) XXXXXX: direct rendering enabled  
-  
- or  
-  
-  
- (II) XXXXXX: direct rendering disabled  
-  
- Where XXXXXXX depends on which video card you have. If direct rendering is  
-disabled, then your X configuration is definitely faulty. Your game is not at fault. You  
-need to figure out why DRI is disabled. The most important tool for you to use at this  
-point is the `DRI Users Guide'. It is an excellently written document that gives you step  
-by step information on how to get DRI set up correctly on your machine. A copy is kept at  
-www.xfree86.org/4./DRI.html.  
-  
-  
-  
- Note that if you pass this test, your system is CAPABLE of  
-direct rendering. Your libraries can still be wrong. So procede to  
-step 2.  
-  
-  
-#  
-#  
-  
- There is a program called gears which comes with the  
-"mesademos" package. You can get mesademos with Debian (__ apt-get install mesademos__) or you can hunt for the rpm on  
-rpmfind.net. You can also download and compile the source yourself from  
-the mesa homepage.  
-  
-  
-  
- Running gears will show some gears turning. The xterm from  
-which you run gears will read "X frames in Y seconds = X/Y FPS". You  
-can compare your system to the list of benchmarks below.  
-  
-  
- CPU TYPE VIDEO CARD X VERSION AVERAGE FPS  
-  
-  
- Compiling Mesa and DRI modules yourself can increase your FPS by  
-15 FPS; quite a performance boost! So if your number is, say, about 20  
-FPS slower than a comparable machine, chances are that gears is falling  
-back on software rendering. In other words, your graphics card isn't  
-3D accelerating graphics.  
-  
-  
-  
-More important than FPS is having a constant FPS for small and  
-large windows. If hardware acceleration is working, the FPS for gears  
-should be nearly independent of window size. If it's not, then you're  
-not getting hardware acceleration.  
-  
-  
-#----  
-!!9.2. Hardware acceleration works only for the root user  
-!9.2.1. XFree86 4.*  
-  
- If the following lines aren't present in your XF86Config file,  
-put them in:  
-  
-  
- Section "DRI"  
-Mode 0666  
-!EndSection  
-  
-  
- This allows all non-root users to use DRI. For the paranoid,  
-it's possible to restrict DRI to only a few non-root users. See the  
-DRI User Guide.  
-  
-----  
-!9.2.2. XFree86 3.*__9.2.2.1. Voodoo cards__  
-  
-Voodoo card hardware acceleration only takes place ONLY at  
-16bpp color and fails silently when starting X in another color depth.  
-  
-  
-  
-  
- Also, Voodoo cards need the 3dfx.o kernel  
-module and a /dev/3dfx device file (major 107,  
-minor ) for non-root hardware acceleration. Neither the module nor  
-the device file are used under XFree86 4.*.  
-  
-----  
-!!9.3. Why isn't my sound working?  
-  
- First of all, it's probably not the game, it's probably your setup.  
-AFAIK, there are 3 options to getting a sound card configured under Linux:  
-the free OSS sound drivers that come with the Linux kernel, the Alsa  
-drivers and the commercial OSS sound drivers. Personally, I prefer the  
-free OSS drivers, but many people swear by Alsa. The commercial OSS  
-drivers are good when you're having trouble getting your sound card to work  
-by free methods. Don't discount them; they're very cheap (like 10 or 20  
-bucks), support bleeding edge sound cards and take a lot of guesswork out  
-of the configuring process.  
-  
-  
-  
- There are 5 things that can go wrong with your sound system:  
-  
-  
-  
-  
-  
-  
-#  
-  
-Shared interrupt  
-  
-  
-#  
-#  
-  
-Misconfigured driver  
-  
-  
-#  
-#  
-  
-Something's already accessing the sound card  
-  
-  
-#  
-#  
-  
-You're using the wrong driver  
-  
-  
-#  
-#  
-  
-A permissions problems  
-  
-  
-#----  
-!9.3.1. Shared interrupt  
-  
- The first thing to do is to figure out if you have an IRQ  
-conflict. ISA cards can't share interrupts. PCI cards can share  
-interrupts, but certain types of high bandwidth cards simply don't like  
-to share, including network and sound cards. To find out whether you  
-have a conflict, do a "cat /proc/interrupts". Output on my system is:  
-  
-  
-  
- # cat /proc/interrupts  
-CPU0 CPU1  
-: 24185341 0 XT-PIC timer  
-1: 224714 0 XT-PIC keyboard  
-2: 0 0 XT-PIC cascade  
-5: 2478476 0 XT-PIC soundblaster  
-5: 325924 0 XT-PIC eth0  
-11: 131326 0 XT-PIC aic7xxx  
-12: 2457456 0 XT-PIC PS/2 Mouse  
-14: 556955 0 XT-PIC ide0  
-NMI: 0  
-LOC: 24186046 24186026  
-ERR: 1353  
-  
-  
- The second column is there because I have 2 CPU's in this machine;  
-if you have one CPU (called UP, or uniprocessor), you'll  
-have only 1 CPU column. The numbers on the left are the assigned IRQ's  
-and the strings to the right indicate what device was assigned that IRQ.  
-You can see I have an IRQ conflict between the soundcard (soundblaster)  
-and the network card (eth0). They both share IRQ 5. Actually, I cooked  
-this example up because I wanted to show you what an IRQ conflict looks  
-like. But if I did have this conflict, neither my network nor my sound  
-would work well (or at all!).  
-  
-  
-  
- If my sound card is PCI, the preferred way of fixing this would be  
-to simply move one of the cards to a different slot and hope the BIOS  
-sorts things out. A more advanced way of fixing this would be to go into  
-BIOS and assign IRQ's to specific slots. Modern BIOS'es can do this.  
-  
-  
-----  
-!9.3.2. Misconfigured driver  
-  
- Sometimes, a card is hardwired to use a certain IRQ. You'll see  
-this on ISA cards only. Alternatively, some ISA cards can be set to use  
-a specific IRQ using jumpers on the card itself. With these types of  
-cards, you need to pass the correct IRQ and memory access, "I/O port", to  
-the driver.  
-  
-  
-  
- This is a sound card specific issue, and beyond the scope of this  
-HOWTO. (I should write about how to pass info to the driver).  
-  
-----  
-!9.3.3. Something is already accessing your sound card  
-  
- Perhaps an application is already accessing your soundcard. For  
-example, maybe you have an MP3 player that's paused? If something is  
-already accessing your card, other applications won't be able to. Even  
-though it was written to share the card between applications, I've  
-found that esd (the enlightenment sound daemon) sometimes doesn't work  
-correctly. The best tool to use here is lsof, which shows which  
-processes are accessing a file. Your sound card is represented by  
-/dev/dsp. Right now, I'm listening to an MP3 (not a Metallica MP3, of  
-course...) with mp3blaster.  
-  
-  
- # lsof /dev/dsp  
-COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME  
-mp3blaste 1108 p 6w CHR 14,3 662302 /dev/dsp  
-  
-  
- fuser is similar; but it lets you send a signal to any process  
-accessing the device file.  
-  
-  
- # fuser -vk /dev/dsp  
-USER PID ACCESS COMMAND  
-/dev/dsp root 1225 f.... mp3blaster  
-root 1282 f.... mp3blaster  
-  
-  
- After issuing this command, mp3blaster was killed with SIGKILL.  
-See the man pages for lsof and fuser; they're very useful. Oh, you'll  
-want to run them as root since you'll be asking for information from  
-processes that may be owned by root.  
-  
-----  
-!9.3.4. You're using the wrong driver (or no driver)  
-  
- There are only two ways to configure your card:  
-  
-  
-  
-  
-  
-  
-#  
-  
- Support must be compiled directly into the kernel  
-  
-  
-  
-#  
-#  
-  
- You must have the correct driver loaded into memory  
-  
-  
-  
-#  
-  
- You can find out which driver your sound card is using by doing  
-"lsmod" or looking at the output of "dmesg". Since sound is crucial for  
-me, I always compile sound into my kernels. If you don't have a driver  
-loaded, you need to figure out what's been compiled into your kernel.  
-That's not so straight forward. Your best bet is to compile your kernel.  
-BTW, let me say that compiling your own kernel is the first step towards  
-proficiency with Linux. It's painful the first time you do it, but once  
-you do it correctly, it becomes very easy down the right, especially if  
-you keep all your old .config files and make use of things like "make  
-oldconfig". See the Kernel HOWTO for details.  
-  
-  
-  
- If you haven't compiled the kernel yourself, there is an  
-overwhelmingly good chance that your system is set up to load sound  
-drivers as modules. That's the way distros do things. Have everything  
-under the sun compiled as a module and try to load them all. So if you  
-don't see your sound card's driver with lsmod, your card probably isn't  
-configured yet.  
-  
-----  
-!9.3.5. Permissions Problem  
-  
-If the sound card works when you're root but not any other user, you prolly have a  
-permissions problem. If this is the case, as root, look at the group owner of the sound card  
-using ls -l /dev/dsp; it'll prolly be audio. Then, as  
-root, add your non-root user to the audio group in /etc/group. For  
-example, I added the users p and wellspring to group audio on my system:  
-  
-  
- audio:x:29:p,wellspring  
-  
-  
-Then log out and log back in as the non-root user. Your sound card should work. Thanks  
-to James Barton for reminding me to add this to the howto.  
-  
-----  
-!!!10. Emulation and Virtual Machines  
-  
- Linux gets ragged on alot because we don't have the wealth of games that other  
-platforms have. Frankly, there's enough games for me, although it would be really nice to  
-have some of the bleeding edge games and classics like Half-life and Carmageddon.  
-Fortunately, we have more emulators than you can shake a stick at. Although playing an  
-emulated game is not quite as fun as playing it on the native machine, and getting some of  
-the emulators to work well can be a difficult task, they're here, and there's alot of them!  
-  
-  
-----  
-!!10.1. Apple 8-bit  
-  
- All the 8-bit Apple ][[ emulators require a copy of the original ROM, for whichever  
-system you want to emulate, in a file. If you search hard enough, you can find file  
-copies of the ROMs for the Apple ][[, ][[+, ][[e, ][[c and //gs. They are still copyrighted  
-by Apple, and you can only use them legally if you actually own one of these computers.  
-  
-  
-----  
-!10.1.1. KEGS  
-  
- KEGS is an Apple II emulator written by Kent Dickey  
-`kentd@cup.hp.comb which was originally written for HP-UX, but improved  
-and customized for Linux. It runs under X at any color depth, and supports changeable  
-memory sizes, joysticks, and sound. KEGS boots all Apple II variants, and supports  
-all of the Apple ][['s graphics modes. I can't find a working homepage for this  
-application.  
-  
-----  
-!10.1.2. apple2 and xapple2  
-  
-The SVGAlib based apple2 and X based  
-xapple2 can emulate any Apple ][[ variant except for the //gs. The  
-interface is a bit funky, but usable. Configuration is also a bit funky, too; this  
-emulator would benefit from an SVGA or X based configuration tool. It supports the  
-undocumented portion of the 6502 instruction set which some games rely on.  
-apple2 is currently being maintained by Michael Deutschmann  
-`michael@talamasca.ocis.netb and seems to be developed at a slow but  
-constant pace. I don't think this application has a homepage.  
-  
-----  
-!!10.2. DOS  
-!10.2.1. dosemu  
-  
-dosemu `www.dosemu.orgb is the canonical  
-DOS emulator on Linux. When you think of DOS, don't think of things like PROCOM PLUS OR  
-OTHER PROGRA~1 WHICH HAVE SHORT NAMES AND ARE IN ALL CAPS. There are some real classics  
-that were written for DOS like Carmageddon, Redneck Rampage and Tomb Raider. dosemu can  
-run these. Unfortunately, it can take alot of effort to get dosemu to work, and of Jan  
-2002, the sound code is somewhat broken. Not a big deal when you're trying to run  
-Wordperfect or an old database application. It's an absolute show stopper for gaming.  
-Getting dosemu to work well is not easy, but unfortunately, for DOS games it's the best  
-avenue. Good luck. If you have success using dosemu, I would like to hear from you.  
-  
-  
-----  
-!!10.3. Win16  
-!10.3.1. Wabi  
-  
- Wabi is a commercial Win16 emulator. That is, it'll  
-run Windows 16-bit applications from a Windows 3.1, Windows 3.11 or Windows for  
-Workgroups 3.11 environment. Wabi was originally created  
-by SCO Unix a long time ago and then was purchased by Caldera sometime in mid year  
-2001.  
-  
-  
-  
- Wabi is fast and does a good job for what it does, although I've heard it said that  
-wabi for Solaris is more stable than Linux. It might be useful for playing older Win16  
-games, but there are three problems:  
-  
-  
-  
-  
-  
-  
-*  
-  
- You must have a licensed copy of Windows 3.1/3.11 or WfW 3.11.  
-  
-  
-*  
-*  
-  
- Wabi is awfully expensive for what it does.  
-  
-  
-*  
-*  
-  
- Wabi doesn't work under 32bpp or 24bpp color.  
-  
-  
-*  
-  
- Wabi does NOT do DOS itself, but it looks like it can use a DOS emulator as a  
-backend for running DOS programs. There was talk about Wabi 3.0 which would've done  
-Win32 emulation, but AFAIK, this project was shelved indefinitely. I think Wabi  
-will run under Linux on all architectures (can someone verify this?)  
-  
-----  
-!!10.4. Win32  
-!10.4.1. wine  
-  
- Wine `www.winehq.comb, which bears the  
-GNUish acronym "Wine Is Not An Emulator" is a non-commercial implementation of the Win32  
-API. The reason why it's not an emulator is subtle and not of much interest to most non  
-computer scientists, so we'll call it an emulator here (it really does run-time  
-translation of calls to the Win32 API to POSIX/X11 calls). Wine has come a long way, and  
-is capable of emulating many important programs, which is great news for Linux users who  
-want this sort of stuff.  
-  
-  
-  
- Wine does not provide the DOS API, so you can't use  
-it to run DOS applications. For that, you should look at dosemu (Section 10.2.1). Wine has never been too good at implementing DirectX, although a  
-number of games are known to work under wine. For gaming you might want to look at winex  
-(Section 10.4.3).  
-  
-  
-  
- In addition to run-time translation of the Win32 API to POSIX/X11 (it runs Windows  
-applications on Linux), wine also does compile-time tranlation of the Win32 API to  
-POSIX/X11 (it compiles Windows application source code on Linux). In this sense, wine is  
-a Windows-to-Linux porting utility. The x86 architecture isn't required, but is  
-recommended since it allows actual x86 binary execuation as well as direct DLL usage).  
-  
-  
-  
-  
- You can use wine `with Windows', which means that wine uses libraries that actually  
-come with Microsoft Windows itself. This is legal only if you own a copy of Windows which  
-isn't currently being used on a computer. It's said that wine has the best success when  
-run with Windows. You can also run wine without Windows. The people at winehq are  
-writing their own set of libraries called libwine which implements the Win32 API with no  
-Microsoft code at all.  
-  
-  
-  
- Wine was originally licenced under the MIT/X11 license, so it could be used for  
-both commercial and non-commercial purposes. In mid 2002, parts of wine were re-licensed  
-under the LGPL so that it could only be used for non-commercial puposes. This presents a  
-problem for companies like Transgaming (Section 10.4.3) and prompted a fork of  
-wine called !ReWind (Section 10.4.2).  
-  
-----  
-!10.4.2. rewind  
-  
- Rewind `http://rewind.sourceforge.net/b  
-was started by Eric Pouech (a wine developer) and Ove Kåven (a winex developer) in  
-response to wine's license change (Section 10.4.1). It started out life as a  
-snapshot of the last version of wine which was completely licensed under the MIT/X11  
-license. The aim is to keep rewind MIT/X11 based so that companies like Transgaming  
-can offer wine based products.  
-  
-----  
-!10.4.3. winex  
-  
- Winex is released by a company called Transgaming `http://www.transgaming.comb. The developers take wine (see Section 10.4.1) and add DirectX / !DirectDraw support. Although winex is commercial, they  
-have an interesting business model.  
-  
-  
-  
- The end user (you) can download the source code for free. However, for 5 US  
-dollars per month, you can become a subscriber of Transgaming. Being a subscriber of  
-Transgaming gives three major benefits:  
-  
-  
-  
-  
-  
-  
-*  
-  
- Subscribers can download convenient packaged versions of winex in deb,  
-rpm or tar.gz format whenever they want, including updates.  
-  
-  
-*  
-*  
-  
- There are monthly polls where subscribed users can take votes on what  
-they want winex developers to work on. For instance, they can vote for things like  
-"Improve support for copy protected programs", "Better Installshield support" or "Improve  
-DirectX 8.0 support". As far as I can see, the developers really do listen to the  
-subscriber polls.  
-  
-  
-*  
-*  
-  
-The Transgaming website has a few user support forums. On one hand, they  
-use the most godawful, horrible, confusing, wasteful, moronic format I've ever seen and I  
-hope to god I never see a forum with a format as bad as Transgaming's. On the other hand,  
-you can ask for help and the developers are VERY good about getting around to your answer;  
-their vigilance is quite impressive. Non-subscribers can browse the forums, but only  
-subscribers can post (and therefore, ask for support).  
-  
-  
-  
-*  
-  
- The developers of winex were going to release their Installshield, DirectX and  
-!DirectDraw enhancements to wine "every so often". In return, as wine matured improved,  
-the winex developers were going to take the new versions of wine and use them for winex.  
-However, since the birth of Transgaming, parts of wine have been re-licensed under the  
-more restrictive GNU LGPL license (Section 10.4.1). This basically means that  
-versions of wine that are released past the date of the re-licensing can no longer be used  
-by winex. Therefore, winex will now be based on rewind (Section 10.4.2).  
-  
-  
-----  
-!10.4.4. Win4Lin  
-  
- Win4Lin `www.netraverse.com/products/win4lin30/b is a commercial product  
-by Netraverse. Like vmware (Section 10.4.5) it uses the virtual machine  
-approach to running Windows applications, so you'll get a big window from which you can  
-boot Windows and run all kinds of Windows applications. Unlike vmware, win4lin only does  
-Windows 95/98/ME, but this turns out to be better for gamers. Because win4lin  
-concentrates on these operating systems, reports say that it's faster and does a better  
-job at running games under these operating system than vmware. It's also much cheaper  
-than vmware. The most recent version of Win4Lin as of May 2002 is 4..  
-  
-  
-  
-  
-  
-  
-*  
-  
- It does not support DirectX or !DirectDraw, while vmware has "limited"  
-support for DirectX.  
-  
-  
-*  
-*  
-  
- It only supports serial and parallel devices. This is important for  
-people who use USB joysticks. Note that vmware supports up to 2 USB devices.  
-  
-  
-*  
-*  
-  
- As of January 2002, expect to pay $80 without printed docs and $90 with  
-printed docs. In addition, there isn't an evaluation copy available, although you get  
-a 30 day money back guarantee. However, since it's commercial you do get tech support.  
-vmware is considerably more expensive.  
-  
-  
-*  
-*  
-  
- Like vmware, you're required to have a licensed copy of Win95 or Win98. Win4Lin  
-cannot use an existing Windows installation the way wine can.  
-  
-  
-*  
-*  
-  
- It only runs on x86 architectures.  
-  
-  
-*  
-  
- If your goal is to run Win95/98/ME applications on Linux, without USB and on the  
-x86 architecture, Win4Lin's cost and focus on Win95 type OS's make it a better choice than  
-vmware. However, if you must have USB support or run Linux on a platform other than x86,  
-vmware is your only option.  
-  
-  
-  
- Now if you're goal is to run Win95 type OS games under Linux, Win4Lin almost seems  
-better than vmware. The show-stopper is the fact that vmware has limited DirectX support  
-while Win4Lin has none. This fact alone makes both Win4Lin and vmware unsuitable for most  
-hardcore gaming purposes. But if you're going to give it a try, you're more likely to  
-have success with vmware.  
-  
-----  
-!10.4.5. VMWare  
-  
-  
-  
-----  
-!!!11. Interpreters  
-!!11.1. SCUMM Engine (!LucasArts)  
-  
- Lucasarts wrote an engine for point and click adventures named SCUMM (Script  
-Creation Utility for Maniac Mansion). They wrote many graphical adventures using SCUMM,  
-like their famous Monkey Island series (all three). Ludvig Strigeus  
-`strigeus@users.sourceforge.netb was able to reverse engineer the SCUMM  
-format and write an interpreter for SCUMM based games that compiles under Linux and Win32  
-named scummvm `http://scummvm.sourceforge.net/b.  
-Their website is very good, and chock full of any kind of information about SCUMM and  
-playing these games under scummvm.  
-  
-  
-  
- A compatibility page is maintained at the scummvm website. FWIW, I've been able to  
-finish many of the games that are listed as 90% done with no problems. scummvm is rock  
-solid, and allows you to purchase SCUMM based Lucas Arts games, copy the data files to  
-your hard drive and play them under Linux. As of February 2002, I've been following  
-their cvs, and this project is undergoing constant development. Kudos to the scummvm  
-team.  
-  
-----  
-!!11.2. AGI: Adventure Gaming Interface (Sierra)  
-  
- The older Sierra DOS graphical adventure games used a scripting language named AGI  
-(Adventure Gaming Interface). Some examples of games written in AGI would be Leisure Suit  
-Larry I (EGA), Space Quest I and II, King's Quest II, Mixed-Up Mother Goose and others.  
-These games can be played using sarien `sarien.sourceforge.netb, an open source interpreter for AGI  
-games.  
-  
-  
-  
- Sarien was written in SDL, so it should run on any platform that can compile SDL  
-programs. In addition, there are versions for DOS, Strong-Arm based pda's, QNS (holy cow!  
-embedded gaming!), MIPS based systems and SH3/4 based Pocket PC's. The developers are  
-clearly out of their minds (in a good way!). Sarien also has numerous enhancements not  
-found in the original games, like a Quake style pull-down console, picture and dictionary  
-viewer, enhanced sound and support for AGDS, a Russian AGI clone. Sarien is under  
-development and the developers have been very good about documenting the Sarien internals  
-if anyone wants to get involved in hacking it.  
-  
-----  
-!!11.3. SCI: SCript Interpreter or Sierra Creative Interpreter (Sierra)  
-  
- The newer Sierra graphical adventure games (we're talking about the late 80's here)  
-used an interpreter named SCI. There were many versions of SCI since Sierra was  
-constantly improving its engine. The original SCI games were DOS based, but Sierra  
-eventually started releasing Win32 SCI based games. Some examples of games written with  
-SCI are Leisure Suit Larry 1 (VGA), Leisure Suit Larry 2-7, Space Quest 3-6, King's Quest  
-4-6, Quest For Glory 1-4 and many others. Compared with AGI games, SCI adventures have  
-better music support, a more complex engine and loads of bells and whistles.  
-  
-  
-  
- Many SCI based games (games written in SCI0) can be played using  
-freesci, available at freesci.linuxgames.com. Like Sarien, FreeSCI has many graphics  
-targets including SDL, xlib and GGI, so this game can compile and run under an incredible  
-number of platforms. The developers have done a fantastic job of documenting and FAQing  
-their application.  
-  
-----  
-!!11.4. Infocom Adventures (Infocom, Activision)  
-  
- The Z-machine is a well documented `http://www.gnelson.demon.co.uk/zspec/index.htmlb virtual machine  
-designed by Infocom to run their interactive fiction games. This allowed them to write game  
-data files in a cross platform manner, since only the engine itself, the Z-machine, would be  
-platform dependent. Z-machine went through a number of revisions during the lifetime of  
-Infocom, and two further revisions (V7 and V8 created by Graham Nelson) after the Infocom's  
-demise. The later versions even supported limited sound and graphics!  
-  
-  
-  
-One of the most popular Z-machine interpreters is Frotz `http://www.cs.csubak.edu/~dgriffi/proj/frotz/b. This excellently  
-done page has many nice links for interactive fiction fans. Frotz is GPL, runs all versions  
-of Z-machine and will compile on most versions of Unix. Frotz has spawned many forks,  
-like a version for PalmOS and Linux based PDA's.  
-  
-  
-  
- jzip `http://jzip.sourceforge.net/b is  
-another very popular Z-machine interpreter that will run V1-V5 and V8 Z-machine data files.  
-jzip is very portable; it compiles on all Unices, OS/2, Atari ST and DOS.  
-  
-  
-  
-  
- There are actually many other Z-machine interpreters like nitfol and rezrov (written in  
-Perl!). Each interpreter has its own set of strengths, and you can find links to them on the  
-home pages for Frotz and jzip.  
-  
-----  
-!!11.5. Scott Adams Adventures (Adventure International)  
-  
- Scott Adams is, arguably, the father of interactive fiction. Although he himself was  
-inspired by the first piece of interactive fiction, Adventure, Scott brought adventuring to  
-the masses. His games were available for Atari, Apple 2, Commodore, Sorcerer, TI, and CPM.  
-His company, Adventure International, released a number of much loved games between 1978 and  
-1984 before folding. He recently released a new game (a Linux version is not available) but  
-since the decline of adventuring, he has pretty much kept out of the gaming industry.  
-  
-  
-  
- Alan Cox wrote scottfree, a Scott Adams adventure game file interpreter for Unix.  
-Using scottfree and any of the Scott Adams data files which can be downloaded from Scott's  
-website `http://www.msadams.com/b you can enjoy these  
-classics.  
-  
-----  
-!!11.6. Ultima 7 (Origin, Electronic Arts)  
-  
- Ultima 7 is actually 2 games: part I (The Black Gate) and part II (Serpent Island)  
-which uses a slightly enhanced version of The Black Gate's engine. In addition, an addon  
-disk was released to both part I (The Forge Of Virtue) and part II (The Silver Seed).  
-  
-  
-  
-  
- A team of people developed Exult `http://exult.sourceforge.net/b which is an open source  
-interpreter that will run both parts of Ultima 7 and their addon disks. Exult is written  
-in C++ using SDL, so it will compile on any platform that can compile SDL programs. It  
-also features some enhancements over the original versions of the Ultima VII engine.  
-You'll need to purchase a copy of Ultima 7 to play. The developers have no plans on  
-extending Exult to interpret the other Ultimas since the engines changed so radically  
-between releases.  
-  
-  
-  
- The Exult team has also been hard at work creating a map editor, Exult Studio, and  
-a script compiler that will let users create their own RPG in the Ultima style.  
-  
-----  
-!!!12. Websites  
-!!12.1. Meta gaming websites  
-  
-  
-  
-; The Linux Game Tome:  
-www.happypenguin.org:  
-  
- About the games themselves.  
-  
-; linuxgames:  
-www.linuxgames.com:  
-  
- Linux gaming news  
-  
-; www.holarse.net:  
-  
-Linux meta gaming site for German speaking folk.  
-  
-----  
-!!12.2. Commercial Linux Game Websites  
-!12.2.1. Where to buy commercial games  
-  
- ebgames `www.tuxgames.comb no longer  
-sells Linux software. They stopped selling Linux games and distributions at around the  
-same time Loki Software declared bankruptcy, which is a shame because they had the lowest  
-prices on Linux games I've ever seen.  
-  
-  
-  
-  
-  
-; Tux Games:  
-www.tuxgames.com:  
-  
- Your one stop shop for buying any commercial Linux game (software vendors like  
-Tribsoft and Loki have online shops at their websites too).  
-  
-  
-----  
-!12.2.2. Who Used To Release Games For Linux  
-  
- These are companies that used to release games for Linux but for whatever reasons  
-aren't actively involved in Linux games anymore.  
-  
-  
-  
-  
-  
-; Loki Software: www.lokigames.com:  
-  
- As the company that brought CTP and Quake3 to Linux, Loki was the  
-father of Linux gaming. They were one of the first and had, by far, the most titles  
-(I own ALL of them). Loki ported games to Linux, mostly using the SDL library.  
-Loki's death in January 2002 was the biggest setback Linux has ever had in its attempt  
-to capture the general desktop market. Linuxgames.com has a nice Loki timeline at  
-http://www.linuxgames.com/articles/lokitimeline/  
-  
-  
-; Tribsoft: www.tribsoft.com:  
-  
- Tribsoft released Jagged Alliance 2, an excellent rpg/strat which  
-claimed 2+ weeks of my life. There were slated to release Europai Universalis,  
-Majesty and Unfinished Business. However, as of 3Jan01, Mathieu Pinard of Tribsoft  
-said that he was taking a break and Tribsoft would no longer release games for awhile.  
-He'll still support JA2 but don't expect patches or updates.  
-  
-  
-; MP Entertainment: www.hopkinsfbi.com:  
-  
- MP Entertainment released Hopkins FBI, my favorite game ever released  
-for Linux. More violent than Quake. More nudity than Hustler. More camp than  
-Liberacce. It's a comic book on your monitor. They were slated to release Hopkins  
-FBI II and a few other titles, but it's been a few years since the announcements with  
-no sign that the games are coming. They've ignored all my attempts at finding out  
-more information, so I have to conclude that MP Entertainment is in the same status as  
-Tribsoft. You can still purchase or download a demo of Hopkins FBI from their  
-website. If anyone has more information on this company or the author of Hopkins,  
-please contact me.  
-  
-; Phantom EFX: www.phantomefx.com:  
-  
- They offer Reel Deal Slots, which is very nicely done! I'm not much  
-for card/gambling games, but this game is impressive! Because their Linux guy quit the  
-company, Reel Deal Slots is their first, and so far, last release for Linux.  
-  
-----  
-!!12.3. Other Websites Of Note  
-  
- This section has URL's that should be mentioned but didn't have a separate section  
-within the howto, so I list them here as a kind of appendix.  
-  
-  
-  
-  
-  
-; Linux Game Publishing:  
-www.linuxgamepublishing.com:  
-  
- Linux Publishing doesn't sell directly to the public, but provides  
-professional game publishing to authors of publishing. I think this means disk copying,  
-packaging and selling to retailers.  
-  
-; XFree86 Homesite:  
-www.xfree86.org:  
-  
- XFree86 home page  
-  
-----  
-!12.3.1. Game Development  
-  
-  
-  
-; Linux Game Development Center:  
-http://lgdc.sunsite.dk/index.html:  
-  
- This is the canonical website for people who want to program games  
-under Linux. It's a clearing house of information that contains well written  
-articles on all aspects of game programming (not necessarily Linux specific), links  
-to important game programming resources, interviews, reviews, polls and lots of  
-other stuff. It's hard to imagine a better website on the subject.  
-  
-----  
-!12.3.2. Medium Level Libraries  
-  
-  
-  
-; Clanlib `www.clanlib.orgb:  
-  
- !ClanLib is a medium level development kit. At its lowest level, it  
-provides a platform independent (as much as that is possible in C++) way of dealing  
-with display, sound, input, networking, files, threadding and such. !ClanLib builds  
-a generic game development framework, giving you easy handling of resources, network  
-object replication, graphical user interfaces (GUI) with theme support, game  
-scripting and more
+Describe [HowToLinuxGamersHOWTO ] here.