'$DYNAMIC 'current library; DIRESTUF.QLB DEFINT A-Z DECLARE SUB restgraf (ptemp%(), picset%(), ranatemp%, speed%(), pict%(), plot%(), o%, x%(), y%()) DECLARE SUB runplot2 (mcur%, my%, mx%, ickloc%(), story!(), pcon%, item%()) DECLARE SUB dropitem (o%, iactive%(), picset%(), x%(), y%(), xyc%()) DECLARE SUB predire1 (plot%(), buffer%(), begin$(), ttp%, big%(), bobpal%(), mainpal%(), ttx!, tty!, spamc%, t#, fade%()) DECLARE SUB predire2 (spamc%, ttx!, tty!, t#, rate!, big%(), bobpal%()) DECLARE SUB charload2 (mcur%, my%, mx%, buffer%(), ty%(), picset%(), pict%(), nice%(), boss%(), name$(), o%) DECLARE SUB charload3 (b%, i%, xyc%(), item%(), x%(), y%(), aframe%()) DECLARE SUB moveaim (o%, cfull%, aframe%, aframe%(), acounter%(), aspeed%(), anim%(), y%(), x%(), mx%, my%, speed%(), cfull2%, cant%, look%, passall%(), room%(), boomf%(), boomer%(), htarg%(), r%(), range%(), picset%(), targx%(), targy%(), xaim%(), _ yaim%()) DECLARE SUB selfaim (o%, y%(), x%(), mx%, my%, speed%(), cfull2%, cant%, look%, passall%(), room%(), boomf%(), boomer%(), htarg%(), r%(), range%(), picset%(), acounter%(), kp%(), d%()) DECLARE SUB texttalk (y%, wsay%(), dia%(), dctr%, arg%, big%(), bobpal%(), pale%(), sayx%(), sayy%(), sayw%(), sayl%(), dpage%, vpage%, kp%(), saypx%(), saypy%(), set%) DECLARE SUB newscreen (plot%(), picset%(), pict%(), nice%(), targ%(), leap%(), dbefore%(), week$(), ts$, day$, timeoday%, pal$, needf%, mainpal%(), hnb%, chp%(), hp%(), ap%(), nbhp%(), nba%(), xyc%(), room%(), mx%, my%, set%, mapset%(), buffer%(), _ blocker%(), chroma%(), dpage%, vpage%, ickcon%(), itset%(), iactive%(), name$(), oddpal%, speed%()) DECLARE SUB corspeed (speed%(), pict%(), picset%(), plot%()) DECLARE SUB drawmap (room%(), blocker%(), chroma%(), dpage%, vpage%) DECLARE SUB loadrow (room%(), my%, mx%) DECLARE SUB loadscreen (set%, mapset%(), mx%, my%, buffer%()) DECLARE SUB showtext (set%, dia%(), dctr%, arg%, sayl%(), sayx%(), sayy%(), dpage%) DECLARE SUB debugg (w%, weapon%(), pict%(), nice%(), speed%(), x%(), y%()) DECLARE SUB equip (weapon%(), wnum%(), speed%(), nice%(), pict%(), pale%(), picset%(), csr%(), defence%(), guard%(), apic%(), apal%(), apicset%(), armsp%(), inice%(), ap%(), maim%(), nbhp%(), nitel%(), nba%(), niteh%(), flee%(), iflee%(), plot%(), _ ptemp%(), inft#(), tempinf#(), chp%(), tempchp%(), swim%(), ranatemp%) DECLARE SUB weirset (plot%(), picset%(), pict%(), nice%()) DECLARE SUB ctrlcode (delay%, oddpal%, timeoday%, plot%(), pal$, needf%, mainpal%(), hnb%, chp%(), hp%(), ap%(), nbhp%(), nba%(), font%, font%(), pale%()) DECLARE SUB sethepal (mainpal%(), pal$, needf%) DECLARE SUB animate (o%, cfull%, aframe%, aframe%(), acounter%(), aspeed%(), anim%()) 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(), plot%()) DECLARE SUB eventitem (dia(), sayx(), sayy(), sayw(), sayl(), font, ivname$(), ivpic(), ivpal(), ivset(), ivcon(), ivuse$(), plot(), kp(), rate!, vpage, placer(), bobpal(), font(), buffer%(), dpage) 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(), inftime%()) DECLARE SUB reaper (plot(), inft#(), inftime(), drain, doom(), bobpal(), x(), y(), btog(), dpage) DECLARE SUB fontset (font, font()) DECLARE SUB statusscr (font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot() _ , conptr(), ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic()) 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(), wbig, u) DECLARE SUB debugest (code(), code$, plot(), seed(), store, boss(), debug, nice(), picset(), bobpal(), x(), y(), hp(), cmax, target(), allitems, inft#(), pict(), beat%()) 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, big()) 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 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(-32 TO 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 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim() GOSUB tryup: GOSUB goup END IF IF keyval(kp(3)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turnright ELSE animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim() GOSUB tryright: GOSUB goright END IF IF keyval(kp(2)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turndown ELSE animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim() GOSUB trydown: GOSUB godown END IF IF keyval(kp(4)) > 0 THEN IF keyval(kp(5)) = 0 THEN GOSUB turnleft ELSE animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim() 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(83) > 1 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 ctrlcode delay, oddpal, timeoday, plot(), pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), font, font(), pale() IF (keyval(42) > 0 AND keyval(54) > 0) AND keyval(57) > 1 THEN w = getkey: debugg w, weapon(), pict(), nice(), speed(), x(), y() 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(), inftime()): 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, big()) 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: sethepal mainpal(), pal$, needf: fadetopal mainpal(), fade(): needf = 0 WHILE timing(0) = 0: WEND GOTO dire predire: predire1 plot(), buffer(), begin$(), ttp, big(), bobpal(), mainpal(), ttx!, tty!, spamc, t#, fade() 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 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() 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 END IF 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 predire2 spamc, ttx!, tty!, t#, rate!, big(), bobpal() 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 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 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() needf = 1: i = 500 END IF NEXT RETURN kback: knock(o) = knock(o) - 1: IF knock(o) = 0 AND chp(o) <= 0 THEN picset(o) = 0: dropitem o, iactive(), picset(), x(), y(), xyc(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): moveaim o, cfull, aframe, aframe(), acounter(), aspeed(), anim(), y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf() _ , boomer(), htarg(), r(), range(), picset(), targx(), targy(), xaim(), yaim(): GOTO wm3 IF homing(o + (8 * (SGN(cfull2)))) = 2 OR boomf(o) = 1 THEN animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): GOSUB seektarg: GOTO wm3 IF homing(o + (8 * (SGN(cfull2)))) = 3 THEN selfaim o, y(), x(), mx, my, speed(), cfull2, cant, look, passall(), room(), boomf(), boomer(), htarg(), r(), range(), picset(), acounter(), kp(), d() 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 seektarg: stempx = speed(o - 4) IF x(htarg(o - 4)) > x(o) THEN animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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 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 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim() 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: animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): RETURN turnright: d(o) = 2: animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): RETURN turndown: d(o) = 3: animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): RETURN turnleft: d(o) = 4: animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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: loadrow room(), my, mx: 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 loadrow room(), my, mx: 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 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() END IF END IF 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: loadrow room(), my, mx: 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: loadrow room(), my, mx: x(o) = 300 IF cant = 0 THEN x(o) = x(o) + speed(o): xyc(o) = 1 IF look = 1 THEN x(o) = 0 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() END IF END IF 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: loadrow room(), my, mx: 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 loadrow room(), my, mx: 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 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() END IF END IF 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: loadrow room(), my, mx: look = 1: x(o) = 300 + speed(o) tempa = (INT((x(o) - speed(o)) / 20) + INT((y(o) - 15) / 20) * 16) tempc = room(tempa * 2 + 1) / 256 IF (tempc AND 64) = 64 THEN IF swim(1) = 0 THEN cant = 1 IF (tempc AND 2) = 2 THEN cant = 1 tempa = (INT((x(o) - speed(o)) / 20) + INT(((y(o) - 15) + 19) / 20) * 16) tempc = room(tempa * 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 tempa = (INT((x(o) - speed(o)) / 20) + INT((y(o) - 15) / 20) * 16) tempc = room(tempa * 2 + 1) / 256 IF (tempc AND 4) = 4 THEN cant = 1 tempa = (INT((x(o) - speed(o)) / 20) + INT(((y(o) - 15) + 19) / 20) * 16) tempc = room(tempa * 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: loadrow room(), my, mx: x(o) = 0 IF cant = 0 THEN x(o) = x(o) - speed(o): xyc(o) = 1 IF look = 1 THEN x(o) = 300 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() END IF END IF 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 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: texttalk y, wsay(), dia(), dctr, arg, big(), bobpal(), pale(), sayx(), sayy(), sayw(), sayl(), dpage, vpage, kp(), saypx(), saypy(), set 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: texttalk y, wsay(), dia(), dctr, arg, big(), bobpal(), pale(), sayx(), sayy(), sayw(), sayl(), dpage, vpage, kp(), saypx(), saypy(), set 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 debugg2: store = 0: CALL debugest(code(), code$, plot(), seed(), store, boss(), debug, nice(), picset(), bobpal(), x(), y(), hp(), cmax, target(), allitems, inft#(), pict(), beat()) 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 CALL statusscr(font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), _ conptr(), ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic()) 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 font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() END IF IF keyval(kp(2)) > 1 AND csr2 < 2 THEN playsnd 48, rate!: csr2 = csr2 + 1 statusscr font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() END IF IF keyval(kp(3)) > 0 AND csr2 = 0 AND csr(0) = 0 THEN playsnd 48, rate!: csr(0) = 1 statusscr font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr() _ , ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() END IF IF keyval(kp(4)) > 0 AND csr2 = 0 AND csr(0) = 1 THEN playsnd 48, rate!: csr(0) = 0 statusscr font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr() _ , ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() END IF 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 font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr() _ , ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() END IF END IF 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(), buffer(), dpage) clearpage 3 statusscr font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() 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 font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() 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 font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() 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 font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() 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 font, font(), csr2, dia(), sayx(), sayy(), sayw(), sayl(), big(), bobpal(), pale(), chp(), hp(), seed(), xper(), levelup(), maim(), csr(), fulpow(), armsp(), iname$(), arm$(), guard(), cmax, day$, ix(), iy(), arm, weps, plot(), conptr(), _ ipicset(), placer(), vpage, dpage, buffer(), ipal(), ipic() END IF IF keyval(kp(15)) > 1 THEN playsnd 49, rate!: fadeto fade(), 0, 0, 0: clearpage 3 equip weapon(), wnum(), speed(), nice(), pict(), pale(), picset(), csr(), defence(), guard(), apic(), apal(), apicset(), armsp(), inice(), ap(), maim(), nbhp(), nitel(), nba(), niteh(), flee(), iflee(), plot(), ptemp(), inft#(), tempinf#(), chp(), _ tempchp(), swim(), ranatemp needf = 1: o = 1: CALL align(o, x(), y(), speed()): setkeys: RETURN END IF copypage 3, dpage GOTO status3 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) 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 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 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 GOTO pu2 END IF IF keyval(kp(2)) > 1 AND ptr3 = 0 AND ptr2 = 0 THEN playsnd 48, rate!: ptr2 = 1 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 GOTO pu2 END IF IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) AND ptr3 = 0 AND ptr2 = 0 THEN playsnd 49, rate!: ptr3 = 1 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 GOTO pu2 END IF 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: restgraf ptemp(), picset(), ranatemp, speed(), pict(), plot(), o, x(), y(): 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!: 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 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!: 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 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()) loadstock inum(), product$(), spict(), spale(), spicset(), scure(), chup(), liup(), sset1(), sset2(), shx(), shy(), apear1(), apear2(), plot(), ptr, stock 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 END IF IF keyval(kp(15)) > 1 AND ptr3 = 1 THEN playsnd 48, rate!: ptr3 = 0 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 END IF pu2: GOTO purchase2 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, big()) 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 newscreen plot(), picset(), pict(), nice(), targ(), leap(), dbefore(), week$(), ts$, day$, timeoday, pal$, needf, mainpal(), hnb, chp(), hp(), ap(), nbhp(), nba(), xyc(), room(), mx, my, set, mapset(), buffer(), blocker(), chroma(), dpage, vpage, _ ickcon(), itset(), iactive(), name$(), oddpal, speed() END IF 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 WHILE timing(0) = 0: WEND 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 animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): GOSUB tryup: GOSUB goup IF pdir = 2 THEN animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): GOSUB tryright: GOSUB goright IF pdir = 3 THEN animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): GOSUB trydown: GOSUB godown IF pdir = 4 THEN animate o, cfull, aframe, aframe(), acounter(), aspeed(), anim(): 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, big()) 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 WHILE timing(0) = 0: WEND 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, big()): setvispage dpage: CALL bigsprite(buffer(), nice(), boss(), wbig _ , u) pcon = pcon + 1: RETURN rp7: runplot2 mcur, my, mx, ickloc(), story!(), pcon, item() copypage 2, dpage: CALL allsprite(vframe(), d(), af(), aframe(), picset(), order(), boss(), btog(), bobpal(), pale(), x(), y(), placer(), ty(), dpage, big()) 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 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 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 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 b = 9: mcur = ((16 * (my - 1)) + mx) 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 charload3 b, i, xyc(), item(), x(), y(), aframe() cl5: aframe(b) = 1: b = b + 1: NEXT i charload2 mcur, my, mx, buffer(), ty(), picset(), pict(), nice(), boss(), name$(), o END SUB