>BBCScape  By David Lawrence  For BBC B/B+/M/C/E/A (! (C) BBC Acorn User Sep 1989 2: <% 135: -<&5000:=&1100: $&600 F 129:init: 23;8202;0;0;0; Pfaults(faults) Z levels d draw n x: init 6 >&FFFF:size%=40 >&7FFF:size%=20 size%=12 zscale%=4 yscale%=(160/size%)*2 xscale%=yscale%*2 : "Circular faults? "A$:circular="Yy",A$+"y",1))<>0 8 "Linear faults? "A$:linear="Yy",A$+"y",1))<>0 5 "Number of faults: "faults: faults=0:faults=50 delta=3 :  land(size%,size%) ! s%(2),x%(2),y%(2),height(3)  19,3,4;0;12  black=0  blue=3  ": ,faults(num%) 6 i%=1 num% @& 0,0);"Faults left:";num%-i%;" " J circular circle T linear line ^ h r: | circle x%=(size%)-1 y%=(size%)-1 r%=((size%)-1)^2 add=*(1)*delta  X%=0 size% dx=(X%-x%)^2  dx=size% y2=size%-1 & Y%=y1 y2 0land(X%,Y%)=land(X%,Y%)+add : D N: X line b ls%(1)=(4):s%(2)=(4) v s%(1)<>s%(2)   J%=1 2 ) s%(J%)=1 x%(J%)=0:y%(J%)=(size%)-1 - s%(J%)=2 x%(J%)=(size%)-1:y%(J%)=size% - s%(J%)=3 x%(J%)=size%:y%(J%)=(size%)-1 ) s%(J%)=4 x%(J%)=(size%)-1:y%(J%)=0  ! x%(1)<>x%(2) y%(1)<>y%(2) !M=(y%(2)-y%(1))/(x%(2)-x%(1)) C=y%(1)-M*x%(1) add=*(1)*delta  X%=0 size%  Y%=M*X%+C  Y%<0 Y%=0   Y%<=size% doline    *: 4 doline > y%=Y% size% Hland(X%,y%)=land(X%,y%)+add R \ f: p levels z base=0  peak=0  aver=0 +land(size%,size%)=land(size%-1,size%-1)  X%=0 size%-1 $land(X%, size%)=land(X%,size%-1) #land(size%,X%)=land(size%-1,X%) +aver=aver+land(X%,size%)+land(size%,X%)  Y%=0 size%-1 aver=aver+land(X%,Y%) Bav=(land(X%,Y%)+land(X%+1,Y%)+land(X%,Y%+1)+land(X%+1,Y%+1))/4  avpeak peak=av   water=aver/(size%*size%)  $: . draw 8 B col%=1 L I%=0 size%-1 V J%=0 size%-1 `patch(I%,J%) j I%=size%-1 side(col%) tcol%=3-col% ~ col%=3-col% edge(col%)   0,0 3d(4,size%,size%,water) 3d(5,size%,size%,base) 3dd(5,size%,size%)  : patch(X%,Y%) height(0)=land(X%,Y%)-water !height(1)=land(X%+1,Y%)-water #height(2)=land(X%+1,Y%+1)-water  !height(3)=land(X%,Y%+1)-water  F$="FN"  i%=0 3 (( height(i%)<0 F$=F$+"b" F$=F$+"a" 2 <sea F 0,col% Pnull=(F$) Z d: nedge(col%) x 0,blue 3d(4,I%,size%,base) 3d(4,I%+1,size%,base) 3d(85,I%,size%,water) 3d(85,I%+1,size%,water)  0,black 3d(5,I%,size%,water)  0,col% 3d(4,I%,size%,base) 3d(4,I%+1,size%,base) 3dd(85,I%,size%) 3dd(85,I%+1,size%)  0,0 3dd(5,I%,size%)  : side(col%) " 0,blue ,3d(4,size%,J%,base) 63d(4,size%,J%+1, base) @3d(85,size%,J%,water) J3d(85,size%,J%+1,water) T 0,0 ^3d(5,size%,J%,water) h 0,col% r3d(4,size%,J%,base) |3d(4,size%,J%+1,base) 3dd(85,size%,J%) 3dd(85,size%,J%+1)  0,0 3dd(5,size%,J%)  :  sea  0,blue 3d(4,X%,Y%,water) 3d(4,X%+1,Y%,water) 3d(85,X%,Y%+1,water) 3d(85,X%+1,Y%+1,water)  :  ݤaaaa 3dd(4,X%,Y%) &3dd(4,X%+1,Y%) 03dd(85,X%,Y%+1) :3dd(85,X%+1,Y%+1) D 0,black N3dd(5,X%+1,Y%) X3dd(5,X%,Y%) b3dd(5,X%,Y%+1) l3dd(5,X%+1,Y%+1) v=0 :  ݤaaab 3dd(4,X%,Y%) 3dd(4,X%+1,Y%) 3dm(85,3) 3dd(85,X%+1,Y%+1) 3dm(85,2)  0,black  3dm(5,3) 3dd(5,X%,Y%) 3dd(5,X%+1,Y%) 3dd(5,X%+1,Y%+1)  3dm(5,2) =0  :  ݤaaba  3dd(4,X%,Y%) *3dd(4,X%,Y%+1) 43dd(85,X%+1,Y%) >3dm(85,2) H3dm(85,1) R 0,black \ 3dm(5,2) f3dd(5,X%,Y%+1) p3dd(5,X%,Y%) z3dd(5,X%+1,Y%)  3dm(5,1) =0 :  ݤaabb 3dd(4,X%,Y%) 3dd(4,X%+1,Y%) 3dm(85,3) 3dm(85,1)  0,black  3dm(5,3) 3dd(5,X%,Y%) 3dd(5,X%+1,Y%)  3dm(5,1) =0 :  ݤabaa $3dd(4,X%,Y%+1) .3dd(4,X%+1,Y%+1) 83dd(85,X%,Y%) B3dm(85,1) L3dm(85,0) V 0,black ` 3dm(5,1) j3dd(5,X%+1,Y%+1) t3dd(5,X%,Y%+1) ~3dd(5,X%,Y%) 3dm(5,0) =0 : ݤabab tri(0) 0,col% tri(2) =0 : ݤabba 3dd(4,X%,Y%) 3dd(4,X%,Y%+1) 3dm(85,0) 3dm(85,2)  0,black 3dd(5,X%,Y%+1) (3dd(5,X%,Y%) 2 3dm(5,0) < 3dm(5,2) F=0 P: Z ݤabbb d tri(0) n=0 x: ݤbaaa 3dm(4,3) 3dm(4,0) 3dd(85,X%,Y%+1) 3dd(85,X%+1,Y%) 3dd(85,X%+1,Y%+1) 0,black 3dd(5,X%,Y%+1) 3dm(5,3) 3dm(5,0) 3dd(5,X%+1,Y%) 3dd(5,X%+1,Y%+1) =0 :  ݤbaab 3dd(4,X%+1,Y%+1) "3dd(4,X%+1,Y%) ,3dm(85,2) 63dm(85,0) @ 0,black J 3dm(5,2) T3dd(5,X%+1,Y%+1) ^3dd(5,X%+1,Y%) h 3dm(5,0) r=0 |: ݤbaba tri(1) 0,col% tri(3) =0 : ݤbabb tri(1) =0 : ݤbbaa 3dd(4,X%+1,Y%+1) 3dd(4,X%,Y%+1) 3dm(85,1) 3dm(85,3)  0,black & 3dm(5,1) 03dd(5,X%+1,Y%+1) :3dd(5,X%,Y%+1) D 3dm(5,3) N=0 X: b ݤbbab l tri(2) v=0 : ݤbbba tri(3) =0 : ݤbbbb =0 : tat(x%,y%,s1%,s2%) 3dd(4,x%,y%) 3dm(4,s1%) 3dm(85,s2%) 0,black 3dm(5,s1%) 3dd(5,x%,y%) 3dm(5,s2%)  *: 4 tri(t%) > t%=0 tat(X%,Y%,3,0) H t%=1 tat(X%+1,Y%,0,1) R t%=2 tat(X%+1,Y%+1,1,2) \ t%=3 tat(X%,Y%+1,2,3) f p: z3dm(o%,s%) ! s%=0 mid(o%,X%,Y%,1,0,0,1) # s%=1 mid(o%,X%+1,Y%,0,1,1,2) # s%=2 mid(o%,X%,Y%+1,1,0,3,2) ! s%=3 mid(o%,X%,Y%,0,1,0,3)  : mid(o%,xs,ys,xa,ya,zs,ze) (d=height(zs)/(height(zs)-height(ze)) < xa 3d(o%,xs+d*xa,ys,water) 3d(o%,xs,ys+d*ya,water)  : 3dd(o%,X,Y) 3d(o%,X,Y,land(X,Y))  : 3d(o%,X,Y,Z) $6 o%,640+(X-Y)*xscale%,850-(X+Y)*yscale%+Z*zscale% .