Bring back my bones 4k releasedPrint page
Around 8th of June, I came across an information about 'Craptastic' 4k game competition, organised by Reset 64 magazine. Compo was announced on the beginning of this year, but somehow, I've missed it...
The format and idea for the competition itself made me want to take part in it! When I realized that I had less than 3 weeks to the end of the competition, I decided to immediately proceed to work, setting aside work on the Meonlawel cRPG. Also, as a notorious victim of procrastination, I had no choice, following last year's successful release of Swarm 16k, an RTS game for RGCD 16k cartridge compo (still no results though). I haven't announced it publicly yet, but this year I have set myself the goal of finishing the first demo of Meonlawel. I am going to talk about this another time, but now I would like to write about the game released just a week ago as part of the 'Craptastic' competition, game titled Bring back my bones 4k.
As the projected submitted to competition must not exceed 4 kilobytes, I thought about resurrecting a project from years ago that uses the standard PETSCII character set, the one available after turning on the Commodore 64 computer. In this way, as in the old days, I could build graphics from a ready set of basic graphic and alphanumeric characters, thereby saving memory on defining graphics.
The first idea that came to my mind was the unfinished project that I wrote in BASIC in 2002 (18 years ago!). It was a pseudo 3D game where your goal was to get out of the place being a cross between medieval undergrounds (torches, using a knife and an ax) with a space base (sliding doors, access cards). This place was dominated by a race probably originating from an alien planet, leech-like mutants. This game was called Xertian Breed. As I didn't know how to write assembly code back then, the game was written, in BASIC, so it worked very slowly. However, it contained a level loader with two levels ready to play, selectable weapons, and automatically drawn map.
Now, after 18 years, with several years of experience in assembler, I decided to dust off this idea. In the creation process, however, the original idea was asking for a number of improvements. The main shortcoming of the original was the sense of 3D itself. The representation of the surrounding walls was not very clear whether there is a transition in the given direction or not. The first attempt was therefore to render the walls themselves. After a week of experimenting with different projection versions, I finally managed to get a fairly satisfactory effect that can still fits in 4 kb of memory. This way I added side walls, improving the experience of 3D environment.
The next step was to analyze the gameplay. And so, the concept of the knife and ax from Xertian Breed were replaced with projectile spells, so that it was also possible to fight from a distance. Also opponents themselves have undergone a complete metamorphosis. Leeches brandishing with their paws were replaced with devils, which I drew the day before sending the completed version of the game to the competition. Initially, I wanted their horns to consist of the "@" sign (at), but I replaced them with the pound sign for one simple reason - because I reserved the "@" sign in the editor for special functions such as transparency or "shadow rendering". Well, I did not mention that all objects were drawn using an editor (titled Breed-Edit) with the option of loading and saving, which I had to write quickly, this time in BASIC. For simple nostalgia reasons. And yes, I liked the pound sign representing the horns even more.
Let's move on. The original idea from Xertian Breed, where the first-aid kits were collected to restore a portion of energy doesn't exist in Bring back my bones, where you collect bones scattered throughout the map and only by throwing them into the cauldron, you can restore some energy. Initially, it was supposed to be a potion of life, kept by mixing herbs in a cauldron, but the game had no explicit purpose. Initially, the purpose of completing a level was to find a way out, but this idea had no foothold. Hence, the herbs were replaced with bones - their collection defined the main theme of the game.
In a very short time, the size of the project reached the upper limit, i.e. 4 kilobytes. So a few things needed to be cut out. I had to remove the title screen, interface graphics and even more detailed walls version. The music player did not fit either. However, I did not want to get rid of sound effects, so I wrote my own sound effects player. Unfortunately, I was also unable to add more levels, even though I tried to add a level generator that simply did not fit. In addition, I removed some code elements that ignore world rendering when we are on the edge of the map. This last change, unfortunately, caused a bug that I could not catch before the deadline of the competition. It caused that the game stopped for some time and in certain circumstances it was able to crash the game. This bug has been fixed in the current version, still under 4kb.
For half the time I was writing this project, I was wondering if it would be possible to put it all into 4 kilobytes of memory. On the last day, it turned out that I had no room for floor animation. To give a better impression of movement, however, I wanted to write such smooth floor movement procedure. Having a few bytes, I decided to blindly add the offset to the table from which the next background value was read. Then I mixed it with the value of the direction in which the player is facing so as to give the impression of rotation. I decided to see what would happen. After starting the program, the static and boring, purple-blue floor was enriched with colours that I would never have mixed into the palette: sand-like browns and grays. As it turned out, the offset pointed to another table in the code used for other operations, whose values represented the browns and grays mentioned, colours that I would not even think of using.
What about procedures? Without going into details, those that used speed code, had to be replaced with slower ones but shorter in size - something completely ugly and non-intuitive in the world of assembler where each cycle matters. Initial generation of tables with indicators also resulted in a lower size. The use of the Pucrunch packer also saved the project, which did much better compared to the tested Exomizer in version 2 and 3. The game, after unpacking takes 6 117 bytes.
Working on this project gave me incredible fun (apart from the fact that I spent on average 4-6 hours of sleep per day). It is true that the size limit and available PETSCII characters were quite great limitations. And both these restrictions significantly influenced the final effect of the entire project. However, I did not feel this limitation directly, on the contrary. It was just a driving force - a challenge - to make the game visually as well as in terms of playability.
I hope that I managed to achieve this effect. Creating the whole world from PETSCII characters is an extremely creative process that I highly recommend to everyone. I will definitely come back to this. Maybe while working on the full version of Bring back my bones?
38 games have been submitted to the 'Craptastic' competition this year! And I must admit that I have a few strong favourites, where playability and ingenuity hooked me to the computer for many hours. I strongly recommend to check these games, you will find them on this page.
From this place, I would like to thank the organizers of the competition for a simple and very wonderful idea! This is a great opportunity to try yourself and... provide great gameplay for other Commodorians! In 2020! Almost 40 years since the release of the first Commodore 64 on the market!
If you want to see the actual gameplay of the previous, buggy version, check out hayesmaker64's Twitch stream: https://www.twitch.tv/videos/667064262?t=1h26m13s. Thanks hayesmaker64 for playing it, he's a brilliant reviewer and one of the best show hosts I've seen!
Let me know what do you think about this game... in the meantime I will stretch my bones!