home *** CD-ROM | disk | FTP | other *** search
/ Falcon 030 Power 2 / F030_POWER2.iso / ST_STE / MAGS / MAGGIE22.ARJ / magg22st.msa / GOODIES / ST_INTRO.ZIP / M21.ST / DATA / TUNNELGF.GFA (.txt) < prev    next >
GFA-BASIC Atari  |  1996-09-11  |  3KB  |  117 lines

  1. ' Interference Generator
  2. '   for m21 st tunnel
  3. '
  4. '
  5. '
  6. RESERVE 500000
  7. INPUT "Random factor, like a tractor:";ra%
  8. RANDOMIZE ra%
  9. maxint%=2
  10. x1%=0
  11. y1%=0
  12. x2%=64
  13. y2%=64
  14. div%=8
  15. xs%=x2%-x1%
  16. ys%=y2%-y1%
  17. xsize%=xs%/div%
  18. ysize%=ys%/div%
  19. PRINT xsize%,ysize%
  20. DIM p%(xsize%+1,ysize%+1)
  21. nine%=MALLOC(320*240+2048)
  22. gfx%=MALLOC(8*64)
  23. old%=XBIOS(2)
  24. ' --------------------------------------
  25. phys%=nine%+256*4
  26. HIDEM
  27. ' --------------------------------------
  28. VOID XBIOS(5,L:phys%,L:phys%,0)
  29. GOSUB set_points
  30. GOSUB set_colors
  31. GOSUB interference(0,0,31,31)
  32. GOSUB convert_to_gfx
  33. REPEAT
  34. UNTIL MOUSEK
  35. BSAVE "d:\source2\m21.st\data\tunnel4.gfx",gfx%,16*64
  36. ' --------------------------------------
  37. VOID XBIOS(5,L:old%,L:old%,1)
  38. VOID MFREE(nine%)
  39. VOID MFREE(gfx%)
  40. END
  41. '
  42. > PROCEDURE set_points
  43.   FOR x%=0 TO xsize%-1
  44.     FOR y%=0 TO ysize%-1
  45.       p%(x%,y%)=RND*360*1
  46.     NEXT y%
  47.     p%(x%,ysize%)=p%(x%,0)
  48.   NEXT x%
  49.   FOR y%=0 TO ysize%-1
  50.     p%(xsize%,y%)=p%(0,y%)
  51.   NEXT y%
  52. RETURN
  53. '
  54. > PROCEDURE interference(mx1%,my1%,mx2%,my2%)
  55.   FOR y%=my1% TO my2%
  56.     FOR x%=mx1% TO mx2%
  57.       sx#=x%
  58.       sy#=y%
  59.       FOR i%=maxint% TO 1 STEP -1
  60.         c#=FN height(sx#,sy#)
  61.         ADD sx#,i%*5*SINQ(c#)
  62.         ADD sy#,i%*5*COSQ(c#)
  63.       NEXT i%
  64.       PSET x%,y%,(FN colour(sx#,sy#))/16
  65.     NEXT x%
  66.     IF MOUSEK
  67.       y%=my2%+100
  68.     ENDIF
  69.   NEXT y%
  70. RETURN
  71. '
  72. > FUNCTION height(xx#,yy#)
  73.   xx#=xx# AND (xs%-1)
  74.   yy#=yy# AND (ys%-1)
  75.   xm1#=xx# MOD div%
  76.   ym1#=yy# MOD div%
  77.   xm2#=(xx#/div%) MOD xsize%
  78.   ym2#=(yy#/div%) MOD ysize%
  79.   xm3#=(xm2#+1) MOD xsize%
  80.   ym3#=(ym2#+1) MOD ysize%
  81.   colq#=p%(xm2#,ym2#)+(p%(xm2#,ym3#)-p%(xm2#,ym2#))*ym1#/div%
  82.   colr#=p%(xm3#,ym2#)+(p%(xm3#,ym3#)-p%(xm3#,ym2#))*ym1#/div%
  83.   RETURN ((colr#-colq#)*xm1#/div%)+colq#
  84. ENDFUNC
  85. '
  86. > FUNCTION colour(xx%,yy%)
  87.   p%=(COS(4*PI*xx%/xs%)+COS(4*PI*yy%/ys%))*36   !Sinus wave
  88.   ADD p%,-16+RND*32
  89.   RETURN MAX(MIN(ABS(p%),63),0)
  90. ENDFUNC
  91. '
  92. > PROCEDURE set_colors
  93.   VSYNC
  94.   VSETCOLOR 0,&HFFF
  95.   VSETCOLOR 1,&H555
  96.   VSETCOLOR 2,&H333
  97.   VSETCOLOR 3,&H111
  98.   VSYNC
  99. RETURN
  100. '
  101. > PROCEDURE convert_to_gfx
  102.   g%=gfx%
  103.   p%=phys%
  104.   FOR y%=0 TO 63
  105.     DPOKE g%,DPEEK(p%)
  106.     DPOKE g%+2,DPEEK(p%+2)
  107.     DPOKE g%+4,DPEEK(p%+8)
  108.     DPOKE g%+6,DPEEK(p%+10)
  109.     '    DPOKE g%+8,DPEEK(p%+16)
  110.     '   DPOKE g%+10,DPEEK(p%+18)
  111.     '  DPOKE g%+12,DPEEK(p%+24)
  112.     ' DPOKE g%+14,DPEEK(p%+26)
  113.     ADD g%,8
  114.     ADD p%,160
  115.   NEXT y%
  116. RETURN
  117.