home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 101-125 / apd108 / autoexec.amos / autoexec.amosSourceCode next >
AMOS Source Code  |  1994-01-01  |  12KB  |  431 lines

  1. '
  2. '
  3. '                            Music Player V1.0 
  4. '
  5. '                                   By 
  6. '
  7. '                             Leslie  Benzies
  8. '
  9. '                                  1990
  10. '
  11. '              If you find any bugs etc or just want a chat  
  12. '
  13. '                           Phone 0343 541210  
  14. '
  15. '
  16. Dim ZX1(13),ZX2(13),ZY1(13),ZY2(13)
  17. Global MIX,MLOAD,ZX1(),ZX2(),ZY1(),ZY2(),TEMP,VOL
  18. MAIN
  19. Procedure MAIN
  20.    On Error Proc ERR
  21.    'Set up panel display at bottom of screen
  22.    Unpack 9 To 7
  23.    TEMP=8
  24.    VOL=25
  25.    TEMPUP
  26.    VOLUP
  27.    '
  28.    '
  29.    'Mouse can only move on panel
  30.    Limit Mouse 128,229 To 438,296
  31.    '
  32.    '
  33.    'We need to reserve some ZONEs for the buttons on the panel  
  34.    Reserve Zone 14
  35.    Reset Zone 
  36.    For ZNO=2 To 13
  37.       Read ZX1(ZNO),ZX2(ZNO),ZY1(ZNO),ZY2(ZNO)
  38.       Set Zone ZNO,ZX1(ZNO),ZX2(ZNO) To ZY1(ZNO),ZY2(ZNO)
  39.    Next ZNO
  40.    '
  41.    LASTZONE=2
  42.    Ink 1
  43.    DRWZONE[LASTZONE]
  44.    Set Zone 1,0,0 To 10,10
  45.    MIX=0
  46.    CHTO=2
  47.    Do 
  48.       Wait Vbl 
  49.       Tempo TEMP*2
  50.       Mvolume VOL*2.3
  51.       Amreg(0)=63-(VOL*2.3)
  52.       Screen 7
  53.       If MIX>0 Then Inc MIX
  54.       If MIX=1500
  55.          Add CHTO,1,3 To 7
  56.          CHANGE=1
  57.          X=ZX1(CHTO)+148
  58.          Y=ZX2(CHTO)+235
  59.          X Mouse=X
  60.          Y Mouse=Y
  61.          MIX=1
  62.       End If 
  63.       '
  64.       ' Change display ? 
  65.       If Mouse Key=1 or CHANGE=1
  66.          BUTZONE=Hzone(7,X Mouse,Y Mouse)
  67.          If BUTZONE>9
  68.             On BUTZONE-9 Proc TEMPUP,TEMPDOWN,VOLUP,VOLDOWN
  69.          Else 
  70.             If CHANGE=0
  71.                MIX=0
  72.             End If 
  73.             CHANGE=0
  74.             '         BUTZONE=Hzone(7,X Mouse,Y Mouse) 
  75.             If(BUTZONE>0 and BUTZONE<>LASTZONE) or BUTZONE>7
  76.                Ink 15
  77.                DRWZONE[LASTZONE]
  78.                Ink 1
  79.                DRWZONE[BUTZONE]
  80.                LASTZONE=BUTZONE
  81.                CHANGE[BUTZONE]
  82.             End If 
  83.          End If 
  84.       End If 
  85.    Loop 
  86.    ' Zone Data
  87.    Data 14,11,74,24
  88.    Data 14,30,74,42
  89.    Data 14,49,74,61
  90.    Data 84,11,144,24
  91.    Data 84,30,144,43
  92.    Data 84,49,144,62
  93.    Data 235,11,295,23
  94.    Data 235,30,295,43
  95.    Data 172,22,184,31
  96.    Data 187,22,199,31
  97.    Data 172,51,184,60
  98.    Data 187,51,199,60
  99. End Proc
  100. Procedure WIPE
  101.    ' clear old stuff
  102.    Amal Off 
  103.    For HC=48 To 210 Step 5
  104.       SCN=Scin(200,HC)
  105.       If SCN>=0
  106.          Shift Off 
  107.          Screen Close SCN
  108.       End If 
  109.    Next HC
  110.    Rainbow Del 0
  111.    Sprite Off 
  112.    Bob Off 
  113. End Proc
  114. Procedure CHANGE[SET]
  115.    WIPE
  116.    On SET-1 Proc SETMIX,SETSTAREQ,SETSPACE,SETDANCE,SETBIGEQ,SETBALLEQ,LMUSIC,OUTAHERE
  117. End Proc
  118. Procedure OUTAHERE
  119.    Music Off 
  120.    Erase 3
  121.    WIPE
  122.    Screen 7
  123.    Fade 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  124.    Wait 30
  125.    Screen Close 7
  126.    Direct 
  127. End Proc
  128. Procedure SETMIX
  129.    MIX=1499
  130. End Proc
  131. Procedure DRWZONE[ZNUM]
  132.    Shared ZX1(),ZX2(),ZY1(),ZY2()
  133.    Screen 7
  134.    Box ZX1(ZNUM),ZX2(ZNUM) To ZY1(ZNUM),ZY2(ZNUM)
  135. End Proc
  136. Procedure TEMPUP
  137.    If TEMP<26
  138.       Inc TEMP
  139.       Ink 1
  140.       Bar 172,19 To 172+TEMP,20
  141.       Ink 2
  142.       Bar 172+TEMP,19 To 199,20
  143.    End If 
  144. End Proc
  145. Procedure TEMPDOWN
  146.    If TEMP>0
  147.       Dec TEMP
  148.       Ink 1
  149.       Bar 172,19 To 173+TEMP,20
  150.       Ink 2
  151.       Bar 172+TEMP,19 To 199,20
  152.    End If 
  153. End Proc
  154. Procedure VOLUP
  155.    If VOL<26
  156.       Inc VOL
  157.       Ink 1
  158.       Bar 172,48 To 173+VOL,49
  159.       Ink 2
  160.       Bar 172+VOL,48 To 199,49
  161.    End If 
  162. End Proc
  163. Procedure VOLDOWN
  164.    If VOL>0
  165.       Dec VOL
  166.       Ink 1
  167.       Bar 172,48 To 173+VOL,49
  168.       Ink 2
  169.       Bar 172+VOL,48 To 199,49
  170.    End If 
  171. End Proc
  172. Procedure DISPMESSAGE[T$,MB]
  173.    Screen Open 6,640,8,2,Hires
  174.    Screen Display 6,128,400,,
  175.    Curs Off : Flash Off : Cls 0
  176.    Palette $0,$ECA
  177.    Centre T$
  178.    For I=320 To 120 Step -8
  179.       Screen Display 6,128,I,,
  180.       Wait Vbl 
  181.    Next I
  182.    If MB=1
  183.       Repeat 
  184.       Until Mouse Key<>0
  185.    End If 
  186. End Proc
  187. Procedure LMUSIC
  188.    Sprite Off 
  189.    Wait Vbl 
  190.    FIN$=Fsel$("*.ABK","","Load An AMOS Music Bank")
  191.    If FIN$<>""
  192.       Open In 1,FIN$
  193.       For I=1 To 5
  194.          Line Input #1,A$
  195.          TYP$=TYP$+A$
  196.       Next I
  197.       Screen 7
  198.       LF=Lof(1)
  199.       Close 1
  200.       If Instr(TYP$,"Music")>0
  201.          Erase 3
  202.          Wait Vbl 
  203.          If LF>=Chip Free
  204.             DISPMESSAGE["Sorry, not enough memory to load that bank. Press Mouse Button.",1]
  205.          Else 
  206.             DISPMESSAGE["Please Wait, Loading Music....",0]
  207.             Change Mouse 3
  208.             Load FIN$
  209.             Change Mouse 1
  210.             MLOD=1
  211.             Music 1
  212.          End If 
  213.       Else 
  214.          If Instr(TYP$,"AmBk")=0
  215.             DISPMESSAGE["Not an AMOS bank. Press Mouse button.",1]
  216.          Else 
  217.             DISPMESSAGE["This is an AMOS bank, but not music. Press Mouse Button.",1]
  218.          End If 
  219.       End If 
  220.       If MLOD=1
  221.          MIX=1499
  222.       End If 
  223.       Screen Close 6
  224.    End If 
  225. End Proc
  226. Procedure SETSTAREQ
  227.    X=1
  228.    Set Rainbow 0,9,46,"","",""
  229.    Rainbow 0,0,98,44
  230.    For F=0 To 44 Step X
  231.       Read A
  232.       For I=1 To X
  233.          Rain(0,F+I)=A
  234.       Next I
  235.    Next F
  236.    Data $1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F
  237.    Data $10F,$20F,$30F,$40F,$50F,$60F,$70F,$80F,$90F,$A0F,$B0F,$C0F,$D0F,$E0F,$F0F
  238.    Data $F1F,$F2E,$F3D,$F4C,$F5B,$F6A,$F79,$F88,$F97,$FA6,$FB5,$FC4,$FD3,$FE2,$FF1
  239.    Unpack 10 To 0
  240.    Screen Display 0,,,,178
  241.    Screen Open 2,740,44,2,0
  242.    Curs Off : Flash Off : Cls 0 : Palette $0,$AAA,0,0,0,0,0,0,0,$AAA
  243.    Screen Open 1,740,44,2,0 : Double Buffer 
  244.    Curs Off : Flash Off : Cls 0
  245.    Screen Display 1,128,98,320,
  246.    Screen Offset 1,1,
  247.    Screen Display 2,128,98,320,
  248.    Wait Vbl 
  249.    Dual Playfield 2,1
  250.    Wait Vbl 
  251.    Screen 2
  252.    For I=1 To 100
  253.       Plot Rnd(319),Rnd(44)
  254.    Next I
  255.    Screen Copy 2,0,0,319,44 To 2,320,0
  256.    Screen 1
  257.    For I=0 To 3
  258.       Channel I To Bob I
  259.       Bob I,40+(I*70),44,23
  260.       A$="Loop:         If V("+Str$(I)+")<14 Jump Nosound else Let R1= RA ; Let R2=R1/3 ; Let R3=R2*2 ; Let Y=R3+3 "
  261.       A$=A$+"Nosound:   If Y > 43 Jump Downno else Let Y=Y+1"
  262.       A$=A$+"Downno:    Pause ; Jump Loop ; "
  263.       Amal I,A$
  264.    Next I
  265.    Channel 4 To Screen Offset 2
  266.    SC$="Let X=1 ;   Loop:    Let X=X+4 ; If X < 320 Jump Nochx else Let X=1"
  267.    SC$=SC$+"       Nochx:    Pause ; Jump Loop ; "
  268.    Amal 4,SC$
  269.    Screen 0
  270.    For I=1 To 7 : Colour I,I*$222 : Colour I+7,$0 : Next I
  271.    Shift Up 1,1,14,1
  272.    Amal On 
  273. End Proc
  274. Procedure SETDANCE
  275.    Screen Open 0,320,180,2,0 : Double Buffer : Curs Off : Flash Off : Cls 0
  276.    Screen To Back 
  277.    Palette $0,$AAA
  278.    Screen Display 0,,48,,180
  279.    For I=0 To 3
  280.       Channel I To Bob I
  281.       Bob I,20+I*80,10,17
  282.       A$="   Loop:      Let R"+Chr$(I+65)+"=0 ; If V("+Str$(I)+") < 14 Jump Nosound"
  283.       A$=A$+"           Let R"+Chr$(I+65)+"=1 ; Anim 1,(17,4)(18,4)(19,4)(20,4)(21,4)(22,4); "
  284.       A$=A$+"Nosound:   Pause ; Jump Loop"
  285.       Amal I,A$
  286.    Next I
  287.    For B=0 To 1
  288.       For I=0 To 3
  289.          Channel I+4+(B*4) To Bob I+4+(B*4)
  290.          If B mod 2=0 Then OFF=20 Else OFF=0
  291.          Bob I+4+(B*4),20+I*80+OFF,64+B*54,17
  292.          A$="   Loop:      If R"+Chr$(I+65)+"=0 Jump Nosound"
  293.          A$=A$+"           Anim 1,(17,4)(18,4)(19,4)(20,4)(21,4)(22,4); "
  294.          A$=A$+"Nosound:   Pause ; Jump Loop"
  295.          Amal I+4+(B*4),A$
  296.       Next I
  297.    Next B
  298.    Amal On 
  299. End Proc
  300. Procedure SETBIGEQ
  301.    X=3
  302.    Set Rainbow 0,0,186,"","",""
  303.    Rainbow 0,0,38,184
  304.    For F=0 To 183 Step X
  305.       Read A
  306.       For I=0 To X-1
  307.          Rain(0,F+I)=A
  308.       Next I
  309.    Next F
  310.    Data $1FF,$1FF,$2FF,$3FF,$4FF,$5FF,$6FF,$7FF,$8FF,$9FF,$AFF,$BFF,$CFF,$DFF,$EFF,$FFF
  311.    Data $FFE,$FFD,$FFC,$FFB,$FFA,$FF9,$FF8,$FF7,$FF6,$FF5,$FF4,$FF3,$FF2,$FF1,$FF0,$FF0,$FF0,$FF0
  312.    Data $FF0,$FF1,$FF2,$FF3,$FF4,$FF5,$FF6,$FF7,$FF8,$FF9,$FFA,$FFB,$FFC,$FFD,$FFE,$FFF
  313.    Data $EFF,$DFF,$CFF,$BFF,$AFF,$9FF,$8FF,$7FF,$6FF,$5FF,$4FF,$3FF,$2FF,$1FF,$1FF
  314.    Screen Open 0,320,400,4,0 : Curs Off : Flash Off : Cls 0
  315.    Palette $0,$8,3,$F,0,0,0,0,0,$8,$3,$F
  316.    Screen Display 0,,44,,176
  317.    Screen Open 1,320,400,4,0 : Curs Off : Flash Off : Cls 0
  318.    Screen Display 1,,44,,176
  319.    Wait Vbl 
  320.    Dual Playfield 0,1
  321.    Wait Vbl 
  322.    For I=0 To 1
  323.       Screen I
  324.       For Y=0 To 170 Step 15
  325.          Ink 1
  326.          X1=30+(I*160)
  327.          Y1=Y+170
  328.          X2=30+(I*160)+100
  329.          Y2=Y+180
  330.          Bar X1,Y1 To X2,Y2
  331.          Ink 2
  332.          Bar X1,Y1 To X2,Y1+1
  333.          Bar X1,Y1 To X1+1,Y2
  334.          Ink 3
  335.          Bar X2-1,Y1 To X2,Y2
  336.          Bar X1,Y2-1 To X2,Y2
  337.       Next Y
  338.    Next I
  339.    For I=0 To 1
  340.       Channel I To Screen Offset I
  341.       A$="              Let Y=170   ;  Let R0=0 "
  342.       A$=A$+"Loop:      If R4=V("+Str$(I*2)+") > 0 Jump Setsound ; If V("+Str$((I*2)+1)+") > 0 Jump Setsound"
  343.       A$=A$+"           Let R0=R0+1 ; If R0 < 3 Jump Notobig else Let R0=0"
  344.       A$=A$+"Notobig:   If Y < 15     then Jump Greater else If R0 <> 0 Jump Greater ; Let Y=Y-15"
  345.       A$=A$+"Greater:   Pause       ; Jump Loop"
  346.       A$=A$+"Setsound:  Let R4=RA/6 ; Let R5=R4*15 ; Let Y=170-R5  ; Jump Greater"
  347.       Amal I,A$
  348.    Next I
  349.    Channel 2 To Rainbow 0
  350.    A$="Let X=0 ; Loop: For R0=0 To 46 ; Let X=R0*4 ; Pause ; Next R0 ; Jump Loop"
  351.    Amal 2,A$
  352.    Amal On 
  353. End Proc
  354. Procedure SETBALLEQ
  355.    X=4
  356.    Set Rainbow 0,0,180,"","",""
  357.    Rainbow 0,0,49,180
  358.    For F=0 To 174 Step X
  359.       Read A
  360.       For I=1 To X
  361.          Rain(0,F+I)=A
  362.       Next I
  363.    Next F
  364.    Data $1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F
  365.    Data $10F,$20F,$30F,$40F,$50F,$60F,$70F,$80F,$90F,$A0F,$B0F,$C0F,$D0F,$E0F,$F0F
  366.    Data $F1F,$F2E,$F3D,$F4C,$F5B,$F6A,$F79,$F88,$F97,$FA6,$FB5,$FC4,$FD3,$FE2,$FF1,$FF1,$FF1
  367.    Screen Open 0,352,176,8,0
  368.    Double Buffer 
  369.    Curs Off : Flash Off : Cls 0
  370.    Palette 0,0,$3,$6,$9,$F
  371.    For I=0 To 3
  372.       Channel I To Bob I
  373.       Bob I,Rnd(300),Rnd(120),15
  374.       X1=Rnd(2)+2 : X1$=Str$(X1)
  375.       Y1=Rnd(2)+2 : Y1$=Str$(Y1)
  376.       A$="            Let R0=4 ; Let R1="+X1$+"; Let R2="+Y1$
  377.       A$=A$+"Boop:    If V("+Str$(I)+")=0 Jump Nosound else Let R0=4"
  378.       A$=A$+"Nosound: If R0>32 Jump Samespd else Let R0=R0+1"
  379.       A$=A$+"Samespd: Let A=R0/2"
  380.       A$=A$+"         Let X=X+R1 ; Let Y=Y+R2 ; "
  381.       A$=A$+"         If X >   0 Jump Lok else Let R1= "+X1$
  382.       A$=A$+"Lok:     If X < 320 Jump Rok else Let R1=-"+X1$
  383.       A$=A$+"Rok:     If Y > -20 Jump Uok else Let R2= "+Y1$
  384.       A$=A$+"Uok:     If Y < 160 Jump Dok else Let R2=-"+Y1$
  385.       A$=A$+"Dok:     Pause ; Jump Boop "
  386.       Amal I,A$
  387.    Next I
  388.    Amal On 
  389. End Proc
  390. Procedure SETSPACE
  391.    Screen Open 0,352*2,180,2,0
  392.    Screen Display 0,128+16,38,320,
  393.    Curs Off : Flash Off : Cls 0
  394.    Palette 0,$888,,,,,,,,$333,,,,,,,0,$ECA,$333,$444,$555,$666,$777,$888,$900,$F40,$F90,$5,$F,$8F,$80,$F00
  395.    Flash 31,"(f00,3)(d00,3)(b00,3)(900,3)(700,3)(500,3)(300,3)(100,3)(300,3)(500,3)(700,3)(900,3)(b00,3)(d00,3)"
  396.    Screen Open 1,352*2,180,2,0
  397.    Screen Display 1,128+16,38,320,
  398.    Curs Off : Flash Off : Cls 0
  399.    Wait Vbl 
  400.    Dual Playfield 0,1
  401.    Wait Vbl 
  402.    For SC=0 To 1
  403.       Screen SC
  404.       For I=1 To 100
  405.          Plot Rnd(352),Rnd(180)
  406.       Next I
  407.       Screen Copy SC,0,0,351,180 To SC,352,0
  408.    Next SC
  409.    For I=0 To 3
  410.       Channel I To Sprite I+8
  411.       Sprite I+8,0,48+I*40,1
  412.       A$="Let A=1 ; Let X="+Str$(Rnd(400))+" ; Let R0=40 ; Loop: If V("+Str$(I)+")=0 Jump Unsound else Let R0=63-RA"
  413.       A$=A$+"Unsound: If R0<7 Jump Samespd else Let R0=R0-1"
  414.       A$=A$+"Samespd: Let R1=R0/6 ; Let X=X+R1 ; If X < 450 Jump Notoff else Let X=70"
  415.       A$=A$+"Notoff:  If X > 50 Jump Bound Let X=450 ; "
  416.       A$=A$+"Bound:   Pause ; Jump Loop "
  417.       Amal I,A$
  418.    Next I
  419.    Channel 4 To Screen Offset 0
  420.    Channel 5 To Screen Offset 1
  421.    SC$="Loop: For R0 = 0 To 88  ; Let X=R0*4+1 ; Next R0 ; Jump Loop"
  422.    Amal 4,SC$
  423.    SC$="Loop: For R0 = 0 To 176 ; Let X=R0*2+1 ; Next R0 ; Jump Loop"
  424.    Amal 5,SC$
  425.    Amal On 
  426. End Proc
  427. Procedure ERR
  428.    DISPMESSAGE["Error "+Str$(Errn)+" has occured. Press Mouse Key.",1]
  429.    Screen Close 6
  430.    Resume Next 
  431. End Proc