Muzzle Flash Lighting: Difference between revisions
mNo edit summary |
|||
Line 10: | Line 10: | ||
The coding begins! Only a few minor changes are needed here to make your muzzleflashes look better than ever. | The coding begins! Only a few minor changes are needed here to make your muzzleflashes look better than ever. | ||
First off, open up '''c_baseanimating.cpp''' and search for the function ''void C_BaseAnimating::ProcessMuzzleFlashEvent()'' | First off, open up '''c_baseanimating.cpp''' and search for the function ''void C_BaseAnimating::ProcessMuzzleFlashEvent()'' | ||
<pre> | <pre> | ||
// Make an elight | // Make an elight |
Revision as of 17:02, 22 February 2009
This tutorial will show you how to create a muzzleflash that dynamically appears and lights up the world around you, like in Counter-Strike: Source. These types of lights are called "dlights".
This code was designed for any Orange Box based mod, singleplayer or multiplayer. It also works with NPCs, assuming that you've gotten them to work properly.


Implementing Dlight-based Muzzleflashes
The coding begins! Only a few minor changes are needed here to make your muzzleflashes look better than ever.
First off, open up c_baseanimating.cpp and search for the function void C_BaseAnimating::ProcessMuzzleFlashEvent()
// Make an elight dlight_t *el = effects->CL_AllocElight( LIGHT_INDEX_MUZZLEFLASH + index ); el->origin = vAttachment; el->radius = random->RandomInt( 32, 64 ); el->decay = el->radius / 0.05f; el->die = gpGlobals->curtime + 0.05f; el->color.r = 255; el->color.g = 192; el->color.b = 64; el->color.exponent = 5;
As you may have noticed, Valve went a little crazy here and the result was a seemingly ugly muzzleflash. This tutorial is all about making things pretty, so we're going to change that. Replace the entries above with this:
dlight_t *dl = effects->CL_AllocDlight ( index ); dl->origin = vAttachment + Vector( 0, 0, 4 ); dl->color.r = 255; dl->die = gpGlobals->curtime + 0.1f; dl->radius = random->RandomFloat( 245.0f, 256.0f ); dl->color.g = dl->color.b = random->RandomInt( 95, 128 ); dlight_t *el= effects->CL_AllocElight( index ); el->origin = vAttachment; el->color.r = 255; el->color.g = dl->color.b = random->RandomInt( 95, 128 ); el->radius = random->RandomFloat( 260.0f, 290.0f ); el->die = gpGlobals->curtime + 0.1f;
This two-dlight system works far better than most any other single dlight system and fixes Valves mistakes.