mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-05-31 16:51:08 +00:00
bit of a tidy up to make following things a bit easier
This commit is contained in:
parent
bd58f350dd
commit
bd358618da
2 changed files with 226 additions and 235 deletions
|
@ -127,6 +127,5 @@ void SV_Stop (int reason);
|
||||||
void DemoSetMsgBuf (demobuf_t *prev, demobuf_t *cur);
|
void DemoSetMsgBuf (demobuf_t *prev, demobuf_t *cur);
|
||||||
void Demo_Init (void);
|
void Demo_Init (void);
|
||||||
void SV_DemoPings (void);
|
void SV_DemoPings (void);
|
||||||
void SV_WriteDemoMessage (sizebuf_t *msg, int type, int to, float time);
|
|
||||||
|
|
||||||
#endif//__sv_demo_h
|
#endif//__sv_demo_h
|
||||||
|
|
|
@ -85,215 +85,12 @@ static int header = (int) &((header_t *) 0)->data;
|
||||||
|
|
||||||
entity_state_t demo_entities[UPDATE_MASK + 1][MAX_DEMO_PACKET_ENTITIES];
|
entity_state_t demo_entities[UPDATE_MASK + 1][MAX_DEMO_PACKET_ENTITIES];
|
||||||
|
|
||||||
void
|
|
||||||
SV_DemoPings (void)
|
|
||||||
{
|
|
||||||
client_t *client;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
for (j = 0, client = svs.clients; j < MAX_CLIENTS; j++, client++) {
|
|
||||||
if (client->state != cs_spawned)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
DemoWrite_Begin (dem_all, 0, 7);
|
|
||||||
MSG_WriteByte ((sizebuf_t *) demo.dbuf, svc_updateping);
|
|
||||||
MSG_WriteByte ((sizebuf_t *) demo.dbuf, j);
|
|
||||||
MSG_WriteShort ((sizebuf_t *) demo.dbuf, SV_CalcPing (client));
|
|
||||||
MSG_WriteByte ((sizebuf_t *) demo.dbuf, svc_updatepl);
|
|
||||||
MSG_WriteByte ((sizebuf_t *) demo.dbuf, j);
|
|
||||||
MSG_WriteByte ((sizebuf_t *) demo.dbuf, client->lossage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
DemoBuffer_Init (dbuffer_t *dbuffer, byte *buf, size_t size)
|
|
||||||
{
|
|
||||||
demobuffer = dbuffer;
|
|
||||||
|
|
||||||
demobuffer->data = buf;
|
|
||||||
demobuffer->maxsize = size;
|
|
||||||
demobuffer->start = 0;
|
|
||||||
demobuffer->end = 0;
|
|
||||||
demobuffer->last = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Demo_SetMsgBuf
|
|
||||||
|
|
||||||
Sets the frame message buffer
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
DemoSetMsgBuf (demobuf_t *prev, demobuf_t *cur)
|
|
||||||
{
|
|
||||||
// fix the maxsize of previous msg buffer,
|
|
||||||
// we won't be able to write there anymore
|
|
||||||
if (prev != NULL)
|
|
||||||
prev->sz.maxsize = prev->bufsize;
|
|
||||||
|
|
||||||
demo.dbuf = cur;
|
|
||||||
memset (demo.dbuf, 0, sizeof (*demo.dbuf));
|
|
||||||
|
|
||||||
demo.dbuf->sz.data = demobuffer->data + demobuffer->end;
|
|
||||||
demo.dbuf->sz.maxsize = MAXSIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
DemoWriteToDisk
|
|
||||||
|
|
||||||
Writes to disk a message meant for specifc client
|
|
||||||
or all messages if type == 0
|
|
||||||
Message is cleared from demobuf after that
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
|
||||||
SV_DemoWriteToDisk (int type, int to, float time)
|
|
||||||
{
|
|
||||||
int pos = 0, oldm, oldd;
|
|
||||||
header_t *p;
|
|
||||||
int size;
|
|
||||||
sizebuf_t msg;
|
|
||||||
|
|
||||||
(byte *) p = demo.dbuf->sz.data;
|
|
||||||
demo.dbuf->h = NULL;
|
|
||||||
|
|
||||||
oldm = demo.dbuf->bufsize;
|
|
||||||
oldd = demobuffer->start;
|
|
||||||
while (pos < demo.dbuf->bufsize) {
|
|
||||||
size = p->size;
|
|
||||||
pos += header + size;
|
|
||||||
|
|
||||||
// no type means we are writing to disk everything
|
|
||||||
if (!type || (p->type == type && p->to == to)) {
|
|
||||||
if (size) {
|
|
||||||
msg.data = p->data;
|
|
||||||
msg.cursize = size;
|
|
||||||
|
|
||||||
SV_WriteDemoMessage (&msg, p->type, p->to, time);
|
|
||||||
}
|
|
||||||
// data is written so it need to be cleard from demobuf
|
|
||||||
if (demo.dbuf->sz.data != (byte *) p)
|
|
||||||
memmove (demo.dbuf->sz.data + size + header,
|
|
||||||
demo.dbuf->sz.data, (byte *) p - demo.dbuf->sz.data);
|
|
||||||
|
|
||||||
demo.dbuf->bufsize -= size + header;
|
|
||||||
demo.dbuf->sz.data += size + header;
|
|
||||||
pos -= size + header;
|
|
||||||
demo.dbuf->sz.maxsize -= size + header;
|
|
||||||
demobuffer->start += size + header;
|
|
||||||
}
|
|
||||||
// move along
|
|
||||||
(byte *) p = p->data + size;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demobuffer->start == demobuffer->last) {
|
|
||||||
if (demobuffer->start == demobuffer->end) {
|
|
||||||
demobuffer->end = 0; // demobuffer is empty
|
|
||||||
demo.dbuf->sz.data = demobuffer->data;
|
|
||||||
}
|
|
||||||
// go back to begining of the buffer
|
|
||||||
demobuffer->last = demobuffer->end;
|
|
||||||
demobuffer->start = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
DemoSetBuf
|
|
||||||
|
|
||||||
Sets position in the buf for writing to specific client
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
|
||||||
DemoSetBuf (byte type, int to)
|
|
||||||
{
|
|
||||||
header_t *p;
|
|
||||||
int pos = 0;
|
|
||||||
|
|
||||||
(byte *) p = demo.dbuf->sz.data;
|
|
||||||
|
|
||||||
while (pos < demo.dbuf->bufsize) {
|
|
||||||
pos += header + p->size;
|
|
||||||
|
|
||||||
if (type == p->type && to == p->to && !p->full) {
|
|
||||||
demo.dbuf->sz.cursize = pos;
|
|
||||||
demo.dbuf->h = p;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
(byte *) p = p->data + p->size;
|
|
||||||
}
|
|
||||||
// type && to not exist in the buf, so add it
|
|
||||||
|
|
||||||
p->type = type;
|
|
||||||
p->to = to;
|
|
||||||
p->size = 0;
|
|
||||||
p->full = 0;
|
|
||||||
|
|
||||||
demo.dbuf->bufsize += header;
|
|
||||||
demo.dbuf->sz.cursize = demo.dbuf->bufsize;
|
|
||||||
demobuffer->end += header;
|
|
||||||
demo.dbuf->h = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
DemoMoveBuf (void)
|
|
||||||
{
|
|
||||||
// set the last message mark to the previous frame (i/e begining of this
|
|
||||||
// one)
|
|
||||||
demobuffer->last = demobuffer->end - demo.dbuf->bufsize;
|
|
||||||
|
|
||||||
// move buffer to the begining of demo buffer
|
|
||||||
memmove (demobuffer->data, demo.dbuf->sz.data, demo.dbuf->bufsize);
|
|
||||||
demo.dbuf->sz.data = demobuffer->data;
|
|
||||||
demobuffer->end = demo.dbuf->bufsize;
|
|
||||||
demo.dbuf->h = NULL; // it will be setup again
|
|
||||||
demo.dbuf->sz.maxsize = MAXSIZE + demo.dbuf->bufsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
DemoWrite_Begin (byte type, int to, int size)
|
|
||||||
{
|
|
||||||
byte *p;
|
|
||||||
qboolean move = false;
|
|
||||||
|
|
||||||
// will it fit?
|
|
||||||
while (demo.dbuf->bufsize + size + header > demo.dbuf->sz.maxsize) {
|
|
||||||
// if we reached the end of buffer move msgbuf to the begining
|
|
||||||
if (!move && demobuffer->end > demobuffer->start)
|
|
||||||
move = true;
|
|
||||||
|
|
||||||
SV_DemoWritePackets (1);
|
|
||||||
if (move && demobuffer->start > demo.dbuf->bufsize + header + size)
|
|
||||||
DemoMoveBuf ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demo.dbuf->h == NULL || demo.dbuf->h->type != type
|
|
||||||
|| demo.dbuf->h->to != to || demo.dbuf->h->full) {
|
|
||||||
DemoSetBuf (type, to);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demo.dbuf->h->size + size > MAX_MSGLEN) {
|
|
||||||
demo.dbuf->h->full = 1;
|
|
||||||
DemoSetBuf (type, to);
|
|
||||||
}
|
|
||||||
// we have to make room for new data
|
|
||||||
if (demo.dbuf->sz.cursize != demo.dbuf->bufsize) {
|
|
||||||
p = demo.dbuf->sz.data + demo.dbuf->sz.cursize;
|
|
||||||
memmove (p + size, p, demo.dbuf->bufsize - demo.dbuf->sz.cursize);
|
|
||||||
}
|
|
||||||
|
|
||||||
demo.dbuf->bufsize += size;
|
|
||||||
demo.dbuf->h->size += size;
|
|
||||||
if ((demobuffer->end += size) > demobuffer->last)
|
|
||||||
demobuffer->last = demobuffer->end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SV_WriteDemoMessage
|
SV_WriteDemoMessage
|
||||||
|
|
||||||
Dumps the current net message, prefixed by the length and view angles
|
Dumps the current net message, prefixed by the length and view angles
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
SV_WriteDemoMessage (sizebuf_t *msg, int type, int to, float time)
|
SV_WriteDemoMessage (sizebuf_t *msg, int type, int to, float time)
|
||||||
{
|
{
|
||||||
int len, i, msec;
|
int len, i, msec;
|
||||||
|
@ -359,6 +156,64 @@ SV_WriteDemoMessage (sizebuf_t *msg, int type, int to, float time)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
DemoWriteToDisk
|
||||||
|
|
||||||
|
Writes to disk a message meant for specifc client
|
||||||
|
or all messages if type == 0
|
||||||
|
Message is cleared from demobuf after that
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
SV_DemoWriteToDisk (int type, int to, float time)
|
||||||
|
{
|
||||||
|
int pos = 0, oldm, oldd;
|
||||||
|
header_t *p;
|
||||||
|
int size;
|
||||||
|
sizebuf_t msg;
|
||||||
|
|
||||||
|
(byte *) p = demo.dbuf->sz.data;
|
||||||
|
demo.dbuf->h = NULL;
|
||||||
|
|
||||||
|
oldm = demo.dbuf->bufsize;
|
||||||
|
oldd = demobuffer->start;
|
||||||
|
while (pos < demo.dbuf->bufsize) {
|
||||||
|
size = p->size;
|
||||||
|
pos += header + size;
|
||||||
|
|
||||||
|
// no type means we are writing to disk everything
|
||||||
|
if (!type || (p->type == type && p->to == to)) {
|
||||||
|
if (size) {
|
||||||
|
msg.data = p->data;
|
||||||
|
msg.cursize = size;
|
||||||
|
|
||||||
|
SV_WriteDemoMessage (&msg, p->type, p->to, time);
|
||||||
|
}
|
||||||
|
// data is written so it need to be cleard from demobuf
|
||||||
|
if (demo.dbuf->sz.data != (byte *) p)
|
||||||
|
memmove (demo.dbuf->sz.data + size + header,
|
||||||
|
demo.dbuf->sz.data, (byte *) p - demo.dbuf->sz.data);
|
||||||
|
|
||||||
|
demo.dbuf->bufsize -= size + header;
|
||||||
|
demo.dbuf->sz.data += size + header;
|
||||||
|
pos -= size + header;
|
||||||
|
demo.dbuf->sz.maxsize -= size + header;
|
||||||
|
demobuffer->start += size + header;
|
||||||
|
}
|
||||||
|
// move along
|
||||||
|
(byte *) p = p->data + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (demobuffer->start == demobuffer->last) {
|
||||||
|
if (demobuffer->start == demobuffer->end) {
|
||||||
|
demobuffer->end = 0; // demobuffer is empty
|
||||||
|
demo.dbuf->sz.data = demobuffer->data;
|
||||||
|
}
|
||||||
|
// go back to begining of the buffer
|
||||||
|
demobuffer->last = demobuffer->end;
|
||||||
|
demobuffer->start = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SV_DemoWritePackets
|
SV_DemoWritePackets
|
||||||
|
@ -551,22 +406,95 @@ memwrite (QFile *_mem, const void *buffer, int size)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qboolean
|
/*
|
||||||
SV_InitRecord (void)
|
DemoSetBuf
|
||||||
|
|
||||||
|
Sets position in the buf for writing to specific client
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
DemoSetBuf (byte type, int to)
|
||||||
{
|
{
|
||||||
if (!USACACHE) {
|
header_t *p;
|
||||||
dwrite = &Qwrite;
|
int pos = 0;
|
||||||
demo.dest = demo.file;
|
|
||||||
demo.disk = true;
|
(byte *) p = demo.dbuf->sz.data;
|
||||||
} else {
|
|
||||||
dwrite = &memwrite;
|
while (pos < demo.dbuf->bufsize) {
|
||||||
demo.mfile = svs.demomem;
|
pos += header + p->size;
|
||||||
demo.dest = &demo.mfile;
|
|
||||||
|
if (type == p->type && to == p->to && !p->full) {
|
||||||
|
demo.dbuf->sz.cursize = pos;
|
||||||
|
demo.dbuf->h = p;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
(byte *) p = p->data + p->size;
|
||||||
|
}
|
||||||
|
// type && to not exist in the buf, so add it
|
||||||
|
|
||||||
|
p->type = type;
|
||||||
|
p->to = to;
|
||||||
|
p->size = 0;
|
||||||
|
p->full = 0;
|
||||||
|
|
||||||
|
demo.dbuf->bufsize += header;
|
||||||
|
demo.dbuf->sz.cursize = demo.dbuf->bufsize;
|
||||||
|
demobuffer->end += header;
|
||||||
|
demo.dbuf->h = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
DemoMoveBuf (void)
|
||||||
|
{
|
||||||
|
// set the last message mark to the previous frame (i/e begining of this
|
||||||
|
// one)
|
||||||
|
demobuffer->last = demobuffer->end - demo.dbuf->bufsize;
|
||||||
|
|
||||||
|
// move buffer to the begining of demo buffer
|
||||||
|
memmove (demobuffer->data, demo.dbuf->sz.data, demo.dbuf->bufsize);
|
||||||
|
demo.dbuf->sz.data = demobuffer->data;
|
||||||
|
demobuffer->end = demo.dbuf->bufsize;
|
||||||
|
demo.dbuf->h = NULL; // it will be setup again
|
||||||
|
demo.dbuf->sz.maxsize = MAXSIZE + demo.dbuf->bufsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DemoWrite_Begin (byte type, int to, int size)
|
||||||
|
{
|
||||||
|
byte *p;
|
||||||
|
qboolean move = false;
|
||||||
|
|
||||||
|
// will it fit?
|
||||||
|
while (demo.dbuf->bufsize + size + header > demo.dbuf->sz.maxsize) {
|
||||||
|
// if we reached the end of buffer move msgbuf to the begining
|
||||||
|
if (!move && demobuffer->end > demobuffer->start)
|
||||||
|
move = true;
|
||||||
|
|
||||||
|
SV_DemoWritePackets (1);
|
||||||
|
if (move && demobuffer->start > demo.dbuf->bufsize + header + size)
|
||||||
|
DemoMoveBuf ();
|
||||||
}
|
}
|
||||||
|
|
||||||
demo_size = 0;
|
if (demo.dbuf->h == NULL || demo.dbuf->h->type != type
|
||||||
|
|| demo.dbuf->h->to != to || demo.dbuf->h->full) {
|
||||||
|
DemoSetBuf (type, to);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
if (demo.dbuf->h->size + size > MAX_MSGLEN) {
|
||||||
|
demo.dbuf->h->full = 1;
|
||||||
|
DemoSetBuf (type, to);
|
||||||
|
}
|
||||||
|
// we have to make room for new data
|
||||||
|
if (demo.dbuf->sz.cursize != demo.dbuf->bufsize) {
|
||||||
|
p = demo.dbuf->sz.data + demo.dbuf->sz.cursize;
|
||||||
|
memmove (p + size, p, demo.dbuf->bufsize - demo.dbuf->sz.cursize);
|
||||||
|
}
|
||||||
|
|
||||||
|
demo.dbuf->bufsize += size;
|
||||||
|
demo.dbuf->h->size += size;
|
||||||
|
if ((demobuffer->end += size) > demobuffer->last)
|
||||||
|
demobuffer->last = demobuffer->end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -672,21 +600,89 @@ SV_Cancel_f (void)
|
||||||
SV_Stop (2);
|
SV_Stop (2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SV_DemoPings (void)
|
||||||
|
{
|
||||||
|
client_t *client;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (j = 0, client = svs.clients; j < MAX_CLIENTS; j++, client++) {
|
||||||
|
if (client->state != cs_spawned && client->state != cs_server)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
DemoWrite_Begin (dem_all, 0, 7);
|
||||||
|
MSG_WriteByte ((sizebuf_t *) demo.dbuf, svc_updateping);
|
||||||
|
MSG_WriteByte ((sizebuf_t *) demo.dbuf, j);
|
||||||
|
MSG_WriteShort ((sizebuf_t *) demo.dbuf, SV_CalcPing (client));
|
||||||
|
MSG_WriteByte ((sizebuf_t *) demo.dbuf, svc_updatepl);
|
||||||
|
MSG_WriteByte ((sizebuf_t *) demo.dbuf, j);
|
||||||
|
MSG_WriteByte ((sizebuf_t *) demo.dbuf, client->lossage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
DemoBuffer_Init (dbuffer_t *dbuffer, byte *buf, size_t size)
|
||||||
|
{
|
||||||
|
demobuffer = dbuffer;
|
||||||
|
|
||||||
|
demobuffer->data = buf;
|
||||||
|
demobuffer->maxsize = size;
|
||||||
|
demobuffer->start = 0;
|
||||||
|
demobuffer->end = 0;
|
||||||
|
demobuffer->last = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SV_WriteDemoMessage
|
Demo_SetMsgBuf
|
||||||
|
|
||||||
|
Sets the frame message buffer
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
DemoSetMsgBuf (demobuf_t *prev, demobuf_t *cur)
|
||||||
|
{
|
||||||
|
// fix the maxsize of previous msg buffer,
|
||||||
|
// we won't be able to write there anymore
|
||||||
|
if (prev != NULL)
|
||||||
|
prev->sz.maxsize = prev->bufsize;
|
||||||
|
|
||||||
|
demo.dbuf = cur;
|
||||||
|
memset (demo.dbuf, 0, sizeof (*demo.dbuf));
|
||||||
|
|
||||||
|
demo.dbuf->sz.data = demobuffer->data + demobuffer->end;
|
||||||
|
demo.dbuf->sz.maxsize = MAXSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static qboolean
|
||||||
|
SV_InitRecord (void)
|
||||||
|
{
|
||||||
|
if (!USACACHE) {
|
||||||
|
dwrite = &Qwrite;
|
||||||
|
demo.dest = demo.file;
|
||||||
|
demo.disk = true;
|
||||||
|
} else {
|
||||||
|
dwrite = &memwrite;
|
||||||
|
demo.mfile = svs.demomem;
|
||||||
|
demo.dest = &demo.mfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
demo_size = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
SV_WriteRecordDemoMessage
|
||||||
|
|
||||||
Dumps the current net message, prefixed by the length and view angles
|
Dumps the current net message, prefixed by the length and view angles
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SV_WriteRecordDemoMessage (sizebuf_t *msg, int seq)
|
SV_WriteRecordDemoMessage (sizebuf_t *msg)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
byte c;
|
byte c;
|
||||||
|
|
||||||
if (!sv.demorecording)
|
|
||||||
return;
|
|
||||||
|
|
||||||
c = 0;
|
c = 0;
|
||||||
demo.size += DWRITE (&c, sizeof (c), demo.dest);
|
demo.size += DWRITE (&c, sizeof (c), demo.dest);
|
||||||
|
|
||||||
|
@ -710,9 +706,6 @@ SV_WriteSetDemoMessage (void)
|
||||||
|
|
||||||
// Con_Printf ("write: %ld bytes, %4.4f\n", msg->cursize, realtime);
|
// Con_Printf ("write: %ld bytes, %4.4f\n", msg->cursize, realtime);
|
||||||
|
|
||||||
if (!sv.demorecording)
|
|
||||||
return;
|
|
||||||
|
|
||||||
c = 0;
|
c = 0;
|
||||||
demo.size += DWRITE (&c, sizeof (c), demo.dest);
|
demo.size += DWRITE (&c, sizeof (c), demo.dest);
|
||||||
|
|
||||||
|
@ -804,7 +797,6 @@ SV_Record (char *name)
|
||||||
|
|
||||||
client_t *player;
|
client_t *player;
|
||||||
const char *gamedir, *s;
|
const char *gamedir, *s;
|
||||||
int seq = 1;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// save over memset
|
// save over memset
|
||||||
|
@ -913,7 +905,7 @@ SV_Record (char *name)
|
||||||
Info_MakeString (svs.info, 0)));
|
Info_MakeString (svs.info, 0)));
|
||||||
|
|
||||||
// flush packet
|
// flush packet
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
|
|
||||||
// soundlist
|
// soundlist
|
||||||
|
@ -927,7 +919,7 @@ SV_Record (char *name)
|
||||||
if (buf.cursize > MAX_MSGLEN / 2) {
|
if (buf.cursize > MAX_MSGLEN / 2) {
|
||||||
MSG_WriteByte (&buf, 0);
|
MSG_WriteByte (&buf, 0);
|
||||||
MSG_WriteByte (&buf, n);
|
MSG_WriteByte (&buf, n);
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
MSG_WriteByte (&buf, svc_soundlist);
|
MSG_WriteByte (&buf, svc_soundlist);
|
||||||
MSG_WriteByte (&buf, n + 1);
|
MSG_WriteByte (&buf, n + 1);
|
||||||
|
@ -939,7 +931,7 @@ SV_Record (char *name)
|
||||||
if (buf.cursize) {
|
if (buf.cursize) {
|
||||||
MSG_WriteByte (&buf, 0);
|
MSG_WriteByte (&buf, 0);
|
||||||
MSG_WriteByte (&buf, 0);
|
MSG_WriteByte (&buf, 0);
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
}
|
}
|
||||||
// modellist
|
// modellist
|
||||||
|
@ -953,7 +945,7 @@ SV_Record (char *name)
|
||||||
if (buf.cursize > MAX_MSGLEN / 2) {
|
if (buf.cursize > MAX_MSGLEN / 2) {
|
||||||
MSG_WriteByte (&buf, 0);
|
MSG_WriteByte (&buf, 0);
|
||||||
MSG_WriteByte (&buf, n);
|
MSG_WriteByte (&buf, n);
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
MSG_WriteByte (&buf, svc_modellist);
|
MSG_WriteByte (&buf, svc_modellist);
|
||||||
MSG_WriteByte (&buf, n + 1);
|
MSG_WriteByte (&buf, n + 1);
|
||||||
|
@ -964,7 +956,7 @@ SV_Record (char *name)
|
||||||
if (buf.cursize) {
|
if (buf.cursize) {
|
||||||
MSG_WriteByte (&buf, 0);
|
MSG_WriteByte (&buf, 0);
|
||||||
MSG_WriteByte (&buf, 0);
|
MSG_WriteByte (&buf, 0);
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
}
|
}
|
||||||
// prespawn
|
// prespawn
|
||||||
|
@ -973,7 +965,7 @@ SV_Record (char *name)
|
||||||
SZ_Write (&buf, sv.signon_buffers[n], sv.signon_buffer_size[n]);
|
SZ_Write (&buf, sv.signon_buffers[n], sv.signon_buffer_size[n]);
|
||||||
|
|
||||||
if (buf.cursize > MAX_MSGLEN / 2) {
|
if (buf.cursize > MAX_MSGLEN / 2) {
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -982,7 +974,7 @@ SV_Record (char *name)
|
||||||
MSG_WriteString (&buf, va ("cmd spawn %i 0\n", svs.spawncount));
|
MSG_WriteString (&buf, va ("cmd spawn %i 0\n", svs.spawncount));
|
||||||
|
|
||||||
if (buf.cursize) {
|
if (buf.cursize) {
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
}
|
}
|
||||||
// send current status of all other players
|
// send current status of all other players
|
||||||
|
@ -1016,7 +1008,7 @@ SV_Record (char *name)
|
||||||
MSG_WriteString (&buf, info);
|
MSG_WriteString (&buf, info);
|
||||||
|
|
||||||
if (buf.cursize > MAX_MSGLEN / 2) {
|
if (buf.cursize > MAX_MSGLEN / 2) {
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
SZ_Clear (&buf);
|
SZ_Clear (&buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1033,7 +1025,7 @@ SV_Record (char *name)
|
||||||
MSG_WriteByte (&buf, svc_stufftext);
|
MSG_WriteByte (&buf, svc_stufftext);
|
||||||
MSG_WriteString (&buf, va ("skins\n"));
|
MSG_WriteString (&buf, va ("skins\n"));
|
||||||
|
|
||||||
SV_WriteRecordDemoMessage (&buf, seq++);
|
SV_WriteRecordDemoMessage (&buf);
|
||||||
|
|
||||||
SV_WriteSetDemoMessage ();
|
SV_WriteSetDemoMessage ();
|
||||||
// done
|
// done
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue