home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 476-500 / apd496 / yachting.amos / yachting.amosSourceCode
AMOS Source Code  |  1986-08-03  |  16KB  |  512 lines

  1. '
  2. '  *********************************************************************   
  3. '  *  LA OROYA presents:                                               * 
  4. '  *  --------                       written by Stephan Scholz  -1993- *                           
  5. '  *                                                                   *                       
  6. '  *                    >>>  Y A C H T I N G  <<<                      *                                                                                                             
  7. '  *                                                                   *         
  8. '  *  A sailing simulator on a lake, with a Vista generated background *         
  9. '  *  scroll. You are on your yacht, about to sail round a three-buoy  *             
  10. '  *  course, competing against a computer-driven adversary. If you    *   
  11. '  *  win two out of three laps, you are the champion.                 *         
  12. '  *                                                                   *         
  13. '  *  Controls: rudder - sail - spinnaker. (Click mouse on chevrons.)  *                     
  14. '  *  It's a fine day for sailing, with a 12 knot wind - Good luck!    * 
  15. '  *                                                                   *                                                           
  16. '  *********************************************************************   
  17. '              
  18. Set Buffer 40 : Dim H(360,17) : Dim H#(360,2) : Dim BUOY(3,3) : Dim CLV(16)
  19. Proc SAILDATA : Proc SCRNOBJLDR
  20. Sam Play 1,1,3000 : Sam Play 2,1,4000
  21. Proc SETTINGS : Proc COMMENCE
  22. QHF=182 : QCR=360 : QMV=180 : QQV=90 : QFW=30 : QFR=2
  23. QFF#=0.025 : QHR#=68.2
  24. Do 
  25. For DHO=1 To 2
  26. For HO=0 To 9
  27.    Add HOR,OSCI
  28.    Add A,OSCI*PITCH
  29.    HR#= Extension_4_01D0(0)
  30.    BACKX=HR#/QHR#
  31.    HH=HR#/QHF
  32.    WW=ANGW-HH
  33.    If WW<1 Then WW=WW+QCR
  34.    TK=Sgn(WW-QMV)
  35.    SIL=QMV-(SAIL*TK)
  36.    TI=QMV*TK
  37.    QWW=QMV-WW
  38.    VES=VE#*VE#
  39.    FAPWIND=(SWIND)+(VES)-QFR*(WIND*VE#*Cos(QWW))
  40.    APWIND#=Sqr(FAPWIND)
  41.    AWA=WW-(QQV-Acos((VE#*Sin(QWW))/APWIND#))
  42.    AWT=AWA-TI
  43.    INS=(AWT-SIL)*-TK
  44.    If INS<1 : SIL=AWT : INS=1 : End If 
  45.    FAR=H(INS,15)
  46.    FSAIL=H(INS,14)*Abs(Sin(SIL))
  47.    PROP#=FSAIL*FAPWIND*H#(WW,SPA)
  48.    VE#=VE#-(Sgn(VE#-PROP#)*QFF#)
  49.    VE=Abs(VE#*QFW)
  50.    If Mouse Key<>0
  51.     CONTROL
  52.    Else 
  53.     Add F,-Sgn(F)
  54.    End If 
  55.      G=F+F*H(VE,1)
  56.      RUD=QMV-F
  57.      Add B,G
  58.    Extension_4_01A6 0,A,B,C
  59.    Extension_4_0100 0,VE
  60.       Add VE1,Sgn(H(WW1,13)-VE1)
  61.        Extension_4_01A6 1,A,B1,C
  62.        Extension_4_0100 1,VE1
  63.    Cls 0
  64.     Extension_4_0318 
  65.     Extension_4_049E 1,BACKX,0,320,85 To 0,HOR
  66.    Screen Copy 2,0,0,320,66 To 0,0,139
  67.    Screen Copy 3,HH,0,H(HH,2),9 To 0,94,143
  68.    Locate 14,23 : Print SPIN$
  69.    Plot BX,SY,13 : Draw To H(VE,16),H(VE,17)
  70.    Plot H(AWA,3),H(AWA,4),7 : Draw To H(AWA,5),H(AWA,6)
  71.    Plot PX,PY,FAR : Draw To H(SIL,7),H(SIL,8)
  72.    Plot PX,RY,13 : Draw To H(RUD,11),H(RUD,12)
  73.    Plot CX1,CZ1,7 : Plot CX,CZ,13 : Plot HX,HZ,4
  74.    Screen Swap : Wait Vbl 
  75. Next HO
  76.    If VE#<0 Then VE#=0
  77.    If AWA=180 Then Add F,5
  78.    If Extension_4_0344(0)>0 Then CRASH
  79.    OSCI=-OSCI
  80.    SHIPS : ROBWIND
  81. Next DHO
  82.  If ARRIBA>0 : Dec ARRIBA : Sam Play 8,2,3000 : Sam Play 4,2,6000
  83.   If ARRIBA=0
  84.     If SPA=2 : SPA=1 : SPIN$="v" : Sam Play 8,2,3000 : Sam Play 4,2,4000
  85.     Else 
  86.     SPA=2 : SPIN$="^" : Sam Play 8,2,5000 : Sam Play 4,2,6000 : End If 
  87.   End If 
  88.  End If 
  89.  Proc SCANNER
  90.  Sam Play 1,1,CH1 : Sam Play 2,1,CH2
  91. Loop 
  92. Procedure SCANNER
  93. Shared LX,LY,LZ,LX1,LZ1,CX,CZ,CX1,CZ1,MULT,HX,HZ,X6,Z6
  94.  LX= Extension_4_0114(0)
  95.  LZ= Extension_4_013C(0)
  96.   Extension_4_00EC 0,LX,LY,LZ
  97.    CX=59+LX/MULT : CZ=170-LZ/MULT
  98.      If CX>87 Then CX=87
  99.      If CX<31 Then CX=31
  100.      If CZ>198 Then CZ=198
  101.      If CZ<142 Then CZ=142
  102.    CX1=59+LX1/MULT : CZ1=170-LZ1/MULT
  103.      If CX1>87 Then CX1=87
  104.      If CX1<31 Then CX1=31
  105.      If CZ1>198 Then CZ1=198
  106.      If CZ1<142 Then CZ1=142
  107.    HX=59+X6/MULT : HZ=170-Z6/MULT
  108. End Proc
  109. Procedure CRASH
  110. Shared LX,LY,LZ,LX1,LY1,LZ1,CHOCA,F,HR#,VE#,CRA,HH,HH1,CRA
  111. Sam Play 15,3,4000
  112. Inc CHOCA
  113. N= Extension_4_0344(0)
  114. CRA= Extension_4_0258(0,N)-HR#
  115. F=40*-Sgn(CRA)
  116. End Proc
  117. Procedure SHIPS
  118. Shared LX1,LX,LZ1,LZ,LY,LY1,A,B,B1,WW1,HH1,TK1,ANGW,RADIUS
  119. Shared X5,Y5,Z5,X6,Y6,Z6,BO1,BO0,BUOY(),BCOUNT,B1COUNT,CHOCA
  120. Shared WON,LOST,LAPS
  121.    LX1= Extension_4_0114(1)
  122.    LZ1= Extension_4_013C(1)
  123.    B1= Extension_4_0262(1,X5,Y5,Z5)
  124.   MIRA:
  125.     Extension_4_01A6 1,A,B1,C
  126.    HH1= Extension_4_01D0(1)/182
  127.    WW1=ANGW-HH1
  128.    If WW1<1 Then WW1=WW1+360
  129.    If WW1>180 Then WW1=360-WW1
  130.    TK1=182*Sgn(WW1-180)
  131.    HAUL=40+Rnd(5)
  132.    If WW1<HAUL
  133.      B1=B1+((Rnd(15)+HAUL)-WW1*TK1)
  134.      Goto MIRA
  135.    End If 
  136.      If Extension_4_028E(1,X5,Y5,Z5)<RADIUS-1000
  137.       Inc B1COUNT
  138.       If BO1<3
  139.        Inc BO1 : X5=BUOY(BO1,1) : Y5=BUOY(BO1,2) : Z5=BUOY(BO1,3)
  140.       End If 
  141.     End If 
  142.   Extension_4_00EC 1,LX1,LY1,LZ1
  143.     If Extension_4_028E(0,X6,Y6,Z6)<RADIUS
  144.      Inc BCOUNT : Bell 50
  145.      If BO0<3
  146.       Inc BO0 : X6=BUOY(BO0,1) : Y6=BUOY(BO0,2) : Z6=BUOY(BO0,3)
  147.      End If 
  148.     End If 
  149.    If BCOUNT=3
  150.     Clear Key : Inc LOST : Bell 50
  151.     Locate 27,19 : Print "Collided:";CHOCA
  152.     Locate 27,20 : Print "You've lost."
  153.     If B1COUNT<3
  154.      Inc WON : Dec LOST
  155.      Locate 34,20 : Print "won!!"
  156.     End If 
  157.     Screen Swap : Wait 150 : Inc LAPS
  158.     Locate 27,19 : Print "Laps won :";WON
  159.     Locate 27,20 : Print "Laps lost:";LOST
  160.     Screen Swap : Bell 60 : Wait 150
  161.     If LAPS<3
  162.      If WON<2
  163.       Locate 27,19 : Print "Get ready to"
  164.       Locate 27,20 : Print "race again. "
  165.       Screen Swap : Bell 45 : Wait 150
  166.      End If 
  167.     End If 
  168.      If LOST>1
  169.       Locate 27,19 : Print "Better luck "
  170.       Locate 27,20 : Print "next time..!"
  171.       Inc LAPS : Screen Swap : 
  172.       Sam Play 15,5,8000 : Wait 67
  173.       Sam Play 15,6,7000 : Wait Key 
  174.       If Key State(16) : End : End If 
  175.      End If 
  176.    If WON>1 : Locate 27,19 : Print "Well raced.."
  177.     Locate 27,20 : Print "Champion !!!"
  178.     Inc LAPS : Screen Swap : 
  179.     Sam Play 4 : Wait Key 
  180.     If Key State(16) : End : End If 
  181.    End If 
  182. 'you start the next round    
  183.    BCOUNT=0 : B1COUNT=0
  184. 'new race
  185.    If LAPS>2 : LAPS=0 : WON=0 : LOST=0 : End If 
  186. 'wind direction change 
  187.    ANGW=ANGW+Rnd(90)-45
  188.    If ANGW<1 : ANGW=ANGW+360 : End If 
  189.    If ANGW>360 : ANGW=ANGW-360 : End If 
  190.    Proc DARK
  191.    Proc SETTINGS
  192.    Proc COMMENCE
  193.    End If 
  194. End Proc
  195. Procedure ROBWIND
  196. Shared ANGW,VE#,VE1,SV0,SV1,DSE,CH1,CH2
  197.    DSE= Extension_4_007E(0,1)
  198.    SV0= Extension_4_0258(0,1)/182
  199.    SV1= Extension_4_0258(1,0)/182
  200.    If SV0<0 Then Add SV0,360
  201.    If SV1<0 Then Add SV1,360
  202.   If DSE<10000
  203.    Add SV0,-ANGW
  204.    If Abs(SV0)<30
  205.      If VE#>0.5
  206.       VE#=VE#-0.5
  207.       CH1=3000*(1+VE#/32)
  208.       CH2=3000*(1+VE#/24)
  209.       Pop Proc
  210.      End If 
  211.    End If 
  212.     Add SV1,-ANGW
  213.    If Abs(SV1)<30
  214.      If VE1>20
  215.       Add VE1,-20
  216.    CH1=3000*(1+VE#/3)
  217.    CH2=3000*(1+VE#/4)
  218.       Pop Proc
  219.      End If 
  220.     End If 
  221.   End If 
  222.   CH1=3000*(1+VE#/8)
  223.   CH2=3000*(1+VE#/10)
  224. End Proc
  225. Procedure CONTROL
  226. Shared FOCK,SAIL,F,FM,SPA,SPIN$,ARRIBA
  227.  X=X Mouse/8 : Y=Y Mouse/8
  228. If Y>28
  229.  If X>37
  230.    If F<FM : Inc F : Pop Proc : End If 
  231.    Else 
  232.    If F>-FM : Dec F : Pop Proc : End If 
  233.  End If 
  234. End If 
  235. If X>40
  236.   If Y<26
  237.    If SAIL<90 : Inc SAIL : Sam Play 8,2,4000 : Sam Play 2,2,6000 : Pop Proc : End If 
  238.   Else 
  239.    If SAIL>0 : Sam Play 8,2,5000 : Sam Play 2,2,7000 : Dec SAIL : Pop Proc : End If 
  240.   End If 
  241. End If 
  242. If X<32
  243.  Sam Play 8,2,5000 : Sam Play 2,2,3000 : ARRIBA=4
  244.  SPIN$="*"
  245.  End If 
  246. End Proc
  247. Procedure SETTINGS
  248. Shared LX,LX1,LY,LY1,LZ,LZ1,BUOY(),BO0,BO1,FURTHER,RADIUS,FACTOR
  249. Shared X5,Y5,Z5,X6,Z6,Y6,SAIL,FM,SPA,SPIN$,VE,VE#,VE1
  250.    LX=FURTHER+12000
  251.    LY=200
  252.    LX1=FURTHER+14000
  253.    LY1=500
  254.    LZ=-FURTHER-20000
  255.    LZ1=-FURTHER-15000
  256.     Extension_4_00EC 0,LX,LY,LZ
  257.     Extension_4_01A6 0,0,0,0
  258.     Extension_4_00EC 1,LX1,LY1,LZ1
  259.     Extension_4_01A6 1,0,0,0
  260. 'areas behind each buoy to detect if ships have passed 
  261. ' including pythagoras correction factor for last two buoys. 
  262. RADIUS=5000 : FACTOR=(Sqr((RADIUS*RADIUS)*2))-RADIUS
  263. BUOY(1,1)=0 : BUOY(1,2)=0 : BUOY(1,3)=FURTHER+RADIUS
  264. BUOY(2,1)=-FURTHER-RADIUS+FACTOR : BUOY(2,2)=0 : BUOY(2,3)=-FURTHER-RADIUS+FACTOR
  265. BUOY(3,1)=FURTHER+RADIUS-FACTOR : BUOY(3,2)=0 : BUOY(3,3)=-FURTHER-RADIUS+FACTOR
  266. 'which buoy are they going for at start: 
  267.    BO0=1 : BO1=1
  268. 'buoy homing indicators for each ship: 
  269.    X5=BUOY(BO1,1) : Y5=BUOY(BO1,2) : Z5=BUOY(BO1,3)
  270.    X6=X5 : Y6=Y5 : Z6=Z5
  271. 'initial boom angles 
  272.    SAIL=24
  273. 'maximum rudder angle
  274.    FM=20
  275. 'spinnaker stowed at start 
  276.    SPIN$="v" : SPA=1
  277. 'no speed at start 
  278.    VE=0 : VE#=0 : VE1=0
  279.    Pen 3
  280. End Proc
  281. Procedure SCRNOBJLDR
  282. Shared FURTHER,MULT
  283. 'Load sound effects
  284. Load "Yachting:Samples/Sea1.Abk"
  285. 'background landscape loading and preparation of extra long strip. 
  286. Screen Open 0,320,256,16,Lowres : Flash Off : Curs Off 
  287. Load Iff "Yachting:Iffs/Graph.Iff" : Wait Key 
  288. Load Iff "Yachting:Iffs/Back.Iff",0
  289. Screen Open 1,960,86,16,Lowres : Flash Off : Curs Off : Get Palette 0
  290. Screen Copy 0,0,0,320,85 To 1,0,0
  291. Screen Copy 0,0,86,320,170 To 1,320,0
  292. Screen Copy 0,0,171,320,256 To 1,640,0
  293. Screen Hide 1 : Screen 0
  294. Screen Display 0,,,320,205
  295. 'dashboard loading and copying to a storage screen 
  296. Load Iff "Yachting:IFFs/DashboardC.IFF"
  297. Screen Open 2,320,66,16,Lowres : Flash Off : Curs Off 
  298. Screen Copy 0,0,139,320,256 To 2,0,0
  299. 'compass screen strip loading and preparation
  300. Screen Open 3,440,32,16,Lowres : Flash Off : Curs Off 
  301. Screen Hide 2 : Screen 3
  302. Load Iff "Yachting:Iffs/Brujula.IFF"
  303. Screen Copy 3,0,10,225,21 To 3,180,0
  304. Screen Hide 3 : Screen 0
  305.    Extension_4_0054 140 : Double Buffer : Autoback 0
  306.    Extension_4_04D6 "Yachting:objects"
  307.    Extension_4_0016 "buoy1"
  308.    Extension_4_0016 "buoy2"
  309.    Extension_4_0016 "buoy3"
  310.    Extension_4_0016 "yacht"
  311. FURTHER=100000
  312. MULT=FURTHER/16
  313.    Extension_4_0036 1,"yacht",FURTHER+15000,0,FURTHER-5000,0,0,0
  314.    Extension_4_0036 2,"buoy1",0,H,FURTHER,0,0,0
  315.    Extension_4_0036 3,"buoy2",-FURTHER,0,-FURTHER,0,0,0
  316.    Extension_4_0036 4,"buoy3",FURTHER,0,-FURTHER,0,0,0
  317.   For N=2 To 4
  318.    Extension_4_0328 N,0,0,0,0,700
  319.   Next N
  320.    Extension_4_0328 0,0,0,0,500,500
  321.    Extension_4_0328 1,0,0,0,1400,700
  322.    Extension_4_0328 1,1,0,0,-1400,700
  323.    Extension_4_0328 1,2,0,0,0,700
  324. End Proc
  325. Procedure SAILDATA
  326. Shared PX,PY,BX,BY,RY,SY,NAN#,NIN#,NON#,H(),H#()
  327. Shared WIND,SWIND,SAIL,ANGW,OSCI,HOR,PITCH
  328.  Extension_4_0548 : Degree : Curs Off : Flash Off : Paper 0 : Ink 0,9 : Cls 0
  329.    Pen 11 : Locate 0,6 : Print "          La Oroya presents:" : Print : Print 
  330.    Pen 4 : Print "        * * *   YACHTING   * * *" : Print : Print 
  331.    Pen 15 : Print "  Greetings to  Mad Max and Kid Blast" : Print : Print 
  332.    Randomize Timer : WIND=12 : SWIND=WIND*WIND
  333. 'wind direction
  334.    ANGW=Rnd(360)
  335.    If ANGW=180 or ANGW=0 Then ANGW=ANGW+1
  336.    Pen 4 : Print "  Wind direction:";ANGW;" deg. N" : Print 
  337.    Print "  Wind speed    :";WIND;" Kts."
  338. 'Horizon oscillation and its relationship to ship's pitching 
  339.    OSCI=1 : HOR=-12 : PITCH=72
  340. 'points on screen for navigation instruments:  
  341.    PX=176 : PY=171 : BY=155 : RY=189 : BX=116 : SY=178
  342. 'lengths of pointers 
  343.    NIN#=17 : NON#=19
  344.    For N=0 To 360
  345.        SN#=Sin(N)
  346.        CN#=-Cos(N)
  347. 'rudder effect depends on speed
  348.        H(N,1)=N/10
  349. 'compass instrument data:      
  350.        H(N,2)=N+45
  351. 'main navigation instrument: 
  352. 'apparent wind indicator data: 
  353.        H(N,3)=PX+NON#*SN#
  354.        H(N,4)=PY+NON#*CN#
  355.        H(N,5)=H(N,3)+NIN#/3*SN#
  356.        H(N,6)=H(N,4)+NIN#/3*CN#
  357. 'boom position indicator data:   
  358.        H(N,7)=PX+16*SN#
  359.        H(N,8)=PY+16*CN#
  360. 'jib position indicator data (unused in this version):     
  361.        H(N,9)=PX+12*SN#
  362.        H(N,10)=BY+12*CN#
  363. 'rudder indicator data data:   
  364.        H(N,11)=PX+7*SN#
  365.        H(N,12)=RY+7*CN#
  366. 'speed indicator data: 
  367.        H(N,16)=BX+NON#*-SN#
  368.        H(N,17)=SY+NON#*-CN#
  369. 'working factor accounting for resistances multiplied by 
  370. 'wave and wind resistance close hauled, or their help if 
  371. 'running free. This is called if spinnaker is not up.
  372.        H#(N,1)=0.0007+(0.00014*CN#)
  373.    Next N
  374. 'data for automatic ships' speed depending on real wind direction  
  375. 'based on modern yachtspeed graph (with spinnaker for aft winds):          
  376.  Restore AUTOS
  377.    For N=30 To 180
  378.        Read A#
  379.        H(N,13)=A#*2.1
  380.    Next N
  381.  AUTOS:
  382.   Data 0,0,0,5,10,15,20,25,30,31
  383.   Data 32,36,40,44,46,50,53,55,58,60
  384.   Data 62,64,66,68,70,71,72,73,74,75
  385.   Data 76,77,78,79,80,80,81,81,82,82
  386.   Data 83,83,84,84,85,85,86,87,88,89
  387.   Data 90,91,92,93,94,95,96,97,98,99
  388.   Data 100,100,101,101,102,102,103,103,104,104
  389.   Data 105,105,106,106,107,107,108,108,109,109
  390.   Data 110,111,112,113,114,115,116,117,117,118
  391.   Data 118,119,119,120,120,121,121,122,122,123
  392.   Data 123,124,124,125,125,125,124,124,123,123
  393.   Data 122,122,121,121,120,120,119,118,117,116
  394.   Data 115,114,113,112,111,110,109,108,106,104
  395.   Data 102,100,98,96,94,92,90,88,86,84
  396.   Data 82,81,80,79,78,77,76,76,75,75,75
  397.   Restore SAILS
  398.    For N=0 To 180
  399.      Read A
  400.      H(N,14)=A
  401.      If N<10 Then H(N,15)=15 : Goto RAUS
  402.      If N<26 Then H(N,15)=7 : Goto RAUS
  403.      H(N,15)=6
  404.      RAUS:
  405.    Next N
  406. 'your sail efficiency data, depending on the angle of incidence
  407. 'of the wind. Between 10 and 25 deg. there is laminar flow, and  
  408. 'sail efficiency lies between 89 and 100% for 15 to 22 degrees.
  409.  SAILS:
  410.    Data 0,0,0,0,0,0,0,0,0,0
  411.    Data 80,81,83,85,87,89,91,93,95,97
  412.    Data 98,99,100,99,98,97,70,70,70,70
  413.    Data 70,70,70,70,70,70,70,70,70,70
  414.    Data 70,70,70,70,70,70,71,71,72,72
  415.    Data 73,73,74,74,75,75,75,75,75,75
  416.    Data 75,75,75,75,75,75,75,75,75,75
  417.    Data 75,75,75,75,75,75,75,75,75,75
  418.    Data 75,76,77,78,79,80,80,80,80,80
  419.    Data 79,78,77,76,75,74,73,72,71,70
  420.    Data 69,68,67,66,65,64,63,62,61,60
  421.    Data 59,58,57,56,55,54,53,52,51,50
  422.    Data 49,48,47,46,45,44,43,42,41,40
  423.    Data 39,38,37,36,35,34,33,32,31,30
  424.    Data 29,28,27,26,25,24,23,22,21,20
  425.    Data 19,18,17,16,15,14,13,12,11,10
  426.    Data 9,8,7,6,5,4,3,2,1,0
  427.    Data 0,0,0,0,0,0,0,0,0,0,0
  428. 'The following factor is a percentage increase on h#(n,1)  
  429. 'which controls resistance and wind+wave effect times a constant.    
  430. 'The table gives the percentage increase and the multiplier is 
  431. 'the change in the constant, as speed also changes resistance. The 
  432. 'result h#(n,2) is called by SPA if spinnaker is up, instead of h#(n,1).       
  433.    For N=0 To 89
  434.      H#(N,2)=-1
  435.      H#(360-N,2)=-1
  436.    Next N
  437. Restore SPINNAKER
  438.    For N=90 To 180
  439.      Read A#
  440.      H#(N,2)=H#(N,1)+H#(N,1)*A#*0.024
  441.      H#(360-N,2)=H#(N,2)
  442.    Next N
  443. SPINNAKER:
  444.  Data 1,1,2,2,3,3,4,4,5,5
  445.  Data 6,6,7,7,8,8,9,9,10,10
  446.  Data 11,12,13,14,15,16,17,18,19,20
  447.  Data 22,24,26,28,30,32,34,36,38,40
  448.  Data 42,44,46,48,50,51,52,53,54,55
  449.  Data 56,58,60,62,64,66,68,70,72,75
  450.  Data 78,79,80,81,82,83,84,85,86,87
  451.  Data 88,87,86,85,84,83,82,81,80,79
  452.  Data 78,76,74,72,70,69,68,67,66,66,66
  453. End Proc
  454. Procedure COMMENCE
  455. Shared A,B,F,HOR,OSCI,PITCH,H(),H#(),ANGW
  456. Shared BX,SY,PX,RY,DAY
  457. B=0
  458. Do 
  459. For M=1 To 2
  460. For N=0 To 9
  461.    Add HOR,OSCI : Add A,OSCI*PITCH
  462.    HR#= Extension_4_01D0(0) : BACKX=HR#/68.2 : HH=HR#/182 : WW=ANGW-HH
  463.    If WW<1 Then WW=WW+360
  464.    If Mouse Key<>0 : CONTROL : Else Add F,-Sgn(F) : End If : Add B,F*10
  465.    Cls 0 : Extension_4_01A6 0,A,B,C : Extension_4_01A6 1,A,B,C : Extension_4_0318 
  466.     Extension_4_049E 1,BACKX,0,320,85 To 0,HOR
  467.    Screen Copy 2,0,0,320,66 To 0,0,139
  468.    Screen Copy 3,0,0,45,9 To 0,94,143
  469.    Screen Copy 3,HH,0,H(HH,2),9 To 0,94,143
  470.    Locate 27,19 : Print "Set heading,"
  471.    Locate 27,20 : Print "Press space."
  472.    Locate 14,23 : Print SPIN$
  473.    Plot BX,SY,13 : Draw To H(VE,16),H(VE,17)
  474.    Plot H(WW,3),H(WW,4),7 : Draw To H(WW,5),H(WW,6)
  475.    Plot PX,RY,13 : Draw To H(180,11),H(180,12)
  476.    If DAY=1 Then DAY=0 : Proc LIGHT
  477.    Screen Swap : Wait Vbl 
  478. Next N
  479.    OSCI=-OSCI
  480. Next M
  481. 'stop playing  
  482.       If Key State(16) Then End 
  483.    Sam Play 1,1,3000 : Sam Play 2,1,4000
  484.       If Key State(64) Then HOR=-12 : OSCI=1 : A=0 : Exit 
  485. Loop 
  486. End Proc
  487. Procedure DARK
  488. Shared CLV(),DAY
  489. For N=0 To 15 : CLV(N)=Colour(N) : Next N : DAY=1
  490. Do 
  491. For N=0 To 15
  492. If Colour(N)=0 Then COUNT=COUNT+1
  493. If COUNT=16 Then COUNT=0 : Pop Proc
  494. CL=Colour(N)
  495. RED=256
  496. If CL<256 Then RED=16
  497. If RED=16 and CL<16 Then RED=1
  498. CL=CL-RED
  499. If CL<0 Then CL=0
  500. Colour(N),CL
  501. For P=1 To 40 : Next P
  502. Next N
  503. COUNT=0
  504. Loop 
  505. End Proc
  506. Procedure LIGHT
  507. Shared CLV()
  508. For N=0 To 15
  509. Colour(N),CLV(N)
  510. For P=1 To 400 : Next P
  511. Next N
  512. End Proc