40 Pico-8s In 2018: Cart #2

It’s Pico Of The Beast!

copper tricks

It’s a scrolling demo/port of the 1989 Amiga game Shadow Of The Beast. In particular, it’s a port of the famous 12-layer parallax scrolling from the game’s starting area.

My goal with this cart was just to replicate the scrolling, not to implement the game proper - this meant I could use the entire spritesheet for the background elements and not worry about the other stuff. It turns out there’s still free space in the sheet anyway so with a bit of optimizing you could probably fit the rest of the game in there, swapping in different spritesheets for the various locations.

The scrolling itself was fairly straightforward to implement, but I did use a couple of Pico-8 tricks for the title screen. The first is the aforementioned spritesheet swapping: the title screen is an entire spritesheet of its own, swapped in using TRASEVOL_DOG’s super excellent text string compression functions, seen on this BBS thread.

Pro tip: Remember to swap the other spritesheet back in before starting the game, or it will look like this.


The other trick I used was screen fading. Heaps of other Pico-8 coders have done this so it’s nothing new, but I wanted to have a crack at it myself. It’s nothing complicated (if a bit tedious to implement), you just remap the various colours of the Pico-8 palette to increasingly darker shades until everything is black.

If anyone’s interested, here are the colour mappings I used. ‘0’ is black, ‘7’ is white and the colours fade from left to right, i.e the first colour in each table is the colour’s ‘real’ index and the last is the colour completely faded, with the intermediary colours appearing in between.

function init_fadematrix()
 fademaps[0]={0,0,0,0,0,0 }
 fademaps[1]={1,0,0,0,0,0 }
 fademaps[2]={2,0,0,0,0,0 }
 fademaps[3]={3,5,0,0,0,0 }
 fademaps[4]={4,2,0,0,0,0 }
 fademaps[5]={5,1,0,0,0,0 }
 fademaps[6]={6,14,8,2,0,0 }
 fademaps[7]={7,6,13,5,1,0 }
 fademaps[8]={8,2,0,0,0,0 }
 fademaps[9]={9,8,2,0,0,0 }
 fademaps[10]={10,9,8,2,0,0 }
 fademaps[11]={11,3,5,0,0,0 }
 fademaps[12]={12,13,1,0,0,0 }
 fademaps[13]={13,1,0,3,0,0 }
 fademaps[14]={14,8,2,0,0,0 }
 fademaps[15]={15,9,8,2,0,0 }

I set the fading with this function - level is an integer between 0 (no fading) and 5 (completely faded out):

function set_fade(level)
 for i=0,15 do
  pal(i, fademaps[i][level])

I accidentally started the game without resetting the fading and created this cool late-evening version of the game.

cool beast

The Psygnosis games of the late 1980s were famous/notorious for being incredible graphic demos (usually to the detriment of everything else), and as such they’re good fodder for de-making. Someone’s already made a cool Pico-8 demo of trippy owl shooter Agony and I have at least one more Psygnosis game on my Pico-8 todo list, which hopefully will be a proper playable port. But I won’t get to that one until much later on.

In the meantime, on to cart number 3!