How we made a roguelike game for the Commodore 64

This is a postmortem for Rogue64, a modern roguelike game developed for the Commodore 64 by Badger Punch Games. Badger Punch games is an indie game developer with Ricki Sickenger (me) as developer and Henning Ludvigsen as graphics artist.


What is Rogue64?

Rogue64 is a modern roguelike for the Commodore 64. Every play of the game is a unique experience, with procedural generated levels. As you progress in the game you will meet tougher monsters and bigger challenges, but if you reach the end, there are wonderful rewards to be gathered!

Rogue64 is based on Rogue4k, a minimalistic Rogue-ish game in under 4000 bytes that we made for The C64 ‘Cassette 50’ Charity Competition hosted by Bitmap Soft.

What is a Roguelike?

All roguelikes are games that are based on some or most of the traits of the original game called Rogue. They are like Rogue. 🙂
There are different definitions of roguelikes, depending on how strictly you think a roguelike should conform to the heritage of Rogue. Most people agree that these properties should be in a roguelike:

  1. Permadeath. That means you have 1 life. No retries, no extra lives. When you die, you die. Game Over.
  2. Randomized dungeon. Each time you start a new game, the dungeon is randomized, so no play through will be the same.
  3. Turn-based. This means that each action is one turn, and the game pauses to wait for the next action. This gives the game an element of strategy because you can take your time to plan the next move.
  4. You have to kill monsters.
  5. There are unidentified items to pick up and identify. Like potions or magic items.
  6. You have to reach the bottom of the dungeon to complete the game.
  7. Character progression. Your character has stats that can increase.

There are many more properties that can be part of a roguelike, but these are the basic ones, and in the context of Rogue64, the important ones. To read more about roguelikes, check out wikipedia.

The Beginning (Rogue4k)

Rogue64 started out as a tiny (4000 bytes) game. We made a game called Rogue4k for a contest called The C64 ‘Cassette 50’ Charity Competition. This competition was about making a Commodore64 game in under 4000 bytes.

We wanted to make a roguelike because we believed that using procedural generation to generate content would give us an advantage, and would help give the game some replayability.

We had never made a roguelike before, even though Ricki had played a few, and loved the genre. Ricki started looking at dungeon generation algorithms, but quickly settled on a simple approach he had been thinking of earlier.

The dungeon (graph) with all connections drawn

The dungeon is represented as a graph, where each node is a room, and the connections between nodes is represented as doors between rooms. Then we can create random dungeons by starting with a 5×5 graph and start removing rooms. All we have to do is make sure that removing a room doesn’t split the graph (dungeon) in two. The term in graph theory for this is that the graph is “connected”, which basically means that from any one node (room) in the graph (dungeon), you can reach any other node.

Ricki prototyped the algorithm in javascript, and when it was working he converted the code to C64 assembly. The only problem was that the algorithm took almost 2k of the available 4k for the game, so there was very little left to make the rest of the game. But we managed to put together a rogue-ish game in 4k, even with some sound effects.

The restrictions were so tight that some of the game code had to be stored in screen space. That is the reason why the play area ended up being 10×10 chars. It actually started out a little larger, but because we ran out of space for code, we reduced the size to make the game fit in 4000 bytes.

Rogue4k came 4th place in the contest, and we got a lot of positive feedback from it, and (as we have later found out) quite a lot of people played it for hours on end. That is pretty cool. 🙂

The great feedback was very inspiring, and we wanted to see what kind of roguelike we could make with the full capabilities of the Commodore 64 at our disposal. So we started making Rogue64.

Rogue64

Rogue64 was envisioned as a game that adhered more to the roguelike concept. We still wanted to make it as accessible as possible to people that weren’t familiar to the genre, so we would try to keep it simple, but fun. We had a good starting point with Rogue4k, and thought making Rogue64 would take two to three months.

Well, that was definitely wrong!

Rogue4k was finished March 31st 2021, and Rogue64 was released January 11th 2022. Most of the development was done in April/May 2021 and September 2021 until end of December, which means around 7 months of evenings and weekends… for a C64 game! 🙂

So, what took so long, and how did we do it?

The first thing we wanted to do was to add more “stuff”. Rogue4k only had one type of monster, no character progression, and we didn’t have any end-game. It was essentially an endless game, because you could always advance to the next level, unless you died.

Early screenshot of Rogue64. The Zzap!64 coverdisk demo.

Game Screen

We had added a minimap to Rogue4k, and were pretty happy with how that worked. We also kept the 10×10 char play area because it actually worked nice. The rooms were not so big that it was too easy to avoid enemies, and not so small that we couldn’t add the content they needed. We did add walls inside the rooms, to make them more fun to navigate, and to add some variation to the game play. This also added an element of strategy and the possibility to trick the monsters.

We added an inventory to the game screen so you can pickup items and see what you are carrying. It works really well since you have all the information on the same screen, including your stats and the minimap. The inventory is activated by pressing and holding the fire-button, selecting the item you want to use, and releasing the button to use it. It turned out that this was a pretty intuitive and fluid way to use the inventory.

Potions

Potions was also something we added. We wanted to randomized potions so that each game had a unique set of potions. We quickly found out that is was more fun when we made the green potion always be healing, and the blue and red potions were randomly picked from a this list of potions:

  • Heal to max health
  • Poison dot (-1 HP every x turns, max 3)
  • Poison (instant -3 health)
  • Strong Ale (+1 Strength & messes with direction controls randomly)
  • Room-clearer (kills all enemies in a room)
  • Time-freeze (stops all enemies in room for x turns)
  • Strength potion (+1 strength for x turns)
  • Reveal All (Shows all the rooms in the minimap)

If you have played the game, you will have noticed that we removed the “Poison” and “Poison Dot” potions, because they ended up not being fun. This was done after feedback from player testing. We did re-use the “Poison Dot” effect for the Snark monster, which has a low random chance of poisoning you.

Graphics

When we started getting more game systems in place, Henning upgrading the graphics and replacing the temporary graphics Ricki had made. The play area wall was upgraded to give more of a 3D effect, and backgrounds with walls were added inside the rooms.

In addition Henning made quite a few monster variations that were looking awesome.

We started out with everything being character graphics, but we really wanted the monsters to be able to be larger than 8×8 pixels, and we didn’t have that much space in the character set to add lots of animated char monsters, so we ended up converting all the monsters and the player character to sprites.

All of the in-game monsters, and even one we didn’t use.

Sound

The music and sound effects were made by the awesome Sami Louko, who also did the music for Showdown. Sami made 2 main tunes, and a lot of extra sound effects. The music is very atmospheric and sets the mood for the game in a subtle but charming way. It never gets too repetitive and never gets boring. We are very lucky to have such a great musician working with us! The sound effects complement the actions, and do a great job.

The room system

Rogue64 minimap

Since Rogue64 started out as a 4k game, the room system was optimized to make sure room data took as little space as possible:

  • Each room has 1 bit per door, so less than a byte is needed to setup the doors of a room.
  • Each room used 4 bytes to determine the 4 possible connections a room can have.
  • Each room has 1 byte (8 bits) to determine what monsters are in that room.
  • Each room has 1 byte (8 bits) to determine what loot is in that room

That means that each room uses 7 bytes, and a full level with 25 rooms only takes 175 bytes of RAM. That is great for a 4k game, but it ended up limiting some of the options we had in Rogue64, because we only had 8 bits to use to put monsters in a room. We didn’t always want 8 unique monsters in a room, we might have wanted more of the same monsters, but since we actually had 9 different monsters, we ended up setting 1 bit for each monster. And we had one extra monster that we never used.

The reason why we didn’t change this format is that when we saw that this would become a limitation we had already committed to a publishing schedule, and didn’t want to risk delaying the release.

Rogue64 was also constrained by a couple of other limitations from the 4k version. One of them is that when you leave a room and then go back, if you haven’t killed the monsters, then whatever damage you did is reset, and their positions are also reset. This is because when entering a room the game runs the room setup code which resets hitpoints and position. Any monsters killed and any items taken are part of the configuration that define a room, and they are saved in the level-data.

Also, each of the 25 rooms in the game have been setup manually with monsters, and they will be the same for a specific room in every play-through. There is a filter on the data that contains the monsters, and this filter varies from level to level. And also, since which room is active is randomized, it gives the illusion of randomization. 🙂

The only random monsters in the game are additional monsters added after level 4 to add to the difficulty of the game from then on. Starting room, exit, key, potions and healing hearts are randomized for each level. So there is a fair degree of randomization ☺

Getting ready for release

We spent almost 2 months tweaking the gameplay and fixing bugs to get it ready for release.

When Ricki thought the game was ready for a play through from someone else besides him and Henning, he contacted a colleague, Pål Trefall. Pål used to work in the games industry also, loves roguelikes and has a lot of knowledge about roguelike game design.

Pål ended up playing a big part in helping the game get into a balanced and fun experience. After his first play through of the game, he told Ricki that the game definitely had potential. He then listed a bunch of areas that needed to be fixed, one of them being the bad level progression. After about three weeks, we had a new build that Pål played through and approved. He now actually liked the game. After a bit back and forth the game was ready for a wider audience of testers.

Luckily, the C64 community is a lovely place to be, and we were lucky to get quite a few great testers who are all credited in the game for the excellent job they did. Almost all the bugs were squashed, and they had quite a few nice suggestions, like recording the amount of moves and showing the moves and the potions you have together with the score when you complete the game. Also, when you die, the game over screen shows what killed you, on what level, and your score. All these were additions suggested by our testers.

In our opinion the game ended up being pretty well balanced in the end. It is hard enough that seasoned roguelike players won’t complete it on the first run, and still gives less experienced players quite a challenge without feeling impossible or too complicated.

Publishing

We were super lucky to have had Bitmap Soft publish our first game, Showdown. It was a pretty successful game for being our first, and it sold a respectable amount of cassettes. So much so, that Bitmap Soft agreed to publish Rogue64 on cartridge. We were very happy with that, and originally set a loose publishing date in October. We knew that could be postponed, but we were pretty sure that Rogue64 game would be released long before Christmas 2021.

Henning made some stunning box artwork, and we had long discussions with Jamie at Bitmap Soft trying to sort out a cool package for the game. Jamie was the one with the good ideas based on what he knew about the game, and he put together a fantastic package, with stickers, a Rogue64 dungeon-room beer coaster, a sword, a sparkly jewel, and a lovely manual. We are really happy with the work that Bitmap Soft did with the high quality packaging!

Release and marketing


Rogue64 was published by Bitmap Soft on January 11th 2022:

The 15th of January we decided to release the digital version on Itch, since most of the people that had ordered the physical deluxe copy of the game had now started to receive their copies, and we wanted to ride the wave of PR coming from customers tweeting about receiving the game.

We thought we were taking a bit of a risk when we convinced Bitmap Soft that we would be able to sell 50 copies of Rogue64 Deluxe cartridge version. But after 4 days or pre-orders, we had already sold out, so Bitmap Soft ordered another 25 and put them up for pre-order, and they promptly sold out. Buy the time the physical copies started shipping, we were ready to sell up to 100 copies, but 4 days later when the digital release went live, the physical edition was already sold out again.

We were flabbergasted at the response to our game. We knew there was a market for roguelikes, but we did not anticipate those sales numbers at all. At the time of writing this post, we have sold over 250 digital copies, and almost 175 physical copies of Rogue64. Considering the size of the C64 retro community, then selling over 400 copies is a pretty cool achievement! We are very proud of what we have accomplished.

We did try to market the game in a semi-controlled way, by ramping up the amount of exposure of the game, and slowly showing off more and more features, ending up with a trailer two weeks before launch.

.

.

.

.

We also reached out to quite a few people when the game was about to launch, and sent off previews, so we could get some attention around the launch of the game. We were covered by indieretronews.com, retrogamernation.com, and many youtube channels. We even got coverage on Destructoid!

We tweeted and retweeted every mention of Rogue64 that we saw, and it was quite a lot! We started to feel like we had spammed too much in the end, but we also felt that the only way to get the word out is to actually get the word out, and we did want as many people as possible to have the opportunity to see our game.

Bugs and mistakes?

We were very concerned that we would release a game on cartridge that would be a bug-fest, so we spent a lot of time on testing. In the end we were able to squash almost all the bugs in the game. One silly little bug that was in the first cartridge version of the game was that when you first entered the inventory when playing, then the decoration on top of the left info panel would disappear. We don’t think anyone even noticed it!

Another more serious bug was noticed a few days after the digital release. We started getting reports that customers playing the game on NTSC hardware were getting weird glitches on the Game Over screen, and a garbled highscore on that screen. That is not good, but wasn’t game breaking. Alas, a few days after that we got reports of the game crashing on NTSC machines on game completion. You were able to defeat the end boss, but then the game crashed when entering the game completion screen. That was bad! It turned out that there were some timing issues triggered by a bad call, and we were able to fix it. The latest cartridges have the latest NTSC-bugfix version. But that still left a few cartridge buyers with NTSC hardware hanging, and it made us feel very bad.

Next time we make a C64 game, we promise to test it properly on NTSC hardware!

What is next?

The reception Rogue64 has received has been overwhelming! We did not foresee this game being so popular. Some of the praise we received has been so nice that we feel we owe it to the games fans to make a second iteration of the game at some point. But right now we have started porting Rogue64 to the Amiga. We are not sure what the name will be on that platform yet, but it will be something recognizable. Also the game will be based on the same formula, but with some graphic updates, and a few additions.

We have also been offered the opportunity to publish Rogue64 on a modern gaming console, so stay tuned for more information about that later this year!

All in all, making Rogue64 has been a delightful experience, and we are ready to make more games for the 40 year old Commodore 64!

Oh, we almost forgot. Mordecoom is an anagram, but of what? Commodore, of course! 😃

If you want to buy the deluxe cartridge version of Rogue64 from the lovely Bitmap Soft , please click here.

PS! If you have any comments or want to get in touch with Ricki for any reason , then message him on Twitter: @bag_of_hats

Leave a Reply

Your email address will not be published.