Room Editor

chimera-map.gif

The last Room Editor I wrote was on the Atari 800XL in 1984. It could be used with an Atari Touch Tablet and saved and loaded room data files from floppy disk. It was the quickest way of getting room data made for “room” based games like Jet Set Willy. The Touch Tablet I’m using now is called a Magic Trackpad and it’s by Apple. Obviously, the resolution and functionality is worlds apart.

I’d written Jet Set Willy on the Commodore 64 the year before Chimera and towards the end of 1984 I was wondering whether I was finished in video games or not. I did a game with a friend called “Baby Starts Walking” on the Commodore 64. My friend did most of the graphics and room design, I took the code I’d written for Jet Set Willy and cleaned it up a bit. Before we’d quite finished and before we’d had a chance to create any enemy sprites, we decided to try and sell the game.

I won’t say where we took it, but we were offered £3000 and turned it down. Daft really, we should have taken the money and moved on. Instead I carried on playing video games, having already pretty much dropped out of school. Chimera was my last chance saloon. Having started in 1983, 27 years later, here I still am.

So the Room Editor I need to write now needs to have the following characteristics and properties:

1) Allow me “play the game” (whatever that turns out to be)

2) Allow the insertion of various “nouns”, including walls, artifacts, blocks and characters

3) Allow the editing of the properties of the nouns (i.e. choose adjectives)

4) Understand the physics (or the verbs) of the game

5) Allow saving/loading of the room data

I’m wondering if I should be using XML for the room data format, or something else. For now, I guess it would be sensible to use XML, given the availability of libraries for it.

To begin with, I just need to hard-code certain objects and allow for flexible placement.

Oh, and I also need to write an Isometric class. Not so tough.

 

Thoughts on Frameworks and Isometric 3D

I’ve now downloaded and compiled a few examples from openFrameworks. I did that on Ricky’s recommendation. openFrameworks seems to provide everything that SDL offered, but in an easier to understand and more comprehensive package. It also seemed quicker to get it going.

Now you have to understand, all of you modern programmers, that I’m not a modern programmer. I’m a seriously old-skool programmer. I like solving simple problems. I’m not used to standing on the shoulders of giants who have solved some seriously heavyweight problems. I’m more interested in building something close to the ground. A hut, say, and not a pyramid.</p>

The RAM in my development machine was 48K. That seemed huge at the time. 25 years later, I have 4GB RAM in my development machine. That’s 87,000 times more RAM. That number is beyond mind-boggling. I can’t conceive of it.

The only thing that hasn’t changed is that I’m targeting the same machine that my development environment sits. What has changed massively is that my application can crash with gay abandon without disrupting my development environment in the slightest. This encourages iterative development and experimentation. Not that I have an awful lot of time to waste on mistakes.

What openFrameworks does for me is it abstracts the hardware, without building anything to do with a game, or any other framework. Old-skool programmers coded to the metal. I can’t do that now, but I can get close enough. I don’t want huge frameworks in the way. I haven’t got time to learn huge frameworks. I’m not competitive in the modern-day-programmer market, so there is no point in me pretending to be. I couldn’t get a job as a front-end-screen programmer. What I like is a blank slate. I don’t care that I have to re-invent the wheel. It’s 25 years on, I don’t have my source code anymore (not that Z80, 6502, 68000 or 80386 assemblers would be of much use to me now anyway) so I might as well start from scratch. I want to build a model in my head. It has to be my model and it has to be simple. I don’t want to get into somebody else’s head. I don’t have time to learn 25 years worth of programming paradigm shifts and methodologies. I couldn’t give a flying fig about MVC, though I might have done 25 years ago. I don’t want exception handlers or message handlers or any of that, though I did manage to do some of that in the early ’90s,  I just want to move stuff on the screen.

Now, I’ve been questioned about my commitment to isometric graphics. I can’t help that. I saw Knight Lore and Alien 8 and part of me changed forever. That part of me has never recovered. I’m still kind of beating myself up for not going with isometric for Pandora. I know it has problems, the least of which is that it doesn’t lend itself to basic orthogonal controls and can be confusing, especially when trying to calculate tricky jumps.

My answer to “why iso?” in part is (somewhat facetiously):

  • Baldur’s Gate
  • Cannon Fodder
  • Command & Conquer
  • Diablo
  • Civilization
  • SimCity
  • The Sims
  • StarCraft
  • Syndicate
  • Theme Hospital
  • X-COM
  • Age of Empires II
  • Knight Lore
  • Alien 8
  • Head over Heels

To which the obvious riposte is that these are mostly strategy games, which kind of lend themselves to this style. Chimera, by my own admission is not a strategy game, even if there is to be some strategy element to managing the resource of energy. So why will it work?

I don’t have a good answer for that. This really is an emotional decision. Isometric graphics are not particularly hard to put on the screen, so I’m certainly not doing it to be flash in any way.

Ricky has an interesting argument. That people who play the 25th anniversary edition are unlikely to have played the original, so why stick to the same look?  And I’m not even thinking about using any of the modern techniques to make the game look prettier at all. No lighting, no shaders, no shadows even, so why stick to isometric?  I have to think about my player. I want to reach those who played the original and don’t want an artsy re-expression of it. They want more of the same, but better, I hope. They don’t have as much time to waste as they used to, but they don’t want their memories trampled on either.

That’s my player. I might well do a straight 2D game at some point, but first, I have to do this. I don’t know why I have to do it, maybe I am trying to do this for the person I was 25 years ago (my fingers automatically typed 256 BTW, before I had to correct the number, so ingrained is binary in my mind). Maybe that’s why the subtitle for the blog is “This Time Get it Right”.

 

Guest thoughts

Aww shucks. Cheers for intro Shahid! So here is wot I fink, based on reading your blog so far:

First off, I think your blog is a Good Thing, for a few reasons:

– writing down the jumble of thoughts surrounding making a game will help you to think them through more clearly.
– doing so publically will be a way to attract attention, from people interested in playing the game, to those interested in helping you make it.
– you have a place to post progress, which will be hugely motivating.
Before trying to provide any game-specific advice, I think it’s worth trying to get a few things straight. The answers to the following 3 questions will have a huge bearing on what language + dev environment you choose:

*Bear in mind that I haven’t played the original game*

– Do you have any specific plans for this remake or do you just want to make it first then go from there?

– Are you hoping to bring the game up to date graphically, with high-resolution textures, shaders, lighting, 3D-animation etc. etc, or are you aiming for more of a retro feel?

– To what extent do you want the game to play like the original? Some of your posts imply that you’re happy to allow the design to change, but to what extent is this true?
You say that isometric graphics are an essential element of Chimera, but is this definitely true?  Surely ‘It’s a resource management game and your resource is energy’ is much more an essential element than the player’s viewpoint?

– How much time do you want to spend implementing low level stuff, like display code versus making your game?

Here are some observations from me, which might help you to answer the questions (but I can’t answer them for you):

– Since you’ve not been programming for a long time, any modern language / platform is going to require some investment in learning it, which puts them all on a vaguely similar playing field in that sense.

– Having said that, I’d say you want to spend as little time as possible making the technology, and as much time as possible designing puzzles, creating content, working on the atmosphere, the interface, the sound design…

– Probably a good idea be as platform-independent as possible – I would personally rule out making your game Mac or PC-only.

– You aren’t an artist, and you don’t (currently) have an artist, so it probably makes more sense to give your game a retro charm, rather than aiming for 2010 production values. Check out VVVVVV or Geometry Wars or Cactus’ stuff for examples of how successful this can be.

– Think really hard about how attached you are to an isometric viewpoint. It was cool and clever in 1985 but I’m not sure how much inherent appeal it has in 2010..  (disclaimer: I am personally not a huge fan of isometric games). Ultimately, you should decide what you want the player to do and feel in this game, and then choose the viewpoint most appropriate for conveying and supporting that.

A quick summary of platforms:

1. Flash. If you’re going to make a 2D game that isn’t going to be too heavyweight, and want something quick and easy with lots of boring resource management and display things done for you, you won’t be able to beat Flash.

2. Unity. It runs on everything, and does pretty much everything for you. Not sure about support for Isometric, but if you were considering a 3D implementation (perhaps with an isometric-esque viewpoint) it’s hard to think of a reason why you *wouldn’t* use Unity. Edit: oh look: http://forum.unity3d.com/viewtopic.php?p=135623 and http://x9productions.com/blog/?p=7

3. C++ has the advantage of being extremely cross-platform, and has a lot of nice frameworks and libs for indie games these days (look at http://www.openframeworks.cc/)

4. C# – Microsoft’s XNA seems to be very powerful, but I don’t know what you’d do on other platforms. Mono is worth looking at though (http://www.mono-project.com/Main_Page), but I don’t know what kind of lib support you’ll find for games / display stuff.

5. GameHaxe is interesting (http://gamehaxe.com/). Only heard about it the other day. It’s a language much like Actionscript, which then cross-compiles to lots of platforms (including flash, c++/OpenGL, Android, iPhone). Not sure how mature it is yet though.

Hard to advise on a specific language without a clearer idea of what you’re aiming for, but right now I’d suggest taking the free version of Unity for a spin and see what you make of it..

Two things I think for sure:

1. You should definitely integrate your editor with the game engine so that they are the same thing. There’s no good reason not to.
2. You should definitely contact Ron Hubbard and point him at this blog. He might be into it, and you might have a collaborator!

Hope that helps!

Inspiration

I’ve had lots of inspiration and support, but the outstanding inspiration and support for this project has come from the wonderful Ricky Haggett. So important is his contribution, that I’m going to give him a log-in so he can write guest posts on this blog, about Chimera and about the kind of process I’m talking about.

Ricky runs an outfit called Honeyslug in London, Disclaimer: There is some cross-over in our working lives, but that’s not why he’s featuring here. He’s featuring because his creativity, energy and enthusiasm are an example to anyone working in games.

Visibility

 

NewImage.jpg

Today I have to choose a language or a tool for creating rooms. This tool should simulate the environment for the game. In 1985, I didn’t have a choice, my tile editor was written in Z80 and my room editor was graph paper (see the image at the head oof the post for proof of this)

Each block in a room was represented by a single byte, with a nybble offering 16 possibilities for the top block and the bottom block.

Not very interactive and of course, it made it hard to make any kind of change. This made tuning and pacing very hard.

You’ll notice that the map above is 24 screens. That’s all the rejected first draft of the game had. The final version was bumped up to 64 screens or “rooms”.

So now, rather than write about what I did back then, and given I’ve made a number of decisions, I need to make some more – like for example, there was a technical need for having blocks of 32 pixels across, does that need still exist? Probably not. But it did lend the game its look and it probably wouldn’t be Chimera if I moved away from that. Now that I’m losing track of decisions, I’m going to keep a page on the blog where decisions or rules are kept, but for now, all we need to know is that blocks are going to be 48 pixels across. (Screens have kind of come on a bit since the days of the Spectrum)

We still haven’t touched on which platform this will be on in detail. I don’t know, might as well eventually be on everything, but for now, it’s just going to run on a Mac. Whether it will be standalone, or Flash, I still haven’t decided.

Finally, which tool should I use for creating the environment editor? Here are my choices:

 

 

tool language choices.png

You see it’s exactly this kind of paralysis through analysis that dramatically curtails my productivity. My mind is constantly under assault with questions like:

“Just write it in C and SDL you fool, at least you know that stuff, what’s wrong with not having a decent interface?”

“Why are you writing a tool for this? Shouldn’t you just make a game and put in hack data?”

“Why are you even thinking about a PC? Parallels Desktop 5 doesn’t count!”

“You can’t program, so why pretend you can still hack it today?”

“What’s wrong with graph paper?”

“Why are you blogging instead of coding?”

“Why are you over-analysing everything?”

“Shouldn’t you be spending more time with the kids?”

“Aren’t you too old for this?”

“You took a week off for this? Are you insane?”

As you can see, this kind of inane chatter robs me of an awful lot of motivation. So I’m going to re-program the chatter to something more like the following.

“Programming is like riding a bike. You might be a little rusty, but you’ll soon be flying along”

“The 25th anniversary will be over in a few months, you can finally scratch that itch”

“You might not be an indie, but you don’t have to be. You paid your dues. Just enjoy it now”

“Nobody cares. There is no audience. There is only you and your computer. Just. Write. Code.”

Another weakness is realising that it’s still OK to make mistakes at 44. It’s not embarrassing to make mistakes at this age. Yes, I’m supposed to be wiser and yes, I’m wiser than I was at 24, but wisdom is not omniscience and often it can just mean reticence. I need to take the plunge and actually make something work.

I could waste the whole holiday learning the Cocoa framework, or I could just grok it really quickly and do the minimum required. It will be messy, but it will eventually work.

I could try to make do with ActionScript, which I was writing at the turn of the year in Flash Builder 4 Beta (since expired, God rest its soul), but I’d have to go back to the command-line and it was painful enough in the environment.

I could just use SDL, because I can get results with that pretty quickly and I really don’t need to arse around much. It will mean knowledge that is not transportable to anything else. It means code I won’t be proud to show. It means the minimum effort for the maximum return in the shortest time. So that’s what it has to be. Stop trying to be stylish and just do what works.

I haven’t looked at SDL in a long time. I’m hoping I can get it set up and working in a reasonable amount of time. You see, there have been many false dawns. And by making this start (kind of) public, I’m hoping there’s incentive to continue.

Making Decisions

game_ending_chimera_atari.jpg

An essay is finished when there is nothing left to take away, right? Well a video game is nothing like that, but you have to make some decisions and I need to make a few, even if you later decide that the earlier decisions were dumb. Iteration is the name of the game, so let’s get iterating, open-ended, and see where it takes us.

 

In the original Chimera, the room drawing code never moved beyond drawing a 3d array of blocks. There was no mechanism for including walls, the likes of which were to be found in Knight Lore, Alien 8 and the subsequent Head over Heels.

So the first decision is to allow for walls. A side-effect of this is that there would be more play area.

The essential elements of Chimera are:

1) isometric graphics, geometric shapes

2) puzzles

3) great audio and music

 

Only one animated sprite other than the player was in the original game, this limitation should be removed.

So the second decision is to allow for multiple animated objects.

Another artificial limitation was not allowing movement vertically. There was no good reason for this.

So the third decision is to not artificially restrict movement in the y-axis. If it’s needed, use it.

There were food and water elements in Chimera. I don’t know why. I think these were hacked in as well as the timer. These should be replaced by energy. So now we have time and energy. We could probably include another variable, but that might make things too complicated. Let’s make energy the currency through which many puzzles have to be solved. Every move takes energy.

So the fourth decision is to have every move or decision in the game require energy.

People seemed to love the music, there are at least four re-mixes of it available. Might be worth featuring them again. The game is my copyright, but I don’t remember what the contract said about music ownership. In any case, it’s been years (decades!) since I last spoke with Rob Hubbard, I should contact him and ask him if I can feature it, or perhaps re-write my own version?

Interesting bit of history, I asked for Rob Hubbard specifically for Chimera because a few weeks before the C64 version was done, I’d heard the Krazy Komets slap bass and being a bass player myself, wanted to know if he could do fretless bass. I’m very pleased with what he achieved for Chimera.

Fifth decision: Feature original music in some way, plus remixes, youtube videos, interviews, etc.

The game was a 64-screen open-ended map. The game could probably be played through in a very short time, maybe 10 minutes, assuming you knew how to do it. A Rubik’s cube can be solved in seconds too, if you know how to do it. Allowing for multiple, smaller maps gives a level-based approach and allows energy to be managed more easily, with bonus for saving energy for later levels. The game had a slow pace, a faster pace would actually suit it quite well.

Sixth decision: Have multiple levels, each with a smaller map than the original.

Seventh decision: Increase the pace through better placement and player motivation

Eighth decision: Keep the heartbeat proportional to energy expenditure to allow for player tension management.

Ninth decision: Have a lot more events that require energy expenditure. It’s a resource management game and your resource is energy. Every verb uses energy. (Verbs in games are not Crawford’s idea, I described them as a way of describing games along with nouns, adjectives and adverbs in 1996 at a Games Awareness Day at BITS, though Crawford remains one of my heroes and he will always be way, way smarter than me)

Tenth decision: Have energy displayed as a bar or other visible, linear metric indicator, not a number. Numbers are so 1985. Actually, they were probably out of fashion then too.

The verbs in Chimera were:

Rotate (right)

Rotate (left)

Move forward one tile

Pickup/Use

 

Consider adding:

Drop

Push

Energise (block in front)

Levitate (player)

Materialise (block in front)

Dematerialise (block in front)

 

New objects:

Energy packs

Artefacts

 

How about a score? And multiple paths through the game? And randomly generated levels?

 

I’m not an “Indie”

chimera-box-art.jpg

I suppose I was an indie when being an indie was highly unfashionable and nobody called it being an “indie”. They called it not having a proper job. I did it for many years and I frittered away more cash than was good for a 19-year-old to fritter away and one day I came to the end of my cash and instead of being brave and finding a way to carry on, I got scared and believed in fear and started working for other people.

After a while, it felt perfectly normal. I enjoyed being in the company of people. And in return for my time, I got a fixed amount of money. What I didn’t get to do was choose what I was going to work on. It wasn’t always restrictive, but getting a job is like voting. You make a decision and then you put up with whatever the next few years throws at you.

Sometimes that means that the opportunity for doing what you really love doesn’t mesh with what your “party” (the job) needs from you at that point, so you have to seek that fulfillment elsewhere. If you love martial arts, but you’re a stonemason, you have to do martial arts in your own time.

Well, I want to write a game. Obviously, I work for a large corporation, heavily involved in the making of video games and the consoles that run those games, but the organisation is very large, and there is little opportunity for someone in Developer Relations to code as part of their job. My job is after all, account management, not programming. So I’m obviously not an “indie”. Real indies don’t have jobs and they struggle with income. I have a job and I struggle with my waistline.

Programming is as close to snowboarding or base-jumping as I am likely to get. And yet all I have so far is some gear and very little idea. A modern programmer would eat me alive, but then there is a whole new breed of games designers and programmers who are making small, well-formed games. Perhaps I could somehow blend in.

I make it sound like I’m trying to join a community. Not really. When I started, what community we had was found in magazines and user group meetings. This expanded to BIX (very expensive – calling America in those days was over £3 a minute, though some people were set up PSS so that they could go on BIX and play MUD games) and then the British CIX, which I believe is still around in some shape or form. For years I was either montana@cix.co.uk- CIX, whose members were known as “CIXen” (taken from BIX’s “BIXen”) was a wonderful, supportive and knowledgable community.

The tools we have available today are shocking in their scope. Shocking to anyone who might have been transported forward 25 years. I’ll tell you what I had for Chimera. A ZX Spectrum, a tape machine, a Microdrive, a black and white CRT portable telly, ZX thermal printer, some paper and pencils. I bought DevPac and found the tape loading so slow that I decided to write a turbo-cassette loader just to re-load the environment faster. Whenever my code crashed, I had to pull the power out and re-load my entire environment, then re-load my code (from Microdrive, thankfully, which was faster, but not that much faster than cassette tape – in fact, my ZX Spectrum turbo tape loader was faster than the C64 1541 floppy drive!)

Debugging was done on paper. I’d write my assembler using pen and paper and I’d single-step, on pen and paper. That’s how debugging was done. It was ages before decent debuggers became available. PDS (for whom I did a stint) came along some years later and totally transformed the development scene. Once reasonably cheap cross-development arrived, we never looked back. We certainly didn’t miss the old ways.

So hard limitations were what stopped games being better. The fact that the entire dev environment had to be reloaded after every crash discouraged experimentation. The whole idea of having a rapid development cycle was some way away. Code was frequently kept in a single file loaded off cassette. It included everything, data, the lot.

The amount of support now available is bewildering. I am currently running 15 programs and my machine isn’t breaking a sweat. There are dozens of processes running. My screen is 1920×1080 and 24″ widescreen with millions of colours.

My Spectrum was 256 pixels across by 192 pixels down, showing its lack of colours on a 12″ portable black and white telly. My single-tasked Devpac assembler/editor could display 32 characters per line. This wasn’t such a big deal when your Z80 code used 3 to 8 characters of course, but comments were at a premium.

I feel like that young man now, transported 25 years into the future and the choices are utterly bewildering. So much so, that I’m distracted by not just the Internet and all that entails, but the endless choices, the obscene power at my disposal, the plethora of languages (no longer limited by assembler, I can use pretty much any language I want) – it has led to a kind of paralysis by analysis and that is the biggest daemon I face.

 

A Simple Puzzle Game

More than 25 years ago, I wrote a video game called Chimera. Chimera was the first true copy of the Ultimate Filmation style, if not the technique (not until the C64 version anyway).

Now I have everything I need to make a game, and a week to make a significant start, but I feel paralysed by fear, indecision and self-doubt. The same daemons that have stalked me since the early 90s and the end of Pandora.

I have been taken aback at just how many people played Chimera and claimed to have liked it. I think the audio played a big part in that, and the stark graphics helped. so I will go for a stark isometric look, with strong audio in the remake.

Chimera is essentially a bunch of simple puzzles operating under time and resource limits, with extremely simple rules, as follows:

1) Find and pick-up spanner.
2) Take to all electric fences that bar your way and disable them
3) Go to bolt and combine, missile created
4) Take missile to a blue room and arm – get the hell out

Rinse and repeat for four puzzles, then make your way to the green exit room, avoiding radiators and managing your food and water supply along the way.

Chimera didn’t start off as a game. It started off as a tech demo, on the Spectrum. My background was in 6502 assembler, having completed Jet Set Willy in 1984 on the Commodore 64, so the move to the Spectrum was probably the first commercial decision I made of any importance. Like many others, I was hugely inspired by Knight Lore’s arrival on the Spectrum. It changed what we thought was possible on a machine. It was sensational, without parallel and I don’t think any game, other than perhaps Ultima Underworld has ever had that degree of impact on me. I was determined to copy it.

So Chimera started off as a tech demo on the Spectrum. Though I didn’t reverse engineer their code (that would come much later and is another story), I did come up with an elegant solution to masking moving sprites at a reasonable speed on the Commodore 64 and Amstrad CPC versions, which were to come later. I used a slower method on the Spectrum and Atari 800.

My first version was rejected, so I spent a day brainstorming ideas with my good friend David Eastman, with whom I’d go on to collaborate on a number of other games. These were then hacked into the game in around two weeks and the second version was accepted. A detailed story is available at The Bird Sanctuary.

In the end, Chimera on the Spectrum used a number of advanced techniques, like the use of speech on the Spectrum (which scared the living daylights out of a lot of people) and the border effects on the spectrum and colour-cycling on the Atari version.

Why did the original tech demo use a spaceman? Well, it was boxy and easy to draw. I couldn’t draw organic shapes and so Chimera featured mainly simple geometric shapes. The story was also tacked on right at the end and was essentially nonsense.

The game received on balance, acceptable to good critical reception and commercially did well too. If I made the same out of the game in a 25th anniversary edition, that’d be fine, but I’m more concerned about getting the critical acclaim up.

Several questions now arise.

1) I have a good job, why am I doing this?
2) Why choose Chimera? Weren’t there better games I could re-make?
3) How would I remake this?
4) Which platform?
5) Where are you going with this, Ikea boy?