'$DYNAMIC 'current library; DIRESTUF.QLB DEFINT A-Z DECLARE SUB menu (menuset() AS STRING, menuc%, visrows%, menux%, menuy%, menup%, skip%, csrcol%, txtcol) DECLARE FUNCTION LARGE% (n1%, n2%) DECLARE FUNCTION SMALL% (n1%, n2%) DECLARE SUB hitit (i%, o%, aframe%, aframe%(), picset%(), speed%(), cfull2%, stemp%(), kd%(), d%(), kspeed%(), knock%(), say%(), inuse%(), ai1%(), rate!, target%(), defence%(), chp%(), hp%(), drain%, ap%(), charge%, absorb%(), ahit%) DECLARE SUB dizzy (o%, spinctr%(), spin%(), cfull2%, d%(), inuse%(), x%(), y%()) DECLARE SUB align (o%, x%(), y%(), speed%()) DECLARE SUB checkinf (o, plot(), infplot(), inf$(), dpage, speed(), inft#(), inftime(), picset(), pict(), ranatemp, ranaset, ranapic, rananice, nice(), pale(), ptemp(), pois#, drain, doom(), bobpal(), x(), y(), btog()) DECLARE SUB toad (ranatemp, ranaset, ranapic, rananice, picset(), pict(), nice(), pale(), ptemp(), inft#(), inftime()) DECLARE SUB eventitem (dia(), sayx(), sayy(), sayw(), sayl(), font, ivname$(), ivpic(), ivpal(), ivset(), ivcon(), ivuse$(), plot(), kp(), rate!, vpage, placer(), bobpal(), font()) DECLARE SUB wepup (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) DECLARE SUB wepright (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) DECLARE SUB wepdown (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) DECLARE SUB wepleft (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) DECLARE SUB sethtarg (targx(), targy(), o, x(), y(), htarg(), speed(), cfull3, xaim(), yaim(), dist!, divnum!) DECLARE SUB setonkill (o, target(), picset(), beat(), bobpal(), x(), y(), mx, my, ickcon(), chp(), plot(), itset(), iactive(), xper(), levelup(), hp()) DECLARE SUB itemscon (plot(), itset(), picset(), iactive(), mx, my) DECLARE SUB checkcon (plot(), ickcon(), mx, my, picset()) DECLARE SUB inform (mx, my, plot(), dpage, x(), y(), pict(), pale(), speed(), code$, absorb(), ickcon(), pal$, charge, inuse(), code(), weapon(), target()) DECLARE SUB sloth (speed(), inft#(), inftime(), plot(), pict(), picset()) DECLARE SUB drawshop (font, dia(), sayx(), sayy(), sayw(), sayl(), stock, shx(), shy(), buffer(), spicset(), vpage, placer(), spict(), bobpal(), ptr, ptr2, ptr3, product$(), price(), seed(), descr$(), spale(), chp(), hp(), font(), dest, arg) DECLARE SUB bossmeter (boss(), chp(), ap(), hp(), dpage) DECLARE SUB takeitem (hp(), take, chp(), cmax, ap(), seed(), ic1(), ic2(), ic3(), ic4(), itset(), mx, my, plot(), infplot(), inftemp(), inft#(), ickcon(), picset(), iactive(), say(), timef(), inert()) DECLARE SUB reaper (plot(), inft#(), inftime(), drain, doom(), bobpal(), x(), y(), btog(), dpage) DECLARE SUB fontset (font, font()) DECLARE SUB statusscr () DECLARE SUB poison (pois#, drain, pale(), inft#(), inftime(), plot(), picset(), pict()) DECLARE SUB intox (speed(), inft#(), inftime(), picset(), pict(), plot()) DECLARE SUB charload () DECLARE SUB bigsprite (buffer(), nice(), boss()) DECLARE SUB debugest (code(), code$, plot(), seed(), store, boss(), debug, nice(), picset(), bobpal(), x(), y(), hp(), cmax, target(), allitems, inft#(), pict()) DECLARE SUB buyit (ptr, cmax, ptr3, seed(), price(), hp(), liup(), chp(), scure(), chup(), plot(), infplot(), inftemp(), sset1(), sset2(), inft#(), inftime()) DECLARE SUB drawbox (sayx(), sayy(), sayw(), sayl(), dia(), dctr, dest, arg) DECLARE SUB getday (leap(), dbefore(), week$(), plot(), ts$, day$) DECLARE SUB loadstock (inum(), product$(), spict(), spale(), spicset(), scure(), chup(), liup(), sset1(), sset2(), shx(), shy(), apear1(), apear2(), plot(), ptr, stock) DECLARE SUB timeofday (timeoday, plot(), pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba()) DECLARE SUB clock (rtime$) DECLARE SUB meter (charge#, fulpow(), cmet!, cmax, fcol, dpage) DECLARE SUB allsprite (vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage) 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 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(), BYVAL p) DECLARE SUB resetdsp DECLARE SUB playsnd (BYVAL n, BYVAL F) DECLARE SUB closefile 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 SUB setwait (b(), BYVAL t) DECLARE SUB dowait () DECLARE FUNCTION Keyseg () DECLARE FUNCTION keyoff () DECLARE FUNCTION keyval (BYVAL a) DECLARE FUNCTION getkey () 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 voice(16385), game(1000), room(288), mainpal(767), tile(2000), tilex(2000), tiley(2000), timing(1) DIM SHARED placer(250), blocker(200), chroma(16 * 30), bobpal(16 * 99), buffer(8000), mapset(512), doorx(500), doory(500), exitx(500), exity(500), font(1024), ickloc(1536), ickcon(3200), order(16) DIM SHARED x(16), y(16), pict(16), pale(16), aspeed(16), picset(16), aframe(16), vframe(16), acounter(16), plot(400), whosay(1536), wsay(400), sayx(400), sayy(400), sayl(400), sayw(400), saypx(400), saypy(400), big(1250), fade(1536), item(4300) DIM SHARED boss(16), ic1(16), ic2(16), ic3(16), ic4(16), push(16), timef(16), nice(16), hp(16), chp(16), ap(16), defence(16), anim(16), ty(16), name$(16), seed(16), speed(16), stemp(16), kspeed(16), number(16), af(6), nbhp(16), nba(16) DIM SHARED itset(4400), ptemp(12), code(16), xtemp(12), ytemp(12), ltemp(12), beat(180), targ(1600), d(16), range(16), homing(16), knock(16), muser(16), boomer(16), inuse(16), absorb(16), passall(16), fuser(16), story!(2000), plotos(512) DIM SHARED iname$(30), ipic(30), ipal(30), ipicset(30), wnum(30), apic(30), apal(30), apicset(30), maim(30), guard(30), nitel(30), niteh(30), iflee(30), smaim(30), armsp(30), inice(30), conptr(30), rtime$, cmax, dpage, vpage, charge#, pal$, needf, _ hnb, day$, fcol, leap(10), dbefore(12) DIM SHARED week$(7), x, y, ptr, stock, product$(10), spict(10), spale(10), spicset(10), scure(10), chup(10), liup(10), sset1(10), sset2(10), inum(10), shx(10), shy(10), apear1(10), apear2(10), dia(20), dctr, arg, ptr3, price(10), noise(10), allitems _ , target(16), xyc(16) DIM SHARED ai1(16), swim(4), chase(4), rand(4), atack(4), inert(4), mimic(4), flee(4), eitem(4), itemp(4), seedp(4), xper(16), spin(16), weapon(4), nbe(4), iactive(16), mx, my, store, debug, index$(30), scribe$(8), wbig, presp, conv, btog(8), inft#( _ 10), inflict(8), infprob(10) DIM SHARED infplot(10), inftime(10), drain, pois#, font, csr2, levelup(4), csr(3), arm$(30), ix(40), iy(40), weps, arm, doom(150), take, inftemp(10), tempchp(4), descr$(20), ptr2, xaim(16), yaim(16), targx(10), targy(10), htarg(10), cant, look, o, _ cfull2, cfull3, tempc, tempe DIM SHARED boomf(10), r(10), code$, ivname$(40), ivuse$(40), ivpic(40), ivpal(40), ivcon(40), ivset(40), ranaset, ranapic, ranatemp, kp(15), kp$, rananice, begin$(250), cred, cred#, spinctr(4), fulpow(30), say(16), rate! setmodex setitup "data\speakage.cbv" + CHR$(0), voice(), 2 resetdsp code$ = "": rate! = -90.8858 DEF SEG = VARSEG(mapset(0)): BLOAD "data\blockset.dat", VARPTR(mapset(0)) DEF SEG = VARSEG(ickloc(0)): BLOAD "data\ickloc.dat", VARPTR(ickloc(0)) DEF SEG = VARSEG(ickcon(0)): BLOAD "data\enecon.dat", VARPTR(ickcon(0)) DEF SEG = VARSEG(item(0)): BLOAD "data\itemloc.dat", VARPTR(item(0)) DEF SEG = VARSEG(itset(0)): BLOAD "data\itemset.dat", VARPTR(itset(0)) DEF SEG = VARSEG(tile(0)): BLOAD "data\tile.bob", VARPTR(tile(0)) DEF SEG = VARSEG(tilex(0)): BLOAD "data\tilex.bob", VARPTR(tilex(0)) DEF SEG = VARSEG(tiley(0)): BLOAD "data\tiley.bob", VARPTR(tiley(0)) DEF SEG = VARSEG(whosay(0)): BLOAD "data\say.dat", VARPTR(whosay(0)) DEF SEG = VARSEG(chroma(0)): BLOAD "data\mapblock.pal", VARPTR(chroma(0)) DEF SEG = VARSEG(bobpal(0)): BLOAD "data\bobpal.pal", VARPTR(bobpal(0)) DEF SEG = VARSEG(beat(0)): BLOAD "data\beat.mxg", VARPTR(beat(0)) DEF SEG = VARSEG(doom(0)): BLOAD "data\doom.mxg", VARPTR(doom(0)) setpal mainpal() DEF SEG = VARSEG(mainpal(0)): BLOAD "data\palette.0", VARPTR(mainpal(0)) OPEN "data\index.sav" FOR INPUT AS #1 FOR i = 0 TO 24: INPUT #1, index$(i): NEXT CLOSE #1 GOSUB doordata: GOSUB switchon: GOSUB daydata playsnd 47, rate! early: setvispage 0 FOR i = 1 TO 200: plot(i) = 0: NEXT i DEF SEG = VARSEG(plotos(0)): BLOAD "data\plotos.bob", VARPTR(plotos(0)) font = 1: CALL fontset(font, font()): textcolor 15, 0 IF keyval(41) = 0 THEN RANDOMIZE TIMER OPEN "data\keys.dat" FOR INPUT AS #2 FOR i = 1 TO 15: INPUT #2, kp(i): NEXT INPUT #2, kp$ CLOSE #2 OPEN "data\constant.txt" FOR INPUT AS #2 FOR i = 1 TO 6: INPUT #2, scribe$(i): NEXT FOR i = 0 TO 6: INPUT #2, af(i): NEXT FOR i = 1 TO 6: INPUT #2, inftime(i): NEXT FOR i = 1 TO 6: INPUT #2, infplot(i): NEXT FOR i = 1 TO 6: INPUT #2, inf$(i): NEXT mx = 14: my = 3: vpage = 1: dpage = 0: delay = 60: fcol = 30: cmax = 2: pal$ = "0": csr(2) = 1: needf = 1: debug = 0: inflict(1) = 0: allitems = 0: boss(1) = 0 drain = 0: seed(1) = 0 GOSUB predire plot(45) = 1 INPUT #2, x(1), y(1), d(1), pict(1), pale(1), anim(1), aspeed(1), picset(1), speed(1), flee(1), xper(1), hp(1), ap(1), defence(1), weapon(1), nbhp(1), nba(1), aframe(1), vframe(1), chp(1), levelup(1), nice(1), say(1) CLOSE #2 GOSUB newscreen: needf = 1 setkeys dire: setwait timing(), delay setkeys ahit = 0 IF plotos(((my - 1) * 16) + (mx - 1)) > 0 THEN GOSUB plotstart GOSUB wepmove ty(1) = 48: IF (room(((INT((y(1) - 15) / 20) * 16) + INT(x(1) / 20)) * 2 + 1) AND 16384) = 16384 THEN ty(1) = 32 FOR o = 1 TO 4: IF picset(o) > 0 AND o <> 1 THEN GOSUB beastai IF picset(o) < 1 THEN GOTO dire1 IF (room((INT(x(o) / 20) + (INT((y(o) - 15) / 20)) * 16) * 2 + 1) AND 4096) = 4096 THEN o1 = o: GOSUB trydown: GOSUB godown: o = o1: aframe(o) = 6 IF (room((INT((x(o) + 19) / 20) + (INT((y(o) - 15) / 20)) * 16) * 2 + 1) AND 4096) = 4096 THEN o1 = o: GOSUB trydown: GOSUB godown: o = o1: aframe(o) = 6 IF (room((INT(x(o) / 20) + (INT(((y(o) + 19) - 15) / 20)) * 16) * 2 + 1) AND 4096) = 4096 THEN o1 = o: GOSUB trydown: GOSUB godown: o = o1: aframe(o) = 6 IF (room((INT((x(o) + 19) / 20) + (INT(((y(o) + 19) - 15) / 20)) * 16) * 2 + 1) AND 4096) = 4096 THEN o1 = o: GOSUB trydown: GOSUB godown: o = o1: aframe(o) = 6 dire1: NEXT aframe = 0 IF inuse(1) > 0 AND muser(5 + (8 * (SGN(cfull)))) <> 0 THEN o = 1: GOSUB strikemove IF inuse(1) > 0 OR knock(1) > 0 THEN GOTO nomove o = 1 IF keyval(kp(1)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turnup ELSE GOSUB animate GOSUB tryup: GOSUB goup END IF IF keyval(kp(3)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turnright ELSE GOSUB animate GOSUB tryright: GOSUB goright END IF IF keyval(kp(2)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turndown ELSE GOSUB animate GOSUB trydown: GOSUB godown END IF IF keyval(kp(4)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turnleft ELSE GOSUB animate GOSUB tryleft: GOSUB goleft END IF nomove: CALL checkinf(o, plot(), infplot(), inf$(), dpage, speed(), inft#(), inftime(), picset(), pict(), ranatemp, ranaset, ranapic, rananice, nice(), pale(), ptemp(), pois#, drain, doom(), bobpal(), x(), y(), btog()) IF (keyval(kp(6)) > 0 OR keyval(kp(7)) > 0) AND picset(5) = 0 AND inuse(1) = 0 THEN armwep = 1: IF charge# = 0 THEN charge# = TIMER IF (keyval(kp(6)) = 0 AND keyval(kp(7)) = 0) AND armwep = 1 AND picset(5) = 0 THEN o = 5: armwep = 0: aframe(5) = 1: GOSUB strike: charge# = 0 IF keyval(29) > 0 AND keyval(56) > 0 THEN IF keyval(0) = 83 THEN GOTO finis IF inuse(1) > 0 THEN aframe = 5: inuse(1) = inuse(1) - 1 IF knock(1) = 0 THEN aframe(1) = aframe IF INT(x(1) / 20) = x(1) / 20 AND INT(y(1) / 20) = (y(1) - 15) / 20 THEN GOSUB findexit IF keyval(kp(8)) > 1 THEN setkeys: GOSUB status IF keyval(kp(9)) > 1 AND plot(59) = 0 THEN fadeto fade(), 0, 0, 0: fptr = 0: GOSUB savegame IF keyval(kp(10)) > 0 THEN GOSUB ctrlcode IF (keyval(42) > 0 AND keyval(54) > 0) AND keyval(57) > 1 THEN w = getkey: GOSUB debugg IF keyval(kp(11)) > 0 THEN GOSUB debugg2 FOR o = 1 TO 4 IF boss(o) > 0 THEN btog(o) = btog(o) XOR 1 IF knock(o) > 0 THEN GOSUB kback NEXT IF picset(1) = 0 THEN playsnd 6, rate!: fadeto fade(), 40, 0, 0: clearpage 1: clearpage 0: setkeys: GOTO early IF take > 0 THEN CALL takeitem(hp(), take, chp(), cmax, ap(), seed(), ic1(), ic2(), ic3(), ic4(), itset(), mx, my, plot(), infplot(), inftemp(), inft#(), ickcon(), picset(), iactive(), say(), timef(), inert()): take = 0 FOR i = 5 TO 8 IF picset(i) > 0 THEN GOSUB fleew NEXT FOR o = 9 TO 12: IF picset(o) = 0 THEN GOTO dire3 acounter(o) = acounter(o) + 1: IF acounter(o) > aspeed(o) THEN acounter(o) = 0: aframe(o) = aframe(o) + 1: IF aframe(o) > 1 THEN aframe(o) = 0 dire3: NEXT o IF drain > 0 THEN drain = drain - 1: chp(1) = chp(1) - 1: IF chp(1) < 0 THEN fadeto fade(), 40, 0, 0: clearpage 1: clearpage 0: setkeys: GOTO early IF drain < 0 THEN drain = drain + 1: chp(1) = chp(1) + 1: chp(1) = SMALL(chp(1), hp(1)) SWAP dpage, vpage setvispage vpage copypage 2, dpage CALL allsprite(vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage) CALL clock(rtime$) printstr rtime$, 320 - (8 * LEN(rtime$)), 8, dpage printstr day$, 0, 20, dpage IF plot(157) = 1 THEN GOSUB credit IF debug = 1 THEN CALL inform(mx, my, plot(), dpage, x(), y(), pict(), pale(), speed(), code$, absorb(), ickcon(), pal$, charge, inuse(), code(), weapon(), target()) tmcur = ((my * 16) + mx) printstr STR$(seed(1)) + CHR$(19), 245 - (LEN(STR$(seed(1))) * 8), 8, dpage textcolor 110, 0 FOR i = 1 TO INT((chp(1) - 1) / 10) + 1: IF i = INT((chp(1) - 1) / 10) + 1 AND ((chp(1) / 10) <> INT(chp(1) / 10)) THEN textcolor 100 + (((chp(1) / 10) - INT(chp(1) / 10)) * 10), 0 printstr CHR$(38), 9 * i, 0, dpage NEXT CALL bossmeter(boss(), chp(), ap(), hp(), dpage) IF chp(1) <= 0 THEN textcolor 4, 0: printstr CHR$(6), 9 * i, 0, dpage IF charge# > 0 THEN CALL meter(charge#, fulpow(), cmet!, cmax, fcol, dpage) textcolor 15, 0 IF needf = 1 THEN copypage 2, vpage: GOSUB sethepal: fadetopal mainpal(), fade(): needf = 0 dowait GOTO dire predire: plot(157) = 0: plot(158) = 0 loadpage buffer(), "data\title.mxs" + CHR$(0), 2 loadpage buffer(), "data\startanm.mxs" + CHR$(0), 3 begin$(0) = "New Game" begin$(1) = "Load Game" begin$(2) = "Quit" menu begin$(), ttp, 3, 126, 94, 2, 8, 0, 15 copypage 2, 0 loadsprite big(), 0, 1 * 4, 50, 50, 3: drawsprite big(), bobpal(), 0 * 16, 150, 134, 0 loadsprite big(), 0, 0 * 4, 50, 50, 3: drawsprite big(), bobpal(), 22 * 16, 102, 139, 0 fadetopal mainpal(), fade() ttx! = 102: tty! = 139 t# = TIMER: spamc = 0: setkeys DO: setkeys IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ttp = 0 THEN playsnd 49, rate!: fadeto fade(), 0, 0, 0: FOR i = 0 TO 3: clearpage i: NEXT i: RETURN IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ttp = 1 THEN playsnd 49, rate! fadeto fade(), 0, 0, 0: GOSUB loadgame IF lcancel = 0 THEN CALL fontset(font, font()): fadeto fade(), 0, 0, 0: GOSUB newscreen: needf = 1: FOR i = 2 TO 4: picset(i) = temp1p(i): x(i) = temp1x(i): y(i) = temp1y(i): NEXT: CLOSE #2: o = 1: CALL align(o, x(), y(), speed()): RETURN dire lcancel = 0: GOTO predire END IF IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ttp = 2 THEN playsnd 49, rate!: fadeto fade(), 0, 0, 0: RETURN finis IF keyval(kp(1)) > 1 AND ttp > 0 THEN ttp = ttp - 1: playsnd 48, rate! IF keyval(kp(2)) > 1 AND ttp < 2 THEN ttp = ttp + 1: playsnd 48, rate! copypage 2, 1 menu begin$(), ttp, 3, 126, 94, 1, 8, 10, 15 IF spamc = 1 THEN ttx! = ttx! - .8: tty! = tty! - 4.8 IF spamc = 2 THEN ttx! = ttx! - 1.6: tty! = tty! - 2.4 IF spamc = 3 THEN ttx! = ttx! - 1.4: tty! = tty! + 2.3 IF spamc = 4 THEN ttx! = ttx! - .6: tty! = tty! + 5.1 IF TIMER - t# > 5.3 AND spamc = 0 THEN spamc = 1: playsnd 28, rate! IF spamc = 1 AND tty! < 100 THEN spamc = 2 IF spamc = 2 AND tty! < 70 THEN spamc = 3 IF spamc = 3 AND tty! > 100 THEN spamc = 4 IF spamc = 4 AND tty! > 142 THEN spamc = 5: playsnd 15, rate! IF TIMER - t# < 4.5 OR TIMER - t# > 5.7 THEN loadsprite big(), 0, 1 * 4, 50, 50, 3: drawsprite big(), bobpal(), 0 * 16, 150, 134, 1 IF TIMER - t# > 4.49 AND TIMER - t# < 5.1 THEN loadsprite big(), 0, 2 * 4, 50, 50, 3: drawsprite big(), bobpal(), 0 * 16, 150, 134, 1 IF TIMER - t# > 5 AND TIMER - t# < 5.7 THEN loadsprite big(), 0, 3 * 4, 50, 50, 3: drawsprite big(), bobpal(), 0 * 16, 140, 134, 1 IF TIMER - t# > 4.9 AND TIMER - t# < 5.6 THEN loadsprite big(), 0, 4 * 4, 50, 50, 3: drawsprite big(), bobpal(), 6 * 16, 110, 134, 1 IF spamc = 5 THEN loadsprite big(), 0, 6 * 4, 50, 50, 3: drawsprite big(), bobpal(), 22 * 16, INT(ttx!), INT(tty!) + 5, 1 loadsprite big(), 0, 0 * 4, 50, 50, 3: drawsprite big(), bobpal(), 22 * 16, INT(ttx!), INT(tty!), 1 copypage 1, 0 LOOP loadgame: clearpage 1: clearpage 0: setvispage 0: plot(157) = 0: plot(158) = 0: IF fptr > 8 THEN fptr = 0 loadpage buffer(), "data\load.mxs" + CHR$(0), 2 OPEN "data\index.sav" FOR INPUT AS #1: FOR i = 0 TO 24: INPUT #1, begin$(i): NEXT: CLOSE #1 copypage 2, 1 menu begin$(), fptr, 10, 22, 20, 1, 16, 12, 15 copypage 1, 0 fadetopal mainpal(), fade() setkeys DO: setkeys IF ((keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND fptr = 0) OR keyval(kp(9)) > 1 THEN playsnd 49, rate!: fadeto fade(), 0, 0, 0: lcancel = 1: RETURN IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND fptr > 0 AND LEFT$(index$(fptr), 7) <> "-Empty-" THEN playsnd 49, rate!: GOSUB convertd: RETURN IF keyval(kp(1)) > 1 AND fptr > 0 THEN copypage 2, 1: fptr = fptr - 1: playsnd 48, rate! IF keyval(kp(2)) > 1 AND fptr < 24 THEN copypage 2, 1: fptr = fptr + 1: playsnd 48, rate! menu begin$(), fptr, 10, 22, 20, 1, 16, 12, 15 IF fptr < 24 THEN printstr "|", 14, 172, 1 copypage 1, 0 LOOP convertd: DEF SEG = VARSEG(game(0)): BLOAD "data\save." + RIGHT$(STR$(fptr), LEN(STR$(fptr)) - 1), VARPTR(game(0)) x(1) = game(1): y(1) = game(2): mx = game(3): my = game(4): d(1) = game(5) pict(1) = game(6): pale(1) = game(7): anim(1) = game(8): aspeed(1) = game(9): picset(1) = game(10) speed(1) = game(11): flee(1) = game(12): xper(1) = game(13): hp(1) = game(14): ap(1) = game(15) defence(1) = game(16): weapon(1) = game(17): nbhp(1) = game(18): nba(1) = game(19): aframe(1) = game(20) vframe(1) = game(21): chp(1) = game(22): levelup(1) = game(23): nice(1) = game(24): seed(1) = game(25) font = game(26): fcol = game(27): stemp = game(28): stempx = game(29): swim(1) = game(30) cmax = game(31): csr(1) = game(32): csr(2) = game(33) FOR i = 35 TO 40: inft#(i - 34) = game(i): inft#(i - 34) = inft#(i - 34) * 10: NEXT FOR i = 41 TO 43: temp1p(i - 39) = game(i): NEXT FOR i = 44 TO 46: temp1x(i - 42) = game(i): NEXT FOR i = 47 TO 49: temp1y(i - 45) = game(i): NEXT debug = game(401): allitems = game(402): say(1) = game(403) FOR i = 50 TO 450: plot(i - 50) = game(i): NEXT i RETURN savegame: clearpage 1: clearpage 0: setvispage 0: plot(157) = 0: plot(158) = 0 GOSUB saveback OPEN "data\index.sav" FOR INPUT AS #1: FOR i = 0 TO 24: INPUT #1, begin$(i): NEXT i: CLOSE #1 begin$(0) = "RETURN TO GAME" menu begin$(), fptr, 9, 22, 20, 1, 16, 0, 15 copypage 1, 0 FOR i = 1 TO 6: tempinf#(i) = TIMER: NEXT fadetopal mainpal(), fade() setkeys DO: setkeys IF ((keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND fptr = 0) OR keyval(kp(9)) > 1 THEN playsnd 49, rate! FOR j = 1 TO 6: IF inft#(j) > 0 THEN inft#(j) = inft#(j) + (TIMER - tempinf#(j)) NEXT j: fadeto fade(), 0, 0, 0: needf = 1: RETURN END IF IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND fptr = 26 THEN playsnd 49, rate!: fadeto fade(), 0, 0, 0: RETURN early IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND fptr < 25 AND fptr > 0 THEN playsnd 49, rate!: GOSUB converts: fadeto fade(), INT(RND * 20), INT(RND * 20), INT(RND * 20): GOTO savegame IF keyval(kp(1)) > 1 AND fptr > 0 THEN GOSUB saveback: fptr = fptr - 1: playsnd 48, rate! IF keyval(kp(2)) > 1 AND fptr < 26 THEN GOSUB saveback: fptr = fptr + 1: playsnd 48, rate! IF keyval(kp(4)) > 1 AND fptr = 25 AND font > 1 THEN GOSUB saveback: font = font - 1: CALL fontset(font, font()): playsnd 48, rate! IF keyval(kp(3)) > 1 AND fptr = 25 AND font < 6 THEN GOSUB saveback: font = font + 1: CALL fontset(font, font()): playsnd 48, rate! IF fptr < 25 THEN menu begin$(), fptr, 9, 22, 20, 1, 16, 9, 15 IF fptr > 24 THEN menu begin$(), 24, 9, 22, 20, 1, 16, 0, 15: textcolor 9, 0: printstr ">", 12, 20 + ((fptr - 16) * 16), 1: textcolor 15, 0 printstr scribe$(font), 120, 164, 1 copypage 1, 0 LOOP saveback: loadpage buffer(), "data\save.mxs" + CHR$(0), 1: printstr "CHANGE FONT", 24, 164, 1: printstr "QUIT", 24, 180, 1: RETURN converts: old$ = index$(fptr) index$(fptr) = MID$(index$(fptr), 1, 8) IF LEFT$(index$(fptr), 7) = "-Empty-" THEN index$(fptr) = "" short$ = RIGHT$(index$(fptr), 1) WHILE short$ = " " index$(fptr) = MID$(index$(fptr), 1, LEN(index$(fptr)) - 1) short$ = RIGHT$(index$(fptr), 1) WEND setkeys GOSUB shutoff DO: w$ = "": w$ = INKEY$ IF w$ = CHR$(27) THEN index$(fptr) = old$: GOSUB switchon: playsnd 49, rate!: RETURN savegame IF w$ = CHR$(13) AND index$(fptr) <> "" THEN playsnd 49, rate!: GOTO cv1 IF w$ = CHR$(8) AND LEN(index$(fptr)) > 0 THEN playsnd 48, rate!: index$(fptr) = MID$(index$(fptr), 1, LEN(index$(fptr)) - 1): GOTO cv2 IF w$ <> "" AND LEN(index$(fptr)) < 8 THEN playsnd 48, rate!: index$(fptr) = index$(fptr) + w$ cv2: textcolor 1, 9: printstr " ", 22, 20 + (SMALL(fptr, 8) * 16), 1 textcolor 15, 0: printstr index$(fptr), 22, 20 + (SMALL(fptr, 8) * 16), 1 printstr scribe$(font), 120, 164, 1 copypage 1, 0 LOOP cv1: textcolor 15, 0: GOSUB switchon CALL clock(rtime$) CALL getday(leap(), dbefore(), week$(), plot(), ts$, day$) FOR i = 0 TO 8 - LEN(index$(fptr)) index$(fptr) = index$(fptr) + " ": NEXT i index$(fptr) = index$(fptr) + rtime$ + " " + day$ IF LEN(index$(fptr)) <= 36 THEN index$(fptr) = index$(fptr) + " " + MID$(DATE$, 1, 5) OPEN "data\index.sav" FOR OUTPUT AS #1 FOR i = 0 TO 24: WRITE #1, index$(i): NEXT CLOSE #1 game(1) = x(1): game(2) = y(1): game(3) = mx: game(4) = my: game(5) = d(1) game(6) = pict(1): game(7) = pale(1): game(8) = anim(1): game(9) = aspeed(1): game(10) = picset(1) game(11) = speed(1): game(12) = flee(1): game(13) = xper(1): game(14) = hp(1): game(15) = ap(1) game(16) = defence(1): game(17) = weapon(1): game(18) = nbhp(1): game(19) = nba(1): game(20) = aframe(1) game(21) = vframe(1): game(22) = chp(1): game(23) = levelup(1): game(24) = nice(1): game(25) = seed(1) game(26) = font: game(27) = fcol: game(28) = stemp: game(29) = stempx: game(30) = swim(1) game(31) = cmax: game(32) = csr(1): game(33) = csr(2) FOR i = 35 TO 40: game(i) = INT(inft#(i - 34) / 10): NEXT FOR i = 41 TO 43: game(i) = picset(i - 39): NEXT FOR i = 44 TO 46: game(i) = x(i - 42): NEXT FOR i = 47 TO 49: game(i) = y(i - 45): NEXT game(401) = debug: game(402) = allitems: game(403) = say(1) FOR i = 50 TO 450: game(i) = plot(i - 50): NEXT i DEF SEG = VARSEG(game(0)): BSAVE "data\save." + RIGHT$(STR$(fptr), LEN(STR$(fptr)) - 1), VARPTR(game(0)), 2000 textcolor 15, 0: RETURN newscreen: IF plot(169) = 1 THEN GOSUB weirset DEF SEG = VARSEG(targ(0)): BLOAD "data\target.bob", VARPTR(targ(0)) CALL getday(leap(), dbefore(), week$(), plot(), ts$, day$) CALL timeofday(timeoday, plot(), pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba()) FOR i = 1 TO 12: xyc(i) = 0: NEXT i GOSUB loadrow: GOSUB loadscreen: GOSUB drawmap: charload: CALL checkcon(plot(), ickcon(), mx, my, picset()): CALL itemscon(plot(), itset(), picset(), iactive(), mx, my) printstr name$(5), 320 - (8 * LEN(name$(5))), 0, 2 IF (oddpal AND 1) = 1 THEN pal$ = "1": GOSUB sethepal GOSUB corspeed needf = 0 RETURN findexit: IF (room((INT(x(1) / 20) + (INT((y(1) - 15) / 20)) * 16) * 2 + 1) AND 8192) <> 8192 THEN RETURN IF swim(1) = 1 THEN IF pict(1) = 2 THEN scon = 1: GOSUB scuload END IF FOR i = 1 TO 200 IF tilex(i) = (mx * 16) + (x(1) / 20) AND tiley(i) = (my * 9) + ((y(1) - 15) / 20) THEN IF tile(i) > 0 THEN plot(ABS(tile(i))) = 1 IF tile(i) < 0 THEN plot(ABS(tile(i))) = 0 CALL checkcon(plot(), ickcon(), mx, my, picset()): CALL itemscon(plot(), itset(), picset(), iactive(), mx, my): tiletemp = 1 END IF NEXT IF tiletemp = 1 THEN playsnd 3, rate FOR i = 1 TO 500 IF doorx(i) = (mx * 16) + (x(1) / 20) AND doory(i) = (my * 9) + ((y(1) - 15) / 20) THEN mx = INT(exitx(i) / 16): my = INT(exity(i) / 9): x(1) = (exitx(i) - mx * 16) * 20: y(1) = (exity(i) - my * 9) * 20 + 15: fadeto fade(), 0, 0, 0: GOSUB newscreen _ : needf = 1: i = 500 NEXT RETURN kback: knock(o) = knock(o) - 1: IF knock(o) = 0 AND chp(o) <= 0 THEN picset(o) = 0: GOSUB dropitem: IF o <> 1 THEN CALL setonkill(o, target(), picset(), beat(), bobpal(), x(), y(), mx, my, ickcon(), chp(), plot(), itset(), iactive(), xper(), _ levelup(), hp()) oo = o IF kd(o) = 1 AND speed(o) <> 0 THEN GOSUB tryup: GOSUB goup: GOTO kb1 IF kd(o) = 2 AND speed(o) <> 0 THEN GOSUB tryright: GOSUB goright: GOTO kb1 IF kd(o) = 3 AND speed(o) <> 0 THEN GOSUB trydown: GOSUB godown: GOTO kb1 IF kd(o) = 4 AND speed(o) <> 0 THEN GOSUB tryleft: GOSUB goleft: GOTO kb1 kb1: o = oo IF knock(o) = 0 THEN speed(o) = stemp(o): stemp(o) = 0: IF speed(o) <> 0 THEN CALL align(o, x(), y(), speed()) IF drain > 0 THEN aframe(o) = 6 RETURN wepmove: FOR o = 5 TO 8: IF picset(o) = 0 THEN acounter(o) = 0: GOTO wm1 cfull2 = 0: IF cfull = 1 AND o = 5 THEN cfull2 = 1 r(o) = r(o) - 1: IF r(o) = 0 AND boomer(o + (8 * (SGN(cfull2)))) = 1 AND boomf(o) = 0 THEN r(o) = 2 * range(o + (8 * (SGN(cfull2)))): boomf(o) = 1: htarg(o - 4) = o - 4 IF r(o) = 0 THEN picset(o) = 0: boomf(o) = 0 IF spin(o + (8 * (SGN(cfull2)))) > 0 THEN CALL dizzy(o, spinctr(), spin(), cfull2, d(), inuse(), x(), y()) IF homing(o + (8 * (SGN(cfull2)))) = 1 THEN GOSUB animate: GOSUB moveaim: GOTO wm3 IF homing(o + (8 * (SGN(cfull2)))) = 2 OR boomf(o) = 1 THEN GOSUB animate: GOSUB seektarg: GOTO wm3 IF homing(o + (8 * (SGN(cfull2)))) = 3 THEN GOSUB selfaim IF homing(o + (8 * (SGN(cfull2)))) = 4 THEN x(o) = x(o - 4) + targx(o - 4) + INT(RND * 20) - 10: y(o) = y(o - 4) + targy(o - 4) + INT(RND * 20) - 10: GOTO wm3 IF d(o) = 1 THEN GOSUB animate: CALL wepup(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF d(o) = 2 THEN GOSUB animate: CALL wepright(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF d(o) = 3 THEN GOSUB animate: CALL wepdown(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF d(o) = 4 THEN GOSUB animate: CALL wepleft(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) wm3: FOR i = 1 TO 12 IF ABS(x(o) - x(i)) < 18 AND ABS(y(o) - y(i)) < 20 THEN IF o = i + 4 AND boomer(o + (8 * (SGN(cfull2)))) = 1 THEN r(o) = 1: GOTO wm2 IF o = i + 4 THEN GOTO wm2 IF o = i OR picset(i) < 1 THEN GOTO wm2 IF i > 8 AND defence(i) = 4 THEN GOTO wm2 IF i > 8 AND defence(i) <> defence(o + (8 * (SGN(cfull2)))) THEN GOTO wm2 CALL hitit(i, o, aframe, aframe(), picset(), speed(), cfull2, stemp(), kd(), d(), kspeed(), knock(), say(), inuse(), ai1(), rate!, target(), defence(), chp(), hp(), drain, ap(), charge, absorb(), ahit) wm2: END IF NEXT aframe(o) = aframe wm1: NEXT: RETURN moveaim: stempx = speed(o) IF targx(o - 4) > 0 THEN speed(o) = xaim(o): GOSUB animate: CALL wepright(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF targx(o - 4) < 0 THEN speed(o) = xaim(o): GOSUB animate: CALL wepleft(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF targy(o - 4) < 0 THEN speed(o) = yaim(o): GOSUB animate: CALL wepup(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF targy(o - 4) > 0 THEN speed(o) = yaim(o): GOSUB animate: CALL wepdown(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) speed(o) = stempx: RETURN seektarg: stempx = speed(o - 4) IF x(htarg(o - 4)) > x(o) THEN GOSUB animate: CALL wepright(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF x(htarg(o - 4)) < x(o) THEN GOSUB animate: CALL wepleft(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF y(htarg(o - 4)) < y(o) THEN GOSUB animate: CALL wepup(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) IF y(htarg(o - 4)) > y(o) THEN GOSUB animate: CALL wepdown(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) speed(o - 4) = stempx: RETURN selfaim: IF x(o) < 20 OR x(o) > 300 OR y(o) < 20 OR y(o) > 180 THEN RETURN IF keyval(kp(1)) > 0 THEN IF (d(o) = 1 OR d(o) = 3) AND speed(o + (8 * (SGN(cfull2)))) > 0 THEN GOTO sf1 stempa = speed(o + (8 * (SGN(cfull2)))): speed(o) = 5 CALL wepup(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()): speed(o + (8 * (SGN(cfull2)))) = stempa sf1: END IF IF keyval(kp(2)) > 0 THEN IF (d(o) = 1 OR d(o) = 3) AND speed(o + (8 * (SGN(cfull2)))) > 0 THEN GOTO sf2 stempa = speed(o + (8 * (SGN(cfull2)))): speed(o) = 5 CALL wepdown(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()): speed(o + (8 * (SGN(cfull2)))) = stempa sf2: END IF IF keyval(kp(4)) > 0 THEN IF (d(o) = 2 OR d(o) = 4) AND speed(o + (8 * (SGN(cfull2)))) > 0 THEN GOTO sf3 stempa = speed(o + (8 * (SGN(cfull2)))): speed(o) = 5 CALL wepleft(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()): speed(o + (8 * (SGN(cfull2)))) = stempa sf3: END IF IF keyval(kp(3)) > 0 THEN IF (d(o) = 2 OR d(o) = 4) AND speed(o + (8 * (SGN(cfull2)))) > 0 THEN GOTO sf4 stempa = speed(o + (8 * (SGN(cfull2)))): speed(o) = 5 CALL wepright(o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()): speed(o + (8 * (SGN(cfull2)))) = stempa sf4: END IF RETURN strike: IF o > 5 THEN charge = 0: cfull2 = 0: GOTO sk1 cfull = 0 charge = INT(TIMER - charge#) IF charge > fulpow(5) THEN charge = fulpow(5) IF charge > cmax THEN charge = cmax IF charge = fulpow(5) THEN cfull = 1 sk1: ai1(o) = 0 spinctr(o - 4) = 0: spin(o - 4) = d(o - 4) tmpd = d(o - 4) tmpx = x(o - 4) tmpy = y(o - 4) d(o) = tmpd x(o) = tmpx y(o) = tmpy IF tmpd = 1 AND tmpy > 35 THEN y(o) = tmpy - 20: picset(o) = 1 IF tmpd = 2 AND tmpx < 320 THEN x(o) = tmpx + 20: picset(o) = 1 IF tmpd = 3 AND tmpy < 175 THEN y(o) = tmpy + 20: picset(o) = 1 IF tmpd = 4 AND tmpx > 0 THEN x(o) = tmpx - 20: picset(o) = 1 inuse(o - 4) = fuser(o + (8 * SGN(cfull))) r(o) = range(o + (8 * SGN(cfull))) aframe = 5: say(1) = 26: IF RND * 100 < 33 THEN say(1) = 11: IF RND * 100 < 33 THEN say(1) = 20 IF say(o + (8 * SGN(cfull))) > 0 THEN playsnd say(o + (8 * SGN(cfull))), rate! IF homing(o + (8 * SGN(cfull))) > 0 AND homing(o + (8 * SGN(cfull))) <> 3 THEN sk2: htarg(o - 4) = INT(RND * 4) + 1 IF picset(2) < 1 AND picset(3) < 1 AND picset(4) < 1 THEN picset(5) = 0: GOTO sk3 IF o > 5 THEN htarg(o - 4) = target(o - 4) + 1 IF picset(htarg(o - 4)) = 0 THEN GOTO sk2 IF htarg(o - 4) = o - 4 THEN GOTO sk2 CALL sethtarg(targx(), targy(), o, x(), y(), htarg(), speed(), cfull3, xaim(), yaim(), dist!, divnum!) sk3: END IF RETURN strikemove: cfull3 = 0: IF o = 1 AND cfull = 1 THEN cfull3 = 1 stempx = speed(o): speed(o) = muser(o + 4 + (8 * (SGN(cfull3)))) IF d(o) = 1 THEN GOSUB tryup: GOSUB goup: IF cant = 1 THEN picset(o + 4) = 0 IF d(o) = 2 THEN GOSUB tryright: GOSUB goright: IF cant = 1 THEN picset(o + 4) = 0 IF d(o) = 3 THEN GOSUB trydown: GOSUB godown: IF cant = 1 THEN picset(o + 4) = 0 IF d(o) = 4 THEN GOSUB tryleft: GOSUB goleft: IF cant = 1 THEN picset(o + 4) = 0 speed(o) = stempx IF inuse(o) = 1 THEN CALL align(o, x(), y(), speed()) RETURN dropitem: IF iactive(o) = 1 THEN iactive(o) = 0: picset(o + 8) = 1 x(o + 8) = x(o): y(o + 8) = y(o) xyc(o + 8) = 1 END IF RETURN beastai: ai1(o) = d(o) IF inuse(o) > 0 AND muser(o + 4) <> 0 THEN GOSUB strikemove IF inlt(o) = 1 THEN IF RND * 100 > inert(o) THEN inlt(o) = 0 IF (RND * 100 < inert(o) OR knock(o) > 0 OR inuse(o) > 0) OR inlt(o) = 1 THEN inlt(o) = 1: GOTO bai4 IF RND * 100 < atack(o) AND weapon(o) > 0 THEN GOSUB euwep: GOTO bai IF RND * 100 < rand(o) THEN ai1(o) = INT(RND * 4) + 1: d(o) = ai1(o) IF RND * 100 < ABS(chase(o)) THEN tempd = RND IF tempd = 0 THEN GOSUB bai2 IF tempd = 1 THEN GOSUB bai5 ai1(o) = d(o): GOTO bai END IF IF RND * 100 < ABS(mimic(o)) THEN GOSUB bai3: GOTO bai GOSUB animate ON ai1(o) GOSUB tryup, tryright, trydown, tryleft ON ai1(o) GOSUB goup, goright, godown, goleft bai: aframe(o) = aframe bai4: IF inuse(o) > 0 THEN aframe = 5: inuse(o) = inuse(o) - 1 RETURN bai2: IF x(o) > x(target(o) + 1) THEN IF SGN(chase(o)) = 1 THEN GOSUB turnleft: GOSUB tryleft: GOSUB goleft ELSE GOSUB turnright: GOSUB tryright: GOSUB goright IF x(o) < x(target(o) + 1) THEN IF SGN(chase(o)) = 1 THEN GOSUB turnright: GOSUB tryright: GOSUB goright ELSE GOSUB turnleft: GOSUB tryleft: GOSUB goleft RETURN bai5: IF y(o) > y(target(o) + 1) THEN IF SGN(chase(o)) = 1 THEN GOSUB turnup: GOSUB tryup: GOSUB goup ELSE GOSUB turndown: GOSUB trydown: GOSUB godown IF y(o) < y(target(o) + 1) THEN IF SGN(chase(o)) = 1 THEN GOSUB turndown: GOSUB trydown: GOSUB godown ELSE GOSUB turnup: GOSUB tryup: GOSUB goup RETURN bai3: IF SGN(mimic(o)) = 1 THEN IF keyval(kp(1)) > 0 THEN GOSUB turnup: GOSUB tryup: GOSUB goup IF keyval(kp(3)) > 0 THEN GOSUB turnright: GOSUB tryright: GOSUB goright IF keyval(kp(2)) > 0 THEN GOSUB turndown: GOSUB trydown: GOSUB godown IF keyval(kp(4)) > 0 THEN GOSUB turnleft: GOSUB tryleft: GOSUB goleft ELSE IF keyval(kp(1)) > 0 THEN GOSUB turndown: GOSUB trydown: GOSUB godown IF keyval(kp(3)) > 0 THEN GOSUB turnleft: GOSUB tryleft: GOSUB goleft IF keyval(kp(2)) > 0 THEN GOSUB turnup: GOSUB tryup: GOSUB goup IF keyval(kp(4)) > 0 THEN GOSUB turnright: GOSUB tryright: GOSUB goright END IF ai1(o) = d(o) RETURN euwep: IF RND * 100 < atack(o) AND picset(o + 4) = 0 THEN o = o + 4: aframe(o) = 1: GOSUB strike: o = o - 4: GOTO eu1 IF (range(o + 4) * speed(o + 4)) + speed(target(o) + 1) >= ABS(x(o) - x(target(o) + 1)) AND (range(o + 4) * speed(o + 4)) + speed(target(o) + 1) >= ABS(y(o) - y(target(o) + 1)) AND picset(o + 4) = 0 THEN o = o + 4: aframe(o) = 1: GOSUB strike: o = o _ - 4: GOTO eu1 eu1: RETURN fleew: FOR o = 1 TO 4: IF picset(o) = 0 OR picset(o + 4) > 0 OR flee(o) = 0 OR o = i THEN GOTO fw1 IF x(o) >= x(i) AND (d(i) = 2 OR d(i) = 4) AND x(o) - x(i) < ((r(i) + 1) * (speed(i) + 1)) + 25 THEN GOSUB turnright: GOSUB tryright: GOSUB goright: GOTO fw1 IF x(o) <= x(i) AND (d(i) = 4 OR d(i) = 2) AND x(i) - x(o) < ((r(i) + 1) * (speed(i) + 1)) + 25 THEN GOSUB turnleft: GOSUB tryleft: GOSUB goleft: GOTO fw1 IF y(o) >= y(i) AND (d(i) = 3 OR d(i) = 1) AND y(o) - y(i) < ((r(i) + 1) * (speed(i) + 1)) + 25 THEN GOSUB turndown: GOSUB trydown: GOSUB godown: GOTO fw1 IF y(o) <= y(i) AND (d(i) = 1 OR d(i) = 3) AND y(i) - y(o) < ((r(i) + 1) * (speed(i) + 1)) + 25 THEN GOSUB turnup: GOSUB tryup: GOSUB goup: GOTO fw1 fw1: NEXT o: RETURN turnup: d(o) = 1: GOSUB animate: RETURN turnright: d(o) = 2: GOSUB animate: RETURN turndown: d(o) = 3: GOSUB animate: RETURN turnleft: d(o) = 4: GOSUB animate: RETURN harmyou: IF picset(whit) = 0 OR drain > 0 OR knock(o) <> 0 OR knock(whit) <> 0 OR picset(o + 4) > 0 THEN RETURN IF o = 1 AND inflict(whit) > 0 AND RND * 100 < infprob(whit) THEN inflict(1) = inflict(whit): inft#(inflict(1)) = TIMER: plot(infplot(inflict(1))) = 1 IF o <> 1 AND whit = 1 AND inflict(o) > 0 AND RND * 100 < infprob(o) THEN inflict(1) = inflict(o): inft#(inflict(1)) = TIMER: plot(infplot(inflict(1))) = 1 IF whit = 1 AND nice(o) = 0 AND knock(1) = 0 AND stemp(1) = 0 THEN drain = drain + ap(o): stemp(1) = speed(1): speed(1) = 10: knock(1) = 2: kd(1) = d(whit): RETURN IF o = 1 AND nice(whit) = 0 AND knock(1) = 0 AND stemp(1) = 0 THEN drain = drain + ap(whit): stemp(1) = speed(1): speed(1) = 10: knock(1) = 2: kd(1) = d(1) + 2: IF kd(1) > 4 THEN kd(1) = kd(1) - 4 IF keyval(kp(14)) = 0 AND (nice(whit) > 0 AND o = 1) AND plot(64) = 0 THEN printstr "Press " + kp$ + " to speak", 80, 190, dpage IF keyval(kp(14)) = 0 AND (nice(whit) > 0 AND o = 1) AND plot(64) = 1 THEN printstr "Toads cannot speak.", 80, 190, dpage IF keyval(kp(14)) > 0 AND plot(64) = 0 THEN GOSUB speakto RETURN speakto: IF nice(whit) > 0 AND o = 1 THEN presp = 0: conv = whosay(((((my - 1) * 16) + mx - 1) * 3) + whit - 1): GOSUB converse IF whosay(((((my - 1) * 16) + mx - 1) * 3) + whit - 1) < 0 THEN GOSUB purchase RETURN tryup: cant = 0: look = 0 IF inuse(o) > 0 AND muser(o + 4 + (8 * (SGN(cfull3)))) = 0 THEN cant = 1: RETURN IF y(o) - speed(o) < 15 AND (my = 1 OR o <> 1 OR inuse(o) > 0) THEN cant = 1: RETURN IF y(o) - speed(o) < 15 THEN my = my - 1: GOSUB loadrow: my = my + 1: look = 1: y(o) = 175 + speed(o) tempb = INT((y(o) - 15 - speed(o)) / 20) tempa = INT(x(o) / 20) + tempb * 16 tempc = room((tempa) * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 4) = 4 THEN cant = 1 tempa = INT((x(o) + 19) / 20) + tempb * 16 tempc = room((tempa) * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 4) = 4 THEN cant = 1 IF x(o) / 20 <> INT(x(o) / 20) THEN tempa = INT(x(o) / 20) + tempb * 16 tempc = room((tempa) * 2 + 1) / 256 IF (tempc AND 2) = 2 THEN cant = 1 tempa = INT((x(o) + 19) / 20) + tempb * 16 tempc = room((tempa) * 2 + 1) / 256 IF (tempc AND 8) = 8 THEN cant = 1 END IF IF debug = 1 AND keyval(15) > 0 THEN cant = 0 IF knock(o) > 0 THEN RETURN FOR i = 9 TO 12 IF picset(i) = 0 OR look = 1 THEN GOTO tr5 IF INT((y(o) - speed(o)) / 20) = INT(y(i) / 20) THEN IF INT(x(o) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 AND o = 1 THEN take = i: picset(i) = 0 END IF END IF IF INT((y(o) - speed(o)) / 20) = INT(y(i) / 20) THEN IF INT((x(o) + 19) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 AND o = 1 THEN take = i: picset(i) = 0 END IF END IF tr5: NEXT i whit = 0 FOR i = 1 TO 4 IF picset(i) = 0 OR o > 4 OR look = 1 THEN GOTO tr1 IF INT((y(o) - speed(o)) / 20) = INT(y(i) / 20) AND INT(x(o) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1: whit = i IF INT((y(o) - speed(o)) / 20) = INT(y(i) / 20) AND INT((x(o) + 19) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1: whit = i tr1: NEXT i IF whit > 0 AND ahit = 0 AND inuse(1) = 0 THEN GOSUB harmyou RETURN goup: tiletemp = 0 IF cant = 1 AND look = 1 THEN GOSUB loadrow: y(o) = 15 IF cant = 0 THEN y(o) = y(o) - speed(o): xyc(o) = 1: IF look = 1 THEN my = my - 1: y(o) = 175: GOSUB newscreen RETURN tryright: cant = 0: look = 0 IF inuse(o) > 0 AND muser(o + 4 + (8 * (SGN(cfull3)))) = 0 THEN cant = 1: RETURN IF x(o) + speed(o) > 300 AND (mx = 16 OR o <> 1 OR inuse(o) > 0) THEN cant = 1: RETURN IF x(o) + speed(o) > 300 THEN mx = mx + 1: GOSUB loadrow: look = 1: x(o) = 0 - speed(o) tempa = INT((x(o) + 19 + speed(o)) / 20) tempd = (tempa + INT((y(o) - 15) / 20) * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 8) = 8 THEN cant = 1 tempa = INT((x(o) + 19 + speed(o)) / 20) tempd = (tempa + INT((y(o) - 15 + 19) / 20) * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 8) = 8 THEN cant = 1 IF (y(o) + 5) / 20 <> INT((y(o) + 5) / 20) THEN tempd = (tempa + INT((y(o) - 15) / 20) * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 4) = 4 THEN cant = 1 tempd = (tempa + INT(((y(o) - 15) + 19) / 20) * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 1) = 1 THEN cant = 1 END IF IF debug = 1 AND keyval(15) > 0 THEN cant = 0 IF knock(o) > 0 THEN RETURN FOR i = 9 TO 12 IF picset(i) = 0 OR o > 1 OR look = 1 THEN GOTO tr6 IF INT(y(o) / 20) = INT(y(i) / 20) THEN IF INT((x(o) + 19 + speed(o)) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 THEN take = i: picset(i) = 0 END IF END IF IF INT((y(o) + 19) / 20) = INT((y(i) + 19) / 20) THEN IF INT((x(o) + 19 + speed(o)) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 THEN take = i: picset(i) = 0 END IF END IF tr6: NEXT i whit = 0 FOR i = 1 TO 4 IF picset(i) = 0 OR o > 4 OR look = 1 THEN GOTO tr2 IF INT(y(o) / 20) = INT(y(i) / 20) AND INT((x(o) + 19 + speed(o)) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1: whit = i IF INT((y(o) + 19) / 20) = INT((y(i) + 19) / 20) AND INT((x(o) + 19 + speed(o)) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1: whit = i tr2: NEXT i IF whit > 0 AND ahit = 0 AND inuse(1) = 0 THEN GOSUB harmyou RETURN goright: tiletemp = 0 IF cant = 1 AND look = 1 THEN mx = mx - 1: GOSUB loadrow: x(o) = 300 IF cant = 0 THEN x(o) = x(o) + speed(o): xyc(o) = 1: IF look = 1 THEN x(o) = 0: GOSUB newscreen RETURN trydown: cant = 0: look = 0 IF inuse(o) > 0 AND muser(o + 4 + (8 * (SGN(cfull3)))) = 0 THEN cant = 1: RETURN IF y(o) + speed(o) > 175 AND (my = 32 OR o <> 1 OR inuse(o) > 0) THEN cant = 1: RETURN IF y(o) + speed(o) > 175 THEN my = my + 1: GOSUB loadrow: my = my - 1: look = 1: y(o) = 15 - speed(o) tempb = INT(((y(o) - 15) + 19 + speed(o)) / 20) tempd = (INT(x(o) / 20) + tempb * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 1) = 1 THEN cant = 1 tempd = (INT((x(o) + 19) / 20) + tempb * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 1) = 1 THEN cant = 1 IF x(o) / 20 <> INT(x(o) / 20) THEN tempd = (INT(x(o) / 20) + tempb * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 2) = 2 THEN cant = 1 tempd = (INT((x(o) + 19) / 20) + tempb * 16) tempc = room(tempd * 2 + 1) / 256 IF (tempc AND 8) = 8 THEN cant = 1 END IF IF debug = 1 AND keyval(15) > 0 THEN cant = 0 IF knock(o) > 0 THEN RETURN FOR i = 9 TO 12 IF picset(i) = 0 OR o > 1 OR look = 1 THEN GOTO tr7 IF INT((y(o) + 19 + speed(o)) / 20) = INT((y(i) + 19) / 20) THEN IF INT(x(o) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 THEN take = i: picset(i) = 0 END IF END IF IF INT((y(o) + 19 + speed(o)) / 20) = INT((y(i) + 19) / 20) THEN IF INT((x(o) + 19) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 THEN take = i: picset(i) = 0 END IF END IF tr7: NEXT i whit = 0 FOR i = 1 TO 4 IF picset(i) = 0 OR o > 4 OR look = 1 THEN GOTO tr3 IF INT((y(o) + 19 + speed(o)) / 20) = INT((y(i) + 19) / 20) AND INT(x(o) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1: whit = i IF INT((y(o) + 19 + speed(o)) / 20) = INT((y(i) + 19) / 20) AND INT((x(o) + 19) / 20) = INT((x(i) + 19) / 20) AND o <> i THEN cant = 1: whit = i tr3: NEXT i IF whit > 0 AND ahit = 0 AND inuse(1) = 0 THEN GOSUB harmyou RETURN godown: tiletemp = 0 IF cant = 1 AND look = 1 THEN GOSUB loadrow: y(o) = 175 IF cant = 0 THEN y(o) = y(o) + speed(o): xyc(o) = 1: IF look = 1 THEN my = my + 1: y(o) = 15: GOSUB newscreen RETURN tryleft: cant = 0: look = 0 IF inuse(o) > 0 AND muser(o + 4 + (8 * (SGN(cfull3)))) = 0 THEN cant = 1: RETURN IF x(o) - speed(o) < 0 AND (mx = 1 OR o <> 1 OR inuse(o) > 0) THEN cant = 1: RETURN IF x(o) - speed(o) < 0 THEN mx = mx - 1: GOSUB loadrow: look = 1: x(o) = 300 + speed(o) tempc = room((INT((x(o) - speed(o)) / 20) + INT((y(o) - 15) / 20) * 16) * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 2) = 2 THEN cant = 1 tempc = room((INT((x(o) - speed(o)) / 20) + INT(((y(o) - 15) + 19) / 20) * 16) * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 2) = 2 THEN cant = 1 IF (y(o) + 5) / 20 <> INT((y(o) + 5) / 20) THEN tempc = room((INT((x(o) - speed(o)) / 20) + INT((y(o) - 15) / 20) * 16) * 2 + 1) / 256 IF (tempc AND 4) = 4 THEN cant = 1 tempc = room((INT((x(o) - speed(o)) / 20) + INT(((y(o) - 15) + 19) / 20) * 16) * 2 + 1) / 256 IF (tempc AND 1) = 1 THEN cant = 1 END IF IF debug = 1 AND keyval(15) > 0 THEN cant = 0 IF knock(o) > 0 THEN RETURN FOR i = 9 TO 12 IF picset(i) = 0 OR o > 1 OR look = 1 THEN GOTO tr8 IF INT(y(o) / 20) = INT(y(i) / 20) THEN IF INT((x(o) - speed(o)) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 THEN take = i: picset(i) = 0 END IF END IF IF INT((y(o) + 19) / 20) = INT((y(i) + 19) / 20) THEN IF INT((x(o) - speed(o)) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1 IF push(i) = 0 THEN take = i: picset(i) = 0 END IF END IF tr8: NEXT i whit = 0 FOR i = 1 TO 4 IF picset(i) = 0 OR o > 4 OR look = 1 THEN GOTO tr4 IF INT(y(o) / 20) = INT(y(i) / 20) AND INT((x(o) - speed(o)) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1: whit = i IF INT((y(o) + 19) / 20) = INT((y(i) + 19) / 20) AND INT((x(o) - speed(o)) / 20) = INT(x(i) / 20) AND o <> i THEN cant = 1: whit = i tr4: NEXT i IF whit > 0 AND ahit = 0 AND inuse(1) = 0 THEN GOSUB harmyou RETURN goleft: tiletemp = 0 IF cant = 1 AND look = 1 THEN mx = mx + 1: GOSUB loadrow: x(o) = 0 IF cant = 0 THEN x(o) = x(o) - speed(o): xyc(o) = 1: IF look = 1 THEN x(o) = 300: GOSUB newscreen RETURN animate: chargea = 0: IF o = 5 AND cfull = 1 THEN chargea = 8 aframe = aframe(o) acounter(o) = acounter(o) + 1: IF acounter(o) > aspeed(o + chargea) THEN acounter(o) = 0: aframe = aframe + 1: IF aframe > (4 - anim(o + chargea)) THEN aframe = 1 RETURN scuload: IF scon = 1 THEN ty(1) = 32 IF scon = 2 THEN ty(1) = 48 RETURN doordata: DEF SEG = VARSEG(doorx(0)): BLOAD "data\d1.dat", VARPTR(doorx(0)) DEF SEG = VARSEG(doory(0)): BLOAD "data\d2.dat", VARPTR(doory(0)) DEF SEG = VARSEG(exitx(0)): BLOAD "data\e1.dat", VARPTR(exitx(0)) DEF SEG = VARSEG(exity(0)): BLOAD "data\e2.dat", VARPTR(exity(0)) RETURN drawmap: xx = 0: yy = 0: clearpage 2 FOR i = 0 TO 287 STEP 2 cyy = INT(((room(i) - 1) / 320) * 200) cxx = (((room(i) - 1) / 320) * 200 - cyy) * 320 IF room(i) > 0 THEN loadsprite blocker(), cxx, cyy, 20, 20, 3: drawsprite blocker(), chroma(), (room(i + 1) AND 255) * 16, (xx * 20), (yy * 20) + 20, 2 xx = xx + 1: IF xx > 15 THEN xx = 0: yy = yy + 1 NEXT i clearpage 3 copypage 2, dpage: copypage 2, vpage RETURN loadrow: setpicstuf room(), 576, -1 loadset "data\direspam.map" + CHR$(0), ((my - 1) * 16) + (mx - 1), 0 RETURN loadscreen: set = mapset(((my - 1) * 16) + mx) F$ = "data\block" + MID$(STR$(set), 2, LEN(STR$(set)) - 1) + ".mxs" loadpage buffer(), F$ + CHR$(0), 3 RETURN converse: IF conv < 0 OR plot(157) = 1 THEN RETURN copypage 2, dpage: copypage 2, vpage OPEN "data\phrase1.bob" FOR INPUT AS #1 IF conv = 1 THEN GOTO co1 FOR k = 2 TO conv INPUT #1, l FOR j = 1 TO l INPUT #1, nil$ NEXT j: NEXT k co1: INPUT #1, l, diaw, dia(0), diaset(0), quest FOR k = 1 TO quest co6: IF k > quest THEN GOTO co2 INPUT #1, prompt$(k - 1), argu(k), dia(k), diaset(k), diac(k), diac2(k), setcon(k), setcon2(k), loopb(k) IF diac(k) > 0 AND plot(ABS(diac(k))) <> 1 THEN quest = quest - 1: GOTO co6 IF diac(k) < 0 AND plot(ABS(diac(k))) = 1 THEN quest = quest - 1: GOTO co6 IF diac2(k) > 0 AND plot(ABS(diac2(k))) <> 1 THEN quest = quest - 1: GOTO co6 IF diac2(k) < 0 AND plot(ABS(diac2(k))) = 1 THEN quest = quest - 1: GOTO co6 co2: NEXT k INPUT #1, cancel, cancel$ CLOSE #1 dctr = 0: arg = 0: ccc = 1 IF dia(0) > 0 AND presp = 0 THEN presp = 1: GOSUB loadtext: GOSUB texttalk co4: dia(0) = 0 sayw(0) = diaw: sayl(0) = quest + cancel sayx(0) = 152 - ((sayw(0) * 8) / 2) sayy(0) = 100 - ((sayl(0) * 8) / 2) IF quest = 1 THEN dctr = 1: GOSUB co5: GOTO co7 textcolor 15, 0: CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, dpage, arg): textcolor 19, 0 IF cancel > 0 THEN prompt$(quest) = cancel$ menu prompt$(), 0, quest + cancel, sayx(0) + 20, sayy(0) + 16, dpage, 8, 15, 16 copypage dpage, vpage dctr = ccc t# = TIMER: WHILE t# + .2 > TIMER: WEND menu prompt$(), 0, quest + cancel, sayx(0) + 20, sayy(0) + 16, vpage, 8, 17, 16 setkeys co3: setkeys IF keyval(kp(1)) > 1 AND dctr > 1 THEN playsnd 48, rate!: GOSUB wipe: dctr = dctr - 1: copypage dpage, vpage: menu prompt$(), dctr - 1, quest + cancel, sayx(0) + 20, sayy(0) + 16, vpage, 8, 17, 16: GOTO co3 IF keyval(kp(2)) > 1 AND dctr < quest + cancel THEN playsnd 48, rate!: GOSUB wipe: dctr = dctr + 1: copypage dpage, vpage: menu prompt$(), dctr - 1, quest + cancel, sayx(0) + 20, sayy(0) + 16, vpage, 8, 17, 16: GOTO co3 IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND dctr = quest + cancel AND cancel = 1 THEN playsnd 49, rate!: GOTO co7 IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) THEN playsnd 49, rate!: setkeys: GOSUB co5: IF loopb(dctr) = 1 THEN dctr = 0: setkeys: GOTO converse ELSE GOTO co7 GOTO co3 co5: FOR arg = 0 TO argu(dctr) copypage 2, dpage GOSUB loadtext: textcolor 15, 0: GOSUB texttalk NEXT arg IF setcon(dctr) > 0 THEN plot(ABS(setcon(dctr))) = 1 IF setcon(dctr) < 0 THEN plot(ABS(setcon(dctr))) = 0 IF setcon2(dctr) > 0 THEN plot(ABS(setcon2(dctr))) = 1 IF setcon2(dctr) < 0 THEN plot(ABS(setcon2(dctr))) = 0 ccc = dctr: arg = 0 RETURN co7: t# = TIMER: WHILE t# + .5 > TIMER: WEND: armwep = 0: charge# = 0: setkeys: RETURN wipe: textcolor 15, 15 FOR k = 1 TO quest + cancel printstr CHR$(30), sayx(0) + 8, sayy(0) + (8 * (1 + k)), vpage NEXT k textcolor 17, 0: RETURN loadtext: set = diaset(dctr) DEF SEG = VARSEG(sayx(0)): BLOAD "data\textx" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(sayx(0)) DEF SEG = VARSEG(sayy(0)): BLOAD "data\texty" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(sayy(0)) DEF SEG = VARSEG(sayl(0)): BLOAD "data\textl" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(sayl(0)) DEF SEG = VARSEG(sayw(0)): BLOAD "data\textw" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(sayw(0)) DEF SEG = VARSEG(saypx(0)): BLOAD "data\textpx" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(saypx(0)) DEF SEG = VARSEG(saypy(0)): BLOAD "data\textpy" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(saypy(0)) DEF SEG = VARSEG(wsay(0)): BLOAD "data\textwh" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob", VARPTR(wsay(0)) RETURN showtext: OPEN "data\text" + RIGHT$(STR$(set), LEN(STR$(set)) - 1) + ".bob" FOR INPUT AS #1 IF dia(dctr) + arg = 1 THEN GOTO st1 FOR jj = 2 TO dia(dctr) + arg FOR j = 1 TO 20 INPUT #1, phr$ NEXT j: NEXT jj st1: FOR j = 1 TO sayl(dia(dctr) + arg) INPUT #1, phr$ printstr phr$, sayx(dia(dctr) + arg) + 16, sayy(dia(dctr) + arg) + (j * 8) + 8, dpage NEXT j CLOSE #1 RETURN texttalk: t# = TIMER: : WHILE t# + .6 > TIMER: WEND: uu = 0 setkeys tt1: setkeys IF TIMER - t# > .4 THEN uu = uu XOR 1: t# = TIMER y = (wsay(dia(dctr) + arg) * 8) loadsprite big(), uu * 1250, y, 50, 50, 3 drawsprite big(), bobpal(), pale(wsay(dia(dctr) + arg) + 1) * 16, saypx(dia(dctr) + arg), saypy(dia(dctr) + arg), dpage CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, dpage, arg): textcolor 17, 0: GOSUB showtext: textcolor 15, 0 copypage dpage, vpage: copypage 2, dpage setkeys IF keyval(kp(12)) > 0 OR keyval(kp(13)) > 0 THEN copypage 2, dpage: RETURN GOTO tt1 debugg: IF w = 26 AND weapon(1) > 1 THEN weapon(1) = weapon(1) - 1 IF w = 27 AND weapon(1) < 17 THEN weapon(1) = weapon(1) + 1 IF w = 58 THEN pict(1) = pict(1) + 1: IF pict(1) > 9 THEN pict(1) = 0 IF w = 15 THEN nice(1) = nice(1) + 1: IF nice(1) > 28 THEN nice(1) = 1 IF w = 52 AND speed(1) = 1 THEN speed(1) = 2: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 52 AND speed(1) = 2 THEN speed(1) = 4: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 52 AND speed(1) = 4 THEN speed(1) = 5: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 52 AND speed(1) = 5 THEN speed(1) = 10: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 51 AND speed(1) = 10 THEN speed(1) = 5: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 51 AND speed(1) = 5 THEN speed(1) = 4: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 51 AND speed(1) = 4 THEN speed(1) = 2: o = 1: CALL align(o, x(), y(), speed()): RETURN IF w = 51 AND speed(1) = 2 THEN speed(1) = 1: o = 1: CALL align(o, x(), y(), speed()): RETURN RETURN debugg2: store = 0: CALL debugest(code(), code$, plot(), seed(), store, boss(), debug, nice(), picset(), bobpal(), x(), y(), hp(), cmax, target(), allitems, inft#(), pict()) IF plot(174) = 0 AND plot(51) = 1 THEN playsnd 50, rate! IF store = 1 THEN GOSUB purchase3 RETURN status: fadeto fade(), 0, 0, 0 loadsprite big(), 0, 0, 50, 50, 3 clearpage vpage: clearpage 3: clearpage dpage: setvispage dpage yoffset = 128: ap(1) = 0: defence(1) = 0: absorb(5) = 0: nbhp(1) = 0: nba(1) = 0: flee(1) = 0 csr(0) = 0: csr2 = 0: arm = 4: weps = 13: xctr(0) = 20: xctr(1) = 20: armsp(0) = 4 FOR i = 2 TO 4: tempchp(i) = chp(i): NEXT i FOR i = 1 TO 6: tempinf#(i) = TIMER: NEXT IF csr(2) < 4 THEN csr(2) = 4 OPEN "data\equip.dat" FOR INPUT AS #1 FOR i = 0 TO 4: INPUT #1, arm$(i): NEXT i FOR i = 1 TO arm + weps INPUT #1, iname$(i), ipic(i), ipal(i), ipicset(i), wnum(i), apic(i), apal(i), apicset(i), maim(i), guard(i), nitel(i), niteh(i), iflee(i), smaim(i), armsp(i), inice(i), conptr(i), fulpow(i) iy(i) = 80: IF wnum(i) > 0 THEN iy(i) = yoffset ix(i) = xctr(SGN(wnum(i))) IF wnum(i) = 0 AND plot(conptr(i)) = 1 THEN xctr(0) = xctr(0) + 24 IF wnum(i) > 0 AND plot(conptr(i)) = 1 THEN xctr(1) = xctr(1) + 24: IF xctr(1) > 264 THEN xctr(1) = xctr(1) - 264: yoffset = yoffset + 34 NEXT CLOSE #1 IF csr(2) = 0 OR wnum(csr(2)) = 0 OR plot(conptr(csr(2))) = 0 THEN sa7: csr(2) = csr(2) + 1: IF csr(2) > arm + weps THEN csr(2) = 1 IF wnum(csr(2)) = 0 THEN GOTO sa7 IF plot(conptr(csr(2))) = 0 THEN GOTO sa7 END IF statusscr copypage 3, dpage fadetopal mainpal(), fade() status3: setkeys CALL clock(rtime$) textcolor 15, 16: printstr rtime$, 185, 0, 3: textcolor 16, 0 IF keyval(kp(1)) > 1 AND csr2 > 0 THEN playsnd 48, rate!: csr2 = csr2 - 1: statusscr IF keyval(kp(2)) > 1 AND csr2 < 2 THEN playsnd 48, rate!: csr2 = csr2 + 1: statusscr IF keyval(kp(3)) > 0 AND csr2 = 0 AND csr(0) = 0 THEN playsnd 48, rate!: csr(0) = 1: statusscr IF keyval(kp(4)) > 0 AND csr2 = 0 AND csr(0) = 1 THEN playsnd 48, rate!: csr(0) = 0: statusscr IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND csr2 = 0 AND csr(0) = 1 THEN IF seed(1) > 0 AND chp(1) < hp(1) THEN playsnd 31, rate!: seed(1) = seed(1) - 1: chp(1) = chp(1) + 1: statusscr IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND csr2 = 0 AND csr(0) = 0 THEN playsnd 49, rate!: CALL eventitem(dia(), sayx(), sayy(), sayw(), sayl(), font, ivname$(), ivpic(), ivpal(), ivset(), ivcon(), ivuse$(), plot(), kp(), rate!, vpage, placer(), bobpal(), font()) clearpage 3: statusscr: setkeys END IF IF keyval(kp(3)) > 0 AND csr2 = 1 THEN sa1: csr(1) = csr(1) + 1: IF csr(1) > arm + weps THEN csr(1) = 0 IF csr(1) = 0 THEN GOTO sa5 IF wnum(csr(1)) > 0 THEN GOTO sa1 IF plot(conptr(csr(1))) = 0 THEN GOTO sa1 sa5: playsnd 48, rate!: statusscr END IF IF keyval(kp(4)) > 0 AND csr2 = 1 THEN sa2: csr(1) = csr(1) - 1: IF csr(1) < 0 THEN csr(1) = arm + weps IF csr(1) = 0 THEN GOTO sa6 IF wnum(csr(1)) > 0 THEN GOTO sa2 IF plot(conptr(csr(1))) = 0 THEN GOTO sa2 sa6: playsnd 48, rate!: statusscr END IF IF keyval(kp(3)) > 0 AND csr2 = 2 THEN sa3: csr(2) = csr(2) + 1: IF csr(2) > arm + weps THEN csr(2) = 1 IF wnum(csr(2)) = 0 THEN GOTO sa3 IF plot(conptr(csr(2))) = 0 THEN GOTO sa3 playsnd 48, rate!: statusscr END IF IF keyval(kp(4)) > 0 AND csr2 = 2 THEN sa4: csr(2) = csr(2) - 1: IF csr(2) < 1 THEN csr(2) = arm + weps IF wnum(csr(2)) = 0 THEN GOTO sa4 IF plot(conptr(csr(2))) = 0 THEN GOTO sa4 playsnd 48, rate!: statusscr END IF IF keyval(kp(15)) > 1 THEN playsnd 49, rate!: fadeto fade(), 0, 0, 0: clearpage 3: GOSUB equip: needf = 1: o = 1: CALL align(o, x(), y(), speed()): setkeys: RETURN copypage 3, dpage GOTO status3 equip: weapon(1) = wnum(csr(2)): speed(1) = 4: nice(1) = 1 pict(1) = 0: pale(1) = 0: picset(1) = 1 IF csr(1) > 0 THEN defence(1) = guard(csr(1)) pict(1) = apic(csr(1)) pale(1) = apal(csr(1)) picset(1) = apicset(csr(1)) speed(1) = armsp(csr(1)) nice(1) = inice(csr(1)) END IF ap(1) = maim(csr(2)): nbhp(1) = nitel(csr(1)) + nitel(csr(2)) nba(1) = niteh(csr(1)) + niteh(csr(2)): flee(1) = iflee(csr(1)) plot(169) = 0: IF pict(1) = 0 AND picset(1) = 2 THEN plot(169) = 1 IF plot(169) = 1 THEN GOSUB weirset FOR j = 1 TO 12: ptemp(j) = picset(j): NEXT j charload FOR j = 1 TO 12: picset(j) = ptemp(j): NEXT j FOR j = 1 TO 6 IF inft#(j) > 0 THEN inft#(j) = inft#(j) + (TIMER - tempinf#(j)) NEXT j FOR j = 2 TO 4: chp(j) = tempchp(j): NEXT j swim(1) = 0: IF picset(1) = 2 AND pict(1) = 1 THEN swim(1) = 1 ranatemp = 0 RETURN weirset: IF plot(27) = 1 THEN picset(1) = 1: pict(1) = 0: nice(1) = 1 IF plot(27) = 0 THEN picset(1) = 2: pict(1) = 0: nice(1) = 20 RETURN purchase: IF mx = 1 AND my = 1 THEN store = 1: GOTO pu1 store = (whosay(((((my - 1) * 16) + mx - 1) * 3) + whit - 1)) * -1 pu1: IF store = 0 THEN store = 1 purchase3: fadeto fade(), 0, 0, 0: clearpage dpage: clearpage vpage: clearpage 3 setvispage dpage OPEN "data\store.bob" FOR INPUT AS #1 FOR k = 1 TO store: INPUT #1, stock FOR b = 1 TO stock INPUT #1, descr$(b), inum(b), price(b), apear1(b), apear2(b), noise(b) NEXT b: NEXT k CLOSE #1 ptr2 = 0: ptr3 = 0 IF ptr = 0 THEN ptr = 1 WHILE ptr > stock: ptr = ptr - 1: WEND CALL loadstock(inum(), product$(), spict(), spale(), spicset(), scure(), chup(), liup(), sset1(), sset2(), shx(), shy(), apear1(), apear2(), plot(), ptr, stock) GOSUB dshop copypage 3, dpage fadetopal mainpal(), fade() setkeys purchase2: setkeys copypage 3, dpage IF keyval(kp(1)) > 1 AND ptr3 = 0 AND ptr2 = 1 THEN playsnd 48, rate!: ptr2 = 0: GOSUB dshop: GOTO pu2 IF keyval(kp(2)) > 1 AND ptr3 = 0 AND ptr2 = 0 THEN playsnd 48, rate!: ptr2 = 1: GOSUB dshop: GOTO pu2 IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ptr3 = 0 AND ptr2 = 0 THEN playsnd 49, rate!: ptr3 = 1: GOSUB dshop: GOTO pu2 IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ptr3 = 0 AND ptr2 = 1 THEN playsnd 49, rate!: armwep = 0: charge# = 0: fadeto fade(), 0, 0, 0: clearpage 3: GOSUB restgraf: needf = 1: setkeys: RETURN IF keyval(kp(4)) > 1 AND ptr3 = 1 THEN ptr = ptr - 1: IF ptr < 1 THEN ptr = stock WHILE shx(ptr) < 10: ptr = ptr - 1: IF ptr < 1 THEN ptr = stock WEND: playsnd 48, rate!: GOSUB dshop END IF IF keyval(kp(3)) > 1 AND ptr3 = 1 THEN ptr = ptr + 1: IF ptr > stock THEN ptr = 1 WHILE shx(ptr) < 10: ptr = ptr + 1: IF ptr > stock THEN ptr = 1 WEND: playsnd 48, rate!: GOSUB dshop END IF IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ptr3 = 1 AND seed(1) >= price(ptr) THEN playsnd noise(ptr), rate!: CALL buyit(ptr, cmax, ptr3, seed(), price(), hp(), liup(), chp(), scure(), chup(), plot(), infplot(), inftemp(), sset1(), sset2(), inft#(), inftime()) CALL loadstock(inum(), product$(), spict(), spale(), spicset(), scure(), chup(), liup(), sset1(), sset2(), shx(), shy(), apear1(), apear2(), plot(), ptr, stock): GOSUB dshop END IF IF keyval(kp(15)) > 1 AND ptr3 = 1 THEN playsnd 48, rate!: ptr3 = 0: GOSUB dshop pu2: GOTO purchase2 dshop: CALL drawshop(font, dia(), sayx(), sayy(), sayw(), sayl(), stock, shx(), shy(), buffer(), spicset(), vpage, placer(), spict(), bobpal(), ptr, ptr2, ptr3, product$(), price(), seed(), descr$(), spale(), chp(), hp(), font(), dest, arg) RETURN restgraf: FOR j = 1 TO 12: ptemp(j) = picset(j): NEXT j charload FOR j = 1 TO 12: picset(j) = ptemp(j): NEXT j GOSUB corspeed: o = 1: CALL align(o, x(), y(), speed()) ranatemp = 0 RETURN corspeed: speed(1) = 4 IF pict(1) = 3 AND picset(1) = 1 THEN speed(1) = 2 IF pict(1) = 0 AND picset(1) = 2 AND plot(27) = 0 THEN speed(1) = 5 RETURN plotstart: plcur = ((my - 1) * 16) + (mx - 1) DEF SEG = VARSEG(plotos(0)): BLOAD "data\plotc1.bob", VARPTR(plotos(0)) IF plotos(plcur) > 0 AND plot(ABS(plotos(plcur))) = 0 THEN RETURN IF plotos(plcur) < 0 AND plot(ABS(plotos(plcur))) = 1 THEN RETURN DEF SEG = VARSEG(plotos(0)): BLOAD "data\plotc2.bob", VARPTR(plotos(0)) IF plotos(plcur) > 0 AND plot(ABS(plotos(plcur))) = 0 THEN RETURN IF plotos(plcur) < 0 AND plot(ABS(plotos(plcur))) = 1 THEN RETURN DEF SEG = VARSEG(plotos(0)): BLOAD "data\plotos.bob", VARPTR(plotos(0)) FOR i = 1 TO 4: inuse(i) = 0: NEXT i pl$ = "data\story." + RIGHT$(STR$(plotos(plcur)), LEN(STR$(plotos(plcur))) - 1) DEF SEG = VARSEG(story!(0)): BLOAD pl$, VARPTR(story!(0)) pcon = 0 setkeys GOSUB runplot RETURN runplot: setwait timing(), delay setkeys IF keyval(59) > 0 AND keyval(60) > 0 AND keyval(61) > 0 THEN plotos(plcur) = 0: RETURN GOSUB wepmove copypage 2, dpage CALL allsprite(vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage) CALL clock(rtime$) printstr rtime$, 320 - (8 * LEN(rtime$)), 8, dpage printstr STR$(seed(1)) + CHR$(19), 245 - (LEN(STR$(seed(1))) * 8), 8, dpage SWAP dpage, vpage setvispage vpage IF needf = 1 THEN fadetopal mainpal(), fade(): needf = 0 IF story!(pcon) = 0 THEN BEEP: pcon = pcon + 1 IF story!(pcon) = 1 THEN pcon = pcon + 1: conv = story!(pcon): presp = 0: GOSUB converse: pcon = pcon + 1 IF story!(pcon) = 2 THEN pcon = pcon + 1: GOSUB rp1: pcon = pcon + 1 IF story!(pcon) = 3 THEN pcon = pcon + 1: tic# = TIMER: WHILE tic# + story!(pcon) > TIMER: WEND: pcon = pcon + 1 IF story!(pcon) = 4 THEN pcon = pcon + 1: GOSUB rp2 IF story!(pcon) = 5 THEN pcon = pcon + 1: GOSUB rp3 IF story!(pcon) = 6 THEN fadeto fade(), story!(pcon + 1), story!(pcon + 2), story!(pcon + 3): pcon = pcon + 4 IF story!(pcon) = 7 THEN GOSUB rp4: pcon = pcon + 1 IF story!(pcon) = 8 THEN pcon = pcon + 1: GOSUB rp5: FOR j = 2 TO 4: xyc(j) = 0: NEXT j: CALL itemscon(plot(), itset(), picset(), iactive(), mx, my): RETURN IF story!(pcon) = 9 THEN pcon = pcon + 1: o = story!(pcon) + 4: GOSUB strike: pcon = pcon + 1 IF story!(pcon) = 10 THEN pcon = pcon + 1: GOSUB rp6 IF story!(pcon) = 11 THEN pcon = pcon + 1: mx = story!(pcon): pcon = pcon + 1: my = story!(pcon): pcon = pcon + 1: clearpage vpage: clearpage 2: GOSUB newscreen IF story!(pcon) = 12 THEN pcon = pcon + 1: GOSUB rp7 IF story!(pcon) = 13 THEN pcon = pcon + 1: who = story!(pcon): pcon = pcon + 1: d(who) = story!(pcon): pcon = pcon + 1 IF story!(pcon) = 14 THEN pcon = pcon + 1: who = story!(pcon): pcon = pcon + 1: x(who) = story!(pcon): pcon = pcon + 1: y(who) = story!(pcon): pcon = pcon + 1: IF who > 1 THEN xyc(who) = 1 IF story!(pcon) = 15 THEN pcon = pcon + 1: who = story!(pcon): pcon = pcon + 1: speed(who) = story!(pcon): pcon = pcon + 1 IF story!(pcon) = 16 THEN pcon = pcon + 1: who = story!(pcon): pcon = pcon + 1: picset(who) = story!(pcon): pcon = pcon + 1: pict(who) = story!(pcon): pcon = pcon + 1: pale(who) = story!(pcon): pcon = pcon + 1 IF story!(pcon) = 17 THEN pcon = pcon + 1: who = story!(pcon): pcon = pcon + 1: aframe(who) = story!(pcon): pcon = pcon + 1 FOR h = 1 TO 4 IF boss(h) > 0 THEN btog(h) = btog(h) XOR 1 NEXT h dowait GOTO runplot rp1: IF story!(pcon) > 0 THEN plot(ABS(story!(pcon))) = 1 IF story!(pcon) < 0 THEN plot(ABS(story!(pcon))) = 0 RETURN rp2: who = story!(pcon): pcon = pcon + 1 picset(who) = story!(pcon): pcon = pcon + 1 x(who) = story!(pcon): pcon = pcon + 1 y(who) = story!(pcon): pcon = pcon + 1 d(who) = story!(pcon): pcon = pcon + 1 speed(who) = story!(pcon): pcon = pcon + 1 aframe(who) = story!(pcon): pcon = pcon + 1 RETURN rp3: oo = story!(pcon): pcon = pcon + 1 pdir = story!(pcon): pcon = pcon + 1 FOR jj = 1 TO story!(pcon): setwait timing(), delay copypage 2, dpage o = oo aframe = aframe(o) IF pdir = 0 THEN BEEP FOR h = 1 TO 4 IF boss(h) > 0 THEN btog(h) = btog(h) XOR 1 NEXT h IF pdir = 1 THEN GOSUB animate: GOSUB tryup: GOSUB goup IF pdir = 2 THEN GOSUB animate: GOSUB tryright: GOSUB goright IF pdir = 3 THEN GOSUB animate: GOSUB trydown: GOSUB godown IF pdir = 4 THEN GOSUB animate: GOSUB tryleft: GOSUB goleft aframe(o) = aframe IF INT(x(1) / 20) = x(1) / 20 AND INT(y(1) / 20) = (y(1) - 15) / 20 THEN GOSUB findexit GOSUB wepmove CALL allsprite(vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage) CALL clock(rtime$) printstr rtime$, 320 - (8 * LEN(rtime$)), 8, dpage printstr STR$(seed(1)) + CHR$(19), 245 - (LEN(STR$(seed(1))) * 8), 8, dpage dowait SWAP dpage, vpage setvispage vpage NEXT jj: pcon = pcon + 1: RETURN rp4: pcon = pcon + 1 IF story!(pcon) = 0 THEN fadetopal mainpal(), fade() 'NEED MORE STUFF HERE!!! RETURN rp5: IF story!(pcon) < 0 AND plot(ABS(story!(pcon))) = 0 THEN RETURN IF story!(pcon) > 0 AND plot(ABS(story!(pcon))) = 1 THEN RETURN pcon = pcon + 1: RETURN runplot rp6: who = story!(pcon): pcon = pcon + 1 nice(who) = story!(pcon): copypage 2, dpage: CALL allsprite(vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage): setvispage dpage: CALL bigsprite(buffer(), nice(), boss()) pcon = pcon + 1: RETURN rp7: mcur = ((16 * (my - 1)) + mx) ickloc(((mcur - 1) * 3)) = story!(pcon): pcon = pcon + 1 ickloc(((mcur - 1) * 3) + 1) = story!(pcon): pcon = pcon + 1 ickloc(((mcur - 1) * 3) + 2) = story!(pcon): pcon = pcon + 4 item(((mcur - 1) * 4)) = story!(pcon): pcon = pcon + 1 item(((mcur - 1) * 4) + 1) = story!(pcon): pcon = pcon + 1 item(((mcur - 1) * 4) + 2) = story!(pcon): pcon = pcon + 1 item(((mcur - 1) * 4) + 3) = story!(pcon): pcon = pcon + 1 copypage 2, dpage: CALL allsprite(vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage) charload DEF SEG = VARSEG(ickloc(0)): BLOAD "data\ickloc.dat", VARPTR(ickloc(0)) DEF SEG = VARSEG(item(0)): BLOAD "data\itemloc.dat", VARPTR(item(0)) RETURN sethepal: DEF SEG = VARSEG(mainpal(0)): BLOAD "data\palette." + pal$, VARPTR(mainpal(0)) needf = 1 RETURN daydata: RESTORE dates FOR i = 1 TO 10: READ leap(i): NEXT i FOR i = 1 TO 12: READ dbefore(i): NEXT i FOR i = 0 TO 6: READ week$(i): NEXT i RETURN dates: DATA 96, 0, 4, 8, 12, 16, 20, 24, 28, 32 DATA 0,31,59,90,120,151,181,212,243,273,304,334 DATA Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday ctrlcode: IF keyval(3) > 1 THEN setvispage 2: w = getkey IF keyval(4) > 1 THEN setvispage 3: w = getkey IF keyval(78) > 1 THEN delay = LARGE(delay - 10, 0) IF keyval(74) > 1 THEN delay = SMALL(delay + 10, 200) IF keyval(13) > 1 THEN delay = 60 IF keyval(59) > 1 THEN oddpal = oddpal XOR 1: IF pal$ = "1" THEN CALL timeofday(timeoday, plot(), pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba()) ELSE pal$ = "1": GOSUB sethepal IF keyval(61) > 1 THEN font = font + 1: IF font = 7 THEN font = 1 CALL fontset(font, font()) IF font >= 6 THEN font = 0 END IF IF keyval(62) > 1 THEN pale(1) = pale(1) + 1: IF pale(1) > 35 THEN pale(1) = -1 dire2: RETURN credit: IF plot(158) = 0 THEN cred# = TIMER: cred = 49: OPEN "data\credit.bob" FOR INPUT AS #1: FOR j = 0 TO 243: INPUT #1, begin$(j): NEXT j: CLOSE #1: plot(158) = 1 menu begin$(), cred, 50, 0, 0, dpage, 4, 0, 15 IF cred# + .6 < TIMER THEN cred# = TIMER: cred = cred + 1: IF cred > 243 THEN plot(158) = 0: plot(157) = 0: cred = 49 RETURN 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 finis: GOSUB shutoff: SCREEN 13: closefile: SYSTEM REM $STATIC SUB align (o, x(), y(), speed()) IF x(o) / speed(o) <> INT(x(o) / speed(o)) THEN x(o) = INT(x(o) / speed(o)) * speed(o) IF (y(o) - 15) / speed(o) <> INT((y(o) - 15) / speed(o)) THEN y(o) = (INT((y(o) - 15) / speed(o)) * speed(o)) + 15 END SUB SUB allsprite (vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage) FOR i = 1 TO 4 vframe(i) = ((d(i) - 1) * 1250) + (af(aframe(i)) * 250) NEXT FOR i = 5 TO 8 vframe(i) = ((d(i) - 1) * 500) + (af(aframe(i)) * 250) NEXT FOR i = 9 TO 12 vframe(i) = (af(aframe(i)) * 250) NEXT l = 0: FOR i = 1 TO 12 IF picset(i) > 0 THEN l = l + 1: order(l) = i NEXT IF l > 1 THEN FOR j = 1 TO l - 1 FOR i = 2 TO l + 1 - j IF y(order(i)) < y(order(i - 1)) THEN SWAP order(i), order(i - 1) NEXT: NEXT END IF FOR j = 1 TO l i = order(j) IF boss(i) > 0 THEN loadsprite big(), btog(i) * 1250, (i - 1) * 8, 50, 50, 3: drawsprite big(), bobpal(), pale(i) * 16, x(i) - 12, y(i) - 25, dpage: GOTO dsp loadsprite placer(), vframe(i), ty(i), 20, 25, 3 drawsprite placer(), bobpal(), pale(i) * 16, x(i), y(i) - 5, dpage dsp: NEXT END SUB SUB bigsprite (buffer(), nice(), boss()) setpicstuf buffer(), 2500, 3 FOR u = 1 TO 4 wbig = nice(u): IF wbig = 0 THEN wbig = wbig + boss(u) IF wbig = 0 THEN GOTO bg1 loadset "data\big.mxs" + CHR$(0), wbig - 1, (u - 1) * 8 bg1: NEXT u END SUB SUB bossmeter (boss(), chp(), ap(), hp(), dpage) FOR j = 2 TO 4 IF boss(j) > 0 AND chp(j) > 0 AND ap(j) > 1 THEN divis = INT(hp(j) / 19) + 1 textcolor 62, 0 FOR i = 1 TO INT((chp(j) - 1) / divis) + 1: IF i = INT((chp(j) - 1) / divis) + 1 AND ((chp(j) / divis) <> INT(chp(j) / divis)) THEN textcolor 52 + (((chp(j) / divis) - INT(chp(j) / divis)) * 10), 0 printstr CHR$(6), (j - 2) * 10, 20 + (9 * i), dpage NEXT END IF NEXT END SUB SUB buyit (ptr, cmax, ptr3, seed(), price(), hp(), liup(), chp(), scure(), chup(), plot(), infplot(), inftemp(), sset1(), sset2(), inft#(), inftime()) seed(1) = seed(1) - price(ptr) hp(1) = hp(1) + liup(ptr): hp(1) = SMALL(hp(1), 300) chp(1) = chp(1) + scure(ptr): chp(1) = SMALL(hp(1), chp(1)) cmax = cmax + chup(ptr): cmax = SMALL(cmax, 20) FOR j = 1 TO 6: IF plot(infplot(j)) = 1 THEN inftemp(j) = 1 NEXT j IF sset1(ptr) > 0 THEN plot(ABS(sset1(ptr))) = 1 IF sset1(ptr) < 0 THEN plot(ABS(sset1(ptr))) = 0 IF sset2(ptr) > 0 THEN plot(ABS(sset2(ptr))) = 1 IF sset2(ptr) < 0 THEN plot(ABS(sset2(ptr))) = 0 ptr3 = 0 FOR j = 1 TO 6 IF plot(infplot(j)) = 1 AND inftemp(j) = 0 THEN inft#(j) = TIMER IF plot(infplot(j)) = 0 AND inftemp(j) = 1 THEN inft#(j) = TIMER - inftime(j): plot(infplot(j)) = 1: IF j = 2 THEN plot(infplot(2)) = 0 inftemp(j) = 0: NEXT j END SUB SUB charload IF picset(1) = 2 AND pict(1) = 1 THEN swim(1) = 1 IF picset(1) = 2 AND pict(1) = 2 THEN swim(1) = 1 DEF SEG = VARSEG(item(0)): BLOAD "data\itemloc.dat", VARPTR(item(0)) mcur = ((16 * (my - 1)) + mx): b = 2 FOR i = (mcur - 1) * 3 TO ((mcur - 1) * 3) + 2 IF ickloc(i) = 0 THEN picset(b) = 0: GOTO cl1 OPEN "data\enemy.bob" FOR INPUT AS #1 j = 1: WHILE ickloc(i) > j FOR o = 1 TO 33 INPUT #1, nil NEXT o: j = j + 1: WEND INPUT #1, nul$, boss(b), say(b), nul$, pict(b), pale(b), anim(b), aspeed(b), inflict(b), infprob(b), nul, picset(b), speed(b), chase(b), rand(b), atack(b), inert(b), mimic(b), flee(b), eitem(b), itemp(b), seedp(b), xper(b), hp(b), ap(b), nice(b), _ defence(b), spin(b), passall(b), weapon(b), nbhp(b), nba(b), nbe(b) chp(b) = hp(b) IF d(b) = 0 THEN d(b) = 3 CLOSE #1 IF xyc(b) = 1 THEN xyc(b) = 0: GOTO cl7 DEF SEG = VARSEG(ickloc(0)): BLOAD "data\ickx.dat", VARPTR(ickloc(0)) x(b) = ickloc(i) DEF SEG = VARSEG(ickloc(0)): BLOAD "data\icky.dat", VARPTR(ickloc(0)) y(b) = ickloc(i) + 20 DEF SEG = VARSEG(ickloc(0)): BLOAD "data\ickloc.dat", VARPTR(ickloc(0)) cl7: target(b) = targ((((my * 16) + mx) * 3) + 1 + (b - 2)) cl1: b = b + 1: NEXT i swim(1) = 0 IF picset(1) = 2 AND pict(1) = 1 THEN swim(1) = 1 IF picset(1) = 2 AND pict(1) = 2 THEN swim(1) = 1 b = 5 FOR i = 1 TO 4 aframe(i) = 1 IF weapon(i) = 0 THEN picset(b) = 0: GOTO cl2 OPEN "data\weapon.dat" FOR INPUT AS #1 j = 1: WHILE weapon(i) > j FOR o = 1 TO 39 INPUT #1, nil$ NEXT o: j = j + 1: WEND INPUT #1, name$(b), pict(b), pale(b), picset(b), spin(b), range(b), speed(b), anim(b), aspeed(b), homing(b), knock(b), kspeed(b), muser(b), defence(b), boomer(b), fulpow(b), absorb(b), passall(b), fuser(b), say(b) INPUT #1, pict(b + 8), pale(b + 8), picset(b + 8), spin(b + 8), range(b + 8), speed(b + 8), anim(b + 8), aspeed(b + 8), homing(b + 8), knock(b + 8), kspeed(b + 8), muser(b + 8), defence(b + 8), boomer(b + 8), fulpow(b + 8), absorb(b + 8), passall(b _ + 8), fuser(b + 8), say(b + 8) inuse(b) = 0 CLOSE #1 cl2: b = b + 1: NEXT i setpicstuf buffer(), 5000, 3 loadset "data\cspr.mxs" + CHR$(0), 12, 32 FOR i = 1 TO 4 ty(i) = 32 + 16 * i IF picset(i) > 0 THEN loadset "data\cspr.mxs" + CHR$(0), (picset(i) - 1) * 10 + pict(i), ty(i) NEXT i FOR i = 2 TO 4: ai1(i) = d(i): knock(i) = 0: NEXT setpicstuf buffer(), 2000, 3 FOR i = 1 TO 4 ty(i + 4) = 105 + 7 * i IF weapon(i) > 0 THEN loadset "data\wspr.mxs" + CHR$(0), (picset(i + 4) - 1) * 25 + pict(i + 4), ty(i + 4) NEXT FOR i = 5 TO 13: picset(i) = 0: NEXT i FOR i = 1 TO 4: iactive(i) = 0: NEXT i mcur = ((16 * (my - 1)) + mx): b = 9 FOR i = (mcur - 1) * 4 TO ((mcur - 1) * 4) + 3 o = i - ((mcur - 1) * 4) + 1 IF picset(o) > 0 AND item(i) < 1 THEN IF (RND * 100) < itemp(o) THEN item(i) = eitem(o): iactive(o) = 1: GOTO cl6 IF (RND * 100) < seedp(o) THEN item(i) = 1: iactive(o) = 1: GOTO cl6 cl6: END IF IF allitems = 1 THEN item(i) = eitem(o): iactive(o) = 1 IF item(i) = 0 THEN picset(b) = 0: GOTO cl5 OPEN "data\item.dat" FOR INPUT AS #1 j = 1: WHILE item(i) > j FOR o = 1 TO 17 INPUT #1, nil NEXT o: j = j + 1: WEND INPUT #1, name$(b), number(b), pict(b), pale(b), picset(b), chp(b), say(b), seed(b), ap(b), hp(b), aspeed(b), nice(b), defence(b), ic1(b), ic2(b), push(b), timef(b) CLOSE #1 IF xyc(b) = 1 THEN xyc(b) = 0: GOTO cl5 DEF SEG = VARSEG(item(0)): BLOAD "data\itemx.dat", VARPTR(item(0)) x(b) = item(i) DEF SEG = VARSEG(item(0)): BLOAD "data\itemy.dat", VARPTR(item(0)) y(b) = item(i) + 25 DEF SEG = VARSEG(item(0)): BLOAD "data\itemloc.dat", VARPTR(item(0)) cl5: aframe(b) = 1: b = b + 1: NEXT i mcur = ((16 * (my - 1)) + mx) setpicstuf buffer(), 500, 3 FOR i = 9 TO 12 ty(i) = 122 + i * 2 IF picset(i) > 0 THEN loadset "data\item.mxs" + CHR$(0), pict(i), ty(i) NEXT CALL bigsprite(buffer(), nice(), boss()) textcolor 16, 0 printstr "", 320 - (8 * 20), 0, 2 textcolor 15, 0 printstr name$(5), 320 - (8 * LEN(name$(5))), 0, 2 o = 1: END SUB SUB checkcon (plot(), ickcon(), mx, my, picset()) tmcur = ((my * 16) + mx) IF ickcon((tmcur * 6) + 0) > 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 0))) = 0 THEN picset(2) = 0 IF ickcon((tmcur * 6) + 1) > 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 1))) = 0 THEN picset(3) = 0 IF ickcon((tmcur * 6) + 2) > 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 2))) = 0 THEN picset(4) = 0 IF ickcon((tmcur * 6) + 3) > 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 3))) = 0 THEN picset(2) = 0 IF ickcon((tmcur * 6) + 4) > 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 4))) = 0 THEN picset(3) = 0 IF ickcon((tmcur * 6) + 5) > 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 5))) = 0 THEN picset(4) = 0 IF ickcon((tmcur * 6) + 0) < 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 0))) = 1 THEN picset(2) = 0 IF ickcon((tmcur * 6) + 1) < 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 1))) = 1 THEN picset(3) = 0 IF ickcon((tmcur * 6) + 2) < 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 2))) = 1 THEN picset(4) = 0 IF ickcon((tmcur * 6) + 3) < 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 3))) = 1 THEN picset(2) = 0 IF ickcon((tmcur * 6) + 4) < 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 4))) = 1 THEN picset(3) = 0 IF ickcon((tmcur * 6) + 5) < 0 THEN IF plot(ABS(ickcon((tmcur * 6) + 5))) = 1 THEN picset(4) = 0 END SUB SUB checkinf (o, plot(), infplot(), inf$(), dpage, speed(), inft#(), inftime(), picset(), pict(), ranatemp, ranaset, ranapic, rananice, nice(), pale(), ptemp(), pois#, drain, doom(), bobpal(), x(), y(), btog()) j = 20 FOR i = 1 TO 6: IF plot(infplot(i)) = 1 THEN printstr inf$(i), 160 - (LEN(inf$(i)) * 4), j, dpage: j = j + 8 NEXT i IF plot(40) = 1 THEN CALL intox(speed(), inft#(), inftime(), picset(), pict(), plot()): IF plot(40) = 0 THEN o = 1: CALL align(o, x(), y(), speed()) IF plot(63) = 1 THEN CALL sloth(speed(), inft#(), inftime(), plot(), pict(), picset()): IF plot(63) = 0 THEN o = 1: CALL align(o, x(), y(), speed()) IF plot(64) = 1 THEN CALL toad(ranatemp, ranaset, ranapic, rananice, picset(), pict(), nice(), pale(), ptemp(), inft#(), inftime()) IF plot(62) = 1 THEN CALL poison(pois#, drain, pale(), inft#(), inftime(), plot(), picset(), pict()) IF plot(61) = 1 THEN CALL reaper(plot(), inft#(), inftime(), drain, doom(), bobpal(), x(), y(), btog(), dpage) END SUB SUB clock (rtime$) IF VAL(MID$(TIME$, 1, 2)) > 11 THEN t1$ = "PM" ELSE t1$ = "AM" t2 = VAL(MID$(TIME$, 1, 2)): IF t2 > 11 THEN t2 = t2 - 12 IF t2 = 0 THEN t2 = 12 t2$ = STR$(t2) t3$ = MID$(TIME$, 4, 2) rtime$ = t2$ + ":" + t3$ + t1$ END SUB SUB debugest (code(), code$, plot(), seed(), store, boss(), debug, nice(), picset(), bobpal(), x(), y(), hp(), cmax, target(), allitems, inft#(), pict()) IF keyval(0) > 1 AND keyval(0) < 58 THEN code(0) = keyval(0) IF code(0) = code(1) THEN EXIT SUB code$ = MID$(CHR$(code(0) + 30) + code$, 1, 16) FOR k = 16 TO 1 STEP -1 code(k) = code(k - 1): NEXT k plot(174) = 0: IF plot(51) = 1 THEN plot(174) = 1 IF MID$(code$, 1, 6) = "0PW3<7" THEN seed(1) = 100: plot(51) = 1 IF MID$(code$, 1, 8) = "25W>O07=" THEN store = 1 IF MID$(code$, 1, 13) = "<02W?6W267=W<" THEN FOR i = 41 TO 51: plot(i) = 1: NEXT: FOR i = 73 TO 78: plot(i) = 1: NEXT: plot(171) = 1: plot(173) = 1 IF MID$(code$, 1, 13) = "20@>5PW=4L15L" THEN boss(1) = boss(1) XOR 1 IF MID$(code$, 1, 11) = "146?W10NP4O" THEN debug = debug XOR 1: plot(51) = 1 IF MID$(code$, 1, 12) = "0PW10A26NW<3" THEN FOR k = 2 TO 4 IF boss(k) = 0 AND nice(k) = 0 AND picset(k) > 0 THEN picset(k) = 0: drawsprite beat(), bobpal(), 32, x(k) - 2, y(k) + 8, 2 NEXT k: plot(51) = 1 END IF IF MID$(code$, 1, 10) = "4162=0P6AL" THEN IF hp(1) < 200 THEN hp(1) = 200: plot(51) = 1 IF MID$(code$, 1, 15) = "24612W0A2WALO47" THEN IF cmax < 12 THEN cmax = 12: plot(51) = 1 IF MID$(code$, 1, 13) = "06?W025P=W06?" THEN plot(51) = 1 FOR k = 2 TO 4 db1: randnum = INT(RND * 4) IF randnum + 1 = k THEN GOTO db1 target(k) = randnum IF picset(target(k) + 1) = 0 THEN GOTO db1 NEXT k END IF IF MID$(code$, 1, 14) = "O/62W0=16AW0O6" THEN allitems = allitems XOR 1 IF MID$(code$, 1, 11) = "@O6=W107<01" THEN plot(61) = 1: inft#(2) = TIMER - 200 IF MID$(code$, 1, 11) = "7<1W spin(o + (8 * (SGN(cfull2)))) - 1 THEN spinctr(o - 4) = 0: spin(o - 4) = spin(o - 4) + 1: IF spin(o - 4) > 4 THEN spin(o - 4) = 1 d(o) = spin(o - 4) IF inuse(o - 4) > 0 THEN d(o - 4) = spin(o - 4) IF spin(o - 4) = 1 THEN x(o) = x(o - 4): y(o) = y(o - 4) - 20 IF spin(o - 4) = 2 THEN x(o) = x(o - 4) + 20: y(o) = y(o - 4) IF spin(o - 4) = 3 THEN x(o) = x(o - 4): y(o) = y(o - 4) + 20 IF spin(o - 4) = 4 THEN x(o) = x(o - 4) - 20: y(o) = y(o - 4) END SUB SUB drawbox (sayx(), sayy(), sayw(), sayl(), dia(), dctr, dest, arg) b$ = CHR$(22) FOR j = 0 TO sayw(dia(dctr) + arg) + 1 b$ = b$ + CHR$(23) NEXT j: b$ = b$ + CHR$(24) printstr b$, sayx(dia(dctr) + arg), sayy(dia(dctr) + arg), dest FOR j = 0 TO sayl(dia(dctr) + arg) + 1 b$ = CHR$(25) FOR jj = 0 TO sayw(dia(dctr) + arg) + 1 b$ = b$ + CHR$(30) NEXT jj: b$ = b$ + CHR$(26) printstr b$, sayx(dia(dctr) + arg), sayy(dia(dctr) + arg) + (8 * j) + 8, dest NEXT j b$ = CHR$(27) FOR j = 0 TO sayw(dia(dctr) + arg) + 1 b$ = b$ + CHR$(28) NEXT j: b$ = b$ + CHR$(29) printstr b$, sayx(dia(dctr) + arg), sayy(dia(dctr) + arg) + (sayl(dia(dctr) + arg) * 8) + 24, dest END SUB SUB drawshop (font, dia(), sayx(), sayy(), sayw(), sayl(), stock, shx(), shy(), buffer(), spicset(), vpage, placer(), spict(), bobpal(), ptr, ptr2, ptr3, product$(), price(), seed(), descr$(), spale(), chp(), hp(), font(), dest, arg) textcolor 15, 0 fontb = font: font = 6: CALL fontset(font, font()): font = fontb arg = 0: dctr = 0: dia(0) = 0 sayx(0) = 8: sayy(0) = 4: sayw(0) = 34: sayl(0) = 4 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) sayx(0) = 4: sayy(0) = 70: sayw(0) = 10: sayl(0) = 0 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) sayx(0) = 116: sayy(0) = 70: sayw(0) = 9: sayl(0) = 0 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) sayx(0) = 220: sayy(0) = 70: sayw(0) = 8: sayl(0) = 0 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) sayx(0) = 4: sayy(0) = 104: sayw(0) = 35: sayl(0) = 0 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) sayx(0) = 4: sayy(0) = 140: sayw(0) = 6: sayl(0) = 2 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) CALL fontset(font, font()) textcolor 16, 0 FOR j = 1 TO stock IF shx(j) > 0 THEN loadpage buffer(), "data\item" + MID$(STR$(spicset(j)), 2, LEN(STR$(spicset(j))) - 1) + ".mxs" + CHR$(0), vpage loadsprite placer(), (spict(j) + 1) * 500, 0, 20, 25, vpage drawsprite placer(), bobpal(), 11 * 16, shx(j), shy(j), 3 END IF NEXT j printstr product$(ptr), 16, 82, 3 printstr "Cost:" + STR$(price(ptr)), 129, 82, 3 printstr STR$(seed(1)) + " " + CHR$(19), 226, 82, 3 printstr descr$(ptr), 16, 116, 3 printstr "SHOP", 27, 155, 3 printstr "EXIT", 27, 165, 3 IF ptr3 = 0 AND ptr2 = 0 THEN textcolor 2, 0: printstr "SHOP", 28, 156, 3: textcolor 16, 0 IF ptr3 = 0 AND ptr2 = 1 THEN textcolor 2, 0: printstr "EXIT", 28, 166, 3: textcolor 16, 0 IF ptr3 = 1 THEN loadpage buffer(), "data\item" + MID$(STR$(spicset(ptr)), 2, LEN(STR$(spicset(ptr))) - 1) + ".mxs" + CHR$(0), vpage loadsprite placer(), (spict(ptr) + 1) * 500, 0, 20, 25, vpage drawsprite placer(), bobpal(), spale(ptr) * 16, shx(ptr), shy(ptr), 3 textcolor 2, 0 END IF printstr "^", shx(ptr) + 8, shy(ptr) + 25, 3: textcolor 16, 0 textcolor 15, 17: printstr "&" + STR$(chp(1)) + "/" + RIGHT$(STR$(hp(1)), LEN(STR$(hp(1))) - 1), 100, 170, 3 END SUB SUB eventitem (dia(), sayx(), sayy(), sayw(), sayl(), font, ivname$(), ivpic(), ivpal(), ivset(), ivcon(), ivuse$(), plot(), kp(), rate!, vpage, placer(), bobpal(), font()) dctr = 0: arg = 0: dia(0) = 0: ecsr = 0: j = 0: skip = 0: ivmax = 14 sayx(0) = 8: sayy(0) = 8: sayw(0) = 33: sayl(0) = 5 fontb = font: font = 4: CALL fontset(font, font()): font = fontb textcolor 15, 0: CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg): textcolor 17, 0 CALL fontset(font, font()) DO OPEN "data\event.dat" FOR INPUT AS #1 FOR k = 0 TO j + skip INPUT #1, ivname$(j), ivpic(j), ivpal(j), ivset(j), ivuse$(j), ivcon(j) NEXT k: CLOSE #1 IF plot(ABS(ivcon(j))) = 0 AND ivcon(j) > 0 THEN j = j - 1: ivmax = ivmax - 1: skip = skip + 1 j = j + 1: LOOP UNTIL j > ivmax IF ecsr < ivmax THEN GOSUB ei1 setkeys DO: setkeys copypage 3, dpage IF keyval(kp(1)) > 1 AND ecsr > 0 THEN playsnd 48, rate!: ecsr = ecsr - 1: fontb = font: font = 4: CALL fontset(font, font()): font = fontb: textcolor 15, 0: CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg): textcolor 17, 0: CALL _ fontset(font, font()): IF ecsr < ivmax THEN GOSUB ei1 IF keyval(kp(2)) > 1 AND ecsr < ivmax THEN playsnd 48, rate!: ecsr = ecsr + 1: fontb = font: font = 4: CALL fontset(font, font()): font = fontb: textcolor 15, 0: CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg): textcolor 17, 0: _ CALL fontset(font, font()): IF ecsr < ivmax THEN GOSUB ei1 IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ecsr = ivmax THEN playsnd 49, rate!: EXIT SUB IF keyval(kp(15)) > 1 THEN EXIT SUB IF ecsr > 1 THEN printstr ivname$(ecsr - 2), 18, 16, 3 IF ecsr > 0 THEN printstr ivname$(ecsr - 1), 18, 24, 3 printstr ivname$(ecsr), 18, 32, 3: textcolor 2, 0 printstr ivname$(ecsr), 19, 33, 3: textcolor 17, 0 IF ecsr < ivmax THEN printstr ivname$(ecsr + 1), 18, 40, 3 IF ecsr < ivmax - 1 THEN printstr ivname$(ecsr + 2), 18, 48, 3 textcolor 1, 0: printstr ivuse$(ecsr), 18, 62, 3: textcolor 17, 0 LOOP ei1: loadpage buffer(), "data\item" + MID$(STR$(ivset(ecsr)), 2, LEN(STR$(ivset(ecsr))) - 1) + ".mxs" + CHR$(0), vpage loadsprite placer(), (ivpic(ecsr) + 1) * 500, 0, 20, 25, vpage drawsprite placer(), bobpal(), ivpal(ecsr) * 16, 230, 25, 3 RETURN END SUB SUB fontset (font, font()) DEF SEG = VARSEG(font(0)): BLOAD "data\font" + MID$(STR$(font), 2, LEN(STR$(font)) - 1) + ".bob", VARPTR(font(0)) setfont font() END SUB SUB getday (leap(), dbefore(), week$(), plot(), ts$, day$) days = 0 days = days + INT(365.25 * (VAL(RIGHT$(DATE$, 4)) - 1995)) lyear = 0 FOR i = 1 TO 10 IF VAL(RIGHT$(DATE$, 2)) = leap(i) THEN lyear = 1 NEXT FOR i = 1 TO 12 IF VAL(MID$(DATE$, 1, 2)) = i THEN days = days + dbefore(i) NEXT i IF VAL(MID$(DATE$, 1, 2)) > 2 AND lyear = 1 THEN days = days + 1 days = days + VAL(MID$(DATE$, 4, 2)) day$ = week$(days - (INT(days / 7) * 7)) FOR i = 33 TO 39: plot(i) = 0: NEXT plot(33 + (days - (INT(days / 7) * 7))) = 1 ts$ = MID$(DATE$, 1, 5) IF ts$ = "02-29" THEN day$ = "LeapYear" IF ts$ = "12-25" THEN day$ = "Christmas" IF ts$ = "10-31" THEN day$ = "Halloween" IF ts$ = "02-19" THEN day$ = "My Birthday" IF ts$ = "01-18" THEN day$ = "Hobgoblin Day" IF ts$ = "04-01" THEN day$ = "Fool's Day" IF DATE$ = "01-01-2000" THEN day$ = "New Millenium!" IF RIGHT$(DATE$, 4) = "2020" THEN day$ = "Get a new game!" END SUB SUB hitit (i, o, aframe, aframe(), picset(), speed(), cfull2, stemp(), kd(), d(), kspeed(), knock(), say(), inuse(), ai1(), rate!, target(), defence(), chp(), hp(), drain, ap(), charge, absorb(), ahit) hitit: IF i > 4 AND i < 9 THEN aframe = 0 picset(i) = 0: picset(o) = 0: IF speed(o + (8 * (SGN(cfull2)))) > 0 OR speed(i) > 0 THEN EXIT SUB IF stemp(o - 4) > 0 OR stemp(i - 4) > 0 THEN EXIT SUB kd(i - 4) = d(i - 4) + 2: IF kd(i - 4) > 4 THEN kd(i - 4) = kd(i - 4) - 4 kd(o - 4) = d(o - 4) + 2: IF kd(o - 4) > 4 THEN kd(o - 4) = kd(o - 4) - 4 stemp(o - 4) = speed(o - 4): speed(o - 4) = kspeed(i): knock(o - 4) = 2 stemp(i - 4) = speed(i - 4): speed(i - 4) = kspeed(o): knock(i - 4) = 2 EXIT SUB END IF IF i > 8 THEN picset(i) = 0: EXIT SUB IF knock(i + (8 * (SGN(cfull2)))) <> 0 THEN EXIT SUB IF say(i) > 0 AND inuse(i) = 0 AND ai1(o) <> i THEN ai1(o) = i: playsnd say(i), rate! IF o > 5 AND i > 1 THEN IF speed(o + (8 * (SGN(cfull2)))) = 0 THEN knock(o - 4) = 2: kd(o - 4) = d(o - 4) + 2: IF kd(o - 4) > 4 THEN kd(o - 4) = kd(o - 4) - 4 IF speed(o + (8 * (SGN(cfull2)))) = 0 THEN IF stemp(o - 4) = 0 THEN stemp(o - 4) = speed(o - 4): speed(o - 4) = speed(o - 4) * 2 IF i = target(o - 4) + 1 THEN GOTO ht1 EXIT SUB END IF otemp = o + (8 * (SGN(cfull2))) IF defence(otemp) = 4 OR defence(i) = 0 OR (i > 8 AND i < 13) THEN GOTO ht1 IF defence(otemp) <> defence(i) AND speed(o + (8 * (SGN(cfull2)))) = 0 THEN knock(o - 4) = 2: kd(o - 4) = d(o - 4) + 2: IF kd(o - 4) > 4 THEN kd(o - 4) = kd(o - 4) - 4 IF defence(otemp) <> defence(i) AND speed(o + (8 * (SGN(cfull2)))) = 0 THEN IF stemp(o - 4) = 0 THEN stemp(o - 4) = speed(o - 4): speed(o - 4) = speed(o - 4) * 2 IF defence(otemp) <> defence(i) THEN EXIT SUB ht1: SWAP o, i aframe(o) = 6: IF knock(i + (8 * (SGN(cfull2)))) = 0 AND chp(o) < 1 THEN picset(o) = 0 IF o = 1 THEN drain = drain + ap(i - 4): drain = drain - absorb(i + (8 * (SGN(cfull2)))) IF o <> 1 THEN chp(o) = chp(o) - (ap(i - 4) + charge): chp(i - 4) = chp(i - 4) + absorb(i + (8 * (SGN(cfull2)))): chp(i - 4) = SMALL(hp(i - 4), chp(i - 4)) IF inuse(o) < 1 THEN knock(o) = knock(i + (8 * (SGN(cfull2)))): kd(o) = d(i): aframe(o) = 6: IF knock(o) > 0 AND stemp(o) = 0 THEN stemp(o) = speed(o): speed(o) = kspeed(i + (8 * (SGN(cfull2)))) IF o = 1 THEN ahit = 1 SWAP o, i END SUB SUB inform (mx, my, plot(), dpage, x(), y(), pict(), pale(), speed(), code$, absorb(), ickcon(), pal$, charge, inuse(), code(), weapon(), target()) tmcur = ((my * 16) + mx) printstr STR$(plot(1)), 0, 30, dpage printstr STR$(plot(2)), 0, 38, dpage printstr STR$(plot(3)), 0, 46, dpage printstr STR$(plot(4)), 0, 54, dpage printstr STR$(plot(5)), 0, 62, dpage printstr STR$(plot(6)), 0, 70, dpage printstr STR$(plot(7)), 0, 78, dpage printstr STR$(plot(8)), 0, 86, dpage printstr STR$(plot(9)), 0, 94, dpage printstr STR$(plot(10)), 0, 102, dpage printstr "X" + STR$(x(1)), 0, 110, dpage printstr "Y" + STR$(y(1)), 0, 118, dpage printstr "MX" + STR$(mx), 0, 126, dpage printstr "MY" + STR$(my), 0, 134, dpage printstr STR$(keyval(0)), 0, 142, dpage printstr "Pic:" + STR$(pict(1)), 0, 150, dpage printstr "Pal:" + STR$(pale(1)), 0, 158, dpage printstr "Speed:" + STR$(speed(1)), 0, 166, dpage printstr "Code:" + code$, 0, 174, dpage printstr "Drain:" + STR$(absorb(5)), 0, 182, dpage IF plot(27) = 1 THEN printstr "Day", 0, 190, dpage IF plot(27) = 0 THEN printstr "Night", 0, 190, dpage printstr "2:" + STR$(ickcon((tmcur * 6) + 0)), 30, 30, dpage printstr "2:" + STR$(ickcon((tmcur * 6) + 3)), 30, 38, dpage printstr "3:" + STR$(ickcon((tmcur * 6) + 1)), 30, 46, dpage printstr "3:" + STR$(ickcon((tmcur * 6) + 4)), 30, 54, dpage printstr "4:" + STR$(ickcon((tmcur * 6) + 2)), 30, 62, dpage printstr "4:" + STR$(ickcon((tmcur * 6) + 5)), 30, 70, dpage printstr "Hour:" + STR$(VAL(MID$(TIME$, 1, 2))), 30, 78, dpage printstr "MasterPal:" + pal$, 30, 86, dpage printstr "Charge:" + STR$(charge), 30, 94, dpage printstr "E1:" + STR$(inuse(2)), 40, 102, dpage printstr "E2:" + STR$(inuse(3)), 40, 110, dpage printstr "E3:" + STR$(inuse(4)), 40, 118, dpage printstr "Code13:" + STR$(code(13)), 90, 30, dpage IF plot(169) = 1 THEN printstr "Lycanthropy Active", 64, 190, dpage printstr "Ewep1:" + STR$(weapon(2)), 90, 38, dpage printstr "Ewep2:" + STR$(weapon(3)), 90, 46, dpage printstr "Ewep3:" + STR$(weapon(4)), 90, 54, dpage printstr "Targ1:" + STR$(target(2)), 90, 62, dpage printstr "Targ2:" + STR$(target(3)), 90, 70, dpage printstr "Targ3:" + STR$(target(4)), 90, 78, dpage END SUB SUB intox (speed(), inft#(), inftime(), picset(), pict(), plot()) speed(1) = INT(RND * 10) + 1 IF TIMER - inft#(3) > inftime(3) THEN speed(1) = 4: IF picset(1) = 1 AND pict(1) = 3 THEN speed(1) = 2 plot(40) = 0 END IF END SUB SUB itemscon (plot(), itset(), picset(), iactive(), mx, my) tmcur = ((my * 16) + mx) DEF SEG = VARSEG(itset(0)): BLOAD "data\itemcon.dat", VARPTR(itset(0)) IF itset((tmcur * 8) + 0) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 0))) = 0 THEN picset(9) = 0 IF itset((tmcur * 8) + 1) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 1))) = 0 THEN picset(10) = 0 IF itset((tmcur * 8) + 2) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 2))) = 0 THEN picset(11) = 0 IF itset((tmcur * 8) + 3) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 3))) = 0 THEN picset(12) = 0 IF itset((tmcur * 8) + 4) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 4))) = 0 THEN picset(9) = 0 IF itset((tmcur * 8) + 5) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 5))) = 0 THEN picset(10) = 0 IF itset((tmcur * 8) + 6) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 6))) = 0 THEN picset(11) = 0 IF itset((tmcur * 8) + 7) > 0 THEN IF plot(ABS(itset((tmcur * 8) + 7))) = 0 THEN picset(12) = 0 IF itset((tmcur * 8) + 0) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 0))) = 1 THEN picset(9) = 0 IF itset((tmcur * 8) + 1) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 1))) = 1 THEN picset(10) = 0 IF itset((tmcur * 8) + 2) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 2))) = 1 THEN picset(11) = 0 IF itset((tmcur * 8) + 3) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 3))) = 1 THEN picset(12) = 0 IF itset((tmcur * 8) + 4) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 4))) = 1 THEN picset(9) = 0 IF itset((tmcur * 8) + 5) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 5))) = 1 THEN picset(10) = 0 IF itset((tmcur * 8) + 6) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 6))) = 1 THEN picset(11) = 0 IF itset((tmcur * 8) + 7) < 0 THEN IF plot(ABS(itset((tmcur * 8) + 7))) = 1 THEN picset(12) = 0 DEF SEG = VARSEG(itset(0)): BLOAD "data\itemset.dat", VARPTR(itset(0)) FOR i = 1 TO 4 IF iactive(i) = 1 THEN picset(i + 8) = 0 NEXT END SUB FUNCTION LARGE (n1, n2) LARGE = n1 IF n2 > n1 THEN LARGE = n2 END FUNCTION SUB loadstock (inum(), product$(), spict(), spale(), spicset(), scure(), chup(), liup(), sset1(), sset2(), shx(), shy(), apear1(), apear2(), plot(), ptr, stock) x = 20: y = 18 FOR b = 1 TO stock OPEN "data\item.dat" FOR INPUT AS #1 j = 1: WHILE inum(b) > j FOR o = 1 TO 17 INPUT #1, nil$ NEXT o: j = j + 1: WEND INPUT #1, product$(b), nil$, spict(b), spale(b), spicset(b), scure(b), nil$, nil$, chup(b), liup(b), nil$, nil$, nil$, sset1(b), sset2(b), nil$, nil$ shx(b) = 0: shy(b) = 0 IF apear1(b) > 0 AND plot(ABS(apear1(b))) = 0 THEN GOTO ls1 IF apear1(b) < 0 AND plot(ABS(apear1(b))) = 1 THEN GOTO ls1 IF apear2(b) > 0 AND plot(ABS(apear2(b))) = 0 THEN GOTO ls1 IF apear2(b) < 0 AND plot(ABS(apear2(b))) = 1 THEN GOTO ls1 shx(b) = x: shy(b) = y: x = x + 28 ls1: CLOSE #1 NEXT b WHILE shx(ptr) < 10: ptr = ptr - 1: IF ptr < 1 THEN ptr = stock WEND END SUB SUB menu (menuset() AS STRING, menuc, visrows, menux, menuy, menup, skip, csrcol, txtcol) textcolor txtcol, 0 ulim = LARGE(0, menuc - (visrows - 1)) FOR i = 0 TO visrows - 1 textcolor txtcol, 0 printstr menuset(i + ulim), menux, menuy + (i * skip), menup textcolor csrcol, 0 IF menuc = i + ulim THEN printstr ">", menux - 10, menuy + (i * skip), menup NEXT i textcolor txtcol, 0 END SUB SUB meter (charge#, fulpow(), cmet!, cmax, fcol, dpage) cmet! = INT((TIMER - charge#) * 10) / 10 IF cmet! > fulpow(5) THEN cmet! = fulpow(5) IF cmet! > cmax THEN cmet! = cmax fcol = fcol XOR 54 FOR i = 1 TO INT(cmet! - .1) + 1 IF i = INT(cmet!) + 1 THEN textcolor 34 + ((cmet! - INT(cmet!)) * 10), 0 IF i <> INT(cmet!) + 1 THEN textcolor 44, 0 IF cmet! = fulpow(5) THEN textcolor fcol, 0 printstr CHR$(15), 9 * i, 8, dpage NEXT END SUB SUB poison (pois#, drain, pale(), inft#(), inftime(), plot(), picset(), pict()) IF pois# = 0 THEN pois# = TIMER IF pois# + 1.2 < TIMER THEN pois# = 0: drain = drain + 1 pale(1) = 17 IF TIMER - inft#(1) > inftime(1) THEN plot(62) = 0 pale(1) = 0 IF picset(1) = 2 AND (pict(1) = 1 OR pict(1) = 2) THEN pale(1) = 16 END IF END SUB SUB reaper (plot(), inft#(), inftime(), drain, doom(), bobpal(), x(), y(), btog(), dpage) IF plot(172) = 1 THEN inft#(2) = TIMER: plot(172) = 0 IF TIMER - inft#(2) > inftime(2) THEN plot(61) = 0: drain = 9999 drawsprite doom(), bobpal(), 10 * 16, x(1) - 3 - btog(1), y(1) - 18, dpage IF x(1) > 10 AND x(1) < 310 THEN printstr STR$(400 - INT(TIMER - inft#(2))), x(1) + 10 - INT((LEN(STR$(400 - INT(TIMER - inft#(2))))) * 4), y(1) + 22, dpage END SUB SUB sethtarg (targx(), targy(), o, x(), y(), htarg(), speed(), cfull3, xaim(), yaim(), dist!, divnum!) targx(o - 4) = x(htarg(o - 4)) - x(o - 4) targy(o - 4) = y(htarg(o - 4)) - y(o - 4) dist! = SQR((ABS(targx(o - 4)) ^ 2) + (ABS(targy(o - 4)) ^ 2)) IF speed(o + (8 * (SGN(cfull3)))) > 0 THEN divnum! = dist! / speed(o + (8 * (SGN(cfull3)))): ELSE divnum! = 1 xaim(o) = ABS(INT(targx(o - 4) / divnum!)) yaim(o) = ABS(INT(targy(o - 4) / divnum!)) END SUB SUB setonkill (o, target(), picset(), beat(), bobpal(), x(), y(), mx, my, ickcon(), chp(), plot(), itset(), iactive(), xper(), levelup(), hp()) FOR j = 2 TO 4 IF picset(target(j) + 1) = 0 THEN target(j) = 0 NEXT j drawsprite beat(), bobpal(), 32, x(o) - 2, y(o) + 8, 2 tmcur = ((my * 16) + mx) DEF SEG = VARSEG(ickcon(0)): BLOAD "data\eneset.dat", VARPTR(ickcon(0)) FOR j = 0 TO 2 IF ickcon((tmcur * 6) + j) > 0 AND chp(j + 2) <= 0 THEN plot(ABS(ickcon((tmcur * 6) + j))) = 1 IF ickcon((tmcur * 6) + j) < 0 AND chp(j + 2) <= 0 THEN plot(ABS(ickcon((tmcur * 6) + j))) = 0 IF ickcon((tmcur * 6) + j + 3) > 0 AND chp(j + 2) <= 0 THEN plot(ABS(ickcon((tmcur * 6) + j + 3))) = 1 IF ickcon((tmcur * 6) + j + 3) < 0 AND chp(j + 2) <= 0 THEN plot(ABS(ickcon((tmcur * 6) + j + 3))) = 0 NEXT DEF SEG = VARSEG(ickcon(0)): BLOAD "data\enecon.dat", VARPTR(ickcon(0)) CALL checkcon(plot(), ickcon(), mx, my, picset()): CALL itemscon(plot(), itset(), picset(), iactive(), mx, my) xper(1) = xper(1) + xper(o) IF xper(1) > levelup(1) THEN hp(1) = hp(1) + 5: hp(1) = SMALL(hp(1), 200) chp(1) = hp(1) xper(1) = 0 IF levelup(1) > 20000 THEN levelup(1) = 32000: EXIT SUB levelup(1) = INT(levelup(1) * 1.5) END IF END SUB SUB sloth (speed(), inft#(), inftime(), plot(), pict(), picset()) IF RND * 100 > 50 THEN speed(1) = 2 IF TIMER - inft#(4) > inftime(4) THEN plot(63) = 0 speed(1) = 4 IF pict(1) = 3 AND picset(1) = 1 THEN speed(1) = 2 IF pict(1) = 0 AND picset(1) = 2 THEN speed(1) = 5 END IF END SUB FUNCTION SMALL (n1, n2) SMALL = n1 IF n2 < n1 THEN SMALL = n2 END FUNCTION SUB statusscr textcolor 15, 0 fontb = font: font = 4: CALL fontset(font, font()): font = fontb IF csr2 = 0 THEN textcolor 11, 0 dctr = 0: arg = 0: dia(0) = 0 sayx(0) = 8: sayy(0) = 8: sayw(0) = 27: sayl(0) = 5 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) IF csr2 = 0 THEN textcolor 15, 0 IF csr2 = 1 THEN textcolor 11, 0 sayx(0) = 8: sayy(0) = 76: sayw(0) = 32: sayl(0) = 2 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) IF csr2 = 1 THEN textcolor 15, 0 IF csr2 = 2 THEN textcolor 11, 0 sayx(0) = 8: sayy(0) = 120: sayw(0) = 32: sayl(0) = 6 CALL drawbox(sayx(), sayy(), sayw(), sayl(), dia(), dctr, 3, arg) IF csr2 = 2 THEN textcolor 15, 0 CALL fontset(font, font()) textcolor 16, 0 drawsprite big(), bobpal(), pale(1) * 16, 260, 15, 3 printstr "Health:" + STR$(chp(1)) + "/" + RIGHT$(STR$(hp(1)), LEN(STR$(hp(1))) - 1), 18, 16, 3 printstr "Seeds x" + STR$(seed(1)), 152, 16, 3 printstr "Experience:" + STR$(xper(1)) + "/" + RIGHT$(STR$(levelup(1)), LEN(STR$(levelup(1))) - 1), 18, 24, 3 printstr CHR$(2) + STR$(maim(csr(2))), 160, 32, 3 printstr CHR$(15) + STR$(fulpow(csr(2))), 160, 40, 3 printstr CHR$(10) + STR$(armsp(csr(1))), 160, 48, 3 printstr iname$(csr(2)), 18, 32, 3 printstr CHR$(7) + " " + arm$(guard(csr(1))), 18, 48, 3 printstr "Skill:" + STR$(cmax), 18, 56, 3 printstr iname$(csr(1)), 18, 40, 3 printstr "INVENTORY", 18, 64, 3 printstr "Eat a Seed", 110, 64, 3 textcolor 15, 0 printstr day$ + " " + DATE$, 10, 0, 3 textcolor 4, 0 IF csr(1) > 0 THEN printstr "^", ix(csr(1)) + 6, iy(csr(1)) + 25, 3 printstr "^", ix(csr(2)) + 6, iy(csr(2)) + 25, 3 textcolor 4, 0 FOR i = 1 TO arm + weps: IF plot(conptr(i)) = 0 THEN GOTO status4 loadpage buffer(), "data\item" + MID$(STR$(ipicset(i)), 2, LEN(STR$(ipicset(i))) - 1) + ".mxs" + CHR$(0), vpage loadsprite placer(), (ipic(i) + 1) * 500, 0, 20, 25, vpage drawsprite placer(), bobpal(), 11 * 16, ix(i), iy(i), 3 status4: NEXT i IF csr(1) > 0 THEN loadpage buffer(), "data\item" + MID$(STR$(ipicset(csr(1))), 2, LEN(STR$(ipicset(csr(1)))) - 1) + ".mxs" + CHR$(0), vpage loadsprite placer(), (ipic(csr(1)) + 1) * 500, 0, 20, 25, vpage drawsprite placer(), bobpal(), ipal(csr(1)) * 16, ix(csr(1)), iy(csr(1)), 3 END IF loadpage buffer(), "data\item" + MID$(STR$(ipicset(csr(2))), 2, LEN(STR$(ipicset(csr(2)))) - 1) + ".mxs" + CHR$(0), vpage loadsprite placer(), (ipic(csr(2)) + 1) * 500, 0, 20, 25, vpage drawsprite placer(), bobpal(), ipal(csr(2)) * 16, ix(csr(2)), iy(csr(2)), 3 IF csr2 = 0 AND csr(0) = 0 THEN textcolor 2, 0: printstr "INVENTORY", 19, 65, 3: textcolor 16, 0 IF csr2 = 0 AND csr(0) = 1 THEN textcolor 2, 0: printstr "Eat a Seed", 111, 65, 3: textcolor 16, 0 END SUB SUB takeitem (hp(), take, chp(), cmax, ap(), seed(), ic1(), ic2(), ic3(), ic4(), itset(), mx, my, plot(), infplot(), inftemp(), inft#(), ickcon(), picset(), iactive(), say(), timef(), inert()) hp(1) = hp(1) + hp(take) chp(1) = chp(1) + chp(take): chp(1) = SMALL(chp(1), hp(1)) cmax = cmax + ap(take): IF cmax > 20 THEN cmax = 20 seed(1) = seed(1) + seed(take): IF seed(1) > 4444 THEN seed(1) = 4444 ic3(take) = itset(((((my - 1) * 16) + (mx - 1)) * 8) + 136 + (take - 9)) ic4(take) = itset(((((my - 1) * 16) + 4 + (mx - 1)) * 8) + 136 + (take - 9)) FOR j = 1 TO 6: IF plot(infplot(j)) = 1 THEN inftemp(j) = 1 NEXT j IF ic1(take) > 0 THEN plot(ABS(ic1(take))) = 1 IF ic1(take) < 0 THEN plot(ABS(ic1(take))) = 0 IF ic2(take) > 0 THEN plot(ABS(ic2(take))) = 1 IF ic2(take) < 0 THEN plot(ABS(ic2(take))) = 0 IF ic3(take) > 0 THEN plot(ABS(ic3(take))) = 1 IF ic3(take) < 0 THEN plot(ABS(ic3(take))) = 0 IF ic4(take) > 0 THEN plot(ABS(ic4(take))) = 1 IF ic4(take) < 0 THEN plot(ABS(ic4(take))) = 0 CALL checkcon(plot(), ickcon(), mx, my, picset()): CALL itemscon(plot(), itset(), picset(), iactive(), mx, my): IF say(take) > 0 THEN playsnd say(take), -90.8858 FOR j = 1 TO 6 IF plot(infplot(j)) = 1 AND inftemp(j) = 0 THEN inft#(j) = TIMER IF plot(infplot(j)) = 0 AND inftemp(j) = 1 THEN inft#(j) = TIMER - inftime(j): plot(infplot(j)) = 1: IF j = 2 THEN plot(infplot(j)) = 0 inftemp(j) = 0: NEXT j IF timef(take) <> 0 THEN FOR i = 2 TO 4: inert(i) = inert(i) + timef(take): NEXT i END SUB SUB timeofday (timeoday, plot(), pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba()) timeoday = VAL(MID$(TIME$, 1, 2)) plot(27) = 0: pal$ = "2" IF timeoday > 5 THEN plot(27) = 1: pal$ = "0": needf = 1 IF timeoday > 17 THEN plot(27) = 0: pal$ = "2": needf = 1 plot(29) = 0: plot(30) = 0 IF timeoday > 10 AND timeoday < 12 THEN plot(29) = 1: pal$ = "3": needf = 1 IF timeoday < 1 OR timeoday > 22 THEN plot(30) = 1: pal$ = "4": needf = 1 IF needf = 1 THEN DEF SEG = VARSEG(mainpal(0)): BLOAD "data\palette." + pal$, VARPTR(mainpal(0)) IF hnb = 0 AND plot(27) = 0 THEN FOR i = 1 TO 4 chp(i) = chp(i) + nbhp(i) hp(i) = hp(i) + nbhp(i) ap(i) = ap(i) + nba(i) NEXT i hnb = 1 END IF IF hnb = 1 AND plot(27) = 1 THEN FOR i = 1 TO 4 chp(i) = chp(i) - nbhp(i) hp(i) = hp(i) - nbhp(i) ap(i) = ap(i) - nba(i) NEXT i hnb = 0 END IF IF plot(27) = 1 THEN plot(169) = 0 END SUB SUB toad (ranatemp, ranaset, ranapic, rananice, picset(), pict(), nice(), pale(), ptemp(), inft#(), inftime()) IF ranatemp = 0 THEN ranaset = picset(1): ranapic = pict(1): rananice = nice(1): ranatemp = 1 picset(1) = 2: pict(1) = 9: pale(1) = 26: nice(1) = 25 FOR j = 1 TO 12: ptemp(j) = picset(j): NEXT j charload FOR j = 1 TO 12: picset(j) = ptemp(j): NEXT j END IF picset(1) = 2: pict(1) = 9: pale(1) = 26 IF TIMER - inft#(5) > inftime(5) THEN plot(64) = 0: pict(1) = ranapic: picset(1) = ranaset: nice(1) = rananice: ranatemp = 0 END IF END SUB SUB wepdown (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) cant = 0: look = 0 IF y(o) + speed(o + (8 * (SGN(cfull2)))) > 170 THEN cant = 1: GOTO wd1 tempc = room(((INT(x(o) / 20)) + INT(((y(o) - 15) + 19 + speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 1) = 1 THEN cant = 1 tempc = room(((INT((x(o) + 19) / 20)) + INT(((y(o) - 15) + 19 + speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 1) = 1 THEN cant = 1 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND x(o) / 20 <> INT(x(o) / 20) THEN tempc = room(((INT(x(o) / 20)) + INT(((y(o) - 15) + 19 + speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 cant = cant + (tempc AND 2) tempc = room(((INT((x(o) + 19) / 20)) + INT(((y(o) - 15) + 19 + speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 cant = cant + (tempc AND 8) END IF IF boomf(o) = 1 THEN cant = 0 wd1: IF cant > 0 AND boomer(o + (8 * (SGN(cfull2)))) = 1 AND boomf(o) = 0 THEN boomf(o) = 1: htarg(o - 4) = o - 4: EXIT SUB IF cant > 0 THEN picset(o) = 0: acounter(o) = 0: boomf(o) = 0 IF cant = 0 THEN y(o) = y(o) + speed(o + (8 * (SGN(cfull2)))) END SUB SUB wepleft (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) cant = 0: look = 0 IF y(o) - speed(o + (8 * (SGN(cfull2)))) < 0 THEN cant = 1: GOTO wl1 IF x(o) - speed(o + (8 * (SGN(cfull2)))) < -19 THEN cant = 1: GOTO wl1 tempc = room(((INT((x(o) - speed(o + (8 * (SGN(cfull2))))) / 20)) + INT((y(o) - 15) / 20) * 16) * 2 + 1) / 256 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 2) = 2 THEN cant = 1 tempc = room(((INT((x(o) - speed(o + (8 * (SGN(cfull2))))) / 20)) + INT(((y(o) - 15) + 19) / 20) * 16) * 2 + 1) / 256 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 2) = 2 THEN cant = 1 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (y(o) + 5) / 20 <> INT((y(o) + 5) / 20) THEN tempc = room(((INT((x(o) - speed(o + (8 * (SGN(cfull2))))) / 20)) + INT((y(o) - 15) / 20) * 16) * 2 + 1) / 256 cant = cant + (tempc AND 4) tempc = room(((INT((x(o) - speed(o + (8 * (SGN(cfull2))))) / 20)) + INT(((y(o) - 15) + 19) / 20) * 16) * 2 + 1) / 256 cant = cant + (tempc AND 1) END IF IF boomf(o) = 1 THEN cant = 0 wl1: IF cant > 0 AND boomer(o + (8 * (SGN(cfull2)))) = 1 AND boomf(o) = 0 THEN boomf(o) = 1: htarg(o - 4) = o - 4: r(o) = range(o) * 3: EXIT SUB IF cant > 0 THEN picset(o) = 0: acounter(o) = 0: boomf(o) = 0 IF cant = 0 THEN x(o) = x(o) - speed(o + (8 * (SGN(cfull2)))) END SUB SUB wepright (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) cant = 0: look = 0 IF y(o) - speed(o + (8 * (SGN(cfull2)))) < 0 THEN cant = 1: GOSUB wr1 IF x(o) + speed(o + (8 * (SGN(cfull2)))) > 319 THEN cant = 1: GOSUB wr1 tempa = 19 + speed(o + (8 * (SGN(cfull2)))) tempc = room(((INT((x(o) + tempa) / 20)) + INT((y(o) - 15) / 20) * 16) * 2 + 1) / 256 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 8) = 8 THEN cant = 1 tempc = room(((INT((x(o) + tempa) / 20)) + INT((y(o) - 15 + 19) / 20) * 16) * 2 + 1) / 256 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 8) = 8 THEN cant = 1 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (y(o) + 5) / 20 <> INT((y(o) + 5) / 20) THEN tempc = room(((INT((x(o) + 19 + speed(o + (8 * (SGN(cfull2))))) / 20)) + INT((y(o) - 15) / 20) * 16) * 2 + 1) / 256 cant = cant + (tempc AND 4) tempc = room(((INT((x(o) + 19 + speed(o + (8 * (SGN(cfull2))))) / 20)) + INT(((y(o) - 15) + 19) / 20) * 16) * 2 + 1) / 256 cant = cant + (tempc AND 1) END IF IF boomf(o) = 1 THEN cant = 0 GOSUB wr1 EXIT SUB wr1: IF cant > 0 AND boomer(o + (8 * (SGN(cfull2)))) = 1 AND boomf(o) = 0 THEN boomf(o) = 1: htarg(o - 4) = o - 4: r(o) = range(o) * 3: EXIT SUB IF cant > 0 THEN picset(o) = 0: acounter(o) = 0: boomf(o) = 0 IF cant = 0 THEN x(o) = x(o) + speed(o + (8 * (SGN(cfull2)))) RETURN END SUB SUB wepup (o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter()) cant = 0: look = 0 IF y(o) - speed(o + (8 * (SGN(cfull2)))) < 20 THEN cant = 1: GOTO wu1 tempc = room(((INT(x(o) / 20)) + INT((y(o) - 15 - speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 tempc = -tempc * (tempc >= 0) IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 4) = 4 THEN cant = 1 tempc = room(((INT((x(o) + 19) / 20)) + INT((y(o) - 15 - speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 tempc = -tempc * (tempc >= 0) IF passall(o + (8 * (SGN(cfull2)))) = 0 AND (tempc AND 4) = 4 THEN cant = 1 IF passall(o + (8 * (SGN(cfull2)))) = 0 AND x(o) / 20 <> INT(x(o) / 20) THEN tempc = room(((INT(x(o) / 20)) + INT((y(o) - 15 - speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 tempc = -tempc * (tempc >= 0) cant = cant + (tempc AND 2) tempc = room(((INT((x(o) + 19) / 20)) + INT((y(o) - 15 - speed(o + (8 * (SGN(cfull2))))) / 20) * 16) * 2 + 1) / 256 tempc = -tempc * (tempc >= 0) cant = cant + (tempc AND 8) END IF IF boomf(o) = 1 THEN cant = 0 wu1: IF cant > 0 AND boomer(o + (8 * (SGN(cfull2)))) = 1 AND boomf(o) = 0 THEN boomf(o) = 1: htarg(o - 4) = o - 4: r(o) = range(o) * 3: EXIT SUB IF cant > 0 THEN picset(o) = 0: acounter(o) = 0: boomf(o) = 0 IF cant = 0 THEN y(o) = y(o) - speed(o + (8 * (SGN(cfull2)))) END SUB