The “Coding” Has Begun

Screen shot 2010-08-31 at 23.52.15.png

I managed to get test programs working using the openFramework and found a suitable one to use as a template, (imageLoaderExample). Although the way it needs to be set up is a little fiddly, and although I can’t yet use it in my own directory structure, I was able to create a new project based on that sample.

The next step was to draw the iso cube and I thought that would be a simple matter of:

 isoCube.loadImage(“images/cube64x64.png”);

For some reason, I wasn’t able to draw this with transparency, despite the sample program clearly being able to draw with transparency. So I checked the image format. Turns out it wasn’t able to handle an indexed PNG’s transparency, but was fine with an 8bpc transparency. With that addressed, everything worked fine and I am now drawing iso cubes on the screen and the whole block of 64 iso cubes of 64 by 64 pixels is dancing to a sine wave.

I moved a few other things around and it was all surprisingly easy. I never really forgot C++. I think I was amongst the first game programmers in the UK to use it, when people were still thinking the idea of using C for a game was radical. I bought Walter Bright‘s C++, which was pretty decent. I was influenced by two factors, first, that David was using the C compiler, back when they were still “Zorland” and second, the price, Zortech C++ was £99. Amazing value and I did a lot of code using that compiler all the way up to the mid 90s. So I love C++ and am looking forward to using it in, well, not quite anger, more like nostalgic fondness.

zortech2.jpg

Tomorrow, data formats, object creation, object placement and save/load. I’m very exited.

 

Welcome, David Eastman

 

mdavid-1.jpg

It is with great pleasure that I’d like to welcome my dear friend David Eastman. David and I have been friends most of our lives, and we even collaborated on some games. Most of them were really good.

David is one of the most interesting people it has been my pleasure to know. His lateral genius is obvious to anyone who gets to know him and his intelligence and insight serve to inspire me, constantly. David is one of those people who through their encouragement and support helps get the best from me.

I could continue, but David was around 25 years ago and I know that he will be able to provide a perspective on that era that the readers of this blog will enjoy. And finally, Chimera would never have been signed in the first place without David’s input and support. He was with me on one of the happiest days of my life, when Chimera was accepted by Firebird.

 

I Need Art

IsometricCubeGray.png

First step is to draw an isometric cube. I’ve done this maybe a hundred times or more in my life. I can’t bring myself to do it again. Is this where it all ends? Is this where the hopes of creating a remake get dashed? On the rock of Pixen, or Photoshop, or Acorn, or any art package, it doesn’t matter, because none of them are DPaint IIe and none of them are ProMotion and certainly, none are Art Studio.

I’ve used all of the above and I’ve come to realise that even if I was any good at art, I don’t enjoy it. No amount of up-to-date software can save me from that.

I have to ask myself as night descends, am I going to have to face the fact that I just can’t hack it, and that I’ve not been able to hack it for a very long time?

In case you’re wondering, I downloaded that one. And I can’t use it because it’s true isometric, not dimetric. I’m not going to get all anorak on you, but in brief, a true isometric cube would have a 30 degree stepping angle for the non-vertical lines in the cube above.  A dimetric cube would have 26.565 degree angles. The reason the latter is more useful is because it allows for a simple two pixels across by one pixel up or down ratio. It’s much easier to draw. Except I still can’t draw. Or I probably could, but I no longer have the patience for it and would much rather have a cigar and watch telly with the missus.

Is this where it ends? Again?

** STOP PRESS **

And 5 minutes later, I’ve found a 64×64 iso cube that will do the job perfectly well. Here it is….

cube64x64.png

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.