Sign in to follow this  
ColinShark

The Tech of Gimbal

Recommended Posts

ColinShark    118
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.

[img]http://www.gimbalgame.com/screens/email_triscreens.jpg[/img]

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

[b]Tools[/b]
    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.
[img]http://www.gimbalgame.com/screens/tech/hit_detect.png[/img]

Aerodynamics. Players can mount functional control surfaces to ships. Forces are calculated as a function of air velocity.
[img]http://www.gimbalgame.com/screens/tech/aero.png[/img]

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.
[img]http://www.gimbalgame.com/screens/tech/gui.png[/img]

Motion blur on particle effects. This small effect adds a lot to the overall look. For Gimbal, I just stretch the sprites.
[img]http://www.gimbalgame.com/screens/tech/blur.png[/img]

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.
[img]http://www.gimbalgame.com/screens/tech/missiles.png[/img]

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.

Share this post


Link to post
Share on other sites
ColinShark    118
[quote name='Slig Commando' timestamp='1351214436' post='4993994']
Very cool. Im voting to greenlight it on steam.
[/quote]
Thanks, dude!

It is apparently "58%" of the way to Greenlight, whatever that actually means, and very slowing rising.

Share this post


Link to post
Share on other sites
Nypyren    12063
Whoa, this looks pretty sweet. Once upon a time I was thinking about making a game like this (except with Geometry Wars graphics).

I'm going to sink some hours into the demo and vote for Greenlighting it!

Share this post


Link to post
Share on other sites
ColinShark    118
I just released a patch that takes care of some of the connection bugs by updating to the newest build of Lidgren (my network library).

And for the next 4 days, Gimbal is being featured on [url="https://indiegamestand.com/"]IndieGameStand.com[/url]. It's Pay-What-You-Want, which people seem to like.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this