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 >
Wrap
GFA-BASIC Atari
|
1996-09-11
|
3KB
|
117 lines
' Interference Generator
' for m21 st tunnel
'
'
'
RESERVE 500000
INPUT "Random factor, like a tractor:";ra%
RANDOMIZE ra%
maxint%=2
x1%=0
y1%=0
x2%=64
y2%=64
div%=8
xs%=x2%-x1%
ys%=y2%-y1%
xsize%=xs%/div%
ysize%=ys%/div%
PRINT xsize%,ysize%
DIM p%(xsize%+1,ysize%+1)
nine%=MALLOC(320*240+2048)
gfx%=MALLOC(8*64)
old%=XBIOS(2)
' --------------------------------------
phys%=nine%+256*4
HIDEM
' --------------------------------------
VOID XBIOS(5,L:phys%,L:phys%,0)
GOSUB set_points
GOSUB set_colors
GOSUB interference(0,0,31,31)
GOSUB convert_to_gfx
REPEAT
UNTIL MOUSEK
BSAVE "d:\source2\m21.st\data\tunnel4.gfx",gfx%,16*64
' --------------------------------------
VOID XBIOS(5,L:old%,L:old%,1)
VOID MFREE(nine%)
VOID MFREE(gfx%)
END
'
> PROCEDURE set_points
FOR x%=0 TO xsize%-1
FOR y%=0 TO ysize%-1
p%(x%,y%)=RND*360*1
NEXT y%
p%(x%,ysize%)=p%(x%,0)
NEXT x%
FOR y%=0 TO ysize%-1
p%(xsize%,y%)=p%(0,y%)
NEXT y%
RETURN
'
> PROCEDURE interference(mx1%,my1%,mx2%,my2%)
FOR y%=my1% TO my2%
FOR x%=mx1% TO mx2%
sx#=x%
sy#=y%
FOR i%=maxint% TO 1 STEP -1
c#=FN height(sx#,sy#)
ADD sx#,i%*5*SINQ(c#)
ADD sy#,i%*5*COSQ(c#)
NEXT i%
PSET x%,y%,(FN colour(sx#,sy#))/16
NEXT x%
IF MOUSEK
y%=my2%+100
ENDIF
NEXT y%
RETURN
'
> FUNCTION height(xx#,yy#)
xx#=xx# AND (xs%-1)
yy#=yy# AND (ys%-1)
xm1#=xx# MOD div%
ym1#=yy# MOD div%
xm2#=(xx#/div%) MOD xsize%
ym2#=(yy#/div%) MOD ysize%
xm3#=(xm2#+1) MOD xsize%
ym3#=(ym2#+1) MOD ysize%
colq#=p%(xm2#,ym2#)+(p%(xm2#,ym3#)-p%(xm2#,ym2#))*ym1#/div%
colr#=p%(xm3#,ym2#)+(p%(xm3#,ym3#)-p%(xm3#,ym2#))*ym1#/div%
RETURN ((colr#-colq#)*xm1#/div%)+colq#
ENDFUNC
'
> FUNCTION colour(xx%,yy%)
p%=(COS(4*PI*xx%/xs%)+COS(4*PI*yy%/ys%))*36 !Sinus wave
ADD p%,-16+RND*32
RETURN MAX(MIN(ABS(p%),63),0)
ENDFUNC
'
> PROCEDURE set_colors
VSYNC
VSETCOLOR 0,&HFFF
VSETCOLOR 1,&H555
VSETCOLOR 2,&H333
VSETCOLOR 3,&H111
VSYNC
RETURN
'
> PROCEDURE convert_to_gfx
g%=gfx%
p%=phys%
FOR y%=0 TO 63
DPOKE g%,DPEEK(p%)
DPOKE g%+2,DPEEK(p%+2)
DPOKE g%+4,DPEEK(p%+8)
DPOKE g%+6,DPEEK(p%+10)
' DPOKE g%+8,DPEEK(p%+16)
' DPOKE g%+10,DPEEK(p%+18)
' DPOKE g%+12,DPEEK(p%+24)
' DPOKE g%+14,DPEEK(p%+26)
ADD g%,8
ADD p%,160
NEXT y%
RETURN