Difference between revisions of "Muzzle Flash Lighting"
(Add Russian lang and add little hint)
|Line 1:||Line 1:|
Revision as of 11:54, 16 May 2013
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()
Vector vAttachment; QAngle dummyAngles; GetAttachment( attachment, vAttachment, dummyAngles ); // 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:
Vector vAttachment, vAng; QAngle angles; GetAttachment( attachment, vAttachment, angles ); AngleVectors( angles, &vAng ); vAttachment += vAng * 2; dlight_t *dl = effects->CL_AllocDlight ( index ); dl->origin = vAttachment; dl->color.r = 231; dl->color.g = 219; dl->color.b = 14; dl->die = gpGlobals->curtime + 0.05f; dl->radius = random->RandomFloat( 245.0f, 256.0f ); dl->decay = 512.0f;
Edit: Changed the code for the colors, by default it was set to a magenta-ish color. A good muzzle flash color is closer to white, you can try 252, 238, 128 for a realistic washed out yellow.
I am currently working further on this idea, the updates will add more visual effects to this idea to create a more realistic and cleaner look to the muzzle flash. the update will only work on the orange box engine A link will be provided HERE when the new muzzle flash is done
A NOTE FROM GAMERMAN12: I had updated this code so that the lights decay after firing, so you have a flashing effect when shooting machine guns. And it fades so that it's alitle more realistic. Thanks.
Episode 2 Fix
If you encounter an error (error C2065: 'Attachment' : undeclared identifier) while building, try using this instead:
Vector vAttachment, vAng; QAngle angles; GetAttachment( 1, vAttachment, angles ); // set 1 instead "attachment" AngleVectors( angles, &vAng ); vAttachment += vAng * 2; dlight_t *dl = effects->CL_AllocDlight ( index ); dl->origin = vAttachment; dl->color.r = 231; dl->color.g = 219; dl->color.b = 14; dl->die = gpGlobals->curtime + 0.05f; dl->radius = random->RandomFloat( 245.0f, 256.0f ); dl->decay = 512.0f;