mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2025-02-21 11:21:41 +00:00
more func_explosive goodness
This commit is contained in:
parent
fc7319051a
commit
dec9a3611a
4 changed files with 163 additions and 114 deletions
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.22 2002/03/21 02:17:39 blaze
|
||||||
|
// more func_explosive goodness
|
||||||
|
//
|
||||||
// Revision 1.21 2002/03/21 00:26:46 blaze
|
// Revision 1.21 2002/03/21 00:26:46 blaze
|
||||||
// some fixing of func_explosive
|
// some fixing of func_explosive
|
||||||
//
|
//
|
||||||
|
@ -30,6 +33,92 @@
|
||||||
|
|
||||||
#include "cg_local.h"
|
#include "cg_local.h"
|
||||||
|
|
||||||
|
extern void CG_Particle_Bleed (qhandle_t pshader, vec3_t start, vec3_t dir, int fleshEntityNum, int duration);
|
||||||
|
/*
|
||||||
|
===============
|
||||||
|
CG_ShrapnelSpark
|
||||||
|
|
||||||
|
Moved from cg_weapons
|
||||||
|
Added by Elder
|
||||||
|
Modified tracer code
|
||||||
|
I really don't know what's going on half the time here :)
|
||||||
|
===============
|
||||||
|
*/
|
||||||
|
void CG_ShrapnelSpark( vec3_t source, vec3_t dest, float width, float length ) {
|
||||||
|
vec3_t forward, right;
|
||||||
|
polyVert_t verts[4];
|
||||||
|
vec3_t line;
|
||||||
|
float len, begin, end;
|
||||||
|
vec3_t start, finish;
|
||||||
|
//vec3_t midpoint;
|
||||||
|
|
||||||
|
// tracer
|
||||||
|
VectorSubtract( dest, source, forward );
|
||||||
|
len = VectorNormalize( forward );
|
||||||
|
|
||||||
|
// start at least a little ways from the muzzle
|
||||||
|
//if ( len < 10 ) {
|
||||||
|
//return;
|
||||||
|
//}
|
||||||
|
|
||||||
|
begin = crandom() * 8;
|
||||||
|
end = begin + length;
|
||||||
|
if ( end > len ) {
|
||||||
|
end = len;
|
||||||
|
}
|
||||||
|
VectorMA( source, begin, forward, start );
|
||||||
|
VectorMA( source, end, forward, finish );
|
||||||
|
|
||||||
|
line[0] = DotProduct( forward, cg.refdef.viewaxis[1] );
|
||||||
|
line[1] = DotProduct( forward, cg.refdef.viewaxis[2] );
|
||||||
|
|
||||||
|
VectorScale( cg.refdef.viewaxis[1], line[1], right );
|
||||||
|
VectorMA( right, -line[0], cg.refdef.viewaxis[2], right );
|
||||||
|
VectorNormalize( right );
|
||||||
|
|
||||||
|
VectorMA( finish, width, right, verts[0].xyz );
|
||||||
|
verts[0].st[0] = 0;
|
||||||
|
verts[0].st[1] = 1;
|
||||||
|
verts[0].modulate[0] = 255;
|
||||||
|
verts[0].modulate[1] = 255;
|
||||||
|
verts[0].modulate[2] = 255;
|
||||||
|
verts[0].modulate[3] = 255;
|
||||||
|
|
||||||
|
VectorMA( finish, -width, right, verts[1].xyz );
|
||||||
|
verts[1].st[0] = 1;
|
||||||
|
verts[1].st[1] = 0;
|
||||||
|
verts[1].modulate[0] = 255;
|
||||||
|
verts[1].modulate[1] = 255;
|
||||||
|
verts[1].modulate[2] = 255;
|
||||||
|
verts[1].modulate[3] = 255;
|
||||||
|
|
||||||
|
VectorMA( start, -width, right, verts[2].xyz );
|
||||||
|
verts[2].st[0] = 1;
|
||||||
|
verts[2].st[1] = 1;
|
||||||
|
verts[2].modulate[0] = 255;
|
||||||
|
verts[2].modulate[1] = 255;
|
||||||
|
verts[2].modulate[2] = 255;
|
||||||
|
verts[2].modulate[3] = 255;
|
||||||
|
|
||||||
|
VectorMA( start, width, right, verts[3].xyz );
|
||||||
|
verts[3].st[0] = 0;
|
||||||
|
verts[3].st[1] = 0;
|
||||||
|
verts[3].modulate[0] = 255;
|
||||||
|
verts[3].modulate[1] = 255;
|
||||||
|
verts[3].modulate[2] = 255;
|
||||||
|
verts[3].modulate[3] = 255;
|
||||||
|
|
||||||
|
trap_R_AddPolyToScene( cgs.media.tracerShader, 4, verts );
|
||||||
|
|
||||||
|
//midpoint[0] = ( start[0] + finish[0] ) * 0.5;
|
||||||
|
//midpoint[1] = ( start[1] + finish[1] ) * 0.5;
|
||||||
|
//midpoint[2] = ( start[2] + finish[2] ) * 0.5;
|
||||||
|
|
||||||
|
// add the tracer sound
|
||||||
|
//trap_S_StartSound( midpoint, ENTITYNUM_WORLD, CHAN_AUTO, cgs.media.tracerSound );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
|
@ -1153,15 +1242,18 @@ void CG_BreakBreakable( centity_t *cent, int eParam ) {
|
||||||
sfxHandle_t sound;
|
sfxHandle_t sound;
|
||||||
qhandle_t mod;
|
qhandle_t mod;
|
||||||
qhandle_t shader;
|
qhandle_t shader;
|
||||||
|
vec3_t shrapnelDest;
|
||||||
|
localEntity_t *smokePuff;
|
||||||
|
vec3_t puffDir;
|
||||||
|
|
||||||
|
float light;
|
||||||
|
vec3_t lightColor;
|
||||||
|
int duration;
|
||||||
|
int sparkCount;
|
||||||
int i, mass, material;
|
int i, mass, material;
|
||||||
float tension, bouncyness, size;
|
float tension, bouncyness, size;
|
||||||
int modelbias[10] = { 0, 0, 0, 0, 1, 1, 1, 2, 2 };
|
int modelbias[10] = { 0, 0, 0, 0, 1, 1, 1, 2, 2 };
|
||||||
|
|
||||||
// allow gibs to be turned off for speed
|
|
||||||
if ( !cg_gibs.integer ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mass = ((eParam >> 4) & 0x0F) + 1;
|
mass = ((eParam >> 4) & 0x0F) + 1;
|
||||||
tension = 0.25 * (((eParam >> 2) & 0x03) + 1);
|
tension = 0.25 * (((eParam >> 2) & 0x03) + 1);
|
||||||
bouncyness = 0.25 * (((eParam) & 0x3) + 1);
|
bouncyness = 0.25 * (((eParam) & 0x3) + 1);
|
||||||
|
@ -1185,15 +1277,54 @@ void CG_BreakBreakable( centity_t *cent, int eParam ) {
|
||||||
// create an explosion
|
// create an explosion
|
||||||
mod = cgs.media.dishFlashModel;
|
mod = cgs.media.dishFlashModel;
|
||||||
shader = cgs.media.grenadeExplosionShader;
|
shader = cgs.media.grenadeExplosionShader;
|
||||||
|
light = 350;
|
||||||
|
lightColor[0] = 1;
|
||||||
|
lightColor[1] = 1;
|
||||||
|
lightColor[2] = 0;
|
||||||
|
duration = 600;
|
||||||
|
|
||||||
le = CG_MakeExplosion( origin, velocity,
|
velocity[0] = (crandom() * BREAK_VELOCITY) * tension;
|
||||||
mod,
|
velocity[1] = (crandom() * BREAK_VELOCITY) * tension;
|
||||||
shader,
|
velocity[2] = ( random() * BREAK_JUMP) * tension;
|
||||||
600, qtrue );
|
|
||||||
le->light = 300;
|
le = CG_MakeExplosion( origin, velocity,
|
||||||
le->lightColor[0] = 1;
|
mod, shader,
|
||||||
le->lightColor[1] = 0.75;
|
duration, qtrue );
|
||||||
le->lightColor[2] = 0.50;
|
le->light = light;
|
||||||
|
VectorCopy( lightColor, le->lightColor );
|
||||||
|
|
||||||
|
|
||||||
|
sparkCount = 60 + rand() % 10;
|
||||||
|
origin[2] += 32;
|
||||||
|
|
||||||
|
for (i = 0; i < sparkCount; i++)
|
||||||
|
{
|
||||||
|
VectorScale (velocity, rand() % 200, velocity);
|
||||||
|
velocity[0] += rand() % 200 - 100;
|
||||||
|
velocity[1] += rand() % 200 - 100;
|
||||||
|
if (i % 8 == 7)
|
||||||
|
{
|
||||||
|
// Add shrapnel trace effect
|
||||||
|
VectorMA(origin, 0.7f, velocity, shrapnelDest);
|
||||||
|
CG_ShrapnelSpark(origin, shrapnelDest, 10, 280);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add sparks
|
||||||
|
CG_ParticleSparks(origin, velocity, 900 + rand() % 200, 5, 5, -2.5f, 3.5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add smoke puff
|
||||||
|
puffDir[0] = 0;
|
||||||
|
puffDir[1] = 0;
|
||||||
|
puffDir[2] = 20;
|
||||||
|
origin[2] -= 16;
|
||||||
|
smokePuff = CG_SmokePuff( origin, puffDir,
|
||||||
|
rand() % 12 + 48,
|
||||||
|
1, 1, 1, 0.4f,
|
||||||
|
1750,
|
||||||
|
cg.time, 0,
|
||||||
|
0,
|
||||||
|
cgs.media.smokePuffShader );
|
||||||
|
|
||||||
for (i = 0; i < mass; i++) {
|
for (i = 0; i < mass; i++) {
|
||||||
velocity[0] = (crandom() * BREAK_VELOCITY) * tension;
|
velocity[0] = (crandom() * BREAK_VELOCITY) * tension;
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.55 2002/03/21 02:17:39 blaze
|
||||||
|
// more func_explosive goodness
|
||||||
|
//
|
||||||
// Revision 1.54 2002/03/17 21:32:23 jbravo
|
// Revision 1.54 2002/03/17 21:32:23 jbravo
|
||||||
// Fixed the dynamic teamnames system up a bit to reduce traffic
|
// Fixed the dynamic teamnames system up a bit to reduce traffic
|
||||||
//
|
//
|
||||||
|
@ -1802,6 +1805,10 @@ void CG_LightningBoltBeam( vec3_t start, vec3_t end );
|
||||||
#endif
|
#endif
|
||||||
void CG_ScorePlum( int client, vec3_t org, int score );
|
void CG_ScorePlum( int client, vec3_t org, int score );
|
||||||
|
|
||||||
|
//Blaze: for explosions
|
||||||
|
void CG_Particle_Bleed (qhandle_t pshader, vec3_t start, vec3_t dir, int fleshEntityNum, int duration);
|
||||||
|
void CG_ShrapnelSpark( vec3_t source, vec3_t dest, float width, float length );
|
||||||
|
|
||||||
void CG_GibPlayer( vec3_t playerOrigin );
|
void CG_GibPlayer( vec3_t playerOrigin );
|
||||||
void CG_BigExplode( vec3_t playerOrigin );
|
void CG_BigExplode( vec3_t playerOrigin );
|
||||||
// Blaze: Breakable glass Elder: modified
|
// Blaze: Breakable glass Elder: modified
|
||||||
|
@ -1865,6 +1872,7 @@ void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops );
|
||||||
void CG_CheckChangedPredictableEvents( playerState_t *ps );
|
void CG_CheckChangedPredictableEvents( playerState_t *ps );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//===============================================
|
//===============================================
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.57 2002/03/21 02:17:39 blaze
|
||||||
|
// more func_explosive goodness
|
||||||
|
//
|
||||||
// Revision 1.56 2002/03/21 00:26:11 blaze
|
// Revision 1.56 2002/03/21 00:26:11 blaze
|
||||||
// some fixing of func_explosive
|
// some fixing of func_explosive
|
||||||
//
|
//
|
||||||
|
@ -51,6 +54,8 @@
|
||||||
// cg_weapons.c -- events and effects dealing with weapons
|
// cg_weapons.c -- events and effects dealing with weapons
|
||||||
#include "cg_local.h"
|
#include "cg_local.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==========================
|
==========================
|
||||||
CG_ParseWeaponSoundFile
|
CG_ParseWeaponSoundFile
|
||||||
|
@ -2742,90 +2747,6 @@ void CG_FireWeapon( centity_t *cent, int weapModification ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
CG_ShrapnelSpark
|
|
||||||
|
|
||||||
Added by Elder
|
|
||||||
Modified tracer code
|
|
||||||
I really don't know what's going on half the time here :)
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
static void CG_ShrapnelSpark( vec3_t source, vec3_t dest, float width, float length ) {
|
|
||||||
vec3_t forward, right;
|
|
||||||
polyVert_t verts[4];
|
|
||||||
vec3_t line;
|
|
||||||
float len, begin, end;
|
|
||||||
vec3_t start, finish;
|
|
||||||
//vec3_t midpoint;
|
|
||||||
|
|
||||||
// tracer
|
|
||||||
VectorSubtract( dest, source, forward );
|
|
||||||
len = VectorNormalize( forward );
|
|
||||||
|
|
||||||
// start at least a little ways from the muzzle
|
|
||||||
//if ( len < 10 ) {
|
|
||||||
//return;
|
|
||||||
//}
|
|
||||||
|
|
||||||
begin = crandom() * 8;
|
|
||||||
end = begin + length;
|
|
||||||
if ( end > len ) {
|
|
||||||
end = len;
|
|
||||||
}
|
|
||||||
VectorMA( source, begin, forward, start );
|
|
||||||
VectorMA( source, end, forward, finish );
|
|
||||||
|
|
||||||
line[0] = DotProduct( forward, cg.refdef.viewaxis[1] );
|
|
||||||
line[1] = DotProduct( forward, cg.refdef.viewaxis[2] );
|
|
||||||
|
|
||||||
VectorScale( cg.refdef.viewaxis[1], line[1], right );
|
|
||||||
VectorMA( right, -line[0], cg.refdef.viewaxis[2], right );
|
|
||||||
VectorNormalize( right );
|
|
||||||
|
|
||||||
VectorMA( finish, width, right, verts[0].xyz );
|
|
||||||
verts[0].st[0] = 0;
|
|
||||||
verts[0].st[1] = 1;
|
|
||||||
verts[0].modulate[0] = 255;
|
|
||||||
verts[0].modulate[1] = 255;
|
|
||||||
verts[0].modulate[2] = 255;
|
|
||||||
verts[0].modulate[3] = 255;
|
|
||||||
|
|
||||||
VectorMA( finish, -width, right, verts[1].xyz );
|
|
||||||
verts[1].st[0] = 1;
|
|
||||||
verts[1].st[1] = 0;
|
|
||||||
verts[1].modulate[0] = 255;
|
|
||||||
verts[1].modulate[1] = 255;
|
|
||||||
verts[1].modulate[2] = 255;
|
|
||||||
verts[1].modulate[3] = 255;
|
|
||||||
|
|
||||||
VectorMA( start, -width, right, verts[2].xyz );
|
|
||||||
verts[2].st[0] = 1;
|
|
||||||
verts[2].st[1] = 1;
|
|
||||||
verts[2].modulate[0] = 255;
|
|
||||||
verts[2].modulate[1] = 255;
|
|
||||||
verts[2].modulate[2] = 255;
|
|
||||||
verts[2].modulate[3] = 255;
|
|
||||||
|
|
||||||
VectorMA( start, width, right, verts[3].xyz );
|
|
||||||
verts[3].st[0] = 0;
|
|
||||||
verts[3].st[1] = 0;
|
|
||||||
verts[3].modulate[0] = 255;
|
|
||||||
verts[3].modulate[1] = 255;
|
|
||||||
verts[3].modulate[2] = 255;
|
|
||||||
verts[3].modulate[3] = 255;
|
|
||||||
|
|
||||||
trap_R_AddPolyToScene( cgs.media.tracerShader, 4, verts );
|
|
||||||
|
|
||||||
//midpoint[0] = ( start[0] + finish[0] ) * 0.5;
|
|
||||||
//midpoint[1] = ( start[1] + finish[1] ) * 0.5;
|
|
||||||
//midpoint[2] = ( start[2] + finish[2] ) * 0.5;
|
|
||||||
|
|
||||||
// add the tracer sound
|
|
||||||
//trap_S_StartSound( midpoint, ENTITYNUM_WORLD, CHAN_AUTO, cgs.media.tracerSound );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
|
|
|
@ -6,14 +6,13 @@
|
||||||
--------------------Configuration: cgame - Win32 Debug--------------------
|
--------------------Configuration: cgame - Win32 Debug--------------------
|
||||||
</h3>
|
</h3>
|
||||||
<h3>Command Lines</h3>
|
<h3>Command Lines</h3>
|
||||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPE3.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D0.tmp" with contents
|
||||||
[
|
[
|
||||||
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"Debug/" /Fp"Debug/cgame.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c
|
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"Debug/" /Fp"Debug/cgame.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c
|
||||||
"C:\Development\reaction\cgame\cg_scoreboard.c"
|
"C:\Development\reaction\cgame\cg_effects.c"
|
||||||
"C:\Development\reaction\cgame\cg_servercmds.c"
|
|
||||||
]
|
]
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPE3.tmp"
|
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D0.tmp"
|
||||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPE4.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D1.tmp" with contents
|
||||||
[
|
[
|
||||||
/nologo /base:"0x30000000" /subsystem:windows /dll /incremental:yes /pdb:"Debug/cgamex86.pdb" /map:"Debug/cgamex86.map" /debug /machine:I386 /def:".\cgame.def" /out:"../Debug/cgamex86.dll" /implib:"Debug/cgamex86.lib"
|
/nologo /base:"0x30000000" /subsystem:windows /dll /incremental:yes /pdb:"Debug/cgamex86.pdb" /map:"Debug/cgamex86.map" /debug /machine:I386 /def:".\cgame.def" /out:"../Debug/cgamex86.dll" /implib:"Debug/cgamex86.lib"
|
||||||
.\Debug\bg_misc.obj
|
.\Debug\bg_misc.obj
|
||||||
|
@ -42,27 +41,17 @@ Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPE4.tmp" with cont
|
||||||
.\Debug\q_shared.obj
|
.\Debug\q_shared.obj
|
||||||
.\Debug\ui_shared.obj
|
.\Debug\ui_shared.obj
|
||||||
]
|
]
|
||||||
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPE4.tmp"
|
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D1.tmp"
|
||||||
<h3>Output Window</h3>
|
<h3>Output Window</h3>
|
||||||
Compiling...
|
Compiling...
|
||||||
cg_scoreboard.c
|
cg_effects.c
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(238) : warning C4101: 'iconx' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(238) : warning C4101: 'headx' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(236) : warning C4101: 'headAngles' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(735) : warning C4101: 'spec' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(740) : warning C4101: 'players' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(735) : warning C4101: 'red' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(739) : warning C4101: 'y' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(738) : warning C4101: 'ci' : unreferenced local variable
|
|
||||||
C:\Development\reaction\cgame\cg_scoreboard.c(735) : warning C4101: 'blue' : unreferenced local variable
|
|
||||||
cg_servercmds.c
|
|
||||||
Linking...
|
Linking...
|
||||||
Creating library Debug/cgamex86.lib and object Debug/cgamex86.exp
|
Creating library Debug/cgamex86.lib and object Debug/cgamex86.exp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
<h3>Results</h3>
|
||||||
cgamex86.dll - 0 error(s), 9 warning(s)
|
cgamex86.dll - 0 error(s), 0 warning(s)
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue