mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-18 19:10:37 +00:00
engine: client: refactor tempentity parsing, make multipliers close to GoldSrc
This commit is contained in:
parent
56103a90eb
commit
0fa1b4f944
@ -46,7 +46,7 @@ short GAME_EXPORT R_LookupColor( byte r, byte g, byte b )
|
|||||||
float rf, gf, bf;
|
float rf, gf, bf;
|
||||||
|
|
||||||
bestdiff = 999999;
|
bestdiff = 999999;
|
||||||
best = 65535;
|
best = -1;
|
||||||
|
|
||||||
for( i = 0; i < 256; i++ )
|
for( i = 0; i < 256; i++ )
|
||||||
{
|
{
|
||||||
@ -683,42 +683,46 @@ void CL_ParseViewBeam( sizebuf_t *msg, int beamType )
|
|||||||
switch( beamType )
|
switch( beamType )
|
||||||
{
|
{
|
||||||
case TE_BEAMPOINTS:
|
case TE_BEAMPOINTS:
|
||||||
start[0] = MSG_ReadCoord( msg );
|
|
||||||
start[1] = MSG_ReadCoord( msg );
|
|
||||||
start[2] = MSG_ReadCoord( msg );
|
|
||||||
end[0] = MSG_ReadCoord( msg );
|
|
||||||
end[1] = MSG_ReadCoord( msg );
|
|
||||||
end[2] = MSG_ReadCoord( msg );
|
|
||||||
modelIndex = MSG_ReadShort( msg );
|
|
||||||
startFrame = MSG_ReadByte( msg );
|
|
||||||
frameRate = (float)MSG_ReadByte( msg );
|
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
width = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
noise = (float)(MSG_ReadByte( msg ) * 0.01f);
|
|
||||||
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
speed = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
R_BeamPoints( start, end, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
|
||||||
break;
|
|
||||||
case TE_BEAMENTPOINT:
|
case TE_BEAMENTPOINT:
|
||||||
startEnt = MSG_ReadShort( msg );
|
case TE_BEAMENTS:
|
||||||
end[0] = MSG_ReadCoord( msg );
|
if( beamType == TE_BEAMENTS )
|
||||||
end[1] = MSG_ReadCoord( msg );
|
{
|
||||||
end[2] = MSG_ReadCoord( msg );
|
startEnt = MSG_ReadShort( msg );
|
||||||
|
endEnt = MSG_ReadShort( msg );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( beamType == TE_BEAMENTPOINT )
|
||||||
|
{
|
||||||
|
startEnt = MSG_ReadShort( msg );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start[0] = MSG_ReadCoord( msg );
|
||||||
|
start[1] = MSG_ReadCoord( msg );
|
||||||
|
start[2] = MSG_ReadCoord( msg );
|
||||||
|
}
|
||||||
|
end[0] = MSG_ReadCoord( msg );
|
||||||
|
end[1] = MSG_ReadCoord( msg );
|
||||||
|
end[2] = MSG_ReadCoord( msg );
|
||||||
|
}
|
||||||
modelIndex = MSG_ReadShort( msg );
|
modelIndex = MSG_ReadShort( msg );
|
||||||
startFrame = MSG_ReadByte( msg );
|
startFrame = MSG_ReadByte( msg );
|
||||||
frameRate = (float)MSG_ReadByte( msg );
|
frameRate = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
life = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
width = (float)(MSG_ReadByte( msg ) * 0.1f);
|
width = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
noise = (float)(MSG_ReadByte( msg ) * 0.01f);
|
noise = (float)MSG_ReadByte( msg ) * 0.01f;
|
||||||
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
speed = (float)(MSG_ReadByte( msg ) * 0.1f);
|
speed = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
R_BeamEntPoint( startEnt, end, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
if( beamType == TE_BEAMENTS )
|
||||||
|
R_BeamEnts( startEnt, endEnt, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
||||||
|
else if( beamType == TE_BEAMENTPOINT )
|
||||||
|
R_BeamEntPoint( startEnt, end, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
||||||
|
else
|
||||||
|
R_BeamPoints( start, end, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
||||||
break;
|
break;
|
||||||
case TE_LIGHTNING:
|
case TE_LIGHTNING:
|
||||||
start[0] = MSG_ReadCoord( msg );
|
start[0] = MSG_ReadCoord( msg );
|
||||||
@ -727,27 +731,11 @@ void CL_ParseViewBeam( sizebuf_t *msg, int beamType )
|
|||||||
end[0] = MSG_ReadCoord( msg );
|
end[0] = MSG_ReadCoord( msg );
|
||||||
end[1] = MSG_ReadCoord( msg );
|
end[1] = MSG_ReadCoord( msg );
|
||||||
end[2] = MSG_ReadCoord( msg );
|
end[2] = MSG_ReadCoord( msg );
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
life = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
width = (float)(MSG_ReadByte( msg ) * 0.1f);
|
width = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
noise = (float)(MSG_ReadByte( msg ) * 0.01f);
|
noise = (float)MSG_ReadByte( msg ) * 0.01f;
|
||||||
modelIndex = MSG_ReadShort( msg );
|
modelIndex = MSG_ReadShort( msg );
|
||||||
R_BeamLightning( start, end, modelIndex, life, width, noise, 0.6F, 3.5f );
|
R_BeamLightning( start, end, modelIndex, life, width, noise, 0.6f, 3.5f );
|
||||||
break;
|
|
||||||
case TE_BEAMENTS:
|
|
||||||
startEnt = MSG_ReadShort( msg );
|
|
||||||
endEnt = MSG_ReadShort( msg );
|
|
||||||
modelIndex = MSG_ReadShort( msg );
|
|
||||||
startFrame = MSG_ReadByte( msg );
|
|
||||||
frameRate = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
width = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
noise = (float)(MSG_ReadByte( msg ) * 0.01f);
|
|
||||||
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
|
||||||
speed = (float)(MSG_ReadByte( msg ) * 0.1f);
|
|
||||||
R_BeamEnts( startEnt, endEnt, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
|
||||||
break;
|
break;
|
||||||
case TE_BEAM:
|
case TE_BEAM:
|
||||||
break;
|
break;
|
||||||
@ -773,21 +761,21 @@ void CL_ParseViewBeam( sizebuf_t *msg, int beamType )
|
|||||||
end[2] = MSG_ReadCoord( msg );
|
end[2] = MSG_ReadCoord( msg );
|
||||||
modelIndex = MSG_ReadShort( msg );
|
modelIndex = MSG_ReadShort( msg );
|
||||||
startFrame = MSG_ReadByte( msg );
|
startFrame = MSG_ReadByte( msg );
|
||||||
frameRate = (float)(MSG_ReadByte( msg ));
|
frameRate = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
life = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
width = (float)(MSG_ReadByte( msg ));
|
width = (float)MSG_ReadByte( msg );
|
||||||
noise = (float)(MSG_ReadByte( msg ) * 0.1f);
|
noise = (float)MSG_ReadByte( msg ) * 0.01f;
|
||||||
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
speed = (float)(MSG_ReadByte( msg ) / 0.1f);
|
speed = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
R_BeamCirclePoints( beamType, start, end, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
R_BeamCirclePoints( beamType, start, end, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
||||||
break;
|
break;
|
||||||
case TE_BEAMFOLLOW:
|
case TE_BEAMFOLLOW:
|
||||||
startEnt = MSG_ReadShort( msg );
|
startEnt = MSG_ReadShort( msg );
|
||||||
modelIndex = MSG_ReadShort( msg );
|
modelIndex = MSG_ReadShort( msg );
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
life = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
width = (float)MSG_ReadByte( msg );
|
width = (float)MSG_ReadByte( msg );
|
||||||
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
@ -800,15 +788,15 @@ void CL_ParseViewBeam( sizebuf_t *msg, int beamType )
|
|||||||
endEnt = MSG_ReadShort( msg );
|
endEnt = MSG_ReadShort( msg );
|
||||||
modelIndex = MSG_ReadShort( msg );
|
modelIndex = MSG_ReadShort( msg );
|
||||||
startFrame = MSG_ReadByte( msg );
|
startFrame = MSG_ReadByte( msg );
|
||||||
frameRate = (float)MSG_ReadByte( msg );
|
frameRate = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
life = (float)(MSG_ReadByte( msg ) * 0.1f);
|
life = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
width = (float)(MSG_ReadByte( msg ) * 0.1f);
|
width = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
noise = (float)(MSG_ReadByte( msg ) * 0.01f);
|
noise = (float)MSG_ReadByte( msg ) * 0.01f;
|
||||||
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
r = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
g = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
b = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
a = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||||
speed = (float)(MSG_ReadByte( msg ) * 0.1f);
|
speed = (float)MSG_ReadByte( msg ) * 0.1f;
|
||||||
R_BeamRing( startEnt, endEnt, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
R_BeamRing( startEnt, endEnt, modelIndex, life, width, noise, a, speed, startFrame, frameRate, r, g, b );
|
||||||
break;
|
break;
|
||||||
case TE_BEAMHOSE:
|
case TE_BEAMHOSE:
|
||||||
@ -1265,7 +1253,7 @@ void GAME_EXPORT R_BloodStream( const vec3_t org, const vec3_t dir, int pcolor,
|
|||||||
particle_t *p;
|
particle_t *p;
|
||||||
int i, j;
|
int i, j;
|
||||||
float arc;
|
float arc;
|
||||||
float accel = speed;
|
int accel = speed; // must be integer due to bug in GoldSrc
|
||||||
|
|
||||||
for( arc = 0.05f, i = 0; i < 100; i++ )
|
for( arc = 0.05f, i = 0; i < 100; i++ )
|
||||||
{
|
{
|
||||||
|
@ -1515,17 +1515,18 @@ R_RicochetSound
|
|||||||
Make a random ricochet sound
|
Make a random ricochet sound
|
||||||
==============
|
==============
|
||||||
*/
|
*/
|
||||||
void GAME_EXPORT R_RicochetSound( const vec3_t pos )
|
static void R_RicochetSound_( const vec3_t pos, int sound )
|
||||||
{
|
{
|
||||||
int iPitch = COM_RandomLong( 90, 105 );
|
|
||||||
float fvol = COM_RandomFloat( 0.7f, 0.9f );
|
|
||||||
char soundpath[32];
|
|
||||||
sound_t handle;
|
sound_t handle;
|
||||||
|
|
||||||
Q_strncpy( soundpath, cl_ricochet_sounds[COM_RandomLong( 0, 4 )], sizeof( soundpath ) );
|
handle = S_RegisterSound( cl_ricochet_sounds[sound] );
|
||||||
handle = S_RegisterSound( soundpath );
|
|
||||||
|
|
||||||
S_StartSound( pos, 0, CHAN_AUTO, handle, fvol, ATTN_NORM, iPitch, 0 );
|
S_StartSound( pos, 0, CHAN_AUTO, handle, VOL_NORM, 1.0, 100, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
void GAME_EXPORT R_RicochetSound( const vec3_t pos )
|
||||||
|
{
|
||||||
|
R_RicochetSound_( pos, COM_RandomLong( 0, 4 ));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1656,7 +1657,7 @@ void GAME_EXPORT R_Explosion( vec3_t pos, int model, float scale, float framerat
|
|||||||
dl->color.g = 250;
|
dl->color.g = 250;
|
||||||
dl->color.b = 150;
|
dl->color.b = 150;
|
||||||
dl->die = cl.time + 0.01f;
|
dl->die = cl.time + 0.01f;
|
||||||
dl->decay = 80;
|
dl->decay = 800;
|
||||||
|
|
||||||
// red glow
|
// red glow
|
||||||
dl = CL_AllocDlight( 0 );
|
dl = CL_AllocDlight( 0 );
|
||||||
@ -1915,6 +1916,7 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
|||||||
TEMPENTITY *pTemp;
|
TEMPENTITY *pTemp;
|
||||||
cl_entity_t *pEnt;
|
cl_entity_t *pEnt;
|
||||||
dlight_t *dl;
|
dlight_t *dl;
|
||||||
|
sound_t hSound;
|
||||||
|
|
||||||
if( cls.legacymode )
|
if( cls.legacymode )
|
||||||
iSize = MSG_ReadByte( msg );
|
iSize = MSG_ReadByte( msg );
|
||||||
@ -2014,15 +2016,46 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
|||||||
color = MSG_ReadByte( &buf );
|
color = MSG_ReadByte( &buf );
|
||||||
count = MSG_ReadByte( &buf );
|
count = MSG_ReadByte( &buf );
|
||||||
R_ParticleExplosion2( pos, color, count );
|
R_ParticleExplosion2( pos, color, count );
|
||||||
|
|
||||||
|
dl = CL_AllocDlight( 0 );
|
||||||
|
VectorCopy( pos, dl->origin );
|
||||||
|
dl->radius = 350;
|
||||||
|
dl->die = cl.time + 0.5;
|
||||||
|
dl->decay = 300;
|
||||||
|
|
||||||
|
hSound = S_RegisterSound( cl_explode_sounds[0] );
|
||||||
|
S_StartSound( pos, 0, CHAN_STATIC, hSound, VOL_NORM, 0.6f, PITCH_NORM, 0 );
|
||||||
break;
|
break;
|
||||||
case TE_BSPDECAL:
|
case TE_BSPDECAL:
|
||||||
|
case TE_DECAL:
|
||||||
|
case TE_WORLDDECAL:
|
||||||
|
case TE_WORLDDECALHIGH:
|
||||||
|
case TE_DECALHIGH:
|
||||||
pos[0] = MSG_ReadCoord( &buf );
|
pos[0] = MSG_ReadCoord( &buf );
|
||||||
pos[1] = MSG_ReadCoord( &buf );
|
pos[1] = MSG_ReadCoord( &buf );
|
||||||
pos[2] = MSG_ReadCoord( &buf );
|
pos[2] = MSG_ReadCoord( &buf );
|
||||||
decalIndex = MSG_ReadShort( &buf );
|
if( type == TE_BSPDECAL )
|
||||||
entityIndex = MSG_ReadShort( &buf );
|
{
|
||||||
if( entityIndex ) modelIndex = MSG_ReadShort( &buf );
|
decalIndex = MSG_ReadShort( &buf );
|
||||||
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, modelIndex, pos, FDECAL_PERMANENT );
|
entityIndex = MSG_ReadShort( &buf );
|
||||||
|
if( entityIndex )
|
||||||
|
modelIndex = MSG_ReadShort( &buf );
|
||||||
|
else modelIndex = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
decalIndex = MSG_ReadByte( &buf );
|
||||||
|
if( type == TE_DECALHIGH || type == TE_WORLDDECALHIGH )
|
||||||
|
decalIndex += 256;
|
||||||
|
|
||||||
|
if( type == TE_DECALHIGH || type == TE_DECAL )
|
||||||
|
entityIndex = MSG_ReadShort( &buf );
|
||||||
|
else entityIndex = 0;
|
||||||
|
|
||||||
|
pEnt = CL_GetEntityByIndex( entityIndex );
|
||||||
|
modelIndex = pEnt->curstate.modelindex;
|
||||||
|
}
|
||||||
|
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, modelIndex, pos, type == TE_BSPDECAL ? FDECAL_PERMANENT : 0 );
|
||||||
break;
|
break;
|
||||||
case TE_IMPLOSION:
|
case TE_IMPLOSION:
|
||||||
pos[0] = MSG_ReadCoord( &buf );
|
pos[0] = MSG_ReadCoord( &buf );
|
||||||
@ -2042,10 +2075,12 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
|||||||
pos2[2] = MSG_ReadCoord( &buf );
|
pos2[2] = MSG_ReadCoord( &buf );
|
||||||
modelIndex = MSG_ReadShort( &buf );
|
modelIndex = MSG_ReadShort( &buf );
|
||||||
count = MSG_ReadByte( &buf );
|
count = MSG_ReadByte( &buf );
|
||||||
life = (float)(MSG_ReadByte( &buf ) * 0.1f);
|
life = (float)MSG_ReadByte( &buf ) * 0.1f;
|
||||||
scale = (float)(MSG_ReadByte( &buf ) * 0.1f);
|
scale = (float)MSG_ReadByte( &buf );
|
||||||
vel = (float)MSG_ReadByte( &buf );
|
if( !scale ) scale = 1.0f;
|
||||||
random = (float)MSG_ReadByte( &buf );
|
else scale *= 0.1f;
|
||||||
|
vel = (float)MSG_ReadByte( &buf ) * 10;
|
||||||
|
random = (float)MSG_ReadByte( &buf ) * 10;
|
||||||
R_Sprite_Trail( type, pos, pos2, modelIndex, count, life, scale, random, 255, vel );
|
R_Sprite_Trail( type, pos, pos2, modelIndex, count, life, scale, random, 255, vel );
|
||||||
break;
|
break;
|
||||||
case TE_SPRITE:
|
case TE_SPRITE:
|
||||||
@ -2053,36 +2088,23 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
|||||||
pos[1] = MSG_ReadCoord( &buf );
|
pos[1] = MSG_ReadCoord( &buf );
|
||||||
pos[2] = MSG_ReadCoord( &buf );
|
pos[2] = MSG_ReadCoord( &buf );
|
||||||
modelIndex = MSG_ReadShort( &buf );
|
modelIndex = MSG_ReadShort( &buf );
|
||||||
scale = (float)(MSG_ReadByte( &buf ) * 0.1f);
|
scale = (float)MSG_ReadByte( &buf ) * 0.1f;
|
||||||
brightness = (float)MSG_ReadByte( &buf );
|
brightness = (float)MSG_ReadByte( &buf ) / 255.0f;
|
||||||
|
|
||||||
if(( pTemp = R_DefaultSprite( pos, modelIndex, 0 )) != NULL )
|
R_TempSprite( pos, vec3_origin, scale, modelIndex,
|
||||||
{
|
kRenderTransAdd, kRenderFxNone, brightness, 0.0, FTENT_SPRANIMATE );
|
||||||
pTemp->entity.curstate.scale = scale;
|
|
||||||
pTemp->entity.baseline.renderamt = brightness;
|
|
||||||
pTemp->entity.curstate.renderamt = brightness;
|
|
||||||
pTemp->entity.curstate.rendermode = kRenderTransAdd;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case TE_GLOWSPRITE:
|
case TE_GLOWSPRITE:
|
||||||
pos[0] = MSG_ReadCoord( &buf );
|
pos[0] = MSG_ReadCoord( &buf );
|
||||||
pos[1] = MSG_ReadCoord( &buf );
|
pos[1] = MSG_ReadCoord( &buf );
|
||||||
pos[2] = MSG_ReadCoord( &buf );
|
pos[2] = MSG_ReadCoord( &buf );
|
||||||
modelIndex = MSG_ReadShort( &buf );
|
modelIndex = MSG_ReadShort( &buf );
|
||||||
life = (float)(MSG_ReadByte( &buf ) * 0.1f);
|
life = (float)MSG_ReadByte( &buf ) * 0.1f;
|
||||||
scale = (float)(MSG_ReadByte( &buf ) * 0.1f);
|
scale = (float)MSG_ReadByte( &buf ) * 0.1f;
|
||||||
brightness = (float)MSG_ReadByte( &buf );
|
brightness = (float)MSG_ReadByte( &buf ) / 255.0f;
|
||||||
|
|
||||||
if(( pTemp = R_DefaultSprite( pos, modelIndex, 0 )) != NULL )
|
R_TempSprite( pos, vec3_origin, scale, modelIndex,
|
||||||
{
|
kRenderGlow, kRenderFxNoDissipation, brightness, life, FTENT_FADEOUT );
|
||||||
pTemp->entity.curstate.scale = scale;
|
|
||||||
pTemp->entity.curstate.rendermode = kRenderGlow;
|
|
||||||
pTemp->entity.curstate.renderfx = kRenderFxNoDissipation;
|
|
||||||
pTemp->entity.baseline.renderamt = brightness;
|
|
||||||
pTemp->entity.curstate.renderamt = brightness;
|
|
||||||
pTemp->flags = FTENT_FADEOUT;
|
|
||||||
pTemp->die = cl.time + life;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case TE_STREAK_SPLASH:
|
case TE_STREAK_SPLASH:
|
||||||
pos[0] = MSG_ReadCoord( &buf );
|
pos[0] = MSG_ReadCoord( &buf );
|
||||||
@ -2172,23 +2194,6 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
|||||||
pos2[2] = MSG_ReadCoord( &buf );
|
pos2[2] = MSG_ReadCoord( &buf );
|
||||||
R_ShowLine( pos, pos2 );
|
R_ShowLine( pos, pos2 );
|
||||||
break;
|
break;
|
||||||
case TE_DECAL:
|
|
||||||
case TE_DECALHIGH:
|
|
||||||
case TE_WORLDDECAL:
|
|
||||||
case TE_WORLDDECALHIGH:
|
|
||||||
pos[0] = MSG_ReadCoord( &buf );
|
|
||||||
pos[1] = MSG_ReadCoord( &buf );
|
|
||||||
pos[2] = MSG_ReadCoord( &buf );
|
|
||||||
decalIndex = MSG_ReadByte( &buf );
|
|
||||||
if( type == TE_DECAL || type == TE_DECALHIGH )
|
|
||||||
entityIndex = MSG_ReadShort( &buf );
|
|
||||||
else entityIndex = 0;
|
|
||||||
if( type == TE_DECALHIGH || type == TE_WORLDDECALHIGH )
|
|
||||||
decalIndex += 256;
|
|
||||||
pEnt = CL_GetEntityByIndex( entityIndex );
|
|
||||||
if( pEnt ) modelIndex = pEnt->curstate.modelindex;
|
|
||||||
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, modelIndex, pos, 0 );
|
|
||||||
break;
|
|
||||||
case TE_FIZZ:
|
case TE_FIZZ:
|
||||||
entityIndex = MSG_ReadShort( &buf );
|
entityIndex = MSG_ReadShort( &buf );
|
||||||
modelIndex = MSG_ReadShort( &buf );
|
modelIndex = MSG_ReadShort( &buf );
|
||||||
@ -2244,10 +2249,11 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
|||||||
pos[2] = MSG_ReadCoord( &buf );
|
pos[2] = MSG_ReadCoord( &buf );
|
||||||
entityIndex = MSG_ReadShort( &buf );
|
entityIndex = MSG_ReadShort( &buf );
|
||||||
decalIndex = MSG_ReadByte( &buf );
|
decalIndex = MSG_ReadByte( &buf );
|
||||||
pEnt = CL_GetEntityByIndex( entityIndex );
|
|
||||||
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, 0, pos, 0 );
|
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, 0, pos, 0 );
|
||||||
R_BulletImpactParticles( pos );
|
R_BulletImpactParticles( pos );
|
||||||
R_RicochetSound( pos );
|
flags = COM_RandomLong( 0, 0x7fff );
|
||||||
|
if( flags < 0x3fff )
|
||||||
|
R_RicochetSound_( pos, flags % 5 );
|
||||||
break;
|
break;
|
||||||
case TE_SPRAY:
|
case TE_SPRAY:
|
||||||
case TE_SPRITE_SPRAY:
|
case TE_SPRITE_SPRAY:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user