Fitzquake is a modified glquake based on the source code released by id Software. My primary focus is fixing a lot of the rendering bugs which made glquake inferior to the software renderer. My secondary focus is adding conveniences for mappers and general users. I am also slowly adding support for new modding or mapping features such as skyboxes, fog, and colored light.

While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.

I am not finished working on this project, so bug reports and feature requests are welcome.

Latest Downloads

February 12, 2009 — The latest version is 0.85. New in this version: increased map and protocol limits (can load all known limit-breaking maps,) model interpolation, per-entity alpha support, new network protocol, more external texture support, hardware compatability improvements, many bug fixes, and a cleaner source release to make it easier to install and compile. You can discuss this version in the Func_Msgboard news thread here.






Jump to:

known bugs
other files

Mac and Linux Users

March 8, 2008 — Kristian Duske (AKA SleepwalkR) has created an SDL port of Fitzquake 0.80. You can discuss it on this thread at Func_Msgboard.


Arguments in angle brackets are required (at least for specified behavior), arguments in square brackets are optional. The range of meaningful values for some commands is provided in curly brackets.

alias <name>
Now outputs the current command string, rather than deleting the alias. See command unalias.

Lists all key bindings.

cmdlist [substring]
Outputs an alphabetized list of all commands. If substring is present, lists only commands that start with substring.

Writes the console buffer to condump.txt.

cvarlist [substring]
Outputs an alphabetized list of all console variables. If substring is present, lists only cvars that start with substring.

cycle <cvar> <value> [<value> [<value> ...]]
Cycle a cvar through a list of values. Note: this command will get stuck on a list that contains the same value more than once, such as "cycle blah 1 2 1 3". If you're doing anything that complex you can just use aliases.

fly <value>   {0,1}
Force fly mode to be enabled or disabled. (e.g. "fly 1" will enable fly mode regardless of its current state.)

fog <density>
fog <red> <green> <blue>
fog <density> <red> <green> <blue>
Sets global fog, for testing purposes. All four values should be in the range 0...1. Set density to 0 to disable fog.

game <gamedir>
Loads a mod. See command mods.

give a <value>   {0...200}
Gives you armour. If value is between 0 and 100, armortype is green. If value is between 101 and 150, armortype is yellow. If value is between 151 and 200, armortype is red.

Lists all texturemodes.

Displays opengl info which was previously displayed during initialization: vendor, renderer, version, and extensions

Now accepts a number (1 through 6) as well as the name (gl_nearest, etc.)

god <value>   {0,1}
Force godmode to be enabled or disabled. (e.g. "god 1" will enable godmode regardless of its current state.)

Dumps all loaded textures from opengl into tga files. This shows the textures as they exist in opengl texture memory. Texture names containing '*' will be renamed with '#' instead.

Displays a list of loaded textures, and their dimentions.

inc <cvar> [amount]
Increments a cvar's value by amount. amount defaults to 1.

Outputs the short name of the current level (e.g. "e1m5")

Lists all addon levels available (i.e. all levels that are not in id1/*.pak)

Lists all child folders of quake directory which contain either a progs.dat or a pak file. See command game.

noclip <value>   {0,1}
Force noclip mode to be enabled or disabled. (e.g. "noclip 1" will enable noclip mode regardless of its current state.)

notarget <value>   {0,1}
Force notarget mode to be enabled or disabled. (e.g. "notarget 1" will enable notarget mode regardless of its current state.)

reset <cvar>
Resets a cvar to default. Note that this is the engine default, not the default.cfg value.

Resets all cvars.

sky <skyname>
Loads a skybox, for testing purposes. If skyname is "", this will turn off skybox rendering.

Stuffcmds now parses the "cmdline" cvar rather than the args actually passed to the program. This means that if you edit "cmdline," and "stuffcmds" is called again, your changes will have effect.

sv_protocol <value>   {15,666}
Sets the network protocol used by the server. Default is 666. Possible values are 15 (standard netquake protocol) or 666 (new fitzquake protocol.) Changes to the protocol will not take effect until the next time you load/reload a level. When running protocol 666, standard clients won't be able to connect to your server, and they won't be able to play any demos you record. When running protocol 15, only 256 models and 256 sounds can be sent to the client, which means you would see invisible entities and not hear some sounds, when running a map or mod that has more than 256 models or sounds. There is also some other data the server will suppress in protocol 15, such as per-entity alpha. Also note, dzip's special demo compression does not work on demos that use modified protocols, so you will get a compression ratio no better than standard zip compression.

toggle <cvar>
Inverts the value of a cvar (nonzero -> 0 and 0 -> 1)

unalias <name>
Deletes the specified alias.

Deletes all aliases.

Outputs (X,Y,Z) pitch yaw roll.

Tries to set a video mode that matches the values of vid_width, vid_height, vid_fullscreen, and, if vid_fullscreen is 1, vid_bpp and vid_refreshrate.

Like vid_restart, except that after switching to the new mode pops up a confirmation dialogue. This is useful if you are not sure what modes your monitor can handle, so you don't get stuck with a blank screen. The dialogue has a time limit so that if you don't press a key within 5 seconds, it will revert to the previous mode.

Used internally.

Console Variables

The range of meaningful/sane values is provided in curly brackets. You should also check out some of the new commands that are useful for dealing with cvars: cvarlist, cycle, inc, reset, resetall, and toggle.

cl_keypad   {0,1}
If 0, keypad keys will respond as in quake.exe (for example, pushing 'KP_END' will be the same as pushing '1'.) Default 1.

cl_maxpitch   {0...90}
Modify client-side pitch clamping. Default 90 (straight down.) Set to 80 to mimic normal quake.

cl_minpitch   {-90...0}
Modify client-side pitch clamping. Default -90 (straight up.) Set to -70 to mimic normal quake.

con_logcenterprint   {0,1,2}
If 1, centerprint messages will be logged to the console in sp/coop. If 2, they will also be logged in deathmatch. Default 1.

devstats   {0,1}
If 1, prints various the current and peak values of various stats that change over time, such as packetsize, and edicts. Note: even if devstats is set to 0, fitzquake will keep track of peak values so when you turn it on, the peaks are accurate. Devstats display scale follows console text scale. Default 0.

gamma   {0.5...2}
Brighten or darken the screen to compensate for differences between monitors. This is now supported by using your video card's gamma support (works on 3dfx cards, too! I think.) Just like in winquake, values less than 1 are brighter and values greater than one are darker. Default 1.

Notes: If fitzquake crashes, your hardware gamma may be stuck at the wrong value. You can use the "display settings" control panel fix this, or you could try lordhavoc's useful "setgamma" utility (available on this page.)

gl_farclip   {1024...16384}
Sets the distance of OpenGL's far clipping plane. Note that the skybox will always be drawn somewhat closer than this value. Default 16384. Set to 4096 to mimic glquake.

gl_fullbrights   {0,1}
Set to 0 to disable fullbrights. Default 1.

gl_keeptjunctions   {0,1}
Now defaults to 1. (note, contrary to the name of this cvar, what are being kept are the extra polygon vertices which eliminate tjunctions. This is a good thing, so i changed the default to 1)

Now defaults to 0. If 0, textures will be as large as the hardware allows. Positive values can be used to impose a limit smaller than the hardware's reported maximum.

gl_overbright   {0,1}
This variable controls overbright lighting on the world polygons. (For lighting on models, use gl_overbright_models.) If 1, overbright will be enabled and lighting will resemble software Quake. If 0, overbright will be disabled and lighting will resemble GLQuake. Default 1.

gl_overbright_models   {0,1}
If 1, models will be rendered using 2x overbrightening and will appear at roughly the same brightness as they do in software quake, which is noticably brighter than the default fitzquake / glquake appearance. Default 1. Set to 0 to mimic glquake (and speed things up if your card doesn't support texture combiners or multitexture.)

gl_texture_anisotropy   {1...8}
Controls the amount of anisotropy in texture filtering. If 1 or less than 1, texture filtering is normal (isotropic.) If greater than 1, increasing degrees of anisotropic filtering are used, up to the hardware maximum. Set value to 2 for 2x anisotropic, 4 for 4x, etc. Default 1.

host_maxfps   {10...1000}
Sets the maximum frames per second fitzquake will render (also the maximum number of server frames per second.) Clamped to the range 10 - 1000. Default 72. Set to 72 to mimic standard quake.

host_timescale   {0...10}
Scales the passage of time on client and server. Set to 0 or 1 for normal speed, less than 1 for slow motion, and greater than 1 for fast-forward. If greater than 0, overrides host_framerate. Default 0.

max_edicts   {256...32000}
Sets the maximum number of entites on both the client and server. Acceptable values range from 256 to 32000. Set to 600 to mimic standard quake. Changes won't take effect until the next time a map is loaded. Note: if a client connects to a server, and the client's maximum is lower than the server's, the client will probably crash if it ever sees an entnum higher than its local max_edicts. Warning: you may need to increase -heapsize if you want a high max_edicts value. Default 1024.

r_clearcolor   {0...255}
Specify a palette index from 0 to 255. Default 2.

r_drawflat   {0,1}
If 1, polygons will be drawn as a solid color with no lightmap or texture. Default 0.

r_drawworld   {0,1}
If 1, draw world as usual. If 0, don't draw the world. Default 1. (compare r_drawentities)

r_fastsky   {0,1}
If 1, sky will be rendered as solid color, for added performance. Default 0.

r_flatlightstyles   {0,1,2}
If 1, styled lights (torch flicker, etc.) will be displayed as a steady light. If 2, the peak intensity will be used instead of the average intensity. Default 0.

r_lerpmodels   {0,1,2}
If 1, do interpolation on model animations, with exceptions for torches (r_nolerp_list) & muzzleflares (interpolation is suspended for two frames if EF_MUZZLEFLASH is encountered, on the assumption a muzzleflare happens at the same time.) If 2, lerp all animations, without exception. If 0, disable interpolation (to mimic standard quake.) Default 0.

r_lerpmove   {0,1}
If 1, do movement interpolation on MOVETYPE_STEP entities (i.e. monsters.) If 0, disable interpolation (to mimic standard quake.) I recommend that you use r_lerpmove and r_lerpmodels together, or turn them both off, otherwise monsters will move strangely. Default 0.

r_nolerp_list   {comma-delimited-string}
Contains a comma-separated list of filenames of models to exclude from lerping. Filename must include the relative path and extension, for example "progs/flame.mdl". The default is "progs/flame.mdl,progs/flame2.mdl,progs/braztall.mdl,progs/brazshrt.mdl,progs/longtrch.mdl,progs/flame_pyre.mdl,progs/v_saw.mdl,progs/v_xfist.mdl,progs/h2stuff/newfire.mdl". This should include all torches in id1, quoth, and bastion, which look bad when lerped, and the zerstorer chainsaw and xmen fist, which also look bad lerped.

r_oldskyleaf   {0,1}
If 0, surfaces inside sky leaves will be skipped by the renderer. If 1, they will be drawn whenever they are in your PVS, just like any other surface. Default 0.

r_oldwater   {0,1}
If 1, use the old GLQuake method of subdividing the water surface to enable a warping animation. If 0, use the new render-to-texture method. Note: in general, r_oldwater 0 looks better and runs slower. So experiment to see if the performance hit is acceptable to you. Default 1.

r_particles   {0,1,2}
0 = no particles, 1 = circular particles, 2 = square particles. Default 1.

r_showbboxes   {0,1}
If 1, draw a wireframe bounding box around each entity. Note that these are the server-side per-edict physics bounding boxes, not the client-side per-model rendering bboxes. If 0, disable this feature. Default 0.

r_showtris   {0,1}
If 1, draw wireframe outlines for every triangle in the scene. Like in Quake 3, the lines will be visible even through solid geometry. If 2, draw the outlines only on visible surfaces (like r_showtris 2 in Medal of Honor.) If 0, disable wireframe overlay. Default 0.

r_skyalpha   {0...1}
Sets the alpha of the front sky layer. Note that if sky alpha is less than 1.0, the sky will be drawn in two passes even if you have multitexture. Default 1.

r_skyfog   {0...1}
Controls how much the sky is obscured by the fog. 0 = sky is completely unfogged, 1 = sky is completely fogged. Default 0.5.

r_sky_quality   {1...64}
Higher number divides the sky more, for a smoother effect and slower performance. Default 12.

r_quadparticles   {0,1}
If 1, particles are drawn as GL_QUADS instead of GL_TRIANGLES. Quads use 4 verts instead of 3, but the fillrate cost is 1/2 that of triangles. Depending on your card, either one may be faster. This cvar has no effect on the appearance of particles. Default 1.

r_speeds   {0,1,2}
Values of 1 and 2 will give you increasing amounts of information. When you see two numbers separated by a slash, the first number is polys, and the second number is passes. Default 0.

r_stereo   {-8...8}
If nonzero, the scene will be rendered once in red, and again in cyan, with the two views shifted slightly. If you have 3D glasses you can appreciate this (assumes that the left eye is red and the right eye is cyan.) The value of r_stereo sets the eye separation. If your glasses have red on the right eye, use a negative value to flip the views. Default 0.

r_stereodepth   {32...1024}
Sets the distance at which the two views will converge when stereo rendering is active. Default 128.

r_waterquality   {1...64}
Sets the quality of the water when r_oldwater is 0. Lower values give better performance, higher values look better. A value of 4 will provide water that looks at least as good as glquake can get, and 32 is close enough to software quake for all but the most picky. To control the quality of water when r_oldwater is 1, use gl_subdivide_size instead. Default 8.

r_waterwarp   {0,1}
If 0, no underwater warping will take place. Default 1.

scr_clock   {0,1,2,3}
If 1, game time is displayed. If 2, system time is displayed in 12-hour format. If 3, system time will be displayed in 24-hour or "military" time.

scr_conalpha   {0...1}
This is the opacity when the console is halfscreen. Default 1. Set to 0.6 to mimic glquake.

scr_conwdith   {0,320...1600}
Sets the virtual console width, where smaller numbers means larger text. Values larger than window width, or smaller than 320, will be clamped to that range, and all values will be rounded to a multiple of 8. If 0, the window width will be used. Note: values that divide evenly into the window width will make the text look nicest. Default 0.

scr_conscale   {0...5}
Scales the console text larger, but only has an effect when scr_conwidth is 0. Default 1.

scr_crosshairscale   {0...10}
Scales the crosshair larger. 1 = normal, 10 = maximum enlargement. Default 1.

scr_menuscale   {1...5}
Sets the scale factor for menus and other centered overlays. If 1, images will be drawn at 1:1 scale. If 2, images will be double size. Menus will never be drawn smaller than 1:1, and never larger than the size of the window. Note: integer values will make the text look nicest. Default 1.

scr_sbaralpha   {0...1}
Controls the transparency of the statusbar background. 0 = invisible, 1 = opaque (original quake behavior), in-between values give different levels of transparency. Pro tip: set it to 0.99 and it will still appear opaque, but the 3D view will expand to fill the area on both sides of the statusbar. Default 1.

scr_sbarscale   {1...5}
Sets the scale factor for the statusbar. If 1, images will be drawn at 1:1 scale. If 2, images will be double size. The statusbar will never be drawn smaller than 1:1, and never larger than the width of the window. Note: integer values will make the text look nicest. Default 1.

scr_showfps   {0,1}
If 1, FPS are displayed. Default 0.

sv_altnoclip   {0,1}
If 1, enable the alternative noclip movement which resembles quake2 and is not constrained to the horizontal plane. Set to 0 to retain quake's original noclip behavior. Default 1.

v_gunkick   {0,1,2}
If 1, standard quake view kick when you fire your gun. If 2, interpolates the view kick. If 0, disables view kick entirely. Default 1.

vid_bpp   {16,32}
Sets the color depth of the screen in fullscreen mode. Windowed mode ignores this setting. Can be 16 or 32. Default 16. (Changes won't take effect until the next call to vid_restart.)

vid_fullscreen   {0,1}
If 1, fitzquake will run fullscreen. If 0, fitzquake will run in a window. Default 1. (Changes won't take effect until the next call to vid_restart.)

vid_height   {200...1200}
Sets the vertical screen/window resolution. In windowed mode, cannot be less than 200. Default 480. (Changes won't take effect until the next call to vid_restart.)

vid_refreshrate   {60,70,72,75...}
Sets the refresh rate of the screen in fullscreen mode. Windowed mode ignores this setting. Possible values include 60, 70, 72, 75, 85, etc. Default 60. (Changes won't take effect until the next call to vid_restart.)

vid_width   {320...1600}
Sets the horizontal screen/window resolution. In windowed mode, cannot be less than 320. Default 640. (Changes won't take effect until the next call to vid_restart.)

vid_vsync   {0,1}
Set to 1 to enable vertical sync, which eliminates tearing, but caps your framerate at the monitor refreshrate. Set to 0 to disable vertical sync, which allows tearing but doesn't cap your framerate. Note: If fitzquake detects that your driver settings have forced vsync to be disabled, it will post a message to the console saying so, and this cvar will have no effect. Default 0.

Known Bugs

  • with some drivers, the message "VID_gamma_setgamma: failed on SetDeviceGammaRamp" is generated, even though the gamma change actually succeeds.
  • brush entity alpha ignored when rendering sky polys (though alpha -1 is supported to make it fully invisible.) This is inherent to the way sky is rendered.
  • brush entities with alpha<1 are drawn without lightmaps, with -nocombine and gl_overbright 1, or when multitexture is disabled
  • some quoth enemies have lerped muzzleflares when r_lerpmodels=1 becuase they don't have EF_MUZZLEFLASH set on their attack frame, and fitzquake uses this as a hint not to lerp that frame
  • after restarting a map while r_fullbright is enabled, front sky layer is missing, until the first time you disable r_fullbright.
  • 3dfx support broken when using glquake's special opengl.dll (but works with some more recent drivers, I'm told)
  • missing colormaps on dead clients (e.g. frikbots)

  • Other Files

    Fitzquake 0.80 (May 26, 2005)
  • readme: fitzquake080.txt (38k)
  • executable: (231k)
  • source: (634k)

    Fitzquake 0.75 (September 27, 2003)
  • readme: fitzquake075.txt (27k)
  • executable: (221k)
  • source: (693k)

    Fitzquake 0.70 (Novermber 3, 2002)
  • readme: fitzquake070.txt (21k)
  • executable: (217k)
  • source: (700k)

    Fitzquake 0.65 (July 8, 2002)
  • readme: fitzquake065.txt (14k)
  • executable: (215k)
  • source: (691k)

    Fitzquake 0.60 (May 15, 2002)
  • readme: fitzquake060.txt (10k)
  • executable: (214k)
  • source: (723k)

    Setgamma 1.2
  • setgamma12.txt (2k)
  • (36k)

    Setgamma 1.0
  • setgamma.txt (1k)
  • (12k)