From f13a87f02138914baf174ce567815b106c293386 Mon Sep 17 00:00:00 2001 From: Spoike Date: Tue, 3 Mar 2015 07:54:10 +0000 Subject: [PATCH] Added EF_BRIGHTFIELD to classic particles. fix r_softwarebanding fix r_waterstyle git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4842 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/cl_ents.c | 40 ++++-- engine/client/cl_main.c | 1 + engine/client/cl_tent.c | 2 +- engine/client/client.h | 1 + engine/client/p_classic.c | 221 ++++++++++++++++++++++-------- engine/client/r_part.c | 19 ++- engine/common/particles.h | 2 +- engine/gl/gl_backend.c | 2 +- engine/gl/gl_model.c | 10 +- engine/gl/gl_model.h | 20 +-- engine/gl/gl_shader.c | 9 +- engine/gl/glquake.h | 2 +- engine/gl/r_bishaders.h | 2 + engine/shaders/glsl/altwater.glsl | 2 + fteqtv/protocol.h | 2 +- fteqtv/qw.c | 6 +- 16 files changed, 241 insertions(+), 100 deletions(-) diff --git a/engine/client/cl_ents.c b/engine/client/cl_ents.c index 498ef136..d10332c6 100644 --- a/engine/client/cl_ents.c +++ b/engine/client/cl_ents.c @@ -2890,6 +2890,8 @@ static void CL_TransitionPacketEntities(int newsequence, packet_entities_t *newp float *snew__origin; float *sold__origin; + qboolean isnew; + vec3_t move; float a1, a2; @@ -2927,8 +2929,6 @@ static void CL_TransitionPacketEntities(int newsequence, packet_entities_t *newp rag_removedeltaent(le); #endif } - if (!sold) //I'm lazy - sold = snew; if (snew->number >= cl.maxlerpents) { @@ -2941,6 +2941,14 @@ static void CL_TransitionPacketEntities(int newsequence, packet_entities_t *newp le->sequence = newsequence; le->entstate = snew; + if (!sold) + { + isnew = true; + sold = snew; //don't crash if anything tries poking sold + } + else + isnew = false; + if (snew->u.q1.pmovetype) { if (!cl.do_lerp_players) @@ -2948,7 +2956,7 @@ static void CL_TransitionPacketEntities(int newsequence, packet_entities_t *newp entity_state_t *from; float age; packet_entities_t *latest; - if (sold == snew) + if (isnew) { /*keep trails correct*/ le->isnew = true; @@ -2998,12 +3006,12 @@ static void CL_TransitionPacketEntities(int newsequence, packet_entities_t *newp VectorSubtract(snew__origin, sold__origin, move); if (DotProduct(move, move) > 200*200 || snew->modelindex != sold->modelindex) { - sold = snew; //teleported? + isnew = true; //disable lerping (and indirectly trails) VectorClear(move); } VectorCopy(le->origin, le->lastorigin); - if (sold == snew) + if (isnew) { //new this frame (or we noticed something changed significantly) VectorCopy(snew__origin, le->origin); @@ -3075,7 +3083,7 @@ static void CL_TransitionPacketEntities(int newsequence, packet_entities_t *newp } } - CL_UpdateNetFrameLerpState(sold == snew, snew->frame, le); + CL_UpdateNetFrameLerpState(isnew, snew->frame, le); } } @@ -3584,8 +3592,16 @@ void CL_LinkPacketEntities (void) if (model2) CL_AddVWeapModel (ent, model2); + //figure out which trail this entity is using + trailef = model->particletrail; + trailidx = model->traildefaultindex; + if (state->effects & EF_HASPARTICLETRAIL) + P_DefaultTrail (state->effects, modelflags, &trailef, &trailidx); + if (state->u.q1.traileffectnum) + trailef = CL_TranslateParticleFromServer(state->u.q1.traileffectnum); + // add automatic particle trails - if (!model || (!(modelflags&~MF_ROTATE) && model->particletrail<0 && model->particleeffect<0 && state->u.q1.traileffectnum==0)) + if (!model || (!(modelflags&~MF_ROTATE) && trailef < 0)) continue; if (!cls.allow_anyparticles && !(modelflags & ~MF_ROTATE)) @@ -3609,14 +3625,6 @@ void CL_LinkPacketEntities (void) } } - //figure out which trail this entity is using - trailef = model->particletrail; - trailidx = model->traildefaultindex; - if (state->effects & 0xff800000) - P_DefaultTrail (modelflags, &trailef, &trailidx); - if (state->u.q1.traileffectnum) - trailef = CL_TranslateParticleFromServer(state->u.q1.traileffectnum); - //and emit it if (trailef == P_INVALID || pe->ParticleTrail (old_origin, ent->origin, trailef, ent->keynum, ent->axis, &(le->trailstate))) if (model->traildefaultindex >= 0) @@ -4977,6 +4985,7 @@ Made up of: clients, packet_entities, nails, and tents */ void CL_ClearEntityLists(void) { + cl_framecount++; if (cl_numvisedicts+128 >= cl_maxvisedicts) { int newnum = cl_maxvisedicts + 256; @@ -4994,6 +5003,7 @@ void CL_ClearEntityLists(void) } void CL_FreeVisEdicts(void) { + cl_framecount++; BZ_Free(cl_visedicts); cl_visedicts = NULL; cl_maxvisedicts = 0; diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index a03255fa..67c6ed37 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -211,6 +211,7 @@ int rtlights_first, rtlights_max; int cl_numvisedicts; int cl_maxvisedicts; entity_t *cl_visedicts; +int cl_framecount; scenetris_t *cl_stris; vecV_t *fte_restrict cl_strisvertv; diff --git a/engine/client/cl_tent.c b/engine/client/cl_tent.c index 5ba92d33..1a194cae 100644 --- a/engine/client/cl_tent.c +++ b/engine/client/cl_tent.c @@ -489,7 +489,7 @@ void P_LoadedModel(model_t *mod) } } if (mod->particletrail == P_INVALID) - P_DefaultTrail(mod->flags, &mod->particletrail, &mod->traildefaultindex); + P_DefaultTrail(0, mod->flags, &mod->particletrail, &mod->traildefaultindex); } void CL_RefreshCustomTEnts(void); diff --git a/engine/client/client.h b/engine/client/client.h index 6e28a5cd..7c4a1487 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -952,6 +952,7 @@ char *CL_TryingToConnect(void); void CL_ExecInitialConfigs(char *defaultexec); +extern int cl_framecount; //number of times the entity lists have been cleared+reset. extern int cl_numvisedicts; extern int cl_maxvisedicts; extern entity_t *cl_visedicts; diff --git a/engine/client/p_classic.c b/engine/client/p_classic.c index 8ddd45db..1fc13936 100644 --- a/engine/client/p_classic.c +++ b/engine/client/p_classic.c @@ -39,6 +39,8 @@ typedef enum { TRACER2_TRAIL, VOOR_TRAIL, + BRIGHTFIELD_POINT, + BLOBEXPLOSION_POINT, LAVASPLASH_POINT, EXPLOSION_POINT, @@ -64,7 +66,9 @@ typedef struct cparticle_s pt_blob, pt_blob2, pt_grav, - pt_slowgrav + pt_slowgrav, + + pt_oneframe } type; unsigned int rgb; struct cparticle_s *next; @@ -77,6 +81,8 @@ static int r_numparticles; static cparticle_t *particles, *fte_restrict active_particles, *free_particles; extern cvar_t r_part_density, r_part_classic_expgrav; +static unsigned int particleframe; + extern qbyte default_quakepal[]; /*for ramps more than anything else*/ static int ramp1[8] = {0x6f, 0x6d, 0x6b, 0x69, 0x67, 0x65, 0x63, 0x61}; static int ramp2[8] = {0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x68, 0x66}; @@ -130,6 +136,8 @@ static int PClassic_FindParticleType(const char *name) return TELEPORTSPLASH_POINT; if (!stricmp("te_muzzleflash", name)) return MUZZLEFLASH_POINT; + if (!stricmp("ef_brightfield", name)) + return BRIGHTFIELD_POINT; return P_INVALID; } @@ -176,6 +184,9 @@ static qboolean PClassic_Query(int type, int body, char *outstr, int outstrlen) case TELEPORTSPLASH_POINT: n = "te_teleport"; break; + case BRIGHTFIELD_POINT: + n = "ef_brightfield"; + break; } if (!n) @@ -329,6 +340,27 @@ static void PClassic_ClearParticles (void) particles[r_numparticles - 1].next = NULL; } +//some particles (brightfield) must last only one frame +static void PClassic_ClearPerFrame(void) +{ + if (particleframe != -1 && particleframe != cl_framecount) + { + cparticle_t **link, *kill; + for (link = &active_particles; *link; ) + { + if ((*link)->type == pt_oneframe) + { + kill = *link; + *link = kill->next; + kill->next = free_particles; + free_particles = kill; + } + else + link = &(*link)->next; + } + } +} + //draws all the active particles. static void PClassic_DrawParticles(void) { @@ -351,6 +383,12 @@ static void PClassic_DrawParticles(void) return; } + if (particleframe != -1 && particleframe != cl_framecount) + { + PClassic_ClearPerFrame(); + particleframe = -1; + } + r_partscale = 0.004 * tan (r_refdef.fov_x * (M_PI / 180) * 0.5f); VectorScale (vup, 1.5, up); VectorScale (vright, 1.5, right); @@ -486,6 +524,7 @@ static void PClassic_DrawParticles(void) switch (p->type) { + case pt_oneframe: case pt_static: break; case pt_fire: @@ -743,6 +782,126 @@ static void Classic_TeleportSplash (vec3_t org) } } +#define NUMVERTEXNORMALS 162 +//vec3_t avelocity = {23, 7, 3}; +//float partstep = 0.01; +//float timescale = 0.01; +static vec3_t avelocities[NUMVERTEXNORMALS]; +static void Classic_BrightField (vec3_t org) +{ + extern float r_avertexnormals[NUMVERTEXNORMALS][3]; + float beamlength = 16; + + int count; + int i; + cparticle_t *p; + float angle; + float sr, sp, sy, cr, cp, cy; + vec3_t forward; + float dist; + + PClassic_ClearPerFrame(); + particleframe = cl_framecount; + + dist = 64; + count = 50; + + if (!avelocities[0][0]) + { + for (i=0 ; inext; + p->next = active_particles; + active_particles = p; + + angle = cl.time * avelocities[i][0]; + sy = sin(angle); + cy = cos(angle); + angle = cl.time * avelocities[i][1]; + sp = sin(angle); + cp = cos(angle); + angle = cl.time * avelocities[i][2]; + sr = sin(angle); + cr = cos(angle); + + forward[0] = cp*cy; + forward[1] = cp*sy; + forward[2] = -sp; + + p->die = cl.time;// + 0.01; + p->rgb = d_8to24rgbtable[0x6f]; + p->type = pt_oneframe; + + p->org[0] = org[0] + r_avertexnormals[i][0]*dist + forward[0]*beamlength; + p->org[1] = org[1] + r_avertexnormals[i][1]*dist + forward[1]*beamlength; + p->org[2] = org[2] + r_avertexnormals[i][2]*dist + forward[2]*beamlength; + } +} + +//svc_tempentity support: this is the function that handles 'special' point effects. +//use the trail state so fast/slow frames keep the correct particle counts on certain every-frame effects +static int PClassic_RunParticleEffectState (vec3_t org, vec3_t dir, float count, int typenum, trailstate_t **tsk) +{ + switch(typenum) + { + case BRIGHTFIELD_POINT: + Classic_BrightField(org); + break; + case BLOBEXPLOSION_POINT: + Classic_BlobExplosion(org); + break; + case LAVASPLASH_POINT: + Classic_LavaSplash(org); + break; + case EXPLOSION_POINT: + Classic_ParticleExplosion(org); + break; + case TELEPORTSPLASH_POINT: + Classic_TeleportSplash(org); + break; + case MUZZLEFLASH_POINT: + { + dlight_t *dl = CL_AllocDlight (0); + if (dir) + VectorCopy(dir, dl->axis[0]); + else + VectorSet(dir, 0, 0, 1); + VectorVectors(dl->axis[0], dl->axis[1], dl->axis[2]); + VectorInverse(dl->axis[1]); + if (dir) + VectorMA (org, 15, dl->axis[0], dl->origin); + else + VectorCopy (org, dl->origin); + + dl->radius = 200 + (rand()&31); + dl->minlight = 32; + dl->die = cl.time + 0.1; + dl->color[0] = 1.5; + dl->color[1] = 1.3; + dl->color[2] = 1.0; + + dl->channelfade[0] = 1.5; + dl->channelfade[1] = 0.75; + dl->channelfade[2] = 0.375; + dl->decay = 1000; +#ifdef RTLIGHTS + dl->lightcolourscales[2] = 4; +#endif + } + break; + default: + return 1; + } + return 0; +} + static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, effect_type_t type) { vec3_t point, delta, dir; @@ -751,6 +910,12 @@ static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, ef cparticle_t *p; static int tracercount; + if (type >= BRIGHTFIELD_POINT) + { + PClassic_RunParticleEffectState(end, vec3_origin, 1, type, NULL); + return 0; + } + VectorCopy (start, point); VectorSubtract (end, start, delta); if (!(len = VectorLength (delta))) @@ -882,60 +1047,6 @@ static int PClassic_ParticleTrail (vec3_t startpos, vec3_t end, int type, int dl return 0; } -//svc_tempentity support: this is the function that handles 'special' point effects. -//use the trail state so fast/slow frames keep the correct particle counts on certain every-frame effects -static int PClassic_RunParticleEffectState (vec3_t org, vec3_t dir, float count, int typenum, trailstate_t **tsk) -{ - switch(typenum) - { - case BLOBEXPLOSION_POINT: - Classic_BlobExplosion(org); - break; - case LAVASPLASH_POINT: - Classic_LavaSplash(org); - break; - case EXPLOSION_POINT: - Classic_ParticleExplosion(org); - break; - case TELEPORTSPLASH_POINT: - Classic_TeleportSplash(org); - break; - case MUZZLEFLASH_POINT: - { - dlight_t *dl = CL_AllocDlight (0); - if (dir) - VectorCopy(dir, dl->axis[0]); - else - VectorSet(dir, 0, 0, 1); - VectorVectors(dl->axis[0], dl->axis[1], dl->axis[2]); - VectorInverse(dl->axis[1]); - if (dir) - VectorMA (org, 15, dl->axis[0], dl->origin); - else - VectorCopy (org, dl->origin); - - dl->radius = 200 + (rand()&31); - dl->minlight = 32; - dl->die = cl.time + 0.1; - dl->color[0] = 1.5; - dl->color[1] = 1.3; - dl->color[2] = 1.0; - - dl->channelfade[0] = 1.5; - dl->channelfade[1] = 0.75; - dl->channelfade[2] = 0.375; - dl->decay = 1000; -#ifdef RTLIGHTS - dl->lightcolourscales[2] = 4; -#endif - } - break; - default: - return 1; - } - return 0; -} - //svc_particle support: add X particles with the given colour, velocity, and aproximate origin. static void PClassic_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count) { diff --git a/engine/client/r_part.c b/engine/client/r_part.c index 9f866f9f..147a33ec 100644 --- a/engine/client/r_part.c +++ b/engine/client/r_part.c @@ -818,14 +818,29 @@ static void P_SelectableTrail(int *trailid, int *trailpalidx, cvar_t *selection, //figure out which particle trail to use for the given model, filling in its values as required. -void P_DefaultTrail (unsigned int modelflags, int *trailid, int *trailpalidx) +void P_DefaultTrail (unsigned int entityeffects, unsigned int modelflags, int *trailid, int *trailpalidx) { // TODO: EF_BRIGHTFIELD should probably be handled in here somewhere // TODO: make trail default color into RGB values instead of indexes if (!pe) return; - if (modelflags & MF_ROCKET) + if (entityeffects & EF_BRIGHTFIELD) + { + *trailid = P_FindParticleType("EF_BRIGHTFIELD"); + *trailpalidx = 70; + } + else if (entityeffects & DPEF_FLAME) + { + *trailid = P_FindParticleType("EF_FLAME"); + *trailpalidx = 70; + } + else if (entityeffects & DPEF_STARDUST) + { + *trailid = P_FindParticleType("EF_STARDUST"); + *trailpalidx = 70; + } + else if (modelflags & MF_ROCKET) P_SelectableTrail(trailid, trailpalidx, &r_rockettrail, P_FindParticleType("TR_ROCKET"), 109, P_FindParticleType("TR_GRENADE"), 6); else if (modelflags & MF_GRENADE) P_SelectableTrail(trailid, trailpalidx, &r_grenadetrail, P_FindParticleType("TR_GRENADE"), 6, P_FindParticleType("TR_ROCKET"), 109); diff --git a/engine/common/particles.h b/engine/common/particles.h index d2f2aae9..e2ae1d8d 100644 --- a/engine/common/particles.h +++ b/engine/common/particles.h @@ -99,7 +99,7 @@ struct msurface_s; void P_InitParticleSystem(void); void P_Shutdown(void); void P_LoadedModel(struct model_s *mod); /*checks a model's various effects*/ -void P_DefaultTrail (unsigned int modelflags, int *trailid, int *trailpalidx); +void P_DefaultTrail (unsigned int entityeffects, unsigned int modelflags, int *trailid, int *trailpalidx); void P_EmitEffect (vec3_t pos, int type, trailstate_t **tsk);//this is just a wrapper #define P_FindParticleType pe->FindParticleType diff --git a/engine/gl/gl_backend.c b/engine/gl/gl_backend.c index 1d86b3a3..82c585f8 100644 --- a/engine/gl/gl_backend.c +++ b/engine/gl/gl_backend.c @@ -1130,7 +1130,7 @@ static void Shader_BindTextureForPass(int tmu, const shaderpass_t *pass) if (shaderstate.curtexnums && TEXLOADED(shaderstate.curtexnums->paletted)) t = shaderstate.curtexnums->paletted; else - t = missing_texture; + t = r_whiteimage; break; case T_GEN_NORMALMAP: t = (shaderstate.curtexnums && TEXLOADED(shaderstate.curtexnums->bump))?shaderstate.curtexnums->bump:missing_texture_normal; diff --git a/engine/gl/gl_model.c b/engine/gl/gl_model.c index 639f64f5..fe0c0779 100644 --- a/engine/gl/gl_model.c +++ b/engine/gl/gl_model.c @@ -1208,14 +1208,8 @@ void Mod_FinishTexture(texture_t *tx, const char *loadname) else { unsigned int maps = 0; - if (r_softwarebanding.ival) - maps |= SHADER_HASPALETTED; - if (!r_softwarebanding.ival -#ifdef RTLIGHTS - || r_shadow_realtime_world.ival || r_shadow_realtime_dlight.ival -#endif - ) - maps |= SHADER_HASDIFFUSE; + maps |= SHADER_HASPALETTED; + maps |= SHADER_HASDIFFUSE; if (r_fb_bmodels.ival) maps |= SHADER_HASFULLBRIGHT; if (r_loadbumpmapping || (r_waterstyle.ival > 1 && *tx->name == '*')) diff --git a/engine/gl/gl_model.h b/engine/gl/gl_model.h index a7817623..e1663486 100644 --- a/engine/gl/gl_model.h +++ b/engine/gl/gl_model.h @@ -162,20 +162,20 @@ m*_t structures are in-memory #define EF_BLUE (1<<6) #define EF_RED (1<<7) #define H2EF_NODRAW (1<<7) //this is going to get complicated... emulated server side. -#define _DPEF_NOGUNBOB (1<<8) //viewmodel attachment does not bob +#define DPEF_NOGUNBOB_ (1<<8) //viewmodel attachment does not bob #define EF_FULLBRIGHT (1<<9) //abslight=1 -#define _DPEF_FLAME (1<<10) //'onfire' -#define _DPEF_STARDUST (1<<11) //'showering sparks' +#define DPEF_FLAME (1<<10) //'onfire' +#define DPEF_STARDUST (1<<11) //'showering sparks' #define DPEF_NOSHADOW (1<<12) //doesn't cast a shadow #define EF_NODEPTHTEST (1<<13) //shows through walls. -#define _DPEF_SELECTABLE (1<<14) //highlights when prydoncursored -#define _DPEF_DOUBLESIDED (1<<15) //disables culling -#define _DPEF_NOSELFSHADOW (1<<16) //doesn't cast shadows on any noselfshadow entities. -#define _DPEF_DYNAMICMODELLIGHT (1<<17) +#define DPEF_SELECTABLE_ (1<<14) //highlights when prydoncursored +#define DPEF_DOUBLESIDED_ (1<<15) //disables culling +#define DPEF_NOSELFSHADOW_ (1<<16) //doesn't cast shadows on any noselfshadow entities. +#define DPEF_DYNAMICMODELLIGHT_ (1<<17) #define EF_UNUSED18 (1<<18) #define EF_UNUSED19 (1<<19) -#define _DPEF_RESTARTANIM_BIT (1<<20) //exact semantics seems odd -#define _DPEF_TELEPORT_BIT (1<<21) //disable lerping while set +#define DPEF_RESTARTANIM_BIT_ (1<<20) //exact semantics seems odd +#define DPEF_TELEPORT_BIT_ (1<<21) //disable lerping while set #define DPEF_LOWPRECISION (1<<22) //part of the protocol/server, not the client itself. #define EF_NOMODELFLAGS (1<<23) #define EF_MF_ROCKET (1<<24) @@ -187,6 +187,8 @@ m*_t structures are in-memory #define EF_MF_TRACER2 (1u<<30) #define EF_MF_TRACER3 (1u<<31) +#define EF_HASPARTICLETRAIL (0xff800000 | EF_BRIGHTFIELD|DPEF_FLAME|DPEF_STARDUST) + /* ============================================================================== diff --git a/engine/gl/gl_shader.c b/engine/gl/gl_shader.c index 2a1de0a4..358df85d 100644 --- a/engine/gl/gl_shader.c +++ b/engine/gl/gl_shader.c @@ -2235,7 +2235,7 @@ static void Shaderpass_Map (shader_t *shader, shaderpass_t *pass, char **ptr) if (pass->tcgen == TC_GEN_UNSPECIFIED) pass->tcgen = TC_GEN_BASE; - if (!*shader->mapname && pass->tcgen == TC_GEN_BASE) + if (!*shader->mapname && *token != '$' && pass->tcgen == TC_GEN_BASE) Q_strncpyz(shader->mapname, token, sizeof(shader->mapname)); pass->anim_frames[0] = Shader_FindImage (token, flags); } @@ -3879,7 +3879,10 @@ done:; if (best) { if (best->texgen == T_GEN_ANIMMAP || best->texgen == T_GEN_SINGLEMAP) - s->defaulttextures.base = best->anim_frames[0]; + { + if (best->anim_frames[0] && *best->anim_frames[0]->ident != '$') + s->defaulttextures.base = best->anim_frames[0]; + } #ifndef NOMEDIA else if (pass->texgen == T_GEN_VIDEOMAP && pass->cin) s->defaulttextures.base = Media_UpdateForShader(best->cin); @@ -4293,7 +4296,7 @@ void QDECL R_BuildLegacyTexnums(shader_t *shader, const char *subpath, unsigned if (!TEXVALID(tex->bump) && *shader->mapname) tex->bump = R_LoadHiResTexture(va("%s_norm", shader->mapname), NULL, imageflags|IF_TRYBUMP); if (!TEXVALID(tex->bump)) - tex->bump = Image_GetTexture(va("%s_norm", imagename), subpath, imageflags|IF_TRYBUMP, r_shadow_bumpscale_basetexture.ival?mipdata[0]:NULL, palette, width, height, TF_HEIGHT8PAL); + tex->bump = Image_GetTexture(va("%s_norm", imagename), subpath, imageflags|IF_TRYBUMP, (r_shadow_bumpscale_basetexture.ival||*imagename=='*')?mipdata[0]:NULL, palette, width, height, TF_HEIGHT8PAL); } if (loadflags & SHADER_HASTOPBOTTOM) diff --git a/engine/gl/glquake.h b/engine/gl/glquake.h index 6f2986c2..91e15c9b 100644 --- a/engine/gl/glquake.h +++ b/engine/gl/glquake.h @@ -277,7 +277,7 @@ extern entity_t r_worldentity; extern vec3_t r_entorigin; extern entity_t *currententity; extern int r_visframecount; // ??? what difs? -extern int r_framecount; +extern int r_framecount; //number of scenes drawn (specifically, number of times the world is frustum culled) extern qboolean r_loadbumpmapping; diff --git a/engine/gl/r_bishaders.h b/engine/gl/r_bishaders.h index 4776565b..99bd1731 100644 --- a/engine/gl/r_bishaders.h +++ b/engine/gl/r_bishaders.h @@ -53,6 +53,8 @@ YOU SHOULD NOT EDIT THIS FILE BY HAND "#define s_refractdepth s_t3\n" "uniform float cvar_r_glsl_turbscale;\n" +"uniform sampler2D s_normalmap;\n" +"uniform sampler2D s_diffuse;\n" "uniform sampler2D s_refract; //refract\n" "uniform sampler2D s_reflect; //reflection\n" "uniform sampler2D s_refractdepth; //refraction depth\n" diff --git a/engine/shaders/glsl/altwater.glsl b/engine/shaders/glsl/altwater.glsl index ebc9ff17..4e3a3312 100644 --- a/engine/shaders/glsl/altwater.glsl +++ b/engine/shaders/glsl/altwater.glsl @@ -46,6 +46,8 @@ void main (void) #define s_refractdepth s_t3 uniform float cvar_r_glsl_turbscale; +uniform sampler2D s_normalmap; +uniform sampler2D s_diffuse; uniform sampler2D s_refract; //refract uniform sampler2D s_reflect; //reflection uniform sampler2D s_refractdepth; //refraction depth diff --git a/fteqtv/protocol.h b/fteqtv/protocol.h index c6ef9c71..1c4b0197 100644 --- a/fteqtv/protocol.h +++ b/fteqtv/protocol.h @@ -33,7 +33,7 @@ #define MAX_STATS 32 #define STAT_HEALTH 0 #define STAT_FRAGS 1 -#define STAT_WEAPON 2 +#define STAT_WEAPONMODELI 2 #define STAT_AMMO 3 #define STAT_ARMOR 4 #define STAT_WEAPONFRAME 5 diff --git a/fteqtv/qw.c b/fteqtv/qw.c index aa1f72c8..70c7302c 100644 --- a/fteqtv/qw.c +++ b/fteqtv/qw.c @@ -798,7 +798,7 @@ void ParseUserInfo(cluster_t *cluster, viewer_t *viewer) void NewNQClient(cluster_t *cluster, netadr_t *addr) { - sv_t *initialserver; +// sv_t *initialserver; int header; int len; int i; @@ -873,7 +873,7 @@ void NewNQClient(cluster_t *cluster, netadr_t *addr) void NewQWClient(cluster_t *cluster, netadr_t *addr, char *connectmessage) { - sv_t *initialserver; +// sv_t *initialserver; viewer_t *viewer; char qport[32]; @@ -1609,7 +1609,7 @@ void SendNQClientData(sv_t *tv, viewer_t *v, netmsg_t *msg) if (bits & SU_ARMOR) WriteByte (msg, pl->stats[STAT_ARMOR]); if (bits & SU_WEAPON) - WriteByte (msg, pl->stats[STAT_WEAPON]); + WriteByte (msg, pl->stats[STAT_WEAPONMODELI]); WriteShort (msg, pl->stats[STAT_HEALTH]); WriteByte (msg, pl->stats[STAT_AMMO]);