Hey devs. I want to show off some of the technology under the hood of [url="http://www.gimbalgame.com"]Gimbal[/url]. I'm quite proud of some of the tricks I used to make this game playable on modern computers, as a real time networked game.
This is an open thread. Ask me anything.
XNA for sound/graphics/input
DirectX for gamepad support
Lidgren for UDP networking
Visual Studio 2008 is my IDE
Paint Shop Pro 7 for art
Audacity for sound
Reaper for music
Lightworks for video editing
[b]Some generally cool stuff...[/b]
Per-Pixel collision detection, optimized with bounding circles. All the parts of a ship affect the physics and handling. Ships are treated as rigid bodies, and collisions result in a semi-elastic response. For correct collision response, I calculate normals for all the outer surfaces.
Aerodynamics. Players can mount functional control surfaces to ships. Forces are calculated as a function of air velocity.
Custom GUI engine and widget kit. For typing input, I have to poll the keyboard. I had to implement word wrapping, which was a bit of a bear.
Motion blur on particle effects. This small effect adds a lot to the overall look. For Gimbal, I just stretch the sprites.
One aspect of the component-based physics engine: Missiles physically leave the launcher when fired, and free up some weight and drag on the parent ship.
Client-Server multiplayer network model. Clients send their input changes (deltas), and the server runs the simulation. Server sends regular vehicle state updates to the clients. I use the Lidgren networking library.
The physics engine is multithreaded and runs on N logical processors. I split the work across vehicles in the game world, which do not have direct dependencies on each other. When I calculate collisions, each thread computes a "pair" of possible colliding bodies.
There are more cool programming tricks in this game. I can speak to any part you are interested in.