summaryrefslogtreecommitdiff
path: root/src/client/cl_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/cl_main.c')
-rw-r--r--src/client/cl_main.c161
1 files changed, 110 insertions, 51 deletions
diff --git a/src/client/cl_main.c b/src/client/cl_main.c
index c7ae2614..5166804f 100644
--- a/src/client/cl_main.c
+++ b/src/client/cl_main.c
@@ -84,6 +84,15 @@ cvar_t *m_forward;
cvar_t *m_side;
cvar_t *m_filter;
+cvar_t *j_pitch;
+cvar_t *j_yaw;
+cvar_t *j_forward;
+cvar_t *j_side;
+cvar_t *j_pitch_axis;
+cvar_t *j_yaw_axis;
+cvar_t *j_forward_axis;
+cvar_t *j_side_axis;
+
cvar_t *cl_activeAction;
cvar_t *cl_motdString;
@@ -102,6 +111,8 @@ cvar_t *cl_guidServerUniq;
cvar_t *cl_consoleKeys;
+cvar_t *cl_gamename;
+
clientActive_t cl;
clientConnection_t clc;
clientStatic_t cls;
@@ -129,6 +140,7 @@ int serverStatusCount;
void hA3Dg_ExportRenderGeom (refexport_t *incoming_re);
#endif
+extern void GLimp_Minimize(void);
extern void SV_BotFrame( int time );
void CL_CheckForResend( void );
void CL_ShowIP_f(void);
@@ -676,14 +688,14 @@ void CL_Record_f( void ) {
if ( Cmd_Argc() == 2 ) {
s = Cmd_Argv(1);
Q_strncpyz( demoName, s, sizeof( demoName ) );
- Com_sprintf (name, sizeof(name), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION );
+ Com_sprintf (name, sizeof(name), "demos/%s.%s%d", demoName, DEMOEXT, PROTOCOL_VERSION );
} else {
int number;
// scan for a free demo name
for ( number = 0 ; number <= 9999 ; number++ ) {
CL_DemoFilename( number, demoName );
- Com_sprintf (name, sizeof(name), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION );
+ Com_sprintf (name, sizeof(name), "demos/%s.%s%d", demoName, DEMOEXT, PROTOCOL_VERSION );
if (!FS_FileExists(name))
break; // file doesn't exist
@@ -933,9 +945,22 @@ static void CL_WalkDemoExt(char *arg, char *name, int *demofile)
{
int i = 0;
*demofile = 0;
+
+ Com_sprintf (name, MAX_OSPATH, "demos/%s.%s%d", arg, DEMOEXT, PROTOCOL_VERSION);
+
+ FS_FOpenFileRead( name, demofile, qtrue );
+
+ if (*demofile)
+ {
+ Com_Printf("Demo file: %s\n", name);
+ return;
+ }
+
+ Com_Printf("Not found: %s\n", name);
+
while(demo_protocols[i])
{
- Com_sprintf (name, MAX_OSPATH, "demos/%s.dm_%d", arg, demo_protocols[i]);
+ Com_sprintf (name, MAX_OSPATH, "demos/%s.%s%d", arg, DEMOEXT, demo_protocols[i]);
FS_FOpenFileRead( name, demofile, qtrue );
if (*demofile)
{
@@ -959,8 +984,8 @@ static void CL_CompleteDemoName( char *args, int argNum )
{
char demoExt[ 16 ];
- Com_sprintf( demoExt, sizeof( demoExt ), ".dm_%d", PROTOCOL_VERSION );
- Field_CompleteFilename( "demos", demoExt, qtrue );
+ Com_sprintf(demoExt, sizeof(demoExt), ".%s%d", DEMOEXT, PROTOCOL_VERSION);
+ Field_CompleteFilename( "demos", demoExt, qtrue, qtrue );
}
}
@@ -992,34 +1017,41 @@ void CL_PlayDemo_f( void ) {
CL_Disconnect( qtrue );
- // check for an extension .dm_?? (?? is protocol)
- ext_test = arg + strlen(arg) - 6;
- if ((strlen(arg) > 6) && (ext_test[0] == '.') &&
- ((ext_test[1] == 'd') || (ext_test[1] == 'D')) &&
- ((ext_test[2] == 'm') || (ext_test[2] == 'M')) &&
- (ext_test[3] == '_'))
+ // check for an extension .DEMOEXT_?? (?? is protocol)
+ ext_test = Q_strrchr(arg, '.');
+
+ if(ext_test && !Q_stricmpn(ext_test + 1, DEMOEXT, ARRAY_LEN(DEMOEXT) - 1))
{
- protocol = atoi(ext_test+4);
- i=0;
- while(demo_protocols[i])
+ protocol = atoi(ext_test + ARRAY_LEN(DEMOEXT));
+
+ for(i = 0; demo_protocols[i]; i++)
{
- if (demo_protocols[i] == protocol)
+ if(demo_protocols[i] == protocol)
break;
- i++;
}
- if (demo_protocols[i])
+
+ if(demo_protocols[i] || protocol == PROTOCOL_VERSION)
{
- Com_sprintf (name, sizeof(name), "demos/%s", arg);
- FS_FOpenFileRead( name, &clc.demofile, qtrue );
- } else {
+ Com_sprintf(name, sizeof(name), "demos/%s", arg);
+ FS_FOpenFileRead(name, &clc.demofile, qtrue);
+ }
+ else
+ {
+ int len;
+
Com_Printf("Protocol %d not supported for demos\n", protocol);
- Q_strncpyz(retry, arg, sizeof(retry));
- retry[strlen(retry)-6] = 0;
- CL_WalkDemoExt( retry, name, &clc.demofile );
+ len = ext_test - arg;
+
+ if(len >= ARRAY_LEN(retry))
+ len = ARRAY_LEN(retry) - 1;
+
+ Q_strncpyz(retry, arg, len + 1);
+ retry[len] = '\0';
+ CL_WalkDemoExt(retry, name, &clc.demofile);
}
- } else {
- CL_WalkDemoExt( arg, name, &clc.demofile );
}
+ else
+ CL_WalkDemoExt(arg, name, &clc.demofile);
if (!clc.demofile) {
Com_Error( ERR_DROP, "couldn't open %s", name);
@@ -2421,7 +2453,7 @@ CL_ServersResponsePacket
===================
*/
void CL_ServersResponsePacket( const netadr_t* from, msg_t *msg, qboolean extended ) {
- int i, count, total;
+ int i, j, count, total;
netadr_t addresses[MAX_SERVERSPERPACKET];
int numservers;
byte* buffptr;
@@ -2538,6 +2570,18 @@ void CL_ServersResponsePacket( const netadr_t* from, msg_t *msg, qboolean extend
// build net address
serverInfo_t *server = &cls.globalServers[count];
+ // Tequila: It's possible to have sent many master server requests. Then
+ // we may receive many times the same addresses from the master server.
+ // We just avoid to add a server if it is still in the global servers list.
+ for (j = 0; j < count; j++)
+ {
+ if (NET_CompareAdr(cls.globalServers[j].adr, addresses[i]))
+ break;
+ }
+
+ if (j < count)
+ continue;
+
CL_InitServerInfo( server, &addresses[i] );
Q_strncpyz( server->label, label, sizeof( server->label ) );
// advance to next slot
@@ -3363,6 +3407,7 @@ void CL_Init( void ) {
// offset for the power function (for style 1, ignored otherwise)
// this should be set to the max rate value
cl_mouseAccelOffset = Cvar_Get( "cl_mouseAccelOffset", "5", CVAR_ARCHIVE );
+ Cvar_CheckRange(cl_mouseAccelOffset, 0.001f, 50000.0f, qfalse);
cl_showMouseRate = Cvar_Get ("cl_showmouserate", "0", 0);
@@ -3394,6 +3439,15 @@ void CL_Init( void ) {
m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE);
#endif
+ j_pitch = Cvar_Get ("j_pitch", "0.022", CVAR_ARCHIVE);
+ j_yaw = Cvar_Get ("j_yaw", "-0.022", CVAR_ARCHIVE);
+ j_forward = Cvar_Get ("j_forward", "-0.25", CVAR_ARCHIVE);
+ j_side = Cvar_Get ("j_side", "0.25", CVAR_ARCHIVE);
+ j_pitch_axis = Cvar_Get ("j_pitch_axis", "3", CVAR_ARCHIVE);
+ j_yaw_axis = Cvar_Get ("j_yaw_axis", "4", CVAR_ARCHIVE);
+ j_forward_axis = Cvar_Get ("j_forward_axis", "1", CVAR_ARCHIVE);
+ j_side_axis = Cvar_Get ("j_side_axis", "0", CVAR_ARCHIVE);
+
cl_motdString = Cvar_Get( "cl_motdString", "", CVAR_ROM );
Cvar_Get( "cl_maxPing", "800", CVAR_ARCHIVE );
@@ -3405,6 +3459,8 @@ void CL_Init( void ) {
// ~ and `, as keys and characters
cl_consoleKeys = Cvar_Get( "cl_consoleKeys", "~ ` 0x7e 0x60", CVAR_ARCHIVE);
+ cl_gamename = Cvar_Get("cl_gamename", GAMENAME_FOR_MASTER, CVAR_TEMP);
+
// userinfo
Cvar_Get ("name", Sys_GetCurrentUser( ), CVAR_USERINFO | CVAR_ARCHIVE );
Cvar_Get ("rate", "25000", CVAR_USERINFO | CVAR_ARCHIVE );
@@ -3481,6 +3537,7 @@ void CL_Init( void ) {
Cmd_AddCommand ("model", CL_SetModel_f );
Cmd_AddCommand ("video", CL_Video_f );
Cmd_AddCommand ("stopvideo", CL_StopVideo_f );
+ Cmd_AddCommand("minimize", GLimp_Minimize);
CL_InitRef();
SCR_Init ();
@@ -3944,9 +4001,9 @@ void CL_GlobalServers_f( void ) {
int count, i, masterNum;
char command[1024], *masteraddress;
- if ((count = Cmd_Argc()) < 3 || (masterNum = atoi(Cmd_Argv(1))) < 0 || masterNum > 4)
+ if ((count = Cmd_Argc()) < 3 || (masterNum = atoi(Cmd_Argv(1))) < 0 || masterNum > MAX_MASTER_SERVERS - 1)
{
- Com_Printf( "usage: globalservers <master# 0-4> <protocol> [keywords]\n");
+ Com_Printf("usage: globalservers <master# 0-%d> <protocol> [keywords]\n", MAX_MASTER_SERVERS - 1);
return;
}
@@ -3977,10 +4034,27 @@ void CL_GlobalServers_f( void ) {
cls.numglobalservers = -1;
cls.pingUpdateSource = AS_GLOBAL;
- // TODO: test if we only have an IPv6 connection. If it's the case,
- // request IPv6 servers only by appending " ipv6" to the command
- Com_sprintf( command, sizeof(command), "getserversExt "
- GAMENAME_FOR_MASTER " %s", Cmd_Argv(2) );
+ // Use the extended query for IPv6 masters
+ if (to.type == NA_IP6 || to.type == NA_MULTICAST6)
+ {
+ int v4enabled = Cvar_VariableIntegerValue("net_enabled") & NET_ENABLEV4;
+
+ if(v4enabled)
+ {
+ Com_sprintf(command, sizeof(command), "getserversExt %s %s ipv6",
+ cl_gamename->string, Cmd_Argv(2));
+ }
+ else
+ {
+ Com_sprintf(command, sizeof(command), "getserversExt %s %s",
+ cl_gamename->string, Cmd_Argv(2));
+ }
+
+ // TODO: test if we only have an IPv6 connection. If it's the case,
+ // request IPv6 servers only by appending " ipv6" to the command
+ }
+ else
+ Com_sprintf(command, sizeof(command), "getservers %s", Cmd_Argv(2));
for (i=3; i < count; i++)
{
@@ -4004,9 +4078,9 @@ void CL_GetPing( int n, char *buf, int buflen, int *pingtime )
int time;
int maxPing;
- if (!cl_pinglist[n].adr.port)
+ if (n < 0 || n >= MAX_PINGREQUESTS || !cl_pinglist[n].adr.port)
{
- // empty slot
+ // empty or invalid slot
buf[0] = '\0';
*pingtime = 0;
return;
@@ -4038,29 +4112,14 @@ void CL_GetPing( int n, char *buf, int buflen, int *pingtime )
/*
==================
-CL_UpdateServerInfo
-==================
-*/
-void CL_UpdateServerInfo( int n )
-{
- if (!cl_pinglist[n].adr.port)
- {
- return;
- }
-
- CL_SetServerInfoByAddress(cl_pinglist[n].adr, cl_pinglist[n].info, cl_pinglist[n].time );
-}
-
-/*
-==================
CL_GetPingInfo
==================
*/
void CL_GetPingInfo( int n, char *buf, int buflen )
{
- if (!cl_pinglist[n].adr.port)
+ if (n < 0 || n >= MAX_PINGREQUESTS || !cl_pinglist[n].adr.port)
{
- // empty slot
+ // empty or invalid slot
if (buflen)
buf[0] = '\0';
return;