home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / games / rally-x.amos / rally-x.amosSourceCode < prev    next >
AMOS Source Code  |  1991-05-26  |  12KB  |  259 lines

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