The Making of Superior Software's Vertigo
(This text came too late for inclusion in Acorn - A World in Pixels Extended Edition - so we are sharing this as a blog post on this site so it is not lost. Enjoy and go play Vertigo here)
Released as part of Superior Software’s Play it Again Sam 16, Vertigo borrowed heavily from Atari/Midway Games’ Marble Madness. The idea was simple - you have to control a bouncy ball through a landscape of paths and valleys, your aim being to collect the diamond which can be found somewhere in each screen. What stood out in the game was the graphics, where the laws of gravity and inertia were faithfully reproduced on screen. The game was the work of friends James Wilder and Ian Grimstead. They were happy to tell us about their memories of how Vertigo came about at the tail end of the heyday of the BBC games industry.
How did you first get into games programming?
James Wilder (JW): My dad was a computer science teacher and used to bring the computer home in the holidays, I think it was the only one they had. I started in BASIC and Vertigo was the first major program I worked on in assembler. At some point we bought a BBC Model B for the home. That was when I really got into it. I started typing in the programs that were printed in games magazines at the time (this is way before cover disks) and trying to get them to work.
Ian Grimstead (IG): I was in school when the 8-bit buzz started – the Commodore 64, Sinclair Spectrum, Oric-1, Dragon 32, lots of variety. I liked the look of the BBC, and the hook was they were being used in school - no re-learning necessary. BBC BASIC was a good language to learn, it even had procedures and functions so you could go beyond GOTO and GOSUB! Also, a built-in machine code assembler, the rabbit-hole beckoned ...
What kind of programs did you start off with?
JW: Dozens and dozens of small, very bad BASIC games.
IG: I did have a game published in Computer and Video Games, “Robo-1” in November 1984, otherwise I tended to make half-finished games, I was rather a poor completer-finisher. I loved getting the nub of the idea working but would then get distracted - including compression routines to store maps for platform games, mini on-screen planets with gravity affecting spaceships, sprite editors, all sorts of ideas. I did write a platformer that had hyper-accurate collision detection. I was fed up with Manic Miner being so inaccurate; with my game, the protagonist could jump and snag a platform by his nose…
You co-wrote the Superior Software game Vertigo. How did that collaboration come about?
JW: I started it as a little demo in BASIC trying to get the ball to disappear behind the scenery. I met Ian when he moved to my school. We hit it off straight away. The only kids in the school who really wanted to learn 6502 assembly language.
IG: I changed schools when I was about 11 and met James - a kindred spirit with computers and he also had a BBC Model B. James had a demo of “Roll-a-ball” working, the frame rate wasn’t there but the physics were great, and he had a level designer. I started adding bits to speed up the rendering, and eventually kept adding to James’ core game so eventually it became more 50-50. I remember being impressed when he’d worked out the physics code for the ball - if it hit the edge of a step, the ball shot upwards. Back in the days of fixed-point arithmetic with no hardware acceleration for division or multiplication, that was no mean feat. My habit of getting a game half complete melded well - the game already existed, it was just refinement needed and I had eye candy and tools I’d created in the past we could reuse, like the window blind screen clears, sprite renderer, disc and tape protection. We also needed some music for the game, and I’d been tinkering with BBC music with a friend at my previous school (Rhys Hayward), so Rhys wrote the music, working within the limits of the system, and I coded it up.
What was the inspiration to Vertigo?
JW: Marble Madness. But it's a much simpler game. More like a puzzle.
IG: For me, it was Marble Madness / Spindizzy, but we didn’t have the scrolling tech.
What was your development process on the BBC and Electron?
JW: Ian used a debugger, which was way over my head. I was very low tech. I did develop a life-long ability to debug really well.
IG: We got it working on the BBC Master, then panicked to get it to fit on a BBC Model B, then tweaking the physics to cope with a lower frame rate on the Electron. The Master version was mode 1, 4 colour, vs Model B mode 4 in 2 colours; it really was a squeeze. Things like recycling the printer buffer for extra storage and various Easter eggs had to go! I have noticed that the YouTube videos out there mostly show the BBC Model B version, which is a shame as the BBC Master version looks much nicer - thanks to Lord Triax - kudos for making it through all 50 screens and triggering the end animation.
One big speedup was using the ADE (Assembler, Debugger, Editor) toolkit vs the in-built assembler. I ran it on an Opus Challenger - this was a 5.25” drive with a 512kB RAM disc all sat on the 1MHz bus rather than the floppy drive connector. So upload the code to the RAM disc, compile to object file and link, ye gods it was quick, well under one minute to re-build if I recall. It was great!
What was your path to getting it publishing?
IG: We sent the game to a few places, such as Gremlin Graphics, but Superior called us back. We were hoping for it to be released as a single title, but as time wore on, waiting for the schedule to line up, it became clear that the market was shrinking and wouldn’t get sufficient return on a single game, so we had to piggyback on a compilation. Ah well, we were published! If I recall, Richard Hanson left for the USA for another business, so Steve Hanson looked after us. No complaints there, felt like he looked after us.
You came quite late to the Acorn games industry; did you wish you could wind the clock back a bit?
IG: I wish I’d finished more of the games I’d built! We also stalled the release for over a year waiting for a full-price stand-alone release, so it was released a long time after it was finished. Back in the day when it was a hobby, there was no pressure to get anything out the door, but collaborating with someone, that gave me the impetus to finish. I should have done that earlier, but there wasn’t an internet back then, games programmers were a rare commodity...
The graphics on Vertigo were really distinct, in terms of the isometric landscapes, can you remember how you achieved this effect?
JW: Of all the things I remember, using 1:5/8 ratio for the isometric looked brilliant but made the maths more complex. The algorithm for the ball being obscured behind the scenery traced a path across the grid, checking heights at intersections, for each of the 8 columns in the sprite. That was complex but I worked it out in BASIC and just converted it to assembler. Ian did the sprites on the sides of the blocks which made it all look super cool.
IG: Initially the levels were plotted by OSWRCH triangle plotting if I recall, but we upped that to build sprites that were plotted, so we could have textures. The orientation was isometric, and James had developed the go-behind-routines that hid the ball behind the blocks. The ball was then masked and plotted as a software sprite. Self-modifying 6502 assembler code for speed!
The end-of-level skits were generated by accurately pre-rendering a large diamond in perspective as it span - I can’t draw for toffee, but I can make a machine draw...
How do you would reflect on the game now 30+ years later?
JW: I’m really proud to have been a part of the people in that time, creating the world of gaming. I still game nowadays and it's amazing how far we've come. Kids hacking code in bedrooms started the ball rolling, if you'll pardon the pun. As for the game itself. Well, it isn’t great! Considering other people's creations, for example Elite - that just pushed the boundaries by an incredible amount.
IG: What worked well was the physics - the ball had great “weight”, if you fell off - it felt like it was your mistake, not the game’s. That made it for me - hats off to James’ work there. It still feels nice today, good visual feedback loop. But compared to Revs or Elite, we weren’t anywhere near pushing the envelope.
JW: I wish we'd play tested more and had other people to test more too. But we were teenagers with very little idea what we were doing. Some levels were really tricky. It's hard to describe just how sick you can get of playtesting levels over and over! We had to figure stuff out ourselves. It was all pre internet and we just bounced ideas off each other.
IG: I kept play testing it to 100% prove that the end-of-level animations and end-of-game would trigger, so I think the difficulty was about right - it took a while to do, but with practice I could complete all 50 screens back-to-back - just! The game was different to Spin Dizzy - they had specific blocks to reuse, whereas we had any height we needed. Just wish we had multiple levels so you could go underneath ramps, but that would have been a lot of re-work. I think we should have had more compelling “bad guys” too - the electric ball was cute, but I think we needed more, it would have ramped up the difficulty with a new challenge. Maybe two players, that would have been fun! Mind you, I did like the 10th screens having the gem start moving and you had to chase it to collect it. That must have caught a few people the first time they saw it!
Thinking back, what made it work for me was the collaboration - when we worked as a pair, I definitely got an extra “buzz” vs coding solo. An early precursor to agile and pair programming… one has the keyboard, the other has the notes…
Any anecdotes to share around the game?
JW: Ian is by far the better programmer. My loops had labels with random strings of characters ("as324234"). Ian's were neatly labelled ("collision_det_loop"). I don't know how he put up with it! I did have a good brain for creating realistic looking physics engine behaviour though.
When I got a PC, I wrote a demo for a 3D asteroids game. It was great but early days on the PC, so I had to write the whole 3D and physics engine. It was great: texture mapping on the asteroids and if objects collided then their trajectory and spin changed realistically. I never finished it, but I showed it at a job interview, and it landed me my first programming job. They were amazed that I'd show them a game demo and wasn't scared that it would crash.
Ian had the persistence to keep going through the latter stages and dealing with getting published. I love solving tough programming challenges but I'm not good at finishing projects.
IG: We started to run out of assembly address tags to use in ADE (Assembler, Debugger, Editor), so the labels for BNE, JMP etc started to get rather crazy after a while. I also recall James was in to Talking Heads at the time, so we did use some of their song names for six-letter level codes. Making Flippy Floppy was one that I recall, otherwise there are echoes of Level 42 and The Hitchhiker’s Guide to the Galaxy…
There are various Easter eggs in certain versions of the game. The cassette protection was basic but made the block counter run backwards and had a scrolling message for the filename, and there was a demo animation of a “thing on a spring” if you entered a certain passcode...
Finally, what did you each move onto after Vertigo?
JW: I became a programmer (not games), burnt out, went travelling, did farm and forestry work, retrained as a blacksmith, went back to programming for a few years, burnt out again and finally went into eco-construction.
IG: I went to work in the games industry, Mortal Coil (by Crush!), the GameCube port of Conflict Desert Storm (by Pivotal Games) - but also lots of canned products and small companies that went bust. I also worked on graphics technologies for silicon design companies, but it was very volatile. I eventually went back to academia for a while researching remote rendering, haptics, display calibration and 3D displays. Getting funding was getting harder and harder, so I ended up returning to industry. These days its data science and machine learning. I am always learning, that’s what keeps the spark alive since all those years ago, my inner child still has the curiosity to want to know “yes, but how?”. I am always trying to recreate the buzz from all those years ago!