'$DYNAMIC DEFINT A-Z 'basic stuff TYPE gamedata smallbeast AS INTEGER maxhatch AS INTEGER smallfall AS INTEGER maxfaller AS INTEGER eggstep AS INTEGER gametype AS INTEGER END TYPE TYPE gamewindow windx AS INTEGER windy AS INTEGER toggle AS INTEGER shotx AS INTEGER shoty AS INTEGER shotxm AS INTEGER shotym AS INTEGER shotxc AS INTEGER shotyc AS INTEGER shotegg AS INTEGER tracer AS INTEGER eggt AS INTEGER nextt AS INTEGER sang AS INTEGER shotc AS INTEGER nextf AS INTEGER score AS LONG scorem AS LONG flags AS INTEGER shooting AS INTEGER control AS INTEGER leftk AS INTEGER rightk AS INTEGER shootk AS INTEGER ms AS INTEGER victim AS INTEGER tosend AS INTEGER lowpoint AS INTEGER nextp AS INTEGER wins AS INTEGER status AS INTEGER topline AS INTEGER END TYPE TYPE racdata act AS INTEGER x AS INTEGER y AS INTEGER p AS INTEGER s AS INTEGER tail AS INTEGER pal AS INTEGER dir AS INTEGER owner AS INTEGER buddy AS INTEGER END TYPE DECLARE SUB drawlevel (space(), y, x(), y(), numfall, bottom, adjust, lowpoint, height, windx, windy, windh, winds, pal()) DECLARE FUNCTION levelfalls (s(), height, ec(), x(), y()) DECLARE SUB initplayer (gamenum, gw AS gamewindow) DECLARE SUB doplayer (gamenum, gw AS gamewindow) DECLARE SUB docontrol (gw AS gamewindow) DECLARE SUB dropeggs (gw AS gamewindow, gamenum, tofall) DECLARE SUB getsbsetting (sbp, sbd) DECLARE SUB audiomenu (dnum, p(), t&(), drives, songs$(), audio, amenu, volume()) DECLARE SUB cdplayer (dnum, p(), t&()) DECLARE FUNCTION checkegg (gamenum, x, y, egg, toggle) DECLARE FUNCTION whofalls (gamenum, toggle) DECLARE SUB draweggs (gamenum, gw AS gamewindow) DECLARE SUB hatcheggs (gamenum, gw AS gamewindow) DECLARE SUB drawbeast () DECLARE SUB makeegg (gamenum, gw AS gamewindow) DECLARE SUB moveegg (gamenum, gw AS gamewindow) DECLARE SUB drawstuff (gamenum, gw AS gamewindow) DECLARE SUB trace (gamenum, gw AS gamewindow) DECLARE SUB doraccoon (r AS racdata, gw AS gamewindow) DECLARE SUB dofall (i, fall, fallx, fally, falls, gw AS gamewindow, r1 AS racdata, r2 AS racdata) DECLARE SUB addline (gamenum, gw AS gamewindow) 'assembly DECLARE SUB setmodex () DECLARE SUB restoremode () DECLARE SUB setpal (p()) DECLARE SUB copypage (BYVAL p1, BYVAL p2) DECLARE SUB setvispage (BYVAL p) DECLARE SUB clearpage (BYVAL p) DECLARE SUB putpixel (BYVAL x, BYVAL y, BYVAL c, BYVAL p) DECLARE SUB rotatesprite (pic(), pal(), BYVAL po, BYVAL x, BYVAL y, BYVAL a, BYVAL p) DECLARE SUB rectangle (BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL c, BYVAL p) DECLARE FUNCTION getcos (BYVAL a) DECLARE FUNCTION getsin (BYVAL a) DECLARE SUB drawsprite (pic(), pal(), BYVAL po, BYVAL x, BYVAL y, BYVAL p) DECLARE SUB wardsprite (pic(), pal(), BYVAL po, BYVAL x, BYVAL y, BYVAL p) DECLARE SUB loadsprite (pic(), BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL p) DECLARE SUB stosprite (pic(), BYVAL x, BYVAL y, BYVAL p) DECLARE SUB fadeto (palbuff(), BYVAL r, BYVAL g, BYVAL b) DECLARE SUB fadetopal (pal(), palbuff()) DECLARE SUB setdiskpages (buf(), BYVAL h, BYVAL l) DECLARE SUB loadpage (fil$, BYVAL i, BYVAL p) DECLARE SUB storepage (fil$, BYVAL i, BYVAL p) DECLARE SUB setkeys () DECLARE SUB setfont (f()) DECLARE SUB printstr (s$, BYVAL x, BYVAL y, BYVAL p) DECLARE SUB textcolor (BYVAL f, BYVAL b) DECLARE SUB setitup (fil$, buff(), tmp(), BYVAL p, BYVAL d) DECLARE FUNCTION resetdsp () DECLARE SUB playsnd (BYVAL n, BYVAL f) DECLARE SUB closefile () DECLARE FUNCTION getdacvol () DECLARE SUB setdacvol (BYVAL vol) DECLARE SUB setwait (a(), BYVAL t) DECLARE SUB dowait () 'control stuff DECLARE FUNCTION Keyseg () DECLARE FUNCTION keyoff () DECLARE FUNCTION keyval (BYVAL a) DECLARE FUNCTION getkey () DECLARE FUNCTION readjoy (j(), BYVAL n) 'ipxstuff DECLARE FUNCTION ipxsetup () DECLARE FUNCTION opensock (BYVAL sock) DECLARE FUNCTION openbsock (BYVAL bsock) DECLARE SUB sendpack (adr$, packet(), BYVAL l) DECLARE SUB sendbpack (packet(), BYVAL l) DECLARE SUB getpack (packet(), BYVAL l) DECLARE SUB getbpack (packet(), BYVAL l) DECLARE FUNCTION waitpack () DECLARE FUNCTION waitbpack () DECLARE SUB cancelget () DECLARE SUB cancelbget () DECLARE SUB getaddress (adr$) DECLARE SUB getbaddress (adr$) DECLARE SUB closesock () ' music stuff DECLARE SUB setupmusic (b()) DECLARE SUB closemusic () DECLARE SUB loadsong (f$) DECLARE SUB stopsong () DECLARE SUB resumesong () DECLARE SUB resetfm () DECLARE FUNCTION getfmvol () DECLARE SUB setfmvol (BYVAL vol) DECLARE SUB fademusic (BYVAL vol) 'cd stuff DECLARE FUNCTION drivelist (l()) DECLARE FUNCTION getupc (BYVAL dnum, upc$) DECLARE FUNCTION audioinfo (BYVAL dnum, track&()) DECLARE SUB playaudio (BYVAL dnum, BYVAL ad&, BYVAL ln&) DECLARE SUB stopcd (BYVAL dnum) DECLARE FUNCTION playinfo (BYVAL dnum, cd()) DECLARE FUNCTION getCDvol () DECLARE SUB setcdvol (BYVAL v) 'assorted other DECLARE SUB screenshot (f$, BYVAL p, pal(), buf()) TYPE Regtype ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER bp AS INTEGER si AS INTEGER di AS INTEGER flags AS INTEGER ds AS INTEGER es AS INTEGER END TYPE DIM SHARED regs AS Regtype CONST critter = 0 CONST stuff = 24 CONST raccoon = 38 CONST tails = 82 CONST smallr = 88 CONST smallt = 110 CONST smallw = 1 CONST compete = 1 CONST level = 2 CONST numeggt = 6 CONST maxplay = 5 CONST numsongs = 1 DIM SHARED gd AS gamedata DIM gw(maxplay) AS gamewindow DIM rac(11) AS racdata DIM SHARED lvllines(9999), lvlstart&(9999) DIM SHARED tmr(1), font(1024), newpal(800), buffer(16000), musak(3000), voic(8000) DIM SHARED tracer(20), egg(200), break(200), aim(200), back(200), stand(300), pic(800) DIM SHARED segg(100), sbreak(100), saim(100), sstand(100) DIM SHARED tail(200), pal(300) DIM SHARED beast(30), beastx(30), beasty(30), beastp(30), beasta(30) DIM SHARED faller(30), fallx(30), fally(30), falls(30), fallw(30) DIM SHARED dpage, keyenbl, players DIM SHARED jbuff(4) DIM SHARED xlist(900), ylist(900) DIM SHARED canuse(8), eggcount(maxplay + 1, numeggt + 1) DIM leggcount(numeggt + 1) DIM SHARED space(maxplay, 11, 13), stage(8, 100) DIM nextx(6), nexty(6) DIM songs$(numsongs * 2) DIM volume(3) DIM l(100), t&(100), cd(26) RESTORE eggmove FOR i = 0 TO 6 READ nextx(i), nexty(i) NEXT i RESTORE songs FOR i = 0 TO numsongs - 1 READ songs$(i) songs$(i) = songs$(i) + CHR$(0) NEXT i FOR i = numsongs TO numsongs * 2 - 1 READ songs$(i) NEXT i RANDOMIZE TIMER regs.ax = &H3509: CALL interruptx(&H21, regs, regs) off9 = regs.bx: seg9 = regs.es regs.ax = &H2509: regs.ds = Keyseg: regs.dx = keyoff CALL interruptx(&H21, regs, regs) ipx = ipxsetup getsbsetting sbp, sbd setitup "bobvoice.dat" + CHR$(0), voic(), buffer(), sbp, sbd fx = resetdsp IF fx THEN audio = 1 ELSE audio = 0 olddac = getdacvol oldfm = getfmvol oldcd = getCDvol volume(1) = 13 volume(2) = 9 volume(3) = 13 setdacvol volume(3) musak = 1 drives = drivelist(cd()) IF drives > 0 THEN setcdvol volume(2) setupmusic musak() resetfm setfmvol 0 setmodex DEF SEG = VARSEG(font(0)) BLOAD "eggtext.fnt", VARPTR(font(0)) setfont font() textcolor 15, 0 DEF SEG = VARSEG(newpal(0)) BLOAD "palette.sto", VARPTR(newpal(0)) setpal newpal() setdiskpages buffer(), 200, 0 loadpage "eggstuff.mxs" + CHR$(0), 0, 3 DEF SEG = VARSEG(pal(0)) BLOAD "eggs.pal", VARPTR(pal(0)) loadsprite egg(), 0, stuff, 16, 16, 3 loadsprite break(), 0, stuff + 6, 16, 16, 3 loadsprite aim(), 0, stuff + 1, 9, 39, 3 loadsprite tracer(), 0, stuff + 2, 4, 4, 3 loadsprite stand(), 0, stuff + 5, 20, 20, 3 loadsprite segg(), 0, stuff + 7, 8, 8, 3 loadsprite saim(), 0, stuff + 8, 5, 19, 3 loadsprite sstand(), 0, stuff + 9, 9, 10, 3 dpage = 0: vpage = 1 players = 0 gw(0).leftk = 75 gw(0).rightk = 77 gw(0).shootk = 57 gw(1).leftk = 16 gw(1).rightk = 17 gw(1).shootk = 31 p1col = 0 height = 24 editlevel: clearpage 2 setkeys exitgame = 0 x = 6: y = 1: bottom = 0: y2 = y: bottom2 = bottom badeggs = 0 WHILE exitgame = 0 setwait tmr(), 60 copypage 2, dpage setkeys IF keyval(1) > 1 THEN exitgame = 3 IF keyval(75) > 1 THEN x = x - 1 IF keyval(77) > 1 THEN x = x + 1 IF keyval(72) > 1 THEN y = y + 1: y2 = y2 + 1 IF keyval(80) > 1 THEN y = y - 1: y2 = y2 - 1 IF keyval(73) > 1 THEN y = y + 10: y2 = y2 + 10 IF keyval(81) > 1 THEN y = y - 10: y2 = y2 - 10 IF keyval(25) > 1 THEN GOTO playlevel windx = 88: windy = 10 drawlevel stage(), y, xlist(), ylist(), badeggs, bottom, adjust, lowpoint, height, windx, windy, 180, 0, pal() drawlevel stage(), y2, xlist(), ylist(), badeggs, bottom2, adjust2, lowpoint2, height, 240, 10, 180, 1, pal() toggle = (bottom + y + adjust) AND 1 IF x < toggle THEN x = toggle IF x > 8 THEN x = 8 IF y >= 0 AND lowpoint - y * 14 + windy + 6 > -5 THEN drawsprite tracer(), pal(), 0, x * 16 + windx - toggle * 8 + 7, lowpoint - y * 14 + windy + 6, dpage j = y + bottom + adjust press = 0 IF keyval(57) > 1 THEN press = 1: stage(x, j) = stage(x, j) + 1 + (stage(x, j) >= 5) * 6 IF keyval(2) > 1 THEN press = 1: stage(x, j) = 1 IF keyval(3) > 1 THEN press = 1: stage(x, j) = 2 IF keyval(4) > 1 THEN press = 1: stage(x, j) = 3 IF keyval(5) > 1 THEN press = 1: stage(x, j) = 4 IF keyval(6) > 1 THEN press = 1: stage(x, j) = 5 IF keyval(7) > 1 THEN press = 1: stage(x, j) = 6 IF press = 1 THEN badeggs = levelfalls(stage(), height, leggcount(), xlist(), ylist()) END IF SWAP dpage, vpage setvispage vpage dowait WEND GOTO finis playlevel: 'initialize options gd.maxfaller = 30 gd.maxhatch = 30 gd.eggstep = 10 gd.gametype = level 'initialize raccoons FOR i = 0 TO 1 rac(i).act = 0: rac(i).dir = 0: rac(i).owner = -1 NEXT i 'set specific player data IF readjoy(jbuff(), 0) THEN gw(0).control = 1 ELSE gw(0).control = 0 gw(0).windx = 88: gw(0).windy = 10 loadpage "eggstuff.mxs" + CHR$(0), 1, 2 gd.gametype = level rac(0).act = 1 rac(0).dir = 1 rac(0).x = 30 rac(0).y = 155 rac(0).owner = 0 rac(0).pal = 16 * p1col rac(1).act = 1 rac(1).dir = -1 rac(1).x = 90 rac(1).y = 155 rac(1).owner = 0 rac(1).buddy = 0 rac(1).pal = 16 * p1col rac(0).buddy = 1 'initialize players initplayer 0, gw(0) 'initialize new game data FOR i = 0 TO gd.maxfaller: faller(i) = 0: NEXT i gd.smallfall = 0 FOR i = 0 TO gd.maxhatch: beast(i) = 0: NEXT i gd.smallbeast = 0 IF audio = 1 THEN loadsong songs$(0) fademusic volume(1) setkeys exitgame = 0 exitwait = 0 switch = 0 WHILE exitgame = 0 OR exitwait > 0 setwait tmr(), 60 copypage 2, dpage setkeys IF keyval(1) > 1 THEN exitgame = 3 IF keyval(65) > 1 THEN IF amenu = 0 THEN amenu = 1 ELSE amenu = 0 IF amenu = 0 THEN keyenbl = 1 ELSE keyenbl = 0 IF keyval(66) > 1 THEN screenshot "egg" + RIGHT$(STR$(shotn), LEN(STR$(shotn)) - 1) + ".bmp" + CHR$(0), vpage, newpal(), buffer() shotn = shotn + 1 END IF IF keyval(2) > 1 THEN IF gw(0).tracer < 3 THEN gw(0).tracer = gw(0).tracer + 1 ELSE gw(gamenum).tracer = 0 doplayer 0, gw(0) IF exitgame = 0 THEN j = 0 k = 0 FOR i = 0 TO players IF gw(i).status = 0 THEN j = j + 1 IF gw(i).status = 2 THEN k = i: i = players: j = 0 NEXT i IF j = 1 AND (gd.gametype AND compete) THEN FOR i = 0 TO players IF gw(i).status = 0 THEN k = i: gw(i).status = 2 NEXT i END IF IF j = 0 THEN exitgame = 1: exitwait = 60 IF k > 0 THEN FOR i = 0 TO players IF gw(i).status = 0 THEN gw(i).status = 1 NEXT i exitgame = 1: exitwait = 60 END IF END IF IF exitwait > 0 THEN exitwait = exitwait - 1 ELSE exitwait = 0 FOR gamenum = 0 TO players IF gd.gametype AND compete THEN gw(gw(gamenum).victim).shotc = gw(gw(gamenum).victim).shotc + gw(gamenum).tosend END IF gw(gamenum).tosend = 0 NEXT gamenum FOR i = 0 TO 1 j = rac(i).owner IF j > -1 THEN doraccoon rac(i), gw(j) NEXT i FOR gamenum = 0 TO players i = gw(gamenum).nextp IF i > 0 AND i < 6 THEN gw(gamenum).nextp = i + 1 IF (gw(gamenum).flags AND smallw) = 0 THEN drawsprite egg(), pal(), 16 * gw(gamenum).nextt - 16, nextx(i) + gw(gamenum).windx, nexty(i) + gw(gamenum).windy, dpage ELSE drawsprite segg(), pal(), 16 * gw(gamenum).nextt - 16, INT(nextx(i) / 2) + 1 + gw(gamenum).windx, INT(nexty(i) / 2) + gw(gamenum).windy, dpage END IF NEXT gamenum FOR i = 0 TO gd.maxfaller tmp = fallw(i) dofall i, faller(i), fallx(i), fally(i), falls(i), gw(tmp), rac(tmp * 2), rac(tmp * 2 + 1) NEXT i 'show score IF players = 0 THEN textcolor 14, 0 printstr "Score", 252, 24, dpage temp$ = STR$(gw(0).score) IF LEN(temp$) < 8 THEN temp$ = STRING$(8 - LEN(temp$), " ") + temp$ ELSE temp$ = RIGHT$(temp$, 8) printstr temp$, 248, 36, dpage END IF 'show eggstat IF players = 0 THEN textcolor 15, 0 FOR i = 1 TO numeggt IF eggcount(gamenum, i) = 0 THEN loadsprite pic(), switch * 160, critter + i + 17, 10, 10, 3 drawsprite pic(), pal(), i * 16 + 80, 259, 89 + 11 * i, dpage ELSE drawsprite segg(), pal(), i * 16 - 16, 260, 90 + 11 * i, dpage END IF printstr STR$(eggcount(gamenum, i)), 285, 90 + 11 * i, dpage NEXT i END IF 'draw hatched creatures drawbeast IF amenu THEN audiomenu cd(0), l(), t&(), drives, songs$(), audio, amenu, volume() 'IF audio = 2 THEN cdplayer cd(0), l(), t&() switch = switch XOR 1 SWAP dpage, vpage setvispage vpage dowait WEND 'after games over fademusic 0 FOR i = 0 TO players IF gw(i).status = 2 THEN gw(i).wins = gw(i).wins + 1 NEXT i GOTO editlevel finis: regs.ax = &H2509: regs.ds = seg9: regs.dx = off9 CALL interruptx(&H21, regs, regs) fademusic 0 fadeto buffer(), 0, 0, 0 closemusic setfmvol oldfm setdacvol olddac IF drives > 0 THEN setcdvol cdvol closefile restoremode SYSTEM 'next egg positions eggmove: DATA 15,163 DATA 25,161,32,159,38,157,41,155,52,154,64,154 songs: DATA "chicks.bam" DATA "Egg Ballet" REM $STATIC SUB addline (gamenum, gw AS gamewindow) gw.toggle = gw.toggle XOR 1 gw.shotc = gw.shotc - gw.nextf eggcount(gamenum, numeggt + 1) = eggcount(gamenum, numeggt + 1) + 1 IF (gd.gametype AND compete) THEN gw.nextf = 8 + INT(eggcount(gamenum, numeggt + 1) / 3) ELSE gw.nextf = gw.nextf + 1: IF gw.nextf > 10 THEN gw.nextf = 8 END IF FOR i = 10 TO 1 STEP -1 FOR j = 0 TO 8 space(gamenum, j, i) = space(gamenum, j, i - 1) NEXT j NEXT i space(gamenum, 0, 0) = 0 IF (gd.gametype AND level) = level THEN FOR i = gw.toggle TO 8 space(gamenum, i, 0) = stage(i, gw.topline) NEXT i gw.topline = gw.topline + 1 tofall = whofalls(gamenum, gw.toggle) IF tofall < 0 THEN gw.status = 2 IF tofall > 0 THEN dropeggs gw, gamenum, tofall END IF ELSE numuse = 0 FOR i = 1 TO numeggt IF eggcount(gamenum, i) > 0 THEN numuse = numuse + 1: canuse(numuse) = i NEXT i FOR i = gw.toggle TO 8 j = canuse(INT(RND(1) * numuse) + 1) space(gamenum, i, 0) = j eggcount(gamenum, j) = eggcount(gamenum, j) + 1 NEXT i END IF draweggs gamenum, gw END SUB SUB audiomenu (dnum, p(), t&(), drives, songs$(), audio, amenu, volume()) DIM ao(3), stat(8) ao(0) = 1 ao(1) = 2 ao(2) = 4 rectangle 19, 9, 171, 1, 15, dpage rectangle 19, 9, 1, 12 + audio * 24, 15, dpage rectangle 190, 10, 1, 12 + audio * 24, 8, dpage rectangle 20, 21 + audio * 24, 171, 1, 8, dpage rectangle 20, 10, 170, 11 + audio * 24, 7, dpage newa = audio IF keyval(72) > 1 THEN amenu = amenu - 1: IF amenu < 1 THEN amenu = ao(audio) IF keyval(80) > 1 THEN amenu = amenu + 1: IF amenu > ao(audio) THEN amenu = 1 IF keyval(75) > 1 AND amenu = 1 THEN newa = audio - 1 IF keyval(77) > 1 AND amenu = 1 THEN newa = audio + 1 IF keyval(15) > 1 THEN newa = audio + 1 IF newa < 0 THEN newa = 0 IF newa > 2 THEN newa = 2 IF newa <> audio THEN IF audio = 2 THEN stopcd dnum IF audio = 1 THEN fademusic 0 IF newa = 2 THEN IF drives = 0 THEN newa = 0 ELSE p(0) = 0: p(100) = 0: p(99) = 0: p(98) = 0: p(97) = 0 IF newa = 1 THEN loadsong songs$(0) audio = newa END IF IF audio > 0 THEN IF amenu = 2 THEN IF keyval(75) > 1 AND volume(audio) > 0 THEN volume(audio) = volume(audio) - 1 IF keyval(77) > 1 AND volume(audio) < 15 THEN volume(audio) = volume(audio) + 1 textcolor 15, 1 ELSE textcolor 15, 0 END IF printstr "Vol", 40, 20, dpage rectangle 66, 20, volume(audio) * 2, 8, 14, dpage END IF IF amenu = 1 THEN textcolor 15, 1 ELSE textcolor 15, 0 SELECT CASE audio CASE 0 printstr "No Music", 40, 12, dpage CASE 1 printstr "Fm Music", 40, 12, dpage fademusic volume(1) textcolor 14, 0 printstr songs$(numsongs), 40, 36, dpage CASE 2 printstr "CD Music", 40, 12, dpage setcdvol volume(2) tracks = audioinfo(dnum, t&()) IF tracks > 0 THEN i = p(98): x = 40 WHILE i < tracks AND x < 164 IF i = p(97) AND amenu = 3 THEN textcolor 15, 1 ELSE textcolor 15, 0 printstr STR$(i), x, 28, dpage x = x + LEN(STR$(i)) * 8: i = i + 1 WEND IF amenu = 3 THEN IF keyval(75) > 1 AND p(97) > 0 THEN p(97) = p(97) - 1 IF keyval(77) > 1 AND p(97) < tracks THEN p(97) = p(97) + 1 IF keyval(57) > 1 OR keyval(28) > 1 THEN p(0) = p(0) + 1: p(p(0)) = p(97): IF p(0) = 1 THEN p(96) = 1 END IF IF p(0) = 0 THEN textcolor 14, 0 printstr "Playlist Empty", 40, 36, dpage ELSE textcolor 14, 0 IF p(0) > 0 THEN i = p(100): x = 40 WHILE i < p(0) AND x < 164 IF i + 1 = p(96) THEN textcolor 14, 1 ELSE textcolor 14, 0 printstr STR$(p(i + 1)), x, 36, dpage x = x + LEN(STR$(i)) * 8: i = i + 1 WEND END IF END IF stat = playinfo(dnum, stat()) IF (stat AND 512) = 512 THEN textcolor 14, 0 printstr "Track " + STR$(stat(0)), 40, 44, dpage h = INT(stat(1) / 60) t$ = STR$(h) + ":" + STR$(stat(2) - h * 60) + ":" + STR$(p(3)) printstr t$, 50, 52, dpage ELSE textcolor 14, 0 printstr "Not playing", 40, 44, dpage END IF ELSE IF amenu > 2 THEN amenu = 1 textcolor 14, 0 printstr "No CD in Drive", 40, 44, dpage p(0) = 0 END IF END SELECT END SUB SUB cdplayer (dnum, p(), t&()) tracks = audioinfo(dnum, t&()) rectangle 19, 9, 121, 1, 15, dpage rectangle 19, 9, 1, 41, 15, dpage rectangle 140, 10, 1, 41, 8, dpage rectangle 20, 50, 121, 1, 8, dpage rectangle 20, 10, 120, 40, 7, dpage IF tracks > 0 THEN IF keyval(28) > 1 THEN playaudio dnum, t&(2), t&(3) stat = playinfo(dnum, p()) IF stat AND 512 = 512 THEN textcolor 15, 240 printstr "Track " + STR$(p(0)), 28, 15, dpage h = INT(p(1) / 60) t$ = STR$(h) + ":" + STR$(p(2) - h * 60) + ":" + STR$(p(3)) printstr t$, 28, 23, dpage ELSE printstr "Not playing", 28, 15, dpage END IF ELSE textcolor 15, 240 printstr "No CD in Drive", 28, 15, dpage END IF END SUB FUNCTION checkegg (gamenum, x, y, egg, toggle) DIM tx(4), ty(4) tx(0) = x: ty(0) = y i = 0: j = 1 DO ex = tx(i): ey = ty(i) t = (ey + toggle) AND 1 IF ey > 0 THEN IF ex > 0 THEN IF space(gamenum, ex - t, ey - 1) = egg THEN tx(j) = ex - t: ty(j) = ey - 1: j = j + 1 IF ex < 9 THEN IF space(gamenum, ex + 1 - t, ey - 1) = egg THEN tx(j) = ex + 1 - t: ty(j) = ey - 1: j = j + 1 END IF IF ex > 0 THEN IF space(gamenum, ex - 1, ey) = egg THEN tx(j) = ex - 1: ty(j) = ey: j = j + 1 IF ex < 9 THEN IF space(gamenum, ex + 1, ey) = egg THEN tx(j) = ex + 1: ty(j) = ey: j = j + 1 IF ey < 10 THEN IF ex > 0 THEN IF space(gamenum, ex - t, ey + 1) = egg THEN tx(j) = ex - t: ty(j) = ey + 1: j = j + 1 IF ex < 9 THEN IF space(gamenum, ex + 1 - t, ey + 1) = egg THEN tx(j) = ex + 1 - t: ty(j) = ey + 1: j = j + 1 END IF i = i + 1 LOOP UNTIL (i >= j) OR (j >= 3) checkegg = j END FUNCTION SUB docontrol (gw AS gamewindow) IF gw.status = 0 THEN SELECT CASE gw.control CASE 0 IF keyenbl = 1 THEN left = keyval(gw.leftk) right = keyval(gw.rightk) IF keyval(gw.shootk) > 1 THEN shoot = 1 ELSE shoot = 0 END IF CASE 1 TO 2 IF readjoy(jbuff(), gw.control - 1) OR 1 THEN left = 0: right = 0 textcolor 14, 1 printstr STR$(jbuff(0)) + STR$(jbuff(1)), 10, 10, dpage SELECT CASE jbuff(0) CASE IS < 60 left = 1 CASE 60 TO 380 left = 1: IF gw.ms > 2 THEN gw.ms = 2 CASE 381 TO 510 left = 1: IF gw.ms > 1 THEN gw.ms = 1 CASE 790 TO 890 right = 1: IF gw.ms > 1 THEN gw.ms = 1 CASE 891 TO 1000 right = 1: IF gw.ms > 2 THEN gw.ms = 2 CASE IS > 1000 right = 1 END SELECT IF jbuff(2) = 0 OR jbuff(3) = 0 THEN shoot = 1 ELSE shoot = 0 ELSE gw.control = 0 END IF CASE ELSE left = 0 right = 0 shoot = 0 END SELECT IF left > 0 THEN gw.sang = gw.sang + gw.ms IF gw.sang > 125 THEN gw.sang = 125 END IF IF right > 0 THEN gw.sang = gw.sang - gw.ms IF gw.sang < 3 THEN gw.sang = 3 END IF IF right = 0 AND left = 0 THEN gw.ms = 1 ELSE IF gw.ms < 3 THEN gw.ms = gw.ms + 1 gw.shooting = 0 IF shoot > 0 THEN IF gw.shotegg = 0 THEN gw.shotegg = 1 gw.shooting = 1 gw.scorem = 1 gw.shotxm = getcos(gw.sang) gw.shotym = getsin(gw.sang) gw.shotxc = 256 gw.shotyc = 256 gw.shotx = 64 gw.shoty = 154 IF gd.gametype = 0 THEN gw.shotc = gw.shotc + 1 END IF END IF END IF END SUB SUB dofall (i, fall, fallx, fally, falls, gw AS gamewindow, r1 AS racdata, r2 AS racdata) IF fall > 0 THEN fally = fally + falls falls = falls + 2: IF falls > 10 THEN falls = 10 tmp = -1 IF r1.act > 0 AND r1.act <> 5 AND ABS(fallx - r1.x) < 11 AND ABS(fally - r1.y) < 10 THEN r1.act = 5: r1.p = 16: r1.s = 1 IF r2.act <> 5 AND r2.act > 0 THEN r2.act = 4: r2.p = 11: r2.s = 0 IF (gw.flags AND smallw) = 0 THEN drawsprite break(), pal(), fall * 16 - 16, fallx + gw.windx, gw.windy + r1.y - 10, dpage ELSE drawsprite sbreak(), pal(), fall * 16 - 16, fallx / 2 + gw.windx, gw.windy + r1.y / 2 - 5, dpage END IF fall = 0 ELSEIF r2.act > 0 AND r2.act <> 5 AND ABS(fallx - r2.x) < 11 AND ABS(fally - r2.y) < 10 THEN r2.act = 5: r2.p = 16: r2.s = 1 IF r1.act <> 5 AND r1.act > 0 THEN r1.act = 4: r1.p = 11: r1.s = 0 IF (gw.flags AND smallw) = 0 THEN drawsprite break(), pal(), fall * 16 - 16, fallx + gw.windx, gw.windy + r2.y - 10, dpage ELSE drawsprite sbreak(), pal(), fall * 16 - 16, fallx / 2 + gw.windx, gw.windy + r2.y / 2 - 5, dpage END IF fall = 0 ELSEIF fally > 172 THEN fall = 0 END IF IF fall > 0 THEN IF (gw.flags AND smallw) = 0 THEN drawsprite egg(), pal(), fall * 16 - 16, fallx + gw.windx, fally + gw.windy, dpage ELSE drawsprite segg(), pal(), fall * 16 - 16, INT(fallx / 2) + gw.windx, INT(fally / 2) + gw.windy, dpage END IF ELSE IF gd.smallfall > i THEN gd.smallfall = i END IF END IF END SUB SUB doplayer (gamenum, gw AS gamewindow) '---Get Input docontrol gw '---Draw Tracer IF gw.tracer > 0 THEN trace gamenum, gw '---check for loss FOR i = 0 TO 8 IF space(gamenum, i, 10) <> 0 THEN gw.status = 1 NEXT i '---Manage time to fall according to egg level IF gd.gametype AND compete THEN gw.nextf = 8 + INT(eggcount(gamenum, numeggt + 1) / 3) END IF '---Load new Egg IF gw.shotegg = 3 AND gw.nextp = 6 THEN gw.eggt = gw.nextt gw.shotegg = 0 numuse = 0 FOR i = 1 TO numeggt IF eggcount(gamenum, i) > 0 THEN numuse = numuse + 1: canuse(numuse) = i NEXT i gw.nextp = 0 gw.nextt = canuse(INT(RND(1) * numuse) + 1) END IF '---Move egg level if needed when egg hits IF gw.shotegg = 2 THEN gw.shotegg = 3 IF gw.shotc >= gw.nextf THEN addline gamenum, gw END IF END IF '---draw egg meter IF players = 1 THEN j = gw.shotc IF j > 14 THEN j = 14 FOR i = 1 TO j k = j - i drawsprite segg(), pal(), (k - (INT(k / numeggt) * numeggt)) * 16, 310 - gamenum * 308, 152 - i * 8, dpage NEXT i rectangle 310 - gamenum * 308, 155 - gw.nextf * 8, 8, 1, 12, dpage END IF textcolor 15, 4 '---move the shot moveegg gamenum, gw '---draw it all drawstuff gamenum, gw END SUB SUB doraccoon (r AS racdata, gw AS gamewindow) IF gw.status = 1 AND r.act <> 9 THEN r.act = 9: r.p = 38: r.s = 0 IF gw.status = 2 AND r.act <> 8 THEN r.act = 8: r.p = 32: r.s = 0 SELECT CASE r.act CASE 0 r.act = 1 CASE 1 r.p = 0 IF gw.shooting = 1 AND RND(1) < .9 THEN r.act = 2: r.p = 2 IF gw.shotegg > 0 AND r.dir = 1 AND gw.nextp = 0 AND r.act = 1 THEN r.act = 7: r.p = 26: r.s = 0: gw.nextp = 1 IF INT(RND(1) * 50) = 0 AND r.act = 1 THEN r.act = 3: r.p = 6: r.s = 0 IF INT(RND(1) * 60) = 0 AND r.act = 1 THEN r.act = 4: r.p = 11: r.s = 0 'IF INT(RND(1) * 30) = 0 AND r.dir = -1 AND r.act = 1 THEN r.act = 8: r.p = 32: r.s = 1 CASE 2 IF gw.shotegg = 2 THEN r.act = 1: r.p = 1 ELSE IF (gw.flags AND smallw) = 0 THEN tmp = gw.shotx - (r.x + 5) tmp2 = (r.y + 8) - gw.shoty ELSE tmp = gw.shotx - (r.x + 3) tmp2 = (r.y + 4) - gw.shoty END IF IF tmp2 <> 0 THEN ang! = tmp / tmp2 * r.dir ELSE ang! = 0 IF ang! > 2 THEN r.p = 1 ELSEIF ang! > 1 THEN r.p = 2 ELSEIF ang! > .5 THEN r.p = 3 ELSEIF ang! > 0 THEN r.p = 4 ELSE r.p = 5 END IF END IF CASE 3 IF (r.s AND 1) = 0 THEN r.p = r.p + 1 ELSE r.p = r.p - 1 IF r.p > 10 THEN r.p = 9: r.s = r.s + 1 IF r.p < 8 AND r.s < 5 AND (r.s AND 1) = 1 THEN r.s = r.s + 1 IF r.p <= 6 THEN r.act = 1 CASE 4 IF r.tail = 0 THEN r.tail = 1 IF (r.s AND 1) = 0 THEN r.p = r.p + 1 ELSE r.p = r.p - 1 IF r.p > 15 THEN r.p = 14: r.s = r.s + 1 IF r.p < 14 AND r.s < 7 AND (r.s AND 1) = 1 THEN r.s = r.s + 1 IF r.p <= 11 THEN r.act = 1 CASE 5 r.tail = 0 IF r.s = 1 THEN r.p = r.p + 1 r.s = r.s XOR 1 IF r.p > 21 THEN r.act = 6 CASE 6 IF (r.s AND 1) = 0 THEN r.p = r.p + 1 ELSE r.p = r.p - 1 IF r.p > 25 THEN r.p = 24: IF r.s < 4 THEN r.s = r.s + 1 ELSE r.act = 1 IF r.p < 24 AND (r.s AND 1) = 1 THEN r.s = r.s + 1 CASE 7 r.p = r.p + 1: IF r.p = 31 THEN r.act = 1 CASE 8 r.p = r.p + r.s: IF r.p >= 37 THEN r.p = 37: r.s = -1 IF r.p <= 33 THEN r.p = 33: r.s = 1 IF r.tail = 0 THEN r.tail = 1 CASE 9 IF r.p < 40 THEN IF r.s = 2 THEN r.p = r.p + 1: r.s = 0 ELSE r.s = r.s + 1 ELSE r.p = r.p + 1: IF r.p > 43 THEN r.p = 41 END IF END SELECT IF r.tail > 0 THEN r.tail = r.tail + 1 IF r.tail > 5 THEN r.tail = 0 ELSE r.tail = INT(RND(1) * 30 / 29) END IF IF (gw.flags AND smallw) = 0 THEN tmpx = r.x + gw.windx tmpy = r.y + gw.windy loadsprite tail(), 0, tails + r.tail, 25, 15, 3 loadsprite pic(), 0, raccoon + r.p, 25, 25, 3 IF r.dir = -1 THEN wardsprite tail(), pal(), 208 + r.pal, tmpx + 12, tmpy + 12, dpage wardsprite pic(), pal(), 208 + r.pal, tmpx, tmpy, dpage ELSE drawsprite tail(), pal(), 208 + r.pal, tmpx - 12, tmpy + 12, dpage drawsprite pic(), pal(), 208 + r.pal, tmpx, tmpy, dpage END IF ELSE tmpx = INT(r.x / 2) + gw.windx tmpy = INT(r.y / 2) + gw.windy loadsprite tail(), (r.tail AND 1) * 160, smallt + INT(r.tail / 2), 13, 8, 3 loadsprite pic(), (r.p AND 1) * 160, smallr + INT(r.p / 2), 13, 13, 3 IF r.dir = -1 THEN wardsprite tail(), pal(), 208 + r.pal, tmpx + 6, tmpy + 6, dpage wardsprite pic(), pal(), 208 + r.pal, tmpx, tmpy, dpage ELSE drawsprite tail(), pal(), 208 + r.pal, tmpx - 6, tmpy + 6, dpage drawsprite pic(), pal(), 208 + r.pal, tmpx, tmpy, dpage END IF END IF END SUB SUB drawbeast oldy = -1 FOR i = 0 TO gd.maxhatch IF beast(i) > 0 THEN IF beastp(i) < 0 THEN IF beastp(i) < -2 THEN drawsprite sbreak(), pal(), beast(i) * 16 - 16, beastx(i), beasty(i), dpage beastp(i) = beastp(i) + 1 ELSE IF beastp(i) = -1 THEN beastp(i) = -2 ELSE beastp(i) = -1 beasty(i) = beasty(i) + getsin(beasta(i)) / 128 beastx(i) = beastx(i) + getcos(beasta(i)) / 96 bpic = beast(i) * -2 + beastp(i) IF bpic <> oldy THEN loadsprite pic(), 320 + beastp(i) * 160, critter + beast(i) + 17, 10, 10, 3 IF beasta(i) > 64 THEN drawsprite pic(), pal(), beast(i) * 16 + 80, beastx(i), beasty(i), dpage ELSE wardsprite pic(), pal(), beast(i) * 16 + 80, beastx(i), beasty(i), dpage END IF END IF ELSE beastp(i) = beastp(i) + 1: IF beastp(i) > 6 THEN beastp(i) = 3 IF beastp(i) < 3 THEN bpic = stuff + 2 + beastp(i) IF bpic <> oldy THEN loadsprite pic(), 0, bpic, 20, 20, 3 drawsprite pic(), pal(), beast(i) * 16 - 16, beastx(i), beasty(i), dpage ELSE beasty(i) = beasty(i) + getsin(beasta(i)) / 64 beastx(i) = beastx(i) + getcos(beasta(i)) / 48 bpic = critter + beast(i) * 3 - 3 + ABS(beastp(i) - 5) IF bpic <> oldy THEN loadsprite pic(), 0, bpic, 20, 20, 3 IF beasta(i) > 64 THEN drawsprite pic(), pal(), beast(i) * 16 + 80, beastx(i), beasty(i), dpage ELSE wardsprite pic(), pal(), beast(i) * 16 + 80, beastx(i), beasty(i), dpage END IF END IF END IF oldy = bpic IF INT(RND(1) * 20) = 1 THEN playsnd beast(i), 160 IF beastx(i) < -10 OR beastx(i) > 310 OR beasty(i) < 5 OR beasty(i) > 180 THEN beast(i) = 0: IF gd.smallbeast > i THEN gd.smallbeast = i END IF NEXT i END SUB SUB draweggs (gamenum, gw AS gamewindow) IF gw.flags AND smallw THEN rectangle gw.windx, gw.windy, 72, 87, 243, 2 rectangle gw.windx, gw.windy + 87, 72, 3, 245, 2 rectangle gw.windx, gw.windy + 10 * 7 + 2, 72, 1, 249, 2 drawsprite sstand(), pal(), 0, gw.windx + 32, gw.windy + 80, 2 FOR i = 0 TO 10 FOR j = ((i + gw.toggle) AND 1) TO 8 tmp = space(gamenum, j, i) SELECT CASE tmp CASE 0 CASE 1 TO 6 drawsprite segg(), pal(), tmp * 16 - 16, j * 8 + gw.windx - ((i + gw.toggle) AND 1) * 4, i * 7 + gw.windy, 2 END SELECT NEXT j NEXT i ELSE rectangle gw.windx, gw.windy, 144, 175, 243, 2 rectangle gw.windx, gw.windy + 175, 144, 5, 245, 2 rectangle gw.windx, gw.windy + 10 * 14 + 2, 144, 1, 249, 2 drawsprite stand(), pal(), 0, gw.windx + 63, gw.windy + 158, 2 FOR i = 0 TO 10 FOR j = ((i + gw.toggle) AND 1) TO 8 tmp = space(gamenum, j, i) SELECT CASE tmp CASE 0 CASE 1 TO 6 drawsprite egg(), pal(), tmp * 16 - 16, j * 16 + gw.windx - ((i + gw.toggle) AND 1) * 8, i * 14 + gw.windy, 2 END SELECT NEXT j NEXT i END IF END SUB SUB drawlevel (space(), y, x(), y(), numfall, bottom, adjust, lowpoint, height, windx, windy, windh, winds, pal()) 'draw close up IF winds = 0 THEN windw = 144 aimx = 68 aimy = 15 standx = 63 standy = 33 eggw = 16 eggh = 14 ELSEIF winds = 1 THEN windw = 72 aimx = 34 aimy = 7 standx = 32 standy = 16 eggw = 8 eggh = 7 ELSE windw = 18 eggw = 2 eggh = 2 END IF numrows = -INT(-windh / eggh) rectangle windx, windy, windw, windh, 243, 2 IF bottom = 0 THEN rectangle windx, windy + windh - 5, windw, 5, 245, 2 IF bottom <= 2 THEN max = numrows - 3 + bottom lowpoint = (max - 1) * eggh rectangle windx, windy + lowpoint + eggw - 1, windw, 1, 249, 2 adjust = -bottom ELSE max = numrows lowpoint = (max - 1) * eggh adjust = -3 END IF lowline = bottom + adjust toggle = lowline AND 1 l2d = height - lowline IF l2d > max THEN l2d = max FOR i = 0 TO l2d - 1 FOR j = ((i + toggle) AND 1) TO 8 tmp = space(j, i + lowline) SELECT CASE tmp CASE 0 CASE 1 TO 6 IF winds = 0 THEN drawsprite egg(), pal(), tmp * 16 - 16, j * eggw + windx - ((i + toggle) AND 1) * eggw / 2, lowpoint - i * eggh + windy, 2 ELSEIF winds = 1 THEN drawsprite segg(), pal(), tmp * 16 - 16, j * eggw + windx - ((i + toggle) AND 1) * eggw / 2, lowpoint - i * eggh + windy, 2 END IF END SELECT NEXT j NEXT i FOR i = 0 TO numfall - 1 ty = y(i): tx = x(i) printstr STR$(tx) + STR$(ty), 130, 8 * i, dpage IF ty >= lowline AND ty < lowline + max THEN temp = space(tx, ty) ty = ty - lowline IF winds = 0 THEN drawsprite egg(), pal(), temp * 16 - 14, tx * eggw + windx - ((ty + toggle) AND 1) * eggw / 2, lowpoint - ty * eggh + windy, 2 ELSEIF winds = 1 THEN drawsprite segg(), pal(), temp * 16 - 14, tx * eggw + windx - ((ty + toggle) AND 1) * eggw / 2, lowpoint - ty * eggh + windy, 2 END IF END IF NEXT i printstr STR$(l2d) + STR$(max), 10, 50 + winds * 10, dpage IF l2d < max THEN rectangle windx, windy, windw, eggh * (max - l2d), 14, 2 END IF IF adjust > -3 THEN IF winds = 0 THEN drawsprite stand(), pal(), 0, windx + standx, windy + lowpoint + standy, 2 drawsprite aim(), pal(), 0, windx + aimx, windy + lowpoint + aimy, 2 ELSEIF winds = 1 THEN drawsprite sstand(), pal(), 0, windx + standx, windy + lowpoint + standy, 2 drawsprite saim(), pal(), 0, windx + aimx, windy + lowpoint + aimy, 2 END IF END IF IF windy + windh < 200 THEN rectangle windx, windy + windh, windw, 200 - windy - windh, 0, 2 IF y + bottom < 0 THEN y = -bottom IF y + lowline > height - 1 THEN y = height - lowline - 1 IF y < 0 THEN y = y + 1: bottom = bottom - 1 IF y >= max - 1 THEN bottom = bottom + 1: IF adjust = -3 THEN y = y - 1 END SUB SUB drawstuff (gamenum, gw AS gamewindow) IF gw.flags AND smallw THEN rotatesprite saim(), pal(), 0, gw.windx + 36, gw.windy + 80, gw.sang, dpage IF gw.shotegg = 0 THEN drawsprite segg(), pal(), gw.eggt * 16 - 16, 32 + gw.windx, 77 + gw.windy, dpage ELSEIF gw.shotegg < 3 THEN drawsprite segg(), pal(), gw.eggt * 16 - 16, gw.shotx / 2 + gw.windx, gw.shoty / 2 + gw.windy, dpage END IF ELSE rotatesprite aim(), pal(), 0, gw.windx + 72, gw.windy + 159, gw.sang, dpage IF gw.shotegg = 0 THEN drawsprite egg(), pal(), gw.eggt * 16 - 16, 64 + gw.windx, 154 + gw.windy, dpage ELSEIF gw.shotegg < 3 THEN drawsprite egg(), pal(), gw.eggt * 16 - 16, gw.shotx + gw.windx, gw.shoty + gw.windy, dpage END IF END IF END SUB SUB dropeggs (gw AS gamewindow, gamenum, tofall) l = 0: oldy = ylist(0) FOR k = 0 TO tofall - 1 hatchx = xlist(k): hatchy = ylist(k) IF hatchy > oldy THEN l = l + 1: oldy = hatchy IF gw.flags AND smallw THEN drawsprite segg(), pal(), 192, hatchx * 8 + gw.windx + ((hatchy + gw.toggle) AND 1) * -4, hatchy * 7 + gw.windy, 2 ELSE drawsprite egg(), pal(), 192, hatchx * 16 + gw.windx + ((hatchy + gw.toggle) AND 1) * -8, hatchy * 14 + gw.windy, 2 END IF IF gd.smallfall <= gd.maxfaller THEN falls(gd.smallfall) = l faller(gd.smallfall) = space(gamenum, hatchx, hatchy) fallx(gd.smallfall) = hatchx * 16 + ((hatchy + gw.toggle) AND 1) * -8 fally(gd.smallfall) = hatchy * 14 - l fallw(gd.smallfall) = gamenum k = gd.smallfall: WHILE k < gd.maxfaller AND faller(gd.smallfall) > 0 gd.smallfall = gd.smallfall + 1: WEND END IF space(gamenum, hatchx, hatchy) = 0 NEXT k END SUB SUB getsbsetting (sbp, sbd) benv$ = ENVIRON$("BLASTER") IF benv$ = "" THEN sbp = 544 sbd = 1 ELSE FOR i = 1 TO LEN(benv$) IF MID$(benv$, i, 1) = "A" THEN i = i + 1 sbp = 0 WHILE MID$(benv$, i, 1) <> " " sbp = sbp * 16 + VAL(MID$(benv$, i, 1)) i = i + 1 WEND END IF IF MID$(benv$, i, 1) = "D" THEN i = i + 1 sbd = VAL(MID$(benv$, i, 1)) i = i + 2 END IF NEXT i END IF END SUB SUB hatcheggs (gamenum, gw AS gamewindow) j = 1 i = 0 DO hatchx = xlist(i): hatchy = ylist(i) IF gw.flags AND smallw THEN drawsprite segg(), pal(), 192, hatchx * 8 + gw.windx + ((hatchy + gw.toggle) AND 1) * -4, hatchy * 7 + gw.windy, 2 ELSE drawsprite egg(), pal(), 192, hatchx * 16 + gw.windx + ((hatchy + gw.toggle) AND 1) * -8, hatchy * 14 + gw.windy, 2 END IF IF gd.smallbeast <= gd.maxhatch THEN IF (gw.flags AND smallw) THEN beastp(gd.smallbeast) = -4 beastx(gd.smallbeast) = hatchx * 8 + ((hatchy + gw.toggle) AND 1) * -4 - 1 + gw.windx beasty(gd.smallbeast) = hatchy * 7 - 1 + gw.windy ELSE beastp(gd.smallbeast) = 0 beastx(gd.smallbeast) = hatchx * 16 + ((hatchy + gw.toggle) AND 1) * -8 - 2 + gw.windx beasty(gd.smallbeast) = hatchy * 14 - 2 + gw.windy END IF beasta(gd.smallbeast) = 64 + (INT(RND(1) * 58) + 20) * ((INT(RND(1) * 2) * 2 - 1)) beast(gd.smallbeast) = space(gamenum, hatchx, hatchy) k = gd.smallbeast: WHILE k < gd.maxhatch AND beast(gd.smallbeast) > 0 gd.smallbeast = gd.smallbeast + 1: WEND END IF space(gamenum, hatchx, hatchy) = 0 tmptog = (hatchy + gw.toggle) AND 1 IF hatchy > 0 THEN IF hatchx > 0 THEN IF space(gamenum, hatchx - tmptog, hatchy - 1) = gw.eggt THEN xlist(j) = hatchx - tmptog: ylist(j) = hatchy - 1: j = j + 1 IF hatchx < 11 THEN IF space(gamenum, hatchx + 1 - tmptog, hatchy - 1) = gw.eggt THEN xlist(j) = hatchx + 1 - tmptog: ylist(j) = hatchy - 1: j = j + 1 END IF IF hatchx > 0 THEN IF space(gamenum, hatchx - 1, hatchy) = gw.eggt THEN xlist(j) = hatchx - 1: ylist(j) = hatchy: j = j + 1 IF hatchx < 11 THEN IF space(gamenum, hatchx + 1, hatchy) = gw.eggt THEN xlist(j) = hatchx + 1: ylist(j) = hatchy: j = j + 1 IF hatchy < 9 THEN IF hatchx > 0 THEN IF space(gamenum, hatchx - tmptog, hatchy + 1) = gw.eggt THEN xlist(j) = hatchx - tmptog: ylist(j) = hatchy + 1: j = j + 1 IF hatchx < 11 THEN IF space(gamenum, hatchx + 1 - tmptog, hatchy + 1) = gw.eggt THEN xlist(j) = hatchx + 1 - tmptog: ylist(j) = hatchy + 1: j = j + 1 END IF i = i + 1 LOOP UNTIL i >= j scored& = j * 10 gw.tosend = gw.tosend + j - 2 IF gw.scorem > 3 THEN gw.scorem = 3 tofall = whofalls(gamenum, gw.toggle) IF tofall < 0 THEN gw.status = 2: gw.scorem = gw.scorem - tofall: tofall = -tofall IF tofall > 0 THEN gw.tosend = gw.tosend + tofall gw.scorem = gw.scorem + tofall dropeggs gw, gamenum, tofall END IF IF gw.scorem > 10 THEN gw.scorem = 10 gw.score = gw.score + scored& * gw.scorem END SUB SUB initplayer (gamenum, gw AS gamewindow) gw.toggle = 1 gw.sang = 64 gw.shotc = 0 gw.shotegg = 0 gw.nextf = 9 gw.tracer = 0 gw.eggt = INT(RND(1) * numeggt) + 1 gw.nextt = INT(RND(1) * numeggt) + 1 gw.nextp = 0 gw.score = 0 gw.status = 0 FOR i = 0 TO 13 FOR j = 0 TO 11 space(gamenum, j, i) = 0 NEXT j: NEXT i IF (gd.gametype AND level) = level THEN gw.topline = 9 FOR i = 0 TO 9 FOR j = (i + gw.toggle) AND 1 TO 8 space(gamenum, j, i) = stage(j, gw.topline - i) NEXT j: NEXT i ELSE FOR i = 0 TO 4 FOR j = (i + gw.toggle) AND 1 TO 8 space(gamenum, j, i) = INT(RND(1) * 7) NEXT j: NEXT i END IF i = whofalls(gamenum, gw.toggle) FOR j = 0 TO i - 1 space(gamenum, xlist(j), ylist(j)) = 0 NEXT j draweggs gamenum, gw END SUB FUNCTION levelfalls (s(), height, ec(), x(), y()) DIM tegg(8, 100) FOR i = 0 TO numeggt: ec(i) = 0: NEXT i j = 0 FOR i = 0 TO 8 eggt = s(i, height - 1) IF eggt > 0 THEN x(j) = i: y(j) = height - 1: tegg(i, height - 1) = eggt: j = j + 1: ec(eggt) = ec(eggt) + 1 NEXT i c = 0 IF j = 0 THEN FOR i = 0 TO 8: FOR j = 0 TO height - 2 IF s(i, j) > 0 THEN x(c) = i: y(c) = j: c = c + 1 NEXT j: NEXT i levelfalls = c EXIT FUNCTION END IF ec(numeggt + 1) = 0 i = 0 WHILE (i < j) ex = x(i): ey = y(i) IF ey > ec(numeggt + 1) THEN ec(numeggt + 1) = ey FOR k = -1 TO 1 ty = ey + k IF ty >= 0 AND ty <= height - 1 THEN t = (ty + toggle) AND 1 FOR l = -1 TO 0 IF k = 0 THEN tx = ex + l * 2 + 1 ELSE tx = ex + l + t IF tx >= t AND tx <= 8 THEN eggt = s(tx, ty) IF eggt > 0 AND tegg(tx, ty) = 0 THEN x(j) = tx: y(j) = ty: j = j + 1: tegg(tx, ty) = eggt: ec(eggt) = ec(eggt) + 1 END IF NEXT l END IF NEXT k i = i + 1 WEND c = 0 FOR i = 0 TO height - 1 FOR j = (i + toggle) AND 1 TO 8 IF tegg(j, i) <> s(j, i) THEN x(c) = j: y(c) = i: c = c + 1 END IF NEXT j: NEXT i levelfalls = c END FUNCTION SUB makeegg (gamenum, gw AS gamewindow) playsnd numeggt + 1, 160 tmp2 = INT((gw.shoty + 7) / 14) IF tmp2 < 0 THEN tmp2 = 0 IF tmp2 > eggcount(gamenum, numeggt + 1) THEN eggcount(gamenum, numeggt + 1) = tmp2 i = (tmp2 + gw.toggle) AND 1 tmp = INT((gw.shotx + 8 + i * 8) / 16) IF tmp < i THEN tmp = i IF tmp > 8 THEN tmp = 8 gw.shotx = tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8 gw.shoty = tmp2 * 14 IF gw.flags AND smallw THEN drawsprite segg(), pal(), gw.eggt * 16 - 16, gw.shotx / 2 + gw.windx, gw.shoty / 2 + gw.windy, 2 ELSE drawsprite egg(), pal(), gw.eggt * 16 - 16, gw.shotx + gw.windx, gw.shoty + gw.windy, 2 END IF howmany = checkegg(gamenum, tmp, tmp2, gw.eggt, gw.toggle) gw.shotegg = 2: space(gamenum, tmp, tmp2) = gw.eggt eggcount(gamenum, gw.eggt) = eggcount(gamenum, gw.eggt) + 1 IF howmany >= 3 THEN playsnd numeggt + 2, 160 xlist(0) = tmp: ylist(0) = tmp2 hatcheggs gamenum, gw END IF END SUB SUB moveegg (gamenum, gw AS gamewindow) IF gw.shotegg = 1 THEN FOR i = 1 TO gd.eggstep tmpx = gw.shotx tmpy = gw.shoty gw.shotxc = gw.shotxc + gw.shotxm IF INT(gw.shotxc / 256) < 1 THEN gw.shotxc = gw.shotxc + 256: tmpx = tmpx - 1 ELSE IF INT(gw.shotxc / 256) > 1 THEN gw.shotxc = gw.shotxc - 256: tmpx = tmpx + 1 gw.shotyc = gw.shotyc + gw.shotym IF INT(gw.shotyc / 256) < 1 THEN gw.shotyc = gw.shotyc + 256: tmpy = tmpy - 1 ELSE IF INT(gw.shotyc / 256) > 1 THEN gw.shotyc = gw.shotyc - 256: tmpy = tmpy + 1 IF tmpx < 1 THEN gw.shotxm = ABS(gw.shotxm): gw.scorem = gw.scorem + 1: playsnd numeggt + 1, 160 IF tmpx > 127 THEN gw.shotxm = -ABS(gw.shotxm): gw.scorem = gw.scorem + 1: playsnd numeggt + 1, 160 IF tmpy < 1 THEN makeegg gamenum, gw EXIT FOR END IF tmp2 = INT(tmpy / 14) tmp = INT((tmpx + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN j = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) k = tmpy - (tmp2 * 14) IF j * j + k * k < 200 THEN makeegg gamenum, gw EXIT FOR END IF END IF tmp2 = INT((tmpy + 15) / 14) tmp = INT((tmpx + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN j = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) k = tmpy - (tmp2 * 14) IF j * j + k * k < 200 THEN makeegg gamenum, gw EXIT FOR END IF END IF tmp2 = INT(tmpy / 14) tmp = INT((tmpx + 16 + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN j = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) k = tmpy - (tmp2 * 14) IF j * j + k * k < 200 THEN makeegg gamenum, gw EXIT FOR END IF END IF tmp2 = INT((tmpy + 15) / 14) tmp = INT((tmpx + 16 + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN j = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) k = tmpy - (tmp2 * 14) IF j * j + k * k < 200 THEN makeegg gamenum, gw EXIT FOR END IF END IF gw.shotx = tmpx gw.shoty = tmpy NEXT i tmp2 = INT(gw.shoty / 14) tmp = INT((gw.shotx + ((tmp2 + gw.toggle) AND 1) * 8) / 16) END IF END SUB SUB trace (gamenum, gw AS gamewindow) STATIC tp i = tp tp = tp + 1: IF tp > 15 THEN tp = 0 tmpxc = 256 tmpyc = 256 tmpx = 64 tmpy = 154 tmpxm = getcos(gw.sang) tmpym = getsin(gw.sang) j = 0 WHILE j = 0 tx = tmpx: ty = tmpy tmpxc = tmpxc + tmpxm IF INT(tmpxc / 256) < 1 THEN tmpxc = tmpxc + 256: tmpx = tmpx - 1 ELSE IF INT(tmpxc / 256) > 1 THEN tmpxc = tmpxc - 256: tmpx = tmpx + 1 tmpyc = tmpyc + tmpym IF INT(tmpyc / 256) < 1 THEN tmpyc = tmpyc + 256: tmpy = tmpy - 1 ELSE IF INT(tmpyc / 256) > 1 THEN tmpyc = tmpyc - 256: tmpy = tmpy + 1 IF tmpx < 1 OR tmpx > 127 THEN tmpxm = -tmpxm tmp2 = INT(tmpy / 14) tmp = INT((tmpx + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF tmpy < 2 THEN j = 1 IF space(gamenum, tmp, tmp2) <> 0 THEN l = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) m = tmpy - (tmp2 * 14) IF l * l + m * m < 200 THEN j = 1 END IF tmp2 = INT((tmpy + 15) / 14) tmp = INT((tmpx + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN l = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) m = tmpy - (tmp2 * 14) IF l * l + m * m < 200 THEN j = 1 END IF tmp2 = INT(tmpy / 14) tmp = INT((tmpx + 16 + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN l = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) m = tmpy - (tmp2 * 14) IF l * l + m * m < 200 THEN j = 1 END IF tmp2 = INT((tmpy + 15) / 14) tmp = INT((tmpx + 16 + ((tmp2 + gw.toggle) AND 1) * 8) / 16) IF space(gamenum, tmp, tmp2) <> 0 THEN l = tmpx - (tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8) m = tmpy - (tmp2 * 14) IF l * l + m * m < 200 THEN j = 1 END IF IF gw.tracer AND 1 THEN i = i - 1 IF i < 0 THEN i = 15 IF gw.flags AND smallw THEN putpixel gw.windx + tmpx / 2 + 4, gw.windy + tmpy / 2 + 4, 11, dpage ELSE drawsprite tracer(), pal(), 16, gw.windx + tmpx + 6, gw.windy + tmpy + 6, dpage END IF END IF END IF WEND IF gw.tracer AND 2 THEN tmp2 = INT((ty + 7) / 14) tmp = INT((tx + 8 + ((tmp2 + gw.toggle) AND 1) * 8) / 16) tx = tmp * 16 + ((tmp2 + gw.toggle) AND 1) * -8 ty = tmp2 * 14 IF gw.flags AND smallw THEN drawsprite tracer(), pal(), gw.eggt * 16 - 16, tx / 2 + gw.windx + 2, ty / 2 + gw.windy + 2, dpage ELSE drawsprite tracer(), pal(), gw.eggt * 16 - 16, tx + gw.windx + 6, ty + gw.windy + 6, dpage END IF END IF END SUB FUNCTION whofalls (gamenum, toggle) DIM tegg(11, 13) FOR i = 0 TO numeggt: eggcount(gamenum, i) = 0: NEXT i j = 0 FOR i = 0 TO 8 eggt = space(gamenum, i, 0) IF eggt > 0 THEN xlist(j) = i: ylist(j) = 0: tegg(i, 0) = eggt: j = j + 1: eggcount(gamenum, eggt) = eggcount(gamenum, eggt) + 1 NEXT i IF j = 0 THEN temp = -1 FOR i = 0 TO 8: FOR j = 1 TO 11 IF space(gamenum, i, j) > 0 THEN xlist(-temp) = i: ylist(-temp) = j: temp = temp - 1 NEXT j: NEXT i whofalls = temp EXIT FUNCTION END IF eggcount(gamenum, numeggt + 1) = 0 i = 0 WHILE (i < j) ex = xlist(i): ey = ylist(i) IF ey > eggcount(gamenum, numeggt + 1) THEN eggcount(gamenum, numeggt + 1) = ey FOR k = -1 TO 1 ty = ey + k IF ty >= 0 AND ty <= 11 THEN t = (ty + toggle) AND 1 FOR l = -1 TO 0 IF k = 0 THEN tx = ex + l * 2 + 1 ELSE tx = ex + l + t IF tx >= t AND tx <= 8 THEN eggt = space(gamenum, tx, ty) IF eggt > 0 AND tegg(tx, ty) = 0 THEN xlist(j) = tx: ylist(j) = ty: j = j + 1: tegg(tx, ty) = eggt: eggcount(gamenum, eggt) = eggcount(gamenum, eggt) + 1 END IF NEXT l END IF NEXT k i = i + 1 WEND c = 0 FOR i = 0 TO 10 FOR j = (i + toggle) AND 1 TO 8 IF tegg(j, i) <> space(gamenum, j, i) THEN xlist(c) = j: ylist(c) = i: c = c + 1 END IF NEXT j: NEXT i whofalls = c END FUNCTION