home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / Gamedisk3 / Crackout! / CrackOut!Recompile.AMOS / CrackOut!Recompile.amosSourceCode
Encoding:
AMOS Source Code  |  1997-10-30  |  37.3 KB  |  1,187 lines

  1. Hide 
  2. Request Off 
  3. Dim F(41,12)
  4. Dim SC(100),NAM$(100),C(15)
  5. Global F(),SO,MU,SC,LI,LE,LEV,SPB,PAL,MEM,MV,SV,BSP,KSC,EX,RETEND,I$
  6. If Chip Free+Fast Free>512000 Then MEM=1 Else MEM=0
  7. TITLE
  8. MU=1 : SO=1 : SC=0 : LEV=1 : PAL=1 : MV=63 : SV=63 : BSP=4 : RETEND=0
  9. Load "InGameGraphics.dat",9
  10. Repeat 
  11.    Extension_8_10A8 
  12.   HISCORE : P=Param
  13.    Extension_8_10A8 
  14.   If P=0
  15.     Do 
  16.       MAIN
  17.        Extension_8_10A8 
  18.       If Param>0
  19.         ENGAME[Param]
  20.         If Param=0 : Exit : End If 
  21.       Else 
  22.         Exit 
  23.       End If 
  24.     Loop 
  25.   End If 
  26.   If P=2 Then LEVELEDIT
  27. Until P=1
  28. Erase 3 : Erase 9 : Erase 14
  29. End 
  30. Procedure TITLE
  31.   If Mouse Key Then Pop Proc
  32.   If MEM
  33.     Load "RamFound.pic",9
  34.     Unpack 9 To 1 : Screen Hide 1
  35.     Gr Writing 0 : Ink 12
  36.     A$=Str$(Chip Free/1024)-" "+" KB FREE CHIP-RAM DETECTED!"
  37.     If Fast Free
  38.       B$=Str$(Fast Free/1024)-" "+" KB FREE "
  39.       Reserve As Work 16,8 : A=Start(16) : Erase 16
  40.       If A<$C00000 or A>$D80000 : B$=B$+"FAST" : Else B$=B$+"RANGER" : End If 
  41.       B$=B$+"-RAM DETECTED!"
  42.       Text 160-Len(A$)*4,246,A$
  43.       Text 160-Len(B$)*4,254,B$
  44.     Else 
  45.       Text 160-Len(A$)*4,254,A$
  46.     End If 
  47.     Screen Open 0,320,256,16,0
  48.     Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  49.     For A=0 To 15 : Colour A,0 : Next 
  50.     Fade 5 To 1
  51.     Appear 1 To 0,67
  52.   End If 
  53.   Load "Title.dat"
  54.   Screen Open 1,16,16,2,0 : Screen Hide 1
  55.   No Icon Mask 
  56.   Dim ST1(17,1),ST2(11,1),R(53),COR(53,1)
  57.   Restore 
  58.   For A=0 To 17
  59.     Read ST1(A,0),ST1(A,1)
  60.   Next 
  61.   For A=0 To 11
  62.     Read ST2(A,0),ST2(A,1)
  63.   Next 
  64.   If MEM Then Extension_8_0456 "mod.Title",-3
  65.   Load "Title.pic",9
  66.   Load "End.sam",5
  67.    Extension_8_142A 5
  68.   If MEM=0 Then Goto NOMEM
  69.   For A=248 To 8 Step -8
  70.     Screen Offset 0,0,256-A
  71.     Screen Display 0,,,,A
  72.     Wait Vbl 
  73.   Next 
  74.   Screen Close 0
  75.   Unpack 9 To 0 : Erase 9
  76.   Screen Display 0,128,40,320,0
  77.   Double Buffer 
  78.   Screen 1 : Get Palette 0 : Screen 0
  79.   For A=0 To 31 : Colour A,0 : Next 
  80.   Fade 3 To 1
  81.   For A=1 To 32
  82.     Screen Offset 0,0,256-A*8
  83.     Screen Display 0,128,40,320,A*8
  84.     If A=25 Then Extension_8_145A 1,1,9000
  85.     Wait Vbl 
  86.   Next 
  87.   Wait 2
  88.   A$="L X=328; F R0=0 To 19; L X=X-16; N R0; "
  89.   Bob 0,328,0,2
  90.   Channel 0 To Bob 0
  91.   Amal 0,A$
  92.   Amal On 
  93.   Repeat : Wait Vbl : Until Amreg(0,0)>9
  94.   For A=0 To 31 : Colour A,$FFF : Next 
  95.    Extension_8_145A 2,2,9000
  96.   Repeat : Wait Vbl : Until Amreg(0,0)=20
  97.   Paste Icon 142,70,1
  98.   Bob 0,8,0, : Wait Vbl 
  99.   Put Bob 0 : Wait Vbl 
  100.   Bob Off 0
  101.   Fade 3 To 1
  102.   For A=0 To 5
  103.     B1$=Str$(13+A*4)-" "
  104.     B2$=Str$(14+A*4)-" "
  105.     B3$=Str$(15+A*4)-" "
  106.     B4$=Str$(16+A*4)-" "
  107.     A$="A: L X=R0; L Y=R1; A 1,("+B1$+",3)"
  108.     A$=A$+"("+B2$+",3)("+B3$+",3)"
  109.     A$=A$+"("+B4$+",6)("+B3$+",3)"
  110.     A$=A$+"("+B2$+",3)("+B1$+",3)"
  111.     A$=A$+"(1,1); F R2=0 T 15; P; N R2; J A;"
  112.     Bob 1+A,-10,-10,1
  113.     Channel A To Bob 1+A
  114.     Amal A,A$
  115.     Amreg(A,0)=-10 : Amreg(A,1)=-10
  116.     Amal On A : Wait Vbl 
  117.   Next 
  118.   A$="A: L X=R0; L Y=R1; A 1,(3,1)(4,1)(5,2)(6,2)(7,2)(8,2)"
  119.   A$=A$+"(9,2)(10,2)(11,2)(12,8)(11,2)(10,2)(9,2)(8,2)(7,2)"
  120.   A$=A$+"(6,2)(5,2)(4,1)(3,1); F R2=1 T 22; P; N R2; J A;"
  121.   For A=6 To 8
  122.     Bob 1+A,-10,-10,1
  123.     Channel A To Bob 1+A
  124.     Amal A,String$("P",(A-6)*4)+"; "+A$
  125.     Amreg(A,0)=-10 : Amreg(A,1)=-10
  126.     Amal On A
  127.   Next 
  128.    Extension_8_108E 3 : Extension_8_10C6 0
  129.   MV=0 : Screen Close 1
  130.   Repeat 
  131.      Extension_8_10C6 MV : MV=Min(MV+1,63)
  132.     Add C1,1,0 To 5
  133.     B=Rnd(17) : Amreg(C1,0)=ST1(B,0)-4 : Amreg(C1,1)=ST1(B,1)-4
  134.     Add C2,1,6 To 8
  135.     B=Rnd(11) : Amreg(C2,0)=ST2(B,0)-8 : Amreg(C2,1)=ST2(B,1)-8
  136.     Wait Vbl 
  137.   Until Mouse Key
  138.   Amal Off : For A=2 To 9 : Bob Off A : Next 
  139.   Fade 3 : For A=1 To 48 : MV=Min(MV+1,63) : Extension_8_10C6 MV : Wait Vbl : Next 
  140.   Bob Off 
  141. RTSNOMEM:
  142.   Repeat : MV=Min(MV+2,63) : Extension_8_10C6 MV : Wait Vbl : Until MV=63
  143.   A$="L R1=1; Anim 1,(44,3)(43,3)(42,3)(41,3)(40,3)(39,3); "
  144.   Screen Close 0
  145.   Screen Open 1,320,100,8,0
  146.   Curs Off : Flash Off : Cls 0
  147.   Palette 0,$FFF,$AAA,$777,0,$8CF,$48C,$248
  148.   For B=1 To 3 : For A=0 To 3 : Colour 16+A*4+B,Colour(B) : Next : Next 
  149.   For A=0 To 3
  150.     Sprite A*2,-10,-10,43
  151.     Channel A To Sprite A*2
  152.   Next 
  153.   For A=1 To 53
  154.     Read R(A)
  155.   Next 
  156.   For A=1 To 53
  157.     Read COR(A,0),COR(A,1)
  158.   Next 
  159.   Load "Title.sam",5
  160.    Extension_8_142A 5
  161.   B=0 : S=1
  162.   For A=1 To 53
  163.     For C=0 To 3
  164.       If Chanan(C)=0 Then Paste Bob X Sprite(C*2)-144,Y Sprite(C*2)-66,39
  165.     Next 
  166.     X=COR(R(A),0)+30
  167.     Y=COR(R(A),1)+20
  168.     Wait Vbl : Sprite B*2,X+128,Y+40,44
  169.      Extension_8_145A 2,2,27000
  170.     Amal B,A$ : Amal On B : Wait 4
  171.     Add B,1,0 To 3
  172.     If Mouse Key Then Gosub FAST : Goto SKIP
  173.   Next 
  174.   D=0
  175.   Wait 20
  176.   For C=0 To 3
  177.     Paste Bob X Sprite(C*2)-144,Y Sprite(C*2)-66,39
  178.   Next 
  179.   Sprite Off 
  180.   For A=0 To 7
  181.     Sprite A,-10,-10,43
  182.     Channel A To Sprite A
  183.     Amal A,"L R1=1;" : Amal On A
  184.   Next 
  185.   For A=1 To 36
  186.     Read COR(A,0),COR(A,1)
  187.     COR(A,0)=COR(A,0)*4+180
  188.     COR(A,1)=(COR(A,1)-34)*8+50
  189.   Next 
  190.   A$="L R1=0; A: P; L X=X-4; I X<R0 Jump B; Jump A; B: P; L R1=1; "
  191.   For B=0 To 3 : For A=0 To 3 : Colour 16+A*4+B,Colour(B+4) : Next : Next 
  192.   A=1 : S=2
  193.   Repeat 
  194.     For B=0 To 7
  195.       If Amreg(B,1)=1
  196.         If A>8
  197.            Extension_8_145A 2,1,17000
  198.           Paste Bob X Sprite(B)-128,Y Sprite(B)-50,38
  199.         End If 
  200.         If A<37
  201.           Sprite B,448,COR(A,1)+50,37
  202.           Amal B,A$ : Amal On B : Amreg(B,0)=COR(A,0)+128
  203.         Else 
  204.           Amreg(B,1)=2
  205.         End If 
  206.         Inc A
  207.       End If 
  208.       If Mouse Key Then Gosub FAST : Goto SKIP
  209.       Wait Vbl 
  210.     Next 
  211.   Until A>44
  212.   Wait 5 : Erase 5
  213.   Amal Off : Sprite Off 
  214. SKIP:
  215.   Screen Open 0,320,240,2,0
  216.   Curs Off : Flash Off : Cls 0
  217.   Screen Display 0,128,150,320,120
  218.   EX=0 : Y=128
  219.   Set Rainbow 0,1,124,"","",""
  220.   For A=0 To 7
  221.     Rain(0,A)=A*$222
  222.   Next 
  223.   For A=8 To 112
  224.     Rain(0,A)=$FFF
  225.   Next 
  226.   For A=113 To 120
  227.     Rain(0,A)=(120-A)*$222
  228.   Next 
  229.   Rainbow 0,0,149,124
  230.   MO=1
  231.   Do 
  232.     If MO=1
  233.       A$="welcome to" : Gosub PTEX : Add Y,8
  234.       A$="crack out!" : Gosub PTEX : Add Y,24
  235.       A$="written using amos" : Gosub PTEX
  236.     End If 
  237.     If MO=2
  238.       A$="idea graphics levels" : Gosub PTEX : Add Y,4
  239.       A$="by h. p. obermeier" : Gosub PTEX : Add Y,12
  240.       A$="program music sound" : Gosub PTEX
  241.       A$="additonal graphics" : Gosub PTEX : Add Y,4
  242.       A$="by c. hodges" : Gosub PTEX
  243.     End If 
  244.     If MO=3
  245.       A$="version 1.4" : Gosub PTEX : Add Y,4
  246.       A$="30/10/1997" : Gosub PTEX : Add Y,32
  247.       A$="copyright 1992" : Gosub PTEX : Add Y,4
  248.       A$="hans peter obermeier" : Gosub PTEX
  249.     End If 
  250.     If MO=4
  251.       Add Y,16 : A$="enjoy the game!" : Gosub PTEX : Add Y,32
  252.       A$="press mouse button" : Gosub PTEX
  253.       A$="to load main part!" : Gosub PTEX
  254.     End If 
  255.     If MO=5
  256.       Add Y,16 : A$="there is also" : Gosub PTEX : Add Y,8
  257.       A$="a cheat mode," : Gosub PTEX : Add Y,16
  258.       A$="find it out!" : Gosub PTEX
  259.     End If 
  260.     If MO=6
  261.       A$="warning!" : Gosub PTEX : Add Y,24
  262.       A$="do not use any" : Gosub PTEX : Add Y,8
  263.       A$="freezers!" : Gosub PTEX
  264.     End If 
  265.     Gosub SCROL : Gosub WAI
  266.     If EX Then Exit 
  267.     Add MO,1,1 To 6
  268.   Loop 
  269.   Screen 1 : Fade 3 : Screen 0
  270.   Ink 0 : Bar 0,120 To 320,240
  271.   EX=0 : Gosub SCROL : Wait Vbl : Rainbow Del 
  272.   For A=63 To 0 Step -1 : Extension_8_10C6 A : Wait Vbl : Next 
  273.   Screen Close 1
  274.    Extension_8_10A8 : Screen Close 0
  275.   Erase 1 : Erase 2 : Erase 3
  276. Pop Proc
  277. NOMEM:
  278.   Unpack 9 To 0 : Erase 9
  279.   Screen Display 0,128,40,320,0
  280.   Screen 1 : Get Palette 0 : Screen 0
  281.   For A=0 To 31 : Colour A,0 : Next : Wait 2
  282.   Fade 3 To 1
  283.   Load "End.sam",5
  284.    Extension_8_142A 5
  285.    Extension_8_145A 1,1,9000
  286.   For A=1 To 32
  287.     Screen Offset 0,0,256-A*8
  288.     Screen Display 0,128,40,320,A*8
  289.     Wait Vbl 
  290.   Next 
  291.   For A=1 To 31 : Colour A,$FFF : Next : Wait 2
  292.    Extension_8_145A 2,2,9000
  293.   Paste Bob 8,0,2
  294.   Paste Icon 142,70,1
  295.   Get Bob 2,0,0 To 1,1
  296.   Fade 3 To 1 : Wait 44 : Erase 5
  297.    Extension_8_0456 "mod.Title",-3
  298.   MV=0 : Extension_8_108E 3 : Extension_8_10C6 0
  299.   Repeat 
  300.     MV=Min(MV+1,63) : Extension_8_10C6 MV : Wait Vbl 
  301.   Until Mouse Key
  302.   Fade 3 : Wait 48
  303. Goto RTSNOMEM
  304. FAST:
  305.   Amal Off : Wait Vbl : Sprite Off 
  306.   If S=2 Then Goto SKIP2
  307.   For A=1 To 53
  308.     Paste Bob COR(R(A),0)+14,COR(R(A),1)-6,39
  309.   Next 
  310.   For A=1 To 36
  311.     Read COR(A,0),COR(A,1)
  312.     COR(A,0)=COR(A,0)*4+180
  313.     COR(A,1)=(COR(A,1)-34)*8+50
  314.   Next 
  315. SKIP2:
  316.   For A=1 To 36
  317.     Paste Bob COR(A,0),COR(A,1),38
  318.   Next 
  319.   Wait Vbl : Erase 5
  320. Return 
  321. WAI:
  322.   For A=1 To 150
  323.     If Mouse Key Then EX=1 : Exit 
  324.     Wait Vbl 
  325.   Next 
  326. Return 
  327. SCROL:
  328.   If EX Then Return 
  329.   Y=128
  330.   For A=0 To 120 Step 8
  331.     Screen Offset 0,0,A : Wait Vbl 
  332.     If Mouse Key Then EX=1
  333.   Next 
  334.   Screen Copy 0,0,120,320,240 To 0,0,0
  335.   Screen Offset 0,0,0 : Wait 2
  336.   Ink 0 : Bar 0,120 To 320,240
  337. Return 
  338. PTEX:
  339.   X=160-Len(A$)*8
  340.   For A=1 To Len(A$)
  341.     Paste Icon X,Y,Asc(Mid$(Upper$(A$),A,1))-30
  342.     Add X,16
  343.   Next 
  344.   Add Y,16
  345. Return 
  346. Data 56,4,9,17,54,51,90,7,124,14,106,71,128,19,162,10,228,5,196,9
  347. Data 219,50,230,59,260,7,298,11,295,65,252,65,140,69,174,65
  348. Data 172,76,218,72,256,71,268,71,308,72,267,107,237,102,204,95,162,97
  349. Data 153,122,200,123,289,70
  350. ' CRACK data 
  351. Data 4,8,16,45,20,35,22,25,48,32,1,53,30,40,37,34,44,9,52,27,13,15,31
  352. Data 2,6,49,50,33,10,21,46,38,23,29,42,14,3,11,24,36,41
  353. Data 51,5,12,26,39,7,17,28,43,18,47,19
  354. ' CRACK 53 
  355. Data 4,0,12,0,20,0,36,0,44,0,52,0,76,0,84,0,92,0,116,0
  356. Data 124,0,132,0,148,0,170,0,0,8,36,8,56,8,72,8,96,8,112,8
  357. Data 148,8,164,8,0,16,36,16,44,16,52,16,72,16,80,16,88,16,96,16
  358. Data 112,16,148,16,158,16,0,24,36,24,56,24,72,24,96,24,112,24,148,24
  359. Data 164,24,4,32,12,32,20,32,36,32,56,32,72,32,96,32,116,32,124,32
  360. Data 132,32,148,32,170,32
  361. ' OUT 33 
  362. Data 1,34,3,34,5,34,10,34,16,34,20,34,22,34,24,34,26,34
  363. Data 1,39,3,39,5,39,11,39,13,39,15,39,23,39
  364. Data 0,35,6,35,10,35,16,35,23,35
  365. Data 0,37,6,37,10,37,16,37,23,37
  366. Data 0,38,6,38,10,38,16,38,23,38
  367. Data 0,36,6,36,10,36,16,36,23,36
  368. End Proc
  369. Procedure HISCORE
  370.   Shared SC(),NAM$()
  371.   LI=5 : RETEND=0
  372.   Load "Hiscores.dat",0
  373.   Gosub LEAHISCR
  374.   Gosub INITMAINSCR
  375.   Gosub INITHISCR
  376.   MUS=0
  377.   If RANK<101 and MU=1 Then MUS=2 : If Length(14) Then Bank Swap 3,14 Else Extension_8_0456 "mod.InHiscore",-3
  378.   If RANK>100 and MU=1 Then MUS=1 : If Length(3)=0 Then Extension_8_0456 "mod.InGame",-3
  379.   Gosub INITRAIN
  380.   Gosub INITLINESCR
  381.   Gosub INITSTARS
  382.   If MU=1 Then Extension_8_108E 3
  383.   M=63 : Extension_8_1466 M
  384.   Screen 1 : Colour 18,$444 : Colour 22,$888 : Colour 26,$BBB : Colour 30,$FFF
  385.   A=0 : SPR=1 : If RANK>100 Then Goto SKIP
  386.   Screen 0 : Fade 1 : Bob Off : Wait Vbl 
  387.   Cls : Locate 1,4 : Centre "Well done!!!"
  388.   Print : Print : Centre "You are one"
  389.   Print : Print : Centre "of the Best!!!"
  390.   Print : Print : Centre "Please Enter Your Name"
  391.   Print : Print : Print : Print "     RANK       NAME        SCORE";
  392.   Fade 2,0,$48F,$36C,$248 : Colour 18,$444 : Colour 22,$888 : Colour 26,$BBB : Colour 30,$FFF
  393.   SC(RANK)=SC : NAM$(RANK)="                "
  394.   X=RANK+12
  395.   Screen 1 : Locate 10,X : Print "..............." : Locate 27,X
  396.   Print String$("0",8-Len(Str$(SC(RANK))));
  397.   Print Mid$(Str$(SC(RANK)),2)
  398.   A=0 : B=RANK*8+50 : S=4
  399.   Repeat 
  400.     Add A,S : Wait Vbl : Screen Offset 1,,A : Rainbow 1,A/2,139,102
  401.     Amreg(SPR,1)=Rnd(180)+50 : Add SPR,1,1 To 7 : M=Max(10,63-(A/30)) : Extension_8_10C6 M
  402.     If B-A<41 Then S=3
  403.     If B-A<21 Then S=2
  404.     If B-A<11 Then S=1
  405.   Until B=A
  406.   Add A,-S : B=0 : A$=""
  407.   Do 
  408.     I$=Upper$(Inkey$)
  409.     If Asc(I$)>31 and Asc(I$)<91 and B<15 Then Inc B : A$=A$+I$
  410.     If Asc(I$)=8 and B>0 Then Dec B : A$=Left$(A$,B)
  411.     If Asc(I$)=13 Then Exit 
  412.     Amreg(SPR,1)=Rnd(180)+50 : Add SPR,1,1 To 7
  413.     Wait Vbl : Locate 10,X : Print A$; : If B=15 Then Print " "; Else Print "-";
  414.     If B<14 Then Print ".";
  415.     If Flip$(A$)="DAB SI GNITAEHC"
  416.       Screen 0 : Cls : Locate 1,4 : Centre Flip$("!dab si gnitaehc ,seY")
  417.       Print : Print : Centre "But it is the only way"
  418.       Print : Print : Centre "To get futher than the"
  419.       Print : Print : Centre "First 10 levels!"
  420.       Print : Print : Print : Print "     RANK       NAME        SCORE";
  421.       Screen 1
  422.       LI=150
  423.       A$="YES THATS RIGHT" : CHET=1 : CLEV=1
  424.     End If 
  425.     If Flip$(Left$(A$,13))=" LEVEL TNAW I" and B=15 and CHET=1
  426.       CLEV=Min(50,Max(1,Val(Right$(A$,2))))
  427.       If CLEV<10 : B$="0" : Else B$="" : End If 
  428.       A$="OKEY, DOKEY! "+B$+(Str$(CLEV)-" ")
  429.     End If 
  430.   Loop 
  431.   If A$="" Then A$="!! MR RETURN !!" : B=15
  432.   NAM$=A$ : If B<15 Then For C=B To 14 : NAM$=NAM$+" " : Next 
  433.   NAM$(RANK)=NAM$
  434.   Locate 10,X : Print NAM$; : Screen 0 : Fade 1 : Wait 16
  435.   Cls : Home 
  436.   Gosub INITMAINSCR2
  437. SKIP:
  438.   Screen 0 : Fade 2,0,$38F,$36C,$248 : Colour 18,$444 : Colour 22,$888 : Colour 26,$BBB : Colour 30,$FFF
  439.   Screen 2
  440.   B=400 : C=1 : EN=0
  441.   Repeat : Add A,1,0 To 904 : Screen Offset 1,,A : Rainbow 1,A/2,139,102 : Wait Vbl 
  442.     Amreg(SPR,1)=Rnd(180)+50 : Add SPR,1,1 To 7 : Add B,1,0 To 449 : M=Min(M+1,63) : Extension_8_10C6 M
  443.     If B=0 Then Fade 5,0,$FFF,0,$FFF,0,$FFF,0,$FFF
  444.     If B=150 Then Fade 5,0,0,$FF0,$FF0,0,0,$FF0,$FF0
  445.     If B=300 Then Fade 5,0,0,0,0,$FF,$FF,$FF,$FF
  446.     I$=Inkey$ : S=Scancode : If S Then Gosub KEYS
  447.   Until EN<>0 or Mouse Key
  448.   For C=1 To 7 : Amreg(C,1)=0 : Next 
  449.   Screen 2 : Fade 1 : Screen 0
  450.   E=Min(A/2+102,503)
  451.   For B=15 To 0 Step -1
  452.     If B=8 Then Fade 2
  453.     For C=A/2 To E
  454.       D=Rain(1,C) : Rain(1,C)=Max((D and 3840)-256,0)+Max((D and 240)-16,0)+Max((D and 15)-1,0)
  455.     Next 
  456.     View : Wait Vbl 
  457.   Next 
  458.   If CHET=1 Then LEV=CLEV
  459.   Amal Off : Wait Vbl : Sprite Off : Bob Off : Wait Vbl 
  460.   Screen Close 0 : Screen Close 1 : Rainbow Del : Screen Close 2
  461.   For A=M To 0 Step -1 : Wait Vbl : Extension_8_10C6 A : Next : Extension_8_10A8 
  462.   If MUS=2 and MEM=0 Then Erase 3
  463.   If MUS=2 and MEM=1 Then Bank Swap 3,14
  464.   If RANK<101 Then Gosub SAVHISCR
  465.   Erase 1
  466.   If EN=0
  467.   End If 
  468.   If EN=0 and LEV<51 and CHET=0 Then ENTACCESSCODE
  469.   If EN=0 or EN=2 Then Goto EXIPROC
  470.   Screen Open 0,320,9,2,0
  471.   Curs Off : Cls 0 : Centre "   Thanx for Playing..."
  472.   Palette 0,0 : Screen Display 0,,140,,
  473.   Fade 2,0,$FFF : Wait 250 : Fade 2 : Wait 32 : Screen Close 0
  474.   Goto EXIPROC
  475. End 
  476. KEYS:
  477.   If S=80 Then Gosub MUSONOFF
  478.   If I$=Chr$(27) Then EN=1
  479.   If S=81 Then Gosub SOUONOFF
  480.   If S=82 Then Gosub LEVELS
  481.   If S=83 Then EN=2
  482. Return 
  483. LEVELS:
  484.   If LEV<51 Then LEV=51 : S$="Editor" Else LEV=1 : S$="Normal"
  485.   Screen 0 : Locate 8,10 : Print S$ : Screen 2
  486. Return 
  487. MUSONOFF:
  488.   If MU=0 Then MU=1 : M$="on!" Else MU=0 : M$="off"
  489.   Screen 0 : Locate 14,9 : Print M$ : Screen 2
  490. Return 
  491. SOUONOFF:
  492.   If SO=0 Then SO=1 : S$="on!" Else SO=0 : S$="off"
  493.   Screen 0 : Locate 31,9 : Print S$ : Screen 2
  494. Return 
  495. INITLINESCR:
  496.   Screen Open 2,320,9,8,Lowres
  497.   Curs Off : Flash Off : Cls 0 : Paper 0
  498.   Palette 0,0,0,0,0,0,0,0 : Screen Display 2,,241,,9
  499.   Writing 1
  500.   Pen 1 : Centre "Welcome to Crack out!!!!"
  501.   Pen 2 : Centre "A Game by H. P. Obermeier and C. Hodges"
  502.   Pen 4 : Centre "Press Button to Start"
  503.   Writing 0
  504. Return 
  505. LEAHISCR:
  506.   Open In 1,"Hisc.dat"
  507.     For A=1 To 100
  508.       NAM$(A)=Input$(1,15)
  509.       A$=Input$(1,4)
  510.       SC(A)= Extension_8_0998(A$)
  511.     Next 
  512.   Close 1
  513. Return 
  514. SAVHISCR:
  515.   Trap Open Out 1,"Hisc.dat"
  516.   If Errtrap Then Return 
  517.     For A=1 To 100
  518.       Print #1,NAM$(A)+ Extension_8_08D2(SC(A));
  519.     Next 
  520.   Close 1
  521. Return 
  522. INITHISCR:
  523.   Screen Open 1,320,1009,2,Lowres
  524.   Flash Off : Curs Off : Cls 0 : Palette 0,$8FF
  525.   Screen Display 1,,140,,100 : RANK=101
  526.   For A=100 To 1 Step -1
  527.     If SC(A)<SC Then RANK=A : SC(A)=SC(A-1) : NAM$(A)=NAM$(A-1)
  528.     Locate 5,A+12 : Print A : Locate 10,A+12 : Print NAM$(A) : Locate 27,A+12
  529.     Print String$("0",8-Len(Str$(SC(A))));
  530.     Print Mid$(Str$(SC(A)),2)
  531.   Next 
  532. Return 
  533. INITMAINSCR:
  534.   Screen Open 0,320,105,4,Lowres
  535.   Flash Off : Paper 0 : Pen 1 : Curs Off : Cls 0
  536.   Screen Display 0,128,36,,
  537.   Palette 0,0,0,0
  538. INITMAINSCR2:
  539.   Bob 1,85,0,5 : Locate 1,8
  540.   If MU=0 Then M$="off" Else M$="on!"
  541.   If SO=0 Then S$="off" Else S$="on!"
  542.   Print : Centre "F1 Music "+M$+"     F2 Sound "+S$
  543.   If LEV<51 Then M$="Normal" : LEV=1 Else M$="Editor" : LEV=51
  544.   Print : Centre "F3 "+M$+" Levels F4 Editor   "
  545.   Print : Print : Print "     RANK       NAME        SCORE";
  546. Return 
  547. INITRAIN:
  548.   Set Rainbow 1,1,504,"","",""
  549.   R=60 : B=60 : G=30 : RS=-1 : GS=-4 : BS=-3
  550.   For A=0 To 503
  551.     Rain(1,A)=((R/4)*256)+((G/4)*16)+(B/4)
  552.     Add R,RS : Add G,GS : Add B,BS
  553.     If R<0 Then R=0 : RS=3
  554.     If R>60 Then R=60 : RS=-1
  555.     If G<0 Then G=0 : GS=4
  556.     If G>60 Then G=60 : GS=-2
  557.     If B<0 Then B=0 : BS=1
  558.     If B>60 Then B=60 : BS=-4
  559.   Next 
  560. Return 
  561. INITSTARS:
  562.   Autoback 0
  563.   A$="A: P; L X=X-R0; I X<110 J N; J A; N: L X=488; L Y=R1; J A; "
  564.   For A=1 To 7
  565.     Sprite A,Rnd(352)+112,Rnd(200)+40,1
  566.     Channel A To Sprite A : Amal A,A$
  567.   Next 
  568.   For A=1 To 7
  569.     Sprite A,Rnd(320)+128,Rnd(180)+50,4-(A+1)/3.5
  570.   Next 
  571.   Wait Vbl : Amal On 
  572.   For A=1 To 7 : Amreg(A,0)=(A+3)/1.4 : Amreg(A,1)=Rnd(180)+50 : Next 
  573. Return 
  574. EXIPROC:
  575. End Proc[EN]
  576. Procedure LEVELEDIT
  577.   Shared C()
  578.   Unpack 9 To 0
  579.   Screen Hide 0
  580.   For X=0 To 17
  581.     Get Cblock X+1,X*8,0,8,16
  582.   Next 
  583.   For A=0 To 15 : C(A)=Colour(A) : Next 
  584.   Screen Open 1,320,16,16,Lowres
  585.   Paper 0 : Flash Off : Curs Off : Cls : Palette 0,$FFF
  586.   For A=0 To 15 : Colour A,0 : Next 
  587.   FL$="(FFF,2)(EEE,2)(DDD,2)(CCC,2)(BBB,2)(AAA,2)(999,2)(888,2)(999,2)(AAA,2)(BBB,2)(CCC,2)(DDD,2)(EEE,2)"
  588.   Wait Vbl : Flash 17,FL$
  589.   Wait Vbl : Flash 18,FL$
  590.   Wait Vbl : Flash 19,FL$
  591.   For A=1 To 18 : Put Cblock A,A*8-8,0 : Next 
  592.   LEV=51 : LL=50 : LE=51
  593.   Locate 19,0 : Print "LO SA +-  LEVEL:";LE;" ";
  594.   Locate 19,1 : Print "AD VE";
  595.   Screen Open 0,320,192,16,Lowres
  596.   Curs Off : Paper 0 : Flash Off : Cls 0
  597.   Screen Display 0,128,67,320,192
  598.   For A=0 To 15 : Colour A,C(A) : Next 
  599.   Screen 1 : Fade 3 To 0 : Screen 0
  600.   For X=0 To 39
  601.     For Y=0 To 11
  602.       F(X,Y)=0
  603.       Put Cblock F(X,Y)+1,X*8,Y*16
  604.     Next 
  605.   Next 
  606.   A=6 : X=1 : Gosub CHGBLOCK
  607.   Wait Vbl : Flash 17,FL$
  608.   Wait Vbl : Flash 18,FL$
  609.   Wait Vbl : Flash 19,FL$
  610.   Limit Mouse 128,50 To 447,258
  611.   Change Mouse 2
  612.   Show On : Screen 0 : CHG=0
  613.   Do 
  614.     M=Mouse Key : X=(X Mouse-129)/8 : Y=Y Screen(Mouse Screen,Y Mouse-1)/16
  615.     If Mouse Screen=1 and M and A<>X Then Gosub CHGBLOCK : M=0
  616.     If Mouse Screen=0 and M=1 Then CHG=1 : F(X,Y)=A : Put Cblock A+1,X*8,Y*16
  617.     If Mouse Screen=0 and M=2 Then CHG=1 : F(X,Y)=0 : Put Cblock 1,X*8,Y*16
  618.     EX=(Inkey$=Chr$(27))
  619.     If EX and CHG Then ALERT["Level not saved!","Quit out!","Sorry man!"] : If Param=1 Then CHG=0 Else Gosub BLITZ
  620.     If EX and CHG=0 Then Exit 
  621.   Loop 
  622.   Hide On 
  623.   Screen 1 : Fade 4 : Screen 0 : Ink 0
  624.   For B=0 To 9
  625.     For A=0 To 31 : Draw A*10+B,0 To A*10+B,192 : Next 
  626.     Wait Vbl 
  627.   Next 
  628.   Screen Close 1 : Screen Close 0
  629.   Pop Proc
  630.   End 
  631. CHGBLOCK:
  632.   If X=19 or X=20 Then Gosub LADELEVEL
  633.   If X=22 or X=23 Then Gosub SPEICHERELEVEL
  634.   If X=25 Then LE=Min(LE+1,99) : Wait 13-M*4
  635.   If X=26 Then LE=Max(LE-1,51) : Wait 13-M*4
  636.   Screen 1 : Locate 19,0 : Print "LO SA +-  LEVEL:";LE;" ";
  637.   Locate 19,1 : Print "AD VE";
  638.   If X>17 Then Screen 0 : Return 
  639.   Put Cblock A+1,A*8,0
  640.   Box X*8,0 To X*8+7,15 : Screen 0 : A=X
  641. Return 
  642. LADELEVEL:
  643.   A$="Levels/"+Mid$(Str$(LE),2)
  644.   If Exist(A$)=0 Then X=26 : ALERT["No Level"+Str$(LE)+" on this disk!","It doesn't matter!","Shit!"] : Goto BLITZ
  645.   If LL=LE and CHG=0 Then ALERT["Level already loaded!","Aha!","Alles Banane?"] : Goto BLITZ
  646.   If CHG=1 Then ALERT["Last changes not saved!","Load it anyway","Ooops!"] : If Param=2 Then Goto BLITZ
  647.   Erase 6 : Reserve As Work 6,480
  648.   Bload "Levels/"+Mid$(Str$(LE),2),6
  649.   C=Start(6)
  650.   For XX=0 To 39
  651.     For YY=0 To 11
  652.       F=Peek(C) : Inc C : If F<>F(XX,YY) Then Put Cblock F+1,XX*8,YY*16
  653.       F(XX,YY)=F
  654.     Next 
  655.   Next 
  656.   LL=LE : Erase 6 : CHG=0
  657. Return 
  658. SPEICHERELEVEL:
  659.   If LL=LE and CHG=0 Then ALERT["No changes made!","I'll make some!","Sorry!"] : Goto BLITZ
  660.   A$=""
  661.   If Exist("Levels/"+Mid$(Str$(LE),2)) Then Gosub SURE : If Param=2 Then Return 
  662.   For XX=0 To 39
  663.     For YY=0 To 11
  664.       A$=A$+Chr$(F(XX,YY))
  665.     Next 
  666.   Next 
  667.   Trap Bsave "Levels/"+Mid$(Str$(LE),2),Varptr(A$) To Varptr(A$)+480
  668.   If Errtrap Then ALERT["Disk is write protected!","I'll remove it!","Let it be!"] : If Param=1 Then Goto SPEICHERELEVEL Else Goto BLITZ
  669.   CHG=0
  670. Return 
  671. SURE:
  672.   Erase 6 : Reserve As Work 6,480
  673.   Bload "Levels/"+Mid$(Str$(LE),2),6
  674.   C=Start(6)
  675.   For XX=0 To 39
  676.     For YY=0 To 11
  677.       F=Peek(C) : Inc C : If F<>F(XX,YY) Then Put Cblock F+1,XX*8,YY*16
  678.     Next 
  679.   Next 
  680.   ALERT["Level Exists already!!!","Kill it!","Forget it!"]
  681.   C=Start(6)
  682.   For XX=0 To 39
  683.     For YY=0 To 11
  684.       F=Peek(C) : Inc C : If F<>F(XX,YY) Then Put Cblock F(XX,YY)+1,XX*8,YY*16
  685.     Next 
  686.   Next 
  687. Return 
  688. BLITZ:
  689.   For C=1 To 15 : Colour C,$FFF : Next : Fade 1 To 1
  690. Return 
  691. End Proc
  692. Procedure ALERT[T$,YES$,NO$]
  693.   Hide 
  694.   Screen Open 2,320,40,8,0
  695.   Curs Off : Paper 0 : Flash Off : Cls 0
  696.   Palette 0,$F80,$F00,$F0,$FFF
  697.   Screen Display 2,128,-10,,
  698.   Flash 1,"(F80,50)(000,50)"
  699.   Ink 1 : Box 0,0 To 319,39 : Box 1,1 To 318,38
  700.   Box 2,2 To 317,37
  701.   Pen 4 : Locate 0,1 : Centre T$
  702.   Pen 3 : Locate 10-Len(YES$)/2,3 : Print YES$
  703.   Pen 2 : Locate 30-Len(NO$)/2,3 : Print NO$
  704.   For A=-10 To 40 Step 2
  705.     Wait Vbl : Screen Display 2,128,A,,
  706.   Next 
  707.   Repeat : M=Mouse Key : Until M
  708.   For A=40 To -10 Step -2
  709.     Wait Vbl : Screen Display 2,128,A,,
  710.   Next 
  711.   Screen Close 2 : Show 
  712. End Proc[M]
  713. Procedure MAIN
  714.   Load "Levels/NormLev.dat",15
  715.   Load "InGameSprites.dat",0
  716.   Load "InGame.sam",5
  717.    Extension_8_142A 5
  718.   If Length(3)=0 : Extension_8_0456 "mod.InGame",-3 : End If 
  719.   Unpack 9 To 0
  720.   Screen Hide 0
  721.   For X=0 To 17
  722.     Get Cblock X+1,X*8,0,8,16
  723.   Next 
  724.   Screen Open 1,320,9,2,Lowres
  725.   Curs Off : Cls 0 : Palette 0,0
  726.   Print "BALLS: 05";At(12,);"SCORE: 0000000";At(30,);"LEVEL: 01";
  727.   Fade 1,0,$FFF : Wait 8
  728.   Screen Open 0,336,208,16,Lowres
  729.   Curs Off : Paper 0 : Flash Off : Cls 0
  730.   Screen Display 0,112,58,336,208
  731.   For X=0 To 41
  732.     For Y=0 To 12
  733.       F(X,Y)=99
  734.     Next 
  735.   Next 
  736.   Limit Mouse 128+300,59 To 128+300,230
  737.   A$=A$+"A: P; L X=X+R0; L Y=Y+R1; I X<128 J B; I X>448 J C; "
  738.   A$=A$+"F: I Y<66 J D; I Y>250 J E; J A; B: L X=128; L R0=0-R0; L R3=1; J F; "
  739.   A$=A$+"C: I R2=0 J A; L R3=2; J C; D: L Y=66; L R1=0-R1; L R3=1; J A; "
  740.   A$=A$+"E: L Y=250; L R1=0-R1; L R3=1; J A;"
  741.   Make Mask 
  742.   Sprite 4,0,0,1
  743.   Channel 1 To Sprite 4
  744.   Amal 1,A$
  745.   A$=""
  746.   A1$="A: P; L X=X+R0; L Y=Y+R1; I X<135 J B; I X>400 J C; F: I Y<72 J D; "
  747.   A1$=A1$+"I Y>250 J E; J A; B: L X=135; L R0=0-R0; J F; "
  748.   A1$=A1$+"C: L X=400; L R0=0-R0; J F; D: L Y=72; L R1=0-R1; J A; "
  749.   A1$=A1$+"E: L Y=250; L R1=0-R1; J A;"
  750.   A2$="A: P; I X<RA J H; I X>RA J I; J: I Y<RB J K; I Y>RB J L; G: I X<135 J B; "
  751.   A2$=A2$+"I X>400 J C; F: I Y<72 J D; I Y>250 J E; J A; H: L X=X+1; J J;"
  752.   A2$=A2$+"I: L X=X-1; J J; K: L Y=Y+1; J G; L: L Y=Y-1; J G; B: L X=135; J F; "
  753.   A2$=A2$+"C: L X=400; J F; D: L Y=72; J A; E: L Y=250; J A; "
  754.   Sprite 6,0,0,13
  755.   Channel 2 To Sprite 6
  756.   Amal 2,A1$
  757.   If RETEND=0 Then SC=0 : LE=LEV
  758.   SLE=LE
  759.   Amreg(2,0)=1 : Amreg(2,1)=1 : LED=0 : Extension_8_1466 SV
  760.   C=0 : Gosub LADELEVEL : AN=8
  761.   If LE>25 Then Amal 2,A2$
  762.   NELI=SC/100000+1
  763.   If MU=1 Then Extension_8_108E 3 : Extension_8_10C6 MV
  764.   Ink 4 : Box 8,0 To 336,207 : Box 15,7 To 336,200
  765.   Ink 12 : Box 9,1 To 336,206 : Box 14,6 To 336,201
  766.   Ink 11 : Box 10,2 To 336,205 : Box 13,5 To 336,202
  767.   Ink 10 : Box 11,3 To 336,204 : Box 12,4 To 336,203
  768. NEWLIVE:
  769.   Amreg(1,2)=1 : KSP=0 : AN=8 : BAP=0 : AUT=0 : RX=-BSP : RY=BSP
  770.   Amreg(1,0)=RX : Amreg(1,1)=RY
  771.   U=3 : Gosub DISPLAY
  772.   Gosub NEWLIVE2
  773.   Amreg(1,2)=0 : Amreg(1,3)=0 : V=0 : Wait Vbl : Amreg(1,2)=1 : C=0
  774.   Amal On : MA=0 : MY=0
  775.   Do 
  776.     Wait Vbl : RX=Amreg(1,0) : RY=Amreg(1,1) : M=Mouse Key : Add BL,1,0 To 10
  777.     If AN<>Min(Max(AN+KSP,0),8) and SO=1 Then Extension_8_145A 8,6,12000-((AN+KSP)*200)
  778.     If AUT=1 Then Y Mouse=Y Sprite(4)-12
  779.     A=F(Max(X Sprite(6)-128,0)/8,Max(Y Sprite(6)-65,0)/16)>0
  780.     If A and QC=0 Then Amreg(2,0)=-Amreg(2,0) : Amreg(2,1)=-Amreg(2,1) : QC=1
  781.     If A=0 Then QC=0
  782.     AN=Min(Max(AN+KSP,0),8) : U=0
  783.     MY=Max(Min(Y Mouse,222+AN),67-AN) : V=MA-MY
  784.     Amreg(0)=X Sprite(4) : Amreg(1)=Y Sprite(4)
  785.     X=Min(Max((X Sprite(4)-124+RX)/8,0),39)
  786.     Y=Min(Max((Y Sprite(4)-65+RY)/16,0),11)
  787.     Sprite 2,428,MY,2+AN : I$=Inkey$
  788.     F=F(X,Y) : GL=Max(GL-1,0)
  789.     If M=2 Then Gosub PAUSE
  790.     If M=1 Then AUT=0
  791.     If Amreg(1,3)=1 Then Inc SC : U=1 : Amreg(1,3)=0 : If SO Then Extension_8_145A 2,1,5000+Rnd(2000)
  792.     Exit If Amreg(1,3)=2
  793.     A=Sprite Col(4,2 To 2) : If A and C=0 Then C=1 : Gosub BOUNCE
  794.     If A=0 Then C=0
  795.     A=Sprite Col(6,4 To 4) : If A and C2=0 Then Swap RX,RY : C2=Amreg(2,1) : Amreg(2,1)=Amreg(2,0) : Amreg(2,0)=C2 : C2=1 : If SO Then Extension_8_145A 4,4,5000
  796.     If A=0 Then C2=0
  797.     If I$<>"" Then Gosub KEYS
  798.     If F>0 Then Gosub BLOCK
  799.     Amreg(1,0)=RX : Amreg(1,1)=RY
  800.     MA=MY : If ST<1 Then Exit 
  801.     If U Then Gosub DISPLAY
  802.   Loop 
  803.   Amreg(1,3)=0
  804.   If ST<>0
  805.     For A=AN To 8 : Sprite 2,428,MY,A+2 : Wait Vbl : Next 
  806.     If SO : Extension_8_145A 4,3,5000 : End If 
  807.     For A=1 To 6 : Sprite 2,427,MY,A+18 : Wait Vbl : Wait Vbl : Next 
  808.     Sprite Off 2 : Wait 4
  809.   End If 
  810.   If ST>0 and LI>1 Then Dec LI : Gosub NORMAL : Goto NEWLIVE
  811.   If ST=0 and SO Then Extension_8_145A 1,5,9000
  812.   If ST=0
  813.     Inc LI : Amal Freeze : Inc LE
  814.     If LE=51
  815.       Screen 1 : Fade 1 : Wait 16 : Screen 0 : Fade 1 : Wait 16
  816.       If MU=1
  817.         For A=MV To 0 Step -1 : Extension_8_10C6 A : Wait Vbl : Next 
  818.       End If 
  819.       Amal Off : Sprite Off : Extension_8_10A8 
  820.       Screen Close 0 : Screen Close 1 : Wait Vbl 
  821.       Erase 1 : Erase 5 : Erase 6
  822.       PP=805847 : Goto EXIPROC
  823.     End If 
  824.     If LE=100 : LE=1 : LI=5 : End If 
  825.     Wait Vbl : Gosub LADELEVEL
  826.     Goto NEWLIVE
  827.   End If 
  828.   Dec LI : U=3 : Gosub DISPLAY
  829.   Amal Off : Wait Vbl : Sprite Off 
  830.   Screen 0 : Double Buffer : X=-50 : RX=0
  831.   For A=-62 To 60 Step 3 : Y=A : Gosub GAMEOVER : Next 
  832.   Screen 1 : Fade 3
  833.   B=MV
  834.   For A=63 To 0 Step -1
  835.     B=Max(B-1,0) : If MU Then Extension_8_10C6 B
  836.     Gosub GAMEOVER
  837.   Next 
  838.    Extension_8_10A8 
  839.   For A=0 To 50 : Gosub GAMEOVER : Next 
  840.   Screen 0 : Fade 3
  841.   For A=60 To 200 Step 3 : Y=A : Gosub GAMEOVER : Next 
  842.   Wait Vbl : Screen Close 0 : Screen Close 1 : Wait Vbl 
  843.   Erase 1 : Erase 5 : Erase 6
  844.   PP=0
  845. Goto EXIPROC
  846. NORMAL:
  847.   Fade 3,,,,,,,,,,,,,,,,,,$124,$346,$457,$679,$89B,$9AC,$BCE,,,,,,,,
  848. Return 
  849. BAP:
  850.   Fade 3,,,,,,,,,,,,,,,,,,$412,$643,$754,$976,$B98,$CA9,$ECB,,,,,,,,
  851. Return 
  852. GAMEOVER:
  853.   X=X+RX : If X>0 Then Dec RX
  854.   If X<0 Then Inc RX
  855.   Bob 1,136+X/5,Y,12 : Wait Vbl 
  856. Return 
  857. BLOCK:
  858.   SX=Max((X Sprite(4)-124)*4,0) : SY=Max((Y Sprite(4)-61)*4,0)
  859.   For A=0 To 3
  860.     SX=SX+RX
  861.     SY=SY+RY
  862.     If F(Max(SX/32,0),Max(SY/64,0))=0 Then AX=Max(SX/32,0) : AY=Max(SY/64,0)
  863.   Next : F2=0
  864.   If F=17 Then AUT=1 : KSP=1 : BAP=0 : Gosub NORMAL
  865.   If F=16 Then LI=LI+1 : U=1 : KSP=1 : BAP=0 : AUT=0 : Gosub NORMAL : If SO Then Extension_8_145A 4,5,8000
  866.   If F=15 Then KSP=1 : BAP=1 : AUT=0 : Gosub BAP
  867.   If F=14 Then KSP=-1 : BAP=0 : AUT=0 : Gosub NORMAL
  868.   If F=13 Then KSP=1 : BAP=0 : AUT=0 : F(39,BL)=12 : Put Cblock 13,328,BL*16+8 : F(39,BL+1)=12 : Put Cblock 13,328,BL*16+24 : Gosub NORMAL
  869.   If F>12 and F<18 and SO Then Extension_8_145A 1,6,10000
  870.   If F=6 Then Add SC,100 : Inc U : F2=Rnd(4)+13 : Gosub RANDOM : If SO Then Extension_8_145A 2,4,8500+Rnd(1000)
  871.   If F>6 and F<11 Then Add SC,100 : Inc U : F2=F+1 : Gosub RANDOM : If SO Then Extension_8_145A 2,1,5000+Rnd(2000)
  872.   If F<6 or F=11 or F>12 Then Add SC,Min(F,5)*250 : Inc U : If SO Then Extension_8_145A 2,2,7500+Rnd(1000)
  873.   If F<6 or F=11 Then Dec ST
  874.   If F=12 Then Add SC,2 : Inc U : F2=12 : If SO Then Extension_8_145A 2,1,5000+Rnd(2000)
  875.   If AX<>X Then RX=-RX
  876.   If AY<>Y Then RY=-RY
  877.   F(X,Y)=F2 : Put Cblock F2+1,X*8+16,Y*16+8
  878. Return 
  879. PAUSE:
  880.   P=1 : Amal Freeze 
  881.   Bob 1,150,83,14 : Bob 2,142,108,18 : Bob 3,142,118,15
  882.   Bob 4,191,118,17-SO : Bob 5,191,108,17-MU : Wait Vbl 
  883.   MUA=MU : SOA=SO
  884.   Repeat 
  885.     Y Mouse=MY : I$=Inkey$ : Gosub KEYS
  886.     If Mouse Key=1 or ST=-1 Then P=0
  887.     If MUA<>MU Then MUA=MU : Bob 5,191,108,17-MU : Wait Vbl 
  888.     If SOA<>SO Then SOA=SO : Bob 4,191,118,17-SO : Wait Vbl 
  889.   Until P=0
  890.   Repeat : Until Mouse Key=0
  891.   Bob Off 
  892.   Amal On 
  893. Return 
  894. KEYS:
  895.   If I$="p" and P=1 Then P=0 : Return 
  896.   If I$="p" and P=0 Then Gosub PAUSE : Return 
  897.   If I$=Chr$(27) Then ST=-1 : Return 
  898.   If I$="s" and SO=0 Then SO=1 : Return 
  899.   If I$="s" and SO=1 Then SO=0 : Return 
  900.   If I$="m" and MU=1 Then MU=0 : Extension_8_10C6 0 : Return 
  901.   If I$="m" and MU=0 and Length(3)<>0 Then MU=1 : Extension_8_10C6 MV : Return 
  902.   If I$="m" and MU=0 Then Amal Freeze : Extension_8_0456 "mod.InGame",-3 : Extension_8_108E 3 : Extension_8_10C6 MV : MU=1 : If P=0 Then Gosub PAUSE : Return 
  903.   If I$="n" Then MV=Max(MV-1,10) : If MU Then Extension_8_10C6 MV : Return 
  904.   If I$="j" Then MV=Min(MV+1,63) : If MU Then Extension_8_10C6 MV : Return 
  905.   If I$="a" and SV>25 Then Add SV,-2 : Extension_8_1466 SV : Extension_8_145A 2,1,5000 : Return 
  906.   If I$="w" and SV<63 Then Add SV,2 : Extension_8_1466 SV : Extension_8_145A 2,1,5000 : Return 
  907. '  If I$="l" and LED=0 Then Led On : LED=1 : Return  
  908. '  If I$="l" and LED=1 Then Led Off : LED=0 : Return 
  909.   If I$=Tab$ and PAL=1 Then Poke $DFF1DC,$20 : PAL=0 : Return 
  910.   If I$=Tab$ and PAL=0 Then Poke $DFF1DC,0 : PAL=1 : Return 
  911. Return 
  912. NEWLIVE2:
  913.   WAI=0 : Amal Freeze 1
  914.   If SO Then Extension_8_145A 1,4,10000
  915.   Do 
  916.     MA=MY : M=Mouse Key
  917.     Wait Vbl : MY=Max(Min(Y Mouse,222+AN),67-AN) : Sprite 2,128+300,MY,2+AN
  918.     Sprite 4,128+292,MY+12,1 : Amreg(0)=X Sprite(4) : Amreg(1)=Y Sprite(4)
  919.     Inc WAI : If WAI>200 or M=1 or ST=-1 Then Exit 
  920.     I$=Inkey$ : If I$<>"" Then Gosub KEYS
  921.     If MA<>MY Then RY=Sgn(MY-MA)*Abs(RY) : Amreg(1,1)=RY
  922.     If M=2 Then Gosub PAUSE
  923.     A=F(Max(X Sprite(6)-128,0)/8,Max(Y Sprite(6)-65,0)/16)>0
  924.     If A and QC=0 Then Amreg(2,0)=-Amreg(2,0) : Amreg(2,1)=-Amreg(2,1) : QC=1
  925.     If A=0 Then QC=0
  926.   Loop 
  927.   MY=0 : MA=0 : Amal On 
  928.   If SO Then Extension_8_145A 4,3,10000+Rnd(4000)
  929. Return 
  930. BOUNCE:
  931.   If RX<0 Then C=1 : Return 
  932.   If BAP=1 Then C=0 : Gosub NEWLIVE2
  933.   If SO=1 Then Extension_8_145A 4,3,10000+Rnd(4000)
  934.   RX=-RX : C=1 : SC=SC+50 : U=1
  935.   RY=RY-Sgn(V) : If RY=0 Then RY=RY-Sgn(V)
  936.   RY=Min(Max(-5,RY),5)
  937. Return 
  938. LADELEVEL:
  939.   Fade 3
  940.   U=3 : Gosub DISPLAY
  941.   If LE=10 and SLE<>10 Then SHOACCESSCODE["XOBNAELC"]
  942.   If LE=20 and SLE<>20 Then SHOACCESSCODE["EMAGTSOL"]
  943.   If LE=30 and SLE<>30 Then SHOACCESSCODE["YOBOLLEH"]
  944.   If LE=40 and SLE<>40 Then SHOACCESSCODE["EMAGDOOG"]
  945.   If LE<51 Then Goto NORMALLEVELS
  946.   ST=0 : If Exist("Levels/"+Mid$(Str$(LE),2))=0 Then Add LE,1,1 To 99 : If LE=1 Then LI=5 : Goto LADELEVEL Else Goto LADELEVEL
  947.   Erase 7 : Reserve As Work 7,480
  948.   Bload "Levels/"+Mid$(Str$(LE),2),7
  949.   A=Start(7) : Wait 45
  950.   For X=0 To 39
  951.     For Y=0 To 11
  952.       F=Peek(A) : Inc A
  953.       If F<>F(X,Y) Then Put Cblock F+1,X*8+16,Y*16+8
  954.       F(X,Y)=F : If F>0 and F<12 and F<>6 Then Inc ST
  955.     Next 
  956.   Next 
  957.   Erase 7
  958. BACK:
  959.   For A=0 To 11
  960.     If F(0,A)=0 Then Sprite 6,0,A*16+58,13
  961.   Next 
  962.   Fade 3,0,$FFF,$E00,$800,$333,$F,$6,$D0,$40,$DDD,$BBB,$888,$666,$215,$42A,$63F,0,$124,$346,$457,$679,$89B,$9AC,$BCE,0,$444,$666,$777,$999,$BBB,$CCC,$EEE
  963. Return 
  964. NORMALLEVELS:
  965.   ST=0 : X=0 : Y=0 : D=Start(15)+Deek(Start(15)+((LE-1)*2)) : Wait 45
  966.   Do 
  967.     E=Peek(D) : F=E and 31 : Inc D
  968.     For A=0 To E/32
  969.       If F<>F(X,Y) Then Put Cblock F+1,X*8+16,Y*16+8
  970.       F(X,Y)=F
  971.       If F>0 and F<12 and F<>6 Then Inc ST
  972.       Inc Y
  973.       If Y>11 Then Y=0 : Inc X : If X>39 Then X=0 : Y=0 : Exit 2
  974.     Next 
  975.   Loop 
  976.   If LE=25 Then Amal 2,A2$
  977. Goto BACK
  978. RANDOM:
  979.   If AX<>X Then RX=-RX
  980.   If AY<>Y Then RY=-RY
  981. Return 
  982. DISPLAY:
  983.   If NELI*100000<SC Then Inc LI : Inc NELI : U=2 : If SO Then Extension_8_145A 1,5,8000
  984.   Screen 1
  985.   If U>1 Then S$=Mid$(Str$(Min(LI,99)),2) : Print At(7,0);String$("0",2-Len(S$));S$;
  986.   S$=Mid$(Str$(SC),2)
  987.   Print At(19,0);String$("0",7-Len(S$));S$;
  988.   If U>2 Then S$=Mid$(Str$(LE),2) : Print At(37,0);String$("0",2-Len(S$));S$;
  989.   Screen 0
  990. Return 
  991. EXIPROC:
  992. End Proc[PP]
  993. Procedure SHOACCESSCODE[C$]
  994.   Wait 48
  995.   Screen Open 2,320,17,2,0
  996.   Curs Off 
  997.   Palette 0,0
  998.   Screen Display 2,128,0,320,16
  999.   Centre "WELL DONE! THE ACCESS CODE FOR" : Print 
  1000.   Centre "THE NEXT LEVEL IS "+Flip$(C$)
  1001.   Fade 3,0,$FFF
  1002.   For A=20 To 140 Step 5
  1003.     Screen Display 2,128,A,320,16
  1004.     Wait Vbl 
  1005.   Next 
  1006.   Wait 360
  1007.   For A=140 To 20 Step -5
  1008.     Screen Display 2,128,A,320,16
  1009.     Wait Vbl 
  1010.   Next 
  1011.   Screen Close 2
  1012. End Proc
  1013. Procedure ENGAME[CODE]
  1014.   If CODE<>805847 Then End 
  1015.   If Length(3) Then Bank Swap 3,15
  1016.   Load "End.dat",0
  1017.    Extension_8_0456 "mod.End",-3
  1018.   Load "End.sam",5
  1019.    Extension_8_142A 5
  1020.   SO=1 : MU=1
  1021.   Screen Open 0,320,200,8,0
  1022.   Paper 0 : Flash Off : Curs Off : Cls : Hide 
  1023.   Palette 0,0,0,0,0,0,0,0
  1024.   Global S,EX,I$
  1025.   A$=A$+"A: P; L X=X+R0; L Y=R1/5+Y; L R1=R1+1; "
  1026.   A$=A$+"   I Y>250 J B; "
  1027.   A$=A$+"   J A; "
  1028.   A$=A$+"B: L R2=0; P; I R2=1 J A; J B;"
  1029.   For N=0 To 13
  1030.     Sprite N+8,0,0,1 : Channel N To Sprite N+8 : Amal N,A$
  1031.   Next 
  1032.   Poke $DFF1DC,$20
  1033.   A$="A: F R0=0 To 36; N R0; L X=Z(255)+25; L Y=Z(127)+10; "
  1034.   A$=A$+" A 1,(2,3)(3,4)(4,20)(3,4)(2,3)(0,1); J A; "
  1035.   Bob 1,-10,-10,4 : Bob 2,-10,-10,4
  1036.   Channel 14 To Bob 2 : Channel 15 To Bob 1 : Amal 14,A$ : Amal 15,"PPPPPPPPPPPPP;"+A$
  1037.   For A=0 To 75
  1038.     X=Rnd(320) : Y=Rnd(170) : C=Rnd(2)+1
  1039.     Gosub STAR
  1040.   Next 
  1041.   Paper 0 : Pen 1 : Gr Writing 0 : Print 
  1042.   CT["WELL DONE!"] : Print : Print 
  1043.   CT["YOU HAVE COMPLETED ALL 50 LEVELS."] : Print : Print 
  1044.   CT["WE HOPE YOU ENJOYED PLAYING THIS GAME!"] : Print : Print 
  1045.   CT["DO YOU KNOW: CHEATING IS BAD?"] : Print : Print : Print 
  1046.   CT["PRESS ESC TO ABORT GAME,"] : Print : Print 
  1047.   CT["F1 TO PLAY THE EDITOR LEVELS"] : Print : Print 
  1048.   CT["OR F2 TO RESTART AT LEVEL 1"] : Print : Print 
  1049.   CT["BUT MORE DIFFICULT!"]
  1050.   Double Buffer : Amal On 14 : Amal On 15 : Extension_8_108E 3
  1051.    Extension_8_1466 30
  1052.   KSC=0 : I$="" : EX=0
  1053.   If MU Then Extension_8_10C6 63 Else Extension_8_10C6 0
  1054.   Fade 3,0,$444,$888,$FFF,0,$444,$888,$FFF : COUNT=0
  1055.   Repeat 
  1056.     If COUNT<50 Then Gosub ROCKETS
  1057.     If COUNT=50 Then Gosub REINIT
  1058.     If COUNT>50 Then WAI[70] : Gosub FARBE
  1059.     Inc COUNT
  1060.   Until EX
  1061.   If KSC=80 Then LE=51 : BSP=4
  1062.   If KSC=81 Then LE=1 : BSP=5
  1063.   If MU=0 Then Extension_8_10A8 
  1064.   Fade 4 : For A=63 To 0 Step -1 : Extension_8_10C6 A : Wait Vbl : Next 
  1065.   Amal Off : Sprite Off : Bob Off : Extension_8_10A8 : Screen Close 0
  1066.   Erase 3 : Erase 1 : Erase 5
  1067.   If Length(15) Then Bank Swap 3,15
  1068.   PP=1 : RETEND=1 : Add LI,10
  1069.   If I$=Chr$(27) Then PP=0
  1070. Goto EXIPROC
  1071. ROCKETS:
  1072.   A=Rnd(24) : If SO Then Extension_8_1412 2,Start(5)+20,8000,9000-A*75
  1073.   SPR[0,159,190,Rnd(3)-2,-30-Rnd(13)]
  1074.   WAI[A+35] : If EX Then Return 
  1075.   If SO Then Extension_8_1412 2,Start(5)+8200,8500,8000
  1076.   X=X Sprite(8)-128 : Y=Y Sprite(8)-50 : Amal Freeze 0 : Sprite 8,0,0,3
  1077.   For A=1 To 13
  1078.     If Amreg(A,2)=0 Then SPR[A,X,Y,Rnd(5)-3,Rnd(29)-25]
  1079.   Next 
  1080. FARBE:
  1081.   C=Rnd(7) : If C=0 Then Fade 2,0,$444,$888,$FFF
  1082.   If C=1 Then Fade 2,0,$440,$880,$FF0
  1083.   If C=2 Then Fade 2,0,$400,$800,$F00
  1084.   If C=3 Then Fade 2,0,$40,$80,$F0
  1085.   If C=4 Then Fade 2,0,$404,$808,$F0F
  1086.   If C=5 Then Fade 2,0,$24,$48,$8F
  1087.   If C=6 Then Fade 2,0,$44,$88,$FF
  1088.   If C=7 Then Fade 2,0,$420,$840,$F80
  1089.   WAI[Rnd(19)+20]
  1090. Return 
  1091. REINIT:
  1092.   WAI[50]
  1093.   Amal Off : Wait Vbl : Sprite Off : Bob 1,-10,-10,4 : Bob 2,-10,-10,4
  1094.   Wait Vbl : Bob Off 
  1095.   For A=0 To 15
  1096.     Bob A,-10,-10,4
  1097.     Channel A To Bob A
  1098.     Amal A,String$("P",A*2)+";"+A$
  1099.   Next 
  1100.   Amal On 
  1101. Return 
  1102. STAR:
  1103.   Plot X,Y,C : Plot X-1,Y,Max(C-1,0) : Plot X+1,Y,Max(C-1,0)
  1104.   Plot X,Y-1,Max(C-1,0) : Plot X,Y+1,Max(C-1,0) : Plot X-2,Y,Max(C-2,0)
  1105.   Plot X+2,Y,Max(C-2,0) : Plot X,Y-2,Max(C-2,0) : Plot X,Y+2,Max(C-2,0)
  1106. Return 
  1107. EXIPROC:
  1108. End Proc[PP]
  1109. Procedure SPR[N,X,Y,SX,SY]
  1110.   R=Rnd(2)+2 : If N=0 Then R=3
  1111.   Amreg(N,2)=1 : Sprite N+8,X+128,Y+50,R : Amal On N : Amreg(N,0)=SX : Amreg(N,1)=SY
  1112. End Proc
  1113. Procedure WAI[T]
  1114.   If EX Then Pop Proc
  1115.   For A=1 To T
  1116.     Repeat 
  1117.       C=Rnd(4096) : R=C/256 : G=(C-R*256)/16 : B=C-R*256-G*16
  1118.     Until R+B+G>15
  1119.     D=Rnd(3)*4
  1120.     Colour 19+D,C : Colour 18+D,(R/2)*256+(G/2)*16+B/2 : Colour 17+D,(R/3)*256+(G/3)*16+B/3
  1121.     Wait Vbl : I$=Inkey$ : KSC=Scancode : If KSC=80 or KSC=81 or(I$=Chr$(27)) Then EX=1 : Exit 
  1122.     If I$="s" and SO=0 Then SO=1 : I$=""
  1123.     If I$="s" and SO Then SO=0
  1124.     If I$="m" and MU=0 Then MU=1 : I$="" : Extension_8_10C6 63
  1125.     If I$="m" and MU Then MU=0 : Extension_8_10C6 0
  1126.   Next 
  1127. End Proc
  1128. Procedure CT[T$]
  1129.   X=160-Len(T$)*4 : Y=Y Curs*8+2
  1130.   Ink 7,0 : Text X-1,Y-1,T$ : Text X,Y-1,T$ : Text X-1,Y,T$
  1131.   Ink 5 : Text X,Y+1,T$ : Text X+1,Y+1,T$ : Text X+1,Y,T$
  1132.   Ink 6 : Text X+1,Y-1,T$ : Text X-1,Y+1,T$ : Ink 0 : Text X,Y,T$
  1133. End Proc
  1134. Procedure ENTACCESSCODE
  1135.   Screen Open 1,320,200,2,0
  1136.   Curs Off : Flash Off : Paper 0 : Cls 0 : Pen 1
  1137.   Palette 0,$FFF,$FFF,$FFF
  1138.   Locate 1,10
  1139.   Centre "PLEASE ENTER LEVEL ACCESS CODE! "
  1140.   Screen Open 0,352,224,4,0
  1141.   Curs Off : Flash Off : Paper 0 : Cls 0
  1142.   Palette 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
  1143.   Screen Display 0,128,50,320,192
  1144.   SCROL$="L R0=0; L R1=0; A: L X=R0/14+305; P; L R0=R0+R1;"
  1145.   SCROL$=SCROL$+" I R0<70 J B; L R1=R1-1; J A; B: L R1=R1+1; J A; "
  1146.   Channel 1 To Screen Offset 1
  1147.   X=Free
  1148.   Amal 1,SCROL$
  1149.   For Y=0 To 13
  1150.     For X=0 To 22
  1151.       Ink 1+((X+Y) and 1) : Bar X*16,Y*16 To X*16+15,Y*16+15
  1152.     Next 
  1153.   Next 
  1154.   Dual Playfield 0,1 : Dual Priority 1,0
  1155.   Screen 1
  1156.   Ink 1 : Box 126,94 To 193,104
  1157.   Locate 16,12 : Print "--------"
  1158.   Screen 0
  1159.   Fade 3,0,$111,$222,0,0,0,0,0,0,$FFF
  1160.   Amal On 1
  1161.   C$=""
  1162.   CX=1 : CY=1 : CXS=2 : CYS=2 : CXT=0 : CYT=0
  1163.   Flash 1,"(111,95)(222,1)(333,1)(444,1)(333,1)(222,1)"
  1164.   Flash 2,"(222,95)(333,1)(444,1)(555,1)(444,1)(333,1)"
  1165.   Screen 1
  1166.   LEV=1
  1167.   Repeat 
  1168.     Wait Vbl 
  1169.     Screen Offset 0,CX,CY
  1170.     Add CX,CXS,1 To 31 : Add CY,CYS,1 To 31
  1171.     Inc CXT : Inc CYT
  1172.     If Rnd(50)=0 and CXT>30 Then CXS=-CXS : CXT=0
  1173.     If Rnd(50)=0 and CYT>30 Then CYS=-CYS : CYT=0
  1174.     A$=Upper$(Inkey$)
  1175.     If(A$>=" ") and(A$<="Z") and Len(C$)<8 Then C$=C$+A$
  1176.     If A$=Chr$(8) Then C$=Left$(C$,Len(C$)-1)
  1177.     If(A$<>Chr$(13)) and Len(C$)<8 Then P$=C$+"-" Else P$=C$
  1178.     Locate 16,12 : Print P$
  1179.   Until A$=Chr$(13)
  1180.   C$=Flip$(C$)
  1181.   If C$="XOBNAELC" Then LEV=10
  1182.   If C$="EMAGTSOL" Then LEV=20
  1183.   If C$="YOBOLLEH" Then LEV=30
  1184.   If C$="EMAGDOOG" Then LEV=40
  1185.   Screen 0 : Flash Off 
  1186.   Fade 3 : Wait 50 : Amal Off : Wait Vbl : Screen Close 1 : Screen Close 0
  1187. End Proc