Month: June 2019

Deepstone Catacomb on ZeroPage Homebrew

I sent ZeroPage Homebrew the first beta to play/review on their show. The first show went quite well but a small bug involving the Master Sword appeared. I made some last minute changes to how the Master Sword Appears the night before and kind of broke it 😬. The bug basically made the Master Sword only appear in the game about 50% of the time.

I thought about it at work and kind of realized it would be an easy fix. Fixed it when I got home that morning. The next day (Friday) I tuned into ZeroPage on their Twitch live show, and they happened to finish the game they were playing (Spider Fighter) early and decided to give Deepstone Catacomb another go. So the second video below is that play through with the updated binary of the game (Master Sword bug fixed version).

Please Like and Subscribe if you enjoy it. ZeroPage plays great new homebrews for the 2600 a couple times a week and some other retro consoles on rare occasions.


DeepStone Catacomb – Game Premiere

Deepstone Catacomb – Second attempt to complete

Making an Atari game – Day 30!!!

I finished up the Game 3 variation. There is now random enemy swarms on each floor. I also made it so after floor 64 (if anyone ever gets that far, I doubt I even will), the game will no longer drop helpful items like chicken or mushrooms for the player. I also made an enemy speed limit so the game doesn’t ever break. The fastest an Enemy can move now is 6.0 pixels per frame, which is insanely fast. However the fireballs can reach up to 8.8 pixels per frame which is very insanely fast. They may get stuck in a wall here or there going this speed but should be able to bounce back out. The average player will never get to see them go this fast, god knows if anyone ever will. If someone were to manage to get to Floor 100, it will appear as floor 00, and then roll back to floor 01 after that. The speed will still remain maxed out at that point however. If you are that good, you are no longer human… you are a machine.

At the very end I managed to squeeze in a few more sound effects. I got the steps down the ladder sounds at the end of each level in there now.. This made a huge difference. I always wanted that in there but didn’t think it was gonna fit. I also added another sound for the beginning of each floor. This also makes a big difference I find, in feeling like a real game. Which I guess it really is at this point. So I guess it’s safe to say…

The game is fucking done guys!

This was a crazy challenge that I managed to do in 30 days over a period of six months. I took this on as a small side project to kind of wrap up quickly. Gave myself a 30 day deadline but really didn’t realize that while working a 12 hour night shift and also having fun/spending quality time with my girlfriend, that it was really hard to get 30 free days to program.

It doesn’t end here though. I’m going to beta test the hell out of the code (which I’ve been doing all along as well) and begin creating the artwork for the manual, cartridge, and box. I will also need to create a page dedicated to this game as well on this site. This should be really fun. I will share all of this as I go along as well, but from here on out it definitely won’t be daily updates. They will be very far and few between.

A lot more work ahead, but man does it feel good to have a complete, working, playable game.

Also, I have emailed Albert Yarusso from AtariAge and sent him the version of the game I have completed so far to see if he would be interested in selling this game in cartridge form.

Making an Atari game – Day 29

  • Changed the Dragon’s Lair a bit. It’s now a different shape and helps it stand out a bit more from all the other rooms
  • Added Torches to the two rooms just before the Dragon. Gives the player a sense that something big is coming up
  • Added sound effects for when the monsters shoot at the player
  • Made a few adjustments on the overall difficulty. I’ve been playing this for so long it is hard to tell if it’s too easy or too hard for the average player. Only way I’m going to find that out is by watching people play it, or through feedback online. I may have to release a beta soon, I hope you will help me with that 🙂

A funny story.. So with just enough free graphic space to create a single frame 8×8 sprite, I thought to myself… What should I do with this? Since I was working on placing torches in the room leading to the endboss, I thought “I know! I’ll make a door mat! In Zelda there is often a symbol on the floor right in front of the door to the endboss. Wouldn’t that be cool if this game had one as well?”

A fireball
The fireball I went with

So I did just that. And yes I liked it but really, it didn’t add that much to the game play, so I thought, what if I used it to make another enemy instead? I have more than enough space now since I freed up 600 bytes. So I removed the door mat and created a fire ball. I created probably 4 or 5 different graphics of fireballs before I settled on the one that I liked the most.  I made the fireball appear in some of the later levels and just had it move back and forth, bouncing between the two walls in the room, but also moving faster than any of the other enemies in the room.

This was way better than a door mat lol. This actually added a little variety and something new to the gameplay. I found this story quite funny. I was telling my friend Paul at work about creating a door mat first then replacing it with a fireball, and how stupid it would have been to go with the floor mat when something clicked…

Something dangerous lies in the next room
Something dangerous lies in the next room

The beginning of each floor has a cross symbol to let the player know he is back at the beginning.. What if I took that same cross symbol, stretched it out in code, and used it as the doormat as well. As long as it looked good stretched and wasn’t seen as confusing to the player. So I tried it, and yeah, it looked pretty good. So I managed to have both the fireball and the floor mat without sacrificing anything for cosmetics. 🙂

Making an Atari game – Day 28

Today I wrote the code that spawns the final endboss of the game. The code simply checks if the last dragon is dead, if so it then places the final endboss at the bottom of the screen. I also placed the tracking missile object in Y location value 199. This is far below the screen so it doesn’t appear for a while as it makes it’s way up to the player. I did this to give the player a little more of a chance to get some free hits in because I feel the game may be difficult enough as it is. Plus it’s a nice short break in between battles.

One thing I thought would be really cool to add to the game is a reward for killing the Dragons. Where the most treasure I can drop in a given room is three coins, this isn’t really possible. I would like a little bit bigger of a reward for slaying a difficult Dragon. So what I came up with was to turn the entire next floor after the dragon into a treasure floor. This way it kind of feels like the Dragon was guarding it’s treasure and you get to collect after slaying the beast. The way I did this was to just basically make the Atari kill all the enemies on the Treasure floor as soon as the player enters the room. This way, no monsters are seen and the coins appear in every room for the reward. I also made all of the treasure floors gold in colour to emphasize this.

One thing I found with the treasure floors was that it wasn’t very smooth or fun to run through with some of the rooms being rooms with obsticles (walls) in the way that you had to navigate to get to the next room. So I solved this by making every room a corridor (hallway). So it’s more of running through a series of tunnels collecting gold then rooms. Pretty happy with how this turned out.

I also changed the way the code colours each floor. This will also help for making the Game 3 Random dungeons randomly coloured as well.

 Quick notes on some other things I squeezed in:

  • Redesigned some of the monsters a bit and added a cool Skeleton guy that ended up being mine and my girlfriend’s favourite enemy.
  • Play tested the crap out of it, trying to set the difficulty to a fair pace.
  • “Think” I fixed a bug where the player will hit an enemy just on the top of it’s head, the sound effect will play as if it were hit but no damage was taken by the enemy.
  • Removed Easter Egg Room which saved enough graphic space to add a cool Easter Egg (Telling you more about this kind of defeats the purpose of the Easter Egg so I guess I’ll just leave it at this. :p )

I Found Huge amount of unused Code in Bank 5 (I completely forgot I set this chunk of code aside a long time ago in case I needed to go back to it), Deleted it and saved 600 Bytes to play with 😀 Not sure what I am going to do with it yet…. Maybe try rearanging some code into Bank 5 and free some space in Bank 6 to have sound effects for the Enemies shooting (Throwing projectiles) 😮

Making an Atari game – Day 28 (Kinda?)

My new wireless Atari 2600 development workstation
My new wireless Atari 2600 development workstation

I’m not sure if this should count as a day of coding on my 30 day adventure or not but I seen someone make a post about something called a FlashAir SD Card that they were using to develop games for the Atari. This sounded too good to be true.

As of right now every time I make a change to the game on my Mac, I need to go get my SD Card and copy the new Binary onto it, then take it out. Go over to my Atari, place it into the Harmony cartridge and run the game to test it. If something is wrong, I need to take the card back out. Go back to the computer change things, copy things, take out the card, walk back to the Atari, stick the card back in, test it. And repeat and repeat and repeat. This gets old… The solution?… A FlashAir SD Card!

Toshiba FlashAir SD Card
Toshiba FlashAir SD Card

Before I go on I should say that I don’t recommend this card for anyone who isn’t very technical minded or isn’t obsessively determined to get it to work like I happen to be (The latter more so than the former). There is very poor documentation on this card and it took me close to 8 or so hours to get this thing working… The card was designed for digital cameras with the purpose of sending pictures from the card to a computer. What I wanted it to do was the exact opposite, which was receive my source code wirelessly from my Macbook to my Atari 2600.

In order to accomplish this I had to do a lot of research and digging online. Then I had to get into the terminal on my Mac and learn how to use Vim. Went through some tutorials on Vim. Then I got into the config file of the Flash SD Card, and adjust it to allow for uploads. This was easier said than done and I probably would have given up sooner if I didn’t already know it had to be possible, because I seen someone else online do it.

Now I can leave my Atari on, make a change on my laptop on the fly from the couch, send the new binary file through wifi to my Atari, grab the joystick and test the game on the real hardware. It’s a dream come true. It’s such a cool little Atari Game Development Work Station I have on the go now. I wish I had this on Day 1. The project is almost over now but if I ever make another game, this will be very useful.

Making an Atari game – Day 27

I decided not to simplify the random placement of enemies routine in Bank 5. I want to avoid that as much as possible because I would like each room to feel unpredictable when the player enters. I did manage to free just enough space in Bank 6 which controls the enemies AI to also add a function that sets the behaviour statistics for all of the enemies in the game. I did this without compromising anything. Mostly saving space with smart branching (Just removing goto commands when they were not really needed). Bank 6 is currently down to 2 Bytes however, but I think that should be fine. The only other thing I would want to add in Bank 6 is a sound effect call for when the enemy “shoots” throws a rock. At this moment it is silent and currently the bank is too full to allow for this. Not sure what I am going to do there.

I’ve added sound effects for the footsteps of the player as he enters the cave in the title screen. Kind of reminds me of Link going down steps in Zelda on the NES. Really, thats the main reason I added this 😛

Things I’ve also done today:

  • Used smart branching to clear up some space in banks 1 to 4.
  • Created a Game Over screen when the player dies, and after a few seconds it sends  player back to the title screen
  • Cleaned some code, still more to clean and go though
  • Removed some redundant code and simplified the sound driver.

Making an Atari game – Day 26

Today was a fun day. I am so close to completion, whether I like it or not. 😛

Bytes left in banks
Take note of the bytes left in my Banks

I was kind of fighting at first because I had large ideas on how I wanted the game to end. Sadly, I was so low on bytes in bank 2 that I was just not able to pull off what I had hoped. But I did manage to make a proper ending to the game. Although it is a very short and simple one. I am happy with it.

I kind of did a half-assed Atari’s reset switch code at the beginning of this project. So I went ahead and improved that.

Also, I finally added hitpoints to the Dragons in the game. This part is really exciting. They are actually a challenge now and I had died myself a few times trying to kill them. I’ll probably make some overall adjustments as I polish things up. I added a mini tracking missile in the room with the dragons so that the player can’t just plow away at the dragon forever until it’s dead. Now he has to worry about moving around and avoiding the missile as well. Also, I added some hitpoints for the midboss.

Next, I’m going to have to try to get a lot more space free in bank 5. It’s down to 2 bytes and I kind of need it to set the stats for each enemy. I’m going to have to sacrifice something in order to do this. So what I will probably attempt to do is simplify the random enemy placement in each room yet again. I’m crossing my fingers in hopes that will be enough.

Then really all there is to do is change some stats for each of the 3 game variations. Game 1, is basically how everything is now by default. Your main game from start to finish. Game 2 will have the enemies be a bit more stronger, take more hp away from the player when hit. Then Game 3 will be the same as Game 2 but also an endless game. No princess to save, just keeps getting deeper and deeper down the dungeon, never ending until the player comes to his demise. This is the game variation you would play when you are aiming for high scores.

Making an Atari game – Day 25

Today I cleaned up some code. Realized I could use on..goto commands like case commands in other languages to save some space. So I used that to determine which enemies appear on each floor. This managed to save quite a few bytes in that bank.

The first mid boss I created
The first mid boss I created

 I also created a mid boss. I found it felt like a long trek between each dragon (endboss) in the game, being every 8 floors. So to switch it up, kind of a halfway point, I thought I could sacrifice every 4th floor between the 8 as another endboss floor. I just had enough space in bank 4 to check the floors and change the player1 enemy’s size to double his size. Therefor making him a larger kind of monster (mid boss). There were only 3 bytes left in the bank after I did this. Now in the bank that creates the stats, I just have to give him more hitpoints I think to make him a little more challenging than regular monsters.

One bad thing about increasing the hitpoints is that right now the player can just stand beside the enemy and keep hitting the button over and over until the enemy is dead. This doesn’t make for a very challenging enemy, even if it has a ton of hitpoints. Just makes him more of a chore to kill. So I need to do something about that at some point if I can. Either make the enemy move away after being hit (which is more difficult then it sounds, because it gets weird when enemies can’t cross each others paths, so that there is no flicker in the game) or have a ball or another obsticle in the room bounching around so that the player is forced to move to avoid it and not stay in one place very long, swinging his sword.

 Also, since every fourth mid boss floor has the same enemies on it, the mid boss ends up being the same guy everytime. I may have to look into this in the future as well, because it would be a lot cooler if each of the other monsters were also seen doubled in size and stronger as a midboss, instead of fighting the same guy over and over.