Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199609.adf » Regulars » StarInfo/Goatly/CoolWave

StarInfo/Goatly/CoolWave

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199609.adf » Regulars
Filename: StarInfo/Goatly/CoolWave
Read OK:
File size: 0E21 bytes
Load address: 0000
Exec address: 0000
File contents
    1REM CoolWave v1.0
    2REM A small prog that rotates some balls doing a wave in every dimension
    3REM (except time - that's a little hard to model! (even on an Acorn!) )
    4REM By Mike Goatly - Feb 1996
    5REM LEN1996 Acorn User
    6
    7t=RND(-TIME)
    8ON ERROR PRINT REPORT$+" at line "+STR$(ERL):STOP
    9
   10MODE 12
   11ORIGIN 640,512
   12OFF
   13Bank=1
   14
   15                   REM It's pretty safe (and enlightening?) to mess with the
   16                   REM variables that are described below.
   17Balls=16          :REM The number of balls
   18WaveSpeed=8       :REM The speed of the wave across the balls
   19WaveHeight=250    :REM The height of the balls wave
   20MaxSpeed=6        :REM The maximum speed of rotation in any axis
   21
   22d=2000
   23Wave=0
   24WaveStep=360/Balls
   25PlotStep=(1280/360)*WaveStep
   26orig=-620
   27PROCReset(2)
   28
   29REPEAT
   30   PROCCheckKeys
   31   PROCDrawBalls
   32
   33   SYS 6,113,Bank
   34   SYS 6,112,3-Bank
   35   Bank=3-Bank
   36UNTIL FALSE
   37
   38END
   39
   40DEF PROCDrawBalls
   41   cos1=COS(RAD(Angle1))
   42   sin1=SIN(RAD(Angle1))
   43   cos2=COS(RAD(Angle2))
   44   sin2=SIN(RAD(Angle2))
   45   cos3=COS(RAD(Angle3))
   46   sin3=SIN(RAD(Angle3))
   47   Angle1+=Diff1
   48   IF Angle1>=360 THEN Angle1-=360
   49   Angle2+=Diff2
   50   IF Angle2>=360 THEN Angle2-=360
   51   Angle3+=Diff3
   52   IF Angle3>=360 THEN Angle3-=360
   53   Wave+=WaveSpeed
   54   WAIT:CLS
   55
   56   ox=orig:oy=SIN(RAD(Wave))*WaveHeight:oz=0
   57   oz=oy*sin1+oz*cos1:oz=ox*sin2+oz*cos2
   58   za=oz
   59   ox=orig+(PlotStep*Balls):oz=0
   60   oz=oy*sin1+oz*cos1:oz=ox*sin2+oz*cos2
   61
   62   IF za<oz THEN
   63      CurrWave=0
   64      DrawX=orig
   65      WaveStepNow=WaveStep
   66      PlotStepNow=PlotStep
   67   ELSE
   68       CurrWave=360
   69       DrawX=orig+(PlotStep*Balls)
   70       WaveStepNow=-WaveStep
   71       PlotStepNow=-PlotStep
   72   ENDIF
   73
   74   FOR x=1 TO Balls+1
   75      ox=DrawX:oy=SIN(RAD(CurrWave+Wave))*WaveHeight:oz=0
   76      ny=oy*cos1-oz*sin1
   77      nz=oy*sin1+oz*cos1
   78     
   79      oy=ny:oz=nz
   80      nx=ox*cos2-oz*sin2
   81      nz=ox*sin2+oz*cos2-2000
   82     
   83      ox=nx:oy=ny
   84      nx=ox*cos3-oy*sin3
   85      ny=ox*sin3+oy*cos3
   86
   87      xp=d*nx/nz:yp=d*ny/nz
   88      col=(ABS(nz)/125)-8
   89      col=16-col
   90      IF col<0 THEN GCOL 0 ELSE GCOL col
   91      CIRCLE FILL xp,yp,80+(nz/40)
   92
   93      CurrWave+=WaveStepNow
   94      DrawX+=PlotStepNow
   95  NEXT x
   96
   97DEF PROCCheckKeys
   98   k$=INKEY$ 0
   99   IF k$="z" OR k$="Z" THEN d-=15
  100   IF k$="x" OR k$="X" THEN d+=15
  101   IF k$="q" OR k$="Q" THEN
  102      Diff1+=.1
  103      IF Diff1>MaxSpeed THEN Diff1=MaxSpeed
  104   ENDIF
  105   IF k$="a" OR k$="A" THEN
  106      Diff1-=.1
  107      IF Diff1<-MaxSpeed THEN Diff1=-MaxSpeed
  108   ENDIF
  109   IF k$="w" OR k$="W" THEN
  110      Diff2+=.1
  111      IF Diff2>MaxSpeed THEN Diff2=MaxSpeed
  112   ENDIF
  113   IF k$="s" OR k$="S" THEN
  114      Diff2-=.1
  115      IF Diff2<-MaxSpeed THEN Diff2=-MaxSpeed
  116   ENDIF
  117   IF k$="e" OR k$="E" THEN
  118      Diff3+=.1
  119      IF Diff3>MaxSpeed THEN Diff3=MaxSpeed
  120   ENDIF
  121   IF k$="d" OR k$="D" THEN
  122      Diff3-=.1
  123      IF Diff3<-MaxSpeed THEN Diff3=-MaxSpeed
  124   ENDIF
  125   IF k$="c" OR k$="C" THEN PROCSetColours
  126   IF k$=" " THEN PROCReset(1)
  127   IF k$="!" THEN PROCReset(2)
  128   IF k$="r" OR k$="R" THEN
  129      Diff1=RND(MaxSpeed*2)-MaxSpeed
  130      Diff2=RND(MaxSpeed*2)-MaxSpeed
  131      Diff3=RND(MaxSpeed*2)-MaxSpeed
  132      PROCSetColours
  133   ENDIF
  134ENDPROC
  135
  136DEF PROCReset(type)
  137   IF type=2 THEN Angle1=0:Angle2=0:Angle3=0:PROCSetColours
  138   Diff1=0:Diff2=0:Diff3=0   
  139ENDPROC
  140
  141DEF PROCSetColours
  142   t=RND(3)
  143   CASE t OF
  144      WHEN 1: r=1
  145              g=RND(1)
  146              b=RND(1)
  147      WHEN 2: g=1
  148              r=RND(1)
  149              b=RND(1)
  150      WHEN 3: b=1
  151              r=RND(1)
  152              g=RND(1)
  153   ENDCASE
  154   FOR x=1 TO 15
  155      COLOUR x,x*9*r,x*9*g,x*9*b
  156   NEXT x
  157ENDPROC
� CoolWave v1.0
J� A small prog that rotates some balls doing a wave in every dimension
I� (except time - that's a little hard to model! (even on an Acorn!) )
� By Mike Goatly - Feb 1996
� �1996 Acorn User

t=�(-�)
� � � �$+" at line "+�(�):�
	

� 12
ȑ 640,512
�

Bank=1

N                   � It's pretty safe (and enlightening?) to mess with the
<                   � variables that are described below.
,Balls=16          :� The number of balls
?WaveSpeed=8       :� The speed of the wave across the balls
5WaveHeight=250    :� The height of the balls wave
BMaxSpeed=6        :� The maximum speed of rotation in any axis


d=2000

Wave=0
WaveStep=360/Balls
 PlotStep=(1280/360)*WaveStep

orig=-620

�Reset(2)

�
   �CheckKeys
   �DrawBalls
 
!   ș 6,113,Bank
"   ș 6,112,3-Bank
#   Bank=3-Bank
$� �
%
&�
'
(� �DrawBalls
)   cos1=�(�(Angle1))
*   sin1=�(�(Angle1))
+   cos2=�(�(Angle2))
,   sin2=�(�(Angle2))
-   cos3=�(�(Angle3))
.   sin3=�(�(Angle3))
/   Angle1+=Diff1
0"   � Angle1>=360 � Angle1-=360
1   Angle2+=Diff2
2"   � Angle2>=360 � Angle2-=360
3   Angle3+=Diff3
4"   � Angle3>=360 � Angle3-=360
5   Wave+=WaveSpeed
6   Ȗ:�
7
8,   ox=orig:oy=�(�(Wave))*WaveHeight:oz=0
9,   oz=oy*sin1+oz*cos1:oz=ox*sin2+oz*cos2
:   za=oz
;$   ox=orig+(PlotStep*Balls):oz=0
<,   oz=oy*sin1+oz*cos1:oz=ox*sin2+oz*cos2
=
>   � za<oz �
?      CurrWave=0
@      DrawX=orig
A      WaveStepNow=WaveStep
B      PlotStepNow=PlotStep
C   �
D       CurrWave=360
E&       DrawX=orig+(PlotStep*Balls)
F        WaveStepNow=-WaveStep
G        PlotStepNow=-PlotStep
H   �
I
J   � x=1 � Balls+1
K9      ox=DrawX:oy=�(�(CurrWave+Wave))*WaveHeight:oz=0
L      ny=oy*cos1-oz*sin1
M      nz=oy*sin1+oz*cos1
N	     
O      oy=ny:oz=nz
P      nx=ox*cos2-oz*sin2
Q!      nz=ox*sin2+oz*cos2-2000
R	     
S      ox=nx:oy=ny
T      nx=ox*cos3-oy*sin3
U      ny=ox*sin3+oy*cos3
V
W      xp=d*nx/nz:yp=d*ny/nz
X      col=(�(nz)/125)-8
Y      col=16-col
Z      � col<0 � � 0 � � col
[       ȏ Ȑ xp,yp,80+(nz/40)
\
]      CurrWave+=WaveStepNow
^      DrawX+=PlotStepNow
_	  � x
`
a� �CheckKeys
b
   k$=� 0
c    � k$="z" � k$="Z" � d-=15
d    � k$="x" � k$="X" � d+=15
e   � k$="q" � k$="Q" �
f      Diff1+=.1
g+      � Diff1>MaxSpeed � Diff1=MaxSpeed
h   �
i   � k$="a" � k$="A" �
j      Diff1-=.1
k-      � Diff1<-MaxSpeed � Diff1=-MaxSpeed
l   �
m   � k$="w" � k$="W" �
n      Diff2+=.1
o+      � Diff2>MaxSpeed � Diff2=MaxSpeed
p   �
q   � k$="s" � k$="S" �
r      Diff2-=.1
s-      � Diff2<-MaxSpeed � Diff2=-MaxSpeed
t   �
u   � k$="e" � k$="E" �
v      Diff3+=.1
w+      � Diff3>MaxSpeed � Diff3=MaxSpeed
x   �
y   � k$="d" � k$="D" �
z      Diff3-=.1
{-      � Diff3<-MaxSpeed � Diff3=-MaxSpeed
|   �
}&   � k$="c" � k$="C" � �SetColours
~   � k$=" " � �Reset(1)
   � k$="!" � �Reset(2)
�   � k$="r" � k$="R" �
�&      Diff1=�(MaxSpeed*2)-MaxSpeed
�&      Diff2=�(MaxSpeed*2)-MaxSpeed
�&      Diff3=�(MaxSpeed*2)-MaxSpeed
�      �SetColours
�   �
��
�
�� �Reset(type)
�8   � type=2 � Angle1=0:Angle2=0:Angle3=0:�SetColours
�!   Diff1=0:Diff2=0:Diff3=0   
��
�
�� �SetColours
�
   t=�(3)
�
   Ȏ t �
�      � 1: r=1
�              g=�(1)
�              b=�(1)
�      � 2: g=1
�              r=�(1)
�              b=�(1)
�      � 3: b=1
�              r=�(1)
�              g=�(1)
�   �
�   � x=1 � 15
�      � x,x*9*r,x*9*g,x*9*b
�
   � x
��
�
00000000  0d 00 01 13 f4 20 43 6f  6f 6c 57 61 76 65 20 76  |..... CoolWave v|
00000010  31 2e 30 0d 00 02 4a f4  20 41 20 73 6d 61 6c 6c  |1.0...J. A small|
00000020  20 70 72 6f 67 20 74 68  61 74 20 72 6f 74 61 74  | prog that rotat|
00000030  65 73 20 73 6f 6d 65 20  62 61 6c 6c 73 20 64 6f  |es some balls do|
00000040  69 6e 67 20 61 20 77 61  76 65 20 69 6e 20 65 76  |ing a wave in ev|
00000050  65 72 79 20 64 69 6d 65  6e 73 69 6f 6e 0d 00 03  |ery dimension...|
00000060  49 f4 20 28 65 78 63 65  70 74 20 74 69 6d 65 20  |I. (except time |
00000070  2d 20 74 68 61 74 27 73  20 61 20 6c 69 74 74 6c  |- that's a littl|
00000080  65 20 68 61 72 64 20 74  6f 20 6d 6f 64 65 6c 21  |e hard to model!|
00000090  20 28 65 76 65 6e 20 6f  6e 20 61 6e 20 41 63 6f  | (even on an Aco|
000000a0  72 6e 21 29 20 29 0d 00  04 1f f4 20 42 79 20 4d  |rn!) )..... By M|
000000b0  69 6b 65 20 47 6f 61 74  6c 79 20 2d 20 46 65 62  |ike Goatly - Feb|
000000c0  20 31 39 39 36 0d 00 05  16 f4 20 a9 31 39 39 36  | 1996..... .1996|
000000d0  20 41 63 6f 72 6e 20 55  73 65 72 0d 00 06 04 0d  | Acorn User.....|
000000e0  00 07 0b 74 3d b3 28 2d  91 29 0d 00 08 1f ee 20  |...t=.(-.)..... |
000000f0  85 20 f1 20 f6 24 2b 22  20 61 74 20 6c 69 6e 65  |. . .$+" at line|
00000100  20 22 2b c3 28 9e 29 3a  fa 0d 00 09 04 0d 00 0a  | "+.(.):........|
00000110  08 eb 20 31 32 0d 00 0b  0e c8 91 20 36 34 30 2c  |.. 12...... 640,|
00000120  35 31 32 0d 00 0c 05 87  0d 00 0d 0a 42 61 6e 6b  |512.........Bank|
00000130  3d 31 0d 00 0e 04 0d 00  0f 4e 20 20 20 20 20 20  |=1.......N      |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 f4 20 49  |             . I|
00000150  74 27 73 20 70 72 65 74  74 79 20 73 61 66 65 20  |t's pretty safe |
00000160  28 61 6e 64 20 65 6e 6c  69 67 68 74 65 6e 69 6e  |(and enlightenin|
00000170  67 3f 29 20 74 6f 20 6d  65 73 73 20 77 69 74 68  |g?) to mess with|
00000180  20 74 68 65 0d 00 10 3c  20 20 20 20 20 20 20 20  | the...<        |
00000190  20 20 20 20 20 20 20 20  20 20 20 f4 20 76 61 72  |           . var|
000001a0  69 61 62 6c 65 73 20 74  68 61 74 20 61 72 65 20  |iables that are |
000001b0  64 65 73 63 72 69 62 65  64 20 62 65 6c 6f 77 2e  |described below.|
000001c0  0d 00 11 2c 42 61 6c 6c  73 3d 31 36 20 20 20 20  |...,Balls=16    |
000001d0  20 20 20 20 20 20 3a f4  20 54 68 65 20 6e 75 6d  |      :. The num|
000001e0  62 65 72 20 6f 66 20 62  61 6c 6c 73 0d 00 12 3f  |ber of balls...?|
000001f0  57 61 76 65 53 70 65 65  64 3d 38 20 20 20 20 20  |WaveSpeed=8     |
00000200  20 20 3a f4 20 54 68 65  20 73 70 65 65 64 20 6f  |  :. The speed o|
00000210  66 20 74 68 65 20 77 61  76 65 20 61 63 72 6f 73  |f the wave acros|
00000220  73 20 74 68 65 20 62 61  6c 6c 73 0d 00 13 35 57  |s the balls...5W|
00000230  61 76 65 48 65 69 67 68  74 3d 32 35 30 20 20 20  |aveHeight=250   |
00000240  20 3a f4 20 54 68 65 20  68 65 69 67 68 74 20 6f  | :. The height o|
00000250  66 20 74 68 65 20 62 61  6c 6c 73 20 77 61 76 65  |f the balls wave|
00000260  0d 00 14 42 4d 61 78 53  70 65 65 64 3d 36 20 20  |...BMaxSpeed=6  |
00000270  20 20 20 20 20 20 3a f4  20 54 68 65 20 6d 61 78  |      :. The max|
00000280  69 6d 75 6d 20 73 70 65  65 64 20 6f 66 20 72 6f  |imum speed of ro|
00000290  74 61 74 69 6f 6e 20 69  6e 20 61 6e 79 20 61 78  |tation in any ax|
000002a0  69 73 0d 00 15 04 0d 00  16 0a 64 3d 32 30 30 30  |is........d=2000|
000002b0  0d 00 17 0a 57 61 76 65  3d 30 0d 00 18 16 57 61  |....Wave=0....Wa|
000002c0  76 65 53 74 65 70 3d 33  36 30 2f 42 61 6c 6c 73  |veStep=360/Balls|
000002d0  0d 00 19 20 50 6c 6f 74  53 74 65 70 3d 28 31 32  |... PlotStep=(12|
000002e0  38 30 2f 33 36 30 29 2a  57 61 76 65 53 74 65 70  |80/360)*WaveStep|
000002f0  0d 00 1a 0d 6f 72 69 67  3d 2d 36 32 30 0d 00 1b  |....orig=-620...|
00000300  0d f2 52 65 73 65 74 28  32 29 0d 00 1c 04 0d 00  |..Reset(2)......|
00000310  1d 05 f5 0d 00 1e 11 20  20 20 f2 43 68 65 63 6b  |.......   .Check|
00000320  4b 65 79 73 0d 00 1f 11  20 20 20 f2 44 72 61 77  |Keys....   .Draw|
00000330  42 61 6c 6c 73 0d 00 20  04 0d 00 21 14 20 20 20  |Balls.. ...!.   |
00000340  c8 99 20 36 2c 31 31 33  2c 42 61 6e 6b 0d 00 22  |.. 6,113,Bank.."|
00000350  16 20 20 20 c8 99 20 36  2c 31 31 32 2c 33 2d 42  |.   .. 6,112,3-B|
00000360  61 6e 6b 0d 00 23 12 20  20 20 42 61 6e 6b 3d 33  |ank..#.   Bank=3|
00000370  2d 42 61 6e 6b 0d 00 24  07 fd 20 a3 0d 00 25 04  |-Bank..$.. ...%.|
00000380  0d 00 26 05 e0 0d 00 27  04 0d 00 28 10 dd 20 f2  |..&....'...(.. .|
00000390  44 72 61 77 42 61 6c 6c  73 0d 00 29 18 20 20 20  |DrawBalls..).   |
000003a0  63 6f 73 31 3d 9b 28 b2  28 41 6e 67 6c 65 31 29  |cos1=.(.(Angle1)|
000003b0  29 0d 00 2a 18 20 20 20  73 69 6e 31 3d b5 28 b2  |)..*.   sin1=.(.|
000003c0  28 41 6e 67 6c 65 31 29  29 0d 00 2b 18 20 20 20  |(Angle1))..+.   |
000003d0  63 6f 73 32 3d 9b 28 b2  28 41 6e 67 6c 65 32 29  |cos2=.(.(Angle2)|
000003e0  29 0d 00 2c 18 20 20 20  73 69 6e 32 3d b5 28 b2  |)..,.   sin2=.(.|
000003f0  28 41 6e 67 6c 65 32 29  29 0d 00 2d 18 20 20 20  |(Angle2))..-.   |
00000400  63 6f 73 33 3d 9b 28 b2  28 41 6e 67 6c 65 33 29  |cos3=.(.(Angle3)|
00000410  29 0d 00 2e 18 20 20 20  73 69 6e 33 3d b5 28 b2  |)....   sin3=.(.|
00000420  28 41 6e 67 6c 65 33 29  29 0d 00 2f 14 20 20 20  |(Angle3))../.   |
00000430  41 6e 67 6c 65 31 2b 3d  44 69 66 66 31 0d 00 30  |Angle1+=Diff1..0|
00000440  22 20 20 20 e7 20 41 6e  67 6c 65 31 3e 3d 33 36  |"   . Angle1>=36|
00000450  30 20 8c 20 41 6e 67 6c  65 31 2d 3d 33 36 30 0d  |0 . Angle1-=360.|
00000460  00 31 14 20 20 20 41 6e  67 6c 65 32 2b 3d 44 69  |.1.   Angle2+=Di|
00000470  66 66 32 0d 00 32 22 20  20 20 e7 20 41 6e 67 6c  |ff2..2"   . Angl|
00000480  65 32 3e 3d 33 36 30 20  8c 20 41 6e 67 6c 65 32  |e2>=360 . Angle2|
00000490  2d 3d 33 36 30 0d 00 33  14 20 20 20 41 6e 67 6c  |-=360..3.   Angl|
000004a0  65 33 2b 3d 44 69 66 66  33 0d 00 34 22 20 20 20  |e3+=Diff3..4"   |
000004b0  e7 20 41 6e 67 6c 65 33  3e 3d 33 36 30 20 8c 20  |. Angle3>=360 . |
000004c0  41 6e 67 6c 65 33 2d 3d  33 36 30 0d 00 35 16 20  |Angle3-=360..5. |
000004d0  20 20 57 61 76 65 2b 3d  57 61 76 65 53 70 65 65  |  Wave+=WaveSpee|
000004e0  64 0d 00 36 0b 20 20 20  c8 96 3a db 0d 00 37 04  |d..6.   ..:...7.|
000004f0  0d 00 38 2c 20 20 20 6f  78 3d 6f 72 69 67 3a 6f  |..8,   ox=orig:o|
00000500  79 3d b5 28 b2 28 57 61  76 65 29 29 2a 57 61 76  |y=.(.(Wave))*Wav|
00000510  65 48 65 69 67 68 74 3a  6f 7a 3d 30 0d 00 39 2c  |eHeight:oz=0..9,|
00000520  20 20 20 6f 7a 3d 6f 79  2a 73 69 6e 31 2b 6f 7a  |   oz=oy*sin1+oz|
00000530  2a 63 6f 73 31 3a 6f 7a  3d 6f 78 2a 73 69 6e 32  |*cos1:oz=ox*sin2|
00000540  2b 6f 7a 2a 63 6f 73 32  0d 00 3a 0c 20 20 20 7a  |+oz*cos2..:.   z|
00000550  61 3d 6f 7a 0d 00 3b 24  20 20 20 6f 78 3d 6f 72  |a=oz..;$   ox=or|
00000560  69 67 2b 28 50 6c 6f 74  53 74 65 70 2a 42 61 6c  |ig+(PlotStep*Bal|
00000570  6c 73 29 3a 6f 7a 3d 30  0d 00 3c 2c 20 20 20 6f  |ls):oz=0..<,   o|
00000580  7a 3d 6f 79 2a 73 69 6e  31 2b 6f 7a 2a 63 6f 73  |z=oy*sin1+oz*cos|
00000590  31 3a 6f 7a 3d 6f 78 2a  73 69 6e 32 2b 6f 7a 2a  |1:oz=ox*sin2+oz*|
000005a0  63 6f 73 32 0d 00 3d 04  0d 00 3e 10 20 20 20 e7  |cos2..=...>.   .|
000005b0  20 7a 61 3c 6f 7a 20 8c  0d 00 3f 14 20 20 20 20  | za<oz ...?.    |
000005c0  20 20 43 75 72 72 57 61  76 65 3d 30 0d 00 40 14  |  CurrWave=0..@.|
000005d0  20 20 20 20 20 20 44 72  61 77 58 3d 6f 72 69 67  |      DrawX=orig|
000005e0  0d 00 41 1e 20 20 20 20  20 20 57 61 76 65 53 74  |..A.      WaveSt|
000005f0  65 70 4e 6f 77 3d 57 61  76 65 53 74 65 70 0d 00  |epNow=WaveStep..|
00000600  42 1e 20 20 20 20 20 20  50 6c 6f 74 53 74 65 70  |B.      PlotStep|
00000610  4e 6f 77 3d 50 6c 6f 74  53 74 65 70 0d 00 43 08  |Now=PlotStep..C.|
00000620  20 20 20 cc 0d 00 44 17  20 20 20 20 20 20 20 43  |   ...D.       C|
00000630  75 72 72 57 61 76 65 3d  33 36 30 0d 00 45 26 20  |urrWave=360..E& |
00000640  20 20 20 20 20 20 44 72  61 77 58 3d 6f 72 69 67  |      DrawX=orig|
00000650  2b 28 50 6c 6f 74 53 74  65 70 2a 42 61 6c 6c 73  |+(PlotStep*Balls|
00000660  29 0d 00 46 20 20 20 20  20 20 20 20 57 61 76 65  |)..F        Wave|
00000670  53 74 65 70 4e 6f 77 3d  2d 57 61 76 65 53 74 65  |StepNow=-WaveSte|
00000680  70 0d 00 47 20 20 20 20  20 20 20 20 50 6c 6f 74  |p..G        Plot|
00000690  53 74 65 70 4e 6f 77 3d  2d 50 6c 6f 74 53 74 65  |StepNow=-PlotSte|
000006a0  70 0d 00 48 08 20 20 20  cd 0d 00 49 04 0d 00 4a  |p..H.   ...I...J|
000006b0  16 20 20 20 e3 20 78 3d  31 20 b8 20 42 61 6c 6c  |.   . x=1 . Ball|
000006c0  73 2b 31 0d 00 4b 39 20  20 20 20 20 20 6f 78 3d  |s+1..K9      ox=|
000006d0  44 72 61 77 58 3a 6f 79  3d b5 28 b2 28 43 75 72  |DrawX:oy=.(.(Cur|
000006e0  72 57 61 76 65 2b 57 61  76 65 29 29 2a 57 61 76  |rWave+Wave))*Wav|
000006f0  65 48 65 69 67 68 74 3a  6f 7a 3d 30 0d 00 4c 1c  |eHeight:oz=0..L.|
00000700  20 20 20 20 20 20 6e 79  3d 6f 79 2a 63 6f 73 31  |      ny=oy*cos1|
00000710  2d 6f 7a 2a 73 69 6e 31  0d 00 4d 1c 20 20 20 20  |-oz*sin1..M.    |
00000720  20 20 6e 7a 3d 6f 79 2a  73 69 6e 31 2b 6f 7a 2a  |  nz=oy*sin1+oz*|
00000730  63 6f 73 31 0d 00 4e 09  20 20 20 20 20 0d 00 4f  |cos1..N.     ..O|
00000740  15 20 20 20 20 20 20 6f  79 3d 6e 79 3a 6f 7a 3d  |.      oy=ny:oz=|
00000750  6e 7a 0d 00 50 1c 20 20  20 20 20 20 6e 78 3d 6f  |nz..P.      nx=o|
00000760  78 2a 63 6f 73 32 2d 6f  7a 2a 73 69 6e 32 0d 00  |x*cos2-oz*sin2..|
00000770  51 21 20 20 20 20 20 20  6e 7a 3d 6f 78 2a 73 69  |Q!      nz=ox*si|
00000780  6e 32 2b 6f 7a 2a 63 6f  73 32 2d 32 30 30 30 0d  |n2+oz*cos2-2000.|
00000790  00 52 09 20 20 20 20 20  0d 00 53 15 20 20 20 20  |.R.     ..S.    |
000007a0  20 20 6f 78 3d 6e 78 3a  6f 79 3d 6e 79 0d 00 54  |  ox=nx:oy=ny..T|
000007b0  1c 20 20 20 20 20 20 6e  78 3d 6f 78 2a 63 6f 73  |.      nx=ox*cos|
000007c0  33 2d 6f 79 2a 73 69 6e  33 0d 00 55 1c 20 20 20  |3-oy*sin3..U.   |
000007d0  20 20 20 6e 79 3d 6f 78  2a 73 69 6e 33 2b 6f 79  |   ny=ox*sin3+oy|
000007e0  2a 63 6f 73 33 0d 00 56  04 0d 00 57 1f 20 20 20  |*cos3..V...W.   |
000007f0  20 20 20 78 70 3d 64 2a  6e 78 2f 6e 7a 3a 79 70  |   xp=d*nx/nz:yp|
00000800  3d 64 2a 6e 79 2f 6e 7a  0d 00 58 1b 20 20 20 20  |=d*ny/nz..X.    |
00000810  20 20 63 6f 6c 3d 28 94  28 6e 7a 29 2f 31 32 35  |  col=(.(nz)/125|
00000820  29 2d 38 0d 00 59 14 20  20 20 20 20 20 63 6f 6c  |)-8..Y.      col|
00000830  3d 31 36 2d 63 6f 6c 0d  00 5a 1f 20 20 20 20 20  |=16-col..Z.     |
00000840  20 e7 20 63 6f 6c 3c 30  20 8c 20 e6 20 30 20 8b  | . col<0 . . 0 .|
00000850  20 e6 20 63 6f 6c 0d 00  5b 20 20 20 20 20 20 20  | . col..[       |
00000860  c8 8f 20 c8 90 20 78 70  2c 79 70 2c 38 30 2b 28  |.. .. xp,yp,80+(|
00000870  6e 7a 2f 34 30 29 0d 00  5c 04 0d 00 5d 1f 20 20  |nz/40)..\...].  |
00000880  20 20 20 20 43 75 72 72  57 61 76 65 2b 3d 57 61  |    CurrWave+=Wa|
00000890  76 65 53 74 65 70 4e 6f  77 0d 00 5e 1c 20 20 20  |veStepNow..^.   |
000008a0  20 20 20 44 72 61 77 58  2b 3d 50 6c 6f 74 53 74  |   DrawX+=PlotSt|
000008b0  65 70 4e 6f 77 0d 00 5f  09 20 20 ed 20 78 0d 00  |epNow.._.  . x..|
000008c0  60 04 0d 00 61 10 dd 20  f2 43 68 65 63 6b 4b 65  |`...a.. .CheckKe|
000008d0  79 73 0d 00 62 0d 20 20  20 6b 24 3d bf 20 30 0d  |ys..b.   k$=. 0.|
000008e0  00 63 20 20 20 20 e7 20  6b 24 3d 22 7a 22 20 84  |.c    . k$="z" .|
000008f0  20 6b 24 3d 22 5a 22 20  8c 20 64 2d 3d 31 35 0d  | k$="Z" . d-=15.|
00000900  00 64 20 20 20 20 e7 20  6b 24 3d 22 78 22 20 84  |.d    . k$="x" .|
00000910  20 6b 24 3d 22 58 22 20  8c 20 64 2b 3d 31 35 0d  | k$="X" . d+=15.|
00000920  00 65 1a 20 20 20 e7 20  6b 24 3d 22 71 22 20 84  |.e.   . k$="q" .|
00000930  20 6b 24 3d 22 51 22 20  8c 0d 00 66 13 20 20 20  | k$="Q" ...f.   |
00000940  20 20 20 44 69 66 66 31  2b 3d 2e 31 0d 00 67 2b  |   Diff1+=.1..g+|
00000950  20 20 20 20 20 20 e7 20  44 69 66 66 31 3e 4d 61  |      . Diff1>Ma|
00000960  78 53 70 65 65 64 20 8c  20 44 69 66 66 31 3d 4d  |xSpeed . Diff1=M|
00000970  61 78 53 70 65 65 64 0d  00 68 08 20 20 20 cd 0d  |axSpeed..h.   ..|
00000980  00 69 1a 20 20 20 e7 20  6b 24 3d 22 61 22 20 84  |.i.   . k$="a" .|
00000990  20 6b 24 3d 22 41 22 20  8c 0d 00 6a 13 20 20 20  | k$="A" ...j.   |
000009a0  20 20 20 44 69 66 66 31  2d 3d 2e 31 0d 00 6b 2d  |   Diff1-=.1..k-|
000009b0  20 20 20 20 20 20 e7 20  44 69 66 66 31 3c 2d 4d  |      . Diff1<-M|
000009c0  61 78 53 70 65 65 64 20  8c 20 44 69 66 66 31 3d  |axSpeed . Diff1=|
000009d0  2d 4d 61 78 53 70 65 65  64 0d 00 6c 08 20 20 20  |-MaxSpeed..l.   |
000009e0  cd 0d 00 6d 1a 20 20 20  e7 20 6b 24 3d 22 77 22  |...m.   . k$="w"|
000009f0  20 84 20 6b 24 3d 22 57  22 20 8c 0d 00 6e 13 20  | . k$="W" ...n. |
00000a00  20 20 20 20 20 44 69 66  66 32 2b 3d 2e 31 0d 00  |     Diff2+=.1..|
00000a10  6f 2b 20 20 20 20 20 20  e7 20 44 69 66 66 32 3e  |o+      . Diff2>|
00000a20  4d 61 78 53 70 65 65 64  20 8c 20 44 69 66 66 32  |MaxSpeed . Diff2|
00000a30  3d 4d 61 78 53 70 65 65  64 0d 00 70 08 20 20 20  |=MaxSpeed..p.   |
00000a40  cd 0d 00 71 1a 20 20 20  e7 20 6b 24 3d 22 73 22  |...q.   . k$="s"|
00000a50  20 84 20 6b 24 3d 22 53  22 20 8c 0d 00 72 13 20  | . k$="S" ...r. |
00000a60  20 20 20 20 20 44 69 66  66 32 2d 3d 2e 31 0d 00  |     Diff2-=.1..|
00000a70  73 2d 20 20 20 20 20 20  e7 20 44 69 66 66 32 3c  |s-      . Diff2<|
00000a80  2d 4d 61 78 53 70 65 65  64 20 8c 20 44 69 66 66  |-MaxSpeed . Diff|
00000a90  32 3d 2d 4d 61 78 53 70  65 65 64 0d 00 74 08 20  |2=-MaxSpeed..t. |
00000aa0  20 20 cd 0d 00 75 1a 20  20 20 e7 20 6b 24 3d 22  |  ...u.   . k$="|
00000ab0  65 22 20 84 20 6b 24 3d  22 45 22 20 8c 0d 00 76  |e" . k$="E" ...v|
00000ac0  13 20 20 20 20 20 20 44  69 66 66 33 2b 3d 2e 31  |.      Diff3+=.1|
00000ad0  0d 00 77 2b 20 20 20 20  20 20 e7 20 44 69 66 66  |..w+      . Diff|
00000ae0  33 3e 4d 61 78 53 70 65  65 64 20 8c 20 44 69 66  |3>MaxSpeed . Dif|
00000af0  66 33 3d 4d 61 78 53 70  65 65 64 0d 00 78 08 20  |f3=MaxSpeed..x. |
00000b00  20 20 cd 0d 00 79 1a 20  20 20 e7 20 6b 24 3d 22  |  ...y.   . k$="|
00000b10  64 22 20 84 20 6b 24 3d  22 44 22 20 8c 0d 00 7a  |d" . k$="D" ...z|
00000b20  13 20 20 20 20 20 20 44  69 66 66 33 2d 3d 2e 31  |.      Diff3-=.1|
00000b30  0d 00 7b 2d 20 20 20 20  20 20 e7 20 44 69 66 66  |..{-      . Diff|
00000b40  33 3c 2d 4d 61 78 53 70  65 65 64 20 8c 20 44 69  |3<-MaxSpeed . Di|
00000b50  66 66 33 3d 2d 4d 61 78  53 70 65 65 64 0d 00 7c  |ff3=-MaxSpeed..||
00000b60  08 20 20 20 cd 0d 00 7d  26 20 20 20 e7 20 6b 24  |.   ...}&   . k$|
00000b70  3d 22 63 22 20 84 20 6b  24 3d 22 43 22 20 8c 20  |="c" . k$="C" . |
00000b80  f2 53 65 74 43 6f 6c 6f  75 72 73 0d 00 7e 1b 20  |.SetColours..~. |
00000b90  20 20 e7 20 6b 24 3d 22  20 22 20 8c 20 f2 52 65  |  . k$=" " . .Re|
00000ba0  73 65 74 28 31 29 0d 00  7f 1b 20 20 20 e7 20 6b  |set(1)....   . k|
00000bb0  24 3d 22 21 22 20 8c 20  f2 52 65 73 65 74 28 32  |$="!" . .Reset(2|
00000bc0  29 0d 00 80 1a 20 20 20  e7 20 6b 24 3d 22 72 22  |)....   . k$="r"|
00000bd0  20 84 20 6b 24 3d 22 52  22 20 8c 0d 00 81 26 20  | . k$="R" ....& |
00000be0  20 20 20 20 20 44 69 66  66 31 3d b3 28 4d 61 78  |     Diff1=.(Max|
00000bf0  53 70 65 65 64 2a 32 29  2d 4d 61 78 53 70 65 65  |Speed*2)-MaxSpee|
00000c00  64 0d 00 82 26 20 20 20  20 20 20 44 69 66 66 32  |d...&      Diff2|
00000c10  3d b3 28 4d 61 78 53 70  65 65 64 2a 32 29 2d 4d  |=.(MaxSpeed*2)-M|
00000c20  61 78 53 70 65 65 64 0d  00 83 26 20 20 20 20 20  |axSpeed...&     |
00000c30  20 44 69 66 66 33 3d b3  28 4d 61 78 53 70 65 65  | Diff3=.(MaxSpee|
00000c40  64 2a 32 29 2d 4d 61 78  53 70 65 65 64 0d 00 84  |d*2)-MaxSpeed...|
00000c50  15 20 20 20 20 20 20 f2  53 65 74 43 6f 6c 6f 75  |.      .SetColou|
00000c60  72 73 0d 00 85 08 20 20  20 cd 0d 00 86 05 e1 0d  |rs....   .......|
00000c70  00 87 04 0d 00 88 12 dd  20 f2 52 65 73 65 74 28  |........ .Reset(|
00000c80  74 79 70 65 29 0d 00 89  38 20 20 20 e7 20 74 79  |type)...8   . ty|
00000c90  70 65 3d 32 20 8c 20 41  6e 67 6c 65 31 3d 30 3a  |pe=2 . Angle1=0:|
00000ca0  41 6e 67 6c 65 32 3d 30  3a 41 6e 67 6c 65 33 3d  |Angle2=0:Angle3=|
00000cb0  30 3a f2 53 65 74 43 6f  6c 6f 75 72 73 0d 00 8a  |0:.SetColours...|
00000cc0  21 20 20 20 44 69 66 66  31 3d 30 3a 44 69 66 66  |!   Diff1=0:Diff|
00000cd0  32 3d 30 3a 44 69 66 66  33 3d 30 20 20 20 0d 00  |2=0:Diff3=0   ..|
00000ce0  8b 05 e1 0d 00 8c 04 0d  00 8d 11 dd 20 f2 53 65  |............ .Se|
00000cf0  74 43 6f 6c 6f 75 72 73  0d 00 8e 0d 20 20 20 74  |tColours....   t|
00000d00  3d b3 28 33 29 0d 00 8f  0d 20 20 20 c8 8e 20 74  |=.(3)....   .. t|
00000d10  20 ca 0d 00 90 12 20 20  20 20 20 20 c9 20 31 3a  | .....      . 1:|
00000d20  20 72 3d 31 0d 00 91 18  20 20 20 20 20 20 20 20  | r=1....        |
00000d30  20 20 20 20 20 20 67 3d  b3 28 31 29 0d 00 92 18  |      g=.(1)....|
00000d40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 62 3d  |              b=|
00000d50  b3 28 31 29 0d 00 93 12  20 20 20 20 20 20 c9 20  |.(1)....      . |
00000d60  32 3a 20 67 3d 31 0d 00  94 18 20 20 20 20 20 20  |2: g=1....      |
00000d70  20 20 20 20 20 20 20 20  72 3d b3 28 31 29 0d 00  |        r=.(1)..|
00000d80  95 18 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
00000d90  62 3d b3 28 31 29 0d 00  96 12 20 20 20 20 20 20  |b=.(1)....      |
00000da0  c9 20 33 3a 20 62 3d 31  0d 00 97 18 20 20 20 20  |. 3: b=1....    |
00000db0  20 20 20 20 20 20 20 20  20 20 72 3d b3 28 31 29  |          r=.(1)|
00000dc0  0d 00 98 18 20 20 20 20  20 20 20 20 20 20 20 20  |....            |
00000dd0  20 20 67 3d b3 28 31 29  0d 00 99 08 20 20 20 cb  |  g=.(1)....   .|
00000de0  0d 00 9a 11 20 20 20 e3  20 78 3d 31 20 b8 20 31  |....   . x=1 . 1|
00000df0  35 0d 00 9b 1f 20 20 20  20 20 20 fb 20 78 2c 78  |5....      . x,x|
00000e00  2a 39 2a 72 2c 78 2a 39  2a 67 2c 78 2a 39 2a 62  |*9*r,x*9*g,x*9*b|
00000e10  0d 00 9c 0a 20 20 20 ed  20 78 0d 00 9d 05 e1 0d  |....   . x......|
00000e20  ff                                                |.|
00000e21