Discover more from Dancing Monkeys
Tips I Want to Give to the Kid Who Ported Jet Set Willy
If you’d like to support my writing, please subscribe, like, comment, share, you know the drill.
Jet Set Willy for the ZX Spectrum was the highest profile game in the United Kingdom in the summer of 1984. The follow-up to the level-based smash hit, Manic Miner by Matthew Smith, Jet Set Willy introduced free-roaming between “rooms” and there were three times as many of them. Like most kids in the country who had a Spectrum, I’d been playing the game incessantly. I’d leave my Spectrum on overnight so I wouldn’t have to load the game from tape again the next morning. Unlike other kids, I was given the opportunity to port Software Projects’ crown jewels to the Commodore 64, the other successful home computer of the time.
36 years later, I am porting another game. I have been given four months to do it, and I’m now half way through the last month. Although I am a far better programmer than the big-mouthed tyro I was back in 1984, having only been making games for two years back then, there is of course the pressure to ensure I do a good job. Unlike in 1984 when I did my first port of somebody else’s work, I am not crunching, I am not stressed and so far, there has been no problem I’ve felt was beyond my ability to solve. I also have a secret weapon, which I’ll come to in a later post.
What’s changed? What has got easier and what has got harder? What have I learned in 36 years that make this far more complex project far easier to handle?
The Dunning-Kruger Effect
The Dunning-Kruger effect is essentially, the confidence that comes with ignorance. If you want a more colourful explanation, I cover it in a talk I gave to developers in Guildford a few years ago. It's not one of my better talks, but I do cover a lot of ground and use a lot of bad language, so if that's your bag, it's right here.
When I seized the chance to work on Jet Set Willy, I was still a beginner, but I thought I could do anything. I pulled it off, but not as well as I might have done had I had more time, and more talent. The story is covered in many podcasts, but essentially, I was OK at writing code, but not as good as mapping Z80 to 6502 as I would have liked to have been, and didn't know that I was not that good. (Not being good is fine if you have the self-awareness to do something about it.)
I didn't know about moving from a bitmapped graphics architecture backed by a 3.5MHz flexible Z80 CPU to a character-mapped architecture with sprites backed up by a spartan 1MHz 6502. Oh sure, I knew what these things were, but I didn't think about the ramifications of the switch. Overconfidence led me to wave away such issues with a "Let's just get this done" attitude. A poor approach to a game port, but a disastrous approach to say, governing a nation.
On the project I'm porting now, I know what my limits are, and I have taken steps to cover my weaknesses and have a lot less hubris than the kid who ported Jet Set Willy.
So if you're starting off, the first thing you should know is that it will take time, experience and a growth mindset to get to where you want to be, and that's perfectly normal, and you shouldn’t think it means anything other than you are on the path you chose.
Dunning-Kruger also means you end up crunching. I prefer to call this scenario thrashing, because you're trying to page in memory that doesn't exist, or that you thought you had memorised, but were not knowledgeable enough to absorb and retain. You can call it crunching if you like.
Crunching is bad for your mental and physical health. It puts you under severe stress. The longest lived and healthiest athletes, particularly strength athletes, save their all-out efforts for when it matters. Bodybuilders like Ronnie Coleman did the equivalent of crunch for years and have, sadly, destroyed their bodies. At least Coleman got out alive. Others were not so lucky. Their mantra of “one more rep” is fine when saved for occasional competition, but it is the equivalent of our ancestors being on the run from predators all day, every day. Not only is it unsustainable, but what kind of (short) life will you have if you spend it this way, not to mention the scars you’ll bear?
Is there an alternative? Sure. Take the example of Clarence Bass and I’ll wait until after you’ve put a plaster on your chin after your jaw hits the floor after seeing the pictures of him at 60, then 75, then 82.
Cycle your effort. Quit when further production will cause injury to your code. You will get better results. I've tried both, extensively, and know what works, and what is sustainable.
Life can easily become a series of overlapping cycles of Dunning-Kruger until you die, bewildered. Or you can become experienced, which means you know that there’s a lot you don’t know whenever you start something new. Your confidence is low, but at least it’s for a good reason. It will mean that you end up not doing a lot of things, and the possibility of regret. Great regret. Or you can be wise. That’s when you know something’s going to be really hard, but you have somehow managed to maintain the enthusiasm of a beginner. It took me almost five decades to get to that point, and I’m hoping you can comfortably trump that figure.