AfterQuake updated!

Previous posts: Introducing AfterQuake and Details on AfterQuake usage

AfterQuake package has been updated. Here’s whats new:

  • latest FTE binary included (the first release binary had a bug – which disabled automatic updates. You should manually update from here – or just download AQ again);
  • Merged Binary with opengl, d3d and vulkan renderer is now included. More info below;
  • “fps” demo included. You can view which renderer is better for you. To benchmark type /timedemo demos/fps in the console;
  • new Downloads menu. Yikes! all the stuff!
  • Check FTE’s changelog for more detail;


Download the updated package now! Installation instructions on the first post.

Prepare yourself for a revisited Single Player campaign!

Graphic renderers

In this section we will talk a bit about the different renderers FTE provides. AfterQuake includes the merged renderer binary and the gl renderer. To use /setrenderer you will need to use the merged one, or download the specific renderers binaries and ignore /setrenderer.

OpenGL: /setrenderer gl

Old Faithful. Portable, but showing its age. This has so far been FTE’s favoured renderer, and is still the only one with all major features.

Direct 3D: /setrenderer d3d9

Tied to a specific operating system and strictly controlled by Microsoft. Its focus on only gaming and its popularity in benchmarks means the drivers have few weaknesses and will typically achive the higher framerates in the general case.

Vulkan: /setrenderer vk

The new plucky upstart. Vulkan is aimed at reducing CPU time and the ability to properly use multiple threads. Fantastic at low resolutions, but thanks to drivers failing to deal with fullscreen applications this can be the worst choice with low-detail fullscreen games like Quake. Hopefully this will change in time.

Note: Vulkan requires an updated version of your graphic card drivers, and might not be supported even then.


The following table summarizes which features are currently present in the different renderers. (Renderers may support partial implementations of things which can be expected to glitch, these are considered as not implemented. These things will hopefully be implemented in the future. )



Direct 3d


Dynamic lights




“fisheye” projections Y N N
 Bloom Y N N
 Quake3 Shaders Y Y Y
 Water Refraction Y N Y
 Vanilla Style Y N Y
 Specular+Bumpmaps+Offsetmapping Y N Y




Unknown features of the day

r_dynamic -1

r_dynamic has a different behaviour from many other engines. In FTE, /gl_flashblend (obsoleted by /r_coronas) enables glquake-style dlights, while /r_dynamic controls whether lightmaps are updated by rtlights. To disable lightstyle animations, /r_lightstylespeed should be set to 0, preventing them from animating but allowing light switches to still work.

r_dynamic 1: use lightmap editing to provide dynamic lighting effects. On some systems you may wish to just use shadowless rtlights instead.

r_dynamic 0: ignore dlights when animating lightmaps, this gives a speedup as they don't need to be updated so often.

r_dynamic -1: move lightmap animations as well as surface batching to an entirely different CPU thread (and ignores dlights). This setting also activates a different batching mechanism for the world, where the scene is cached from one frame to the next, with all the geometry being regenerated dependant upon temporal coherancy. Essentually, this means that the rendering thread can skip a whole load of work and spend more time throwing things at the GPU. On complex maps, this is a significant speedup.

Bottom line, if you like playing in big maps, /r_dynamic -1 is your new best friend.



Setting this cvar causes the game to be drawn to a cubemap, which can then easily be sampled from according to the projection chosen.

  1. stereographic (aka: pannini).
  2. fisheye (blub. blub. blub.)
  3. panoramic (fantastic for map screenshots)
  4. lambert azimuthal equal-area (probably not that useful).
  5. Equirectangular (oh hey look its a map of the globe!)

/r_projection will be disabled by pretty much all rulesets. To simplify this it is generally best to use the ‘/ffov’ cvar to control increased fovs, and the regular ‘/fov‘ cvar to control limited fovs.


The Console

FTE’s console is amazing!

  • ^1^7 quake3 colours
  • ^b blinking text
  • ^&FB Ansi colour codes. The two letters should be hex codes for the foreground and background colours. The background is opaque, but can be transparent if – is used instead of a hex char.
  • ^xRGB Specifies a specific 12-bit colour value for the following text.
  • ^{XXXX} Specifies an explicit unicode char value. Note that Quake’s chars are mapped to the E0XX range, while various hud images are in the E1XX range, if you want to embed some of those images.
  • The engine can support unicode text using the mechanism above, but in order for it to be displayed correctly, you’ll need a unicode font, eg: ‘/gl_font cour‘, which will use courier from yor windows’ fonts directory.
  • ^[/foobar^] console links, this example can be clicked to provide hints to other people for console commands to use (like ^[/connect x.y.z.w^]).
  • There are additional types of links which contain a trailing ‘infokey’ string, and can be context-dependant. For instance, ^[Hello\tip\I SAID HELLO^] will display some text when the mouse cursor is moved over it. ^[\img\gfx/conback.lmp^] can embed images, but only when it is the first thing on the line (hurrah for the echo command).
  • player names are also normally clickable, giving a couple of options (especially if you’re hosting a listen server).
  • The dir command will provide clickable filenames for extensions/paths that it recognises, to view/edit those files.
  • left-click and drag to scroll the console up/down.
  • right-click and drag to copy text to the clipboard. Paste it back with ctrl+v (or into other programs).
  • tab attempts to completes the command, up until the next deviation. Alternative completions will be displayed as footer text.
  • ctrl+space autocompletes the full predicted command.
  • Command/cvar descriptions will be displayed as footer text, where provided.
  • If you don’t know the full name/prefix of a command, type /apropos followed by what you do know, and the engine will display a list of the cvars/commands that contain your snippet as part of their name or description.


Mega Screenshots

This little feature uses render-to-texture rather than rendering stuff to whatever puny window you have. This allows the high-resolution screenshots, and by high-resolution, I mean 16384*16384. Each of these commands take a filename argument followed by width then height. The width and height are still limited by your GPU, but have absolutely no dependancy on your monitor or window size etc.

  • screenshot_mega: Takes a ‘simple’ large screenshot.
  • screenshot_stereo: Takes two screenshots side-by-side with a small(r_stereo_separation) offset (also assumed by screenshot_mega with the .pns extension).
  • screenshot_vr: Takes many many many screenshots giving a horizontal 360 perspective that can be viewed with a few different display software.

The resulting filename will be displayed in the console (as a more easily findable system path).

And hop in a server every once in a while…



This renders the game view at a different resolution than your screen. A value of 2 is good for supersampling, giving a smoother appearance even mid-surface (unlike msaa), without needing to resort to bluring (read: fxaa). Fantastic looks. A value of 0.5 can give a small speedup with complex scenes involving many rtlights or reflections.

Values above 1 should not normally be used in conjunction with /r_fxaa. The result is not desirable, while smaller values are positively weird, but awesome with it.



Yeah, FTE has bloom. So does my dog, if I had one. Yes its just a glorified blur filter. What do you mean blurring is annoying? Anyway, here’s some fun cvars to glitch it out for an awesome sylised effect:

/r_bloom 1; r_bloom_filter 0; r_bloom_retain -3;

Don’t forget to reset those cvars to their defaults once you’ve gotten bored of it.



To use voip, either simply bind something to +voip, or set the cl_voip_send cvar (both should be listed somewhere in the menus).

Voip requires a compatible server, but should work on both fte+mvdsv. Obviously the person you’re trying to talk to needs a client that supports it too, as well as have it enabled.

You can check your volume levels compared to other people by setting cl_voip_test (also should be in the menus). This will echo your microphone back to you through the engine, ensuring levels are correct. If it makes a horrible noise, remember that you’re probably echoing back lots of noise to other players, so reduce your mic level! Yay menus!

Voip data will normally be recorded into MVDs.



Why stop to type those insults at that enemy who annoys you when you can just verbally abuse him? Just use the ‘stt’ command (use it again to disable it) and insult to your heart’s content!

What do you mean he laughed at your gibberish? Oh well, I guess it was all only a gimmick anyway.


Split Screen

cl_splitscreen specifies the number of additional clients to use (0=single, 1=two-way, 3=four-way splitscreen). Start a game with coop or deathmatch set, and you can dynamically add+remove clients on the fly by tweaking this cvar.

Input is expected to be done with game controllers. ‘/in_xinput 1; /in_restart‘ to enable xinput on windows. Failing that, ‘/joystick 1; /in_restart‘, but don’t use both. With rawinput, its also possible to use separate mice for each player. You can also bind different keys on your keyboard to control different players (eg: /bind uparrow “+p2 forward”).

If you wish to use splitscreen on public servers, you will need to get the server admin to enable splitscreen by setting ‘allow_splitscreen 1’ on the server (FTE servers only).

This slideshow requires JavaScript.


Download Menu

The in-engine download menu provides easy access to install/uninstall additional packages, or simply update them more easily. You should be able to find retexturing packages and rtlight definitions in here, of note are the in-game editor (which needs cheats or singleplayer to use), as well as a number of additional plugins.

While FTE has had a ‘/menu_download‘ command for a while, its options didn’t include anything noteworthy and it wasn’t exactly advertised whatsoever. It should now actually be usable! Hurrah!


Quake Injector

The Quake Injector plugin downloads mods and metadata from The mods are downloaded and run from cached zips within the downloads directory, rather than having their own individual game directories. Most entries are maps, but many will have dependancies. Note that few mods have directly been tested with FTE, but a number of those that have do require /sv_nqplayerphysics to be set to 1 (alternatively enabled via the ‘compatibility’ game config).

fte-20160726235856-0Quake Injector plugin in all his glory. Double click and insta-play!


IRC Client

FTE provides an IRC client using an external plugin (get it from Downloads menu) You can connect to FTE’s irc channel with this command:

/irc /connect "#fte" YourNickHere

Note that if you want to connect to other channels, you should do so with /join rather than creating additional connections to the server (irc servers don’t apprechiate that sort of thing). Once connected, you can use normal irc slash-commands within the irc] window. IRC connections will be re-established when you restart the engine, saving you from re-entering any passwords (which is probably a good thing if you intend to stream on twitch) – use /quit to forget about the server, or /part to leave a single channel. Yes, the initial connect window is annoying.


For twitch irc, you’ll first need to get an oauth token from I’ve not tested twitch irc, so take that with a pinch of salt, you’ll need to figure out the channel names yourself.

/irc /connect "#somechannel" YourTwitchNick "oauth:deadbeefdeadbeefdeadbeef"


XMPP (and holepunching)

(Because apparently IRC is not social…)

XMPP, originally known as the jabber protocol, is an open xml-based network protocol supported by many different networks. Some of which support affiliation, but there are notable exceptions. Despite the wording in the plugin, it is unable to create new accounts, you can only tell the plugin about existing accounts. The plugin uses embedded clickable links for its user interface. Click them to walk through the account opening process. It is not possible to configure an avatar image within the plugin, but it can display the avatars of your friends if they’re set by an external client or web interface.

If your friends are also connected with FTE’s XMPP plugin, the ‘invite’ and ‘join’ options will appear within your buddy list. These can be used to establish a game with holepunching through a NAT, which is fantastic for coop (for deathmatch there tend to be enough public servers already).

Google still provide an xmpp server, however, to connect to their network requires the use of oauth2, which is really quite horrible. Apparently exposing your password to a web browser is preferable to keeping it away from major sources of malware.



This is a modder feature – manifest files are how you can reconfigure FTE to forget that it was ever a quake engine, and have it run your mod instead, just grab default.fmf from afterquake or whatever and modify it for your own mod. You can also directly embed the manifest into the exe along with an icon to fully rebrand it as far as the user is likely to see (‘-makeinstaller foo’ on the commandline will write out a new foo.exe based on foo.fmf).

Manifest documentation is here:


QC Debugging

Open up your progs.src with fteqccgui (set up a file association or something). Hit f5, tell it the basedir of your quake install (guessed as two levels up from your .src file), tell it the engine to use (ie: fteqw.exe). And then debug away! Hit f9 to set breakpoints, f11 to single-step. Any qc errors that your code triggers will be displayed simply within the debugger.



Its like a party in here!

FTE’s particles are all sorts of crazy, from various different spawn patterns, to custom shaders with embedded glsl. They’re really quite versatile, with the ability to generate lights, sounds, models, decals, and even other particles. They’re also documented here:

You should probably start with purplehaze’s various particles, packaged in AfterQuake.


And So Much More

CSQC, Advanced SSQC, BSP2, Lit files, RealTime Lighting, Specular, Bumpmapping, Paralax mapping, Refraction, Reflection, NetQuake mods, QuakeWorld mods, plays Quake2, plays Hexen2, Quake3 support too! Doppler, OpenAL Reverb, Ogg, Voip. Ingame brush editing, skeletal models. Cake Dispensers, oh wait, sorry, that one is a lie. A javascript port, an embedded web browser, 360 degree vision, walking on the ceiling, portals, 6dof, custom huds, skyboxes, fog, etc etc.

Now we just need someone to actually use all of those…


You can reach Spike @ Quakenet IRC, #fte