Wavelength Logo
tl.jpg (2351 bytes) blank.gif (837 bytes) tr.jpg (2446 bytes)
blank.gif (837 bytes)
Red screen after Death and Damage by Nightmare
blank.gif (837 bytes)

This is part of the FX library I�m working on and it�s NEW, so if you use this, please contact me before, please.

To include the red screen I made use of UTIL_ScreenFade, but since I do not have pointer on the player while I code I have to use the edict, so I will write the whole ScreenFade stuff for edicts into the player.cpp:

Above void CBasePlayer:: TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ) insert:

static unsigned short FixedUnsigned16( float value, float scale ) //FX

{

int output;

output = value * scale;

if ( output < 0 )

output = 0;

if ( output > 0xFFFF )

output = 0xFFFF;

return (unsigned short)output;

}

void UTIL_EdictScreenFadeBuild( ScreenFade &fade, const Vector &color, float fadeTime, float fadeHold, int alpha, int flags )

{

fade.duration = FixedUnsigned16( fadeTime, 1<<12 ); // 4.12 fixed

fade.holdTime = FixedUnsigned16( fadeHold, 1<<12 ); // 4.12 fixed

fade.r = (int)color.x;

fade.g = (int)color.y;

fade.b = (int)color.z;

fade.a = alpha;

fade.fadeFlags = flags;

}

void UTIL_EdictScreenFadeWrite( const ScreenFade &fade, edict_s *edict )

{

MESSAGE_BEGIN( MSG_ONE, gmsgFade, NULL, edict ); // use the magic #1 for "one client"


WRITE_SHORT( fade.duration ); // fade lasts this long

WRITE_SHORT( fade.holdTime ); // fade lasts this long

WRITE_SHORT( fade.fadeFlags ); // fade type (in / out)

WRITE_BYTE( fade.r ); // fade red

WRITE_BYTE( fade.g ); // fade green

WRITE_BYTE( fade.b ); // fade blue

WRITE_BYTE( fade.a ); // fade blue

MESSAGE_END();

}


void UTIL_EdictScreenFade( edict_s *edict, const Vector &color, float fadeTime, float fadeHold, int alpha, int flags ) //FX

{

ScreenFade fade;

UTIL_EdictScreenFadeBuild( fade, color, fadeTime, fadeHold, alpha, flags );

UTIL_EdictScreenFadeWrite( fade, edict );

}

Now this is just what you find in util.cpp, just with Edict in front (exept for the fisrt one, so sue me...)

Now these would be implemented so let�s get over to their use, In the TakeDamage function put:

float alphachange;

alphachange = flDamage * 3;

if (alphachange > 255)

alphachange = 255;

UTIL_EdictScreenFade( edict(), Vector(128,0,0), 1, 1, (int)alphachange, FFADE_IN ); //FX


I recommend you should tweak these values for your use.

Then in the Killed function put:

UTIL_EdictScreenFade( edict(), Vector(128,0,0), 10, 15, 200, FFADE_OUT | FFADE_STAYOUT ); //FX

where it has been commented out.

But we will have to fade them back or they will run around like that, so put:

UTIL_EdictScreenFade( edict(), Vector(128,0,0), 1, 15, 0, FFADE_OUT | FFADE_STAYOUT ); //FX

into StartDeathCam and Spawn.

And there we�re done! Go test it (on bounce with realistic falling damage) and there you go!

 

blank.gif (837 bytes)
bl.jpg (2471 bytes) blank.gif (837 bytes) br.jpg (2132 bytes)