DECLARE SUB strike () DECLARE SUB itemscon () DECLARE SUB converse () DECLARE SUB clock () DECLARE SUB allsprite () DEFINT A-Z DECLARE SUB wepmove () 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 () SUB allsprite 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 clock 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 converse GOSUB converse EXIT SUB 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: drawbox dpage: 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 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 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 GOTO co7 IF (keyval(kp(12)) > 1 OR keyval(kp(13)) > 1) THEN 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 drawbox dpage: 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 END SUB SUB itemscon tmcur = ((my * 16) + mx) IF itcon((tmcur * 8) + 0) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 0))) = 0 THEN picset(9) = 0 IF itcon((tmcur * 8) + 1) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 1))) = 0 THEN picset(10) = 0 IF itcon((tmcur * 8) + 2) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 2))) = 0 THEN picset(11) = 0 IF itcon((tmcur * 8) + 3) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 3))) = 0 THEN picset(12) = 0 IF itcon((tmcur * 8) + 4) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 4))) = 0 THEN picset(9) = 0 IF itcon((tmcur * 8) + 5) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 5))) = 0 THEN picset(10) = 0 IF itcon((tmcur * 8) + 6) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 6))) = 0 THEN picset(11) = 0 IF itcon((tmcur * 8) + 7) > 0 THEN IF plot(ABS(itcon((tmcur * 8) + 7))) = 0 THEN picset(12) = 0 IF itcon((tmcur * 8) + 0) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 0))) = 1 THEN picset(9) = 0 IF itcon((tmcur * 8) + 1) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 1))) = 1 THEN picset(10) = 0 IF itcon((tmcur * 8) + 2) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 2))) = 1 THEN picset(11) = 0 IF itcon((tmcur * 8) + 3) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 3))) = 1 THEN picset(12) = 0 IF itcon((tmcur * 8) + 4) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 4))) = 1 THEN picset(9) = 0 IF itcon((tmcur * 8) + 5) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 5))) = 1 THEN picset(10) = 0 IF itcon((tmcur * 8) + 6) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 6))) = 1 THEN picset(11) = 0 IF itcon((tmcur * 8) + 7) < 0 THEN IF plot(ABS(itcon((tmcur * 8) + 7))) = 1 THEN picset(12) = 0 FOR i = 1 TO 4 IF iactive(i) = 1 THEN picset(i + 8) = 0 NEXT END SUB DEFSNG A-Z SUB runplot DEFINT A-Z DIM seed(16), story!(2000), mainpal(767), fade(1536), xyc(16), plotos(512) GOSUB runplot EXIT SUB runplot: t# = TIMER setkeys CALL wepmove copypage 2, dpage CALL allsprite CALL clock 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: 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: RETURN IF story!(pcon) = 9 THEN pcon = pcon + 1: o = story!(pcon) + 4: CALL 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: CALL 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 IF keyval(59) > 0 AND keyval(60) > 0 AND keyval(61) > 0 THEN plotos(plcur) = 0: RETURN WHILE t# + delay! > TIMER: 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): t# = TIMER copypage 2, dpage o = oo aframe = aframe(o) IF pdir = 0 THEN BEEP 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 CALL wepmove allsprite clock printstr rtime$, 320 - (8 * LEN(rtime$)), 8, dpage printstr STR$(seed(1)) + CHR$(19), 245 - (LEN(STR$(seed(1))) * 8), 8, dpage WHILE t# + delay! > TIMER: 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: allsprite: setvispage dpage: bigsprite 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: allsprite 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 END SUB SUB strike GOSUB strike EXIT SUB strike: IF o - 4 > 1 THEN charge = 0: GOTO sk1 cfull = 0 charge = INT(TIMER - charge#) IF charge > ap(1) THEN charge = ap(1) IF charge > cmax THEN charge = cmax IF charge = ap(1) THEN cfull = 1 sk1: 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 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 sethtarg sk3: END IF RETURN END SUB DEFSNG A-Z SUB wepmove DEFINT A-Z GOSUB wepmove EXIT SUB 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 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 d(o) = 1 THEN GOSUB animate: wepup IF d(o) = 2 THEN GOSUB animate: wepright IF d(o) = 3 THEN GOSUB animate: wepdown IF d(o) = 4 THEN GOSUB animate: wepleft 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 GOSUB hitit wm2: END IF NEXT aframe(o) = aframe wm1: NEXT: RETURN END SUB