home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 476-500 / apd479 / obsidian.amos / obsidian.amosSourceCode
AMOS Source Code  |  1988-02-16  |  11KB  |  584 lines

  1. Screen Open 0,320,200,16,Lowres
  2. Cls 0
  3. Load "hfont.abk"
  4. Load "music.abk",3
  5. Curs Off 
  6. Music 1 : Tempo 27
  7. Change Mouse 2
  8. Reserve As Data 9,5532
  9. Bank Swap 1,9
  10. Load "orc.abk"
  11. Get Sprite Palette : Flash Off 
  12. Palette $0,$999
  13. Load "wall.abk",2
  14. Load "pic1.abk",4
  15. Load "samples.abk",5
  16. Load "asm.abk",6
  17. Load "pic2.abk",7
  18. Load "pic3.abk",8
  19. Sam Bank 5
  20. METHOD=0
  21. Double Buffer 
  22. Screen Open 2,320,40,16,Lowres
  23. Screen Hide 2
  24. Screen Display 2,,294,,
  25. Unpack 4
  26. Bob 12,110,9,30
  27. Double Buffer 
  28. Get Sprite Palette 
  29. Palette $0,$0
  30. Dim STRTX(12) : Dim STRTY(12)
  31. Dim HIGHSCORE(7) : Dim HIGHSCORE$(7)
  32. For F=0 To 7 : HIGHSCORE(F)=150 : HIGHSCORE$(F)="CDG" : Next F
  33. RESTART:
  34. XCAL=0 : YCAL=0
  35. MX=0 : MY=0 : MSHOT=0
  36. MXPTR=Varptr(MX)
  37. MYPTR=Varptr(MY)
  38. MSHOTPTR=Varptr(MSHOT)
  39. OLDSHOT=0
  40. ' Initialise Gun and screen
  41. Dreg(0)=0
  42. Call 6
  43. Gosub AMSTRINGS
  44. '
  45. '
  46. CALIBRATEGUN
  47. L$="lev1"
  48. NEXLEV:
  49. Goto L$
  50. Screen 2
  51. '
  52. '
  53. MAIN:
  54. '
  55. '
  56. '-------------- MAIN LOOP ------------------------ 
  57. '........... SET UP........... 
  58. '
  59. Screen Display 0,,242,,
  60. Get Sprite Palette 
  61. Palette $0,$999
  62. Screen 0 : Screen Hide 0
  63. Cls : Screen Swap : Cls 
  64. For B=83 To 185 Step 34
  65.    For A=0 To 300 Step 75
  66.       Paste Icon A,B,2
  67.    Next A
  68. Next B
  69. Ink 0
  70. Bar 0,0 To 320,83
  71. Screen Show 0
  72. Screen Display 2,,294,,
  73. Screen 0
  74. Screen Show 2
  75. Screen To Front 2
  76. Screen Hide 1
  77. Channel 10 To Screen Display 0
  78. X$="M 0,-200,50"
  79. Amal 10,X$
  80. Amal On 10
  81. Channel 9 To Screen Display 2
  82. Z$="M 0,-50,25"
  83. Amal 9,Z$
  84. Amal On 9
  85. Wait 50
  86. Screen 0
  87. Ink 10
  88. POUR
  89. Bar 0,0 To 320,83
  90. Paste Icon 0,-6,3
  91. For A=1 To SIZEWAVE
  92.    Bob A,STRTX(A),STRTY(A),1
  93.    Channel A To Bob A
  94.    Amal A,A$
  95.    Amal On A
  96. Next A
  97. Screen 2 : Gosub CLOCK : Screen 0
  98. HIT=0
  99. Amreg(4)=X Bob(12)
  100. Channel 12 To Bob 12
  101. GAUGE$="L: L X=RE;I X>10 J L;"
  102. Amal 12,GAUGE$
  103. Amal On 12
  104. '
  105. '
  106. MLOP:
  107. While I Bob(13)+I Bob(14)+I Bob(15)>60
  108.    If METHOD=1
  109.       TRIGGER
  110.    Else MOOSE
  111.    End If 
  112.    If MSHOT=-1 : Bob 20,MX,MY,1 : Sam Play %1001,1,11000 : If Bob Col(20) : HITWHO : Amal Off HIT : DIE
  113.    End If : End If 
  114.    If Amreg(2)=1 : For DED=1 To SIZEWAVE : If Chanmv(DED)=0 : Channel DED To Bob DED : Amal DED,A$ : Amal On DED : End If : Next DED : Amreg(2)=0 : End If 
  115.    If X Bob(12)=10
  116.        Bob 12,10,,
  117.       DEFEATPIC
  118. Bank Swap 1,9
  119. Screen 1
  120. Screen To Front 1
  121. Screen Show 1
  122. Unpack 8 To 1
  123. If SCORE>HIGHSCORE(7)
  124. NUHIGH
  125. End If 
  126. PRTHIGH
  127. Bank Swap 1,9
  128. Screen To Back 1
  129.    Goto RESTART
  130.  End If 
  131. Wend 
  132. For DI=1 To SIZEWAVE : Bob DI,,266, : Bob Off DI : Next DI
  133. NLEVPIC
  134. N$=Str$(Val(Right$(L$,1))+1)
  135. Right$(L$,1)=Right$(N$,1)
  136. Bob 21,,266, : Bob 22,,266,
  137. Bob Off 21 : Bob Off 22
  138. Fade 5 : Wait 75
  139. If L$="lev9"
  140. Goto IWON
  141. End If 
  142. Screen Hide 0 : Screen Hide 2
  143. Wait 20
  144. Goto NEXLEV
  145. '
  146. '
  147. '-----------level one set up-------------------
  148. LEV1:
  149. SIZEWAVE=3
  150. STRTX(1)=44 : STRTX(2)=144 : STRTX(3)=246
  151. STRTY(1)=286 : STRTY(2)=267 : STRTY(3)=301
  152. SCORE=0 : SCORE$="0"
  153. A$=LEV1$
  154. HIT$=DIE1$
  155. Amreg(0)=6 : Rem speed of climb 
  156. Goto MAIN
  157. '
  158. '
  159. '
  160. '
  161. '-----------level two set up-------------------
  162. LEV2:
  163. SIZEWAVE=4
  164. STRTX(1)=40 : STRTX(2)=120 : STRTX(3)=200 : STRTX(4)=280
  165. STRTY(1)=286 : STRTY(2)=301 : STRTY(3)=200 : STRTY(4)=224
  166. A$=LEV1$
  167. HIT$=DIE1$
  168. Amreg(0)=6 : Rem speed of climb 
  169. Goto MAIN
  170. '-----------level three set up-------------------
  171. LEV3:
  172. SIZEWAVE=5
  173. STRTX(1)=32 : STRTX(2)=96 : STRTX(3)=160 : STRTX(4)=224 : STRTX(5)=288
  174. STRTY(1)=301 : STRTY(2)=200 : STRTY(3)=250 : STRTY(4)=324 : STRTY(5)=290
  175. A$=LEV1$
  176. HIT$=DIE1$
  177. Amreg(0)=6 : Rem speed of climb 
  178. Goto MAIN
  179. '-----------level four set up------------------- 
  180. LEV4:
  181. SIZEWAVE=4
  182. STRTX(1)=40 : STRTX(2)=120 : STRTX(3)=200 : STRTX(4)=280
  183. STRTY(1)=286 : STRTY(2)=301 : STRTY(3)=200 : STRTY(4)=224
  184. A$=LEV1$
  185. HIT$=DIE1$
  186. Amreg(0)=5 : Rem speed of climb 
  187. Goto MAIN
  188. '
  189. '-----------level five set up------------------- 
  190. LEV5:
  191. SIZEWAVE=5
  192. STRTX(1)=32 : STRTX(2)=96 : STRTX(3)=160 : STRTX(4)=224 : STRTX(5)=288
  193. STRTY(1)=301 : STRTY(2)=200 : STRTY(3)=250 : STRTY(4)=324 : STRTY(5)=290
  194. A$=LEV1$
  195. HIT$=DIE1$
  196. Amreg(0)=5 : Rem speed of climb 
  197. Goto MAIN
  198. '
  199. '-----------level six set up-------------------  
  200. LEV6:
  201. SIZEWAVE=5
  202. STRTX(1)=32 : STRTX(2)=96 : STRTX(3)=160 : STRTX(4)=224 : STRTX(5)=288
  203. STRTY(1)=301 : STRTY(2)=200 : STRTY(3)=250 : STRTY(4)=324 : STRTY(5)=290
  204. A$=LEV1$
  205. HIT$=DIE1$
  206. Amreg(0)=4 : Rem speed of climb 
  207. Goto MAIN
  208. '
  209. '-----------level seven set up-------------------  
  210. LEV7:
  211. SIZEWAVE=6
  212. STRTX(1)=27 : STRTX(2)=80 : STRTX(3)=133 : STRTX(4)=186 : STRTX(5)=239 : STRTX(6)=294
  213. STRTY(1)=301 : STRTY(2)=260 : STRTY(3)=350 : STRTY(4)=224 : STRTY(5)=290 : STRTY(6)=326
  214. A$=LEV1$
  215. HIT$=DIE1$
  216. Amreg(0)=4 : Rem speed of climb 
  217. Goto MAIN
  218. '-----------level eight set up-------------------  
  219. LEV8:
  220. SIZEWAVE=6
  221. STRTX(1)=27 : STRTX(2)=80 : STRTX(3)=133 : STRTX(4)=186 : STRTX(5)=239 : STRTX(6)=294
  222. STRTY(1)=301 : STRTY(2)=260 : STRTY(3)=350 : STRTY(4)=224 : STRTY(5)=290 : STRTY(6)=326
  223. A$=LEV1$
  224. HIT$=DIE1$
  225. Amreg(0)=3 : Rem speed of climb 
  226. Goto MAIN
  227. '
  228. Procedure CALIBRATEGUN
  229.    Shared MSHOT,XCAL,YCAL,MX,MY,METHOD
  230. Screen Open 1,320,256,4,Lowres
  231. Double Buffer 
  232.    Cls 0
  233. Pen 2
  234. Paper 0
  235. Unpack 7 To 1
  236. While MET=0
  237. J=Jleft(1) : M=Mouse Key : MET=J+M
  238. If Mouse Key>0
  239. METHOD=2
  240. Change Mouse 2 : Show On 
  241. Cls 0
  242. Pop Proc
  243. Else METHOD=1
  244. Hide 
  245. End If 
  246. Wend 
  247. Cls 0
  248. Screen Swap 
  249. Cls 0
  250. Wait 30
  251. Paper 0 : Pen 5
  252. Locate 5,2 : Centre "FIRE AT SPOT TO CALIBRATE PHAZER"
  253.    Plot 160,100
  254.    OK=False
  255.    Repeat 
  256.       XCAL=0 : YCAL=0
  257.       ' clear trigger
  258.       MSHOT=0
  259.       ' init trigger 
  260.       Dreg(0)=0
  261.       Call 6
  262.       Repeat 
  263.          Proc TRIGGER
  264.       Until MSHOT=-1
  265.      Sam Play %111,1,11000
  266.       XCAL=160-MX
  267.       YCAL=100-MY
  268.       If XCAL<40 and XCAL>-40 Then OK=True
  269.       If YCAL<80 and YCAL>-80 Then OK=True
  270.    Until OK
  271.    MX=0 : MY=0
  272. Cls 0
  273. End Proc
  274. Procedure TRIGWAIT
  275. Shared METHOD
  276. If METHOD=2
  277. While Mouse Key=0
  278. Wend 
  279. Goto JP
  280. End If 
  281. Shared MSHOT,MSHOTPTR
  282.    ' init trigger 
  283.    Dreg(0)=0
  284.    Call 6
  285.    MSHOT=0
  286.    Repeat 
  287.       MSHOT=Jleft(1)
  288.    Until MSHOT=-1
  289. JP:
  290. End Proc
  291. Procedure TRIGGER
  292.    Shared MSHOT,OLDSHOT,MSHOTPTR
  293.    ' read trigger - valptr in a0
  294.    MSHOT=Jleft(1)
  295.    If MSHOT<>OLDSHOT
  296.       OLDSHOT=MSHOT
  297.       If MSHOT=-1 : Proc BEAMPOS : End If 
  298.    Else 
  299.       Wait Vbl 
  300.       MSHOT=0
  301.    End If 
  302. End Proc
  303. Procedure BEAMPOS
  304.    Shared MSHOT,MX,MY,MXPTR,MYPTR,MSHOTPTR,XCAL,YCAL
  305.    Dreg(0)=2
  306.    Dreg(1)=Cop Logic
  307.    Dreg(2)=Phybase(0)
  308.    Dreg(3)=Phybase(1)
  309.    Dreg(4)=Phybase(2)
  310.    Dreg(5)=Phybase(3)
  311.    Areg(0)=MXPTR
  312.    Areg(1)=MYPTR
  313.    Areg(2)=MSHOTPTR
  314.    Call 6
  315.    MX=MX+XCAL
  316.    MY=MY+YCAL
  317.    If MY<0 or MY>255 Then MSHOT=0
  318. End Proc
  319. Procedure HITWHO
  320. Shared HIT
  321. B=Bob Col(20)
  322. BB=0
  323. Repeat 
  324. BB=Col(-(BB+1))
  325. If BB : HIT=BB
  326. End If 
  327. Until BB=0
  328. End Proc
  329. Procedure DIE
  330. Shared HIT,HIT$,SCORE,SCORE$
  331. Channel HIT To Bob HIT
  332. Amal HIT,HIT$
  333. Amal On HIT
  334. Sam Play %110,2,6500
  335. SCORE=SCORE+5
  336. SCORE$=Str$(SCORE)-" "
  337. Screen 2
  338. Ink 0,10
  339. Text 154,27,SCORE$
  340. Screen 0
  341. End Proc
  342. Procedure DEFEATPIC
  343. Amal Off 
  344. Bob Off 12
  345. Screen 0
  346. Bob 21,-100,10,31
  347. Bob 22,400,155,32
  348. Channel 1 To Bob 21
  349. Channel 2 To Bob 22
  350. A$="M 170,0,85"
  351. B$="M -333,0,111"
  352. Amal 1,A$
  353. Amal 2,B$
  354. Amal On 1
  355. Amal On 2
  356. For V=63 To 0 Step -1
  357. Mvolume V
  358. Next V
  359. Sam Play %1001,4,2500
  360. Wait 70
  361. Sam Play %110,6,2500
  362. Wait 100
  363. For V=0 To 63
  364. Mvolume V
  365. Next V
  366. Screen 2 : Bob 12,110,9,30
  367. TRIGWAIT
  368. Screen 0
  369. Bob Off 22
  370. Bob Off 21
  371. Screen 2 : Unpack 4
  372. End Proc
  373. Procedure NLEVPIC
  374. Amal Off 
  375. Screen 0
  376. Bob 21,-100,10,33
  377. Bob 22,400,155,34
  378. Channel 1 To Bob 21
  379. Channel 2 To Bob 22
  380. A$="M 170,0,85"
  381. B$="M -333,0,111"
  382. Amal 1,A$
  383. Amal 2,B$
  384. Amal On 1
  385. Amal On 2
  386. For V=63 To 0 Step -1
  387. Mvolume V
  388. Next V
  389. Sam Play %1111,5,3500
  390. Wait 100
  391. Sam Play %1111,6,6500
  392. Wait 100
  393. For V=0 To 63
  394. Mvolume V
  395. Next V
  396. TRIGWAIT
  397. End Proc
  398. AMSTRINGS:
  399. LEV1$="Loop: L A=2;F R1=0 T RA;N R1;L A=2;F R1=0 T RA;N R1;L A=3;L Y=Y-18:F R1=0 T RA;N R1;F R0=4 T 5;L A=R0;F R1=0 T RA;N R1;L A=6;L Y=Y-18;F R1=0 T RA;N R1;I Y>51 J Loop;L RF=1;L Y=41;A 1,(8,5)(9,5)(10,5)(11,5)(12,5)(13,5)"
  400. LEV1$=LEV1$+"F R0=1 T 30;N R0;L Y=266;L RE=RE-5;P;J Loop"
  401. DIE1$="Let A=14;Let R0=266-Y;Let R1=R0/4;Move 0,R0,R1;Let RC=1"
  402. HR$="A 1,(29,500)(28,500)(27,500)(26,500)(25,500)(24,500)(23,500)(22,500)(21,500)(20,500)"
  403. MN$="A 10,(29,50)(28,50)(27,50)(26,50)(25,50)(24,50)(23,50)(22,50)(21,50)(20,50)"
  404. SEC$="A 100,(29,5)(28,5)(27,5)(26,5)(25,5)(24,5)(23,5)(22,5)(21,5)(20,5)"
  405. Return 
  406. Procedure POUR
  407. Rem
  408. Rem  * Created with RAINBOW WARRIOR - Amos Copper Generator *
  409. Rem  *  Yup, you can blame good ol' Spadge for this one...  *
  410. Rem
  411. Set Rainbow 0,10,86,"","",""
  412. Rainbow 0,0,41,86
  413. Colour Back 0
  414. Restore RDATA
  415. For C=0 To 85 : Read CVA : Rain(0,C)=CVA
  416. Next C : View 
  417. RDATA:
  418. Data $0,$112,$113,$114,$115,$115,$115,$116
  419. Data $116,$117,$117,$118,$118,$119,$119,$119
  420. Data $119,$119,$119,$119,$119,$219,$219,$319
  421. Data $319,$419,$419,$519,$519,$619,$619,$719
  422. Data $719,$819,$819,$917,$917,$917,$917,$916
  423. Data $916,$915,$915,$914,$914,$913,$913,$912
  424. Data $912,$922,$922,$932,$932,$942,$942,$942
  425. Data $942,$942,$942,$952,$952,$962,$962,$972
  426. Data $972,$A72,$A72,$B82,$B82,$C92,$C92,$DA2
  427. Data $DA2,$EB2,$EB2,$FC2,$FC2,$FD2,$FD2,$FE2
  428. Data $FE2,$FF2,$FF2,$FF2,$FF2,$0,$0,$0
  429. Data $0,$0,$0,$0,$0,$0,$0,$0
  430. End Proc
  431. Procedure MOOSE
  432. Shared MSHOT,MX,MY
  433. MSHOT=0
  434. For D=1 To 5
  435. M=Mouse Click
  436. If M=1 Then MSHOT=-1 : Rem Sam Play 2,5,16000 
  437. MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
  438. Next D
  439. M=0
  440. End Proc
  441. CLOCK:
  442. Bob 13,258,4,29
  443. Bob 14,276,4,29
  444. Bob 15,294,4,29
  445. For C=13 To 15
  446.    Channel C To Bob C
  447. Next C
  448. Amal 13,HR$
  449. Amal 14,MN$
  450. Amal 15,SEC$
  451. Amal On 
  452. Return 
  453. Procedure NUHIGH
  454. Shared SCORE,HIGHSCORE(),HIGHSCORE$(),MX,MY,METHOD,MSHOT
  455. Dim N$(3)
  456. N$=""
  457. PRTX=130
  458. Paste Bob 80,100,37
  459. Paste Bob 210,100,38
  460. Paste Bob 140,150,39
  461. Reserve Zone 3
  462. Set Zone 1,76,96 To 110,120
  463. Set Zone 2,206,96 To 240,120
  464. Set Zone 3,136,145 To 170,180
  465. Flash 3,"(400,10)(a00,10)(f00,10)(a00,10)(400,10)(440,10)(aa0,10)(ff0,10)(aa0,10)(440,10)"
  466. Ink 3
  467. Box 76,96 To 110,120
  468. Box 206,96 To 240,120
  469. Box 136,145 To 170,180
  470. For INIT=1 To 3
  471.  LETTER=1
  472. Bob 17,150,100,LETTER
  473. LOPS:
  474. If METHOD=1
  475. TRIGGER
  476. Else MOOSE
  477. End If 
  478. '
  479. If MSHOT<>-1
  480. Goto LOPS
  481. End If 
  482. T=Zone(MX,MY)
  483. '
  484. If T=0
  485. Goto LOPS : End If 
  486. If T=3
  487. Goto PLACELET : End If 
  488. '
  489. If T=1
  490. Dec LETTER
  491. Sam Play 15,1,11000
  492. End If 
  493. If T=2
  494. Inc LETTER
  495. Sam Play 15,1,11000
  496. End If 
  497. If LETTER<1
  498. LETTER=26
  499. End If 
  500. If LETTER>26
  501. LETTER=1
  502. End If 
  503. '
  504. Bob 17,150,100,LETTER
  505. '
  506. '
  507. Goto LOPS
  508. '
  509. '
  510. '
  511. PLACELET:
  512. Paste Bob PRTX,190,LETTER
  513. Play 50,10
  514. PRTX=PRTX+20
  515. N$=N$+Chr$(64+LETTER)
  516. Next INIT
  517. For H=0 To 6 Step 1
  518. If SCORE>HIGHSCORE(H)
  519.     For M=6 To H Step -1
  520.      HIGHSCORE(M+1)=HIGHSCORE(M)
  521.       HIGHSCORE$(M+1)=HIGHSCORE$(M)
  522.       Next M
  523.       HIGHSCORE$(H)=N$
  524.        HIGHSCORE(H)=SCORE
  525.        H=9
  526.       End If 
  527. Next H
  528. Flash Off 
  529.    End Proc
  530. Procedure PRTHIGH
  531. Shared HIGHSCORE(),HIGHSCORE$()
  532. Unpack 8 To 1
  533. PRTLINE=50
  534. For H=0 To 6
  535. P$=HIGHSCORE$(H)
  536. A$=Left$(P$,1)
  537. B$=Mid$(P$,2,1)
  538. C$=Mid$(P$,3,1)
  539. A=Asc(A$)-64
  540. B=Asc(B$)-64
  541. C=Asc(C$)-64
  542. Paste Bob 80,PRTLINE,A
  543. Paste Bob 95,PRTLINE,B
  544. Paste Bob 110,PRTLINE,C
  545. SCORE$=Str$(HIGHSCORE(H))
  546. SCORE$=SCORE$-" "
  547. If Len(SCORE$)<6
  548. S=6-Len(SCORE$)
  549. AD$=String$("0",S)
  550. SCORE$=AD$+SCORE$
  551. End If 
  552. XP=140
  553. For S=1 To 6
  554. SC=Asc(Mid$(SCORE$,S,1))-48
  555. If SC=0
  556. SC=10
  557. End If 
  558. Paste Bob XP,PRTLINE,SC+26
  559. XP=XP+15
  560. Next S
  561. PRTLINE=PRTLINE+20
  562. Next H
  563. TRIGWAIT
  564. End Proc
  565. IWON:
  566. Get Sprite Palette 
  567. Palette $0,$999
  568. Paste Bob 40,168,36
  569. Paste Bob 55,0,35
  570. Sam Play $1100,1,5000
  571. Sam Play $11,1,8000
  572. TRIGWAIT
  573. Bank Swap 1,9
  574. Screen 1
  575. Screen To Front 1
  576. Screen Show 1
  577. Unpack 8 To 1
  578. If SCORE>HIGHSCORE(7)
  579. NUHIGH
  580. End If 
  581. PRTHIGH
  582. Bank Swap 1,9
  583. Screen To Back 1
  584.    Goto RESTART