Skip to content

Commit 6360746

Browse files
authored
Merge pull request #1009 from qw-ctf/mvdqtv
MVD: Align MVD stream extensions with gameplay protocol.
2 parents cf7f53e + 1949768 commit 6360746

13 files changed

+73
-23
lines changed

src/bspfile.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2525

2626
#define MAX_MAP_HULLS 4
2727

28-
#define MAX_MAP_MODELS 512
28+
#define MAX_MAP_MODELS 4096
2929
#define MAX_MAP_BRUSHES 4096
3030
#define MAX_MAP_ENTITIES 1024
3131
#define MAX_MAP_ENTSTRING 65536

src/cl_ents.c

+9-7
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ static qbool is_monster (int modelindex)
167167

168168
void CL_ClearScene(void)
169169
{
170-
memset(cl_visents.list, 0, sizeof(cl_visents.list));
171170
memset(cl_visents.typecount, 0, sizeof(cl_visents.typecount));
172171
cl_visents.count = 0;
173172
}
@@ -510,8 +509,16 @@ void CL_ParseDelta (entity_state_t *from, entity_state_t *to, int bits) {
510509
#endif
511510

512511
to->flags = bits;
513-
if (bits & U_MODEL)
512+
if (bits & U_MODEL) {
514513
to->modelindex = MSG_ReadByte();
514+
#ifdef FTE_PEXT_MODELDBL
515+
if (morebits & U_FTE_MODELDBL) {
516+
to->modelindex += 256;
517+
}
518+
} else if (morebits & U_FTE_MODELDBL) {
519+
to->modelindex = MSG_ReadShort();
520+
#endif
521+
}
515522

516523
if (bits & U_FRAME)
517524
to->frame = MSG_ReadByte ();
@@ -591,11 +598,6 @@ void CL_ParseDelta (entity_state_t *from, entity_state_t *to, int bits) {
591598
to->number += 1024;
592599
}
593600
#endif
594-
#ifdef FTE_PEXT_MODELDBL
595-
if (morebits & U_FTE_MODELDBL) {
596-
to->modelindex += 256;
597-
}
598-
#endif
599601
#endif
600602
}
601603

src/client.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ typedef struct {
307307
char map[MAX_STYLESTRING];
308308
} lightstyle_t;
309309

310-
#define MAX_STATIC_ENTITIES 512 // torches, etc
310+
#define MAX_STATIC_ENTITIES 2048 // torches, etc
311311
#define MAX_DEMOS 8
312312
#define MAX_DEMONAME 16
313313

@@ -800,7 +800,7 @@ typedef struct visentity_s {
800800
qbool draw[visent_max];
801801
} visentity_t;
802802

803-
#define MAX_STANDARD_ENTITIES 512
803+
#define MAX_STANDARD_ENTITIES 2048
804804

805805
typedef struct visentlist_s {
806806
visentity_t list[MAX_STANDARD_ENTITIES];

src/com_msg.c

+5
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,9 @@ void MSG_WriteDeltaEntity (entity_state_t *from, entity_state_t *to, sizebuf_t *
299299
bits |= U_MODEL;
300300
#ifdef FTE_PEXT_ENTITYDBL
301301
if (to->modelindex > 255) {
302+
if (to->modelindex > 512) {
303+
bits &= ~U_MODEL;
304+
}
302305
evenmorebits |= U_FTE_MODELDBL;
303306
required_extensions |= FTE_PEXT_MODELDBL;
304307
}
@@ -408,6 +411,8 @@ void MSG_WriteDeltaEntity (entity_state_t *from, entity_state_t *to, sizebuf_t *
408411

409412
if (bits & U_MODEL)
410413
MSG_WriteByte (msg, to->modelindex & 255);
414+
else if (evenmorebits & U_FTE_MODELDBL)
415+
MSG_WriteShort(msg, to->modelindex);
411416
if (bits & U_FRAME)
412417
MSG_WriteByte (msg, to->frame);
413418
if (bits & U_COLORMAP)

src/common.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ typedef enum
7272
#define MAX_EDICTS 2048 // can't encode more than this, see SV_WriteDelta
7373
#define MAX_EDICTS_SAFE 512 // lower limit, to make sure no client limits exceeded
7474
#define MAX_LIGHTSTYLES 64
75-
#define MAX_MODELS 512 // can't encode more than this, see SV_WriteDelta
75+
#define MAX_MODELS 4096 // can't encode more than this, see SV_WriteDelta
76+
#define MAX_STATIC_ENTITIES 2048
7677
#define MAX_VWEP_MODELS 32 // could be increased to 256
7778
#define MAX_SOUNDS 256 // so they cannot be blindly increased
7879

src/glm_aliasmodel.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ void GLM_StateBeginAliasModelZPassBatch(void);
3838
void GLM_StateBeginAliasModelBatch(qbool translucent, qbool additive);
3939
void GLM_StateBeginAliasOutlineBatch(void);
4040

41-
#define MAXIMUM_ALIASMODEL_DRAWCALLS MAX_STANDARD_ENTITIES // ridiculous
41+
// MAX_STANDARD_ENTITIES used to be 512, so lets pretend like
42+
// there can't be more aliasmodel entities, as that will cause
43+
// the arrays sized according to this limit to become too big
44+
// for caches etc. Should there be more aliasmodels than this,
45+
// there will be an error printed.
46+
#define MAXIMUM_ALIASMODEL_DRAWCALLS 512 // ridiculous
4247
#define MAXIMUM_MATERIAL_SAMPLERS 32
4348

4449
typedef enum aliasmodel_draw_type_s {

src/pr2_cmds.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ void PF2_sprint(int entnum, int level, char *s, int flags)
340340
flags = 0;
341341
if (entnum < 1 || entnum > MAX_CLIENTS)
342342
{
343-
Con_Printf("tried to sprint to a non-client %d \n", entnum);
343+
Con_Printf("tried to sprint to a non-client %d (%s)\n", entnum, s);
344344
return;
345345
}
346346

src/r_model.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ void Mod_AddModelFlags(model_t *mod);
4646

4747
byte mod_novis[MAX_MAP_LEAFS/8];
4848

49-
#define MAX_MOD_KNOWN 512
50-
model_t mod_known[MAX_MOD_KNOWN];
49+
model_t mod_known[MAX_MODELS];
5150
int mod_numknown;
5251

5352
void Mod_Init(void)
@@ -175,7 +174,7 @@ model_t *Mod_FindName(const char *name)
175174
}
176175

177176
if (i == mod_numknown) {
178-
if (mod_numknown == MAX_MOD_KNOWN) {
177+
if (mod_numknown == MAX_MODELS) {
179178
Sys_Error("mod_numknown == MAX_MOD_KNOWN");
180179
}
181180
strlcpy(mod->name, name, sizeof(mod->name));

src/server.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ typedef struct
126126

127127
qbool mvdrecording;
128128

129-
entity_state_t static_entities[512];
129+
entity_state_t static_entities[MAX_STATIC_ENTITIES];
130130
int static_entity_count;
131131
} server_t;
132132

@@ -733,7 +733,7 @@ extern demo_t demo; // server demo struct
733733
extern client_t *sv_client;
734734
extern edict_t *sv_player;
735735

736-
#define MODEL_NAME_LEN 5
736+
#define MODEL_NAME_LEN 6
737737
extern char localmodels[MAX_MODELS][MODEL_NAME_LEN]; // inline model names for precache
738738
//extern char localinfo[MAX_LOCALINFO_STRING+1];
739739
extern ctxinfo_t _localinfo_;

src/sv_demo.c

+36-3
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,31 @@ void SV_MVD_SendInitialGamestate(mvddest_t* dest)
12101210

12111211
MSG_WriteByte(&buf, svc_serverdata);
12121212

1213+
#ifdef FTE_PEXT_256PACKETENTITIES
1214+
demo.recorder.fteprotocolextensions |= FTE_PEXT_256PACKETENTITIES;
1215+
#endif
1216+
#ifdef FTE_PEXT_MODELDBL
1217+
demo.recorder.fteprotocolextensions |= FTE_PEXT_MODELDBL;
1218+
#endif
1219+
#ifdef FTE_PEXT_ENTITYDBL
1220+
demo.recorder.fteprotocolextensions |= FTE_PEXT_ENTITYDBL;
1221+
#endif
1222+
#ifdef FTE_PEXT_ENTITYDBL2
1223+
demo.recorder.fteprotocolextensions |= FTE_PEXT_ENTITYDBL2;
1224+
#endif
1225+
#ifdef FTE_PEXT_SPAWNSTATIC2
1226+
demo.recorder.fteprotocolextensions |= FTE_PEXT_SPAWNSTATIC2;
1227+
#endif
1228+
#ifdef FTE_PEXT_TRANS
1229+
demo.recorder.fteprotocolextensions |= FTE_PEXT_TRANS;
1230+
#endif
1231+
#ifdef FTE_PEXT_COLOURMOD
1232+
demo.recorder.fteprotocolextensions |= FTE_PEXT_COLOURMOD;
1233+
#endif
1234+
#ifdef FTE_PEXT2_VOICECHAT
1235+
demo.recorder.fteprotocolextensions2 |= FTE_PEXT2_VOICECHAT;
1236+
#endif
1237+
12131238
#ifdef FTE_PEXT_FLOATCOORDS
12141239
//fix up extensions to match sv_bigcoords correctly. sorry for old clients not working.
12151240
if (msg_coordsize == 4)
@@ -1316,14 +1341,22 @@ void SV_MVD_SendInitialGamestate(mvddest_t* dest)
13161341
while (s)
13171342
{
13181343
MSG_WriteString (&buf, s);
1319-
if (buf.cursize > MAX_MSGLEN/2)
1344+
if (buf.cursize > MAX_MSGLEN/2 && n & 0xff)
13201345
{
1346+
// partial flush as long as not at a zero boundary
13211347
MSG_WriteByte (&buf, 0);
13221348
MSG_WriteByte (&buf, n);
13231349
SV_WriteRecordMVDMessage (&buf);
13241350
SZ_Clear (&buf);
1325-
MSG_WriteByte (&buf, svc_modellist);
1326-
MSG_WriteByte (&buf, n + 1);
1351+
if (n + 1 > 0xff)
1352+
{
1353+
MSG_WriteByte (&buf, svc_fte_modellistshort);
1354+
MSG_WriteShort (&buf, n + 1);
1355+
} else
1356+
{
1357+
MSG_WriteByte (&buf, svc_modellist);
1358+
MSG_WriteByte (&buf, n + 1);
1359+
}
13271360
}
13281361
n++;
13291362
s = sv.model_precache[n+1];

src/sv_ents.c

+5
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ void SV_WriteDelta(client_t* client, entity_state_t *from, entity_state_t *to, s
159159
bits |= U_MODEL;
160160
#ifdef FTE_PEXT_ENTITYDBL
161161
if (to->modelindex > 255) {
162+
if (to->modelindex >= 512) {
163+
bits &= ~U_MODEL;
164+
}
162165
evenmorebits |= U_FTE_MODELDBL;
163166
required_extensions |= FTE_PEXT_MODELDBL;
164167
}
@@ -264,6 +267,8 @@ void SV_WriteDelta(client_t* client, entity_state_t *from, entity_state_t *to, s
264267

265268
if (bits & U_MODEL)
266269
MSG_WriteByte(msg, to->modelindex & 255);
270+
else if (evenmorebits & U_FTE_MODELDBL)
271+
MSG_WriteShort(msg, to->modelindex);
267272
if (bits & U_FRAME)
268273
MSG_WriteByte(msg, to->frame);
269274
if (bits & U_COLORMAP)

src/sv_init.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ server_static_t svs; // persistent server info
3131
server_t sv; // local server
3232
demo_t demo; // server demo struct
3333

34-
char localmodels[MAX_MODELS][5]; // inline model names for precache
34+
char localmodels[MAX_MODELS][MODEL_NAME_LEN]; // inline model names for precache
3535

3636
//char localinfo[MAX_LOCALINFO_STRING+1]; // local game info
3737
ctxinfo_t _localinfo_;

src/sv_user.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ static void Cmd_Modellist_f (void)
637637
maxclientsupportedmodels = 256;
638638
#ifdef FTE_PEXT_MODELDBL
639639
if (sv_client->fteprotocolextensions & FTE_PEXT_MODELDBL) {
640-
maxclientsupportedmodels *= 2;
640+
maxclientsupportedmodels = MAX_MODELS;
641641
}
642642
#endif
643643

0 commit comments

Comments
 (0)