Recent articles

Back online

For the past two weeks you may have noticed my website was not online. My domain name expired and thinking that I have set the domain to auto-renew, didn’t take any action to renew for another year. My domain was open to the market for a short while, but I don’t think anyone would want it anyway. So I paid to have it back and the site’s back up. In the meantime I’ve been working on a few more things…

I finally finished my basic scene graph, which loads from external text files. With it you can set which meshes to use, where to put them in 3D space, and what textures to load. Finishing that, I decided to tighten up the graphics a little bit. So I added lighting and a simple specular material that made the models pop. Nothing very awesome but getting there. Right now I’m learning how to write shaders in HLSL.

With this experience, I plan to make a game out of it, simpler than Roll ‘Em Out. It will likely be a Bomberman clone, just small enough to complete it in a reasonable amount of time…I’ll give myself a few weeks to finish a playable version of it.

Indie game alert: Squishy

Taking a break from my usual programming posts this time. I regularly check out some of the developer journals from GameDev, and in particular those that report progress on some games they’re working on, like myself. One that really caught my attention was Squishy- a 2D action game with platforming elements. (For some reason I thought the game was called “Squish!” Well, it sounds better to me, anyway) The author of the game, Aardvajk, has been working on this game for a few months, mostly tuning the physics and controls and it’s starting to pay off.

This game still has quite a ways to go before it’s released, but I’ve played a recent demo and there is a lot of good potential in this game. Mixing in elements from Bionic Commando and World of Goo, Squishy lets you take on the role of a roundish blob with two arms that can extend in any direction. These arms let you stick on to almost anything. You can use each arm by pressing either of two keys on the keyboard, and aiming where you want your arms to go is as easy as clicking a spot on the screen. Being a squishy blob, you can also roll around along the floor or make short hops when your arms are not needed.

Squish! gameplay

The latest demo of Squishy is still very early in its development stage but it already is very playable. Even though it only includes one small stage with no actual goals, the controls feel solid enough to make it very fun to play around with. The physics in the demo are also very good, giving a good sense of weight and inertia as you navigate through the level. Your character’s movement is definitely more fluid and less stiff than in Bionic Commando. I was able to cover long distances quickly Spider-man style after a few tries with the controls.  There are blocks scattered around the world that you can grab and throw. You can even pick one up while swing with your other arm, and the added weight of the block will reduce your mobility.

The gameplay is already there- it just needs needs the “meat” to make it a fully featured game. Aardvajk has been using a custom level editor to work on many levels and add new obstacles, and considering it’s all programmer art it doesn’t look too bad. The internals are already in good shape, and all that’s needed are a few coats of polish to make it really stand out from the rest of the platformer pack.

Basic scene graphs

My model viewer is coming along nicely and now I’ve started to implement a basic scene graph system that goes around it. Because if you want to create a semi-manageable 3D game, you gotta have a scene graph. My system is a simple one- create “model” objects that have pointers to mesh, texture and matrix transform objects. No nodes or hierarchy crap, just for now, anyways. I have no need to create complex relationships between the models yet. Model objects are just empty shells until you give them meshes, textures and transforms to point to. Then you’ll see a bunch of rendered objects on the screen.

Scene full of cars

Three cool new things about this screenshot- First, the loading times are much faster. I replaced the slow vector insert() function with the much quicker why-didn’t-I-use-it-before push_back() function. Second, there is actual lighting (and therefore shading) on the models, so complex shaders and HDR can’t be too far along :P Finally, I’ve been logging some of the events happening on the screen such as the mesh and texture files present in the scene.

But wait, there’s more…

3D model viewer in progress

While working on the .obj model viewer, I quickly realized that reading moderately large text files can be quite slow. I’ve been using the file stream functions to open and read files and then separate the data into usable pieces. I’ve successfully been able to load any .obj model that just uses triangle faces, but reading just a few thousand faces from a file takes just over a second in most cases.

I know that there are .x files made specifically to work with DirectX (and they carry much more information than vertex, normal and texture coordinates) but .obj files appear already suitable for adding static, non-deformable models. They are just loading far too slow for practical real-time uses, such as loading entire levels from a game. So I have already thought up some ways to create a binary file format that stores the same information as text from an .obj, but in a more concise manner.

But wait, there’s more…

9 days with DirectX

Nine days. That’s what the registration reminder of Visual Studio told me how long I was using the program. And how long I’ve spent using DirectX, never having tried it before. And for nine days, I think I’ve made good progress…but more on in just a bit.

I decided to take a short break on Roll ‘Em Out and learn some new things. Programming on a Mac was a refreshing experience, and XCode was really easy to use. And if you don’t want to use XCode you have your Terminal command line too in all its Unix-y goodness. Porting the game from Windows was a snap, thanks to Mac frameworks that already exist for SDL, and graphics running on OpenGL. This is where I was working on my game for the past month, but after being burned out by a lot of physics testing I decided to give it a break.

Additionally, I started to miss working on a Windows environment, as crazy as that sounds. Well, the actual reason I wanted to go back was to learn DirectX. This topic at the Chaos Rift forums got me interested in trying it out. See, if OpenGL 3.0 is heading towards more of a rehash of its older 2.1 implementation and the OpenGL ARB is not listening to the professionals in the game industry, might as well try the alternative as sort of a safety net. Code::Blocks IDE (what I typically use) and DirectX wouldn’t make the best combination so I installed Visual Studio 2008 Express. So I continue to code but back on a different platform, on a different IDE and a different graphics library.

Back to the progress that I’ve made: DirectX was a struggle to learn in the first two or three days but after that it was all like picking up familiar concepts in new ways, and quickly got accustomed to the debugger tools that came with MSVC++ (a real time saver). That is not to say I didn’t encounter any major problems. Here’s how the 9 days panned out, to the best of my memory.

But wait, there’s more…

What’s going on with my latest game

Roll ‘Em Out is a puzzle/platformer game I am working on, which is a tribute to the Super Monkey Ball series. Basically you roll a ball around a course, trying to get to the goal area without falling off. If you found my blog, you probably came through The Chaos Rift or my YouTube channel, so you might have read about it already. If not, here’s the last video I recorded for my work in progress.

Keep in mind that this video is over a year old. Also, I stopped working on it shortly after making this video, and didn’t start again until last month. Things that have changed since the making of this video:

  • Better collision detection (had to basically re-write a lot of code and remove some junk code that wasn’t doing anything at all)
  • More realistic reactions to landing/bouncing on slanted surfaces
  • A simple level loader that reads text files to draw polygons and load textures

Right now work on the game is on hold again, but only because I want to get back into learning a better way to write code to render graphics, and copied a lot of the code for a small “sandbox” program to test out physics. When I get the physics down to a satisfactory point, I will port that code back into the game.

Welcome to the new Zero Dominance!

This blog is mostly a continuation of the previous Zero Dominance, in which I provided tips for web design and development. But I’ve decided to increase my scope this time and provide some insight into the projects that I’m working on. This includes both web development and programming projects. Previously these project updates had a home in The 32 Bit Shell. You could say that the new Zero Dominance will combine all my help and development-related articles into one website, and I would probably keep it that way.

A bit about me: I’m Chris, known in some parts online as CC Ricers, and currently work as a contractor for a web development company. My work is for the most part technical, and I have also gotten involved with learning and programming in C++ in my spare time. Besides typing away on my computer, I also DJ as a hobby and have a growing collection of drum & bass and house music.

I also maintain GameSnooper, a little website I built as an experiment. Right now, it’s nothing more than a portal to a random assortment of daily video game news. But when I get to work on some new features for the site, I’ll let you know here.