<!-- This is the Linux Quake HOWTO -->

<!doctype linuxdoc system
	[ <!entity RCSID "$Id: Quake-HOWTO.sgml,v 1.0.1.18 1998/12/19 00:56:31 bobz Exp $" >
	  <!entity CurrentDate "18 December 1998" >
	  <!entity CurrentVer "1.0.1.18" >
	] >
<article>

<title>Linux Quake HOWTO
<author>Bob Zimbinski (<tt/bobz@mr.net/), Brett A. Thomas (<tt/quark@baz.com/), and Mike Hallock (<tt/mikeh@medina.net/)
<date>v&CurrentVer, &CurrentDate


<abstract>
     This document explains how to install, run and troubleshoot Quake, QuakeWorld and Quake II on an Intel Linux system.
</abstract>

<toc>

<sect>Introduction 
<p>
     Quake, QuakeWorld and Quake II are tremendously popular 3D action games
     developed by <htmlurl url="http://www.idsoftware.com" name="id Software">.

     If you're not familiar with the Quake games, there are better places than
     this HOWTO to learn about the basics.  See section <ref id="other-sources"
     name="Other Sources of Information"> below for a list of some of
     these better places.  

     This document assumes you have Linux for the Intel platform up and
     running, and in some cases the X Window System as well.  X is not
     required to run these games, but it's a nice way to test a basic
     installation. If you are not running X, you may safely skip over any
     references to it.

     Sections of this document that were updated in the last revision
     have a ** after the section heading.  Sections updated in the revision
     prior to the last are marked with a ++.


<sect1>Feedback,Comments, Corrections
<p>
     This document certainly does <bf>not</bf> contain everything there is to
     know about Linux Quake.  With your help, though, we can bring it closer
     to that ideal.  We want this HOWTO to be as complete and accurate as
     possible, so if you notice mistakes or omissions, please bring them to
     our attention.

     Questions, comments, or corrections should be sent to Bob Zimbinski
     (<htmlurl url="mailto:bobz@mr.net" name="bobz@mr.net">) or Mike Hallock
     (<htmlurl url="mailto:mikeh@medina.net" name="mikeh@medina.net">). 
     Constructive criticism is welcome.  Flames are not.  

<sect1>Other Formats of This Document<label id="other-formats">
<p>     
     This document is available in a variety of different formats.  Far more 
     than is necessary, actually.  You can find them at <htmlurl 
     url="http://www.linuxquake.com/howto/other-formats" 
     name="http://www.linuxquake.com/howto/other-formats">.
     <itemize>
     <item><htmlurl url="other-formats/Quake-HOWTO.txt" name="ASCII text">
     <item><htmlurl url="other-formats/Quake-HOWTO.man" name="ASCII text with backspace-overstrikes">
     , suitable for viewing with <bf>man(1)</bf>
     <item><htmlurl url="other-formats/Quake-HOWTO-html.zip" name="HTML">
      all zipped up and ready to be dropped into your web site
     <item><htmlurl url="other-formats/Quake-HOWTO.ps" name="Postscript">
     <item><htmlurl url="other-formats/Quake-HOWTO.prc" name="PRC">
      for viewing on your Palm Pilot with Aportis Doc
     <item><htmlurl url="other-formats/Quake-HOWTO.sgml" name="SGML">
     <item><htmlurl url="other-formats/Quake-HOWTO.dvi" name="LaTeX">
     <item><htmlurl url="other-formats/Quake-HOWTO-everything.zip"
     name="All of the above are also available in a single convenient package">
     </itemize>
     
<sect1>Acknowledgments 
<p>
     The original version of this document was written by Brett A.Thomas
     <htmlurl url="mailto:quark@baz.com" name="(quark@baz.com)"> and Mike
     Hallock <htmlurl url="mailto:mikeh@medina.net" name="(mikeh@medina.net)">.
     Bob Zimbinski <htmlurl url="mailto:bobz@mr.net" name="(bobz@mr.net)">
     rewrote and expanded the original document prior to its initial public release.

     Special thanks to the following people for bringing us Quake for Linux:
     <itemize>
     <item>John Carmack and the rest of <htmlurl
     url="http://www.idsoftware.com" name="id Software"> for these great games.
     <item>Dave 'Zoid' Kirsch <htmlurl url="mailto:zoid@idsoftware.com"
     name="(zoid@idsoftware.com)"> for the Linux ports.
     <item>Dave Taylor <htmlurl url="mailto:ddt@crack.com"
     name="(ddt@crack.com)"> for starting this whole wacky Linux port business.
     <item>Daryll Strauss <htmlurl url="mailto:daryll@harlot.rb.ca.us"
     name="(daryll@harlot.rb.ca.us)"> for the Linux glide ports.
     <item>Brian Paul <htmlurl url="mailto:brianp@elastic.avid.com"
     name="(brianp@elastic.avid.com)"> for the Mesa graphics library.
     <item>David Bucciarelli (<htmlurl url="mailto:tech.hmw@plus.it"
     name="tech.hmw@plus.it">) for the Mesa/glide driver.
     </itemize>

     Thanks to the following people for contributions to this Howto:
     <itemize>
     <item>Mike Brunson (<htmlurl url="mailto:brunson@l3.net"
     name="brunson@l3.net">) for the vid_restart tip.
     <item>Joey Hess (<htmlurl url="mailto:joey@kite.ml.org" 
     name="joey@kite.ml.org">) for info on running svga & gl games 
     from X
     <item>Joe S. (<htmlurl url="mailto:jszabo@eden.rutgers.edu"
     name="jszabo@eden.rutgers.edu">) for a steaming pile of suggestions
     <item>Brad Lambert (<htmlurl url="mailto:bradl@dial.pipex.com"
     name="bradl@dial.pipex.com">) for the <tt>-noudp</tt> reminder.
     <item>agx (<htmlurl url="mailto:gguenthe@iris.rz.uni-konstanz.de"
     name="gguenthe@iris.rz.uni-konstanz.de">) for Quake installation info and pointing out QIPX.
     <item>Derrik Pates (<htmlurl url="mailto:dmp8309@silver.sdsmt.edu"
     name="dmp8309@silver.sdsmt.edu">) for making me think about security.
     <item>Michael Dwyer (<htmlurl url="mailto:michael_dwyer@mwiworks.com"
     name="michael_dwyer@mwiworks.com">) for the "OS considerations" ideas.
     <item>Derek Simkowiak (<htmlurl url="mailto:dereks@kd-dev.com"
     name="dereks@kd-dev.com">) for the Quake I CD installation procedure.
     <item>sunstorm (<htmlurl url="mailto:sunstorm@glasscity.net"
     name="sunstorm@glasscity.net">) Quake Mission Pack 2 information.
     <item>Neil Marshall (<htmlurl url="mailto:marshall@pssnet.com"
     name="marshall@pssnet.com">) for screen info.
     <item>Serberus (<htmlurl url="mailto:serberus@clarion.co.uk" name="serberus@clarion.co.uk">)
     for Vispatch pointer.
     <item>Andrew Chase (<htmlurl url="mailto:fixy@fixy.org" name="fixy@fixy.org">) for the GLQuake
     "POSSIBLE SCAN CODE ERROR" fix.
     </itemize>

<sect1>Other Sources of Information<label id="other-sources">
<p>

<sect2>Linux-Specific Quake Information 
<p>
     <itemize>
     <item>LQ:Linux Quake & Utilites <htmlurl url="http://www.linuxquake.com/"
     name="http://www.linuxquake.com/">.
     <item>Linux Quake Page 
     <htmlurl url="http://captured.com/threewave/linux/"
     name="http://captured.com/threewave/linux/">
     <item>QuakeWorld.net <htmlurl url="http://www.quakeworld.net"
     name="http://www.quakeworld.net">
     </itemize>

<sect2>General Quake Information<label id="general-quake-sources">
<p>
     <itemize>
     <item>id Software <htmlurl url="http://www.idsoftware.com"
     name="http://www.idsoftware.com">
     <item>PlanetQuake <htmlurl url="http://www.planetquake.com"
     name="http://www.planetquake.com">
     <item>QuakeWorld Central <htmlurl url="http://qwcentral.stomped.com"
     name="http://qwcentral.stomped.com">
     <item>3Dfx's GL Quake FAQ (somewhat out of date)
     <htmlurl url="http://www.3dfx.com/game_dev/quake_faq.html"
     name="http://www.3dfx.com/game_dev/quake_faq.html">
     <item>Farenheit 176 Console Command Listing
     <htmlurl url="http://www.planetquake.com/f176"
     name="http://www.planetquake.com/f176">
     <item>rec.games.computer.quake.* newsgroups
     </itemize>

<sect2>Linux Gaming Information ++
<p>
     <itemize>
     <item>The Linux Game Tome <htmlurl
     url="http://www.happypenguin.org/"
     name="http://www.happypenguin.org/">
     <item>LinuxGames.com <htmlurl
     url="http://www.linuxgames.com/" name="http://www.linuxgames.com/">
     <item>LinuxGames.org <htmlurl
     url="http://www.linuxgames.org/" name="http://www.linuxgames.org/">
     </itemize>
 
<!---------------------------------------------------------------------------->
<!---------------------------------------------------------------------------->
<sect>Quake/Quakeworld
<p>
     To install Quake on your Linux system, you'll need some flavor of the
     official Quake distribution from id.  This will be either the retail
     DOS/Windows CD-ROM that you bought at your favorite software store, or the
     shareware version you downloaded from the net (see <ref
     id="quake-shareware" name="below"> for details on acquiring the shareware
     version).   Alternatively, if you've already got Quake installed on a
     DOS/Windows machine, you can use the relevant files from that installation.

<sect1>Minimum Requirements
<p>
     You will need, as a bare minimum, the following:

     <itemize>
     <item>A Pentium 90 or better (133 recommended) computer
     <item>16 MB RAM (24 recommended)
     <item>The Quake CD-ROM <bf>or</bf> the shareware version (quake106.zip)
     <item>Linux kernel version 2.0.24 or later
     <item>libc 5.2.18 or later
     <item>One of the following:
        <itemize>
	<item>X11R5 or later (for xquake)
	<item>SVGAlib 1.2.0 or later (for squake and glquake)
	</itemize>
     <item>30-80 megabytes free disk space (depends on how you install)
     <item>Access to the root account of the machine you're installing on
     </itemize>

     <p>Optional:
     <itemize>
     <item>A supported soundcard
     <item>A 3Dfx VooDoo Graphics or VooDoo2 3D graphics accelerator card.
     <item>Mesa 2.6 or later (for glquake)
     </itemize>

<sect1>Installing Quake
<p>

<sect2>Download the Necessary Files <label id="quake-files">
<p>
    All the necessary files for Linux Quake are available at id Software's
    ftp site, <htmlurl url="ftp://ftp.idsoftware.com"
    name="ftp.idsoftware.com">.  This site can be quite busy at times,so you
    may want to use one of these mirror sites instead:
    <itemize>
      <item><htmlurl url="ftp://ftp.cdrom.com/pub/idgames/idstuff"
      name="ftp.cdrom.com/pub/idgames/idstuff"> (California, USA)
      <item><htmlurl url="ftp://ftp.gamesnet.net/idsoftware"
      name="ftp.gamesnet.net/idsoftware"> (California, USA)
      <item><htmlurl url="ftp://ftp.linuxquake.com/pub/idgames/idstuff" name="ftp.linuxquake.com/lqstuff">
      (Ohio, USA)
      <item><htmlurl url="ftp://ftp.stomped.com/pub/mirror/idstuff"
      name="ftp.stomped.com/pub/mirror/idstuff"> (Minnesota, USA)
      <item><htmlurl url="ftp://mirrors.telepac.pt/pub/idgames"
      name="mirrors.telepac.pt/pub/idgames"> (Lisbon, Portugal)
      <item><htmlurl url="ftp://download.netvision.net.il/pub/mirrors/idsoftware"
      name="download.netvision.net.il/pub/mirrors/idsoftware"> (Haifa, Israel)
    </itemize>

    The Quake files mentioned in in this section are:
    <itemize>
      <item>Shareware Quake for Windows distribution<label id="quake-shareware">
      <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip"
      name="ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip">
      <item>X11 Quake binary<label id="quake-x11-binary">
      <htmlurl url="ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz"
      name="ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz">
      <item>SVGAlib Quake binary<label id="quake-svga-binary">
      <htmlurl url="ftp://ftp.idsoftware.com/idstuff/unsup/squake-1.1-i386-unknown-linux2.0.tar.gz"
      name="ftp://ftp.idsoftware.com/idstuff/unsup/squake-1.1-i386-unknown-linux2.0.tar.gz">
      <item>OpenGL/Mesa Quake binary<label id="quake-gl-binary">
      <htmlurl url="ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz"
      name="ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz">
      <item>Linux QuakeWorld clients (X11, SVGAlib and GL clients are all included in each package)<label id="qwcl">
      <itemize>
        <item>libc5 tar.gz package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-i386-unknown-linux2.0.tar.gz"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-i386-unknown-linux2.0.tar.gz">
        <item>glibc tar.gz package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-glibc-i386-unknown-linux2.0.tar.gz"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-glibc-i386-unknown-linux2.0.tar.gz">
        <item>libc5 rpm package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-1.i386.rpm"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-1.i386.rpm">
        <item>glibc rpm package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-glibc-1.i386.rpm"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwcl-2.30-glibc-1.i386.rpm">
      </itemize>

      <item>Linux QuakeWorld server
      <itemize>
        <item>libc5 tar.gz package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-i386-unknown-linux2.0.tar.gz"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-i386-unknown-linux2.0.tar.gz">
        <item>glibc tar.gz package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-glibc-i386-unknown-linux2.0.tar.gz"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-glibc-i386-unknown-linux2.0.tar.gz">
        <item>libc5 rpm package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-1.i386.rpm"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-1.i386.rpm">
        <item>glibc rpm package <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-glibc-1.i386.rpm"
        name="ftp://ftp.idsoftware.com/idstuff/quakeworld/unix/qwsv-2.30-glibc-1.i386.rpm">
      </itemize>

    <item>Capture the Flag client package <htmlurl
    url="ftp://ftp.cdrom.com/pub/quake/planetquake/threewave/ctf/client/3wctfc.zip"
    name="ftp://ftp.cdrom.com/pub/quake/planetquake/threewave/ctf/client/3wctfc.zip">
  </itemize>

    Other software mentioned:
    <itemize>
      <item>lha archive utility <htmlurl
      url="ftp://sunsite.unc.edu/pub/Linux/utils/compress/lha-1.00.tar.Z"
      name="ftp://sunsite.unc.edu/pub/Linux/utils/compress/lha-1.00.tar.Z">.
      <item>SVGAlib graphics library <htmlurl
      url="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.tar.gz"
      name="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.tar.gz">
      <item>SVGAlib libc5 binary<htmlurl
      url="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz"
      name="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz">
      <item>Glide runtime libraries <htmlurl
      url="http://glide.xxedgexx.com/3DfxRPMS.html"
      name="http://glide.xxedgexx.com/3DfxRPMS.html">
    </itemize>


<sect2>Create the Installation Directory ++
<p>
     The first thing you'll need to do is decide where you  want to install
     Quake.  The "standard" location is <tt>/usr/local/games/quake</tt>.
     This is where the <tt>.rpm</tt> packages put Quake. If you choose to
     install somewhere else, please substitute the appropriate path wherever
     <tt>/usr/local/games/quake</tt> is mentioned.

     <bf>Note to Redhat users:</bf>  If you plan on installing QuakeWorld from the 
     <tt>rpm</tt> packages, you should probably install Quake in
     <tt>/usr/local/games/quake</tt>, since the <tt>rpm</tt>s install to this
     directory by default.
     
     So go ahead and create the directory you'll install Quake in, and cd 
     to it.  The rest of these instructions will assume that this is your 
     current directory.
     
     <tscreen><verb>
     mkdir /usr/local/games/quake
     cd /usr/local/games/quake
     </verb></tscreen>

<sect2>Installing From a Quake CD
<p>
     If you're installing from a Quake CD-ROM, read on.  Otherwise you have 
     permission to skip this section.

     There are at least two versions of the Quake CD in circulation.  I've got
     one from the early days that has Quake version 1.01 on it.  Iv'e seen
     other CDs that contain version 1.06.  You have 1.01 if you see files on
     your CD called <tt>quake101.1</tt> and <tt>quake101.2</tt>.  If instead
     you see a file called <tt>resource.1</tt>, you have a newer CD.
     Mount your Quake CD now and determine which version you've
     got.  In the example below, replace <tt>/dev/cdrom</tt> and
     <tt>/mnt/cdrom</tt> with the device file and mount point appropriate for
     your sysem:

     <tscreen><verb>
     mount -t iso9660 /dev/cdrom /mnt/cdrom
     ls /mnt/cdrom
     </verb></tscreen>

     <itemize>
     <item>If you have a <tt>resource.1</tt> file on your CD, you can skip
     ahead to the next bullet.  For a version 1.01 CD, you'll need to download
     the Quake shareware package to update the <tt>.pak</tt> files after the
     installation.  The last bullet in this section explains this.

     <itemize>
     <item>Concatenate the two resource files from your CD to a single file 
     on your hard disk:
     <tscreen><verb>
     cat /mnt/cdrom/quake101.1 /mnt/cdrom/quake101.2 > resource.1
     </verb></tscreen>
     <item>Now continue on to the next paragraph, but when I refer to
     <tt>/mnt/cdrom/resource.1</tt>, you should use
     <tt>/usr/local/games/quake/resource.1</tt> instead.
     </itemize>
     <p>
     
     <item>Now it's time to extract the Quake
     files.  The <tt>resource.1</tt> file on your CD is really an lha archive
     (lha is a file compression and archiving format like zip or tar).  We'll
     use the <tt>lha(1)</tt> command to extract it.  If lha is not already
     installed on your system, you can get it from <htmlurl
     url="ftp://sunsite.unc.edu/pub/Linux/utils/compress/lha-1.00.tar.Z"
     name="ftp://sunsite.unc.edu/pub/Linux/utils/compress/lha-1.00.tar.Z">.

     <tscreen><verb>
     lha e /mnt/cdrom/resource.1
     </verb></tscreen>
     
     When lha is done, your Quake directory will contain a bunch of new files.
     A directory called <tt>id1/</tt> will also be created.  The files in this
     directory are the only ones that are important for Linux Quake, so you can
     safely remove everything else.  If you're totally new to Quake, or even if
     you're not, you may want to hang on to the <tt>*.txt</tt> files.  On
     my system, I throw all the readmes that accumulate into a <tt>doc/</tt> 
     directory.  So:

     <tscreen><verb>
     cd /usr/local/games/quake
     mkdir doc
     mv *.txt doc
     rm -f *
     </verb></tscreen>

     <item>If you installed from a version 1.01 CD, now you need to overwrite
     your <tt>id1/pak0.pak</tt> file with the one from the Quake shareware
     version.  Install the shareware version as described in <ref 
     id="quake-shareware-install" name="Shareware Version Install">, only
     install it in some temporary directory so you don't overwrite your real
     Quake files.  When you've extracted all the shareware files, copy
     the <tt>id1/pak0.pak</tt> file from the temporary shareware directory
     to your <tt>/usr/local/games/quake/id1</tt> directory.  After that, you
     can erase the temporary shareware files.

     </itemize>

     That's it for installing from the CD.  You can jump ahead to section
     "<ref id="quake-linux-binaries" name="Installing the Linux Binaries">" now.

<sect2>DOS/Windows to Linux Install<label id="quake-windows-copy">
<p>
     If you have Quake installed under Windows or DOS on a different machine, you
     can transfer the files in <tt>quake\id1\</tt> to your Linux system via 
     FTP or some other mechanism.  Keep in mind that the filenames on your 
     Linux system must be in lower case for Quake to find them, so you may have
     to rename them after the transfer.  Also note that it may be necessary to
     delete your DOS/Win installation after you do this to remain in compliance
     with the terms of id's software license.  It's not my fault if you do
     something illegal.

     If your DOS/Win and Linux systems are on the same machine, you have two
     options: copy the files from your DOS/Windows partition to your Linux
     partition, or link to the necessary files from Linux.  Both options will
     work equally well.  You just save around 50 megabytes of disk space when
     you link instead of copy.

     Whatever you choose to do, start by cd'ing to your Quake directory and
     creating a new directory below it called <tt>id1</tt>:

     <tscreen><verb>
     cd /usr/local/games/quake
     mkdir id1
     </verb></tscreen>

     <itemize>
     <item>If you want to copy the files from your DOS/Windows partition, do
     something like this:

     <tscreen><verb>
     cp /win95/games/quake/id1/*.pak id1
     </verb></tscreen>

     <item>To create links to your DOS/Windows Quake files instead, do this:

     <tscreen><verb>
     cd id1
     ln -s /win95/games/quake/id1/*.pak .
     </verb></tscreen>
     </itemize>

     Replace <tt>/win95/games/quake</tt> with the correct path to
     your DOS/Windows partition and Quake installation directory.

     The Quake data files are now installed.  Move ahead to "<ref
     id="quake-linux-binaries" name="Installing the Linux Binaries">".

<sect2>Shareware Version Install<label id="quake-shareware-install">
<p>
     The single-episode shareware version of Quake is freely available for
     download from id's ftp site.  It has all the features of the full version,
     with a couple of major limitations:  You can't play QuakeWorld with it,
     and you can't play custom or modified levels.
     
     Installing the shareware version of Quake isn't really much different than
     installing from the CD.
     
     See section <ref id="quake-files" name="Download the Necessary Files"> for
     the location of the shareware distribution.
     Download it and extract it to your Quake directory:

     <tscreen><verb>
     cd /usr/local/games/quake
     unzip -L /wherever/you/put/it/quake106.zip
     </verb></tscreen>

     Now you've got (among others) a file called <tt>resource.1</tt> that's
     really an lha archive (lha is a file compression and archiving format like
     zip or tar).  We'll use the <bf>lha(1)</bf> command to extract it.  If lha
     is not already installed on your system, you can get it from <htmlurl
     url="ftp://sunsite.unc.edu/pub/Linux/utils/compress/lha-1.00.tar.Z"
     name="ftp://sunsite.unc.edu/pub/Linux/utils/compress/lha-1.00.tar.Z">.

     <tscreen><verb>
     lha e resource.1
     </verb></tscreen>
     
     When lha is done, your Quake directory will contain a bunch of new files.
     A directory called <tt>id1/</tt> will also be created.  The files in this
     directory are the only ones that are important for Linux Quake, so you can
     safely remove everything else.  If you're totally new to Quake, or even if
     you're not, you may want to hang on to the <tt>*.txt</tt> files.  On
     my system, I throw all the readmes that accumulate into a <tt>doc/</tt> 
     subdirectory.  So:

     <tscreen><verb>
     cd /usr/local/games/quake
     mkdir doc
     mv *.txt doc
     rm -f *
     </verb></tscreen>

     Now you're ready to install the Linux binaries.

<sect1>Adding the Linux Binaries<label id="quake-linux-binaries">
<p>
     Decide which of the three flavors of Quake you'd like to install:
     <itemize>
     <item>X11 Quake allows you to run
     Quake in a window on your X desktop.  It's the least exciting client, but
     it's a great, safe way to test your installation. 
     <item>Squake is the SVGAlib Quake client.  It runs full screen on your
     console.
     <item>GLQuake is the OpenGL Quake client, the One True Way to play Quake
     if you have a 3Dfx accellerator card.
     </itemize>

     Download the packages you want (see section <ref id="quake-files"
     name="Download the Necessary Files">) and extract them to your Quake
     directory like so:
     
     <tscreen><verb>
     cd /usr/local/games/quake
     tar -xzf XXXX-i386-unknown-linux2.0.tar.gz
     </verb></tscreen>

<sect1>Setting Permissions 
<p>
     Quake and QuakeWorld servers can be run by any user.  The Quake clients,
     however,  need access to your sound and graphics cards, which
     requires privileges that normal users don't have.  One (bad) way to deal
     with this is to always run Quake as root.  Responsible system
     administrators will cringe at this filthy suggestion.  Making the Quake
     binaries setuid root is a more acceptable solution.  Quake can then be run
     by regular users and still have the privileges it needs to access the
     sound and graphics devices.  Setuid presents a security risk, though.  A
     clever user could exploit a bug or security hole in Quake to gain root
     access to your system.  Of course, if you don't run a multi-user system,
     this is may not be a big concern.

     <tt>squake</tt> is the only Quake client that <em>must</em> be run with root 
     permissions.  With a little work, you can run the X and GL clients without
     setuid.  <ref id="no-setuid" name="Running X and GL games without setuid">
     in the Tips and Tricks section tells how to make this work.

     If you plan to run <tt>squake</tt>, make it setuid root with the following
     commands:
     <tscreen><verb>
     chown root squake
     chmod 4755 squake
     </verb></tscreen>

     If you've decided it's ok to run <tt>quake.x11</tt> and <tt>glquake</tt>
     setuid root on your system, you can repeat the above commands for these 
     binaries as well.


<sect1>X11 Quake
<p>
     If you installed the X11 client, now's a good time to try it out.  You
     may need to do further configuration for <tt>glquake</tt> and
     <tt>squake</tt>, but at this point <tt>quake.x11</tt> should be ready to
     go.

     <tscreen><verb>
     cd /usr/local/games/quake
     ./quake.x11
     </verb></tscreen>
     
     If all is well, a small Quake window should appear with the first demo
     running in it.  You should hear sound effects and possibly music, if your
     CD is in the drive.  If any of this fails to occur, please see the <ref
     id="troubleshooting" name="Troubleshooting"> section for help.

<sect1>SVGAlib Quake <label id="quake-svgalib">
<p>
     Both squake and glquake require SVGAlib to run (glquake uses SVGAlib to
     process keyboard and mouse input, in case you're wondering).   SVGAlib 
     comes with most modern Linux distributions, and <bf>must</bf> be properly
     configured before squake or glquake will run correctly.

     <tt>libvga.config</tt> is SVGAlib's configuration file.  On
     most systems you'll find it in either <tt>/etc</tt> or <tt>/etc/vga</tt>.
     Make sure the mouse, monitor, and video card settings in this file are
     correct for your system.  See the SVGAlib documentation for more details.

     If you don't already have SVGAlib on your system, download it from the 
     location mentioned in <ref id="quake-files" name="the files section">
     above.
     
     If you have a RedHat 5.x or other glibc-based Linux distribution, see
     <ref id="glibc" name="Glibc, RedHat 5.x, Debian 2 considerations"> in the
     Troubleshooting/FAQs section for important information about compiling
     libraries for use with Quake. A precompiled libc5 SVGAlib binary is available
     at <htmlurl url="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz"
    name="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz">
     for those who don't want to deal with the hassle of compiling for libc5.

     You should run squake from a virtual console.  It won't run from X
     unless you're root when you start it.  And running a game as the root user
     is something that should be avoided.  So if you're in X, do a CTRL+ALT+F1,
     login and then:

     <tscreen><verb>
     cd /usr/local/games/quake
     ./squake
     </verb></tscreen>

     <ref id="running-from-x" name="Running SVGA and GL games from X"> in the 
     Tips & Tricks section below explains how to launch SVGA and GL Quake from 
     X without manually switching to a virtual console.

<sect1>GLQuake <label id="glquake">
<p>
     Hardware-accelerated OpenGL Quake is Quake the way God intended it to be.
     There is no substitute, and once you've experienced it there's no going
     back.  

     To run <tt>glquake</tt>, you need a 3D card with the Voodoo, Voodoo2 or Voodoo Rush 
     graphics chipset on it.  There are specific issues to be dealt with if 
     you have a Voodoo Rush card, and I won't go into them now because frankly,
     I wouldn't know what I was talking about.  A future version of this HOWTO
     will cover Rush issues (If somebody wants to write about Voodoo Rush
     issues, I'll gladly include it here). 

     The SVGAlib, Glide, and Mesa libraries must all be installed and 
     configured properly on your system for <tt>glquake</tt> to work.  The 
     following sections will very briefly cover what you need to do to get
     them going.

     Bernd Kreimeier's (<htmlurl url="mailto:bk@gamers.org"
     name="bk@gamers.org">) Linux 3Dfx HOWTO (<htmlurl
     url="http://www.gamers.org/dEngine/xf3D/howto/3Dfx-HOWTO.html"
     name="http://www.gamers.org/dEngine/xf3D/howto/3Dfx-HOWTO.html">) is good
     source for further information.  

     The <htmlurl url="news://news.3dfx.com/3dfx.glide.linux"
     name="3dfx.glide.linux"> newsgroup on the 3dfx news server
     (news.3dfx.com) is another good source of information about the
     intersection of Linux, glide, Mesa and Quake.

<sect2>SVGAlib
<p>
     glquake uses SVGAlib to get input from the mouse and keyboard, so you'll
     need to configure it as outlined in section <ref id="quake-svgalib"
     name="SVGAlib Quake">.

<sect2>Glide ++
<p>
     Glide is a library that provides an API for programming 3Dfx based cards.
     If you want the Mesa graphics library to use your 3Dfx card, you've gotta
     have it. 

     Do <bf>NOT</bf> use the Linux Glide library distributed at 3Dfx's web
     site.  It's more than a year out of date.  You're bound to have problems
     if you try to use it.
     The latest version of glide can always be found at <htmlurl
     url="http://glide.xxedgexx.com/3DfxRPMS.html"
     name="http://glide.xxedgexx.com/3DfxRPMS.html">.  Select the package(s)
     appropriate for your system, and install according to the instructions on
     the web page.

     Note that unless you download the 3Dfx device driver package in addition
     to the Glide library, you will only be able to run Glide applications
     (like GLQuake) as root.  Install the <tt>/dev/3dfx</tt> module and you
     can play GLQuake as a regular user.  PentiumPro/Pentium II users have an
     additional incentive for downloading this driver:  it can dramatically
     increase your framerate.  The driver enables support for MTRRs, a
     memory-caching feature of these CPUs.  See  <htmlurl
     url="http://glide.xxedgexx.com/MTRR.html" name="http://glide.xxedgexx.com/MTRR.html">
     for a better explanation of this feature.

     Once you have glide installed, try out the test program that comes with
     it.  Remember this program:  it's a good way to reset your display if you
     ever have a glide application (like GLQuake) crash and leave your screen
     switched off.  <bf>NOTE: run this test from a VC, <em>not</em> X!</bf> It's
     possible for the test app to lose mouse and keyboard focus in X, and then
     you'll have no way of shutting it down.  

    <tscreen><verb>

     /usr/local/glide/bin/test3Dfx
     </verb></tscreen>

     Your screen should turn blue and prompt you to hit any key.  After you
     press a key you should be returned to the prompt. 
     <htmlurl url="news://news.3dfx.com/3dfx.glide.linux"
     name="3dfx.glide.linux"> on 3dfx's news server (news.3dfx.com) is a great
     source of information for Linux glide-specific problems.

<sect2>Mesa 
<p>
     Once glide's installed, you need to install Mesa, a free OpenGL 
     implementation by Brian Paul <htmlurl url="mailto:brianp@elastic.avid.com" 
     name="(brianp@elastic.avid.com)">.  Luckily, you won't have to
     look far, because Mesa 2.6 is included with the QLQuake & QuakeWorld 
     binaries.  All you have to do is move it to the right place:

     <tscreen><verb>
     cd /usr/local/games/quake
     cp libMesaGL.so.2.6 /usr/local/lib
     ldconfig
     </verb></tscreen>

     The RedHat distribution comes with a (IMO) broken <tt>ld.so</tt> 
     configuration.  <tt>/usr/local/lib</tt> is not part of <tt>ld.so</tt>'s
     search path by default, so anything you install there won't get used.
     You can remedy the situation by adding the line <tt>/usr/local/lib</tt>
     to your <tt>/etc/ld.so.conf</tt> file, or including <tt>/usr/local/lib</tt> 
     in your <tt>$LD_LIBRARY_PATH</tt>.  Alternatively, you could install
     all new libraries someplace like <tt>/lib</tt>, but this approach seriously
     offends my tidy nature.

     If you want to upgrade Mesa to a more recent version (Mesa 3.0 is
     the most recent version as of this writing),
     you can download the latest from  <htmlurl
     url="ftp://iris.ssec.wisc.edu/pub/Mesa"
     name="ftp://iris.ssec.wisc.edu/pub/Mesa"> 
     If you have a RedHat 5.x or other glibc-based Linux distribution, see
     <ref id="glibc" name="Glibc, RedHat 5.x, Debian 2 considerations"> in the
     Troubleshooting/FAQs section for important information about compiling
     libraries for Quake.

     After you've built it according to the instructions, you will have to do 
     two things:

     <itemize>
     <item>Remove your old Mesa installation.  If you previously installed a 
     <tt>libMesaGL.so.2.6</tt> as described above, you must remove it or 
     Quake may not use the new version.

     <tscreen><verb>
     cd /usr/local/lib/
     rm -f libMesaGL.so.2*
     </verb></tscreen>

     <item>If the new Mesa has a major version number that's greater than 2,
     you need to create a link to it with the name <tt>libMesaGL.so.2</tt>:

     <tscreen><verb>
     cd /usr/local/lib/
     ln -s /wherever/you/installed/it/libMesaGL.so.3.0 libMesaGL.so.2
     ldconfig
     </verb></tscreen>

     </itemize>

     Now switch to a VC (CTRL+ALT+F1)  and start glquake.

     <tscreen><verb>
     cd /usr/local/games/quake
     ./glquake
     </verb></tscreen>


<sect1>Linux-Specific Command Line Options
<p>
     This section covers command line options that are specific to the
     Linux versions of Quake.  There are plenty of other Quake options, but
     they're beyond the scope of this HOWTO.  Check out some of the sites
     listed in section <ref id="general-quake-sources"
     name="General Quake Information"> for this kind of information.

     <descrip>
     <tag>-mem <em>num</em></tag>
     Specify memory in megabytes to allocate (default is 8MB, which should be
     fine for most needs).

     <tag>-nostdout</tag>
     Don't do any output to stdout.  Use this if you don't want all the console
     output dumped to your terminal.
     
     <tag>-mdev <em>device</em></tag>
     Mouse device, default is <tt>/dev/mouse</tt>
     
     <tag>-mrate <em>speed</em></tag>
     Mouse baud rate, default is 1200
     
     <tag>-cddev <em>device</em></tag>
     CD device, default is <tt>/dev/cdrom</tt>
     
     <tag>-mode <em>num</em></tag>
     Use indicated video mode (squake only)
     
     <tag>-nokdb</tag>
     Don't initialize keyboard
     
     <tag>-sndbits <em>8 or 16</em></tag>
     Set sound bit sample size.  Default is 16 if supported.
     
     <tag>-sndspeed <em>speed</em></tag>
     Set sound speed.  Usual values are 8000, 11025, 22051 and 44100.
     Default is 11025.
     
     <tag>-sndmono</tag>
     Set mono sound
     
     <tag>-sndstereo</tag>
     Set stereo sound (default if supported)
     </descrip>

<sect1>QuakeWorld 
<p>
     <htmlurl url="http://www.quakeworld.net/"
     name="http://www.quakeworld.net"> says it better than I could:

     <quote>QuakeWorld is an Internet multi-player specific version of Quake.
     While the original version of Quake can be played over the Internet, 
     modem users - the majority of players, had less than
     satisfactory play. Symptoms like excessive lag - actions actually
     happening much later than you did them; packet loss - the game would
     freeze and resume several seconds later; and various other difficulties
     plagued users.  After realizing how many people played Quake on the
     internet, and how many wanted to, but couldn't due to the play being
     unsatisfactory, John Carmack of id Software decided to create a version of
     Quake that was optimized for the average modem Internet player. This
     Internet specific version does only 1 thing, play deathmatch games over a
     TCP/IP network such as the Internet. It has no support for solo play, and
     you can't do anything with out connecting to a special server.
     </quote>

     You need the full, registered or retail version of Quake to play
     QuakeWorld, and a Linux QuakeWorld client.  QuakeWorld clients come in 
     the same flavors (X11, SVGAlib and Mesa) as normal Quake, but they're
     all bundled together in one package, so you only need to download one
     file.  However, you've got four packages to choose from:
     <itemize>
     <item>a libc5 tar.gz package
     <item>a glibc tar.gz package
     <item>a libc5 rpm package
     <item>a glibc rpm package
     </itemize>

     Install just one of these packages.  Each contains the same files, they're
     just linked against different libraries.  
     Redhat 5.x users should choose the the glibc rpm package.  Users of glibc
     based systems without rpm support should use the glibc tar package.  The 
     libc5 rpm is for Redhat distributions prior to 5.0 and other distributions
     that use the rpm package format.  The libc5 tar.gz package is for 
     Slackware and everyone else.

     See the <ref id="quake-files" name="Download the Necessary Files"> section
     for the location of the Linux Quakeworld files.

     The prerequisites and configuration for these binaries are the same as for
     Quake, so refer to the previous sections for help on setting up SVGAlib or
     glide/Mesa.

<sect2>Installing the RPM packages 
<p>
     Installation of the rpm packages should be as simple as:
     
     <tscreen><verb>
     su root
     rpm -Uvh qwcl-xxxxx.i386.rpm
     </verb></tscreen>

     <tt>qwcl</tt>, <tt>glqwcl</tt> and <tt>glqwcl.glx</tt> will be installed
     setuid root so that they can access the graphics devices on your system.
     The X and GL clients can be run without root privileges if you follow the
     instructions in <ref id="no-setuid" name="Running X and GL games without
     setuid"> below.

     Rpm may complain that it can't find <tt>libglide2x.so</tt>.  The
     Glide library is only necessary if you have a 3Dfx card and want
     to run QuakeWorld in GL mode (<tt>glqwcl</tt>).  If you don't
     plan to use the GL mode, you can override the glide dependency
     with the <tt>--nodeps</tt> option:

     <tscreen><verb>
     su root
     rpm -Uvh qwcl-xxxxx.i386.rpm --nodeps
     </verb></tscreen>
     
<sect2>Installing the tar.gz packages 
<p>
     To install, just untar the file in your Quake directory.  Do it as root
     so the proper file permissions get set:

     <tscreen><verb>
     cd /usr/local/games/quake
     su root
     tar -xzf qwcl2.21-i386-unknown-linux2.0.tar.gz
     </verb></tscreen>
     
     <tt>qwcl</tt>, <tt>glqwcl</tt> and <tt>glqwcl.glx</tt> will be installed
     setuid root so that they can access the graphics devices on your system.
     The GL and X clients can be run without root privileges if you follow the
     instructions in <ref id="no-setuid" name="Running X and GL games without
     setuid"> below.

<sect2>Running QuakeWorld 
<p>
     Once QuakeWorld is installed alongside your Quake files, you can start it
     up like:
     <tscreen><verb>
     ./qwcl +connect some.server.address
     </verb></tscreen>

     See section <ref id="related-software" name="Related Software"> for 
     info about some nifty front ends for QuakeWorld that make finding servers
     easy.

     <itemize>
     <item><bf>lib3dfxgl.so</bf> <label id="qw-3dfxgl"> 
     <p>
     With Quakeworld version 2.30, an alternative to the Mesa library is
     available.  <tt>lib3dfxgl.so</tt> is a mini-GL driver optimized
     for Quake that provides slightly better framerates than Mesa.
     This is a port of a driver that 3Dfx developed for Quake
     under Windows, and apparently not all of its features work
     properly yet.  So hopefully we can expect its performance to
     improve with time.

     Like Mesa, <tt>lib3dfxgl.so</tt> requires Glide in order to
     access your 3Dfx card.  The Quakeworld packages come with a script,
     <tt>glqwcl.3dfxgl</tt> for running Quakeworld with this
     library on glibc systems.  The next paragraph explains how to run
     Quakeworld with <tt>lib3dfxgl.so</tt> on a libc5 system.  On a
     glibc system in order for this script to work,the <tt>glqwcl</tt>
     executable <bf>must not be setuid</bf>, nor should you run it as
     root.  <tt>glqwcl</tt> will silently load Mesa rather than
     <tt>lib3dfxgl.so</tt> if it runs with root permissions.  This
     non-root requirement implies that you have the <tt>/dev/3dfx</tt>
     driver installed.  

     On a libc5 system, you need to create a symbolic link to <tt>lib3dfxgl.so</tt>
     called <tt>libMesaGL.so.2</tt> like so:
     <tscreen><verb>
     cd /usr/local/games/quake
     ln -sf lib3dfxgl.so libMesaGL.so.2
     </verb></tscreen>
     Then start Quakeworld from a script that tells
     <tt>$LD_LIBRARY_PATH</tt> to look in the current directory:
     <code>
     #!/bin/sh

     LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH" ./glqwcl $*
     </code>

     You can tell which driver is being loaded by looking for output
     like the following in your console as Quakeworld starts:

     <tscreen><verb>
     GL_VENDOR: 3Dfx Interactive Inc.
     GL_RENDERER: 3Dfx Interactive Voodoo^2(tm)
     GL_VERSION: 1.1
     GL_EXTENSIONS: 3DFX_set_global_palette WGL_EXT_swap_control GL_EXT_paletted_texture GL_EXT_shared_texture_palette GL_SGIS_multitexture
     </verb></tscreen>

     If <tt>GL_VENDOR</tt> says <tt>Brian Paul</tt> rather than
     <tt>3Dfx Interactive Inc.</tt>, that means Mesa is still being
     used rather than the miniport dirver.
     
     <item><bf>glqwcl.glx</bf> ++
     <p>

     <tt>glqwcl.glx</tt> is linked against standard OpenGL libraries
     instead of Mesa.  This allows Quakeworld to run on other 3D
     hardware that is supported by other OpenGL implementations.  At
     this time, I dont' know of any OpenGL implementations that
     support hardware other than 3Dfx, but this renderer ensures that
     when they appear, we'll be able to play Quakeworld with them.

     Use of the GLX interface also removes GL Quake II's dependency
     on SVGAlib for keyboard and mouse input.

     This is a GLX application, and as such, must be run from X.

     You can use this client with Mesa/3Dfx if you install Mesa and
     Glide as explained in the previous section, then set the
     <tt>$MESA_GLX_FX</tt> environment variable to "fullscreen" before
     you run <tt>quake2</tt>:

     <tscreen><verb>
     export MESA_GLX_FX=fullscreen
     ./glqwcl.glx +_windowed_mouse 1
     </verb></tscreen>
 
     Why the <tt>+_windowed_mouse 1</tt> option?  Remember that
     this is an X application which happens to use your 3Dfx card.
     Even though the display takes up your entire screen, Quakeworld is
     stil running in a window.  This means that if you're not
     <em>very</em> careful, you could move the mouse pointer outside
     the Quakeworld window, and Quakeworld will suddenly stop responding
     to mouse and keyboard input.  <tt>+_windowed_mouse 1</tt>
     avoids this problem by telling <tt>glqwcl.glx</tt> to grab the mouse
     and not let it move outside its window.

     </itemize>

<sect1>Servers
<p>
     Most, if not all, existing information about
     running a DOS/Windows QW server is equally applicable to running a Linux
     server.

     To start a QuakeWorld server, simply do:

     <tscreen><verb>
     ./qwsv
     </verb></tscreen>

     The official QuakeWorld server manual lives at <htmlurl
     url="http://qwcentral.stomped.com" name="http://qwcentral.stomped.com">.

<sect1>Mods & Addons
<p>
     One of the very cool things about the Quake games is that the authors
     made them easily extensible.  End users can create their own levels, add 
     new weapons or monsters, or even completely change the rules of the game.

<sect2>Capture the Flag
<p>
     This is my favorite variation of both Quake and Quake 2.  Instead of just
     running around and killing everyone you meet (which definitely has its 
     merits, don't get me wrong!), CTF is team-based and more strategic.  
     Dave 'Zoid' Kirsch, also the maintainer of the Linux Quake ports, created
     this mod.

     Everything you need to know about CTF can be found at <htmlurl
     url="http://captured.com/threewave/"
     name="http://captured.com/threewave/">  You need <htmlurl
     url="ftp://ftp.cdrom.com/pub/quake/planetquake/threewave/ctf/client/3wctfc.zip"
     name="ftp://ftp.cdrom.com/pub/quake/planetquake/threewave/ctf/client/3wctfc.zip"> to play.
     To install the client piece of CTF, simply create a directory called
     <tt>ctf</tt> in your Quake directory and unzip the <tt>3wctfc.zip</tt> 
     file there.  The accompanying <tt>readme.txt</tt> file is chock full of 
     good information.

     <tscreen><verb>
     cd /usr/local/games/quake
     mkdir ctf
     cd ctf
     unzip -L /wherever/you/put/it/3wctfc.zip
     </verb></tscreen>

     For information on running a CTF server, see the web pages mentioned 
     above.

<sect2>Mission Packs 
<p>
     Activision released two add-on packs of extra levels for Quake,
     <bf>Scourge of Armagon</bf> and <bf>Dissolution of Eternity</bf>.

     <itemize>
     <item><bf>Mission Pack 1: The Scourge of Armagon</bf>
     Assuming your CD is mounted on <tt>/mnt/cdrom</tt> and Quake is installed
     in <tt>/usr/local/games/quake</tt>:

     <tscreen><verb>
     cd /usr/local/games/quake
     mkdir hipnotic
     cp /mnt/cdrom/hipnotic/pak0.pak hipnotic
     cp /mnt/cdrom/hipnotic/config.cfg hipnotic
     </verb></tscreen>

     Play the mission pack like this:
     <tscreen><verb>
     cd /usr/local/games/quake
     ./quake.x11 -game hipnotic
     </verb></tscreen>

     <item><bf>Mission Pack 2: Dissolution of Eternity</bf> Installing
     the second mission pack is pretty much the same procedure as
     installing the first.  Follow the directions for Mission Pack 1,
     but replace the word <em>hipnotic</em> with the word
     <em>rogue</em>, and skip the <tt>config.cfg</tt> step, as this
     file isn't included on the Mission Pack 2 CD.

     </itemize>
      
<sect2>Quake Tools
<p>
     Anybody care to contribute some info about qcc, bsp and all that?


<!---------------------------------------------------------------------------->
<!---------------------------------------------------------------------------->
<sect>Quake II
<p>
     To install Quake II on your Linux system, you'll need some flavor of the
     official Quake II distribution from id.  This will be either the retail
     Windows CD-ROM that you bought at your favorite software store, or the
     demo version you downloaded from the net.  See <ref id="quake2-shareware"
     name="Download the Necessary Files"> for details on acquiring the demo
     version.  Alternatively,
     if you've already got Quake installed on a Windows machine, you can use
     the relevant files from that installation.

<sect1>Prerequisites
<p>
     You will need, as a bare minimum, the following:

     <itemize>
     <item>A Pentium 90 or better (133 recommended) computer
     <item>16 MB RAM (24 recommended)
     <item>The Quake 2 CD-ROM <bf>or</bf> the demo version (q2-314-demo-x86.exe)
     <item>Linux kernel version 2.0.24 or later
     <item>libc 5.2.18 or later 
     <item>One of the following:
        <itemize>
        <item>X11 server that supports the MITSM shared memory extension. 8 and
        16 bit displays are supported.   (for X renderer)
        <item>SVGAlib 1.2.10 or later (for SVGA and GL renderer)
        </itemize>
     <item>25-400 megabytes free disk space (depending on how you install)
     <item>Access to the root account of the machine you're installing on
     </itemize>

     <p>Optional:
     <itemize>
     <item>A supported soundcard
     <item>A 3Dfx Voodoo Graphics or Voodoo2 or Voodoo Rush 3D graphics
     accelerator card.
     <item>3Dfx glide libraries installed (for GL renderer)
     <item>Mesa 2.6 or later (for GL renderer)
     </itemize>

<sect1>Installing Quake II
<p>
     
<sect2>Download the Necessary Files<label id="quake2-files">++
<p>
    All the necessary files for Linux Quake II are available at id Software's
    ftp site, <htmlurl url="ftp://ftp.idsoftware.com"
    name="ftp.idsoftware.com">.  This site can be quite busy at times,so you
    may want to use one of these mirror sites instead:
    <itemize>
    <item><htmlurl url="ftp://ftp.cdrom.com/pub/idgames/idstuff"
    name="ftp.cdrom.com/pub/idgames/idstuff"> (California, USA)
    <item><htmlurl url="ftp://ftp.gamesnet.net/idsoftware"
    name="ftp.gamesnet.net/idsoftware"> (California, USA)
    <item><htmlurl url="ftp://ftp.stomped.com/pub/mirror/idstuff"
    name="ftp.stomped.com/pub/mirror/idstuff"> (Minnesota, USA)
    <item><htmlurl url="ftp://mirrors.telepac.pt/pub/idgames"
    name="mirrors.telepac.pt/pub/idgames"> (Lisbon, Portugal)
    <item><htmlurl url="ftp://download.netvision.net.il/pub/mirrors/idsoftware"
    name="download.netvision.net.il/pub/mirrors/idsoftware"> (Haifa, Israel)
    </itemize>

    The Quake II files mentioned in in this section are:
    <itemize>
    <item>Quake II Linux Binaries
       <itemize>
       <item>libc5 tar.gz package <htmlurl
       url="ftp://ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-i386-unknown-linux2.0.tar.gz"
       name="ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-i386-unknown-linux2.0.tar.gz">
       <item>glibc tar.gz package <htmlurl
       url="ftp://ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-glibc-i386-unknown-linux2.0.tar.gz"
       name="ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-glibc-i386-unknown-linux2.0.tar.gz">
       <item>libc5 rpm package <htmlurl
       url="ftp://ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-6.i386.rpm"
       name="ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-6.i386.rpm">
       <item>glibc rpm package <htmlurl
       url="ftp://ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-glibc-6.i386.rpm"
       name="ftp.idsoftware.com/idstuff/quake2/unix/quake2-3.20-glibc-6.i386.rpm">
       </itemize>
    <item>Quake II Demo Version for Windows<label id="quake2-shareware">
    <htmlurl url="ftp://ftp.idsoftware.com/idstuff/quake2/q2-314-demo-x86.exe"
    name="ftp://ftp.idsoftware.com/idstuff/quake2/q2-314-demo-x86.exe">
    <item>Quake II Game Source <htmlurl
    url="ftp://ftp.idsoftware.com/idstuff/quake2/source/q2src320.shar.Z"
    name="ftp://ftp.idsoftware.com/idstuff/quake2/source/q2src320.shar.Z">
    <item>Xatrix (Mission Pack 1) Game Source <htmlurl
    url="ftp://ftp.idsoftware.com/idstuff/quake2/source/xatrixsrc320.shar.Z"
    name="ftp://ftp.idsoftware.com/idstuff/quake2/source/xatrixsrc320.shar.Z">
    <item>Rogue (Mission Pack 2) Game Source <htmlurl
    url="ftp://ftp.idsoftware.com/idstuff/quake2/source/roguesrc320.shar.Z"
    name="ftp://ftp.idsoftware.com/idstuff/quake2/source/roguesrc320.shar.Z">
    <item>Quake II Capture the Flag <htmlurl
    url="ftp://ftp.idsoftware.com/idstuff/quake2/ctf/q2ctf102.zip"
    name="ftp://ftp.idsoftware.com/idstuff/quake2/ctf/q2ctf102.zip">
    <item>Quake II Capture the Flag Game Source <htmlurl
    url="ftp://ftp.idsoftware.com/idstuff/quake2/ctf/source/q2ctf-1.02-source.shar.Z"
    name="ftp://ftp.idsoftware.com/idstuff/quake2/ctf/source/q2ctf-1.02-source.shar.Z">
    </itemize>

    Other software mentioned:
    <itemize>
    <item>SVGAlib graphics library <htmlurl
    url="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.tar.gz"
    name="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.tar.gz">
    <item>SVGAlib libc5 binary<htmlurl
    url="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz"
    name="http://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz">
    <item>Glide runtime libraries <htmlurl
    url="http://glide.xxedgexx.com/3DfxRPMS.html"
    name="http://glide.xxedgexx.com/3DfxRPMS.html">
    <item>Mesa 3D graphics library <htmlurl
    url="http://www.ssec.wisc.edu/~brianp/Mesa.html"
    name="http://www.ssec.wisc.edu/~brianp/Mesa.html">
    <item>unzip archive utility <htmlurl
    url="http://sunsite.unc.edu/pub/Linux/utils/compress/unzip-5.31.tar.gz"
    name="http://sunsite.unc.edu/pub/Linux/utils/compress/unzip-5.31.tar.gz">
    </itemize>

<sect2>Create the Installation Directory ++
<p>
     The first thing you'll need to do is decide where you  want to install
     Quake II.  The "standard" location is <tt>/usr/local/games/quake2</tt>.
     This is where the <tt>.rpm</tt> packages put Quake II.  If you choose
     to install somewhere else, please substitute the appropriate path wherever
     <tt>/usr/local/games/quake2</tt> is mentioned.

     So go ahead and create the directory you'll install Quake II in, and cd
     to it.  The rest of these instructions will assume that this is your
     current directory.

     <tscreen><verb>
     mkdir /usr/local/games/quake2
     cd /usr/local/games/quake2
     </verb></tscreen>

<sect2>Installing from CD
<p>
     Place your Quake II CD in your CD ROM drive, and mount it:

     <tscreen><verb>
     mount -t iso9660 /dev/cdrom /mnt/cdrom
     </verb></tscreen>
     
     If your CDROM is typically mounted elsewhere, substitute its location
     for <tt>/mnt/cdrom</tt>.  If you're not sure where your CDROM is
     mounted, please see the documentation for your particular
     distribution.
     
     <itemize>
     <item><bf>Full Install</bf>
     The simplest install method is a "full" install, which involves
     copying the entire contents of your CD to your hard drive.  This
     requires about 350 MB, and is accomplished by issuing the following
     commands:

     <tscreen><verb>
     cd /usr/local/games/quake2
     cp -r /mnt/cdrom/Install/Data/* .
     </verb></tscreen>
 
     There'll be a bunch of unnecessary Windows files hanging around that you
     can safely delete:

     <tscreen><verb>
     rm -f /usr/local/quake2/*.dll
     rm -f /usr/local/quake2/quake2.exe
     rm -f /usr/local/quake2/baseq2/gamex386.dll
     </verb></tscreen>
     
     <item><bf>Medium Install</bf>
     If 450 MB is too much space for you to devote to Quake II, you can skip
     installing the movie cutscenes and link to them on the CD-ROM instead.
     This will reduce the space requirements to about 200 MB:

     <tscreen><verb>
     cd /usr/local/games/quake2
     mkdir baseq2
     cp /mnt/cdrom/Install/Data/baseq2/pak0.pak baseq2
     cp -r /mnt/cdrom/Install/Data/baseq2/players baseq2
     ln -s /mnt/cdrom/Install/Data/baseq2/video baseq2/video
     </verb></tscreen>

     Note that this doesn't mean you have to mount your Quake II CD
     every time to want to play Quake II.  If the game can't load the
     videos, it just won't display them.
     
     </itemize>

<sect2>Windows to Linux install
<p>
     If you have Quake II installed under Windows on a different machine, you
     can transfer the files in <tt>quake2\baseq2\</tt> to your Linux system
     via FTP or some other mechanism.  Keep in mind that the filenames on your
     Linux system must be in lower case for Quake II to find them, so you may
     have to rename them after the transfer.  Also note that it may be
     necessary to delete your Windows installation after you do this to remain
     in compliance with the terms of id's software license.  It's not my fault
     if you do something illegal.

     If your Windows and Linux systems are on the same machine, you have two
     options: copy the files from your Windows partition to your Linux
     partition, or link to the necessary files from Linux.  Both options will
     work equally well.  You'll just save a lot of disk space when you link
     instead of copy.
     As usual, replace <tt>/win95/games/quake2</tt> in the following examples
     with the correct path to your Windows partition and Quake II installation.

     <itemize>
     <item>If you want to copy the files from your Windows partition, do
     something like this:

     <tscreen><verb>
     cd /usr/local/games/quake2
     cp -r /win95/games/quake2/baseq2 .
     </verb></tscreen>

     <item>To create links to your Windows Quake II files instead, do this:

     <tscreen><verb>
     cd /usr/local/games/quake2
     ln -s /win95/games/quake2/baseq2 .
     </verb></tscreen>
     
     This second method requires that the Windows partition you're
     linking to be writeable by users, which may not be
     appropriate for all systems.  By making your Windows partition
     writeable, you are giving all users the opportunity to destroy
     your entire Windows installation.  If that's ok with you,
     modify your <tt>/etc/fstab</tt> to mount the Windows
     partition with the options <em>umask=002,gid=XXX</em>, where XXX
     is the group id number of the "users" group.  Look in
     <tt>/etc/group</tt> for this information.  When <tt>fstab</tt> is
     updated, umount and re-mount the Windows partition and you're
     done.
     </itemize>

     You're done installing the Quake II data files.  Move ahead to "<ref
     id="quake2-linux-binaries" name="Installing the Linux Binaries">".

     
<sect2>Installing the demo version 
<p>
     id Software has a freely available demo version of Quake II at their
     ftp site.  It's a 40 megabyte download.  The demo includes all
     features of the full version, including multiplayer, but it only
     comes with three levels, so it may be difficult to find a server
     to play on.

     See the section <ref id="quake2-files"name="Download the
     Necessary Files"> above for the location of the Quake II demo.
     Download it and place it in your Quake II directory.

     The demo distribution is a self-extracting zip file (it's self-extracting
     in other OS's anyway).  You can extract it with the <bf>unzip(1)</bf>
     command, which should be included in most modern distributions.  If you
     don't have unzip, you can download it from the location listed in
     the <ref id="quake2-files" name="Download the Necessary Files">
     section.

     cd to your Quake II directory and extract the archive:

     <tscreen><verb>
     cd /usr/local/games/quake2
     unzip q2-314-demo-x86.exe
     </verb></tscreen>

     Now we've got to delete some things and move some other things around:
     <tscreen><verb>
     rm -rf Splash Setup.exe
     mv Install/Data/baseq2 .
     mv Install/Data/DOCS docs
     rm -rf Install
     rm -f baseq2/gamex86.dll
     </verb></tscreen>

     The Quake II demo is now installed.  You just need to add the Linux
     binaries.

<sect1>Adding the Linux Binaries <label id="quake2-linux-binaries">
<p>
     There are four Linux Quake II packages available for download:
     <itemize>
     <item>a libc5 tar.gz package
     <item>a glibc tar.gz package
     <item>a libc5 rpm package
     <item>a glibc rpm package
     </itemize>

     Install just one of these packages.  Each contains the same
     files, they're just linked against different libraries.  Redhat
     5.x users should choose the the glibc rpm package.  Users of
     glibc based systems without rpm support should use the glibc tar
     package.  The libc5 rpm is for Redhat distributions prior to 5.0
     and other distributions that use the rpm package format.  The
     libc5 tar.gz package is for Slackware and everyone else.

     See the <ref id="quake2-files" name="Download the Necessary Files"> section
     for the location of the Linux Quake II files.

<sect2>Installing the RPM packages 
<p>
     Installation of the rpm packages should be as simple as:
     
     <tscreen><verb>
     su root
     rpm -Uvh quake2-xxxxx.i386.rpm
     </verb></tscreen>

     Rpm may complain that it can't find <tt>libglide2x.so</tt>.  The
     Glide library is only necessary if you have a 3Dfx card and want
     to run Quake II in GL mode.  If you don't plan to use the GL
     mode, you can override the glide dependency with the
     <tt>--nodeps</tt> option:

     <tscreen><verb>
     su root
     rpm -Uvh quake2-xxxxx.i386.rpm --nodeps
     </verb></tscreen>

<sect2>Installing the tar.gz packages 
<p>
     To install, just untar the file in your Quake II directory.  Do
     it as root so the proper file permissions get set:

     <tscreen><verb>
     cd /usr/local/games/quake
     su root
     tar -xzf qwcl2.21-i386-unknown-linux2.0.tar.gz
     </verb></tscreen>
     
<sect1>Setting Permissions 
<p>
    If you ran <tt>rpm</tt> or <tt>tar</tt> as root when installing
    the Quake II package on your system, the file permissions should
    be properly set already.  The <tt>quake2</tt> executable was
    installed setuid root so that it can access the graphics devices
    on your system.  For security, the <tt>ref_*.so</tt> rendering
    libraries are owned by root and writeable only by him.  If root
    doesn't own the libraries, or they're world writeable,
    <tt>quake2</tt> will refuse to run.

    If you plan to only run Quake II with the GL or X renderers, your
    <tt>quake2</tt> doesn't need to be setuid root.  See <ref
    id="no-setuid" name="Running X and GL games without setuid"> in
    the Tips and Tricks section below for information on running Quake
    II without root permissions.

<sect2>Quake2.conf 
<p>

     For security reasons, there is a <tt>quake2.conf</tt> file, which
     tells Quake II where to find the rendering libraries (<tt>ref_*.so</tt>)
     it needs.  It contains only one line, which should be
     the path to your Quake II installation.  Quake II looks for this
     file in <tt>/etc</tt>.  If you installed Quake II from an
     <tt>.rpm</tt> file, this file was installed for you.  If you
     installed from a <tt>.tar</tt> package, you need to create it
     like so:
     
     <tscreen><verb>
     su root
     cd /usr/local/games/quake2
     pwd > /etc/quake2.conf
     chmod 644 /etc/quake2.conf
     </verb></tscreen>

<sect1>The X Renderer
<p>
     Quake II should be ready to run under X now.  Give it a try:

     <tscreen><verb>
     cd /usr/local/games/quake2
     ./quake2 +set vid_ref softx
     </verb></tscreen>

     If all is well, after a pretty significant pause, a small Quake II window
     will appear with the first demo running in it.  You should hear sound
     effects and possibly music, if your CD is in the drive.  If any of this fails
     to occur, please see section <ref id="troubleshooting"
     name="Troubleshooting"> for help.

<sect1>The SVGAlib Renderer <label id="quake2-svgalib"> ++
<p>
     You need SVGAlib installed and configured if you're going to use either
     the ref_soft or ref_gl renderers.  (Quake II uses SVGAlib to process
     keyboard and mouse input, in case you're wondering why you'd need it for 
     the GL renderer).   SVGAlib comes with most modern distributions, and
     <bf>must</bf> be properly configured before Quake II will run correctly 
     outside of X.

     <tt>libvga.config</tt> is SVGAlib's configuration file.  On
     most systems you'll find it in either <tt>/etc</tt> or <tt>/etc/vga</tt>.
     Make sure the mouse, monitor, and video card settings in this file are
     correct for your system.  See the SVGAlib documentation for more details.

     If you don't already have SVGAlib on your system, download it from
     the location mentioned in <ref id="quake-files" name="the files
     section"> above.

     You should run Quake II from a virtual console when using the ref_soft 
     or ref_gl renderers.  It won't run from X unless you're root when you
     start it, and that's not advisable. So if you're in X, do a CTRL+ALT+F1,
     login and then:

     <tscreen><verb>
     cd /usr/local/games/quake2
     ./quake2 +set vid_ref soft
     </verb></tscreen>

     <ref id="running-from-x" name="Running SVGA and GL games from X">
     in the Tips & Tricks section below explains how to launch SVGA
     and GL Quake II from X without manually switching to a virtual
     console.

<sect1>The OpenGL Renderer<label id="quake2-gl">
<p>
     Hardware-accelerated OpenGL Quake is Quake the way God intended it to be.
     There is no substitute, and once you've experienced it there's no going
     back.

     To run Quake II in GL mode, you need a 3D card with the Voodoo,
     Voodoo2 or Voodoo Rush graphics chipset on it.  There are
     specific issues to be dealt with if you have a Voodoo Rush card,
     and I won't go into them now because frankly, I wouldn't know
     what I was talking about.  A future version of this HOWTO will
     cover Rush issues (If somebody wants to write about Voodoo Rush
     issues, I'll gladly include it here).

     The SVGAlib, Glide, and Mesa libraries must all be installed and 
     configured properly on your system for <tt>quake2</tt> to work.  The 
     following sections will very briefly cover what you need to do to get
     them going.

     Bernd Kreimeier's (<htmlurl url="mailto:bk@gamers.org"
     name="bk@gamers.org">) Linux 3Dfx HOWTO (<htmlurl
     url="http://www.gamers.org/dEngine/xf3D/howto/3Dfx-HOWTO.html"
     name="http://www.gamers.org/dEngine/xf3D/howto/3Dfx-HOWTO.html">) is good
     source for further information.  

     The <htmlurl url="news://news.3dfx.com/3dfx.glide.linux"
     name="3dfx.glide.linux"> newsgroup on the 3dfx news server
     (news.3dfx.com) is another good source of information about the
     intersection of Linux, glide, Mesa and Quake.


<sect2>SVGAlib
<p>
     Quake II uses SVGAlib to get input from the mouse and keyboard, so you'll
     need to configure it as outlined in section <ref id="quake2-svgalib"
     name="SVGAlib Renderer">.

<sect2>Glide<label id="quake2-glide"> ++
<p>
     Glide is a library that provides an API for programming 3Dfx based cards.
     If you want the Mesa graphics library to use your 3Dfx card, you've gotta
     have it.

     Do <bf>NOT</bf> use the Linux Glide library distributed at 3Dfx's web
     site.  It's more than a year out of date.  You're bound to have problems
     if you try to use it. 
     The latest version of glide can always be found at <htmlurl
     url="http://glide.xxedgexx.com/3DfxRPMS.html"
     name="http://glide.xxedgexx.com/3DfxRPMS.html">.  
     Select the package(s) appropriate for your system, and install according to
     the instructions on the web page.  

     Note that unless you download the 3Dfx device driver package in addition
     to the Glide library, you will only be able to run Glide applications
     (like Quake II) as root.  Install the <tt>/dev/3dfx</tt> module and you
     can play Quake II as a regular user.  PentiumPro/Pentium II users have an
     additional incentive for downloading this driver:  it can dramatically
     increase your framerate.  The driver enables support for MTRRs, a
     memory-caching feature of these CPUs.  See  <htmlurl
     url="http://glide.xxedgexx.com/MTRR.html" name="http://glide.xxedgexx.com/MTRR.html">
     for a better explanation of this feature.
     
     Once you have glide installed, try out the test program that comes with
     it.  Remember this program:  it's a good way to reset your display if you
     ever have a glide application (like Quake II) crash and leave your screen
     switched off.  <bf>NOTE: run this test from a VC, <em>not</em> X!</bf> It's
     possible for the test app to lose mouse and keyboard focus in X, and then
     you'll have no way of shutting it down.

     <tscreen><verb>
     /usr/local/glide/bin/test3Dfx
     </verb></tscreen>

     Your screen should turn blue and prompt you to hit any key.  After you
     press a key you should be returned to the prompt.
     <htmlurl url="news://news.3dfx.com/3dfx.glide.linux"
     name="3dfx.glide.linux"> on 3dfx's news server (news.3dfx.com) is a great
     source of information for Linux glide-specific problems.

<sect2>Mesa **
<p>
     Once glide's installed, you need to install Mesa, a free OpenGL
     implementation by <htmlurl url="mailto:brianp@elastic.avid.com"
     name="Brian Paul (brianp@elastic.avid.com)">.  Luckily, you won't have to
     look far, because Mesa 2.6 is included with the Quake II binaries.  All
     you have to do is move it to the right place:

     <tscreen><verb>
     cd /usr/local/games/quake2
     cp libMesaGL.so.2.6 /usr/local/lib
     ldconfig
     </verb></tscreen>

     The RedHat distribution comes with a (IMO) broken <tt>ld.so</tt> 
     configuration.  <tt>/usr/local/lib</tt> is not part of <tt>ld.so</tt>'s
     search path by default, so anything you install there won't get used.
     You can remedy the situation by adding the line <tt>/usr/local/lib</tt>
     to your <tt>/etc/ld.so.conf</tt> file, or including <tt>/usr/local/lib</tt> 
     in your <tt>$LD_LIBRARY_PATH</tt>.  Alternatively, you could install
     all new libraries someplace like <tt>/lib</tt>, but this approach seriously
     offends my tidy nature.

     If you want to upgrade Mesa to a more recent version (Mesa 3.0 is
     the most recent version as of this writing),
     you can download the latest from  <htmlurl
     url="ftp://iris.ssec.wisc.edu/pub/Mesa"
     name="ftp://iris.ssec.wisc.edu/pub/Mesa">
     If you have a RedHat 5.x or other glibc-based Linux distribution, see
     <ref id="glibc" name="Glibc, RedHat 5.x, Debian 2 considerations"> in the
     Troubleshooting/FAQs section for important information about compiling
     libraries for Quake.
     
     After you've built it according to the instructions, you will have to do
     two things:

     <itemize>
     <item>Remove your old Mesa installation.  If you previously installed a
     <tt>libMesaGL.so.2.6</tt> as described above, you must remove it or
     Quake II may not use the new version.

     <tscreen><verb>
     cd /usr/local/lib/
     rm -f libMesaGL.so.2*
     </verb></tscreen>

     <item>If the new Mesa has a major version number that's greater than 2,
     you need to create a link to it with the name <tt>libMesaGL.so.2</tt>:

     <tscreen><verb>
     cd /usr/local/lib/
     ln -s /wherever/you/installed/it/libMesaGL.so.3.0 libMesaGL.so.2
     ldconfig
     </verb></tscreen>

     </itemize>


<sect2>lib3dfxgl.so <label id="q2-3dfxgl"> **
<p>
     With Quake II version 3.19, an alternative to the Mesa library is
     available.  <tt>lib3dfxgl.so</tt> is a mini-GL driver optimized
     for Quake that provides better framerates than Mesa.
     This is a port of a driver that 3Dfx developed for Quake
     under Windows.  It's included in the Quake II package, and there's
     no reason you shouldn't use it.  

     Like Mesa, <tt>lib3dfxgl.so</tt> requires that the Glide library
     be installed in order to access your 3Dfx card. 


<sect2>Choosing a GL driver **
<p>
     With version 3.20, using this driver instead of Mesa is much easier
     than it was previously.  There's a new CVAR, <tt>gl_driver</tt> that
     you set to indicate which GL driver <tt>quake2</tt> should use.   To
     run with the <tt>lib3dfxgl.so</tt> driver, do:
     <tscreen><verb>
     ./quake2 +set vid_ref gl +set gl_driver lib3dfxgl.so 
     </verb></tscreen>

     To run with Mesa, do:
     <tscreen><verb>
     ./quake2 +set vid_ref gl +set gl_driver libMesaGL.so
     </verb></tscreen>

     Note that the <tt>.so</tt> files you refer to must exist in your
     quake2 directory.  A symbolic link is fine if, say, your Mesa library
     is in <tt>/usr/local/lib</tt> and you don't want to have two copies 
     around.
     
<sect1>The GLX Renderer<label id="quake2-glx"> ++
<p>

     <tt>ref_glx.so</tt> is linked against standard OpenGL libraries
     instead of Mesa.  This allows Quake II to run on other 3D
     hardware that is supported by other OpenGL implementations.  At
     this time, I dont' know of any OpenGL implementations that
     support hardware other than 3Dfx, but this renderer ensures that
     when they appear, we'll be able to play Quake II with them.

     Use of the GLX interface also removes GL Quake II's dependency
     on SVGAlib for keyboard and mouse input.

     This is a GLX application, and as such, must be run from X.

     You can use this client with Mesa/3Dfx if you install Mesa and
     Glide as explained in the previous section, then set the
     <tt>$MESA_GLX_FX</tt> environment variable to "fullscreen" before
     you run <tt>quake2</tt>:

     <tscreen><verb>
     export MESA_GLX_FX=fullscreen
     ./quake2 +set vid_ref glx +set _windowed_mouse 1
     </verb></tscreen>
 
     Why the <tt>+set _windowed_mouse 1</tt> option?  Remember that
     this is an X application which happens to use your 3Dfx card.
     Even though the display takes up your entire screen, Quake II is
     stil running in a window.  This means that if you're not
     <em>very</em> careful, you could move the mouse pointer outside
     the Quake II window, and Quake II will suddenly stop responding
     to mouse and keyboard input.  <tt>+set _windowed_mouse 1</tt>
     avoids this problem by telling <tt>quake2</tt> to grab the mouse
     and not let it move outside its window.

<sect1>Linux-Specific Command Line Options
<p>
     This section will cover command line options that are specific to the
     Linux version of Quake II.  There are plenty of other Quake II options,
     but they're beyond the scope of this HOWTO.  Check out some of the sites
     listed in section <ref id="general-quake-sources"
     name="General Quake Information"> for this kind of information.

     These are actually cvars (client variables) that you can set in the Q2
     console, but it makes the most sense to set them on the command line.
     Set them with <tt>+set</tt> on the command line, like:
     
     <tscreen><verb>
     ./quake2 +set cd_dev /dev/hdc
     </verb></tscreen>

     <descrip>
     <tag>cd_dev <em>device</em></tag>
     Name of the CD-ROM device.
     
     <tag>nocdaudio <em>value</em></tag>
     Disable CD audio if <em>value</em> is nonzero

     <tag>sndbits <em>num</em></tag>
     Set  sound bit sample size.  Default is 16.

     <tag>sndspeed <em>num</em></tag>
     Set sound sample speed.  Usual values are 8000, 11025, 22051 and 44100. 
     If set to zero, causes the sound driver to attempt speeds in the following
     order: 11025, 22051, 44100, 8000.

     <tag>sndchannels <em>num</em></tag>
     Indicates stereo or mono sound.  Defaults to 2 (stereo). Use 1 for mono.

     <tag>nostdout <em>value</em></tag>
     Don't do any output to stdout.  Use this if you don't want all the console
     output dumped to your terminal.
     </descrip>

<sect1>Quake II Servers ++
<p>
     Linux's strength as an internet server make it a perfect platform for
     running an internet Quake II server.  This section will touch on the
     basics and Linux-specific aspects of starting up a Quake II server.  Try
     <htmlurl url="http://www.3dgw.com/hellsgates/serverguide.htm" 
     name="http://www.3dgw.com/hellsgates/serverguide.htm"> for more detailed
     Quake II server setup information.

<sect2>Listen Servers
<p>
     You can start a Quake II "Listen" server from within the game via the
     <em>Multiplayer</em> menu.  This allows you to host a game and participate
     in it at the same time.

     To start a Listen server, start Quake II, bring up the Quake II menu with
     the ESC key, and select <em>Multiplayer</em>.  It should be pretty 
     self-explanatory from there. 
    
<sect2>Dedicated Servers
<p>
     For a permanent, stand-alone Quake II server that needs to run without
     constant attention, using the Listen server is impractical.  Quake II has
     a Dedicated server mode that is better suited to this type of use.  A 
     dedicated server is started from the command line and uses fewer system 
     resources than a Listen server because it doesn't start the graphical 
     client piece at all.  
     
     To start a dedicated server, use the command line option <tt>+set
     dedicated 1</tt>.  You can set additional server parameters either on the 
     command line or in a config file that you <tt>+exec</tt> on the command
     line.  Your config file should reside in the <tt>baseq2</tt> directory.

     A few common server options are listed below.  To set options on the
     command line, do <tt>+set fraglimit 30</tt>.  Options are set the same way
     in a config file, only you don't want the <tt>+</tt> before the
     <tt>set</tt>.  Invoke your config file like this: <tt>+exec
     server.cfg</tt>.

     <descrip>
     <tag>fraglimit</tag>
     Number of frags required before the map changes
     <tag>timelimit</tag>
     Time in minutes that must pass before the map changes
     <tag>hostname</tag>
     The name of your Quake II server.  This is an arbitrary string and
     has nothing to do with your DNS hostname.
     <tag>maxclients</tag>
     The maximum number of players that can connect to the server at once.
     </descrip>

     For enough Quake II console and command line information to choke a horse,
     see Farenheit 176 (<htmlurl url="http://www.planetquake.com/f176"
     name="http://www.planetquake.com/f176">).

<sect2>Other Sources of Server Information
<p>
     <itemize>
     <item>The Q2 Server FAQ has a basic step-by-step guide to set up a 
     Q2 Server under Linux: <htmlurl
     url="http://www.bluesnews.com/faqs/q2s-faq.html"
     name="http://www.bluesnews.com/faqs/q2s-faq.html">
     <item>Grant Cornelius Reticulus Copernicus Sperry (<htmlurl
     url="mailto:flubber@xmission.com" name="flubber@xmission.com">) has some
     basic Q2 server config files and startup scripts at <htmlurl
     url="http://www.atomicage.com:80/quake/server/server_cfg/"
     name="http://www.atomicage.com:80/quake/server/server_cfg/">.
     
     </itemize>

<sect1>Mods & Addons 
<p>
      Quake II modifications like Capture the Flag, Jailbreak, and Lithium
      II are very popular extensions of the original Quake II game.  Some 
      mods reside entirely on the server (Lithium), and some also require changes
      to your client (CTF).  For server only mods, you just connect normally
      and play.  Client-side mods require you to install additional files in
      your <tt>quake2</tt> directory before you can play.

<sect2>Client Side Mods 
<p>
      Generally, installation of a client-side mod consists of just
      downloading the client package and upacking it in your Quake II
      directory, but you should refer to the mod's documentation for specific
      details.  It may be necessary to download a Linux-specific package
      in addition to the main (Windows) client package.  Also be aware that all mods
      may not be available for Linux.

      Client-side mod packages usually contain a new <tt>gamei386.so</tt>
      file and one or more <tt>.pak</tt> files.  Other new files may be 
      included as well.  These new files will be installed in a subdirectory
      below your Quake II directory.  Use <tt>+set game <em>mod-dir</em></tt>
      on the command line to run the mod.  Rocket Arena 2, for example, gets
      installed in a directory called <tt>arena</tt>.  To play RA2,
      your would start your client like so:
      <tscreen><verb>
      ./quake2 +set game arena
      </verb></tscreen>

<sect3>Capture the Flag 
<p>
     Since this is by far the most popular variation of multiplayer Quake II,
     I've included specific instructions for installing this mod.  Capture
     the Flag for Quake II is available from id's ftp site.  Download
     it, then install like so:

     <tscreen><verb>
     cd /usr/local/games/quake2
     mkdir ctf
     cd ctf
     unzip -L /wherever/you/put/it/q2ctf102.zip
     </verb></tscreen>

     Start Quake II with <tt>+set game ctf</tt> to play CTF.

<sect2>Server Side Mods 
<p>
     Running a Quake II mod on a server isn't much different than running one
     on the client side.  Generally you'll need to install <tt>gamei386.so</tt>
     and <tt>server.cfg</tt> files in a new subdirectory and then start your 
     server like 
     <tscreen><verb>
     ./quake2 +set game XXXX +set dedicated 1 +exec server.cfg
     </verb></tscreen>
     Where XXXX above is the name of the mod's new subdirectory.  The exact
     procedure will vary from mod to mod, of course.  See the mod's documentation
     for specific details.

<sect2>Game Source ++
<p>
      The entire game, with the exception of the engine itself, resides in a
      shared library, <tt>gamei386.so</tt>.  Quake II mods are created by 
      changing the contents of this file.  The C source is freely available
      (section <ref id="quake2-files" name="Download the Necessary Files"> above)
      for anyone to download and modify.

      After you've downloaded the source, here's how to get started with it:

      <tscreen><verb>
      cd /usr/local/games/quake2
      mkdir mymod
      cd mymod
      gunzip /wherever/you/put/it/q2src320.shar.Z
      sh /wherever/you/put/it/q2src320.shar
      </verb></tscreen>

      You'll be presented with a bunch of legalese that you must answer
      <tt>yes</tt> to, then the game source will be extracted.  Building a new
      <tt>gamei386.so</tt> out of these sources is accomplished with a simple
      <tt>make</tt>.  You can run Quake II with the newly compiled library like
      so:

      <tscreen><verb>
      cd /usr/local/games/quake2
      ./quake2 +set game mymod
      </verb></tscreen>

      Not too exciting yet, since what you just built is identical to the 
      "stock" <tt>gamei386.so</tt>, but this should be good information for
      aspiring mod authors.

<sect2>Mission Packs 
<p>
     <itemize>
     <item><bf>Mission Pack 1: The Reckoning</bf>
     The Reckoning requires Quake II version 3.15 or later to run.  You'll need at least
     95 MB for a minimum installation.  Another 90 MB are required if you want
     to install the video sequences as well.  Assuming your CD is mounted on
     <tt>/mnt/cdrom</tt> and Quake II is installed in
     <tt>/usr/local/games/quake2</tt>:

     <tscreen><verb>
     cd /usr/local/games/quake2
     cp -r /mnt/cdrom/Data/all/* xatrix/
     rm -f xatrix/gamex86.dll
     </verb></tscreen>

     If you want to install the video sequences:

     <tscreen><verb>
     cp -r /mnt/cdrom/Data/max/xatrix/video xatrix
     </verb></tscreen>

     Play The Reckoning like this:
     <tscreen><verb>
     cd /usr/local/games/quake2
     ./quake2 +set game xatrix
     </verb></tscreen>

     <item><bf>Mission Pack 2: Ground Zero</bf>
     It requires Quake II version 3.17 or later to run.  You'll need at least
     120 MB for a minimum installation.  Another 115 MB are required if you want
     to install the video sequences as well.  Assuming your CD is mounted on
     <tt>/mnt/cdrom</tt> and Quake II is installed in
     <tt>/usr/local/games/quake2</tt>:

     <tscreen><verb>
     cd /usr/local/games/quake2
     cp -r /mnt/cdrom/Data/all/* rogue/
     rm -f rogue/gamex86.dll
     </verb></tscreen>

     If you want to install the video sequences:

     <tscreen><verb>
     cp -r /mnt/cdrom/Data/max/rogue/video rogue
     </verb></tscreen>

     Play Ground Zero like this:
     <tscreen><verb>
     cd /usr/local/games/quake2
     ./quake2 +set game rogue
     </verb></tscreen>

     </itemize>

<!--=================================================================-->
<sect>Related Software<label id="related-software"> 
<p>

<sect1>QStat
<p>
     Qstat is a command line based program that returns the status of internet
     Quake, QuakeWorld, and Quake 2 servers created by Steve Jankowski <htmlurl
     url="mailto:steve@activesw.com" name="mailto:steve@activesw.com">.

     Here's the feature summary from the QStat homepage:
     <itemize>
     <item>Supports Windows 95, NT, and most Unixes 
     <item>Comes with C source code and a binary for Windows 
     <item>Supports old Quake (NetQuake), QuakeWorld, Hexen II, and Quake II
     servers 
     <item>Can display all available statistics, including player info and
     server rules 
     <item>Output templates for automatic HTML generation 
     <item>Raw display mode for integration with HTML page generators 
     <item>Built-in host name cache 
     <item>Sort by ping time, game, or both 
     <item>More options than you can wiggle a mouse at 
     </itemize>

     Qstat is a must-have tool if you're planning on doing any net play.  A 
     number of front-ends for qstat have been written as well.  Some of them 
     are listed later in this section.
     
     You can get the latest version of qstat from the QStat Homepage (<htmlurl
     url="http://www.activesw.com/people/steve/qstat.html"
     name="http://www.activesw.com/people/steve/qstat.html">).

<sect1>XQF 
<p>
     XQF is a graphical front-end to QStat that uses the GTK toolkit.  This is
     the best QuakeWorld/Quake2 server browser that currently exists, and 
     Roman Pozlevich (<htmlurl url="mailto:roma@botik.ru"
     name="roma@botik.ru">), is still cranking out revisions at the rate of 
     about one per month.

     If you're familiar with GameSpy for the Windows platform, this is the 
     closest thing to it for Linux.

     The XQF homepage is at <htmlurl url="http://www.linuxgames.com/xqf"
     name="http://www.linuxgames.com/xqf">.

<sect1>QuickSpy
<p>
     QuickSpy is a text-based QuakeWorld server browser.  It's another
     front-end to QStat and it works pretty well.  If you don't run X and
     you don't have Quake II, this is a decent option.  Beware though, it's no
     longer under development. 
     
     
     You can get QuickSpy at <htmlurl
     url="http://diana.ecs.soton.ac.uk/~rht96r/quake/quickspy/"
     name="http://diana.ecs.soton.ac.uk/~rht96r/quake/quickspy/">.

<sect1>QPlug for Linux
<p>
     Qplug is a Netscape plugin which retrieves and displays QuakeWorld and
     Quake II server information embedded in a web page. A Windows Qplug has
     been around for some time.  The author, Olivier Debon (<htmlurl
     url="mailto:odebon@club-internet.fr" name="odebon@club-internet.fr">)
     wrote the Linux version from scratch without ever having seen the Windows
     version.

     QPlug for Linux can be got at <htmlurl
     url="http://www.geocities.com/TimesSquare/Labyrinth/5084/qplug.html"
     name="http://www.geocities.com/TimesSquare/Labyrinth/5084/qplug.html">.

<sect1>qkHacklib
<p>
     David Bucciarelli (<htmlurl url="mailto:tech.hmw@plus.it"
     name="tech.hmw@plus.it">), author of the 3Dfx driver for Mesa, has 
     written a library called qkHack, which tries to emulate all the 
     SVGAlib/fxMesa functions used by Quake and Quake II.  This would remove
     the need for SVGAlib when running glquake or Quake II with ref_gl.
     Other features from the qkHacklib README:

     <itemize>
     <item>You can dynamically switch between fullscreen rendering and the in
     window rendering just pressing the TAB key (you must start your X server
     in 16 bpp mode in order to use this feature)
     <item>You can press Ctrl-C in the shell or kill the Quake process without
     problems
     <item>you can enable/disable the mouse and keyboard 'grabbing' pressing
     F11/F12
     <item>you can iconify and pause Quake pressing the F10 (it will not
     eat more CPU cycles). You can restart everything with a double
     click in the "****" icon
     <item> you can run Quake with any Mesa driver (for example with the
     X11 driver but you must recompile the Mesa without the Voodoo
     driver)
     <item>you can run Quake under any Linux box and get the hardware
     acclerated output on a SGI box (OK, this is a bit exotic and
     theoretical as feature but it is an example of how powerful can be an
     GLX/OpenGL application)
     </itemize>

     I've tried qkHacklib and it works great for Quake on my system.  In 
     Quake II, however, the mouse response becomes <em>really</em> slow.
     Others report complete success, though, so give it a try if it sounds 
     like something you need.

     David Bucciarelli's qkHacklib web page is at <htmlurl
     url="http://www-hmw.caribel.pisa.it/fxmesa/fxqkhack.html"
     name="http://www-hmw.caribel.pisa.it/fxmesa/fxqkhack.html">.

<sect1>GiMd2Viewer
<p>
     GiMd2Viewer is a Quake 2 model viewer written for Gtk and OpenGL by 
     Lionel Ulmer (<htmlurl url="mailto:bbrox@mygale.org"
     name="bbrox@mygale.org">). It loads models and textures from either plain
     files or .PAK files.  It will also animate the models (with frame
     interpolation). 

     This program is still under developement and I haven't tried it yet, but
     it sounds pretty nifty.  Check it out at <htmlurl
     url="http://www.mygale.org/~bbrox/GiMd2Viewer/"
     name="http://www.mygale.org/~bbrox/GiMd2Viewer/">.

<sect1>QIPX 
<p>
     QIPX is a set of programs that allow Linux Quake clients (using TCP/IP) to
     connect with DOS Quake clients (using IPX).  I guess this is useful if
     you're playing netquake on a LAN.  QIPX is available at 
     <htmlurl url="http://www.geocities.com/SiliconValley/Park/6083/qipx.html"
     name="http://www.geocities.com/SiliconValley/Park/6083/qipx.html">.

<sect1>Ice 
<p>
     Ice is a Quake map editor for UN*X created by C.J. Beyer and John Watson.
     I haven't used this program, nor do I know what its development status is.
     The Ice homepage is at <htmlurl url="http://styx.phy.vanderbilt.edu/~ice/"
     name="http://styx.phy.vanderbilt.edu/~ice/">.

<sect1>Q2getty 
<p>
     Q2getty is a hack of mingetty by Mike Gleason (<htmlurl
     url="mailto:mgleason@ncftp.com" name="mgleason@ncftp.com">) that allows you to
     automatically run and respawn a program (like a Quake server) on a 
     virtual console.
     This program is available in the files section at <htmlurl
     url="http://www.ncftpd.com/unixstuff/q2getty.html"
     name="http://www.ncftpd.com/unixstuff/q2getty.html">.

<sect1>rcon 
<p>
     Rcon is a pair of tools that allow remote administration of a Quake II
     server using the RCON protocol.  Michael Dwyer (<htmlurl
     url="mailto:mdwyer@holly.colostate.edu" name="michael_dwyer@mwiworks.com">)
     is the author.  Rcon 1.1 is available at <htmlurl
     url="http://sunsite.unc.edu/pub/Linux/games/quake/rcon-1.1.tar.gz">.

<sect1>qlog 
<p>
     Qlog is a GPL'ed QuakeWorld/Quake II server log parser that generates
     comprehensive player statistics.   Craig Knudsen (<htmlurl
     url="mailto:cknudsen@radix.net" name="cknudsen@radix.net">) is the author.
     The qlog homepage is <htmlurl url="http://www.radix.net/~cknudsen/qlog/"
     name="http://www.radix.net/~cknudsen/qlog/">.

<sect1>Cheapo 
<p>
     Cheapo is a proxy that can be used to route QuakeWorld network
     traffic. Additionally, the proxy can modify the data and has features
     for enhancing gameplay. You can connect to cheapo as if it were a
     Quakeworld server, and then give it commands that forward you to a
     real server.  The proxy can also be run on a firewall machine
     incapable of handling Quake traffic, so that machines inside the
     firewall can be used for playing.  
     The Cheapo homepage is at <htmlurl
     url="http://www.saunalahti.fi/~softech/"
     name="http://www.saunalahti.fi/~softech/">.

<sect1>qgraph 
<p>
     QGraph (Quake Graph) is a utility to help people in managing Quake's
     DeathMathes, turnments and Quakeworld games.
     QGraph is a program who connects (via Lan or the Internet) to a Quake,
     QuakeII, Quakeworld and Hexen2 Servers and shows you realtime data about
     the game running on that server. 
     The QGraph homepage is at <htmlurl
     url="http://www.frag.com/qgraph"
name="http://www.frag.com/qgraph">.

<sect1>Vispatch ++
<p>
      Vispatch is a utility that patches your Quake 1/QuakeWorld levels to
      support transparent water.  This Windows utility has been around almost since
      the dawn of GLQuake, but just recently (to my knowledge) a Linux version has surfaced.  The
      WaterVis homepage is at <htmlurl url="http://www.sod.net/vis" name="http://www.sod.net/vis">.
      You can download the Linux version of the Vispatch utility at <htmlurl
      url="http://www.sod.net/vis/files/unixvis.zip" name="http://www.sod.net/vis/files/unixvis.zip">.  

<sect1>GStat ++
<p>
      GStat is a server query tool by Aaron Levinson based on QStat, but with some unique extra
      features.  From the GStat homepage:
      GStat (GameStat) is a utility for querying Quake, Quakeworld, Quake II and Hexen II servers. 
      It has three main functions: 

          1.Displays statistics for Quake-based servers 
          2.Functions as a remote server administration tool 
          3.Console-based server browser for finding a server to play on 

      Find out more at <htmlurl url="http://www.ews.uiuc.edu/~alevinsn/gstat.html"
      name="http://www.ews.uiuc.edu/~alevinsn/gstat.html">.

<sect1>QuakeLaunch ++
<p>
      QuakeLaunch is a nice, simple Quake server browser that you can run in the console. It's
      based on qstat by Steve Jankowski.   If you can't or don't want to use an X-based server
      browser like XQF, this is a good alternative.  The QuakeLaunch homepage is at <htmlurl
      url="http://www.linuxgames.com/qlaunch" name="http://www.linuxgames.com/qlaunch">.

<sect1>QPLog ++
<p>
      The Quake Player Log is a master/client Perl program that keeps track of player statistics.
      The object of this program is similar to what the original QuakeWorld attempted.  Server
      logs are sent to the central QPLog master, which keeps track of player statistics and ranks
      players according to a number of factors.  <htmlurl url="http://junior.ece.ucdavis.edu/qplog/"
      name="http://junior.ece.ucdavis.edu/qplog/">

     
<!--==============================================================-->
<sect>Troubleshooting/FAQs<label id="troubleshooting">
<p>

<sect1>General
<p>

<sect2>OS difference considerations 
<p>
     <itemize>
     <item><bf>Case sensitivity</bf> - In DOS and Windows, case is not important.
     <tt>BASE1.TXT</tt> is the same as <tt>base1.txt</tt> is the same as <tt>Base1.Txt</tt>.
     Under Linux and other
     unices, case IS significant.  <tt>MOTD.TXT</tt> and <tt>motd.txt</tt> are
     different files.  This can cause problems with player models and skin files
     if they're installed with upper- or mixed-case filenames.
     <tt>players/male/santa.PCX</tt> needs to be renamed to <tt>santa.pcx</tt> in
     order for the Santa skin to be visible in Linux.  The <tt>fixskins.sh</tt> script included with 
     quakeworld will convert all filenames in a directory to lowercase. It's
     reproduced below for your convenience:
     <code>
     #!/bin/sh
     for x in *; do
        y=`echo $x | tr '[A-Z]' '[a-z]'`
        if [ $x != $y ]; then
           mv $x $y
        fi
     done
     </code>

     <item><bf>Path delimiters</bf> - DOS and Windows use the backslash "<tt>\</tt>"
     character to separate file pathname elements.  In Unix, the backslash is an escape
     character.  Quake and Quake2 for Windows recognize both "<tt>\</tt>" and "<tt>/</tt>"
     as valid path delimiters, so if you use file pathnames in your config files (or your
     mod code, or anywhere else, for that matter), be sure you're using "<tt>/</tt>" and
     not "<tt>\</tt>".

     <item><bf>End of line characters</bf> - Under DOS/Windows, each line of a text file
     ends with a carriage return character (CR) and a linefeed character (LF).  Unix
     textfiles just have a linefeed at the end of each line.  Using DOS/Win formatted
     textfiles in Unix can cause all kinds of mysterious Quake problems.  For example,
     the incorrectly formatted <tt>quake2.conf</tt> file from the Quake2 3.17 package
     generated the error "<tt>LoadLibrary("ref_XXX.so") failed: No such file or
     directory</tt>".  LMCTF-TE reports a floating point exception.
     If you've got an problem you can't explain, try removing the CRs from your text
     files:  
     <tscreen><verb>
     mv file.txt file.bak; tr -d '\r' < file.bak > file.txt
     </verb></tscreen>
     </itemize>

<sect2>Glibc, RedHat 5.x, Debian 2 considerations (for Quake 1 only)<label id="glibc">++
<p>
     [The following applies to the Quake I binaries (<tt>squake</tt>,
     <tt>glquake</tt>, and <tt>quake.x11</tt>) only.  As of versions
     2.30 and 3.19 respectively, QuakeWorld and Quake II are available
     in both libc5 and glibc versions.]

     The Quake executables were compiled with libc5.  Newer Linux
     distributions like RedHat 5.1 and Debian 2.0 use the incompatible
     libc6 (or glibc) as their default C library.  If you're running Quake on a
     glibc system, there are a few things to watch out for:

     <itemize>
     <item>Both RedHat 5 and Debian 2 have libc5 compatibility packages that allow
     you to run libc5-based applications.  Make sure you have these packages installed.
     Both distributions put the libc5-based libraries in <tt>/usr/i486-linux-libc5/lib</tt>.
     <item>Make sure Quake uses the correct libraries.  Create a script like the one below 
     that points <tt>$LD_LIBRARY_PATH</tt> to your compatibility libraries directory before
     it runs Quake.
     <code>
     #!/bin/sh
     export LD_LIBRARY_PATH=/usr/i486-linux-libc5/lib
     ./quake2 +set vid_ref gl $*
     </code>
     <item>If you are going to compile a library like SVGAlib or Mesa
     for use with Quake, it must be compiled with libc5 and friends.
     Simply building a new library according its installation
     instructions will result in a library that is linked against your
     default library, glibc.  You must ensure your new library is
     linked only with libc5 and libc5-based libraries so it will be
     compatible with Quake.  See your distribution's documentation for
     information on linking to the non-default libraries.
     </itemize>
     

<sect2>My mouse doesn't work or seems to respond randomly. **
<p>
     <itemize>
     <item>Is gpm running?  gpm is a program that enables you to cut and paste
     with the mouse in virtual consoles.  Many distributions enable it by
     default.  It may be interfering with Quake.  Check if it's running with
     the following command:
     <tscreen><verb>
     ps aux | grep gpm
     </verb></tscreen>
     If you get output like
     <tscreen><verb>
     root      6115  0.0  0.4   832   316  ?  S   17:54   0:00 gpm -t PS/2
     </verb></tscreen>
     then gpm is running and interfering with Quake.  <tt>gpm -k</tt> (as root)
     ought to stop gpm.  If it doesn't (<tt>gpm -k</tt> doesn't always work on 
     my system),  kill gpm with the command <tt>killall gpm</tt>.

     If you never use gpm, you may want to stop it from running at startup.
     See the documentation for your distribution for information on how to do
     this.
     <p>
     <item>Is your mouse defined properly in <tt>libvga.config</tt>?  This file
     usually lives in <tt>/etc</tt> or <tt>/etc/vga</tt>.  Open it up and look
     for a line like
     <tscreen><verb>
     mouse Microsoft
     </verb></tscreen>
     On my system, this is the first option in the file.  Make sure the mouse
     type is appropriate for your hardware.  
     <p>
     <item>Do you have RW permissions for your mouse device?  The permissions
     of your mouse device may only allow you read access to it.  Quake wants
     to open it read-write, so you'll need to either do a <tt>chmod 666</tt> to it,
     or run as a user or group that's allowed to read and write to it.  
     The actual device file in question will vary according what type of mouse
     you have on your system.  Most of the time, <tt>/dev/mouse</tt> is a 
     symbolic link  to your actual mouse device file, so doing  an
     <tt>ls -l /dev/mouse</tt> should allow you to find which device file to modify.
     
     </itemize>

<sect2>My Microsoft Intellimouse or Logitech MouseMan+ isn't working correctly. 
<p>
     SVGAlib, which handles mouse input for SVGA and GL Quake/QW/Q2,
     didn't directly support the Intellimouse until version 1.3.0.  If you have a
     version of SVGAlib prior to 1.3.0, you should upgrade, then use mouse
     type <tt>IntelliMouse</tt> (for serial mice) or <tt>IMPS2</tt> (for
     PS/2 mice) in your <tt>libvga.config</tt> file.

<sect2>My mouse is "laggy" and seems much slower than under Windows.
<p>
     <itemize>
     <item>For many people, just cranking up the value of
     <tt>sensitivity</tt> in the game console cures the problem.
     Setting <tt>sensitivity</tt> by hand in the console or in a
     <tt>.cfg</tt> file allows you to increase the mouse sensitivity
     more than the slider in the Options menu allows.  <tt>sensitivity 15</tt>,
     for example.

     <item> From Zoid's 1/7/98 .plan update:
     <quote>If you are experience video 'lag' in the GL renderer (the frame
     rate feels like it's lagging behind your mouse movement) type 
     "gl_finish 1" in the console. This forces update on a per frame
     basis.</quote>

     <item>The latest version of SVGAlib (1.3.0) provides a slew of parameters
     in <tt>libvga.config</tt> that you can use to customize the behavior of 
     your mouse.  With the proper settings it should be possible to make your
     mouse feel any way you want.  On my system, just changing
     <tt>mouse_accel_type</tt> to <tt>normal</tt> (default is <tt>power</tt>)
     gave me the results I wanted.  I haven't messed with the other settings,
     and I don't pretend to have a clue about what they all do.

     </itemize>

<sect2>I have a Voodoo2, and when I try to run with the gl renderer it reports that I don't have a Voodoo card installed.
<p>
     There are different versions of Glide for Voodoo and Voodoo 2 cards.  Be
     sure you downloaded the correct one for your system.


<sect2>When I'm playing any of the Quake games under SVGAlib or GL and press CTRL-C, the game exits and sometimes leaves my console in an unusable state.
<sect2>Sometimes when Quake/Quake II exits abnormally, it leaves my console unusable.
<p>
     Yes.  This bites.  SVGAlib catches the CTRL-C and decides what to do with
     it instead of allowing Quake to handle it.  I know of no way around this
     short of hacking SVGAlib.  

     If you run your Quake games from a script that resets the
     keyboard and terminal like the one below, you'll run
     less chance of ending up with a hosed terminal if this does happen, though.

     <code>
     #!/bin/sh
     ./quake2 $*
     kbd_mode -a
     reset
     </code>

<sect2>squake/quake2 fails to start and says "<tt>svgalib: cannot get I/O permissions"</tt>
<p>
     The Quake executables must run as root when using the SVGAlib renderer, so
     you must either run them as root or make them setuid root.  See the installation
     instructions in this document for details.

<sect2>Sometimes after  playing one of the Quake games in X, key repeat doesn't work any more.
<p>
     For some reason, the X11 versions of Quake disable key repeat while
     they're running.  If the program exits abnormally for some reason, key
     repeat never get turned back on. Do
     <tscreen><verb>
     xset r on
     </verb></tscreen>
     to reenable it.

<sect2>Quake/Quake II says "/dev/dsp : device not configured" 
<p>
     Your sound hardware is not properly configured.  You may simply need to do
     a <tt>insmod sound</tt>, or it may be necessary to rebuild your kernel.
     RedHat users may need to invoke the <bf>sndconfig(8)</bf> utility.
     See the documentation for your Linux distribution and/or the Linux Sound
     HOWTO for information on configuring your system's sound hardware.

<sect2>GL Quake/Quake II run slower in Linux than in Windows. ++
<p>
     The Windows 3Dfx GL miniport is heavily optimized for the things
     Quake II does.  Mesa on the other hand, is more general and less optimized
     As a result, Linux Quake II runs slower than under Windows.  This isn't a
     limitation of Linux, but a limitation of the current drivers. 

     With the most recent releases of QuakeWorld and Quake II, the
     3Dfx miniport mentioned above is available for Linux.  Also, in Quake II
     version 3.20, the OpenGL function handling code was completely rewritten,
     resulting in significant speedups.  
     
     Additionally, for Pentium Pro and Pentium II users, there are
     some tweaks than can be done with memory buffering - the latest
     <tt>/dev/3dfx</tt> device driver has support for automatically
     setting this up for you.  Enabling MTRRs can result in
     <em>significant</em> (10 fps on my system) GL Quake speedups. See <htmlurl
     url="http://glide.xxedgexx.com/MTRR.html"
     name="http://glide.xxedgexx.com/MTRR.html"> for some more
     detailed information about this.

     On a PPro/PII system with a Voodoo2, performance under Linux is now at
     least as fast as under Windows.

<sect2>How can I start a server and log off, then come back to it later? 
<p>
     <bf>screen(1)</bf> is a great utility for this sort of thing.  It
     allows you to create many virtual screens in one tty and switch
     between them.
     Screen comes with most distributions.  You can download it from 
     <htmlurl url="ftp://prep.ai.mit.edu/pub/gnu"
     name="ftp://prep.ai.mit.edu/pub/gnu">
     or any GNU mirror.

     Start screen by typing the command <tt>screen</tt>, then create a new
     screen window by pressing CTRL-A CTRL-C.  You won't see much as
     you do these things, but be assured, something is happening.  
  
     Start a Quakeworld server:
     <tscreen><verb>
     /usr/local/games/quake/qwsv 
     </verb></tscreen>

     Now open a new screen window with CTRL-A CTRL-C and start up a 
     Quake II server:
     <tscreen><verb>
     /usr/local/games/quake2/quake2 +set dedicated 1
     </verb></tscreen>

     You can switch back and forth between your servers by pressing
     CTRL-A CTRL-N.

     Press CTRL-A CTRL-D to detach from the screen program.  Screen
     and your servers are still running, but they're no longer visible
     in your terminal window.  You can logoff now and your processes
     will continue to run normally.
 
     Use <tt>screen -r</tt> to re-attach to your previous screen
     process and access your servers again.  

     That's all there is to it.  See the <bf>screen(1)</bf> man page
     for more detailed information.

<sect2>How can I keep the mouse from leaving the window in X? ++
<p>
     From the Quake II <tt>readme.linux</tt> file (this applies to all version of Quake):
     <quote>By default, the mouse will not be 'tied' to the Quake2 window.
     To cause Quake2 to grab the mouse, select 'Windowed Mouse' from the video
     menu, or type '_windowed_mouse 0' at the console.  Do the reverse to
     release it.  You can bind keys to grab and release the mouse in the
     console, like so:
       bind i "_windowed_mouse 1"
       bind o "_windowed_mouse 0"
     Then "i" will grab the mouse and "o" will release it.
     </quote>

<sect2>When I run Quake/QuakeWorld/Quake II under X, the image only takes up half the window and/or the colors are all funny. ++
<p>
     The X clients only support color depths of 8 and 16 bits per pixel.  Your
     X server is probably running at 24 or 32 bpp.  Change the default color depth
     to 16 bpp and this problem will go away.

<sect2>Where can I get the source code for Quake/QuakeWorld/Quake II so I can compile it for PPC/Alpha/Gameboy/etc? ++
<p>
     The source code for the Quake engines is the proprietary property of id Software.  While
     there's a good chance that id will release the source to Quake eventually like they did
     for Wolfenstein 3-D and Doom, they have not done so yet.  I don't have the source to Quake
     no matter how nicely you ask me for it.


<sect1>Quake/QuakeWorld
<p>
<sect2>Quake dies at startup with a segmentation fault. 
<p>
     This usually means your network setup isn't right.  Try starting quake
     with the <tt>-noudp</tt> option and see if the error goes away.  If that
     fixes it, check your <tt>/etc/hosts</tt> file and verify there's an 
     entry for your machine in it.  Use 127.0.0.1 for your IP address if you
     have a dialup account that gives you a different address each time you 
     connect.

<sect2>What's the difference between <tt>glqwcl</tt>, <tt>glqwcl.3dfxgl</tt>, and <tt>glqwcl.glx</tt>? 
<p>
     <itemize>
     <item><bf><tt>glqwcl</tt></bf> is the standard GL Quakeworld client you've
     seen in previous versions.  It's linked against libMesaGL.so.2.
     <item><bf><tt>glqwcl.3dfxgl</tt></bf> is a script that runs <tt>glqwcl</tt>
     after preloading the 3Dfx GL miniport library, <tt>lib3dfxgl.so</tt>.  Preloading
     the minport library causes its GL functions to get used instead of Mesa's.  Since
     the GL minport is optimized for Quake, this is a good thing.
     <item><bf><tt>glqwcl.glx</tt></bf> is linked against standard OpenGL libriaries
     instead of Mesa.  This will allow glquake to run on other 3D hardware that is 
     supported by some other OpenGL implementation.  This is an X application and 
     so must be run from X.
     </itemize>

<sect2>When I run <tt>glqwcl.glx</tt> fullscreen from X, I can't use my mouse or keyboard. 
<p>

     Run <tt>glqwcl.glx</tt> with the <tt>+_windowed_mouse 1</tt>
     option. GLX Quakeworld is running in a window, even though it
     appears to take up your whole screen.  If you move the mouse
     while the window manager is in focus-follows-mouse mode, you're likely to
     move the pointer outside this window, and then Quake will stop
     responding to mouse and keyboard input.  <tt>+_windowed_mouse 1</tt>
     makes Quakeworld grab the mouse exclusively.
    
<sect1>Quake II
<p>
<sect2>When I try to run Quake II with the GL renderer, it fails and says "LoadLibrary("ref_gl.so") failed: Unable to resolve symbol"
<p>
     If immediately prior to the "Unable to resolve symbol" line, you have 
     messages like "<tt>can't resolve symbol 'fxMesaCreateContext'</tt>", your
     Mesa library doesn't have glide support compiled in.  
     See section <ref id="quake2-gl" name="The GL renderer"> in the 
     Quake II installation section for information on installing Mesa and
     glide.

<sect2> Quake II fails with the message <tt>LoadLibrary("ref_XXX.so") failed: No such file or directory </tt>
<p>
     <itemize>
     <item><tt>/etc/quake2.conf</tt> doesn't have the correct path to your
     Quake II directory in it.  This file should contain one line that is the
     directory Quake II lives in.

     <item>If <tt>/etc/quake2.conf</tt> <em>does</em> contain the correct
     path, try removing the file and re-creating it by hand.  Some versions of 
     Quake II for Linux included an incorrectly formatted <tt>quake2.conf</tt>
     file.  
     
     <item>Do you have SVGAlib installed?  Check <tt>/lib</tt>,
     <tt>/usr/lib</tt> and <tt>/usr/local/lib</tt> for a file called
     <tt>libvga.so.1.X.X</tt>, where the X's are some numbers.  If nothing
     turns up, you need to get and install SVGAlib to run Quake II outside of 
     X.

     <item>If the renderer in question is <tt>ref_gl.so</tt>, Mesa may not be
     properly installed.  Did you copy <tt>libMesaGL.so.2.6</tt> to a 
     library directory like the installation instruactions told you to?  
     
     <item>If the renderer in question is <tt>ref_gl.so</tt>, did you install
     the glide libraries?  

     </itemize>


<sect2>When I update the brightness while using the GL renderer, and hit "apply," nothing happens!
<p>

     Type <tt>vid_restart</tt> in the console to make the changes take 
     affect.


<sect2>Note about the 3.17 distribution<label id="3.17">
<p>

     As of this writing, the most recent Quake II version is 3.20.  If
     for some reason, you're running version 3.17 instead, the
     following information may be helpful to you.

     Two text files (<tt>quake2.conf</tt> and <tt>fixperms.sh</tt>) in the 3.17
     distribution were inadvertently saved in MS-DOS CR/LF text-file format
     instead of the unix LF format.  This means there's an extra carriage
     return character at the end of each line in these files and they're not 
     going to behave right until you fix them.

     We'll run them through <bf>tr(1)</bf> to strip out the CR's. 

     <tscreen><verb>
     for i in fixperms.sh quake2.conf
     do
     mv $i $i.bak
     tr -d '\r' < $i.bak > $i
     done
     </verb></tscreen>

<sect2>When I run Quake II with <tt>+set vid_ref glx</tt> fullscreen from X, I can't use my mouse or keyboard. 
<p>

     Run GLX <tt>quake2</tt> with the <tt>+set _windowed_mouse 1</tt>
     option. GLX Quake2 is running in a window, even though it
     appears to take up your whole screen.  If you move the mouse
     while the WM is in focus-follows-mouse mode, you're likely to
     move the pointer outside this window, and then Quake II will stop
     responding to mouse and keyboard input.  <tt>+set _windowed_mouse
     1</tt> makes Quake II grab the mouse exclusively.

<sect2>Why can't I change to some of the SVGA modes that are in the Quake II Video menu? 
<p>
     SVGAlib probably doesn't know how to create the modes on your card.
     When Quake II starts up with the SVGA renderer (<tt>ref_soft.so</tt>),
     it prints a list of all the modes that SVGAlib tells it are available:
     <tscreen><verb>
     ------- Loading ref_soft.so -------
     Using RIVA 128 driver, 4096KB.
     mode 320: 200 1075253220
     mode 320: 240 1075253220
     mode 320: 400 1075253220
     mode 360: 480 1075253220
     mode 640: 480 1075253220
     mode 800: 600 1075253220
     mode 1024: 768 1075253220
     mode 1280: 1024 1075253220
     </verb></tscreen>
     These are the only modes you will be able to successfully switch to from 
     the Video menu.  If say, 512x384 isn't on the list, selecting it from the
     Video menu won't work.

     SVGAlib does let you define new video modes for some chipsets in
     <tt>libvga.config</tt>, so you may be able create your own video mode this
     way.  See the SVGAlib documentation for more detail on this topic.

<sect2>When I try connect to a Quake II server that's running a mod, quake2 crashes with the message "Error: VID: Could not open display". **
<p>

     According to Zoid, this problem occurs when the video system restarts
     due to a gamedir change.  Several libraries get unloaded and reloaded during
     the restart, and this apparently causes quake2 to blow chunks on many systems.

     The workaround solution is to set the <tt>game</tt> CVAR on the command line before
     you start up <tt>quake2</tt>.  So if you're going to connect to a CTF server,
     you'd start <tt>quake2</tt> like:
     <tscreen><verb>
     ./quake2 +set game ctf ...
     </verb></tscreen>
     This may seem inconvenient if you're used to connecting to new servers without
     leaving the quake2 program, but unfortunately
     it's the only way around this problem right now.  A frontend program like
     XQF will automatically do this command line stuff for you, so you ought to consider
     using one if you're not currently doing so. 


<!--==============================================================-->
<sect>Tips & Tricks<p>
<p>

<sect1>Running X and GL games without setuid  <label id="no-setuid"> 
<p>
     If you only run the X and GL versions of Quake, QuakeWorld or Quake II,
     you don't need to run them with root permissions.  SVGA is the only mode
     that must be run as root.  The X versions just need access to 
     <tt>/dev/dsp</tt>, the sound device.  The GL versions need access to the
     3Dfx card as well as to <tt>/dev/dsp</tt>.

     <tt>/dev/dsp</tt> needs to be readable and writeable by Quake.  Most 
     distributions give it 662 (<tt>rw-rw--w-</tt>) permissions by default.  The
     simplest solution is to just <tt>chmod 666 /dev/dsp</tt>.  On most systems,
     the ability to read from the sound device will not pose a significant security
     threat.  If this approach is unacceptable for your system, create a group that
     owns <tt>/dev/dsp</tt> and make your Quake players members of that group.

     You need the <tt>/dev/3dfx</tt> driver from Daryll Strauss' glide page
     (<htmlurl url="http://glide.xxedgexx.com/3DfxRPMS.html"
     name="http://glide.xxedgexx.com/3DfxRPMS.html">) in order run glide 
     applications (like GLQuake) non-root.  Download the <tt>Device3Dfx.xxx.rpm</tt>
     package and install according to the instructions on the web page.
     After you've installed the driver, make sure <tt>/dev/3dfx</tt> has
     666 permissions (<tt>chmod 666 /dev/3dfx</tt>).

     When <tt>/dev/dsp</tt> and <tt>/dev/3dfx</tt> are properly set up, you can
     remove the setuid bit from your Quake/QW/Q2 executables.  Just do
     (as root) <tt>chmod 0755 XXXXX</tt>, where <tt>XXXXX</tt> is either <tt>glquake</tt>,
     <tt>quake.x11</tt>, or <tt>quake2</tt>.

     If you've been playing as root prior to making these changes, many of your Quake
     files (like savegames) may be owned by root and inaccessible to a normal
     user, so remember to change the files' ownership before you attempt to
     play the game non-root.


<sect1>Running SVGA and GL games from X <label id="running-from-x">
<p>
     The GLX Quakeworld and Quake II clients are native X
     applications, but since they use Mesa rather than the 3Dfx
     mini-driver, they're slower than the <tt>lib3dfxgl.so</tt>
     versions.  For this reason, you may still favor this way of starting
     games from X over using the GLX clients.
 
     This is based on a Linux Gazette 2 Cent Tip by Joey Hess (<htmlurl
     url="mailto:joey@kite.ml.org" name="joey@kite.ml.org">) The original is at
     <htmlurl url="http://www.ssc.com/lg/issue20/lg_tips20.html#squake"
     name="http://www.ssc.com/lg/issue20/lg_tips20.html#squake">
   
     Yes, it's possible to run the Quake games from X if you're root, but such
     behavior is naughty, and you still run the risk of having Quake crash
     and leave the console unresponsive.  With a little work you can make it
     possible for a regular user to run SVGA and GL Quake from X <em>AND</em>
     automatically switch back to X when the program is finished, regardless of
     whether it exited normally or not.

     Note: when I say "Quake" in the text below, I really mean "quake, glquake
     squake, qwcl, glqwcl, qwcl.x11 or quake2".

     <itemize>
     <item>First, you'll need the <bf>open(1)</bf> package by Jon Tombs. This
     is a set of two very small programs that allow you to switch between
     virtual consoles and start programs on them.  Download open from <htmlurl
     url="http://sunsite.unc.edu/pub/Linux/utils/console/"
     name="http://sunsite.unc.edu/pub/Linux/utils/console/">.  You shouldn't
     have to do much more than <tt>make;make install</tt> to compile and install
     it. Once it's installed, you need to make the <tt>open</tt> and
     <tt>switchto</tt> executables setuid root.  So do this:
     <tscreen><verb>
     cd /usr/local/bin
     chown root open switchto
     chmod 4755 open switchto
     </verb></tscreen>

     <item>Next, save the following code to a file called <tt>getvc.c</tt>:
     <code>
        /* getvc.c
         * Prints the number of the current VC to stdout. Most of this code
         * was ripped from the open program, and this code is GPL'd
         *
         * Joey Hess, Fri Apr  4 14:58:50 EST 1997
         */
             
         #include <sys/vt.h>
         #include <fcntl.h>
           
         main () {
           int fd = 0;
           struct vt_stat vt;
             
           if ((fd = open("/dev/console",O_WRONLY,0)) < 0) {
             perror("Failed to open /dev/console\n");
             return(2);
           }
           if (ioctl(fd, VT_GETSTATE, &ero;vt) < 0) {
             perror("can't get VTstate\n");
             close(fd);
             return(4);
           }
           printf("%d\n",vt.v_active);
         }
            
         /* End of getvc.c */
     </code>
     Compile it and install it somewhere in your <tt>$PATH</tt>:
     <tscreen><verb>
     gcc getvc.c -o getvc
     strip getvc
     mv getvc /usr/local/bin
     </verb></tscreen>

     <item>Now create a script called <tt>runvc</tt>:
     your <tt>$PATH</tt>:
     <code>
     #!/bin/sh
     # Run something on a VC, from X, and switch back to X when done.
     # GPL Joey Hess, Thu, 10 Jul 1997 23:27:08 -0400
     exec open -s -- sh -c "$* ; chvt `getvc`"
     </code>
     Make it executable and put it somewhere in your <tt>$PATH</tt>:
     <tscreen><verb>
     chmod 755 runvc
     mv runvc /usr/local/bin
     </verb></tscreen>

     Now you can use the <tt>runvc</tt> command to start Quake. Continue to use 
     whatever command line you usually use to start your game, but put <tt>runvc</tt>
     at the beginning:
     <tscreen><verb>
     runvc ./quake2 +set vid_ref gl +connect quake.foo.com
     </verb></tscreen>
     You'll automatically switch to a VC, run Quake and then switch back to X
     when it's done!

     <p>
     <item><bf>Update:</bf> Joey Hess wrote in to say:
     <quote>I'd like to point out that some people may find that this 
     doesn't work. If your /dev/ttyxx devices do not let you write
     to them by default (a good idea), then the open command won't be able to
     switch to them. In that case, you need to chown the next tty that is free
     after you start up X. I do this in xdm's Xtartup_0 script, as follows:
     <code>
     # Set up tty8 as a console that is writable by the current user, so 
     # open -s commands can be used to run stuff there.
     # Tty8 is used becuase it's the next free tty after 7 where X runs, 
     # and so open tries to use it.
     chmod 640 /dev/tty8
     chown $USER.root /dev/tty8
     # This does open up a tiny security hole: 
     #       user_a logs in with xdm, then logs out.
     #       user_b logs in at console.
     #       user_a can now redirect user_b to tty9 via the open command,
     #       and plop them down into some program that, perhaps, tries to
     #       persuade them to enter their password.
     </code>
     </quote>


     </itemize>

<sect1>3Dfx "tweak" settings work in Linux too
<p>
     You may have seen or heard mention of ways to "tweak" Quake's OpenGL 
     performance by setting various environment variables.  These variables
     are equally valid under Linux. You just set them slightly differently.
     If a Windows/DOS "tweak" guide tells you to:
     <tscreen><verb>
     SET SST_GRXCLK=59
     </verb></tscreen>

     Under Linux, do it like this:
     <tscreen><verb>
     export SST_GRXCLK=59
     </verb></tscreen>

<sect1>The Poor Man's Server Browser
<p>
     Joe S. (<htmlurl url="mailto:jszabo@eden.rutgers.edu"
     name="jszabo@eden.rutgers.edu">) suggests:
     <tscreen><verb>
     a trick I do with qstat:
     I make a file of my favorite servers, then do
     qstat -f /C/quake2/file.txt | less
     </verb></tscreen>

     hit control z to suspend, then copy the ip address or hostname I want
     with gpm to a command line like:

     <tscreen><verb>
     ./quake2 +connect expert.eqclans.com
     </verb></tscreen>
     Then I can use fg to go back to the list later...

<sect1>Using <tt>lib3dfxgl.so</tt> for Quake I <label id="miniport">
<p>
     You can use the 3Dfx mini-driver (<tt>lib3dfxgl.so</tt>) from
     Quakeworld or Quake II with <tt>glquake</tt> too. Simply copy
     the <tt>glqwcl.3dfxgl</tt> or <tt>quake2.3dfxgl</tt> 
     scripts to a new file, say <tt>glquake.3dfxgl</tt>. Then edit the
     <tt>glquake.3dfxgl</tt> script so it runs <tt>glquake</tt> instead of
     <tt>glqwcl</tt>.
     The same restrictions about running as root apply here, as do
     the differences between running under glibc and libc5.
     See the <ref id="qw-3dfxgl" name="Quakeworld"> or <ref id="q2-3dfxgl"
     name="Quake II"> sections for more information on
     <tt>lib3dfxgl.so</tt>.

<sect1>Getting rid of that annoying "POSSIBLE SCAN CODE ERROR 57" message in GLQuake. ++
<p>
    If you're sick of seeing that useless message every time you press the space bar
    in GLQuake, execute the following command from your quake directory and you'll 
    never have to deal with it again.  This little piece of Perl code just replaces
    the first character of the message with a null character, which signifies the end
    of a string in C programs.  Now when GLQuake thinks it needs to tell us about
    a possible scan code error, it outputs an empty string instead!  Oh, and your
    original <tt>glquake</tt> binary gets automatically backed up to <tt>glquake.bak</tt>
    too.
    <tscreen><verb>
    perl -i.bak -0777pe 's/P(ossible unknown scancode)/\0$1/g' glquake
    </verb></tscreen>

    Thanks to Andrew Chase (<htmlurl url="mailto:fixy@fixy.org" name="fixy@fixy.org">) for this.


<!--==============================================================-->
<sect>Administrivia
<p>

<sect1>New Versions of This Document 
<p>
     New versions of this document will be periodically posted to 
     <htmlurl url="news:comp.os.linux.answers" name="comp.os.linux.answers">
     and <htmlurl url="news:rec.games.computer.quake.misc"
     name="rec.games.computer.quake.misc">.  They will also be uploaded to
     various WWW and FTP sites, including the
     <htmlurl url="http://sunsite.unc.edu/LDP" name="LDP home page">.

     New versions of this document will be periodically posted to 
     <htmlurl url="news:rec.games.computer.quake.misc"
     name="rec.games.computer.quake.misc"> and <htmlurl
     url="news:comp.os.linux.misc" name="comp.os.linux.misc">.

     The latest version of the Linux Quake HOWTO can always be found at the 
     following sites:

     <itemize>
     <item><htmlurl url="http://www.linuxquake.com/" name="http://www.linuxquake.com/"> 
     <item><htmlurl url="http://webpages.mr.net/bobz/" name="http://webpages.mr.net/bobz/">
     <item><htmlurl url="http://www.linuxgames.com/quake" name="http://www.linuxgames.com/quake">
     </itemize>
     
<sect1>Distribution Policy
<p>

     Copyright (c) 1998, Bob Zimbinski, Brett A. Thomas and Mike Hallock.
     This document may be distributed under the terms set forth in the LDP
     license at <htmlurl url="http://sunsite.unc.edu/LDP/COPYRIGHT.html"
     name="sunsite.unc.edu/LDP/COPYRIGHT.html">. 

     This HOWTO is free documentation; you can redistribute it and/or modify it
     under the terms of the LDP license.  This document is distributed in the
     hope that it will be useful, but <em>without any warranty</em>; without
     even the implied warranty of <em>merchantability</em> or <em>fitness for a
     particular purpose</em>.  Heck, even if this document <em>kills your
     dog</em>, it's not our fault.
     
     See the LDP license for more details.                                          

<sect1>Revision History 
<p>
     Sections of this document that were updated in the last revision 
     have a ** after the section heading.  Sections updated in the revision 
     prior to the last are marked with a ++.
 
     Below is the full revision history of this document.  It is not intended
     to be useful to anyone but the document authors.

     <code>
     $Log: Quake-HOWTO.sgml,v $
     Revision 1.0.1.18  1998/12/19 00:56:31  bobz
     Minor typo removed

     Revision 1.0.1.17  1998/12/19 00:45:01  bobz
     Moved "Other Formats" section to top of the document for better visibility
     Added troubleshooting topic about crashes upon connecting to a server w/different gamedir
     Added mention of RedHat's broken ld.so configuration to Mesa sections
     Added details about using the new gl_driver cvar
     Added troubleshooting bit about mouse permissions

     Revision 1.0.1.16  1998/12/12 05:34:02  bobz
     updated file links for quake2 version 3.20
     URL change for Linux Game Tome
     Added linuxgames.org to list of Linux Game sites
     Removed nasty references to /usr/games/quake as installation dir
     Removed info about compiling libc5 libraries for use with Q2
     Added a few sentences about /dev/3dfx and mtrr support in the Q1 & Q2 glide sections.
     Added a warning about using the glide library from 3dfx's site
     mentioned that GLX versions no longer require svgalib
     Updated performance FAQ
     Moved mouse in X tip from Tips to FAQ
     Added Vispatch to Related Software
     Added quakelaunch to Related Software
     Added qplog to Related Software
     Added link to server setup guide at 3dgw.com
     Added X color depth FAQ
     Added Quake source code FAQ
     Added new info from JH in Running from X Tip.
     Added fix for POSSIBLE UNKNOWN SCANCODE in glquake
     Minor wording changes and type fixes throughout

     Revision 1.0.1.15  1998/10/05 21:09:42  bobz
     Fixed a few typos and spelling errors that I missed last time around

     Revision 1.0.1.14  1998/10/05 19:54:17  bobz
     Removed the long-dead LinQuake page from list of Linux Quake sites
     Removed renaissoft