There is no way to replace files on the client.
You can replace only sprites that are specified from the server-side. For example, if you create some sprite entity you can set any sprite name for it.
So, "blood.spr" is issued from the server-side, here:
Код:
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, origin );
WRITE_BYTE( TE_BLOODSPRITE );
WRITE_COORD( origin.x); // pos
WRITE_COORD( origin.y);
WRITE_COORD( origin.z);
WRITE_SHORT( g_sModelIndexBloodSpray ); // initial sprite model
WRITE_SHORT( g_sModelIndexBloodDrop ); // droplet sprite models
WRITE_BYTE( color ); // color index into host_basepal
WRITE_BYTE( min( max( 3, amount / 10 ), 16 ) ); // size
MESSAGE_END();
To replace it you need to catch message from game dll with SVC_TEMPENTITY code, check its first parameter is TE_BLOODSPRITE and replace g_sModelIndexBloodDrop parameter with yours sprite.
But you will need to rename your sprite to any name that is not used on the client, for ex. "blood2.spr", precache it and use its id for substitution.