Just add the following in combat.cpp under the traceattack line
in the case BULLET_PLAYER_357 statement (About line 1497):
MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY,
tr.vecEndPos );
WRITE_BYTE( TE_EXPLOSION );
WRITE_COORD( tr.vecEndPos.x );
WRITE_COORD( tr.vecEndPos.y );
WRITE_COORD( tr.vecEndPos.z );
WRITE_SHORT( g_sModelIndexFireball );
WRITE_BYTE( 5 ); // scale
WRITE_BYTE( 15 ); // framerate
WRITE_BYTE( TE_EXPLFLAG_NONE );
MESSAGE_END();
tr is a line representing the path of the
bullet, tr.vecEndPos is a vector representing the end of the
line (With x,y, and z, as the x,y, and z coordinates of that
vector), g_sModelIndexFireball is the ball of flame that appears
for the explosion.
So what are MESSAGE_BEGIN and MESSAGE_END?
As far as I can tell, these are used to send special messages to
the game server. They seem to be used mostly to create temporary
effects, like explosions and such. I'm not sure what MSG_PAS
means, but I believe it's the recipient of the message.
SVC_TEMPENTITY means that we're creating a temporary entity (The
explosion effect), and tr.vecEndPos is the position of the
effect. The code that follows looks like a packet of byte,
float, float, float, short int, byte, byte, byte. The first
param is the code for the type of effect. The next three are the
effect coordinates, followed by the model that accompanies the
effect (The explosion sprite), followed by the scale and
framerate of the model, followed by a flag to pass extra
miscellanious information about the effect. MESSAGE_END probably
sends the packet.
Try changing the values for scale and
framerate, or change the model index to either
g_sModelIndexWExplosion or g_sModelIndexSmoke. Actually, you
could even set it to g_sModelIndexBloodSpray or
g_sModelIndexBubbles, but it might look a little odd. All the
available models are defined in weapons.h as externs at line
360, properly defined in weapons.cpp about line 40, and
precached (loaded) in weapon.cpp at line 395. You can add your
own effects if you want. |