1
0
Fork 0
forked from fte/fteqw

Bump ent counts by a smidge.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@6181 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2022-02-07 14:33:56 +00:00
parent 40232ab5ca
commit 88858f7698
5 changed files with 25 additions and 19 deletions

View file

@ -127,7 +127,7 @@ qofs_t PR_ReadBytesString(char *str)
double d = strtod(str, &str); double d = strtod(str, &str);
if (d < 0) if (d < 0)
{ {
#if defined(_WIN64) && !defined(WINRT) #if (defined(_WIN64) && !defined(WINRT)) || (defined(__linux__)&&defined(__LP64__))
return 0x80000000; //use of virtual address space rather than physical memory means we can just go crazy and use the max of 2gb. return 0x80000000; //use of virtual address space rather than physical memory means we can just go crazy and use the max of 2gb.
#elif defined(FTE_TARGET_WEB) #elif defined(FTE_TARGET_WEB)
return 8*1024*1024; return 8*1024*1024;

View file

@ -181,8 +181,8 @@ struct pubprogfuncs_s
int callargc; //number of args of built-in call int callargc; //number of args of built-in call
char *stringtable; //qc strings are all relative. add to a qc string. this is required for support of frikqcc progs that strip string immediates. char *stringtable; //qc strings are all relative. add to a qc string. this is required for support of frikqcc progs that strip string immediates.
int stringtablesize; unsigned int stringtablesize;
int stringtablemaxsize; unsigned int stringtablemaxsize;
int fieldadjust; //FrikQCC style arrays can cause problems due to field remapping. This causes us to leave gaps but offsets identical. except for system fields, qc-addressable variables use their old offsets, this is the bias so that the offset pokes the correct memory. int fieldadjust; //FrikQCC style arrays can cause problems due to field remapping. This causes us to leave gaps but offsets identical. except for system fields, qc-addressable variables use their old offsets, this is the bias so that the offset pokes the correct memory.
unsigned int activefieldslots; //f+=fieldadjust; invalidfield = (f<0)||(f+fldsize>=activefieldslots); note that this does NOT apply to 'object' entities which are variable sized, use ed->fieldsize for those. unsigned int activefieldslots; //f+=fieldadjust; invalidfield = (f<0)||(f+fldsize>=activefieldslots); note that this does NOT apply to 'object' entities which are variable sized, use ed->fieldsize for those.

View file

@ -73,7 +73,7 @@ cvar_t pr_ssqc_memsize = CVARD("pr_ssqc_memsize", "-1", "The ammount of memory a
cvar_t pr_imitatemvdsv = CVARFD("pr_imitatemvdsv", "0", CVAR_MAPLATCH, "Enables mvdsv-specific builtins, and fakes identifiers so that mods made for mvdsv can run properly and with the full feature set."); cvar_t pr_imitatemvdsv = CVARFD("pr_imitatemvdsv", "0", CVAR_MAPLATCH, "Enables mvdsv-specific builtins, and fakes identifiers so that mods made for mvdsv can run properly and with the full feature set.");
/*other stuff*/ /*other stuff*/
cvar_t pr_maxedicts = CVARAFD("pr_maxedicts", "32768", "max_edicts", CVAR_MAPLATCH, "Maximum number of entities spawnable on the map at once. Low values will crash the server on some maps/mods. High values will result in excessive memory useage (see pr_ssqc_memsize). Illegible server messages may occur with old/other clients above 32k. FTE's network protocols have a maximum at a little over 4 million. Please don't ever make a mod that actually uses that many..."); cvar_t pr_maxedicts = CVARAFD("pr_maxedicts", "131072", "max_edicts", CVAR_MAPLATCH, "Maximum number of entities spawnable on the map at once. Low values will crash the server on some maps/mods. High values will result in excessive memory useage (see pr_ssqc_memsize). Illegible server messages may occur with old/other clients above 32k. FTE's network protocols have a maximum at a little over 4 million. Please don't ever make a mod that actually uses that many...");
#ifndef HAVE_LEGACY #ifndef HAVE_LEGACY
cvar_t pr_no_playerphysics = CVARFD("pr_no_playerphysics", "1", CVAR_MAPLATCH, "Prevents support of the 'SV_PlayerPhysics' QC function. This allows servers to prevent needless breakage of player prediction."); cvar_t pr_no_playerphysics = CVARFD("pr_no_playerphysics", "1", CVAR_MAPLATCH, "Prevents support of the 'SV_PlayerPhysics' QC function. This allows servers to prevent needless breakage of player prediction.");

View file

@ -2156,7 +2156,7 @@ static void SV_Status_f (void)
continue; //free, and older than the zombie time continue; //free, and older than the zombie time
count++; count++;
} }
Con_TPrintf("entities : %i/%i/%i (mem: %.1f%%)\n", count, sv.world.num_edicts, sv.world.max_edicts, 100*(float)(sv.world.progs->stringtablesize/(double)sv.world.progs->stringtablemaxsize)); Con_TPrintf("entities : %i/%i/%i (mem: %.1f%%)\n", count, sv.world.num_edicts, sv.world.max_edicts, 100.0*(sv.world.progs->stringtablesize/(double)sv.world.progs->stringtablemaxsize));
for (count = 1; count < MAX_PRECACHE_MODELS; count++) for (count = 1; count < MAX_PRECACHE_MODELS; count++)
if (!sv.strings.model_precache[count]) if (!sv.strings.model_precache[count])
break; break;

View file

@ -3727,7 +3727,7 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
#define DEPTHOPTIMISE #define DEPTHOPTIMISE
#ifdef DEPTHOPTIMISE #ifdef DEPTHOPTIMISE
vec3_t org; vec3_t org;
static float distances[32768]; float *distances = NULL;
float dist; float dist;
#endif #endif
globalvars_t *pr_globals = PR_globals(svprogfuncs, PR_CURRENT); globalvars_t *pr_globals = PR_globals(svprogfuncs, PR_CURRENT);
@ -3736,6 +3736,22 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
int c, maxc = cameras?cameras->numents:0; int c, maxc = cameras?cameras->numents:0;
client_t *seat; client_t *seat;
limit = sv.world.num_edicts;
if (client->max_net_ents < limit)
{
limit = client->max_net_ents;
if (!(client->plimitwarned & PLIMIT_ENTITIES))
{
client->plimitwarned |= PLIMIT_ENTITIES;
SV_ClientPrintf(client, PRINT_HIGH, "WARNING: Your client's network protocol only supports %i entities. Please upgrade or enable extensions.\n", client->max_net_ents);
}
}
#ifdef DEPTHOPTIMISE
if (clent && ISQWCLIENT(client) && client->max_net_ents<=512) //the vanilla QW client is shite and only supports 64 visible ents at a time... it can get cpu-heavy though, so don't waste time with other clients.
distances = alloca(sizeof(*distances)*limit);
#endif
//this entity is watching from outside themselves. The client is tricked into thinking that they themselves are in the view ent, and a new dummy ent (the old them) must be spawned. //this entity is watching from outside themselves. The client is tricked into thinking that they themselves are in the view ent, and a new dummy ent (the old them) must be spawned.
if (clent && ISQWCLIENT(client)) if (clent && ISQWCLIENT(client))
{ {
@ -3746,7 +3762,8 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
continue; continue;
//FIXME: this hack needs cleaning up //FIXME: this hack needs cleaning up
#ifdef DEPTHOPTIMISE #ifdef DEPTHOPTIMISE
distances[pack->num_entities] = 0; if (distances)
distances[pack->num_entities] = 0;
#endif #endif
state = &pack->entities[pack->num_entities]; state = &pack->entities[pack->num_entities];
pack->num_entities++; pack->num_entities++;
@ -3789,17 +3806,6 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
else else
e = 1; e = 1;
limit = sv.world.num_edicts;
if (client->max_net_ents < limit)
{
limit = client->max_net_ents;
if (!(client->plimitwarned & PLIMIT_ENTITIES))
{
client->plimitwarned |= PLIMIT_ENTITIES;
SV_ClientPrintf(client, PRINT_HIGH, "WARNING: Your client's network protocol only supports %i entities. Please upgrade or enable extensions.\n", client->max_net_ents);
}
}
if (client->penalties & BAN_BLIND) if (client->penalties & BAN_BLIND)
{ {
e = client->edict->entnum; e = client->edict->entnum;
@ -3991,7 +3997,7 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
if (ent->v->modelindex >= client->maxmodels) if (ent->v->modelindex >= client->maxmodels)
continue; continue;
#ifdef DEPTHOPTIMISE #ifdef DEPTHOPTIMISE
if (clent) if (distances)
{ {
//find distance based upon absolute mins/maxs so bsps are treated fairly. //find distance based upon absolute mins/maxs so bsps are treated fairly.
//org = clentorg + -0.5*(max+min) //org = clentorg + -0.5*(max+min)