'Hamster Republic Productions Classic Game Source Code '(C) Copyright Brian Fisher and James Paige and Hamster Republic Productions 'GPL software: Please read LICENSE.TXT ' 'This is "Bob the Hamster VGA", an arcade-style action game inspired by DigDug. ' 'This is a FreeBasic port of the QuickBasic port of the GWBASIC source code 'of the first ever Bob the Hamster game, "Bob the Hamster EGA". 'There are no known remaining copies of "Bob the Hamster EGA" ' 'Portions of this code are adapted from the OHRRPGCE, many thanks to Simon 'Bradley who pioneered the technique of porting allmodex QB code to FreeBasic 'And to all the other OHR developers. ' ' '$DYNAMIC DEFINT A-Z #include "compat.bi" #include "allmodex.bi" #include "common.bi" DECLARE SUB debug(s AS STRING) 'Local subs and functions DECLARE FUNCTION get_next_anim(BYREF cntr AS INTEGER) processcommandline DIM SHARED homedir AS STRING DIM SHARED tmpdir AS STRING DIM SHARED workingdir AS STRING workingdir = exepath$ + SLASH #IFDEF __FB_LINUX__ homedir = ENVIRON$("HOME") tmpdir = homedir + SLASH + ".bobvga" + SLASH IF NOT isdir(tmpdir) THEN makedir tmpdir #ELSE 'Custom on Windows works in the current dir homedir = ENVIRON$("USERPROFILE") & SLASH & "My Documents" 'Is My Documents called something else for non-English versions of Windows? tmpdir = exepath$ + SLASH #ENDIF 1 RANDOMIZE TIMER setmodex setwindowtitle "Bob the Hamster VGA" DIM newpal(255) AS RGBColor DIM oldpalbuf(767) DIM tmr(1), map(-1 TO 22, -1 TO 14), pic(138), shot(138), plip(138), bug(138), shark(138), shrew(138), spid(138), lago(138), bobpal(300), nme$(6), tmparray(32000), txt(1024) DIM letter$(203), namestr$(10), scor&(10), mess$(215, 1) DIM tally$(14), tvalue&(14), tallyline(9), tpic(9), tpal(9) DIM endtxt$(3, 1, 1, 1) DIM ctxt1$(10), ctxt2$(10), cy(10) DIM kills(9), gkills(9), p4kill(9) CONST plip_max = 240 DIM pl(plip_max), rp(plip_max), xp(plip_max), PX(plip_max), yp(plip_max), PY(plip_max), ap(plip_max), bp(plip_max), pxm(plip_max), pym(plip_max), plpdd(plip_max), ppic(plip_max) DIM SHARED cntr DIM music(2000) DIM SHARED opt(4) 'the following are dimmed to 15 because IIRC that was the default size that QB created automatically DIM SHARED bt(15), rt(15), rb(15), bx(15), by(15), bugdd(15), cbr(15), cbx(15), cby(15) DIM SHARED abug(15), bbug(15), cbxm(15), cbym(15), bst(15), cbp(15), xloc(15), yloc(15) DIM SHARED pict(15), pal(15), vld(15), xmot(15), ymotion(15), switch(15), dist(15) DIM AS INTEGER plindex, cb, xd, yd, st, shield, awb, bwb, rsh, shxm, shym, shdd, rr, rxm, rym, rpnum, wbxm, wbym, wst, alg, blg, wbp, temp, bata, batb, cycles, ssnum DIM AS INTEGER vpage, dpage DIM levelloader AS STRING DIM SHARED sound_names(45) AS STRING DIM SHARED allow_sound AS INTEGER = YES DIM level_file AS STRING OPEN data_file("hiscores.dat") FOR BINARY AS #3 FOR i = 1 TO 202 letter$(i) = " " GET #3, i, letter$(i) NEXT i letter$(203) = "Space" FOR i = 0 TO 9 namestr$(i) = STRING$(25, " ") GET #3, i * 29 + 203, namestr$(i) GET #3, i * 29 + 228, scor&(i) NEXT i OPEN data_file("bobgraph.anm") FOR BINARY AS #2 opt(1) = ABS(allow_sound) setupmusic oldfm = getfmvol setfmvol 0 setupsound FOR i = -1 TO 22: FOR j = -1 TO 14: map(i, j) = 14: NEXT j: NEXT i FOR i = 0 TO 212: FOR j = 0 TO 1: READ mess$(i, j): NEXT j: NEXT i FOR i = 0 TO 8: READ tpic(i), tpal(i): NEXT i RESTORE soundeffects FOR i = 0 TO UBOUND(sound_names) READ sound_names(i) NEXT i vlad = 0: hat = 0: bobpic = 0: invis = 0: lang = 0: dvc = 1: lvlb = 1: tspd = 4 LEFTKEY = 75: RIGHTKEY = 77: UP = 72: DOWN = 80: shoot = 57: ticks = 110 gn$ = data_file("bobgraph.mxs") xbload data_file("palette.mas"), oldpalbuf(), "master palette missing" convertpalette oldpalbuf(), newpal() setpal newpal() xbload data_file("bobtext.ohf"), txt(), "font missing" setfont txt() loadpage gn$, 0, 3 xbload data_file("bobgraph.pal"), bobpal(), "16-color palettes missing" DIM ded(138), car(138), cabag(138), spm(138), sun(138), dirt(138), con(138), digup(138), dug(138), web(138), tore(138) GOSUB 1915 setvispage 0 clearpage 0 loadsprite tmparray(), 0, 0, 195, 100, 25, 3 drawsprite tmparray(), 0, bobpal(), 96, 109, 85, 0 textcolor 8, 0 printstr "@1995 BriTech", 108, 190, 0 fadetopal newpal() setwait tmr(), 400 dowait fadeto 0, 0, 0 100 beatgame = 0 code$ = "" vpage = 0: dpage = 1: loadpage gn$, 1 + opt(0), 2 textcolor 15 - opt(0), 0 setkeys setvispage 2 optindex = 0: tctr = 0 pausesong IF opt(0) = 1 THEN toon = 412: playsong "castle" ELSE toon = 1745: playsong "bob" fademusic 15 fadetopal newpal() GOSUB 1935 110 IF tctr > 1 THEN GOSUB runtutorial sptr = -1 GOTO loscore END IF setwait tmr(), ticks startl = 0 setkeys copypage 2, dpage strgrabber(code$, 6) IF code$ = "BONUS" THEN startl = 41: GOTO 220 IF keyval(1) > 1 OR keyval(-1) > 0 THEN GOTO 1999 IF keyval(72) > 1 OR keyval(80) > 1 THEN optindex = -(optindex = 0) IF keyval(28) > 1 THEN IF optindex = 1 THEN GOTO 120 ELSE GOSUB runtutorial GOTO 220 END IF END IF printstr mess$(35, lang), 142, 120, dpage printstr mess$(36, lang), 134, 132, dpage printstr CHR$(38 - opt(0) * 3), 124 - optindex * 6, 120 + optindex * 12, dpage GOSUB 1930 SWAP vpage, dpage: setvispage vpage dowait GOTO 110 120 loadpage gn$, 3, 2 textcolor 46, 0 FOR i = 0 TO 4 printstr mess$(37 + i, lang), 100, 45 + i * 20, 2 NEXT i optindex = 0: toon = 1 GOSUB 1935 130 setwait tmr(), ticks setkeys IF keyval(1) > 1 OR keyval(28) > 1 OR keyval(-1) > 0 THEN GOTO 140 IF keyval(72) > 1 THEN IF optindex > 0 THEN optindex = optindex - 1 IF keyval(80) > 1 THEN IF optindex < 4 THEN optindex = optindex + 1 IF keyval(57) > 1 OR keyval(75) > 1 OR keyval(77) > 1 THEN opt(optindex) = -(opt(optindex) = 0) IF optindex = 1 THEN GOSUB 1905 END IF END IF IF optindex = 4 THEN IF keyval(77) > 1 AND ticks > 20 THEN ticks = ticks - 10 IF keyval(75) > 1 AND ticks < 200 THEN ticks = ticks + 10 END IF copypage 2, dpage textcolor 7, 0 FOR i = 0 TO 4 printstr mess$(42 + i * 2 + opt(i), lang), 170, 45 + i * 20, dpage NEXT i textcolor 94, 0 printstr CHR$(15), 220 - ticks / 5, 45 + 80, dpage printstr mess$(37 + optindex, lang), 100, 45 + optindex * 20, dpage textcolor 15, 0 printstr mess$(42 + optindex * 2 + opt(optindex), lang), 170, 45 + optindex * 20, dpage GOSUB 1930 SWAP vpage, dpage: setvispage vpage dowait GOTO 130 140 IF opt(0) * 160 <> vlad THEN GOSUB 1910 END IF lang = opt(2) GOTO 100 runtutorial: 'Tutorial tutcount = 0: tctr = 0 loadpage gn$, 4, 2 IF opt(0) = 0 THEN toon = 6660 ELSE toon = 7256 GOSUB 1935 tck = 120 DO setwait tmr(), tck setkeys IF keyval(1) > 1 OR keyval(28) > 1 OR keyval(-1) > 0 THEN EXIT DO IF keyval(72) > 0 THEN tck = 60 ELSE IF keyval(80) > 0 THEN tck = 190 ELSE tck = 120 copypage 2, dpage textcolor 13, 0 IF tutcount < 290 THEN tmp$ = mess$(136 + opt(0) * 10 + INT((tutcount + 10) / 30), 0) tmp2$ = mess$(136 + opt(0) * 10 + INT((tutcount + 10) / 30), 1) printstr tmp$, 160 - LEN(tmp$) * 4, 60, dpage printstr tmp2$, 160 - LEN(tmp2$) * 4, 72, dpage END IF IF tutcount > 80 AND tutcount < 96 THEN textcolor 64 + tutcount - 80, 0: printstr CHR$(7), 260, 72, dpage IF tutcount > 95 AND tutcount < 110 THEN textcolor 15, 0: printstr CHR$(7), 260, 72, dpage GOSUB 1930 SWAP vpage, dpage: setvispage vpage dowait tutcount = tutcount + 1 LOOP WHILE tutcount < 300 AND tctr = 0 RETRACE 220 fadeto 0, 0, 0 IF opt(3) = 1 THEN 'custom levels level_file = "custom.dat" lvl = 1 ELSE 'Open normal level file level_file = "levels.dat" IF opt(0) = 1 THEN 'vlad lvl = 21 ELSE 'bob lvl = 1 END IF END IF IF startl > 0 THEN lvl = startl: startl = 0 lives = 3: gotlife = 0: tspd = 4: bobpic = 0: invis = 0: rcm = 0: shdw = 0: vladp = opt(0) * 240 nxlf& = 1500: scr& = 0: bat = 0: cheat = 0 FOR i = 0 TO 9 gkills(i) = 0 NEXT i 223 FOR i = 0 TO plindex: pl(i) = 0: rp(i) = 10: NEXT i FOR i = 1 TO cb: bt(i) = 0: rb(i) = 15: NEXT i dirz = 1: plindex = 0: rs = 0: rn = 0: cb = 0: sh = 0: bw = 0: sn = 0: wn = 0: ln = 0: lg = 0: xw = 0: wbx = 0 levelloader = STRING(128, 0) OPEN data_file(level_file) FOR BINARY AS #1 GET #1, 1 + (lvl - 1) * 128, levelloader CLOSE #1 SPMX = ASC(MID(levelloader, 121, 1)) SPMY = ASC(MID(levelloader, 122, 1)) lflg = ASC(MID(levelloader, 123, 1)) ltm = ASC(MID(levelloader, 124, 1)) btyp = ASC(MID(levelloader, 125, 1)) bgol = ASC(MID(levelloader, 126, 1)) IF lvl > 40 OR level_file = "custom.dat" THEN IF lflg AND 2 THEN vlad = 160: vladp = 240: whvc = 23: opt(0) = 1 ELSE vlad = 0: vladp = 0: whvc = 0: opt(0) = 0 END IF GOSUB 1915 END IF IF gotlife = 1 THEN SPMX = -1 carrotcount = 0 FOR j = 1 TO 12 FOR i = 1 TO 10 map(i * 2 - 1, j) = ASC(MID$(levelloader, i + (j - 1) * 10, 1)) AND 15 map(i * 2, j) = (ASC(MID$(levelloader, i + (j - 1) * 10, 1)) AND 240) / 16 IF map(i * 2 - 1, j) = 3 THEN carrotcount += 1 IF map(i * 2, j) = 3 THEN carrotcount += 1 NEXT i NEXT j IF carrotcount = 0 AND (lflg AND 4) = 0 THEN GOTO 1955 225 clearpage 2: vpage = 1: dpage = 0 GOSUB 1800 ct = 0: scode$ = "" FOR i = 1 TO 12: FOR j = 1 TO 20 IF map(j, i) = 2 THEN x = j: y = i IF map(j, i) = 3 THEN ct = ct + 1 IF map(j, i) = 6 THEN plindex = plindex + 1: PX(plindex) = j: PY(plindex) = i: rp(plindex) = 20 IF map(j, i) = 7 THEN rs = 1: srx = j: srY = i IF map(j, i) = 8 THEN cb = cb + 1: bt(cb) = 0: bx(cb) = j: bY(cb) = i: rb(cb) = 15 IF map(j, i) = 9 THEN sh = 1: SX = j: SY = i IF map(j, i) = 10 THEN bw = 1: swx = j: swY = i IF map(j, i) = 15 THEN lg = 1: lgx = j: lgy = i NEXT j: NEXT i exd = 1: eyd = 0: smy = 1: smx = 0: xm = 0: ym = 0: nx = 0: ny = 0: a = (x - 1) * 16: b = (y - 1) * 16 + 7 sp = 1: sr = 25 - opt(0) * 2: rg = sr: cs = 0: rc = 0: raf = lflg AND 8: rst = 0: rdn = 0: lcx = 0: lcy = 0: lgst = 0: lglf = 6: lgap = 0: lst = 0: lspd = 4 btm = 0 IF lflg AND 4 THEN msn = 16 mst = 25 ELSE mst = 0 END IF IF cheat = 1 THEN cheat = 2 ELSE IF cheat = 3 THEN cheat = 1 FOR i = 0 TO 9: kills(i) = 0: NEXT i shotpict = 0 copypage 2, vpage setvispage vpage fadetopal newpal() loadsprite pic(), 0, vlad, 4, 16, 17, 3: smy = 1 setkeys 570 setwait tmr(), ticks: copypage 2, dpage: setkeys SWAP exd, eyd: eyd = -eyd IF keyval(1) > 1 OR keyval(-1) > 0 THEN fadeto 0, 0, 0 GOSUB 1020 lives = 0 GOTO 1955 END IF IF keyval(29) > 0 THEN' CTRL for codes GOSUB 1940 ELSEIF keyval(25) > 1 THEN ' P for pause GOSUB 1920 ELSE scode$ = "" ' blank out the code if not pressing CTRL END IF IF keyval(74) > 1 THEN IF ticks < 200 THEN ticks = ticks + 10 IF keyval(78) > 1 THEN IF ticks > 20 THEN ticks = ticks - 10 nx = 0: ny = 0 IF keyval(UP) > 0 THEN nx = 0: ny = -1: smx = nx: smy = ny IF keyval(RIGHTKEY) > 0 THEN nx = 1: ny = 0: smx = nx: smy = ny IF keyval(LEFTKEY) > 0 THEN nx = -1: ny = 0: smx = nx: smy = ny IF keyval(DOWN) > 0 THEN nx = 0: ny = 1: smx = nx: smy = ny IF keyval(shoot) > 1 AND shotpict = 0 THEN IF rg > sr THEN playsnd 2 + whvc: shpc = 8: hp = 1: shotpict = 1 + opt(0) ELSE trn = 1 IF shotpict > 0 THEN IF shotpict = 1 THEN cs = sp: XS = CINT((a + 16) / 16): YS = CINT((b + 9) / 16): mx = xd * dirz: my = yd * dirz: rg = 0: trn = 0: shotpict = 0 ELSE shotpict = shotpict - 1 IF cs = 0 THEN rg = rg + 1: IF rg = sr THEN playsnd 1 + whvc IF rg > sr THEN rg = sr + 1 IF sr = 0 THEN textcolor 14, 0: printstr CHR$(6 + sp + opt(0) * 3), 312, 0, dpage ELSE textcolor 64 + rg / (sr + 1) * 15, 0: printstr CHR$(6 + sp + opt(0) * 3), 312, 0, dpage IF a / 16 = INT(a / 16) AND (b + 9) / 16 = INT((b + 9) / 16) THEN bspd = tspd x = (a + 16) / 16 y = (b + 9) / 16 xm = nx ym = ny xd = smx yd = smy GOSUB 1960 END IF IF x = 20 AND xm = 1 THEN xm = 0 nx = 0 ELSEIF y = 12 AND ym = 1 THEN ym = 0: ny = 0 END IF IF map(x + xm, y + ym) = 4 AND rc = 0 THEN rca = (x + xm - 1) * 16: rcb = (y + ym) * 16 - 9: rc = 1: rcxm = xm: rcym = ym IF map(x + xm, y + ym) = 4 THEN xm = 0: ym = 0: nx = 0: ny = 0 IF map(x + xm, y + ym) = 14 OR map(x + xm, y + ym) = 12 THEN xm = 0: ym = 0 IF map(x, y) = 0 THEN GOTO 640 IF map(x, y) = 1 THEN map(x, y) = 0: scr& = scr& + 1 IF map(x, y) = 3 THEN map(x, y) = 0: scr& = scr& + 10: ct = ct - 1: kills(0) = kills(0) + 1: playsnd 8 + whvc: IF ct = 0 THEN GOTO 1010 ELSE DC = 1 IF map(x, y) = 5 THEN map(x, y) = 0: scr& = scr& + 20: es = 1: sp = sp - (sp < 3): playsnd 9 + whvc: sr = sr + 2 * (sr > 1) IF map(x, y) = 11 THEN 'FIXME: this one-line compound IF's ELSE clause was ambigious, and I'm not sure if I got it right IF st = 30 THEN map(x, y) = 0 Xwb = x Ywb = y GOSUB 1970 st = 0 scr& = scr& + 5 ELSE st = st + 1 xw = x yw = y a = (x - 1) * 16 b = (y - 1) * 16 + 7 IF st = 1 THEN playsnd 10 + whvc END IF END IF IF map(x, y) = 13 THEN scr& = scr& + 50: sp = 2: sr = 0: map(x, y) = 0: playsnd 9 + whvc IF map(x, y) = 16 THEN scr& = scr& + 25: lives = lives + 1: map(x, y) = 0: msn = 2: mst = 25: playsnd 12 + whvc 640 IF shdw = 1 AND (xm <> 0 OR ym <> 0) THEN drawsprite pic(), 0, bobpal(), 112, a, b, dpage a = a + xm * bspd b = b + ym * bspd IF a < 0 THEN a = 0: ym = 0: xm = 0: nx = xm: ny = ym IF a > 304 THEN a = 304: ym = 0: xm = 0 IF b > 183 THEN b = 183: ym = 0: xm = 0 IF b < 7 THEN b = 7: ym = 0: xm = 0: nx = xm: ny = ym IF hp = 0 THEN hp = 1 ELSE hp = 0 IF yd = -1 THEN loadsprite pic(), 0, vlad, hp + shpc + bobpic, 16, 17, 3 IF xd = -1 THEN loadsprite pic(), 0, vlad, 2 + hp + shpc + bobpic, 16, 17, 3 IF yd = 1 THEN loadsprite pic(), 0, vlad, 4 + hp + shpc + bobpic, 16, 17, 3 IF xd = 1 THEN loadsprite pic(), 0, vlad, 6 + hp + shpc + bobpic, 16, 17, 3 IF shpc > 0 AND hp = 1 THEN shpc = 0 drawsprite digup(), 0, bobpal(), 224 + vladp, a, b, 2 IF invis = 0 THEN drawsprite pic(), 0, bobpal(), vladp + bobpic, a, b, dpage IF shotpict THEN IF yd = 1 THEN loadsprite shot(), 0, vlad, 108 + sp * 4, 16, 17, 3: drawsprite shot(), 0, bobpal(), vladp + 112, a - 4, b - 6 - (sp = 3), dpage IF yd = -1 THEN loadsprite shot(), 0, vlad, 110 + sp * 4, 16, 17, 3: drawsprite shot(), 0, bobpal(), vladp + 112, a + 4 + (sp = 3) * 3, b + 10, dpage IF xd = -1 THEN loadsprite shot(), 0, vlad, 111 + sp * 4, 16, 17, 3: drawsprite shot(), 0, bobpal(), vladp + 112, a + 13, b + 1 - (sp = 3) * 4, dpage IF xd = 1 THEN loadsprite shot(), 0, vlad, 109 + sp * 4, 16, 17, 3: drawsprite shot(), 0, bobpal(), vladp + 112, a - 13, b + 1 + (sp = 3) * 3, dpage END IF IF rc = 0 THEN GOTO 700 IF rc = 1 THEN rcx = rca / 16 + 1: rcy = (rcb + 9) / 16 q = map(rcx + rcxm, rcy + rcym) IF (q > 10 AND q <> 15) OR (q > 2 AND q < 6) OR q = 1 THEN rc = 0: GOTO 700 GOSUB 1850 rc = 2 rca = rca + rcxm * 8: rcb = rcb + rcym * 8 ELSE rca = rca + rcxm * 8: rcb = rcb + rcym * 8 rcx = rca / 16 + 1: rcy = (rcb + 9) / 16 GOSUB 1855 rc = 1 IF rcm = 0 THEN rc = 0 END IF drawsprite cabag(), 0, bobpal(), 144 + vladp, rca, rcb, dpage 700 IF shield = 1 AND cs < 1 AND rg > sr THEN cs = -1: mx = exd: my = eyd: XS = CINT((a + 16) / 16): YS = CINT((b + 9) / 16) IF cs = 0 THEN GOTO 820 XS = XS + mx: YS = YS + my IF trn = 1 AND sp = 3 THEN XS = XS - mx: YS = YS - my: trn = 0: SWAP mx, my: bf = INT(RND(1) * 2) * 2 - 1: mx = mx * bf: my = my * bf: IF map(XS + mx, YS + my) <> 0 THEN mx = -mx: my = -my: IF map(XS + mx, YS + my) <> 0 THEN SWAP mx, my: mx = bf _ * mx: my = bf * my IF XS < 1 OR XS > 20 OR YS < 1 OR YS > 12 THEN cs = 0: GOTO 820 IF map(XS, YS) = 1 THEN cs = 0 IF sp > 1 THEN map(XS, YS) = 0 GOSUB 1980 END IF END IF IF map(XS, YS) = 4 THEN cs = 0 IF sp > 1 THEN map(XS, YS) = 0 scr& = scr& + 2 GOSUB 1980 END IF END IF IF map(XS, YS) = 3 OR map(XS, YS) = 5 OR map(XS, YS) = 14 THEN cs = 0 IF map(XS, YS) = 11 THEN cs = 0 map(XS, YS) = 0 Xwb = XS Ywb = YS GOSUB 1970 IF vlad > 0 THEN playsnd 5 + whvc END IF IF map(XS, YS) = 13 THEN mx = mx * -1: my = my * -1 IF cs = 0 AND XS = SPMX AND YS = SPMY THEN GOSUB 1860 END IF sa = (XS - 1) * 16 IF vlad > 0 AND sp = 3 THEN sxd = exd: syd = eyd ELSE sxd = mx: syd = my IF syd = -1 THEN loadsprite shot(), 0, vlad, 108 + sp * 4, 16, 17, 3 IF sxd = -1 THEN loadsprite shot(), 0, vlad, 109 + sp * 4, 16, 17, 3 IF syd = 1 THEN loadsprite shot(), 0, vlad, 110 + sp * 4, 16, 17, 3 IF sxd = 1 THEN loadsprite shot(), 0, vlad, 111 + sp * 4, 16, 17, 3 drawsprite shot(), 0, bobpal(), 112 + vladp, sa, (YS - 1) * 16 + 7, dpage 820 FOR i = 1 TO plindex IF pl(i) = 0 THEN IF rp(i) = 30 THEN pl(i) = 1: xp(i) = PX(i): yp(i) = PY(i): ap(i) = (xp(i) - 1) * 16: bp(i) = (yp(i) - 1) * 16 + 7: pxm(i) = 0: pym(i) = 0 ELSE rp(i) = rp(i) + 1: GOTO 910 IF ABS(ap(i) - a) < 33 AND ABS(bp(i) - b) < 33 AND rp(i) = 30 THEN GOTO 910 ELSE rp(i) = 0 IF map(xp(i), yp(i)) = 4 THEN plpdd(i) = 8: ppic(i) = 0: kills(1) = kills(1) + 1: playsnd 3 + whvc: scr& = scr& + 1 IF map(xp(i), yp(i)) = 11 THEN xw = xp(i): yw = yp(i): GOTO 890 q = map(xp(i) + pxm(i), yp(i) + pym(i)): IF q = 1 OR (q > 2 AND q < 6) OR q > 12 THEN GOTO 890 ap(i) = ap(i) + 2 * pxm(i): bp(i) = bp(i) + 2 * pym(i) 890 IF ap(i) / 16 = INT(ap(i) / 16) AND (bp(i) + 9) / 16 = INT((bp(i) + 9) / 16) THEN xp(i) = (ap(i) + 16) / 16: yp(i) = (bp(i) + 9) / 16 ELSE GOTO 900 db1 = x - xp(i): db2 = y - yp(i): IF db1 = 0 AND db2 = 0 THEN GOTO 1950 ELSE IF ABS(db1) > ABS(db2) THEN pxm(i) = SGN(db1): pym(i) = 0 ELSE pym(i) = SGN(db2): pxm(i) = 0 900 IF (ap(i) + 16) / 16 - .51 < XS AND (ap(i) + 16) / 16 + .51 > XS AND (bp(i) + 9) / 16 + .51 > YS AND (bp(i) + 9) / 16 - .51 < YS AND cs <> 0 THEN plpdd(i) = 8: ppic(i) = 1: scr& = scr& + 2: kills(1) = kills(1) + 1: playsnd 3 + whvc: IF sp _ <> 2 THEN cs = 0: rg = 0 IF ABS(ap(i) - a) < 9 AND ABS(bp(i) - b) < 9 AND plpdd(i) = 0 THEN GOTO 1950 IF ABS(ap(i) - awb) < 5 AND ABS(bp(i) - bwb) < 5 AND bw = 1 THEN pl(i) = 0: rp(i) = 0: playsnd 3 + whvc IF rc > 0 AND ABS(ap(i) - rca) < 16 AND ABS(bp(i) - rcb) < 16 THEN plpdd(i) = 8: ppic(i) = 0: scr& = scr& + 4: kills(1) = kills(1) + 1: playsnd 3 + whvc IF ppic(i) = 0 THEN ppic(i) = 1 ELSE ppic(i) = 0 IF pym(i) = -1 THEN loadsprite plip(), 0, vlad, 16 + ppic(i) + plpdd(i), 16, 17, 3 IF pxm(i) = -1 THEN loadsprite plip(), 0, vlad, 18 + ppic(i) + plpdd(i), 16, 17, 3 IF pym(i) = 1 THEN loadsprite plip(), 0, vlad, 20 + ppic(i) + plpdd(i), 16, 17, 3 IF pxm(i) = 1 THEN loadsprite plip(), 0, vlad, 22 + ppic(i) + plpdd(i), 16, 17, 3 IF plpdd(i) > 0 AND ppic(i) = 1 THEN pl(i) = 0: rp(i) = 0: plpdd(i) = 0 drawsprite plip(), 0, bobpal(), 16 + vladp, ap(i), bp(i), dpage 910 NEXT i IF sh = 0 THEN GOTO 970 IF sn = 0 THEN IF rsh = 30 THEN sn = 1: shx = SX: shy = SY: ash = (shx - 1) * 16: bsh = (shy - 1) * 16 + 7 ELSE rsh = rsh + 1: GOTO 970 IF ABS(ash - a) < 29 AND ABS(bsh - b) < 29 AND rsh = 30 THEN GOTO 970 ELSE rsh = 0 IF shxm = 0 AND shym = 0 THEN db1 = x - shx: db2 = y - shy: IF ABS(db1) > ABS(db2) THEN shxm = SGN(db1): shym = 0 ELSE shym = SGN(db2): shxm = 0 IF ash / 16 = INT(ash / 16) AND (bsh + 9) / 16 = INT((bsh + 9) / 16) THEN shx = (ash + 16) / 16: shy = (bsh + 9) / 16 ELSE GOTO 955 bf = shx + shxm: b2 = shy + shym: IF map(bf, b2) <> 1 AND (map(bf, b2) < 4 OR map(bf, b2) > 5) THEN shxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF shxm = 0 THEN shym = INT(RND(1) * 2) * 2 - 1 ELSE shym = 0 db1 = x - shx: db2 = y - shy: IF ABS(db1) + ABS(db2) < 3 THEN IF ABS(db1) > ABS(db2) THEN shxm = db1: shym = 0 ELSE shym = db2: shxm = 0 bf = shx + shxm: b2 = shy + shym: IF map(bf, b2) > 1 AND (map(bf, b2) < 4 OR map(bf, b2) > 5) THEN shxm = 0: shym = 0: GOTO 960 955 bf = shx + shxm: b2 = shy + shym: IF bf < 1 OR bf > 20 OR b2 < 1 OR b2 > 12 THEN shxm = 0: shym = 0 ELSE ash = ash + shxm * 2: bsh = bsh + shym * 2 960 IF map(shx, shy) = 11 THEN Xwb = shx Ywb = shy GOSUB 1970 END IF IF map(shx, shy) = 3 THEN ct = ct - 1: IF ct = 0 THEN GOTO 1010 map(shx, shy) = 0 GOSUB 1830 IF ABS(ash - a) < 9 AND ABS(bsh - b) < 9 AND shdd = 0 THEN GOTO 1950 IF (ash + 16) / 16 - .51 < XS AND (ash + 16) / 16 + .51 > XS AND (bsh + 9) / 16 + .51 > YS AND (bsh + 9) / 16 - .51 < YS AND cs <> 0 THEN shdd = 8: shp = 1: scr& = scr& + 4: kills(3) = kills(3) + 1: playsnd 4 + whvc: IF vlad = 0 OR sp <> 2 _ THEN cs = 0: rg = 0 IF rc > 0 AND ABS(ash - rca) < 16 AND ABS(bsh - rcb) < 16 THEN rc = 0 IF shp = 0 THEN shp = 1 ELSE shp = 0 IF shym < 0 THEN loadsprite shark(), 0, vlad, 48 + shp + shdd, 16, 17, 3 IF shxm < 0 THEN loadsprite shark(), 0, vlad, 50 + shp + shdd, 16, 17, 3 IF shym > 0 THEN loadsprite shark(), 0, vlad, 52 + shp + shdd, 16, 17, 3 IF shxm > 0 THEN loadsprite shark(), 0, vlad, 54 + shp + shdd, 16, 17, 3 drawsprite digup(), 0, bobpal(), 224 + vladp, ash, bsh, 2 IF shdd > 0 AND shp = 1 THEN sn = 0: rsh = 0: shdd = 0 drawsprite shark(), 0, bobpal(), 48 + vladp, ash, bsh, dpage 970 IF cb = 0 THEN GOTO 981 FOR i = 1 TO cb IF bt(i) = 0 THEN IF rb(i) = 40 THEN bugdd(i) = 0: bt(i) = 1: cbr(i) = 2: cbx(i) = bx(i): cby(i) = bY(i): abug(i) = (cbx(i) - 1) * 16: bbug(i) = (cby(i) - 1) * 16 + 7 ELSE rb(i) = rb(i) + 1: GOTO 980 IF ABS(abug(i) - a) < 43 AND ABS(bbug(i) - b) < 43 AND rb(i) = 40 THEN GOTO 980 ELSE rb(i) = 0 IF cbxm(i) = 0 AND cbym(i) = 0 THEN db1 = x - cbx(i): db2 = y - cby(i): IF ABS(db1) > ABS(db2) THEN cbxm(i) = SGN(db1): cbym(i) = 0 ELSE cbym(i) = SGN(db2): cbxm(i) = 0 IF map(cbx(i), cby(i)) = 11 THEN xw = cbx(i): yw = cby(i): abug(i) = (cbx(i) - 1) * 16: bbug(i) = (cby(i) - 1) * 16 + 7 IF abug(i) / 16 = INT(abug(i) / 16) AND (bbug(i) + 9) / 16 = INT((bbug(i) + 9) / 16) THEN cbx(i) = (abug(i) + 16) / 16: cby(i) = (bbug(i) + 9) / 16 ELSE GOTO 975 bf = cbx(i) + cbym(i): b2 = cby(i) + cbxm(i): IF map(bf, b2) = 0 OR map(bf, b2) = 4 THEN cbxm(i) = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF cbxm(i) = 0 THEN cbym(i) = INT(RND(1) * 2) * 2 - 1 ELSE cbym(i) = 0 bf = cbx(i) - cbym(i): b2 = cby(i) - cbxm(i): IF map(bf, b2) = 0 OR map(bf, b2) = 4 THEN cbxm(i) = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF cbxm(i) = 0 THEN cbym(i) = INT(RND(1) * 2) * 2 - 1 ELSE cbym(i) = 0 db1 = x - cbx(i): db2 = y - cby(i): IF ABS(db1) < 3 AND ABS(db2) < 3 THEN cbr(i) = 4: IF ABS(db1) > ABS(db2) THEN cbxm(i) = SGN(db1): cbym(i) = 0 ELSE cbym(i) = SGN(db2): cbxm(i) = 0 bf = cbx(i) + cbxm(i): b2 = cby(i) + cbym(i): IF (map(bf, b2) > 0 AND map(bf, b2) <> 4 AND map(bf, b2) < 6) OR map(bf, b2) > 12 THEN cbr(i) = 2: cbxm(i) = 0: cbym(i) = 0 975 bf = cbx(i) + cbxm(i): b2 = cby(i) + cbym(i): IF bf < 1 OR bf > 20 OR b2 < 1 OR b2 > 12 THEN cbxm(i) = 0: cbym(i) = 0 ELSE abug(i) = abug(i) + cbxm(i) * cbr(i): bbug(i) = bbug(i) + cbym(i) * cbr(i) IF map(cbx(i), cby(i)) = 4 THEN map(cbx(i), cby(i)) = 0 cbr(i) = 4 abug(i) = (cbx(i) - 1) * 16 bbug(i) = (cby(i) - 1) * 16 + 7 bst(i) = 1 GOSUB 1840 END IF IF (abug(i) + 16) / 16 - .51 < XS AND (abug(i) + 16) / 16 + .51 > XS AND (bbug(i) + 9) / 16 + .51 > YS AND (bbug(i) + 9) / 16 - .51 < YS AND cs <> 0 THEN bugdd(i) = 8: cbp(i) = 1: scr& = scr& + 3: kills(2) = kills(2) + 1: playsnd 5 + whvc: _ IF sp <> 2 THEN cs = 0: rg = 0 IF rc > 0 AND ABS(abug(i) - rca) < 16 AND ABS(bbug(i) - rcb) < 16 THEN bugdd(i) = 8: cbp(i) = 0: scr& = scr& + 5: kills(2) = kills(2) + 1: playsnd 5 + whvc IF ABS(abug(i) - a) < 5 AND ABS(bbug(i) - b) < 5 AND bugdd(i) = 0 THEN GOTO 1950 IF ABS(abug(i) - awb) < 5 AND ABS(bbug(i) - bwb) < 5 AND bw = 1 THEN bt(i) = 0: playsnd 5 + whvc IF cbp(i) = 0 THEN cbp(i) = 1 ELSE cbp(i) = 0 loadsprite bug(), 0, vlad, 36 + bugdd(i), 16, 17, 3 IF cbym(i) = -1 THEN loadsprite bug(), 0, vlad, 32 + cbp(i) + bugdd(i), 16, 17, 3 IF cbxm(i) = -1 THEN loadsprite bug(), 0, vlad, 34 + cbp(i) + bugdd(i), 16, 17, 3 IF cbym(i) = 1 THEN loadsprite bug(), 0, vlad, 36 + cbp(i) + bugdd(i), 16, 17, 3 IF cbxm(i) = 1 THEN loadsprite bug(), 0, vlad, 38 + cbp(i) + bugdd(i), 16, 17, 3 IF bugdd(i) > 0 AND cbp(i) = 1 THEN bugdd(i) = 0: bt(i) = 0: rb(i) = 0: drawsprite bug(), 0, bobpal(), 32 + vladp, abug(i), bbug(i), dpage 980 NEXT i 981 IF rs = 0 THEN GOTO 990 IF rn = 0 THEN IF rr = 35 THEN rst = 8: rn = 1: rX = srx: rY = srY: ar = (rX - 1) * 16: br = (rY - 1) * 16 + 7: rr = 0 ELSE rr = rr + 1: GOTO 990 IF rxm = 0 AND rym = 0 THEN db1 = x - rX: db2 = y - rY: IF ABS(db1) > ABS(db2) THEN rxm = SGN(db1): rym = 0 ELSE rym = SGN(db2): rxm = 0 IF rst > 0 THEN rst = rst - 1: GOTO 986 ELSE rdd = 0: rcab = 0 IF INT(RND(1) * 28) = 1 THEN rst = 1: IF raf > 0 THEN raf = raf - 1 IF map(rX, rY) = 11 THEN xw = rX: yw = rY: ar = (rX - 1) * 16: br = (rY - 1) * 16 + 7: IF opt(0) = 0 THEN raf = -2 ELSE raf = 1 IF ar / 16 = INT(ar / 16) AND (br + 9) / 16 = INT((br + 9) / 16) THEN rX = (ar + 16) / 16 rY = (br + 9) / 16 GOSUB 1820 ELSE GOTO 985 END IF bf = rX + rym: b2 = rY + rxm: IF map(bf, b2) = 0 OR map(bf, b2) = 3 THEN rxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF rxm = 0 THEN rym = INT(RND(1) * 2) * 2 - 1 ELSE rym = 0 bf = rX - rym: b2 = rY - rxm: IF map(bf, b2) = 0 OR map(bf, b2) = 3 THEN rxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF rxm = 0 THEN rym = INT(RND(1) * 2) * 2 - 1 ELSE rym = 0 db1 = x - rX: db2 = y - rY: IF ABS(db1) < 2 + raf AND ABS(db2) < 2 + raf THEN IF ABS(db1) > ABS(db2) THEN rxm = SGN(db1): rym = 0 ELSE rym = SGN(db2): rxm = 0 bf = rX + rxm: b2 = rY + rym: IF map(bf, b2) = 4 OR (map(bf, b2) = 1 AND raf = 0) OR map(bf, b2) > 12 THEN rxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF rxm = 0 THEN rym = INT(RND(1) * 2) * 2 - 1 ELSE rym = 0 bf = rX + rxm: b2 = rY + rym: IF map(bf, b2) = 4 OR map(bf, b2) > 12 THEN rxm = 0: rym = 0 985 bf = rX + rxm: b2 = rY + rym: IF bf < 1 OR bf > 20 OR b2 < 1 OR b2 > 12 THEN rxm = 0: rym = 0 ELSE ar = ar + rxm * 4: br = br + rym * 4 IF map(rX, rY) = 3 THEN raf = raf + 1: rst = rst + 3: ct = ct - 1: playsnd 8 + whvc - vlad / 80: IF ct = 0 THEN GOTO 1010 ELSE map(rX, rY) = 0: scr& = scr& - 15 IF map(rX, rY) = 4 THEN raf = 11: rst = 8: rdd = 8: map(rX, rY) = 0: kills(4) = kills(4) + 1: rcab = 1: playsnd 6 + whvc: drawsprite digup(), 0, bobpal(), 224 + vladp, (rX - 1) * 16, (rY - 1) * 16 + 7, 2 IF map(rX, rY) = 1 THEN map(rX, rY) = 0 IF map(rX, rY) = 12 THEN raf = raf + 4 rdn = 2 GOSUB 1825 END IF IF ABS(ar - a) < 9 AND ABS(br - b) < 9 THEN GOTO 1950 IF ABS(ar - awb) < 5 AND ABS(br - bwb) < 5 AND bw = 1 THEN rn = 0 raf = 0 rr = 0 strnum = 0 scr& = scr& + 8 kills(5) = kills(5) + 1 playsnd 6 + whvc GOSUB 1825 END IF IF (ar + 16) / 16 - .51 < XS AND (ar + 16) / 16 + .51 > XS AND (br + 9) / 16 + .51 > YS AND (br + 9) / 16 - .51 < YS AND cs <> 0 THEN raf = raf + 6: rst = 16: rdd = 8: scr& = scr& + 18: kills(4) = kills(4) + 1: playsnd 6 + whvc: IF sp <> 2 _ THEN cs = 0: rg = 0 IF rc > 0 AND ABS(ar - rca) < 16 AND ABS(br - rcb) < 16 THEN raf = 11: rst = 8: rdd = 8: rc = 0: kills(4) = kills(4) + 1: rcab = 1: scr& = scr& + 20: playsnd 6 + whvc 986 IF rpnum = 0 THEN rpnum = 1 ELSE rpnum = 0 IF rym = -1 THEN loadsprite shrew(), 0, vlad, 64 + rpnum + rdd, 16, 17, 3 IF rxm = -1 THEN loadsprite shrew(), 0, vlad, 66 + rpnum + rdd, 16, 17, 3 IF rym = 1 THEN loadsprite shrew(), 0, vlad, 68 + rpnum + rdd, 16, 17, 3 IF rxm = 1 THEN loadsprite shrew(), 0, vlad, 70 + rpnum + rdd, 16, 17, 3 IF rn = 1 THEN drawsprite digup(), 0, bobpal(), 224 + vladp, ar, br, 2 drawsprite shrew(), 0, bobpal(), 64 + vladp, ar, br, dpage IF rcab = 1 THEN drawsprite cabag(), 0, bobpal(), 144 + vladp, ar, br - 6, dpage 990 IF bw = 0 THEN GOTO 995 IF wn = 0 THEN wn = 1: wbx = swx: wby = swY: awb = (wbx - 1) * 16: bwb = (wby - 1) * 16 + 7 IF wbxm = 0 AND wbym = 0 THEN db1 = x - wbx: db2 = y - wby: IF ABS(db1) > ABS(db2) THEN wbxm = SGN(db1): wbym = 0 ELSE wbym = SGN(db2): wbxm = 0 IF wst > 0 THEN wst = wst - 1: GOTO 994 ELSE sdd = 0 IF awb / 16 = INT(awb / 16) AND (bwb + 9) / 16 = INT((bwb + 9) / 16) THEN wbx = (awb + 16) / 16: wby = (bwb + 9) / 16 ELSE GOTO 992 IF INT(RND(1) * 10) = 1 THEN map(wbx, wby) = 11 GOSUB 1810 END IF bf = wbx + wbym: b2 = wby + wbxm: IF map(bf, b2) = 0 OR (map(bf, b2) > 5 AND map(bf, b2) < 13) THEN wbxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF wbxm = 0 THEN wbym = INT(RND(1) * 2) * 2 - 1 ELSE wbym = 0 bf = wbx - wbym: b2 = wby - wbxm: IF map(bf, b2) = 0 OR (map(bf, b2) > 5 AND map(bf, b2) < 13) THEN wbxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF wbxm = 0 THEN wbym = INT(RND(1) * 2) * 2 - 1 ELSE wbym = 0 IF xw <> 0 THEN bws = 8: db1 = xw - wbx: db2 = yw - wby: IF SGN(db1) <> wbxm AND SGN(db2) <> wbym THEN IF ABS(db1) > ABS(db2) THEN wbxm = SGN(db1): wbym = 0 ELSE wbym = SGN(db2): wbxm = 0 IF xw = 0 THEN bws = 2 ELSEIF (INT(wbx) = xw OR wbx = xw - .0625) AND wby = yw THEN xw = 0 wst = 3 awb = (wbx - 1) * 16 bwb = (wby - 1) * 16 + 7 IF map(wbx, wby) <> 12 THEN map(wbx, wby) = 0 GOSUB 1805 END IF END IF bf = wbx + wbxm: b2 = wby + wbym: IF (map(bf, b2) > 0 AND map(bf, b2) < 6) OR map(bf, b2) > 12 THEN wbxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF wbxm = 0 THEN wbym = INT(RND(1) * 2) * 2 - 1 ELSE wbym = 0 bf = wbx + wbxm: b2 = wby + wbym: IF (map(bf, b2) > 0 AND map(bf, b2) < 6) OR map(bf, b2) > 12 THEN wbxm = 0: wbym = 0 992 bf = wbx + wbxm: b2 = wby + wbym: IF bf < 1 OR bf > 20 OR b2 < 1 OR b2 > 12 THEN wbxm = 0: wbym = 0 ELSE awb = awb + wbxm * bws: bwb = bwb + wbym * bws IF ABS(alg - awb) < 5 AND ABS(blg - bwb) < 5 AND lg > 0 THEN playsnd 7 + whvc: sdd = 8: wst = 16 IF ABS(awb - a) < 9 AND ABS(bwb - b) < 9 THEN GOTO 1950 IF (awb + 16) / 16 - .51 < XS AND (awb + 16) / 16 + .51 > XS AND (bwb + 9) / 16 + .51 > YS AND (bwb + 9) / 16 - .51 < YS AND cs <> 0 THEN playsnd 7 + whvc: sdd = 8: wst = 16: IF sp <> 2 THEN cs = 0: rg = 0 994 IF wbp = 0 THEN wbp = 1 ELSE wbp = 0 IF wbym = -1 THEN loadsprite spid(), 0, vlad, 80 + wbp + sdd, 16, 17, 3 IF wbxm = -1 THEN loadsprite spid(), 0, vlad, 82 + wbp + sdd, 16, 17, 3 IF wbym = 1 THEN loadsprite spid(), 0, vlad, 84 + wbp + sdd, 16, 17, 3 IF wbxm = 1 THEN loadsprite spid(), 0, vlad, 86 + wbp + sdd, 16, 17, 3 drawsprite spid(), 0, bobpal(), 80 + vladp, awb, bwb, dpage 995 IF lg = 0 THEN GOTO 998 IF ln = 0 THEN ln = 1: alg = (lgx - 1) * 16: blg = (lgy - 1) * 16 + 7 IF lst > 0 THEN lst = lst - 1: GOTO 997 IF alg / 16 = INT(alg / 16) AND (blg + 9) / 16 = INT((blg + 9) / 16) THEN lgx = (alg + 16) / 16: lgy = (blg + 9) / 16 ELSE 996 IF vlad = 0 THEN IF lspd = 4 THEN db1 = x - lgx: db2 = y - lgy: IF ABS(db1) > ABS(db2) THEN lgxm = SGN(db1): lgym = 0 ELSE lgym = SGN(db2): lgxm = 0 IF db1 = 0 XOR db2 = 0 THEN lspd = 8 ELSE db1 = x - lgx: db2 = y - lgy: bf = ABS(db1): b2 = ABS(db2): IF bf > 0 AND b2 > 0 AND lgap = 1 THEN SWAP bf, b2 IF bf > b2 THEN lgxm = SGN(db1): lgym = 0 ELSE lgym = SGN(db2): lgxm = 0 IF (bf = 0 OR b2 = 0) AND lgap = 1 THEN lgap = 2: lst = 8: GOTO 997 END IF IF map(lgx, lgy) = 4 THEN GOSUB 1965 map(lgx, lgy) = 0 IF vlad = 0 THEN lgst = 2 lst = 5 lglf = lglf - 1 ELSE lgap = 1 lspd = 2 END IF END IF bf = lgx + lgym: b2 = lgy + lgxm: tmp = map(bf, b2) IF tmp = 4 AND (vlad = 0 OR lgap > 0) THEN tmp = 1 IF tmp = 4 OR tmp = 5 OR tmp = 16 THEN SWAP lgym, lgxm bf = lgx - lgym: b2 = lgy - lgxm: tmp = map(bf, b2) IF tmp = 4 AND (vlad = 0 OR lgap > 0) THEN tmp = 1 IF tmp = 4 OR tmp = 5 OR tmp = 16 THEN SWAP lgym, lgxm: lgym = -lgym: lgxm = -lgxm bf = lgx + lgxm: b2 = lgy + lgym: tmp = map(bf, b2) IF tmp = 4 AND (vlad = 0 OR lgap > 0) THEN tmp = 1 IF tmp = 1 OR tmp = 3 OR (tmp > 11 AND tmp < 15) THEN IF lspd = 8 THEN lgst = 5: lst = 2: lgp = 1: GOTO 997 ELSE lgxm = (INT(RND(1) * 2) * 2 - 1) * (INT(RND(1) * 2) - 1): IF lgxm = 0 THEN lgym = INT(RND(1) * 2) * 2 - 1 ELSE lgym = 0 bf = lgx + lgxm: b2 = lgy + lgym: tmp = map(bf, b2) IF tmp = 4 AND (vlad = 0 OR lgap > 0) THEN tmp = 1 IF tmp = 1 OR tmp = 3 OR (tmp > 11 AND tmp < 15) THEN lgxm = 0: lgym = 0 IF map(lgx, lgy) = 5 OR map(lgx, lgy) = 16 THEN map(lgx, lgy) = 0 GOSUB 1965 lglf = lglf + 1 END IF 996 bf = lgx + lgxm: b2 = lgy + lgym: IF bf < 1 OR bf > 20 OR b2 < 1 OR b2 > 12 THEN lgxm = 0: lgym = 0 ELSE alg = alg + lgxm * lspd: blg = blg + lgym * lspd IF ABS(alg - a) < 5 AND ABS(blg - b) < 5 THEN GOTO 1950 997 IF (alg + 16) / 16 - .51 < XS AND (alg + 16) / 16 + .51 > XS AND (blg + 9) / 16 + .51 > YS AND (blg + 9) / 16 - .51 < YS AND cs <> 0 THEN playsnd 6 + whvc: lgst = 1: lst = 6: lglf = lglf - 1: IF sp <> 2 THEN cs = 0: rg = 0 IF rc > 0 AND ABS(alg - rca) < 16 AND ABS(blg - rcb) < 16 THEN lst = 10: lgst = 2: lglf = lglf - 1: rc = 0: scr& = scr& + vlad / 10: playsnd 6 + whvc IF lgst THEN lgd = 8 ELSE lgd = 0: IF lgp = 0 THEN lgp = 1 ELSE lgp = 0 IF lgst = 5 THEN lspd = 4: lgp = lgp XOR 1: IF lst = 0 THEN lgst = 0: lgd = 0 IF lgst = 4 THEN lspd = 4: lgd = 0: lgst = 0: lcx = lgx: lcy = lgy: lcxm = lgxm: lcym = lgym IF lgst = 1 THEN lgp = 0: IF lst = 0 THEN IF lglf < 1 THEN lgst = 3: lst = 6: lgap = 0 ELSE lgst = 0: lspd = 4: alg = INT(alg / 4) * 4: blg = INT((blg - 7) / 4) * 4 + 7 IF lgst = 2 THEN lgp = 1: IF lst = 0 THEN IF vlad > 0 AND lglf > 0 THEN lgap = 1: lgst = 0: lgd = 0: lspd = 2 ELSE lgst = 1: lst = 1 IF lgst = 3 THEN lgp = 1: IF lst = 0 THEN lg = 0: kills(7) = kills(7) + 1: scr& = scr& + 100 loadsprite lago(), 0, vlad, 100 + lgp + lgd, 16, 17, 3 IF lgym = -1 THEN loadsprite lago(), 0, vlad, 96 + lgp + lgd, 16, 17, 3 IF lgxm = -1 THEN loadsprite lago(), 0, vlad, 98 + lgp + lgd, 16, 17, 3 IF lgym = 1 THEN loadsprite lago(), 0, vlad, 100 + lgp + lgd, 16, 17, 3 IF lgxm = 1 THEN loadsprite lago(), 0, vlad, 102 + lgp + lgd, 16, 17, 3 IF lgap = 1 AND lgym = -1 THEN drawsprite cabag(), 0, bobpal(), 144 + vladp, alg, blg - 1, dpage drawsprite lago(), 0, bobpal(), 96 + vladp, alg, blg, dpage IF lgst = 2 THEN drawsprite cabag(), 0, bobpal(), 144 + vladp, alg, blg - 6, dpage IF lgap = 1 AND lgym >= 0 THEN drawsprite cabag(), 0, bobpal(), 144 + vladp, alg + lgxm, blg, dpage IF lgap = 2 THEN drawsprite cabag(), 0, bobpal(), 144 + vladp, alg, blg - 10, dpage: lgap = 0: lgst = 4 998 IF lcx < 1 THEN GOTO 1000 tmp = map(lcx + lcxm, lcy + lcym) IF lcx = XS AND lcy = YS AND cs > 0 THEN IF sp = 3 THEN lcx = 0: GOTO 1000 ELSE cs = 0: rg = 0: IF sp = 2 THEN lcx = 0: GOTO 1000 IF tmp < 3 OR (tmp > 5 AND tmp < 12) OR temp = 15 THEN lcx = lcx + lcxm: lcy = lcy + lcym ELSE lcd = 1 IF lcx = XS AND lcy = YS AND cs <> 0 THEN IF sp = 3 THEN lcx = 0: GOTO 1000 ELSE cs = 0: rg = 0: IF sp = 2 THEN lcx = 0: GOTO 1000 ELSE lcd = 1 IF lcx > 20 OR lcy < 1 OR lcy > 12 THEN lcx = 0: GOTO 1000 IF tmp = 1 OR tmp = 11 THEN lcd = 1 IF lcxm = 0 AND lcym = 0 THEN lcd = 1 IF (ar + 16) / 16 - .51 < lcx AND (ar + 16) / 16 + .51 > lcx AND (br + 9) / 16 + .51 > lcy AND (br + 9) / 16 - .51 < lcy AND rn = 1 THEN rst = 16: rdd = 8: scr& = scr& + 5: kills(4) = kills(4) + 1: rcab = 1: playsnd 6 + whvc: lcx = 0: GOTO _ 1000 IF (a + 16) / 16 - .51 < lcx AND (a + 16) / 16 + .51 > lcx AND (b + 9) / 16 + .51 > lcy AND (b + 9) / 16 - .51 < lcy THEN GOTO 1950 FOR i = 1 TO plindex IF pl(i) > 0 AND plpdd(i) = 0 THEN IF (ap(i) + 16) / 16 - .51 < lcx AND (ap(i) + 16) / 16 + .51 > lcx AND (bp(i) + 9) / 16 + .51 > lcy AND (bp(i) + 9) / 16 - .51 < lcy THEN plpdd(i) = 8: ppic(i) = 1: playsnd 3 + whvc NEXT i drawsprite cabag(), 0, bobpal(), 144 + vladp, (lcx - 1) * 16, (lcy - 1) * 16 + 7, dpage IF lcd = 1 THEN lcd = 0 GOSUB 1975 lcx = 0 END IF 1000 IF bat = 0 THEN GOTO 1005 IF SPMX = 0 THEN bats = -1 batx = SPMX * 16 - 16: baty = SPMY * 16 - 9 IF bats = 0 THEN batxm = (batx - bata) / 16: batym = (baty - batb) / 16 IF bats = -1 THEN batxm = -4: IF bata < 0 THEN bat = 0: GOTO 1005 IF bats = 1 THEN batxm = SGN(batx - bata): batym = SGN(baty - batb) IF bats > 1 THEN IF bats > 10 THEN bats = -1 ELSE bats = bats + 1 IF batxm = 0 AND batym = 0 THEN IF bats = 0 THEN bats = 1 ELSE IF bats = 1 THEN bats = 2 IF ABS(batxm) > 4 THEN batxm = 4 * SGN(batxm) IF ABS(batym) > 4 THEN batym = 4 * SGN(batym) bata = bata + batxm: batb = batb + batym batp = batp XOR 1 loadsprite pic(), 0, 160, 138 + batp, 16, 17, 3 drawsprite pic(), 0, bobpal(), 240, bata, batb, dpage 1005 textcolor 15, 0: printstr STR$(scr&), 48, 0, dpage printstr STR$(lvl), 184, 0, dpage IF scr& >= nxlf& THEN playsnd 13 + whvc: lives = lives + 1: nxlf& = nxlf& * 2: msn = 2: mst = 25 IF lives > 9 + lang THEN l = 9 + lang ELSE l = lives printstr CHR$(48 + l + lang * 185), 280, 0, dpage IF hat > 0 THEN drawsprite spm(), 0, bobpal(), 192 + vladp, a, b - 12, dpage IF mst > 0 THEN textcolor 15, 9: printstr mess$(msn, lang), 160 - LEN(mess$(msn, lang)) * 4, 96, dpage: mst = mst - 1 IF cheat = 1 THEN textcolor 14, 4: printstr "Cheater Code Used. Naughty Hamster.", 20, 191, dpage IF lflg AND 4 THEN IF mst = 0 THEN mst = 1: msn = 17 + btyp + opt(0) * 8 textcolor 14, 4: btm = btm + 1: btrm = ltm - INT(btm / 8): IF btrm < 1 THEN GOTO 1010 printstr "Time:" + STR$(btrm), 0, 8, dpage IF bgol - kills(btyp) < 1 THEN GOTO 1010 printstr "Left:" + STR$(bgol - kills(btyp)), 248, 8, dpage END IF setvispage dpage: SWAP vpage, dpage dowait GOTO 570 1010 'Beat level bat = 0 playsnd 18 + lvlb + whvc lvlb = lvlb + 1: IF lvlb > 5 THEN lvlb = 1 fademusic 0 fadeto 0, 0, 0 GOSUB 1020 IF lflg AND 4 THEN GOTO 1100 GOTO 1200 1020 'tally FOR i = 0 TO 9 gkills(i) = gkills(i) + kills(i) NEXT i RETRACE 1100 'bonus level textcolor 15, 0 bwin = 0 IF kills(btyp) >= bgol THEN bwin = 1 IF bwin = 0 THEN GOTO 1200 gkills(8) = gkills(8) + 1 loadsprite pic(), 0, vlad, 135, 16, 17, 3 drawsprite pic(), 0, bobpal(), vladp, a, b, 2 FOR i = 0 TO 1 tmp$ = mess$(33 + i, lang) printstr tmp$, 160 - LEN(tmp$) * 4, 90 + 10 * i, 2 NEXT i setvispage 2 fadetopal newpal() setwait tmr(), 1000 dowait shield = 1 fadeto 0, 0, 0 1200 'goto next level gotlife = 0 lvl = lvl + 1 IF level_file = "levels.dat" THEN IF lvl = 51 THEN GOTO 1955 IF lvl = 21 OR lvl = 41 THEN GOSUB 1985 GOTO 1955 END IF END IF lsong = lsong + 1: IF lsong > 2 THEN lsong = 0 IF opt(0) = 0 THEN IF lsong = 1 THEN lsong$ = "tilde" ELSE IF lsong = 2 THEN lsong$ = "arieduet" ELSE lsong$ = "bob" ELSE IF lsong = 1 THEN lsong$ = "babayaga" ELSE IF lsong = 2 THEN lsong$ = "gnome" ELSE lsong$ = "castle" END IF pausesong playsong lsong$: fademusic 15 GOTO 223 1800 'draw level clearpage 2 FOR i = 12 TO 1 STEP -1: FOR j = 20 TO 1 STEP -1 k = (j - 1) * 16: l = (i - 1) * 16 + 7: m = map(j, i) drawsprite dirt(), 0, bobpal(), 224 + vladp, k, l, 2 IF (lflg AND 1) AND m = 1 THEN drawsprite con(), 0, bobpal(), 224 + vladp, k, l, 2 IF m = 0 OR m = 2 OR (m > 5 AND m <> 13) THEN drawsprite dug(), 0, bobpal(), 224 + vladp, k, l, 2 IF m = 3 THEN drawsprite car(), 0, bobpal(), 160 + vladp, k, l, 2 IF m = 4 OR m = 13 THEN drawsprite cabag(), 0, bobpal(), 144 + vladp, k, l, 2 IF m = 5 THEN drawsprite sun(), 0, bobpal(), 176 + vladp, k, l, 2 IF m = 11 THEN drawsprite web(), 0, bobpal(), 208 + vladp, k, l, 2 IF m = 12 THEN drawsprite ded(), 0, bobpal(), 128 + vladp, k, l, 2 IF m = 14 THEN drawsprite con(), 0, bobpal(), 224 + vladp, k, l, 2 IF m = 16 THEN drawsprite spm(), 0, bobpal(), 192 + vladp, k, l, 2 NEXT j: NEXT i textcolor 15, 0 printstr mess$(opt(0), lang), 0, 0, 2 RETRACE 1805 'spider ate drawsprite dug(), 0, bobpal(), 224 + vladp, (wbx - 1) * 16, (wby - 1) * 16 + 7, 2 RETRACE 1810 'spider web drawsprite web(), 0, bobpal(), 208 + vladp, (wbx - 1) * 16, (wby - 1) * 16 + 7, 2 RETRACE 1820 'digging shrew IF rdn > 0 THEN drawsprite dug(), 0, bobpal(), 224 + vladp, (rX - 1) * 16, (rY - 1) * 16 + 7, 2 ELSE rdn = rdn - 1 RETRACE 1825 'dead shrew drawsprite ded(), 0, bobpal(), 128 + vladp, (rX - 1) * 16, (rY - 1) * 16 + 7, 2 map(rX, rY) = 12 RETRACE 1830 'digging shark drawsprite dug(), 0, bobpal(), 224 + vladp, (shx - 1) * 16, (shy - 1) * 16 + 7, 2 RETRACE 1840 'EATING BEETLE drawsprite dug(), 0, bobpal(), 224 + vladp, (cbx(i) - 1) * 16, (cby(i) - 1) * 16 + 7, 2 RETRACE 1850 'erase cabbage drawsprite dug(), 0, bobpal(), 224 + vladp, (rcx - 1) * 16, rcy * 16 - 9, dpage drawsprite dug(), 0, bobpal(), 224 + vladp, (rcx - 1) * 16, rcy * 16 - 9, 2 map(rcx, rcy) = 0 RETRACE 1855 'draw new cabbage drawsprite cabag(), 0, bobpal(), 144 + vladp, (rcx - 1) * 16, rcy * 16 - 9, 2 map(rcx, rcy) = 4 RETRACE 1860 'SPAM APPEARS!!!!!!!!!!!!!!!! GOSUB 1980 map(XS, YS) = 16 gotlife = 1 SPMX = -1 sa = (XS - 1) * 16 rg = sr drawsprite spm(), 0, bobpal(), 192 + vladp, sa, (YS - 1) * 16 + 7, 2 playsnd 11 + whvc RETRACE 1905 'turn off voices IF opt(1) = 0 THEN allow_sound = NO ELSE allow_sound = YES RETRACE 1910 'graphics change IF vlad > 0 THEN vlad = 0 ELSE vlad = 160 IF vladp > 0 THEN vladp = 0 ELSE vladp = 240 whvc = whvc XOR 23 1915 loadsprite ded(), 0, vlad, 124, 16, 17, 3 loadsprite cabag(), 0, vlad, 125, 16, 17, 3 loadsprite car(), 0, vlad, 126, 16, 17, 3 loadsprite sun(), 0, vlad, 127, 16, 17, 3 loadsprite spm(), 0, vlad, 128, 16, 17, 3 loadsprite web(), 0, vlad, 129, 16, 17, 3 loadsprite tore(), 0, vlad, 130, 16, 17, 3 loadsprite dirt(), 0, vlad, 131, 16, 17, 3 loadsprite digup(), 0, vlad, 132, 16, 17, 3 loadsprite dug(), 0, vlad, 133, 16, 17, 3 loadsprite con(), 0, vlad, 134, 16, 17, 3 RETRACE 1920 'pause fadeto INT(RND(1) * 64), INT(RND(1) * 64), INT(RND(1) * 64) lk = getkey fadetopal newpal() RETRACE 1930 'run an animation cycle WHILE cycles < 1 what = get_next_anim(cntr) targ = get_next_anim(cntr) SELECT CASE what CASE 0 ' Reset animation tctr = tctr + 1 GOSUB 1935 cycles = 1 CASE 1 xloc(targ) = get_next_anim(cntr) * 2 yloc(targ) = get_next_anim(cntr) pict(targ) = get_next_anim(cntr) a = get_next_anim(cntr) pal(targ) = (a AND 127) * 16 vld(targ) = (a AND 128) / 128 * 160 CASE 2 pict(targ) = get_next_anim(cntr) CASE 3 xloc(targ) = get_next_anim(cntr) * 2 yloc(targ) = get_next_anim(cntr) CASE 4 xmot(targ) = get_next_anim(cntr) ymotion(targ) = get_next_anim(cntr) a = get_next_anim(cntr) IF (a AND 1) = 1 THEN xmot(targ) = -xmot(targ) IF (a AND 4) = 4 THEN switch(targ) = 0 ELSE switch(targ) = 1 IF (a AND 2) = 2 THEN ymotion(targ) = -ymotion(targ) dist(targ) = get_next_anim(cntr) CASE 5 cycles = targ CASE 6 discardfreq = get_next_anim(cntr) playsnd targ CASE ELSE debug "Unknown animation command " & what & " cntr=" & cntr & " tctr=" & tctr END SELECT WEND FOR i = 0 TO 8 IF pict(i) > 0 THEN loadsprite pic(), 0, vld(i), pict(i), 16, 17, 3 drawsprite pic(), 0, bobpal(), pal(i), xloc(i), yloc(i), dpage END IF IF dist(i) > 0 THEN dist(i) = dist(i) - 1: xloc(i) = xloc(i) + xmot(i): yloc(i) = yloc(i) + ymotion(i): IF switch(i) = 1 THEN pict(i) = pict(i) XOR 1 NEXT i cycles = cycles - 1 RETRACE 1935 'set animation pointer cntr = toon FOR i = 0 TO 8 pict(i) = 0: dist(i) = 0 NEXT i cycles = 0 RETRACE 1940 IF keyval(16) > 1 THEN scr& = scr& + 100: GOTO 1950 IF keyval(59) > 1 THEN IF hat > 0 THEN hat = 0 ELSE msn = 3: mst = 35: hat = 1: playsnd 12 + whvc IF keyval(60) > 1 THEN IF invis > 0 THEN invis = 0 ELSE msn = 4: mst = 35: invis = 1 IF keyval(61) > 1 THEN IF bobpic < 96 THEN msn = 5: mst = 35: bobpic = bobpic + 16 ELSE bobpic = 0 IF keyval(62) > 1 THEN msn = 6: mst = 35: SWAP LEFTKEY, RIGHTKEY: SWAP UP, DOWN IF keyval(63) > 1 THEN msn = 7: mst = 35: x = INT(RND(1) * 20) + 1: y = INT(RND(1) * 12) + 1: a = (x - 1) * 16: b = (y - 1) * 16 + 7 IF keyval(64) > 1 THEN msn = 8 mst = 30 lang = lang XOR 1 opt(2) = lang GOSUB 1800 END IF IF keyval(65) > 1 THEN IF scr& < 2000000 THEN scr& = scr& + 2000000: nxlf& = nxlf& + 2000000: msn = 9: mst = 35 IF keyval(66) > 1 THEN IF rcm = 0 THEN rcm = 1: msn = 10: mst = 35 ELSE rcm = 0 IF keyval(67) > 1 THEN IF shdw = 0 THEN shdw = 1: msn = 11: mst = 25 ELSE shdw = 0 IF keyval(68) > 1 THEN vladp = vladp XOR 240 GOSUB 1800 IF opt(0) <> vladp / 240 THEN msn = 12: mst = 35 END IF IF keyval(87) > 1 THEN msn = 13: mst = 40 IF keyval(88) > 1 THEN ssnum = 0 DO ssfile$ = "bobshot" & ssnum & ".bmp" ssnum + = 1 LOOP UNTIL NOT isfile(ssfile$) screenshot ssfile$, vpage, newpal() END IF IF strgrabber(scode$, 6) THEN scode$ = UCASE(scode$) IF scode$ = "^SPAM$" THEN cheat = 1 scode$ = "" GOSUB oneups END IF IF scode$ = "MOPLIP" THEN scode$ = "" GOSUB plips END IF IF scode$ = "CREDIT" THEN GOSUB 1985 GOTO 100 END IF IF keyval(56) < 1 THEN RETRACE 'cheater codes IF keyval(41) > 1 THEN opt(0) = opt(0) XOR 1 GOSUB 1910 GOSUB 1800 END IF IF keyval(12) > 1 AND tspd > 1 THEN tspd = tspd / 2 IF keyval(13) > 1 AND tspd < 16 THEN cheat = 1: tspd = tspd * 2 IF keyval(51) > 1 AND lvl > 1 AND (lvl < 21 OR lvl > 22) THEN lvl = lvl - 2: cheat = 3: GOTO 1010 IF keyval(52) > 1 THEN cheat = 3: GOTO 1010 IF keyval(14) > 1 THEN cheat = 1: dirz = dirz * -1 IF keyval(2) > 1 THEN cheat = 1: sp = 1: sr = 0: cs = 0 IF keyval(3) > 1 THEN cheat = 1: sp = 2: sr = 0: cs = 0 IF keyval(4) > 1 THEN cheat = 1: sp = 3: sr = 0: cs = 0 IF keyval(31) > 1 THEN IF shield > 0 THEN shield = 0 ELSE cheat = 1: shield = 1: playsnd 9 + whvc IF keyval(48) > 1 THEN bat = 1: bats = 0: bata = 152: batb = 90 RETRACE oneups: FOR i = 1 TO 20: FOR j = 1 TO 12 IF map(i, j) = 1 THEN map(i, j) = 16 NEXT j: NEXT i GOSUB 1800 RETRACE plips: FOR i = 1 TO 20 FOR j = 1 TO 12 IF map(i, j) = 4 AND plindex < 30 THEN map(i, j) = 6 plindex = plindex + 1 PX(plindex) = i PY(plindex) = j rp(plindex) = 30 END IF IF map(i, j) = 1 THEN map(i, j) = 0 NEXT j NEXT i GOSUB 1800 RETRACE 1950 'death shield = 0 playsnd 13 + dvc + whvc dvc = dvc + 1: IF dvc > 5 THEN dvc = 1 fadeto 63, 0, 0 IF lives < 2 THEN fademusic 0 GOSUB 1020 IF lflg AND 4 THEN GOTO 1200 IF gotlife = 0 AND (INT(RND(1) * 2) = 1 OR vlad > 0) THEN bat = 1: bats = 0: batb = 0: bata = INT(RND(1) * 303) + 1 ELSE bat = 0 copypage 2, dpage drawsprite ded(), 0, bobpal(), 128 + vladp, a, b, dpage setvispage dpage: SWAP vpage, dpage: setvispage vpage fadetopal newpal() fadeto 0, 0, 0 lives = lives - 1 IF lives > 0 THEN GOTO 223 1955 'hi-scores p4kill(0) = 1 p4kill(1) = 1 p4kill(2) = 2 p4kill(3) = 5 p4kill(4) = 5 IF opt(0) = 1 THEN p4kill(5) = 10 ELSE p4kill(5) = 1 IF opt(0) = 0 THEN p4kill(6) = 50 ELSE p4kill(5) = -5 p4kill(7) = 100 p4kill(8) = 100 gkills(8) = lives tmp = 0 FOR i = 0 TO 7 IF gkills(i) > 0 THEN tally$(tmp) = mess$(156 + i + opt(0) * 8, lang): tvalue&(tmp) = gkills(i): tallyline(tmp) = i: tmp = tmp + 1 NEXT i IF lives > 0 THEN tally$(tmp) = mess$(172, lang): tvalue&(tmp) = lives: tallyline(tmp) = 8: tmp = tmp + 1 bonusp = 0 FOR i = 0 TO 8 bonusp = bonusp + p4kill(i) * gkills(i) NEXT i tally$(tmp) = mess$(173, lang): tvalue&(tmp) = bonusp: tmp = tmp + 1 scr& = scr& + bonusp tally$(tmp) = mess$(174, lang): tvalue&(tmp) = scr&: tmp = tmp + 1 tally$(tmp) = "" bonusp = 0 loadpage gn$, 4, 2 IF beatgame = 1 THEN IF cheat THEN textcolor 14, 4 tmp$ = mess$(197, lang) tmp2$ = mess$(198, lang) printstr tmp$, 160 - LEN(tmp$) * 4, 160, 2 printstr tmp2$, 160 - LEN(tmp2$) * 4, 168, 2 ELSE textcolor 15, 0 tmp$ = mess$(195, lang) tmp2$ = mess$(196, lang) printstr tmp$, 160 - LEN(tmp$) * 4, 151, 2 printstr tmp2$, 160 - LEN(tmp2$) * 4, 159, 2 tmp$ = mess$(199 + INT(RND(1) * 7) * 2, lang) tmp2$ = mess$(200 + INT(RND(0) * 7) * 2, lang) printstr tmp$, 160 - LEN(tmp$) * 4, 169, 2 printstr tmp2$, 160 - LEN(tmp2$) * 4, 177, 2 END IF ELSE textcolor 15, 0 tmp$ = mess$(175 + INT(RND(1) * 10) * 2, lang) tmp2$ = mess$(176 + INT(RND(0) * 10) * 2, lang) printstr tmp$, 160 - LEN(tmp$) * 4, 160, 2 printstr tmp2$, 160 - LEN(tmp2$) * 4, 168, 2 END IF setvispage 2 pausesong IF beatgame = 0 THEN playsong "catacomb": fademusic 12 fadetopal newpal() cfac = 0 setkeys tally: IF tmp > 2 THEN FOR k = 0 TO tmp - 3 l = tallyline(k) FOR j = 0 TO gkills(l) setkeys IF j = gkills(l) THEN setwait tmr(), 330: playsnd 27 ELSE setwait tmr(), 110: playsnd 5 copypage 2, dpage cfac2 = 10 - k tmp2 = 0 FOR i = 0 TO tmp - 3 textcolor 69 + cfac2, 0 cfac2 = cfac2 + 1: IF cfac2 > 10 THEN cfac2 = 0 IF i < k THEN tmp$ = tally$(tmp2) + " " + STR$(tvalue&(i)): printstr tmp$, 160 - LEN(tmp$) * 4, 81 - tmp * 5 + tmp2 * 10, dpage IF i = k THEN tmp$ = tally$(tmp2) + " " + STR$(j): printstr tmp$, 160 - LEN(tmp$) * 4, 81 - tmp * 5 + tmp2 * 10, dpage IF i > k THEN tmp$ = tally$(tmp2) + " 0": printstr tmp$, 160 - LEN(tmp$) * 4, 81 - tmp * 5 + tmp2 * 10, dpage tmp2 = tmp2 + 1 NEXT i bonusp = bonusp + p4kill(l) tmp$ = tally$(tmp2) + " " + STR$(bonusp): printstr tmp$, 160 - LEN(tmp$) * 4, 81 - tmp * 5 + tmp2 * 10, dpage loadsprite pic(), 0, vlad, tpic(l), 16, 17, 3 drawsprite pic(), 0, bobpal(), tpal(l) + vladp, 152, 101 - tmp * 5 + tmp2 * 10, dpage SWAP vpage, dpage setvispage vpage IF keyval(57) > 0 THEN j = gkills(k) IF keyval(1) > 0 OR keyval(28) OR keyval(-1) > 0 THEN j = gkills(k): k = 8 dowait NEXT j NEXT k END IF IF opt(0) = 1 THEN playsnd 32 ELSE playsnd 13 DO setkeys setwait tmr(), 110 copypage 2, dpage cfac2 = cfac cfac = cfac + 1: IF cfac > 10 THEN cfac = 0 tmp2 = 0 FOR i = 0 TO tmp IF tally$(i) <> "" THEN textcolor 69 + cfac2, 0 cfac2 = cfac2 + 1: IF cfac2 > 10 THEN cfac2 = 0 tmp$ = tally$(tmp2) + " " + STR$(tvalue&(i)): printstr tmp$, 160 - LEN(tmp$) * 4, 81 - tmp * 5 + tmp2 * 10, dpage tmp2 = tmp2 + 1 END IF NEXT i loadsprite pic(), 0, vlad, 135, 16, 17, 3 drawsprite pic(), 0, bobpal(), vladp, 152, 81 - tmp * 5 + tmp2 * 10, dpage SWAP vpage, dpage setvispage vpage dowait LOOP UNTIL keyval(1) > 1 OR keyval(28) > 1 OR keyval(57) > 1 OR keyval(-1) > 0 fademusic 0 fadeto 0, 0, 0 donetally: loadpage gn$, 4, 2 replace = 0 sptr = -1 IF scr& > 1900000 THEN scr& = scr& - 2000000 FOR i = 0 TO 9 IF scr& > scor&(i) AND opt(3) = 0 THEN sptr = i NEXT i IF opt(3) = 1 OR code$ = "BONUS" THEN sptr = -1 code$ = "" hiscore: IF sptr = -1 OR cheat > 0 THEN GOTO loscore textcolor 15, 0 printstr mess$(14, lang), 160 - LEN(mess$(14, lang)) * 4, 20, 2 textcolor 206, 0 FOR i = 0 TO 202 ly = INT(i / 26) lx = i - ly * 26 + 1 printstr letter$(i + 1), lx * 10 + 20, ly * 10 + 94, 2 NEXT i setvispage 2 fadetopal newpal() nam$ = "" x = 1: y = 0 toon = 954 GOSUB 1935 setkeys DO setkeys setwait tmr(), ticks copypage 2, dpage p = y * 26 + x textcolor 222, 212 printstr nam$, 156 - LEN(nam$) * 4, 50, dpage textcolor 14, 0 printstr "|", x * 10 + 20, y * 10 + 88, dpage textcolor 10, 0 printstr letter$(p), x * 10 + 20, y * 10 + 94, dpage GOSUB 1930 IF keyval(75) > 1 AND x > 1 THEN x = x - 1 IF keyval(77) > 1 AND x < 26 AND p < 203 THEN x = x + 1 IF keyval(72) > 1 AND y > 0 THEN y = y - 1 IF keyval(80) > 1 AND y < 7 AND p <= 180 THEN y = y + 1: IF p > 177 THEN x = 21 IF keyval(14) > 1 AND LEN(nam$) > 0 THEN nam$ = LEFT$(nam$, LEN(nam$) - 1) IF keyval(57) > 1 AND LEN(nam$) < 25 THEN IF p = 203 THEN nam$ = nam$ + " " ELSE nam$ = nam$ + letter$(p) SWAP vpage, dpage setvispage vpage dowait LOOP UNTIL keyval(1) > 1 OR keyval(28) > 1 OR keyval(-1) > 0 IF replace = 0 THEN FOR i = 0 TO sptr namestr$(i) = namestr$(i + 1): scor&(i) = scor&(i + 1) NEXT i END IF replace = 0 namestr$(sptr) = nam$ + SPACE$(25 - LEN(nam$)): scor&(sptr) = scr& FOR i = 0 TO sptr PUT #3, 203 + i * 29, namestr$(i): PUT #3, 228 + i * 29, scor&(i) NEXT i fadeto 0, 0, 0 loscore: loadpage gn$, 4, 2 textcolor 190, 0 printstr mess$(15, lang), 160 - LEN(mess$(15, lang)) * 4, 15, 2 FOR i = 0 TO 9 textcolor 21 + i, 0 printstr namestr$(i), 40, 174 - 16 * i, 2 printstr STR$(scor&(i)), 240, 174 - 16 * i, 2 NEXT i setvispage 2 fadetopal newpal() toon = 1330 GOSUB 1935 tctr = 0 setkeys col = 0 DO IF tctr > 10 THEN EXIT DO setwait tmr(), ticks setkeys copypage 2, dpage IF col < 9 THEN col = col + 1 ELSE col = -9 IF sptr >= 0 THEN textcolor 197 + ABS(col), 0: printstr namestr$(sptr), 40, 174 - 16 * sptr, dpage: printstr STR$(scor&(sptr)), 240, 174 - 16 * sptr, dpage IF cheat > 0 THEN textcolor 53 + ABS(col), 0: printstr "Cheaters never Prosper", 72, 190, dpage GOSUB 1930 SWAP vpage, dpage setvispage vpage dowait 'IF keyval(82) > 0 AND keyval(0) > 0 AND keyval(0) < 12 THEN sptr = keyval(0) - 2 IF keyval(82) > 0 AND keyval(83) > 1 AND sptr > -1 THEN replace = 1: scr& = scor&(sptr): GOTO hiscore LOOP UNTIL keyval(57) > 1 OR keyval(28) > 1 OR keyval(1) > 1 OR keyval(-1) > 0 GOTO 100 1960 'clear the background drawsprite dug(), 0, bobpal(), 224 + vladp, (x - 1) * 16, (y - 1) * 16 + 7, 2 RETRACE 1965 'guard picks up cabbage drawsprite dug(), 0, bobpal(), 224 + vladp, (lgx - 1) * 16, (lgy - 1) * 16 + 7, 2 RETRACE 1970 'torn web drawsprite dug(), 0, bobpal(), 224 + vladp, (Xwb - 1) * 16, (Ywb - 1) * 16 + 7, 2 drawsprite tore(), 0, bobpal(), 208 + vladp, (Xwb - 1) * 16, (Ywb - 1) * 16 + 7, 2 IF rn > 0 AND Xwb = rX AND Ywb = rY THEN kills(6) = kills(6) + 1 RETRACE 1975 'apple gets wedged map(lcx, lcy) = 4 drawsprite digup(), 0, bobpal(), 224 + vladp, (lcx - 1) * 16 - lcxm * 2, (lcy - 1) * 16 + 7 - lcym * 2, 2 drawsprite cabag(), 0, bobpal(), 144 + vladp, (lcx - 1) * 16, (lcy - 1) * 16 + 7, 2 RETRACE 1980 drawsprite dug(), 0, bobpal(), 224 + vladp, (XS - 1) * 16, (YS - 1) * 16 + 7, 2 RETRACE 1985 'endings beatgame = 1 IF opt(0) = 0 THEN loadpage gn$, 5, 2 ELSE loadpage gn$, 6, 2 pausesong IF cheat THEN playsong "mortua" ELSE IF opt(0) = 0 THEN playsong "harkten" ELSE playsong "verse3" fademusic 15 setvispage 2: fadetopal newpal() IF opt(0) = 0 THEN IF cheat THEN toon = 3420 ELSE toon = 2215 ELSE IF cheat THEN toon = 6334 ELSE toon = 5488 tctr = 0 GOSUB 1935 tck = 110: clk = 0 IF cheat > 1 THEN cheat = 1 textcolor 15, 1 setkeys theend: setwait tmr(), tck copypage 2, dpage setkeys IF keyval(78) > 1 THEN IF tck > 20 THEN tck = tck - 10 IF keyval(74) > 1 THEN IF tck < 200 THEN tck = tck + 10 IF keyval(28) > 1 THEN IF clk < 100 THEN clk = 100 ELSE clk = 0 IF keyval(1) > 1 OR keyval(-1) > 0 THEN tctr = 1 IF clk < 100 THEN clk = clk + 1 FOR i = 0 TO 3 tex$ = mess$(52 + opt(0) * 8 + cheat * 4 + i, lang) printstr tex$, 160 - LEN(tex$) * 4, 70 + 8 * i - opt(0) * 20, dpage NEXT i END IF GOSUB 1930 SWAP vpage, dpage setvispage vpage dowait IF tctr = 0 THEN GOTO theend fadeto 0, 0, 0 1990 'credits RESTORE credits loadpage gn$, 4, 2 setvispage 2: fadetopal newpal() FOR i = 0 TO 10: cy(i) = 0: NEXT i j = 10: k = 0: l = 0: m = 68: c = 0: gx = 0: tc1 = 113: tc2 = 129 cred = 34 tck = ticks toon = 4014 GOSUB 1935 DO setwait tmr(), tck copypage 2, dpage setkeys IF keyval(75) > 0 THEN gx = gx - 5 IF keyval(77) > 0 THEN gx = gx + 5 IF keyval(72) > 0 THEN tck = 20 ELSE IF keyval(80) > 0 THEN tck = 200 ELSE tck = ticks IF keyval(78) > 1 THEN IF ticks > 20 THEN ticks = ticks - 10 IF keyval(74) > 1 THEN IF ticks < 200 THEN ticks = ticks + 10 IF keyval(57) > 0 THEN IF c = 0 THEN c = 1 IF keyval(1) > 1 OR keyval(-1) > 0 THEN l = cred: cy(j) = 0 gx = gx - SGN(gx) - CINT(gx / 25) IF c <> 0 THEN c = c + 1: IF c > 5 THEN c = -5 y = (c ^ 2) / 25 * 9 IF k = 0 AND l < cred THEN l = l + 1: j = j + 1: IF j > 10 THEN j = 0 ctxt1$(j) = mess$(m, lang): ctxt2$(j) = mess$(m + 1, lang): m = m + 2 cy(j) = 172 READ k ELSE k = k - 1 END IF FOR i = 0 TO 10 IF cy(i) > 13 THEN cy(i) = cy(i) - 1 t! = 1 - ((cy(i) - 92) / 79) ^ 2 z = 160 + gx * t! c2 = SGN(c): c1 = SGN(c) IF c < 0 THEN c1 = c1 * (1 + INT(t! / .4)) ELSE c2 = c2 * (1 + INT(t! / .4)) x1 = z - LEN(ctxt1$(i)) * 4 IF x1 < 13 THEN x1 = 13 ELSE IF x1 + LEN(ctxt1$(i)) * 8 > 307 THEN x1 = 307 - LEN(ctxt1$(i)) * 8 x2 = z - LEN(ctxt2$(i)) * 4 IF x2 < 13 THEN x2 = 13 ELSE IF x2 + LEN(ctxt2$(i)) * 8 > 307 THEN x2 = 307 - LEN(ctxt2$(i)) * 8 IF c <= 0 THEN textcolor t! * 12 + tc1 + c1, 0: printstr ctxt1$(i), x1, cy(i) + ABS(y), dpage textcolor t! * 12 + tc2 - c2, 0: printstr ctxt2$(i), x2, cy(i) + 9 - ABS(y), dpage IF c > 0 THEN textcolor t! * 12 + tc1 + c1, 0: printstr ctxt1$(i), x1, cy(i) + ABS(y), dpage END IF NEXT i GOSUB 1930 SWAP vpage, dpage setvispage vpage dowait LOOP UNTIL l >= cred AND cy(j) <= 13 fadeto 0, 0, 0 RETRACE 'top lines DATA "Score: Level: Bobs:" DATA " ’­Œ‚: ÊÔ~É: Õ~Ó~:" DATA "Money: Stage: Vlads:" DATA " …œ: ¿Å´¾~: µ~ÇäÆ~:" 'codes DATA "1-up!","êüö!" DATA "Wear a Hat!","¢~‚‹¬ … ~–!" DATA "Invisible","¦š ‘…™" DATA "Be an Enemy","Úà¿Â_š ™–" DATA "Reverse Directions","¢„…~‡ž €¡~‰¡~š Œ–" DATA "Teleport","“~‰…¡ ‡" DATA "¶´‰~’~","Japanese" DATA "2 MILLION POINTS!","ëúû Õ`´àÄ!" DATA "Frictionless Cabbages!","¹áÔ~Äž “£”™" DATA "Shadow Hamster","…ˆ~ ÑØ¿Â_" DATA "Funny Colors","˜˜™ ˜" DATA "Bob the Hamster ver. 2.1","Õ~Ó~;Š~;ÑØ¿Â_ v. 2.1" DATA "A High Score! Enter your name","Ñ´;¿¼É ’~Œ! ™£ƒ¬ —’÷Š" DATA "High Scoring Hamsters","Ñ´;¿¼É ÑØ¿Â_" 'bonus level stuff DATA "BONUS LEVEL!","Õ~Ì¿ ÊÔ~É!" DATA "Eat Carrots!","š­‹~­¬ ¡~’!" DATA "Kill Plips!","Ó`ÈÓ¬ ‰˜‹’!" DATA "Kill Bugs!","Ò~_Æɬ ‰˜‹’!" DATA "Kill Sharks!","Š¦¬ ‰˜‹’!" DATA "Bother Shrews!","¾Èâ_¬ ™¨£‹’!" DATA "Get Shrews Killed!","¾Èâ_¬ ‰˜Š’!" DATA "Save Shrews!","¾Èâ_¬ Œˆ’!" DATA "Kill Lagomorphs!","‚Š†~¬ ‰˜‹’!" DATA "Get Money!","…œ¬ “±’!" DATA "Kill Walruses!","Þ_Ç¿¬ ‰˜‹’!" DATA "Kill Worms!","Þ_ج ‰˜‹’!" DATA "Kill Pavenders!","Ñ`Ô~àÂ~_¬ ‰˜‹’!" DATA "Shoot Turks!","Â京 ™¨£‹’!" DATA "Get Turks Killed!","Â京 ‰˜Š’!" DATA "Save Turks","Â京 Œˆ’!" DATA "Kill The Soldier!","¡¬ ‰˜‹’!" 'bonus level victory DATA "Congratulations!","ª‡ ¨±!","You won a prize!","“‡¡~‘š Ó`ÊÀàÆ €ˆ~ª‚!" 'title screen DATA "Start","ž‹~¦","Options","·Ó`¾ãà" 'options DATA "Hero","Ò_Ë_" DATA "Voices","‰ƒ" DATA "Language","‰~" DATA "Levels","ÊÔ~É" DATA "Speed","ž¨Š" DATA "Bob &","Õ~Ó~ &","Vlad #","µ~ÇÆ~ #" DATA "Off","ˆŒ","On","‘ˆ–" DATA "English","¶´‰~","Japanese","ôõ‰~" DATA "Normal"," ‘‚","Custom","“ˆ¡~‘" DATA "- +","- +","- +","- +" 'endings DATA "Spifferific!" DATA "~‹~°‚ ~!" DATA "You've gorged yourself on carrots!" DATA "€™…~ š­‹~­¬ ¡~Œ†~£‹!" DATA "As your reward you get to be" DATA "€™ž ~£Š™…±…” Ó`ÊÀàƬ €ˆ~ª‚!" DATA "launched into a vat of Spam!" DATA "¸àÐà…” ¿Ñ`Ø ¸à ™…š ™ˆ~£Œ!" DATA "Evil Nasty CHEATER!" DATA "€™ž Œ~– ÑØ¿Â_ ’~Œª!" DATA "If you had played fair," DATA "»~_ج ¨±’ ~£Š™ˆ—ž~" DATA "Then you would have gotten" DATA "Œ’†™ Ó`ÊÀàƬ €ˆ~£‹…~" DATA "a real neat ending, but now..." DATA "£ ž~±Œ– ‘§• ’~Œ!" DATA "After a long and difficult journey," DATA "™…~‡ ¥Œ~…‹ •°²‰² €“’~" DATA "Vlad Dracula has driven the Turkish" DATA "º •‡‡~­…~ µ~ÇÆ~š „ž”«—’" DATA "Soldiers from his home in Wallachia" DATA "µ~ÇÆ~…~ Þ~Çó ‡š¬ “•§“~‹…”" DATA "And regained the Wallachian Throne!" DATA "£ Þ~Çó Ó`Èà¿š ™•£¾!" DATA "Vlad, weakened by his use of the" DATA "¤±‘ …™‹ Š–…~ µ~ÇäÆ~¬" DATA "insipid cheat codes, is overwhelmed" DATA "~curse~ ‹£‹…”" DATA "and defeated by the Turkish army." DATA "µ~ÇäÆ~…~ ~Ÿ £ˆ“ ™•£Œª" DATA "I TOLD you cheaters never prosper!" DATA "‰­“~ ~£Š™‡’ ‡~Š" 'credits DATA "BOB THE HAMSTER","Õ~Ó~;½~;ÑØ¿Â_","a BriTech Production","Ó~Ç´Åäº »~_Ø" DATA "Cast Of Characters","Cast of Characters","(In Alphabetical Order)","(In Alphabetical Order)" DATA "Bob","Õ~Ó~","Bob the Hamster","Õ~Ó~;½~;ÑØ¿Â_" DATA "Plip","Ó`ÈÓ`","Bernardo Bicardi","Bernardo Bicardi" DATA "Cabbage Beetle","¹áÔ~Ä Ò~_ÆÉ","Jamie Phillips","Jamie Phillips" DATA "Angry Shrew","³àº~È_ ¾Èâ_","Davis Thomson","Davis Thomson" DATA "Shovel-Head Shark","¾áÔ~É;€£ Š¦","Philbert Krumland","Philbert Krumland" DATA "Purple-Widow Spider","¥”Š†;µæÆ~_ ‡§","Clem Griswald","Clem Griswald" DATA "Lagomorph","‚Š†~","Glen Shepherd","Glen Sheperd" DATA "Vlad the Impaler","µ~ÇäÆ~;½~;´àÔ`_Ç_","Vlad the Hamster","µ~ÇäÆ~;½~;ÑØ¿Â_" DATA "Fat Walrus","Þ_Ç¿","Ignatz Pastillo","Ignatz Pastillo" DATA "Worm","Þ_Ø","Melba Londondale","Melba Londondale" DATA "Greedy Turk","ª‡ž~• Âäº","Jimmy Hoffa","¾~×_ ÕÓå" DATA "Pavender","Ñ`Ô~àÂ~_","Ramon Millsburg","Ramon Millsburg" DATA "Killer Hun","¹Ç_ Ñà","Grimli Berdahl","Grimli Berdahl" DATA "Turkish Soldier","Âäºü ¡","Richard Simmons","ÈÃå_Æ~ ¾Úà¿" DATA "Special Guest Stars","“ˆ¡~‘ »~¿Æ ¿Â_","Cap'n Bloodbeard","¹áÓ`Åà Ó~ÇäÆ~Ò~³Æ~" DATA "","","Elvis","¶ÊÒ~¿" DATA "","","The Dancing Spams","„“~•– ¿Ñ`Ø" DATA "Game Design","»~_Ø Å~½~´à","BriTech","Ó~Ç´Åäº" DATA "Graphics and Sound System","º~ÇÓæ亿;½µàÆ~ ¾¿ÅØ","Brian Fisher","Ó~Ç´à Óæ¾á_" DATA "Character Design","¹áÇ Å~½~´à","Bob the Hamster","Õ~Ó~;½~;ÑØ¿Â_" DATA "Art and Graphics","º~ÇÓæ亿 Å~½~´à","James Paige","¾~è_Ø¿ Ô`´¾~" DATA "Bob's Voices","Õ~Ó~ ‰ƒ","James Paige","¾~è_Ø¿ Ô`´¾~" DATA "Vlad's Voices","µ~ÇäÆ~ ‰ƒ","Andrew Fisher","³àÆ~É Óæ¾á_" DATA "Additional Voices","§‚ Ÿ“‘ ‰ƒ","Julie Paige","¾~â_È_ Ô`´¾~" DATA "","","Brian Fisher","Ó~Ç´à Óæ¾á_" DATA "Translation","¢­¨‡","Naoki Komine","™„† ‰¤œ" DATA "Original Bob the Hamster Concept","Õ~Ó~;½~;ÑØ¿Â_ ¼àÀÓ~Æ","Bob the Hamster","Õ~Ó~;½~;ÑØ¿Â_" DATA "Bob the Hamster is Dolphin-safe and","Õ~Ó~;½~;ÑØ¿Â_ž","","" DATA "has met the Mr. D seal of approval","׿Â;Å~æ ³Ó`É_Ñ~ɾɾ¬ §”±’£Œ","","" DATA "~Senseless violence is good!~","{Senseless Violence is good}","","" DATA "BriTech is a subsidiary of","Ó~Ç´Å亞","Hamster Republic Productions","ÑØ¿Â_;ÊÑ`Ó~Èäº;Ó`ËÆ~亾ãà" DATA "Thanks for Playing!","€•…~“‚ ‰~Š~£Œ!","& Have a Nice Day! #","Šª‚™”!" DATA "BOB THE HAMSTER","How to Play" DATA "Dig through dirt and eat carrots","Eat all the carrots to beat a level" DATA "Watch out for the plips!","To shoot them press space" DATA "You must wait between shots","Watch the spit symbol" DATA "You can crush some enemies","Push cabbages over them" DATA "You can move cabbages","But you can't push them on dirt" DATA "Power-up by with sunflower seeds","Powered up shots destroy cabbages" DATA "Get to know the enemies","They are each very different" DATA "Get extra lives from SPAM","They are hidden in each level" DATA "There are a lot of secrets","Try and find them, and have fun!" DATA "VLAD THE IMPALER","True Prince of Wallachia" DATA "Get all the money in a level","To fund your army" DATA "Destroy all who stand in your way","To smite foes press space" DATA "You can't attack constantly","Watch the sword symbol" DATA "Collect gems so you","Can get better weaponry" DATA "Press space to change","The axe's aim midflight" DATA "The Hun will leave soldiers","Shoot them or they can trap you" DATA "You can't kill the turks","But Huns can" DATA "Turkish soldiers take many hits","And they throw apples at you" DATA "Fight well!","Reclaim your homeland!" DATA "Carrots Eaten -","¡~ š­‹~­ …Œ~" DATA "Plips Killed -","‰˜‹ Ó`ÈÓ` …Œ~" DATA "Beetles Killed -","‰˜‹ Ò~_ÆÉ …Œ~" DATA "Sharks Killed -","‰˜‹ Š¦ …Œ~" DATA "Shrews Shot -","¦ ¾Èâ_ …Œ~" DATA "Shrews Killed -","‰˜Š— ¾Èâ_ …Œ~" DATA "Shrews Saved -","Œˆ ¾Èâ_ …Œ~" DATA "Lagomorphs Killed -","‰˜‹ ‚Š†~ …Œ~" DATA "Money Collected -","…~ „…œ" DATA "Walruses Killed -","‰˜‹ Ó`ÈÓ` …Œ~ -" DATA "Worms Killed -","‰˜‹ Þ_Ø …Œ~ -" DATA "Pavenders Killed -","‰˜‹ Ñ`Ô~àÂ~_ …Œ~ -" DATA "Turks Wounded -","¦ ¾Èâ_ …Œ~ -" DATA "Turks Killed -","‰˜Š— ¾Èâ_ …Œ~ -" DATA "Turks Rescued -","Œˆ ¾Èâ_ …Œ~ -" DATA "Soldiers Killed -","‰˜‹ ‚Š†~ …Œ~ -" DATA "Extra Lives -","‰±’ – -" DATA "Bonus Score -","Õ~Ì¿ Õ`´àÄ -" DATA "Final Score -","Õ`´àÄ -" DATA "If you free a shrew from a web" DATA "‡§ Œš £…‹ ¾Èâ_¬" DATA "He will be your friend!" DATA "Œˆ” ¾Èâ_…~ “§~š ™•£Œ" DATA "If you shoot at a certain place" DATA "€– ’ “‰˜š ‚’ž~" DATA "On the level, a 1-up appears!" DATA "…‡Š— 1-up…~ ’~’†£Œ" DATA "Some cabbages and apples are" DATA "“†“~†  ‚‘š ¤ƒ– ¹áÔ~Ä“ •­‰~ž" DATA "actually Secret power-ups!" DATA "¢­“ž Power-up’~ €•£Œ" DATA "Webs and soldiers can be" DATA "‡§ Œ“ ¡¬" DATA "Destroyed if you shoot them" DATA "±… ‚’ž~ ™‡™•£Œ" DATA "Lagomorphs and Turkish soldiers" DATA "‚Š†~“ Âäºü ¡ž ž`" DATA "Take six hits to kill them" DATA "‚™“ ™… ™… ‹š£­ DATA "Use the Level editor (BOBEDIT.EXE)" DATA "~Level Editor~ (BOBEDIT.EXE)¬" DATA "To make your own spiffy levels!" DATA "‘…ƒž~ ‹~ ~­’~ ÊÔ~ɬ ‘‡—£Œ" DATA "Sometimes, when you die, the bat" DATA "“†“~† ‹š£‹ €“ bat…~ 1-up…~" DATA "Will show you where the 1-ups are" DATA "…‡‹’€– “‰˜¬ ¤£Œ" DATA "Type ~BONUS~ from the title screen" DATA "~BONUS~¬ ´Ó` ‹”" DATA "To play some secret extra levels" DATA "¢… ÊÔ~Éš ˆ£Œ" DATA "Beat the game to learn one" DATA "»~_ج …’ž~ ˜­™" DATA "Of the many secret codes!" DATA "™‹° ¼_Æ~¬ ™”ƒ£Œ" DATA "If you win a bonus level" DATA "Õ~Ì¿ ÊÔ~ɬ …’ž~" DATA "You'll get a special reward" DATA "‰~¢Ÿ~¬ §”£Œ" DATA "Hold Ctrl and type ~CREDIT~ while" DATA "»~_ج ¨±’ Ctrl¬ „‹™…~”" DATA "playing to see the ending again" DATA "~CREDIT~¬ ´Ó` ‹” Credits¬ ¤ƒ£Œ" DATA "Beat the game again without" DATA "»~_ج ¨±’ ~£Š™ˆ—ž~" DATA "Cheating for a secret code!" DATA "˜­™ ™‹° ¼_Æ~¬ ™”ƒ£Œ" DATA "Hold Ctrl-Alt and press S" DATA "Ctrl“ Alt¬ „‹™…~” ~S~¬ „‹”" DATA "And get the spit shield" DATA "Õ~Ì¿ ÊÔ~É Ó`ÊÀàƬ §”‚" DATA "Hold Ctrl-Alt and press B DATA "Ctrl“ Alt¬ „‹™…~” ~B~¬ „‹”" DATA "and the bat will come by" DATA "bat…~ †£Œ" DATA "Hold Ctrl and type ~MOPLIP~" DATA "Ctrl¬ „‹™…~” ~MOPLIP~¬ ´Ó` ‹”" DATA "For more plips to appear" DATA "¹áÔ~Äž Ó`ÈÓ`š ™•£Œ" DATA "Hold Ctrl and press a function" DATA "Ctrl“ Alt¬ „‹™…~” F-Õ~Âଠ„‹£Œ" DATA "Key, F1 gives you a hat" DATA "F1ž ¢~‚‹¬ … ~—£Œ" DATA "Hold Ctrl-Alt and press" DATA "Ctrl“ Alt¬ „‹™…~”" DATA "1, 2, or 3 to power-up" DATA "1“ 2“ 3¬ „‹” power-upŒ–" DATA "Hold Ctrl and press a function" DATA "Ctrl“ Alt¬ „‹™…~” F-Õ~Âଠ„‹£Œ" DATA "Key, F6 changes languages" DATA "F4ž Úà¿Â_š ¤ƒ’ ’~†£Œ" DATA "Hold Ctrl-Alt and press the =/+" DATA "Ctrl“ Alt¬ „‹™…~” ~=/+~¬ „‹”" DATA "key to make Bob move faster" DATA "Õ~Ó~…~ §±“ ž¨‡ ™•£Œ" tallypics: DATA 126,160,28,16,44,32,60,48,76,64,124,128,130,208,109,96,128,192 credits: DATA 100,40,25,25,25,25,25,25,30,25,25,25,25,25,25,30,8,8 DATA 50,25,25,25,25,25,25,8,25,25,50,8,8,25,50,0 soundeffects: 'bob DATA "hock","spit","squish","clang","crunch","shrew","spider" DATA "carrot","spitup","stuck","spam","goodspam","spif" DATA "dead5","dead4","dead1","dead3","dead2" DATA "win1","win2","win3","win4","win5" 'vlad DATA "cutnhlf","grrrah","walpop","pop","cutnhlf","turk","hey" DATA "money","haha","wrath","gimmie","vladhat","spif" DATA "lose1","lose2","lose3","lose4","lose1" DATA "vict1","vict2","vict3","vict4","vict5" 1999 fademusic 0 fadeto 0, 0, 0 CLOSE #2: CLOSE #3 pausesong setfmvol oldfm closemusic closesound SYSTEM: 'quit routine FUNCTION get_next_anim(BYREF cntr AS INTEGER) DIM a AS INTEGER a = ReadShort(2, cntr) a = a AND 255 cntr += 1 RETURN a END FUNCTION