void QW_CL_StartUpload(unsigned char *data, int size);
//static qboolean QW_CL_IsUploading(void);
static void QW_CL_StopUpload(void);
-void CL_VM_UpdateIntermissionState(int intermission);
-qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos);
+extern void CL_VM_UpdateIntermissionState(int intermission);
+extern qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos, int flags, float speed);
/*
==================
int volume;
int field_mask;
float attenuation;
+ float speed;
+ int fflags = CHANNELFLAG_NONE;
if (cls.protocol == PROTOCOL_QUAKEWORLD)
{
attenuation = MSG_ReadByte () / 64.0;
else
attenuation = DEFAULT_SOUND_PACKET_ATTENUATION;
+
+ speed = 1.0f;
ent = (channel>>3)&1023;
channel &= 7;
else
attenuation = DEFAULT_SOUND_PACKET_ATTENUATION;
+ if (field_mask & SND_SPEEDUSHORT4000)
+ speed = ((unsigned short)MSG_ReadShort ()) / 4000.0f;
+ else
+ speed = 1.0f;
+
if (field_mask & SND_LARGEENTITY)
{
ent = (unsigned short) MSG_ReadShort ();
- channel = MSG_ReadByte ();
+ channel = MSG_ReadChar ();
}
else
{
sound_num = MSG_ReadByte ();
}
+ channel = CHAN_NET2ENGINE(channel);
+
MSG_ReadVector(pos, cls.protocol);
if (sound_num >= MAX_SOUNDS)
if (ent >= cl.max_entities)
CL_ExpandEntities(ent);
- if( !CL_VM_Event_Sound(sound_num, volume / 255.0f, channel, attenuation, ent, pos) )
- S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0f, attenuation);
+ if( !CL_VM_Event_Sound(sound_num, volume / 255.0f, channel, attenuation, ent, pos, fflags, speed) )
+ S_StartSound_StartPosition_Flags (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0f, attenuation, 0, fflags, speed);
}
/*
static unsigned char olddata[NET_MAXMESSAGE];
void CL_KeepaliveMessage (qboolean readmessages)
{
+ static qboolean recursive = false;
float time;
static double nextmsg = -1;
static double nextupdate = -1;
qboolean oldbadread;
sizebuf_t old;
- if(cls.state != ca_dedicated)
+ qboolean thisrecursive;
+
+ thisrecursive = recursive;
+ recursive = true;
+
+ if(!thisrecursive)
{
- if((time = Sys_DoubleTime()) >= nextupdate)
+ if(cls.state != ca_dedicated)
{
- SCR_UpdateLoadingScreenIfShown();
- nextupdate = time + 2;
+ if((time = Sys_DoubleTime()) >= nextupdate)
+ {
+ SCR_UpdateLoadingScreenIfShown();
+ nextupdate = time + 2;
+ }
}
}
// no need if server is local and definitely not if this is a demo
if (!cls.netcon || cls.protocol == PROTOCOL_QUAKEWORLD || cls.signon >= SIGNONS)
+ {
+ recursive = thisrecursive;
return;
+ }
if (readmessages)
{
MSG_WriteChar(&msg, clc_nop);
NetConn_SendUnreliableMessage(cls.netcon, &msg, cls.protocol, 10000, false);
}
+
+ recursive = thisrecursive;
}
void CL_ParseEntityLump(char *entdata)
Mod_FreeQ3Shaders();
}
- cl.model_precache[cl.downloadmodel_current] = Mod_ForName(cl.model_name[cl.downloadmodel_current], false, false, cl.model_name[cl.downloadmodel_current][0] == '*' ? cl.model_name[1] : NULL);
+ cl.model_precache[cl.downloadmodel_current] = Mod_ForName(cl.model_name[cl.downloadmodel_current], false, true, cl.model_name[cl.downloadmodel_current][0] == '*' ? cl.model_name[1] : NULL);
if (cl.downloadmodel_current == 1)
{
// we now have the worldmodel so we can set up the game world
}
extern cvar_t slowmo;
+extern cvar_t cl_lerpexcess;
extern void CSQC_UpdateNetworkTimes(double newtime, double oldtime);
static void CL_NetworkTimeReceived(double newtime)
{
if (cl.mtime[0] > cl.mtime[1])
World_Physics_Frame(&cl.world, cl.mtime[0] - cl.mtime[1], cl.movevars_gravity);
+
+ // only lerp entities that also get an update in this frame, when lerp excess is used
+ if(cl_lerpexcess.value > 0)
+ {
+ int i;
+ for (i = 1;i < cl.num_entities;i++)
+ {
+ if (cl.entities_active[i])
+ {
+ entity_t *ent = cl.entities + i;
+ ent->persistent.lerpdeltatime = 0;
+ }
+ }
+ }
}
#define SHOWNET(x) if(cl_shownet.integer==2)Con_Printf("%3i:%s(%i)\n", msg_readcount-1, x, cmd);
break;
case qw_svc_sellscreen:
- Cmd_ExecuteString ("help", src_command);
+ Cmd_ExecuteString ("help", src_command, true);
break;
case qw_svc_smallkick:
break;
case svc_sellscreen:
- Cmd_ExecuteString ("help", src_command);
+ Cmd_ExecuteString ("help", src_command, true);
break;
case svc_hidelmp:
if (gamemode == GAME_TENEBRAE)