mirror of
https://github.com/DrBeef/JKXR.git
synced 2025-06-01 09:22:19 +00:00
MuadDib's persistent saber burn marks
set cg_saberBurnMarkExtraTime > 0 to activate
This commit is contained in:
parent
6695f0bc0d
commit
3e54452a0b
4 changed files with 31 additions and 17 deletions
|
@ -68,7 +68,9 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|||
#define MAX_STEP_CHANGE 32
|
||||
|
||||
#define MAX_VERTS_ON_POLY 10
|
||||
#define MAX_MARK_POLYS 256
|
||||
#define MAX_MARK_POLYS 2048
|
||||
#define MARK_TOTAL_TIME 10000
|
||||
#define MARK_FADE_TIME 1000
|
||||
|
||||
#define STAT_MINUS 10 // num frame for '-' stats digit
|
||||
|
||||
|
@ -192,6 +194,7 @@ typedef centity_s centity_t;
|
|||
typedef struct markPoly_s {
|
||||
struct markPoly_s *prevMark, *nextMark;
|
||||
int time;
|
||||
int fadeTime; // custom fade time (to slow down fade of saber burn marks)
|
||||
qhandle_t markShader;
|
||||
qboolean alphaFade; // fade alpha instead of rgb
|
||||
float color[4];
|
||||
|
@ -621,6 +624,7 @@ extern vmCvar_t cg_thirdPersonTargetDamp;
|
|||
extern vmCvar_t cg_saberAutoThird;
|
||||
extern vmCvar_t cg_gunAutoFirst;
|
||||
extern vmCvar_t cg_debugSaberCombat;
|
||||
extern vmCvar_t cg_saberBurnMarkExtraTime;
|
||||
|
||||
extern vmCvar_t cg_zProj;
|
||||
extern vmCvar_t cg_stereoSeparation;
|
||||
|
|
|
@ -300,6 +300,7 @@ vmCvar_t cg_thirdPersonTargetDamp;
|
|||
vmCvar_t cg_saberAutoThird;
|
||||
vmCvar_t cg_gunAutoFirst;
|
||||
vmCvar_t cg_debugSaberCombat;
|
||||
vmCvar_t cg_saberBurnMarkExtraTime;
|
||||
|
||||
vmCvar_t cg_thirdPersonAlpha;
|
||||
vmCvar_t cg_thirdPersonAutoAlpha;
|
||||
|
@ -444,6 +445,7 @@ static cvarTable_t cvarTable[] = {
|
|||
{ &cg_saberAutoThird, "cg_saberAutoThird", "0", CVAR_ARCHIVE },
|
||||
{ &cg_gunAutoFirst, "cg_gunAutoFirst", "1", CVAR_ARCHIVE },
|
||||
{ &cg_debugSaberCombat, "cg_debugSaberCombat", "0", CVAR_ARCHIVE },
|
||||
{ &cg_saberBurnMarkExtraTime, "cg_saberBurnMarkExtraTime", "0", CVAR_ARCHIVE },
|
||||
|
||||
{ &cg_pano, "pano", "0", 0 },
|
||||
{ &cg_panoNumShots, "panoNumShots", "10", 0 },
|
||||
|
|
|
@ -225,8 +225,6 @@ void CG_ImpactMark( qhandle_t markShader, const vec3_t origin, const vec3_t dir,
|
|||
CG_AddMarks
|
||||
===============
|
||||
*/
|
||||
#define MARK_TOTAL_TIME 20000
|
||||
#define MARK_FADE_TIME 10000
|
||||
|
||||
void CG_AddMarks( void ) {
|
||||
int j;
|
||||
|
@ -270,9 +268,13 @@ void CG_AddMarks( void ) {
|
|||
}
|
||||
|
||||
// fade all marks out with time
|
||||
int markFadeTime = mp->fadeTime;
|
||||
if (!markFadeTime) {
|
||||
markFadeTime = MARK_FADE_TIME;
|
||||
}
|
||||
t = mp->time + MARK_TOTAL_TIME - cg.time;
|
||||
if ( t < MARK_FADE_TIME ) {
|
||||
fade = 255 * t / MARK_FADE_TIME;
|
||||
if ( t < markFadeTime ) {
|
||||
fade = 255 * t / markFadeTime;
|
||||
if ( mp->alphaFade ) {
|
||||
for ( j = 0 ; j < mp->poly.numVerts ; j++ ) {
|
||||
mp->verts[j].modulate[3] = fade;
|
||||
|
@ -280,7 +282,7 @@ void CG_AddMarks( void ) {
|
|||
}
|
||||
else
|
||||
{
|
||||
float f = (float)t / MARK_FADE_TIME;
|
||||
float f = (float)t / markFadeTime;
|
||||
for ( j = 0 ; j < mp->poly.numVerts ; j++ ) {
|
||||
mp->verts[j].modulate[0] = mp->color[0] * f;
|
||||
mp->verts[j].modulate[1] = mp->color[1] * f;
|
||||
|
|
|
@ -4388,19 +4388,25 @@ void CG_CreateSaberMarks( vec3_t start, vec3_t end, vec3_t normal )
|
|||
v->st[1] = 0.5 + DotProduct( delta, axis[2] ) * (0.15f + Q_flrand(0.0f, 1.0f) * 0.05f);
|
||||
}
|
||||
|
||||
// save it persistantly, do burn first
|
||||
// Allow to prolong max saber mark time
|
||||
cvar_t *sabeBurnMarkExtraTime = gi.cvar( "cg_saberBurnMarkExtraTime", "0", 1 );
|
||||
int extraTime = sabeBurnMarkExtraTime->value * MARK_TOTAL_TIME;
|
||||
|
||||
if (sabeBurnMarkExtraTime->value == 0.0f) {
|
||||
mark = CG_AllocMark();
|
||||
mark->time = cg.time;
|
||||
mark->time = cg.time + 8500;
|
||||
mark->alphaFade = qtrue;
|
||||
mark->markShader = cgs.media.rivetMarkShader;
|
||||
mark->poly.numVerts = mf->numPoints;
|
||||
mark->color[0] = mark->color[1] = mark->color[2] = mark->color[3] = 255;
|
||||
memcpy(mark->verts, verts, mf->numPoints * sizeof(verts[0]));
|
||||
}
|
||||
|
||||
// And now do a glow pass
|
||||
// by moving the start time back, we can hack it to fade out way before the burn does
|
||||
// Instead do only the glow pass and make it slowly fade (to make it look like cooling down)
|
||||
mark = CG_AllocMark();
|
||||
mark->time = cg.time - 8500;
|
||||
mark->time = cg.time + extraTime;
|
||||
mark->fadeTime = MARK_TOTAL_TIME + extraTime;
|
||||
mark->alphaFade = qfalse;
|
||||
mark->markShader = cgi_R_RegisterShader("gfx/effects/saberDamageGlow" );
|
||||
mark->poly.numVerts = mf->numPoints;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue