This repository has been archived on 2022-06-27. You can view files and clone it, but cannot push or open issues or pull requests.
Xash3DArchive/engine/common/common.h

340 lines
11 KiB
C
Raw Normal View History

2008-06-09 22:00:00 +02:00
//=======================================================================
// Copyright XashXT Group 2007 <20>
// common.h - definitions common between client and server
//=======================================================================
#ifndef COMMON_H
#define COMMON_H
#include <setjmp.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
2008-10-27 22:00:00 +01:00
#include "launch_api.h"
2010-12-09 22:00:00 +01:00
#include "ref_params.h"
2010-01-08 22:00:00 +01:00
#include "com_export.h"
2010-08-07 22:00:00 +02:00
#include "com_model.h"
2008-06-09 22:00:00 +02:00
2010-06-20 22:00:00 +02:00
// PERFORMANCE INFO
#define MIN_FPS 0.1 // host minimum fps value for maxfps.
#define MAX_FPS 1000.0 // upper limit for maxfps.
#define MAX_FRAMETIME 0.1
#define MIN_FRAMETIME 0.001
2010-01-02 22:00:00 +01:00
#define MAX_RENDERS 8 // max libraries to keep tracking
2008-07-04 22:00:00 +02:00
#define MAX_ENTNUMBER 99999 // for server and client parsing
#define MAX_HEARTBEAT -99999 // connection time
2008-06-09 22:00:00 +02:00
2010-09-30 22:00:00 +02:00
#define CIN_MAIN 0
#define CIN_LOGO 1
2010-10-07 22:00:00 +02:00
// config strings are a general means of communication from
// the server to all connected clients.
// each config string can be at most CS_SIZE characters.
2010-12-16 22:00:00 +01:00
#define CS_SIZE 64 // size of one config string
#define CS_TIME 16 // size of time string
2010-10-07 22:00:00 +02:00
2010-12-16 22:00:00 +01:00
#define MAX_DECALS 512 // touching TE_DECAL messages, etc
#define MAX_MSGLEN 32768 // max length of network message
// FIXME: replace with NET_MAX_PAYLOAD
2010-10-07 22:00:00 +02:00
2010-08-05 22:00:00 +02:00
#ifdef _DEBUG
2010-10-26 22:00:00 +02:00
void DBG_AssertFunction( qboolean fExpr, const char* szExpr, const char* szFile, int szLine, const char* szMessage );
2010-08-05 22:00:00 +02:00
#define Assert( f ) DBG_AssertFunction( f, #f, __FILE__, __LINE__, NULL )
#else
#define Assert( f )
#endif
2010-10-22 22:00:00 +02:00
extern convar_t *scr_width;
extern convar_t *scr_height;
2010-12-09 22:00:00 +01:00
extern convar_t *scr_loading;
2010-10-22 22:00:00 +02:00
extern convar_t *scr_download;
extern convar_t *allow_download;
2010-12-09 22:00:00 +01:00
extern convar_t *cl_allow_levelshots;
2010-10-22 22:00:00 +02:00
extern convar_t *host_limitlocal;
extern convar_t *host_maxfps;
2008-06-09 22:00:00 +02:00
/*
==============================================================
2007-06-21 22:00:00 +02:00
2008-06-09 22:00:00 +02:00
HOST INTERFACE
==============================================================
2007-06-21 22:00:00 +02:00
*/
2010-10-28 22:00:00 +02:00
#define MAX_SYSEVENTS 1024
2008-06-09 22:00:00 +02:00
typedef enum
{
2008-06-12 22:00:00 +02:00
HOST_INIT = 0, // initalize operations
2008-06-09 22:00:00 +02:00
HOST_FRAME, // host running
HOST_SHUTDOWN, // shutdown operations
HOST_ERROR, // host stopped by error
HOST_SLEEP, // sleeped by different reason, e.g. minimize window
HOST_NOFOCUS, // same as HOST_FRAME, but disable mouse
2010-03-25 22:00:00 +01:00
HOST_RESTART, // during the changes video mode
HOST_CRASHED // an exception handler called
2008-06-09 22:00:00 +02:00
} host_state;
2008-07-12 22:00:00 +02:00
typedef enum
{
RD_NONE = 0,
RD_CLIENT,
2010-06-20 22:00:00 +02:00
RD_PACKET
2008-08-04 22:00:00 +02:00
} rdtype_t;
2008-07-12 22:00:00 +02:00
2010-08-15 22:00:00 +02:00
// game print level
typedef enum
{
PRINT_LOW, // pickup messages
PRINT_MEDIUM, // death messages
PRINT_HIGH, // critical messages
PRINT_CHAT, // chat messages
} messagelevel_t;
2008-06-09 22:00:00 +02:00
typedef struct host_redirect_s
{
2009-10-28 22:00:00 +01:00
rdtype_t target;
char *buffer;
int buffersize;
netadr_t address;
void (*flush)( netadr_t adr, rdtype_t target, char *buffer );
2008-06-09 22:00:00 +02:00
} host_redirect_t;
typedef struct host_parm_s
{
2010-11-28 22:00:00 +01:00
HINSTANCE hInst;
2008-06-09 22:00:00 +02:00
host_state state; // global host state
uint type; // running at
jmp_buf abortframe; // abort current frame
2008-11-04 22:00:00 +01:00
dword errorframe; // to avoid each-frame host error
2009-11-03 22:00:00 +01:00
byte *mempool; // static mempool for misc allocations
2008-06-09 22:00:00 +02:00
string finalmsg; // server shutdown final message
2010-06-20 22:00:00 +02:00
host_redirect_t rd; // remote console
2010-10-09 22:00:00 +02:00
double realtime; // host.curtime
double frametime; // time between engine frames
double realframetime; // for some system events, e.g. console animations
2009-09-20 22:00:00 +02:00
uint framecount; // global framecount
int events_head;
int events_tail;
2010-10-28 22:00:00 +02:00
sys_event_t events[MAX_SYSEVENTS];
// list of unique decal indexes
char draw_decals[MAX_DECALS][CS_SIZE];
2009-09-16 22:00:00 +02:00
2008-07-11 22:00:00 +02:00
HWND hWnd; // main window
int developer; // show all developer's message
2010-10-26 22:00:00 +02:00
qboolean key_overstrike; // key overstrike mode
2010-07-01 22:00:00 +02:00
2010-10-09 22:00:00 +02:00
// for IN_MouseMove() easy access
2010-08-20 22:00:00 +02:00
int window_center_x;
int window_center_y;
2010-07-01 22:00:00 +02:00
decallist_t *decalList; // used for keep decals, when renderer is restarted or changed
int numdecals;
2010-10-16 22:00:00 +02:00
soundlist_t *soundList; // used for keep ambient sounds, when renderer or sound is restarted
int numsounds;
2008-06-09 22:00:00 +02:00
} host_parm_t;
2009-11-02 22:00:00 +01:00
extern host_parm_t host;
2008-08-04 22:00:00 +02:00
2010-03-07 22:00:00 +01:00
//
// build.c
//
int com_buildnum( void );
2008-08-04 22:00:00 +02:00
//
// host.c
//
2010-07-23 22:00:00 +02:00
void Host_Init( const int argc, const char **argv );
void Host_Main( void );
void Host_Free( void );
2008-06-09 22:00:00 +02:00
void Host_SetServerState( int state );
int Host_ServerState( void );
2009-09-28 22:00:00 +02:00
int Host_CompareFileTime( long ft1, long ft2 );
2010-10-26 22:00:00 +02:00
qboolean Host_NewGame( const char *mapName, qboolean loadGame );
2009-10-16 22:00:00 +02:00
void Host_EndGame( const char *message, ... );
2008-06-09 22:00:00 +02:00
void Host_AbortCurrentFrame( void );
2010-07-30 22:00:00 +02:00
void Host_WriteServerConfig( const char *name );
void Host_WriteOpenGLConfig( void );
2009-09-10 22:00:00 +02:00
void Host_WriteConfig( void );
2010-10-26 22:00:00 +02:00
qboolean Host_IsLocalGame( void );
2009-10-13 22:00:00 +02:00
void Host_ShutdownServer( void );
2009-09-10 22:00:00 +02:00
void Host_Print( const char *txt );
2008-06-09 22:00:00 +02:00
void Host_Error( const char *error, ... );
2009-11-25 22:00:00 +01:00
void Host_Credits( void );
2008-06-09 22:00:00 +02:00
2007-06-21 22:00:00 +02:00
/*
==============================================================
2008-06-09 22:00:00 +02:00
CLIENT / SERVER SYSTEMS
2007-06-21 22:00:00 +02:00
==============================================================
*/
2008-06-09 22:00:00 +02:00
void CL_Init( void );
void CL_Shutdown( void );
2010-10-09 22:00:00 +02:00
void Host_ClientFrame( void );
2010-10-26 22:00:00 +02:00
qboolean CL_Active( void );
2008-06-09 22:00:00 +02:00
void SV_Init( void );
2010-10-26 22:00:00 +02:00
void SV_Shutdown( qboolean reconnect );
2010-10-09 22:00:00 +02:00
void Host_ServerFrame( void );
2010-10-26 22:00:00 +02:00
qboolean SV_Active( void );
2008-12-15 22:00:00 +01:00
2008-06-09 22:00:00 +02:00
/*
==============================================================
2009-11-02 22:00:00 +01:00
SHARED ENGFUNCS
2008-06-09 22:00:00 +02:00
==============================================================
*/
2010-10-22 22:00:00 +02:00
cvar_t *pfnCvar_RegisterVariable( const char *szName, const char *szValue, int flags );
2009-11-10 22:00:00 +01:00
char *pfnMemFgets( byte *pMemFile, int fileSize, int *filePos, char *pBuffer, int bufferSize );
2009-01-02 22:00:00 +01:00
byte* pfnLoadFile( const char *filename, int *pLength );
2009-12-04 22:00:00 +01:00
void pfnCVarSetString( const char *szName, const char *szValue );
void pfnCVarSetValue( const char *szName, float flValue );
float pfnCVarGetValue( const char *szName );
char* pfnCVarGetString( const char *szName );
2010-08-15 22:00:00 +02:00
cvar_t *pfnCVarGetPointer( const char *szVarName );
2009-09-22 22:00:00 +02:00
void pfnFreeFile( void *buffer );
2009-01-02 22:00:00 +01:00
int pfnFileExists( const char *filename );
2009-11-23 22:00:00 +01:00
void *pfnLoadLibrary( const char *name );
void *pfnGetProcAddress( void *hInstance, const char *name );
void pfnFreeLibrary( void *hInstance );
2009-01-02 22:00:00 +01:00
long pfnRandomLong( long lLow, long lHigh );
float pfnRandomFloat( float flLow, float flHigh );
2010-10-31 22:00:00 +01:00
int pfnAddCommand( const char *cmd_name, xcommand_t func );
2010-07-18 22:00:00 +02:00
void pfnDelCommand( const char *cmd_name );
2010-09-10 22:00:00 +02:00
void *Cache_Check( byte *mempool, struct cache_user_s *c );
2010-10-16 22:00:00 +02:00
edict_t* pfnPEntityOfEntIndex( int iEntIndex );
2010-04-09 22:00:00 +02:00
void pfnGetGameDir( char *szGetGameDir );
2010-10-31 22:00:00 +01:00
char *pfnCmd_Args( void );
char *pfnCmd_Argv( int argc );
2010-08-20 22:00:00 +02:00
void Con_DPrintf( char *fmt, ... );
void Con_Printf( char *szFmt, ... );
2009-12-05 22:00:00 +01:00
int pfnCmd_Argc( void );
2010-04-21 22:00:00 +02:00
int pfnIsInGame( void );
2009-09-22 22:00:00 +02:00
float pfnTime( void );
2009-01-02 22:00:00 +01:00
2008-06-09 22:00:00 +02:00
/*
==============================================================
2009-11-02 22:00:00 +01:00
MISC COMMON FUNCTIONS
2008-06-09 22:00:00 +02:00
==============================================================
*/
2010-10-28 22:00:00 +02:00
#define Z_Malloc( size ) Mem_Alloc( host.mempool, size )
2009-11-03 22:00:00 +01:00
#define Z_Realloc( ptr, size ) Mem_Realloc( host.mempool, ptr, size )
2009-11-02 22:00:00 +01:00
#define Z_Free( ptr ) if( ptr ) Mem_Free( ptr )
2008-07-30 22:00:00 +02:00
2009-11-02 22:00:00 +01:00
//
2009-11-03 22:00:00 +01:00
// keys.c
2009-11-02 22:00:00 +01:00
//
2010-10-26 22:00:00 +02:00
qboolean Key_IsDown( int keynum );
2010-01-08 22:00:00 +01:00
const char *Key_IsBind( int keynum );
2010-10-26 22:00:00 +02:00
void Key_Event( int key, qboolean down );
2009-11-03 22:00:00 +01:00
void Key_Init( void );
void Key_WriteBindings( file_t *f );
2010-07-18 22:00:00 +02:00
const char *Key_GetBinding( int keynum );
void Key_SetBinding( int keynum, const char *binding );
2009-11-03 22:00:00 +01:00
void Key_ClearStates( void );
2010-01-08 22:00:00 +01:00
const char *Key_KeynumToString( int keynum );
2010-01-02 22:00:00 +01:00
int Key_StringToKeynum( const char *str );
2009-11-03 22:00:00 +01:00
int Key_GetKey( const char *binding );
void Key_EnumCmds_f( void );
void Key_SetKeyDest( int key_dest );
2009-11-23 22:00:00 +01:00
//
2010-10-02 22:00:00 +02:00
// avikit.c
2010-09-30 22:00:00 +02:00
//
typedef struct movie_state_s movie_state_t;
long AVI_GetVideoFrameNumber( movie_state_t *Avi, float time );
2010-10-01 22:00:00 +02:00
byte *AVI_GetVideoFrame( movie_state_t *Avi, long frame );
2010-10-26 22:00:00 +02:00
qboolean AVI_GetVideoInfo( movie_state_t *Avi, long *xres, long *yres, float *duration );
qboolean AVI_GetAudioInfo( movie_state_t *Avi, wavdata_t *snd_info );
2010-09-30 22:00:00 +02:00
fs_offset_t AVI_GetAudioChunk( movie_state_t *Avi, char *audiodata, long offset, long length );
2010-10-26 22:00:00 +02:00
void AVI_OpenVideo( movie_state_t *Avi, const char *filename, qboolean load_audio, qboolean ignore_hwgamma, qboolean quiet );
2010-09-30 22:00:00 +02:00
void AVI_CloseVideo( movie_state_t *Avi );
2010-10-26 22:00:00 +02:00
qboolean AVI_IsActive( movie_state_t *Avi );
2010-09-30 22:00:00 +02:00
movie_state_t *AVI_GetState( int num );
2009-12-20 22:00:00 +01:00
// shared calls
2010-10-26 22:00:00 +02:00
qboolean CL_IsInGame( void );
qboolean CL_IsInMenu( void );
2010-11-15 22:00:00 +01:00
qboolean CL_IsThirdPerson( void );
2010-06-24 22:00:00 +02:00
float CL_GetServerTime( void );
2010-11-15 22:00:00 +01:00
float CL_GetLerpFrac( void );
2009-11-03 22:00:00 +01:00
void CL_CharEvent( int key );
int CL_PointContents( const vec3_t point );
2010-08-20 22:00:00 +02:00
char *COM_ParseFile( char *data, char *token );
2010-10-31 22:00:00 +01:00
byte *COM_LoadFile( const char *filename, int usehunk, int *pLength );
2010-10-26 22:00:00 +02:00
qboolean CL_GetEntitySpatialization( int entnum, vec3_t origin, vec3_t velocity );
2010-08-20 22:00:00 +02:00
void CL_StudioEvent( struct mstudioevent_s *event, struct cl_entity_s *ent );
2010-10-26 22:00:00 +02:00
qboolean CL_GetComment( const char *demoname, char *comment );
2010-11-03 22:00:00 +01:00
void COM_AddAppDirectoryToSearchPath( const char *pszBaseDir, const char *appName );
int COM_ExpandFilename( const char *fileName, char *nameOutBuffer, int nameOutBufferSize );
2010-08-12 22:00:00 +02:00
struct pmtrace_s *PM_TraceLine( float *start, float *end, int flags, int usehull, int ignore_pe );
2010-10-16 22:00:00 +02:00
void SV_StartSound( edict_t *ent, int chan, const char *sample, float vol, float attn, int flags, int pitch );
2010-12-02 22:00:00 +01:00
int R_CreateDecalList( decallist_t *pList, qboolean changelevel );
2010-08-07 22:00:00 +02:00
struct cl_entity_s *CL_GetEntityByIndex( int index );
struct cl_entity_s *CL_GetLocalPlayer( void );
struct player_info_s *CL_GetPlayerInfo( int playerIndex );
2010-10-09 22:00:00 +02:00
void CL_ExtraUpdate( void );
2009-11-03 22:00:00 +01:00
int CL_GetMaxClients( void );
2010-10-26 22:00:00 +02:00
qboolean CL_IsPlaybackDemo( void );
2010-11-15 22:00:00 +01:00
qboolean CL_LoadProgs( const char *name );
2010-10-26 22:00:00 +02:00
qboolean SV_GetComment( const char *savename, char *comment );
qboolean SV_NewGame( const char *mapName, qboolean loadGame );
2010-08-15 22:00:00 +02:00
void SV_SysError( const char *error_string );
2010-07-22 22:00:00 +02:00
void SV_InitGameProgs( void );
2010-03-27 22:00:00 +01:00
void SV_ForceError( void );
void CL_WriteMessageHistory( void );
2009-02-03 22:00:00 +01:00
void CL_MouseEvent( int mx, int my );
2010-06-20 22:00:00 +02:00
void CL_SendCmd( void );
2009-11-03 22:00:00 +01:00
void CL_Disconnect( void );
2010-10-26 22:00:00 +02:00
qboolean CL_NextDemo( void );
2008-06-09 22:00:00 +02:00
void CL_Drop( void );
2009-11-03 22:00:00 +01:00
void SCR_Init( void );
void SCR_UpdateScreen( void );
2010-12-09 22:00:00 +01:00
void SCR_BeginLoadingPlaque( void );
2010-10-09 22:00:00 +02:00
void SCR_CheckStartupVids( void );
2010-09-30 22:00:00 +02:00
long SCR_GetAudioChunk( char *rawdata, long length );
wavdata_t *SCR_GetMovieInfo( void );
2009-11-03 22:00:00 +01:00
void SCR_Shutdown( void );
void Con_Print( const char *txt );
2010-08-20 22:00:00 +02:00
void Con_NPrintf( int idx, char *fmt, ... );
void Con_NXPrintf( struct con_nprint_s *info, char *fmt, ... );
2009-11-10 22:00:00 +01:00
char *Info_ValueForKey( const char *s, const char *key );
2009-12-04 22:00:00 +01:00
void Info_RemovePrefixedKeys( char *start, char prefix );
2010-10-26 22:00:00 +02:00
qboolean Info_RemoveKey( char *s, const char *key );
qboolean Info_SetValueForKey( char *s, const char *key, const char *value );
qboolean Info_Validate( const char *s );
2009-11-23 22:00:00 +01:00
void Info_Print( const char *s );
2008-06-09 22:00:00 +02:00
char *Cvar_Userinfo( void );
char *Cvar_Serverinfo( void );
void Cmd_WriteVariables( file_t *f );
2010-10-26 22:00:00 +02:00
qboolean Cmd_CheckMapsList( qboolean fRefresh );
2010-02-02 22:00:00 +01:00
void Cmd_ForwardToServer( void );
2010-02-18 22:00:00 +01:00
void Cmd_AutoComplete( char *complete_string );
2008-06-09 22:00:00 +02:00
2008-08-03 22:00:00 +02:00
typedef struct autocomplete_list_s
{
const char *name;
2010-10-26 22:00:00 +02:00
qboolean (*func)( const char *s, char *name, int length );
2008-08-03 22:00:00 +02:00
} autocomplete_list_t;
2007-11-25 22:00:00 +01:00
2008-08-03 22:00:00 +02:00
extern autocomplete_list_t cmd_list[];
2007-06-21 22:00:00 +02:00
2010-11-20 22:00:00 +01:00
// soundlib shared exports
2010-12-21 22:00:00 +01:00
qboolean S_Init( void );
2010-11-20 22:00:00 +01:00
void S_Shutdown( void );
void S_Activate( qboolean active, void *hInst );
void S_StopSound( int entnum, int channel, const char *soundname );
int S_GetCurrentStaticSounds( soundlist_t *pout, int size, int entchannel );
void S_StopAllSounds( void );
2007-06-21 22:00:00 +02:00
#endif//COMMON_H