]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - quakedef.h
client: Move SCR prototype to screen.h
[xonotic/darkplaces.git] / quakedef.h
index 31f2fbc5d9d06ceb4aeef3531f6edfcadf16cf81..f1b59313f280ce0d53ae54edf93a7f069e2c354b 100644 (file)
@@ -22,18 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef QUAKEDEF_H
 #define QUAKEDEF_H
 
-/// on UNIX platforms we need to define this so that video saving does not cause a SIGFSZ (file size) signal when a video clip exceeds 2GB
-#define _FILE_OFFSET_BITS 64
-
-// for cd_linux.c
-#define __KERNEL_STRICT_NAMES
-
-#if defined(__GNUC__) && (__GNUC__ > 2)
-#define DP_FUNC_PRINTF(n) __attribute__ ((format (printf, n, n+1)))
-#define DP_FUNC_PURE      __attribute__ ((pure))
-#else
-#define DP_FUNC_PRINTF(n)
-#define DP_FUNC_PURE
+#ifdef __APPLE__
+# include <TargetConditionals.h>
 #endif
 
 #include <sys/types.h>
@@ -44,96 +34,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <stdio.h>
 #include <stdlib.h>
 #include <limits.h>
-#include <setjmp.h>
 
 #include "qtypes.h"
 
-extern char *buildstring;
+extern const char *buildstring;
 extern char engineversion[128];
 
 #define GAMENAME "id1"
 
-#define MAX_NUM_ARGVS  50
-
-
-#define        MAX_QPATH               128                     ///< max length of a quake game pathname
-#define        MAX_OSPATH              1024            ///< max length of a filesystem pathname
-
-#define        ON_EPSILON              0.1                     ///< point on plane side epsilon
-
-#define MAX_PACKETFRAGMENT 1024                ///< max length of packet fragment
-#define NET_MAXMESSAGE 65536
-#define NET_MINRATE            1000 ///< limits "rate" and "sv_maxrate" cvars
-
-//
-// per-level limits
-//
-// LordHavoc: increased entity limit to 2048 from 600
-#define        MAX_EDICTS              32768           // FIXME: ouch! ouch! ouch!
-#define        MAX_LIGHTSTYLES 256                     // LordHavoc: increased from 64, NOTE special consideration is needed in savegames!
-// LordHavoc: increased model and sound limits from 256 and 256 to 4096 and 4096 (and added protocol extensions accordingly to break the 256 barrier)
-// div0: increased model limit to 8192
-#define        MAX_MODELS              8192
-#define        MAX_SOUNDS              4096
+#include "qdefs.h"
+#include "qstats.h"
 
-#define        SAVEGAME_COMMENT_LENGTH 39
-
-#define        MAX_STYLESTRING 64
-
-//
-// stats are integers communicated to the client by the server
-//
-#define        MAX_CL_STATS            256
-#define        STAT_HEALTH                     0
-//#define      STAT_FRAGS                      1
-#define        STAT_WEAPON                     2
-#define        STAT_AMMO                       3
-#define        STAT_ARMOR                      4
-#define        STAT_WEAPONFRAME        5
-#define        STAT_SHELLS                     6
-#define        STAT_NAILS                      7
-#define        STAT_ROCKETS            8
-#define        STAT_CELLS                      9
-#define        STAT_ACTIVEWEAPON       10
-#define        STAT_TOTALSECRETS       11
-#define        STAT_TOTALMONSTERS      12
-#define        STAT_SECRETS            13              ///< bumped on client side by svc_foundsecret
-#define        STAT_MONSTERS           14              ///< bumped by svc_killedmonster
-#define STAT_ITEMS                     15 ///< FTE, DP
-#define STAT_VIEWHEIGHT                16 ///< FTE, DP
-//#define STAT_TIME                    17 ///< FTE
-//#define STAT_VIEW2           20 ///< FTE
-#define STAT_VIEWZOOM          21 ///< DP
-#define STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL      226 ///< DP
-#define STAT_MOVEVARS_WARSOWBUNNY_ACCEL                                227 ///< DP
-#define STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED                     228 ///< DP
-#define STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL                    229 ///< DP
-#define STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO      230 ///< DP
-#define STAT_MOVEVARS_AIRSTOPACCELERATE                                231 ///< DP
-#define STAT_MOVEVARS_AIRSTRAFEACCELERATE                      232 ///< DP
-#define STAT_MOVEVARS_MAXAIRSTRAFESPEED                                233 ///< DP
-#define STAT_MOVEVARS_AIRCONTROL                                       234 ///< DP
-#define STAT_FRAGLIMIT                                                         235 ///< DP
-#define STAT_TIMELIMIT                                                         236 ///< DP
-#define STAT_MOVEVARS_WALLFRICTION                                     237 ///< DP
-#define STAT_MOVEVARS_FRICTION                                         238 ///< DP
-#define STAT_MOVEVARS_WATERFRICTION                                    239 ///< DP
-#define STAT_MOVEVARS_TICRATE                                          240 ///< DP
-#define STAT_MOVEVARS_TIMESCALE                                                241 ///< DP
-#define STAT_MOVEVARS_GRAVITY                                          242 ///< DP
-#define STAT_MOVEVARS_STOPSPEED                                                243 ///< DP
-#define STAT_MOVEVARS_MAXSPEED                                         244 ///< DP
-#define STAT_MOVEVARS_SPECTATORMAXSPEED                                245 ///< DP
-#define STAT_MOVEVARS_ACCELERATE                                       246 ///< DP
-#define STAT_MOVEVARS_AIRACCELERATE                                    247 ///< DP
-#define STAT_MOVEVARS_WATERACCELERATE                          248 ///< DP
-#define STAT_MOVEVARS_ENTGRAVITY                                       249 ///< DP
-#define STAT_MOVEVARS_JUMPVELOCITY                                     250 ///< DP
-#define STAT_MOVEVARS_EDGEFRICTION                                     251 ///< DP
-#define STAT_MOVEVARS_MAXAIRSPEED                                      252 ///< DP
-#define STAT_MOVEVARS_STEPHEIGHT                                       253 ///< DP
-#define STAT_MOVEVARS_AIRACCEL_QW                                      254 ///< DP
-#define STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION       255 ///< DP
+// moveflags values
+#define MOVEFLAG_VALID 0x80000000
+#define MOVEFLAG_Q2AIRACCELERATE 0x00000001
+#define MOVEFLAG_NOGRAVITYONGROUND 0x00000002
+#define MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE 0x00000004
 
 // stock defines
 
@@ -223,20 +139,11 @@ extern char engineversion[128];
 
 //===========================================
 
-// LordHavoc: increased player limit from 16 to 255
-#define        MAX_SCOREBOARD          255
-// LordHavoc: increased name limit from 32 to 64 characters
-#define        MAX_SCOREBOARDNAME      64
-// infostring sizes used by QuakeWorld support
-// was 196
-#define MAX_USERINFO_STRING 1280
-// was 512
-#define MAX_SERVERINFO_STRING 1280
-#define MAX_LOCALINFO_STRING 32768
-
 #include "zone.h"
+#include "thread.h"
 #include "fs.h"
 #include "common.h"
+#include "com_list.h"
 #include "cvar.h"
 #include "bspfile.h"
 #include "sys.h"
@@ -245,11 +152,13 @@ extern char engineversion[128];
 
 #include "r_textures.h"
 
+#include "crypto.h"
 #include "draw.h"
 #include "screen.h"
 #include "netconn.h"
 #include "protocol.h"
 #include "cmd.h"
+#include "host.h"
 #include "sbar.h"
 #include "sound.h"
 #include "model_shared.h"
@@ -263,27 +172,54 @@ extern char engineversion[128];
 #include "input.h"
 #include "keys.h"
 #include "console.h"
+#ifdef CONFIG_MENU
 #include "menu.h"
+#endif
+#include "csprogs.h"
 
-#include "glquake.h"
-
-#include "palette.h"
-
-extern qboolean noclip_anglehack;
+extern qbool noclip_anglehack;
 
 extern cvar_t developer;
+extern cvar_t developer_entityparsing;
+extern cvar_t developer_extra;
+extern cvar_t developer_insane;
 extern cvar_t developer_loadfile;
 extern cvar_t developer_loading;
 
+extern cvar_t sessionid;
+
+#define STARTCONFIGFILENAME "quake.rc"
+#define CONFIGFILENAME "config.cfg"
+
 /* Preprocessor macros to identify platform
     DP_OS_NAME         - "friendly" name of the OS, for humans to read
     DP_OS_STR  - "identifier" of the OS, more suited for code to use
     DP_ARCH_STR        - "identifier" of the processor architecture
  */
-#if defined(__linux__)
+#if defined(__ANDROID__) /* must come first because it also defines linux */
+# define DP_OS_NAME            "Android"
+# define DP_OS_STR             "android"
+# define USE_GLES2             1
+# define USE_RWOPS             1
+# define LINK_TO_ZLIB  1
+# define LINK_TO_LIBVORBIS 1
+#ifdef USEXMP
+# define LINK_TO_LIBXMP 1 // nyov: if someone can test with the android NDK compiled libxmp?
+#endif
+# define DP_MOBILETOUCH        1
+# define DP_FREETYPE_STATIC 1
+#elif TARGET_OS_IPHONE /* must come first because it also defines MACOSX */
+# define DP_OS_NAME            "iPhoneOS"
+# define DP_OS_STR             "iphoneos"
+# define USE_GLES2             1
+# define LINK_TO_ZLIB  1
+# define LINK_TO_LIBVORBIS 1
+# define DP_MOBILETOUCH        1
+# define DP_FREETYPE_STATIC 1
+#elif defined(__linux__)
 # define DP_OS_NAME            "Linux"
 # define DP_OS_STR             "linux"
-#elif defined(WIN64)
+#elif defined(_WIN64)
 # define DP_OS_NAME            "Windows64"
 # define DP_OS_STR             "win64"
 #elif defined(WIN32)
@@ -298,47 +234,77 @@ extern cvar_t developer_loading;
 #elif defined(__OpenBSD__)
 # define DP_OS_NAME            "OpenBSD"
 # define DP_OS_STR             "openbsd"
+#elif defined(__DragonFly__)
+# define DP_OS_NAME            "DragonFlyBSD"
+# define DP_OS_STR             "dragonflybsd"
 #elif defined(MACOSX)
 # define DP_OS_NAME            "Mac OS X"
 # define DP_OS_STR             "osx"
 #elif defined(__MORPHOS__)
 # define DP_OS_NAME            "MorphOS"
 # define DP_OS_STR             "morphos"
+#elif defined (sun) || defined (__sun)
+# if defined (__SVR4) || defined (__svr4__)
+#  define DP_OS_NAME   "Solaris"
+#  define DP_OS_STR            "solaris"
+# else
+#  define DP_OS_NAME   "SunOS"
+#  define DP_OS_STR            "sunos"
+# endif
 #else
 # define DP_OS_NAME            "Unknown"
+# define DP_OS_STR             "unknown"
 #endif
 
-#if defined(__GNUC__)
+#if defined(__GNUC__) || (__clang__)
 # if defined(__i386__)
 #  define DP_ARCH_STR          "686"
+#  define SSE_POSSIBLE
+#  ifdef __SSE__
+#   define SSE_PRESENT
+#  endif
+#  ifdef __SSE2__
+#   define SSE2_PRESENT
+#  endif
 # elif defined(__x86_64__)
 #  define DP_ARCH_STR          "x86_64"
+#  define SSE_PRESENT
+#  define SSE2_PRESENT
 # elif defined(__powerpc__)
 #  define DP_ARCH_STR          "ppc"
 # endif
-#elif defined(WIN64)
+#elif defined(_WIN64)
 # define DP_ARCH_STR           "x86_64"
+# define SSE_PRESENT
+# define SSE2_PRESENT
 #elif defined(WIN32)
 # define DP_ARCH_STR           "x86"
+# define SSE_POSSIBLE
 #endif
 
-/// incremented every frame, never reset
-extern int host_framecount;
-/// not bounded in any way, changed at start of every frame, never reset
-extern double realtime;
+#ifdef SSE_PRESENT
+# define SSE_POSSIBLE
+#endif
 
-void Host_InitCommands(void);
-void Host_Main(void);
-void Host_Shutdown(void);
-void Host_StartVideo(void);
-void Host_Error(const char *error, ...) DP_FUNC_PRINTF(1);
-void Host_Quit_f(void);
-void Host_ClientCommands(const char *fmt, ...) DP_FUNC_PRINTF(1);
-void Host_ShutdownServer(void);
-void Host_Reconnect_f(void);
-void Host_NoOperation_f(void);
+#ifdef NO_SSE
+# undef SSE_PRESENT
+# undef SSE_POSSIBLE
+# undef SSE2_PRESENT
+#endif
 
-void Host_AbortCurrentFrame(void);
+#ifdef SSE_POSSIBLE
+// runtime detection of SSE/SSE2 capabilities for x86
+qbool Sys_HaveSSE(void);
+qbool Sys_HaveSSE2(void);
+#else
+#define Sys_HaveSSE() false
+#define Sys_HaveSSE2() false
+#endif
+
+#include "glquake.h"
+
+#include "palette.h"
+extern cvar_t host_isclient;
 
 /// skill level for currently loaded level (in case the user changes the cvar while the level is running, this reflects the level actually in use)
 extern int current_skill;
@@ -367,12 +333,32 @@ void Sys_Shared_Init(void);
 // In Quake, any char in 0..32 counts as whitespace
 //#define ISWHITESPACE(ch) ((unsigned char) ch <= (unsigned char) ' ')
 #define ISWHITESPACE(ch) (!(ch) || (ch) == ' ' || (ch) == '\t' || (ch) == '\r' || (ch) == '\n')
-
+#define ISCOMMENT(ch, pos) ch[pos] == '/' && ch[pos + 1] == '/' && (pos == 0 || ISWHITESPACE(ch[pos - 1]))
 // This also includes extended characters, and ALL control chars
 #define ISWHITESPACEORCONTROL(ch) ((signed char) (ch) <= (signed char) ' ')
 
 
+#ifdef PRVM_64
+#define FLOAT_IS_TRUE_FOR_INT(x) ((x) & 0x7FFFFFFFFFFFFFFF) // also match "negative zero" doubles of value 0x8000000000000000
+#define FLOAT_LOSSLESS_FORMAT "%.17g"
+#define VECTOR_LOSSLESS_FORMAT "%.17g %.17g %.17g"
+#else
 #define FLOAT_IS_TRUE_FOR_INT(x) ((x) & 0x7FFFFFFF) // also match "negative zero" floats of value 0x80000000
+#define FLOAT_LOSSLESS_FORMAT "%.9g"
+#define VECTOR_LOSSLESS_FORMAT "%.9g %.9g %.9g"
+#endif
+
+// originally this was _MSC_VER
+// but here we want to test the system libc, which on win32 is borked, and NOT the compiler
+#ifdef WIN32
+#define INT_LOSSLESS_FORMAT_SIZE "I64"
+#define INT_LOSSLESS_FORMAT_CONVERT_S(x) ((__int64)(x))
+#define INT_LOSSLESS_FORMAT_CONVERT_U(x) ((unsigned __int64)(x))
+#else
+#define INT_LOSSLESS_FORMAT_SIZE "j"
+#define INT_LOSSLESS_FORMAT_CONVERT_S(x) ((intmax_t)(x))
+#define INT_LOSSLESS_FORMAT_CONVERT_U(x) ((uintmax_t)(x))
+#endif
 
 #endif