home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / games / blocktris.amos / blocktris.amosSourceCode < prev    next >
AMOS Source Code  |  1978-02-21  |  11KB  |  373 lines

  1. '     ___     ___  
  2. '      |  |_| |_ 
  3. '      |  | | |__      ****  *      ***  ****  *****     
  4. '                      *   * *     *   * *   * *   
  5. '                      *   * *     *   * *   * * 
  6. '                      ****  *     ***** *   * ****  
  7. '                      *   * *     *   * *   * * 
  8. '                      *   * *     *   * *   * * 
  9. '                      ****  ***** *   * ****  ***** 
  10. '
  11. '                      presents ... AMOS game #6 ... 
  12. '
  13. '                      +---------------------------+ 
  14. '                      | +-----------------------+ |   
  15. '                      | |   B L O C K T R I S   | |     
  16. '                      | +-----------------------+ |     
  17. '                      +---------------------------+ 
  18. '
  19. '        Written by Paul Ryman & Mark Stephens, PD release, Feb. 91. 
  20. '
  21. '   QUICK GREETZ to Tex, Angeldust, Burge, Le Cle, Dr X, Yarra, Grosey,
  22. '                   Schavin, Zac, Sausage & all other we forgot... 
  23. '
  24. Screen Open 0,320,200,2,Lowres : Curs Off : Load "blocktris.abk",3
  25. Hide On 
  26. Limit Mouse 129,58 To 440,290
  27. Dim POS(12,31),LINE(29),HI(3),DIGIT(5)
  28. Global MZ,LINE(),POS(),HI(),TDRP,DSP,SCORE,DIGIT(),LEVEL
  29. HI_THERE
  30. Procedure HI_THERE
  31.    Randomize Timer
  32.    Led Off 
  33.    If Length(9)<>11840 or(Length(10)<>6718) or(Length(11)<>12118) : Do : Bell : Loop : End If 
  34.    BLADELOGO
  35.    Dim LX(26,3),LY(26,3),SH(7,3)
  36.    For I=1 To 29 : POS(1,I)=True : POS(12,I)=True : Next I
  37.    For I=1 To 12 : POS(I,31)=True : POS(I,30)=True : Next I
  38.    Data 8,8,8,8
  39.    Data 9,10,9,10
  40.    Data 11,12,11,12
  41.    Data 13,14,13,14
  42.    Data 15,16,17,18
  43.    Data 19,20,21,22
  44.    Data 23,24,25,26
  45.    Data 0,0,0,-1,-1,-1,-1,0
  46.    Data -2,0,-1,0,0,0,1,0
  47.    Data 0,-2,0,-1,0,0,0,1
  48.    Data -1,0,0,0,0,-1,1,-1
  49.    Data -1,-1,-1,0,0,0,0,1
  50.    Data -1,-1,0,-1,0,0,1,0
  51.    Data -1,1,-1,0,0,0,0,-1
  52.    Data 0,0,-1,1,0,1,1,1
  53.    Data 0,0,-1,-1,-1,0,-1,1
  54.    Data 0,0,-1,-1,0,-1,1,-1
  55.    Data 0,0,1,-1,1,0,1,1
  56.    Data 1,0,1,1,0,1,-1,1
  57.    Data -1,-1,-1,0,-1,1,0,1
  58.    Data -1,0,-1,-1,0,-1,1,-1
  59.    Data 0,-1,1,-1,1,0,1,1
  60.    Data -1,0,-1,1,0,1,1,1
  61.    Data 0,-1,-1,-1,-1,0,-1,1
  62.    Data 1,0,1,-1,0,-1,-1,-1
  63.    Data 0,1,1,1,1,0,1,-1
  64.    For I=1 To 7 : Read SH(I,0),SH(I,1),SH(I,2),SH(I,3) : Next I
  65.    For I=8 To 26 : For J=0 To 3 : Read LX(I,J),LY(I,J) : Next J : Next I
  66.    SHPS_POINTS
  67.    T0P:
  68.    Mvolume 63
  69.    Music 1
  70.    TITLE
  71.    Mvolume 28
  72.    If MZ=4 : End : End If 
  73.    LEVEL=0 : SCORE=0
  74.    NXT_LEVEL:
  75.    For I=1 To 29 : LINE(I)=0 : Next I
  76.    Unpack 10 To 1
  77.    Auto View Off : Autoback 2
  78.    Screen Display 1,,35,,
  79.    SCORE
  80.    HIGHSCORE
  81.    For I=1 To 29 : For J=2 To 11 : POS(J,I)=False : Next J : Next I
  82.    If MZ=1 : DSP=1 : End If 
  83.    If MZ=2
  84.       Inc LEVEL : If LEVEL=13 : LEVEL=1 : End If 
  85.       On LEVEL Proc LL1,LL2,LL3,LL4,LL5,LL6,LL7,LL8,LL9,LL10,LL11,LL12
  86.       LEVEL
  87.       DROP
  88.    End If 
  89.    If MZ=3 : DSP=4
  90.       For J=24 To 29
  91.          For I=2 To 11
  92.             POS(I,J)=True
  93.             Paste Bob 103+I*8,J*8-3,Rnd(6)+1
  94.          Next I
  95.       Next J
  96.    End If 
  97.    Wait Vbl 
  98.    View : Auto View On 
  99.    Double Buffer : Autoback 0 : Bob Update Off 
  100.    X=7 : Y=2 : SHP=Rnd(6)+1 : LANDED=0
  101.    SP=DSP : CNT=1 : NXT=Rnd(6)+1 : Autoback 2 : Paste Bob 47,40,SH(NXT,0)
  102.    Wait Vbl : Autoback 0
  103.    Timer=0
  104.    Do 
  105.       Bob Clear 
  106.       If LANDED=1 : Sam Play 1,2,7000 : End If 
  107.       Bob Draw 
  108.       OK=True
  109.       For I=0 To 3 : If POS(LX(SH(SHP,ROT),I)+X,LY(SH(SHP,ROT),I)+Y+1) : OK=False : End If : Next I
  110. If Not OK : Inc LANDED : Else LANDED=0 : Add YY,SP : If Jdown(1) and SP*2*(YY/(SP*2))=YY and SP<8 : Add SP,SP : Else If Not Jdown(1) : SP=DSP : End If : End If : End If 
  111.       If YY=>8 : Add YY,-8 : Inc Y : End If 
  112.       If LANDED=7 : Gosub BLOCK_LAND
  113.          If MZ=2 and TDRP=0 : Music Off : Sam Play 2,4,7000 : Gosub BONUS : Music 1 : Goto NXT_LEVEL : End If 
  114.          If LINE(3)>0 : Goto GAMEOVER : End If 
  115.       End If 
  116.       Inc CNT : If CNT=9500 or(CNT=37000) : Add DSP,DSP : If DSP>4 : DSP=4 : End If : End If 
  117.       If LANDED<6
  118.          If Jleft(1) and 3*(CNT/3)=CNT : OK=True
  119.             For I=0 To 3 : If POS(LX(SH(SHP,ROT),I)+X-1,LY(SH(SHP,ROT),I)+Y-(YY>0)) : OK=False : End If 
  120.                If POS(LX(SH(SHP,ROT),I)+X-1,LY(SH(SHP,ROT),I)+Y) : OK=False : End If 
  121.             Next I
  122.             If OK : Dec X : End If 
  123.          End If 
  124.          If Jright(1) and 3*(CNT/3)=CNT : OK=True : RG=True
  125.             For I=0 To 3 : If POS(LX(SH(SHP,ROT),I)+X+1,LY(SH(SHP,ROT),I)+Y-(YY>0)) : OK=False : End If 
  126.                If POS(LX(SH(SHP,ROT),I)+X+1,LY(SH(SHP,ROT),I)+Y) : OK=False : End If 
  127.             Next I
  128.             If OK : Inc X : End If 
  129.          End If 
  130.          If FF and Not Fire(1) : FF=False : End If 
  131.          If Fire(1) and Not FF : If LANDED=0 : OK=True : Inc ROT : If ROT=4 : ROT=0 : End If 
  132.                For I=0 To 3 : If POS(LX(SH(SHP,ROT),I)+X,LY(SH(SHP,ROT),I)+Y-(YY>0)) : OK=False : End If 
  133.                   If POS(LX(SH(SHP,ROT),I)+X,LY(SH(SHP,ROT),I)+Y) : OK=False : End If 
  134.                Next I
  135.                FF=True : If Not OK : Dec ROT : If ROT=-1 : ROT=3 : End If : End If 
  136.             End If 
  137.       End If : End If 
  138.       If LANDED=0 : Bob 1,103+X*8,Y*8-3+YY,SH(SHP,ROT)
  139.    Else Bob 1,103+X*8,Y*8-3,SH(SHP,ROT) : End If 
  140.       Screen Swap : Wait Vbl 
  141.    Loop 
  142.    BLOCK_LAND:
  143.    Autoback 2 : Put Bob 1 : Bob Off 1
  144.    For I=0 To 3 : POS(LX(SH(SHP,ROT),I)+X,LY(SH(SHP,ROT),I)+Y)=True : Inc LINE(LY(SH(SHP,ROT),I)+Y) : Next I
  145.    DRP=0
  146.    For I=2 To 29 : If LINE(I)=10 : Inc DRP : End If : Next I
  147.    If DRP>1 : Paste Bob 22,117,26+DRP
  148.    Bob Draw : End If 
  149.    If MZ=2 : Add TDRP,-DRP : If TDRP<0 : TDRP=0 : End If : DROP : End If 
  150.    Autoback 2
  151.    For I=29 To 3 Step -1
  152.       If LINE(I)=10 : Def Scroll 1,119,0 To 199,I*8+3,0,2
  153.          For L=1 To 4
  154.             If LINE(I)=10
  155.                Sam Play 2,1,7000
  156.                For J=1 To 4
  157.                   Scroll 1
  158.                   Wait Vbl 
  159.                Next J
  160.                For J=I To 2 Step -1 : LINE(J)=LINE(J-1)
  161.                   For K=2 To 11 : POS(K,J)=POS(K,J-1) : Next K
  162.                Next J : LINE(1)=0 : For K=2 To 11 : POS(K,2)=False : Next K
  163.             End If 
  164.          Next L
  165.       End If 
  166.    Next I
  167.    Inc SCORE
  168.    If DRP=1 : Add SCORE,10 : End If 
  169.    If DRP=2 : Add SCORE,30 : End If 
  170.    If DRP=3 : Add SCORE,60 : End If 
  171.    If DRP=4 : Add SCORE,100 : End If 
  172.    SCORE
  173.    Autoback 2
  174.    Cls 10,21,117 To 90,136
  175.    Cls 0,47,40 To 80,57
  176.    SHP=NXT : ROT=0 : X=7 : Y=2 : SP=DSP : NXT=Rnd(6)+1 : Paste Bob 47,40,SH(NXT,0)
  177.    Wait Vbl : LANDED=0
  178.    Autoback 0
  179.    Return 
  180.    GAMEOVER:
  181.    Bob 3,117,10,27 : Channel 1 To Bob 3
  182.    Amal 1,"L: M 0,212,212; M 0,-212,212; J L"
  183.    Amal On 1 : Timer=0
  184.    If HI(MZ)<SCORE : HI(MZ)=SCORE
  185.       HIGHSCORE
  186.    End If 
  187.    Sam Play 2,3,7000
  188.    Repeat 
  189.       Bob Clear : Bob Draw 
  190.       Screen Swap : Wait Vbl 
  191.    Until Fire(1) or(Fire(0)) or Timer=850
  192.    Goto T0P
  193.    BONUS:
  194.    '    
  195.    For I=1 To 25
  196.       Sam Play 1,5,7000
  197.       Add SCORE,4
  198.       SCORE
  199.    Next I
  200.    '
  201.    Return 
  202. End Proc
  203. Procedure TITLE
  204.    Dim XX(7),YY(7)
  205.    Unpack 11 To 1
  206.    If Point(123,20)<>16 or(Point(205,112)<>4) or(Point(202,41)<>16) or(Point(276,128)<>4) : Do : Bell : Loop : End If 
  207.    Double Buffer 
  208.    Reserve Zone 4
  209.    Set Zone 1,25,164 To 125,195
  210.    Set Zone 2,25,203 To 125,234
  211.    Set Zone 3,188,164 To 288,195
  212.    Set Zone 4,188,203 To 288,234
  213.    Bob Update On 
  214.    For I=2 To 7 : XX(I)=X Screen(X Mouse) : YY(I)=Y Screen(Y Mouse) : Next I
  215.    Repeat 
  216.       XX(1)=X Screen(X Mouse) : YY(1)=Y Screen(Y Mouse)
  217.       Bob 8,XX(1),YY(1),1
  218.       For I=7 To 2 Step -1
  219.          Bob 9-I,XX(I),YY(I),I
  220.          XX(I)=XX(I-1) : YY(I)=YY(I-1)
  221.       Next I
  222.       MZ=Mouse Zone
  223.    Until Fire(0) and MZ>0
  224.    Fade 5 : Wait 75
  225. End Proc
  226. Procedure LL1
  227.    DSP=1 : TDRP=8
  228. End Proc
  229. Procedure LL2
  230.    DSP=1 : TDRP=14
  231. End Proc
  232. Procedure LL3
  233.    DSP=1 : TDRP=18
  234. End Proc
  235. Procedure LL4
  236.    DSP=2 : TDRP=20
  237.    For I=15 To 29
  238.       LINE(I)=2
  239.       Paste Bob 119,I*8-3,Rnd(6)+1 : POS(2,I)=True
  240.       Paste Bob 191,I*8-3,Rnd(6)+1 : POS(11,I)=True
  241.    Next I
  242. End Proc
  243. Procedure BLADELOGO
  244.    Cls 0
  245.    Unpack 9 To 1
  246.    K=1 : I=100 : Flash Off : Curs Off : Hide 
  247.    Cls 0,0,0 To 9,9
  248.    Repeat 
  249.       Add I,K : If I=170 Then K=-1
  250.       If I=45 Then K=1
  251.       Screen Display 1,,I,, : Wait Vbl 
  252.    Until Fire(1) or(Inkey$<>"") or(Fire(0))
  253.    Screen Close 1
  254. End Proc
  255. Procedure LL5
  256.    DSP=2 : TDRP=20
  257.    For I=2 To 6
  258.       LINE(23+I)=2 : LINE(26-I)=2
  259.       Paste Bob I*8+103,(26-I)*8-3,4 : POS(I,26-I)=True
  260.       Paste Bob(13-I)*8+103,(26-I)*8-3,4 : POS(13-I,26-I)=True
  261.       Paste Bob I*8+103,(23+I)*8-3,4 : POS(I,23+I)=True
  262.       Paste Bob(13-I)*8+103,(23+I)*8-3,4 : POS(13-I,23+I)=True
  263.    Next I
  264. End Proc
  265. Procedure LL6
  266.    DSP=4 : TDRP=10
  267. End Proc
  268. Procedure LL7
  269.    DSP=2 : TDRP=20
  270.    For I=19 To 29
  271.       LINE(I)=5
  272.       For J=2 To 10 Step 2
  273.          Paste Bob 103+J*8,I*8-3,Rnd(6)+1 : POS(J,I)=True
  274.       Next J
  275.    Next I
  276. End Proc
  277. Procedure LL8
  278.    DSP=2 : TDRP=25
  279.    For I=20 To 28 Step 2
  280.       Paste Bob 103+(I-18)*8,I*8-3,Rnd(6)+1 : POS(I-18,I)=True
  281.       Paste Bob 103+(30-I)*8,(I+1)*8-3,Rnd(6)+1 : POS(30-I,I+1)=True
  282.       LINE(I)=1 : LINE(I+1)=1
  283.    Next I
  284. End Proc
  285. Procedure LL9
  286.    DSP=2 : TDRP=25
  287.    For I=12 To 20
  288.       LINE(I)=6
  289.       For J=4 To 9
  290.          Paste Bob 103+J*8,I*8-3,J-3 : POS(J,I)=True
  291.       Next J
  292.    Next I
  293. End Proc
  294. Procedure LL10
  295.    DSP=4 : TDRP=25
  296. End Proc
  297. Procedure LL11
  298.    DSP=2 : TDRP=30
  299.    For I=10 To 29
  300.       LINE(I)=2
  301.       Paste Bob 119,I*8-3,Rnd(6)+1 : POS(2,I)=True
  302.       Paste Bob 191,I*8-3,Rnd(6)+1 : POS(11,I)=True
  303.    Next I
  304. End Proc
  305. Procedure LL12
  306.    DSP=2 : TDRP=25
  307.    For I=12 To 22 Step 2
  308.       LINE(I)=6
  309.       For J=4 To 9
  310.          Paste Bob 103+J*8,I*8-3,5 : POS(J,I)=True
  311.       Next J
  312.    Next I
  313. End Proc
  314. Procedure SHPS_POINTS
  315.    Hot Spot 8,8,8
  316.    Hot Spot 9,16,0 : Hot Spot 10,0,16
  317.    Hot Spot 11,8,8 : Hot Spot 12,8,8
  318.    Hot Spot 13,8,8 : Hot Spot 14,8,8
  319.    Hot Spot 15,8,0 : Hot Spot 16,8,8
  320.    Hot Spot 17,8,8 : Hot Spot 18,0,8
  321.    Hot Spot 19,8,0 : Hot Spot 20,8,8
  322.    Hot Spot 21,8,8 : Hot Spot 22,0,8
  323.    Hot Spot 23,8,0 : Hot Spot 24,8,8
  324.    Hot Spot 25,8,8 : Hot Spot 26,0,8
  325. End Proc
  326. Procedure HIGHSCORE
  327.    Autoback 2
  328.    Z$=Str$(HI(MZ))-" "
  329.    For I=1 To 5 : DIGIT(I)=0 : Next I
  330.    For I=Len(Z$) To 1 Step -1
  331.       DIGIT(I)=Val(Mid$(Z$,Len(Z$)-I+1,1))
  332.    Next I
  333.    For I=1 To 5
  334.       Paste Bob 310-I*9,157,DIGIT(I)+31
  335.    Next I
  336.    Autoback 0
  337. End Proc
  338. Procedure SCORE
  339.    Autoback 2
  340.    Z$=Str$(SCORE)-" "
  341.    For I=1 To 5 : DIGIT(I)=0 : Next I
  342.    For I=Len(Z$) To 1 Step -1
  343.       DIGIT(I)=Val(Mid$(Z$,Len(Z$)-I+1,1))
  344.    Next I
  345.    For I=1 To 5
  346.       Paste Bob 310-I*9,126,DIGIT(I)+31
  347.    Next I
  348.    Autoback 0
  349. End Proc
  350. Procedure LEVEL
  351.    Autoback 2
  352.    Z$=Str$(LEVEL)-" "
  353.    For I=1 To 2 : DIGIT(I)=0 : Next I
  354.    For I=Len(Z$) To 1 Step -1
  355.       DIGIT(I)=Val(Mid$(Z$,Len(Z$)-I+1,1))
  356.    Next I
  357.    For I=1 To 2
  358.       Paste Bob 301-I*9,188,DIGIT(I)+31
  359.    Next I
  360.    Autoback 0
  361. End Proc
  362. Procedure DROP
  363.    Autoback 2
  364.    Z$=Str$(TDRP)-" "
  365.    For I=1 To 2 : DIGIT(I)=0 : Next I
  366.    For I=Len(Z$) To 1 Step -1
  367.       DIGIT(I)=Val(Mid$(Z$,Len(Z$)-I+1,1))
  368.    Next I
  369.    For I=1 To 2
  370.       Paste Bob 301-I*9,219,DIGIT(I)+31
  371.    Next I
  372.    Autoback 0
  373. End Proc