home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1991-01-03 | 10.2 KB | 488 lines |
- Screen Open 0,320,200,16,Lowres
- Break Off
- '
- ' ************************************
- ' * *
- ' * The Line Game (C) Robsoft 1990 *
- ' * *
- ' * Design nicked by Rob. *
- ' * *
- ' * Program by Rob(Helped out by Stu)*
- ' * *
- ' * Graphics by Rob, music by Stu. *
- ' * *
- ' ************************************
- '
- '
- ' Note : In the arrays player 1 = 1, player 2 = 0, player 3 = 2 (on keys).
- '
- '
- ' Things to do @ 25/07/90 :-
- '
- ' stu won't dare to attempt to Add player 3
- '
- ' Function Keys
- '
- '
- USERS=1 : Rem actually one more than this, because player 0 exists.
- DELAY=1 : Rem speed control for whole game
- HIGHLEVEL=12 : Rem Max number of levels in game, again level 0 exists.
- MULTI=5 : Rem Number of levels in multi-level challenge
- TELEINK=6 : Rem Ink number for teleport items
- '
- Dim X(USERS),Y(USERS),XADD(USERS),YADD(USERS),GAMEOVER(USERS),SPACED(USERS)
- Dim TELEDATA(4),V(8)
- Global V(),TELEDATA(),MULTI,TELEINK,USERS,HIGHLEVEL,DELAY,X(),Y(),XADD(),YADD(),GAMEOVER(),SPACED()
- INITIALIZE
- TITLE_PAGE
- '
- Procedure TITLE_PAGE
- Repeat
- '
- For CTR=0 To USERS
- GAMEOVER(CTR)=False
- SPACED(CTR)=False
- Next CTR
- '
- Screen Show 7 : Rem show title screen
- Sprite 11,360,250,12
- Amal 11,"A 0,(12,3)(13,3)(14,3)(15,3)(16,3)(17,3)(18,3)(19,3)(20,5)(21,20)(22,10)"
- Amal On 11
- Clear Key
- Repeat
- VOID$=Inkey$
- FKEY=Scancode-79
- If(Fire(1)) or(Fire(0))
- FKEY=1
- End If
- Until(FKEY>0) and(FKEY<5)
- '
- If FKEY=3
- ENTER_PLAYER_NAMES
- End If
- If FKEY=4
- DEFINE_KEYS
- End If
- '
- Sprite Off 11
- Screen Hide 7
- Screen 0
- Curs Off
- Get Palette 6
- '
- If(FKEY=1)
- Amal Off 11
- Screen Copy 6 To 0
- LEVEL=Rnd(HIGHLEVEL)
- SET_UP_LEVEL[LEVEL]
- MAIN_LOOP
- Else
- MULTI_LEVEL_CHALLENGE
- End If
- '
- Until IMPOSSIBLE_CONDITION
- End Proc
- '
- Procedure INITIALIZE
- Flash Off
- Paper 0
- Cls
- Hide On
- Curs Off
- Randomize Timer
- Screen Open 0,320,260,32,Lowres
- Unpack 8 To 6
- Screen Hide 6
- Unpack 9 To 7
- Screen Hide 7
- End Proc
- '
- Procedure MAIN_LOOP
- Mvolume 30
- Music 1
- Tempo 17
- '
- Repeat
- CHECK_JOYSTICK
- CHECK_COLLISIONS
- YO_PLOTS
- Wait DELAY
- Until(GAMEOVER(1)=True) or(GAMEOVER(0)=True)
- GAME_OVER_MESSAGE
- End Proc
- '
- Procedure CHECK_JOYSTICK
- For CTR=0 To 1
- If Jup(CTR)
- YADD(CTR)=-1
- XADD(CTR)=0
- End If
- If Jdown(CTR)
- YADD(CTR)=1
- XADD(CTR)=0
- End If
- If Jleft(CTR)
- YADD(CTR)=0
- XADD(CTR)=-1
- End If
- If Jright(CTR)
- YADD(CTR)=0
- XADD(CTR)=1
- End If
- If Fire(CTR) and Not SPACED(CTR)
- HYPERSPACE[CTR]
- End If
- Next CTR
- ' here check keyboard player
- End Proc
- '
- Procedure YO_PLOTS
- Ink 5
- Plot X(1),Y(1)
- Ink 25
- Plot X(0),Y(0)
- End Proc
- '
- Procedure CHECK_COLLISIONS
- For CTR=0 To USERS
- Add X(CTR),XADD(CTR)
- Add Y(CTR),YADD(CTR)
- '
- If Point(X(CTR),Y(CTR))=TELEINK
- Sam Play 8,5,14000
- If TELEDATA(1)<>0
- X(CTR)=TELEDATA(1)
- End If
- If TELEDATA(2)<>0
- Y(CTR)=TELEDATA(2)
- End If
- XADD(CTR)=TELEDATA(3)
- YADD(CTR)=TELEDATA(4)
- End If
- '
- If Point(X(CTR),Y(CTR))<>0
- GAMEOVER(CTR)=True
- Sprite 9,X(CTR)+129,Y(CTR)+45,8
- Amal 9,"A 1,(8,3)(9,3)(10,3)(11,3)"
- Amal On 9
- Sam Play 8,3,14000
- WOBBLE_THE_BORDER[10,$F33]
- Sprite Off 9
- End If
- Next CTR
- End Proc
- '
- Procedure MULTI_LEVEL_CHALLENGE
- For CTR=1 To MULTI
- Screen Copy 6 To 0
- LEVEL=99 : Rem don't want to repeat the same level twice
- SET_UP_LEVEL[LEVEL]
- MAIN_LOOP
- SCORE_SO_FAR
- Next CTR
- FINAL_SCORE
- End Proc
- '
- Procedure SCORE_SO_FAR
- End Proc
- '
- Procedure FINAL_SCORE
- End Proc
- '
- Procedure GAME_OVER_MESSAGE
- Sam Play 8,1,14000
- Paper 0
- Locate 0,13
- Centre " "
- Locate 0,14
- Centre " GAME OVER ! "
- Locate 0,15
- Centre " "
- Locate 0,16
- If GAMEOVER(1)
- Centre " PLAYER 2 WINS "
- Else
- Centre " PLAYER 1 WINS "
- End If
- Locate 0,17
- Centre " "
- '
- For V=30 To 0 Step -1
- Mvolume V
- For P=1 To 1600 : Next P
- Next V
- Music Off
- End Proc
- '
- Procedure HYPERSPACE[USER]
- Repeat
- X(USER)=Rnd(290)+10
- Y(USER)=Rnd(200)+10
- Until Point(X(USER),Y(USER))=0
- SPACED(USER)=True
- Sprite 10,X(USER)+129,Y(USER)+45,1
- Amal 10,"A 1,(1,3)(2,3)(3,3)(4,3)(5,3)(6,3)(7,3)"
- Amal On
- Sam Play 8,4,14000
- WOBBLE_THE_BORDER[7,$FFF]
- Sprite Off 10
- End Proc
- '
- Procedure WOBBLE_THE_BORDER[LONG,BORD]
- For CTR=1 To LONG
- Colour 0,BORD
- Wait 1
- Colour 0,$0
- Wait 1
- Next CTR
- End Proc
- '
- Procedure ENTER_PLAYER_NAMES
- End Proc
- '
- Procedure DEFINE_KEYS
- End Proc
- '
- Procedure SET_UP_LEVEL[LEVEL]
- L$=Str$(LEVEL)
- LEVEL$="LEVEL"+Mid$(L$,2,Len(L$)-1)
- Rem LEVEL$="LEVEL8"
- Restore LEVEL$
- '
- For U=0 To USERS
- Read X(U)
- Read Y(U)
- Read XADD(U)
- Read YADD(U)
- Next U
- '
- Read ITEMS
- If ITEMS<>0
- For CTR=1 To ITEMS
- For X=1 To 8
- Read V(X)
- Next X
- Screen Copy V(1),V(2),V(3),V(4),V(5) To V(6),V(7),V(8)
- Next CTR
- End If
- '
- Read TELE
- If TELE=1
- For CTR=1 To 4
- Read V(CTR)
- Next CTR
- Ink TELEINK
- Bar V(1),V(2) To V(3),V(4)
- '
- For CTR=1 To 4
- Read TELEDATA(CTR)
- Next CTR
- End If
- '
- Sam Play 8,2,14000
- Wait 50
- End Proc
- '
- '
- Rem DATA FORMAT - User 0 : start x, start y, initial add x, initial add y
- Rem Same for remaining users
- Rem Number of scenery items in this level
- Rem Followed by screen copy values for number of scenery items
- '
- Rem Teleport factor - 0 = no teleport, 1 = teleport
- Rem Teleport "box" co-ords
- Rem New X, new Y : A value of 0 leaves it where it was.
- Rem New Xadd, new Yadd
- '
- Rem Different objects and their co-ordinates
- '
- Rem Top left corner : 6,1,1,30,30
- Rem Top right corner : 6,280,1,320,30
- Rem Bottom left corner : 6,1,200,50,270
- Rem Bottom right corner : 6,270,210,320,270
- Rem Cube : 7,5,30,50,80
- Rem Pyramid : 7,5,82,50,125
- Rem Maze : 7,5,130,50,180
- Rem Pacman : 7,5,190,50,180
- '
- '
- LEVEL0:
- Data 149,100,-1,0
- Data 150,100,1,0
- Data 0
- Data 1
- Data 30,8,270,10
- Data 0,244,0,-1
- '
- LEVEL1:
- Data 20,200,0,-1
- Data 290,200,0,-1
- Data 3
- Data 6,1,1,30,30,0,20,20
- Data 6,280,1,320,30,0,255,20
- Data 7,5,30,50,80,0,140,100
- Data 1
- Data 272,28,276,48
- Data 29,0,1,0
- '
- LEVEL2:
- Data 30,30,0,1
- Data 280,30,0,1
- Data 3
- Data 6,10,1,70,15,0,120,65
- Data 7,5,30,50,80,0,170,140
- Data 7,5,82,50,125,0,80,145
- Data 1
- Data 206,146,208,162
- Data 75,0,-1,0
- '
- LEVEL3:
- Data 90,130,1,0
- Data 210,130,-1,0
- Data 8
- Data 7,5,130,50,180,0,127,140
- Data 7,5,130,50,180,0,172,140
- Data 7,5,130,50,180,0,82,140
- Data 7,5,130,50,180,0,127,75
- Data 7,5,130,50,180,0,172,75
- Data 7,5,130,50,180,0,82,75
- Data 7,5,130,50,180,0,35,105
- Data 7,5,130,50,180,0,220,105
- Data 1
- Data 147,168,152,170
- Data 0,95,0,-1
- '
- LEVEL4:
- Data 148,150,0,-1
- Data 150,150,0,-1
- Data 5
- Data 6,1,1,30,70,0,120,90
- Data 6,280,1,320,70,0,150,90
- Data 6,10,1,210,15,0,55,165
- Data 7,5,190,50,235,0,40,70
- Data 7,5,190,50,235,0,230,70
- Data 1
- Data 260,89,263,95
- Data 70,0,1,0
- '
- LEVEL5:
- Data 48,210,1,0
- Data 257,210,-1,0
- Data 1
- Data 7,55,90,155,170,0,100,90
- Data 1
- Data 154,210,159,211
- Data 0,70,0,1
- '
- LEVEL6:
- Data 48,40,1,0
- Data 257,40,-1,0
- Data 7
- Data 6,1,1,60,60,0,100,80
- Data 6,1,200,50,270,0,100,118
- Data 6,250,1,320,50,0,150,80
- Data 6,270,210,320,270,0,170,128
- Data 6,20,240,60,280,0,140,158
- Data 7,5,130,50,180,0,40,105
- Data 7,5,130,50,180,0,220,105
- Data 1
- Data 150,39,155,40
- Data 0,90,0,1
- '
- LEVEL7:
- Data 149,170,-1,0
- Data 150,170,1,0
- Data 6
- Data 6,20,240,220,280,0,50,60
- Data 6,20,1,220,20,0,50,90
- Data 6,20,240,220,280,0,50,120
- Data 6,20,1,220,20,0,50,150
- Data 6,20,240,220,280,0,50,180
- Data 6,20,1,220,20,0,50,220
- Data 1
- Data 130,243,170,244
- Data 0,124,0,-1
- '
- LEVEL8:
- Data 85,150,0,-1
- Data 221,150,0,-1
- Data 13
- Data 6,1,1,60,60,0,100,80
- Data 6,1,200,50,270,0,100,118
- Data 6,250,1,320,50,0,150,80
- Data 6,270,210,320,270,0,170,128
- Data 6,20,240,60,280,0,140,158
- Data 7,5,130,50,180,0,40,105
- Data 7,5,130,50,180,0,220,105
- Data 7,5,30,50,80,0,220,150
- Data 7,5,82,50,125,0,40,155
- Data 7,5,190,50,235,0,40,60
- Data 7,5,190,50,235,0,220,60
- Data 6,15,15,25,25,0,100,118
- Data 6,15,15,25,25,0,200,118
- '
- LEVEL9:
- Data 105,240,1,0
- Data 200,240,-1,0
- Data 15
- Data 7,220,230,275,250,0,40,225
- Data 7,220,230,275,250,0,220,225
- Data 7,220,230,275,250,0,40,60
- Data 7,220,230,275,250,0,100,60
- Data 7,220,230,275,250,0,160,60
- Data 7,220,230,275,250,0,220,60
- Data 7,220,230,275,250,0,40,90
- Data 7,220,230,275,250,0,100,90
- Data 7,220,230,275,250,0,160,90
- Data 7,220,230,275,250,0,220,90
- Data 7,220,230,275,250,0,40,120
- Data 7,220,230,275,250,0,100,120
- Data 7,220,230,275,250,0,160,120
- Data 7,220,230,275,250,0,220,120
- Data 6,15,15,270,60,0,15,150
- '
- LEVEL10:
- Data 149,100,0,1
- Data 151,100,0,1
- Data 18
- Data 6,145,40,210,60,0,25,80
- Data 6,145,40,210,60,0,25,100
- Data 6,145,40,210,60,0,25,120
- Data 6,145,40,210,60,0,25,140
- Data 6,145,40,210,60,0,25,160
- Data 6,145,40,210,60,0,220,80
- Data 6,145,40,210,60,0,220,100
- Data 6,145,40,210,60,0,220,120
- Data 6,145,40,210,60,0,220,140
- Data 6,145,40,210,60,0,220,160
- Data 6,145,40,210,60,0,25,180
- Data 6,145,40,210,60,0,90,180
- Data 6,145,40,210,60,0,155,180
- Data 6,145,40,210,60,0,220,180
- Data 6,145,40,210,60,0,25,60
- Data 6,145,40,210,60,0,90,60
- Data 6,145,40,210,60,0,155,60
- Data 6,145,40,210,60,0,220,60
- '
- LEVEL11:
- Data 151,150,1,0
- Data 149,150,-1,0
- Data 3
- Data 6,145,40,210,60,0,100,150
- Data 7,5,190,50,235,0,170,150
- Data 7,5,30,50,80,0,150,65
- Data 1
- Data 298,100,300,140
- Data 10,0,1,0
- '
- LEVEL12:
- Data 100,190,1,0
- Data 150,190,-1,0
- Data 4
- Data 6,0,0,70,100,0,80,60
- Data 6,230,0,310,100,0,150,60
- Data 6,0,210,60,257,0,80,160
- Data 6,220,210,310,257,0,140,160
- Data 1
- Data 140,69,155,71
- Data 0,60,0,-1