I first heard of the comp.sys.sinclair Crap Games Competition back in late 1997, late at night on mIRC, whilst at the University in Hull.

Inspired by the community's humour and enthusiasm - a nostalgic trip back to the days of late 80s Sinclair User for me - I wrote two games; "UDG Strip Snap! Deluxe" and "UDG Fighterz (Widescreen Edition)" in ZX Spectrum 48K BASIC using a Spectrum emulator for the Commodore Amiga 1200.

UDG Strip Snap! Deluxe UDG Fighterz (Widescreen Edition)

I made a single post on css asking if there'd be a 2008 competition and was told it was 'in the works.' I've not idea what happened after that because, mysteriously, they were never entered.

Two years later again and I recall chatting to Mr Goring from Retrospec (and that year's host) about entering the games, or updated versions of them, to the CSSCGC 2000. Once again, for whatever reason, I never got around to it.

Fast forward to February 2013 and I posted a retrospective look at the games on my website. Then, in May, I was contacted by Dave 'R Tape' Hughes about submitting them to the CSSCGC 2013.

I decided that it was time for me to finish what I'd started and finally submit a game to this competition! I quickly discovered BASin with its awesome IDE, Tape Creator and SCREEN$ Paintbox and realised that I could go the extra mile with proper loading screen$ - something I'd not done since Melbourne Draw on an actual Speccy, circa 1986!

Just 7 months later I was crowned supreme loser of the CSSCGC 2013 with my "unnecessary UDG Fighterz sequel" - Super UDG Fighterz Turbo II (SUFTII.) Finally it seemed that the original UDG Fighterz (Widescreen Edition) had come full circle and won its place in the hearts and minds of an unimpressed public.

The following is a sort of retrospective development diary which I hope serves people as an insight into the amount of effort that can go into producing such low quality software...

SCREEN$

Super UDG Fighterz Turbo II

Back in June 2013 I had decided on a target of 4 entries, including updated versions of the 1998 games, for the competition and began with sketching in ArtStudio on the iPad, fine-tuning in Paint Shop Pro 7 on the PC and then importing as a 2-color image to SCREEN$ Paintbox before finally re-applying attribute colours*. SUFTII was first and, after I'd created my first .TZX of the (gameless) loader, I knew I was on the right track!

* There's probably an easier way, but this worked for me.

I completed the screen$ (and initial loader programs) for "UDG Strip Snap! 15th Anniversary Edition," (USS15AE) "Cheerful Chicken (© R Tape)" (PPHMC) and "Burndown ZX: Takeout." (BDZXTO)

UDG Strip Snap! 15th Anniversary Edition Cheerful Chicken Burndown ZX: Takeout

USS15AE - Attempt #2 Online Poker Image

I wasn't happy with how USS15AE turned out - it was supposed to be a nod to the 1998 character select screen, but I didn't think it worked - so I went back to the iPad and created another based on an image I'd found on Google for an online Poker website.

User Defined Graphics (UDGs)

USS15AE - UDGs

For USS15AE this was a fairly simple affair as I knew I just wanted to add a third character to the game - a sexy 80s robot inspired by the works of Hajime Sorayama.)

PPHMC - UDGs

PPHMC's loading screen$ and in-game graphics would be about garish use of colour with intentionally little concern for attribute clash. The biggest challenge here was fitting the large-ish chicken graphics into the 21 available slots.

BDZXTO - UDGs

The concept behind BDZXTO was to marry the PS2 game's 'Road Rage' gameplay with Tomytronic's 3D Thundering Turbo - a "retro, on retro, on retro" peice of avant-garde thinking, I'm sure you'll agree.

All I needed was some road, some cars and some explosions. 18 UDGs got me the cars (based on those from Super Stock Car - although I had to lose the yellow Lotus,) PLOT and LINE got me the road and the explosions came courtesy of those chunky ZX Spectrum Graphics Symbols.

SUFTII - Characters PLOT

Finally SUFTII needed something a little special; I knew I wanted to break out of the boundaries of 21 UDGs and increase the number of 'playable' characters to 12 so I came up with a method PLOT-ting each pixel offset from an X,Y coordinate by reading from Data Statements.

SUFTII - UDGs

It turned out this method was painfully slow, however, I figured this added to the crapness factor and it freed up all 21 UDGs. The 'fighterz' in the original game were a single UDG high but I was able to double that now!

BEEP

The 1998 games had been pretty much silent, however, aside from a couple of tweets and farts using BEEP what else could I do? I thought about AY on the 128K, however, I have minimal musical ability at the best of times and I figured it would be a massive undertaking to explore this entirely new area of ZX development so BEEP would have to suffice.

PPHMC didn't take long having found the (ahem) sheet music online and the conversion chart in the Speccy manual.

BDZXTO, however, was a little more ambitious. I tried a number of midi versions of My Chemical Romance's "I'm not okay (I promise)" through Midibeep, however, they were all far too complex an arrangement with multiple instruments and cross fades etc. I attempted to remove unnecessary instruments and merge bars using Anvil (trying to get something that would convert,) however, in the end I resorted to using a Piano App on the iPad to work out each note and convert it to BEEP data statements manually - consequently I got about 2/3 through the song before giving up and making it loop in an eternal verse-chorus-verse-chorus pattern.

Realising this wasn't my forte SUFTII and USS15AE were furnished with a couple of rudimenary beeps and thuds and I left it at that (although I was considering a 'sexy' striptease tune for the latter at one point.)

Coding

Finally, with all the 'assets' (as modern developers would call them) in place, it was time to get down to the business of Programming.

PPHMC came pretty easily - it's basically a FOR loop, one kepress check, a rubbish random counter and a whole bunch of PRINT statements! It also used 2 separate arrays for X and Y because, at the time, I hadn't realised ZX BASIC numbering started from 1 (rather than 0) and was getting intermittent Out of Range errors because of it.

USS15AE was next out of the door** and should have been a relatively easy exercise in plagarising the 1998 code, however, it was a mess and I ended up doing a complete re-write. I think it benefits this and I've inadvertently managed to make it more responsive than the original.

I got the music, menu and main road drawing elements of BDZXTO underway, however, got frustrated with bug hunting due to the painfully slow framerate so moved onto SUFTII for a while.

SUFTII - Memory

SUFTII's development was definitely eased by the availability of the 1998 code, however, once again required reworking from the ground up. In addition, as the Plot Data Statements took up 29K of the 40K available to ZX BASIC, I found myself constantly battling with shortening variable names and removing REM statements to squeeze the rest of the game into 11K! In the end I had to create 2 independent .TZX files (one for the menu and instructions, and one for the game) which I simply pretended was 2 sides to an original C90 cassette. Even then 2 of the 12 characters, the Redefine Keys code and the opponent's ability to Jump-kick all had to be cut!

Finally back to BDZXTO and I mercifully discovered the 'emulation speed' option in ZX32 meaning it was bearable to debug. I optimised (I kid you not!) the draw code and went crazy with multidimensional arrays (which I'd since figured out) before finally adding laps and race positioning (which make no sense given your goal is to smash everyone to peices) plus an 'end of game' sequence which I bet no-one will ever see. All in all I can definitely say I enjoyed this one the least.

** It was deliberately held back from the competition, however, as the loading screen$ featured a hidden QR Code that led to a secret page on my website showing other hidden bits on the 2 games yet to be released.

Extra time

Finally, with a bit of time left after finishing the original 4 games I decided to go back and do one more building on the things I'd learnt. "Irate Avifauna (© R Tape)" (ANGRBRDS) was that game and, as well as a loading screen$ that I was particularly happy with, it made lots of use of chunky 'Graphics Symbols' which I think gave it its own charm within the set.

ANGRBRDS loading screen$ ANGRBRDS menu ANGRBRDS game

ANGRBRDS - UDGs

I managed to cram some pre-GCSE ballistic mathematics, 3 birds, 4 level types and a two-bar rendition of the main theme tune into my Spectrum 'conversion,' however, I did have to dispense with 396 of the original game's levels, scrolling and some of the more complex physics. ;)

Custom tools

I also wrote several bespoke pixel-processing scripts/programs during development to speed things up. These took (specifically crafted) .png/.bmp image(s) and read the colour of each pixel to produce appropriate Data Statements to be cut and paste into BASin.

NameDescription
ConvertZXThe 'data' (default) option exported 1 byte x 8 rows of classic UDG Data statements
ConvertZXThe 'plot' option exported a set of X,Y coordinates offset from 0,0 for each 'On' pixel - this was used for SUFTII
ConvertZXThe 'onezero' option exported litteral 0 = Off, 1 = On for every pixel from top-left to bottom-right (unused as this was even more Memory hungry than Plot!)
ConvertChunkyThis took 2 image inputs (one for INK and one for PAPER) to export pre-coloured Text Strings using ZX Graphics Symbols - created for ANGRBRDS which used them a lot!

(go to the top of the page)
2014 comp.sys.sinclair