PMG w Action!

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…

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s