Xerra's Blog

Drunken coder ramblings

Rockman development posting —

I’ve posted the following write up about the development of Rockman on both Syntax Bomb and the ItchIO page for the game so I thought I’d also put it up here as well.

Rockman is my entry in the aMAZEing code a game competion

As a kid I loved playing the original Vic 20 game so this is my re-imagining of the game for modern computers.

The game features 20 caves each containing 8 gems and lots of nasty rocks that are going to give you more than a bump on the head if you let one fall on you. Rather than the conventional idea of clearing a cave to then be shoved into the next one, like Boulderdash, Rockman was novel in that it had it’s own mini-maze of caves in a map where each cave had exits leading to specific other caves. You would have to backtrack through areas you had already cleared to get to the new caves which meant you had to have a good memory for the layout of the area or draw your own map.

The original game never supplied you with this, so you had to stumble around back and forth until you eventually managed to clear them all. Fortunately I’m not so cruel and you can get a map in this version just by pausing the game. It won’t show you which caves you’ve cleared and which ones are still left, but you do get a rough idea of the layout on each map so you can work out where you are.

A few hopefully interesting bits of trivia about the development of this game:

I started working on Rockman around 3 days after the competition theme had been announced as I wanted to give myself time to really make sure that I knew what I was going to aim for rather than run blindly into something too ambitious like I did with the previous competition. Nobody wants to fail again and I was nowhere near finishing the last competitions game – and that had two extra weeks.

Among the games I was looking at for some inspiration were the following:
Nonterraqueous, Boulderdash, Gauntlet, Pacman, Doodlebug, Rhino and Radar Rat Race.

I’ve already written Boulderdash once with GMS2 – just never released it as it’s not quite finished, so that one was ruled out.

Rhino was a very early Basic game I played again on the Vic 20, which involved trying to reach an exit in a maze while avoiding the Rhino’s that were hunting you. The only snag was the Rhino’s were not visible to you until they had you in a line of sight. A very clever game for the time but I wasn’t sure it would make for a good game now.

Doodlebug was a Pacman clone I enjoyed as a kid but didn’t feel it would bring anything interesting to the maze theme.

I felt Nonterraqueous wouldn’t really work because, even though it was a good game at the time, complete with hundreds of screens, they were all very similar and shooting stuff while moving around them isn’t that engaging these days. Besides, who wants to type Nonterraqueous all the time afterwards when you’re writing about it?

Radar Rat Race almost got decided as a safer idea to match the maze theme and I would have gone with that if Rockman wasn’t considered suitable for entry when I asked at the start of the competition if there would be an issue doing it. Maybe one day I’ll have a crack at that one as well.

As I’d written a Boulderdash remake before, which is very close to the original, gameplay-wise, I thought at first that this would give me a good leg-up in doing Rockman because the idea of collecting diamonds in caves while avoiding rocks is the core dynamic for both. Rockman also doesn’t scroll the screen and relies on exits opening when the level is clear. In the end it actually worked out to be quite a bit more challenging as I had to work out how to do the map layout and the rocks worked differently as well.

I wanted to use the original map designs from the Vic 20 game in mine so the first challenge was working out a good all-round window size and then setting it up so the layouts would be the same with much more detailed graphics. In the end I went with 64*64 pixel for all the gameplay elements apart from the exit doors which are double height or width, depending on which part of the screen they are on. My idea of re-imagining a game does mean that I don’t want to clone it exactly but keep the elements that work really well, and the map layouts actually do because you have to be very careful and think about what you are going to do to move certain rocks, or you end up being forced to restart the level. That will cost you one of your lives for that.

One of the things I realised very early on when I had a basic character moving around clearing earth on the screen was that I wanted to try and improve on the original game and pixel move the character rather than just move in each direction as a character block jump. The Vic 20 never had sprites so, unless you were very clever with with rotational assembly instructions to roll the bits in a byte thus shifting pixels in a character to simulate pixel point movement, you just moved the character one space forward in the screen memory map – which was 8 pixels a block. As the Vic 20 had a very low screen resolution this was glaringly obvious that you did that but 99% of the other games did as well, so it was acceptable. With my Boulderdash remake I did the same thing to emulate the original game but I did it the hard way with this game and it actually changed how you played the game in a big way. Not to mention making it a nightmare to get the rocks movement right at the end of development. More on this later.

Now the original game was hard. Too hard, a lot of people, myself included, thought at the time. The reward on that, however, is it’s brilliant if you can actually nail it. I managed to complete the original game once, probably a couple of years after owning it, and the elation I got from actually doing that was amazing. And that, to me, was because it was so bloody hard. I wanted Rockman to be a tough game for people who wanted it that way but also have a way of playing for people who don’t like things so tough because modern games go that way now. So I gave this a serious amount of thought in development and, after tossing ideas like turning some features on and off, and going for a three skill levels system, I think I achieved that.

Rockman on level one does not have any static skulls on the screen, nor the moving butterflies (who are nasty as hell, even though I slowed them down to a crawl and dumbed down the AI). So what you end up with is basically a puzzle game where you shunt rocks around without distraction (unless you still kept the timer on) to get to all the gems and finish the game. That mode is how I mostly play it and will probably be the most popular. Level 2 has one Skull and one Butterfly to deal with and level 3 is two of each – for the really hardcore players. Another change almost forced upon me by going with the pixel movement was that you could no longer move through earth and support a rock directly above you because it breaks all the rules of common sense now. If I deleted the earth as I moved through it in pixels then it’s going to drop on me now whereas in the original game I’d deleted the earth and was already holding the rock in place with one movement. One of my two testers complained very negatively about me making that change but I resisted the urge to revert it back because it was both too late in the day and because I liked it. Especially when playing without the other gameplay elements as it’s still now a challenge.

Playing Rockman on level One is now a good experience, I think. Even if it does mean all the work I did on the other elements isn’t appreciated. One of the bad things about it, however, is that with no Skulls on screen then you don’t get no cake when the cave is actually cleared. Sacrifices, and all that.

Another thing I didn’t consider much back in the Vic 20 days about the original game was that there was no allowance for unfair map layouts. You could spawn in and literally have a bad guy right next to you on the map so you lost a life unfairly. Also you sometimes had levels where a skull could be positioned in such a crap position that it was impossible to actually finish that level, causing you to throw yet another life. That’s not fair and no game should ever be allowed to get away with that. I realised early on that I couldn’t get away with letting that happen as well but that coding around these situations would be nigh on impossible for me. So I remember another Rockman type game from around ten years ago had a feature where you were given a bit of time on entering a new level to quickly look at the map and decide if you wanted to play it that way or not. If you didn’t like it then you could press the restart key before the countdown finished and it would be redrawn. That seemed an acceptable solution to me so I did the same. Remember that this only changes the position of the Skulls and Butterflies, though, and you still have to contend with the rocks placement where they are.

I didn’t keep any logs of the hours I spent working on this game or blog about it, unlike my previous competition game, Envahi, where I kept detailed records. I was working with a six weeks deadline this time rather than the generous ten weeks I got to work on that one, so I kept focus. I probably worked around 80 hours or so doing this one. I probably worked a couple of hours every couple of nights and had three or four sessions where I spent a morning or afternoon on the weekends. My process was keeping a list of stuff that needed to be done, current bugs and stuff that I could implement if I had time. When it got near to the end of the competition deadline I had only one feature that I ended up not doing which was the cave editor. I was hoping to maybe have a seperate set of maps that the player could play with from a template build so they could put their own exits, gems and rocks down and lay them out in a map format like the built in ones. It’s a shame I couldn’t have kept that because it wouldn’t have been that hard to do.

Towards the end of the work on this game I kept a clear bug list and just considered every item that was on the stuff that needed to be done as a milestone and just whittled them down one by one. When I got to two days to deadline I was down to three milestones left and thought I was on easy street and could finish with a day to spare like Envahi. Then I would have time to set up a decent game page on ItchIO, update my website, blog some stuff, create a PC and Mac build, and still have plenty of time to post my entry on Syntax Bomb for the last day. As always this was not what ended up happening.

Anyone who’s ever written a game will tell you that the last 10% of any game may as well be the last 90% because that’s how much more you actually really have to put in. Something always breaks, other stuff needs to changed to work with the things you’re adding, bugs seem to come up that you’ve never seen before but should have logically been seen and fixed early on, and you always get too ambitious with that “oh, wait. Let me just add this…”

3:30pm on Sunday afternoon I’ve got the last of the graphics for my game and finally have both the playable characters in and working correctly. One of my testers reminds me that the rocks in my game still look like Oreo’s and they are still moving into each others spots and seem to be merging when there’s a few moving around. No problem, I think, because I’ve now just put in the new graphics for these rocks and I’m now down to the last bit of the game to fix, which was sorting out the object code for the rocks to stop this happening. I made a massive mistake in putting this part of the game off until the end because the original code was practically the first bit of work I did for the game and I knew it didn’t work right back then. I knew it was going to be tricky to get it working properly with the pixel movement of objects so I went off and did the rest of the game, meaning to come back to it when I was in a better frame of mind to get it done.

This almost cost me the deadline because I ended up having to recode the entire character movement for the player object and also the Butterflies so that collisions between them all would work better. It doesn’t sound much of a problem at first unless you know a bit about how gamemaker works because I wasn’t using the built in collision system but actual object searches because the whole playfield is built out of objects rather than tiles. So after frantic coding all evening trying to sort out the mess, I actually had the final Mac build not ready until about 11:20 pm. Then I had to copy all the code onto the slowest USB stick ever and fire up the old PC to create a Windows build – as per the competition rules. Of course GameMaker needed to update itself – which on Windows requires a reinstall, and not being able to find my login details because it hadn’t been used for ages.

Rockman finally got uploaded onto Itch and the forum competition post at 11:54pm – Six minutes before the deadline. I honestly thought I was going to miss it when things started going pear-shaped. I hope I never write another game that goes that close to a deadline again.

So, in retrospect, I think this is now the best game I’ve ever written. It’s probably not saying a lot but I am my worst critic so I’m secretly hoping people like it a lot more than what the realist in me is saying. However, I am hugely proud of it, because it was hard work. And I realised fairly early on that it was worth engaging a graphic artist to make it look worth it as well. It’s a competition and, as much as I’d like to win it, I’m not going to but that’s not a bad thing. The competition deadline is what I needed to actually get the game finished and at a level where I thought it was worth entering.

So now I’m looking forward to playing some of the other entries and maybe not coding anything for the next few days 🙂

I hope you all enjoy playing my game as much as I enjoyed creating it. Apart from those last two days. Oh, god, no. Apart from those…

Categorised as: Development | Game Studio 2 | Rockman

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.