mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-22 03:21:08 +00:00
Tiny bugfixesish.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3810 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
71b8797d9e
commit
0d17471975
3 changed files with 154 additions and 93 deletions
|
@ -115,15 +115,54 @@ char *svc_strings[] =
|
||||||
"FTE svc_spawnbaseline2",
|
"FTE svc_spawnbaseline2",
|
||||||
"FTE svc_customtempent",
|
"FTE svc_customtempent",
|
||||||
"FTE svc_choosesplitclient",
|
"FTE svc_choosesplitclient",
|
||||||
"FTE svc_showpic",
|
|
||||||
"FTE svc_hidepic",
|
"svcfte_showpic",
|
||||||
"FTE svc_movepic",
|
"svcfte_hidepic",
|
||||||
"FTE svc_updatepic",
|
"svcfte_movepic",
|
||||||
"FTE svcqw_effect",
|
"svcfte_updatepic",
|
||||||
"FTE svcqw_effect2",
|
|
||||||
"FTE svc_csqcentities",
|
"???",
|
||||||
"FTE svc_precache",
|
|
||||||
"FTE svc_choosesplitclient",
|
"svcfte_effect",
|
||||||
|
"svcfte_effect2",
|
||||||
|
|
||||||
|
"svcfte_csqcentities",
|
||||||
|
|
||||||
|
"svcfte_precache",
|
||||||
|
|
||||||
|
"svcfte_updatestatstring",
|
||||||
|
"svcfte_updatestatfloat",
|
||||||
|
|
||||||
|
"svcfte_trailparticles",
|
||||||
|
"svcfte_pointparticles",
|
||||||
|
"svcfte_pointparticles1",
|
||||||
|
|
||||||
|
"svcfte_cgamepacket",
|
||||||
|
"svcfte_voicechat",
|
||||||
|
"svcfte_setangledelta",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
|
"???",
|
||||||
};
|
};
|
||||||
|
|
||||||
char *svc_nqstrings[] =
|
char *svc_nqstrings[] =
|
||||||
|
|
|
@ -1343,7 +1343,11 @@ static void Shader_FlushGenerics(void)
|
||||||
{
|
{
|
||||||
g = sgenerics;
|
g = sgenerics;
|
||||||
sgenerics = g->next;
|
sgenerics = g->next;
|
||||||
free(g);
|
|
||||||
|
if (g->prog.refs == 1)
|
||||||
|
free(g);
|
||||||
|
else
|
||||||
|
Con_Printf("generic shader still used\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static program_t *Shader_LoadGeneric(char *name, int qrtype)
|
static program_t *Shader_LoadGeneric(char *name, int qrtype)
|
||||||
|
@ -2500,6 +2504,61 @@ static shaderkey_t shaderpasskeys[] =
|
||||||
|
|
||||||
// ===============================================================
|
// ===============================================================
|
||||||
|
|
||||||
|
|
||||||
|
void Shader_FreePass (shaderpass_t *pass)
|
||||||
|
{
|
||||||
|
#ifndef NOMEDIA
|
||||||
|
if ( pass->flags & SHADER_PASS_VIDEOMAP )
|
||||||
|
{
|
||||||
|
Media_ShutdownCin(pass->cin);
|
||||||
|
pass->cin = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shader_Free (shader_t *shader)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
shaderpass_t *pass;
|
||||||
|
|
||||||
|
if (shader->bucket.data == shader)
|
||||||
|
Hash_RemoveData(&shader_active_hash, shader->name, shader);
|
||||||
|
shader->bucket.data = NULL;
|
||||||
|
|
||||||
|
#ifdef GLQUAKE
|
||||||
|
if (qrenderer == QR_OPENGL && shader->prog)
|
||||||
|
{
|
||||||
|
program_t *prog = shader->prog;
|
||||||
|
int p;
|
||||||
|
if (--prog->refs == 0)
|
||||||
|
{
|
||||||
|
for (p = 0; p < PERMUTATIONS; p++)
|
||||||
|
{
|
||||||
|
if (prog->handle[p].glsl)
|
||||||
|
qglDeleteProgramObject_(prog->handle[p].glsl);
|
||||||
|
}
|
||||||
|
free(prog);
|
||||||
|
}
|
||||||
|
shader->prog = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (shader->skydome)
|
||||||
|
{
|
||||||
|
Z_Free (shader->skydome);
|
||||||
|
}
|
||||||
|
|
||||||
|
pass = shader->passes;
|
||||||
|
for (i = 0; i < shader->numpasses; i++, pass++)
|
||||||
|
{
|
||||||
|
Shader_FreePass (pass);
|
||||||
|
}
|
||||||
|
shader->numpasses = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int Shader_InitCallback (const char *name, int size, void *param)
|
int Shader_InitCallback (const char *name, int size, void *param)
|
||||||
{
|
{
|
||||||
strcpy(shaderbuf+shaderbuflen, name);
|
strcpy(shaderbuf+shaderbuflen, name);
|
||||||
|
@ -2511,6 +2570,7 @@ int Shader_InitCallback (const char *name, int size, void *param)
|
||||||
|
|
||||||
qboolean Shader_Init (void)
|
qboolean Shader_Init (void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
shaderbuflen = 0;
|
shaderbuflen = 0;
|
||||||
|
|
||||||
r_shaders = calloc(MAX_SHADERS, sizeof(shader_t));
|
r_shaders = calloc(MAX_SHADERS, sizeof(shader_t));
|
||||||
|
@ -2521,6 +2581,11 @@ qboolean Shader_Init (void)
|
||||||
memset(shader_active_hash_mem, 0, Hash_BytesForBuckets(1024));
|
memset(shader_active_hash_mem, 0, Hash_BytesForBuckets(1024));
|
||||||
Hash_InitTable(&shader_active_hash, 1024, shader_active_hash_mem);
|
Hash_InitTable(&shader_active_hash, 1024, shader_active_hash_mem);
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_SHADERS; i++)
|
||||||
|
{
|
||||||
|
if (r_shaders[i].uses)
|
||||||
|
Shader_Free(&r_shaders[i]);
|
||||||
|
}
|
||||||
Shader_FlushGenerics();
|
Shader_FlushGenerics();
|
||||||
shader_rescan_needed = true;
|
shader_rescan_needed = true;
|
||||||
Shader_NeedReload();
|
Shader_NeedReload();
|
||||||
|
@ -2636,56 +2701,6 @@ static void Shader_GetPathAndOffset ( char *name, char **path, unsigned int *off
|
||||||
path = NULL;
|
path = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shader_FreePass (shaderpass_t *pass)
|
|
||||||
{
|
|
||||||
#ifndef NOMEDIA
|
|
||||||
if ( pass->flags & SHADER_PASS_VIDEOMAP )
|
|
||||||
{
|
|
||||||
Media_ShutdownCin(pass->cin);
|
|
||||||
pass->cin = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void Shader_Free (shader_t *shader)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
shaderpass_t *pass;
|
|
||||||
|
|
||||||
if (shader->bucket.data == shader)
|
|
||||||
Hash_RemoveData(&shader_active_hash, shader->name, shader);
|
|
||||||
shader->bucket.data = NULL;
|
|
||||||
|
|
||||||
#ifdef GLQUAKE
|
|
||||||
if (qrenderer == QR_OPENGL && shader->prog)
|
|
||||||
{
|
|
||||||
program_t *prog = shader->prog;
|
|
||||||
int p;
|
|
||||||
if (--prog->refs == 0)
|
|
||||||
{
|
|
||||||
for (p = 0; p < PERMUTATIONS; p++)
|
|
||||||
{
|
|
||||||
if (prog->handle[p].glsl)
|
|
||||||
qglDeleteProgramObject_(prog->handle[p].glsl);
|
|
||||||
}
|
|
||||||
free(prog);
|
|
||||||
}
|
|
||||||
shader->prog = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (shader->skydome)
|
|
||||||
{
|
|
||||||
Z_Free (shader->skydome);
|
|
||||||
}
|
|
||||||
|
|
||||||
pass = shader->passes;
|
|
||||||
for (i = 0; i < shader->numpasses; i++, pass++)
|
|
||||||
{
|
|
||||||
Shader_FreePass (pass);
|
|
||||||
}
|
|
||||||
shader->numpasses = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Shader_Reset(shader_t *s)
|
void Shader_Reset(shader_t *s)
|
||||||
{
|
{
|
||||||
char name[MAX_QPATH];
|
char name[MAX_QPATH];
|
||||||
|
|
|
@ -1611,7 +1611,7 @@ void SV_UpdateClientStats (client_t *client, int pnum)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef PEXT_CSQC
|
#ifdef PEXT_CSQC
|
||||||
if ((client->fteprotocolextensions & PEXT_CSQC) && (sv.csqcchecksum || progstype == PROG_H2))
|
if (client->fteprotocolextensions & PEXT_CSQC)
|
||||||
{
|
{
|
||||||
if (statss[i] || client->statss[i])
|
if (statss[i] || client->statss[i])
|
||||||
if (strcmp(statss[i]?statss[i]:"", client->statss[i]?client->statss[i]:""))
|
if (strcmp(statss[i]?statss[i]:"", client->statss[i]?client->statss[i]:""))
|
||||||
|
@ -1645,48 +1645,55 @@ void SV_UpdateClientStats (client_t *client, int pnum)
|
||||||
|
|
||||||
if (statsf[i])
|
if (statsf[i])
|
||||||
{
|
{
|
||||||
if (statsf[i] != client->statsf[i])
|
if (client->fteprotocolextensions & PEXT_CSQC)
|
||||||
{
|
{
|
||||||
if (statsf[i] - (float)(int)statsf[i] == 0 && statsf[i] >= 0 && statsf[i] <= 255)
|
if (statsf[i] != client->statsf[i])
|
||||||
{
|
{
|
||||||
if (pnum)
|
if (statsf[i] - (float)(int)statsf[i] == 0 && statsf[i] >= 0 && statsf[i] <= 255)
|
||||||
{
|
{
|
||||||
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 5);
|
if (pnum)
|
||||||
ClientReliableWrite_Byte(client->controller, pnum);
|
{
|
||||||
ClientReliableWrite_Byte(client->controller, svc_updatestat);
|
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 5);
|
||||||
ClientReliableWrite_Byte(client->controller, i);
|
ClientReliableWrite_Byte(client->controller, pnum);
|
||||||
ClientReliableWrite_Byte(client->controller, statsf[i]);
|
ClientReliableWrite_Byte(client->controller, svc_updatestat);
|
||||||
|
ClientReliableWrite_Byte(client->controller, i);
|
||||||
|
ClientReliableWrite_Byte(client->controller, statsf[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClientReliableWrite_Begin(client, svc_updatestat, 3);
|
||||||
|
ClientReliableWrite_Byte(client, i);
|
||||||
|
ClientReliableWrite_Byte(client, statsf[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ClientReliableWrite_Begin(client, svc_updatestat, 3);
|
if (pnum)
|
||||||
ClientReliableWrite_Byte(client, i);
|
{
|
||||||
ClientReliableWrite_Byte(client, statsf[i]);
|
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 8);
|
||||||
|
ClientReliableWrite_Byte(client->controller, pnum);
|
||||||
|
ClientReliableWrite_Byte(client->controller, svcfte_updatestatfloat);
|
||||||
|
ClientReliableWrite_Byte(client->controller, i);
|
||||||
|
ClientReliableWrite_Float(client->controller, statsf[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClientReliableWrite_Begin(client, svcfte_updatestatfloat, 6);
|
||||||
|
ClientReliableWrite_Byte(client, i);
|
||||||
|
ClientReliableWrite_Float(client, statsf[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
client->statsf[i] = statsf[i];
|
||||||
|
/*make sure statsf is correct*/
|
||||||
|
client->statsi[i] = statsf[i];
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
if (pnum)
|
{
|
||||||
{
|
statsi[i] = statsf[i];
|
||||||
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 8);
|
|
||||||
ClientReliableWrite_Byte(client->controller, pnum);
|
|
||||||
ClientReliableWrite_Byte(client->controller, svcfte_updatestatfloat);
|
|
||||||
ClientReliableWrite_Byte(client->controller, i);
|
|
||||||
ClientReliableWrite_Float(client->controller, statsf[i]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ClientReliableWrite_Begin(client, svcfte_updatestatfloat, 6);
|
|
||||||
ClientReliableWrite_Byte(client, i);
|
|
||||||
ClientReliableWrite_Float(client, statsf[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
client->statsf[i] = statsf[i];
|
|
||||||
/*make sure statsf is correct*/
|
|
||||||
client->statsi[i] = statsf[i];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (statsi[i] != client->statsi[i])
|
if (statsi[i] != client->statsi[i])
|
||||||
{
|
{
|
||||||
client->statsi[i] = statsi[i];
|
client->statsi[i] = statsi[i];
|
||||||
client->statsf[i] = statsi[i];
|
client->statsf[i] = statsi[i];
|
||||||
|
|
Loading…
Reference in a new issue