Collision Detection in Multiplayer Game

I’m working on a Multiplayer First Person Shooter, and before I put a lot of effort into creating the collision code, I want to make sure I’m doing it the right way. In my last attempt, each player had a sphere that used a pusher handler for collisions with walls and a downward facing ray that used the floor handler for walking on top of objects.

Additionally, each player had a collision segment and handler queue for determining where fired bullets collided. The nodes were bitmasked, so the floor handler only checked on collision geometry meant to be floors, the push handler only checked on geometry masked as walls, but the bullet checked on walls, floors, and the 3 spheres each player had (representing head, body, and legs). I found that checking the movement collision for 16 wasn’t too bad, but as soon as they started firing simoultaneously, the server really slowed down.

How can I improve this? I’d really like to make this game as smooth to play so it has the potential to be popular and perhaps profitable. I’m not opposed to computing the math on my own (I’ve read some papers on how collision works at the lowest levels and feel confident in implementing it). Any advice is greatly appreciated.

Thanks

Edit:

Also, I’ve been following Valve’s division of client and server responsibilities with regards to anti cheating, as well as their overall networking model (i.e. the client is a dumb terminal and the bulk of the computation occurs on the server). Is this something I’ll be able to do with Panda3D? I don’t know much about it’s limitations as being a computation-based server.