I should also probably feel stupid for trying to engage in conversation with someone who actually does this for a living
Totally don't!
I enjoyed your post and was pleasantly surprised to have a discussion on the matter.
Everything else I wrote before it was junk and things that had been done before. I was studying DirectX and C++ as well as RTS engine design before I decided I wanted to play some video games....
Going hobby programming isn't an easy option, at all! You are not alone and I'm no exception myself. In fact, if you go to a programmers forum -- any programmers forum -- you will see that most people can only take programming seriously in a professional environment. Most of us can't ever finish any hobby project we set ourselves for. Those forums are filled with those stories of unfinished projects. I personally never ever finished a home programming project.
Consider this: The programming community is huge. And I mean huge. Today, to be a programmer you don't really need to go to University (although it helps because it teaches you project discipline and management). All the information on how to learn to program on a language is one way or another available on the internet (including pirating programming books). And yet, despite the fact there's quite possibly hundreds of millions of programmers out there, the actual commercial and freeware output is considerably smaller . The ability to stay on course when programming as an hobby is not for everyone.
Now as for your earlier post:
The collision detection, called by the game after moving something, a part of the engine, calls this routine after calling the physics routines to determine the amount of damage for that frame of movement.
Here you can optimize considerably if all the engine does is handle generic collision detection and then pass any relevant data on to the vehicle own Collide method, instead of a universal Collision function. Divide to conquer as they say. This simplifies considerably the collision detection routine and allows you to make use of proper inheritance, which in turn simplifies the addition of future vehicles on later patches/versions, facilitates the reuse code for later games or to make changes to the current code.
For instance, if the F35 class is a member of the Aircraft class (I'd probably do a Fighter class instead of a F35 class and make the F35 an object instead, but let's keep it simple), you can do a virtual method Collide of the Aircraft class that immediately exploded and killed the player. The F35 class would inherit this behavior and you wouldn't need to write any more code or check for damage. Any other fighter class would just inherit this behavior of the Aircraft class.
Because an M1 is not a member of the Aircraft class, but of the Tank class instead, it would not have this behavior, but that of the Tank virtual Collide method, which surely would already include damage calculation.
Another would be a soldier who has numerous collision boxes used for both weapon collision and vehicle collision detection and are tied to the movement of the skeletal structure. As you know we use these larger boxes to be cheap on the processor time for collision detection.
Indeed. This is a major problem on about every modern multiplayer game that requires huge amount of server-side processing and cannot (for security reasons mostly, but also to cut down on lag) rely on client-side processing.
In fact, the whole physics engine is a miracle already on modern games. But we all know how coarse it really is. We have seen it or experienced it ourselves (like the spring-flying tanks we've seen on a recent post on these forums). The actual knowledge to produce good-quality and close-to-reality physics exists and it's not even very complex. It's the processing time that stops programmers on their tracks.
One of the thoughts that always puts a smile on my face is how we tend to look at modern games and appreciate them for their realism (like we did in the 90s), but are in fact still essentially playing with very limited assets; and how in 10 or 20 years we will look at contemporary games and think that, despite being cool, they are worlds apart in terms of technology. Mostly thanks to added processing power, not so much newly acquired knowledge.
Note:
Curiously enough physics are mostly handled by the game client, not the server. All the server should do is send the 'this exploded' call to the client. And if the physics engine has some random variables attached (which it should on some cases), it's very possible for two players on the ground to see different particles when a plane crashes into a building.
Code:
if Client.InVehicle then KillPlayer(Client);
This is a problem as you may have noticed by now. The server game engine should have no concrete knowledge of game clients.
The glue between game engine and the network engine is on this case handled by a mid-tier layer of Events. The above could simply be managed by doing a simple call to, for instance:
Vehicle.Exploded() is a delegate function that calls the Exploded() event to any event subscribers. On this case, possibly, the Client objects of the network engine.
I'll admit at this point that I never did a 3D multiplayer game. But I'm not sure I'm far off base here. It's just that I cannot conceive all the complexity of frame-by-frame calculations (movement, firing, collision detection, etc) in a 3D environment -- or pretty much any other environment for sure -- without the use of the event-driven programming paradigm to greatly simplify the binding of the several layers of code.
That said, it is also one of the main reasons modern games have so many bugs.