Thank you, l4mbs. Right now I feel so rotten I wish it were time to set myself on fire so I could be done with it.
Bugs that are in my mod:
I can help explain a few of these since I've run into some similar things.
"Tracer" weapons don't spawn any blood on the "death hit" (shot that kills them). So I can shoot enemies and they bleed, but if the shot kills them, no blood is spawned.
This is a result of how Q3 does shotgun code. Q3 machinegun doesn't have this problem, but shotties do. Why? CG_ClipMoveToEntities can't clip against a corpse. The reason is when trap_linkentity is run on the server after a player is killed it clears entityState.solid. Machinegun code sends the blood impact with the bullet trace, and traces BEFORE player_die so it
always traces correctly. Since the shotgun sends a seeded random and does all the client tracing locally the entity is already removed from the client's solid list by the time the event reaches the client. This will
always be the case, even though the event is sent in the same snapshot as the player death because client entities are always processed first. I tried hacking CG_ClipMoveToEntities to make players solid even when dead, but so far it's only worked on a local server. I just decided it was easier and didn't eat up any real bandwidth to just fake it by sending blood impacts from the server's impact points (post .99f, so don't look for it in Gen yet) and told the shotgun code on the client to
not draw blood impacts at all, only wall impacts. It means you'll see a few extra wall impacts behind a player who just died, but hey, at least you can see you hit the guy.
Shells float if they land on a mover.
That's because Q3's mover code sucks. Grenades do the same thing. Don't even get me started on func_rotating.. I had to rewrite a lot of it for Gen so that movers could work properly with projectiles, dropped items, corpses, etc.
Dead bodies will only bounce on jumppads if the client hasn't respawned yet (so their corpse will continue bouncing on the jumppad forever if they dont respawn, but the moment they respawn, it stops bouncing).
That's because when the player respawns a "fake player" called a "bodycue" is put in its place. As long as the player hasn't respawned the corpse
is the player. Once the player respawns it runs copytobodycue and creates the copy of the player. It's not a perfect carry over, some stuff is still shared between the corpse and respawned player (like clientinfo_t stuff) and some stuff isn't. The "bouncing body" is a result of something not getting cleared on the server so the bouncepad is treating the dead, unrespawned player the same as if it were a live one. You'll have to decide if you want all corpses to bounce, or no corpses to bounce to fix that one. Shouldn't take much to tell a jump pad to ignore corpses.
Yes, the weapon animation system is a "from the ground up" venture. There's more than one way to do it for sure. I won't say any one way is the "right" way. Depends on how complex your animations are, how complex the weapon behaviors are, and how "in sync with the server" you want your prediction to be. Our current animations in .99f are just hacks. The real animation system is what nobody outside the team has seen yet.[/color]