home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 301-325 / apd303 / level_editor.amos / level_editor.amosSourceCode
AMOS Source Code  |  1991-07-13  |  5KB  |  203 lines

  1. 'LitterBusters' Level Editor v1.02 
  2. '
  3. 'Tim Davis July 1991 
  4. '
  5. '(C)1991 PATSOFT 
  6. Screen Open 0,320,256,2,Lowres
  7. Palette $986,$0
  8. '
  9. Dim LEV$(5,15),CANS(5),KEYS(5),STX(5),STY(5),TWN$(5),TME(5)
  10. If Exist("lb-levels")
  11.    Curs Off 
  12.    Flash 1,"(fff,15)(986,15)"
  13.    Centre "Loading levels"
  14.    Open In 1,"lb-levels"
  15.    For LVL=1 To 5
  16.       For ROW=1 To 15
  17.          Input #1,LEV$(LVL,ROW)
  18.       Next 
  19.       Input #1,CANS(LVL),KEYS(LVL),STX(LVL),STY(LVL),TWN$(LVL),TME(LVL)
  20.    Next 
  21.    Close 
  22.    Flash Off 
  23.    Colour 1,$0
  24.    Curs On 
  25. Else 
  26.    Curs Off 
  27.    Flash 1,"(fff,15)(986,15)"
  28.    Centre "Loading default levels"
  29.    Open In 1,"lb-levels.bak"
  30.    For LVL=1 To 5
  31.       For ROW=1 To 15
  32.          Input #1,LEV$(LVL,ROW)
  33.       Next 
  34.       Input #1,CANS(LVL),KEYS(LVL),STX(LVL),STY(LVL),TWN$(LVL),TME(LVL)
  35.    Next 
  36.    Close 
  37.    Flash Off 
  38.    Colour 1,$0
  39.    Curs On 
  40. End If 
  41. '
  42. Auto View Off 
  43. Screen Open 1,320,256,2,Lowres
  44. Centre "Commands"
  45. Print 
  46. Print 
  47. Print "  C-Collectable       B-Bag"
  48. Print "  K-Key               P-Points"
  49. Print "  W-Wall              I-Invisible wall"
  50. Print "  D-Door              M-Manhole"
  51. Print "  L-Life              S-Start"
  52. Print "  E-Exit              R-Rubbish tip"
  53. Print "  Del-Delete          Help-This!"
  54. Print "  F10-Clear level"
  55. Print 
  56. Print 
  57. Centre "Press any key"
  58. Curs Off 
  59. Screen Hide 1
  60. Auto View On 
  61. Repeat 
  62.    Screen 0
  63.    Cls 
  64.    Repeat 
  65.       Print At(0,5);"Use 0 to load original levels"
  66.       Home 
  67.       Input "which level [1-5] ?";CL
  68.       If CL=0
  69.          Cls 
  70.          Curs Off 
  71.          Flash 1,"(fff,15)(986,15)"
  72.          Centre "Loading default levels"
  73.          Open In 1,"lb-levels.bak"
  74.          For LVL=1 To 5
  75.             For ROW=1 To 15
  76.                Input #1,LEV$(LVL,ROW)
  77.             Next 
  78.             Input #1,CANS(LVL),KEYS(LVL),STX(LVL),STY(LVL),TWN$(LVL),TME(LVL)
  79.          Next 
  80.          Close 
  81.          Flash Off 
  82.          Colour 1,$0
  83.          Curs On 
  84.       End If 
  85.    Until(CL>0 and CL<6)
  86.    Cls 0
  87.    Set Curs 255,129,129,129,129,129,129,255
  88.    '
  89.    ST=0 : EXI=0
  90.    For Y=1 To 15
  91.       For X=1 To 38
  92.          Print At(X,Y);Mid$(LEV$(CL,Y),X,1)
  93.          If Mid$(LEV$(CL,Y),X,1)="S"
  94.             ST=1
  95.          End If 
  96.          If Mid$(LEV$(CL,Y),X,1)="E"
  97.             Inc EXI
  98.          End If 
  99.       Next 
  100.    Next 
  101.    Print At(2,22);"Level ";CL;At(0,24);"Press [Esc] to finish"
  102.    Print At(1,1);
  103.    X=1
  104.    Y=1
  105.    Repeat 
  106.       Repeat 
  107.          A$=Inkey$
  108.       Until A$<>""
  109.       A$=Upper$(A$)
  110.       S=Scancode
  111.       If S=76 and Y>1 Then Cup : Y=Y-1
  112.       If S=77 and Y<15 Then Cdown : Y=Y+1
  113.       If S=78 and X<38 Then Cright : X=X+1
  114.       If S=79 and X>1 Then Cleft : X=X-1
  115.       If S=89 Then Proc CLRLVL[CL]
  116.       If S=95
  117.          Screen Show 1
  118.          Wait Key 
  119.          Screen Hide 1
  120.       End If 
  121.       RW$=LEV$(CL,Y)
  122.       If S=70
  123.          Print At(X,Y);"+";Cleft$;
  124.          Proc CHKSE
  125.          Mid$(RW$,X,1)="+"
  126.       End If 
  127.       While A$<>Chr$(0)
  128.          If A$="W" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  129.          If A$="R" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  130.          If A$="C" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  131.          If A$="K" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  132.          If A$="B" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  133.          If A$="I" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  134.          If A$="M" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  135.          If A$="P" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  136.          If A$="L" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  137.          If A$="D" Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$
  138.          If Asc(A$)=69 Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$ : Inc EXI
  139.          If Asc(A$)=83 and ST=0 Then Print At(X,Y);A$;Cleft$; : Proc CHKSE : Mid$(RW$,X,1)=A$ : ST=1 : STX(CL)=X : STY(CL)=Y
  140.          A$=Chr$(0)
  141.       Wend 
  142.       LEV$(CL,Y)=RW$
  143.    Until(S=69 and ST=1 and EXI>0)
  144.    '
  145.    Locate 2,26
  146.    Put Key TWN$(CL)
  147.    Input "Name ";TWN$(CL)
  148.    TWN$(CL)=Left$(TWN$(CL),10)
  149.    Put Key Str$(TME(CL))
  150.    Input "Time (secs) ";TME(CL)
  151.    TME(CL)=Abs(TME(CL))
  152.    If TME(CL)>999 Then TME(CL)=999
  153.    CANS(CL)=0 : KEYS(CL)=0
  154.    For Y=1 To 15
  155.       For X=1 To 38
  156.          BIT$=Lower$(Mid$(LEV$(CL,Y),X,1))
  157.          If BIT$="c" Then Inc CANS(CL)
  158.          If BIT$="k" Then Inc KEYS(CL)
  159.       Next 
  160.    Next 
  161.    '
  162.    Print "Edit another level ?";
  163.    YN$=Upper$(Input$(1))
  164. Until YN$<>"Y"
  165. '
  166. Open Out 1,"lb-levels"
  167. For LVL=1 To 5
  168.    For ROW=1 To 15
  169.       Print #1,LEV$(LVL,ROW)
  170.    Next 
  171.    Print #1,CANS(LVL)
  172.    Print #1,KEYS(LVL)
  173.    Print #1,STX(LVL)
  174.    Print #1,STY(LVL)
  175.    Print #1,TWN$(LVL)
  176.    Print #1,TME(LVL)
  177. Next 
  178. Close 
  179. End 
  180. '
  181. Procedure CHKSE
  182.    Shared RW$,X,EXI,ST
  183.    If Asc(Mid$(RW$,X,1))=69
  184.       Dec EXI
  185.    End If 
  186.    If Asc(Mid$(RW$,X,1))=83
  187.       ST=0
  188.    End If 
  189. End Proc
  190. Procedure CLRLVL[L]
  191.    Memorize X : Memorize Y 
  192.    Shared LEV$(),STX(),STY(),KEYS(),CANS(),TWN$(),TME(),ST,EXI
  193.    ST=0 : EXI=0 : KEYS(L)=0 : CANS(L)=0 : TWN$(L)="" : TME(L)=0
  194.    For Y=1 To 15
  195.       LEV$(L,Y)=String$("+",38)
  196.    Next 
  197.    For Y=1 To 15
  198.       For X=1 To 38
  199.          Print At(X,Y);Mid$(LEV$(L,Y),X,1)
  200.       Next 
  201.    Next 
  202.    Remember X : Remember Y 
  203. End Proc