fix 3 issues that appear to happen with hipnotic.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4721 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
583d8aa46c
commit
727b8d40db
3 changed files with 68 additions and 5 deletions
|
@ -1730,7 +1730,9 @@ void CL_PlayDemo(char *demoname)
|
||||||
//work out if the first line is a int for the track number.
|
//work out if the first line is a int for the track number.
|
||||||
while ((VFS_READ(f, &chr, 1)==1) && (chr != '\n'))
|
while ((VFS_READ(f, &chr, 1)==1) && (chr != '\n'))
|
||||||
{
|
{
|
||||||
if (chr == '-')
|
if (chr == ' ')
|
||||||
|
;
|
||||||
|
else if (chr == '-')
|
||||||
neg = true;
|
neg = true;
|
||||||
else if (chr < '0' || chr > '9')
|
else if (chr < '0' || chr > '9')
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -3419,7 +3419,7 @@ void CLNQ_ParseClientdata (void)
|
||||||
// cl.mvelocity[0][i] = 0;
|
// cl.mvelocity[0][i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bits & SU_ITEMS)
|
if ((bits & SU_ITEMS) || cls.protocol_nq == CPNQ_ID) //hipnotic bug - hipnotic demos don't always have SU_ITEMS set, yet they update STAT_ITEMS anyway.
|
||||||
CL_SetStatInt(0, STAT_ITEMS, MSG_ReadLong());
|
CL_SetStatInt(0, STAT_ITEMS, MSG_ReadLong());
|
||||||
|
|
||||||
// cl.onground = (bits & SU_ONGROUND) != 0;
|
// cl.onground = (bits & SU_ONGROUND) != 0;
|
||||||
|
|
|
@ -922,6 +922,7 @@ void NPP_NQWriteByte(int dest, qbyte data) //replacement write func (nq to qw)
|
||||||
|
|
||||||
if (!bufferlen) //new message section
|
if (!bufferlen) //new message section
|
||||||
{
|
{
|
||||||
|
majortype = data;
|
||||||
switch(data)
|
switch(data)
|
||||||
{
|
{
|
||||||
case svcdp_showlmp:
|
case svcdp_showlmp:
|
||||||
|
@ -997,16 +998,74 @@ void NPP_NQWriteByte(int dest, qbyte data) //replacement write func (nq to qw)
|
||||||
protocollen = sizeof(buffer);
|
protocollen = sizeof(buffer);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if (data & 128)
|
||||||
|
{
|
||||||
|
majortype = 128; //nq 'fast update'
|
||||||
|
ignoreprotocol = true;
|
||||||
|
//this handling is explicitly for hipnotic.
|
||||||
|
//hipnotic sends a camera entity this way so that svc_setview knows where to position itself.
|
||||||
|
//we emulate this with quakeworld protocols, so we don't necessarily need to support it other than to strip it.
|
||||||
|
//we're probably screwed if we're acting as an nq server, but few people will use that.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Con_DPrintf("NQWriteByte: bad protocol %i\n", (int)data);
|
Con_DPrintf("NQWriteByte: bad protocol %i\n", (int)data);
|
||||||
protocollen = sizeof(buffer);
|
protocollen = sizeof(buffer);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
majortype = data;
|
|
||||||
}
|
}
|
||||||
if (bufferlen == 1 && !protocollen) //some of them depend on the following bytes for size.
|
if (bufferlen == 1 && !protocollen) //some of them depend on the following bytes for size.
|
||||||
{
|
{
|
||||||
switch(majortype)
|
switch(majortype)
|
||||||
{
|
{
|
||||||
|
case 128:
|
||||||
|
{
|
||||||
|
unsigned int bits = buffer[0];
|
||||||
|
protocollen = 1;
|
||||||
|
if (bits & NQU_MOREBITS)
|
||||||
|
{
|
||||||
|
bits |= data<<8;
|
||||||
|
protocollen+=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bits != (NQU_SIGNAL|NQU_MOREBITS|NQU_ORIGIN1|NQU_ORIGIN2|NQU_ORIGIN3|NQU_LONGENTITY))
|
||||||
|
{ //this mask is what hipnotic uses. warn if anyone else tries it.
|
||||||
|
Con_Printf("fast update will be stripped\n");
|
||||||
|
PR_StackTrace(svprogfuncs, false);
|
||||||
|
}
|
||||||
|
if (bits & NQU_ORIGIN1)
|
||||||
|
protocollen+=2;
|
||||||
|
if (bits & NQU_ORIGIN2)
|
||||||
|
protocollen+=2;
|
||||||
|
if (bits & NQU_ORIGIN3)
|
||||||
|
protocollen+=2;
|
||||||
|
if (bits & NQU_ANGLE2)
|
||||||
|
protocollen+=1;
|
||||||
|
//nolerp no data
|
||||||
|
if (bits & NQU_FRAME)
|
||||||
|
protocollen+=1;
|
||||||
|
|
||||||
|
if (bits & NQU_ANGLE1)
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & NQU_ANGLE3)
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & NQU_MODEL)
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & NQU_COLORMAP)
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & NQU_SKIN)
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & NQU_EFFECTS)
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & NQU_LONGENTITY)
|
||||||
|
protocollen+=2;
|
||||||
|
else
|
||||||
|
protocollen+=1;
|
||||||
|
if (bits & DPU_EXTEND1)
|
||||||
|
Con_DPrintf("NQWriteByte: fast update with extension bits is not supported\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
case svc_sound:
|
case svc_sound:
|
||||||
protocollen = 5+destprim->coordsize*3;
|
protocollen = 5+destprim->coordsize*3;
|
||||||
if (data & NQSND_VOLUME)
|
if (data & NQSND_VOLUME)
|
||||||
|
@ -1174,6 +1233,7 @@ void NPP_NQWriteByte(int dest, qbyte data) //replacement write func (nq to qw)
|
||||||
case svcdp_hidelmp:
|
case svcdp_hidelmp:
|
||||||
case svc_stufftext:
|
case svc_stufftext:
|
||||||
case svc_centerprint:
|
case svc_centerprint:
|
||||||
|
case svc_cutscene:
|
||||||
if (!data)
|
if (!data)
|
||||||
protocollen = bufferlen;
|
protocollen = bufferlen;
|
||||||
break;
|
break;
|
||||||
|
@ -1383,6 +1443,7 @@ void NPP_NQWriteString(int dest, const char *data) //replacement write func (nq
|
||||||
case svc_updatename:
|
case svc_updatename:
|
||||||
case svc_stufftext:
|
case svc_stufftext:
|
||||||
case svc_centerprint:
|
case svc_centerprint:
|
||||||
|
case svc_cutscene:
|
||||||
protocollen = bufferlen;
|
protocollen = bufferlen;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue