Parallax Scrolling Demo

If you happen to know the  programmers who converted the stunning  Amiga
game UNREAL to the ST as a FLIP SCREEN game, would you kindly drag  them
to the monitor and superglue their  noses to the screen, then play  this
demo for the term  of their natural  lives... I was  a bit miffed  about
that conversion...

Run SWING.PRG from the same folder as all the other stuff. Use the mouse
and mouse buttons to control the sprites  in the demo. Press 1 and 2  to
load the two different sets of scenery. Press ESC to exit.

I want to know if this runs on a half-meg ST. If it doesn't, try copying
it all to the root directory of  a blank disk, then copy SWING.PRG  into
an AUTO folder and boot from the disk. Not letting GEM start up can save
a lot of memory.

The idea of this demo is that I'll add swirling patterns of baddies that
you have to  avoid, and  smash with the  glowing ball.  Try swinging  it
round you like a sling shot, using the left mouse button and a  circular
motion.

All of the scenery is pre-shifted, which takes a lot of memory. The data
that makes up one full screen is pre-shifted 4 times (foreground) and 16
times (background).  The  background  is  displayed  with  double-height
pixels to halve  the amount of  memory used for  pre-shifting. The  fact
that the  background is  two  screens wide  does  not matter.  Only  the
visible part is actually pre-shifted.

The sprite routine takes images from a .NEO screen, and is fully clipped
for the screen edges. Combined with the macros I've written, the  sprite
routine becomes fairly powerful.

This demo was a quick test to see if I could do this sort of  scrolling.
The only way I could  get it to go fast  enough (under 2 frames) was  to
write a piece of self-modifying code to display the lines of the screen.
The code  copies  one line  of  data onto  the  screen, drawn  from  two
separate  sources  for   foreground  and  background,   and  the   'sub'
instructions (that wrap  the data pointers  from the right  edge of  the
data back to the left) are  actually inserted into the sequence of  copy
commands just before they execute. Very tricky.

The foreground scenery appears in two bitplanes - colours 0,1,2,3 (using
3 as the transparent  index). The background is  drawn in the other  two
bitplanes. Colours 8,9,10  are the same  as 0,1,2 and  colour 11 is  the
first of the  background colours  (also used for  the horizon).  Colours
12,13,14 are also  the same  as 0,1,2 and  15 is  the second  background
colour (also used for the moon in the second set of scenery).

Have a look at the scenery .NEO files  in an art package to see how  the
colours are defined.

The background is copied into the last two bitplanes (colours 0,4,8,12),
but colour 4  is not  actually used.  0,8,12 give  colours 3,11,15  when
combined with the foreground transparent index of 3, so that 3,11,15 are
the background colours  you actually see.  When 0 is  combined with  the
foreground colours 0,1,2 you just get 0,1,2. 8 combined with 0,1,2 gives
8,9,10 which are defined  the same as 0,1,2,  so you don't actually  see
the background colour 8 unless it's behind foreground colour 3. The same
goes for background colour 12.  Behind 0,1,2 it becomes 12,13,14,  which
look the same as 0,1,2.

Rasters are then applied to colour 3, for the sky.

By not using colour 4 for  backgrounds, this means that colours  4,5,6,7
are not used for the scenery at all, and can be defined exclusively  for
sprites.

The files are: SWING.TXT - this text file

SWING.PRG - the demo program SWING.S - the source code, which  requires:
STARTUP2.I -  INCLUDE file  for the  source code,  system  intialisation
LOAD.I -  INCLUDE  file  for  the source  code,  a  file  loading  macro
FORCE_TB.I - INCLUDE file for the source code, a data table

FORCE_TB.BAS -  STOS  Basic  code to  generate  FORCE_TB.I  in  assembly
language

SWING_F1.NEO -  Foreground scenery,  level 1  SWING_B1.NEO -  Background
scenery, level 1

SWING_F2.NEO -  Foreground scenery,  level 2  SWING_B2.NEO -  Background
scenery, level 2

SWING_SP.NEO - Sprite data

Jason J Railton March 1997


Back To ICTARI 45