Wildhollow Design Thoughts 1

Ξ March 31st, 2008 | → 0 Comments | ∇ Indie Games, Wildhollow |

Spandex Force is out of the door, and it’s actually done reasonably well - I’ve more than recovered my expenses for the game, and I now have some dough to spend on my next project, Wildhollow. I still haven’t decided on that name; it’s hard to find a good name for the game when I don’t even have the game design completed yet! I’ve gone from a straight sim/management game to a puzzle/management game, to a management/adventure game…and now finally I’m considering a management/adventure/puzzle game.

Mind you, it’s not like I’m changing my mind every day. I kept the next to last design for over a month, and it’s just the latest week that I realized that puzzles probably will be needed for variety. I’ve skipped the simulation ideas since I want a simpler game; I want people to be able to click around and get it easily. The adventure parts are definitely here to stay, though, and I think a little management is good for both body and soul, so it’s remaining as well.

Now, what’s this about adventure parts? Here’s an ugly sketch of a rural fantasy town:

In the game you’ll be met with loads of screens like this. You’ll see towns, dwarven fortresses, dragon caves, and other locations, and in each location you can click on things to make various stuff happen. There will be items to pick up, people to interact with, stores and houses to enter, and lots of weird dialogue. One thing I noticed from making Spandex Force is that I like writing dialogue…and believe it or not, but Spandex Force’s story has received a lot of praise. So, it seems logical to me that I ought to expand on that a little. Spandex Force was linear, but this time around I’ve opted for a much more data-driven game structure which allows me to create dialogue trees and puzzles and many weird things….which is essentially what I mean by the adventure part of Wildhollow.

Making things data-driven as opposed to hard-coded is a relatively new thing for me. Optimally I should’ve gone for a scripting language, but I’ve chosen to have a bunch of XML files instead. Here’s an example of one of the locations mentioned above:

  <location id="3" bg="301">
    <hotspot x="428" y="200" image="600" item="Compass"/>
    <hotspot x="208" y="308" image="665" location="4"/>
    <hotspot x="428" y="700" image="664" location="2"/>
    <hotspot x="528" y="400" image="664" dialogue="501" if="Compass" else="500"/>
  </location>

Granted, it’s not much to look at, but it allows for a surprising amount of flexibility. What’s described in the snipped above is a location with ID 3 that has a background with ID 301. It has a number of hotspots that either lets you pick up the item named Compass, go to other locations, or trigger a dialogue. The if/else is used to make checks against certain items. I.e., before you have the compass clicking that hotspot will always trigger dialogue 501, but once you have it you’ll trigger 500 instead. This can be applied to locations as well: you can’t go though the Unnecessarily Dark Forest before you have a compass, for example. (’Cause otherwise you’d get eaten by grue. Grue hate magnetic needles, see. Nah, I’m just kidding, this isn’t part of the game.)

Of course, that doesn’t sum up everything you can do with these location descriptions - I’m adding attributes describing how the hotspot should look, what flags it should check against, and lots of other things. But I just wanted to give a general idea of how I’m structuring the game. Not that you’re any wiser now; guess you’ll just have to wait and see how it turns out!

 

Spamtastically Ridiculous

Ξ March 26th, 2008 | → 1 Comments | ∇ Observations |

E-mail is incredibly useful, and since I’m not terribly plagued by spam I’m fairly happy with that means of communication. But every now and then a few spam mails get through, and my cat-like curiosity makes it inevitable that I have to take a look at what they’re trying to sell this time.

…And I’m constantly surprised by how ridiculously formulated spam can be. Let’s have a looksee at what’s in my Trash folder:

First of all we have the enlarge your penis spam. Sure enough, they’ve found something that’s bound to cause a subconscious nervousness in all but the most well-endowed males, so it’s bound to catch one’s eye at least the first time one sees it. Good going, spam! Too bad that it’s always written with appalling grammar, so there’s no chance of receiving a treatment other than a quick press of the Delete button. If I were ever even considering trying some procedure like that (not that I need it! honestly! really!) I wouldn’t let anyone who can’t spell or apply proper punctuation near my precious parts.

Then there’s the cheap software spam. I don’t get the point of this. Sure, in Asian countries (and other places) it might be common to buy pirated software but in the West (or rather cold North) most people I know either buy the full price version, or download it for free. I never see people choose the middle option - it’s the worst of both worlds. “Hmm… Let’s see… I can get an official version of this DVD for $25. Or a pirated one for free. Oooh, but look here! A pirated version for $5; I’ll take this one!” Personally I go for another option: “$25 for a DVD? Screw that (unless it’s 300)! But if I see it for $10 I’m taking it, ’cause I really want the extra material.”

The we have all the spam for celebrity porn. Okay, I may be going out on thin ice here, but I personally see no reason why I’d want to watch celebrities do naughty things in the first place. They’re not trained professionals, so the sex will be boring to watch anyway! Delete!

There’s countless more examples of bad spam that seems badly put together, and not really thought out. But the prime example must be something that’s started to pop up the last year or so:

“Hello! I’m tired tonight. I am a nice girl that would like to chat with you…”

What the… If I were looking for a nice girl to talk to, why would I ever want to talk to a tired girl?! Sheesh. I don’t know what these people are thinking. Are they trying to make some strange connection between tired and bed and sex? Have these people ever seen a tired girl? Sex would be a pretty low prio thing in most women’s minds if they’re tired. (With exceptions of course. I’m trying to write something mildly amusing here; not make general comments about how women work or don’t work. So if you were thinking of writing “oh-oh-oh, you’ve been with the wrong kinds of women then,” just don’t.)

This “I’m tired” business must be a cultural thing. Somewhere in the world it has to appear appealing to people, but it just raises one question in my mind: if she’s so tired, what’s she doing by the computer spamming e-mails instead of going to bed?

 

Game Design Rant: Hidden Objects, Adventure Games and Wildhollow

Ξ March 13th, 2008 | → 3 Comments | ∇ Games, Indie Games, Wildhollow |

Hat-trick! I haven’t been blogging much lately, but today it’s the third day in a row! And I have a very interesting topic to bring up: hidden object games, and why I hate them.

First things first: hidden object is a genre that give you a screen cluttered with items, and it’s up to you to find all the correct ones within a certain time limit. That’s it. Seriously, that’s it…and still, people love these games. A few days ago I tried a number of popular titles such as Cate West: Can’t Remember the Rest of the Name, and Big City Adventure: Sydney, Australia. I had tried a number of these games about a year ago, and expected that a lot had changed. But no, it’s still almost the exact same gameplay. The presentation was brilliant, but the gameplay didn’t fascinate me at all.

Okay, I have to admit that there have been some changes: today’s games often feature heaps and heaps of different kinds of minigames in between the find-the-object screens, and these minigames are often very fun and exciting. Unlike the main screens.

Back to my dislike of these find-the-object screens. At first I thought that it was a fluke that these games did well, but it seems pretty proven that people love this style of game; and the point was driven home to me just when I was getting fed up with Abra Academy: Returning Cast after 15 minutes. I’m paraphrasing the conversation that occurred:

“Sweet mother of f-ck! I’m so bored at this game! I’m uninstalling this right now!”
“Hey, what’re you playing? Let me see.”
*Click click*
“Okay, are you done now? Seen enough?”
“Wait a sec…”
*Click click click click*
“Come on! I’m bored! I want to do something else!”
“No, wait! I have to finish this level!”
*Click click click…*

To my amazement I saw someone get instantly hooked by the game I was bored to tears with!

I started thinking about why I don’t like the gameplay, and I think it can be summed up in two things:

  1. I really really don’t like spending too much time just looking at a single screen.
  2. Too linear. I get very annoyed when I have to find ten random objects for no apparent reason. Adding a thin story on top of the game doesn’t help; I don’t see a reason why I can’t pick up any other similar objects, or try different things to find out which objects I really need. I think it smells too much of someone ordering me what to do, when I want to decide the best path for myself.

Now, time for an interlude. My new game, with the working name Wildhollow, will be a sim/management/adventure game where the main goal is to breed exciting (and valuable) new breeds of animals that you can sell. However, in order to do so you need to bring new genetic material to your stock. That’s where the adventuring aspects enter.

At first I thought of something along the lines of Harvest Moon. You’d breed animals and, once you have young animals, you could bring them along to travel the world and expose them to various mutagens give them new characteristics by magical means. This would be how you evolve your stock and eventually breed the most valuable animals. But I soon dropped that idea; it sounds pretty far-fetched to carry around your animals, and it would cost a lot to make everything animated like that.

Instead, the current game design revolves around static screens. You have a world map where new locations will be revealed continuously; at first you may only see your farm where you can watch your animals run around and play, and a nearby town where you can buy new goods, talk to people, or find items that are lying around. Talking to people and finding the correct items will eventually lead to other places, and the world will expand to show more people and items and even more locations. This is quite obviously derived from adventure games.

But all of the sudden something struck me: one thing that you always do in an adventure game is to look for items half-hidden in the background. Just like in the hidden object games. It may be an obvious connection to you, but for me it was slight shock realizing that a genre I love share features with a genre I cannot stand.

And the irony grows even more: just the other week I was asked if I’m pondering a hidden object game for my next project. “Not at all!” I replied. ….But I probably will end up with some hidden objects in my game. It kind of annoys me to think that when Wildhollow is finished there’s bound to be people comparing it to hidden object games, even though the inspiration comes from completely different places.

 

Linux Boot in One Second - Musings About BIOS Evolution

Ξ March 12th, 2008 | → 2 Comments | ∇ Computers, Software Development |

The title of this post should be taken with a truckload of salt: as far as I know there’s no way to boot a complete Linux distribution in one second. But it seems that General Software has developed a BIOS that can boot to LILO in one second - and that’s not bad at all! Basically, all the unnecessary things are skipped, such as waiting for the video card to load its firmware, detect devices, and so on. This enables the BIOS to boot incredibly quickly.

But heey… Wait a minute. If the hard disk isn’t detected yet, how can the bootloader start the OS?

Being both lazy and philosophically-minded I’ll try to speculate about the answer to that. My guess would be that all data that would be detected by a normal BIOS has to be hard-coded one way or another; the BIOS data has to be manually entered, or possibly the BIOS has a “detect everything now and then save the config” mode that’s not always run. That’s actually pretty neat…for embedded systems. It sounds completely useless for desktop environments where you change keyboards and mice and video cards and electrical pets (what?!) every now and then. But since the article mentions the medical device market, I’d wager that this isn’t a big deal for the target devices.

In fact, I wonder if this kind of optimized BIOS couldn’t be of value to a other embedded devices like home gateways and such as well.

But hey again, wait another minute or two. The slow boot times of home gateways is probably due to slow flash reading times rather than a second or two on the BIOS level. In fact, come to think of it, I don’t know if I’ve ever seen a BIOS on these devices. So, it seems like this optimized BIOS is only relevant to embedded devices of specific architectures - of which maybe the aforementioned medical devices belong. But what about non-embedded devices? Wouldn’t this improved BIOS be useful for desktop computers too?

Short answer: meh.

Longer answer: don’t think so.

Full answer: in all probability, optimizing the BIOS would result in minimal boot time improvements. Detecting new devices and loading the video firmware doesn’t take all that long - the biggest culprit is loading the actual OS itself.

But, and this is a big but, the article also mentions how they increase the Vista loading time from 74 seconds to 24 by adding a UDMA-capable driver to the BIOS. I don’t really see how they can group these two BIOS improvements into the same article - they seem to deal with wildly different things! Stripping the BIOS of unnecessary checks is quite different to adding a driver that increases efficiency a lot; the former isn’t very useful in most cases, but the second is incredibly useful!

And that got me thinking… The BIOS is often the bottleneck; wouldn’t it stand to reason to evolve a BIOS as much as possible to make the OS faster? If adding a UDMA driver speeds up the boot process by 300%, isn’t that the way to go for other bottlenecks as well - add improvements at the lowest level?

Oh wait. What this would end up as sounds suspiciously like a microkernel. I wonder if there’ll ever be a hybrid BIOS/microkernel.

 

Shredz64 - C64 Guitar Hero

Ξ March 11th, 2008 | → 0 Comments | ∇ Awesome Stuff, Music |

A quick quick quick update in case you haven’t heard about Shredz64. It’s a Guitar Hero clone for…the Commodore 64!


I don’t know if I’m more impressed by the geekiness of the project, or by how the author decided to show off a sucky Zelda tune that tries to sound vaguely guitar-based. I mean, given the wonderful songs available for the C64, it’s pretty impressive how he picked a song that sounds…pretty meh.

The second part of the video shows a more classical SID-style song, though. Make sure you check it out!

 

Software 3D Algorithms Revisited

Ξ March 3rd, 2008 | → 0 Comments | ∇ Indie Games, Software Development, Spandex Force |

This will be a very nerdy blog post describing some technical aspects of Spandex Force. Sorry in advance.

Many moons ago I complained about BlitzMax and 3D, and described how I solved that problem. Well, it turns out that I’m a moron and the solution described didn’t solve anything at all. This is essentially what I wanted to acheive:

Well, when I switched to a more detailed texture everything got jagged and crappy. Which I should have foreseen if I hadn’t felt so proud of myself for working around my limitations. I know, I suck. Anyway, I needed a better solution.

Someone in the old post mentioned that you can do 3D in BlitzMax by using textured polygons, but I don’t know if he’s ever tried. Using the common textured poly functions result in affine texture mapping, which is completely useless for depth effects. So, the only solution left was to go for proper 3D.

This is surprisingly simple in BlitzMax as long as you know how to do it. (Duh!) All you have to do is set up the projection matrix properly, and then do the primitive drawing commands. I won’t paste the dull code here, but it involves some trigonometry and a glFrustum() call (for OpenGL). That took care of the background itself.

But wait, that’s not all! What about the little objects on top of the background? Well, I wanted a billboard effect (the images should always face the screen) so I could either do a lot of rotations and draw everything in 3D…or draw the icons in 2D afterwards. I chose the latter approach and was thrilled when I noticed that OpenGL has a function called gluProject() which would let me find the screen coordinates from 3D space coordinates. Yay!


All for this little minigame!

Time for a short interlude. “Why are you mucking around with OpenGL like this,” the eager reader asks. “Isn’t DirectX the standard for Windows?” Sure it is, but I also want my game to run on Mac and Linux. So in my first approach I chose an OpenGL-only solution. But, as the experienced game developers out there could have told me, that just wouldn’t do. OpenGL works most of the time, but there are severe compatibility problems with out-of-the-box XP and Vista installations!

I was aware of this limitation, but I just didn’t know how to get around it. See, the magical gluProject() function has no corresponding function in DirectX. After a lot of messing around with matrices I managed to make the DirectX projection matrix similar to the OpenGL one, so the background could be drawn in both modes. But I still had no way to draw the icons correctly. I tried lots of various interpolative methods but everything looked pretty crappy.

Then it struck me like Mjölner from a clear sky.

In my old blog post I ranted about how old methods can be utilized to good effect even today, and there was one old method that I had overlooked. Can you see what I’d missed?

Lookup tables!

When running the game in OpenGL I could create a lookup table for the projected X and Y coordinates of the icons. This table could then be used for both the OpenGL and DirectX versions of the game to create identical results for the 2D icons. It worked perfectly, and this enabled me to have DirectX as the default renderer in Spandex Force from v1.1 and onwards.

Many times I thought about skipping the Catch ‘n Match minigame completely in order to have DirectX support, or shipping the game with compatibility problems. I’m happy that things worked out in the end!

 

About

    Pretentious! Miro Karjalainen is a pretentious bastard with a background in punk rock, computer science, linguistics, embedded systems, game development and the noble art of drinking beer. E-mail: info@karjasoft.com

Admin Stuff