FTEQW
Documentation of the FTE engine source tree.
bothdefs.h
Go to the documentation of this file.
1/*
2Copyright (C) 1996-1997 Id Software, Inc.
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19*/
20
21#ifndef __BOTHDEFS_H
22#define __BOTHDEFS_H
23
24// release version
25#define FTE_VER_MAJOR 1
26#define FTE_VER_MINOR 7
27
28#if defined(__APPLE__) && defined(__MACH__)
29 #define MACOSX
30#endif
31
32#if defined(__MINGW32_VERSION) || defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__)
33 #define MINGW
34#endif
35#if !defined(MINGW) && defined(__GNUC__) && defined(_WIN32)
36 #define MINGW //Erm, why is this happening?
37#endif
38
39#ifdef ANDROID
40 #define NO_PNG
41 #define NO_JPEG
42 #define NO_OGG
43#endif
44
45#ifdef _XBOX
46 #define NO_PNG
47 #define NO_JPEG
48 #define NO_OGG
49 #define NO_ZLIB
50 #define NOMEDIA
51 #define NO_FREETYPE
52 #define HAVE_PACKET
53#endif
54
55#ifndef MULTITHREAD
56 #if !defined(_WIN32) || defined(FTE_SDL) //win32 is annoying
57 #define NO_MULTITHREAD
58 #endif
59#endif
60
61#ifdef FTE_TARGET_WEB
62 //no Sys_LoadLibrary support, so we might as well kill this stuff off.
63 #define NO_PNG
64 #define NO_JPEG
65 #define NO_OGG
66 #ifndef NO_FREETYPE
67 #define NO_FREETYPE
68 #endif
69#endif
70
71#ifdef D3DQUAKE
72 #define D3D9QUAKE
73 //#define D3D11QUAKE
74 #undef D3DQUAKE
75#endif
76
77#define STRINGIFY2(s) #s
78#define STRINGIFY(s) STRINGIFY2(s)
79
80#ifndef CONFIG_FILE_NAME
81 #ifdef HAVE_CONFIG_H
82 #define CONFIG_FILE_NAME config.h
83 #elif defined(NOLEGACY)
84 #undef NOLEGACY
85 #define CONFIG_FILE_NAME config_nocompat.h
86 #elif defined(MINIMAL)
87 #define CONFIG_FILE_NAME config_minimal.h
88 #else
89 #define CONFIG_FILE_NAME config_fteqw.h
90 #endif
91#endif
92
93#undef MULTITHREAD
94#define HEADLESSQUAKE //usable renderers are normally specified via the makefile, but HEADLESS is considered a feature rather than an actual renderer, so usually gets forgotten about...
95
96//yup, C89 allows this (doesn't like C's token concat though).
97#include STRINGIFY(CONFIG_FILE_NAME)
98
99
100#ifndef MSVCLIBSPATH
101 #ifdef MSVCLIBPATH
102 #define MSVCLIBSPATH STRINGIFY(MSVCLIBPATH)
103 #elif _MSC_VER == 1200
104 #define MSVCLIBSPATH "../libs/vc6-libs/"
105 #else
106 #define MSVCLIBSPATH "../libs/"
107 #endif
108#endif
109
110#if defined(IMGTOOL) || defined(IQMTOOL)
111 #undef WEBCLIENT
112 #undef LOADERTHREAD
113#elif defined(MASTERONLY)
114 #define SV_MASTER
115 #undef SUBSERVERS
116 #undef PLUGINS
117 #undef HUFFNETWORK
118 #undef SUPPORT_ICE
119 #undef WEBCLIENT
120 #undef MULTITHREAD
121 #undef LOADERTHREAD
122 #undef PACKAGEMANAGER
123 #undef PACKAGE_PK3
124 #undef PACKAGE_Q1PAK
125 #undef PACKAGE_DOOMWAD
126 #undef PACKAGE_VPK
127 #undef PACKAGE_DZIP
128 #undef AVAIL_XZDEC
129 #undef AVAIL_GZDEC
130 #undef SUBSERVERS
131 #undef HAVE_LEGACY
132 #undef IPLOG
133#else
134 #if defined(SERVERONLY) && defined(CLIENTONLY)
135 #undef CLIENTONLY //impossible build. assume the config had CLIENTONLY and they tried building a dedicated server
136 #endif
137 #ifndef WEBSVONLY
138 #ifndef CLIENTONLY
139 #define HAVE_SERVER
140 #endif
141 #ifndef SERVERONLY
142 #define HAVE_CLIENT
143 #endif
144 #endif
145#endif
146#ifndef NOLEGACY
147 #define HAVE_LEGACY
148#endif
149
150#ifndef HAVE_SERVER
151 #undef MVD_RECORDING
152#endif
153
154//software rendering is just too glitchy, don't use it - unless its the only choice.
155#if defined(SWQUAKE) && !defined(_DEBUG) && !defined(__DJGPP__)
156 #undef SWQUAKE
157#endif
158#if defined(USE_EGL) && !defined(GLQUAKE)
159 #undef USE_EGL
160#endif
161#if defined(WAYLANDQUAKE) && !(defined(__linux__) && (defined(VKQUAKE) || (defined(GLQUAKE) && defined(USE_EGL))))
162 #undef WAYLANDQUAKE
163#endif
164
165//include a file to update the various configurations for game-specific configs (hopefully just names)
166#ifdef BRANDING_INC
167 #include STRINGIFY(BRANDING_INC)
168#endif
169#ifndef DISTRIBUTION
170 #define DISTRIBUTION "FTE" //short name used to identify this engine. must be a single word
171#endif
172#ifndef DISTRIBUTIONLONG
173 #define DISTRIBUTIONLONG "Forethought Entertainment" //effectively the 'company' name
174#endif
175#ifndef FULLENGINENAME
176 #define FULLENGINENAME "FTE Quake" //the posh name for the engine
177#endif
178#ifndef ENGINEWEBSITE
179 #define ENGINEWEBSITE "^8http://^4fte^8.^4triptohell^8.^4info" //url for program
180#endif
181
182#if !defined(_WIN32) || defined(WINRT)
183 #undef HAVE_SPEECHTOTEXT
184 #undef AVAIL_MP3_ACM
185 #undef AVAIL_DSOUND
186 #undef AVAIL_XAUDIO2
187 #undef AVAIL_WASAPI
188#endif
189
190#if !(defined(__linux__) || defined(__CYGWIN__)) || defined(ANDROID)
191 #undef HAVE_GNUTLS
192#endif
193#if !defined(_WIN32) || (defined(_MSC_VER) && (_MSC_VER < 1300)) || defined(FTE_SDL)
194 #undef HAVE_WINSSPI
195#endif
196//subservers only has code for win32 threads and linux
197#if !((defined(_WIN32) && !defined(FTE_SDL) && !defined(WINRT)) || (defined(__linux__) && !defined(ANDROID) && !defined(FTE_SDL)))
198 #undef SUBSERVERS
199#endif
200
201#ifndef HAVE_MIXER
202 //disable various sound drivers if we can't use them anyway.
203 #undef AVAIL_DSOUND
204 #undef AVAIL_XAUDIO2
205 #undef AVAIL_WASAPI
206
207 #undef AUDIO_ALSA
208 #undef AUDIO_PULSE
209#endif
210
211
212#ifdef NOMEDIA
213 #undef HAVE_CDPLAYER //includes cd playback. actual cds. faketracks are supported regardless.
214 #undef HAVE_JUKEBOX //includes built-in jukebox crap
215 #undef HAVE_MEDIA_DECODER //can play cin/roq, more with plugins
216 #undef HAVE_MEDIA_ENCODER //capture/capturedemo work.
217 #undef AVAIL_MP3_ACM //microsoft's Audio Compression Manager api
218 #undef HAVE_SPEECHTOTEXT //windows speech-to-text thing
219#endif
220
221#if defined(_XBOX)
222 #define D3D8QUAKE
223 #undef HAVE_TCP //FIXME
224 #undef HAVE_PACKET //FIXME
225 #undef SUPPORT_ICE //screw that
226 #undef PLUGINS //would need LoadLibrary working properly.
227
228 #undef AVAIL_DINPUT //xbox apparently only really does controllers.
229 #undef AVAIL_DSOUND //FIXME
230 #undef TEXTEDITOR //its hard to edit text when you have just a controller (and no onscreen keyboard)
231 #undef RAGDOLL //needs a proper physics engine
232 #undef AVAIL_MP3_ACM //api not supported
233 #undef AVAIL_OPENAL
234 #undef HAVE_SPEECHTOTEXT //api not supported
235 #undef MULTITHREAD //no CreateThread stuff.
236 #undef SUBSERVERS //single-process.
237 #undef VOICECHAT
238 #undef TERRAIN
239 #undef Q2CLIENT
240 #undef Q2SERVER
241 #undef Q3CLIENT
242 #undef Q3SERVER
243 #undef HLCLIENT
244 #undef HLSERVER
245 #undef VM_Q1
246 #undef VM_LUA
247 #undef HALFLIFEMODELS
248 #undef RUNTIMELIGHTING
249 #undef HEXEN2
250 #undef PACKAGE_DOOMWAD
251 #undef MAP_PROC
252 #undef Q1BSPS
253 #undef Q2BSPS
254 #undef Q3BSPS
255 #undef RFBSPS
256 #undef WEBSERVER //http server
257 #undef FTPSERVER //ftp server
258 #undef WEBCLIENT //http client.
259 #undef FTPCLIENT //ftp client.
260#endif
261
262#ifdef __DJGPP__
263 //no bsd sockets library.
264 #undef HAVE_TCP
265 #undef HAVE_PACKET
266 #undef SUPPORT_ICE
267 //too lazy to deal with no dlopen
268 #undef PLUGINS
269 #undef Q2SERVER
270 #undef Q3SERVER
271 #undef Q2CLIENT //fixme...
272 #undef Q3CLIENT //might as well.
273 //too lazy to write the code to boot up more cores. dosbox would probably hate it so why bother.
274 #undef MULTITHREAD
275 //too lazy to deal with various libraries
276 #undef VOICECHAT
277 #undef AVAIL_JPEGLIB
278 #undef AVAIL_PNGLIB
279 #undef AVAIL_OGGVORBIS
280#endif
281
282#ifdef FTE_TARGET_WEB
283 //sandboxing means some stuff CANNOT work...
284 #undef HAVE_TCP //websockets are not real tcp.
285 #undef HAVE_PACKET //no udp support
286
287 //try to trim the fat
288 #undef VOICECHAT //too lazy to compile opus
289 #undef HLCLIENT //dlls...
290 #undef HLSERVER //dlls...
291// #undef CL_MASTER //bah. use the site to specify the servers.
292 #undef SV_MASTER //yeah, because that makes sense in a browser
293 #undef RAGDOLL //no ode
294 #undef TCPCONNECT //err...
295 #undef IRCCONNECT //not happening
296 #undef PLUGINS //pointless
297 #undef VM_Q1 //no dlls
298 #undef MAP_PROC //meh
299// #undef HALFLIFEMODELS //blurgh
300 #undef SUPPORT_ICE //requires udp, so not usable. webrtc could be used instead, but that logic is out of our hands.
301// #undef HAVE_MIXER //depend upon openal instead.
302
303 //extra features stripped to try to reduce memory footprints
304 #undef RUNTIMELIGHTING //too slow anyway (kinda needs threads)
305 #undef Q2SERVER //requires a dll anyway.
306// #undef Q2CLIENT //match Q2SERVER (networking is a pain)
307// #undef Q3CLIENT //no bots, and networking is a pain
308// #undef Q3SERVER //match Q3CLIENT
309// #undef Q2BSPS //emscripten can't cope with bss, leading to increased download time. too lazy to fix.
310// #undef Q3BSPS //emscripten can't cope with bss, leading to increased download time. too lazy to fix.
311// #undef TERRAIN
312// #undef PSET_SCRIPT //bss+size
313 #define GLSLONLY //pointless having the junk
314 #define GLESONLY //should reduce the conditions a little
315 #ifndef R_MAX_RECURSE
316 #define R_MAX_RECURSE 2 //less bss
317 #endif
318// #undef RTLIGHTS
319 #undef HEADLESSQUAKE
320 #ifndef NO_FREETYPE
321 #define NO_FREETYPE
322 #endif
323#endif
324#ifdef WINRT
325 //microsoft do not support winsock any more.
326 #undef HAVE_TCP
327 #undef HAVE_PACKET
328
329 #undef TCPCONNECT //err...
330 #undef IRCCONNECT //not happening
331 #undef AVAIL_DSOUND //yeah, good luck there
332 #undef AVAIL_DINPUT //nope, not supported.
333 #undef SV_MASTER //no socket interface
334 #undef CL_MASTER //no socket interface
335 #undef MULTITHREAD
336 #undef HEADLESSQUAKE
337#endif
338#ifdef ANDROID
339 #define GLESONLY //should reduce the conditions a little
340// #undef HEADLESSQUAKE
341 #ifndef NO_FREETYPE
342 #define NO_FREETYPE
343 #endif
344 #define NO_OPENAL
345#endif
346#if (defined(_MSC_VER) && (_MSC_VER < 1500)) || defined(FTE_SDL)
347 #undef AVAIL_WASAPI //wasapi is available in the vista sdk, while that's compatible with earlier versions, its not really expected until 2008
348#endif
349
350#if !defined(HAVE_SERVER) && !defined(SV_MASTER)
351 #undef HAVE_HTTPSV
352#endif
353
354#ifdef NO_MULTITHREAD
355 #undef MULTITHREAD
356#endif
357#ifndef MULTITHREAD
358 //database code requires threads to do stuff async.
359 #undef USE_SQLITE
360 #undef USE_MYSQL
361 #undef AUDIO_PULSE
362#endif
363#ifdef NO_LIBRARIES //catch-all...
364#define NO_DIRECTX
365 #define NO_PNG
366 #define NO_JPEG
367 #define NO_ZLIB
368 #define NO_OGG
369 #define NO_FREETYPE
370#endif
371#ifdef NO_OPENAL
372 #undef AVAIL_OPENAL
373#endif
374#ifdef NO_PNG
375 #undef AVAIL_PNGLIB
376#endif
377#ifdef NO_JPEG
378 #undef AVAIL_JPEGLIB
379#endif
380#ifdef NO_OGG
381 #undef AVAIL_OGGVORBIS
382#endif
383#ifdef NO_FREETYPE
384 #undef AVAIL_FREETYPE
385#endif
386#ifdef NO_ZLIB
387 #undef AVAIL_ZLIB
388 #undef AVAIL_PNGLIB
389 #undef AVAIL_XZDEC
390 #undef AVAIL_GZDEC
391#endif
392#ifdef NO_GNUTLS
393 #undef HAVE_GNUTLS
394#endif
395#ifdef NO_OPENGL
396 #undef GLQUAKE
397 #undef USE_EGL
398#endif
399
400#if defined(HAVE_GNUTLS) || defined(HAVE_WINSSPI)
401 #define HAVE_SSL
402#endif
403#if defined(HAVE_GNUTLS) || defined(HAVE_WINSSPI) || defined(HAVE_PLUGINS)
404 //FIXME: HAVE_WINSSPI does not work as a server.
405 //FIXME: advertising dtls without a valid certificate will probably bug out if a client tries to auto-upgrade.
406 //FIXME: we don't cache server certs
407 #define HAVE_DTLS
408#endif
409
410#if defined(USE_SQLITE) || defined(USE_MYSQL)
411 #define SQL
412#endif
413
414#if defined(AVAIL_GZDEC) && (!defined(AVAIL_ZLIB) || defined(NO_ZLIB))
415 //gzip needs zlib to work (pk3s can still contain non-compressed files)
416 #undef AVAIL_GZDEC
417#endif
418
419#if defined(RFBSPS) && !defined(Q3BSPS)
420 #define Q3BSPS //rbsp might as well depend upon q3bsp - its the same thing but with more lightstyles (support for which can bog down the renderer a little).
421#endif
422
423#if defined(QWOVERQ3) && !defined(Q3SERVER)
424 #undef QWOVERQ3
425#endif
426
427#if !defined(NQPROT) || defined(SERVERONLY) || !defined(AVAIL_ZLIB) || defined(DYNAMIC_ZLIB)
428 #undef PACKAGE_DZIP
429#endif
430
431#if (defined(NOLOADERTHREAD) || !defined(MULTITHREAD)) && defined(LOADERTHREAD)
432 #undef LOADERTHREAD
433#endif
434
435#ifndef _WIN32
436 #undef QTERM //not supported - FIXME: move to native plugin
437#endif
438
439#if defined(Q3BSPS) && !defined(Q2BSPS)
440// #define Q2BSPS //FIXME: silently enable that as a dependancy, for now
441#endif
442
443#if (defined(Q2CLIENT) || defined(Q2SERVER))
444 #ifndef Q2BSPS
445 #error "Q2 game support without Q2BSP support. doesn't make sense"
446 #endif
447 #if !defined(MD2MODELS) || !defined(SP2MODELS)
448 #error "Q2 game support without full Q2 model support. doesn't make sense"
449 #endif
450#endif
451
452#ifndef AVAIL_ZLIB
453 #undef SUPPORT_ICE //depends upon zlib's crc32 for fingerprinting. I cba writing my own.
454#endif
455
456#ifndef HAVE_TCP
457 #undef TCPCONNECT
458 #undef IRCCONNECT
459 #undef WEBSERVER //http server
460 #undef FTPSERVER //ftp server
461 #undef FTPCLIENT //ftp client.
462 #if !defined(FTE_TARGET_WEB)
463 #undef WEBCLIENT
464 #endif
465#endif
466#ifndef HAVE_PACKET
467 #undef SV_MASTER
468 #ifndef FTE_TARGET_WEB
469 #undef CL_MASTER //can use websockets to get a list of usable ws:// or rtc:// servers
470 #endif
471 #undef SUPPORT_ICE //webrtc takes all control away from us, the implementation is completely different.
472#endif
473
474#ifdef SERVERONLY //remove options that don't make sense on only a server
475 #undef Q2CLIENT
476 #undef Q3CLIENT
477 #undef HLCLIENT
478 #undef VM_UI
479 #undef VM_CG
480 #undef TEXTEDITOR
481 #undef RUNTIMELIGHTING
482
483 #undef PSET_SCRIPT
484 #undef PSET_CLASSIC
485 #undef PSET_DARKPLACES
486#endif
487#ifdef CLIENTONLY //remove optional server components that make no sence on a client only build.
488 #undef Q2SERVER
489 #undef Q3SERVER
490 #undef HLSERVER
491 #undef WEBSERVER
492 #undef FTPSERVER
493 #undef SUBSERVERS
494 #undef VM_Q1
495 #undef SQL
496#endif
497
498#ifndef PLUGINS
499 #undef USE_INTERNAL_BULLET
500 #undef USE_INTERNAL_ODE
501#endif
502
503
504#if (defined(CSQC_DAT) || !defined(CLIENTONLY)) && (defined(PLUGINS)||defined(USE_INTERNAL_BULLET)||defined(USE_INTERNAL_ODE)) //use ode only if we have a constant world state, and the library is enbled in some form.
505 #define USERBE
506#endif
507
508#if defined(MD1MODELS) || defined(MD2MODELS) || defined(MD3MODELS)
509 #define NONSKELETALMODELS
510#endif
511#if defined(ZYMOTICMODELS) || defined(MD5MODELS) || defined(DPMMODELS) || defined(PSKMODELS) || defined(INTERQUAKEMODELS)
512 #define SKELETALMODELS //defined if we have a skeletal model.
513#endif
514#if (defined(CSQC_DAT) || !defined(CLIENTONLY)) && defined(SKELETALMODELS)
515 #define SKELETALOBJECTS //the skeletal objects API is only used if we actually have skeletal models, and gamecode that uses the builtins.
516#endif
517#if !defined(USERBE) || !defined(SKELETALMODELS)
518 #undef RAGDOLL //not possible to ragdoll if we don't have certain other features.
519#endif
520
521#if !defined(RTLIGHTS)
522 #undef MAP_PROC //doom3 maps kinda NEED rtlights to look decent
523#endif
524
525#if !defined(Q3BSPS)
526 #undef Q3CLIENT //reconsider this (later)
527 #undef Q3SERVER //reconsider this (later)
528#endif
529#if defined(DEBUG) || defined(_DEBUG)
530 #undef NOQCDESCRIPTIONS //don't disable writing fteextensions.qc in debug builds, otherwise how would you ever build one? :o
531#endif
532
533
534#ifndef Q3CLIENT
535 #undef VM_CG // :(
536 #undef VM_UI
537#else
538 #define VM_CG
539 #define VM_UI
540#endif
541
542#if defined(VM_Q1) || defined(VM_UI) || defined(VM_CG) || defined(Q3SERVER)
543 #define VM_ANY
544#endif
545
546#if (defined(HAVE_CLIENT) || defined(HAVE_SERVER)) && defined(WEBCLIENT) && defined(PACKAGEMANAGER)
547 #define MANIFESTDOWNLOADS
548#endif
549
550#if (defined(D3D8QUAKE) || defined(D3D9QUAKE) || defined(D3D11QUAKE)) && !defined(D3DQUAKE)
551 #define D3DQUAKE //shouldn't still matter
552#endif
553
554#define PROTOCOLEXTENSIONS
555
556#ifdef MINIMAL
557 #define IFMINIMAL(x,y) x
558#else
559 #define IFMINIMAL(x,y) y
560#endif
561
562// defs common to client and server
563
564#ifndef PLATFORM
565 #if defined(FTE_TARGET_WEB)
566 #define PLATFORM "Web"
567 #define ARCH_CPU_POSTFIX "web"
568 #define ARCH_DL_POSTFIX ".wasm"
569 #elif defined(_WIN32_WCE)
570 #define PLATFORM "WinCE"
571 #define ARCH_DL_POSTFIX ".dll"
572 #elif defined(_WIN32)
573 #if defined(WINRT)
574 #define PLATFORM "WinRT" /*those poor poor souls. maybe just maybe I'll actually get the tools for a port, its just a shame that I won't be able to release said port*/
575 #elif defined(_XBOX)
576 #define PLATFORM "Xbox"
577 #else
578 #define PLATFORM "Win"
579 #endif
580 #define ARCH_DL_POSTFIX ".dll"
581 #elif defined(_WIN16)
582 #define PLATFORM "Win16"
583 #define ARCH_DL_POSTFIX ".dll"
584 #elif defined(__CYGWIN__)
585 #define PLATFORM "Cygwin" /*technically also windows*/
586 #define ARCH_DL_POSTFIX ".dll"
587 #elif defined(ANDROID) || defined(__ANDROID__)
588 #define PLATFORM "Android" /*technically also linux*/
589 #elif defined(__linux__)
590 #define PLATFORM "Linux"
591 #elif defined(__APPLE__)
592 #include "TargetConditionals.h"
593 #if TARGET_IPHONE_SIMULATOR
594 #define PLATFORM "iOSSim"
595 #elif TARGET_OS_IPHONE
596 #define PLATFORM "iOS"
597 #elif TARGET_OS_MAC
598 #define PLATFORM "Mac"
599 #else
600 #define PLATFORM "Apple"
601 #endif
602 #elif defined(__FreeBSD__)
603 #define PLATFORM "FreeBSD"
604 #elif defined(__OpenBSD__)
605 #define PLATFORM "OpenBSD"
606 #elif defined(__NetBSD__)
607 #define PLATFORM "NetBSD"
608 #elif defined(BSD)
609 #define PLATFORM "BSD"
610 #elif defined(__MORPHOS__)
611 #define PLATFORM "MorphOS"
612 #elif defined(__amigaos__)
613 #define PLATFORM "AmigaOS"
614 #elif defined(MACOSX)
615 #define PLATFORM "MacOS X"
616 #elif defined(__DOS__)
617 #define PLATFORM "Dos"
618 #else
619 #define PLATFORM "Unknown"
620 #endif
621#endif
622
623#ifndef ARCH_DL_POSTFIX
624 #define ARCH_DL_POSTFIX ".so"
625#endif
626
627#ifndef ARCH_CPU_POSTFIX
628 #if defined(_M_AMD64) || defined(__amd64__) || defined(__x86_64__)
629 #ifdef __ILP32__
630 #define ARCH_CPU_POSTFIX "x32" //32bit pointers, with 16 registers.
631 #else
632 #ifdef _WIN32
633 #define ARCH_CPU_POSTFIX "x64"
634 #else
635 #define ARCH_CPU_POSTFIX "amd64"
636 #define ARCH_ALTCPU_POSTFIX "x86_64"
637 #endif
638 #endif
639 #elif defined(_M_IX86) || defined(__i386__)
640 #define ARCH_CPU_POSTFIX "x86"
641 #elif defined(__powerpc__) || defined(__ppc__)
642 #define ARCH_CPU_POSTFIX "ppc"
643 #elif defined(__aarch64__) || defined(__arm64__)
644 #define ARCH_CPU_POSTFIX "arm64"
645 #elif defined(__arm__)
646 #ifdef __SOFTFP__
647 #define ARCH_CPU_POSTFIX "arm"
648 #else
649 #define ARCH_CPU_POSTFIX "armhf"
650 #endif
651 #else
652 #define ARCH_CPU_POSTFIX "unk"
653 #endif
654#endif
655
656#if defined(_WIN32)
657 #define FTE_LITTLE_ENDIAN
658#elif defined(__BYTE_ORDER__)
659 #ifdef __ORDER_BIG_ENDIAN__
660 #if (__BYTE_ORDER__==__ORDER_BIG_ENDIAN__) && (__FLOAT_WORD_ORDER__==__ORDER_BIG_ENDIAN__)
661 #define FTE_BIG_ENDIAN
662 #endif
663 #endif
664 #ifdef __ORDER_LITTLE_ENDIAN__
665 #if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__) && (__FLOAT_WORD_ORDER__==__ORDER_LITTLE_ENDIAN__)
666 #define FTE_LITTLE_ENDIAN
667 #endif
668 #endif
669#endif
670
671#ifdef _MSC_VER
672 #define VARGS __cdecl
673 #define MSVCDISABLEWARNINGS
674 #if _MSC_VER >= 1300
675 #define FTE_DEPRECATED __declspec(deprecated)
676 #ifndef _CRT_SECURE_NO_WARNINGS
677 #define _CRT_SECURE_NO_WARNINGS
678 #endif
679 #ifndef _CRT_NONSTDC_NO_WARNINGS
680 #define _CRT_NONSTDC_NO_WARNINGS
681 #endif
682 #endif
683 #define NORETURN __declspec(noreturn)
684#endif
685#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
686 #define FTE_DEPRECATED __attribute__((__deprecated__)) //no idea about the actual gcc version
687 #if defined(_WIN32)
688 #include <stdio.h>
689 #ifdef __MINGW_PRINTF_FORMAT
690 #define LIKEPRINTF(x) __attribute__((format(__MINGW_PRINTF_FORMAT,x,x+1)))
691 #else
692 #define LIKEPRINTF(x) __attribute__((format(ms_printf,x,x+1)))
693 #endif
694 #else
695 #define LIKEPRINTF(x) __attribute__((format(printf,x,x+1)))
696 #endif
697#endif
698#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
699 #define NORETURN __attribute__((noreturn))
700#endif
701
702//unreachable marks the path leading to it as unreachable too.
703#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
704 #define FTE_UNREACHABLE __builtin_unreachable()
705#endif
706
707//I'm making my own restrict, because msvc's headers can't cope if I #define restrict to __restrict, and quite possibly other platforms too
708#if __STDC_VERSION__ >= 199901L
709 #define fte_restrict restrict
710#elif defined(_MSC_VER) && _MSC_VER >= 1400 || __GNUC__ >= 4
711 #define fte_restrict __restrict
712#else
713 #define fte_restrict
714#endif
715
716#if _MSC_VER >= 1300
717 #define FTE_ALIGN(a) __declspec(align(a))
718#elif defined(__clang__)
719 #define FTE_ALIGN(a) __attribute__((aligned(a)))
720#elif __GNUC__ >= 3
721 #define FTE_ALIGN(a) __attribute__((aligned(a)))
722#else
723 #define FTE_ALIGN(a)
724#endif
725
726#if __STDC_VERSION__ >= 201112L
727 #include <stdalign.h>
728 #define fte_alignof(type) alignof(qintptr_t)
729#elif _MSC_VER
730 #define fte_alignof(type) __alignof(qintptr_t)
731#else
732 #define fte_alignof(type) sizeof(qintptr_t)
733#endif
734
735//WARNING: FTE_CONSTRUCTOR things are unordered.
736#ifdef __cplusplus
737 //use standard constructors in any c++ code...
738 #define FTE_CONSTRUCTOR(fn) \
739 static void fn(void); \
740 class atinit_##fn {atinit_##fn(void){fn();}}; \
741 static void fn(void)
742#elif _MSC_VER
743 #pragma section(".CRT$XCU",read)
744 #if _MSC_VER >= 1500 //use '/include' so it doesn't get stripped from linker optimisations
745 #define INITIALIZER2_(f,p) \
746 static void f(void); \
747 __declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f; \
748 __pragma(comment(linker,"/include:" p #f "_")) \
749 static void f(void)
750 #else // '/include' doesn't exist, hope there's no linker optimisations.
751 #define INITIALIZER2_(f,p) \
752 static void f(void); \
753 __declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f; \
754 static void f(void)
755 #endif
756 #ifdef _WIN64
757 #define INITIALIZER(f) INITIALIZER2_(f,"")
758 #else
759 #define INITIALIZER(f) INITIALIZER2_(f,"_")
760 #endif
761#else
762 //assume gcc/clang...
763 #define FTE_CONSTRUCTOR(fn) \
764 __attribute__((constructor)) static void fn(void)
765#endif
766
767
768//safeswitch(foo){safedefault: break;}
769//switch, but errors for any omitted enum values despite the presence of a default case.
770//(gcc will generally give warnings without the default, but sometimes you don't have control over the source of your enumeration values)
771//note: android's gcc seems to screw up the pop, instead leaving the warnings enabled, which gets horrendously spammy.
772#if (__GNUC__ >= 4) && !defined(ANDROID)
773 #define safeswitch \
774 _Pragma("GCC diagnostic push") \
775 _Pragma("GCC diagnostic error \"-Wswitch-enum\"") \
776 _Pragma("GCC diagnostic error \"-Wswitch-default\"") \
777 switch
778 #define safedefault _Pragma("GCC diagnostic pop") default
779#else
780 #define safeswitch switch
781 #define safedefault default
782#endif
783
784//fte_inline must only be used in headers, and requires one and ONLY one fte_inlinebody elsewhere.
785//fte_inlinebody must be used on a prototype OUTSIDE of a header.
786//fte_inlinestatic must not be used inside any headers at all.
787#if __STDC_VERSION__ >= 199901L
788 //C99 specifies that an inline function is used as a hint. there should be an actual body/copy somewhere (extern inline foo).
789 #define fte_inline inline //must have non-line 'int foo();' somewhere
790 #define fte_inlinebody extern inline
791 #define fte_inlinestatic static inline
792#elif defined(_MSC_VER)
793 //msvc will inline like C++. and that's fine.
794 #define fte_inline __inline //c++ style
795 #define fte_inlinebody
796 #define fte_inlinestatic static __inline
797#elif (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
798 //gcc will generally inline where it can - so long as its static. but that doesn't stop it warning
799 #define fte_inline __attribute__((unused)) static
800 #define fte_inlinebody static
801 #if __GNUC__ > 5
802 #define fte_inlinestatic static inline
803 #else
804 #define fte_inlinestatic static
805 #endif
806#else
807 //make it static so we at least don't get errors (might still get warnings. see above)
808 #define fte_inline static
809 #define fte_inlinebody static
810 #define fte_inlinestatic static
811#endif
812
813
814#ifndef FTE_DEPRECATED
815#define FTE_DEPRECATED
816#endif
817#ifndef FTE_UNREACHABLE
818#define FTE_UNREACHABLE
819#endif
820#ifndef LIKEPRINTF
821#define LIKEPRINTF(x)
822#endif
823#ifndef VARGS
824#define VARGS
825#endif
826#ifndef NORETURN
827#define NORETURN
828#endif
829
830#ifdef _WIN32
831#define ZEXPORT VARGS
832#define ZEXPORTVA VARGS
833#endif
834
835#ifdef _DEBUG
836 #undef FTE_UNREACHABLE
837 #define FTE_UNREACHABLE Sys_Error("Unreachable reached: %s %i\n", __FILE__, __LINE__)
838#endif
839
840#ifndef stricmp
841 #ifdef _WIN32
842 //Windows-specific...
843 #define stricmp _stricmp
844 #define strnicmp _strnicmp
845 #else
846 //Posix
847 #define stricmp strcasecmp
848 #define strnicmp strncasecmp
849 #endif
850#endif
851
852
853// !!! if this is changed, it must be changed in d_ifacea.h too !!!
854#define CACHE_SIZE 32 // used to align key data structures
855
856#define UNUSED(x) (x = x) // for pesky compiler / lint warnings
857
858// up / down
859#define PITCH 0
860
861// left / right
862#define YAW 1
863
864// fall over
865#define ROLL 2
866
867
868#define MAX_QPATH 128 // max length of a quake game pathname
869#define MAX_OSPATH 1024 // max length of a filesystem pathname (260 on windows, but needs to be longer for utf8)
870#define OLD_MAX_QPATH 64 // it was baked into various file formats, which is unfortunate.
871
872#define ON_EPSILON 0.1 // point on plane side epsilon
873
874#define MAX_NQMSGLEN 65536 // max length of a reliable message. FIXME: should be 8000 to play safe with proquake
875#define MAX_Q2MSGLEN 1400
876#define MAX_QWMSGLEN 1450
877#define MAX_OVERALLMSGLEN 65536 // mvdsv sends packets this big
878#define MAX_DATAGRAM 1450 // max length of unreliable message
879#define MAX_Q2DATAGRAM MAX_Q2MSGLEN
880#define MAX_NQDATAGRAM 1024 // max length of unreliable message with vanilla nq protocol
881#define MAX_OVERALLDATAGRAM MAX_DATAGRAM
882
883#define MAX_BACKBUFLEN 1200
884
885#ifdef Q1BSPS
886#define lightstyleindex_t unsigned short
887#else
888#define lightstyleindex_t qbyte
889#endif
890#define INVALID_LIGHTSTYLE ((lightstyleindex_t)(~0u)) //the style that's invalid, signifying to stop adding more.
891#define INVALID_VLIGHTSTYLE ((qbyte)(~0u)) //the style that's invalid for verticies, signifying to stop adding more.
892
893//
894// per-level limits
895//
896#ifdef FTE_TARGET_WEB
897#define MAX_EDICTS ((1<<15)-1)
898#else
899#define MAX_EDICTS ((1<<22)-1) // expandable up to 22 bits
900//#define MAX_EDICTS ((1<<18)-1) // expandable up to 22 bits
901#endif
902
903#define MAX_NET_LIGHTSTYLES (INVALID_LIGHTSTYLE+1) // 16bit. the last index MAY be used to signify an invalid lightmap in the bsp, but is still valid for rtlights.
904#define MAX_STANDARDLIGHTSTYLES 64
905#define MAX_PRECACHE_MODELS 4096 // 14bit.
906#define MAX_PRECACHE_SOUNDS 2048 // 14bit.
907#define MAX_SSPARTICLESPRE 1024 // 14bit. precached particle effect names, for server-side pointparticles/trailparticles.
908#define MAX_VWEP_MODELS 32
909
910#define MAX_CSMODELS 2048 // these live entirly clientside
911#define MAX_CSPARTICLESPRE 1024
912
913#define SAVEGAME_COMMENT_LENGTH 39
914
915#define MAX_STYLESTRING 64
916
917#define MAX_Q2EDICTS 1024
918
919//
920// stats are integers communicated to the client by the server
921//
922#define MAX_QW_STATS 32
923enum {
924#ifdef QUAKESTATS
926//STAT_FRAGS = 1,
938STAT_SECRETS = 13, // bumped on client side by svc_foundsecret
939STAT_MONSTERS = 14, // bumped by svc_killedmonster
941STAT_VIEWHEIGHT = 16, //same as zquake
942STAT_TIME = 17, //zquake
944//STAT_UNUSED = 19,
945#ifdef SIDEVIEWS
947#endif
948STAT_VIEWZOOM = 21, // DP
949#define STAT_VIEWZOOM_SCALE 255
950//STAT_UNUSED = 22,
951//STAT_UNUSED = 23,
952//STAT_UNUSED = 24,
953STAT_IDEALPITCH = 25, //nq-emu
954STAT_PUNCHANGLE_X = 26, //nq-emu
955STAT_PUNCHANGLE_Y = 27, //nq-emu
956STAT_PUNCHANGLE_Z = 28, //nq-emu
960
961#ifdef HEXEN2
962//these stats are used only when running a hexen2 mod/hud, and will never be used for a quake mod/hud/generic code.
963STAT_H2_LEVEL = 32, // changes stat bar
964STAT_H2_INTELLIGENCE, // changes stat bar
965STAT_H2_WISDOM, // changes stat bar
966STAT_H2_STRENGTH, // changes stat bar
967STAT_H2_DEXTERITY, // changes stat bar
968STAT_H2_BLUEMANA, // changes stat bar
969STAT_H2_GREENMANA, // changes stat bar
970STAT_H2_EXPERIENCE, // changes stat bar
971#define STAT_H2_CNT_FIRST (STAT_H2_CNT_TORCH)
972STAT_H2_CNT_TORCH, // changes stat bar
973STAT_H2_CNT_H_BOOST, // changes stat bar
974STAT_H2_CNT_SH_BOOST, // changes stat bar
975STAT_H2_CNT_MANA_BOOST, // changes stat bar
976STAT_H2_CNT_TELEPORT, // changes stat bar
977STAT_H2_CNT_TOME, // changes stat bar
978STAT_H2_CNT_SUMMON, // changes stat bar
979STAT_H2_CNT_INVISIBILITY, // changes stat bar
980STAT_H2_CNT_GLYPH, // changes stat bar
981STAT_H2_CNT_HASTE, // changes stat bar
982STAT_H2_CNT_BLAST, // changes stat bar
983STAT_H2_CNT_POLYMORPH, // changes stat bar
984STAT_H2_CNT_FLIGHT, // changes stat bar
985STAT_H2_CNT_CUBEOFFORCE, // changes stat bar
986STAT_H2_CNT_INVINCIBILITY, // changes stat bar
987#define STAT_H2_CNT_LAST (STAT_H2_CNT_INVINCIBILITY)
988#define STAT_H2_CNT_COUNT (STAT_H2_CNT_LAST+1-STAT_H2_CNT_FIRST)
996
1018
1021#endif
1022
1028STAT_MOVEFLAGS = 225, // DP
1038STAT_FRAGLIMIT = 235, // DP
1039STAT_TIMELIMIT = 236, // DP
1059#endif
1060 MAX_CL_STATS = 256
1062
1063#ifdef QUAKESTATS
1064//
1065// item flags
1066//
1067#define IT_SHOTGUN (1u<<0)
1068#define IT_SUPER_SHOTGUN (1u<<1)
1069#define IT_NAILGUN (1u<<2)
1070#define IT_SUPER_NAILGUN (1u<<3)
1071
1072#define IT_GRENADE_LAUNCHER (1u<<4)
1073#define IT_ROCKET_LAUNCHER (1u<<5)
1074#define IT_LIGHTNING (1u<<6)
1075#define IT_SUPER_LIGHTNING (1u<<7)
1076
1077#define IT_SHELLS (1u<<8)
1078#define IT_NAILS (1u<<9)
1079#define IT_ROCKETS (1u<<10)
1080#define IT_CELLS (1u<<11)
1081
1082#define IT_AXE (1u<<12)
1083
1084#define IT_ARMOR1 (1u<<13)
1085#define IT_ARMOR2 (1u<<14)
1086#define IT_ARMOR3 (1u<<15)
1087
1088#define IT_SUPERHEALTH (1u<<16)
1089
1090#define IT_KEY1 (1u<<17)
1091#define IT_KEY2 (1u<<18)
1092
1093#define IT_INVISIBILITY (1u<<19)
1094
1095#define IT_INVULNERABILITY (1u<<20)
1096#define IT_SUIT (1u<<21)
1097#define IT_QUAD (1u<<22)
1098
1099#define IT_SIGIL1 (1u<<28)
1100
1101#define IT_SIGIL2 (1u<<29)
1102#define IT_SIGIL3 (1u<<30)
1103#define IT_SIGIL4 (1u<<31)
1104#endif
1105
1106//
1107// print flags
1108//
1109#define PRINT_LOW 0 // pickup messages
1110#define PRINT_MEDIUM 1 // death messages
1111#define PRINT_HIGH 2 // critical messages
1112#define PRINT_CHAT 3 // chat messages
1113
1114
1115
1116//split screen stuff
1117#ifndef MAX_SPLITS
1118#define MAX_SPLITS 1u //disabled, but must be defined for sanities sake.
1119#endif
1120
1121
1122
1123
1124//savegame vars
1125#define SAVEGAME_COMMENT_LENGTH 39
1126#define SAVEGAME_VERSION_NQ 5
1127#define SAVEGAME_VERSION_QW 6 //actually zQuake, but the functional difference is that its qw instead of nq.
1128#define SAVEGAME_VERSION_FTE_LEG 667 //found in .sav files. this is for legacy-like saved games with multiple players.
1129#define SAVEGAME_VERSION_FTE_HUB 25000 //found in .fsv files. includes svs.gametype, so bumps should be large.
1130#define CACHEGAME_VERSION_OLD 513 //lame ordering.
1131#define CACHEGAME_VERSION_VERBOSE 514 //saved fields got names, making it more extensible.
1132#define CACHEGAME_VERSION_MODSAVED 515 //qc is responsible for saving all they need to, and restoring it after.
1133
1134
1135#define PM_DEFAULTSTEPHEIGHT 18
1136
1137
1138#define dem_cmd 0
1139#define dem_read 1
1140#define dem_set 2
1141#define dem_multiple 3
1142#define dem_single 4
1143#define dem_stats 5
1144#define dem_all 6
1145
1146
1147#if 0 //fuck sake, just build it in an older chroot.
1148/*
1149glibc SUCKS. 64bit glibc is depending upon glibc 2.14 because of some implementation-defined copy direction change that breaks flash.
1150or something.
1151anyway, the actual interface is the same. the old version might be slower, but when updating glibc generally results in also installing systemd, requiring the new version is NOT an option.
1152*/
1153#if defined(__GNUC__) && defined(__amd64__) && defined(__linux__) && !defined(FTE_SDL)
1154 #include <features.h> /* for glibc version */
1155 #if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 14)
1156 __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
1157 __asm__(".symver memmove,memmove@GLIBC_2.2.5");
1158 #endif
1159 #if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 29)
1160 __asm__(".symver exp,exp@GLIBC_2.2.5");
1161 __asm__(".symver log,log@GLIBC_2.2.5");
1162 __asm__(".symver pow,pow@GLIBC_2.2.5");
1163 #endif
1164#endif
1165/*end glibc workaround*/
1166#endif
1167
1168#endif //ifndef __BOTHDEFS_H
@ STAT_H2_CNT_INVISIBILITY
Definition: bothdefs.h:979
@ STAT_H2_ARMOUR4
Definition: bothdefs.h:1001
@ STAT_MOVEVARS_AIRSTOPACCELERATE
Definition: bothdefs.h:1034
@ STAT_VIEW2
Definition: bothdefs.h:946
@ STAT_H2_EXPERIENCE
Definition: bothdefs.h:970
@ STAT_MOVEVARS_WATERACCELERATE
Definition: bothdefs.h:1051
@ STAT_H2_LEVEL
Definition: bothdefs.h:963
@ STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW
Definition: bothdefs.h:1025
@ STAT_MOVEVARS_WATERFRICTION
Definition: bothdefs.h:1042
@ STAT_WEAPONMODELI
Definition: bothdefs.h:927
@ STAT_MOVEFLAGS
Definition: bothdefs.h:1028
@ STAT_NAILS
Definition: bothdefs.h:932
@ STAT_ITEMS
Definition: bothdefs.h:940
@ STAT_VIEWHEIGHT
Definition: bothdefs.h:941
@ STAT_H2_ARMOUR1
Definition: bothdefs.h:998
@ STAT_MOVEVARS_AIRCONTROL_PENALTY
Definition: bothdefs.h:1024
@ STAT_H2_CNT_POLYMORPH
Definition: bothdefs.h:983
@ STAT_H2_MAXHEALTH
Definition: bothdefs.h:1014
@ STAT_PUNCHANGLE_Z
Definition: bothdefs.h:956
@ STAT_H2_FLIGHT_T
Definition: bothdefs.h:1002
@ STAT_HEALTH
Definition: bothdefs.h:925
@ STAT_H2_BLUEMANA
Definition: bothdefs.h:968
@ STAT_H2_CNT_TORCH
Definition: bothdefs.h:972
@ STAT_MOVEVARS_MAXAIRSTRAFESPEED
Definition: bothdefs.h:1036
@ STAT_H2_RINGS_LOW
Definition: bothdefs.h:997
@ STAT_H2_CNT_TOME
Definition: bothdefs.h:977
@ STAT_ROCKETS
Definition: bothdefs.h:933
@ STAT_MOVEVARS_ENTGRAVITY
Definition: bothdefs.h:1052
@ STAT_MOVEVARS_FRICTION
Definition: bothdefs.h:1041
@ STAT_H2_STRENGTH
Definition: bothdefs.h:966
@ STAT_TIME
Definition: bothdefs.h:942
@ STAT_MOVEVARS_AIRSTRAFEACCEL_QW
Definition: bothdefs.h:1026
@ STAT_H2_CNT_MANA_BOOST
Definition: bothdefs.h:975
@ STAT_MOVEVARS_AIRCONTROL_POWER
Definition: bothdefs.h:1027
@ STAT_H2_HASTED
Definition: bothdefs.h:993
@ STAT_TIMELIMIT
Definition: bothdefs.h:1039
@ MAX_CL_STATS
Definition: bothdefs.h:1060
@ STAT_MOVEVARS_WARSOWBUNNY_ACCEL
Definition: bothdefs.h:1030
@ STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL
Definition: bothdefs.h:1029
@ STAT_TOTALSECRETS
Definition: bothdefs.h:936
@ STAT_H2_PUZZLE2
Definition: bothdefs.h:1007
@ STAT_H2_PUZZLE6
Definition: bothdefs.h:1011
@ STAT_WEAPONFRAME
Definition: bothdefs.h:930
@ STAT_H2_CNT_FLIGHT
Definition: bothdefs.h:984
@ STAT_H2_CNT_HASTE
Definition: bothdefs.h:981
@ STAT_H2_CNT_SUMMON
Definition: bothdefs.h:978
@ STAT_H2_CNT_INVINCIBILITY
Definition: bothdefs.h:986
@ STAT_H2_MOVETYPE
Definition: bothdefs.h:991
@ STAT_MOVEVARS_AIRACCEL_QW_STRETCHFACTOR
Definition: bothdefs.h:1023
@ STAT_MOVEVARS_JUMPVELOCITY
Definition: bothdefs.h:1053
@ STAT_H2_CNT_CUBEOFFORCE
Definition: bothdefs.h:985
@ STAT_VIEWZOOM
Definition: bothdefs.h:948
@ STAT_H2_ARMOUR3
Definition: bothdefs.h:1000
@ STAT_MOVEVARS_AIRCONTROL
Definition: bothdefs.h:1037
@ STAT_H2_ARMOUR2
Definition: bothdefs.h:999
@ STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED
Definition: bothdefs.h:1031
@ STAT_MOVEVARS_AIRACCEL_QW
Definition: bothdefs.h:1057
@ STAT_ARMOR
Definition: bothdefs.h:929
@ STAT_PUNCHANGLE_X
Definition: bothdefs.h:954
@ STAT_PUNCHVECTOR_Y
Definition: bothdefs.h:958
@ STAT_H2_REGEN_T
Definition: bothdefs.h:1005
@ STAT_H2_CNT_TELEPORT
Definition: bothdefs.h:976
@ STAT_H2_FLAGS
Definition: bothdefs.h:1016
@ STAT_MONSTERS
Definition: bothdefs.h:939
@ STAT_H2_OBJECTIVE2
Definition: bothdefs.h:1020
@ STAT_FRAGLIMIT
Definition: bothdefs.h:1038
@ STAT_MOVEVARS_AIRSTRAFEACCELERATE
Definition: bothdefs.h:1035
@ STAT_H2_PUZZLE5
Definition: bothdefs.h:1010
@ STAT_H2_RINGS_ACTIVE
Definition: bothdefs.h:995
@ STAT_MOVEVARS_AIRACCELERATE
Definition: bothdefs.h:1050
@ STAT_H2_GREENMANA
Definition: bothdefs.h:969
@ STAT_MOVEVARS_SPECTATORMAXSPEED
Definition: bothdefs.h:1048
@ STAT_H2_CNT_BLAST
Definition: bothdefs.h:982
@ STAT_CELLS
Definition: bothdefs.h:934
@ STAT_H2_INTELLIGENCE
Definition: bothdefs.h:964
@ STAT_TOTALMONSTERS
Definition: bothdefs.h:937
@ STAT_MOVEVARS_MAXAIRSPEED
Definition: bothdefs.h:1055
@ STAT_H2_PLAYERCLASS
Definition: bothdefs.h:1017
@ STAT_H2_CAMERAMODE
Definition: bothdefs.h:992
@ STAT_PUNCHVECTOR_X
Definition: bothdefs.h:957
@ STAT_MATCHSTARTTIME
Definition: bothdefs.h:943
@ STAT_H2_INVENTORY
Definition: bothdefs.h:994
@ STAT_H2_PUZZLE1
Definition: bothdefs.h:1006
@ STAT_ACTIVEWEAPON
Definition: bothdefs.h:935
@ STAT_H2_ARTIFACT_LOW
Definition: bothdefs.h:990
@ STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION
Definition: bothdefs.h:1058
@ STAT_H2_PUZZLE4
Definition: bothdefs.h:1009
@ STAT_PUNCHANGLE_Y
Definition: bothdefs.h:955
@ STAT_H2_OBJECTIVE1
Definition: bothdefs.h:1019
@ STAT_MOVEVARS_TICRATE
Definition: bothdefs.h:1043
@ STAT_H2_PUZZLE3
Definition: bothdefs.h:1008
@ STAT_H2_MAXMANA
Definition: bothdefs.h:1015
@ STAT_MOVEVARS_MAXSPEED
Definition: bothdefs.h:1047
@ STAT_PUNCHVECTOR_Z
Definition: bothdefs.h:959
@ STAT_H2_WISDOM
Definition: bothdefs.h:965
@ STAT_IDEALPITCH
Definition: bothdefs.h:953
@ STAT_MOVEVARS_WALLFRICTION
Definition: bothdefs.h:1040
@ STAT_MOVEVARS_ACCELERATE
Definition: bothdefs.h:1049
@ STAT_H2_CNT_GLYPH
Definition: bothdefs.h:980
@ STAT_MOVEVARS_GRAVITY
Definition: bothdefs.h:1045
@ STAT_H2_CNT_SH_BOOST
Definition: bothdefs.h:974
@ STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL
Definition: bothdefs.h:1032
@ STAT_AMMO
Definition: bothdefs.h:928
@ STAT_SHELLS
Definition: bothdefs.h:931
@ STAT_MOVEVARS_EDGEFRICTION
Definition: bothdefs.h:1054
@ STAT_H2_DEXTERITY
Definition: bothdefs.h:967
@ STAT_H2_PUZZLE7
Definition: bothdefs.h:1012
@ STAT_H2_WATER_T
Definition: bothdefs.h:1003
@ STAT_SECRETS
Definition: bothdefs.h:938
@ STAT_H2_ARTIFACT_ACTIVE
Definition: bothdefs.h:989
@ STAT_H2_PUZZLE8
Definition: bothdefs.h:1013
@ STAT_MOVEVARS_STOPSPEED
Definition: bothdefs.h:1046
@ STAT_H2_TURNING_T
Definition: bothdefs.h:1004
@ STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO
Definition: bothdefs.h:1033
@ STAT_MOVEVARS_STEPHEIGHT
Definition: bothdefs.h:1056
@ STAT_H2_CNT_H_BOOST
Definition: bothdefs.h:973
@ STAT_MOVEVARS_TIMESCALE
Definition: bothdefs.h:1044
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5")