Gridrunner Devlopment

I’m well overdue now to talk about Gridrunner which was the only game I developed in 2023. It evolved from what turned out to be the last competition the website Syntax Bomb hosted and I developed it over 3 months, from October to early December. Syntax Bomb closed down quite a bit of time later but it seemed the impetus for hosting further game coding competitions had pretty much faded away by then. I won’t comment on my thoughts why the site closed down as it happened due to a private matter between the owner of the site and someone else, and it’s not my place to discuss it.

To date, I believe that Gridrunner is the best game I’ve written thus far and did very well in the competition as well, coming in 2nd place and earning me a little cash as well. As Syntax Bomb is now closed, I’ve not been able to go over the forum threads on the competition again to refresh my memory, so recollection on some of this is vague. I do have my old spreadsheet which I used to keep a list of all the games submitted each competition so I could power BI the data one day – after learning how to power BI in the first place, of course.

There were 8 games in the “Best of the 80’s” themed competition, and games had to be based on a classic from the 1980’s. Platform wasn’t important, it was just about the games. Going back to my roots I obviously went back to looking at the Vic 20 again, as well as my list of games I’ve always wanted to write, as these competitions always gave me the motivation to actually crank some of these out. Amongst the ones submitted by other people, we had Aaron’s Uridium X (which I thought should have been the winner, but that’s another story), 1986 (which turned out to be not much more than a half finished demo and probably shouldn’t have been submitted, as it was incomplete), International Kung Fu (the eventual winner, based on Internation Karate on the C64), Fort 64 (based on Fort Apocalypse – which is another game I had a half-arsed attempt at doing myself a couple of years previously), Gorton (A ghost & goblins style arcade game), Base VR37 and Alien Invaders. The last two I don’t remember much about, apart from Alien Invaders being particularly uninspiring.

We had the usual time limit for completion of entries and I recall having to get my game done a few days before deadline because I would be going away. I managed that – just – and even got my nephew and his friends to later do some hard testing on the game for me just before the deadline came up, so I could whack out some emergency adjustments if needed on my laptop. Fortunately, it came through relatively bug-free in the end, and I only ended up doing a couple of minor updates on the game after the competition ended, more for completion than anything else.

So, why Gridrunner? Well, obviously it had been one of my favourite games for the unexpanded Vic 20 along with Rockman. I’d also later on come across it’s sequel Matrix, which required a memory expansion cartridge, so I hadn’t had the chance to play that until near the end of my Vic owning timeframe. However, once I’d started considering Gridrunner, I had to think about the games I’d already done previously, as Gridrunner, at it’s core, has a lot of similarities with the classic arcade game Centipede, and I’d already done my own version of that with Creepy Crawlies back in 2017.

Of the ten games I’d written down that I felt I wanted to have a crack at, I’d already removed anything which I’d already covered, pretty much. Except Gridrunner, because I really wanted to do it. I whittled them down one by one and came down to Gridrunner and Radar Rat Race. Rat race is a great Vic 20 and C64 game released on cartridge that was Commodore’s way of making their own version of Rally X and not getting sued for copying it. Instead of cars, oil slicks and smoke traps you got mice, rats, magic dust and grumpy old cats. A fun scrolling maze game with a clever technical system used for the radar (for the time), and a game you kept wanting to play to see how far you could actually get. But I wanted to do Gridrunner, so I shelved that one again and got to work.

Now I’d decided to do Gridrunner, I took a couple of days to think it through on how I would make it work on a modern system. Part of it’s blistering challenge and tight controls were due to machine limitations on the Vic 20. The Vic has a 22 * 23 character size screen, with each character block being 8*8 pixels in size. 176 * 184 pixels making up the available playing area in total, and I needed one of the rows for the HUD.

Obviously I couldn’t just create a window that size and use the original 8 pixel block graphics because modern monitors are all hi-def, huge pixel size monsters. You’d end up playing it on a view the size of a matchbox in the middle of your monitor. But Gamemaker does have the answer to this, and that’s with camera’s and viewports. I could have switched out to using single pixel movement for all the moving elements to make it look super smooth, even with a display boosted to allow for a decent visibility of the game when playing – which is something the original Vic could never do unexpanded, due to how much memory and speed bit-shifting pixels in a hires character set would cost. I decided against that after doing a few prototype examples in Gamemaker, as it seemed to feel less frantic, even though I was moving the pixels fast enough to compensate for moving in 8 times smaller increments. So, in the end I went with the original methods that Jeff Minter would have had to use to create the game on the original 5k of memory he had available to him, which also had to include graphics data.

I switched out the character based movement for objects instead, though. I’m no masochist, and the thought of doing everything with just tiles and trying to account for split centipedes trying to decide if they are the head or the tail when they have no data within the tiles to reference. So, like i usually end up doing, I created all the elements with objects instead, so they could run their own code independently.

For the start of prototyping the pixel movement system, I initially referred back to Creepy Crawlies in case I could find anything I’d used there for creating the centipedes to make it a bit quicker here but it wasn’t really compatible, so started again from scratch as I was using character block movement anyway. Every centipede segment were all the same object and how I worked out which way they were going was set a direction flag in the first segment created off-screen, and then create multiples of the same object next to the first one with no custom instructions at all. All these segments used the same code but they also looked to their left and right to see if they had a segment either side of them so they would inherit the movement direction from the one next to them, but the one right at the front – depending on which way the centipede was moving – was the one doing all the checks for collisions with bombs and so on. When one of the segments got shot then it would look for the segments either side of it and send them instructions to now go down one row and them move the other way because it was now becoming a bomb. It worked surprisingly quickly which helped hugely in getting the centipedes up and running a lot less hassle than some of the other elements later on.

It was a no-brainer to implement elements of Matrix into this game as well, although I deliberately skipped bringing in the gates to shoot in different directions, as I never really liked it as a gameplay feature, and felt it brought nothing to the already hard gameplay. A lot of that was the presentation side, such as the animated grid sections, the pulsing lines introducing each level, the incredibly meaty sound effects for a Vic 20, and other elements such as the camels. I actually can’t remember off-hand if the original Gridrunner had the camels – which is embarrassing considering how many times I’ve played it, but they were definitely in Matrix, so in they went. Again, these were just one object duplicated multiple times according to the data structure for that particular level – more on that later. These just flittered back and forth like individual centipede segments, but would leave a trailing 106 behind when shot, which could hinder your movement for a few seconds until it eventually disappeared. You would also die if you collided with one, which didn’t help. I used the camels sparingly, as I recall, but kept level 4 as camels only just like the original game.

The X & Y zappers were next and these were fun to create. I think I worked out how Minter had them working in both Gridrunner and Matrix and got them moving but keeping a note of what column/row the player was on just before they moved off the screen and then setting the next ones to hit that row/column when they reached it. This has the effect of making sure the player can not stay in one place too long as they will get hit by one of these eventually. No camping in corners or just holding fire down and thinking you’ve found an I-win button. Not that the tactic would have worked in this game anyway, due to just how much other stuff is actually moving around as well.

The bombs were also a fun part to put in as they’re the equivalent of the mushrooms in centipede but they do a lot more. When one is created it becomes an egg that increases in size until it becomes the bomb. Once that happens, and if it’s not shot within a couple of seconds, then it’ll release and send a nasty bolt down the screen to kill the player, if he’s underneath it. As they evolve into bombs you can shoot them to whittle them back down to small eggs before they get destroyed but, if you don’t finish the job, then they will start evolving again. This is a part of the game that helps make it that little bit more tricky but was very easy to implement.

The last gameplay element I had to put in then was what I call “The Snitch”

This is the character that appears at the top of the gameplay area (another row lost because he uses it) after level 9 and basically grasses you up. He moves slowly along the horizontal row looking down the screen until he ends up in the same column where you are and then starts frantically waving and pointing at you. What happens then is the X zapper that is moving across the bottom row is updated with the column number you’re on now and is going to use that instead of the column number it had been created with.

As there’s so much going on in the game already it can be very easy to miss this guy until it’s too late and you’re smoked.

While the gameplay elements were in place quite early on, I only had a few bits of data in temp arrays, as well as temporary keyboard controls to launch various size centipedes for testing at this point. I was going for 20 levels and I was opting to not have any kind of easy/medium/hard setting so they would have to go from easy to nightmare gradually during progression. I ended up creating my own data structure for all the level data and put it into the code itself so that we didn’t need to load in anything externally, although on reflection I think it might have been better to have made a system that could work from text files so levels could be added much easier. Each level had a large number of settings that were configured, such as the size of the centipedes in segments, how fast they moved, what kind of pattern they came into the screen using (left side or right), number of camels, points for each element destroyed, egg evolution timer update and lots more I can’t even remember. I ended up having a huge amount of areas I could adjust to tweak the game harder or easier and got the 20 in place over the last couple of weeks of testing the game. I remember it was quite a hefty process doing what I hoped was balancing the levels accurately, and constantly changing settings for each one manually in the code for it, so I was often doing 1 or 2 at a time while I worked on the presentation side of the game. Next time I will use a better system for creating levels quicker, although I must admit that I did carry Gridrunners level system forward into my next game because that was also a shooter, so it made sense.

Another area that the Vic 20 version of Gridrunner excelled in was the meaty white-noise-enhanced sound effects compared to the wimpy C64 version. I loved putting the tv speaker up super-loud when playing the game on my old telly as a kid but what I also appreciated back then was that they likely wouldn’t be for everyone. When working on my remake I recorded as many of the original sounds that I could gather and did some editing to get them separated from a long audio file. Once implemented it really suited the game for me but I also put in an alternate sound set for those who wouldn’t be quite so impressed nowadays. I personally love how the audio was almost an assault on the senses back then but not everyone would appreciate that now.

Another huge part of both Gridrunner and Matrix is the presentation of the 2 games. Both have nice attract sequences. Gridrunner less so, due to having to fit in a basic Vic 20 but Matrix used a further 8k and had some nice title screen clever stuff, such as the pixel scrolling (something that most coders never did as it was quite tricky at the time) message, and smart introduction screen to prepare you for the game. Add to this the explosions effects in-game (which I did enhance a lot because why not?) and high score table, instruction screens and so on helped make the game look a bit more of a modern game. The level select system still worked the same way, whereas you could not start on any level unless you’d made it there in a previous game. The original game couldn’t record this so it was reset for every session but I didn’t need to stick to that.

After I released the game for both the competition and onto Itch.io, I did update it a couple of times for some minor things, but nothing major. I also ended up putting it onto the Opera browser as well as lots of my other games so it would have a bigger audience. It’s now been downloaded hundreds of times but I’ve never received that much feedback on it over the last couple of years since it’s been live, which was disappointing.

Still, another one of the many games I ticked off my list in the end. I still could have gone further with it but the usual delay of a competition deadline to stick to sadly put paid to that. As it turned out, that ended up being the last competition on the site so any more games I end up making won’t have any time restrictions on them unless I do them in a different kind of game jam.

About Xerra

Old school programmer with a serious love of Retro-games. Co-Director of Dexterity Design.
This entry was posted in Competition, Development, Gamemaker, Gridrunner. Bookmark the permalink.

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.