home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / games / breaker_construction / breaker_constructionset / breaker.gfa (.txt) < prev    next >
GFA-BASIC Atari  |  1995-03-16  |  41KB  |  494 lines

  1. '
  2. '  *******************************************************
  3. '  *                                                     *
  4. '  *             BREAKER  (c)  Paul Stevens              *
  5. '  *                                                     *
  6. '  *         Written during February-April 1989          *
  7. '  *                                                     *
  8. '  *******************************************************
  9. '
  10. initialization
  11. '
  12. ' ****** START OF MAIN LOOP ******
  13. '
  14. DO
  15.   x#=MOUSEX-mx#
  16.   IF x#<10
  17.     x#=10
  18.     mx#=MOUSEX-10
  19.   ENDIF
  20.   IF x#>160
  21.     x#=160
  22.     mx#=MOUSEX-160
  23.   ENDIF
  24.   '
  25.   IF bx#<12
  26.     bx#=12
  27.     bmx#=-bmx#
  28.     SOUND 1000,1,200,1
  29.   ENDIF
  30.   IF bx#>183
  31.     bx#=183
  32.     bmx#=-bmx#
  33.     SOUND 1000,1,200,0
  34.   ENDIF
  35.   '
  36.   IF by#<16
  37.     by#=16
  38.     bx#=bx#+(INT(RND*(4)-2))
  39.     bmy#=-bmy#
  40.     SOUND 1000,1,200,1
  41.   ENDIF
  42.   IF by#>238
  43.     balls#=balls#-1
  44.     startup
  45.   ENDIF
  46.   '
  47.   bx#=bx#+bmx#
  48.   by#=by#+bmy#
  49.   '
  50.   IF bmy#<0 AND bmx#<0
  51.     p1#=POINT(bx#+3,by#-1)
  52.     p2#=POINT(bx#,by#+2)
  53.     IF p1#<>2 OR p2#<>2
  54.       tlbrickhitcheck
  55.     ENDIF
  56.     GOTO over
  57.   ENDIF
  58.   IF bmx#>0 AND bmy#<0
  59.     p3#=POINT(bx#+3,by#-1)
  60.     p4#=POINT(bx#+6,by#+2)
  61.     IF p3#<>2 OR p4#<>2
  62.       trbrickhitcheck
  63.     ENDIF
  64.     GOTO over
  65.   ENDIF
  66.   IF bmx#<0 AND bmy#>0
  67.     p5#=POINT(bx#+3,by#+5)
  68.     p6#=POINT(bx#,by#+2)
  69.     IF p5#<>2 OR p6#<>2
  70.       blbrickhitcheck
  71.     ENDIF
  72.     GOTO over
  73.   ENDIF
  74.   IF bmy#>0 AND bmx#>0
  75.     p7#=POINT(bx#+6,by#+2)
  76.     p8#=POINT(bx#+3,by#+5)
  77.     IF p7#<>2 OR p8#<>2
  78.       brbrickhitcheck
  79.     ENDIF
  80.   ENDIF
  81.   '
  82. over:
  83.   '
  84.   IF by#>220 AND by#<226 AND bx#+3>x#-3 AND bx#+3<x#+33
  85.     bathitcheck
  86.   ENDIF
  87.   '
  88.   IF db#=40
  89.     IF by#>180 AND by#<190 AND bx#+3>x#-3 AND bx#+3<x#+33
  90.       bathitcheck
  91.     ENDIF
  92.   ENDIF
  93.   '
  94.   MW_OUT 4,x#,y#-db#
  95.   MW_OUT 5,x#+13,y#-db#
  96.   MW_OUT 7,bx#,by#
  97.   '
  98.   k$=INKEY$
  99.   IF k$="p"
  100.     DO UNTIL INKEY$="p"
  101.     LOOP
  102.     k$=""
  103.   ENDIF
  104.   IF k$="q"
  105.     balls#=0
  106.     startup
  107.     k$=""
  108.   ENDIF
  109. LOOP
  110. '
  111. ' ****** END OF MAIN LOOP ******
  112. '
  113. > PROCEDURE tlbrickhitcheck
  114.   IF p1#<>2
  115.     hitposx#=bx#+3
  116.     hitposy#=by#-1
  117.     IF dest#=0 OR p1#>28
  118.       bmy#=-bmy#
  119.     ENDIF
  120.     brickblank
  121.   ENDIF
  122.   IF p2#<>2
  123.     hitposx#=bx#
  124.     hitposy#=by#+2
  125.     IF dest#=0 OR p2#>28
  126.       bmx#=-bmx#
  127.     ENDIF
  128.     brickblank
  129.   ENDIF
  130. RETURN
  131. > PROCEDURE trbrickhitcheck
  132.   IF p3#<>2
  133.     hitposx#=bx#+3
  134.     hitposy#=by#-1
  135.     IF dest#=0 OR p3#>28
  136.       bmy#=-bmy#
  137.     ENDIF
  138.     brickblank
  139.   ENDIF
  140.   IF p4#<>2
  141.     hitposx#=bx#+6
  142.     hitposy#=by#+2
  143.     IF dest#=0 OR p4#>28
  144.       bmx#=-bmx#
  145.     ENDIF
  146.     brickblank
  147.   ENDIF
  148. RETURN
  149. > PROCEDURE brbrickhitcheck
  150.   IF p7#<>2
  151.     hitposx#=bx#+6
  152.     hitposy#=by#+2
  153.     IF dest#=0 OR p7#>28
  154.       bmx#=-bmx#
  155.     ENDIF
  156.     brickblank
  157.   ENDIF
  158.   IF p8#<>2
  159.     hitposx#=bx#+3
  160.     hitposy#=by#+5
  161.     IF dest#=0 OR p8#>28
  162.       bmy#=-bmy#
  163.     ENDIF
  164.     brickblank
  165.   ENDIF
  166. RETURN
  167. > PROCEDURE blbrickhitcheck
  168.   IF p5#<>2
  169.     hitposx#=bx#+3
  170.     hitposy#=by#+5
  171.     IF dest#=0 OR p5#>28
  172.       bmy#=-bmy#
  173.     ENDIF
  174.     brickblank
  175.   ENDIF
  176.   IF p6#<>2
  177.     hitposx#=bx#
  178.     hitposy#=by#+2
  179.     IF dest#=0 OR p6#>28
  180.       bmx#=-bmx#
  181.     ENDIF
  182.     brickblank
  183.   ENDIF
  184. RETURN
  185. > PROCEDURE bathitcheck
  186.   bc#=bx#+3
  187.   bs#=bs#+1
  188.   IF max#=0 AND bs#>20
  189.     bmy#=bmy#*2
  190.     max#=1
  191.   ENDIF
  192.   '
  193.   IF db#=0
  194.     by#=220
  195.   ENDIF
  196.   '
  197.   IF db#=40 AND by#>204
  198.     by#=220
  199.   ENDIF
  200.   IF db#=40 AND bmy#<0 AND by#<204
  201.     by#=190
  202.   ENDIF
  203.   IF db#=40 AND bmy#>0 AND by#<204
  204.     by#=180
  205.   ENDIF
  206.   '
  207.   bmy#=-bmy#
  208.   IF bc#>x#-3 AND bc#<x#+5
  209.     bmx#=-2
  210.   ENDIF
  211.   IF bc#>x#+4 AND bc#<x#+13
  212.     bmx#=-1
  213.   ENDIF
  214.   IF bc#>x#+12 AND bc#<x#+18
  215.     IF bmx#>0.5
  216.       bmx#=0.5
  217.     ENDIF
  218.     IF bmx#<0.5
  219.       bmx#=-0.5
  220.     ENDIF
  221.   ENDIF
  222.   IF bc#>x#+17 AND bc#<x#+26
  223.     bmx#=1
  224.   ENDIF
  225.   IF bc#>x#+25 AND bc#<x#+33
  226.     bmx#=2
  227.   ENDIF
  228.   SOUND 500,4,200,1
  229.   '
  230.   IF grab#>0 AND bmy#<0
  231.     grab#=grab#-1
  232.     y2#=5
  233.     bbp#=bx#-x#
  234.     IF bbp#=>25
  235.       bbp#=25
  236.     ENDIF
  237.     IF bbp#=<-2
  238.       bbp#=-1
  239.     ENDIF
  240.     IF db#=40 AND by#<205
  241.       y2#=45
  242.     ENDIF
  243.     '
  244.     DO UNTIL MOUSEK=1
  245.       x#=MOUSEX-mx#
  246.       IF x#<10
  247.         x#=10
  248.         mx#=MOUSEX-10
  249.       ENDIF
  250.       IF x#>160
  251.         x#=160
  252.         mx#=MOUSEX-160
  253.       ENDIF
  254.       '
  255.       bx#=x#+bbp#
  256.       MW_OUT 4,x#,y#-db#
  257.       MW_OUT 5,x#+13,y#-db#
  258.       MW_OUT 7,bx#,y#-y2#
  259.     LOOP
  260.   ENDIF
  261. RETURN
  262. > PROCEDURE brickblank
  263.   bs#=bs#+1
  264.   bx#=bx#+(INT(RND*(4)-2))
  265.   bp#=1000
  266.   brickx#=(hitposx#+4)/15
  267.   brickx#=INT(brickx#)*15-4
  268.   bricky#=(hitposy#+1)/7
  269.   bricky#=INT(bricky#)*7-1
  270.   cv#=POINT(hitposx#,hitposy#)
  271.   IF cv#<>2 AND cv#<29
  272.     COLOR 2
  273.     bp#=1500
  274.     PBOX brickx#,bricky#,brickx#+13,bricky#+5
  275.     sc#=sc#+sca#
  276.     bhn#=bhn#+1
  277.     IF max#=0 AND bs#>20
  278.       bmy#=bmy#*2
  279.       max#=1
  280.     ENDIF
  281.   ENDIF
  282.   IF cv#=31
  283.     jumper
  284.   ENDIF
  285.   IF cv#=24
  286.     grab#=10
  287.   ENDIF
  288.   IF cv#=18
  289.     dest#=100
  290.   ENDIF
  291.   IF dest#>0
  292.     dest#=dest#-1
  293.   ENDIF
  294.   IF cv#=21
  295.     IF sca#<41
  296.       sca#=sca#*2
  297.       xs#=sca#/10
  298.       COLOR 9,2
  299.       TEXT 286,90,xs#
  300.     ENDIF
  301.   ENDIF
  302.   IF cv#=23
  303.     db#=40
  304.     bs#=0
  305.   ENDIF
  306.   IF cv#=19
  307.     FOR a#=10 TO 175 STEP 15
  308.       PUT a#,208,solidbrick$
  309.       wh#=0
  310.     NEXT a#
  311.   ENDIF
  312.   IF cv#=29 OR cv#=30 AND by#>195
  313.     wh#=wh#+1
  314.     IF wh#>19
  315.       wh#=0
  316.       COLOR 2
  317.       PBOX 9,208,191,215
  318.     ENDIF
  319.   ENDIF
  320.   IF cv#=22
  321.     max#=0
  322.     bs#=0
  323.     IF bmx#>0
  324.       bmx#=0.5
  325.     ENDIF
  326.     IF bmx#<0
  327.       bmx#=0.5
  328.     ENDIF
  329.     IF bmy#>0
  330.       bmy#=1
  331.     ENDIF
  332.     IF bmy#<0
  333.       bmy#=-1
  334.     ENDIF
  335.   ENDIF
  336.   SOUND bp#,2,255,0
  337.   IF cv#=17
  338.     dropper
  339.   ENDIF
  340.   score
  341.   IF bn#=bhn#
  342.     changelevels
  343.     startup
  344.   ENDIF
  345. RETURN
  346. > PROCEDURE score
  347.   COLOR 9,2
  348.   IF sc#>sc1#
  349.     TEXT scpos#,102,"      "
  350.     scpos#=scpos#-4
  351.     sc1#=sc1#*10
  352.   ENDIF
  353.   TEXT scpos#,102,sc#
  354.   IF sc#=>bbs#
  355.     IF balls#<9
  356.       balls#=balls#+1
  357.     ENDIF
  358.     COLOR 6,2
  359.     TEXT 260,239,balls#
  360.     bbs#=bbs#+1000
  361.   ENDIF
  362. RETURN
  363. > PROCEDURE jumper
  364.   IF brickx#=tb1x#-6 AND bricky#=tb1y#-2
  365.     bx#=tb2x#-3
  366.     by#=tb2y#-1
  367.   ENDIF
  368.   IF brickx#=tb2x#-6 AND bricky#=tb2y#-2
  369.     bx#=tb1x#-3
  370.     by#=tb1y#-1
  371.   ENDIF
  372.   '
  373.   nfb#=0
  374.   FOR a#=0 TO 3
  375.     fb#(a#)=0
  376.   NEXT a#
  377.   '
  378.   IF POINT(bx#+4,by#-5)<29
  379.     nfb#=1
  380.     fb#(0)=1
  381.   ENDIF
  382.   IF POINT(bx#+17,by#+2)<29
  383.     nfb#=1
  384.     fb#(1)=1
  385.   ENDIF
  386.   IF POINT(bx#+4,by#+8)<29
  387.     nfb#=1
  388.     fb#(2)=1
  389.   ENDIF
  390.   IF POINT(bx#-10,by#+2)<29
  391.     nfb#=1
  392.     fb#(3)=1
  393.   ENDIF
  394.   '
  395.   IF nfb#=0
  396.     hitposx#=bx#+3
  397.     hitposy#=by#+2
  398.     brickblank
  399.   ENDIF
  400.   exit#=0
  401.   '
  402.   DO UNTIL exit#=1
  403.     a#=INT(RND*(4))
  404.     IF fb#(a#)=1
  405.       IF a#=0
  406.         bx#=bx#+1
  407.         by#=by#-5
  408.         exit#=1
  409.         IF bmy#>0
  410.           bmy#=-bmy#
  411.         ENDIF
  412.       ENDIF
  413.       IF a#=1
  414.         bx#=bx#+11
  415.         exit#=1
  416.         IF bmx#<0
  417.           bmx#=-bmx#
  418.         ENDIF
  419.       ENDIF
  420.       IF a#=2
  421.         bx#=bx#+1
  422.         by#=by#+4
  423.         exit#=1
  424.         IF bmy#<0
  425.           bmy#=-bmy#
  426.         ENDIF
  427.       ENDIF
  428.       IF a#=3
  429.         bx#=bx#-10
  430.         exit#=1
  431.         IF bmx#>0
  432.           bmx#=-bmx#
  433.         ENDIF
  434.       ENDIF
  435.     ENDIF
  436.   LOOP
  437. RETURN
  438. > PROCEDURE startup
  439.   IF balls#<1
  440.     hiscore
  441.     gameover
  442.     IF joy#=2
  443.       SETCOLOR 0,0,0,0
  444.       SETCOLOR 1,0,0,0
  445.       setupbigintro
  446.       bigintro
  447.       drawgamescreen
  448.       startlevel
  449.     ENDIF
  450.     setupvariables
  451.     setupbricks
  452.   ENDIF
  453.   COLOR 6,2
  454.   TEXT 260,239,balls#
  455.   COLOR 9,2
  456.   TEXT 286,90,"1"
  457.   COLOR 2
  458.   PBOX 9,208,191,215
  459.   '
  460.   DO UNTIL STRIG(0)=-1
  461.     '
  462.     x#=MOUSEX-mx#
  463.     IF x#<10
  464.       x#=10
  465.       mx#=MOUSEX-10
  466.     ENDIF
  467.     IF x#>160
  468.       x#=160
  469.       mx#=MOUSEX-160
  470.     ENDIF
  471.     '
  472.     MW_OUT 4,x#,y#
  473.     MW_OUT 5,x#+13,y#
  474.     MW_OUT 7,x#+12,y#-5
  475.   LOOP
  476.   '
  477.   bx#=x#+12
  478.   bmy#=-1
  479.   bmx#=0.5
  480.   by#=220
  481.   ab#=0
  482.   bs#=0
  483.   max#=0
  484.   sca#=10
  485.   db#=0
  486.   wh#=0
  487.   dest#=0
  488.   grab#=0
  489. RETURN
  490. > PROCEDURE setupvariables
  491.   bs#=1
  492.   bhn#=0
  493.   balls#=3
  494.   sc#=0