Technical Difficulties

So why haven’t I started on Zeta?

I could hem and haw, but the truth is that I haven’t started because of the Oxeye guys. It’s all their fault. Since encountering the amazing stuff they did in a short period of time for a competition, I have become thoroughly dissatisfied with my own game framework. It’s time for a revamp…if I can make myself feel up to it.

So what does it need?

Cleaner layout. The display code in particular is pretty awful. Not only do I not have a scene graph, but things don’t even draw in the order they are passed in because I haven’t implemented an IDrawable interface class. Right now polys draw first, particles draw second, sprites draw third and lines draw last. That’s sufficient for Planitia, but it’s just not going to cut it for anything more complex. I also need to abstract a lot about the drawing code to make it easier to throw objects at the renderer.

Second thing, UI code. Ugh. Not only am I missing lots of necessary UI widgets (like text input boxes), but my UIs are laid out using a custom text format when they should obviously be using XML.

Third, scripting. Again, a custom language. Here I’m torn. Lua is so popular these days (the Oxeye guys use it and all World of Warcraft mods are written in it), but we’re actually using Python at work. In the end, I’ve used both and they aren’t that different (they are both scripting languages in the end) so it probably wouldn’t be hard to convert between them. So I think I’ll integrate Python, since it’s more directly related to my job.

Fourth, performance information. I have a very basic profiler that I stole out of Game Programming Gems 1, it needs to be seriously revamped. I like the colored bars I’ve seen on a lot of games in development where the length of the bar denotes how long it took the last frame to render and the colors on the bar tell you which subsystems took the most time.

Plus, we need smart pointers. Yes, I know, I should already have smart pointer integration. All I can say is that it wasn’t a priority when I started coding up my little 3D terrain demo three years ago. I’ll probably use boost:shared_ptr, although the last time I tried to download and integrate boost it was a complete pain in the butt.

But that’s not all, of course, because we haven’t even talked about tools yet.

The two biggest tools that I absolutely must have are a GUI editor and a 2D map editor. These will both probably be written in C#. A 3D map editor would be fantastic but it’ll go on the back burner.

So what do I like in my code?

States and events. I think I handled this pretty well. States are black boxes, and they have OnEnter() and OnExit() methods so that I can do things like animate GUIs for a state. I can also have multiple states running at once, or “pushed” states that run exclusively until they are “popped” (think about pressing ESC to get the main menu of a game – usually this causes all other activity in the program to stop until the main menu is cleared).

The event system is abstracted and works well, though it needs more event types and the types it does have could probably use some cleaning.

Networking. Works okay but way too much “raw” code. Need to wrap that up into easier-to-use functions and debug some stuff. But networking works with the events to create a system that stays in sync well, at least on a LAN.

Text handling. This may seem silly but I think text and fonts are a really low priority for most game programmers. My system can return metrics for a string, thus allowing things like centering the text and word-wrapping that works correctly even if the text in the string changes later. It also supports drop shadows, transparency and colored text. I use bitmap fonts because I don’t want to depend on system fonts since I’ll eventually want to go cross-platform.

Now do you see why I haven’t started on Zeta yet? I basically need to write a new framework to replace my existing one before I can write any more games. Yes, that framework will make making games so much eaiser, but…

Ah, well. Now that I’ve made the list, I don’t think I can help but follow it.


Name That Game: The Triumphant Return!

You know what? I’m not going to let the internet spoil our fun. That would just be stupid. So once again, Name That Game!

This one had a lot in common with Crusader: No Remorse, except it had an even darker storyline.

Name and developer, please! If you win, I promise not to implant a bomb in your head and send you out on suicide missions.

Edit: The game was Meat Puppet, by Kronos Digital Entertainment.


Merry Christmas

Merry Christmas to you and yours, and may you have a wonderful holiday.


Zeta: Update 2

The more I look at that Wizard code I wrote the less appealing it is. Once again, it’s very one-offish and will require a fair bit of work to get up to snuff.

Once again, I will try my best to split my time evenly between engine construction and content creation. So here’s how I plan to spend the “engine construction” half of my time.

* Fix various bugs in the current platforming mechanics of Wizard. Right now you can fall right through platforms if you’re going fast enough, the character only has one hit detection point (middle of the feet) and for some reason climbing up ladders and ropes is slow. All this needs to be fixed, and there are lots of resources out there to help me, one of which is JNRDev.

* Hack the world editor for Inaria to become a level editor for Zeta. Get Zeta’s code loading those levels.

* Put in combat code so things can shoot at each other.

* Add a conversation system so we can do plot. (This will be stolen wholesale from Planitia.)

Seems doable in 20 hours.

On the content side:

* Make at least one 64×64 map. Since the tiles will be 8×8 in Zeta that means more of the map will be visible at once in Zeta, thus leading to the feeling of a smaller space. Thus, more than one map would be a good idea, but we must get one in; and it must have obstacles that require new powers to overcome (again, without this it’s not a Metroidvania).

* Create several enemies with different forms of attacks.

* Create the powerups that give Zeta new powers (I think the absolute minimum would be a double-jump to reach high areas and a super-shot to knock down locked doors or weak walls.)

* Create all the conversations to dole out the plot.

* Create at least one boss character.

* Find appropriate sound effects and music (Zeta will not be a silent game).

That also seems doable in 20 hours. I think it’s possible for this game to be a success and I can’t wait to see how it comes out 🙂


Galactic Civilizations II: $2

Galactic Civilizations II is currently $1.99 on Impulse. That’s a crazy price for a game that can provide so much entertainment. At this point, you’ve got absolutely no excuse.

Update: Well, it seems the sale expired right around the time I discovered it. Sorry about that. On the upside, you have an excuse again!


Well, Frumple.

Guess what broke about a week ago. ‘Sright, my computer. All my attempts to resuscitate it have been met with failure. My attempts to commandeer my daughter’s computer this weekend were met with pleading and begging and tears (real, actual tears!)…so I decided not to do that.

Which left me with my laptop. Which, if you’ll recall is really just a netbook (a Gateway LT31, in fact). It’s got two gigs of RAM and a dedicated ATI Radeon X1270 graphics processor, unlike most netbooks which just use an Intel 950 Integrated Graphics Processor, which are cheap and work fine for web browsing but are nigh-unusable for games.

So I hooked my monitor, mouse, keyboard and speakers up to my laptop so I could at least compute in comfort.

Then I got out some games to see how well the rig would run them. The results:

Oblivion: Ran, but was unplayable even on the lowest graphical settings. This wasn’t a big surprise or disappointment. I knew I’d have to drop back a generation or two to get some results.

Morrowind: Ran fine; but I had to turn the graphics detail and the draw distance all the way down to get above 15 FPS outside. So it looks like Vvardenfell is constantly shrouded in fog. Interiors, on the other hand, run great – and dungeons are interiors so dungeon running is fine. Overall, playable.

World of Warcraft: Again, detail at the lowest settings. Large cities with lots of people like Dalaran are complete lag zones, but questing out in the wild greatly improves the frame rate. Overall, playable, if slightly annoying.

Deus Ex: The game defaults to 16-bit color mode, which I haven’t changed. Frame rate is good, if a little choppy in some places. Definitely playable.

Warcraft III: Perfectly playable on medium detail. I can even play on Battle.net and watch replays.

Starcraft: Perfectly playable. Again, playing on Battle.net and watching replays is no problem.

Half Life: Runs great, no changes needed.

System Shock 2: The big surprise of my experiments, this game runs perfectly without any need for tweaks (other than the minor ones necessary to get it running).

Fallout: Runs fine.

Tonight I’ll be trying Baldur’s Gate 2 and I might even be able to get away with Neverwinter Nights.

Oh, and Zeta development works fine, yadda yadda yadda.


Assemblee Vs. Zeta

Well, the comments were overwhelmingly in favor of my continuing Zeta. Now, I was going to make a Metroidvania either way, but if I could have found some art assets to help me I would have been willing to submit Zeta for the competition.

But sadly, there was a dearth of platforming shoot-em-up graphics in the competition.

You can see all the art assets submitted for the competition here. Warning, that link will take forever to load, not just because it’s every piece of art submitted, but because it’s every version of every piece of art submitted. Twice, for some reason. Also, believe me, some of the stuff on there is just plain weird.

Now, some of the artists just went off and did their own thing. Some of the stuff doesn’t look like anything more than a concept sketch – and since we’re not allowed to alter anything in the programming portion, they’re nigh-unusable.

But some of the artists had done this sort of thing before and provided very complete sets of graphics. For instance, if you’re looking to make a Roguelike, you’re covered. If you’re looking to make a top-down eight-way game (like the original Legend of Zelda), you’re covered. If you’re looking to make a Mario-style platformer where the character just runs and jumps (and perhaps has a short melee attack), you’re covered.

But if you’re looking for a run-jump-shoot platformer, there’s really only one sheet for that. And it’s a doozy

Notice that the top and bottom halves of her body are split so that she can run in one direction while firing in any other direction. Also notice that she can…apparently turn into a red-eyed cyclops for some reason. Good, good stuff.

But it’s not exactly what I’m looking for. Zeta lives on a space station, and isn’t a cowgirl. Although a space cowgirl like a female Malcolm Reynolds would be awesome…

But no. I’m going to steal the hell out of that sprite sheet, but I’m going to turn her into Zeta, which means my game can’t go into the Assemblee.

Still, if you’re looking to make a game (or trying to come up with an idea for a game) definitely check that page out while it lasts.


The Assemblee Competition

I’d been hearing about this TIGSource competition for a while. It’s a two-part competition – in part one, artists and musicians made art and music without knowing exactly how they would be used in the final game. In part two, which started over the weekend, designers and programmers will use the assets created in part one – and nothing else – to make their games.

So now I’m torn. Should I continue on with Zeta, or put it aside in an attempt to win honor and fame for the name of ViridianGames?

Huh. That last part could be a rap lyric. If anyone ever wrote a rap song about me.

So what say you, my loyal readers?


Zeta Update 1: 30 minutes

So last night I started on Zeta. In about a half-hour I was able to get graphics integrated, create a scrolling tiled world, and get basic runing and jumping physics in, collecting objects and climbable ladders and ropes. I even posted a Youtube video of my progress!

Okay, okay, ya got me. I didn’t really do all that work in a half-hour last night. Instead, I’m going to cheat like The Cheat and start with an existing project I did a while back. I know that technically this means this won’t be a 40-hour game. Don’t care.

Just like with Inaria, I’m going to make a basic list of features that MUST be in the game, features that would be nice to have, and then features that would make me really happy if they make it in.

MUST HAVE:

A main character that can run, jump and shoot.
A tile-based world for the character to traverse. This world can be made up of “zones” that can scroll in all directions. Zones can (and should) link to each other.
At least one enemy type to fight. (Just one would be boring, but we must have at least one).
At least one “powerup” that allows the player to access areas they couldn’t before (without this, the game isn’t a Metroidvania).

WOULD LIKE TO HAVE:

Multiple movement upgrades (slide, double-jump, glide, etc).
Multiple weapon upgrades.
Multiple enemy types, with some with weapons and some without, with unique looks and attacks.
An overall storyline.
A big boss to fight at the end.
A resolution to both the game and the story.
At least one “chiptune” music and sound effects.

WOULD LOVE TO HAVE:

Lots of dialog at various points in the game, detailing the story.
Lots of specialized animations for various things like the double-jump.
Multiple minibosses.
A way to lengthen gameplay by recycling or reinterpreting the level data, just like most Castlevanias do.
Multiple chiptunes for different parts of the game, including boss themes.

The game’s native resolution will be 320×240. It will play in a 320×240 window, a 640×480 window, or fullscreen at 640×480.

Again, my plan is to spend half of my time working on the engine and tools and the other half of my time working on the game’s content. I intend to steal almost all the graphics, but I’d really like to do the music myself, almost certainly using a tracker of some kind.


Now Then…What Shall We Talk About?

Seriously. I’ve been wondering what the hell I’m going to do with this blog for the last two months.

This blog was basically always about what I was working on and learning outside my job. Well, currently I have no side projects (I need a Mac to continue Inaria iPhone development, and I just can’t face the code mess that is Planitia any longer).

And I haven’t learned anything recently to merit a technical article.

And, sadly, I’m giving up on Name That Game. Stupid TinEye.com.

But then I had an idea, once that should have occurred to me before.

I was going to write an article called “Amuse-Bouche“, about the rather large number of short indie games that attempt to get a point across or create a mood in a small amount of gameplay. One of the defining aspects of the amuse-bouche is that it ends; there’s no infinite number of levels that provide no resolution. In fact, providing a resolution is a big part of what an amuse-bouche game is about.

An excellent (indeed, near-perfect) example of an amuse-bouche game is Small Worlds. If you’ve got ten minutes, play it right now.

Other amuse-bouche games would be You Have To Burn The Rope, Achievement Unlocked and ROM Check Fail.

So to sum up, an amuse-bouche game is one that a) can be played typically in an hour or less, b) has a definite ending, and c) deliberately evokes a reaction beyond “having fun gaming”.

And then I realized that this is exactly what I should be doing.

Planitia was too big. Star Revolution was too big. Inaria and Sandworm were pretty much just right.

And what was I going to do next? A 3D RPG. A Neverwinter Nights. All on my own. Yeah, right.

So…all hail the return of the forty-hour game! And it will be my personal goal to create at least one of these every month for the next year.

I already know what my first one is going to be. It’s going to be a short Metroidvania called “Zeta”, and it’ll be directly inspired by Iji (which isn’t exactly an amuse-bouche game but everybody should play it anyway).