Jump to content

  • Log In with Google      Sign In   
  • Create Account


ColinShark

Member Since 11 May 2011
Offline Last Active Nov 12 2012 08:27 AM

Topics I've Started

The Tech of Gimbal

25 October 2012 - 11:31 AM

Hey devs. I want to show off some of the technology under the hood of Gimbal. 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.

Posted Image

APIs
    C# codebase
    XNA for sound/graphics/input
    DirectX for gamepad support
    Lidgren for UDP networking

Tools
    Visual Studio 2008 is my IDE
    Paint Shop Pro 7 for art
    Audacity for sound
    Reaper for music
    Lightworks for video editing
    
Some generally cool stuff...

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.
Posted Image

Aerodynamics. Players can mount functional control surfaces to ships. Forces are calculated as a function of air velocity.
Posted Image

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.
Posted Image

Motion blur on particle effects. This small effect adds a lot to the overall look. For Gimbal, I just stretch the sprites.
Posted Image

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.
Posted Image

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.

PARTNERS