scene.org File Archive

File download

<root>­/­parties­/­2015­/­flashback15­/­game_development/p0_snake_(64kb_cartridge_version).zip

File size:
72 473 bytes (70.77K)
File date:
2015-06-17 05:45:02
Download count:
all-time: 253

Screenshot (by pouët.net)

Screenshot

Preview

  • P0 Snake (C64 Binaries Only)/ dir
  • P0 Snake (C64 Binaries Only)/p0 snake code sheet.png 16.20K
  • P0 Snake (C64 Binaries Only)/p0 snake manual.txt 12.58K
  • P0 Snake (C64 Binaries Only)/p0 snake.crt 64.19K

file_id.diz

INTRODUCTION

Wind your way through 30 levels of arcade-action insanity in this specially enhanced version of the game that took the trophy in the 2014 RGCD 16KB Game Development Competition. Featuring eight additional screens, an all-new intro sequence, improved sound samples, bug fixes and other minor tweaks, RGCD is proud to present this final version of Antonio Savona's P0 SNAKE!


LOADING P0 SNAKE

To load the P0 SNAKE cartridge, turn off your C64/128, insert the cartridge and turn the computer back on. The game will load automatically.

If you are presented with a blank screen or graphic garbage, please try turning off the C64 and re-inserting the cartridge again. Issues like this are most likely due to an oxidised cartridge port (after all, we are talking about 30 year old technology here), so please check and clean the port - or even try the game on another C64 - before contacting us for a replacement.

P0 SNAKE has been tested on both PAL and NTSC machines, and works on the C64, C128 and C64GS (there is no keyboard input required to play). Although it runs on NTSC hardware, it does play fractionally faster and will be harder as a direct result of this. As such, the game is labelled as NTSC compatible, but designed for PAL systems. 


PLAYING P0 SNAKE

P0 SNAKE is a super simple game to play - it requires just one button! 

To start the game, use the joystick in port 2 and press fire to bypass the loading screen, then press fire again on the title to begin. Your goal is to eat all the pills in each level in order to progress to the next one. The quota of pills required on each level is shown by the number on the top right of the screen. The number of the current level is shown on the top left, and the number of lives you have left is shown in the bottom border.

Holding down the fire button rotates the snake counter-clockwise, whereas releasing the button rotates the snake clockwise. Alternating these two basic movements allows the snake to be steered around the screen. As you eat the dots (by passing over them), your snake will grow in length. Be careful not to crash into your own tail!

There is also a wide variety of enemies, obstacles and movement-altering terrains to discover, avoid and master. Luckily, the head is the only vulnerable part of the snake - and you'll need to use this to your advantage!


PASSWORDS

P0 SNAKE features a handy password system (and you'll need it!)

After completing every even numbered level you'll be given a password in the format of eight directional arrows. Make sure you record these on the provided code sheets! To enter a password and continue from a previously reached level, from the title screen push the joystick in port 2 in the correct sequence of directions (a series of arrows will appear on the screen following each directional push on the stick).


POST-MORTEM BY ANTONIO SAVONA

The story of P0 SNAKE is a spin-off of the story of a failure; one of the many abandoned projects of the 80s. In 1988, my 15-year-old self wanted to write his own game. I started developing a vertical shooter using the limited tools I had back then - that is, an Action Replay and a lot of patience. I didn't even have a proper assembler, not to mention an idea of what I was doing. It's quite surprising to me that I managed to get anywhere close to something playable, although it was definitely unfinished. Fast forward to 2013 and, while visiting my parents' house, I found my old development floppies. It took me a lot of time to get them working again, but by the time I saw the spaceship moving on the screen, I was hooked. I decided that I wanted to finish the game, and with the modern development tools I had no excuse for failure. 

To get myself ready for the task, I thought I would develop a small, less ambitious project first, to dust off my assembler skills and to get confident with modern cross-development tools. It doesn't get any simpler than a snake game, so I started looking into the indie world to find a good modern snake clone to demake. I played many gems, too many to mention, but all of them were a bit too complex for me. Nevertheless, I got a lot of great ideas in the process and, positively inspired by this trip down memory lane, I drafted a design doc, and the concept for P0 SNAKE was born.

To my surprise, my proficiency with assembler got back to decent levels in just few days (It's amazing how the kind of knowledge that you associate with fun stays in your head for decades), and I immediately realized that I was progressing faster than I had expected, so I decided to enter the RGCD Competition, whose deadline was only 6 months ahead - also to give myself a goal and push me to finish it.

The core of the game was actually very simple to develop: there's not so much going on on screen, and good old 6510 can draw the snake without a sweat. Everything else is done with sprites, so work as usual in this department too. The real challenges came in other areas.

First of all, the choice of the graphic mode was quite unusual. P0 SNAKE is done entirely in hi-res bitmap mode. Bitmap modes don't allow for a lot of on-screen action, but they have the advantage of allowing free drawing on the screen, something I needed for the snake. The hi-res mode gives that vector feeling that I was looking for. Furthermore, it allows for any-two colour per 8x8 pixel block. Unlike char-mode, in fact, the background colour can be set every 8x8 pixel, and it can be any of the 16-colour palette. I leveraged this big-time to create the shadow effects in most levels. There's not a single pixel involved in those effects. It is only the background colour changing at every block. And it's actually important that graphics are not used for shadows, so the snake can safely move over those areas without triggering a collision. I also used this approach to draw other simple, non-deadly elements in some levels, like the score in the Pong level or the invader in the space invader level. I think the pinnacle of this approach is the new Pac Man themed level; the entire maze, including the shadows, is just background colours - not a single pixel was harmed to draw it.

Speaking of collisions, P0 SNAKE required pixel-perfect collision detection, which is impossible with the classic bounding-box approach. Like with graphics mode, I decided to use another C64 feature that is seldom leveraged, hardware-sprite collision detection. The reason it's never used in anything more complex than a simple avoid-em-up game is that the collision register only tells you that a sprite has hit something, but you don't really know 'what' when more than one collision is going on at the same time (which is very often the case). This approach is completely unreliable for a complex game with a sprite multiplexer, for instance, but, again, P0 SNAKE is rather simple in terms of what happens on screen. A combination of the classic, bounding-box approach and hardware-sprite collision detection as a 'refinement-pass' allowed me to achieve the pixel-accurate collision detection that I was looking for.

The final, most difficult hurdle was digitized speech. I wanted the game to have speech, but I didn't want it to come at the expense of game-play or level design. So I left it until the end, when I would have a minimum set of levels designed, and most of the graphics and the code in place, to decide whether I would put it in. The game uses a lot of the usual tricks to fit into 16KB; sprite mirroring and rotation calculated at run-time, compressed level data, etc. But even after all the optimisations, when the time to fit the digi came, I was left with just 4KB of cart space. I spent a lot of time developing a compression system to work out this limitation, and in the end I kinda made it. I also wanted the speech to work both on new and old SID chips, and to play along with music, which was also quite difficult to achieve. In the end, I wish I had had 1KB more to improve the speech quality, something I was very tempted to steal from other areas, but in the end I stayed loyal to the initial proposition of not having the digi come at the cost of game-play, and I had to accept the speech being a bit 'noisy'. You can read more about the compression approach I came up with in my development blog at brokenbytes.blogspot.com.

All in all, it was an amazing learning experience for me, and great, great fun. With the internet, and so many people willing to help and share their knowledge, gone were the frustrations of 25 years ago, when I could get stuck on something for days because I simply could not access the information I needed. Not to mention all the guidelines, examples and inspiration one can get from veteran C64 developers, through their games, now only one click away, or even through the many interviews floating around the web. All through the development I tried to keep their lessons in mind. I remember I had changed the desktop wallpaper on my development box to a big sign saying "GET THE CONTROLS RIGHT", which I had read in an interview with master Jeff Minter. "Once you get the controls right”, he said, "you are halfway there. The most amazing game is useless if you can't control it". Quite a simple lesson, but arguably the most important one. I played for weeks with the speed, the radius and other aspects of the control of the snake, and had other people try it to get feedback until I felt it was moving "well enough". The terrain in one of the last levels slightly alters the curvature radius and the speed of the snake - and the game becomes almost impossible as a result! This is a further proof, if needed, that good old Jeff really knows what he is talking about. Thanks Jeff! I owe you.

The game did really well and went well beyond my expectations, winning the RGCD competition. I think that the concept, being very straightforward and immediately playable, worked very well in the end. Perhaps, lowering my ambitions to a very simple game, something I was initially reluctant to do, actually worked in my favour. But what really made the difference, in my opinion, is the incredible amount of support I received. At some point, for instance, I realized that I needed a chiptune for the game, so I asked RGCD to put the word out that I desperately needed help. I was overwhelmed with offers! Not knowing which one to accept, I just went with the first one I received, and what a lucky choice it was - SID virtuoso Aldo Chiummo eventually delivered a bouncy tune that clearly caught the spirit of the game.

When James Monkman contacted me asking me to work on a 64KB version, I was really over the moon. Not only could I finally fulfil my dream of having a C64 game published, 25 years later, but I also had a chance to rectify those things I felt I had not done well in the competition version of P0 SNAKE. Something I had to rush out to meet the deadline, or to scrap because of the 16KB limit. And I could use all the feedback I had received in the meanwhile to improve on the original idea! The speech is now clear as I didn't have to wrestle with compression any more, and 8 additional levels found their way in (plus a playable end sequence). All the bugs and glitches I found (like the game not working on NTSC systems) have been ironed out, and you also get a beautiful loading screen by Ilesj and another SID by Aldo Chiummo. There are many other details that have changed, but I'll leave it to you to spot them. What you are holding in your hands now, though, is P0 SNAKE the way I wanted it to be in the beginning, had I had all the time and cart space I wanted. If you don't like it now, I have no excuses!


TRIVIA

In addition to the other classic game cameos, P0 SNAKE once also featured a Tetris level. In addition to moving the snake using the fire button, you had to simultaneously play Tetris in the background using the four joystick directions. If you filled the screen with Tetris blocks or hit an enemy/obstacle with the snake head you would lose a life. Although it sounds like a great idea, in practice it proved to be so incredibly difficult to play that Antonio removed the level altogether!


CREDITS

P0 SNAKE is a Antonio Savona/Broken Bytes production, Copyright 2014-2015. Published on 64KB C64 cartridge by RGCD, 2015.

Antonio Savona - Code/Graphics/Concept
Aldo Chiummo - Music
Ilkka Sjöstedt - Loading Screen
Steve Day - Box and Poster Artwork
Dr. Martin Wendt - Technical Support
James Monkman - Manual
Antonello Molella - Testing
Tim Harris & Raymond Lejuez - Cartridge Hardware


LINKS

For more information on the team involved in this C64 release, visit:

www.rgcd.co.uk
brokenbytes.blogspot.com


Official RGCD/Psytronik forum for general feedback can be found at:

www.lemon64.com/forum/index.php