A Nimble Launch

Nimble2D LogoOn this first post of the new blogspace for Nimble2D, I'd like to do two things:  (1) Give credit where it is due, and (2) give a brief overview of how I see this project at the start.

So, credit ... First, a big thank you to Chris Williams for setting up ilovevb.net (a perfectly logical place for a project like this to land), and for providing the space and resources for me to blog about the project.  Second, I have to give a lot of credit to Dave Munsie of JGOware for his now-extinct DXGame engine, which really opened my eyes to how powerful doing 2D-via-3D could be.  (Now go to his site and play Retroblast ... then read the rest of this.)  Third, my recent epiphany on how to approach things with this project came about by reading the xna machine blog, where the concepts of matrix math and how game objects relate to one another (and to the camera) really became clear.  If you want to see some very neat VB.Net + XNA work taking place, be sure to check out that blog.

And finally, my traditional shout-out to the crew at the Game Programming Wiki (gpwiki.org), who provide a nice combination of friendly interaction and good brains to be picked.

Now, the project ... as given in the brief description: Nimble2D is a 2D game development library for .Net, based on SlimDX and DirectX9. It will use Direct3D9's Sprite functionality to create a fast 2D environment (with real-time rotation, scaling and blending), mobile cameras, sprite-based text and primatives, and real-time sound effect panning and volume based on sprite locations.  But first, I'll explain how I got here ... and where I think I'll be going.

I came to the point of writing my own 2D library due to a number of reasons.  First, my trusty tools that I've been using (VB6 + DXGame) are a bit long in the tooth ... although I'm happy with what they allowed me to do with Gem Raider.  Still, there were things that I wanted to do differently and I wanted to have a reason to get to use the .Net programming languages.  I was about half-way done with my new game project when it struck me that I should probably find a new set of tools to make the game with ... it would give me a very practical example of a game that I'd want to make, and a reason to learn how to use those new tools.  So, I looked around a bit and didn't quite find what I was looking for.  XNA was a bit requirements-heavy for my taste (I don't actually have a computer in my house that can install Game Studio Express due to OS or graphics card requirements) ... SDLdotNet didn't have real-time rotation nor additive blending (DXGame had spoiled me) ... Torque Game Builder didn't seem to fit my personal style ... and BlitzMax would require learning a BASIC-like language that wouldn't be very useful in a work setting.  So, I settled on VB.Net as my language (although I'll probably play around with C# as well) and looked for a way to tap into DirectX.  That's when I found SlimDX ... and suddenly everything came together.  Now all I need is to put together a fast, flexible 2D system ...

And that leads to Nimble2D.  Why "nimble"?  Well, frankly, all of the other names that I came up with first were taken or were hard to pronounce.  It was while I was describing to my wife (bless her for standing there and listening) how I wanted the cameras to work that I first used the word "nimble" as a descriptive ... and then I paused and ran over to Google for "nimble" combined with "game engine" and for "Nimble2D" ... and then I had the name.

So, here are some of the main concepts ... Imagine having a "game space" that is a flat surface, like a table top, to work on.  All of your in-game objects (sprites) are put down onto the game space in layers.  A camera is then hovered above the layered game space and snaps a picture of the current frame.  That camera should be able to move to frame the game space in whatever way the programmer would like, including rotation and zooming.  Now imagine having multiple game spaces to organize different aspects of a game -- a "main menu" game space, a "high score" game space, a "world map" game space, etc. -- and being able to switch between these spaces the same way a TV show director switches between his various sets.  This is the approach being taken with Nimble2D.  It will be a sprite-based, camera-based, matrix-based, real-time 2D-via-3D system ... and the library should allow the game programmer to just work with the traditional 2D settings (X, Y, Facing Angle, etc.).

Along the way, I hope to pack in some tricks I've learned as standard goodies within the libraries.  So now all I need to is write some code ... ;-)

-Matt

Published Tuesday, January 15, 2008 2:24 PM by MattWorden

Comments

# Pages tagged "nimble"

Pingback from  Pages tagged "nimble"

Sunday, January 20, 2008 8:39 AM by Pages tagged "nimble"

# re: A Nimble Launch

Welcome Matt!

Tuesday, January 22, 2008 12:10 PM by admin