FTEQW
Documentation of the FTE engine source tree.
config_fteqw.h
Go to the documentation of this file.
1// Build-Config file for FTE's standard builds, the default settings.
2// to use: make FTE_CONFIG=fteqw
3
4// Features should either be commented or not. If you change undefs to defines or vice versa then expect problems.
5// Later code will disable any features if they're not supported on the current platform, so don't worry about win/lin/mac/android/web/etc here - any such issues should be fixed elsewhere.
6
7//general rebranding
8//#define DISTRIBUTION "FTE" //should be kept short. 8 or less letters is good, with no spaces.
9//#define DISTRIBUTIONLONG "Forethought Entertainment" //think of this as your company name. It isn't shown too often, so can be quite long.
10//#define FULLENGINENAME "FTE Quake" //nominally user-visible name.
11//#define ENGINEWEBSITE "http://fte.triptohell.info" //for shameless self-promotion purposes.
12//#define BRANDING_ICON "fte_eukara.ico" //The file to use in windows' resource files - for linux your game should include an icon.[png|ico] file in the game's data.
13
14//filesystem rebranding
15//#define GAME_SHORTNAME "quake" //short alphanumeric description
16//#define GAME_FULLNAME FULLENGINENAME //full name of the game we're playing
17//#define GAME_BASEGAMES GAME_SHORTNAME //comma-separate list of basegame strings to use
18//#define GAME_PROTOCOL "FTE-Quake" //so other games won't show up in the server browser
19//#define GAME_DEFAULTPORT 27500 //slightly reduces the chance of people connecting to the wrong type of server
20//#define GAME_IDENTIFYINGFILES NULL //with multiple games, this string-list gives verification that the basedir is actually valid. if null, will just be assumed correct.
21//#define GAME_DOWNLOADSURL NULL //url for the package manger to update from
22//#define GAME_DEFAULTCMDS NULL //a string containing the things you want to exec in order to override default.cfg
23
24
25// Allowed renderers... There should ONLY be undefs here (other C files won't be pulled in automatically)
26//#undef GLQUAKE
27//#undef D3D8QUAKE
28//#undef D3D9QUAKE
29//#undef D3D11QUAKE
30//#undef VKQUAKE
31//#undef HEADLESSQUAKE //no-op renderer...
32//#undef WAYLANDQUAKE //linux only
33
34//Misc Renderer stuff
35#define PSET_CLASSIC //support the 'classic' particle system, for that classic quake feel.
36#define PSET_SCRIPT //scriptable particles (both fte's and importing effectinfo)
37#define RTLIGHTS
38#define RUNTIMELIGHTING //automatic generation of .lit files
39#define R_XFLIP //old silly thing
40
41//Extra misc features.
42//#define CLIENTONLY //
43#define MULTITHREAD //misc basic multithreading - dsound, downloads, basic stuff that's unlikely to have race conditions.
44#define LOADERTHREAD //worker threads for loading misc stuff. falls back on main thread if not supported.
45#define AVAIL_DINPUT
46#define SIDEVIEWS 4 //enable secondary/reverse views.
47#define MAX_SPLITS 4u
48#define VERTEXINDEXBYTES 2 //16bit indexes work everywhere but may break some file types, 32bit indexes are optional in gles<=2 and d3d<=9 and take more memory/copying but allow for bigger batches/models. Plugins need to be compiled the same way so this is no longer set per-renderer.
49#define TEXTEDITOR //my funky text editor! its awesome!
50#define PLUGINS //support for external plugins (like huds or fancy menus or whatever)
51#define USE_SQLITE //sql-database-as-file support
52#define IPLOG //track player's ip addresses (any decent server will hide ip addresses, so this probably isn't that useful, but nq players expect it)
53
54//Filesystem formats
55#define PACKAGE_PK3 //aka zips. we support utf8,zip64,spans,weakcrypto,(deflate),(bzip2),symlinks. we do not support strongcrypto nor any of the other compression schemes.
56#define PACKAGE_Q1PAK //also q2
57//#define PACKAGE_DOOMWAD //doom wad support (generates various file names, and adds support for doom's audio, sprites, etc)
58#define AVAIL_XZDEC //.xz decompression
59#define AVAIL_GZDEC //.gz decompression
60#define AVAIL_ZLIB //whether pk3s can be compressed or not.
61//#define AVAIL_BZLIB //whether pk3s can use bz2 compression
62#define PACKAGE_DZIP //.dzip support for smaller demos (which are actually more like pak files and can store ANY type of file)
63
64//Map formats
65#define Q1BSPS //Quake1
66#define Q2BSPS //Quake2
67#define Q3BSPS //Quake3, as well as a load of other games too...
68#define RFBSPS //qfusion's bsp format / jk2o etc.
69#define TERRAIN //FTE's terrain, as well as .map support
70//#define DOOMWADS //map support, filesystem support is separate.
71//#define MAP_PROC //doom3...
72
73//Model formats
74#define SPRMODELS //Quake's sprites
75#define SP2MODELS //Quake2's models
76#define DSPMODELS //Doom sprites!
77#define MD1MODELS //Quake's models.
78#define MD2MODELS //Quake2's models
79#define MD3MODELS //Quake3's models, also often used for q1 etc too.
80#define MD5MODELS //Doom3 models.
81#define ZYMOTICMODELS //nexuiz uses these, for some reason.
82#define DPMMODELS //these keep popping up, despite being a weak format.
83#define PSKMODELS //unreal's interchange format. Undesirable in terms of load times.
84#define HALFLIFEMODELS //horrible format that doesn't interact well with the rest of FTE's code. Unusable tools (due to license reasons).
85#define INTERQUAKEMODELS //Preferred model format, at least from an idealism perspective.
86#define MODELFMT_MDX //kingpin's format (for hitboxes+geomsets).
87#define MODELFMT_OBJ //lame mesh-only format that needs far too much processing and even lacks a proper magic identifier too
88#define MODELFMT_GLTF //khronos 'transmission format'. .gltf or .glb extension. PBR. Version 2 only, for now.
89#define RAGDOLL //ragdoll support. requires RBE support (via a plugin...).
90
91//Image formats
92#define IMAGEFMT_KTX //Khronos TeXture. common on gles3 devices for etc2 compression
93#define IMAGEFMT_PKM //file format generally written by etcpack or android's etc1tool. doesn't support mips.
94#define IMAGEFMT_ASTC //lame simple header around a single astc image. not needed for astc in ktx files etc. its better to use ktx files.
95#define IMAGEFMT_PBM //pbm/ppm/pgm/pfm family formats.
96#define IMAGEFMT_PSD //baselayer only.
97#define IMAGEFMT_XCF //flattens, most of the time
98#define IMAGEFMT_HDR //an RGBE format.
99#define IMAGEFMT_DDS //.dds files embed mipmaps and texture compression. faster to load.
100#define IMAGEFMT_TGA //somewhat mandatory
101#define IMAGEFMT_LMP //mandatory for quake
102#define IMAGEFMT_PNG //common in quakeworld, useful for screenshots.
103#define IMAGEFMT_JPG //common in quake3, useful for screenshots.
104//#define IMAGEFMT_GIF //for the luls. loads as a texture2DArray
105//#define IMAGEFMT_BLP //legacy crap
106#define IMAGEFMT_BMP //windows bmp. yuck. also includes .ico for the luls
107#define IMAGEFMT_PCX //paletted junk. required for qw player skins, q2 and a few old skyboxes.
108#define IMAGEFMT_EXR //openexr, via Industrial Light & Magic's rgba api, giving half-float data.
109#define AVAIL_PNGLIB //.png image format support (read+screenshots)
110#define AVAIL_JPEGLIB //.jpeg image format support (read+screenshots)
111//#define AVAIL_STBI //make use of Sean T. Barrett's lightweight public domain stb_image[_write] single-file-library, to avoid libpng/libjpeg dependancies.
112#define PACKAGE_TEXWAD //quake's image wad support
113#define AVAIL_FREETYPE //for truetype font rendering
114#define DECOMPRESS_ETC2 //decompress etc2(core in gles3/gl4.3) if the graphics driver doesn't support it (eg d3d or crappy gpus with vulkan).
115#define DECOMPRESS_S3TC //allows bc1-3 to work even when drivers don't support it. This is probably only an issue on mobile chips. WARNING: not entirely sure if all patents expired yet...
116#define DECOMPRESS_RGTC //bc4+bc5
117#define DECOMPRESS_BPTC //bc6+bc7
118#define DECOMPRESS_ASTC //ASTC, for drivers that don't support it properly.
119
120// Game/Gamecode Support
121#define CSQC_DAT
122#define MENU_DAT
123//#define MENU_NATIVECODE //Use an external dll for menus.
124#define VM_Q1 //q1qvm implementation, to support ktx.
125//#define VM_LUA //optionally supports lua instead of ssqc.
126#define Q2SERVER //q2 server+gamecode.
127#define Q2CLIENT //q2 client. file formats enabled separately.
128#define Q3CLIENT //q3 client stuff.
129#define Q3SERVER //q3 server stuff.
130#define AVAIL_BOTLIB //q3 botlib
131//#undef BOTLIB_STATIC //should normally be set only in the makefile, and only if AVAIL_BOTLIB is defined above.
132#define HEXEN2 //runs hexen2 gamecode, supports hexen2 file formats.
133#define HUFFNETWORK //crappy network compression. probably needs reseeding.
134#define NETPREPARSE //allows for running both nq+qw on the same server (if not, protocol used must match gamecode).
135#define SUBSERVERS //Allows the server to fork itself, each acting as an MMO-style server instance of a single 'realm'.
136//#define HLCLIENT 7 //we can run HL gamecode (not protocol compatible, set to 6 or 7)
137//#define HLSERVER 140 //we can run HL gamecode (not protocol compatible, set to 138 or 140)
138#define SAVEDGAMES //Can save the game.
139#define MVD_RECORDING //server can record MVDs.
140#define ENGINE_ROUTING //Engine-provided routing logic (possibly threaded)
141//#define USE_INTERNAL_BULLET //Statically link against bullet physics plugin (instead of using an external plugin)
142//#define USE_INTERNAL_ODE //Statically link against ode physics plugin (instead of using an external plugin)
143
144// Networking options
145#define NQPROT //act as an nq client/server, with nq gamecode.
146#define HAVE_PACKET //we can send unreliable messages!
147#define HAVE_TCP //we can create/accept TCP connections.
148#define HAVE_GNUTLS //on linux
149#define HAVE_WINSSPI //on windows
150#define FTPSERVER //sv_ftp cvar.
151#define WEBCLIENT //uri_get+any internal downloads etc
152#define HAVE_HTTPSV //net_enable_http/websocket
153#define TCPCONNECT //support for playing over tcp sockets, instead of just udp. compatible with qizmo.
154//#define IRCCONNECT //lame support for routing game packets via irc server. not a good idea.
155#define SUPPORT_ICE //Internet Connectivity Establishment, for use by plugins to establish voice or game connections.
156#define CL_MASTER //Clientside Server Browser functionality.
157#define PACKAGEMANAGER //Allows the user to enable/disable/download(with WEBCLIENT) packages and plugins.
158
159// Audio Drivers
160#define AVAIL_OPENAL
161#define AVAIL_WASAPI //windows advanced sound api
162#define AVAIL_DSOUND
163#define HAVE_MIXER //support non-openal audio drivers
164
165// Audio Formats
166#define AVAIL_OGGVORBIS //.ogg support
167#define AVAIL_MP3_ACM //.mp3 support (windows only).
168
169// Other Audio Options
170#define VOICECHAT
171#define HAVE_SPEEX //Support the speex codec.
172#define HAVE_OPUS //Support the opus codec.
173#define HAVE_MEDIA_DECODER //can play cin/roq, more with plugins
174#define HAVE_MEDIA_ENCODER //capture/capturedemo work.
175#define HAVE_CDPLAYER //includes cd playback. actual cds. named/numbered tracks are supported regardless (though you need to use the 'music' command to play them without this).
176#define HAVE_JUKEBOX //includes built-in jukebox crap
177#define HAVE_SPEECHTOTEXT //windows speech-to-text thing
178
179// Features required by vanilla quake/quakeworld...
180//#define QUAKETC
181#define QUAKESTATS //defines STAT_HEALTH etc. if omitted, you'll need to provide that functionality yourself.
182#define QUAKEHUD //support for drawing the vanilla hud. disable this if you're always going to be using csqc (or equivelent)
183#define QWSKINS //disabling this means no qw .pcx skins nor enemy/team skin/colour forcing
184//#define NOBUILTINMENUS
185//#define NOLEGACY //just spike trying to kill off crappy crap...
186#define USEAREAGRID //world collision optimisation. REQUIRED for performance with xonotic. hopefully it helps a few other mods too.
187//#define NOQCDESCRIPTIONS 2 //if 2, disables writing fteextensions.qc completely. 1 just omits the text. (ignored in debug builds.)
188
189// Outdated stuff
190#define SVRANKING //legacy server-side ranking system.
192//#define SVCHAT //ancient lame builtin to support NPC-style chat...
196
197
198#ifdef COMPILE_OPTS
199//things to configure qclib, which annoyingly doesn't include this file itself
200//-DOMIT_QCC //disable the built-in qcc
201//-DSIMPLE_QCVM //disable qc debugging and 32bit opcodes
202#ifndef AVAIL_ZLIB
203//-DNO_ZLIB //disable zlib
204#endif
205#ifdef AVAIL_PNGLIB
206-DLINK_PNG
207#endif
208#ifdef AVAIL_JPEGLIB
209-DLINK_JPEG
210#endif
211#if defined(PLUGINS) && (defined(Q3SERVER) || defined(Q3CLIENT))
212-DLINK_QUAKE3 //ask the makefile to bake the quake3 plugin into the engine itself.
213#endif
214
215//-DNO_OPUS
216//-DNO_SPEEX //disable static speex
217#ifndef AVAIL_BOTLIB
218-DNO_BOTLIB //disable static botlib
219#endif
220//-DNO_VORBISFILE //disable static vorbisfile
221
222
223//enable some staticaly linked libraries
224-DLINK_FREETYPE //international text requires international fonts.
225
226#if defined(USE_INTERNAL_ODE) && !defined(ODE_DYNAMIC)
227-DLINK_ODE
228#endif
229
230//-Os //optimise for size instead of speed. less cpu cache needed means that its sometimes faster anyway.
231#endif