home *** CD-ROM | disk | FTP | other *** search
/ Más de 2,500 Juegos / CD1.iso / ZIPDAT / 0784 / 0784.ZIP / EGGSFIL3.BAS < prev    next >
Encoding:
BASIC Source File  |  1996-05-10  |  26.9 KB  |  910 lines

  1. DECLARE SUB Intro ()
  2. DECLARE SUB pal (n!, r!, g!, b!)
  3. ON ERROR GOTO errorhandler
  4. IF COMMAND$ = "DBSISGREAT" THEN cheat% = 1 ELSE cheat% = 0
  5. COLOR 10
  6. PRINT "The EGGS Files ";
  7. COLOR 12
  8. PRINT "3";
  9. COLOR 7
  10. PRINT SPACE$(10); "version 1.2"
  11. PRINT
  12. COLOR 15
  13. PRINT "Please wait, loading and initializing..."
  14.  
  15. DEFINT A-Y
  16. DIM SHARED speedreduc
  17. TT$ = TIME$
  18. DO
  19. LOOP UNTIL TIME$ <> TT$
  20. xx = 0
  21. TT$ = TIME$
  22. DO
  23. xx = xx + 1
  24. LOOP UNTIL TIME$ <> TT$
  25. speedreduc = xx * 1.5
  26. xx = 0
  27. 'Initialisation
  28. RANDOMIZE TIMER
  29. ON PLAY(1) GOSUB Musicplay
  30. PLAY ON
  31. DIM Music$(17, 3), musicl(17)
  32. FOR i = 1 TO 17: musicl(i) = 1: NEXT i
  33. musicl(10) = 3: musicl(12) = 3
  34. Music$(1, 1) = "MB O4 L4 DFEFE"
  35. Music$(2, 1) = "MB O3 L8 FEDACDE"
  36. Music$(3, 1) = "MB O2 L4 FEDCA"
  37. Music$(4, 1) = "MB O4 L16 GEGFAEADCCED"
  38. Music$(5, 1) = "MB O4 L8 FFEDEDAFED"
  39. Music$(6, 1) = "MB O4 L16 CCDFEDC > CCDFEDC"
  40. Music$(7, 1) = "MB O3 L8 FFEDC > FFEDC"
  41. Music$(8, 1) = "MB O4 L16 GGFEDCA"
  42. Music$(9, 1) = "MB O3 L16 GGEEDC > GGEEDC"
  43. Music$(10, 1) = "MB O4 L2 C L8 DFED L4 GG L8 GAEF L4 DD L8 DFEDC"
  44. Music$(10, 2) = "MB >C<BAGFED L2 C L8 DFED L4 GG L8 GAEF"
  45. Music$(10, 3) = "MB L4 DD L8 DFEDCGDE L2 C"
  46. Music$(11, 1) = "MB O4 L16 CEF L4 G L16 CEF L4 G L16 CDEF L8 GECED P8"
  47. Music$(12, 1) = "MB O3 L8 CCGGAAG P8 FFEEDDC P8"
  48. Music$(12, 2) = "MB O3 L8 GGFFEED P8 GGFFEED P8"
  49. Music$(12, 3) = Music$(12, 1)
  50. Music$(13, 1) = "MB O2 L2 DDEE D#D#EE"
  51. Music$(14, 1) = "MB O4 L8 BEDFE > BEDFE"
  52. Music$(15, 1) = "MB O3 L4 B>CE L2 E L3 D L3 C <"
  53. Music$(16, 1) = "MB O3 L8 FFF L2 G L3 GG P4 L8 GGFG L2 B- L8 GF L2 G P4"
  54. Music$(17, 1) = "MB O4 L16 FEGDAFC > FEGDAFC"
  55. items$ = "NPR"
  56. DIM dat$(20, 9), datnew$(20, 9), zowladpik(80), zfallbpik(80)
  57. DIM zmudpik(80), zgrasspik(80), zicemudpik(80), zrpik(80), zlpik(80)
  58. DIM zbrickpik(80), zscankypik(80), zscanky2pik(80), zladderpik(80)
  59. DIM zscanky3pik(80), zmouldypik(80), ztelepik(80), zspikepik(80), zxpik(80)
  60. DIM zmouldy2pik(80), zmouldy3pik(80), zblankpik(80), p$(20, 9), zicepik(80)
  61. DIM znrgpik(80), zpodpik(80), ztreepik(80), zexitpik(80), zbridgepik(80)
  62. DIM itemgot(20, 9), teleportx(2), teleporty(2)
  63. lev = 0: lives = 3: score = 0: livelost = 0
  64. OPEN "CONFIG.EF3" FOR INPUT AS #1
  65. INPUT #1, musicon
  66. INPUT #1, moosikon
  67. CLOSE
  68.  
  69. SCREEN 13
  70. Intro
  71. pal 0, 0, 10, 63        'background
  72. pal 1, 63, 63, 0        'yellow
  73. pal 2, 0, 63, 0         'green
  74. pal 3, 0, 10, 63        'background colour
  75. pal 4, 63, 63, 63       'white
  76. pal 5, 63, 0, 0         'red
  77. COLOR 1
  78. LOCATE 5, 1
  79. PRINT "DBSoft presents"
  80. COLOR 2
  81. LOCATE 10, 1
  82. PRINT TAB(5); "▄▄▄▄  ▄▄▄   ▄▄▄   ▄▄▄         "; : COLOR 5: PRINT "███": COLOR 2
  83. PRINT TAB(5); "█    █     █     █            "; : COLOR 5: PRINT "   █": COLOR 2: PRINT "THE";
  84. PRINT TAB(5); "█▀▀  █  ▄▄ █  ▄▄  ▀▀▄  FILES  "; : COLOR 5: PRINT " ██ ": COLOR 2
  85. PRINT TAB(5); "█    █   █ █   █    █         "; : COLOR 5: PRINT "   █": COLOR 2
  86. PRINT TAB(5); "▀▀▀▀  ▀▀▀   ▀▀▀  ▀▀▀          "; : COLOR 5: PRINT "███ ": COLOR 2
  87. PRINT TAB(5); "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄"
  88. PRINT TAB(5); "███████▀▀▀▀▀▀▀▀"
  89. PRINT
  90. PRINT
  91. COLOR 1
  92. PRINT TAB(14); "version 1.2 "; : COLOR 5: PRINT "by Alex Warren"
  93. COLOR 4
  94. LOCATE 22, 1
  95. PRINT "Please wait, loading graphics"
  96. PRINT "filey-type-things...."
  97. FOR z = 6 TO 254
  98. pal z, 0, 10, 63
  99. NEXT z
  100. 'Get sprites
  101. FOR i% = 1 TO 25
  102. VIEW (1, 1)-(18, 22)
  103. CLS 1
  104. IF i% = 1 THEN f$ = "brick"
  105. IF i% = 2 THEN f$ = "icebrick"
  106. IF i% = 3 THEN f$ = "ladder"
  107. IF i% = 4 THEN f$ = "teleport"
  108. IF i% = 5 THEN f$ = "spike"
  109. IF i% = 6 THEN f$ = "scanky"
  110. IF i% = 7 THEN f$ = "scanky2"
  111. IF i% = 8 THEN f$ = "scanky3"
  112. IF i% = 9 THEN f$ = "mouldy"
  113. IF i% = 10 THEN f$ = "mouldy2"
  114. IF i% = 11 THEN f$ = "mouldy3"
  115. IF i% = 12 THEN f$ = "energy"
  116. IF i% = 13 THEN f$ = "pod"
  117. IF i% = 14 THEN f$ = "tree"
  118. IF i% = 15 THEN f$ = "x"
  119. IF i% = 16 THEN f$ = "exit"
  120. IF i% = 17 THEN f$ = "bridge"
  121. IF i% = 18 THEN f$ = "mud"
  122. IF i% = 19 THEN f$ = "grass"
  123. IF i% = 20 THEN f$ = "icemud"
  124. IF i% = 21 THEN f$ = "rghtbrck"
  125. IF i% = 22 THEN f$ = "leftbrck"
  126. IF i% = 23 THEN f$ = "owladder"
  127. IF i% = 24 THEN f$ = "fallbrck"
  128. IF i% = 25 THEN f$ = "blank"
  129.  
  130. f$ = f$ + ".ef3"
  131.  
  132. OPEN f$ FOR INPUT AS #1
  133. INPUT #1, dat$
  134. FOR y% = 1 TO 20
  135. FOR x% = 1 TO 16
  136. p$ = MID$(dat$, ((y% * 16) - 16) + x%, 1)
  137. p% = ASC(p$) - 1
  138.                 IF p% = 252 THEN p% = 25
  139.                 IF p% = 253 THEN p% = 33
  140.  
  141. 7 PSET (x%, y%), p%
  142. 'IF p% >= 0 AND p% < 6 AND p% <> 3 THEN COLOR 3: PRINT p%: END
  143. NEXT x%
  144. NEXT y%
  145. CLOSE
  146. IF i% = 1 THEN GET (1, 1)-(16, 20), zbrickpik
  147. IF i% = 2 THEN GET (1, 1)-(16, 20), zicepik
  148. IF i% = 3 THEN GET (1, 1)-(16, 20), zladderpik
  149. IF i% = 4 THEN GET (1, 1)-(16, 20), ztelepik
  150. IF i% = 5 THEN GET (1, 1)-(16, 20), zspikepik
  151. IF i% = 6 THEN GET (1, 1)-(16, 20), zscankypik
  152. IF i% = 7 THEN GET (1, 1)-(16, 20), zscanky2pik
  153. IF i% = 8 THEN GET (1, 1)-(16, 20), zscanky3pik
  154. IF i% = 9 THEN GET (1, 1)-(16, 20), zmouldypik
  155. IF i% = 10 THEN GET (1, 1)-(16, 20), zmouldy2pik
  156. IF i% = 11 THEN GET (1, 1)-(16, 20), zmouldy3pik
  157. IF i% = 12 THEN GET (1, 1)-(16, 20), znrgpik
  158. IF i% = 13 THEN GET (1, 1)-(16, 20), zpodpik
  159. IF i% = 14 THEN GET (1, 1)-(16, 20), ztreepik
  160. IF i% = 15 THEN GET (1, 1)-(16, 20), zxpik
  161. IF i% = 16 THEN GET (1, 1)-(16, 20), zexitpik
  162. IF i% = 17 THEN GET (1, 1)-(16, 20), zbridgepik
  163. IF i% = 18 THEN GET (1, 1)-(16, 20), zmudpik
  164. IF i% = 19 THEN GET (1, 1)-(16, 20), zgrasspik
  165. IF i% = 20 THEN GET (1, 1)-(16, 20), zicemudpik
  166. IF i% = 21 THEN GET (1, 1)-(16, 20), zrpik
  167. IF i% = 22 THEN GET (1, 1)-(16, 20), zlpik
  168. IF i% = 23 THEN GET (1, 1)-(16, 20), zowladpik
  169. IF i% = 24 THEN GET (1, 1)-(16, 20), zfallbpik
  170. IF i% = 25 THEN GET (1, 1)-(16, 20), zblankpik
  171. NEXT i%
  172. VIEW
  173.  
  174. menu:
  175. SCREEN 0: SCREEN 13
  176. COLOR 10
  177. PRINT "THE EGGS FILES ";
  178. COLOR 12
  179. PRINT "3 ";
  180. COLOR 14
  181. PRINT "Menu"
  182. COLOR 10
  183. PRINT "~~~ ~~~~ ~~~~~ ~ ~~~~"
  184. PRINT : PRINT : PRINT
  185. COLOR 11
  186. PRINT "■ Press I for instructions"
  187. PRINT
  188. COLOR 15
  189. PRINT "■ Press O for options"
  190. PRINT
  191. COLOR 12
  192. PRINT "■ Press Q to quit"
  193. COLOR 14
  194. PRINT
  195. PRINT "Press any other key to play!..."
  196. PRINT : PRINT : PRINT
  197. COLOR 15
  198. PRINT "DISCLAIMER!"
  199. PRINT
  200. PRINT "DBSoft does not accept responsibility"
  201. PRINT "for any trouble this game may get you"
  202. PRINT "into. This game is FREEWARE and may be"
  203. PRINT "freely copied provided it's not altered."
  204. PRINT "The level files are encrypted so it's"
  205. PRINT "(almost) impossible to cheat."
  206. AAAA$ = UCASE$(INPUT$(1))
  207. CLS
  208. lg = 0
  209. IF AAAA$ = "I" THEN GOSUB inst: GOTO menu
  210. IF AAAA$ = "Q" THEN GOTO 300
  211. IF AAAA$ = "O" THEN GOSUB options: GOTO menu
  212. noscreens = 17
  213. timenow& = INT(TIMER)
  214. DO
  215. items = 0
  216. FOR xxx = 1 TO 20
  217. FOR yyy = 1 TO 9
  218. itemgot(xxx, yyy) = 0
  219. NEXT yyy
  220. NEXT xxx
  221. numteleports = 0
  222. IF livelost = 0 THEN lev = lev + 1
  223. livelost = 0
  224. filename$ = "LEVEL" + STR$(lev) + ".EF3"
  225. filen2$ = ""
  226. FOR k = 1 TO LEN(filename$)
  227. z$ = MID$(filename$, k, 1)
  228. IF z$ <> " " THEN filen2$ = filen2$ + z$
  229. NEXT k
  230. fg = 1
  231. 'Open level file and draw current level
  232. OPEN filen2$ FOR INPUT AS #1
  233. FOR y% = 1 TO 9
  234. LINE INPUT #1, da$
  235. FOR x% = 1 TO 20
  236. dat$(x%, y%) = MID$(da$, x%, 1)
  237. NEXT x%
  238. NEXT y%
  239. CLOSE
  240. FOR y% = 1 TO 9
  241. FOR x% = 1 TO 20
  242. A% = ASC(dat$(x%, y%))
  243. A% = A% - y%
  244. dat$(x%, y%) = CHR$(A%)
  245. NEXT x%
  246. NEXT y%
  247.  
  248. RESTORE
  249. FOR yy% = 1 TO 9
  250. FOR xx% = 1 TO 20
  251. READ xxx%, yyy%
  252. datnew$(xx%, yy%) = dat$(xxx%, yyy%)
  253. NEXT xx%
  254. NEXT yy%
  255. FOR yy% = 1 TO 9
  256. da$ = ""
  257. FOR xx% = 1 TO 20
  258. da$ = da$ + datnew$(xx%, yy%)
  259. NEXT xx%
  260. NEXT yy%
  261.  
  262.  
  263. FOR y% = 1 TO 9
  264. FOR x% = 1 TO 20
  265. cl$ = datnew$(x%, y%)
  266. xx% = (x% * 16) - 16
  267. yy% = (y% * 20) - 20
  268. IF cl$ = "#" OR cl$ = "b" THEN
  269.         PUT (xx%, yy%), zbrickpik
  270. ELSEIF cl$ = "~" OR cl$ = "m" THEN
  271.         PUT (xx%, yy%), zmudpik
  272. ELSEIF cl$ = "*" OR cl$ = "g" THEN
  273.         PUT (xx%, yy%), zgrasspik
  274. ELSEIF cl$ = ">" THEN
  275.         PUT (xx%, yy%), zrpik
  276. ELSEIF cl$ = "<" THEN
  277.         PUT (xx%, yy%), zlpik
  278. ELSEIF cl$ = "S" THEN
  279.         PUT (xx%, yy%), zscankypik
  280.         personx = x%
  281.         persony = y%
  282.         perstype$ = "S"
  283.         cl$ = "O"
  284. ELSEIF cl$ = "M" THEN
  285.         PUT (xx%, yy%), zmouldypik
  286.         personx = x%
  287.         persony = y%
  288.         perstype$ = "M"
  289.         cl$ = "O"
  290. ELSEIF cl$ = "T" THEN
  291.         PUT (xx%, yy%), ztelepik
  292.         numteleports = numteleports + 1
  293.         teleportx(numteleports) = x%
  294.         teleporty(numteleports) = y%
  295. ELSEIF cl$ = "^" THEN
  296.         PUT (xx%, yy%), zspikepik
  297. ELSEIF cl$ = "X" THEN
  298.         PUT (xx%, yy%), zxpik
  299. ELSEIF cl$ = "L" OR cl$ = "l" THEN
  300.         PUT (xx%, yy%), zladderpik
  301. ELSEIF cl$ = "I" THEN
  302.         PUT (xx%, yy%), zicepik
  303. ELSEIF cl$ = "i" THEN
  304.         PUT (xx%, yy%), zicemudpik
  305.         cl$ = "I"
  306. ELSEIF cl$ = "N" THEN
  307.         PUT (xx%, yy%), znrgpik
  308.         items = items + 1
  309. ELSEIF cl$ = "P" THEN
  310.         PUT (xx%, yy%), zpodpik
  311.         items = items + 1
  312. ELSEIF cl$ = "R" THEN
  313.         PUT (xx%, yy%), ztreepik
  314.         items = items + 1
  315. ELSEIF cl$ = "E" THEN
  316.         PUT (xx%, yy%), zexitpik
  317.         ex% = x%: ey% = y%
  318. ELSEIF cl$ = "=" THEN
  319.         PUT (xx%, yy%), zbridgepik
  320. ELSEIF cl$ = "!" THEN
  321.         PUT (xx%, yy%), zfallbpik
  322. ELSEIF cl$ = "U" THEN
  323.         PUT (xx%, yy%), zowladpik
  324. END IF
  325. IF cl$ = "O" THEN
  326.         p$(x%, y%) = " "
  327. ELSEIF cl$ = "m" OR cl$ = "g" THEN
  328.         p$(x%, y%) = "b"
  329. ELSEIF cl$ = "~" OR cl$ = "*" THEN
  330.         p$(x%, y%) = "#"
  331. ELSE
  332.         p$(x%, y%) = cl$
  333. END IF
  334.  
  335.  
  336. NEXT x%
  337. NEXT y%
  338. CLOSE
  339.  
  340. 'Yet more initialisation
  341. musicn = 1
  342. m = 0: d = 0: w = 0: d$ = "": pt = 1    'm = moved flag; d = dead; w = won
  343. igot = 0                                'd$ = direction; pt = person type;
  344. DO                                      'igot = no. items got
  345. 'Draw level, lives, score and number of items
  346. IF moosikon = 1 THEN PLAY ON ELSE PLAY STOP
  347. IF fg = 1 AND moosikon = 1 THEN fg = 0: GOSUB Musicplay
  348. COLOR 14
  349. LOCATE 24, 4: PRINT " Level";
  350. PRINT lev;
  351. IF lev < 10 THEN PRINT " ";
  352. COLOR 10
  353. LOCATE 24, 1
  354. FOR i = 1 TO 3
  355. IF i <= lives THEN PRINT "■";  ELSE PRINT " ";
  356. NEXT i
  357. COLOR 11
  358. LOCATE 24, 13
  359. PRINT score;
  360. COLOR 12
  361. LOCATE 24, 23: PRINT "Items:"; igot; "/"; items;
  362.  
  363. 'Get a key
  364. A$ = UCASE$(INKEY$)
  365.  
  366. 'Check key
  367. IF A$ = "Q" THEN quit = 1
  368. IF A$ = "R" THEN restart = 1: lives = lives - 1
  369. IF A$ = "S" THEN
  370.         moosikon = 0
  371.         musicon = 3 - musicon
  372.         IF musicon = 1 THEN PLAY "MF" ELSE PLAY "MB"
  373. END IF
  374. IF A$ = "M" THEN
  375.         musicon = 2: PLAY "MB"
  376.         IF moosikon = 1 THEN moosikon = 0 ELSE moosikon = 1
  377. END IF
  378. IF A$ = "W" AND cheat% = 1 THEN
  379.         LOCATE 24, 1
  380.         COLOR 15
  381.         PRINT "<<<<<<<<<<<<<<< ! WARP ! >>>>>>>>>>>>>>>";
  382.         w = 1
  383. END IF
  384. IF A$ = "1" AND cheat% = 1 THEN
  385.         score = score + 1000
  386. END IF
  387. IF A$ = "2" AND cheat% = 1 THEN
  388.         igot = igot + 1
  389. END IF
  390. IF A$ = "3" AND cheat% = 1 THEN
  391.         lives = lives + 1
  392. END IF
  393. IF A$ = "4" AND cheat% = 1 THEN
  394.         score = score - 1000
  395. END IF
  396. IF A$ = "5" AND cheat% = 1 THEN
  397.         igot = igot - 1
  398. END IF
  399. IF A$ = "6" AND cheat% = 1 THEN
  400.         lives = lives - 1
  401. END IF
  402. IF (restart = 1 OR quit = 1) AND musicon = 1 THEN
  403.         FOR SFX = 1240 TO 500 STEP -40
  404.         SOUND SFX, 1
  405.         NEXT SFX
  406. END IF
  407. IF quit = 1 OR restart = 1 THEN GOTO 600
  408. od$ = d$
  409. d$ = ""
  410.  
  411. 'Arrow keys
  412. SELECT CASE A$
  413.         CASE CHR$(0) + "H"
  414.         d$ = "u"
  415.         CASE CHR$(0) + "K"
  416.         d$ = "l"
  417.         CASE CHR$(0) + "M"
  418.         d$ = "r"
  419.         CASE CHR$(0) + "P"
  420.         d$ = "d"
  421. END SELECT
  422.  
  423. 'Movement initialisation
  424. opersonx = personx: opersony = persony: opt = pt
  425. down = 0: oigot = igot
  426. down$ = p$(personx, persony + 1)
  427. up$ = p$(personx, persony - 1)
  428. lft$ = p$(personx - 1, persony)
  429. rght$ = p$(personx + 1, persony)
  430.  
  431. 'Check movement - spikes? items? bonuses? (boni?!) teleports?
  432. IF down$ <> "#" AND down$ <> "I" AND down$ <> "=" AND down$ <> "<" AND down$ <> ">" AND pt <> 3 THEN persony = persony + 1: m = 1: down = 1: GOTO 100
  433. IF down$ = "I" AND od$ = "r" THEN d$ = "r"
  434. IF down$ = "I" AND od$ = "l" THEN d$ = "l"
  435. IF d$ = "u" AND up$ = "L" THEN persony = persony - 1: m = 1: pt = 3: GOTO 100
  436. IF d$ = "u" AND up$ = "U" THEN persony = persony - 2: m = 1: pt = 3: GOTO 100
  437. IF d$ = "l" AND (lft$ = " " OR lft$ = "b") THEN personx = personx - 1: m = 1: pt = 2: GOTO 100
  438. IF d$ = "l" AND lft$ = "T" THEN personx = personx - 1: GOTO teleport
  439. IF d$ = "l" AND lft$ = "^" THEN lives = lives - 1: d = 1: m = 1: GOTO 100
  440. IF d$ = "l" AND INSTR(items$, lft$) AND itemgot(personx - 1, persony) = 0 THEN itemgot(personx - 1, persony) = 1: personx = personx - 1: igot = igot + 1: m = 1: pt = 2: GOTO 100
  441. IF d$ = "l" AND INSTR(items$, lft$) AND itemgot(personx - 1, persony) = 1 THEN personx = personx - 1: m = 1: pt = 2: GOTO 100
  442. IF d$ = "l" AND lft$ = "L" THEN personx = personx - 1: m = 1: pt = 3: GOTO 100
  443. IF d$ = "l" AND lft$ = "l" THEN personx = personx - 1: m = 1: pt = 2: GOTO 100
  444. IF d$ = "l" AND lft$ = "X" AND itemgot(personx - 1, persony) = 0 THEN score = score + 100: itemgot(personx - 1, persony) = 1: bonusgot = 1: personx = personx - 1: m = 1: pt = 2: GOTO 100
  445. IF d$ = "l" AND lft$ = "X" AND itemgot(personx - 1, persony) = 1 THEN personx = personx - 1: m = 1: pt = 2: GOTO 100
  446. IF d$ = "l" AND lft$ = "E" AND igot = items THEN personx = personx - 1: m = 1: pt = 2: GOTO 100
  447. IF d$ = "l" AND lft$ = "<" THEN personx = personx - 2: m = 1: pt = 2: down = 1: GOTO 100
  448. IF d$ = "r" AND (rght$ = " " OR rght$ = "b") THEN personx = personx + 1: m = 1: pt = 1: GOTO 100
  449. IF d$ = "r" AND rght$ = "T" THEN personx = personx + 1: GOTO teleport
  450. IF d$ = "r" AND rght$ = "^" THEN lives = lives - 1: d = 1: m = 1: GOTO 100
  451. IF d$ = "r" AND INSTR(items$, rght$) AND itemgot(personx + 1, persony) = 0 THEN itemgot(personx + 1, persony) = 1: personx = personx + 1: igot = igot + 1: m = 1: pt = 1: GOTO 100
  452. IF d$ = "r" AND INSTR(items$, rght$) AND itemgot(personx + 1, persony) = 1 THEN personx = personx + 1: m = 1: pt = 1: GOTO 100
  453. IF d$ = "r" AND rght$ = "L" THEN personx = personx + 1: m = 1: pt = 3: GOTO 100
  454. IF d$ = "r" AND rght$ = "X" AND itemgot(personx + 1, persony) = 0 THEN score = score + 100: itemgot(personx + 1, persony) = 1: bonusgot = 1: personx = personx + 1: m = 1: pt = 1: GOTO 100
  455. IF d$ = "r" AND rght$ = "X" AND itemgot(personx + 1, persony) = 1 THEN personx = personx + 1: m = 1: pt = 1: GOTO 100
  456. IF d$ = "r" AND rght$ = "E" AND igot = items THEN personx = personx + 1: pt = 1: GOTO 100
  457. IF d$ = "r" AND rght$ = ">" THEN personx = personx + 2: m = 1: pt = 1: down = 1: GOTO 100
  458. IF d$ = "d" AND down$ = "L" THEN persony = persony + 1: m = 1: pt = 3: down = 1: GOTO 100
  459. IF d$ = "d" AND down$ <> "#" AND down$ <> "U" AND pt = 3 THEN persony = persony + 1: m = 1: down = 1: pt = 1: GOTO 100
  460. 100 IF p$(personx, persony) = "b" OR p$(personx, persony) = "l" THEN p$(personx, persony) = " ": disap = 1
  461. IF disap = 1 AND musicon = 1 THEN
  462.         FOR ZZQ = 1200 TO 600 STEP -200
  463.         SOUND ZZQ, 1
  464.         NEXT ZZQ
  465. END IF
  466. disap = 0
  467. IF oigot <> igot AND musicon = 1 THEN
  468.         FOR SFX = 500 TO 1240 STEP 100
  469.         SOUND SFX, 1
  470.         NEXT SFX
  471. END IF
  472. IF oigot <> igot THEN score = score + 250
  473. IF musicon = 1 AND m = 1 THEN
  474.         IF d$ = "u" THEN SOUND 1000, 1: SOUND 1250, 1
  475.         IF d$ = "l" OR d$ = "r" THEN SOUND 500, 1
  476.         IF d$ = "d" THEN SOUND 1000, 1: SOUND 750, 1
  477. END IF
  478. IF musicon = 1 AND bonusgot = 1 THEN
  479.         FOR SFX = 1 TO 10
  480.         SOUND INT(RND * 2000) + 4000, 1
  481.         NEXT SFX
  482. END IF
  483. bonusgot = 0
  484. IF down = 0 THEN GOTO 150
  485. here$ = p$(personx, persony)
  486. IF INSTR(items$, here$) AND itemgot(personx, persony) = 0 THEN igot = igot + 1: score = score + 250: itemgot(personx, persony) = 1
  487. IF here$ = "X" AND itemgot(personx, persony) = 0 THEN score = score + 100: itemgot(personx, persony) = 1: bonusgot = 1
  488. IF here$ = "T" THEN GOTO teleport
  489. IF here$ = "^" THEN d = 1: lives = lives - 1
  490. IF here$ = "L" THEN pt = 3
  491.  
  492. IF oigot <> igot AND musicon = 1 THEN
  493.         FOR SFX = 500 TO 1240 STEP 100
  494.         SOUND SFX, 1
  495.         NEXT SFX
  496. END IF
  497. IF musicon = 1 AND bonusgot = 1 THEN
  498.         FOR SFX = 1 TO 10
  499.         SOUND INT(RND * 2000) + 4000, 1
  500.         NEXT SFX
  501. END IF
  502. bonusgot = 0
  503. 150 'Check for completion of level
  504. IF igot = items AND personx = ex% AND persony = ey% THEN w = 1
  505.  
  506. 'Disappearing bridge?
  507. IF p$(opersonx, opersony + 1) = "=" AND m = 1 THEN
  508.         p$(opersonx, opersony + 1) = " "
  509.         PUT ((opersonx * 16) - 16, ((opersony + 1) * 20) - 20), zblankpik, PSET
  510. END IF
  511.  
  512. 'Falling brick?
  513. fallbrick = 0
  514. IF p$(opersonx, opersony - 1) = "!" AND m = 1 THEN
  515.         p$(opersonx, opersony) = "#"
  516.         fallbrick = 1
  517.         IF musicon = 1 THEN
  518.                 FOR SFX = 1 TO 10
  519.                 SOUND INT(RND * 100) + 100, 1
  520.                 NEXT SFX
  521.         END IF
  522. END IF
  523.  
  524. 'Redraw Mouldy/Scanky
  525. IF m = 1 THEN
  526.         omx = (opersonx * 16) - 16
  527.         mx = (personx * 16) - 16
  528.         omy = (opersony * 20) - 20
  529.         my = (persony * 20) - 20
  530.         m = 0
  531.         PUT (omx, omy), zblankpik, PSET
  532.         IF opt = 3 AND p$(opersonx, opersony) = "L" THEN PUT (omx, omy), zladderpik, PSET
  533.         IF pt = 1 AND perstype$ = "S" THEN PUT (mx, my), zscankypik, PSET
  534.         IF pt = 2 AND perstype$ = "S" THEN PUT (mx, my), zscanky2pik, PSET
  535.         IF pt = 3 AND perstype$ = "S" THEN PUT (mx, my), zscanky3pik, PSET
  536.         IF pt = 1 AND perstype$ = "M" THEN PUT (mx, my), zmouldypik, PSET
  537.         IF pt = 2 AND perstype$ = "M" THEN PUT (mx, my), zmouldy2pik, PSET
  538.         IF pt = 3 AND perstype$ = "M" THEN PUT (mx, my), zmouldy3pik, PSET
  539.         IF fallbrick = 1 THEN
  540.                 PUT ((opersonx * 16) - 16, ((opersony) * 20) - 20), zfallbpik, PSET
  541.         END IF
  542.         IF numteleports <> 0 THEN
  543.                 FOR zxc = 1 TO 2
  544.                         tx = (teleportx(zxc) * 16) - 16
  545.                         ty = (teleporty(zxc) * 20) - 20
  546.                         PUT (tx, ty), ztelepik, PSET
  547.                 NEXT zxc
  548.         END IF
  549. END IF
  550.  
  551. 'Time delay
  552. FOR JJ = 1 TO speedreduc: NEXT JJ
  553.  
  554. 'End of current level?
  555. 600 LOOP UNTIL d = 1 OR w = 1 OR quit = 1 OR restart = 1
  556. PLAY STOP
  557. IF d = 1 AND musicon = 1 THEN
  558.         FOR SFX = 1240 TO 500 STEP -40
  559.         SOUND SFX, 1
  560.         NEXT SFX
  561. END IF
  562.  
  563. IF restart = 1 THEN restart = 0: d = 1
  564. IF d = 1 THEN livelost = 1: GOTO 999
  565. IF lev <> noscreens OR (lev = noscreens AND d = 1) THEN d = 0: w = 0
  566. 999 CLS
  567. 'The end of the game?
  568. LOOP UNTIL (lev = noscreens AND w = 1) OR (lives = 0 AND d = 1) OR quit = 1
  569. timetook = INT(TIMER - timenow&)
  570.  
  571. CLS
  572. IF lives = 0 OR quit = 1 THEN GOTO 200
  573. COLOR 14
  574. PRINT "YOU WIN!!"
  575. PRINT
  576. COLOR 12
  577. PRINT "Your score is :"; score
  578. PRINT "Win bonus     : 10000"
  579. PRINT "Lives bonus   :";
  580. PRINT lives; "x 5000:";
  581. PRINT lives * 5000
  582. score = score + 10000 + (lives * 5000)
  583. PRINT "Time taken    :"; timetook; "seconds"
  584. IF timetook < 241 THEN TT$ = "MEGA SPEED!": tb = 20000: GOTO 888
  585. IF timetook < 301 THEN TT$ = "FAST!": tb = 15000: GOTO 888
  586. IF timetook < 421 THEN TT$ = "GOOD TIME": tb = 10000: GOTO 888
  587. TT$ = "TOO SLOW": tb = 0
  588. 888
  589. PRINT "Speed rating  : "; TT$
  590. PRINT "Time bonus    :"; tb
  591. score = score + tb
  592. PRINT
  593. PRINT "FINAL SCORE   :"; score
  594. PRINT
  595. COLOR 15
  596. wonit = 1
  597.  
  598. GOTO 400
  599. 200 IF quit = 1 THEN GOTO 300
  600. COLOR 12
  601. PRINT "YOU LOSE."
  602. PRINT
  603. PRINT "You died, you silly fool! Now your"
  604. PRINT "boss' brain will be in alien hands"
  605. PRINT "forever and worse still you are dead"
  606. PRINT "and up in heaven where you can have"
  607. PRINT "boring conversations with boring dead"
  608. PRINT "people."
  609. PRINT : PRINT
  610. COLOR 14
  611. PRINT "Your final score is"; score
  612. wonit = 0
  613. GOTO 400
  614. 300 COLOR 13
  615. PRINT "YOU QUIT."
  616. PRINT
  617. PRINT "What was the point in that?!? Did"
  618. PRINT "some nasty git come up and press Q"
  619. PRINT "or have you got to go somewhere like"
  620. PRINT "Stoke-on-Trent or did you just get a"
  621. PRINT "bit bored?"
  622. PRINT
  623. COLOR 10
  624. PRINT "Your final score is"; score
  625. wonit = 0
  626. 400 COLOR 15
  627. PRINT : PRINT "Press a key..."
  628. A$ = INPUT$(1)
  629. SCREEN 0: CLS : WIDTH 80, 25
  630. PRINT "Credits:"
  631. PRINT "~~~~~~~~"
  632. PRINT
  633. PRINT "Idea:            Alex Warren"
  634. PRINT "Design:          Alex Warren"
  635. PRINT "Programming:     Alex Warren"
  636. PRINT "Graphics:        Alex Warren"
  637. PRINT "Sound Effects:   Alex Warren"
  638. PRINT "Play testing:    Alex Warren"
  639. PRINT "Producer:        Alex Warren"
  640. PRINT
  641. PRINT "Electricity kindly supplied by a socket."
  642. PRINT "Lighting kindly supplied by a light bulb and the sun."
  643. PRINT "Heating kindly supplied by a radiator and the sun."
  644. PRINT
  645. PRINT "Special thanks must go to.....um.....er.....um.....hmm...."
  646. PRINT
  647. PRINT "(c) DBSoft 1996"
  648. A$ = INPUT$(1)
  649. CLS
  650. PRINT "Also available right NOW this minute from DBSoft:"
  651. PRINT
  652. PRINT "Platform games:"
  653. PRINT "The Eggs Files              - the original game."
  654. PRINT "The Eggs Files 2            - the sequel!"
  655. PRINT
  656. PRINT "Billy Johnson in Weirdland  - a rather naff platformer."
  657. PRINT "Katy Johnson in Strangeland - ditto."
  658. PRINT
  659. PRINT "These games are available for FREE if you ask Alex (nicely)."
  660. PRINT
  661. SYSTEM
  662.  
  663. teleport:
  664. IF teleportx(1) <> personx OR teleporty(1) <> persony THEN telenum = 1 ELSE telenum = 2
  665. personx = teleportx(telenum)
  666. persony = teleporty(telenum)
  667. m = 1
  668. IF musicon = 1 THEN
  669.         FOR SFX = 10000 TO 1000 STEP -1000
  670.         SOUND SFX, 1
  671.         NEXT SFX
  672.         FOR SFX = 1000 TO 10000 STEP 1000
  673.         SOUND SFX, 1
  674.         NEXT SFX
  675. END IF
  676. down = 0
  677. GOTO 100
  678.  
  679. options:
  680. COLOR 10
  681. PRINT "THE EGGS FILES 3 - ";
  682. COLOR 12
  683. PRINT "Options"
  684. PRINT
  685. COLOR 15
  686. OPEN "CONFIG.EF3" FOR INPUT AS #1
  687. INPUT #1, musicon
  688. INPUT #1, moosikon
  689. CLOSE
  690. PRINT "Sound is ";
  691. IF musicon = 1 THEN PRINT "on" ELSE PRINT "off"
  692. PRINT "Music is ";
  693. IF moosikon = 1 THEN PRINT "on" ELSE PRINT "off"
  694. PRINT
  695. PRINT "Press ";
  696. COLOR 11
  697. PRINT "S ";
  698. COLOR 15
  699. PRINT "to toggle sound on/off"
  700. PRINT "Press ";
  701. COLOR 11
  702. PRINT "M ";
  703. COLOR 15
  704. PRINT "to toggle music on/off"
  705. PRINT "Press ";
  706. COLOR 11
  707. PRINT "Q ";
  708. COLOR 15
  709. PRINT "to exit Options"
  710. ZZ$ = UCASE$(INPUT$(1))
  711. IF ZZ$ = "S" THEN
  712.         moosikon = 0
  713.         musicon = 3 - musicon
  714.         IF musicon = 1 THEN PLAY "MF" ELSE PLAY "MB"
  715. ELSEIF ZZ$ = "M" THEN
  716.         musicon = 2: PLAY "MB"
  717.         IF moosikon = 1 THEN moosikon = 0 ELSE moosikon = 1
  718. ELSEIF ZZ$ = "Q" THEN
  719.         A = 1
  720. END IF
  721. OPEN "CONFIG.EF3" FOR OUTPUT AS #1
  722. PRINT #1, musicon
  723. PRINT #1, moosikon
  724. CLOSE
  725. CLS
  726. IF A = 1 THEN GOTO 718452
  727. GOTO options
  728. 718452 RETURN
  729.  
  730. inst:
  731. CLS
  732. COLOR 10
  733. PRINT "THE EGGS FILES 3 - ";
  734. COLOR 12
  735. PRINT "Instructions"
  736. COLOR 15
  737. PRINT
  738. PRINT "You take the role of  Mouldy and Scanky"
  739. PRINT "yet  again.   Tiny  aliens  have  taken"
  740. PRINT "control  of your  boss' brain. You must"
  741. PRINT "annihilate  all  alien  pods  where the"
  742. PRINT "aliens  live and  all alien trees where"
  743. PRINT "they  grow  from.  Collect  energy  for"
  744. PRINT "your laser cannons to do this.  Use the"
  745. PRINT "arrow  keys   to   control  Mouldy  and"
  746. PRINT "Scanky.  You  can  climb ladders. Watch"
  747. PRINT "out for:"
  748. PRINT " ■ Deadly sharp spikes"
  749. PRINT " ■ Disappearing bricks/earth that"
  750. PRINT "   disappear when you step on them."
  751. PRINT " ■ Collapsing bridges  -  you can cross"
  752. PRINT "   them  once,   then   they  collapse!"
  753. PRINT " ■ Icey bricks which make you slip."
  754. PRINT " ■ One  way bricks  and ladders  -  you"
  755. PRINT "   can  only  go  through them one way!"
  756. PRINT " ■ Falling bricks that fall behind you."
  757. PRINT
  758. PRINT "Press a key..."
  759. A$ = INPUT$(1)
  760. CLS
  761. COLOR 10
  762. PRINT "THE EGGS FILES 3 - ";
  763. COLOR 12
  764. PRINT "Instructions"
  765. COLOR 15
  766. PRINT
  767. PRINT "You must  collect these  items to  kill"
  768. PRINT "the aliens  on each  level and  then go"
  769. PRINT "to the exit:"
  770. PRINT " ■ Energy for your laser cannons"
  771. PRINT " ■ Alien pods where the aliens live"
  772. PRINT " ■ Alien  'trees'  where they grow from"
  773. PRINT "   before being born"
  774. PRINT "You  can  also  collect  bonus 'X's for"
  775. PRINT "bonus  points.  You  can  use teleports"
  776. PRINT "to  teleport  from  place  to  place on"
  777. PRINT "a level."
  778. PRINT
  779. PRINT "In the game:"
  780. PRINT "Press  R  to restart the current level."
  781. PRINT "Press  Q  to quit.  Press  S  to toggle"
  782. PRINT "sound on or off, and M  to toggle music"
  783. PRINT "on or off."
  784. A$ = INPUT$(1)
  785. RETURN
  786.  
  787. Musicplay:
  788. IF musicl(lev) = 1 THEN
  789.         PLAY Music$(lev, 1)
  790. ELSE
  791.         PLAY Music$(lev, musicn)
  792.         musicn = musicn + 1
  793.         IF musicn > musicl(lev) THEN musicn = 1
  794. END IF
  795. RETURN
  796.  
  797. errorhandler:
  798. CLS
  799. pal 15, 63, 63, 63
  800. pal 12, 63, 0, 0
  801. COLOR 12
  802. PRINT "! ";
  803. COLOR 15: PRINT "Error ";
  804. COLOR 12: PRINT "!";
  805. COLOR 15: PRINT "        ( number"; ERR; ")"
  806. PRINT
  807. PRINT "An error has occurred in your version"
  808. PRINT "of THE EGGS FILES 3 v1.2. This may be"
  809. PRINT "due to your disk being taken out of"
  810. PRINT "the drive and if so insert the disk."
  811. PRINT "The cause of the problem could be more"
  812. PRINT "serious, however, and if it keeps"
  813. PRINT "returning with no apparent logical"
  814. PRINT "explanation please report this to Alex"
  815. PRINT "who will try to fix the problem in the"
  816. PRINT "next version. Press Q to exit the"
  817. PRINT "program or any other key to retry..."
  818. A$ = UCASE$(INPUT$(1))
  819. IF A$ = "Q" THEN END
  820. RESUME NEXT
  821.  
  822. ' Level unjumbler DATA lines
  823.  
  824. DATA 12, 4, 15, 7, 14, 8, 10, 9, 14, 1, 8, 7, 3, 7, 7, 2, 9, 7, 19, 7, 13, 4, 11, 1, 13, 9
  825. DATA 13, 8, 20, 4, 17, 7, 8, 6, 7, 4, 11, 6, 2, 2, 5, 8, 19, 4, 10, 6, 6, 2, 18, 2, 6, 1
  826. DATA 12, 6, 11, 7, 18, 8, 20, 6, 16, 6, 14, 9, 1, 5, 10, 7, 9, 8, 13, 5, 19, 9, 8, 4, 3, 9
  827. DATA 1, 1, 5, 3, 11, 8, 15, 3, 6, 3, 13, 2, 18, 4, 1, 4, 8, 8, 1, 7, 17, 3, 4, 7, 3, 2
  828. DATA 3, 1, 16, 1, 15, 5, 6, 7, 10, 3, 4, 5, 17, 6, 10, 4, 16, 2, 5, 6, 16, 8, 8, 3, 14, 7
  829. DATA 9, 5, 7, 8, 12, 1, 2, 5, 15, 4, 13, 6, 16, 7, 8, 1, 13, 1, 9, 6, 20, 8, 12, 9, 7, 5
  830. DATA 2, 7, 7, 1, 14, 3, 14, 5, 5, 4, 19, 5, 11, 4, 2, 4, 6, 9, 16, 3, 10, 2, 18, 9, 11, 3
  831. DATA 8, 5, 17, 8, 17, 2, 3, 6, 13, 7, 2, 6, 9, 4, 9, 3, 2, 3, 16, 5, 2, 1, 1, 2, 20, 2
  832. DATA 9, 9, 12, 7, 19, 1, 18, 5, 5, 9, 10, 5, 6, 4, 18, 7, 1, 3, 7, 6, 4, 4, 13, 3, 5, 2
  833. DATA 5, 5, 3, 3, 10, 1, 15, 2, 1, 9, 4, 2, 19, 2, 11, 2, 18, 6, 20, 3, 17, 4, 3, 5, 2, 8
  834. DATA 17, 9, 6, 5, 1, 8, 14, 6, 16, 9, 16, 4, 12, 2, 15, 6, 1, 6, 20, 1, 10, 8, 19, 6, 18, 3
  835. DATA 9, 2, 12, 5, 5, 1, 8, 2, 15, 9, 2, 9, 11, 9, 4, 1, 6, 6, 3, 4, 17, 5, 8, 9, 7, 9
  836. DATA 12, 3, 3, 8, 14, 4, 6, 8, 20, 7, 14, 2, 4, 3, 19, 8, 4, 6, 7, 3, 20, 9, 11, 5, 17, 1
  837. DATA 12, 8, 18, 1, 15, 1, 4, 9, 4, 8, 20, 5, 15, 8, 7, 7, 19, 3, 9, 1, 5, 7
  838.  
  839. SUB Intro
  840. PLAY "MB"
  841. COLOR 15
  842. f = 1
  843. sr = speedreduc / f
  844. f2 = 5
  845. FOR i = 1 TO 12
  846. LOCATE i, 17
  847. PRINT "D"
  848. FOR j = 1 TO sr: NEXT j
  849. IF i <> 12 THEN LOCATE i, 17: PRINT " "
  850. NEXT i
  851. FOR i = 40 TO 18 STEP -1
  852. LOCATE 12, i
  853. PRINT "B"
  854. FOR j = 1 TO sr: NEXT j
  855. IF i <> 18 THEN LOCATE 12, i: PRINT " "
  856. NEXT i
  857. FOR i = 23 TO 12 STEP -1
  858. LOCATE i, 19
  859. PRINT "Soft"
  860. FOR j = 1 TO sr: NEXT j
  861. IF i <> 12 THEN LOCATE i, 19: PRINT "    "
  862. NEXT i
  863. FOR j = 1 TO speedreduc: NEXT j
  864. COLOR 14
  865. LOCATE 12, 17: PRINT "D"
  866. PLAY "L8O3 G"
  867. FOR k = 1 TO f2
  868. FOR j = 1 TO speedreduc
  869. NEXT j
  870. NEXT k
  871. COLOR 15
  872. LOCATE 12, 17: PRINT "D"
  873. COLOR 14
  874. LOCATE 12, 18: PRINT "B"
  875. PLAY "L8O3 G"
  876. FOR k = 1 TO f2
  877. FOR j = 1 TO speedreduc
  878. NEXT j
  879. NEXT k
  880. COLOR 15
  881. LOCATE 12, 18: PRINT "B"
  882. COLOR 14
  883. LOCATE 12, 19: PRINT "Soft"
  884. PLAY "L8O3 C"
  885. FOR q = 1 TO 2
  886. FOR k = 1 TO f2
  887. FOR j = 1 TO speedreduc
  888. NEXT j
  889. NEXT k
  890. NEXT q
  891. COLOR 15
  892. LOCATE 12, 19: PRINT "Soft"
  893. PLAY "MF"
  894. FOR q = 1 TO 10
  895. FOR j = 1 TO f2
  896. FOR k = 1 TO sr
  897. NEXT k
  898. NEXT j
  899. NEXT q
  900. END SUB
  901.  
  902. DEFSNG A-Y
  903. SUB pal (n, r, g, b)
  904. OUT &H3C8, n
  905. OUT &H3C9, r
  906. OUT &H3C9, g
  907. OUT &H3C9, b
  908. END SUB
  909.  
  910.