Sunday 17 November 2013

I'm having a go at... #SpeccyJam !!

Making a game in the style of a ZX Spectrum game. Can't wait!

That's right, I'm taking a step back from the Amiga dev briefly and I'm making a game for the #SpeccyJam, my first ever jam! The game can be written on any platform, but must be as close to a ZXSpectrum game as possible.

So where do I start?! The jam is only a week long, fitting it around my family and day job, time is tight! Here are the rules: http://www.speccyjam.com/rules/.

Choose a platform... any platform...

My platform of choice is simply a Windows Form application written in C#. I would normally use Unity3D which I highly rate for developing pro games, however, the ZX Spectrum has a unique graphics display. The screen is made up of 32 x 24 attribute blocks, each block is 8x8 pixels. The tricky part is that each block can only display 2 colours at a time from a fixed palette of 15 colours.

If you're not familiar with ZX Spectrum games, then you'll not be aware of the crazyness that happens when sprites clash colours. Personally, unless you can implement these GFX rules, then I don't think it's a true ZX Spectrum replica game. This is why I stepped away from Unity3D and went down the Windows Form route, I felt I would have more control over rendering the screen. Also if I get time, I can just migrate my code to use MonoGame (XNA using Mono), and deploy to multiple platforms like Android, iOS, Linux etc...

Now for the game itself

I don't have a lot of time so it has to be simple. Many hours/days of my youth were spent playing Chuckie Egg and Manic Miner, these are true classics so will use these as my insperation. Not entirely sure where I'll take the game yet, but will be a simple player with a static level(s), collecting things, whilst bad things chase the player.

Day 1:

And we're OFF! First things first, I needed to nail an engine for displaying all the sprites on the screen as a base then build the game upon it. The way I achieved this was to draw the sprites in Photoshop using 2 colours, white + black. These are loaded in and I read the pixels storing them in my own data structure as rows of bytes for each attribute block. Each block has 2 colours, for Paper and Ink. This means I can chuck pixels around my data structure, and my engine will draw the pixels with the correct colours.

Next I built a map engine to read a text file describing a list of 8x8 pixel sprites to use, their colours and their position on the screen. Now this is in place, it will allow me to load multiple maps/levels with ease.

ZX Spectrum has a distinct font, so I drew each character as 8x8 sprites, using the same data structure I was easily able to chuck text on to the screen.

Finally on day 1, I needed a basic character I could move around the screen using the keys. As the map information was already implemented, I was able to quickly add very basic gravity and physics collisions with the scene. As I was on a roll I was able to duplicate the player code to use as a bad guy which ignored the user input. For good measure I quickly put in a collectable sprite, which I rotated through the limited colour palette ever frame, to try and make it look like it was flashing.

Quick screen shot:


Here's a quick video to demo my day 1 progress:


So that was day 1, really really happy with progress. I have the basis of my game, so I can just spend the rest of the week beefing it up, and hopefully make a game not only in the ZX Spectrum style, but actually FUN!

As I write this, I'm actually on day 2, but I've run out of time, so I will blog my progress tomorrow and through out the week.

Comment here or get involved on twitter: @rich_lloyd

No comments:

Post a Comment