Home Games Words Events Other

Block Party 2020

Pixel art tips

This self-indulgent review of my own teletext art (mostly) may contain some helpful tips, or at least reassure beginners that there is a lot of trial and error involved.

I use the zxnet editor, so will be referring to it in this guide. Others prefer edit.tf, which has less features, but most of the concepts can be applied to either version.


Warming up (editor).

The subject of my first picture was chosen because it looked simple to draw in teletext, and it was. My reference image is on the left. On the right is the same image in the editor, ready for tracing, with reduced opacity showing the optional character guide grid.

The left image shows the top row of characters, which is normally reserved for the page header, and the bottom row of characters, which is normally reserved for fastext links in broadcast teletext (the shortcuts accessed by the four coloured buttons on the remote.)

I have also enabled the “show control codes” option, so that the special characters which set the drawing colours are visible on the left hand side. There are at most two colours per row, so I only had to set the colours once per row.

By default, every line starts in text mode with a black background, so every line needs one control code character at the start to switch to graphics mode. These control codes also set the foreground colour, so if the other colour on the line is black, or the entire line is to be drawn in the foreground colour, then one code is enough.

Background colours are more complex, because you cannot set them directly. Instead, you must use the “new background” code to inherit the last foreground colour. By default, cells are filled with the background colour, so I have used this code on lines which are filled with a single colour to save a little work for myself (the red and magenta stripes, for example.)

The catch with setting the background colour is that you then usually need to change the foreground colour, so that's three control codes to pick the pair: firstly set the foreground to your desired background colour, secondly inherit the foreground colour as the background colour, and thirdly set the foreground colour (otherwise the two colours will be identical.)

Colour control codes aside, this was mostly about tracing the reference image. However, it does demonstrate the trick of distorting things to fit the resolution, most noticeably on the black text, which has stretched horizontally to give a visible gap around the apostrophe. The sun is also stretched a touch so that it can be drawn symmetrically, symmetry being essential for any low resolution circle to look convincingly circular.

So, if you're not sure where to start with your own teletext art, then I suggest picking a bold, simple, monochrome logo to trace. If that's too easy, then choose something with a few separated patches of colour.


Stepping up (editor).

This was partly a tribute to one of my favourite public information films. It's a subtle and effective film, certainly by the standards of the time, with only a mild moment of gratuitous reverberation to lighten the mood. It took a few attempts to find a suitable reference frame for adaptation, but at least the fidelity of the source rarely matters for teletext resolution.

The next step was to consider some basic composition, leaving room for a little speech in the fine tradition of unlikely and surreal celebrity endorsements. Composition is a general design skill, but the limitation of the teletext character grid is a fair framework for quickly testing different layouts to learn what works and what doesn't.

My tracing image was in a 4:3 aspect ratio, because I had assumed that teletext matched the Standard Definition television ratio. The actual ratio is approximately 7:6, the result of an 80 by 75 pixel resolution where every third pixel is slightly stretched vertically. However, the editor automatically adds a border where necessary, so don't worry too much if there's a mismatch - mine fell into place just fine on this occasion.

I began by tracing the focal point of the picture, and blocking out the line which would divide it from the text area. It only takes one keystroke to fill a whole character cell, so that is a fast way to build and revise a framework for finer details. Not that I could extract much detail from the misty, low-contrast source image, other than a few of the biggest branches.

The curve was refined by grouping pixel step ratios, such that it is in effect composed of a series of straight edges. For example, following the curve downwards from near the first paragraph, there is an edge with 2 by 1 pixel steps, then an edge with 1 by 1 pixel steps, and then near the second paragraph there is an edge with 1 by 2 pixel steps.

The other way to approximate a curve is to draw the closest pixel at each point, rather than average the errors with a straight line. Both approaches are an approximation, so choose whichever method is strongest for the effect that you want to achieve.

The control codes in this drawing are confined to foreground and text colours only, with the default black background being used throughout the whole picture. The foreground colour is set once at the start of each row, then additional codes follow the curve for the speech text (in green.) Using white rather than cyan for the water was a compromise between realism and contrast, with realism being less critical for an ethereal subject.

One trick for creating contrast between overlapping monochrome objects is to add a thin edge to the sides of the foreground object. Where the foreground object is significantly larger, such as the branch compared to the figure, then a break on one side only is usually sufficient cue for the mind to trace the others from the protrusions. You can also add some directional lighting by breaking the same side at each such overlap through the drawing.

When drawing monochrome lines, the thinnest possible is composed of pixels which only touch at their corners. If you want a slightly thicker line, then ensure that the pixels also touch at their edges. You can see the difference on the small upper branches, which were deliberately made thinner, but stopped short of the mysterious figure to retain contrast.

I was also refining the curve, which needed to be an interesting separation without drawing too much attention to itself, and refining the speech, aiming for clarity in words as much as pixels.

I then experimented with adding texture to suggest mucky water, and experimented with the reflection of the hooded figure. On the far right branch, you can see the difficulties of adding a contrasting border where thin lines intersect at oblique angles. I was similarly thinning branches on the left so that the new water texture could show through.

The final version semi-randomly broke up the water pattern, which added an organic feel, and also improved the rightmost branch intersection. The reflection, or possibly shadow, - such ambiguity being appropriate for a mysterious hooded figure - was more distinct when drawn vertically, if not quite true to the reference image.

With one final dry tweak to the text, this nostalgic fusion of the corporate and supernatural was done. Though I should have spent more time on the bottom left, perhaps pruning a few more branches to make the water texture clearer.


Messing up (editor).

If we learn from our mistakes, then this was a great learning experience. There was a minor false start, after which I tweaked the reference image to allow enough room for colour control codes at the start of each row and around the hand-written logo.

I chose this album cover not for the music, but the bonus track, which was part of a minor early 1980s trend for home computer games on albums. You see, those few minutes of screeching noises could be fed into a ZX Spectrum, resulting in a Head On clone, with some minor differences and an appropriately shaky premise. Perhaps it was originally made for Ozzy Osbourne, hence the bats and unfitness to drive.

(It turns out that Ozzy Osbourne does now have his own retro-styled game, and, um, it's no Brütal Legend. No loot boxes, though, which is nice.)

Olympic Software did a fair job of capturing Shaky's likeness and handwriting within the 64x48 pixel confines of the ZX Spectrum's character graphics set. Their resources or enthusiasm had run out by the speech bubble, though, which is a      shame

Setting off on the wrong foot, I began with the album title which, due to the fixed-width character set, now interfered with Shaky's hair. The best match to the original background was white, but having already used that for the text, cyan was the nearest alternative.

Yellow seemed like the closest skin tone at the time, which seems a bit insensitive now. Having averaged a sample area from the reference picture, I can now confirm that the correct answer is #ba7c5e, which quantises to red. I apologise for my green channel bias, though wish the rest of my drawing had been 97% accurate.

Cyan might have been technically correct for the background, but I switched to blue for better contrast, then began tracing the outline of the face. Let my attempt at capturing the handwriting be a warning to plan enough room for all of your drawing elements.

You can tell that I don't usually draw faces, or hands, but please be reassured/scared that they used to be much worse than this. The melted left cheek is merely the result of adding the final patch of blue background - the colour change code had to go somewhere, though it probably wasn't worth the trade-off.

The first attempt at the facial details were a bit too light, and the second rather too heavy, though at least the jacket folds came out nicely. I'm also pleased to have emphasised the final “s” in Stevens while balancing the lopsided haircut, but the pole shading doesn't work.

You could probably tell that this picture was supposed to be the album cover, if the two were side by side, but overall, put this one down to experience.

To compensate for my earlier transgression, I now present badly-drawn Shakin' Stevens in all eight teletext colours: event horizon black, sunburn red, green door green, jaundice yellow, blue raspberry, artist's bane, no strong connotations, and washing powder white. Please, no favourites, unless you are Shakin' Stevens.


Fixing up (editor).

Solatorobo: Red the Hunter is the kind of game that doesn't get made anymore, but please correct me if I'm wrong. I bought my copy long ago, when reviewers spread joy rather than accounted for taste, and it was worth waiting another eight years to play it.

Based on what it goes for now, this sold about seven copies in Europe. It would have sold another seven if the local cover art had suggested more fun, and less sullen resentment of parents who still insisted on buying the protagonist's clothes at Discount Dandies.

There's a debt to Castle in the Sky, and probably more Miyazaki that I haven't watched so far, though there is far more room to explore personalities in games than films, and this game does so without feeling drawn-out.

The depiction of characters is brash, often insensitively so at a glance. However, once the classically camp client's indolent employee returns their appreciation for the motivational beating which you had almost forgotten administering, and the mild-mannered bit part from the tyrannical child detective quest - who is a devotee of the pop idol who you were hired to protect from a suspected stalker who was somebody else and they were merely socially awkward, mostly - returns to join the invigorating rumble, it's clear that the only occasional victim of mean-spirited laughs is the player's character.

The first catch is that, once the story gets going, and I mean really gets going, it no longer makes sense to be scooping up all the lovely side-quests. The second is that, if you take the deeper theme of personal growth to heart, then it might be another eight years until it feels right to attempt to repeat that experience.

The third catch is that the developer earns nothing from ridiculous used prices, but don't even think about turning to unauthorised sources. Not even purchasing their forthcoming Fuga: Melodies of Steel sight unseen could undo the damage to the games industry, or something.

Anyway, back to the teletext pictures in a moment, but I think that this game wouldn't have been half as good beyond the 256x192x2 pixel confines of the Nintendo DS. It's a brutal filter through which to squeeze thirteen-ish years of plans for any sequel...

(Continues with several thousand words about the prequel, partly in French.)

...but certainly one which cuts all the flab. The character portraits from this - contains spoilers - handy resource cram expression into marginally more pixels than teletext. Admittedly, with considerable assistance from a far wider colour palette, though please note that lovely crisp black outline which makes it pop when composited.

Other parts of the source image were bold and crisp enough to go straight to the detail, the easiest win being the shadowy hat flap on the right, with the mouth and bone close behind.

The three rows by the yellow area mark my first attempt to make full use of hold mosaics, also known as hold graphics, or held graphics, or some combination thereof. Adding this hold code to a row causes that cell, and all subsequent control cells on the row, to appear as a copy of the previous pixel pattern, rather than a solid block of the background colour.

For example, this enables the collar to have a single-pixel wide black border on the left. Less helpfully, it also causes the lower right edge of the bone to repeat in the cell on the right edge of the collar. The two solutions are to have a “clean” foreground coloured cell before all colour change codes, or to toggle hold graphics on and off within the row. The trade-off is detail, because every cell with a control code is one less cell to draw pixels in.

I was struggling with hold graphics, so returned to monochrome tracing, which comes relatively easily with practice. It's partly about refining your judgement of which are the most important lines to capture, because there's rarely room to show them all clearly, and partly about getting a feel for how to capture curves and rough edges at the micro level.

It seems most of the way there now, because the character is recognisable. However, I saw that I had boxed myself into a corner, even though I didn't understand why at the time. The pixel resolution of the source material was similar, but even though it had some bold edges, much of the detail was being expressed through its far higher colour resolution.

The original mugshot is a skilled drawing because it looked simple, until I was forced to look closely. Crudely approximating the fine detail in the eyes had tipped the expression from boisterous to manic, and when I tried to fill in the top and bottom borders, it became clear that I didn't even have a good grip on the bold costume design.

If this had been Shakin' Stevens, then I probably would have touched up the messiest details, squashed a few colour codes in, and left it at that. You can make teletext for fun, but if you've read this far, then you probably want to push yourself. When you're ready, choose a subject which inspires you enough to care when it turns out wrong.

I started again, shifting the reference drawing down the frame, because ears and goggles seemed far more expressive than a thin slice of neck and chest. The game focuses on the head for conversations, forgoing the 3D character model - with its countable polygons and sub-teletext resolution textures - that is half-obscured by a robot most of the time.

Detail first had failed, so I tried blocking out the colours instead. The switch paid off, much as it had done when I was struggling to draw an image within the similarly chunky colour limitations of the ZX Spectrum. The result was less impressive without the tracing image showing through to provide some detail, so I'll turn that off now.

I have enabled control code visibility on the left image. The first cell in each row contains a foreground colour code, then the next cell enables hold graphics, so the rest of the row is blocked out simply by filling entire cells, then changing the foreground colour again when necessary. It's a fast, messy, and effective way to visualise the image as a whole.

The mouth was easy, being black on white, though the bone was a little trickier where it touched the red collar. I decided on a black background, because using the default colour simplified the rest of the control codes. The trade-off was inverse-colour edges on the right hand side silhouettes, but the mind seems happy to interpret these as edges, rather than the wrong colours.

I have no formal artistic training, aside from one introductory module, where I suspect the teachers only awarded the lowest possible pass mark because they never wanted to see me again for the retake. However, some lessons of this book are sinking in, such as how to make an image interesting with variations. It's rather academic at the tracing stage, but helps to know that straight and ragged edges on the muzzle are complimentary, probably.

Observant readers may spot that I broke my rule about forming curves from straight lines within the red area on the left flap. There wasn't room to smooth the right curve without encroaching on the colour change control code spaces to the right, and fixing the left curve alone looked even worse. However, the impact was reduced by repeating the sequences of irregular steps where possible, building some overall pattern from the localised jitter.

If you're looking very closely, then the extra vertical pixel at the bottom of each diagonal is there to suggest the curve moving inwards, thick insulation bulging the edges of the red covering. Ten bonus points if you spot that the reference image shows the red patch inside the white lining, or the lining is possibly stitched around the patch, so in either case, the curve goes in the wrong direction. Fifty bonus points if you spot the two single-pixel hold graphics artefacts spilling over the bottom edge of the bone.

The nose was another mostly monochrome gift, only requiring a little exaggeration on the highlight spot, to compensate for the loss of grey shading on the upper edge. The top left patch of ear, goggle strap, and hair was almost as straightforward. However, blue eyes were out, per the memo to myself.

The edge to the right of the left pupil resulted from a happy accident, where low contrast between white and yellow masked the unwanted overspill from a hold graphics collision. This required some tidying, tweaking one or two pixels each time until it look right, but the eye was small and important enough to justify the trial-and-error approach.

I now appreciate that anime eyebrows impossibly overlap hair for expressive purposes. Adding the first eyebrow in a thick line felt like the missing piece in capturing the left eye. However, it was actually the other, simpler eye that was right first time. It would become the basis for making the other eye look less like it was wearing a monocle.

One trick of the right eye is that I disabled hold graphics in the white, so that the black pupil-iris could hide a yellow colour change code, which then allowed me to define the edge of the eye recess within the next cell. I added a black pixel on the row above to curve the pupil-iris, while keeping the bottom flat to suggest the lower edge of the recess.

I find drawing big hair easy in teletext, because big means smooth, and it can be brushed around to conceal or reveal the finer elements of the face. The ears and goggles were still experimental, though my trick for overlapping forms was back in action, background lines stopping one pixel short of the foreground objects to define their edges.

I have repeated one of the previous images to better demonstrate the dramatic change to the left eye, which was made using similar techniques to the right eye. The change was made partly to better separate the eye from the muzzle, and partly to separate the upper and lower muzzle tones, in turn compensating for my decision to exclude the reference drawing's subtle curved shadow on the left of the muzzle. As it happened, this also made some space to better distinguish the scar from the hair.

I decided that the left goggle would overlap the hair. Half-tamed hair seemed right for the character, and introduced more variation, while half of the goggles would still read clearly enough for the brain to understand what they were meant to be as a whole.

I then realised that I needed a reference drawing to complete the upper part of the head, so I found one from same source as before. I made a brief pencil sketch to determine the most important lines and shapes before returning to the teletext editor.

It was much easier to capture the goggles on paper than in teletext. The right goggle of the pair is at most seventeen pixels wide, which is not many at all for showing four faces of the frame plus the lens and highlights. There really wasn't enough space to also suggest form by wrapping the goggles around a curve, but that didn't stop me trying.

Once I felt that the goggles had taken shape I began distinguishing them from the hair, with colour. This required finding gaps for control codes, and making some more gaps while developing the hat and ear. Once that was done, I realised that the goggles were better drawn square.

Crossing colours is awkward. Fortunately, background black provided better contrast on the goggle strap, with the bonus of creating more space in which to hide control codes.

The hatch pattern in the left lens was a less obvious place to hide the control code for the cyan highlight, which in turn conceals the code that switches back to foreground red.

I only noticed that the right hand goggle was narrower that the left when trying to add a matching highlight, in the process discovering that the hatch patterns started at different points within a cell. Having matched the sizes, I experimented with colour codes inside the black strap until the pair of goggles stood out most effectively from the hat.

When trying to create a sense of depth, I often find it helpful to correspond the colours to brightness. With the main consideration that, typically, eyes are most sensitive to green and least sensitive to blue, my darkest-to-brightest sequence goes:

Black, blue, red, magenta, green, cyan, yellow, white.

However, it's easy to change colour control codes once you've done the hard work of finding space for them. Break the rules to discover what works best for your drawings.

I could now see the strap was too loose for the head. After tightening the strap, and with the rest of the head already well defined, it was easy to see the correct form for the ear. The L-shaped pattern at the edge of the ear was another happy accident, providing a relatively straight line that contrastingly reinforced the nearby curves and fuzzy edges.

Incidentally, I only recently discovered that Bob Ross was equally fond of happy accidents, big hair, and television shows free from incessant music for the hard of thinking.

Having checked the original reference drawing, I realised that my version of the left eye had lost its exaggerated quality. Again, the low contrast between yellow and white masked the overspill, some of which was necessary to create space for more colour control codes.

The mouth had also lost a touch of the cartoonish quality, so was gently expanded.

The left eye was pushed a little more, and slightly curved on the left edge. After the best part of two working days, including fitful dreams about hold graphics, I was finally boxed into a corner, where I could see no room for further improvement in detail or colour.


Speeding up (editor).

Steve Horsley is the teletext master, having drawn thousands of pictures in his career, then a few thousand more as his hobby. He also draws non-blocky things, such as book covers, and is a pleasure to work with, says the author, who made me buy a copy.

Anyway, Steve. He thought that my Solatorobo picture looked interesting, watched the game's introductory animation, then drew what follows. Live, from memory, whilst talking about his drawing techniques and favourite cult horror films.

I was flattered, humbled, and have almost come to terms with the fact that he could have drawn the whole cast in the time that it took me to do one character.

Steve was working from only one viewing of the intro animation, but I've picked the closest actual mugshot to show how much of the character he captured. You can watch the whole thing as it happened, or see below for how it developed from when we first joined him, with each snapshot taken at one-minute intervals:

Blocking out first, then into the details (1:01 to 1:08).

Adding more details, then the first touch of colour (1:09 to 1:16).

More colour codes, then detailing the mouth (1:17 to 1:24).

Swapping detail for colour around the eyes (1:25 to 1:32).

Adding highlights and adjusting some details (1:33 to 1:40).

Extending the mouth, and done (1:41 to 1:43).

So, have fun making your own teletext pictures, and if it all seems too much work, then now you know who to get in touch with to make them for you.


Email: comments at arbitraryfiles.com

Uploaded 01-07-2020