home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 126-150 / apd143 / line.amos / line.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  1991-01-03  |  10.2 KB  |  488 lines

  1. Screen Open 0,320,200,16,Lowres
  2. Break Off 
  3. '
  4. '  ************************************    
  5. '  *                                  *  
  6. '  * The Line Game (C) Robsoft 1990   *  
  7. '  *                                  *  
  8. '  * Design nicked by Rob.            *  
  9. '  *                                  *  
  10. '  * Program by Rob(Helped out by Stu)*    
  11. '  *                                  *  
  12. '  * Graphics by Rob, music by Stu.   *    
  13. '  *                                  *  
  14. '  ************************************  
  15. '    
  16. '
  17. ' Note : In the arrays player 1 = 1, player 2 = 0, player 3 = 2 (on keys).   
  18. '
  19. '
  20. ' Things to do @ 25/07/90 :-     
  21. '  
  22. '     stu won't dare to attempt to Add player 3  
  23. '
  24. '     Function Keys
  25. '
  26. '
  27. USERS=1 : Rem actually one more than this, because player 0 exists.
  28. DELAY=1 : Rem speed control for whole game 
  29. HIGHLEVEL=12 : Rem Max number of levels in game, again level 0 exists.  
  30. MULTI=5 : Rem Number of levels in multi-level challenge
  31. TELEINK=6 : Rem Ink number for teleport items
  32. '
  33. Dim X(USERS),Y(USERS),XADD(USERS),YADD(USERS),GAMEOVER(USERS),SPACED(USERS)
  34. Dim TELEDATA(4),V(8)
  35. Global V(),TELEDATA(),MULTI,TELEINK,USERS,HIGHLEVEL,DELAY,X(),Y(),XADD(),YADD(),GAMEOVER(),SPACED()
  36. INITIALIZE
  37. TITLE_PAGE
  38. '
  39. Procedure TITLE_PAGE
  40.    Repeat 
  41.       '
  42.       For CTR=0 To USERS
  43.          GAMEOVER(CTR)=False
  44.          SPACED(CTR)=False
  45.       Next CTR
  46.       '
  47.       Screen Show 7 : Rem show title screen
  48.       Sprite 11,360,250,12
  49.       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)"
  50.       Amal On 11
  51.       Clear Key 
  52.       Repeat 
  53.          VOID$=Inkey$
  54.          FKEY=Scancode-79
  55.          If(Fire(1)) or(Fire(0))
  56.             FKEY=1
  57.          End If 
  58.       Until(FKEY>0) and(FKEY<5)
  59.       '
  60.       If FKEY=3
  61.          ENTER_PLAYER_NAMES
  62.       End If 
  63.       If FKEY=4
  64.          DEFINE_KEYS
  65.       End If 
  66.       '
  67.       Sprite Off 11
  68.       Screen Hide 7
  69.       Screen 0
  70.       Curs Off 
  71.       Get Palette 6
  72.       '
  73.       If(FKEY=1)
  74.          Amal Off 11
  75.          Screen Copy 6 To 0
  76.          LEVEL=Rnd(HIGHLEVEL)
  77.          SET_UP_LEVEL[LEVEL]
  78.          MAIN_LOOP
  79.       Else 
  80.          MULTI_LEVEL_CHALLENGE
  81.       End If 
  82.       '
  83.    Until IMPOSSIBLE_CONDITION
  84. End Proc
  85. '
  86. Procedure INITIALIZE
  87.    Flash Off 
  88.    Paper 0
  89.    Cls 
  90.    Hide On 
  91.    Curs Off 
  92.    Randomize Timer
  93.    Screen Open 0,320,260,32,Lowres
  94.    Unpack 8 To 6
  95.    Screen Hide 6
  96.    Unpack 9 To 7
  97.    Screen Hide 7
  98. End Proc
  99. '
  100. Procedure MAIN_LOOP
  101.    Mvolume 30
  102.    Music 1
  103.    Tempo 17
  104.    '
  105.    Repeat 
  106.       CHECK_JOYSTICK
  107.       CHECK_COLLISIONS
  108.       YO_PLOTS
  109.       Wait DELAY
  110.    Until(GAMEOVER(1)=True) or(GAMEOVER(0)=True)
  111.    GAME_OVER_MESSAGE
  112. End Proc
  113. '
  114. Procedure CHECK_JOYSTICK
  115.    For CTR=0 To 1
  116.       If Jup(CTR)
  117.          YADD(CTR)=-1
  118.          XADD(CTR)=0
  119.       End If 
  120.       If Jdown(CTR)
  121.          YADD(CTR)=1
  122.          XADD(CTR)=0
  123.       End If 
  124.       If Jleft(CTR)
  125.          YADD(CTR)=0
  126.          XADD(CTR)=-1
  127.       End If 
  128.       If Jright(CTR)
  129.          YADD(CTR)=0
  130.          XADD(CTR)=1
  131.       End If 
  132.       If Fire(CTR) and Not SPACED(CTR)
  133.          HYPERSPACE[CTR]
  134.       End If 
  135.    Next CTR
  136.    ' here check keyboard player 
  137. End Proc
  138. '
  139. Procedure YO_PLOTS
  140.    Ink 5
  141.    Plot X(1),Y(1)
  142.    Ink 25
  143.    Plot X(0),Y(0)
  144. End Proc
  145. '
  146. Procedure CHECK_COLLISIONS
  147.    For CTR=0 To USERS
  148.       Add X(CTR),XADD(CTR)
  149.       Add Y(CTR),YADD(CTR)
  150.       '
  151.       If Point(X(CTR),Y(CTR))=TELEINK
  152.          Sam Play 8,5,14000
  153.          If TELEDATA(1)<>0
  154.             X(CTR)=TELEDATA(1)
  155.          End If 
  156.          If TELEDATA(2)<>0
  157.             Y(CTR)=TELEDATA(2)
  158.          End If 
  159.          XADD(CTR)=TELEDATA(3)
  160.          YADD(CTR)=TELEDATA(4)
  161.       End If 
  162.       '
  163.       If Point(X(CTR),Y(CTR))<>0
  164.          GAMEOVER(CTR)=True
  165.          Sprite 9,X(CTR)+129,Y(CTR)+45,8
  166.          Amal 9,"A 1,(8,3)(9,3)(10,3)(11,3)"
  167.          Amal On 9
  168.          Sam Play 8,3,14000
  169.          WOBBLE_THE_BORDER[10,$F33]
  170.          Sprite Off 9
  171.       End If 
  172.    Next CTR
  173. End Proc
  174. '
  175. Procedure MULTI_LEVEL_CHALLENGE
  176.    For CTR=1 To MULTI
  177.       Screen Copy 6 To 0
  178.       LEVEL=99 : Rem don't want to repeat the same level twice
  179.       SET_UP_LEVEL[LEVEL]
  180.       MAIN_LOOP
  181.       SCORE_SO_FAR
  182.    Next CTR
  183.    FINAL_SCORE
  184. End Proc
  185. '
  186. Procedure SCORE_SO_FAR
  187. End Proc
  188. '
  189. Procedure FINAL_SCORE
  190. End Proc
  191. '
  192. Procedure GAME_OVER_MESSAGE
  193.    Sam Play 8,1,14000
  194.    Paper 0
  195.    Locate 0,13
  196.    Centre "             "
  197.    Locate 0,14
  198.    Centre " GAME OVER ! "
  199.    Locate 0,15
  200.    Centre "               "
  201.    Locate 0,16
  202.    If GAMEOVER(1)
  203.       Centre " PLAYER 2 WINS "
  204.    Else 
  205.       Centre " PLAYER 1 WINS "
  206.    End If 
  207.    Locate 0,17
  208.    Centre "              "
  209.    '
  210.    For V=30 To 0 Step -1
  211.       Mvolume V
  212.       For P=1 To 1600 : Next P
  213.    Next V
  214.    Music Off 
  215. End Proc
  216. '
  217. Procedure HYPERSPACE[USER]
  218.    Repeat 
  219.       X(USER)=Rnd(290)+10
  220.       Y(USER)=Rnd(200)+10
  221.    Until Point(X(USER),Y(USER))=0
  222.    SPACED(USER)=True
  223.    Sprite 10,X(USER)+129,Y(USER)+45,1
  224.    Amal 10,"A 1,(1,3)(2,3)(3,3)(4,3)(5,3)(6,3)(7,3)"
  225.    Amal On 
  226.    Sam Play 8,4,14000
  227.    WOBBLE_THE_BORDER[7,$FFF]
  228.    Sprite Off 10
  229. End Proc
  230. '
  231. Procedure WOBBLE_THE_BORDER[LONG,BORD]
  232.    For CTR=1 To LONG
  233.       Colour 0,BORD
  234.       Wait 1
  235.       Colour 0,$0
  236.       Wait 1
  237.    Next CTR
  238. End Proc
  239. '
  240. Procedure ENTER_PLAYER_NAMES
  241. End Proc
  242. '
  243. Procedure DEFINE_KEYS
  244. End Proc
  245. '
  246. Procedure SET_UP_LEVEL[LEVEL]
  247.    L$=Str$(LEVEL)
  248.    LEVEL$="LEVEL"+Mid$(L$,2,Len(L$)-1)
  249.    Rem    LEVEL$="LEVEL8" 
  250.    Restore LEVEL$
  251.    '
  252.    For U=0 To USERS
  253.       Read X(U)
  254.       Read Y(U)
  255.       Read XADD(U)
  256.       Read YADD(U)
  257.    Next U
  258.    '
  259.    Read ITEMS
  260.    If ITEMS<>0
  261.       For CTR=1 To ITEMS
  262.          For X=1 To 8
  263.             Read V(X)
  264.          Next X
  265.          Screen Copy V(1),V(2),V(3),V(4),V(5) To V(6),V(7),V(8)
  266.       Next CTR
  267.    End If 
  268.    '
  269.    Read TELE
  270.    If TELE=1
  271.       For CTR=1 To 4
  272.          Read V(CTR)
  273.       Next CTR
  274.       Ink TELEINK
  275.       Bar V(1),V(2) To V(3),V(4)
  276.       '
  277.       For CTR=1 To 4
  278.          Read TELEDATA(CTR)
  279.       Next CTR
  280.    End If 
  281.    '
  282.    Sam Play 8,2,14000
  283.    Wait 50
  284. End Proc
  285. '
  286. '
  287. Rem DATA FORMAT - User 0 : start x, start y, initial add x, initial add y
  288. Rem               Same for remaining users           
  289. Rem  Number of scenery items in this level 
  290. Rem  Followed by screen copy values for number of scenery items
  291. '
  292. Rem  Teleport factor - 0 = no teleport, 1 = teleport   
  293. Rem  Teleport "box" co-ords
  294. Rem  New X, new Y : A value of 0 leaves it where it was. 
  295. Rem  New Xadd, new Yadd
  296. '
  297. Rem               Different objects and their co-ordinates 
  298. '
  299. Rem      Top left corner     : 6,1,1,30,30   
  300. Rem      Top right corner    : 6,280,1,320,30    
  301. Rem      Bottom left corner  : 6,1,200,50,270  
  302. Rem      Bottom right corner : 6,270,210,320,270   
  303. Rem      Cube                : 7,5,30,50,80  
  304. Rem      Pyramid             : 7,5,82,50,125   
  305. Rem      Maze                : 7,5,130,50,180  
  306. Rem      Pacman              : 7,5,190,50,180  
  307. '
  308. '
  309. LEVEL0:
  310. Data 149,100,-1,0
  311. Data 150,100,1,0
  312. Data 0
  313. Data 1
  314. Data 30,8,270,10
  315. Data 0,244,0,-1
  316. '
  317. LEVEL1:
  318. Data 20,200,0,-1
  319. Data 290,200,0,-1
  320. Data 3
  321. Data 6,1,1,30,30,0,20,20
  322. Data 6,280,1,320,30,0,255,20
  323. Data 7,5,30,50,80,0,140,100
  324. Data 1
  325. Data 272,28,276,48
  326. Data 29,0,1,0
  327. '
  328. LEVEL2:
  329. Data 30,30,0,1
  330. Data 280,30,0,1
  331. Data 3
  332. Data 6,10,1,70,15,0,120,65
  333. Data 7,5,30,50,80,0,170,140
  334. Data 7,5,82,50,125,0,80,145
  335. Data 1
  336. Data 206,146,208,162
  337. Data 75,0,-1,0
  338. '
  339. LEVEL3:
  340. Data 90,130,1,0
  341. Data 210,130,-1,0
  342. Data 8
  343. Data 7,5,130,50,180,0,127,140
  344. Data 7,5,130,50,180,0,172,140
  345. Data 7,5,130,50,180,0,82,140
  346. Data 7,5,130,50,180,0,127,75
  347. Data 7,5,130,50,180,0,172,75
  348. Data 7,5,130,50,180,0,82,75
  349. Data 7,5,130,50,180,0,35,105
  350. Data 7,5,130,50,180,0,220,105
  351. Data 1
  352. Data 147,168,152,170
  353. Data 0,95,0,-1
  354. '
  355. LEVEL4:
  356. Data 148,150,0,-1
  357. Data 150,150,0,-1
  358. Data 5
  359. Data 6,1,1,30,70,0,120,90
  360. Data 6,280,1,320,70,0,150,90
  361. Data 6,10,1,210,15,0,55,165
  362. Data 7,5,190,50,235,0,40,70
  363. Data 7,5,190,50,235,0,230,70
  364. Data 1
  365. Data 260,89,263,95
  366. Data 70,0,1,0
  367. '
  368. LEVEL5:
  369. Data 48,210,1,0
  370. Data 257,210,-1,0
  371. Data 1
  372. Data 7,55,90,155,170,0,100,90
  373. Data 1
  374. Data 154,210,159,211
  375. Data 0,70,0,1
  376. '
  377. LEVEL6:
  378. Data 48,40,1,0
  379. Data 257,40,-1,0
  380. Data 7
  381. Data 6,1,1,60,60,0,100,80
  382. Data 6,1,200,50,270,0,100,118
  383. Data 6,250,1,320,50,0,150,80
  384. Data 6,270,210,320,270,0,170,128
  385. Data 6,20,240,60,280,0,140,158
  386. Data 7,5,130,50,180,0,40,105
  387. Data 7,5,130,50,180,0,220,105
  388. Data 1
  389. Data 150,39,155,40
  390. Data 0,90,0,1
  391. '
  392. LEVEL7:
  393. Data 149,170,-1,0
  394. Data 150,170,1,0
  395. Data 6
  396. Data 6,20,240,220,280,0,50,60
  397. Data 6,20,1,220,20,0,50,90
  398. Data 6,20,240,220,280,0,50,120
  399. Data 6,20,1,220,20,0,50,150
  400. Data 6,20,240,220,280,0,50,180
  401. Data 6,20,1,220,20,0,50,220
  402. Data 1
  403. Data 130,243,170,244
  404. Data 0,124,0,-1
  405. '
  406. LEVEL8:
  407. Data 85,150,0,-1
  408. Data 221,150,0,-1
  409. Data 13
  410. Data 6,1,1,60,60,0,100,80
  411. Data 6,1,200,50,270,0,100,118
  412. Data 6,250,1,320,50,0,150,80
  413. Data 6,270,210,320,270,0,170,128
  414. Data 6,20,240,60,280,0,140,158
  415. Data 7,5,130,50,180,0,40,105
  416. Data 7,5,130,50,180,0,220,105
  417. Data 7,5,30,50,80,0,220,150
  418. Data 7,5,82,50,125,0,40,155
  419. Data 7,5,190,50,235,0,40,60
  420. Data 7,5,190,50,235,0,220,60
  421. Data 6,15,15,25,25,0,100,118
  422. Data 6,15,15,25,25,0,200,118
  423. '
  424. LEVEL9:
  425. Data 105,240,1,0
  426. Data 200,240,-1,0
  427. Data 15
  428. Data 7,220,230,275,250,0,40,225
  429. Data 7,220,230,275,250,0,220,225
  430. Data 7,220,230,275,250,0,40,60
  431. Data 7,220,230,275,250,0,100,60
  432. Data 7,220,230,275,250,0,160,60
  433. Data 7,220,230,275,250,0,220,60
  434. Data 7,220,230,275,250,0,40,90
  435. Data 7,220,230,275,250,0,100,90
  436. Data 7,220,230,275,250,0,160,90
  437. Data 7,220,230,275,250,0,220,90
  438. Data 7,220,230,275,250,0,40,120
  439. Data 7,220,230,275,250,0,100,120
  440. Data 7,220,230,275,250,0,160,120
  441. Data 7,220,230,275,250,0,220,120
  442. Data 6,15,15,270,60,0,15,150
  443. '
  444. LEVEL10:
  445. Data 149,100,0,1
  446. Data 151,100,0,1
  447. Data 18
  448. Data 6,145,40,210,60,0,25,80
  449. Data 6,145,40,210,60,0,25,100
  450. Data 6,145,40,210,60,0,25,120
  451. Data 6,145,40,210,60,0,25,140
  452. Data 6,145,40,210,60,0,25,160
  453. Data 6,145,40,210,60,0,220,80
  454. Data 6,145,40,210,60,0,220,100
  455. Data 6,145,40,210,60,0,220,120
  456. Data 6,145,40,210,60,0,220,140
  457. Data 6,145,40,210,60,0,220,160
  458. Data 6,145,40,210,60,0,25,180
  459. Data 6,145,40,210,60,0,90,180
  460. Data 6,145,40,210,60,0,155,180
  461. Data 6,145,40,210,60,0,220,180
  462. Data 6,145,40,210,60,0,25,60
  463. Data 6,145,40,210,60,0,90,60
  464. Data 6,145,40,210,60,0,155,60
  465. Data 6,145,40,210,60,0,220,60
  466. '
  467. LEVEL11:
  468. Data 151,150,1,0
  469. Data 149,150,-1,0
  470. Data 3
  471. Data 6,145,40,210,60,0,100,150
  472. Data 7,5,190,50,235,0,170,150
  473. Data 7,5,30,50,80,0,150,65
  474. Data 1
  475. Data 298,100,300,140
  476. Data 10,0,1,0
  477. '
  478. LEVEL12:
  479. Data 100,190,1,0
  480. Data 150,190,-1,0
  481. Data 4
  482. Data 6,0,0,70,100,0,80,60
  483. Data 6,230,0,310,100,0,150,60
  484. Data 6,0,210,60,257,0,80,160
  485. Data 6,220,210,310,257,0,140,160
  486. Data 1
  487. Data 140,69,155,71
  488. Data 0,60,0,-1