If you admired our anniversary edition’s Grand Theft Auto: Vice City cover and wondered how it was made, let the artist responsible, Craig Stevenson, explain the process in exacting detail.
When Edge approached me to produce one of its 20th anniversary covers, the original brief was simply ‘a ZX Spectrum loading screen for GTA: Vice City’. Loading screens have become a thing of past, but back in the 1980s – the era in which Vice City is famously set – they represented your first look into the game you were about to play.
I knew I’d never be able to do justice to both the original artwork and an Edge cover by cramming the GTA: Vice City artwork into just 256×192 pixels (the ZX Spectrum’s screen resolution), so I had to make a compromise: I would create a loading screen for each panel of GTA: Vice City’s iconic artwork, and then stitch them together to create one large image. This also allowed me to work a bit more detail into the image as well as making it easier to deal with the hardware’s graphical quirks.
My plan was to only loosely follow the Vice City artwork, putting most of the iconic characters against more abstract backgrounds in order to suit the ZX Spectrum’s capabilities. I settled on four characters and four vehicles (one of the vehicle panels, the Banshee car, was eventually dropped).
Although every ZX Spectrum artist tries to keep any colour clash to a minimum, I was keen to show off some to a degree, for a couple of reasons. First, I wanted the final image to be identifiable as being a created on a ZX Spectrum. Second, I like to use it as a purely stylistic choice. Think of it like pop art.
I’m not a masochist; I don’t create the artwork on a real ZX Spectrum. Instead, I mostly using a PC graphics package named SevenUp, which emulates the ZX Spectrum’s display. SevenUp isn’t fancy, but it is incredibly easy to use. It has no tools for creating shapes, only a basic fill function, which means that every part of an image is created free hand.
Before using SevenUp, though, I always create a pixel line drawing in Photoshop. This allows me to create layers so that I can move certain aspects of the image around in order to try and find a best fit within the ZX Spectrum attributes. Nothing is set in stone at this stage, though, and I usually make corrections as I work on the image within SevenUp.
For each panel/loading screen, I create a 256×192-pixel image, and then I create a new layer displaying the ZX Spectrum’s attribute grid (32×24) so that I can attempt to keep the image within these attributes without creating too many colour-clash issues.
Now you know how I work, let’s move on to the specifics of this project…
As with all the panels, I’ll resize the original artwork to my required size to get an idea how it will look at such a low resolution. This will be my reference layer. I choose to flip the image as I prefer bikini girl facing this way. I’ll then create a layer where I overlay the full ZX Spectrum screen attributes. I then create further layers where I then roughly free-hand draw/trace the image one pixel at a time. I remove the reference layer and then smooth out any lines that look a bit messy. This will leave me with a black-and-white pixel line-art version that I then import into SevenUp.
This shows the pixel line art with the screen attributes layer.
Once in SevenUp, I roughly colour the Paper (keeping the Ink black). This will also help me to see how the image will fit into the attributes as well as guiding how I will eventually colour the graphic. At this stage, I’m aiming for a background of sea and a sun-kissed sky of red, yellow and orange, created by using dithering with red and yellow. I’m still not quite happy with the placement of the girl within the attributes and this is where the puzzle/fun begins. Moving the image around, I decide that moving her three pixels to the right will keep colour clash to a minimum.
Due to the lack of colours available, we have to get creative. For skin colour, it has to be white or yellow. Since I’m going to make bikini girl’s skin colour yellow, that rules out the sun-kissed sky because she would simply blend into the background. I decide on magenta for her bikini and change the background to a more abstract sea/cloud arrangement using blue, cyan and white.
Now it’s onto the background. Where the wispy graphics pass behind bikini girl is completely dependent on where only two colours are required so that it doesn’t end up ‘blocky’ or hampered by lots of colour clash. I currently think her chin is too big, so I make some slight amendments there. I make the difficult colouring decision with her bikini-bottom tie; I can never completely eliminate colour clash. I give her a ’20’ tattoo to celebrate Edge’s 20th. Since I’m not a big fan of jaggy lines, I add a couple of pixels in between in order to create a crude anti-aliasing effect, though I don’t always do this. I like the effect it gives but it’s not to everyone’s taste.
I’m desperate to get Vice City’s palm trees as a background for one of the panels. It was used so extensively within the original promotional artwork that I felt I need to include it somewhere and I thought I’d use Lance’s panel to do this. I’ve positioned Lance so that his face is centred within attributes, leaving half an attribute on either side so that I can colour it in such a way that it will have a highlight.
In the original, Lance has a white suit. I’d still like to keep dithering details to a minimum and not go down the monochrome route; I’d like to include as much colour as I can get away with. I decide to colour his suit cyan but make the edges white, almost similar to the edge highlighting used in Mario Galaxy. I’m going to blend the white into the cyan as well as keeping most of the outline for definition. I use non-bright cyan on his suit to add a bit of depth. Now I have to decide how I’m going to colour Lance’s face. We don’t have brown, so I could use red as an alternative. In the end, I opt to simply add a bit more dithering to his face and leave the centre non-bright white, with the highlights at either side bright white.
Due to the possible issues colouring the palm trees, I’ve made a last-minute decision to go for a more abstract sky, trying to at least convey the feeling of Miami sunsets and the day-glo colours of the 1980s.
By this stage I’m getting into the artwork, and I start anti-aliasing at an early stage and have decided to do what I did with Lance’s suit and have Diaz’s shirt white at the edges, fading into another colour. Working in monochrome, I add all the details to his face.
His background will be a lot closer to the original Vice City artwork, although I have to decide where to set the horizon based on a best fit with either his head or body and the attributes.
I lower the horizon and finish off the clouds in the background.
Sonny’s suit doesn’t have a lot of detail – the main elements are around his face and hand. This is where most of the time is spent with this panel. I haven’t decided on a background at this point.
His suit is fairly simple to colour, though I show more of the attributes by using non-bright for shadows. I’ve reverted to using bright and non-bright yellow for his skin, using the non-bright for shadows and for his sunglasses. This will help to make his facial features stand out more.
The background is finished off using blue (rather than black) as the Paper around the suit sleeve.
This was the panel I was looking forward to working on most, but I also knew it would take the most work. For the previous panels, I spent time in Photoshop getting the pixel outline pretty much finished before carrying on the rest of the work in SevenUp. With this panel, I only made sure the speedboat itself was the only part where the outline was done to an almost complete state, and I only roughly sketched in the churning water and boat’s wake. This would be only panel where I would use the full dimensions of the screen – the others only took up a large part of it.
I finish off the vast majority of the dithering on the waves and get the mix of cyan and white looking how I want it.
I add detail to the wake directly behind the boat and add pixels to create the pilot’s details. Further detail added to the boat’s windows and front. I colour the pilot, settling on cyan for his suit to keep to a minimum the colour clash with the surrounding area, and making his face yellow to make him stand out a bit more.
I already know this is going to be difficult to colour. There are two areas that are going to prove tricky: where the tail joins the main body, and in and around the gun flares. For the gun flares, the idea is to have the black surrounding the gun holes hide any real clash between the blue of the helicopter and the red of the flare edge, and then dither the red around the flare edges into the yellow of the flare. I’ve done the outlines for the helicopter legs although I plan to fill them in, coloured white against the cyan of the sky.
Shifting the entire helicopter to the right a few pixels gives a best fit with the attributes. As with the original artwork, I was going to colour the helicopter tail blue, but want to keep the detail within it black rather than cyan (the colour of the sky) by following the two-colour Paper and Ink restriction. The only compromise is to dither the tail and most parts of the helicopter, using black Ink and the cyan sky Paper, going for a more monochrome style. I’ve ruled out using red in the gun flare, choosing to use just yellow. I increase the size of the holes delivering the gunfire so that I can cover up most of the colour clash that will unfortunately occur. I leave the helicopter legs as outlines because it fits better with the rest of the image.
I finish off the dithering on the helicopter, minimising any large amounts of colour clash but leaving enough to highlight the fact that the image was created on a ZX Spectrum.
Due to the square nature of the Spectrum’s attribute blocks, colouring this image was always going to be a problem because the motorbike is sitting at a 45-degree angle.
After moving the motorbike around for what seems like an age, I eventually settle on this position – hopefully it will provide minimal clash when it comes to colouring. I start to add colour to the areas that I know won’t change much and also to give me a rough idea how it will look and what may need to be fixed. I was hoping to keep the highlight on the front wheel dither-free and simply use non-bright to colour it at this stage. I would have much preferred more black in the headlight, but it proved impossible within the attributes where it is positioned.
Colour is added to the background around the motorbike. Since I’ve chosen to keep the motorbike colour bright red, as much as I’d like to promote the ‘Speccy-ness’ of the image, the bright blue attributes around the bike against the non-bright blue of the background jar too much. Doing this allows me to figure out how I’m going to colour the back end of the bike, the 45-degree angle providing me with a real headache. I change the background from non-bright blue to bright blue around the top half of the bike, leaving the non-bright blue around the buildings/bike at the bottom. I add dithering to the front wheel highlight after colouring the rider’s leg. Having no darker colour available, dithering is the best compromise. It also helps cover up the red clash at the top of the front wheel and the red mudguard.
I finish off the rider, amending the helmet to hide any white clash from the helmet visor. I wanted to try and get the highlight on the gun, but this has proved impossible without looking too messy, so it’s down to dithering again. I also begin to colour the bike’s back end. Deciding not to use the blue as the Paper colour, I’ve chosen simply to use black as I didn’t like the results using blue. Although we end up with showing the attributes more, it’s minimal, and it could be seen as part of the bike. I finish off the back of the bike and add dithering around the front of the fairing to make it less flat looking. Colouring part of the dithering white for a highlight so close to the black helps to add further depth. Since the building on the right will be pure black, I don’t want to use black for the buildings on the bottom left. Since there is no colour available between black and blue, it’s down to dithering again. To finish off, I centre the image and move it down the screen in order to give me more room at the top for the building on the right. I add the lights in the windows, initially by creating a row of lights as if every window is lit. After copying and pasting this row down the entire building, I then manually remove windows at random to ‘switch off’ certain lights. I make further variations to the windows using bright/non-bright white and yellow.
Now that I have all separate individual images, each as their own loading screen and capable of being loaded into a real ZX Spectrum, it’s time to piece them together into one image. I can no longer do this within SevenUp, so I have to export each as a standard bitmap and finish off in Photoshop. I have no clear idea yet how I’m going to lay out each panel other than putting the speedboat image in the centre row. Even though I’m no longer in SevenUp, where I’m bound to the ZX Spectrum’s display size, attributes and colours, I still want to make the final image follow these rules. This means that when I add the surrounding panel frames, I can only allow two colours per attribute. There’s no point going to the great lengths of creating each panel within the Spectrum’s boundaries only to throw it all out the window at the end.
After much juggling, I decide to put three panels at the top, showing the helicopter, Sonny and the motorbike. The centre will have the speedboat and bikini girl, with the bottom showing Diaz and Lance. I add the outlines of the frames, making sure that they don’t break any of the ZX Spectrum’s display rules. Due to the frame placement, I have to extend the bikini girl image at the bottom by a few pixels (extending her leg, bikini and hand), the speedboat, helicopter (extending the building at the bottom right) and Diaz (adding more sky and clouds) panels more to the right, and the Lance panel to the left. I anti-alias the frame to soften out the jaggies, which are more prominent on the more obtuse angled lines while maintaining the ZX Spectrum’s display rules. Finally, I remove eight pixels (a whole attribute) from the top and bottom of the image to give the entire piece a better proportion.
I hadn’t looked at the complete original GTA: Vice City artwork for a while by now, so I’m quite surprised at how close I’ve made it look, particularly with the top panels matching and Lance at the bottom right. Ultimately, I consider my ZX Spectrum version a fondly remixed interpretation of the original artwork.