Features

  1. Framerate independent physics
  2. Ghost recording
    1. Setting a ghost from the demo menu
    2. Commands
    3. Cvars
    4. Marathon split times
  3. Demo UI
  4. Parameter completion
  5. Demo browser
  6. Avi capturing
    1. Commands
    2. Cvars
  7. Commands history
  8. Demoplaying from .dz files
  9. 32bit textures
  10. Coloured lights
  11. Improved particles
  12. Decals
  13. MD3 models

Framerate independent physics

Server and Client calculates fps differently. The server always operates at a maximum of 72 fps. This guarantees that vanilla Quake physics are kept and also demo files remain backward compatible. The client can operate as many fps as possible, so users can - for example - match their desired max fps to their monitor’s refresh rate to achieve a much smoother gameplay experience.

Use cl_maxfps <value> to set your desired framerate.
Use vid_displayfrequency <value> to set your desired monitor refresh rate.

Ghost recording

The ghost feature shows the player from a demo file while you are playing the game or watching another demo file. This is useful for speedruns to know where you are relative to a reference demo, and to indicate where you could be faster.

Setting a ghost from the demo menu

From the demo menu, press ctrl-enter to set a demo file as a ghost, and ctrl-shift-enter to remove the ghost.

Commands

  • ghost <demo-file>: Load ghost from the given demo file. With no arguments it will show information about the current ghost, if any. Only one ghost may be added at a time.
  • ghost_remove: Remove the current ghost, if any is added.
  • ghost_shift <t>: Shift the ghost to be the given number of seconds infront of the player. Useful if you lose the ghost but you still want to see its route.
  • ghost_shift_reset: Undo the effect of ghost_shift, and put the ghost back to its correct position.

Cvars

  • ghost_delta [0|1]: Show how far ahead or behind the ghost you currently are. This is unaffected by ghost_shift.
  • ghost_range <distance>: Hide the ghost when it is within this distance.
  • ghost_alpha <float>: Change how transparent the ghost is. 0 is fully transparent, 1 is fully opaque.
  • ghost_marathon_split: When set to 1, show the live marathon split, rather than the level split. Default 0.
  • ghost_bar_x, ghost_bar_y: Set the position of the ghost bar.
  • ghost_bar_alpha: Set the transparency of the ghost bar.

Marathon split times

When a ghost is loaded a split time is shown on the intermission screen and printed to the console at the end of each level. If a marathon demo is loaded as the ghost, and the player is also running a marathon, then split times for each level are shown. Splits are also shown when playing a demo with a ghost loaded.

Demo UI

JoeQuake features a media player-style interface for navigating demos. Simply move the mouse when a demo is playing to activate the UI.

The interface has the following elements, from bottom-to-top, left-to-right:

  • Pause/play: Click to pause and resume demo playback.
  • Seek bar: Click to seek through time on the current map. Using the mouse wheel in this area jumps back and forward in one second increments. There is a small marker above the seek bar indicating the time when the player finishes the map.
  • Time: Elapsed time and total time (including intermission) for the current map.
  • Speed: Increase and decrease demo playback speed by clicking the arrow controls or by using the mouse wheel in this area.
  • Freefly mode (FF): Toggles between freefly camera and first-person camera mode.
  • Map selector: Shows the current map. On a multi-map (marathon) demo clicking the arrow controls or using the mouse wheel in this area will skip from map to map. Click between the arrows to toggle the map menu.
  • Map menu: Shows all maps in the current demo. Click on a map to skip straight to it. Clicking outside of the demo UI will close the map menu.

Tips and tricks:

  • Clicking outside of the demo UI (when the map menu is closed) will pause or resume demo playback.
  • Leave the mouse still and the UI will disappear after a short wait. The timeout can be changed with cl_demouitimeout and the hiding animation sped up with cl_demouihidespeed.
  • Bind keys to the commands demoskip and demoseek to enable keyboard shortcut navigation. For example, bind demoskip +1 to skip to the next map, or demoseek -5 to seek backwards 5 seconds.
  • Navigate to the end of a marathon demo, pause, and load a ghost to get instant split times between the two demos.
  • Disable the UI with the cl_demoui cvar. demoseek and demoskip commands will still work when the UI is disabled.
  • When in freefly mode, hold the right mouse button to control the camera’s view angle.

Skipping between maps of marathon demos is only currently supported for single file marathons. Demos which consist of multiple individual demo files are not yet supported by the UI.

Parameter completion

Parameter completion means if you’re using a command requiring a filename (playdemo for example), then when you’re pressing TAB you’re gonna get a list of files matching to the written wildcard, just like with the dir or demdir commands. For example you typed the following to the console:

]playdemo e1m1

After pressing TAB you’re getting a list of all e1m1*.dem files. The wildcard will be updated with the longest common string of the matching filenames. If only one file was found, the wildcard’s gonna be replaced with that.

Parameter completion works for the following commands:

  • playdemo
  • capture_start
  • capturedemo
  • printtxt
  • map
  • exec
  • load
  • loadsky\r_skybox
  • loadcharset\gl_consolefont
  • crosshairimage

None of them require any extension to be given, they’ll automatically find their filetypes.

Demo browser

JoeQuake has a dedicated Demos main menu which provides a shell of all your Quake subdirectories, and you may browse between these folders and watch demos in any folder.

The Demos menu displays all the .dem and also the .dz (dzip compressed demo) files. There is no need to extract .dz files, you can start watching compressed demos immediately, JoeQuake covers the whole process (extracts the .dz to a temporary .dem and purges this temp file after playback is finished).

You can also set demos as your ghost here. Press Ctrl+Enter to set a selected demo as ghost and Ctrl+Shift+Enter to clear an already set ghost. See more about Ghost recording mode here.

Avi capturing

JoeQuake uses avi capturing written by Anthony Bailey. An important thing you should know about: this is mainly for capturing demos, not gameplay.

Commands

  • capture_start <avi-file>: Start capturing to the given AVI file.
  • capture_end: Stop an ongoing capturing.
  • capturedemo <demo-file>: Start playing a demo and at the same time also start capturing to an AVI file with the same name.

Cvars

  • capture_avi [0|1]: When set to 1, the captured video stream will be saved to an AVI file. Otherwise every captured frame will be saved as an individual TGA image.
  • capture_avi_split <value>: This to the number of megabytes at which to split captured video into more than one AVI file. The used video capture module has a problem with files getting corrupted when reaching a size of over 2 gigabytes, so splitting them into smaller files is a good idea to avoid this corruption. Default is 1900 megabytes. Setting to 0 disables splitting.
  • capture_codec <codec_fourcc>: Look for the codec having the specified fourcc code to compress the video with. If the fourcc code is set to 0, the created AVI file will be uncompressed.
  • capture_fps <value>: Set on how many frames/sec you wish the video to be captured.
  • capture_dir <path>: Set the directory path where avis to be saved while capturing. You can define relative and absolute paths: e.g. capture would mean the subfolder in your Quake root directory and e.g. c:\My captures is an absolute path.
  • capture_mp3 [0|1]: When set to 1, the captured audio will be mp3 compressed, otherwise uncompressed.
  • capture_mp3_kbps <value>: Set mp3 compression bitrate, only works if capture_mp3 is set to 1.
  • capture_console [0|1]: When set to 0, capturing will be suspended while the console is pulled down.

Sound issues: capturing supports up to 44 KHz sounds too, but I personally don’t recommend recording the audio on that sample. The reason is that all the Quake sounds are originally recorded on 11 KHz, and simply playing them on higher sample doesn’t actually make them sound better. If you want to use 22 or 44 KHz sounds at any price, I advise you to get a good editor (like SoundForge), and resample the audio using that.

Commands history

Added from [sons]Quake. The last 64 console lines are stored in a file cmdhist.dat in the main Quake folder, so than you can use cmd history after quitting/restarting the game.

Demoplaying from .dz files

Speed demos archive uses its own demo compression tool called Dzip, which was founded exclusively for Quake demo files. The speedruns you download from SDA are all dzip compressed.

You can use .dz files as the playdemo command’s parameter, it’ll be automatically extracted and played. This also works from the Demos menu.
IMPORTANT: make sure the dzip binary (dzip.exe, comes with the JoeQuake zip) is present in your main Quake folder.

32bit textures

JoeQuake supports external textures in TGA, PNG and JPEG/JPG formats.

All textures go to a textures folder, which can contain the following subfolders:

  • bmodels for brush model textures (maps, ammo boxes)
  • models for alias model textures (player, monsters, items, etc)
  • sprites for sprite model textures (explosion, water bubbles)
  • wad for hud pictures
  • charsets for custom character sets
  • particles for custom particle images (read more advanced particles below)

The only exceptions are the followings:

  • Custom crosshairimages go to crosshairs folder.
  • Custom skyboxes go either to env or to gfx/env folder.

You can also create map name folders, so then the textures for that map will be loaded from there (e.g. textures/ztndm3).

You can download hi-resolution map textures from the Quake Retexturing project page.
For other hi-resolution textures I recommend visiting the gfx.quakeworld.nu site.

32bit textures

Coloured lights

Both dynamic and static colored lights are available in JoeQuake.

  • For dynamic colored lights, you can choose from various colors to set your desired explosion or rocket lighting. See more details at r_explosionlightcolor and r_rocketlightcolor
  • For static colored lights, you can download .lit files (these contain the color information for maps) from the internet (just google for them). You need to place these files either to maps/lits or to lits folder.

Static colored lights

Improved particles

JoeQuake has 3 particle themes:

  • Classic (default)
  • QMB
  • Quake 3

To quickly switch between these 3 themes, use the toggleparticles command.
You can choose to override only individual categories:

  • Explosions (gl_part_explosions)
  • Blood (gl_part_blood)
  • Trails (gl_part_trails)
  • Gunshots (gl_part_gunshots)
  • Spikes (nail shots) (gl_part_spikes)
  • Blob explosions (gl_part_blobs)
  • Lava splash (gl_part_lavasplash)
  • Flames (gl_part_flames)
  • Lightning (gl_part_lightning)

Valid values for these categories are [0|1|2] meaning Classic/QMB/Quake 3.
You can also mix particle themes from these categories. For example, you can have QMB style blood, Quake 3 style explosions and classic style gunshots at the same time. Go to the Options / Particle options menu to customize your particles settings.

Please note that Quake 3 style is only implemented for:

  • Explosions
  • Blood
  • Trails
  • Gunshots
  • Spikes (nail shots)
  • Flames

There are 3 additional particle effects:

  • Muzzleflash (gl_part_muzzleflash)
  • Damagesplash (gl_part_damagesplash)
  • Bouncing particles (only for QMB gunshots/spikes) (gl_bounceparticles)

See the Settings page for a detailed description about additional particle effects.

Decals

JoeQuake can display decal patches on floors and walls, when using QMB or Quake 3 style particle effects. For example, a soot stain after an explosion or blood splatters after monster gibs.
Similarly to particles, you can override the following individual categories:

  • Blood splatters (gl_decal_blood)
  • Bullet holes (gl_decal_bullets)
  • Spark trails (gl_decal_sparks)
  • Explosion marks (gl_decal_explosions)

To quickly switch on/off decals, use the toggledecals command.
Go to the Options / Decal options menu to customize your decal settings.

Additional decal options:

  • Decal view distance (gl_decal_viewdistance)
  • Decal visibility time (gl_decaltime)

See the Settings page for a detailed description about additional decal options.

MD3 models

JoeQuake supports model files in MD3 format. To get MD3 models loaded, set gl_loadq3models 1 in the console, or in the menu turn the Options / Renderer options / Load MD3 models setting to ON.

All MD3 models must be placed in the progs subfolder and have the same name as the regular MDL model files. For example to override the grenade.mdl file, you have to put the grenade.md3 file into the progs subfolder.

You can also use Quake 3 player multimodels in JoeQuake the following way:

  • Create a player subfolder in the progs folder.
  • Copy the lower.md3, upper.md3 and head.md3 model files of your desired Quake 3 player.
  • Copy skin files of each multimodel (e.g. lower_*.skin, head_*.skin, etc). JoeQuake can only handle 1 skin at a time, so make sure you only place 1 skin per model, otherwise the texture for the multimodel will not be displayed properly.
  • Copy the animation.cfg file.
  • You can also have view weapons displayed in the player’s hand. You have to place the weapon models to the progs folder with the following naming convention: w_<q1-weapon-name>.md3 (e.g. w_shot.md3 for shotgun, w_nail.md3 for nailgun, etc). I encourage you to familiarize yourself with Quake weapon names by looking into the Quake *.pak files.

Quake 3 players