Home Products Documents links News Events Tech Info

Sprite Plotting

From: RWilson@acorn.co.uk
Subject: Faster sprite plotting
Date: 6 Jun 91 10:37:05 GMT

How to display a sprite (a) mode independently and (b) quickly
--------------------------------------------------------------

The key to doing this is to observe that the pixmap compiler which
is driven by the put_sprite_scaled call (OS_SpriteOp 52) can do several
clever things:

a) omit colour remapping

b) omit x and/or y size remapping

c) omit itself entirely and call put_sprite (OS_SpriteOp 34) (only
   when a) and b) completely omitted)

BUT it can only do these things if given some helpful hints.

In order to provoke action a), you need to tell it that the pixel
translation table should not be used - this can be done in the 1-1
map situation by using code such as:

FORQ%=0TO255:pixtrans%?Q%=Q%:NEXT
SYS "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans%
spx%=-1:FORQ%=0TO255:IFpixtrans%?Q%<>Q% spx%=pixtrans%
NEXT

and then using spx% as the pixel translation table (r7) value for
op 52. When spx% is -1 the pixel translation step will be omitted
and this at least doubles the speed of the sprite plot.

Action b) comes from correctly specified scale factors: reduce them
to the lowest terms and its happy.

Then action c) happens "as if by magic" and your sprites are plotted
faster when the wind is behind them. And in any mode when it isn't.
Action c) can be sped up by calling op 34 yourself having recognised
that op 52 will be doing this - this avoids op 52 making several
read mode variable calls.

--Roger Wilson

poppy@poppyfields.net