Bullet puffs do not need 32 bit fixed-point precision
Accuracy for bullet and blood puffs is not particularly important at a resolution greater than 1 map unit. A great bandwidth savings can be had by sending bullet puff positions as 16 bit instead of 32 bit fixed-point coordinates. The angle the puff is facing is also of no importance and can be disregarded. For a super-shotgun blast, the position and angle of bullet puffs current use 16*20 = 320 bytes. By not sending the angle and sending the position as 16 bits instead, a super-shotgun blast would use 6*20 = 120 bytes.
I have attached a patch that implements this. I feel it can be implemented better in the future as part of a more robust network serialization scheme that determines what level of positional accuracy an actor needs based on certain criteria.