home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 601-625 / apd602 / rally-x.amos / rally-x.amosSourceCode < prev    next >
AMOS Source Code  |  1993-02-25  |  10KB  |  237 lines

  1. '                    ***        By Dr X 1991         ***   
  2. NMAPS=1
  3. Data "Rally-X.Map.1"
  4. Music 1
  5.   Dim ROAD(19,13)
  6.   Screen Open 0,320,256,16,Lowres
  7.   Curs Off 
  8.   Cls 0
  9.   Dim OBJECT(10)
  10.   Dim ECARX(3)
  11.   Dim ECARY(3)
  12.   Dim ED(3)
  13.   Dim EXX(3)
  14.   Dim EYY(3)
  15. RALLYX:
  16. Paper 0
  17.          Centre "Rally-X"
  18. Print : Print : Print : Centre "1 - Run Game      "
  19.                 Print : Centre "2 - Run Map Editor"
  20. Repeat 
  21. I$=Inkey$
  22. If I$="2" Then Gosub MAP_EDITOR
  23. Until I$="1"
  24. Goto BEGIN
  25. BRINGMAP:
  26.       Cls 0
  27.       FLAG=0
  28.       Open In 1,FILE$
  29.       For X=0 To 19
  30.       For Y=0 To 13
  31.       Input #1,ROAD(X,Y)
  32.       Ink 0 : Bar X*16,Y*16+32 To X*16+15,Y*16+47
  33.       If ROAD(X,Y)=1 Then Paste Bob X*16,Y*16+32,6 : FLAG=FLAG+1
  34.       If ROAD(X,Y)=2 Then Paste Bob X*16,Y*16+32,11
  35.       If ROAD(X,Y)=3 Then Paste Bob X*16,Y*16+32,12
  36.       If ROAD(X,Y)=4 Then Ink 4 : Bar X*16,Y*16+32 To X*16+15,Y*16+47
  37.       Next Y
  38.       Next X
  39.        Input #1,CARX : Input #1,CARY : CARY=CARY-2 : Input #1,D
  40.        Input #1,ECARX(1) : Input #1,ECARY(1) : Input #1,ED(1)
  41.        Input #1,ECARX(2) : Input #1,ECARY(2) : Input #1,ED(2)
  42.        Input #1,ECARX(3) : Input #1,ECARY(3) : Input #1,ED(3)
  43.       Close 1
  44.       Return 
  45. BEGIN:
  46.       Q=Q+1 : If Q>NMAPS Then Restore : Q=0
  47.       Read FILE$ : Gosub BRINGMAP
  48.       NE=3
  49.       ECARX(1)=18 : ECARY(1)=12
  50.       ECARX(2)=1 : ECARY(2)=2
  51.       ECARX(3)=13 : ECARY(3)=1
  52.       ED(1)=10
  53.       ED(2)=8
  54.       ED(3)=9
  55.       Locate 0,0 : Print "Flags    Fuel"
  56.       FUEL=1000
  57.       Z=Z+1 : If Z>1 Then Screen Swap : Goto MAIN
  58.       Double Buffer : Autoback 0
  59.       MAIN:
  60.           FUEL=FUEL-1
  61.            Bob 1,CARX*16+XX,CARY*16+YY+32,D
  62.            For I=1 To NE
  63.             Bob I+1,ECARX(I)*16+EXX(I),ECARY(I)*16+EYY(I)+32,ED(I)
  64.            Next 
  65.            If Bob Col(1)=-1 Then Boom : Locate 0,12 : Centre "You Hit an Enemey. Game Over" : Wait Vbl : End 
  66.         MOVE:
  67.              If D=1 Then YY=YY-2 : If YY<=-16 Then YY=0 : CARY=CARY-1
  68.              If D=2 Then XX=XX+2 : If XX>=16 Then XX=0 : CARX=CARX+1
  69.              If D=3 Then YY=YY+2 : If YY>=16 Then YY=0 : CARY=CARY+1
  70.              If D=4 Then XX=XX-2 : If XX<=-16 Then XX=0 : CARX=CARX-1
  71.             For I=1 To NE
  72.              If ED(I)=7 Then EYY(I)=EYY(I)-2 : If EYY(I)<=-16 Then EYY(I)=0 : ECARY(I)=ECARY(I)-1
  73.              If ED(I)=8 Then EXX(I)=EXX(I)+2 : If EXX(I)>=16 Then EXX(I)=0 : ECARX(I)=ECARX(I)+1
  74.              If ED(I)=9 Then EYY(I)=EYY(I)+2 : If EYY(I)>=16 Then EYY(I)=0 : ECARY(I)=ECARY(I)+1
  75.              If ED(I)=10 Then EXX(I)=EXX(I)-2 : If EXX(I)<=-16 Then EXX(I)=0 : ECARX(I)=ECARX(I)-1
  76.             Next 
  77.         SHIFT:
  78.               If D<>2 Then If Jleft(1) and ROAD(CARX-1,CARY)<>4 and XX=0 and YY=0 Then D=4 : Goto TEST
  79.               If D<>4 Then If Jright(1) and ROAD(CARX+1,CARY)<>4 and XX=0 and YY=0 Then D=2 : Goto TEST
  80.               If D<>3 Then If Jup(1) and ROAD(CARX,CARY-1)<>4 and XX=0 and YY=0 Then D=1 : Goto TEST
  81.               If D<>1 Then If Jdown(1) and ROAD(CARX,CARY+1)<>4 and XX=0 and YY=0 Then D=3 : Goto TEST
  82.               If ROAD(CARX,CARY)=1 Then Bell : Autoback 2 : FLAG=FLAG-1 : Ink 0 : Bob Off 1 : Bar CARX*16,CARY*16+32 To CARX*16+15,CARY*16+47 : ROAD(CARX,CARY)=0 : Autoback 0 : If FLAG=0 Then Gosub LEVEL_DONE
  83.               If ROAD(CARX,CARY)=3 Then Boom : Locate 0,12 : Centre "You Hit Mines. Game Over" : Wait Vbl : End 
  84.               If ROAD(CARX,CARY)=2 Then Bell : Autoback 2 : FUEL=FUEL+500 : Ink 0 : Bob Off 1 : Bar CARX*16,CARY*16+32 To CARX*16+15,CARY*16+47 : ROAD(CARX,CARY)=0 : Autoback 0
  85.         TEST:
  86.              If D=1 and YY=0 and ROAD(CARX,CARY-1)=4 Then Gosub HIT_WALL
  87.              If D=2 and XX=0 and ROAD(CARX+1,CARY)=4 Then Gosub HIT_WALL
  88.              If D=3 and YY=0 and ROAD(CARX,CARY+1)=4 Then Gosub HIT_WALL
  89.              If D=4 and XX=0 and ROAD(CARX-1,CARY)=4 Then Gosub HIT_WALL
  90.         TEST2:
  91.             For K=1 To NE
  92.              If ED(K)=7 and EYY(K)=0 and ROAD(ECARX(K),ECARY(K)-1)=4 Then Gosub HIT_WALL2
  93.              If ED(K)=8 and EXX(K)=0 and ROAD(ECARX(K)+1,ECARY(K))=4 Then Gosub HIT_WALL2
  94.              If ED(K)=9 and EYY(K)=0 and ROAD(ECARX(K),ECARY(K)+1)=4 Then Gosub HIT_WALL2
  95.              If ED(K)=10 and EXX(K)=0 and ROAD(ECARX(K)-1,ECARY(K))=4 Then Gosub HIT_WALL2
  96.             Next K
  97.         Locate 0,1 : Print FLAG : Locate 10,1 : Print FUEL/10;" " : If FUEL=0 Then Boom : Locate 0,12 : Centre "Out of Fuel. Game Over"
  98.         Goto MAIN
  99.        HIT_WALL:
  100.                 If D=1 and ROAD(CARX+1,CARY)<>4 Then D=2 : Goto TEST2
  101.                 If D=1 and ROAD(CARX-1,CARY)<>4 Then D=4 : Goto TEST2
  102.                 If D=2 and ROAD(CARX,CARY+1)<>4 Then D=3 : Goto TEST2
  103.                 If D=2 and ROAD(CARX,CARY-1)<>4 Then D=1 : Goto TEST2
  104.                 If D=3 and ROAD(CARX-1,CARY)<>4 Then D=4 : Goto TEST2
  105.                 If D=3 and ROAD(CARX+1,CARY)<>4 Then D=2 : Goto TEST2
  106.                 If D=4 and ROAD(CARX,CARY-1)<>4 Then D=1 : Goto TEST2
  107.                 If D=4 and ROAD(CARX,CARY+1)<>4 Then D=3 : Goto TEST2
  108.          HIT_WALL2:
  109.                If Rnd(100)>50 Then Gosub HITWALL2A
  110.             Rem *** Turn Enemy Car clockwise 
  111.                 If ED(K)=7 and ROAD(ECARX(K)+1,ECARY(K))<>4 Then ED(K)=8 : Return 
  112.                 If ED(K)=7 and ROAD(ECARX(K)-1,ECARY(K))<>4 Then ED(K)=10 : Return 
  113.                 If ED(K)=8 and ROAD(ECARX(K),ECARY(K)+1)<>4 Then ED(K)=9 : Return 
  114.                 If ED(K)=8 and ROAD(ECARX(K),ECARY(K)-1)<>4 Then ED(K)=7 : Return 
  115.                 If ED(K)=9 and ROAD(ECARX(K)-1,ECARY(K))<>4 Then ED(K)=10 : Return 
  116.                 If ED(K)=9 and ROAD(ECARX(K)+1,ECARY(K))<>4 Then ED(K)=8 : Return 
  117.                 If ED(K)=10 and ROAD(ECARX(K),ECARY(K)-1)<>4 Then ED(K)=7 : Return 
  118.                 If ED(K)=10 and ROAD(ECARX(K),ECARY(K)+1)<>4 Then ED(K)=9 : Return 
  119.           HITWALL2A:
  120.             Pop 
  121.             Rem *** anticlockwise
  122.                 If ED(K)=7 and ROAD(ECARX(K)-1,ECARY(K))<>4 Then ED(K)=10 : Return 
  123.                 If ED(K)=7 and ROAD(ECARX(K)+1,ECARY(K))<>4 Then ED(K)=8 : Return 
  124.                 If ED(K)=8 and ROAD(ECARX(K),ECARY(K)-1)<>4 Then ED(K)=7 : Return 
  125.                 If ED(K)=8 and ROAD(ECARX(K),ECARY(K)+1)<>4 Then ED(K)=9 : Return 
  126.                 If ED(K)=9 and ROAD(ECARX(K)+1,ECARY(K))<>4 Then ED(K)=8 : Return 
  127.                 If ED(K)=9 and ROAD(ECARX(K)-1,ECARY(K))<>4 Then ED(K)=10 : Return 
  128.                 If ED(K)=10 and ROAD(ECARX(K),ECARY(K)+1)<>4 Then ED(K)=9 : Return 
  129.                 If ED(K)=10 and ROAD(ECARX(K),ECARY(K)-1)<>4 Then ED(K)=7 : Return 
  130.                 End 
  131.        LEVEL_DONE:
  132.         Cls 0
  133.         Locate 0,11 : Centre "Level Complete"
  134.         Locate 0,13 : Centre "Hit any key for Next..."
  135.         Screen Swap : Wait Vbl : Wait Key : Screen Swap 
  136. Goto BEGIN
  137. MAP_EDITOR:
  138.            Paper 0
  139.            Cls 0
  140.            Bob 1,0,0,6
  141.            Bob 2,32,0,11
  142.            Bob 3,64,0,12
  143.            Ink 4 : Bar 96,0 To 111,15
  144.            Box 128,0 To 143,15
  145.            Ink 4
  146.            Draw 0,31 To 320,31
  147.            Limit Mouse 128,74 To 447,297
  148.            Change Mouse 2
  149.            X Mouse=128 : Y Mouse=74
  150.            OB=6 : POS=0 : M=1
  151.  L:
  152.    MX=X Mouse-128 : MY=Y Mouse-42
  153.    CL=Mouse Key
  154.    I$=Inkey$
  155.    If I$="1" Then OB=6 : POS=0 : M=1
  156.    If I$="2" Then OB=11 : POS=1 : M=1
  157.    If I$="3" Then OB=12 : POS=2 : M=1
  158.    If I$="4" Then OB=4 : POS=3 : M=1
  159.    If I$="5" Then OB=5 : POS=4 : M=1
  160.    If I$="6" Then OB=1 : POS=5 : M=1
  161.    If I$="7" Then OB=7 : POS=6 : M=1
  162.    If I$="8" Then OB=7 : POS=7 : M=1
  163.    If I$="9" Then OB=7 : POS=8 : M=1
  164.    If OB<5 and Asc(I$)=28 Then OB=2 : M=1
  165.    If OB<5 and Asc(I$)=29 Then OB=4 : M=1
  166.    If OB<5 and Asc(I$)=31 Then OB=3 : M=1
  167.    If OB<5 and Asc(I$)=30 Then OB=1 : M=1
  168.    If OB>6 and OB<11 and Asc(I$)=28 Then OB=8 : M=1
  169.    If OB>6 and OB<11 and Asc(I$)=29 Then OB=10 : M=1
  170.    If OB>6 and OB<11 and Asc(I$)=30 Then OB=7 : M=1
  171.    If OB>6 and OB<11 and Asc(I$)=31 Then OB=9 : M=1
  172.    If I$="s" Then Gosub STORE
  173.    If I$="l" Then Gosub COME
  174.    If I$="c" Then Gosub WIPE
  175.    If M=1 Then Pen 2 : Locate 0,2 : Print " 1   2   3   4   5   6   7   8   9"
  176.    If M=1 Then Pen 3 : Locate POS*4,2 : Print POS+1 : If OB<5 Then Bob 5,160,0,OB
  177.    If M=1 and OB>6 and OB<11 Then Bob 5+POS,POS*32,0,OB : M=0
  178.    If CL=1 Then Gosub PLACE
  179.    If CL=2 Then CLE=1 : Gosub PLACE
  180.    Goto L
  181.  PLACE:
  182.        X=(MX/16)*16
  183.        Y=(MY/16)*16
  184.        If POS<3 Then Gosub CLR : Paste Bob X,Y,OB : ROAD(X/16,Y/16-2)=POS+1
  185.        If POS=3 Then Ink 4 : Bar X,Y To X+15,Y+15 : ROAD(X/16,Y/16-2)=4
  186.        If POS=4 or CLE=1 Then Gosub CLR : ROAD(X/16,Y/16-2)=0 : CLE=0
  187.        If POS=5 Then Bob 10,X,Y,OB : CARSX=X/16 : CARSY=Y/16 : D=OB
  188.        If POS=6 Then Bob 14,X,Y,OB : ECARSX1=X/16 : ECARSY1=Y/16 : ED1=OB
  189.        If POS=7 Then Bob 15,X,Y,OB : ECARSX2=X/16 : ECARSY2=Y/16 : ED2=OB
  190.        If POS=8 Then Bob 16,X,Y,OB : ECARSX3=X/16 : ECARSY3=Y/16 : ED3=OB
  191.        Return 
  192.  CLR:
  193.      Ink 0 : Bar X,Y To X+15,Y+15
  194.      Return 
  195.  STORE:
  196.       F$=Fsel$("Rally-X.Map.*","","Save Rally-X","Map File")
  197.       If F$="" Then Return 
  198.        Open Out 1,F$
  199.         For X=0 To 19
  200.          For Y=0 To 13
  201.           Print #1,ROAD(X,Y)
  202.          Next Y
  203.         Next X
  204.        Print #1,CARSX : Print #1,CARSY : Print #1,D : 
  205.        Print #1,ECARSX1 : Print #1,ECARSY1 : Print #1,ED1
  206.        Print #1,ECARSX2 : Print #1,ECARSY2 : Print #1,ED2
  207.        Print #1,ECARSX3 : Print #1,ECARSY3 : Print #1,ED3
  208.         Close 1
  209.        Return 
  210.  COME:
  211.       F$=Fsel$("Rally-X.Map.*","","Load Rally-X","Map File")
  212.       If F$="" Then Return 
  213.       Open In 1,F$
  214.        For X=0 To 19
  215.         For Y=0 To 13
  216.          Input #1,ROAD(X,Y)
  217.           Ink 0 : Bar X*16,Y*16+32 To X*16+15,Y*16+47
  218.            If ROAD(X,Y)=1 Then Paste Bob X*16,Y*16+32,6
  219.            If ROAD(X,Y)=2 Then Paste Bob X*16,Y*16+32,11
  220.            If ROAD(X,Y)=3 Then Paste Bob X*16,Y*16+32,12
  221.            If ROAD(X,Y)=4 Then Ink 4 : Bar X*16,Y*16+32 To X*16+15,Y*16+47
  222.          Next Y
  223.         Next X
  224.        Input #1,CARSX : Input #1,CARSY : Input #1,D : Bob 10,CARSX*16,CARSY*16,D
  225.        Input #1,ECARSX1 : Input #1,ECARSY1 : Input #1,ED1 : Bob 14,ECARSX1*16,ECARSY1*16,ED1
  226.        Input #1,ECARSX2 : Input #1,ECARSY2 : Input #1,ED2 : Bob 15,ECARSX2*16,ECARSY2*16,ED2
  227.        Input #1,ECARSX3 : Input #1,ECARSY3 : Input #1,ED3 : Bob 16,ECARSX3*16,ECARSY3*16,ED3
  228.        Close 1
  229.        Return 
  230.  WIPE:
  231.        For X=0 To 19
  232.         For Y=0 To 14
  233.          ROAD(X,Y)=0
  234.           Ink 0 : Bar X*16,Y*16+32 To X*16+15,Y*16+47
  235.          Next Y
  236.         Next X
  237.        Return