About this blog
Developers journal for the developers at IndieZen.
Entries in this blog
This past month the IndieZen crew has been busily refactoring a few of our open source libraries and frameworks.
The Physics framework in Zen Engine has been getting a huge revamp. "Az", one of the colorful developers working on the project, has taken the original version, which was mostly just a thin wrapper over Newton Game Dynamics and turned it into something more akin to Physics Abstraction Layer.
I looked long and hard at PAL before deciding not to use it. PAL is well written, has a great license, and as far as software goes, there's nothing wrong with it. It just didn't fit well within our architecture.
The IndieZen coding style outlined by our architectural documents states that all public interfaces must be pure abstract classes without any leakage of implementation details.
We also have a great plugin system based loosely on Eclipse.
I wanted our physics framework to follow this, so instead of using PAL and/or writing a new facade for it, we decided we'd take our "Newton-esque" design and revamp it so that it would fit with using a variety of physics libraries.
The refactored code takes advantage of the Zen Core plugin system, and uses the same high-quality software design, style and architecture of the rest of the IndieZen code.
The refactor is still ongoing and will likely take another month or two, but in the end, we'll have support for Newton 2, Bullet, PhysX and ODE on a variety of platorms (Linux, Mac OS X, Windows).
The next major refactor area has been the Scripting framework which is part of Zen Core. While no new functionality has been added, this refactor is making it significantly easier to expose C++ classes to scripting languages.
Boost Python was my inspiration while tackling these new templates, but since it targets our scripting framework instead of directly using Python, this gives us the added advantage of being able to write one binding and target Lua, Python and Tamarin without needing to recompile. The scripting engine is loaded as a plugin at runtime.
As we add support for other languages as plugins (AngelScript, GameMonkey, Squirrel, etc), the same bindings should still work.
We've also made some enhancements to our Event system, adding support for multi-threaded events and event queues and providing a mechanism to marshal the events to specified threads... script events are only handled by scripting thread, render events are only handled by rendering thread(s), etc. We still have more features to add (prioritized event queues, and event queue templates that can handle a variety of payloads), but that will be another iteration.
The Event system enhancements will greatly simplify the use of multiple threads in both the game engine framework as well as the IDE shell.
The final enhancements has been part of Zen Enterprise, our enterprise application stack. Mostly the enhancements have been related to making it easier to specify message handlers.
I'm finding that while using pure abstract classes as the "API" portion of the framework, when I end up making "helper classes" that ease the use of the API, I'm using a whole lot of generics / templates.
The scripting enhancements used some of the fancier techniques available in C++, including templates, partial specialization and type traits. It's actually quite magical if you've never seen something like it before.
I'm looking forward to our next iteration... I'm not exactly sure what we'll be doing but I'm sure it'll be something along the lines of more integration with Ogitor. As another art pipeline we're also considering GameKit / OgreKit... either integrating with it or modifying it so that it uses our framework or... well, as I said, I'm not sure yet. I'll see it when I get there.
Thanks for reading!
Indie MMO Game Developers Conference (IMGDC) - now that's a mouthful. And what an extremely specialized conference... it is probably only going to have about 150 people attending.
Last year was fun and informative and I'm hoping this year will be even better, especially since this year we're the diamond sponsor.
I'm hoping this conference will be our warm up for some of the other conferences that we'd like to have a booth. That makes this conference a good one to use as practice / first conference since it's so small.
IGC '08 in Boston and eventually GDC '09 are the one's I really want to attend. I would also like to attend Virtual Worlds Conference in April '09, especially since it's here in New York but that conflicts with the Boston IGC '08.... oh well, Indies are our target market, so that decision is a no-brainer.
My request for a new computer plus booth and other accessories has been approved by the boss and I'll begin ordering the parts in a couple of weeks. I can't wait! I'm thinking a 30" Dell monitor, a couple of super fast SAS drives for the primary boot, program and data drives. I want some large SATA drives to make up >1TB Raid5 array for data storage. For video, a couple of (i.e. SLI) NVIDIA 8800 GT's, and then two processors (still undecided on AMD vs Intel) and 4 GB of RAM.
Peripherals will include a 3Dconnexion SpacePilot, an Intuos3 6x11 Special Edition tablet plus a 6D Pen. I'll need carrying cases for transport to / from the convention, plus about a 10 foot popup display for the booth.
If there's anything left over of the budget, a couple of PS3's would be nice too. Our MMO game server software will run nicely on IBM BladeCenter QS21s, but since I can't bring a rack and a few blades with me then I'll have to make do with a PS3... but hey, it's a great substitute and you can't beat the price. I would like to demonstrate the scalability of our MMO software and what better way is there than showing a small cluster of PS3's as a starting point and scaling to multiple BladeCenters with a bunch of QS21's as world servers and some LS21's for the general purpose computing.
I still don't have a topic title for my one hour presentation slot. I'm thinking of calling it "Indie Game Development 2.0" and play on Web 2.0.
What really stinks is the design track round table that is the same time as my session is "The Lighter Side of Sex" by Kelly Rued. How am I supposed to compete with that?!? Oh well, at least it isn't anything opposite Richard Bartle because then even I would skip my own session to attend his... lol
Hrm... maybe I can convince Johnathan to switch me to another time slot and make it a round table instead.
I've been spending extra time working on the .org website to be used for hosting the open source projects for IndieZen. I can't wait until it goes public so I can show off some of the stuff I've been working on.
A lot of it is unfinished since I'm doing all of the coding right now and mostly I'm concentrating on the IndieZen Game Studio. Some of the code is just blatant copying / pasting of the Game Studio code and adding the Zlib license. Anything that's not specific to our plugins for the Game Studio is going to be open source eventually, but I really want to make sure everything that goes "open" looks nice.
Oops... time to get back to work.
For the past few years I've been blogging on the Garage Games website, but recently I've switched gears from game creation to creating game tools. My last blog didn't seem to be very well received since I'm starting to compete in the same space as GG, so I've decided I'll start blogging elsewhere... so here I am.
Currently I am flushing out the 3d modeling plugins for IndieZen.
Although Eclipse is Java and the IndieZen plugins are all in Java, the actual meat of the implementation is in C++. This allows me to have the performance of native code yet still remain compatible with the Eclipse platform.
Today I worked on a bunch of the implementation for the modeling.core and modeling.ui plugins.
I've kept the plugins separate and loosely coupled through what is called "extension points" in Eclipse. Among other things, this will allow other developers to create their own scripts and plugins that can directly manipulate the 3d models and add their own extensions to the modeling tool-chain (exporters, morphs, animation extensions, etc).
Integration and extensibility is my key focus. I have a lot of good ideas and some nice algorithms, but I'm not so arrogant as to believe I can do it all by myself.
Anyways, thanks for reading... happy game developing! :D