No Way But Down

Sunday, January 16, 2011
My job at Iron Mountain's been quite good to me, and has a lot of variety, which is nice for two reasons: one, I very rarely get bored with what I have to do. Two: the variety of things I end up doing mean I learn a lot. I was probably an average programmer (with a non-average amount of 3D graphics / real-time rendering experience) when I joined the company, and just looking at what I'm writing today - I'm a lot farther beyond where I was in 2008, both with respect to what I know and how I apply it.

I've actually gotten the opportunity to do some programming for mobile devices in the past couple of months, which has been fun. It's one of the reasons I actually bought an Android-based phone - I had in the back of my mind that I would eventually start programming something for it, and the things I'm doing at work (which I don't think I'm quite at liberty to talk much about) finally got me started on working on something. The project I am working on for work is IPad-based, so it's actually nice to change gears a little bit and use Java. I'm not nearly as good with it as I am with C# or C++, so yet again, doing this is actually helping my career.

And hell, I'm writing a videogame - so it's fun, too.

I looked around at what games are currently available on Android-based phones, and it's a lot of...throw a basketball, tilt-a-phone platformers, side-scrolling or top-down shooting games. I won't rag on any of those, because some of them are actually pretty good. For example, I bought Radiant the other day, and it reminds me in all the good ways of Tyrian 2000 and Inner Space, some of my favorite games from the PC when I was oh...ten or so. That kind of game takes a decent amount of art, commercial 'slickness,' and some fairly rigorous programming of a sort I'm not really prepared to tackle at the moment. I know how to do it, it's just not very fun. You end up reinventing a lot of the same nonsense that people have been doing over and over again for the past thirty years: does the laser gun thingy you're shooting intersect the enemy? have you run into the wall? are you properly layering your models so that you only have to draw the topmost layer? Very basic questions of collision detection which I just can't bring myself to care about anymore.

I decided, therefore, to make my life easier and write something simpler and a little less common: a roguelike RPG. Roguelikes are so named because of the original: Rogue. They're supposed to be tough-as-nails D&D-style games with a lot of dungeon crawling and the endlessly entertaining 'feature' that if you die once, that's it. No saved games. Start over from scratch. They're also almost always text-based, thus saving me (and anyone who plays it) from enduring my godawful attempts at art. That also means I can spend all my time actually programming the game to have fun things in it, rather than 'perfecting' some 2d sprite.

I can also shove it full of literary references and Borgesian magical realism, and I plan to do just that. The game's called "No Way But Down," as a kind of half-reference to Dante and half-instruction manual.

I've always been really into the idea of randomly being able to generate a level of a videogame that is fun to play, rather than spend the time individually detailing where each wall goes. That's part of what I've done so far, but I want to mess with the concept a little bit.

Right now, every level is up to the whim of a random number generator. It's represented by a set of characters that are 13 high and 60 wide. I pluck a random number of walls, random number of monsters, random number of items, and scatter them around the level - as well as a random location for the stairs down.
That's well and fine, but it's only so interesting.

Part of what I want to add is the ability to, on a random chance, add a 'set piece' to a level. One of the games I'm drawing a lot of influence from, ADOM, does this pretty well. There are levels that have rivers running through them, ones with coliseum-style arenas, graveyards, libraries, and one full of quickly-reproducing killer rabbits. Some are just part of the rest of a randomly generated level, and some are entirely predetermined and the same every time. In ADOM, certain numeric levels in a dungeon are guaranteed to be something - I think Level 4 of the Caverns of Chaos (yea...I've played this game a lot...) is always the Arena, and maybe 12 is the Dwarven Village. It's important for ADOM to have this ordering because there are prerequisites to enter some of the later levels, and a storyline that the creator wants you to encounter in a linear order.

I want to try and take that and twist it around a little bit. If I can design a game that has predetermined elements (whole levels, or parts of levels, or characters or items or bits of a story) that has no definite location or even guarantee of ever showing up, it'll make the game (for me at least) able to surprise me even as the writer of it. Clearly you'd have to write compelling 'parts' and still have a definitive 'end' so that there is a reason to play through it all. You'd also want the world to reflect how the character acts within it - what appears or occurs should have something to do with how the player chooses to act, else there's not much investment in the whole process of playing it.

Basically, I want to write a video game that you can play through and only maybe encounter 10-15% of the possibilities within it if you head straight for the goal line, but you choose to stick around because it's good. Or maybe replay it.

We'll see if I get there.