home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / amos / PrgCollection.lha / FirePowerEdit.AMOS / FirePowerEdit.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  1994-03-12  |  36.2 KB  |  1,073 lines

  1. ' *****************************************************  
  2. ' *                                                   *
  3. ' *         Fire Power Level Map Editor Deluxe        *  
  4. ' *                                                   *
  5. ' *               Written by C. Hodges                *
  6. ' *                                                   *
  7. ' * Copyright 1992 by C. Hodges. ALL RIGHTS RESERVED! *
  8. ' *                                                   *
  9. ' *****************************************************
  10. Close Workbench : Close Editor : Request Off : Show On : Hide 
  11. Dim B(19,3),U(92),C(48),Z(3,14,1),S(48),I$(31),DT(10,1)
  12. Global OLFI,VERZ,U(),ERN
  13. OLDDIR$=Dir$
  14. Screen Open 0,320,33,2,0
  15. Curs Off : Palette 0,0 : Paper 0 : Pen 1
  16. Centre "PRESS LEFT BUTTON TO RUN THE EDITOR" : Print 
  17. Print : Centre "OR RIGHT BUTTON FOR INSTRUCTIONS"
  18. Screen Display 0,128,130,,
  19. Fade 1,0,$FFF
  20. Repeat : M=Mouse Key : Until M
  21. On Error Proc HANDLER
  22. Fade 1 : Wait 16 : Screen Close 0
  23. If M=2 Then Gosub ANLEITUNG
  24. If Exist("FIREPOWER:")=0 Then INSERT["FIREPOWER:","PLEASE INSERT FIREPOWER IN ANY DRIVE!"]
  25. Unpack 7 To 0 : Show 
  26. Dir$="FIREPOWER:MapP2/" : F$="FIREPOWER:MapP2/T1"
  27. Screen Hide 0
  28. Screen Open 1,320,72,32,0
  29. For A=0 To 15 : Colour A,0 : Next 
  30. Curs Off : Flash Off : Cls 0
  31. Screen Copy 0,0,0,320,72 To 1,0,0
  32. Screen Copy 0,0,72,320,108 To 0,0,0
  33. Screen 0
  34. For C=0 To 48
  35.   X=C : If X>39 Then Y=8 : X=X-40 Else Y=0
  36.   Get Cblock C+1,X*8,Y,8,8
  37. Next 
  38. Screen Open 2,320,16,16,0 : Curs Off : Flash Off : Get Palette 0 : Cls 0
  39. Screen Hide 2 : Screen Copy 0 To 2
  40. Screen Open 0,320,16,16,0 : Curs Off : Flash Off : Get Palette 2 : Cls 0
  41. Screen Hide 0 : Screen Copy 2 To 0
  42. Screen Open 2,512,512,16,0
  43. For A=0 To 15 : Colour A,0 : Next 
  44. Curs Off : Flash Off : Cls 8
  45. Screen Display 2,128,123,320,172
  46. Screen 0
  47. A$="B: P ; L X=0 ; L Y=0 ; Anim 0,(3,1) ; I YM<123 J B ; "
  48. A$=A$+"A: P ; L X=XM+R0/8*8-2-R0 ; L Y=R1+YM-124/8*8+121-R1 ; I YM<123 J B ; J A ; "
  49. Amal 1,A$
  50. Channel 1 To Sprite 1
  51. A$="Let X=134 ; Let Y=113 ; L RC=2; Anim 0,(1,1) ; "
  52. A$=A$+"B: L RA=X; L RB=Y; PP; I XM>X J R ; "
  53. A$=A$+"   I XM<X J L ; "
  54. A$=A$+"A: I X<138 J C ; "
  55. A$=A$+"   I X>270 J D ; "
  56. A$=A$+"   J B ; "
  57. A$=A$+"R: Let X=X+1 ; L RC=2; Anim 0,(2,1) ; J A ; "
  58. A$=A$+"L: Let X=X-1 ; L RC=-2; Anim 0,(1,1) ; J A ; "
  59. A$=A$+"C: Let X=138 ; J B ; "
  60. A$=A$+"D: Let X=270 ; J B ; "
  61. Channel 2 To Sprite 2
  62. Amal 2,A$
  63. A$="Let X=381 ; Let Y=55 ; Anim 0,(8,5)(7,4)(6,3)(5,2)(4,1)(5,2)(6,3)(7,4) ; "
  64. A$=A$+"A: P ; Let X=381+R2 ; Let Y=55+R3 ; "
  65. A$=A$+"   I R0<R2 J L ; "
  66. A$=A$+"   I R0>R2 J R ; "
  67. A$=A$+"B: I R1<R3 J U ; "
  68. A$=A$+"   I R1>R3 J D ; "
  69. A$=A$+"   J A ; "
  70. A$=A$+"L: Let R2=R2-1 ; J B ; "
  71. A$=A$+"R: Let R2=R2+1 ; J B ; "
  72. A$=A$+"U: Let R3=R3-1 ; J A ; "
  73. A$=A$+"D: Let R3=R3+1 ; J A ; "
  74. Channel 3 To Sprite 3
  75. Amal 3,A$
  76. A$="A: L X=0; I K1=-1 J B; PP; J A; "
  77. A$=A$+"B: L R0=RC; L X=R0*4+RA; L Y=RB+1; "
  78. A$=A$+"C: P; L X=X+R0; "
  79. A$=A$+"   I X<129 J A; "
  80. A$=A$+"   I X>277 J A; "
  81. A$=A$+"   J C; "
  82. Sprite 4,0,0,11
  83. Channel 4 To Sprite 4
  84. Amal 4,A$
  85. CM=2 : Gosub CM
  86. Limit Mouse 128,50 To 447,295
  87. OLFI=1 : VERZ=2 : Restore DATTABLE
  88. For A=1 To 19 : Read B(A,0),B(A,1),B(A,2),B(A,3) : Next 
  89. For A=0 To 92 : Read U(A) : Next 
  90. For A=0 To 48 : Read C(A) : Next 
  91. For A=1 To 3 : Read B : For D=0 To 1 : For C=1 To B : Read Z(A,C,D) : Next : Next : Next 
  92. For A=1 To 48
  93.   For B=1 To 92
  94.     If U(B)=A Then S(A)=B : Exit 
  95.   Next 
  96. Next 
  97. For A=0 To 31 : Read I$(A) : Next 
  98. Reserve As Work 6,4096
  99. OX=0 : OY=0 : E=1
  100. Def Scroll 1,220,18 To 227,28,-1,0 : Def Scroll 2,219,18 To 226,28,1,0
  101. Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  102. Gosub RESETCOLOR
  103. Amal On 
  104. T[-1,"WELCOME!!!"]
  105. Do 
  106.   X=X Screen(1,X Mouse) : Y=Y Screen(1,Y Mouse) : B=0 : MM=M : M=Mouse Key
  107.   If M<>0 and Y<62 Then Gosub BUT : If B>0 Then Gosub MENUBUTTON
  108.   If Y>72 Then CM=6 : BX=(X+OX mod 8)/8+OX/8 : BY=((Y-74)+(OY mod 8))/8+OY/8 Else CM=2
  109.   If CM=6 and M=2 and(BXA<>BX or BYA<>BY or MM=0) Then Gosub LOESCHEN
  110.   If CM=6 and M=1 and(BXA<>BX or BYA<>BY or MM=0) and TYPE>0 Then Gosub SETBUILD
  111.   If X<10 Then OX=Max(Min(OX-2,192),0)
  112.   If X>310 Then OX=Max(Min(OX+2,192),0)
  113.   If Y<10 Then OY=Max(Min(OY-2,340),0)
  114.   If Y>235 Then OY=Max(Min(OY+2,340),0)
  115.   Amreg(1,0)=OX mod 8 : Amreg(1,1)=OY mod 8
  116.   Amreg(3,0)=BX : Amreg(3,1)=BY
  117.   If OX<>OXA or OY<>OYA Then BXA=BX : BYA=BY : OXA=OX : OYA=OY : Wait Vbl : Screen Offset 2,OX,OY
  118.   Gosub CM : If BXA<>BX or BYA<>BY Then Gosub TILEINFO
  119. Loop 
  120. End 
  121. ANLEITUNG:
  122.   Screen Open 0,320,190,4,0
  123.   Curs Off : Flash Off : Paper 0 : Pen 3 : Cls 0
  124.   Palette 0,0,0,0 : Print 
  125.   Centre "WELCOME TO THE WORLD'S BEST" : Print : Print : Pen 2
  126.   Centre "FIREPOWER LEVEL MAP EDITOR DELUXE" : Print : Print 
  127.   Centre "VERSION 1.78" : Print : Print : Pen 3
  128.   Centre "WRITTEN BY C. HODGES" : Print : Print 
  129.   Centre "IN 1992!" : Print : Print : Print : Pen 1
  130.   Print "THE REQUIREMENTS: - A COPY OF FIREPOWER"
  131.   Print "                  - AT LEAST 1 MB MEMORY";
  132.   Print "                  - AND THIS HERE." : Print : Print : Print : Print 
  133.   Print "ARE YOU READY TO GO ON?" : Print 
  134.   Print "IF YOU ARE PRESS MOUSE BUTTON"
  135.   Print "TO BEGIN WITH THE MENU BAR...";
  136.   Fade 2,0,$FFF,$FF0,$F0
  137.   Repeat : Until Mouse Key=0
  138.   Repeat : Until Mouse Key
  139.   Fade 2 : Wait 32
  140.   Unpack 7 To 0
  141.   Screen Hide 0
  142.   Screen Open 1,320,256,16,0
  143.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
  144.   Screen Display 1,,121,,
  145.   Get Palette 0
  146.   Screen 0 : Screen Display 0,,40,,72
  147.   For A=0 To 15 : Colour A,0 : Next 
  148.   Screen Show 0
  149.   Fade 2 To 1 : Wait 32
  150.   Screen 1 : For A=0 To 15 : Colour A,0 : Next 
  151.   Pen 5 : Centre "THE BUTTONS" : Print 
  152.   Centre "-----------" : Print : Print : Pen 1
  153.   Print "YOU CAN CLICK AT ANY BUTTON WITH ";Pen$(3);"LEFT"
  154.   Print "MOUSE BUTTON";Pen$(1);" OR ";Pen$(4);"RIGHT MOUSE BUTTON";Pen$(1);"."
  155.   Print : Print "NOW I'LL EXPLANE ALL BUTTONS (L & R)..." : Print 
  156.   Print Pen$(2);"LOAD MAP ";Pen$(3);"-LOAD A SAVED MAP."
  157.   Print "         ";Pen$(4);"-LOAD THE MAP LAST SAVED/LOADED"
  158.   Print Pen$(2);"SAVE MAP ";Pen$(3);"-SAVE A CREATED MAP."
  159.   Print "         ";Pen$(4);"-SAVE AS THE MAP LAST LOADED." : Print 
  160.   Print Pen$(2);"CLEAR MAP";Pen$(3);"-NO EFFECT."
  161.   Print "         ";Pen$(4);"-CLEAR THE MAP." : Print 
  162.   Print Pen$(2);"QUIT OUT ";Pen$(3);"-PRESS 3 TIMES TO QUIT"
  163.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON" : Print : Print 
  164.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  165.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  166.   Repeat : Until Mouse Key=0
  167.   Repeat : Until Mouse Key
  168.   Fade 2 : Wait 32 : Cls 
  169.   Print Pen$(2);"SET TREES";Pen$(3);"-SET TREES ON EMPTY FIELDS."
  170.   Print "         ";Pen$(4);"-REMOVE ALL TREES." : Print 
  171.   Print Pen$(2);"SET ROADS";Pen$(3);"-SELECTS ROAD-CHARSET,SEE LATER";
  172.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  173.   Print Pen$(2);"SET WALLS";Pen$(3);"-SELECTS WALL-CHARSET."
  174.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  175.   Print Pen$(2);"SET BUILD";Pen$(3);"-SELECTS BUILDING-CHARSET."
  176.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  177.   Print Pen$(2);"FLIP COL.";Pen$(3);"-FLIP BROWN AND GREEN PLAYER"
  178.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  179.   Print Pen$(2);"VIEW MAP ";Pen$(3);"-SCROLL THROUGH THE MAP."
  180.   Print "         ";Pen$(4);"-VIEW THE HOLE MAP." : Print 
  181.   Print Pen$(2);"? BUTTON ";Pen$(3);"-ABOUT THIS EDITOR."
  182.   Print "         ";Pen$(4);"-GIVES AN INFO OF THE MAP." : Print 
  183.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  184.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  185.   Repeat : Until Mouse Key=0
  186.   Repeat : Until Mouse Key
  187.   Fade 2 : Wait 32 : Cls 
  188.   Print Pen$(2);"ARROW TO THE LEFT ";Pen$(3);"-PREVOUS CHAR."
  189.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  190.   Print Pen$(2);"ARROW TO THE RIGHT";Pen$(3);"-NEXT CHAR."
  191.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  192.   Print Pen$(2);"GREEN BUTTON      ";Pen$(3);"-SELECT GREEN CHARSET.";
  193.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  194.   Print Pen$(2);"BROWN BUTTON      ";Pen$(3);"-SELECT BROWN CHARSET.";
  195.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  196.   Print Pen$(2);"CURSOR BUTTONS    ";Pen$(3);"-SLOW SCROLLING."
  197.   Print "                  ";Pen$(4);"-FASTER SCROLLING."
  198.   Print "                  ";Pen$(5);"-FASTEST SCROLLING." : Print 
  199.   Print Pen$(1);"IF YOU PRESS THE VIEW MAP BUTTON WITH"
  200.   Print "THE RIGHT MOUSE BUTTON AND THEN PRESS"
  201.   Print "IT AGAIN YOU WILL SEE THE LITTLE MAP"
  202.   Print "IN THE CORNER ZOOMED IN." : Print 
  203.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  204.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  205.   Repeat : Until Mouse Key=0
  206.   Repeat : Until Mouse Key
  207.   Fade 2 : Wait 32 : Cls 
  208.   Screen 0 : Fade 2 : Wait 32 : Screen Close 0
  209.   Unpack 8 To 0
  210.   Screen Hide 0
  211.   Screen Display 0,128,40,,138
  212.   Screen 1
  213.   Screen Display 1,,179,,
  214.   Get Palette 0
  215.   Screen 0 : For A=0 To 15 : Colour A,0 : Next 
  216.   Screen Show 0
  217.   Fade 2 To 1 : Wait 32
  218.   Screen 1
  219.   For A=0 To 15 : Colour A,0 : Next 
  220.   Pen 5 : Centre "THE FILE SELECTOR" : Print 
  221.   Centre "-----------------" : Print : Print : Pen 1
  222.   Print "AS YOU CAN SEE THERE ARE THREE BUTTONS"
  223.   Print "AT THE TOP OF THE REQUESTER: THE FIRST"
  224.   Print "SELECTS THE ONE PLAYER LEVEL MAPS, THE"
  225.   Print "SECOND THE TWO PLAYER MAPS AND THE"
  226.   Print "THIRD THE MODEM MAPS. IF YOUR DISK IS"
  227.   Print "FULL YOU CAN LOAD OR SAVE A MAP ONTO AN"
  228.   Print "EXTRA DISK BY CLICKING ON EXTRA!"
  229.   Print "IF YOU HAVE PRESSED ONE OF THE FOUR"
  230.   Print "BUTTONS, THE DIRECTORY WILL BE READ UP!"
  231.   Print : Print : Pen 6 : Centre "PRESS MOUSE BUTTON..."
  232.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  233.   Repeat : Until Mouse Key=0
  234.   Repeat : Until Mouse Key
  235.   Fade 2 : Wait 32 : Cls 
  236.   Pen 1 : Print "THEN YOU CAN SELECT A MAP BY CLICKING ON";
  237.   Print "IT OR BROWSE THROUGH THE MAPS WITH THE"
  238.   Print "ARROW BUTTONS OR USING THE SLIDER BAR." : Print 
  239.   Print "THERE ARE THREE TYPES OF MAPS:"
  240.   Print "- ";Pen$(2);"GAME MAPS";Pen$(1);" : THESE ARE ACTUALLY USED BY";
  241.   Print "              THE GAME!"
  242.   Print "- ";Pen$(4);"SPARE MAPS";Pen$(1);": THESE ARE NOT USED BUT CAN";
  243.   Print "              BE SWAPPED AND DELETED!"
  244.   Print "- ";Pen$(3);"NO MAPS";Pen$(1);"   : THESE ARE NOT EXISTING BUT";
  245.   Print "              SELECTABLE FOR SAVING!"
  246.   Print : Print : Print : Pen 6 : Centre "PRESS MOUSE BUTTON..."
  247.   Fade 2,0,$FFF,$7F7,$F,$FB3,$F0F,$88F
  248.   Repeat : Until Mouse Key=0
  249.   Repeat : Until Mouse Key
  250.   Fade 2 : Wait 32 : Cls 
  251.   Pen 1 : Print "AT THE BOTTOM THERE ARE SEVERAL BUTTONS:";
  252.   Print "- ";Pen$(2);"LOAD";Pen$(1);"/";Pen$(4);"SAVE";Pen$(1);": LOADS/SAVES THE SELECTED"
  253.   Print "             GAME OR SPARE MAP."
  254.   Print "- ";Pen$(5);"DELETE";Pen$(1);"   : DELETES THE SELECTED SPARE"
  255.   Print "             MAP THE FROM DISK."
  256.   Print "- ";Pen$(4);"SWAP";Pen$(1);"     : SWAPS THE SELECTED MAP"
  257.   Print "             AGAINST ANOTHER."
  258.   Print "- ";Pen$(3);"SHOW";Pen$(1);"     : DISPLAYS THE SELECTED GAME"
  259.   Print "             OR SPARE MAP."
  260.   Print "- ";Pen$(3);"SHOW ALL";Pen$(1);" : DISPLAYS ALL MAPS IN THE"
  261.   Print "             ACTUAL DIRECTORY."
  262.   Print "- ";Pen$(5);"CANCEL";Pen$(1);"   : ABORTS LOAD/SAVE REQUESTER.";
  263.   Print "- X        : ABORTS SWAPPING."
  264.   Print : Pen 6 : Centre "PRESS MOUSE BUTTON..."
  265.   Fade 2,0,$FFF,$7F7,$F,$FB3,$C00,$88F
  266.   Repeat : Until Mouse Key=0
  267.   Repeat : Until Mouse Key
  268.   Fade 2 : Wait 32 : Cls 
  269.   Screen 0 : Fade 2 : Wait 32 : Screen Close 0
  270.   Screen Display 1,128,40,320,256
  271.   Pen 5 : Centre "HOW TO CREATE A MAP" : Print 
  272.   Centre "--------------------" : Print : Print 
  273.   Print Pen$(1);"FIRST YOU HAVE TO CLICK ON SET ROADS,"
  274.   Print "SET WALLS OR SET BUILDINGS: A CHAR"
  275.   Print "APPEARS BETWEEN THE TWO GREEN ARROWS."
  276.   Print "NOW YOU CAN CLICK USING THE LEFT MOUSE"
  277.   Print "BUTTON AT THE SCREEN BELOW THE MENU"
  278.   Print "AND THE CHAR WILL BE COPIED TO IT."
  279.   Print "THE RIGHT BUTTON REMOVES IT."
  280.   Print "THE CHAR CAN BE GREEN OR BROWN, UNLESS"
  281.   Print "YOU HAVE CLICKED ON SET ROADS."
  282.   Print "TO CHANGE THE COLOR PRESS THE GREEN"
  283.   Print "OR BROWN BUTTON."
  284.   Print "YOU CAN ONLY SEE A SMALL PART OF THE"
  285.   Print "MAP AT A TIME, BUT YOU CAN SCROLL"
  286.   Print "WITH THE CURSOR BUTTONS. IF YOU GO"
  287.   Print "TO THE BORDER OF THE SCREEN, IT"
  288.   Print "WILL SCROLL AUTOMATICALLY."
  289.   Print : Print : Print : Print : Print 
  290.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  291.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  292.   Repeat : Until Mouse Key=0
  293.   Repeat : Until Mouse Key
  294.   Fade 2 : Wait 32 : Cls 
  295.   Pen 5 : Centre "REMEMBER" : Print 
  296.   Centre "--------" : Print : Print 
  297.   Print Pen$(1);"YOU MUST HAVE ONE OR MORE DEPOTS FOR"
  298.   Print "EACH PLAYER OR FIREPOWER WILL CRASH."
  299.   Print "AS WITH DEPOTS A STARTPOINT MUST EXIST!"
  300.   Print "IF YOU MAKE A MAP AGAINST THE COMPUTER,"
  301.   Print "REMEMBER THE COMPUTER IS GREEN AND YOU"
  302.   Print "DON'T NEED A STARTPOINT FOR HIM OR A"
  303.   Print "DEPOT FOR THE BROWN PLAYER."
  304.   Print "THE MAP IS ROUND, SO IF YOU GO OUT OF"
  305.   Print "THE LEFT EDGE YOU WILL COME OUT AT THE"
  306.   Print "RIGHT EDGE AND VICE VERSA." : Print 
  307.   Print "THIS EDITOR IS SHAREWARE SO IF YOU USE"
  308.   Print "IT GIVE ME SOME MONEY..." : Print : Print 
  309.   Pen 3 : Centre "SPREAD THE DISK, AND NOT THE WORD!" : Print : Print 
  310.   Print : Pen 4 : Centre "HAVE FUN CREATING YOUR OWN MAPS!"
  311.   Print : Print : Print 
  312.   Pen 6 : Centre "PRESS MOUSE BUTTON TO START!"
  313.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  314.   Repeat : Until Mouse Key=0
  315.   Repeat : Until Mouse Key
  316.   Fade 2 : Wait 32 : Cls 
  317.   Screen Close 1
  318.   Screen 0 : Fade 2 : Wait 32 : Screen Close 0
  319. Return 
  320. TILEINFO:
  321.   BXA=BX : BYA=BY : C=U(Peek(Start(6)+BY+BX*64)) : G=1 : If C>14 Then G=7
  322.   If C>31 Then C=C-17 : G=5
  323.   T[-G,I$(C)] : Return 
  324. MENUBUTTON:
  325.   If B=1 Then Gosub LADEMAP
  326.   If B=2 Then Gosub SPEICHEREMAP
  327.   If B=3 Then Gosub LOESCHEMAP
  328.   If B=4 Then Gosub QUIT Else If QUIT>0 Then QUIT=0 : T[0,""]
  329.   If B=5 Then Gosub SETTREES
  330.   If B=6 Then ZX=0 : Z=1 : TYPE=1 : HOE=14 : Gosub ZEIGEZEICHEN
  331.   If B=7 Then ZX=0 : Z=1 : TYPE=2 : HOE=9 : Gosub ZEIGEZEICHEN
  332.   If B=8 Then ZX=0 : Z=1 : TYPE=3 : HOE=8 : Gosub ZEIGEZEICHEN
  333.   If B=9 Then Gosub FLIP
  334.   If B=10 Then Gosub ZEIGEMAP : M=0
  335.   If B=11 Then Gosub INFO : M=0
  336.   If B=12 Then ZX=1 : Add Z,-1,1 To HOE : Gosub ZEIGEZEICHEN
  337.   If B=13 Then ZX=0 : Add Z,1,1 To HOE : Gosub ZEIGEZEICHEN
  338.   If B=14 and E=0 and TYPE>1 Then E=1 : Gosub ZEIGEZEICHEN
  339.   If B=16 and E=1 and TYPE>1 Then E=0 : Gosub ZEIGEZEICHEN
  340. Return 
  341. FLIP:
  342.   CM=3 : Gosub CM
  343.   T[-12,"PLEASE WAIT"]
  344.   Screen 2
  345.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64))
  346.     D=C : If C>14 and C<32 Then D=D+17
  347.     If C>31 Then D=D-17
  348.     Poke Start(6)+Y+X*64,S(D) : If D>14 Then Put Cblock D+1,X*8,Y*8
  349.   Next : Next 
  350.   Screen 1
  351.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64)) : If C>14 Then Plot 252+X,4+Y,C(C)
  352.   Next : Next 
  353.   T[0,""] : Gosub BLITZ
  354.   CM=2 : Gosub CM
  355. Return 
  356. ABOUT:
  357.   XX=X Sprite(2) : YY=Y Sprite(2) : Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  358.   Amal Freeze 
  359.   Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  360.   Screen Open 3,320,256,4,0
  361.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls : Hide 
  362.   Palette 0,0,0,0
  363.   Home : Pen 2 : Print : Centre "The Fire-Power-Level-Map-Editor de luxe"
  364.   Print : Print : Centre "Version 1.78"
  365.   Pen 1 : Print : Print : Centre "Written by C. Hodges"
  366.   Print : Print : Centre "Using AMOS Version 1.2"
  367.   Print : Print : Centre "Graphics by C. Hodges"
  368.   Print : Print : Centre "Block-Graphics by P. Hodges"
  369.   Pen 2 : Print : Print : Print : Centre "This is Share Ware!!!"
  370.   Pen 1 : Print : Print : Centre "After 3 times saving a map"
  371.   Print : Centre "you must realize that you"
  372.   Print : Centre "need this tool and so you have"
  373.   Print : Centre "to send me 15 DM to get the newest"
  374.   Print : Centre "update and pay for this great tool!"
  375.   Pen 3 : Print : Print : Centre "My address:  "
  376.   Print : Print : Centre "Chris Hodges   "
  377.   Print : Centre "Kennedystr. 8  "
  378.   Print : Centre "8039 Puchheim  "
  379.   Print : Centre "West Germany!  "
  380.   Print : Print : Centre "Tel. 089/804758"
  381.   Fade 1,0,$FFF,$F00,$F0
  382.   While Mouse Key=0 : Wend 
  383.   Fade 1 : Wait 18
  384.   Pen 1 : Cls : Print : Centre "Version 2.0 will have new features like:"
  385.   Pen 3 : Print : Print : Centre "- Automatic Road-and Wall settings"
  386.   Print : Centre "  (like SimCity(TM))              "
  387.   Print : Print : Centre "- Block functions (Cut/Copy/Paste)"
  388.   Print : Print : Centre "- Flip and Rotate functions       "
  389.   Print : Print : Centre "- A Very Good Hardcopy Routine    "
  390.   Print : Print : Centre "- Bigger Block-Graphics (12*12)   "
  391.   Pen 1 : Print : Print : Print : Print : Centre "If you have any suggestions to"
  392.   Print : Centre "later Versions or questions"
  393.   Print : Centre "write to me or telephone me!"
  394.   Pen 2 : Print : Print : Print : Print : Centre "Have fun and create your own maps!!!"
  395.   Fade 1,0,$FFF,$F00,$F0
  396.   While Mouse Key=0 : Wend 
  397.   Fade 1 : Wait 18
  398.   Screen Close 3
  399.   Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  400.   Sprite 2,XX,YY, : Amal On : Show 
  401.   Gosub RESETCOLOR
  402. Return 
  403. INFO:
  404.   If M=1 Then Goto ABOUT
  405.   T[-12,"PLEASE WAIT"]
  406.   CM=3 : Gosub CM
  407.   F=0 : T=0 : R=0
  408.   For A=0 To 10 : DT(A,0)=0 : DT(A,1)=0 : Next 
  409.   For A=0 To 4095 : C=U(Peek(A+Start(6))) : If C>31 Then D=0 : C=C-17 Else D=1
  410.     Gosub LOC : Next 
  411.   T[0,""]
  412.   XX=X Sprite(2) : YY=Y Sprite(2) : Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  413.   Amal Freeze 
  414.   Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  415.   Screen Open 3,320,200,4,0
  416.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls : Hide 
  417.   Palette 0,0,0,0
  418.   Home : Print : Centre "Info of current Playfield"
  419.   Print : Print 
  420.   Print "Width and height: 64*64 Blocks"
  421.   Print "Looking at      :";OX/8;" /";OY/8;" -";OX/8+39;" /";OY/8+21
  422.   Print 
  423.   Print "Free :";F
  424.   Print "Roads:";R
  425.   Print "Trees:";T
  426.   Pen 2 : D=0 : Locate 0,11 : Print "Green Player" : Gosub INFOPLAYER
  427.   Pen 3 : D=1 : Locate 20,11 : Print "Brown Player" : Gosub INFOPLAYER
  428.   Fade 1,0,$FFF,$F0,$F80
  429.   While Mouse Key=0 : Wend 
  430.   Fade 1 : Wait 18 : Screen Close 3
  431.   Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  432.   Sprite 2,XX,YY, : Amal On : Show 
  433.   Gosub RESETCOLOR
  434.   CM=2 : Gosub CM
  435. Return 
  436. LOC:
  437.   If C=0 Then Inc F : Return 
  438.   If C=1 or C=2 or C=3 Then Inc T : Return 
  439.   If C>3 and C<15 Then Inc R : Return 
  440.   If C=15 Then Inc DT(0,D) : Return 
  441.   If C=16 or C=17 Then Inc DT(1,D) : Return 
  442.   If C>17 and C<24 Then Inc DT(2,D) : Return 
  443.   If C=24 or C=25 or C=27 Then Inc DT(3,D) : Return 
  444.   If C=26 Then Inc DT(4,D) : Return 
  445.   If C>27 Then Inc DT(C-23,D)
  446. Return 
  447. INFOPLAYER:
  448.   Locate D*20,13 : Print "Walls   :";DT(1,D)
  449.   Locate D*20,14 : Print "Cannons :";DT(2,D)
  450.   Locate D*20,15 : Print "Gates   :";DT(0,D)
  451.   Locate D*20,16 : Print "Bunker  :";DT(3,D)
  452.   Locate D*20,17 : Print "Jails   :";DT(4,D)
  453.   Locate D*20,18 : Print "Fuels   :";DT(5,D)
  454.   Locate D*20,19 : Print "Lazarets:";DT(6,D)
  455.   Locate D*20,20 : Print "Depots  :";DT(8,D);
  456.   If DT(8,D)=0 Then Pen 1 : Print "-Warning" : Pen 2+D Else Print 
  457.   Locate D*20,21 : Print "Starts  :";DT(7,D);
  458.   If DT(7,D)=0 Then Pen 1 : Print "-Warning" : Pen 2+D Else Print 
  459.   Locate D*20,22 : Print "--------------"
  460.   R=0 : For A=0 To 8 : R=R+DT(A,D) : Next 
  461.   Locate D*20,23 : Print "Total   :";R
  462. Return 
  463. LOESCHEN:
  464.   BXA=-1 : Poke Start(6)+BY+BX*64,0 : Plot 252+BX,4+BY,C(0) : Screen Copy 0,0,0,8,8 To 2,BX*8,BY*8
  465. Return 
  466. SETBUILD:
  467.   C=Z(TYPE,Z,E) : Poke Start(6)+BY+BX*64,S(C) : Plot 252+BX,4+BY,C(C)
  468.   If C>39 Then YY=8 : C=C-40 Else YY=0
  469.   BXA=-1 : Screen Copy 0,C*8,YY,C*8+8,YY+8 To 2,BX*8,BY*8
  470. Return 
  471. BIGMAP:
  472.   Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  473.   Screen Open 3,320,256,16,0
  474.   Curs Off : Flash Off : Cls 8 : Hide 
  475.   For A=0 To 15 : Colour A,0 : Next 
  476.   Fade 1 To 0 : Zoom 2,0,0,511,511 To 3,0,0,320,256 : D=0
  477.   Repeat 
  478.     If Mouse Key=2 and D=0 Then Zoom 1,252,4,316,68 To 3,0,0,320,256 : D=1
  479.     If Mouse Key=2 and D=1 Then Zoom 2,0,0,511,511 To 3,0,0,320,256 : D=0
  480.   Until Mouse Key=1
  481.   Fade 1 : Wait 18 : Screen Close 3
  482.   Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  483.   Sprite 2,XX,YY, : Amal On : Show 
  484.   Gosub RESETCOLOR
  485. Return 
  486. RESETCOLOR:
  487.   Screen 1 : Colour 21,$121 : Colour 22,$252 : Colour 23,$575 : Colour 25,0
  488.   Colour 17,0 : Colour 18,0 : Colour 19,$FFF
  489. Return 
  490. ZEIGEMAP:
  491.   G=0 : Amal Freeze : XX=X Sprite(2) : YY=Y Sprite(2)
  492.   Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  493.   If M=2 Then Goto BIGMAP
  494.   For A=123 To 41 Step -2
  495.     Wait Vbl : Screen Display 2,128,A,320,172+G : Screen Offset 2,OX,OY
  496.     G=G+2 : If G+OY>340 Then OY=OY-2
  497.   Next 
  498.   G=G-2 : OY=OY+2
  499.   Repeat 
  500.     X=X Screen(1,X Mouse) : Y=Y Screen(1,Y Mouse)
  501.     If X<80 Then OX=Max(OX-2,0)
  502.     If X>240 Then OX=Min(OX+2,192)
  503.     If Y<80 Then OY=Max(OY-2,0)
  504.     If Y>165 Then OY=Min(OY+2,258)
  505.     If X<40 Then OX=Max(OX-2,0)
  506.     If X>280 Then OX=Min(OX+2,192)
  507.     If Y<40 Then OY=Max(OY-2,0)
  508.     If Y>205 Then OY=Min(OY+2,258)
  509.     Wait Vbl : Screen Offset 2,OX,OY
  510.   Until Mouse Key<>0
  511.   For A=41 To 123 Step 2
  512.     Wait Vbl : Screen Display 2,128,A,320,172+G
  513.     If G>0 Then G=G-2
  514.   Next 
  515.   Sprite 2,XX,YY,
  516.   Amal On 
  517. Return 
  518. CM:
  519.   If CM=CMA Then Return 
  520.   If CM<>6 Then Change Mouse CM
  521.   Screen 1 : If CM=2 Then Colour 17,0 : Colour 18,0 : Colour 19,$FFF
  522.   If CM=3 Then Colour 17,$888 : Colour 18,$555 : Colour 19,$FFF : Amal Freeze 1
  523.   If CM=3 Then Sprite 1,0,0, : Screen 2 : Colour 17,$888 : Colour 18,$555 : Colour 19,$FFF
  524.   If CM=6
  525.     Colour 17,$666 : Colour 18,$666
  526.     Screen 2 : Colour 17,$FFF : Colour 18,$999 : Colour 19,$555
  527.   End If 
  528.   If CMA=3 Then Amal On 1
  529.   CMA=CM : Screen 1
  530. Return 
  531. ZEIGEZEICHEN:
  532.   C=Z(TYPE,Z,E)
  533.   D=C : G=1 : If C>14 Then G=7
  534.   If C>31 Then D=D-17 : G=5
  535.   T[-G,I$(D)]
  536.   If C>39 Then YY=8 : C=C-40 Else YY=0
  537.   For A=0 To 7
  538.     Scroll ZX+1 : Wait Vbl 
  539.     If ZX=0 Then Screen Copy 0,C*8+A,YY,C*8+A+1,YY+8 To 1,226,18
  540.     If ZX=1 Then Screen Copy 0,C*8+7-A,YY,C*8+8-A,YY+8 To 1,219,18
  541.   Next 
  542. Return 
  543. LADEMAP:
  544.   If M=1 Then T$="LOAD" : Gosub FREQ
  545.   If F$="" Then Wait Vbl : Gosub BLITZ : T[-12,"FILE ERROR!"] : Return 
  546.   CM=3 : Gosub CM
  547.   Bload F$,6
  548.   Ink 8 : Bar 252,4 To 315,67
  549.   T[-12,"PLEASE WAIT"]
  550.   Screen 2
  551.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64)) : Put Cblock C+1,X*8,Y*8 : Next : Next 
  552.   Screen 1
  553.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64)) : If C>3 Then Plot 252+X,4+Y,C(C)
  554.   Next : Next 
  555.   BXA=-1 : CM=2 : Gosub CM
  556.   T[0,""]
  557.   Gosub BLITZ
  558. Return 
  559. SPEICHEREMAP:
  560.   If M=1 Then T$="SAVE" : Gosub FREQ
  561.   If F$="" Then Return 
  562.   CM=3 : Gosub CM
  563.   ERN=0 : Bsave F$,Start(6) To Start(6)+4096 : If ERN Then T[-12,"SAVE ERROR!"]
  564.   CM=2 : Gosub CM
  565.   Gosub BLITZ
  566. Return 
  567. LOESCHEMAP:
  568.   If M=1 Then T[-12,"PRESS RIGHT"] : Return 
  569.   CM=3 : Gosub CM
  570.   T[-12,"PLEASE WAIT"]
  571.   For A=0 To 1023 : Loke Start(6)+A*4,0 : Next 
  572.   Ink 8 : Bar 252,4 To 315,67
  573.   Screen 2 : Cls 8 : Screen 1
  574.   CM=2 : Gosub CM
  575.   T[0,""]
  576.   Gosub BLITZ
  577. Return 
  578. QUIT:
  579.   If QUIT<2 Then T[-12,"SURE?"] : Inc QUIT : Return 
  580.   T[-12,"BYE..."]
  581.   Pop : Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  582.   Amal Off : Sprite Off 
  583.   Screen Close 0
  584.   Screen Close 1
  585.   Screen Close 2
  586.   Dir$=OLDDIR$
  587. End 
  588. DELTREES:
  589.   For Y=0 To 63 : For X=0 To 63
  590.     L=X*64+Y+Start(6) : If Peek(L)<5 and Peek(L)<>0 Then Poke L,0 : Put Cblock 1,X*8,Y*8
  591.   Next : Next 
  592. Return 
  593. FILTREES:
  594.   For Y=0 To 63 : For X=0 To 63
  595.     If Peek(X*64+Y+Start(6))=0 Then C=Rnd(2)+1 : Poke X*64+Y+Start(6),S(C) : Put Cblock C+1,X*8,Y*8
  596.   Next : Next 
  597. Return 
  598. SETTREES:
  599.   CM=3 : Gosub CM
  600.   T[-12,"PLEASE WAIT"]
  601.   Screen 2 : If M=2 Then Gosub DELTREES Else Gosub FILTREES
  602.   Screen 1 : CM=2 : Gosub CM
  603.   T[0,""]
  604.   Gosub BLITZ
  605. Return 
  606. BLITZ:
  607.   Colour 0,$FFF : Boom : Fade 2,0
  608. Return 
  609. FREQ:
  610.   XX=X Sprite(2) : YY=Y Sprite(2) : Amal Freeze 
  611.   Wait Vbl : Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  612.   Sprite Update : Wait Vbl : Wait Vbl 
  613.   FILREQ[Abs(T$="SAVE")]
  614.   F$=Param$
  615.   If F$<>"" Then If(Exist(F$)=0) and(T$="LOAD") Then F$=""
  616.   Sprite 2,XX,YY, : Amal On 
  617.   Screen 1
  618.   Limit Mouse 128,50 To 447,295
  619. Return 
  620. BUT:
  621.   B=0
  622.   For A=1 To 19
  623.     If X>B(A,0) and Y>B(A,1) and X<B(A,2) and Y<B(A,3) Then B=A : Exit 
  624.   Next 
  625.   If B=0 Then Return 
  626.   Shoot 
  627.   C1=Point(B(B,2),B(B,3))
  628.   C2=Point(B(B,0),B(B,1))
  629.   Ink C1 : Draw B(B,0),B(B,3)-1 To B(B,0),B(B,1)
  630.   Draw To B(B,2)-1,B(B,1)
  631.   Ink C2 : Draw B(B,0)+1,B(B,3) To B(B,2),B(B,3)
  632.   Draw To B(B,2),B(B,1)+1
  633.   If B=15 or B=17 or B=18 or B=19 Then Gosub MOVE
  634.   Repeat : Until Mouse Key=0
  635.   Ink C2 : Draw B(B,0),B(B,3)-1 To B(B,0),B(B,1)
  636.   Draw To B(B,2)-1,B(B,1)
  637.   Ink C1 : Draw B(B,0)+1,B(B,3) To B(B,2),B(B,3)
  638.   Draw To B(B,2),B(B,1)+1
  639. Return 
  640. MOVE:
  641.   Repeat 
  642.     M=Mouse Key
  643.     If B=17 Then OX=Max(Min(OX-M*4,192),0)
  644.     If B=19 Then OX=Max(Min(OX+M*4,192),0)
  645.     If B=15 Then OY=Max(Min(OY-M*4,340),0)
  646.     If B=18 Then OY=Max(Min(OY+M*4,340),0)
  647.     Wait Vbl : Screen Offset 2,OX,OY
  648.   Until M=0
  649. Return 
  650. ' Buttons  
  651. DATTABLE:
  652. Data 2,21,76,30
  653. Data 2,31,76,40
  654. Data 2,41,76,50
  655. Data 2,51,76,61
  656. '
  657. Data 77,21,151,30
  658. Data 77,31,151,40
  659. Data 77,41,151,50
  660. Data 77,51,183,61
  661. '
  662. Data 152,21,197,30
  663. Data 152,31,197,50
  664. Data 184,51,197,61
  665. '
  666. Data 199,14,214,29
  667. 'Data 215,14,230,29
  668. Data 231,14,246,29
  669. Data 199,30,214,45
  670. Data 215,30,230,45
  671. Data 231,30,246,45
  672. Data 199,46,214,61
  673. Data 215,46,230,61
  674. Data 231,46,246,61
  675. ' Table for Convertor
  676. '    0 1 2 3 4 5  6 7  8 910 1112 13 141516    
  677. Data 0,0,1,2,3,10,9,11,7,0,6,12,8,13,14,4,5
  678. Data 25,24,26,30,0,27,0,29,28,0,23,0,42,41
  679. Data 43,47,0,44,0,46,45,0,40,0,18,17,19,15
  680. Data 0,0,16,20,0
  681. Data 21,0,0,0,0,0,0,0,0,0,0,0,0,0,35,34,36,32
  682. Data 0,0,33,37,0,38,0,0
  683. Data 0,0,0,0,0,0,0,0,0,22,0,39,0,31,0,0,48
  684. ' Color table for little map 
  685. Data 8,8,8,8,3,3,3,3,3,3,3,3,3,3,3
  686. Data 2,2,2,10,10,10,10,10,10,7,7,7,7,7,7,9,9
  687. Data 2,2,2,6,6,6,6,6,6,5,5,5,5,5,5,4,4
  688. ' Char table 
  689. Data 14,4,5,6,7,8,9,10,11,12,13,14,1,2,3
  690. Data 4,5,6,7,8,9,10,11,12,13,14,1,2,3
  691. Data 9,16,17,18,19,20,21,22,23,15
  692. Data 33,34,35,36,37,38,39,40,32
  693. Data 8,24,25,26,27,28,29,30,31,41,42,43,44,45,46,47,48
  694. ' Names of Tiles 
  695. Data "Empty","Big Tree","Small Tree","Medium Tree","- Road","| Road"
  696. Data "Crossroad","Crossroad","Crossroad","Crossroad","Curve","Curve"
  697. Data "Curve","Curve","Heli base","Gate","| Wall","- Wall","Cannon"
  698. Data "Cannon","Cannon","Cannon","Cannon","Cannon","Bunker","Bunker"
  699. Data "Jail","Bunker","Fuel","Lazared","Start Point","Flag Depot"
  700. '
  701. Procedure T[C,T$]
  702.   Ink 2 : Bar 154,63 To 245,70 : X=0
  703.   If C<0 Then X=46-Len(T$)*4
  704.   Ink Abs(C),2 : Text 154+X,69,T$
  705. End Proc
  706. Procedure FILREQ[SAV]
  707.   On Error Proc HANDLER
  708.   Hide : Unpack 8 To 3 : Curs Off 
  709.   Screen Display 3,128,-120,320,138
  710.   Colour 17,0 : Colour 19,$FFF : Colour 18,0
  711.   Screen Copy 3,133,164,141,172 To 3,0,0
  712.   If SAV Then Screen Copy 3,133,138,169,150 To 3,3,122
  713.   Dim B(15,4),VERZ$(4),INS$(4),MAPGU(4),FILES(32),NOM(32),C(48)
  714.   Restore 
  715.   For A=1 To 15
  716.     Read B(A,0),B(A,1),B(A,2),B(A,3)
  717.   Next 
  718.   For A=0 To 48
  719.     Read C(A)
  720.   Next 
  721.   VERZ$(1)="FIREPOWER:MapP1" : INS$(1)="PLEASE INSERT FIREPOWER IN ANY DRIVE!" : MAPGU(1)=5
  722.   VERZ$(2)="FIREPOWER:MapP2" : INS$(2)=INS$(1) : MAPGU(2)=5
  723.   VERZ$(3)="FIREPOWER:MapP3" : INS$(3)=INS$(1) : MAPGU(3)=1
  724.   VERZ$(4)="DF0:" : INS$(4)="PLEASE INSERT A MAP-DISK IN DF0:" : MAPGU(4)=0
  725.   A=VERZ : Gosub PRESS
  726.   For A=-120 To 40 Step 5
  727.     Screen Display 3,128,A,320,138 : Wait Vbl 
  728.   Next 
  729.   Screen Hide 1
  730.   Limit Mouse 128,40 To 447,177 : Show 
  731.   Gosub REDDIR
  732.   Do 
  733.     BUT=0 : X=X Mouse-128 : Y=Y Screen(3,Y Mouse) : M=Mouse Key
  734.     If M=1 Then Gosub CHKBUTTON
  735.     If BUT and SWP=0 Then T$="OK" : Gosub STATUS
  736.     If(BUT>0 or M=2) and SWP Then SWP=0 : A=10 : Gosub REALIZE : T$="SWAPPING ABORTED!" : Gosub STATUS
  737.     If BUT=0 and M and X>7 and X<300 and Y>31 and Y<96 Then Gosub CHGFIL
  738.     If BUT and BUT<5 Then Gosub NEWDIR
  739.     If BUT=5 Then Gosub SLIDER
  740.     If BUT=8 and FILES(OLFI)<>0 Then Gosub SURE : If M=2 Then Exit 
  741.     If BUT=9 and FILES(OLFI)<OLFI Then T$="CAN'T DELETE PSEUDO MAP!" : Gosub STATUS : BUT=0
  742.     If BUT=9 and FILES(OLFI)<=MAPGU(VERZ) and OLFI>0 Then T$="CAN'T DELETE GAME MAP!" : Gosub STATUS : BUT=0
  743.     If BUT=10 and FILES(OLFI)<OLFI Then T$="CAN'T SWAP PSEUDO MAP!" : Gosub STATUS : BUT=0
  744.     If BUT=11 and FILES(OLFI)<OLFI Then T$="CAN'T SHOW PSEUDO MAP!" : Gosub STATUS : BUT=0
  745.     If BUT>7 and BUT<12 and OLFI=0 Then T$="NO MAP SELECTED!" : Gosub STATUS : BUT=0
  746.     If BUT=12 and OLFI=0 Then T$="DRAWER EMPTY!" : Gosub STATUS : BUT=0
  747.     If BUT=13 Then OLFI=0 : Exit 
  748.     If BUT=9 Then Gosub DELETE
  749.     If BUT=10 Then OLSW=OLFI : A=10 : Gosub PRESS : SWP=1 : T$="CLICK ON MAP TO BE SWAPPED!" : Gosub STATUS
  750.     If BUT=11 Then Gosub SHOMAP
  751.     If BUT=12 Then Gosub SHOALL
  752.     Repeat : Until Mouse Key=0 or BUT=0
  753.   Loop 
  754.   Hide 
  755.   Screen Show 1
  756.   For A=40 To -120 Step -5
  757.     Screen Display 3,128,A,320,138 : Wait Vbl 
  758.   Next 
  759.   Screen Close 3 : Show 
  760.   If OLFI>0 Then T$="T"+Str$(Abs(FILES(OLFI)))-" " Else T$=""
  761. Goto AUS
  762. SHOALL:
  763.   Hide 
  764.   Screen Open 4,320,296,8,0
  765.   Paper 0 : Curs Off : Flash Off : Cls 0
  766.   Get Palette 3 : Colour 6,$B61 : Colour 5,$60
  767.   For Y=290 To 40 Step -10
  768.     Screen Display 4,128,Y,320,256 : Wait Vbl 
  769.   Next 
  770.   Screen Hide 3
  771.   XX=8 : YY=8 : M=1
  772.   Erase 15 : Reserve As Chip Work 15,4096
  773.   For A=1 To Min(FIL,12)
  774.     If FILES(A)>0 Then Gosub SHOMAP2
  775.     If M Then Exit 
  776.   Next 
  777.   If M=0 Then Repeat : Until Mouse Key
  778.   Repeat : Until Mouse Key=0
  779.   Erase 15
  780.   Screen Show 3
  781.   For Y=40 To 290 Step 10
  782.     Screen Display 4,128,Y,320,256-(Y-40) : Wait Vbl 
  783.   Next 
  784.   Screen Close 4
  785.   Show 
  786. Return 
  787. SHOMAP2:
  788.   Ink 7 : Bar XX,YY To XX+63,YY+63
  789.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  790.   Bload "T"+Str$(FILES(A))-" ",15
  791.   Paper 0 : Pen 1 : Locate XX/8+2,YY/8+8 : Print Str$(FILES(A));
  792.   For Y=0 To 63
  793.     For X=0 To 63
  794.       M=Mouse Key
  795.       C=U(Peek(Start(15)+X*64+Y))
  796.       If C>3 Then Plot XX+X,YY+Y,C(C)
  797.       If M Then Exit 
  798.     Next 
  799.     If M Then Exit 
  800.   Next 
  801.   Add XX,80 : If XX=328 Then XX=8 : Add YY,80
  802. Return 
  803. SHOMAP:
  804.   Ink 7 : Bar 235,32 To 298,95
  805.   Erase 15 : Reserve As Chip Work 15,4096
  806.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  807.   Bload "T"+Str$(FILES(OLFI))-" ",15
  808.   For Y=0 To 63
  809.     For X=0 To 63
  810.       C=U(Peek(Start(15)+X*64+Y))
  811.       If C>3 Then Plot 235+X,32+Y,C(C)
  812.     Next 
  813.   Next 
  814.   Erase 15
  815. Return 
  816. SURE:
  817.   Bell 
  818.   Screen Copy 3,91,48,224,91 To 3,133,138
  819.   Screen Copy 3,0,138,133,181 To 3,91,48
  820.   Repeat : Until Mouse Key=0 : A=15
  821.   C=0
  822.   Repeat 
  823.     M=Mouse Key : Wait Vbl : Add C,1,0 To 49
  824.     If C=25 Then Gosub PRESS
  825.     If C=0 Then Gosub REALIZE
  826.   Until M>0
  827.   Gosub PRESS
  828.   Screen Copy 3,133,138,266,181 To 3,91,48
  829. Return 
  830. DELETE:
  831.   Gosub SURE : If M<>2 Then T$="FUNCTION ABORTED!" : Goto STATUS
  832.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  833.   ERN=0 : Kill "T"+Str$(OLFI)-" " : If ERN Then T$="UNABLE TO DELETE FILE!" : Goto STATUS
  834.   Gosub REDDIR
  835. Return 
  836. SLIDER:
  837.   If FIL<9 Then Return 
  838.   OO=O : YA=0
  839.   Repeat 
  840.     Repeat 
  841.       Y=Y Screen(3,Y Mouse)
  842.       YY=Min(Max(Y-G/2,48),79-G)
  843.       O=Min(((YY-48+G/2)*Max(FIL-7,1))/31,FIL-8)
  844.     Until YA<>YY or Mouse Key=0
  845.     YA=YY
  846.     Wait Vbl : Ink 2 : Bar 307,47 To 312,80
  847.     Ink 1 : Draw 307,YY To 311,YY : Draw 307,YY To 307,YY+G-1
  848.     Ink 3 : Draw 312,YY+G To 308,YY+G : Draw 312,YY+G To 312,YY+1
  849.     If OO<>O Then OO=O : Gosub UPDATFILES
  850.   Until Mouse Key=0
  851.   Gosub UPDATSLID
  852. Return 
  853. UPDATFILES:
  854.   For A=1+O To 8+O
  855.     Locate 1,3+A-O
  856.     Gosub MAPCOM
  857.   Next 
  858. Return 
  859. UPDATSLID:
  860.   Ink 2 : Bar 307,48 To 312,80
  861.   G=Max(31/Max(FIL-7,1),2) : YY=48+(O*31)/Max(FIL-7,1)
  862.   Ink 1 : Draw 307,YY To 311,YY : Draw 307,YY To 307,YY+G-1
  863.   Ink 3 : Draw 312,YY+G To 308,YY+G : Draw 312,YY+G To 312,YY+1
  864. Return 
  865. SCRUP:
  866.   If O<1 Then Return 
  867.   Screen Copy 3,8,32,220,88 To 3,8,40
  868.   Dec O : B=A : A=O+1
  869.   Locate 1,4
  870.   Gosub MAPCOM
  871.   Gosub UPDATSLID : A=B
  872. Return 
  873. SCRDOWN:
  874.   If FIL<O+9 Then Return 
  875.   Screen Copy 3,8,40,220,96 To 3,8,32
  876.   Inc O : B=A : A=O+8
  877.   Locate 1,11
  878.   Gosub MAPCOM
  879.   Gosub UPDATSLID : A=B
  880. Return 
  881. CHGFIL:
  882.   YY=Y/8-3 : If YY+O>FIL Then Return 
  883.   If YY+O=OLFI Then Return 
  884.   If OLFI>O+8 or OLFI<O Then OLFI=O+1
  885.   Locate 1,3+OLFI-O
  886.   A=OLFI : OLFI=0 : Gosub MAPCOM
  887.   OLFI=YY+O
  888.   Locate 1,3+OLFI-O
  889.   A=OLFI : Gosub MAPCOM
  890.   If SWP=1 Then Gosub XCHGFIL : SWP=0 : A=10 : Gosub REALIZE
  891. Return 
  892. XCHGFIL:
  893.   If FILES(OLFI)<0 Then T$="SWAPING ABORTED!" : Gosub STATUS : Return 
  894.   Gosub SURE
  895.   If M<>2 Then T$="FUNCTION ABORTED!" : Gosub STATUS : Return 
  896.   T$="SWAPPING! PLEASE WAIT!" : Gosub STATUS
  897.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  898.   ERN=0 : Rename "T"+Str$(FILES(OLFI))-" " To "TSWAP"
  899.   If ERN Then T$="ERROR SWAPPING FILE!" : Goto STATUS
  900.   Rename "T"+Str$(FILES(OLSW))-" " To "T"+Str$(FILES(OLFI))-" "
  901.   Rename "TSWAP" To "T"+Str$(FILES(OLSW))-" "
  902.   T$="SWAPPING COMPLETE!"
  903. STATUS:
  904.   Ink 2 : Bar 65,112 To 317,121
  905.   Gr Writing 0 : Ink 3,2 : Text 66,119,T$+Space$(32-Len(T$))
  906.   Ink 1,2 : Text 65,118,T$
  907. Return 
  908. NEWDIR:
  909.   If BUT=VERZ Then Return 
  910.   Shoot : A=VERZ : Gosub REALIZE
  911.   A=BUT : VERZ=BUT : Gosub PRESS
  912.   Repeat : Until Mouse Key=0
  913.   Gosub REDDIR
  914. Return 
  915. REDDIR:
  916.   T$="READING DIR..." : Gosub STATUS
  917.   Ink 2 : Bar 5,32 To 220,96
  918.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  919.   Dir$=VERZ$(VERZ)
  920.   FRE=Dfree/488/2
  921.   Ink 2 : Bar 161,101 To 317,110
  922.   Gr Writing 0 : Ink 3,2 : Text 161,109,Str$(FRE)-" "
  923.   Ink 1,2 : Text 160,108,Str$(FRE)-" "
  924.   FIL=0 : O=0 : Gosub UPDATSLID
  925.   For A=1 To 32 : NOM(A)=0 : Next 
  926.   B=0
  927.   For A=1 To 32
  928.     FILES(A)=-A
  929.     If Exist("T"+Str$(A)-" ") Then Inc FIL : FILES(FIL)=A : Gosub UPDATSLID Else Inc B : NOM(B)=A
  930.   Next 
  931.   For A=FIL+1 To 32
  932.     FILES(A)=-NOM(A-FIL)
  933.   Next 
  934.   If FIL=0 Then T$="NO MAP FOUND!"
  935.   If FIL=1 Then T$="1 MAP FOUND!"
  936.   If FIL>1 Then T$=Str$(FIL)-" "+" MAPS FOUND!"
  937.   Gosub STATUS
  938.   If SAV Then FIL=Min(FIL+FRE,32)
  939.   Pen 3 : Paper 2
  940.   OLFI=Min(FIL,OLFI)
  941.   If FIL=0 Then Return 
  942.   OLFI=Max(1,OLFI)
  943.   For A=1 To Min(FIL,8)
  944.     Locate 1,3+A
  945.     Gosub MAPCOM
  946.   Next 
  947.   Gosub UPDATSLID
  948. Return 
  949. MAPCOM:
  950.   Pen 3-(OLFI=A) : Print Abs(FILES(A));" ";At(8,);"*";
  951.   If Abs(FILES(A)<=MAPGU(VERZ)) Then Pen 5 : A$="GAME USED MAP!"
  952.   If Abs(FILES(A)>MAPGU(VERZ)) and FILES(A)>0 Then Pen 7 : A$="SPARE MAP!    "
  953.   If FILES(A)<0 Then Pen 6 : A$="NO MAP!       "
  954.   If OLFI=A Then Pen 4
  955.   Print A$
  956. Return 
  957. CHKBUTTON:
  958.   BUT=0
  959.   For A=1 To 14
  960.     If X=>B(A,0) and X<=B(A,2) and Y=>B(A,1) and Y<=B(A,3) Then BUT=A : Exit 
  961.   Next 
  962.   If A<6 or A=15 Then Return 
  963.   Shoot : Gosub PRESS
  964.   Repeat 
  965.     If BUT=6 Then Gosub SCRUP : Wait Vbl 
  966.     If BUT=7 Then Gosub SCRDOWN : Wait Vbl 
  967.   Until Mouse Key=0
  968.   Gosub REALIZE
  969. Return 
  970. PRESS:
  971.   If B(A,4)=1 Then Return 
  972.   B(A,4)=1
  973.   Ink 3 : Draw B(A,0),B(A,1) To B(A,2)-1,B(A,1)
  974.   Draw B(A,0),B(A,1) To B(A,0),B(A,3)-1
  975.   Ink 1 : Draw B(A,2),B(A,3) To B(A,0)+1,B(A,3)
  976.   Draw B(A,2),B(A,3) To B(A,2),B(A,1)+1
  977.   Screen Copy 3,B(A,0)+2,B(A,1)+2,B(A,2),B(A,3) To 3,B(A,0)+1,B(A,1)+1
  978. Return 
  979. REALIZE:
  980.   If B(A,4)=0 Then Return 
  981.   B(A,4)=0
  982.   Ink 1 : Draw B(A,0),B(A,1) To B(A,2)-1,B(A,1)
  983.   Draw B(A,0),B(A,1) To B(A,0),B(A,3)-1
  984.   Ink 3 : Draw B(A,2),B(A,3) To B(A,0)+1,B(A,3)
  985.   Draw B(A,2),B(A,3) To B(A,2),B(A,1)+1
  986.   Screen Copy 3,B(A,0)+1,B(A,1)+1,B(A,2)-2,B(A,3)-2 To 3,B(A,0)+2,B(A,1)+2
  987. Return 
  988. ' Buttons
  989.   Data 3,16,87,28
  990.   Data 90,16,182,28
  991.   Data 185,16,269,28
  992.   Data 272,16,316,28
  993.   Data 305,46,314,81
  994.   Data 303,30,316,43
  995.   Data 303,84,316,97
  996.   Data 3,122,39,134
  997.   Data 42,122,94,134
  998.   Data 97,122,133,134
  999.   Data 136,122,172,134
  1000.   Data 175,122,243,134
  1001.   Data 246,122,298,134
  1002.   Data 301,122,316,134
  1003.   Data 91,48,223,90
  1004. ' Colortable for Littlemap 
  1005.   Data 7,7,7,7,3,3,3,3,3,3,3,3,3,3,3
  1006.   Data 2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  1007.   Data 2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5
  1008. AUS:
  1009. End Proc[T$]
  1010. Procedure INSERT[D$,T$]
  1011.   Screen Open 5,320,9,2,0
  1012.   Curs Off : Palette 0,0 : Paper 0 : Pen 1
  1013.   Centre T$
  1014.   Y=50 : SY=5 : Fade 1,0,$FFF : A=0
  1015.   Do 
  1016.     If Y>128 Then Dec SY
  1017.     If Y<128 Then Inc SY
  1018.     Add Y,SY : Screen Display 5,128,Y+40,,7 : Wait Vbl 
  1019.     Add A,1,0 To 99 : If A=0 Then If Exist(D$) Then Exit 
  1020.   Loop 
  1021.   Print : Centre "THANX!!!"
  1022.   For A=0 To 49
  1023.     If Y>128 Then Dec SY
  1024.     If Y<128 Then Inc SY
  1025.     If A=33 Then Fade 1
  1026.     Add Y,SY : Screen Display 5,128,Y+40,, : Wait Vbl 
  1027.   Next 
  1028.   Screen Close 5
  1029. End Proc
  1030. Procedure HANDLER
  1031.   ERN=Errn
  1032.   If ERN<>26 Then Resume Next 
  1033.   Amal Off 
  1034.   Sprite Off 
  1035.   Bob Off 
  1036.   For A=0 To 5
  1037.     Screen Open A,128,8,2,0
  1038.     Screen Close A
  1039.   Next 
  1040.   Screen Open 0,320,200,4,0
  1041.   Curs Off : Flash Off : Cls 0 : Paper 0 : Hide On 
  1042.   Double Buffer 
  1043.   Flash 1,"(FFF,32)(CCC,4)(999,4)(666,4)(999,4)(CCC,4)"
  1044.   Flash 2,"(CCC,32)(999,4)(666,4)(333,4)(666,4)(999,4)"
  1045.   Flash 3,"(999,32)(666,4)(333,4)(000,4)(333,4)(666,4)"
  1046.   A$="L R0=0; L R1=0; L R2=20; L R3=0; "
  1047.   F$="L R0=1280; L R1=1000; L R2=-30; L R3=30; "
  1048.   B$="A: P; L R0=R0+R2; L R1=R1+R3; L X=R0/10; L Y=R1/10; L R3=R3+1; "
  1049.   B$=B$+"   I R1>1800 J B; "
  1050.   B$=B$+"C: I R0<0 J L; "
  1051.   C$="   I R0>1680 J L; "
  1052.   D$="   Jump A;"
  1053.   D$=D$+"B: L R3=1-R3; L R4=1; J C; "
  1054.   D$=D$+"L: L R2=0-R2; L R4=2; J A; "
  1055.   E$="  I R0>1280 J L; "
  1056.   Bob 0,0,-10,9
  1057.   Bob 1,0,-10,10
  1058.   Channel 0 To Bob 0
  1059.   Channel 1 To Bob 1
  1060.   Amal 0,A$+B$+C$+D$
  1061.   Amal 1,F$+B$+E$+D$
  1062.   Amal On 
  1063.   Repeat 
  1064.     If Amreg(0,4)=1 Then Amreg(0,4)=0 : Play 1,13,0
  1065.     If Amreg(0,4)=2 Then Amreg(0,4)=0 : Play 2,18,0
  1066.     If Amreg(1,4)=1 Then Amreg(1,4)=0 : Play 4,20,0
  1067.     If Amreg(1,4)=2 Then Amreg(1,4)=0 : Play 8,23,0
  1068.   Until Mouse Key
  1069.   Amal Off 
  1070.   Sprite Off 
  1071.   Screen Close 0
  1072.   End 
  1073. End Proc