glDoom
An OpenGL adaptation of id Software's
DOOM&trade
performed by Bruce Lewis

Date of this document: 16 Dec, 1998
             Addendum: 11 Apr, 2010
Revision of this document: 1.2

Disclaimer:

glDoom is an unauthorized adaptation of id Software's Doom to use the OpenGL graphics
language.  There are ABSOLUTELY no warrantees of any kind made for this program
by the author or by id Software.  You run this program at your own risk.  This program has
been tested on a number of systems with various video cards, 3D chipsets, OpenGL
drivers and operating systems. But this program is NOT guaranteed to work on your system.
Every effort has been made to ensure that there are as few problems as possible but glDoom
is currently software in development and is BETA code. Not a normal release candidate
and cannot be expected to work perfectly.

Until the BETA program is ended, it is quite possible that you may encounter problems
running this program. I hope you don't.

Please DO NOT report problems with this code unless the program blows up on id
Software released levels ONLY.  No 3rd party game wads are currently supported
and none have been tested thoroughly.

If you have to report a problem I need a COMPLETE set of information about your
system configuration. This includes your sound card, your 2D card, your 3D card, what
CPU you are running (and what speed), which revision of OpenGL driver you are running
from your 3D card vendor, what version of DirectX you have installed, what service packs
you have installed and if you are using a USB keyboard, mouse or joystick. Also send
the glDoom.dbg file with your e-mail.  I will need it 99% of the time.

Send these via email to me but you MUST use the subject GLDOOM BETA ERROR
on your email. Otherwise they will go into my main mail bin and possibly get lost in the
shuffle. I can filter these into a separate mailbox if you use the correct subject line.

I will not support OpenGL drivers not listed in the card list in this document. Which
means I will not attempt to support OpenGL "D3D" wrappers. Especially on cards that
do not have adequate 3D accelerators which support texturing and blending in hardware.
(This includes the entire S3 Virge line.)

PowerVR PCX2 cards probably will not work. This is unfortunate as I have two myself
but can't be corrected by anyone except PowerVR/VideoLogic.  If they release a newer
OpenGL driver that works well, then that will be great.

Table of Contents

1. What is glDoom?
2. Acknowledgments.
3. Installing glDoom.
4. Running glDoom.
5. Customizing the game.
6. The Console.
7. Network games.
8. Program Requirements.
A. Appendices
B. Known Problems
C. Things you should know

1. What is glDoom?

glDoom is an OpenGL adaptation of id Software's first person shooter game, Doom.

On 23 Dec, 1997, John Carmack of id Software made public the source code to the
Linux port of their mega hit game Doom.  John Carmack believes in trying to improve
the game industry by releasing code that while no longer commercially viable contains
program code that aspiring game programmers can learn from.

I had been dabbling with game programming since April of 1993.  When id Software
released the source to Wolf3D, I downloaded it but it was for a compiler I did not have
and was also all 16 bit code with a fair amount of assembler sprinkled throughout.

Any port of Wolf3D to Win32 (my current "favorite" game environment) would require
the program to be rewritten. Not from scratch but very nearly.  The original program
would be used as a template.

When the Doom source code was released, it was all 32 bit code.  It was a newer game
and was also multiplayer with a data set that was "open".  I decided to port Doom to
Win32 first and get a stable Win32 port working then to add an OpenGL renderer
on top of that.

This has been a learning exercise for me because of my desire to work as a game
programmer.  I have learned a great deal about game programming as well as about
OpenGL and the application of Trigonometry in 3D games.  I have also learned a great
deal about the employment of input devices in computer games.

The networking code was not as big a challenge as some of the rest of the code because
I was already an experienced network programmer.

glDoom represents most of my "free" time from 26 Dec, 1997 to its release date. And
a not inconsiderable amount of it since.

glDoom is FREE software.  Which means that you don't have to pay for it. What you
are getting is a free USER license, though.  You may NOT use the program to make
money without following the terms outlined in the Doom license agreement.  Remember id 
Software owns Doom, NOT ME. I just adapted the program and am entitled to only the
 rights afforded me by that.

NOTE: 3Dfx card owners DO NOT try to use the Quake OpenGL miniport drivers
with glDoom. IT WILL NOT WORK!!!

Note the name glDoom. Not 3Dfx Doom. This is NOT a 3Dfx specific version of Doom.
It is not a 3Dfx patch. There is not a single line of code in the program that is 3Dfx specific.
There will be a few lines in order to set the gamma for 3Dfx cards but that will be the
extent of it.  This port is based COMPLETELY on OpenGL.  It does not use Direct3D
and it doesn't use DirectDraw.

Always, always, always check the glDoom web site before contacting me for support.
That's the first place you should look for answers to your questions (other than here).

2. Acknowledgments.

Special thanks go to several people without whose help and understanding this project
would not have been possible.

First a huge Thank You goes to my wife, Licia, for understanding that I was driven to do
this. For being supportive and putting up with my really late hours, my nearly constant work
on glDoom and almost never going out for the duration of this project.

Second a big Thank You goes to John Carmack for releasing the source code to Doom,
for giving me helpful suggestions along the way and occasionally showing me how to do
something when I was too thick to figure it out for myself. :o)

Third a big Thank You goes to id Software and all of the Doom teams for creating the
best first person shooter of all time.  You have created a work of "art" that has withstood
the test of time.

Fourth a big Thank You goes to Jack Mathews, Michael Gold, Brian Hook and Gary
McTaggart for their help with this project.  Sometimes they didn't even know they were
helping.

Fifth a big Thank You goes to the alpha testing team. They are (in alphabet order by last name):

Andy Bay
Oliver Block
Linda "Blender" Bosson
Richard Davies
Ashleigh-Paul Charlesworth
Michael Gold
Lawrence "Mac" Howell
Keith Jackson (not the sports-caster)
Mikael Johannsen
Janet "Hotshot" Leery
John Lesica
Mike "Lucy" Lewis (Navy callsign what can I say?...)
Don "One Thumb" MacAskill
Sean "Redwood" Martin
Jack "Morbid" Mathews
Keith McCoy
Gary McTaggart
Barry Miller
Pamela Miller
Tong "Titan" Po
Tim Rager
Richard Siomporas
Donna Sorrel
Bill "Turkey" Trent
Kate Tyrell
Billy "Wicked" Wilson

And last but not least, a thank you goes to all the others who offered suggestions,
gave feedback about preferences, offered programming tips or offered to help.

3. Installing glDoom

Run the install procedure to get the program and the supporting data file(s) into
your game directory.

glDoom REQUIRES OpenGL.  If you don't know if you have OpenGL installed, there
are several ways to tell.

Windows98 and NT users already have OpenGL installed.

If you have Windows95, go to the control panel and open the "system" applet. The first
page has the version number of Windows displayed. If it is followed by a "b", then
OpenGL was part of the Windows95 installation (you have OEM  R2.0 or R2.1). If
the letter "b" does NOT follow the version number, close the system applet and open
the "add/remove software" applet.  In the list box at the bottom of the dialog, you can
scroll through it to see if OpenGL for Windows is listed. If it is, then you have the
Microsoft OpenGL for Windows95 installed.

Even if you are not sure that you have OpenGL installed, if your video card comes with
OpenGL drivers, they are probably installed.  That "should" be all you need unless the
card is a 3Dfx based card or a PowerVR PCX2.

For 3Dfx card owners, you must install the 3Dfx OpenGL drivers for your card or the
generic ones from 3Dfx.  If you have a pass-through version of the 3Dfx cards (not a
Banshee or Rush) you must also put the 3dfxopengl.dll from the 3Dfx OpenGL into the
directory with the program and rename it to opengl32.dll.  Banshee and Rush card
owners "may" have to do the same thing.  Banshee/Rush card owners may not be able
to run glDoom if you also have a "pass-through" 3Dfx card.  Also, make sure you have
the latest WinGlide drivers. Versions before 2.5 are NOT the latest. (mine is currently
2.53)

PowerVR PCX2 owners will have to copy the opengl32.dll for the PowerVR PCX2
into the game directory in order to run glDoom using the PowerVR as your OpenGL
accelerator. I doesn't work well at all. Some systems it seems to work "ok". But
on others only parts of the status bar and the sky are visible.  I don't know why.

The rest of the installation is easy, just make sure you put the glDoom.exe program and
the glDoom.wad data file in the directory with your Doom game WAD files.  You don't
need to set any command line parameters to run the program. You can but you don't
have to. It defaults to 640x480 using 16 bit color and fullscreen.  The default game wad it
looks for is Doom2 but will work equally well with any of id's other Doom WADs.

One you MUST be absolutely certain of is that your version of Doom is 1.9. If it does
not say version 1.9 when you start your NORMAL Doom (or Doom 2), then it is NOT
version 1.9 and you need to download the updates from:

ftp://ftp.cdrom.com/pub/idgames/idstuff

You can select which directory you want and which updates you want based on which
program(s) you are updating.

You can put glDoom on your menus but MAKE SURE you put the working directory as
the directory in which you installed glDoom.  The same is true if you create a shortcut for it.

WARNING: Do NOT move glDoom once you have run it once. It writes the program's
location into the win.ini file the first time it is run so that it will always know where the
glDoom.ini file is.  If you rename the directory or move the program and delete the old
directory you make it IMPOSSIBLE for the program to keep an updated gldoom.ini file.

Since glDoom uses InstallShield to install itself, it also creates a menu option on the start
menu to run it as well as a link to the glDoom.doc file.  It also puts a menu option up to
remove the program from your system.  (as well as in the "Add/Remove Programs" applet
in the Control Panel)  If you move glDoom after installation, you break the links for these
menu options and the uninstall program.

Don't move it unless you know how to correct these things manually.  If you want to move
it, then UNINSTALL it and remove the glDoom section from your win.ini file. Then reinstall
it where you want it.   (the version of InstallShield I use won't let me remove this section of
the win.ini file - a version that will is $1400)

The preferred method of running glDoom is from the Start menu.

4. Running glDoom

Before you attempt to run glDoom, make sure you have satisfied all the requirements listed in
the "Installing glDoom" section. glDoom will not run if it is not installed and setup properly.

To run the program, you can just click on the program and start it. You don't have to put
any parameters on the command line.  You can, but you don't have to.

Do not attempt to run the game from a DOS box command line or batch file.  It will not
function correctly.  It IS NOT a DOS or CONSOLE application...  The proper way to
do command line parameters is to create a menu option or local shortcut to the program.

Here is the current list of command line parameters:

-width : the width in pixels of the game screen
-height : the height in pixels of the game screen
-bpp : color depth in number of bits per pixel
-window : runs glDoom in a window (not possible with Voodoo1 or Voodoo2)
-game : lets you specify a particular game wad as your main IWAD
-net : starts a network game
-deathmatch : turns on the frag counter and deathmatch "things"
-altdeath :  a different type of deathmatch where weapons stay and item respawn
-warp : starts on a specific level (warp 1 1 for Doom 1 & warp 01 for Doom2)
-skill : specifies a skill level when warping into a level (1 to 4)
-time : lets you specify how many minutes deathmatch levels should last
-frags : lets you specify a frag limit for deathmatch
-play : lets you play a demo
-record : lets you record a demo
-timedemo : plays a demo in speed timing mode (output in glDoom.dbg)
-file : adds a patch wad to the game data
-nosound : turns off all sounds and music (must be turned back on manually)
-devparm : shows the frame rate in the lower right of the screen

glDoom defaults to 640 x 480 x 16 bit color.  You can override those settings
by using the command line parameters above.  If you have the original
Windows95 and your desktop is not 16 bit color it WILL NOT RUN.  The
program looks for an available video mode that supports the proper color depth
(whether you use the default or 24 or 32 bits per pixel).

The reason for this is simple. The original Windows95 could not change desktop
color depths without rebooting. Windows 98, NT 4.0 and the later versions of
Windows95 can change color depths without rebooting.

glDoom will not run in 8 bit color mode. (it must be 16 bit or higher)

By default, the program looks for game wads in the following order:

doom2f.wad	- (the French Doom2 wad)
doom2.wad	- Doom 2
tnt.wad		- Final Doom - Evilution
plutonia.wad	- Final Doom - The Plutonia Experiment
doomu.wad	- Ultimate Doom
doom.wad	- Registered Doom 1
doom1.wad	- Doom Shareware

If you want to have your Registered Doom 1 and Ultimate Doom wads available at
the same time, just rename your Ultimate Doom game wad to doomu.wad. If you
only have Ultimate Doom and not the registered shareware of Doom1 then you can
leave the name of the game wad as doom.wad.  The program will figure out that it is
Ultimate Doom and enable the fourth episode for you.

Once you have set the -game command line option once, it will be "remembered" the
next time you start the program as your "preferred" game wad.  To change that
preference, you can either use the -game option with a different wad name or change
the game entry in the glDoom.ini file.

5. Customizing the Game

There is a setup menu option which will allow you to setup your game controls. This is
still under development and new bindings will be added.  Some of the options listed are
artifacts from the BOOM key bindings menu from which this was taken.  These options
will most likely go away in newer versions to be replaced by something else.

There are also other things that can be done to customize the game for your system and
or preferences.

The way that distance queing is currently done is through the use of black fog to simulate
the decrease in light levels over distance.  This has not been implemented on some
cards/drivers and does not work properly on others. The effect can be disabled through
the console command gl_fog and setting it to 0 for off and 1 for on.

Some video cards, like the Permedia2 do not support many of the blending modes that
glDoom prefers to use.  In order for sprite transparency to look "right" with the Permedia2,
some preprocessing of the sprites is necessary.  If you do not have a Permedia2 or other
card that causes black outlines around the sprites, you can turn off this preprocessing by
setting gl_alphatest to 0 in the console.  You can turn it on if you get the black outlines
by setting gl_alphatest to 1 (also in the console).  You will have to exit the game and
restart it for this change to take effect since it only affects the sprites when they are created.

You can set your default video width and height by editing the entries for them in your
win.ini file (for now). This will prevent you from having to put these values on the
command line all the time.

You can also set your preferred game wad in the gldoom.ini file (in your game directory)
by editing the "game" entry. This is set each time you use the "-game" command line
parameter. You can also set it from the console.  You can enter a full pathname (not just
the WAD file name) into this entry.

There is a cvar called "mvert" which will disable the vertical (y) axis of the mouse if it
is turned on. There is a key which toggles "mvert" referred to as key_mvert which
defaults to "/".  This can be set on the keybindings menu.

6. The Console

The console allows you to enter a variety of commands for the game. It is NOT the Quake
console so don't expect it to work exactly the same way.  Key bindings, for example, are
currently backwards from the way they are in the Quake console. This was done because
keys are bound to commands in glDoom. (In Quake, commands are bound to keys. A
subtle but important difference.)  This may change in the future.

You may set "cvar"s using the console. This works the same way as the Quake console cvars
except that the glDoom "cvar"s are not dynamic. You can't just "create" a cvar by typing in
the cvar name and a value.  The reason for this is simple, without program code to support it,
a cvar is useless.  I chose not to accept cvars that would not be usable by the program.
Instead, it tells that you have attempted to set an invalid cvar.

There are also a number of commands that can be entered on the console.  These range from
entering "cheat" codes to music commands to key bindings to quiting the game.  Some of the
commands have parameters that they be used to set certain game conditions.

A list of commands are:

iddqd : god mode
idfa : full ammo and all weapons
idkfa : keys full ammo and all weapons
idclev : change level
idmus : change music for level
idchoppers : chainsaw and invulnerability
idclip : no clipping toggle
idspispopd : no clipping toggle
idbeholdi : invisibility
idbeholdv : invulnerability
idbeholds : strength (berserk pack)
idbeholdr : radiation/environment suit
idbeholdl : light amplification goggles
idbeholda : all map cheat
cd : starts your cd player (switches from midi)
midi : pauses/resumes the midi playback (toggle)
quit : quits the game (immediately)
god : enable god mode (degreelessness?) toggle
map : e?m? or map?? (Doom I or Doom II map names)
noclip : no clipping toggle
give  : gives requested game items
autorun X : toggles always run 0 = off, 1 = on
swap_stereo X : toggles swap left/right 0 = off, 1 = on
nosound : toggles sound on and off 0 = off, 1 = on
mouse_factor :  sets a mouse motion multiplier 1,2,3 or 4
bind : binds a value to a cvar
record : records a demo in new demo II format
finish : stops recording a demo II format demo
play : plays back a demo II format demo
cmdlist : lists console commands
cvarlist : lists cvars

CD command parameters:

on : starts cd playback
play : starts cd playback
pause : pauses/resumes music playback
resume : pauses/resumes music playback
off : stops cd playback (restarts midi)
stop : stops cd playback (restarts midi)
next : plays next cut on CD
+ : plays next cut on CD
prev : plays previous cut on CD
- : plays previous cut on CD

GIVE command parameters:

all : gives (ammo, weapons, armor, health, keys, automap, backpack)
ammo : gives all ammo
armor : gives full armor
automap : gives the automap
backpack : gives a backpack and it's contents
fullpack : gives (ammo, weapons, armor and backpack)
health : gives 100% health (or 200% health)
keys : gives all six keys (key cards and skull keys)
weapons : gives all weapons

MIDI command parameters:
pause : pauses MIDI music playback
resume : resumes MIDI music playback

7. Network games

Until the Join Game/Start Game menu options are done, network games will have to be
started from the command line. This is done by telling the program that you want a
network game with the "-net" parameter then telling the program which player you are
(a number from 1 to 4 not to be larger than the number of players) followed by the IP
addresses of the other players in the game.  They will be assigned player positions based
on what order you put them on the command line.

An example network game command line might look like this:

gldoom -net 1 192.9.200.4 192.9.200.5 -deathmatch -nomonsters

This will give you a three player game with you as player one. The game will be a
deathmatch rather than a cooperative game and there will be no monsters in the game.

Assuming that your IP address is 192.9.200.3, the other player's command lines would
look like this:

gldoom -net 2 192.9.200.3 192.9.200.5 -deathmatch -nomonsters

for player 2 and :

gldoom -net 3 192.9.200.3 192.9.200.4 -deathmatch -nomonsters

for player 3.

Each system will attempt to talk to the others over whatever TCP/IP connection there is
between your system and theirs. Once all the systems have talked to each other, the game
will begin.  You play it just like any other Doom network game from then on.

8. Program Requirements.

The absolute minimum system configuration to run glDoom is a 133Mhz Pentium with 16Mb
of RAM and an 3D accelerator card with OpenGL drivers.  The program will run on a system
like this but is far too slow to be enjoyable.

The recommended system configuration to run glDoom is a 166Mhz or higher Pentium with
64Mg of RAM, a 3D accelerator card with native OpenGL drivers (not a Direct3D
wrapper), a mouse and a sound card with wave table Midi support.

The optimum system configuration (to date) to run glDoom is a 450Mhz Pentium II with 128Mb
of RAM, a Quantum 3D X-24 dual Voodoo 2 SLI board running 3Dfx's OpenGL drivers, a
mouse and a SoundBlaster PCI64 with a general Midi sound font enabled.

In order to run glDoom a game data file called a WAD file must be present.  The main game file
is an IWAD file which means it is a full game WAD.  A full game WAD contains all the necessary
game data to make the program run.  A patch wad (PWAD) only contains "patches" to the
original game data in the IWAD.

The original id Software game wads: DOOM1.WAD (shareware), DOOM.WAD (registered
shareware), DOOM.WAD (retail Ultimate Doom), DOOM2.WAD (retail Doom2), TNT.WAD
(retail Final Doom) and PLUTONIA.WAD (retail Final Doom) are the only files which satisfy the
requirement of a full game wad.  UNLESS you are playing a "total conversion" which means that
someone has created a FULL IWAD that uses all new game data for the Doom engine to run.

IWADs which contain some id Software game data and some new data (conversion) are not
allowed by the license agreement and may not be distributed.

glDoom will not run on Virge powered video cards. It also will not run on Number 9 "3D"
accelerators.

9. What's a "command line"

I am still a little surprised when someone asks me, "What's a command line?" Having started
using computers before there was a command line, it's arrival and near disappearance has been
something I've just taken for granted. To me, not knowing what the command line is, is like not
knowing what a monitor is.  It's easy to forget that there are hundreds of thousands of people
using computers who have never seen an operating system command line.

So here we go.  In Win32, you get to the command line either by starting an MS-DOS Prompt
or by creating a "shortcut" to a program (similar to a "Start" menu entry) and editing the "command
line" in that.

The command line is automatic in the MS-DOS Prompt and I don't have the space or time to
give a tutorial on using MS-DOS here.  In NT it's referred to as a "Command Prompt".  I do
not recommend that you attempt to run glDoom from the command line in any case.  It may
cause startup problems for glDoom.

To create a command line for glDoom you either have to create a "Start" menu option
or create a "shortcut" to the program. (I'm not going to get into how to do either one.) In order
to change the command line just edit the "Target" window in the "Start" menu option or in the
"shortcut".  Make SURE that the directory where glDoom is installed is in the "Working Directory"
box.

To add options to the command line just put them in the "Target" box after the program name.
It's that simple.  When you save the "shortcut", and "run" it the program will be run with the
parameters you specified in the shortcut.  You know how to run a menu option. If you know
how to run a program without the menu, then you know how to run a shortcut, too.  All you
have to do is double-click on the shortcut to the program rather than the program to invoke it
with the parameters in the shortcut.

You can create multiple shortcuts (or menu options) to run glDoom with various options. You
can even setup different shortcuts (or menu options - they're really the same thing except one is
on the menu and the other shows up in "folders") so that it will run different game wads you have
set up.

=====================================================


A. Appendices

A. Where can I get the source code for glDoom?

     The source code of glDoom is not yet available. I have decided not to release the
     source until the program is "feature complete" which means not until all the features
     I intend to add by revision 1.0 are in the program and working.

     When glDoom reaches version 1.0, the source code will be made available.

B. Troubleshooting.

   I. Problem: The program starts up then dies when I try to
      run it.

      Solutions:

      1. Make sure you have OpenGL installed on your system
         and that you have an opengl driver available for
         the program to use.

      2. Make sure you have version 1.9 of the original Doom
         game wads installed on your system for the program
         to use.  Older versions are missing some of the
         resources in the game data file that are required
         for glDoom.

      3. Make sure you have DirectX 3 or higher installed on
         your system if it is a Win32 (Windows95, Windows98
         or NT) system.  Windows98 for some reason requires
         that DirectX 6 be installed or it does not work.


   II. Problem: The program starts up but then runs really
       slow on my system.

       Solutions.

       1. You are (probably) running software OpenGL which is
          VERY slow.  If you look at the top left of the screen
          you will see a string which tells you the name of the
          OpenGL driver you are running.  If it says Microsoft,
          then you are running software OpenGL.  You can wait
          for the program to come up but it will be a long wait
          and playing the game will be impossible.

   III. Problem: I have a 3Dfx card but the game isn't running
        on it.

        Solution.

       If you get the message:
                    OpenGL Driver is not accelerated
       then you are running the software opengl.  Otherwise you
       may be running on the OpenGL for your 2D/3D card.

       Either way you probably have not setup your 3Dfx opengl
      drivers properly.

       Download the OpenGL ICD drivers from 3Dfx's website
       (if you haven't already done so)  Extract them and copy
       the 3Dfxopengl.dll file into the directory where you installed
       glDoom.  Then rename the 3dfxopengl.dll to opengl32.dll.
       Your 3Dfx card should then work with glDoom.

   IV.  Problem: 

       The program just blows up when I try to run it. I don't
       get any error messages.

       Solution.

       Make sure you have set the program up correctly and
       that you have the gldoom.wad file in the program directory.


   V. Problem:

       When I try to run the program, I get a message box on
       the screen that says:
       "glDoom is unable to determine the game type"

      Solution:

      Make sure you have followed the installation instructions
      carefully and completely. The program cannot find a valid
      game wad. It either isn't in the program directory or it
      isn't where you told the program it is.

C. What hardware does glDoom run on?

   The 3D accelerators (chipsets) that have been fully tested
   so far are:

   3Dfx Voodoo (4 and 6 Mb - Obsidian too)
   3Dfx Voodoo 2 (8 and 12 Mb, single and SLI)
   3Dfx Rush
   3Dfx Banshee
   3DLabs Permedia 2 (8Mb only)(AGP & PCI)
   3DLabs GMX
   AccelGraphics Eclipse II
   ATI Rage Pro
   Intel i740 (4 and 8 Mb)
   Intergraph RealiZm (Z25)
   Intergraph RealiZm II
   Matrox G200
   nVidia Riva 128 (4Mb)
   nVidia Riva 128ZX (8Mb)
   nVidia TNT
   Rendition V2x00 (8Mb only)
   S3 Savage3D

   These accelerators (chipsets) are currently being tested
   or worked on by their respective manufacturers:

   PowerVR PCX2 (status unknown)

D. Why do I need DirectX 3? Isn't this an OpenGL program?

DirectX 3 is required for the Win32 versions to handle the sound effects output and
the keyboard and mouse input.

All later versions of DirectX will run software written to run on DirectX 3.

The program was modified to run on DirectX3 because of the absence of any later versions
for Windows NT.  Supposedly Service Pack 4 for NT 4.0 has DirectX 5 in it but I have not
checked this, yet. (I haven't installed it.)

Be aware also, that Windows98 appears to require DirectX 6 for glDoom to run. I do not
know why this is but it has solved the Windows98 problems most of the time.


B. Known Problems

Since glDoom is still Beta software, it isn't finished, yet. Nor has it been completely debugged.
There are things in the program that are being addressed even as you read this. Some will have
to be addressed by the various driver writers for the respective video cards and some will be
addressed by me in the form of program changes.  Below is a list of the things that are known
to; not work, not work properly, don't "look right", have not been implemented yet or is a
problem with certain drivers/cards.

1. The culling code in glDoom is still not in its final state. This causes two problems which will go
away when the culling code is finished.

The first is that floors and ceilings sometimes appear "in the sky".  This is due to the way the
geometry for the flats is generated on the fly for each level.

The second is that columns of sky may appear occasionally when only slivers of walls are
visible.  This is because the view-map for the image is still only 320 pixels wide and is not
scaled to the actual view width. The new culling code takes this into account. It will also allow
for odd aspect ratios of display resolutions (like HDTV 16:9 format) and wide or high fields
of view.

2. The multiplayer colors have not yet been implemented in the status bar or on the player
sprites.

3. Some OpenGL drivers do not handle glReadPixels correctly or at all. The current 3Dfx Beta
2 drivers have this problem. Do NOT attempt to take screen shots with 3Dfx cards using this driver.
You may be able to do so using the MESA drivers for 3Dfx cards but image quality with the
MESA drivers is not very good. (much texture distortions)

I have not tested other cards extensively for screenshots but they appear (for the most
part) to work properly. Any problems with the screenshot files (doomXXXX.tga) will
be the result of mishandling the glReadPixels function.  This is a DRIVER problem and
not something I can fix with program code.

4. The Riva 128 card appears to have some problems with handling glPolygonOffset.
This causes the floors/ceilings to sometimes be mishandled in the z-buffer resulting in
sprites being drawn that should be occluded by the floor/ceiling.  The newest drivers
which are available on the products section of nVidia's website correct this problem. (or
possibly Microsoft's certified drivers pages)

5. The MIDI music code is still not in it's final state due to a problem with midiStream which I have
not yet figured out the cause. The music works but still has the annoying game "pauses" for a few
tenths of a second when the MIDI loops. This is preferable to the program blowing up, though.
This may turn out to be driver specific.  There also seems to be some problems with the Diamond
MX-300 and the Turtle Beach cards.  I have had a report of a problem with a Roland SCD-15
but mine works fine so I'm not sure what that is. (I have a RAP-10 and an SCD-15)

6. Some systems with more than one MIDI "source" may also not play the MIDI music. I have
found no reason for this as the MCI driver just opens the default MIDI device for playback. I
have mutiple MIDI sources and do not have this problem (AWE64 & RAP10).

7.  There are still some "startup" issues on some systems and as I said earlier, not all OpenGL
drivers are "up to snuff" so it's possible you may encounter difficulties in getting the program
to run.  Some video drivers report no video modes. Some drivers will hang when trying to
run wgl_SetPixelFormat (these same drivers also will not run Quake II).  Hopefully startup
issues will not be a significant problem. I had very few problems with startup issues with
the alpha test team. Usually it was caused by trying to use the wrong video drivers or by not
having an OpenGL driver.

8. There are some video mode issues with Windows98. This is being addressed.

9. Some "helper" applications that run in the background can interfere with glDoom's
operation. One of these is the helper program for the Intellimouse to interpret the
mouse wheel. It can cause glDoom to crash.  Another is from the "Power Tools"
that can cause problems accessing the CD-ROM and MIDI drivers.  The Microsoft
Office "shortcut" bar is also a source of context switching problems.

===============================================================

Things you should know

1. If you see a wall that appears to be missing, it is.  It's not in the original wad.  I've
found a lot are missing.

2. It doesn't matter which wad you want to run. gldoom will run with doom1.wad, doom.wad
(registered and ultimate doom), doom2.wad, tnt.wad or plutonia.wad.  I don't know if it runs
on many third part wads yet.  I haven't tried it except on a couple of them.

3. You can specify which wad you want to run in the shortcut by using a -game parameter.
It doesn't matter what the wad is named unless it's tnt or plutonia which will trigger the tnt or
plutonia flags in doom2 game mode.  The wads are scanned for content and the wad type is
determined from that.  If you rename doom1.wad to doom2.wad, it still knows it's the
shareware wad.

4. If you want to run this on 3Dfx, please use the 3Dfx OpenGL Beta drivers.  The program
DOES NOT like the Quake mini-port. I don't know why.  For 3Dfx the gamma has to be
preset.  It can't be set from within the program.

5. I've done a great deal of work trying to smooth out the input as much as possible.  On
some slow machines, though, the keyboard doesn't respond well.

6. So far, glDoom seems to run ok on these cards

3Dfx Voodoo 1 (Monster 3D's and Obsidian 100SB-4440)
3Dfx Voodoo 2 (Monster 3D II's and Quantum3D X24)
3Dfx Rush
3Dfx Banshee
3Dlabs Permedia 2 (8Mb slow)
AccelGraphics Eclipse II (32 Mb)
ATI Rage Pro (4Mb)
Intel i740 (4Mb)
Intergraph RealiZm - Z25 (offsite)
Intergraph RealiZm II  (offsite)
Matrox G200
nVidia Riva 128 (4Mb)
nVidia Riva 128ZX (8Mb) (offsite)
nVidia Riva TNT (16Mb) (offsite)
Rendition V2x00 (8Mb)
S3 Savage3D

It also runs on PowerVR PCX2 but it's quite ragged.

It has been tested under Windows95 (SR1, SR2.0, SR2.1), Windows98 and Windows
NT 4.0 (SP3).  I do not know if it works under NT Service Pack 4 or not.  I have not
installed it so I haven't tried it.

Under NT, it has been run on the Realizm, Realizm II, Eclipse II and the Q3D X24.  Primary
development is on the Eclipse II. It seems to perform quite well on these. (PII-300 128Mb
RAM)

It has also (as a test of NT DX3) been run on P133 with a Monster 3D I with 80 Mb RAM
and NT Workstation 4.0.  It was pretty slow (15 to 17 FPS) and the keyboard was not
responsive.  I'm not sure what is causing this.  The same machine runs it at about 25 to 28
FPS under Windows 95. I suspect it's because the 430VX motherboard can only cache the
first 64Mb of RAM and NT uses more memory. It may also be due to some problem in
the DirectInput library for NT.

===============================================================

Addendum:  The program also works under Windows XP SP1/SP2/SP3, Windows Vista SP1/SP2
and Windows 7.  My test hardware now is a GeForce 8600GT and a GeForce 8800 GTX768MB.
I have had to move the project to Visual Studio 2008 and DirectX 9.  Plans are under
way to try to take advantage of some of the OpenGL 3 functionality.  I want to learn
to write shaders anyway.  And also figure out how to do the type of lighting that is
in Doom 3.  It won't be as dramatic, of course (and probably not as fast, John is a
genious in that regard (IMHO).  But I do want to see what I can do with it.  I also
have an idea to take the network code from Quake 3 Arena and merge that in with the
Doom source code.  Of course that might mean having to move the Doom source into
C++ but that shouldn't present much of a problem and make the DirectX interfaces
a bit easier to deal with.  COM like C++ a lot and C not so much.