'$DYNAMIC 'current library; allmodex.QLB DEFINT A-Z 'basic DECLARE SUB arraystring (a%(), s$, ai%, sl%) DECLARE SUB stringarray (s$, a%(), ai%, sl%) 'assembly DECLARE SUB setmodex () DECLARE SUB copypage (BYVAL page1, BYVAL page2) DECLARE SUB setvispage (BYVAL page) DECLARE SUB drawsprite (pic(), pal(), BYVAL po, BYVAL x, BYVAL y, BYVAL page) DECLARE SUB loadsprite (pic(), BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL page) DECLARE SUB stosprite (pic(), BYVAL x, BYVAL y, BYVAL page) DECLARE SUB fadeto (palbuff(), BYVAL red, BYVAL green, BYVAL blue) DECLARE SUB fadetopal (pal(), palbuff()) DECLARE SUB setpal (pal()) DECLARE SUB clearpage (BYVAL page) 'DECLARE SUB loadpage (buf(), fil$, BYVAL p) 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) 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 () DECLARE SUB setpicstuf (buf(), BYVAL b, BYVAL p) DECLARE SUB loadset (fil$, BYVAL i, BYVAL l) DECLARE SUB storeset (fil$, BYVAL i, BYVAL l) DECLARE FUNCTION Keyseg () DECLARE FUNCTION keyoff () DECLARE FUNCTION keyval (BYVAL a) DECLARE FUNCTION getkey () 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 () DECLARE SUB screenshot (f$, BYVAL p, mpal(), buf()) ' 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) 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 regs.ax = &H3509: CALL interruptx(&H21, regs, regs) off9 = regs.bx: seg9 = regs.es DIM time(1), fade(1536), font(1024), pagebuf(8000), placer(450), bobpal(1584), voc(16383), vbuff(16383), hiscore(40), music(10000) DIM spit(60), sx(60), sy(60), svel(60), stage(60), sd(60), sctr(120), whospit(60), kp$(53, 1), gamename$(20), gamenum(20), seradr$(20), ser!(20), spack(300), gpack(300), id$(6), adr$(6), player(6), chat$(6), keyp(6), chatk(6), donoise(18) RANDOMIZE TIMER CALL setmodex setitup "noise.cbv" + CHR$(0), voc(), vbuff(), 2 setupmusic music() oldvol = getdacvol oldfm = getfmvol setdacvol 8 setfmvol 0 dsp = resetdsp ipx = ipxsetup IF ipx = 1 THEN ipx = opensock(&HF180) ipx = openbsock(&HF181) END IF setdiskpages pagebuf(), 200, 0 arena = 1: vpage = 1: dpage = 0: col = 3: spits = 60: snext = 1: floors = 9: max = 6: delay = 55: rate! = -90.8858: nsets = 4: porc$(0) = "Computer": porc$(1) = "Human": name$(0) = "AUTO-BATTLE": idname$ = "" FOR i = 1 TO 20 seradr$(i) = STRING$(16, " ") NEXT i FOR i = 0 TO 5 adr$(i) = STRING$(16, " ") NEXT i nadr$ = STRING$(16, " ") setvispage vpage loadpage "bob.mxs" + CHR$(0), 0, 3 DIM mainpal(767) setpal mainpal() DEF SEG = VARSEG(mainpal(0)): BLOAD "palette.sto", VARPTR(mainpal(0)) DEF SEG = VARSEG(font(0)): BLOAD "bobtext.fnt", VARPTR(font(0)): setfont font(): textcolor 15, 0 DEF SEG = VARSEG(bobpal(0)): BLOAD "bob.pal", VARPTR(bobpal(0)) OPEN "spit.hi" FOR BINARY AS #1 FOR i = 0 TO 40 GET #1, 1 + i * 2, hiscore(i) NEXT i CLOSE #1 GOSUB switchon clock# = 0 RESTORE keystrs FOR o = 0 TO 1 FOR i = 2 TO 53 READ kp$(i, o) NEXT i: NEXT o begin: loadpage "bob.mxs" + CHR$(0), 0, 3 GOSUB getstats loadpage "intro.map" + CHR$(0), 0, 2 copypage 2, dpage copypage dpage, vpage fadetopal mainpal(), fade() loadsong "sabre.bam" + CHR$(0) fademusic 15 showhp = 0: me = 1: allmode = 0: alive = max: winner = 0: runner = 0: dash = 0: csr = 1: zog$ = " " FOR i = 1 TO max: pic(i) = -1: x(i) = 320: y(i) = 170: overh(i) = 0: NEXT i playsnd ((max * nsets) + 2), rate! demo# = TIMER setkeys DO: setkeys IF keyval(41) > 1 THEN screenshot "spit" + CHR$(65 + INT(RND * 26)) + CHR$(65 + INT(RND * 26)) + CHR$(65 + INT(RND * 26)) + CHR$(65 + INT(RND * 26)) + ".bmp" + CHR$(0), dpage, mainpal(), vbuff() IF keyval(1) > 1 OR ((keyval(57) > 1 OR keyval(28) > 1) AND csr = max + 2) THEN GOTO gameover IF (keyval(57) > 1 OR keyval(28) > 1) AND csr <= max THEN me = csr: fademusic 0: fadeto fade(), INT(RND * 63), INT(RND * 63), INT(RND * 63): overh(me) = 124: overh#(me) = clock#: meserve = -1: stopsong: GOTO spitgame IF (keyval(57) > 1 OR keyval(28) > 1) AND csr = max + 1 AND ipx <> 0 THEN meserve = 0: me = 0: fadeto fade(), INT(RND * 63), INT(RND * 63), INT(RND * 63): GOSUB multisetup: stopsong: GOTO spitgame IF TIMER - demo# > 60 THEN me = 0: fademusic 0: fadeto fade(), INT(RND * 63), INT(RND * 63), INT(RND * 63): overh(me) = 124: overh#(me) = clock#: meserve = -1: GOTO spitgame setwait time(), delay IF dash = 0 THEN dash = 1: pic(runner) = -1: runner = runner + 1: IF runner > max THEN runner = 1 pic(runner) = 0 END IF IF dash = 1 THEN me = runner: GOSUB tryleft: IF x(runner) < 150 THEN dash = 2 IF dash = 2 THEN me = runner: GOSUB tryright: IF x(runner) > 320 THEN dash = 0 IF keyval(72) > 1 THEN csr = csr - 1: demo# = TIMER: IF csr < 1 THEN csr = max + 2 IF keyval(80) > 1 THEN csr = csr + 1: demo# = TIMER: IF csr > max + 2 THEN csr = 1 IF keyval(75) > 1 THEN arena = arena - 1: IF arena < 1 THEN arena = 5 IF keyval(77) > 1 THEN arena = arena + 1: IF arena > 5 THEN arena = 1 FOR i = 1 TO max + 2 IF i = csr THEN textcolor 10, 2 IF i = max + 1 AND ipx = 0 THEN textcolor 7, 0: IF csr = i THEN textcolor 7, 2 printstr name$(i) + LEFT$(zog$, 9 - LEN(name$(i))), 120, 40 + (i * 8), dpage textcolor 15, 0 NEXT i IF csr <= max THEN textcolor 10, 0 printstr "HiSCORE", 16, 42 + csr * 4, dpage printstr STR$(INT(hiscore(csr))), 8, 52 + csr * 4, dpage printstr porc$(hiscore(csr + 10)), 16, 62 + csr * 4, dpage textcolor 3, 0 GOSUB showstats textcolor 15, 0 END IF printstr "HiSCORE", 16, 138, dpage printstr STR$(INT(hiscore(9))), 8, 148, dpage printstr porc$(hiscore(19)), 16, 158, dpage printstr name$(hiscore(18)), 16, 168, dpage printstr name$(runner), x(runner) - (LEN(name$(runner)) * 8), 186, dpage printstr "ARENA", 160 - LEN("ARENA") * 4, 2, dpage printstr "<" + arena$(arena - 1) + ">", 160 - LEN("<" + arena$(arena - 1) + ">") * 4, 10, dpage GOSUB drawall copypage dpage, vpage: copypage 2, dpage dowait LOOP multisetup: clearpage 0 clearpage 1 clearpage 2 loadpage "intro.map" + CHR$(0), 1, 2 copypage 2, dpage needf = 1 setkeys DO setwait time(), delay setkeys tog = tog XOR 1 IF keyval(1) > 1 THEN dowait: stopsong: RETURN begin IF keyval(28) > 1 AND idname$ <> "" THEN dowait: EXIT DO IF keyval(14) > 0 AND LEN(idname$) > 0 THEN idname$ = LEFT$(idname$, LEN(idname$) - 1) shift = 0: IF keyval(54) > 0 OR keyval(42) > 0 THEN shift = 1 IF keyval(57) > 1 AND LEN(idname$) < 10 THEN idname$ = idname$ + " " FOR i = 2 TO 53 IF kp$(i, shift) <> "" AND keyval(i) > 1 AND LEN(idname$) < 10 THEN idname$ = idname$ + kp$(i, shift) NEXT i textcolor 15, 2 printstr " ", 160 - (LEN(" ") * 4), 60, dpage textcolor 15, 0 printstr "Your name?", 160 - (LEN("Your name?") * 4), 50, dpage textcolor 10, 0 printstr idname$, 160 - (LEN(idname$) * 4), 60, dpage copypage dpage, vpage: copypage 2, dpage IF needf = 1 THEN needf = 0: fadetopal mainpal(), fade() dowait LOOP pickserve: loadpage "intro.map" + CHR$(0), 1, 2 copypage 2, dpage getbpack gpack(), 24 mptr = 0 servers = 0 setkeys DO setwait time(), delay setkeys tog = tog XOR 1 IF keyval(1) > 1 THEN cancelbget: dowait: stopsong: RETURN begin IF keyval(72) > 1 AND mptr > 0 THEN mptr = mptr - 1 IF keyval(80) > 1 AND mptr < servers THEN mptr = mptr + 1 IF keyval(57) > 1 OR keyval(28) > 1 THEN IF mptr = 0 THEN dowait: EXIT DO IF mptr > 0 AND gamenum(mptr) < 6 THEN dowait: EXIT DO END IF IF waitbpack = 0 THEN getbaddress nadr$ getbpack gpack(), 24 arraystring gpack(), temp$, 0, 12 IF temp$ = "HRPBSpitwars" OR servers = 20 THEN bad = 0 FOR i = 1 TO servers IF nadr$ = seradr$(i) THEN bad = 1: gamenum(i) = gpack(11): ser!(i) = TIMER END IF NEXT i IF bad = 0 THEN arraystring gpack(), temp$, 6, 10 servers = servers + 1: ser!(servers) = TIMER seradr$(servers) = nadr$ gamename$(servers) = temp$ gamenum(servers) = gpack(11) END IF END IF END IF FOR i = 1 TO servers IF ser!(i) + 3 < TIMER OR gamenum(i) = 0 THEN GOSUB dropserver NEXT i textcolor 15, 0: IF mptr = 0 THEN textcolor 10, 2 printstr "CREATE NEW", 160 - LEN("CREATE NEW") * 4, 20, dpage FOR i = 1 TO servers textcolor 15, 0: IF mptr = i THEN textcolor 10, 2 printstr "Join " + gamename$(i) + ":" + STR$(gamenum(i)) + " player", 160 - LEN("Join " + gamename$(i) + ":" + STR$(gamenum(i)) + " player") * 4, 20 + 8 * i, dpage NEXT i copypage dpage, vpage: copypage 2, dpage dowait LOOP clearpage vpage loadpage "intro.map" + CHR$(0), 2, 2 copypage 2, dpage cancelbget IF mptr > 0 THEN stringarray "Join", spack(), 0, 4 stringarray idname$, spack(), 2, 10 getpack gpack(), 4 t1! = TIMER: t2! = 0: temp$ = "" DO IF TIMER > t2! + .5 THEN sendpack seradr$(mptr), spack(), 14: t2! = TIMER IF waitpack = 0 THEN arraystring gpack(), temp$, 0, 4: IF temp$ <> "Okay" THEN getpack gpack(), 4 LOOP UNTIL TIMER > t1! + 3 OR temp$ = "Okay" IF temp$ <> "Okay" THEN cancelget: GOTO pickserve END IF me = 0 FOR i = 0 TO 5 id$(i) = "": chat$(i) = "" NEXT i meserve = 0 IF mptr = 0 THEN id$(0) = idname$: meserve = 1: pnum = 1: getpack gpack(), 14 END IF t1! = 0: tline$ = "": mcsr = 0: playgame = 0 FOR i = 1 TO max player(i) = -1 NEXT i setkeys DO IF meserve = 1 THEN setwait time(), delay setkeys tog = tog XOR 1 char = 0 IF keyval(1) > 1 THEN char = 27 IF keyval(72) > 1 AND mcsr > 0 THEN mcsr = mcsr - 1 IF keyval(80) > 1 AND mcsr < 6 + meserve THEN mcsr = mcsr + 1 IF mcsr = 0 THEN shift = 0: IF keyval(42) > 0 OR keyval(54) > 0 THEN shift = 1 IF keyval(0) > 1 AND keyval(0) < 54 THEN IF kp$(keyval(0), shift) <> "" THEN char = ASC(kp$(keyval(0), shift)) IF keyval(0) = 57 THEN char = 32 IF keyval(0) = 28 THEN char = 13: tline$ = "" IF keyval(0) = 14 AND LEN(tline$) > 0 THEN char = 8: tline$ = LEFT$(tline$, LEN(tline$) - 1) IF char >= 32 THEN tline$ = tline$ + CHR$(char): IF LEN(tline$) > 38 THEN tline$ = RIGHT$(tline$, 38) END IF IF mcsr > 0 AND mcsr < 7 AND (keyval(28) > 1 OR keyval(57) > 1) THEN char = mcsr IF mcsr = 7 AND (keyval(28) > 1 OR keyval(57) > 1) THEN temp = 0 FOR i = 1 TO 6 IF player(i) > -1 THEN temp = temp + 1 NEXT i IF temp = pnum THEN playgame = 1 END IF IF meserve = 1 AND (TIMER > t1! + .5 OR char = 27) THEN stringarray "HRPBSpitwars", spack(), 0, 12 stringarray idname$, spack(), 6, 10 spack(11) = pnum: IF char = 27 THEN spack(11) = 0 sendbpack spack(), 24 t1! = TIMER END IF IF meserve = 1 THEN IF char = 27 THEN stringarray "Quit", spack(), 0, 4 FOR i = 1 TO 5 sendpack adr$(i), spack(), 4 NEXT ELSE chatk(0) = char IF char > 0 AND char < 7 THEN IF player(char) = -1 THEN i = 0: GOSUB clearchar: player(char) = i IF char >= 32 THEN chat$(0) = chat$(0) + CHR$(char): IF LEN(chat$(0)) > 40 THEN chat$(0) = RIGHT$(chat$(0), 40) IF char = 13 THEN chat$(0) = "" IF char = 8 AND LEN(chat$(0)) > 0 THEN chat$(0) = LEFT$(chat$(0), LEN(chat$(0)) - 1) IF waitpack = 0 THEN getaddress nadr$ arraystring gpack(), temp$, 0, 4 IF temp$ = "Join" AND pnum < 6 THEN GOSUB addclient getpack gpack(), 14 END IF FOR i = 1 TO 5 IF id$(i) <> "" THEN stringarray "Ask", spack(), 0, 4 IF playgame = 1 THEN stringarray "Play", spack(), 0, 4 t2! = TIMER DO sendpack adr$(i), spack(), 4 IF waitpack = 0 THEN getaddress nadr$ arraystring gpack(), temp$, 0, 4 IF nadr$ = adr$(i) AND temp$ = "Tell" THEN chatk(i) = gpack(2) IF gpack(2) >= 32 THEN chat$(i) = chat$(i) + CHR$(gpack(2)): IF LEN(chat$(i)) > 40 THEN chat$(i) = RIGHT$(chat$(i), 40) IF gpack(2) = 13 THEN chat$(i) = "" IF gpack(2) = 8 AND LEN(chat$(i)) > 0 THEN chat$(i) = LEFT$(chat$(i), LEN(chat$(i)) - 1) IF gpack(2) = 27 THEN GOSUB clearchar: pnum = pnum - 1: chat$(i) = id$(i) + " decided not to play.": id$(i) = "" IF gpack(2) > 0 AND gpack(2) < 7 THEN IF player(gpack(2)) = -1 THEN GOSUB clearchar: player(gpack(2)) = i getpack gpack(), 14 EXIT DO END IF IF temp$ = "Join" AND pnum < 6 THEN GOSUB addclient getpack gpack(), 14 END IF IF TIMER > t2! + 1 THEN GOSUB clearchar pnum = pnum - 1 chat$(i) = id$(i) + " inexplicably dissapeared." id$(i) = "" EXIT DO END IF LOOP END IF NEXT i IF playgame = 0 THEN stringarray "Chat", spack(), 0, 4 FOR i = 0 TO 5 stringarray id$(i), spack(), i * 6 + 2, 10 'stringarray chat$(i), spack(), i * 25 + 7, 40 spack(i * 6 + 7) = chatk(i) NEXT i FOR i = 1 TO 6 spack(37 + i) = player(i) NEXT i spack(44) = arena FOR i = 1 TO 5 IF id$(i) <> "" THEN sendpack adr$(i), spack(), 90 NEXT i END IF END IF END IF IF meserve = 0 THEN getpack gpack(), 90 t1! = TIMER DO IF waitpack = 0 THEN arraystring gpack(), temp$, 0, 4 IF temp$ = "Chat" THEN FOR i = 0 TO 5 arraystring gpack(), id$(i), i * 6 + 2, 10 IF gpack(i * 6 + 7) >= 32 THEN chat$(i) = chat$(i) + CHR$(gpack(i * 6 + 7)): IF LEN(chat$(i)) > 40 THEN chat$(i) = RIGHT$(chat$(i), 40) IF gpack(i * 6 + 7) = 13 THEN chat$(i) = "" IF gpack(i * 6 + 7) = 8 AND LEN(chat$(i)) > 0 THEN chat$(i) = LEFT$(chat$(i), LEN(chat$(i)) - 1) IF gpack(i * 6 + 7) = 27 THEN GOSUB clearchar: pnum = pnum - 1: chat$(i) = id$(i) + " decided not to play.": id$(i) = "" IF gpack(i * 6 + 7) > 0 AND gpack(i * 6 + 7) < 7 THEN IF player(gpack(i * 6 + 7)) = -1 THEN GOSUB clearchar: player(gpack(i * 6 + 7)) = i player(i + 1) = gpack(38 + i) NEXT i arena = gpack(44) EXIT DO END IF IF temp$ = "Ask" THEN stringarray "Tell", spack(), 0, 4 spack(2) = char sendpack seradr$(mptr), spack(), 6 IF char = 27 THEN EXIT DO ELSE char = 0 END IF IF temp$ = "Play" THEN stringarray "Tell", spack(), 0, 4 spack(2) = 0 sendpack seradr$(mptr), spack(), 6 playgame = 1: EXIT DO END IF IF temp$ = "Quit" THEN GOTO pickserve getpack gpack(), 90 END IF IF TIMER > t1! + 3 THEN cancelget: GOTO pickserve LOOP END IF IF playgame = 1 THEN RETURN IF char = 27 THEN GOTO pickserve textcolor 15, 0 IF mcsr = 0 THEN textcolor 10, 2 printstr tline$, 8, 4, dpage textcolor 15, 0 FOR i = 0 TO 5 textcolor 9 + i, 0 printstr id$(i), 0, 90 + (i * 18), dpage IF id$(i) = "" THEN textcolor 15, 0: printstr "Computer", 0, 90 + (i * 18), dpage printstr chat$(i), 0, 98 + (i * 18), dpage NEXT i IF meserve = 1 THEN textcolor 15, 0 IF mcsr = 7 THEN textcolor 9 + 6 * tog, 0 printstr "-START GAME-", 10, 64, dpage printstr "<" + arena$(arena - 1) + ">", 304 - LEN("<" + arena$(arena - 1) + ">") * 8, 64, dpage IF keyval(75) > 1 AND mcsr = 7 THEN arena = arena - 1: IF arena < 1 THEN arena = 5 IF keyval(77) > 1 AND mcsr = 7 THEN arena = arena + 1: IF arena > 5 THEN arena = 1 END IF td = 0 FOR i = 1 TO max temp$ = "" textcolor 15, 0 IF (i = mcsr AND td = 0) OR i = td THEN textcolor 9 + 6 * tog, 0 IF player(i) > -1 THEN textcolor 7, 0: temp$ = id$(player(i)): IF i = mcsr THEN textcolor 8 + 7 * tog, 0 printstr name$(i) + ": " + temp$, 10, (i + 1) * 8, dpage NEXT i FOR i = 1 TO 6 IF player(i) > -1 THEN IF id$(player(i)) = idname$ THEN me = i NEXT i FOR i = 1 TO max temp$ = "" IF (i = mcsr AND me = 0) OR i = me THEN ty = 0: tx = 0 temp1& = ((i - 1) * 6300) tx& = temp1& + (tog * 900) + (0 * 450) WHILE tx& > 319: ty = ty + 1: tx& = tx& - 320: WEND: tx = tx& loadsprite placer(), tx, ty, 30, 30, 3 drawsprite placer(), bobpal(), pal(i) * 16, 200, 25, dpage END IF NEXT i FOR i = 0 TO 39 loadsprite placer(), (arena - 1) * 64, 160 + i, 64, 2, 3 stosprite placer(), 240, 20 + i, dpage NEXT i copypage dpage, vpage: copypage 2, dpage IF meserve = 1 THEN dowait LOOP clearchar: FOR o = 1 TO 6 IF player(o) = i THEN player(o) = -1 NEXT o RETURN addclient: pnum = pnum + 1 j = 0 FOR o = 5 TO 1 STEP -1 IF id$(o) = "" THEN j = o NEXT o arraystring gpack(), id$(j), 2, 10 adr$(j) = nadr$ stringarray "Okay", spack(), 0, 4 sendpack nadr$, spack(), 4 chat$(j) = "" RETURN dropserver: IF mptr = i THEN mptr = 0 ELSE IF mptr > i THEN mptr = mptr - 1 servers = servers - 1 IF i <= servers THEN FOR o = i TO servers gamename$(o) = gamename$(o + 1) gamenum(o) = gamenum(o + 1) seradr$(o) = ser$(o + 1) ser!(o) = ser!(o + 1) NEXT o END IF RETURN showstats: printstr CHR$(14) + STR$(speed(csr)), 242, 35 + (csr * 2), dpage printstr CHR$(15) + STR$(lift(csr)), 242, 45 + (csr * 2), dpage printstr CHR$(16) + STR$(harm(csr)), 242, 55 + (csr * 2), dpage printstr CHR$(17) + STR$(hp(csr)), 242, 65 + (csr * 2), dpage printstr CHR$(12) + STR$(jbonus(csr)), 242, 75 + (csr * 2), dpage printstr CHR$(18) + STR$(meterm!(csr)), 242, 85 + (csr * 2), dpage printstr CHR$(13) + " X" + STR$(spray(csr) + 1), 242, 95 + (csr * 2), dpage RETURN spitgame: loadpage "level1.map" + CHR$(0), arena - 1, 2 IF arena = 1 THEN RESTORE arena1 IF arena = 2 THEN RESTORE arena2 IF arena = 3 THEN RESTORE arena3 IF arena = 4 THEN RESTORE arena4 IF arena = 5 THEN RESTORE arena5 READ song$ FOR i = 0 TO floors READ fx(i), fy(i), fw(i) ' printstr "<", fx(i) - (fw(i) * .5), fy(i) + 7, 2 ' printstr ">", fx(i) + (fw(i) * .5) - 8, fy(i) + 7, 2 NEXT i copypage 2, dpage copypage dpage, vpage loadsong song$ + ".bam" + CHR$(0) fademusic 15 IF meserve = -1 THEN fadetopal mainpal(), fade() FOR i = 1 TO max: pic(i) = 0: x(i) = INT(RND * 320): y(i) = INT(RND * 132) + 20: fplant(i) = 0: NEXT i IF meserve = 0 THEN getpack gpack(), 568 IF meserve = 1 THEN FOR i = 1 TO max IF player(i) > -1 THEN overh(i) = 49 + player(i): overh#(i) = clock# NEXT i END IF setkeys DO setkeys setwait time(), delay IF keyval(88) > 1 THEN showhp = showhp XOR 1 IF meserve = -1 THEN IF keyval(15) > 0 AND keyval(87) > 1 THEN overh(me) = 0: me = me - 1: IF me < 1 THEN me = max WHILE hp(me) < 1: me = me - 1: IF me < 1 THEN me = max WEND overh(me) = 124: overh#(me) = clock# END IF IF keyval(15) > 0 AND keyval(88) > 1 THEN overh(me) = 0: me = me + 1: IF me > max THEN me = 1 WHILE hp(me) < 1: me = me + 1: IF me > max THEN me = 1 WEND overh(me) = 124: overh#(me) = clock# END IF IF keyval(54) > 0 AND keyval(42) > 0 AND keyval(0) = 55 THEN w = getkey: IF w = 8 THEN GOSUB cheat IF hp(me) < 1 AND me > 0 THEN fadeto fade(), 60, 0, 0: winner = 0: GOTO done IF keyval(1) > 1 THEN winner = 0: GOTO done END IF IF keyval(41) > 1 THEN screenshot "spit" + CHR$(65 + INT(RND * 26)) + CHR$(65 + INT(RND * 26)) + CHR$(65 + INT(RND * 26)) + CHR$(65 + INT(RND * 26)) + ".bmp" + CHR$(0), dpage, mainpal(), vbuff() IF meserve <> 0 THEN IF keyval(57) > 0 AND clock# - spit#(me) > reload!(me) AND gospit(me) = 0 THEN gospit(me) = spitspeed(me): spit#(me) = clock#: power(me) = 0: letgo(me) = 0 IF keyval(72) > 0 AND fplant(me) = 1 AND gospit(me) = 0 THEN jump(me) = lift(me): drop(me) = 0: fplant(me) = 0 IF keyval(75) > 0 AND keyval(77) = 0 AND hp(me) > 0 THEN GOSUB tryleft: fplant(me) = 0 IF keyval(77) > 0 AND keyval(75) = 0 AND hp(me) > 0 THEN GOSUB tryright: fplant(me) = 0 IF duck(me) > 0 THEN pic(me) = duck(me) - 1: duck(me) = 0 IF keyval(80) > 0 AND fplant(me) = 1 THEN duck(me) = pic(me) + 1: pic(me) = 3 END IF IF meserve = 1 THEN stringarray "Want", spack(), 0, 4 IF keyval(1) > 1 THEN stringarray "Quit", spack(), 0, 4 FOR i = 1 TO 6 IF me <> i AND player(i) > -1 THEN spack(2) = score(i) spack(3) = power(i) IF clock# - spit#(i) > reload!(i) THEN spack(4) = 1 ELSE spack(4) = 0 FOR o = 1 TO 6 spack(4 + o) = hp(o) IF clock# - overh#(o) < 3 THEN spack(10 + o) = overh(o) ELSE spack(10 + o) = 0 NEXT o t1! = TIMER getpack gpack(), 16 DO sendpack adr$(player(i)), spack(), 34 IF waitpack = 0 THEN getaddress nadr$ arraystring gpack(), temp$, 0, 4 IF nadr$ = adr$(player(i)) AND temp$ = "Data" THEN mtemp = me: me = i IF gpack(2) > 1 THEN player(i) = -1 IF gpack(3) > 0 AND clock# - spit#(i) > reload!(i) AND gospit(i) = 0 THEN gospit(i) = spitspeed(i): spit#(i) = clock#: power(i) = 0: letgo(i) = 0 IF gpack(3) > 0 THEN buildup#(i) = clock# - (fave!(i)) + 1 ELSE buildup#(i) = 0 IF gpack(4) > 0 AND fplant(i) = 1 AND gospit(i) = 0 THEN jump(i) = lift(i): drop(i) = 0: fplant(i) = 0 IF gpack(5) > 0 AND gpack(6) = 0 AND hp(i) > 0 THEN GOSUB tryleft: fplant(i) = 0 IF gpack(6) > 0 AND gpack(5) = 0 AND hp(i) > 0 THEN GOSUB tryright: fplant(i) = 0 IF duck(i) > 0 THEN pic(i) = duck(i) - 1: duck(i) = 0 IF gpack(7) > 0 AND fplant(i) = 1 THEN duck(i) = pic(i) + 1: pic(i) = 3 me = mtemp EXIT DO END IF getpack gpack(), 16 END IF IF TIMER > t1! + 1 THEN player(i) = -1: EXIT DO LOOP END IF NEXT i IF keyval(1) > 1 THEN winner = 0: GOTO done END IF IF meserve = 0 THEN keyp(0) = keyval(1): keyp(1) = keyval(57) keyp(2) = keyval(72): keyp(3) = keyval(75): keyp(4) = keyval(77): keyp(5) = keyval(80) stringarray "Data", spack(), 0, 4 FOR i = 0 TO 5: spack(2 + i) = keyp(i): NEXT i t1! = TIMER DO IF waitpack = 0 THEN arraystring gpack(), temp$, 0, 4 IF temp$ = "Want" THEN sendpack seradr$(mptr), spack(), 16 score(me) = gpack(2) power(me) = gpack(3) IF gpack(4) = 1 THEN spit#(me) = clock# - reload!(me) - 1 ELSE spit#(me) = clock# FOR i = 1 TO 6 hp(i) = gpack(4 + i) IF gpack(10 + i) > 0 THEN overh(i) = gpack(10 + i): overh#(i) = clock# ELSE overh#(i) = clock# - 4 NEXT i END IF IF temp$ = "Draw" THEN FOR i = 1 TO 6 x(i) = gpack(-2 + i * 4) y(i) = gpack(-1 + i * 4) d(i) = gpack(0 + i * 4) pic(i) = gpack(1 + i * 4) NEXT i FOR i = 1 TO 60 IF gpack(22 + i * 4) > -1 THEN spit(i) = 1: stage(i) = gpack(22 + i * 4) ELSE spit(i) = 0 sd(i) = gpack(23 + i * 4) sx(i) = gpack(24 + i * 4) sy(i) = gpack(25 + i * 4) NEXT i FOR i = 1 TO 18 donoise(i) = gpack(265 + i) NEXT i getpack gpack(), 568 EXIT DO END IF IF temp$ = "Quit" THEN sendpack seradr$(mptr), spack(), 10 keyp(0) = 2: EXIT DO END IF getpack gpack(), 568 t1! = TIMER END IF IF TIMER > t1! + 3 THEN keyp(0) = 2: EXIT DO LOOP FOR i = 1 TO 18 IF donoise(i) > 0 THEN playsnd i, rate! donoise(i) = 0 NEXT i IF keyp(0) > 1 THEN winner = 0: GOTO done END IF FOR i = 1 TO max IF hp(i) < 1 AND pic(i) > -1 THEN pic(i) = 3: pal(i) = pal(i) XOR 255 NEXT i IF meserve <> 0 THEN FOR i = 1 TO max: IF hp(i) < 1 THEN GOTO doomed GOSUB auto IF gospit(i) > 0 THEN GOSUB hock IF jump(i) > 0 THEN GOSUB jumper IF jump(i) = 0 THEN GOSUB plumet IF hitime(i) > 0 THEN pic(i) = 6: hitime(i) = hitime(i) - 1: IF hitime(i) = 0 THEN pic(i) = 0 FOR j = 1 TO max: IF hp(j) < 1 AND pic(j) >= 0 THEN GOSUB take NEXT j targ = 0 doomed: NEXT i GOSUB spitmove END IF IF meserve = 1 THEN stringarray "Draw", spack(), 0, 4 FOR i = 1 TO 6 spack(-2 + i * 4) = x(i) spack(-1 + i * 4) = y(i) spack(0 + i * 4) = d(i) spack(1 + i * 4) = pic(i) NEXT i FOR i = 1 TO 60 IF spit(i) = 1 THEN spack(22 + i * 4) = stage(i) ELSE spack(22 + i * 4) = -1 spack(23 + i * 4) = sd(i) spack(24 + i * 4) = sx(i) spack(25 + i * 4) = sy(i) NEXT i FOR i = 1 TO 18 spack(265 + i) = donoise(i) donoise(i) = 0 NEXT i FOR i = 1 TO 6 IF player(i) > -1 THEN sendpack adr$(player(i)), spack(), 568 NEXT i END IF GOSUB drawall printstr name$(me), 1, 1, dpage printstr STR$(INT(score(me))), 140, 8, dpage GOSUB meter IF clock# - win# > 5 AND winner > 0 THEN GOSUB victory: GOTO done IF keyval(28) > 1 AND meserve = -1 THEN w = getkey 'SWAP vpage, dpage: setvispage vpage: copypage 2, dpage copypage dpage, vpage: copypage 2, dpage clock# = clock# + .09 dowait LOOP done: fademusic 0 fadeto fade(), 0, 0, 0 FOR i = 1 TO 60: spit(i) = 0: NEXT stopsong GOTO begin victory: stopsong playsnd ((max * 3) + winner), rate! t# = TIMER: WHILE TIMER - t# < nsize!(winner): WEND playsnd ((max * nsets) + 1), rate! t# = TIMER: WHILE TIMER - t# < 3: WEND IF score(winner) > hiscore(winner) AND cheat(winner) = 0 THEN hiscore(winner) = score(winner) hiscore(winner + 10) = 0: IF me = winner THEN hiscore(winner + 10) = 1 END IF IF score(winner) > hiscore(9) AND cheat(winner) = 0 THEN hiscore(9) = score(winner) hiscore(19) = 0: IF me = winner THEN hiscore(19) = 1 hiscore(18) = winner END IF OPEN "spit.hi" FOR BINARY AS #1 FOR i = 0 TO 40 PUT #1, 1 + i * 2, hiscore(i) NEXT i CLOSE #1 RETURN auto: IF i = me OR hp(i) < 1 OR (meserve = 1 AND player(i) > -1) THEN RETURN distx = 320: flee(i) = 0 FOR o = 1 TO max IF ABS(x(o) - x(i)) < distx AND i <> o AND hp(o) > 0 THEN distx = (x(o) - x(i)): targ = o IF jump(i) = 0 AND dofall(i) <> 0 THEN oldtarg(i) = targ targ = oldtarg(i) NEXT o FOR o = 1 TO 60 IF ABS(sx(o) - x(i)) < ABS(distx) AND i <> whospit(o) AND spit(o) > 0 AND y(i) >= sy(o) THEN distx = (sx(o) - x(i)): flee(i) = o NEXT o mtemp = me: me = i IF (jump(i) > 0 OR dofall(i) = 0) AND ABS(ABS(distx) - fave(i)) < speed(i) * 3 THEN fave(i) = fave(i) + speed(i) * 3 IF flee(i) > 0 AND y(i) = y(whospit(flee(i))) AND fplant(i) = 1 AND gospit(i) > 0 THEN buildup#(i) = clock# - (fave!(i) * 2): fplant(i) = 0: sitstil#(i) = clock# IF flee(i) > 0 AND y(i) = y(whospit(flee(i))) AND fplant(i) = 1 AND gospit(i) = 0 THEN jump(i) = lift(i): drop(i) = 0: fplant(i) = 0: sitstil#(i) = clock# IF flee(i) > 0 AND d(i) = (0 XOR rl(i)) THEN GOSUB tryleft: fplant(me) = 0: sitstil#(i) = clock#: GOTO finis IF flee(i) > 0 AND d(i) = (1 XOR rl(i)) THEN GOSUB tryright: fplant(me) = 0: sitstil#(i) = clock#: GOTO finis IF y(targ) < y(i) AND jump(targ) = 0 AND dofall(targ) > 0 AND fplant(me) = 1 AND gospit(me) = 0 AND RND * 100 < 50 THEN jump(me) = lift(me): drop(me) = 0: fplant(me) = 0: donil!(i) = RND * 8: sitstil#(i) = clock#: fave(i) = favecent(i) + INT(RND * _ favecent(i)) - (favecent(i) / 2) IF ABS(distx) < fave(i) - (RND * (fave(i) * .5)) AND clock# - spit#(me) > reload!(me) AND gospit(me) = 0 THEN gospit(me) = spitspeed(me): spit#(me) = clock#: power(me) = 0: letgo(me) = 0: buildup#(i) = clock# + (RND * (fave!(i) * .5) + (fave!(i) * .25)): sitstil#(i) = clock#: fave(i) = favecent(i) + INT(RND * favecent(i)) - (favecent(i) / 2) END IF IF clock# - sitstil#(i) > donil!(i) AND fplant(me) = 1 AND gospit(me) = 0 AND RND * 100 < 10 THEN jump(me) = lift(me): drop(me) = 0: fplant(me) = 0: donil!(i) = RND * 5: sitstil#(i) = clock#: fave(i) = favecent(i) + INT(RND * favecent(i)) - ( _ favecent(i) / 2) IF d(i) = 0 AND clock# - sitstil#(i) > donil!(i) THEN GOSUB tryleft: fplant(i) = 0: GOTO finis IF d(i) = 1 AND clock# - sitstil#(i) > donil!(i) THEN GOSUB tryright: fplant(i) = 0: GOTO finis IF duck(me) > 0 THEN pic(me) = duck(me) - 1: duck(me) = 0 IF duck(me) = 0 AND ABS(distx) < 30 AND y(targ) - y(i) < -80 AND INT(RND * 100) < 10 THEN ducking(i) = INT(RND * 8) IF ducking(i) > 0 THEN duck(me) = pic(me) + 1: pic(me) = 3: ducking(i) = ducking(i) - 1 d(i) = 0: IF x(targ) > x(i) THEN d(i) = 1 IF distx < 0 AND ABS(distx) > fave(i) THEN GOSUB tryleft: fplant(i) = 0: sitstil#(i) = clock# IF distx > 0 AND ABS(distx) > fave(i) THEN GOSUB tryright: fplant(i) = 0: sitstil#(i) = clock# IF distx < 0 AND ABS(distx) + (speed(i) * 1) < fave(i) THEN GOSUB tryright: d(i) = 0: fplant(i) = 0: sitstil#(i) = clock# IF distx > 0 AND ABS(distx) + (speed(i) * 1) < fave(i) THEN GOSUB tryleft: d(i) = 1: fplant(i) = 0: sitstil#(i) = clock# finis: me = mtemp RETURN drawall: FOR i = 1 TO max IF showhp = 1 THEN printstr name$(i) + STR$(hp(i)), 0, 20 + i * 10, dpage ty = 0: tx = 0 temp1& = ((i - 1) * 6300) tx& = temp1& + (pic(i) * 900) + (d(i) * 450) WHILE tx& > 319: ty = ty + 1: tx& = tx& - 320: WEND: tx = tx& IF pic(i) >= 0 THEN loadsprite placer(), tx, ty, 30, 30, 3 IF pic(i) >= 0 THEN drawsprite placer(), bobpal(), pal(i) * 16, x(i) - 15, y(i) - 15, dpage IF clock# - overh#(i) < 3 AND ABS(x(i) - 160) < 155 THEN printstr CHR$(overh(i)), x(i) - 4, y(i) - 20, dpage NEXT i FOR i = 1 TO 60 IF spit(i) = 1 THEN loadsprite placer(), (stage(i) * 50) + (sd(i) * 200), 148, 10, 10, 3 IF spit(i) = 1 THEN drawsprite placer(), bobpal(), 0, sx(i) - 5, sy(i) - 5, dpage NEXT i RETURN meter: IF clock# - spit#(me) > reload!(me) THEN textcolor col, 0: col = col XOR 8 printstr "SPIT", 1, 9, dpage FOR i = 1 TO power(me) textcolor 65 + (i * .5), 0 printstr ")", 30 + (2 * i), 9, dpage NEXT i textcolor 60, 0 FOR i = 0 TO INT((hp(me) - 1) / 10) IF i = INT(hp(me) / 10) THEN textcolor 50 + (hp(me) - (INT(hp(me) / 10) * 10)), 0 printstr "X", 6 * i + 140, 1, dpage NEXT i textcolor 15, 0 RETURN take: IF ABS(x(j) - x(i)) < 25 AND ABS(y(j) - y(i)) < 25 AND clock# - doom#(j) > 2 THEN pic(j) = -1 a = INT(RND * 9) IF a = 0 THEN spray(i) = 2 IF a = 1 THEN jbonus(i) = jbonus(i) + 2: lbs(i) = lbs(i) - 2: IF lbs(i) < 1 THEN lbs(i) = 1 IF a = 2 THEN reload!(i) = 0 IF a = 3 AND speed(i) < 11 THEN speed(i) = speed(i) + 2: IF jbonus(i) > 0 THEN jbonus(i) = jbonus(i) - 1 IF a = 4 AND lift(i) < 21 THEN lift(i) = lift(i) + 3 IF a = 5 THEN harm(i) = harm(i) + 5 IF a = 6 THEN hp(i) = hp(i) + 15 IF a = 7 THEN meterm!(i) = meterm!(i) - .08: IF meterm!(i) < .02 THEN meterm!(i) = .02 IF a = 8 THEN sbonus!(i) = sbonus!(i) + .5 overh(i) = 11 + a: overh#(i) = clock# score(i) = score(i) + 400 + INT(RND * 100) END IF RETURN hock: fplant(i) = 0 pic(i) = 4 IF meserve = 1 AND player(i) > -1 AND i <> me THEN targ = me IF clock# < buildup#(i) + (fave!(i)) AND targ > 0 AND clock# - pow#(i) > meterm!(i) AND letgo(i) = 0 AND (jump(i) = 0 AND drop(i) = 0) THEN pow#(i) = clock#: power(i) = power(i) + 1: IF power(i) > 20 THEN power(i) = 20: score(i) = score(i) + 50: _ letgo(i) = 1 IF clock# < buildup#(i) + (fave!(i)) AND targ > 0 AND (jump(i) = 0 AND drop(i) = 0) THEN spit#(i) = clock#: RETURN IF keyval(57) > 0 AND targ = 0 AND clock# - pow#(i) > meterm!(i) AND letgo(i) = 0 AND (jump(i) = 0 AND drop(i) = 0) THEN pow#(i) = clock#: power(i) = power(i) + 1: IF power(i) > 20 THEN power(i) = 20: letgo(i) = 1 IF keyval(57) > 0 AND targ = 0 AND (jump(i) = 0 AND drop(i) = 0) THEN spit#(i) = clock#: RETURN letgo(i) = 1 IF gospit(i) <= INT(spitspeed(i) * .5) THEN pic(i) = 5 IF gospit(i) = INT(spitspeed(i) * .5) THEN GOSUB spittle gospit(i) = gospit(i) - 1 IF gospit(i) = 0 THEN pic(i) = 1 RETURN spittle: IF scount >= 60 THEN RETURN FOR o = 0 TO spray(i) scount = scount + 1: score(i) = score(i) + 1 spit(snext) = 1: stage(snext) = 0 playsnd i, rate!: donoise(i) = 1 IF d(i) = 0 THEN sx(snext) = x(i) - 16 - (o + 1): svel(snext) = ((INT(power(i) * .5) - (o * 1)) * sbonus!(i)) * -1: IF svel(snext) > -1 THEN svel(snext) = -1 IF d(i) = 1 THEN sx(snext) = x(i) + 16 - (o + 1): svel(snext) = (INT(power(i) * .5) - (o * 1)) * sbonus!(i): IF svel(snext) < 1 THEN svel(snext) = 1 sy(snext) = y(i) + spithi(i): sd(snext) = d(i): whospit(snext) = i WHILE spit(snext) = 1 snext = snext + 1: IF snext = 60 THEN snext = 1 WEND NEXT o power(i) = 0 RETURN spitmove: FOR i = 1 TO 60 IF spit(i) = 1 THEN IF stage(i) = 3 THEN sctr(i) = sctr(i) + 1: IF sctr(i) > 4 THEN spit(i) = 0: scount = scount - 1 IF stage(i) < 3 THEN sx(i) = sx(i) + svel(i) IF sx(i) > 330 THEN sx(i) = -10 IF sx(i) < -10 THEN sx(i) = 330 IF svel(i) > 1 AND stage(i) = 2 THEN sctr(i + 60) = sctr(i + 60) + 1: IF sctr(i + 60) > 2 THEN svel(i) = svel(i) - 1: sctr(i + 60) = 0 IF svel(i) < -1 AND stage(i) = 2 THEN sctr(i + 60) = sctr(i + 60) + 1: IF sctr(i + 60) > 2 THEN svel(i) = svel(i) + 1: sctr(i + 60) = 0 IF stage(i) < 3 THEN sy(i) = sy(i) + stage(i) FOR j = 1 TO max IF ABS(sx(i) - x(j)) < 13 AND ABS(sy(i) - (y(j) + (10 * SGN(duck(j))))) < 13 - (5 * SGN(duck(j))) AND j <> whospit(i) AND hp(j) > 0 THEN playsnd j + max, rate!: donoise(j + max) = 1 spit(i) = 0: scount = scount - 1: hitime(j) = 5: hp(j) = hp(j) - harm(whospit(i)): duck(j) = 0: score(whospit(i)) = score(whospit(i)) + 40 + INT(RND * 20) IF hp(j) < 1 THEN doom#(j) = clock#: score(whospit(i)) = score(whospit(i)) + 500 + INT(RND * 70): playsnd ((max * 2) + j), rate!: donoise((max * 2) + j) = 1: GOSUB whowon mtemp = me: me = j: dtemp = d(j): stemp = speed(me): speed(j) = kback(mtemp) IF sd(i) = 0 THEN GOSUB tryleft IF sd(i) = 1 THEN GOSUB tryright speed(j) = stemp: me = mtemp: d(j) = dtemp END IF NEXT j IF stage(i) < 2 THEN sctr(i) = sctr(i) + 1: IF sctr(i) > 4 THEN sctr(i) = 0: stage(i) = stage(i) + 1 IF sy(i) > fy(0) + 18 THEN sy(i) = fy(0) + 18: stage(i) = 3: sctr(i) = 0 END IF NEXT RETURN whowon: alive = alive - 1 IF alive = 1 THEN FOR ii = 1 TO max IF hp(ii) > 0 THEN winner = ii NEXT ii win# = clock# fademusic 0 END IF RETURN plumet: FOR o = 1 TO max IF y(i) < y(o) AND ABS((y(o) + (10 * SGN(duck(o)))) - y(i)) < 25 - (5 * SGN(duck(o))) AND ABS(x(o) - x(i)) < 18 AND pic(o) >= 0 THEN drop(i) = 0: jump(i) = lift(i) + 2: hitime(o) = 3: pic(i) = 3: duck(o) = 0: playsnd o + max, rate!: donoise(o + max) _ = 1 NEXT o dofall(i) = 0 FOR o = 0 TO floors IF ABS(y(i) - fy(o)) <= drop(i) AND ABS(x(i) - fx(o)) < fw(o) * .5 AND dofall(i) = 0 THEN dofall(i) = o + 1 NEXT o IF dofall(i) = 0 THEN y(i) = y(i) + drop(i) IF drop(i) <= lbs(i) THEN drop(i) = drop(i) + 1 END IF IF dofall(i) > 0 THEN drop(i) = 0: fplant(i) = 1: y(i) = fy(dofall(i) - 1): IF pic(i) = 2 THEN pic(i) = 1 RETURN jumper: IF y(i) < -40 + jump(i) THEN jump(i) = 0: RETURN y(i) = y(i) - INT(jump(i) / 2): jump(i) = jump(i) - 1 IF pic(i) < 4 OR pic(i) > 5 THEN pic(i) = 2 RETURN tryright: d(me) = 1 IF duck(me) > 0 OR (gospit(me) > 0 AND fplant(me) = 1) THEN RETURN far2go = speed(me) + jbonus(me) * (SGN(jump(me)) OR SGN(drop(me))) cant = 0: FOR o = 1 TO max IF ABS(x(o) - x(me)) <= 16 + far2go AND x(o) > x(me) AND ABS(y(o) - y(me)) < 26 AND pic(o) >= 0 AND hp(o) > 0 THEN cant = 1 NEXT o IF cant = 0 THEN x(me) = x(me) + far2go IF x(me) > 330 THEN x(me) = -10 tik(me) = tik(me) + 1: IF tik(me) > feet(me) THEN tik(me) = 0: IF pic(me) < 2 THEN pic(me) = pic(me) XOR 1 RETURN tryleft: d(me) = 0 IF duck(me) > 0 OR (gospit(me) > 0 AND fplant(me) = 1) THEN RETURN far2go = speed(me) + jbonus(me) * (SGN(jump(me)) OR SGN(drop(me))) cant = 0: FOR o = 1 TO max IF ABS(x(o) - x(me)) <= 16 + far2go AND x(o) < x(me) AND ABS(y(o) - y(me)) < 26 AND pic(o) >= 0 AND hp(o) > 0 THEN cant = 1 NEXT o IF cant = 0 THEN x(me) = x(me) - far2go IF x(me) < -10 THEN x(me) = 330 tik(me) = tik(me) + 1: IF tik(me) > feet(me) THEN tik(me) = 0: IF pic(me) < 2 THEN pic(me) = pic(me) XOR 1 RETURN cheat: speed(me) = 6: lift(me) = 18: lbs(me) = 18: reload!(me) = 0: harm(me) = 3: spray(me) = 5: jbonus(me) = 4: hp(me) = 100: kback(me) = 15: meterm!(me) = .01: sbonus!(me) = 1.5 overh(me) = 20: overh#(me) = clock#: cheater(me) = 1 RETURN getstats: RESTORE stats FOR i = 1 TO max: READ name$(i), x(i), y(i), pic(i), d(i), pal(i), speed(i), feet(i), lift(i), lbs(i), reload!(i), spitspeed(i), harm(i), spithi(i), spray(i), fplant(i), jbonus(i), hp(i), rl(i), fave(i), favecent(i), fave!(i), donil!(i), kback(i), _ meterm!(i), nsize!(i), score(i), cheater(i), sbonus!(i) duck(i) = 0: jump(i) = 0: gospit(i) = 0: hitime(i) = 0 NEXT i name$(max + 1) = "IPX GAME" name$(max + 2) = "EXIT" FOR i = 0 TO 4: READ arena$(i): NEXT i RETURN stats: DATA B€‚ƒ„…†‡,300,170,0,0,0,4,2,14,5,.7,6,4,-2,0,0,0,100,0,50,50,1.1,3,8,.12,1.6,0,0,1 DATA Plip,200,120,0,0,1,2,3,15,6,.64,4,5,3,0,0,0,105,0,30,35,.2,3,8,.12,1.1,0,0,1 DATA Bowzerˆ‰,50,50,0,1,2,2,1,12,3,1,9,6,3,0,0,4,100,0,80,80,2,3,10,.11,1.4,0,0,1.25 DATA Cherokee,30,170,0,1,3,5,2,13,7,1.2,5,7,-3,0,0,-1,80,0,30,60,1,2.4,10,.1,1.1,0,0,1 DATA Bliblet,170,90,0,0,4,2,1,13,5,1.4,6,4,-6,1,0,0,95,0,50,50,1.5,5,5,.14,1.1,0,0,1 DATA Sir Chef,170,90,0,0,5,4,1,13,6,1.4,6,6,1,0,0,0,90,0,80,80,1.4,5,5,.1,1.1,0,0,2 DATA Palmtree Platforms,The Big Dead Tree,Lunar Surface,Throwback Level,Industrial Garden Spot arena1: DATA "travel" DATA 160,170,380 DATA 180,135,40 DATA 220,105,30 DATA 60,95,102 DATA 222,64,60 DATA 50,65,20 DATA 290,105,25 DATA 300,90,30 DATA 60,35,20 DATA 182,112,21 arena2: DATA "bagpipe" DATA 160,170,380 DATA 100,127,80 DATA 82,97,116 DATA 120,46,45 DATA 200,112,84 DATA 208,81,106 DATA 169,30,38 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 arena3: DATA "waltz" DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 arena4: DATA "james" DATA 160,151,380 DATA 20,100,88 DATA 20,44,88 DATA 295,100,88 DATA 295,44,88 DATA 160,114,40 DATA 160,73,100 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 arena5: DATA "butercup" DATA 160,152,380 DATA 35,114,20 DATA 80,115,20 DATA 160,115,20 DATA 220,117,20 DATA 281,116,20 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 DATA 160,170,380 gameover: GOSUB shutoff closesock fademusic 0 fadeto fade(), 0, 0, 0 SCREEN 13 stopsong setdacvol oldvol closemusic setfmvol oldfm closefile SYSTEM switchon: regs.ax = &H2509: regs.ds = Keyseg: regs.dx = keyoff CALL interruptx(&H21, regs, regs) RETURN shutoff: regs.ax = &H2509: regs.ds = seg9: regs.dx = off9 CALL interruptx(&H21, regs, regs) RETURN keystrs: DATA 1,2,3,4,5,6,7,8,9,0,-,=,"","",q,w,e,r,t,y,u,i,o,p,[,],"","",a,s,d,f,g,h,j,k,l,";","'",`,"",\,z,x,c,v,b,n,m,",",".","/" DATA !,@,#,$,%,^,&,*,(,),_,+,"","",Q,W,E,R,T,Y,U,I,O,P,{,},"","",A,S,D,F,G,H,J,K,L,":"," ",~,"",|,Z,X,C,V,B,N,M,"<",">","?" REM $STATIC SUB arraystring (a(), s$, ai, sl) tmp$ = "": t = 0 FOR i = 1 TO sl IF t = 0 THEN c = a(ai) AND 255: t = 1 ELSE c = INT(a(ai) / 256): ai = ai + 1: t = 0 END IF IF c > 0 THEN tmp$ = tmp$ + CHR$(c) NEXT i s$ = tmp$ END SUB SUB stringarray (s$, a(), ai, sl) tmp = -1 FOR i = 1 TO sl IF i > LEN(s$) THEN tmp2 = 0 ELSE tmp2 = ASC(MID$(s$, i, 1)) IF tmp = -1 THEN tmp = tmp2 ELSE a(ai) = tmp + tmp2 * 256: ai = ai + 1: tmp = -1 NEXT i END SUB