Read Me
- AfterQuake Content Package
- Engine-Only Download
- QuakeC Compiler
- Windows
- Linux
- MacOS
- Droid
- Quake / QuakeWorld
- Quake 2
- Quake III Arena
- Hexen2
AfterQuake Package
AfterQuake is the easy way to start your Quake experience (on windows, anyway).Simply download the zip, extract it somewhere, optionally throw in pak1.pak if you have it (recommended, but vital only for singleplayer), and play!
AfterQuake is intended to cater to pretty much anyone - if you don't want any of the high-res textures you can simply disable the relevant packages inside the downloads menu.
Note that to simplify the AfterQuake package, it is suitable ONLY for running Quake or QuakeWorld.
Engine-Only Downloads
Engine-only downloads are for purists that know more about what they're doing (or people who just want to manually update afterquake with smaller downloads).You can simply copy the binary into your existing quake/quake2/quake3/hexen2 directory and run it - it only needs the gamedata in order to run (except for quake2, which also requires a third-party-mod-specific dll/shared object for singleplayer or server functionality).
QuakeC Compiler
Documentation for the compiler's syntax and features can be found here.Windows
Note that while the 32bit and 64bit builds are basically equivelent, you may still find you wish to use the 32bit build on account of 3rd-party libraries that are generally not available for win64 - this is especially true for Quake2 mods.Linux
If you're getting crashes with a stack trace involving XIFreeDeviceInfo, you may find that using -noxi2 on the commandline will disable the unstable library in question.FTE does have direct support for Wayland now, but it is still experimental so will be enabled only through explicit choice (renderers can be configured via the menus), or if x11 fails to init.
MacOS
I am unable to support MacOSX myself. Public builds (using SDL) are instead built by a 3rd party (AKA a guy named, Tuna!), but this generally means that their versions lag behind quite significantly.You may be able to compile your own.
Droid
Android builds are currently rather crashy, but at least they can work with the right settings. Hopefully this'll get fixed eventually.Either way, touchscreens kinda suck, so don't expect to use it for much more than a qtv/demo viewer, unless you have some bluetooth keyboard, mouse, or gamepad.
Quake / QuakeWorld
Quake and QuakeWorld are FTE's primary focus. Much time has been spent getting the engine to transparently handle the distinctions between the two such that it no longer matters what branch you're trying to play, FTE will just work, and in a way that is the best of both worlds.Quake 2
The vanilla quake2 gamecode is specific to 32bit windows, and has a bug that causes saved games to fail with ASLR etc.For this reason, replacement gamecode can be installed via the downloads menu, and will be used in preference to the baseq2 gamecode when installed. This gamecode is from yamagi quake2, so it fixes the saved game issue and is thus useful even on x86.
FTE uses the vanilla API so mods mods should still work if they're compiled for your cpu+system. FTE still does not provide gamecode for the mission packs.
Quake III Arena
FTE has support for running Quake3. The mission pack is not supported at this time, and this also means that mods are likely to not work.To run, simply place fteqw.exe into your quake3 dir and then just run it.
FTE is unable to connect to punkbuster-enabled servers, and general network connectivity is not well tested (see: mods).
Thanks to Quake3's preferential use of qvm files instead of dlls, there is not normally any issue with operating system / cpu type.
Hexen, Two
FTE has support for both Hexen2 and its mission pack (Portals of Praevus). Just place fteqw.exe into your hexen2 directory and run it.Note that FTE is not network-compatible with other hexen2 engines, at all. Most mods and maps should work though (its mostly just a glorified quake mod). For best results use the missionpack - it has numerous fixes for bugs in the original's gamecode.
Virus Scanners
FTE is a large project, with lots of networking code and lots of older versions still available. Unfortunately, this means that there's a lot of interesting code that scanners can find false positives inside.While I cannot promise that my code is bug-free, what I can say is that there is no malicious intent in my code, and I am not aware of any in third party libraries.
In terms of privacy, the engine does phone home (via https) in order to check for updates. The only information reported to the server is to identify the exe build type+version, this is not used for telemetry.
The website uses a self-signed certificate at this time. This is required to prevent dns takeovers being able to replace binary updates (as happened with fteqw.com), but unfortunately is not specific to the update system at this time, resulting in scary warnings about untrusted certificates.
If you're having troubles connecting to this site (I'm not going to ask how you're reading this) then submit a complaint to your malware scanner provider (or just disable its spyware-like network sniffing).
Making And Releasing Content
For developing new content, I'd recommend adopting a package-first mentality - place your various data into .pk3dir subdirs. Then you can just compress the finished content of those directories into pk3s for release.To distribute your content, you can ask users to use 'pkg addsource https://urltoyourserver/foo.txt' ('pkg remsource https://foo' to remove it again, 'pkg sources' to list active sources). You can then update foo.txt to push updated versions (or additional packages), you can find an example package list here. To release a standalone mod, you should include a default.fmf file with your data. This file provides filesystem and rebranding information, information for the default package source, as well as a list of packages that the user will be nudged towards installing (if not already installed).
Mapping Features
Limits:- protocol limit: this is controlled with the sv_bigcoords cvar. 0 = +/-4096, 1 = floats. empty(default) = autodetect based on whether an entity is outside the +/-4k boundary
- bspx format is supported, as are bsp29 maps with node counts greater than 32k (eating into the leaf limit).
- _skyfog: Controls the alpha value of fog when applied to sky surfaces, set to 0 to have sky ignore fog entirely.
- _fog: Controls the default fog in the map. This field should be of the form "
[alpha] [depthbias]". By default, the interpretation of density matches that of eg Quakespasm instead of other less-standard interpretations. - _waterfog: Controls the fog values when the camera is underwater (or unfortunately in slime+lava too).
- _cvar_*: Allows a mapper to override any cvar value for the duration of the map.
Note: due to cvars so often being engine-specific, this should be used with caution. - _wateralpha: Overrides the r_wateralpha cvar, as well as forcing r_waterstyle 1. This typically also affects slime/lava/tele surfaces too unless those are also overriden.
- _slimealpha: Sets an explicit alpha value for slime surfaces.
- _lavaalpha: Sets an explicit alpha value for lava surfaces. Set to 1 to mimic hexen2.
- _telealpha: Sets an explicit alpha value for tele surfaces.
- _skyroom: Set to the x y z coords of the center of your skyroom. Sky surfaces will then show the skyroom in place of regular sky surfaces (sky surfaces inside the skyroom itself will render as normal).
- _skyname / _sky: Overrides sky surfaces with an explicit skybox name (without needing to resort to shaders).
- _skyrotate: Sets the speed at which any skybox will rotate at.
- _skyaxis: Specifies an x/y/z direction around which the skybox will rotate, eg 0 0 1 will feel like a merry-go-round.
- misc_model: this entity will effectively be passed to the makestatic builtin, and can be used to place arbitrary .iqm/.md3/.mdl entities. Usable fields include all renderable fields. However, use of makestatic means that the targetname field is irrelevant, and it cannot be killtargetted.
- func_group/func_detail/func_detail_illusionary/func_detail_wall/func_detail_fence: These entities are handled for purely for .map loading to not bug out so obviously, for compat with various compiler tool chains. You will not see any of the normal advantages of these entity types, they will unfortunately be treated as more equivelent to func_illusionary or func_wall rather than as an optimised part of the worldmodel itself.
- traileffect: This is a string value that can be used as a way to set the traileffectnum field directly from an editor, to force a custom particle trail upon specific entitites as they move.
- emiteffect: This is a string value that can be used as a way to set the emiteffectnum field directly from an editor, to force a custom particle trail upon specific entitites that is emitted constantly regardless of whether they move or not.
- sky/fog: These fields are checked purely to mute any warnings about unknown fields, for maps that try using them in the worldspawn entity without the normal leading underscore.