Najwyższy czas na coś nowego. Poniżej pierwszy przykład PMG w Action! na podstawie „Atari Graphics and Arcade Game Design”. Do zerowania pamięci użyłem funkcji zero(), a do kopiowania danych moveblock() z Runtime Action! Przy przesuwie pionowym duszka dane kopiujemy za pomocą wskaźników (tak btw, to lubię wskaźniki w Action!).
byte array p1data = [0 0 153 153 189 189 255 255 189 189 153 153 0 0] card spot byte pointer p1, p2 proc delay() int i for i=0 to 1000 do od return proc moveup() int i p1=spot p2=p1-1 for i=0 to 13 do p2^=p1^ p1==+1 p2==+1 od spot==-1 return proc movedown() int i p1=spot+13 p2=p1+1 for i=0 to 13 do p2^=p1^ p1==-1 p2==-1 od spot==+1 return proc main() byte pm=106, dmactl=559, gractl=53277, apmbase=54279, p1size=53256, p1hpos=53248, p1col=704, p1chpos, stick0 card pmbase graphics(1+16) pm==-8 pmbase=pm*256 dmactl=62 gractl=3 apmbase=pm p1hpos=50 p1chpos=50 p1size=1 p1col=88 spot=pmbase+1024+50 zero(pmbase+1024, 256) moveblock(spot, p1data, 14) do stick0=stick(0) if stick0=11 then p1chpos==-1 p1hpos=p1chpos elseif stick0=7 then p1chpos==+1 p1hpos=p1chpos elseif stick0=14 then moveup() elseif stick0=13 then movedown() fi delay() od return
Jako ciekawostkę polecam zakomentować delay(). Action jest chyba jednak dość szybkie…