Zeta Update: Three Hours

No, I worked more than three hours on Zeta this weekend, but a lot of work was done on the map editor. Just like with Inaria, any work I do improving my framework doesn’t count towards my time.

Basically all I have to do is make the map editor a little more flexible and I’ll be set. I eventually want an excellent map editor, with variable map size, lots of data for each cell, and lots of extra features, but that’ll be in the future.

Here’s a more detailed look at how I intend to pursue Zeta:

DESIGN OVERVIEW

TIER 1: Must be completed within the 40 hours or the project is a failure.

Each “zone” in Zeta will be 64×64 tiles, so we can use our existing editor.

Our character will be able to initially run, jump, climb ladders, and shoot left and right.

We will have at least one enemy type for our character to overcome.

We must have at least two zones with a zone link between them.

Our goal must not be accessible until the player finds an upgrade of some sort. (Probably double jump.) This is what makes it a metroidvania.

All graphics should be ripped from Wizard for now, for speed’s sake.

At this point, a playthrough of the game will probably take about ten minutes.

TIER 2: Bring the game closer to feeling like a full game.

A menu.

Save/load.

More zones.

More powerups, and more areas to explore.

More enemies. Steal attack patterns from other games.

Add at least one musical track.

Sound effects from SFXR.

At this point, a playthrough of the game will probably take about half an hour.

TIER 3: Finalize the game.

Start replacing the Wizard graphics with Zeta-style graphics.

More music.

Add a conversation system that will allow us to tell our story.

Add some boss fights.

Testing to make sure the basic gameplay is sound and the game can be completed.

At this point, a playthrough of the game will probably take about 45 minutes to an hour.

Not Dead, Just Busy

As I’ve mentioned before, while we’re not really crunching on Elemental, we are very busy…and the end result is that at the end of the day, I don’t feel like coding or writing blog posts. (My World of Warcraft characters have made great strides, however.)

But if I can’t do anything else, I’ve decided to at least bring back Name That Game! Yes, I know, TinEye.com. Well, here’s the thing – TinEye can only compare the image against others on the internet. So if I take my own unique screenshots (instead of relying on MobyGames) it’ll be a lot harder for TinEye to find a match.

So expect more updates in that regard, at least. I still don’t know where I’m going to find the energy to work on Zeta, though.

DaisyMoon

So what exactly is DaisyMoon?

DaisyMoon is a fairly complete black-box game engine produced by Oxeye Games as their internal engine. It’s a Lua-based extension of Daisy, which was their previous engine. All of Oxeye’s game-specific code for a DaisyMoon game is written in Lua.

You can view the official wiki for DaisyMoon here, and even download the latest version here. Unfortunately, the docs in the wiki are incomplete – most pages have lots of red entries, signifying that there’s no associated explanation for the at function.

Fortunately, you have four very different games with the full Lua source code avaiable: HouseGlobe, FillAuth, Because It’s Fun, Fay, and Horror Tactics.

About the only thing DaisyMoon doesn’t do is 3D, but I don’t really need that for Zeta. Hopefully between the solid engine and copious code swiping I can get Zeta up and running quickly.

And now for another twist – I’m not going to just blog this, I’m going to video blog it. Every Friday I’ll have a video up on YouTube talking about what I got done on Zeta and what I learned about DaisyMoon.

Should be fun.

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.

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 🙂

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?