3// These builds are a compromise between true minimal and something that will actually work.
4// As such we allow pk3s, md3s, pngs, and built-in menus, but that's about it.
5
6// Features should either be commented or not. If you change undefs to defines or vice versa then expect problems.
7// 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.
8
9//general rebranding
10//#define DISTRIBUTION "FTE" //should be kept short. 8 or less letters is good, with no spaces.
11//#define DISTRIBUTIONLONG "Forethought Entertainment" //think of this as your company name. It isn't shown too often, so can be quite long.
14//#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.
18//#define GAME_FULLNAME FULLENGINENAME //full name of the game we're playing
19//#define GAME_BASEGAMES GAME_SHORTNAME //comma-separate list of basegame strings to use
20//#define GAME_PROTOCOL "FTE-Quake" //so other games won't show up in the server browser
21//#define GAME_DEFAULTPORT 27500 //slightly reduces the chance of people connecting to the wrong type of server
22//#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.
23//#define GAME_DOWNLOADSURL NULL //url for the package manger to update from
24//#define GAME_DEFAULTCMDS NULL //a string containing the things you want to exec in order to override default.cfg
25
26
27// Allowed renderers... There should ONLY be undefs here (other C files won't be pulled in automatically)
28//#undef GLQUAKE
29//#undef D3D8QUAKE
30//#undef D3D9QUAKE
31//#undef D3D11QUAKE
32//#undef VKQUAKE
33#undef HEADLESSQUAKE //no-op renderer...
34//#undef WAYLANDQUAKE //linux only
35
36//Misc Renderer stuff
37#define PSET_CLASSIC //support the 'classic' particle system, for that classic quake feel.
38//#define PSET_SCRIPT //scriptable particles (both fte's and importing effectinfo)
39//#define RTLIGHTS
40//#define RUNTIMELIGHTING //automatic generation of .lit files
41//#define R_XFLIP //old silly thing
42
43//Extra misc features.
44//#define CLIENTONLY //
45#define MULTITHREAD //misc basic multithreading - dsound, downloads, basic stuff that's unlikely to have race conditions.
46#define LOADERTHREAD //worker threads for loading misc stuff. falls back on main thread if not supported.
50#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.
51//#define TEXTEDITOR //my funky text editor! its awesome!
52//#define PLUGINS //support for external plugins (like huds or fancy menus or whatever)
53//#define USE_SQLITE //sql-database-as-file support
54//#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)
55
56//Filesystem formats
57#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.
58#define PACKAGE_Q1PAK //also q2
59//#define PACKAGE_DOOMWAD //doom wad support (generates various file names, and adds support for doom's audio, sprites, etc)
60//#define AVAIL_XZDEC //.xz decompression
61//#define AVAIL_GZDEC //.gz decompression
62#define AVAIL_ZLIB //whether pk3s can be compressed or not.
63//#define AVAIL_BZLIB //whether pk3s can use bz2 compression
64//#define PACKAGE_DZIP //.dzip support for smaller demos (which are actually more like pak files and can store ANY type of file)
65
66//Map formats
67#define Q1BSPS //Quake1
68//#define Q2BSPS //Quake2
69//#define Q3BSPS //Quake3, as well as a load of other games too...
70//#define RFBSPS //qfusion's bsp format / jk2o etc.
71//#define TERRAIN //FTE's terrain, as well as .map support
72//#define DOOMWADS //map support, filesystem support is separate.
73//#define MAP_PROC //doom3...
74
75//Model formats
76#define SPRMODELS //Quake's sprites
77//#define SP2MODELS //Quake2's models
78//#define DSPMODELS //Doom sprites!
79#define MD1MODELS //Quake's models.
80//#define MD2MODELS //Quake2's models
81#define MD3MODELS //Quake3's models, also often used for q1 etc too.
82//#define MD5MODELS //Doom3 models.
83//#define ZYMOTICMODELS //nexuiz uses these, for some reason.
84//#define DPMMODELS //these keep popping up, despite being a weak format.
85//#define PSKMODELS //unreal's interchange format. Undesirable in terms of load times.
86//#define HALFLIFEMODELS //horrible format that doesn't interact well with the rest of FTE's code. Unusable tools (due to license reasons).
87//#define INTERQUAKEMODELS //Preferred model format, at least from an idealism perspective.
88//#define MODELFMT_MDX //kingpin's format (for hitboxes+geomsets).
89//#define MODELFMT_OBJ //lame mesh-only format that needs far too much processing and even lacks a proper magic identifier too
90//#define MODELFMT_GLTF //khronos 'transmission format'. .gltf or .glb extension. PBR. Version 2 only, for now.
91//#define RAGDOLL //ragdoll support. requires RBE support (via a plugin...).
92
93//Image formats
94//#define IMAGEFMT_KTX //Khronos TeXture. common on gles3 devices for etc2 compression
95//#define IMAGEFMT_PKM //file format generally written by etcpack or android's etc1tool. doesn't support mips.
96//#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.
97//#define IMAGEFMT_PBM //pbm/ppm/pgm/pfm family formats.
98//#define IMAGEFMT_PSD //baselayer only.
99//#define IMAGEFMT_XCF //flattens, most of the time
100//#define IMAGEFMT_HDR //an RGBE format.
101//#define IMAGEFMT_DDS //.dds files embed mipmaps and texture compression. faster to load.
102#define IMAGEFMT_TGA //somewhat mandatory
103#define IMAGEFMT_LMP //mandatory for quake
104#define IMAGEFMT_PNG //common in quakeworld, useful for screenshots.
105//#define IMAGEFMT_JPG //common in quake3, useful for screenshots.
106//#define IMAGEFMT_GIF //for the luls. loads as a texture2DArray
107//#define IMAGEFMT_BLP //legacy crap
108//#define IMAGEFMT_BMP //windows bmp. yuck. also includes .ico for the luls
109//#define IMAGEFMT_PCX //paletted junk. required for qw player skins, q2 and a few old skyboxes.
111#define AVAIL_PNGLIB //.png image format support (read+screenshots)
112//#define AVAIL_JPEGLIB //.jpeg image format support (read+screenshots)
113//#define AVAIL_STBI //make use of Sean T. Barrett's lightweight public domain stb_image[_write] single-file-library, to avoid libpng/libjpeg dependancies.
114#define PACKAGE_TEXWAD //quake's image wad support
115//#define AVAIL_FREETYPE //for truetype font rendering
116//#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).
117//#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...
118//#define DECOMPRESS_RGTC //bc4+bc5
119//#define DECOMPRESS_BPTC //bc6+bc7
120//#define DECOMPRESS_ASTC //ASTC, for drivers that don't support it properly.
121
122// Game/Gamecode Support
123//#define CSQC_DAT
124//#define MENU_DAT
125//#define MENU_NATIVECODE //Use an external dll for menus.
126//#define VM_Q1 //q1qvm implementation, to support ktx.
127//#define VM_LUA //optionally supports lua instead of ssqc.
177//#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).