Notebook

Updates on all of my latest projects

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.

Making an Atari game – Day 24

My first (ugly) attempt at a title screen
My first (ugly) attempt at a title screen

I have played around with using the Title Screen Kernal however I found it just took up too much space that I wasn’t willing to give to it. I thought I would mention also that when I ran one of the example title screens from the kernal (The colour by flicker example with Yoshi), it really messed with the display on my MacBook. Even after I shutdown Stella, I could still see Yoshi burned into the screen of my Mac. This freaked me out quite a bit. I tried everything to get rid of it. Rebooted several times and nothing seemed to be working. Thought I really damaged my computer for a bit, but I think all it took was time? I shut the Mac down for a while and after a couple hours when I opened it back up, Yoshi was finally gone. Thank god for that, but the experience has kind of scared me away from color by flicker. So I decided to code my own simple title screen which I am really happy with how it turned out. Also created a little intro sequence for when the player starts the game, the player will walk over towards the entrance to the Catacomb and begin to walk inside it. Perfect.

The start of the title design
The start of the title design
The finished title screen
The finished title screen

Not a bad looking title screen for not using the title screen kernel, if I can toot my own horn for a moment lol. The number 1 on the screen there is the selection of game variations. I plan on having 3 but I’ll talk more about that later.

I also fixed a bug where the game would crash and reset on the actual 2600 hardware when the player entered the exit room with the ladder in it. It was caused by incorrectly using the “return” command with the draw player subroutine. Once I added the Title Screen intro sequence, this bug was born. This is when I changed the subroutine to execute a return command instead of a goto statement because I needed it to send the computer back to the title sequence when called instead of the main game loop as usual. This caused a nested return sequence that needed to be fixed. This bug could never be replicated during the emulation,  Stella seems a bit more forgiving with nested return commands.

Making an Atari game – Day 23

 I fixed a bug where the death smoke that appears when you kill a monster would actually hurt you if you the player walked into it. Kind of not really a bug, just something I didn’t take account for until now. This would suck and wouldn’t make sense. So now when the player collides with an enemy, it checks to see if the enemy is displaying it’s death cloud or not before it takes hit points away from the player.

Just a quick list of the other things I did today:

  • Rearanged enemy swarms (The order the enemies appear throughout the dungeon)
  • Wrote down appropriate enemy stats (Just in planning, not in actual code yet)
  • Took out random Dragon, made Dragon the Endboss. Found I wasn’t going to have room for both random Dragons and multiple Endbosses so I compromised and made the Dragon the Endboss.
  • Put the Dragon on floors 8, 16, 24, and 32
  • I changed how enemy speed works. Made it only increase by significant amount every 8 levels
  • I want to make an Ultra Sword that will allow you to shoot even when health is low